|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
/ g- f" P L/ W8 T9 h6 G
) r* v3 Z$ ?0 P: C& t% t* O8 W- a! \" D# C7 ]2 X$ u) s9 m$ ]
1、装入部件1 R9 ~% ^& U3 R& J3 p6 ~) a# G
通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;1 F l( A- v7 v4 h# U
3 z4 I5 h' P2 e0 H& |' k2 v2、创建配合关系
4 e! ~4 l! P& \4 \- ?+ Va.通过函数UF_ASSEM_init_mc()初始化约束;
) J5 K# J* I: u8 C3 E3 G5 vb.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;+ y3 _- g' ?: @9 V! M6 ]. Q, x9 s
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。, x5 Y. M* k! O
c.通过函数UF_ASSEM_solve_mc()求解约束;+ S, n4 [9 W; J' m3 l% @
d.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;
9 S1 n" [1 {3 [: J) j1 j. ne.通过函数UF_MODL_update更新模型。
) I% M4 Z1 v$ A& ?/ Y, Q
2 z6 f1 @* \3 V N3 o' w+ m- #include <stdio.h>. u3 N- @5 F: _0 f* \( \
3 I9 R: r" f, W# m2 q( z* n. P9 G- #include <uf.h>. V4 j' t7 r5 C+ k) ?+ i
- #include <uf_ui.h>
* c/ [7 i3 W8 a2 h& ~4 _8 s - #include <uf_obj.h>
7 V% X" R$ c. f* Y - #include <uf_disp.h>
4 }. j W6 @5 l. O+ H. J& ^ - #include <uf_modl.h>
6 u; w2 c+ c, [7 T, p - #include <uf_part.h>6 c X* F( f9 Y, A' z
- #include <uf_assem.h>
9 x0 h* |6 M) }/ i6 Z0 v0 I - 4 d0 g+ R U* x2 ?% T7 G- F- h
- #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )
! c: x! c- I* r. G- h2 d! ^) w
* B, @# v5 ]+ c7 ]- int report( char *file, int line, char *call, int irc );
8 d1 @9 }- o/ Y' a - void DoAssembly( void );/ Q0 D( v) f' |" J* e0 o) ^
0 ^0 C C2 P4 V0 `$ V1 H: o- int report( char *file, int line, char *call, int irc )- h) Y+ i& X1 W3 @6 w' b
- {
" p t. J; F0 j G$ S$ c - if ( irc )
( c7 W$ y2 H2 Q& Z) x, L. e$ ? - {
, A+ s7 ?8 L- z6 y6 k - char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];
, r; [5 {% {5 u: @ - char msg[ 133 ];
% K6 F# U, l, I6 p+ o' t2 G! ^ - char fail_message[ 133 ];9 S* z0 G' e2 }9 \4 o
- int len;
% B/ t2 I, X! @ - 8 S' G6 b; ~2 a' o3 J$ x
- UF_get_fail_message( irc, fail_message );
- {* c, N% k" ]. Q& j2 p3 g3 g3 B, L - - ^' |- i3 Y6 L
- sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message ); o0 ]/ ~5 ]6 k4 }
- K9 c6 }+ c& w0 I- len = strlen( err_msg );
4 Q" g M2 \+ G; s/ m6 i5 W - len = ( len < 131 ) ? len : 131;. W0 w5 |/ `5 r# g) Q! _( b
- strncpy ( msg, err_msg, len );1 h8 j; ^/ {8 b. ~& n3 H7 A9 L
- msg[ len + 1 ] = '\000';
{# M0 @* }8 @3 M - $ u2 ^: d1 e0 y- t3 S E, J! o U
- uc1601( err_msg, TRUE );- b# ^6 l" @. A5 D) k% M
- }0 y7 b4 b- d& z' J# v
- return( irc );
, P. Y3 I. i* p, F - }% H8 p% H! G' I* p* f" x
, v0 t. a- V: [# J* Z1 R- extern DllExport void ufusr( char *parm, int *returnCode, int rlen ) Y# }0 e( n. n: V# v
- {
0 N4 h9 `7 F# R- |( F - if ( UF_initialize() ) return;
, {' I6 F6 l0 Y! d; t - DoAssembly();3 `. E2 r8 U [$ l2 y. g
- UF_terminate();: w8 @+ X# O/ M0 V
- }
, X+ ]5 K5 A' \% M9 x - ( c' r' c. j. K
- void DoAssembly( void )
7 q- D+ Q1 T: ^" I! l - {
: A+ Z; ~! P- c f8 |/ ^. H( q - if ( NULL_TAG == UF_PART_ask_display_part() )3 J" O# a. I0 U7 @
- {# _0 M% T8 H/ ]& \
- uc1601( "请新建一个文件再进行本操作!", 1 );( C, ~3 }" |; G4 a: b
- return;. G; F5 T" v# q" _' r- j
- }, h' G" Y; }) V$ O& i
3 m1 P% e' t2 W# `- |& T- tag_t tagInsCyl = NULL_TAG;. A# X9 m/ [# L8 B1 ]6 M! c; i& \- W
- tag_t tagInsVBlk= NULL_TAG;
/ N6 f3 N3 H2 W% e8 p+ r/ E. v& N& U - tag_t tagOccCyl = NULL_TAG;# C" w! M, H& K' R' h
- tag_t tagOccVBlk= NULL_TAG;
1 p$ l n$ o" v$ c. D+ F, _ - UF_PART_load_status_t ErrorStatus;0 ~+ h3 p' k' h/ u4 v
U# {: c. S* n& |4 o& m- double dblzOrigin[ 3 ] = { 0, 0, 0 };
! x n" _) p( ~ - double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };2 ]( b% M" q8 _$ B7 M& x+ Y4 }
- / }( r/ u g7 T3 ^
- /* 装入部件GB2208_80_Vblock.prt */: ~+ m) i* Z' r8 X
- UF_ASSEM_add_part_to_assembly(' P5 Z! _2 H. v* f
- UF_PART_ask_display_part(),9 T# O% }; Q# m
- "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",
: q3 b. N% O4 c7 i& l - NULL,, h; ]# V* a+ u$ p$ D7 N0 n1 _
- "VBLOCK",
& Z8 L9 F7 p4 g. w* P- [' n - dblzOrigin,
$ K: D8 u( x0 P g& e - dblzCsysMatrix,
; _4 X! Q6 N; c9 i) x4 t - -1,+ v" H: r( Q# p! [9 B- H/ y; \
- &tagInsVBlk,
# s! f3 R% {7 G! A! I - &ErrorStatus );
5 {/ R% C3 }! G o! n4 |! [- v - /* 装入部件Cylinder.prt */& j: d2 m) Y; K+ \6 f7 K
- dblzOrigin[ 1 ] = 50;
3 F# s0 m+ S( k2 H0 k - UF_ASSEM_add_part_to_assembly(6 w4 V2 s. f1 W+ s
- UF_PART_ask_display_part(),( G a- u6 ]5 D
- "f:\\ug\\chapter4_1\\Cylinder.prt",
% v' i7 b+ K3 Y |$ }& O - NULL,9 h; b) C" O o$ S4 @
- "CYLINDER",
3 \9 v0 M) z6 v2 ?6 L0 K: w - dblzOrigin,9 J1 f4 H. p/ {
- dblzCsysMatrix,
7 I) \! V4 @; u - -1,
3 G0 g+ E& }9 j3 N6 L! }; }; U - &tagInsCyl,
' y n5 x$ W+ k5 Y - &ErrorStatus );8 k) p3 h {0 \3 V. S% k1 y
- tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );9 W6 w5 \. T3 Y) H* P0 U2 L5 K
- tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk );
; g# }! R0 Z' |/ m - " B$ [, @( X* U; J8 F( g0 J
- /* 创建配合关系 */
/ u H+ i0 {7 |# F: D& R - UF_ASSEM_mating_condition_t McData;
! T6 o% E2 S! C0 n1 G - tag_t tagObjectFrom = NULL_TAG;6 ]9 U. I v2 V
- tag_t tagObjectTo = NULL_TAG;
' ?7 K$ v; A6 Q' F r - tag_t tagPrototypeFrom = NULL_TAG;+ u9 v) P% s: }) Y' f
- tag_t tagPrototypeTo = NULL_TAG;
! {! ? s- I5 s- m2 L -
5 }/ g) P9 B5 z3 v; ] - /* 初始化约束*/
* [* ^$ `. V- L9 g: s" {4 E0 @ - UF_ASSEM_init_mc( &McData );
0 h n* @! n- o6 V( _
, _/ l0 y( d, w8 I7 `$ M* V- /* 定义约束,构造配合关系*/; p; c. L! w. U- x' @
- McData.mated_object = tagInsCyl;) j. h9 |) x c+ [: @
- % M2 P) R" \: S& l+ m& m
- McData.num_constraints = 3;
! t9 ^" b: [0 a. L5 Z4 j1 m# V; ] - McData.name = NULL;
8 m" x" _: @8 N4 ]. v - McData.user_name = false;+ v0 ]% G% }# r0 x. z
- McData.override = false;
n! l0 |) q. Q0 m# a! X3 ] - McData.suppressed = false;! ]0 n3 t' h) F! A5 |
- McData.implicit = false;9 k' ~. z1 R* p
- " e. ^+ L% R6 v
- tagObjectFrom = NULL_TAG;
7 b; `& \: d$ Q; x. W - tagObjectTo = NULL_TAG;, k" s5 B' C' R6 n: o
- UF_OBJ_cycle_by_name( "CYL_FACE_3", &tagObjectFrom );
; m6 w, r3 a3 w9 B - UF_OBJ_cycle_by_name( "P1", &tagObjectTo );
7 I( c& B; w) O+ u- [# r - tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
5 m- G% D0 ?% F& v - tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );0 M. h' e/ i, v$ O
- McData.constraints[ 0 ].from = tagPrototypeFrom;5 o# p+ B9 `3 Y0 s4 [! B4 Z
- McData.constraints[ 0 ].from_part_occ = tagOccCyl;+ R7 T$ j; G8 O5 u5 t0 ?1 [
- McData.constraints[ 0 ].from_status = UF_ASSEM_ok;
) ^: t7 l+ X5 ?+ z - McData.constraints[ 0 ].from_type = UF_ASSEM_cylindrical_face;& \7 t! q. C& w& P3 w5 _
- McData.constraints[ 0 ].to = tagPrototypeTo;( y% N3 s7 ?' w% w1 Y
- McData.constraints[ 0 ].to_part_occ = tagOccVBlk;
/ ~: {0 `1 R% k! E* b0 R p - McData.constraints[ 0 ].to_status = UF_ASSEM_ok;
& t! g0 Y8 G0 V6 ?# A9 N Z - McData.constraints[ 0 ].to_type = UF_ASSEM_planar_face;
" W2 q4 ^: s7 V$ @4 m8 { - McData.constraints[ 0 ].mate_type = UF_ASSEM_tangent;
0 p& ]4 n7 M: G5 \2 l - McData.constraints[ 0 ].offset = NULL_TAG;7 x8 V! N% ~: g. n2 m1 e
- McData.constraints[ 0 ].name = NULL;- M$ y0 k: s; x. W1 c7 M$ ? E3 t# e: p
- McData.constraints[ 0 ].user_name = false;6 T) K# h; P- [5 T5 T. R+ N% W
- McData.constraints[ 0 ].inherited = false;
9 g$ L+ ~% M" @ - McData.constraints[ 0 ].suppressed = false;+ A w. Z- y1 W$ x6 F: F
- McData.constraints[ 0 ].has_help_point = false;$ F9 m8 E/ B, |' H6 [( E
- UF_DISP_set_highlight( tagObjectFrom, 1 );
% ~7 `1 ^; `& J - UF_DISP_set_highlight( tagObjectTo, 1 );
/ n' O W1 {) V8 |) p: w - uc1601( "这两个面进行相切操作", 1 );3 @& K. L/ G- p5 @9 x
- UF_DISP_set_highlight( tagObjectFrom, 0 );
/ _0 c& v/ _8 _. Y6 ^' d0 G9 ] - UF_DISP_set_highlight( tagObjectTo, 0 );: z; w! J% K; f. v) [! Z
- " g; G8 W5 H( g
- tagObjectFrom = NULL_TAG;
" k2 L# u2 Q. ^7 F$ ]) A - tagObjectTo = NULL_TAG;
% w! T+ v2 x+ D E) k# }$ c - UF_OBJ_cycle_by_name( "CYL_FACE_3", &tagObjectFrom );& l+ s0 } _. G2 M" _/ {# b
- UF_OBJ_cycle_by_name( "P2", &tagObjectTo );
$ R3 S- ]' A9 }8 Y - tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );! L+ }; R* s9 q4 ?' f8 R$ B
- tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );+ \5 l3 W7 i/ t7 q
- McData.constraints[ 1 ].from = tagPrototypeFrom;
0 B+ N4 @1 f) z/ S! @- R( ` - McData.constraints[ 1 ].from_part_occ = tagOccCyl;
! l8 p9 b9 L" a7 Q% J - McData.constraints[ 1 ].from_status = UF_ASSEM_ok; ~3 T' K% E5 s
- McData.constraints[ 1 ].from_type = UF_ASSEM_cylindrical_face;
8 { R* `3 M. H - McData.constraints[ 1 ].to = tagPrototypeTo;+ e1 A# n$ R) W+ X/ p4 }4 E
- McData.constraints[ 1 ].to_part_occ = tagOccVBlk;
0 x. P: q) y8 ]' F7 G - McData.constraints[ 1 ].to_status = UF_ASSEM_ok;
+ X' N0 S. g, V' o+ F5 o1 Z - McData.constraints[ 1 ].to_type = UF_ASSEM_planar_face;; Y2 u6 ?% u, `
- McData.constraints[ 1 ].mate_type = UF_ASSEM_tangent;
# w' J$ Q& M' G: w" G - McData.constraints[ 1 ].offset = NULL_TAG;
( h; l& a3 ]) M8 C" w! B; L - McData.constraints[ 1 ].name = NULL;) n9 f3 ^ r' a; w$ r" {
- McData.constraints[ 1 ].user_name = false;
, i( U+ K% [; P7 j0 u1 o' e - McData.constraints[ 1 ].inherited = false;
: d3 ], y0 `7 v! m - McData.constraints[ 1 ].suppressed = false;
5 a0 {7 x! l+ x - McData.constraints[ 1 ].has_help_point = false;
4 r9 M' ?- n6 w# v - UF_DISP_set_highlight( tagObjectFrom, 1 );
, y/ ]' @5 K& f - UF_DISP_set_highlight( tagObjectTo, 1 );
8 q3 R& y% D: C) k - uc1601( "这两个面进行相切操作", 1 );
; f/ J* r4 g. N+ D - UF_DISP_set_highlight( tagObjectFrom, 0 );
' U4 S* L( O7 w. H - UF_DISP_set_highlight( tagObjectTo, 0 );3 z: q k2 @+ y, }4 R
' U0 g8 ]4 A c3 f: B9 K4 C2 e' h3 r- tagObjectFrom = NULL_TAG;
; |& {0 [8 z+ d) h( C* ]# ~' Q - tagObjectTo = NULL_TAG;
9 _6 Y$ p% O: q# ^* @' t( y - UF_OBJ_cycle_by_name( "CYL_FACE_1", &tagObjectFrom );; @7 c# y' Y+ g, ^
- UF_OBJ_cycle_by_name( "P3", &tagObjectTo );: y$ ~5 }0 G3 t7 Z5 Z* [# _
- tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );4 w* @) c6 E6 W3 a3 b
- tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
; D5 @' F0 Z0 O3 p) U: F' h - McData.constraints[ 2 ].from = tagPrototypeFrom;! p1 Y3 @8 t, [ [; J# c% N
- McData.constraints[ 2 ].from_part_occ = tagOccCyl;
+ d6 X- G8 s6 G" S - McData.constraints[ 2 ].from_status = UF_ASSEM_ok;& J/ k" h2 ]3 q* Y* Y4 Z( [7 ^/ r
- McData.constraints[ 2 ].from_type = UF_ASSEM_planar_face;- _# Y1 }3 Q/ A: Z% B j1 ]/ c; G
- McData.constraints[ 2 ].to = tagPrototypeTo;
& [8 t5 i6 k+ G - McData.constraints[ 2 ].to_part_occ = tagOccVBlk;1 w) Y/ o) U0 W- C+ W2 q6 k/ ?
- McData.constraints[ 2 ].to_status = UF_ASSEM_ok;. ]$ z+ i" m [4 B& s
- McData.constraints[ 2 ].to_type = UF_ASSEM_planar_face;
3 Z3 T! W/ c$ P9 d. V6 F - McData.constraints[ 2 ].mate_type = UF_ASSEM_align;
' X" W" }6 I* N& v" w' N( y - McData.constraints[ 2 ].offset = NULL_TAG;
) V2 K3 n4 A( h8 U - McData.constraints[ 2 ].name = NULL;6 E& V- `, k6 M$ z/ V8 V) J/ w. h
- McData.constraints[ 2 ].user_name = false;( i+ c" b! f& C9 e0 n& {
- McData.constraints[ 2 ].inherited = false;6 b! I% O, c1 U0 J& y; z7 Q7 h3 q
- McData.constraints[ 2 ].suppressed = false;
( M4 E8 h% s$ J3 r' X/ G - McData.constraints[ 2 ].has_help_point = false;
- |% { }- C l% P4 L- {3 B - UF_DISP_set_highlight( tagObjectFrom, 1 );
& f T7 q1 c+ i# b! ?, L @7 k - UF_DISP_set_highlight( tagObjectTo, 1 );
" g' k T9 b% J6 w" E/ r - uc1601( "这两个面进行对齐操作", 1 );5 p3 R6 R1 ?! f$ ~4 c
- UF_DISP_set_highlight( tagObjectFrom, 0 );1 N% q% M, `& |, t% h
- UF_DISP_set_highlight( tagObjectTo, 0 );
# L- [! X) F5 |: c! L8 l - ; _) G5 ^* Y& Q0 |
- double dblzTransform[ 4 ][ 4 ];
4 _0 z) u2 T4 s6 u9 f; d8 a3 s% } - UF_ASSEM_dof_t Dof;
" H" l0 ?8 y) A( P/ ^6 h' t; A) I/ _ - UF_ASSEM_mc_status_t Status;. \% K" g. l/ `# _% [# s
0 s$ Y; `8 M# `6 Y( Z& c
% U) ^- D/ I+ e) b8 k- /* 求解约束*/6 e# ?3 S4 L) S! m) H
- UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );
9 M1 o$ E) D9 k8 z0 ^( j! F$ r - if ( UF_ASSEM_mc_solved == Status )
0 C M9 d7 |" L! Y; b; Y - {
0 _6 Y" A4 t+ [7 j7 W! Z. s8 J - uc1601( "求解约束成功!", 1 );
* K! w3 J; a& h2 S$ l( U* m q - UF_ASSEM_mc_structure_state_t StructStatus;
3 @7 G4 ]* V* U/ Z: } S8 { - 9 z2 c9 F: h' g: k0 ]7 J' s
- /* 将约束应用到装配体上*/
7 ]7 W) V* U ^) s9 e - UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );3 n1 N/ R1 Q$ z# I( d) W, D3 `5 b
- if ( UF_ASSEM_structure_ok == StructStatus ) # ]; a/ [3 d, X8 w s7 q
- {! r" q( p1 R9 m6 T
- uc1601( "应用装配成功!", 1 );
: z+ g. A8 g$ n1 y& A( ~1 _ - + u- g8 W& k5 A5 @; p. H
- /* 更新模型*/: p$ R$ A$ D- w7 ^+ \% w
- UF_MODL_update();
" A! w# B) S6 K( B; x" n h - UF_DISP_refresh(); _: R. C+ u% F% [5 @
- }# f( k+ ?) f* a- s0 Y$ l/ w
- else uc1601( "应用装配失败!", 1 );
7 |' Y2 u! V( _! E( H+ U - }& C9 `/ _, H/ U6 Q& z
- else uc1601( "求解约束失败!", 1 );
3 f" }2 P4 u( u- [" U - }
! c h: J' _$ ~4 I5 j - }
! B* B% j8 ^, n' Y
复制代码
6 ~% a6 P t8 c$ O# Q9 W4 N2 u' M5 e
2 D# o# l2 [$ x9 e5 n
4 k0 A7 W5 e8 @% A
: M2 q% z; O$ ^! N5 `4 `: X- F# v# l- L3 O+ V$ a. d; _. H* w
5 s4 O t2 l+ R: y |
|