|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
& F- B* E7 E( {+ f" p* b$ B2 f% q& G: W1 e& ]+ ?3 M- u5 D
, n) x; c+ P5 A' g/ U, B x
1、装入部件
9 O/ o+ \; _4 r- s1 [通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;
7 ^ x( n' F3 ~, c G* t
- Y: @" R7 k% o9 ]2、创建配合关系3 A3 P' y, ?4 u- _& W4 o; E
a.通过函数UF_ASSEM_init_mc()初始化约束;5 N7 ]0 O3 E8 M
b.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;: j5 i5 a# a3 k( U8 v! h7 T, C* c
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。6 T9 ?% S4 V3 Q H% z2 w
c.通过函数UF_ASSEM_solve_mc()求解约束;8 \1 c$ Q$ g' a+ D3 r! T
d.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;
+ N5 S6 E! o7 {5 R1 e8 ~e.通过函数UF_MODL_update更新模型。
! s4 B2 r6 L7 ]$ J" ?) b% B. y
1 O& W5 p1 S7 P- #include <stdio.h>
- Z# M3 i9 j* O& s3 g$ {4 [2 s - 1 r9 b; e; \$ U$ G# c
- #include <uf.h># D2 ~/ F' f3 I2 E" M t9 e. V ?
- #include <uf_ui.h>
' m: v5 @7 s" @. K5 P - #include <uf_obj.h>
- g0 J# z( v! T/ R8 b% I - #include <uf_disp.h>0 z* A- ]% f. L/ W
- #include <uf_modl.h>
( E* {4 B, G8 b( c. Q - #include <uf_part.h># c/ Q7 f5 `; `* B1 ^. V2 _- Z/ E3 t
- #include <uf_assem.h>
6 x: T' `: _0 Z& n' U; I: p& p - 7 F% _+ f# u' J& B- R1 l
- #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )3 b/ S& Z. u! l) n8 y0 D
- & U6 ^: [' f6 Y( k
- int report( char *file, int line, char *call, int irc );
' g( [ S8 z& m/ D, S - void DoAssembly( void );
; q. w; }5 A# \% W4 G6 A/ U n - 6 ~4 M2 j8 T' e& g6 v
- int report( char *file, int line, char *call, int irc )% ^4 d* a* q( b' e
- {+ ]* r9 O8 B8 w$ I
- if ( irc )
" f: D. V2 \- ^; v& w1 m( l- z/ Q - {
# b! v( r7 Q6 c w1 ]/ i - char err_msg[ UF_UI_MAX_STRING_LEN + 1 ]; B3 h0 @" L! J
- char msg[ 133 ];0 r2 O/ s O% a% c
- char fail_message[ 133 ];
: {9 G$ e6 _- }) }. X - int len;
+ f) ~( H/ h% w& ^8 }7 u) L
0 }- z0 C! D' f5 x: J- UF_get_fail_message( irc, fail_message );
* R# E- h. r! y- e& H
) Z" |, U. z) |* \* c, f- sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );
8 J, j7 P* R, e7 a- y
9 p4 _) U# B9 Y! Z& |7 S5 G8 z' O- len = strlen( err_msg );
. O& ]; A1 f8 l# ?& S. r - len = ( len < 131 ) ? len : 131;% z2 D+ \8 d( p4 j: w
- strncpy ( msg, err_msg, len );: S. v8 v3 K- y6 s! z, c" V3 F5 }0 [7 B E
- msg[ len + 1 ] = '\000';
e. `9 x2 s; o% k' o1 B( b - 6 n b- j9 Y* ^) ^
- uc1601( err_msg, TRUE );+ r: v( Q! c. u2 B; S/ d
- }4 l! U* ~. E5 J |
- return( irc );
6 G) w* U3 Q0 G" p- R8 ~, P$ p - }6 Y$ `5 J8 X6 M# h* O( H5 t% L9 j
0 t4 {! U8 D }- extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
: g1 h2 n! R8 O) j4 K - {1 t2 R& L0 A+ r
- if ( UF_initialize() ) return;
4 n# B* C2 r" z. w |# b - DoAssembly();
2 l: N: P8 j6 f8 e1 K: u - UF_terminate();
/ ] m, Q& |$ ~; S, Z* X! ] - }' @6 B# K( i1 k- e1 H0 `& s7 r
. G/ Y/ i/ j/ y, G3 h9 v- t# o- void DoAssembly( void )2 T k5 ~% _5 D! Z! c
- {& C! |7 c8 i( |, [
- if ( NULL_TAG == UF_PART_ask_display_part() )- d; B. z# X0 a0 A, O: b: Y3 b8 i
- {
3 z9 H. x2 l( R- r - uc1601( "请新建一个文件再进行本操作!", 1 );
% e w; l8 v5 ~ - return;
- F; A% \7 _: C9 j. q. h3 P - }
4 S/ ~; n7 J7 i) W- ^$ Z - 4 C+ l5 H( o; c
- tag_t tagInsCyl = NULL_TAG;, N" c$ S2 n( G3 Z$ G
- tag_t tagInsVBlk= NULL_TAG;3 `, f* E h( L7 g2 a
- tag_t tagOccCyl = NULL_TAG;
. D4 E% R# X. o" r9 k - tag_t tagOccVBlk= NULL_TAG;
& m! G3 F! X' m8 i ^$ X - UF_PART_load_status_t ErrorStatus;( z) Y- ~5 w/ y) X: T
7 c) T2 G- U+ q J' P3 `4 R( I; Y- double dblzOrigin[ 3 ] = { 0, 0, 0 };
/ c3 T9 y! u% F" D+ r - double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };2 S5 a! Q# o/ e( O O
- 5 f m7 z' ^6 A* f4 F% H
- /* 装入部件GB2208_80_Vblock.prt */
0 \( |* u6 l5 b& B/ _! w& Q - UF_ASSEM_add_part_to_assembly(
8 z. f% E d# G, |2 t: j7 w5 W - UF_PART_ask_display_part(),! s6 P5 a# N0 p5 n2 ]" F3 `' g
- "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",
5 |8 s. D2 [ n8 B$ i- a - NULL,: ^9 t6 F( J/ k, `3 ?7 o7 ?7 i& y
- "VBLOCK",
" @7 d. `% O* o! g - dblzOrigin,
' k; l# t! J3 \+ ] - dblzCsysMatrix,
2 d2 E/ E( [+ C1 y - -1,7 g- c% t q5 E( B$ C, U
- &tagInsVBlk,
" B/ l1 b; M1 R% C& _1 X) U - &ErrorStatus );
7 Z/ u7 w5 p% Y3 g - /* 装入部件Cylinder.prt */
4 \( O& T( S- e& B7 ^* u1 a - dblzOrigin[ 1 ] = 50;
$ B9 ?3 V+ L2 R$ _0 V - UF_ASSEM_add_part_to_assembly(
3 H8 l3 e4 r, P- M6 H - UF_PART_ask_display_part(),
1 v; ~7 x; E. \# r - "f:\\ug\\chapter4_1\\Cylinder.prt",
; G5 H, K% b% C8 ^2 \ - NULL,
4 A% R4 t. o" A# u5 A+ O; A - "CYLINDER",; S! [4 v$ W/ r0 p. m/ ?
- dblzOrigin,/ f3 y, [% ~$ T/ _
- dblzCsysMatrix,
2 L& m$ ]0 I6 C - -1,, g; o% _3 b Z7 n( J
- &tagInsCyl,
; X. V! B: I0 Z0 o G3 ^+ L - &ErrorStatus );
% U/ ~2 e, N$ f6 S" v. x - tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );
; L- v& f+ v0 K, X$ D - tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );
' V" Q' j# O" ?4 a7 ?+ C - U) L" t; l# {- x
- /* 创建配合关系 */( t% h/ x- O/ S( U, r
- UF_ASSEM_mating_condition_t McData; E0 h* I. n: f# X, B
- tag_t tagObjectFrom = NULL_TAG;5 n# W4 a) N! B
- tag_t tagObjectTo = NULL_TAG;
- e+ K0 P0 i6 J$ M2 V* v8 b- v - tag_t tagPrototypeFrom = NULL_TAG;1 S$ [' j5 q. @9 @4 G" G
- tag_t tagPrototypeTo = NULL_TAG;4 B$ U+ ?- ]4 H$ J, x8 ~
-
* A3 \3 E; ^2 Z8 F; \+ t% [, M - /* 初始化约束*/+ n* l# K3 n7 H: R6 }+ A
- UF_ASSEM_init_mc( &McData );* F% F# M+ B& w8 c- o6 `
- , P; j. ^9 b" W4 ~$ C: P
- /* 定义约束,构造配合关系*/$ k" ]! A$ E0 d! Y! J% |+ |
- McData.mated_object = tagInsCyl;
+ |' u2 c8 w: J -
4 G8 g4 X# T% Q/ A7 ^$ u; a3 P - McData.num_constraints = 3;1 c6 T+ ?/ o& Q
- McData.name = NULL;( n( `% G: h" R& ]
- McData.user_name = false;
6 A; g% U& ~ Y# @$ Q# ^/ X - McData.override = false;
* y- [2 E' Q+ a5 ~# { y - McData.suppressed = false;
- N b$ @6 H( W; Q3 L+ C. H4 b% l - McData.implicit = false;& M: J+ Z4 I0 k& b, W' Z( Z
- - v4 [2 B9 i+ s3 R2 l/ K) ?! i
- tagObjectFrom = NULL_TAG;
; D/ \+ C) R, Q# {6 G - tagObjectTo = NULL_TAG;
: {9 w$ d5 t# V- \8 [1 ~: F5 l3 B, y - UF_OBJ_cycle_by_name( "CYL_FACE_3", &tagObjectFrom );- C7 E5 g& \* P
- UF_OBJ_cycle_by_name( "P1", &tagObjectTo );
0 \7 \# q# G# }$ Z' l0 O0 B - tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
6 m ~5 }, s" p! B! u - tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );1 P' y7 k3 t( S, x% o* i0 I
- McData.constraints[ 0 ].from = tagPrototypeFrom;( i( _# h5 ^0 r" L5 r- P
- McData.constraints[ 0 ].from_part_occ = tagOccCyl;
% x+ Z: O6 p% s4 a - McData.constraints[ 0 ].from_status = UF_ASSEM_ok;
( P7 q$ @8 j" L8 x - McData.constraints[ 0 ].from_type = UF_ASSEM_cylindrical_face;
! s+ m5 o& z v/ Q- G% p/ f, `2 V - McData.constraints[ 0 ].to = tagPrototypeTo;7 g" S1 j' f8 {1 Q; N# r
- McData.constraints[ 0 ].to_part_occ = tagOccVBlk;
1 B! |1 f' O0 k) e - McData.constraints[ 0 ].to_status = UF_ASSEM_ok;
4 V) o5 h% y& q9 ^1 y - McData.constraints[ 0 ].to_type = UF_ASSEM_planar_face;
, a1 C2 U4 l3 R5 } - McData.constraints[ 0 ].mate_type = UF_ASSEM_tangent;3 ~7 Q* J8 _) y, Q* `+ ]( b' k
- McData.constraints[ 0 ].offset = NULL_TAG;! R$ _; A K' k7 u" K9 q# I Q
- McData.constraints[ 0 ].name = NULL;
P' l- N( L+ [( \) t4 Q* _- ^( K - McData.constraints[ 0 ].user_name = false;. D9 B" H/ G, o; f9 W" u* I+ j
- McData.constraints[ 0 ].inherited = false;
: l$ ~6 z) M: B# `) ? - McData.constraints[ 0 ].suppressed = false;+ e, y7 n+ i: `4 Y4 {! D
- McData.constraints[ 0 ].has_help_point = false;
) _7 r, z6 O# O7 V/ N - UF_DISP_set_highlight( tagObjectFrom, 1 );/ ? Z+ z8 x1 x/ Z- P& r; v6 Y
- UF_DISP_set_highlight( tagObjectTo, 1 );, a: h/ ?! d' P) g/ \
- uc1601( "这两个面进行相切操作", 1 );
9 p% O! b$ @6 s/ P! e3 v( x - UF_DISP_set_highlight( tagObjectFrom, 0 );
( R+ f# D! ?1 Q( J* ^ - UF_DISP_set_highlight( tagObjectTo, 0 );/ `) V/ s, s& b
& u+ S/ h+ _3 [* Q$ x; l- tagObjectFrom = NULL_TAG;
. x# ^5 U: b) m* j - tagObjectTo = NULL_TAG;3 D1 k2 H$ j; D5 I: B" n1 J% _
- UF_OBJ_cycle_by_name( "CYL_FACE_3", &tagObjectFrom );% e* ^$ u2 g9 Q" k4 @+ Z
- UF_OBJ_cycle_by_name( "P2", &tagObjectTo );
8 M* O4 {3 q# F( t& e& [$ _# f - tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
% t& {; r7 E9 w - tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );( l {1 I [( {; {7 p8 P
- McData.constraints[ 1 ].from = tagPrototypeFrom;6 o6 r4 e6 M8 I& ^- W7 \
- McData.constraints[ 1 ].from_part_occ = tagOccCyl;. Q7 O8 K) e. o+ B
- McData.constraints[ 1 ].from_status = UF_ASSEM_ok;
3 ]8 _5 p% n) z+ B+ e4 h& k t2 t - McData.constraints[ 1 ].from_type = UF_ASSEM_cylindrical_face;
) M& `. Y0 {) j- a" g, g1 z - McData.constraints[ 1 ].to = tagPrototypeTo;
8 K5 r) ~# L. t+ ^ - McData.constraints[ 1 ].to_part_occ = tagOccVBlk;. ?- \3 N% G: c& i" s- ?% W1 k
- McData.constraints[ 1 ].to_status = UF_ASSEM_ok;
( X* v9 V2 q4 C. H( [. i9 V8 y* l - McData.constraints[ 1 ].to_type = UF_ASSEM_planar_face;
6 Z3 z& z& k8 f, X1 a; h- s - McData.constraints[ 1 ].mate_type = UF_ASSEM_tangent;
, C3 a5 {2 ~0 x# p; |2 P0 o( V - McData.constraints[ 1 ].offset = NULL_TAG;3 F& i: e2 f$ a5 [$ Z6 R& J# c0 C
- McData.constraints[ 1 ].name = NULL;1 p% G7 Z( @; `1 \# z" r: N
- McData.constraints[ 1 ].user_name = false;' O& W" p9 t. R. p. [! p; N7 l
- McData.constraints[ 1 ].inherited = false;' e$ `# \* z- p, Z& P
- McData.constraints[ 1 ].suppressed = false;
1 n1 h. \5 _0 n" U% K) f" X8 @ - McData.constraints[ 1 ].has_help_point = false;: d0 ?& C# B/ v' F' s% x
- UF_DISP_set_highlight( tagObjectFrom, 1 );
# O4 J; ~& L% B - UF_DISP_set_highlight( tagObjectTo, 1 );/ D0 w1 X) C# t. S& T1 d5 C) }7 t% q
- uc1601( "这两个面进行相切操作", 1 );
5 x, J0 e6 m( b+ e - UF_DISP_set_highlight( tagObjectFrom, 0 );+ k1 Y1 v+ H6 t/ {/ {, ]
- UF_DISP_set_highlight( tagObjectTo, 0 );5 ]) Q6 Q6 B3 v8 z3 Y
- : C( M) v) m* x7 i* b/ f5 U3 V
- tagObjectFrom = NULL_TAG;
* y; Y' o" I* {- I4 A - tagObjectTo = NULL_TAG;5 K; t+ K( j) @& U3 o* [
- UF_OBJ_cycle_by_name( "CYL_FACE_1", &tagObjectFrom );
+ J3 V0 Y6 P/ V/ ?& K# {. o - UF_OBJ_cycle_by_name( "P3", &tagObjectTo );: r* N8 G7 u/ N/ C8 F6 W/ g
- tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
( N# V2 Q6 y2 e- I f l - tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );/ j! m! S' [3 ]: ~7 q' D6 f) a
- McData.constraints[ 2 ].from = tagPrototypeFrom;# {) S$ K+ ]2 \3 _3 K$ T) S2 w# N
- McData.constraints[ 2 ].from_part_occ = tagOccCyl;3 ?- _3 ]4 U" Y1 x9 S V, E
- McData.constraints[ 2 ].from_status = UF_ASSEM_ok;
: |9 J4 B8 |+ g! }' H# D - McData.constraints[ 2 ].from_type = UF_ASSEM_planar_face;
8 f9 n4 C7 R- i! W' o, c' K' p( a - McData.constraints[ 2 ].to = tagPrototypeTo;
3 d9 b. O& {& d+ v0 F7 P% _ - McData.constraints[ 2 ].to_part_occ = tagOccVBlk;" R/ M! i- L7 l; p: d5 M
- McData.constraints[ 2 ].to_status = UF_ASSEM_ok;
$ _6 J" V+ z; Q9 Q5 ^5 g0 V - McData.constraints[ 2 ].to_type = UF_ASSEM_planar_face;
* Z! Y( f0 {4 o7 r" u - McData.constraints[ 2 ].mate_type = UF_ASSEM_align;
6 Z5 {+ } i+ N0 ?4 m& k, c$ c - McData.constraints[ 2 ].offset = NULL_TAG;
' }* u6 z q7 Z3 t" Y6 a6 L - McData.constraints[ 2 ].name = NULL;
# l: u4 H! ^( Q - McData.constraints[ 2 ].user_name = false;! F6 X: N+ l* b. @
- McData.constraints[ 2 ].inherited = false;
# Y8 d% l5 E1 @5 v. h9 l - McData.constraints[ 2 ].suppressed = false;
. F4 q O9 g& t# U. v - McData.constraints[ 2 ].has_help_point = false;
. c/ ]5 i/ R% L/ D7 H. g% E - UF_DISP_set_highlight( tagObjectFrom, 1 );
/ M, `& q2 T& o. E7 p - UF_DISP_set_highlight( tagObjectTo, 1 );
+ \' r( w/ i* ] Q - uc1601( "这两个面进行对齐操作", 1 );
% d. q9 Y, e- V& [- m3 ~$ F - UF_DISP_set_highlight( tagObjectFrom, 0 );
0 ]! x3 a! K; q8 o) s' }% h - UF_DISP_set_highlight( tagObjectTo, 0 );* ?! J9 C! t0 i" O# n9 [
- 8 S! T" I2 j: {3 H v9 u0 W j
- double dblzTransform[ 4 ][ 4 ];# u- _# I* T: f
- UF_ASSEM_dof_t Dof;, }) p7 c5 K* p6 W; `$ l; T
- UF_ASSEM_mc_status_t Status;! K' l+ k3 V& L! P& w d
4 u+ ]) Y& J* T: j5 \# B* Y# x' B$ [
0 v# @& v7 \6 J) X4 `- /* 求解约束*/, L% \1 e$ w6 a5 D
- UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) ); ^& J7 o# d, ?" h' @+ D& k0 `
- if ( UF_ASSEM_mc_solved == Status )
+ Q* i# O$ X+ C, { - {) n0 G! d. ]! h% `; z/ J" S
- uc1601( "求解约束成功!", 1 );
( D$ Y, |5 X* w, h9 M* W; m - UF_ASSEM_mc_structure_state_t StructStatus;: P- l3 {. X ~' s* v
; Q9 F" e ]. F- K* ^8 x- /* 将约束应用到装配体上*/! |0 j+ e, r" M. Y& { c
- UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );
* K0 J; P8 v$ I+ e+ }( e8 X - if ( UF_ASSEM_structure_ok == StructStatus ) & O' u- j6 X/ y4 G8 l
- {1 u# \! i: q( q& L0 _7 j
- uc1601( "应用装配成功!", 1 );
! f+ P- g( S" } - ; p. S3 s: g! V% U4 x6 X
- /* 更新模型*/8 W/ ~. G6 f4 \0 W; ]; r
- UF_MODL_update();" x4 h2 k0 W1 t( E' N. X0 Y
- UF_DISP_refresh();
3 B9 n& X6 U) W# ~9 \. } - }
1 Z; N; h4 F4 d. e8 x - else uc1601( "应用装配失败!", 1 );
( W% T* m. G& L0 _) w4 ? ~( M: n - }( n% B' C) h+ B$ p% a! x' J
- else uc1601( "求解约束失败!", 1 );5 _) b; U/ s. B* I
- }
! k2 r* i# w T7 {& m - }$ [. `% d- m3 F } l+ r
复制代码
i' W) X3 a8 O
4 E# v& D( V% f' J1 y$ B" s: ~( s+ ^8 H! F6 d
1 ?9 i' t6 Y! L7 v( L4 a% z, T( P0 Y
; L6 r, k3 P" t2 w. f( h% R
" G' g6 P) Z# ^2 F5 M t8 y |
|