1。建立两个目录。, \: f+ D! O8 m% b* o' F& I/ t. o- W9 m
; W* U0 ^* S+ x0 B' k
* b# p a K7 h4 r) w 建立第一个目录 E:\my_first_ug,在这个目录下建立两个新的目录:E:\my_first_UG\application和E:\my_first_UG\startup。( C4 S% h: @2 ]$ P' C8 M) r
+ O6 H. \5 J( [- U
$ E0 O W" J! ~# n+ p' j 建立第二个目录E:\my_source,用存放你的源代码。 2。设置环境变量。2 a' u$ [. M; G+ M: l! z' T+ d
' y6 |( T7 S1 `/ Y- b# p+ o再Windows中设置一个新的环境变量:UGII_USER_DIR=E:\my_first_UG。 3。打开UG,进入UIStyler应用(在Application菜单的最后)。 4。设计一个对话框。
3 V/ {$ e: r/ m3 V' ]/ E7 o5 d
* H3 B5 `7 z( V5 l P. o" b$ Q+ }/ Q H
1)在"Dialog Title"一栏填入:First Dialog,按Apply(每次输入完成后,都要按Apply,为避免啰嗦,以后不再提及)。1 J4 x* H& |4 j9 a3 l% |* U- B. I
8 S" M9 W6 B- m& B8 n* F
2)在"Cue"一栏输入:%……%¥%¥¥##*%*(*(*—*—((,什么都行,呵呵。
7 T8 X2 q8 P) k; N5 \1 X+ k+ R* M* R3 U8 H8 R; V8 G8 X
3)在"Prefix Name"中,把CHANGE改为MY。
, f) f3 F$ u( i: S8 o; ?! t1 \
5 T( R+ W# Z6 S5 ~+ A4)加入四个控件。String,Push Button,Label和Single Select List
' }. e2 m2 A/ F4 G& L" F4 _6 N9 H7 @' _! N% N
编辑对话框的各个控件。
) B V( P L( S# G+ a5 K2 S
3 M6 w7 H# T& s) U; s1 |$ A
! K1 ]& @* A! Z9 A% x% r7 J1)改变String控件的标题,标识和长度。$ h) x6 d6 u: z: S6 G
9 \) f; G. U- N" U* q2 i
X$ z* E! F2 N/ {, Z9 f, p' c0 Z
Label “String” -> “Input an item”. ( t5 T- D' l) P8 ]
Identifier "STR_0" -> "ITEM" * B* @. f: m& ?3 C8 e- {0 i/ z, |0 t7 M
Width in... 0 -> 20 2) 改变Push Button控件的标题,标识和回调函数的名字。
- ?% ?+ U& G9 f* X7 g. \4 P* Y8 n6 Q% S! a
* s+ b. E3 T E4 @$ K/ s+ HLabel "Push Button" -> "Import" 4 O5 B. M6 u4 V) y: x r/ K4 E7 y$ `
Identifier "ACTION_1" -> "IMPORT" " a0 | z0 W/ m0 q* X
callbacks "action_1_act_cb" -> import_cb
; h& N$ @' a" L
. A* S7 a5 E0 m& }# _把"Creates Dialog"激活。
: p5 \/ N% C: L g, E$ o4 L
6 @' W6 X+ d( A& m# U1 K+ p 3)改变Label控件的标题和single select list 的标识。改变single select list可见项的个数。
+ ?4 Y( c5 r/ y% b! f
# c+ Q. v& ]9 i+ P T2 t) U) L; |
. `3 Q$ E2 j$ E- n o- ]; K+ ULabel Label -> Items List
6 [ t' ^ X: ~! nIdentifier "LIST_2" -> "ITEM_LIST" ( L3 \1 ]: B- _" z* }
Number 3 -> 6., V6 V) k! g+ G
& w3 z0 O& [8 e% s8 m; Z' w- t3 h O' d* m/ }% q4 n
6. 保存对话框。9 _, [; A) x$ s
2 Q) `1 |7 }: U1 i& f+ ~% t点击save图标,把对话框保存在E:\my_first_UG\application目录下,
8 |9 ]. R0 \3 R( z文件名位first_dlg,生成三个文件。4 [) k6 @1 ]9 _; \ w: x
! n- J; L! Z ?$ x8 D3 w1 Q(现在可以推出UG乐)。
9 W# D. ^5 ?# M$ {( Z1 p8 i4 @: `; |# L- ~4 n: F3 m
2 n7 s) T2 n2 r
7。建立一个vc的工程。
2 j/ m$ H( W- ]! I$ z) m v6 k0 G5 F v! n
, o! i& z1 y; e; `& z. j8 S- J+ J1)把\application下的*.c和*.h文件移动到E:\my_source目录下(文件可以改名字)。* I" Y& L7 s2 k( h9 ~
% ]- y y8 l# X4 m2)建立一个新工程,选择Win32 DLL。. O, u: i) H* ^/ G: \- d
% K: ]6 v+ v# X6 n# l- d3)把c源文件和头文件加入到工程中。9 T* ]& i# M3 M$ |5 q
/ _: J6 e' @ g8 W$ v4 V, k5 r. J
8。设置vc的环境。
5 c8 z8 D& R8 J. D) z6 g
|9 z1 y: Z2 Y. n3 J1 w2 w/ E
# n) `: J) R7 O3 b5 X gProject -> Settings -> C/C++ -> Category ....加上头文件。 Project -> Settings -> Link.... : s# N8 C4 J3 A- L. k
改变输出文件名,加入连接库文件(ug17之前的库名字不同) Tools ->Options...->Directories * a+ K& n' _; d0 D% h; f
; G( W/ B- H+ R- g- X
Include files 和 Libray files 加入UG UFopen的路径。 打开first_dlg.c文件,找到menu script样板的位置。. w! M) P5 g' J# J
" j5 P+ |0 s8 D0 F j! M* Z+ |
复制这个样板到一个空的文本文件。
0 B @. E# ]; v2 Z! H; O+ A
% h. _: W' r: J W把文件保存到E:\my_first_UG\startup目录下,文件名位first.men(注意后缀)。
. a4 R+ c8 i# A) }% b+ s$ y; H5 f; U- M D/ w$ r8 u
找到 #ifdef MENUBAR_COMMENTED_OUT,
7 ?+ }8 b* G' A6 P3 `4 H+ g3 N# N( m0 |
把他和他对应的 #endif 删掉。 找到#ifdef DISPLAY_FROM_USER_EXIT,
* k, ?8 {) S+ C8 V1 f* D$ S/ B/ q3 q" {, i; b5 K# K4 \0 R3 L) J6 _% l
把他和他对应的#endif删掉。$ @! @: F! E4 G
& v4 l2 i& H" W1 D6 H
找到 <enter a valid user exit here>,
+ V e, w& S8 m1 H9 U" j把它改为ufusr。 现在可以编译连接,试一下了,4 a/ H( X! y; Q2 Q: y
呵呵。 运行UG,点击菜单。啊!!怎么不行??秀大了,呵呵 打开first.men文件,把ACTIONS后面的名字改为libmy_first(DLL文件的名字)。 现在一个空架子已经打起来了。剩下的就是要加入自己的内容。 就上面的例子讲讲下面这些回调函数(看清华那本书搞得我头大)谢谢! q4 `# |7 A! G6 V% |' T
好吧,下面将一下这些回调函数的应用。$ H! V' U4 {9 T
+ v `4 Q/ T2 o, X7 u
- g X* x; Y7 K4 g& TApply_c,Ok_cb和cancel_cb分别是点击OK, APPLY和cancel按钮时,执行的动作,它们的应用在后面的例子中介绍。8 m V6 d4 _3 G* x4 |# F' G
* u% U! ?) @! [8 Z
constructor 和 Destructor本分别是对话框显示之前和退出之后执行的动作。
m. L* u$ z$ n3 R F5 n7 g# Q! E0 I( c) S
在对话框显示之前,可能需要进行很多操作,譬如说:设置对话框的选择方式,就是说在对话框打开后,用户可以选择什么物体,面,实体等。$ {, u: k( W' R% i0 \; o: Q5 V( F1 F
( Z( `$ A: q2 c. n" m, P# J在对话框消失之后,也需要进行一些操作,譬如说:释放申请的空间,把加亮的体恢复等。下面我就用例子介绍一下这些回调函数的应用。
8 I# {# ^3 s8 _1 q8 a( k) v, z添加回调函数。
% H* u2 N/ S) \: @- n; }# @* _% e$ }& d5 X9 ^2 C
首先进入UG,UIstyler,打开前面生成的对话框first_dlg.dlg,在相应的位置添加几个回调函数的名字(每一个都要回车或按Apply)。& T G- C2 V9 n' Q: j
: p! I+ ^4 X1 C: p* ?7 @8 m! q4 m
$ I5 m5 o ^ J/ hcancel_cb # ?4 c+ L& r0 y0 S/ ]
construct_cb 6 }+ g/ Y+ N/ K' {) m2 P! q& `
destruct_cb 4 `4 S8 q# S% |2 | h2 B
ok_cb 6 r" Y; t# g* c ~
, T& L8 P Y7 ?3 a4 x! D* h为“Input an Item”田家一个回调函数input_cb。8 _0 \8 T6 L6 }8 B
* `& j( n- @$ [$ N* c& l t* u; r
保存后,退出。6 a7 B3 p$ o: c+ w; V
时代码已经改变,要把相应的改变加到vc的工程中去,(推荐一个工具Araxis Merge)。 ZZZ斑竹辛苦了!: H0 s. s+ g' t! o" A4 _
1 g0 E/ N; f+ ^/ v: k6 o 小弟正要搞一个UG二次开发的项目,以后有问题还请多多指教了:) I5 @1 J+ e" s1 h6 e
" d6 ^/ E, V/ e7 E7 T
请问工具Araxis Merge哪里可以得到,可以简单说一下怎么用的吗,我VC还不太熟,谢谢
J# X* p3 i5 x7 N; Z
, O& S: h4 R6 {我的EMAIL:wgwang_sz@163.com
& m7 h0 k& J6 f; J% u# i8 W$ c& G QQ:43801603 $ U4 d" }7 y+ Q) g( i
打开first_dlg.c,找到construct_cb的位置,在其中添加以下代码。
5 L' f3 P8 h! l% i3 M1 Z
/ K2 `2 p) S' d* o3 h: B ]/ {/ }- F6 ^& f
int MY_construct_cb ( int dialog_id,
% l$ z8 B. A4 u void * client_data, ) R u0 n7 W3 m) `' t' |1 L
UF_STYLER_item_value_type_p_t callback_data)
. \+ B: C6 h3 O8 C8 d3 i) @# M+ Q" l{
9 w; W. L. [4 i( x' U int irc; " j, m& R7 R! d6 b% B
UF_STYLER_item_value_type_t value; * k5 H6 ?! V% V$ r+ ?
char string[133] = "Input a string here.";
5 }# H& w% K$ S" }4 N% @2 n7 q8 k' z4 h7 Y2 R- ^
/* Make sure User Function is available. */ ! d: G( \- \: t& z( s
if ( UF_initialize() != 0) 3 e: f. c0 f6 T" E
return ( UF_UI_CB_CONTINUE_DIALOG );
) A# J. Y$ N3 f3 C3 U) [# ~( a" Y) ]% e0 K7 L m
value.item_id=MY_ITEM;
* x0 }7 J% I7 d1 h value.item_attr=UF_STYLER_VALUE; - o& x/ ^( t- I- y
value.value.string = string;
, q8 ?4 l3 i9 |% ^ irc = UF_STYLER_set_value(dialog_id, &value); " s5 I4 Q' [ K, Z1 r* h8 l
if(irc) . Q- M9 e$ b, h8 ^# @
{
2 ]7 U5 r) [. s' Q' U4 Y: A1 L char message[132];
/ v5 e2 H7 ?$ q! X) {
; j* y: j3 a7 f' I% G9 i. e9 ^) k UF_get_fail_message(irc, message); 8 }! Y; ^% `3 X9 ~7 a$ k
}7 e4 ]3 g. G) J9 U5 S0 S
: i' b. O e, ]2 a$ g+ l/ cUF_terminate (); 找到input_cb的位置,假如下面的代码。. R$ e4 X, t1 N+ g- Z0 X v
! `4 [1 M9 F4 f4 z* T4 ?( H4 r* M0 r& a& i! Q" @% l
int MY_input_cb ( int dialog_id, M# x* {6 C. I, _- Y, `9 R
void * client_data,
# C2 t* `3 M3 n- ~4 C UF_STYLER_item_value_type_p_t callback_data) 3 x& C4 O: T8 H5 P$ | C' o
{
* i$ u' J2 f6 C( y+ F6 Y) _8 r7 F UF_STYLER_item_value_type_t value; ) ~9 W# O$ e. @, j. @; O& \% I
int irc; 0 p/ l: J& I. r* \' \ Z
char string[133];
( H1 t1 L2 ~9 b' D8 Z& m1 G) V2 k7 Z. y8 J
/* Make sure User Function is available. */
/ y: @5 g: t: }! e: _1 R( d if ( UF_initialize() != 0) * H; X& ~8 b1 e
return ( UF_UI_CB_CONTINUE_DIALOG ); . e9 _& b/ o$ @) o0 B
2 }) j4 v, K7 G+ S2 C% W9 | /* read your input */
, v% m0 v) Z2 M value.item_id=MY_ITEM; ( N4 q& K! X+ y5 E: n) U+ J
value.indicator=UF_STYLER_STRING_VALUE; " _+ ^. n1 ]- E- q/ Z
value.item_attr=UF_STYLER_VALUE;
; N4 B7 G; j$ C4 B, X( E) S UF_STYLER_ask_value(dialog_id, &value);
- B6 i0 t! |* u+ p0 \6 }1 Y) l! o2 ] w+ X/ F
strcpy(string, value.value.string);
7 ~: D" p5 [' t! A) | UF_STYLER_free_value(&value);
) Q6 s2 J& m7 O0 A. O% u ~
5 {; C. m; _ u; c3 q, \2 l /** add it to the single list */
2 j; k5 H! {6 w3 r- Q value.item_id=MY_ITEM_LIST; + H4 j- f4 {" W( j) p
value.item_attr = UF_STYLER_LIST_INSERT;
3 T: l! w; M: k7 }; S value.subitem_index = UF_STYLER_NO_SUB_INDEX;
% Z' ?, D) \- Y$ A& v value.indicator = UF_STYLER_STRING_VALUE; 7 J) v4 U% ]$ P# {8 w2 A
value.value.string = string;
4 x* Y0 P, j, X, ^ irc = UF_STYLER_set_value(dialog_id, &value);
6 N' D( O* t2 i) p0 P* U. O if(irc)
! W) u4 Q7 t0 X {
2 ~4 k w5 ]0 X9 F v! E char message[132]; + J8 u a$ L3 U! H- n! }+ \7 M
: v* S5 K# K$ r5 s UF_get_fail_message(irc, message); 0 S# W6 |# c- f0 \! b: Z
} UF_terminate (); . }. f% p! s$ i) M( o+ P
, }7 e1 p9 T' P 再ok_cb假如下面的代码。/ F& C1 X; v4 Z
* J; f" D0 P3 O4 f
; k) C5 @" |, X' ^6 _- c% {7 M int irc, i; 9 N) n2 `9 T H+ |: |/ C* R9 b
UF_STYLER_item_value_type_t value;
: ]. M8 p5 ^/ G f0 T2 P6 Q' K$ ]( Y7 h Z( y7 }& I! p! h8 c4 E# u
/* Make sure User Function is available. */ 4 b) v6 U, B9 l5 |! Q( x2 e# Q8 o
if ( UF_initialize() != 0) ) c: k' g5 }" p* D' G
return ( UF_UI_CB_CONTINUE_DIALOG );
6 b9 o* @3 [/ E# M% c2 m0 E, M% u: D9 G% f6 F6 n
UF_UI_open_listing_window();
% y0 r$ M( }0 H3 z$ P/ s) @! D K4 y) g* v- h! j7 t+ q
value.item_id=MY_ITEM_LIST; 7 W: A* ~% f0 H6 |- N
value.indicator=UF_STYLER_STRING_PTR_VALUE;
! K; A4 l+ p% U3 j. o value.item_attr=UF_STYLER_SUBITEM_VALUES; 7 N% [% F) |3 {9 @
UF_STYLER_ask_value(dialog_id, &value);
2 Y7 F. a. S+ N/ B for(i = 0; i < value.count; i++) . l/ \! n; O/ T: J# T9 K9 ]
{ 9 o3 G O5 Y5 P) ?) E" P+ q1 T# \
UF_UI_write_listing_window(value.value.strings); # r! K2 x$ A+ o' e* L& H2 p9 ^2 h
UF_UI_write_listing_window("\n");
2 j7 c. o+ c5 D8 S3 `}
# p+ j) f* f7 ^: |. r y5 A, g) ~7 P" V' P% W- E
# H' u7 ]6 j$ k4 g# m% w6 l4 i UF_STYLER_free_value( &value );
1 ?3 t5 b: q- J3 O. Y; j UF_terminate (); 至此,我们介绍了几个回调函数的简单使用方法,下面看一下运行结果。% M& _2 l, D b" O, s. |1 ~" b7 |
# _5 `' k, f' Y( L+ [$ ]7 n刚打开对话框的结果。
9 b V' k3 @4 O( M1 U4 ]# s$ i4 ]! d T' B& v
输入一个字符串,回车。它显示在下面的single list中。9 l# O3 u9 }* q2 ^2 u) t- J$ S
- P i. G6 W& z4 D# v! `- ^0 R" v
对不起,a minor change on code. 4 y3 M/ r+ h" ]" |9 B
int MY_ok_cb ( int dialog_id, . R2 u: g X9 ` c8 @$ X2 W
void * client_data,
2 q6 ] E/ a6 X) K UF_STYLER_item_value_type_p_t callback_data) 0 g! x$ ^4 r% h, q. ^1 ?% G$ o
{ + P; t1 {0 \7 R9 q
int irc, i;
5 E5 Q1 T( y4 X; Q: f: |7 Y1 X( [3 O UF_STYLER_item_value_type_t value;
# a! P3 ^# e3 u- |4 q
3 c: p/ |" Q6 d& Y6 L! a, X) z3 H2 q5 `. r' t: l' F' M' t
/* Make sure User Function is available. */ - C" R* l m) h% u9 q# R( p) H
if ( UF_initialize() != 0)
" W0 x% a) k( N/ E return ( UF_UI_CB_CONTINUE_DIALOG ); / V# B0 ?# T, U! L; W" o8 M# u5 [
# r7 B/ R1 C n4 K& O UF_UI_open_listing_window();
2 c/ |* g9 w$ K5 [
, `1 E+ i) d% m& V* s% _ value.item_id=MY_ITEM_LIST;
5 R2 r1 Z: l P) w" J9 y0 ` value.indicator=UF_STYLER_STRING_PTR_VALUE;
6 C. A; m7 q; a4 S- Q$ O value.item_attr=UF_STYLER_SUBITEM_VALUES;
: ]6 c) e, s# h; i: s irc = UF_STYLER_ask_value(dialog_id, &value);
+ }) q! Z" J7 ^; E4 K3 R, e8 J for(i = 0; i < value.count; i++) ' P; A5 `! v- d3 K1 H H
{
4 Y8 `) X1 D5 O% m" z, ?% M s UF_UI_write_listing_window(value.value.strings);
8 t9 \5 }3 ]& M9 p UF_UI_write_listing_window("\n"); 0 Q! \; k2 Y! R4 M9 v( B# ^
} 1 `* O k( S" h1 M! K
UF_STYLER_free_value( &value ); & ]7 x# G' k5 _' l" V
点击Ok后,所有的字符串显示在list window 中。
* J; _ Y b# U: j' W 清华书中uistyler部分的程序去掉了原来的注释,使得简单的事变复杂了。2 _: y) n7 m' [, o$ U8 P
( Y$ l1 W/ F% E, n3 R7 ]& [
我没有在ug/NX下开发。在18版中,建立VC工程时可以选择UG APPLICATION WIZARD,那么后面的设置就可以变简单了。 Lcfq ug/NX建立VC工程时有Ungraphics NX AppWizard V1也很好用。 to eastcamel
. k( |; Y9 E6 e. H$ r.men可以执行很多类型的可执行程序,比如.exe,.dll, .dlg .macro等
* H+ D# C4 ?4 A
+ v* i5 c' @; q) Gaction没必要一定是my_first.dll,这是他给你的一个例子,如果你用UISTyler生成了my_first.dlg,那么你就可以在action后写上my_first.dlg。
# Q- N. Z( A6 X) ~- M9 W( S8 {+ A5 e, W# H6 G% z
4 f& g9 g' ]* K V* Jto visionphone
2 v( y3 V1 o9 A) ~5 o论坛是交流问题的地方,不是教学,, p, I) B; f$ D* t5 k
& d5 F- ?/ Q$ H关于menuscript开发下拉菜单,包括菜单的级联在清华那一本书上已经很清楚了,还能找得出比他更清楚的资料吗?另外menuscript已经简单得不能再简单了,还能找得出比他更简单的编程方法吗? 现在在试一个把物体平移的功能.我看了UG/open 里面的函数帮助,也仔细研究了清华出的那本书,他里面是先将所选对象的坐标矩正进行正则化处理,然后为正则化矩正给出一个新的ID,最后创建一个零时坐标系.然后就用uf5943,uf5947两个函数进行平移了. 5 g$ ]6 x- H" E# ~9 C6 M
而现在我自己做的时候,也采用上面相同的步骤,但我调试时发现我选取的对象没有矩阵ID,当然也就得不到坐标系统矩阵.我后面采用获取工作坐标系的ID,然后获取其矩阵ID的方法,但调试后仍得不到平移结果. & t: W8 a8 m, Y3 w1 {, G
请指教:下面是我的一段代码;
9 F: ^* b; Q* x. Ci_ret=UF_CSYS_ask_wcs (&wcs_id ); 0 u9 n% i- e. K1 ?" P$ q
UF_CSYS_ask_csys_info (wcs_id,&matrix_id,csys_origin); 0 [: n- @$ e5 u9 E+ | ?
UF_CSYS_ask_matrix_values (matrix_id,matrix_values);
, B9 H8 P% S6 H UF_MTX3_ortho_normalize(matrix_values); 6 E3 w- K9 h5 s7 j( L
i_ret=UF_CSYS_create_matrix(matrix_values,&new_matrix_id); 3 `& Y( ~- ?/ {; R* ~
i_ret=UF_CSYS_create_temp_csys(csys_origin,new_matrix_id,&temp_csys_id);
+ Q3 E9 M- r7 }+ y$ x
8 C s/ j. s- D$ M( L. p! R" @ FTN(uf5943) (Dxyz,D_target ); : d' N- _5 _( z' i$ E
FTN(uf5947) (D_target,&temp_csys_id,&one,&one,&zero,&two,NULL,NULL,&resp);
# t B" j U3 n. c) n w+ t S
$ N( N: V+ @% z8 A9 A程序的前后两段好像没有什么联系?Dxyz和D_target在哪赋值? 平移的例子
; o& b( @0 d* B" f: A; q6 [" @% N% j1 t
8 \7 ]% d+ X2 \7 [( p2 ]; N4 Q& l
double matrix[16]; ' K% x/ t( p9 h, N* S7 [) n4 }) _
int count=1, copyFlag=2, layer=2, curveFlag=2, rtState;
, p/ X1 D4 e5 o/ Y* `9 D
1 p2 w( G f& J, T, f; g UF_MTX4_identity( matrix ); , g( Q4 M( d4 {8 u
UF_MTX4_edit_translation( matrix, vec ); 2 e+ b) ~0 Q0 M1 c. R, B2 U
" o2 Y0 L8 c: i0 g0 M: i; L! q FTN(uf5947)(matrix, &srcObj, &count, ©Flag, &layer, 0 r, Z1 j2 ]" J6 v I P f3 J4 G
&curveFlag, copyedObj, NULL, &rtState); / c% |. Z* | P
0 X. i5 i1 B4 D; ?% x! \0 ]+ \
return rtState; 我刚刚接触UG的二次开发,按以上过程试了一下(只是在创建工程时,选择的是UG/OPEN WIZAND V18),结果调试通过,只是运行时,马上出来对话框,菜单却找不着,恳请解答一下! 1 `; m/ f* R2 V' J% ]9 O; I# j& L1 i
找到文件UGII\menus\custom_dirs.dat添加用户路径3 A! E# z* N" z; E
O/ T P; |0 \2 c& z; L6 ^( Z& O# Customer modifications can follow on here
; G+ n9 w4 E( @& t你的starup所在位置路径比如e:\project_insession\standard_part;' x& G. @2 g1 P( q
[) ?+ Q @ j
也可以在UGII\ugii_env.dat内把#UGII_USER_DIR=${HOME}改为UGII_USER_DIR=你的starup所在位置路径比如e:\project_insession\standard_part。 在平移的问题中,Dxyz是一个Input量,它定义了对象在x,y,z方向上的平移值。5 M# [ ^% x6 F0 r& |
V( `5 z, u! H* ?
double Dxyz[3]={50,80,0}; " u6 U: O% \. A( o5 @( r2 k
至于D_target,它是uf5943函数中的一个输出量,是uf5947函数中的一个输入矩阵值,其中就包含了Dxyz定义的平移量。4 E2 e$ s1 Q9 D4 w5 |
: Q4 m) I+ R+ o
FTN(uf5943) (Dxyz,D_target ); $ a6 |2 |# T1 w: w
FTN(uf5947) (D_target,&temp_csys_id,&one,&one,&zero,&two,NULL,NULL,&resp); 0 ^$ x) S. t1 J) w0 V# P
后来我跟踪调试了resp的值,显示为0,表示成功了。但我用UG里面的工具检查一点的坐标,却一点变化也没有。# [3 G$ p1 Z& I2 V4 U. ~. R% j& j/ u
$ H9 _ c9 Z# F" M! k后来我调试了ZZZ兄的一段代码,发现copy是成功的,但我定义为move,即把UF_MTX4_identity( matrix ); % m; B8 p% a1 n$ i% x' D7 ?
UF_MTX4_edit_translation( matrix, vec );
$ L0 M1 T5 |) b: j8 S# B/ `" s; B* ?! f4 M
FTN(uf5947)(matrix, &srcObj, &count, ©Flag, &layer, . |1 R0 S3 I( N& B/ n
&curveFlag, copyedObj, NULL, &rtState); 3 ~7 z9 k5 A' R4 n0 H8 ~
中的©Flag设定为1,你的rtState可以为0,但对象object却没执行什么操作。6 `4 U+ w+ {# c# a
3 [& Z8 Y3 q6 s" T/ ]
现在我想把我的object进行move(这个对象包含了blend,hole,extrude等特征操作),请问ZZZ兄有什么高招?" g" M2 \8 l' @
' }9 [9 ]# ?8 p2 W1 M现在我调试的程序可以对point,curve等进行操作了,但带参数的就不行。- J* u3 S( }4 g+ f& w
* F- e3 R( C4 P1 B/ W
& F" O# V) C$ }$ Z 关于平移的问题,受斑竹的启发,我调试了下面两个函数,同样可以对Object进行平移操作(只能copy而不能进行move ).
% ~3 W- D9 w" \. f8 wdouble Dxyz[3]={50,80,0};
/ @/ v1 l- g2 n: A- Z' X double D_target[16]; / |1 P# |# I% r! |) J: T F- H
tag_t copy_object_id; 9 s8 b% M: r5 [+ g! F
FTN(uf5943) (Dxyz,D_target ); 5 r4 A& v8 U' G1 d! ~) m3 l
FTN(uf5947)(D_target,Object_selected,&one,&two,&zero,&two,©_object_id,NULL,&resp). 现在我调试我的程序发现不能进行move 操作之后,和我的同学讨论了一下,他的意见是复杂的物体带有了许多参数,如果要把带参数的整个Object进行move操作,之需要把根feature进行平移,而其他的特征会自动跟着平移.下面着段程序就是要获得根feature的操作. . Q# l+ t' U0 M4 `7 P4 e' Q
uf_list_p_t cmtag;
" t( b* W+ N0 \5 \int ug_type,ug_subtype; 6 \6 k N; [4 @
int N_features; 0 B" N8 i" Q* s# N9 i- K0 G
i_ret=UF_OBJ_ask_type_and_subtype (*Object_selected,&ug_type,&ug_subtype ); $ L4 R2 _0 ^6 z( b$ K7 p
i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object );
2 c7 Z9 g& i {+ X |7 f3 I: S i_ret=UF_MODL_ask_body_feats (body_object,&cmtag );
* }2 r+ I( T* s1 i8 p% | i_ret=UF_MODL_ask_list_count(cmtag,&N_features); 6 P" V$ Y& _4 W! r2 {
但进行调试时候.老是cmtag的值为空,请问斑竹对这几个函数熟悉不?$ `* f1 e3 p W& d% u2 B
: q* F. Z' n+ A& d下面的这张图片是我在交互界面下进行Transform时出来的警告信息.
* [" [6 D& T9 S8 ?
Knight74 wrote:
" l; T' B1 x6 T; m现在我调试我的程序发现不能进行move 操作之后,和我的同学讨论了一下,他的意见是复杂的物体带有了许多参数,如果要把带参数的整个Object进行move操作,之需要把根feature进行平移,而其他的特征会自动跟着平移.下面着段程序就是要获得根feature的操作.
1 k# ^4 B' ]. k Luf_list_p_t cmtag;
7 \! `. R3 x7 m/ ~% @% p% oint ug_type,ug_subtype;
6 T* A! h; ]) pint N_features; & d) c% k4 H) u1 }- ~
i_ret=UF_OBJ_ask_type_and_subtype (*Object_selected,&ug_type,&ug_subtype );
' ~6 y7 U$ d& V `* H* I' e i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object );
( f" H' z+ v/ b+ ]5 r" c i_ret=UF_MODL_ask_body_feats (body_object,&cmtag );
2 a& v+ }4 q$ D, ]8 a( X i_ret=UF_MODL_ask_list_count(cmtag,&N_features);
# L4 z+ s. p+ }% w) x但进行调试时候.老是cmtag的值为空,请问斑竹对这几个函数熟悉不?
9 c& N" ~, p+ ?" _下面的这张图片是我在交互界面下进行Transform时出来的警告信息.
) P2 E4 T* G' H. k" ~8 J/ y: P0 j5 D( H# M4 D( Z: H) U% ~! b
0 u" ^& S1 R# r# h, h9 ^4 J
body_object一定要初始化为NULL_TAG. Knight74 wrote:
7 H; N# Z0 C' N1 n: w* t7 s请问斑竹,知道计算两个object之间的距离函数吗?这个函数可以计算两个object之间的最短距离。! r( L" }7 @' Q$ d
另外,感谢斑竹上面的提醒。今天有时间我把第3中在UG中平移物体的方法写上去。是通过移动特征来移动物体。 求助 # J+ D% e" G. |5 J0 e9 U( i, |6 a
- w- f$ d; V* M4 ~
//-------------------[6] Chamfer 4 edges of block2------------------- 8 B/ V+ Y1 i8 r- h0 u7 G8 Y
uf_list_p_t edge_list1,edge_list2; 9 M) m* z; e2 ]% d0 g, K
tag_t chamfer_id,edge; $ k& \3 l0 Q, K+ I: F
double end_point[3] = {0, 0,0};
* x! Q5 {; G/ v* t& C7 _double direction_z[ 3 ]= {0, 0, 1};
% q5 Q: u" V) R) pint dir_edge; 6 D8 f6 ~( f/ {7 w
char * angle1="45.0"; : X: G; P( {. {" G6 ^9 n3 }
int subtype=1,*is_parallel=NULL; ! {* h. u6 L% y2 f; c: T7 p' I
UF_MODL_create_list(&edge_list1);
. l; Y9 k! W/ V# a8 n: m/ z! ~UF_MODL_create_list(&edge_list2); " Q0 q5 U9 J8 `
UF_MODL_ask_feat_edges (block2, &edge_list1 ); - Z& r6 L2 Y* I9 w0 z- e! T
UF_MODL_ask_list_count(edge_list1,&num);
! N6 W/ m) V5 [4 t& c( }for (i=0; i<num; i++) 5 e* I6 c0 A9 b: n
{ ' I9 B6 p" q8 Y: g
UF_MODL_ask_list_item(edge_list1,i,&edge);
) q1 {" m- A! e& k
7 T- M& p& p# l4 L. Z: t' e1 I& r3 n; v$ d( j2 R# j
UF_MODL_get_curve_edge_direction (end_point,edge,&dir_edge ); , f& O: M5 i. v1 ?$ ?+ i* I
% E& }9 B& }2 y* z, q0 d) k- `. O( h UF_VEC3_is_parallel(dir_edge,direction_z,0.0001,&is_parallel);
4 Z3 o8 B. B) q" G; H if(is_parallel)
5 J! k, [ M2 ^# j! S, t, J0 l
' c5 N/ e( R' ^5 A0 @
) l3 m; r2 ^; u* b6 B+ ~ UF_MODL_put_list_item(edge_list2,edge); : C3 o. }; T6 h# V2 l& {" @: u
}
0 S) F$ D/ D" N. S6 Y0 e" O
+ J2 P3 f' B, V; } UF_MODL_delete_list(&edge_list1);
7 f/ s( g& b7 ?! a# l0 FUF_MODL_create_chamfer (subtype, "2", "2", angle1,edge_list2,&chamfer_id);
( F& s% e! T8 I7 Q5 k UF_MODL_delete_list(&edge_list2); 4 m- e) a; x7 n9 ^4 _: A
c9 V/ O( ~2 }6 O
编译错误:error C2664: 'UF_VEC3_is_parallel' : cannot convert parameter 1 from 'int' to 'const double []' . X* a+ z3 e X6 _6 R6 Y ?8 v
请问用UF_MODL_get_curve_edge_direction 得到的edge的方向dir_edge是何类型,是不是不能用它得到block边的方向? extern int UF_MODL_get_curve_edge_direction (double * end_point, tag_t curve_edge_eid, ) d+ k" @' D9 c3 Y- k6 }
int * direction );
. ^" x6 e4 ]- ^! `. Q; e. i
" ^$ B' U8 x+ J2 s* r8 udouble * end_point Input : The input endpoint
6 `# C+ P1 B% K- x0 Z% B( j ^tag_t curve_edge_eid Input : The input curve or edge
2 v& P2 J+ Y# p! d1 H& Vint * direction Output : Ouput direction 5 ~$ k8 v' B3 @% ]% S) \* l P
6 f7 C, L+ Y( s1 Sextern void UF_VEC3_is_parallel (const double vec1[ 3 ], const double vec2[ 3 ],
/ h7 W, q$ c6 P ?0 f _: Rdouble tolerance,
! m& D# j& V r8 f( i3 Hint * is_parallel );
; M& O: [) q8 ]2 i7 \1 D( c" v* M V, |* t0 ^' f
const double vec1[ 3 ] Input 3D vector / A4 N2 ^5 t) ?* o1 X. D
const double vec2[ 3 ] Input 3D vector $ i0 j# L+ D+ ^% D# n( ^5 K
double tolerance Input tolerance 0 C! ], ^ e; h% ~
int * is_parallel Output = 0 Vectors are not parallel ) @! s/ J# M* T/ ? i
= 1 Vectors are parallel . U" I9 }/ a/ e! H
" t. o" A# ]) `$ U2 h整型指针变量,取出后在UF_VEC3_is_parallel()]中如何用?得到block边的方向是否有别的函数? taiga2001 wrote: $ ]7 V' p% ]& U& }) P* I9 s( d
extern int UF_MODL_get_curve_edge_direction (double * end_point, tag_t curve_edge_eid, ) Y u/ K2 L- F O4 ?) Z
int * direction );
# E' L1 `9 E, X6 o: t5 f
4 ], U3 c) a {4 rdouble * end_point Input : The input endpoint + A% J7 u; V( A' l" e: m! }
tag_t curve_edge_eid Input : The input curve or edge 8 [) P$ j: M$ F
int * direction Output : Ouput direction 2 @" t. O/ e4 k- `& }
' ^) U7 j* U* ~ X( j4 J
extern void UF_VEC3_is_parallel (const double vec1[ 3 ], const double vec2[ 3 ], ~' a* C/ U* x* w, }# J3 ^8 b9 u
double tolerance, ( H9 V% P0 b! t7 b) K6 ]0 k
int * is_parallel ); , g5 a G. k y% I
- X3 e y; X7 F9 a& O Y& V4 J- Qconst double vec1[ 3 ] Input 3D vector
# G( d/ s, G: A" m) T; ^, m+ Xconst double vec2[ 3 ] Input 3D vector . L6 F! U; E: T3 {: W) F
double tolerance Input tolerance , w8 `- ~, Z( R0 F6 B
int * is_parallel Output = 0 Vectors are not parallel
; ~/ g4 Z) M9 b% {5 Q= 1 Vectors are parallel
, o9 y) C2 z$ Y' j8 Q6 L( c* c6 D
3 t) x6 ~! ?5 v5 t( S4 j1 K整型指针变量,取出后在UF_VEC3_is_parallel()]中如何用?得到block边的方向是否有别的函数? 第一个函数只是用来判断一个点靠近一条曲线的起点还是终点。
% |/ G, w5 U$ _8 r/ W# r) }% F' y6 s- C' {( g; F2 C
第二个函数要求输入两个矢量。7 p* x8 e! B$ e
' ?2 g6 t6 h0 @, Q. I; f
得到边的方向可以,先得到边的端点:用UF_MODL_ask_edge_verts() -------------------[6] Chamfer 4 edges of block2------------------- ' V9 [7 k6 i' _/ Y
; Q" ?- U( g# R uf_list_p_t edge_list1,edge_list2;
, M( {! _+ R+ \) W5 s5 s; A tag_t chamfer_id,edge; / {" L+ x; U7 J/ N2 _- }' `/ C
double point1[ 3 ]; * R- [4 C: U8 o9 }9 R; f& g/ I
double point2[ 3 ];
) K; w1 f4 z( K- j: F* K8 } char * angle1="45.0"; ' N+ ^& U- H9 G1 h
int subtype=1; 5 B% R, t! G0 K
int vertex_count=NULL;
; d1 m+ L0 M1 s& A. k! c4 Q; \ UF_MODL_create_list(&edge_list1); / E( |# }1 [! P
UF_MODL_create_list(&edge_list2);
1 i# m' p2 R- m7 E5 M5 W; W% u1 [1 c+ ?- e5 S
UF_MODL_ask_feat_edges (block2, &edge_list1 ); / ?, O3 e0 N/ o0 U2 n7 V
UF_MODL_ask_list_count(edge_list1,&num); ! Y, R% ]' d- [8 Z5 H4 e9 W# q! p
for (i=0; i<num; i++) . F+ \; n# s8 A( a; m, N; e
{
/ x* L' T: X; Q* S7 G: Y$ \ UF_MODL_ask_list_item(edge_list1,i,&edge);
) [8 P" b& G/ M0 b. |0 C: } UF_MODL_ask_edge_verts (edge,point1,point2,&vertex_count );
) X: N0 d) L; H( u3 V8 m; |/ s: q7 i6 }8 a/ z
if(fabs(point1[2]-point2[2])>1)
# W* Y+ ?1 o; F; x8 M UF_MODL_put_list_item(edge_list2,edge); 2 y. ?# y5 E& \" o/ N( [
}
) ^( ^! i1 ~: d( z$ n! g3 D; A6 U' G/ _8 _0 Q
UF_MODL_delete_list(&edge_list1);
s- }5 h" }# ~9 L$ Z$ M0 k' W- i5 t E: s! M" x
UF_MODL_create_chamfer (subtype, "2", "2", angle1,edge_list2,&chamfer_id);
9 X3 A/ b L/ C. {' }' ^ UF_MODL_delete_list(&edge_list2); 在UG中move 物体的第三中方法,通过移动特征来移动物体。
) h. w* x' [; q1 s" v+ w& W$ t' g9 i* E. ?0 Y( ~0 ?# c
double real_data[2][12]={0,0,0,1,0,0,0,1,0,0,0,1,50,80,0,1,0,0,0,1,0,0,0,1}; 3 V8 Y* ]2 H1 i$ ]8 J4 b4 H& P
int mode=CSYS_TO_CSYS;
* i8 a2 u# M* O% B; }9 A int N_features; : t6 v! S# a# P: v' N8 R2 N
char features_num[100];
* ?/ K* {! D- B1 p& o uf_list_p_t cmtag; + L0 U! F: L" O6 V6 U
i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object );
/ j8 j2 O& F& z8 X- O3 j$ Z i_ret=UF_MODL_ask_body_feats (body_object,&cmtag ); 0 ^7 Q! I- b* V- I0 Y7 j
i_ret=UF_MODL_ask_list_count(cmtag,&N_features); ) C# c3 N8 G. U+ l4 m5 R0 I
8 L$ l; }) q: z8 m1 F/ R) V) x i_ret=UF_MODL_move_feature(cmtag,mode,real_data); 斑竹,我下面的程序是希望通过一个点,一个方向创建一个datum axis,我用
& d- w$ @+ m- u; c# v
7 V. i7 q( D3 hi_ret=UF_CURVE_ask_point_data (dpoint,Datumpoint); 2 e. W: I4 X! {. v
i_ret=UF_MODL_create_fixed_dplane(Datumpoint,direction,&dplane);
d% G* `9 b% f1 a, q ri_ret=UF_SO_create_dirr_plane(dpoint,UF_SO_update_after_modeling ,dplane,flip,&Tdirection);
/ y3 B% F; ?5 A# F3 z4 P. @9 G1 }: @7 Si_ret=UF_MODL_create_point_dirr_daxis (dpoint,Tdirection,&daxis_tag ); 8 @# V) k, ]$ W9 ?8 K7 u
上面这几个函数先生成了一个datum plane,然后我定义了该平面的方向,
$ l% _! K+ T/ M0 G$ h最后通过点,方向生成datum axis,其中,dpoint,Tdirection,&daxis_tag 这三个参数都是tag_t类型的,调试的时候最后一个函数出错,说是"internal error!",请问斑竹是何原因呢? 镜射特征中螺纹是否可见是不是由thread.include_instances =UF_MODL_INCL_INSTANCES控制? ; F4 j( D9 M1 P# u! g F9 Q
为何镜射【mirror】特征中原来的螺纹不见了?
8 i* a9 w, C% b0 Z$ i( I1 H1 k" w//----------------------- Create boss----------------------- $ g& G" ~% Q( d( ?0 X, \- A
UF_MODL_create_boss(location1,direction,diam_boss,h_boss,angle,trim_face,&boss_id);
y! W6 T3 s. \ ^) A. t( k
- w I3 E9 h6 i) i/ n$ n4 S: ^$ H//------------------- Create a thread on boss---------------------
+ F4 M' a q7 Q/ u7 a. i$ @5 O. F) |% B; W
//Get boss faces to use as start face and cylinder face of the thread ( H& H; ]' K9 c( m* f, ~
tag_t s_face,c_face,thread_id;
$ e7 J& A, V8 q# D uf_list_p_t list; ! _" n- l2 Y) k1 k
1 v# e1 ^" Y! \# p8 Z3 U
2 d. C. _. \3 S) u* S
UF_MODL_create_list(&list); O+ I; |5 M ?' p1 H' v+ @3 f' ]' |! M
UF_MODL_symb_thread_data_t thread;
# B3 i# @/ c* s) `( c UF_MODL_ask_feat_faces(boss_id,&list); + ]' b+ t* O0 ]; S
UF_MODL_ask_list_count(list,&num); ) F- y# n h# ]: l4 l
for (i=0;i<num;i++) * T* e0 K0 I) m* ~
{ # O7 s& W; x ]2 ?
UF_MODL_ask_list_item(list,i,&face);
# b* Y$ N, J% q t+ K, }0 B$ j- u: U3 R- ^ E2 u; ?
UF_MODL_ask_face_data(face,&type,point,dir,box,
) i) U' _9 A E8 q& L5 f, w &radius,&rad,&sen);
' }1 t( ~' l1 P; n if ( (type == 22) && (fabs(dir[1]-1.0)< 10e-7) ) 5 A& p. Y, A4 {! R w7 V1 }) R
s_face = face; //start face
' u6 i9 Y: t7 V6 e+ r. s if (type == 16) + }; ?) |8 T) H
c_face = face; //cylinder face
' i5 y* X& {9 j* g1 U0 @) L: p N } $ ]0 \# O2 t7 `0 Z+ O
UF_MODL_delete_list(&list);
# A* c9 K% ^. M) [* G: j3 c9 s) M& S; W( ? n7 f" |
//create thread 9 z5 U0 E( x( d* x
char thread_length[10]; 6 o6 l' H! x8 B' E/ ]* ^
thread_length[0]='\0';
; j. o3 V2 ^/ w* {6 t; |3 t' h sprintf(thread_length,"%f",0.5*atof(L.value.string)-hi-2.0); % n1 I/ c" B! a6 X4 w2 |/ t, ^
# m0 R3 L7 s. L' s# t thread.cyl_face = c_face;
1 A: |1 \& S9 U# ~ thread.start_face = s_face;
% ]2 @1 y4 c9 R3 T" l1 {4 J thread.axis_direction[0]=0; 1 O3 g2 s1 {6 m. N% d
thread.axis_direction[1]=-1;
# i2 _+ j! F1 t, a thread.axis_direction[2]=0; : f7 M! K4 G: l9 @+ A
thread.include_instances =UF_MODL_INCL_INSTANCES; ( \. u. _) P- t$ W( \0 U+ h e
thread.rotation=UF_MODL_RIGHT_HAND;
~+ M2 ^0 `; E7 J& v thread.length_flag= UF_MODL_FIXED_LENGTH; $ W7 T1 h+ P( X0 m+ R% u3 V+ r
thread.tapered = UF_MODL_NON_TAPERED;
6 o o+ _* H# _1 n& g+ ]# I thread.num_starts = 1;
- {2 ]+ o6 O: @: g thread.length=thread_length;
7 ]7 c) i9 s4 X# P thread.form = "Metric";
+ l! I0 H" u; d7 I1 p& F" L5 F Y thread.method = "CUT"; 2 x& `) ] j3 o9 i) x2 F9 g7 e
thread.callout =callout; / E9 o& t. x0 N! p
thread.major_dia = "10"; 0 v0 W j3 }% s( K' j6 s/ o3 h7 A. Y
thread.minor_dia = "8.917";
( D+ K! E& ^' \1 @% y$ P thread.tapped_dia = "9.813";
+ S: Q8 S$ N1 a" y' f thread.pitch = "1.0"; $ W5 g6 C' L3 U/ j
thread.angle = "60";
9 k. ~- v- y; N& f% ]+ O UF_MODL_create_symb_thread(&thread, &thread_id); % \& V8 Q: f7 v9 E+ r P. @
//-----------------chamfer edge of the boss-------------------------- 3 E. o1 {# }& H, n, i$ v @
I2 P8 L. C8 [" c& W+ v F) E
uf_list_p_t boss_face_edge_list; / K0 U) v: o1 T1 [* u
tag_t chamfer_id,mirror_obj;
& o* E' ^+ M. w7 p6 m$ Q UF_MODL_ask_face_edges (s_face,&boss_face_edge_list); 0 z0 a4 O: f3 N/ I" U9 S& ?
9 _/ b) i+ r. U/ y' @+ V, _: J8 ^0 R% r$ o
UF_MODL_create_chamfer (1, ".5", ".5", "45",boss_face_edge_list,&chamfer_id); 4 p. o% L- u9 K& d! }$ n" ?1 L n( [
$ w+ t$ M/ G: l# O
UF_MODL_delete_list(&boss_face_edge_list); : u+ D* G1 O: H- R6 T4 x: r
UF_MODL_ask_feat_body(chamfer_id,&mirror_obj);
/ j' s# s+ H( ?4 a8 h
1 q S3 K& I/ M" f5 ~////////////////////////////////////////////////////////////////////////////////////////////
: Q8 n" t0 O1 N( c# G ///--------------------create mirror feature------------------------------------- $ i& b4 ]1 p$ ~- W
3 ?9 M) O, T' W5 W
double ctr_point[3] = {0.0, 0.0, 0.0};
* l: z" k0 a" i6 S double directiony[3] = {0.0, -1.0, 0.0};
. e1 V V/ s3 x; y. J; Z tag_t mirror_tag,dplane, mirror_body; ; l1 q2 \9 a8 s: {. g0 ~: Y a
' o/ k. M; H, @: h
# X6 `/ l- l H9 ^//Create Datum Plane
* }: r7 h+ h! A( R( [/ u UF_MODL_create_fixed_dplane(ctr_point, directiony, &dplane); 6 W3 I' |* y$ b Z6 y9 h
7 R7 S& F- \& H u |; g9 h
2 I6 D) Z, i2 y4 J7 {& ]$ ?& }
// Create a mirrored body $ u. A6 T' F! ]. c i! J
# u2 z5 c, J" p7 W. V. |UF_MODL_create_mirror_body(mirror_obj,dplane,&mirror_tag); 2 }" g/ c; ]- Q, Y6 ?; r
* m6 N5 J2 a j* a& B0 wUF_MODL_ask_feat_body(mirror_tag,&mirror_body); ) y( {' V6 i0 S' Q
) R! D1 j/ e4 {7 d8 P6 t7 P! [. j1 ?- C4 j
//---------------------unite-------------------------------( N' o1 O; v2 `; `
& G3 Q/ J0 {1 f+ _; C. }0 e" [9 Z
5 x/ S6 T( v/ `3 g1 O xUF_MODL_unite_bodies(mirror_obj,mirror_body);# O9 @% Z" h5 I! W! J
. {- {2 w" G o4 R3 R) i
没办法,只好又加了一段,在mirror特征上作多一次螺纹!
8 A; y4 F* C" `8 m! d) g2 c! e# v4 a
( g7 P; y" Q# h//------------------------create a thread feature on the mirror boss----------------
$ a/ \7 f4 `7 E( O% K6 {
; ?; L% q7 y' \* ? UF_MODL_create_list(&list);
* m9 z3 R) _ b2 M* \. \# e! D; j UF_MODL_ask_feat_faces(mirror_tag,&list); ' e+ H8 F$ U8 J! x z% T8 | ]# p
UF_MODL_ask_list_count(list,&num);
- K! m" I( W' W8 U1 V9 j for (i=0;i<num;i++)
% ~/ ~. R& |8 @' g! \# W5 S. L {
3 ^0 }9 Z* P0 d$ X8 ~; _! [" c UF_MODL_ask_list_item(list,i,&face);
2 b2 U) }2 L- D; I% c. d
" {) U& U( ]" w+ O1 z& i UF_MODL_ask_face_data(face,&type,point,dir,box,
$ y3 D) k! j) \. f# a' Q# { &radius,&rad,&sen);
) p+ p7 ^4 }1 s* A% v$ Y. j2 D0 _ if ( (type == 22) && (fabs(dir[1]+1.0)< 10e-7) && point[1]<-10 ) , V' f Z2 c8 ~, T% r# S! U
s_face = face;//start face - p4 ]! {7 `1 G% t L) Q+ H
if (type == 16) 0 M. K( b0 h6 V8 z) v
c_face = face;//cylinder face 5 o9 [, X6 d# j& E0 X2 X: Z1 a
}
/ J% i7 a( V1 N( L2 d$ T UF_MODL_delete_list(&list);
# P# L2 j9 |" I. h# B. \* j @+ d( P2 t9 j! ^, g6 Z) b1 @# d
thread.cyl_face = c_face;
$ y1 U- I8 I4 k2 Y$ H0 a" g5 I" q/ ` thread.start_face = s_face; , [$ m1 Z3 `2 y2 D- m* y
thread.axis_direction[0]=0;
. |( I, C6 v4 O2 ]1 L: [. l thread.axis_direction[1]=1;
" ?, w/ E {* b& I* J5 G thread.axis_direction[2]=0; ' f* g: G; W4 w) H- D
thread.include_instances =UF_MODL_INCL_INSTANCES; # X8 [( z0 o( e
thread.rotation=UF_MODL_RIGHT_HAND; . S; L+ x0 J5 L) `3 R" x9 I5 i
thread.length_flag= UF_MODL_FIXED_LENGTH; : v, [, p8 |5 n4 w
thread.tapered = UF_MODL_NON_TAPERED;
' _7 @' i c8 u; ] thread.num_starts = 1; , v1 t, m0 m1 [
thread.length=thread_length; , h7 t, z' }3 k9 @; v9 p5 q7 d
thread.form = "Metric"; ^2 _' X# U D, a# y' s1 v0 z
thread.method = "CUT";
( Q8 a4 P- k% k8 ^+ }0 X, j thread.callout =callout; 1 \- Z, q( j, R
thread.major_dia = "10"; : O: ^1 m" k; q0 v2 F& e9 l# r& x
thread.minor_dia = "8.917";
3 |; L1 G8 `# y% _* R( s0 p thread.tapped_dia = "9.813";
) Z! @% X. |/ S6 D* h# ^% j thread.pitch = "1.0"; & D, b* t) u6 f D; {2 Y; x; i7 v* a
thread.angle = "60"; 6 O% |5 h. j1 w5 ]4 I! V
UF_MODL_create_symb_thread(&thread, &thread_id);
) y* ~8 I, ?+ S斑竹你好.我现在已经明确的知道了我的part文件中两个实体对象的tag_t 和name.现在我想用UF_OBJ_cycle_by_name()这个函数来确定查询出来的tag_t是否和原来的一致,
+ ? h( L5 I+ atag_t name_tag=NULL_TAG;
7 B( D3 _) A3 B* y9 l9 ^2 D+ p UF_OBJ_cycle_by_name (CM_name,&name_tag ); ' p) P) X5 @. ^2 Z; ~/ ]
while(name_tag!=NULL_TAG) ) l% P0 p% M( e2 A! Y
{ 5 U9 ?% P8 w: N( k- z- ^' J/ x
UF_OBJ_cycle_by_name(AM_name,&name_tag); ) R, J! W& k! T: G! C- a
}
g' H6 H4 Y9 J7 T8 C& \' T3 c当我给name_tag赋值时,函数返回也是为0,当我不赋值时,调试说我内存访问禁止.请问斑竹能否给点提示?谢谢. 我是一个刚开始学习ug二次开发的新手,马上机要进入课题,老板现在让我先看看UG/Open API 中的一些函数,由于是新手,在加上时间比较紧,囫囵吞找的看了一部分,有很多地方不是太明白,在这里先问几个让我很困惑的菜问题
* H6 F W, z+ q- ^, f k1 A( a+ c% c
很想得到zzz的帮助::(谢了先:))
4 F- s7 C0 f7 A4 L r' k* T8 ?0 `$ t% _2 Z6 q0 D# P6 A$ X* V* L
他们是:
. l' ~% q9 {$ q. v
: i3 A* h7 P$ s3 \1、ufstr()和ufusr()的区别;% G! Z; {$ Q) u" o% o# X5 g
% p" Y" t1 o3 u0 u3 `8 `! L
2、UF_UI_dismiss_dialog_area_2()对这个函数在看DOCUMENT时不是太理解3 @- r2 R7 Y3 w/ h/ n9 a' c3 a2 Q/ H
4 h3 i. e% {4 A" O" h. k: U, K3 s
不知道他和UF_UI_cancle_uf_dialog()的区别??1 z7 ]- Z, G! T4 }6 v( E1 r" X
- _ h1 C# P) q. w. l, t1 h3、UF_UI_get_DA1_coords()* n2 p: a* J" O$ K+ M) N1 [
/ s$ X+ e0 P N+ u! N* [
UF_UI_get_DA2_coords()着两个函数中DA1和DA2具体指的是什么??以前在UG Documentation Help看到过但是现在找不到了,应为是新手好急啊!!! zzz: J1 S( D- B' b; e' [0 c. H$ I0 |
我用你前面讲的回调函数的例子时,编译工程自动生成一文件 EH.H,然后就是如下:& W5 A( e& k6 _( ]' }6 N$ Y" `0 v
2 X2 D' ]/ | c" v7 d0 g( L& X
e:\my_source\eh.h(33) : fatal error C1189: #error : "eh.h is only for C++!"
; U h/ B# A- i0 M2 [这是在MSDN查到的,可是不知到如何修改下面的错误?请赐教,不胜感激!
9 A- q. `6 m% U
* E) z' R+ G o& v: w3 K! |Fatal Error C1189 1 ~1 H# n( x( N! ]$ x
#error : user supplied error message
. s/ Z, i' ^# l! O1 {( mThis error message is generated when there is an #error directive in the program. For example: . l' T2 O2 Y: p
#undef _WIN32 . `- U* H2 U: z/ M: d) D* d5 E
2 }' [* l" O( Z$ I; j; B4 I
#if !defined(_WIN32)
4 K1 X' @% m, P#error _WIN32 must be defined //error & H6 H4 F# \1 _
#endif 5 o6 |3 P* O9 M* e* U1 L3 C
9 s$ e' k% V$ S( B! O7 U i* ~
int main() {
7 c3 }7 L1 W( ~: Y0 ? G* X W return 0; : I: [: P+ W2 s6 I; c- X
} 3 _' Y% R8 z3 V$ F
在EH.H中是:
9 Y4 @7 L2 l2 v& [% H( ]7 Y# X8 N' W
. h% k$ ]$ |3 H1 M# C) k' _#ifndef __cplusplus
( `% T- a" d* P/ {3 V% d" x. h#error "eh.h is only for C++" //有错误
! N7 ~9 c: J* C( `- E8 e
2 ?8 r7 e. \% H. l: F+ C: {#endif 5 C9 H$ a( F8 G, f# k$ e- W
这又如何修改? 找到 #ifdef MENUBAR_COMMENTED_OUT,; n3 P2 D/ _/ s9 R
8 T$ F% h8 L; q把它及对应的 #endif 删掉。 我用的也是UG NX # i7 n8 S7 t; F: O: Q
"lindy.men"如下:, p% _/ g8 E3 ^8 G. N
, Z$ H% K" l. B( r# H7 R
VERSION 120 1 Y5 [" E# z m4 D/ q7 Z3 _
EDIT UG_GATEWAY_MAIN_MENUBAR
A% U& z' ]& U BEFORE UG_HELP
( E4 o9 R. i+ s CASCADE_BUTTON UISTYLER_DLG_CASCADE_BTN
' ?- w! p4 V3 Y) e3 L5 f/ c LABEL 启动对话
% c5 ]. x; {. ~) i; a! G1 j$ m/ h. b1 s3 m Y8 R
END_OF_BEFORE " W) o$ Z) E8 v6 ~6 a
- D0 \9 ?0 e0 ?( {, x
MENU UISTYLER_DLG_CASCADE_BTN 0 T/ q5 A3 C3 K
BUTTON SEQUENCEPLAN_BTN 1 @8 }; P4 {3 t; Z
LABEL 应用菜单/ M- w3 Q) c! y. u" F
5 T. Q2 `$ D3 v
ACTIONS yulu.dlg
. y% `" j n7 j9 K: a/ y# h END_OF_MENU
" I p$ i* d Wlindy.men文件放在D:\Unigraphics NX\UGALLIANCE\SITE\startup目录下/ Q: w+ U/ i3 S1 A
/ @, G+ T7 s5 c1 R" C+ Z# W: @
yulu.dlg文件放在D:\Unigraphics NX\UGALLIANCE\SITE\application目录下
% U6 W% s( X! w" T- V1 K, b* ~
, d. Y% k; ?4 B. X& [( Z如果没有程序源代码,而只有*.dlg文件和*.men文件能否在UG环境下利用*.men文件产生的菜单项调出*.dlg对话框呢?(只是此时对话框的各项按钮无实际功能罢了)E:\\ug sec development\\ug二次开发有声视频教程 |