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