UG二次开发
更新时间:2024-05-01 12:50:01 阅读量: 综合文库 文档下载
1。建立两个目录。
/ J9 F Q! T9 \\9 r1 D1 t7 n& Q7 k! ^2 _$ O# q4 M6 J
建立第一个目录 E:\\my_first_UG,在这个目录下建立两个新的目录:E:\\my_first_UG\\application和E:\\my_first_UG\\startup。
建立第二个目录E:\\my_source,用存放你的源代码。
2。设置环境变量。
3 P& m; A: ~! M# _(
再Windows中设置一个新的环境变量:UGII_USER_DIR=E:\\my_first_UG。
3。打开UG,进入UIStyler应用(在Application菜单的最后)。 4。设计一个对话框。
1)在\一栏填入:First Dialog,按Apply(每次输入完成后,都要按Apply,为避免啰嗦,以后不再提及)。
2)在\一栏输入:%??%¥%¥¥##*%*(*(*—*—((,什么都行,呵呵。
% O* p+ \\2 V: a6 w* }/ l8 ~6 {. n$ f. s7 V) H I5 [' ; I+ o [2 D6 F, o* [/ Z* \\& X
5 i1 I# _+ ^, B# k3)在\中,把CHANGE改为MY。
4)加入四个控件。String,Push Button,Label和Single Select List
: }3 M4 |+ \\) Y, p ~! h& k
编辑对话框的各个控件。
K8 \\! l5 G3 m% h2 d1 U3 a) L
7 T0 z; H! S\f6 F2 l& N1)改变String控件的标题,标识和长度。
+ v) [) t: `) E O8 {
Label “String” -> “Input an item”. Identifier \ Width in... 0 -> 20
) E( T% d- r+ s. i\
2) 改变Push Button控件的标题,标识和回调函数的名字。
& n3 D1 e% S\h/ Q
# W. j; `7 z& m' V& ALabel \
Identifier \ callbacks \
把\激活。
0 X' `# n' g; X' r, J* \\2 [
3)改变Label控件的标题和single select list 的标识。改变single select list可见项的个数。
7 `7 s& g( P2 G/ W, V4
/ L# L% T1 H( Z1 Z6 S- ?% d# FLabel Label -> Items List
Identifier \ Number 3 -> 6.
}9 y5 v# C' j% C( e! i- C6 y8 w% |
6. 保存对话框。
9 t$ G d% P3 y0 a m4 B6 b# d P! F6 n( L, e6 p( c: N8 ~
6 U* ~0 H8 w, S j点击save图标,把对话框保存在E:\\my_first_UG\\application目录下,文件名位first_dlg,生成三个文件。
$ Y# d. v5 r7 G( V-
(现在可以推出UG乐)。
7。建立一个vc的工程。
) w4 b8 v2 k! [9 v- X6 u9 s! |& W, W# p, T5 m
5 U9 T* s2 o. a5 ?: P
1)把\\application下的*.c和*.h文件移动到E:\\my_source目录下(文件可以改名字)。
( ?: c\
. T$ B$ x1 y0 r6 T* ~& `1 O3 |2)建立一个新工程,选择Win32 DLL。
3)把c源文件和头文件加入到工程中。
8。设置vc的环境。
1 ]/ v4 \\. G6 v3 b; E) n
Project -> Settings -> C/C++ -> Category ....加上头文件。
Project -> Settings -> Link....
改变输出文件名,加入连接库文件(ug17之前的库名字不同)
Tools ->Options...->Directories
! Q( w: j& k! |' n( E7 V: E' K. @9 j6 {4 a\
Include files 和 Libray files 加入UG UFopen的路径。
打开first_dlg.c文件,找到menu script样板的位置。
复制这个样板到一个空的文本文件。
3 ]4 o- T% f\ }
把文件保存到E:\\my_first_UG\\startup目录下,文件名位first.men(注意后缀)。
找到 #ifdef MENUBAR_COMMENTED_OUT,
: X- L$ e! Q5 G# i8 n$ Q' G- Q) w* b\0 \\2 P6 N\
把他和他对应的 #endif 删掉。
找到#ifdef DISPLAY_FROM_USER_EXIT,
把他和他对应的#endif删掉。
# z E& i* k0 @3 | a% B X% J7 j& x! w* Y* ~ c* S$ f
找到
现在可以编译连接,试一下了,呵呵。
0 [0 [( @6 h, M1 w6 F4 X,
运行UG,点击菜单。啊!!怎么不行??秀大了,呵呵
打开first.men文件,把ACTIONS后面的名字改为libmy_first(DLL文件的名字)。
现在一个空架子已经打起来了。剩下的就是要加入自己的内容。
就上面的例子讲讲下面这些回调函数(看清华那本书搞得我头大)谢谢!
5 y6 K1 Y- G: N, T* ~. i' G\
好吧,下面将一下这些回调函数的应用。
) ?6 w9 x# z: ~. T5 U |6 W2 h5 @; u( F
; A3 x- [) B; w
Apply_c,Ok_cb和cancel_cb分别是点击OK, APPLY和cancel按钮时,执行的动作,它们的应用在后面的例子中介绍。
) U9 t, x4 f' M6 R! S& m' ~
8 l$ Q8 D4 B$ [* b$ W: o& L: Fconstructor 和 Destructor本分别是对话框显示之前和退出之后执行的动作。
4 b' m& Y- ]* w0 `; J% B'
在对话框显示之前,可能需要进行很多操作,譬如说:设置对话框的选择方式,就是说在对话框打开后,用户可以选择什么物体,面,实体等。
5 I2 D2 u5 Y7 \\5 ?5 4 I6 N4 |$ |/ M) N\p8 V$ C/ I
在对话框消失之后,也需要进行一些操作,譬如说:释放申请的空间,把加亮的体恢复等。下面我就用例子介绍一下这些回调函数的应用。
$ t$ d9 n, c2 z' ]0
添加回调函数。
2 G5 @0 R4 v\[/ H9 ]/ ?#
首先进入UG,UIstyler,打开前面生成的对话框first_dlg.dlg,在相应的位置添加几个回调函数的名字(每一个都要回车或按Apply)。
. q5 z( L+ b+ p0 W
5 Q- o- Z2 ~& m+ p- ?cancel_cb
construct_cb destruct_cb ok_cb
% m3 d C/ t2 X/ ~4 L, k' ^
5 d# N1 O. z4 ~+ V为“Input an Item”田家一个回调函数input_cb。
/ _ J; U7 O% u% c. r; E/
保存后,退出。
时代码已经改变,要把相应的改变加到vc的工程中去,(推荐一个工具Araxis Merge)。
ZZZ斑竹辛苦了!
, R; d$ J0 J& N: K% T- b% M+ e% O
小弟正要搞一个UG二次开发的项目,以后有问题还请多多指教了:)
h& a( o! y1 k& ^! C, l
请问工具Araxis Merge哪里可以得到,可以简单说一下怎么用的吗,我VC还不太熟,谢谢
我的EMAIL:wgwang_sz@163.com QQ:43801603
打开first_dlg.c,找到construct_cb的位置,在其中添加以下代码。
- j, ~. G0 E7 W n R\N0 e8 y+ s
int MY_construct_cb ( int dialog_id, void * client_data,
* R# |) H g8 n' ~/ g- |
) Q- ^# g7 E8 C L' C* k0 k UF_STYLER_item_value_type_p_t callback_data) {
1 a# @- O: ~3 W+ A+ i
int irc;
UF_STYLER_item_value_type_t value;
$ J6 B# p! x t: J\ char string[133] = \
\
/* Make sure User Function is available. */ if ( UF_initialize() != 0)
return ( UF_UI_CB_CONTINUE_DIALOG );
+ v# n9 q* l. h4 r; x! t9 e2 p. o# K\
value.item_id=MY_ITEM;
value.item_attr=UF_STYLER_VALUE; value.value.string = string;
0 C0 b\b9 n& D) _
irc = UF_STYLER_set_value(dialog_id, &value); if(irc) {
char message[132];
$ j, Q6 n9 M$ l; l3 v: f\
8 V2 A; ~; {/ k$ h/ L9 f UF_get_fail_message(irc, message); }
1 X) v\
1 j1 f% b. Y2 s& ?( v! y# {$ r
UF_terminate ();
找到input_cb的位置,假如下面的代码。
int MY_input_cb ( int dialog_id, void * client_data,
UF_STYLER_item_value_type_p_t callback_data) {
- L4 T0 e% ~. ]4 i7 J& A9 [5 E* J% F\/ x8 C\' Z$ U4 x: f4 B1 ^9 P& ?
UF_STYLER_item_value_type_t value;
+ Z; f- d5 d9 Z int irc;
( _( {) g+ n5 }( [! C% a
6 x7 K: y: D) r+ P- f. r+ ~5 q char string[133];
5 ]# v$ @ \\5 f) n- W& {
5 l5 }/ _+ q6 {+ `, l /* Make sure User Function is available. */ if ( UF_initialize() != 0)
/ v1 O* b& d; f; j9 G
return ( UF_UI_CB_CONTINUE_DIALOG );
$ |- Y! P2 |9 U8 o$ ~0 M8 S
, V: E: R8 a- S+ f6 `) ?8 {3 o6 @ /* read your input */
2 H% k! `8 W* ^$ I' N/ s value.item_id=MY_ITEM;
. X6 O# L7 }0 s- O value.indicator=UF_STYLER_STRING_VALUE; value.item_attr=UF_STYLER_VALUE;
' a7 G' n+ V4 V4 V UF_STYLER_ask_value(dialog_id, &value);
! n0 U% E) ^( w$ S$ ]/ }3 {
+ k, w$ j& Z) ^3 w5 [- h, o strcpy(string, value.value.string); UF_STYLER_free_value(&value);
/** add it to the single list */ value.item_id=MY_ITEM_LIST;
; A1 g3 [ ^; q9 |8 |, j8 K
value.item_attr = UF_STYLER_LIST_INSERT;
2 r- f& N! K! y. n/ f6 b1 P
value.subitem_index = UF_STYLER_NO_SUB_INDEX; value.indicator = UF_STYLER_STRING_VALUE; value.value.string = string;
irc = UF_STYLER_set_value(dialog_id, &value); if(irc)
9 X8 `, b) y- A' X1 j, ]- E& b8 a) Z# _+ R. c2 ~- m+ i$ I; k: p' Y& ?. h/ |) a% S7 z
{
char message[132];
/ ?, @/ S9 n2 G4 y* T0 f I
[% h+ A; O; x' X/ w, T UF_get_fail_message(irc, message); } UF_terminate ();
4 ~& D* a* `1 x. f$ h
再ok_cb假如下面的代码。
/ _5 [% `! A4 S; b
9 S0 o) U. r4 {- ^. r; M* Z! _) Iint irc, i;
3 X# W3 }% c4 k/ k5 l W( A. }7 p UF_STYLER_item_value_type_t value;
/* Make sure User Function is available. */ if ( UF_initialize() != 0)
5 a5 b4 \\$ Z! U6 J* u! P+ P6 v1 Y9 p% T* \\$ c- c) s$ I
- o( q, Q( q' I& z- u! C# l return ( UF_UI_CB_CONTINUE_DIALOG );
2 v8 ]1 g- b, M* f( o) ]; Y; E6 D
UF_UI_open_listing_window();
value.item_id=MY_ITEM_LIST;
\
/ q* m9 K' g0 H' @$ O, n value.indicator=UF_STYLER_STRING_PTR_VALUE; value.item_attr=UF_STYLER_SUBITEM_VALUES; UF_STYLER_ask_value(dialog_id, &value); for(i = 0; i < value.count; i++) {
, n+ Z0 `: P b4 L+ |, d! k8 @
UF_UI_write_listing_window(value.value.strings); UF_UI_write_listing_window(\ 6 M' R5 ^; ]/ n* D, i} 8 I1 q' `! u. K! h* y UF_STYLER_free_value( &value ); UF_terminate ();
至此,我们介绍了几个回调函数的简单使用方法,下面看一下运行结果。
/ i+ s- g7 M4 R; E$ M( ~% A) l: x$ z w6 ?. b$ k
刚打开对话框的结果。
输入一个字符串,回车。它显示在下面的single list中。
对不起,a minor change on code. int MY_ok_cb ( int dialog_id, void * client_data,
& s8 W6 y6 F, u( B0 K* n! f7 {\
UF_STYLER_item_value_type_p_t callback_data) {
9 {9 [3 l9 d% n* z( C
5 S/ V2 T* z9 d& \\9 Q# O int irc, i;
$ V4 B* V. a4 e UF_STYLER_item_value_type_t value;
/* Make sure User Function is available. */
, E1 G' U1 O7 G if ( UF_initialize() != 0)
! K7 r( u) R+ ^0 n8 }$ [' [/ u
return ( UF_UI_CB_CONTINUE_DIALOG );
8 l& v5 B/ r/ y\
7 D4 J O( _# l( _ UF_UI_open_listing_window();
4 T3 O2 t: y8 [2 @
1 z: m- K' m2 l value.item_id=MY_ITEM_LIST;
value.indicator=UF_STYLER_STRING_PTR_VALUE; value.item_attr=UF_STYLER_SUBITEM_VALUES; irc = UF_STYLER_ask_value(dialog_id, &value); for(i = 0; i < value.count; i++) {
/ K4 p4 l) J; L; u- p) q j
# Y. W4 j$ E, _1 ^% O\ UF_UI_write_listing_window(value.value.strings); UF_UI_write_listing_window(\ } 5 K. q: q9 k\ UF_STYLER_free_value( &value ); 点击Ok后,所有的字符串显示在list window 中。
( R' t& }5 M5 @7 R清华书中uistyler部分的程序去掉了原来的注释,使得简单的事变复杂了。
8 l! k. m# \\% s. @7 [; F/ `2 U
我没有在ug/NX下开发。在18版中,建立VC工程时可以选择UG APPLICATION WIZARD,那么后面的设置就可以变简单了。 Lcfq
ug/NX建立VC工程时有Ungraphics NX AppWizard V1也很好用。
to eastcamel
.men可以执行很多类型的可执行程序,比如.exe,.dll, .dlg .macro等
( F) C1 o) c/ f& K) z3 H& J4 {+ O+ L% o
action没必要一定是my_first.dll,这是他给你的一个例子,如果你用UISTyler生成了my_first.dlg,那么你就可以在action后写上my_first.dlg。
1 G* m% P, K/ O1 ]$ I8 V: z5 p* b* Q2 o& t9 u0 c
; g8 p\to visionphone
论坛是交流问题的地方,不是教学,
7 y- x8 p) h; }1 h9 k e# a. `: r- u F9 A8
关于menuscript开发下拉菜单,包括菜单的级联在清华那一本书上已经很清楚了,还能找得出比他更清楚的资料吗?另外menuscript已经简单得不能再简单了,还能找得出比他更简单的编程方法吗?
现在在试一个把物体平移的功能.我看了UG/open 里面的函数帮助,也仔细研究了清华出的那本书,他里面是先将所选对象的坐标矩正进行正则化处理,然后为正则化矩正给出一个新的ID,最后创建一个零时坐标系.然后就用uf5943,uf5947两个函数进行平移了.
而现在我自己做的时候,也采用上面相同的步骤,但我调试时发现我选取的对象没有矩阵ID,当然也就得不到坐标系统矩阵.我后面采用获取工作坐标系的ID,然后获取其矩阵ID的方法,但调试后仍得不到平移结果.
@( Z. N) N0 K8 1 Z; e, A!
, y q; Z1 x1 }6 K$ B3 d请指教:下面是我的一段代码;
i_ret=UF_CSYS_ask_wcs (&wcs_id );
UF_CSYS_ask_csys_info (wcs_id,&matrix_id,csys_origin); UF_CSYS_ask_matrix_values (matrix_id,matrix_values); UF_MTX3_ortho_normalize(matrix_values);
i_ret=UF_CSYS_create_matrix(matrix_values,&new_matrix_id);
i_ret=UF_CSYS_create_temp_csys(csys_origin,new_matrix_id,&temp_csys_id);
. x( _5 \\5 j2 @5 X1 Z- e) i; o1 h% M, M/ h# [( A! [
FTN(uf5943) (Dxyz,D_target );
FTN(uf5947) (D_target,&temp_csys_id,&one,&one,&zero,&two,NULL,NULL,&resp);
* W3 N1 P, u\, c( |1 y1 b. q$ Z# H6 t* {
程序的前后两段好像没有什么联系?Dxyz和D_target在哪赋值?
平移的例子
) l1 \\. g8 R; R: J, }% P; l8 U( ` O& R5 @5
\double matrix[16];
+ D' f' _) X+ h* y* Q' N
+ B3 a! f$ \\: i+ L8 R$ ~% i int count=1, copyFlag=2, layer=2, curveFlag=2, rtState;
+ W% ?; y5 S& d; t+ {% ]) ~
m! p2 H! v6 W U/ Z0 F2 b2 K0 W- J+ m UF_MTX4_identity( matrix );
UF_MTX4_edit_translation( matrix, vec );
FTN(uf5947)(matrix, &srcObj, &count, ©Flag, &layer,
) T6 A1 ?) A\ &curveFlag, copyedObj, NULL, &rtState);
return rtState;
. B' M1 h) t+ ~: D) W% h
我刚刚接触UG的二次开发,按以上过程试了一下(只是在创建工程时,选择的是UG/OPEN WIZAND V18),结果调试通过,只是运行时,马上出来对话框,菜单却找不着,恳请解答一下!
找到文件UGII\\menus\\custom_dirs.dat添加用户路径
' z7 Y% H& e, q+ A# s* x& e: V7 l6 w! U9 e
- h5 ^! q& V2 }7 W# Customer modifications can follow on here
你的starup所在位置路径比如e:\\project_insession\\standard_part;
# U- r. h4 s4 E6 f*
也可以在UGII\%ugii_env.dat内把#UGII_USER_DIR=${HOME}改为UGII_USER_DIR=你的starup所在位置路径比如e:\\project_insession\\standard_part。
在平移的问题中,Dxyz是一个Input量,它定义了对象在x,y,z方向上的平移值。
double Dxyz[3]={50,80,0};
至于D_target,它是uf5943函数中的一个输出量,是uf5947函数中的一个输入矩阵值,其中就包含了Dxyz定义的平移量。
. C. @: h; I6 h0 T$ V1 ?6 {
FTN(uf5943) (Dxyz,D_target );
FTN(uf5947) (D_target,&temp_csys_id,&one,&one,&zero,&two,NULL,NULL,&resp);
- U# ]# {$ s# `0 后来我跟踪调试了resp的值,显示为0,表示成功了。但我用UG里面的工具检查一点的坐标,却一点变化也没有。
; L( c+ H+ b1 @$ _0 {4 E4
后来我调试了ZZZ兄的一段代码,发现copy是成功的,但我定义为move,即把UF_MTX4_identity( matrix ); UF_MTX4_edit_translation( matrix, vec );
9 v8 k7 d v- o( h! }
FTN(uf5947)(matrix, &srcObj, &count, ©Flag, &layer,
, p! f* @8 o: | &curveFlag, copyedObj, NULL, &rtState);
& z# }; C' y5 ^1 R' Q' }
n\x& `5 U6 E中的©Flag设定为1,你的rtState可以为0,但对象object却没执行什么操作。
现在我想把我的object进行move(这个对象包含了blend,hole,extrude等特征操作),请问ZZZ兄有什么高招?
& H0 `# b w8 h. \\2 c% t
现在我调试的程序可以对point,curve等进行操作了,但带参数的就不行。
, r1 d0 n+ ~; u5 m\
关于平移的问题,受斑竹的启发,我调试了下面两个函数,同样可以对Object进行平移操作(只能copy
而不能进行move ).
' K4 }( v9 u' j# [+ o\
double Dxyz[3]={50,80,0}; double D_target[16];
/ v. B! C. @1 ^tag_t copy_object_id;
\
4 R) ~2 ^4 n' \\) \\. t FTN(uf5943) (Dxyz,D_target );
FTN(uf5947)(D_target,Object_selected,&one,&two,&zero,&two,©_object_id,NULL,&resp).
现在我调试我的程序发现不能进行move 操作之后,和我的同学讨论了一下,他的意见是复杂的物体带有了许多参数,如果要把带参数的整个Object进行move操作,之需要把根feature进行平移,而其他的特征会自动跟着平移.下面着段程序就是要获得根feature的操作. uf_list_p_t cmtag; int ug_type,ug_subtype;
: h Q; R) h9 nint N_features;
9 n) a$ H6 J6 i3 Y! S m/ M/ T
) C: J5 m* h4 m% M1 Ki_ret=UF_OBJ_ask_type_and_subtype (*Object_selected,&ug_type,&ug_subtype ); i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object ); i_ret=UF_MODL_ask_body_feats (body_object,&cmtag );
. X( U$ f4 G- [2 e
i_ret=UF_MODL_ask_list_count(cmtag,&N_features);
但进行调试时候.老是cmtag的值为空,请问斑竹对这几个函数熟悉不?
& N1 }3 x/ k8 u4 }$ M ?$ 7 y: |, D. b' ?) R
下面的这张图片是我在交互界面下进行Transform时出来的警告信息.
Knight74 wrote:
9 W; W7 @2 z! f+ s现在我调试我的程序发现不能进行move 操作之后,和我的同学讨论了一下,他的意见是复杂的物体带有了
许多参数,如果要把带参数的整个Object进行move操作,之需要把根feature进行平移,而其他的特征会自动跟着平移.下面着段程序就是要获得根feature的操作.
! _' X4 A%uf_list_p_t cmtag;
\@ d) G- F8 @- ]
int ug_type,ug_subtype; int N_features;
]% y, R- R( W/ q8 K/ a+ D U
i_ret=UF_OBJ_ask_type_and_subtype (*Object_selected,&ug_type,&ug_subtype ); i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object ); i_ret=UF_MODL_ask_body_feats (body_object,&cmtag ); i_ret=UF_MODL_ask_list_count(cmtag,&N_features);
\Z0 w C1 {' \\& r% T\
但进行调试时候.老是cmtag的值为空,请问斑竹对这几个函数熟悉不?
5 f, e) ~: n! c6 |) m: S* ?9 k
下面的这张图片是我在交互界面下进行Transform时出来的警告信息.
; W: ~$ o. T9 t3 e' d
. @* n- y- N6 ~1 _3 b$ I9 ^
body_object一定要初始化为NULL_TAG.
Knight74 wrote:
\ q0 N0 r2 p) d请问斑竹,知道计算两个object之间的距离函数吗?这个函数可以计算两个object之间的最短距离。 另外,感谢斑竹上面的提醒。今天有时间我把第3中在UG中平移物体的方法写上去。是通过移动特征来移动物体。
求助
$ t+ I) b6 ^8 M& d. k0 E5 u4 H' E! K. K% e3 \\
//-------------------[6] Chamfer 4 edges of block2------------------- uf_list_p_t edge_list1,edge_list2; tag_t chamfer_id,edge;
+ E& V R: `4 u! N7 a0 X/ A\
8 C4 R% d2 j4 V, e8 s4 _double end_point[3] = {0, 0,0}; double direction_z[ 3 ]= {0, 0, 1}; int dir_edge;
char * angle1=\
int subtype=1,*is_parallel=NULL;
1 g( W$ D1 {9 n1 Y& l6 W( ~8 A
UF_MODL_create_list(&edge_list1); UF_MODL_create_list(&edge_list2);
UF_MODL_ask_feat_edges (block2, &edge_list1 ); UF_MODL_ask_list_count(edge_list1,&num);
6 M/ w# l& n\! Y9 d3 ]; |% H: }8 ^
for (i=0; i UF_MODL_ask_list_item(edge_list1,i,&edge); 6 b% w% T$ F\, [0 |% K% B x) l7 G* B3 H* C( r; e+ a 3 e2 ^; N% ]: y1 b. f 9 n% w' f' X# V; a: s UF_MODL_get_curve_edge_direction (end_point,edge,&dir_edge ); UF_VEC3_is_parallel(dir_edge,direction_z,0.0001,&is_parallel); if(is_parallel) + s+ J( d4 q- U' x1 c$ ~: F/ ?/ C4 K% R6 K UF_MODL_put_list_item(edge_list2,edge); } * h/ r$ k6 c Q0 L/ \\2 l 3 L# F' r) T& O. c* @: X, d UF_MODL_delete_list(&edge_list1); 4 ^\$ ]# H! QUF_MODL_create_chamfer (subtype, \ UF_MODL_delete_list(&edge_list2); 9 ~) z. _; n4 m, N 编译错误:error C2664: 'UF_VEC3_is_parallel' : cannot convert parameter 1 from 'int' to 'const double []' 请问用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, int * direction ); double * end_point Input : The input endpoint 1 R, h W e. m7 T6 u- q0 D; L; a0 J( X. B) t, t$ K6 e8 ~9 m5 K. L- O i7 a l# h6 G; F 3 k4 g\tag_t curve_edge_eid Input : The input curve or edge int * direction Output : Ouput direction extern void UF_VEC3_is_parallel (const double vec1[ 3 ], const double vec2[ 3 ], double tolerance, int * is_parallel ); const double vec1[ 3 ] Input 3D vector const double vec2[ 3 ] Input 3D vector double tolerance Input tolerance - k& {' R/ @6 a& S5 d8 P& }, s4 O/ [/ I5 m0 P/ Y9 ^7 ?( R\/ B( d/ b8 y: _# L1 O6 g int * is_parallel Output = 0 Vectors are not parallel = 1 Vectors are parallel \0 r2 i$ a/ H/ o9 Y# _, x. ]% r& p: x: Z. x) p 整型指针变量,取出后在UF_VEC3_is_parallel()]中如何用?得到block边的方向是否有别的函数? taiga2001 wrote: / w; {' Q/ ]8 x, t9 m! A ( U6 o' z/ p; bextern int UF_MODL_get_curve_edge_direction (double * end_point, tag_t curve_edge_eid, int * direction ); N, i1 S) _7 Odouble * end_point Input : The input endpoint tag_t curve_edge_eid Input : The input curve or edge int * direction Output : Ouput direction extern void UF_VEC3_is_parallel (const double vec1[ 3 ], const double vec2[ 3 ], double tolerance, 6 v( T* ]- z\% H5 S4 A6 h+ A' W\! P%u7 I1 e. W# L5 q2 J int * is_parallel ); H( V& l/ Q9 ], d3 q* x $ I T$ z( V5 v+ n4 X+ G, c- ^const double vec1[ 3 ] Input 3D vector const double vec2[ 3 ] Input 3D vector double tolerance Input tolerance int * is_parallel Output = 0 Vectors are not parallel \= 1 Vectors are parallel 0 {) ^8 O4 ~; K整型指针变量,取出后在UF_VEC3_is_parallel()]中如何用?得到block边的方向是否有别的函数? 第一个函数只是用来判断一个点靠近一条曲线的起点还是终点。 2 Y o6 x% H) 第二个函数要求输入两个矢量。 得到边的方向可以,先得到边的端点:用UF_MODL_ask_edge_verts() -------------------[6] Chamfer 4 edges of block2------------------- 9 t; ]\1 _% A7 V; V$ j( h\ uf_list_p_t edge_list1,edge_list2; tag_t chamfer_id,edge; double point1[ 3 ]; double point2[ 3 ]; char * angle1=\ ' \\3 X) h' O$ i/ ~9 a' m; e- f. X( V. |. Q1 W9 C; [1 \\* z }( T# K8 w* I% [0 m% ]5 u4 `$ k$ D) O int subtype=1; : T6 L5 b& D% p, O* W int vertex_count=NULL; UF_MODL_create_list(&edge_list1); ) L* \\) ^+ x( i7 I. n. U UF_MODL_create_list(&edge_list2); UF_MODL_ask_feat_edges (block2, &edge_list1 ); UF_MODL_ask_list_count(edge_list1,&num); for (i=0; i UF_MODL_ask_list_item(edge_list1,i,&edge); \& n\4 R: z$ z% Y! O V X1 ^. b* s\ UF_MODL_ask_edge_verts (edge,point1,point2,&vertex_count ); if(fabs(point1[2]-point2[2])>1) 0 V7 d' S& c2 y) c. | UF_MODL_put_list_item(edge_list2,edge); } UF_MODL_delete_list(&edge_list1); 1 ~\! q% ~/ e5 z U* U. M( S* k8 [( U* C+ ^6 n' w) g UF_MODL_create_chamfer (subtype, \ UF_MODL_delete_list(&edge_list2); 在UG中move 物体的第三中方法,通过移动特征来移动物体。 2 H c' w' q b5 f5 X' B N# V3 k0 O- \\; D* ?( n 5 J8 s* H5 Y\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}; int mode=CSYS_TO_CSYS; int N_features; ! |9 u5 ^5 F3 \\& `, X; {9 D0 X ! N8 q& ^# k7 L( V( R9 K\ char features_num[100]; uf_list_p_t cmtag; 3 Z, L0 v. O# M i_ret=UF_MODL_ask_object (ug_type,ug_subtype,&body_object ); i_ret=UF_MODL_ask_body_feats (body_object,&cmtag ); i_ret=UF_MODL_ask_list_count(cmtag,&N_features); ! F9 D* z, N, n' O9 c: j# Q# ?, R3 K- d' u1 ?! j( b6 J i_ret=UF_MODL_move_feature(cmtag,mode,real_data); 斑竹,我下面的程序是希望通过一个点,一个方向创建一个datum axis,我用 $ X( b) U\ 7 D- V- h6 H\i_ret=UF_CURVE_ask_point_data (dpoint,Datumpoint); i_ret=UF_MODL_create_fixed_dplane(Datumpoint,direction,&dplane); i_ret=UF_SO_create_dirr_plane(dpoint,UF_SO_update_after_modeling ,dplane,flip,&Tdirection); i_ret=UF_MODL_create_point_dirr_daxis (dpoint,Tdirection,&daxis_tag ); 上面这几个函数先生成了一个datum plane,然后我定义了该平面的方向, 最后通过点,方向生成datum axis,其中,dpoint,Tdirection,&daxis_tag 这三个参数都是tag_t类型的,调试的时候最后一个函数出错,说是\请问斑竹是何原因呢? 镜射特征中螺纹是否可见是不是由thread.include_instances =UF_MODL_INCL_INSTANCES控制? a\ L4 o) l+ g; ( Z0 a; a- \\. M( @: E- o/ o/ x为何镜射【mirror】特征中原来的螺纹不见了? //----------------------- Create boss----------------------- UF_MODL_create_boss(location1,direction,diam_boss,h_boss,angle,trim_face,&boss_id); ! U1 `5 r' N) h) }1 a0 k }% ]% e) k% g 6 a2 A! \\* S3 @. v3 @+ p* b//------------------- Create a thread on boss--------------------- - w4 p$ b\5 K' h' V //Get boss faces to use as start face and cylinder face of the thread tag_t s_face,c_face,thread_id; uf_list_p_t list; 0 m1 ? l' Q+ f\0 [: [. p' E1 I4 H* o# y- m [7 d5 o# {5 M : K8 {# [' K6 D# v# M' v, ^4 b9 m+ k3 C\ UF_MODL_create_list(&list); 4 r9 l1 |7 W* Y1 P# D. P' s UF_MODL_symb_thread_data_t thread; UF_MODL_ask_feat_faces(boss_id,&list); UF_MODL_ask_list_count(list,&num); for (i=0;i # S; |5 O6 n! {: R2 X9 J H$ ?; a& K( d# _, C0 `8 G( i, B x 8 k* P( I5 r4 a! K UF_MODL_ask_list_item(list,i,&face); i: \\( f; y; n& ? F ' X8 x7 a\ UF_MODL_ask_face_data(face,&type,point,dir,box, &radius,&rad,&sen); 0 ?; P& b. y4 D8 ^, k if ( (type == 22) && (fabs(dir[1]-1.0)< 10e-7) ) s_face = face; //start face if (type == 16) ! w# `3 k2 d) x% t) a- S c_face = face; //cylinder face } # ~6 N f5 ~& F- B v) ^+ | , U3 @; B# S- m! d) A1 L3 n UF_MODL_delete_list(&list); $ l8 M' r4 O# ^! N, q //create thread ; i7 ]7 M& K% ?( z& Z\ ) y6 w. v! a1 f) I8 i Z! u char thread_length[10]; thread_length[0]='\\0'; sprintf(thread_length,\ thread.cyl_face = c_face; thread.start_face = s_face; thread.axis_direction[0]=0; \N( P% b thread.axis_direction[1]=-1; thread.axis_direction[2]=0; m% l, U3 W% ` - A7 |! O% k3 y/ J8 |2 ` & f; C$ _* x7 ]' d0 T( w9 R$ O thread.include_instances =UF_MODL_INCL_INSTANCES; thread.rotation=UF_MODL_RIGHT_HAND; 4 c& ^3 s: L9 Y5 n1 [0 M1 S8 ` ) ]5 \\4 K& W8 B ]3 X thread.length_flag= UF_MODL_FIXED_LENGTH; thread.tapered = UF_MODL_NON_TAPERED; thread.num_starts = 1; thread.length=thread_length; thread.form = \ 3 @2 ~# L2 G7 ]# t1 n6 z6 c/ B, n, w thread.method = \ thread.callout =callout; 9 e% Z8 W' d) ^, C+ |( K' a$ r+ Q thread.major_dia = \ 3 W8 r) O: ~* e A( J' v9 f thread.minor_dia = \ thread.tapped_dia = \ thread.pitch = \ thread.angle = \ UF_MODL_create_symb_thread(&thread, &thread_id); //-----------------chamfer edge of the boss-------------------------- 4 s\ uf_list_p_t boss_face_edge_list; tag_t chamfer_id,mirror_obj; UF_MODL_ask_face_edges (s_face,&boss_face_edge_list); $ Y+ j+ \\: x6 Q; j( ~ 4 C, W! L- [& d. K9 l UF_MODL_create_chamfer (1, \ UF_MODL_delete_list(&boss_face_edge_list); UF_MODL_ask_feat_body(chamfer_id,&mirror_obj); //////////////////////////////////////////////////////////////////////////////////////////// R9 o; D. R* V ///--------------------create mirror feature------------------------------------- double ctr_point[3] = {0.0, 0.0, 0.0}; 5 v @3 I. Y* H* }; [3 P$ e9 R5 D% `3 double directiony[3] = {0.0, -1.0, 0.0}; tag_t mirror_tag,dplane, mirror_body; 9 q) W1 V! o3 i8 Y% ^1 r7 g% `9 m0 y. P( m + G: I2 [6 N `3 G/ O+ P//Create Datum Plane UF_MODL_create_fixed_dplane(ctr_point, directiony, &dplane); & D& V. P: K& e( z8 U ) f: @* n+ m8 B\// Create a mirrored body : M% E/ G% V3 m y UF_MODL_create_mirror_body(mirror_obj,dplane,&mirror_tag); % {+ A# t+ J$ h- h/ f UF_MODL_ask_feat_body(mirror_tag,&mirror_body); + y; B* D- D* H U% c / A9 D, h7 X: H! U U! B4 q) v6 d( D7 X: O\//---------------------unite------------------------------- UF_MODL_unite_bodies(mirror_obj,mirror_body); 9 M3 \\! n3 N9 _# C. H, ]8 o\ 没办法,只好又加了一段,在mirror特征上作多一次螺纹! 7 j/ _: Q. b+ a4 l x; n; d' J/ t( G( Z& K\ //------------------------create a thread feature on the mirror boss---------------- UF_MODL_create_list(&list); - b: d1 G. ^/ o0 D& b0 j % a' C7 [& J: V: { UF_MODL_ask_feat_faces(mirror_tag,&list); UF_MODL_ask_list_count(list,&num); for (i=0;i ! @6 S8 H5 L; g' x9 t9 N UF_MODL_ask_list_item(list,i,&face); UF_MODL_ask_face_data(face,&type,point,dir,box, &radius,&rad,&sen); ! t1 J8 X* m9 B) a if ( (type == 22) && (fabs(dir[1]+1.0)< 10e-7) && point[1]<-10 ) * Z* i: B. ]9 p- ~ s_face = face;//start face if (type == 16) 0 K- x) }% ~1 V$ n3 @( bG0 \\+ M* L% o, ^& } c_face = face;//cylinder face } ~( D: X- w+ g* H9 ^: \\ UF_MODL_delete_list(&list); thread.cyl_face = c_face; thread.start_face = s_face; thread.axis_direction[0]=0; thread.axis_direction[1]=1; / } @8 m, j5 x) a) z\ thread.axis_direction[2]=0; thread.include_instances =UF_MODL_INCL_INSTANCES; thread.rotation=UF_MODL_RIGHT_HAND; thread.length_flag= UF_MODL_FIXED_LENGTH; thread.tapered = UF_MODL_NON_TAPERED; thread.num_starts = 1; 5 G# v a [/ e& s$ A9 Q- R3 U; B; N2 f, q. V# N thread.length=thread_length; thread.form = \ 2 M& m& o4 X. {, t/ B thread.method = \ thread.callout =callout; ) z& `7 t* V7 \\ thread.major_dia = \ thread.minor_dia = \ \ thread.tapped_dia = \ thread.pitch = \ thread.angle = \ & q6 D3 H. ? p. P8 d\ UF_MODL_create_symb_thread(&thread, &thread_id); 斑竹你好.我现在已经明确的知道了我的part文件中两个实体对象的tag_t 和name.现在我想用UF_OBJ_cycle_by_name()这个函数来确定查询出来的tag_t是否和原来的一致, tag_t name_tag=NULL_TAG; UF_OBJ_cycle_by_name (CM_name,&name_tag ); # ^- R& V( g: B while(name_tag!=NULL_TAG) { 2 Q/ X$ h& e6 _8 `' e D3 T! M3 C& w; \\/ H UF_OBJ_cycle_by_name(AM_name,&name_tag); } 当我给name_tag赋值时,函数返回也是为0,当我不赋值时,调试说我内存访问禁止.请问斑竹能否给点提示?谢谢. 我是一个刚开始学习ug二次开发的新手,马上机要进入课题,老板现在让我先看看UG/Open API 中的一些函数,由于是新手,在加上时间比较紧,囫囵吞找的看了一部分,有很多地方不是太明白,在这里先问几个让我很困惑的菜问题 , F8 w$ U( L, E3 ~\3 a\ y+ F\) P, ]7 J4 m3 k 1 T& U5 Z, i& t& J4 X( ]很想得到zzz的帮助::(谢了先:)) $ E! r. m1 _4 p$ f* r# B6 他们是: 6 @8 E5 j' {0 S$ F 1、ufstr()和ufusr()的区别; \ 2、UF_UI_dismiss_dialog_area_2()对这个函数在看DOCUMENT时不是太理解 1 v* q) L$ T\A- \\2 t) L& @; K . R2 w, q' R0 v不知道他和UF_UI_cancle_uf_dialog()的区别?? / @\ 4 D0 b! b5 A7 k! D7 3、UF_UI_get_DA1_coords() UF_UI_get_DA2_coords()着两个函数中DA1和DA2具体指的是什么??以前在UG Documentation Help看到过但是现在找不到了,应为是新手好急啊!!! zzz: 2 n+ e8 z0 Q0 Q Q, G 8 b0 i$ n0 H7 v. 我用你前面讲的回调函数的例子时,编译工程自动生成一文件 EH.H,然后就是如下: e:\\my_source\\eh.h(33) : fatal error C1189: #error : \ 这是在MSDN查到的,可是不知到如何修改下面的错误?请赐教,不胜感激! 0 L! ~: a, g/ H6 F5 x1 Q5 s5 ^8 K. k* E! z$ {. r8 S 7 P/ R( ]. D\Fatal Error C1189 #error : user supplied error message 0 g+ y( G- C4 FThis error message is generated when there is an #error directive in the program. For example: #undef _WIN32 0 W& f* m( N7 V; V( B 1 r+ Z8 m9 ~8 Z8 X+ B#if !defined(_WIN32) 2 i O. T0 I+ P\#error _WIN32 must be defined //error #endif / H3 I' m, m, Y# D O4 q% n int main() { return 0; } 在EH.H中是: #ifndef __cplusplus ' B' ^) p* b$ W# s; R! f& ^ h8 W/ P, {\d0 F+ W# \\\% a4 z9 W; L9 F' @* #error \有错误 ; o9 I, x5 }5 ^# w+ m $ E! s: @* |! I$ S, g; x' }#endif 这又如何修改? 找到 #ifdef MENUBAR_COMMENTED_OUT, 把它及对应的 #endif 删掉。 我用的也是UG NX \如下: , g1 F0 C0 Q4 ^) J$ i\1 i6 E g9 ]* ]6 y& U: T' y7 A VERSION 120 EDIT UG_GATEWAY_MAIN_MENUBAR BEFORE UG_HELP ) H% @2 L; l9 H# G/ s v\ 8 i4 V) Q8 |( K) w' Y% U- p CASCADE_BUTTON UISTYLER_DLG_CASCADE_BTN LABEL 启动对话 C\`3 ~* \\\M END_OF_BEFORE - B. ^! P( r) U( I+ _5 u+ Y( j! ?8 j\ MENU UISTYLER_DLG_CASCADE_BTN BUTTON SEQUENCEPLAN_BTN LABEL 应用菜单 ACTIONS yulu.dlg END_OF_MENU ) d# Z1 [, t) P2 `: y+ H( F48 f; H6 V: m! i2 |6 b, ( [( n% j8 ~- x7 K+ F; s0 k# j9 ^ lindy.men文件放在D:\\Unigraphics NX\\UGALLIANCE\\SITE\\startup目录下 : F z* V, r, \\5 t8 d% e/ A. _1 |# m' B* t( B0 pyulu.dlg文件放在D:\\Unigraphics NX\\UGALLIANCE\\SITE\\application目录下 如果没有程序源代码,而只有*.dlg文件和*.men文件能否在UG环境下利用*.men文件产生的菜单项调出*.dlg对话框呢?(只是此时对话框的各项按钮无实际功能罢了)E:\%ug sec development\%ug二次开发有声视频教程
正在阅读:
UG二次开发05-01
市委组织部2021年度工作汇报08-17
A320题库-320限制数据03-29
我的中国梦08-11
基于ANSYS技术的CPU热管式散热器换热规律实验研究与数值模拟08-10
基于校园一卡通平台的数据挖掘应用研究08-31
DA52 65数控系统调试培训06-30
2018最新终止劳动合同协议书样本-推荐word版(3页)01-06
文秘管理与应用写作形考作业答案05-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 开发
- 现代应用文写作模拟试题及答案 (1)
- 部队公寓楼
- 施工组织设计(钢结构)
- 2016年高考地理命题猜想专题02大气运动规律(含解析)
- 供配电思考题
- 第六章 短路电流计算习题-案例题
- 财税125号财政部、国家税务总局关于企业境外所得税收抵免
- 财务管理课后练习一答案
- 最新公务员申论十佳开头(免费)
- 哈拉布拉克乡党委、人民政府推进教学改革意见(征求意见稿)
- 捷力快车保养手册-底盘检修-高级 - 图文
- 168672 - 2011年造价员考试基础知识模拟试题及答案汇总
- 注塑机电机节能技术改造项目可行性研究报告
- 2011高考化学分类解析-化学反应速率和化学平衡
- “一带一路”背景下新疆金融发展对出口贸易的影响
- IT信息化应用系统项目招标技术规格书(PDM部分)V5.1
- 刘祖毅羽毛球兴趣小组活动总结
- 西南交大大学英语I 第5次作业题答案
- 11.学习环境的规划与运用
- 华为手机环境分析