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