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