|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
使用UFUN进行UG NX二次开发: 装配设计技巧及步骤
0 }9 E9 A# {6 b$ F/ ?& ^: ?) ~- F$ `4 N4 {6 V
3 [; Q- U! j- f$ _* n' T1、装入部件
W6 z, `& t1 H3 q+ w8 b }* J( }通过函数UF_ASSEM_add_part_to_assembly()指定部件装入的位置 、姿态等信息,实现在装配体中装入一个部件功能;
4 n. T2 w; `6 t( s. S# V) [( }* h$ o1 t) R9 ~
2、创建配合关系# Y: s8 O+ @6 I) Q3 ^) \3 }/ z
a.通过函数UF_ASSEM_init_mc()初始化约束;
6 W$ F) d$ W: C8 V4 |b.定义约束关系,即填写结构UF_ASSEM_constraint_s中信息;3 Q, }% A9 w6 p# ]6 |' o
装配中各部件间的配合关系是通过装配约束关系来实现的。装配约束是指一个部件到另一个部件的约束,将部件A配合到部件B上,则部件A称为主动件(from),部件B称为被动件(to),在约束求解过程中,被动件在装配空间中的位置固定,而主动件将变换姿态到满足装配约束位置上。组成配合关系的约束之间不能存在几何关系上的矛盾,也不能形成循环定义。
! o" h. N9 B8 jc.通过函数UF_ASSEM_solve_mc()求解约束;* f e- l/ M% m m0 F+ \
d.通过函数UF_ASSEM_apply_mc_data将约束应用到装配体上;5 o, |( N3 J w. I x
e.通过函数UF_MODL_update更新模型。$ P" l) k& p+ v) j8 z# H, I+ u, i
. z- T' }! [) K, a
- #include <stdio.h>$ V: F8 P; L' S% G' Q
0 E, N, q: A* o3 r, y* w+ `1 h- #include <uf.h>
0 d' c% a- {; a b G4 f- q) b5 V - #include <uf_ui.h>" U! Y! g G0 z: l0 s! f# ~+ }( Q
- #include <uf_obj.h>
' y1 l0 m: h# E6 ?; {* m3 S - #include <uf_disp.h>1 D) E0 ^9 D& c0 A- C% Z) a
- #include <uf_modl.h>8 C, G% ^2 N! a3 Z
- #include <uf_part.h>+ E2 r5 {" F0 [: ?5 B
- #include <uf_assem.h>
! D5 {3 w* Y* N. e* M1 c C
2 D3 L, }% e% g8 f3 q* c) i% ?- #define UF_CALL( X ) ( report( __FILE__, __LINE__, #X, ( X ) ) )! T0 p: E! z$ _7 P" l, ~' A
' r! X- D2 y! O4 h X1 M& w/ x- int report( char *file, int line, char *call, int irc );
% X( C X- w+ W9 x0 o* A - void DoAssembly( void );; }( w4 ]# Q9 B6 y5 h
- ; s# c2 O# Q& z2 a
- int report( char *file, int line, char *call, int irc )$ B4 r* j& y2 \/ _7 D" |
- {
1 ~: |% i, ~; L# P6 ~) N - if ( irc )
( E3 i) h+ y- w# L P0 T - {8 M! M/ J/ N0 d( \
- char err_msg[ UF_UI_MAX_STRING_LEN + 1 ];' d. w: u/ _+ v, S
- char msg[ 133 ];
# M! d8 t0 b4 [7 G - char fail_message[ 133 ];: o/ f5 C' D3 {3 g
- int len;
/ G3 j$ o+ K1 G1 i$ @3 @
# Y' ]' [2 ~; p) r8 g- UF_get_fail_message( irc, fail_message );# q/ c7 |# M E8 Q
- 8 Q- y+ z6 t; C+ K! {
- sprintf( err_msg, "%s, line %d: error %d: %s", file, line, irc, fail_message );$ m: i1 i$ j" |. o; w- N! k6 E
$ `9 _; V1 I) C/ c# i- len = strlen( err_msg );
& B2 {3 M0 z' |7 V5 Q - len = ( len < 131 ) ? len : 131;
% I4 b4 y# Q/ g! q( Q- w - strncpy ( msg, err_msg, len );
- i3 N+ X: z& t9 Y! z) ]$ Q - msg[ len + 1 ] = '\000';3 r) Z0 p& a* g
, [& V- q* h" a, {( q- uc1601( err_msg, TRUE );
& I P" ~% E; { - }% M2 |" b+ F; m# h/ O
- return( irc );
+ E# f6 m5 Z2 b - }
" h( }0 t n. n! u% Y+ V
; }1 S# s2 f' C5 ]- extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
& G4 A0 v1 o9 f& h) G8 w9 ` - {
# u! C- u- H) m! i7 g! h+ f J; y - if ( UF_initialize() ) return;
: h3 T" j7 p: A& R F; M - DoAssembly();8 C3 X) |4 M8 q8 W k+ L7 M
- UF_terminate();" k0 [& u3 B8 b C9 y# N
- }. V1 o5 k4 r) Q3 m; v1 b
5 Y N* W8 t, a7 U0 n- void DoAssembly( void )1 C; n1 I, o/ @/ @
- {
) G* N1 R. E0 q1 l$ Z3 Z6 @ - if ( NULL_TAG == UF_PART_ask_display_part() )
* @. d0 Z1 s9 V& v5 g2 } - {
& {+ u- [" f- L+ r8 { - uc1601( "请新建一个文件再进行本操作!", 1 );+ L" S; `# ]/ D3 c/ q
- return;. j8 W r, O1 N, |& M
- }
+ S. w) Z* e- J2 w7 v N - 4 P, A, u- X9 M$ R+ }
- tag_t tagInsCyl = NULL_TAG;( a5 t& h( N1 |* U+ G( i2 F
- tag_t tagInsVBlk= NULL_TAG;
7 L: x1 }3 Z! D4 L - tag_t tagOccCyl = NULL_TAG;
& `7 p' J$ x; T9 M( z3 y5 e - tag_t tagOccVBlk= NULL_TAG;
/ Q+ e5 ^; f) P& L' c$ ~7 G/ f7 F' i - UF_PART_load_status_t ErrorStatus;
( Y8 h0 ^' {6 I _3 E9 B6 l - ) q0 e9 G6 i, ^; ~+ s
- double dblzOrigin[ 3 ] = { 0, 0, 0 };. _9 C. ?: y9 b4 p7 k0 E5 y3 X
- double dblzCsysMatrix[ 6 ] = { 1, 0, 0, 0, 1, 0 };# Q6 _6 D w; n' _; W% o
- % P* C4 n7 Y. g K) O2 m
- /* 装入部件GB2208_80_Vblock.prt */# q2 Z; O7 Y2 y+ }
- UF_ASSEM_add_part_to_assembly(6 Y- x% q8 ]. B8 I* z
- UF_PART_ask_display_part(),4 G9 U: Y( E" E
- "f:\\ug\\chapter4_1\\GB2208_80_Vblock.prt",
! O1 e5 C8 q. ~/ G3 i - NULL,5 q6 d0 N1 z" U9 t3 q
- "VBLOCK",
, h8 U* ?. j) _& ~" ~- v) ]* q - dblzOrigin,
/ C3 U2 p$ V2 m" X - dblzCsysMatrix,$ R; R" z; w" t$ f& B# r9 c# C
- -1,& i9 s3 ?8 r$ n6 h' f. O( s o
- &tagInsVBlk,
1 c- J' ~0 g/ h* B - &ErrorStatus );
! H9 G( A% L$ h# ^3 u1 i9 } - /* 装入部件Cylinder.prt */
3 q) E) l; e: x* f - dblzOrigin[ 1 ] = 50;
5 A) v6 L) l) Q8 N0 | - UF_ASSEM_add_part_to_assembly(
4 C- i' ?# r5 X+ K - UF_PART_ask_display_part(),
% ~& H" r! O$ H0 T) m - "f:\\ug\\chapter4_1\\Cylinder.prt",8 t) s3 H0 O3 [% y; q* `7 Q
- NULL,) U1 a% b5 w0 a4 I. m8 h7 l
- "CYLINDER",
+ b: Q5 c3 F4 C, z - dblzOrigin,
3 i6 ]8 O1 }6 ` z# v8 U - dblzCsysMatrix,
* d& j4 e" n4 o/ h2 P6 x0 j - -1,
; m$ P( M& o5 k# X4 w1 ~9 z - &tagInsCyl,
# A5 }+ ?: ]( z+ v5 Q: l, l - &ErrorStatus );
9 _* n7 D5 o& O9 W3 s! M - tagOccCyl = UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsCyl );
4 _' F& l; s$ t - tagOccVBlk= UF_ASSEM_ask_part_occ_of_inst( NULL_TAG, tagInsVBlk ); Z, v+ E+ t! @4 S7 h8 \- F2 H
3 X3 F$ w+ V2 P; C& c* y- /* 创建配合关系 */2 m3 b9 o$ V8 M7 F3 O* h
- UF_ASSEM_mating_condition_t McData;
P- S* r1 J! r/ _, k - tag_t tagObjectFrom = NULL_TAG;
+ ]- I$ r. w% s* J' C - tag_t tagObjectTo = NULL_TAG;
8 M3 d- Y6 [, ~2 F0 r' D - tag_t tagPrototypeFrom = NULL_TAG;
4 O+ V: U3 z! K4 E/ X$ K# R P1 Y - tag_t tagPrototypeTo = NULL_TAG;# X# d7 c: ~/ B& f: V
-
; M1 k$ g5 ? J+ i4 v5 } - /* 初始化约束*/
2 Z0 p( S/ \7 q- f# Y9 ~ - UF_ASSEM_init_mc( &McData );
5 r' [- d$ k* A# Y) K - 9 E( N) b/ n$ A, }. m% b
- /* 定义约束,构造配合关系*/8 Z6 K1 h2 o% `1 s* I" q
- McData.mated_object = tagInsCyl;
) Y/ c U4 P0 q9 G t) O. e, i -
0 p) _9 |& u8 O3 U" L - McData.num_constraints = 3;
& m6 r" q; F; c& j a - McData.name = NULL;. m Y) Z3 S, s+ O, M
- McData.user_name = false;
& D9 h9 { G) U3 v5 r7 ~( g - McData.override = false;
, \" C( J! m' C; ]/ Y - McData.suppressed = false;; ]8 Z: X' K" g1 g/ z. ~
- McData.implicit = false;8 u9 e1 X9 }/ d8 C3 H
- - A: V9 j; _4 H
- tagObjectFrom = NULL_TAG;
! \. D8 h: U' E& @. N/ H( N - tagObjectTo = NULL_TAG;
1 g" E# w0 H2 ]! g7 l3 Z" z - UF_OBJ_cycle_by_name( "CYL_FACE_3", &tagObjectFrom );0 N, A$ c/ D8 Q5 Q4 ~* [+ s: ^% h
- UF_OBJ_cycle_by_name( "P1", &tagObjectTo );
! }" Q! S& H+ X6 [/ M- [" q8 C( K+ Z( ? - tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );
# S* r# L- I9 X2 U* I; Y! E - tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );
' o$ R! H2 @ B4 {7 q' V! H0 x8 e% g# C - McData.constraints[ 0 ].from = tagPrototypeFrom;7 z- f4 }$ l& b. d0 ]$ V! h
- McData.constraints[ 0 ].from_part_occ = tagOccCyl;
) i$ d# }& j/ w$ G! u5 ^ - McData.constraints[ 0 ].from_status = UF_ASSEM_ok;! F. W% ^2 e9 o9 Q( J- d
- McData.constraints[ 0 ].from_type = UF_ASSEM_cylindrical_face;; T S2 F- p) r/ K0 j& ~& `' [
- McData.constraints[ 0 ].to = tagPrototypeTo;
' L, L+ J5 y& R9 O! I/ C8 k - McData.constraints[ 0 ].to_part_occ = tagOccVBlk;
3 O$ s5 _, E* q7 ~ - McData.constraints[ 0 ].to_status = UF_ASSEM_ok;% }! O! V1 T7 O7 s9 Y0 ]: ]0 l
- McData.constraints[ 0 ].to_type = UF_ASSEM_planar_face;
6 I9 q+ \0 ^; K$ r) v - McData.constraints[ 0 ].mate_type = UF_ASSEM_tangent;
% q0 N2 G3 B4 r) X - McData.constraints[ 0 ].offset = NULL_TAG;% p0 S+ p0 s+ W
- McData.constraints[ 0 ].name = NULL;
, G- T% D7 s r0 p8 q/ C4 z. x - McData.constraints[ 0 ].user_name = false;9 d2 t$ ?/ u5 U H
- McData.constraints[ 0 ].inherited = false;, F ^( `% p4 t
- McData.constraints[ 0 ].suppressed = false;
- p) ?: ^. q4 }$ f" N" A - McData.constraints[ 0 ].has_help_point = false;
! h. l% N `, a+ r7 O" | - UF_DISP_set_highlight( tagObjectFrom, 1 );
" g, L8 v9 d; a9 ^ - UF_DISP_set_highlight( tagObjectTo, 1 );- S5 q# U& k+ [4 {0 ^# M( c, d
- uc1601( "这两个面进行相切操作", 1 );; I1 g9 y" L8 L0 N( {& D) z
- UF_DISP_set_highlight( tagObjectFrom, 0 );$ _; B" f: w6 l5 h2 L' m
- UF_DISP_set_highlight( tagObjectTo, 0 );6 j7 x( `+ P' [6 g2 C/ M, o
- 4 P4 `- \7 R3 ^" j0 u: `9 j
- tagObjectFrom = NULL_TAG;( f: O3 E) W! H; ?
- tagObjectTo = NULL_TAG;
0 d3 Q& u x1 L) e1 b - UF_OBJ_cycle_by_name( "CYL_FACE_3", &tagObjectFrom );0 v; Y' C- r, ?8 k% N. {5 t
- UF_OBJ_cycle_by_name( "P2", &tagObjectTo );; k8 ?6 }7 a5 [* `
- tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );( M- g3 G% q n1 m- v/ d9 D
- tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );8 K, E: z2 p7 ~6 D$ i0 ?6 ?
- McData.constraints[ 1 ].from = tagPrototypeFrom;
2 n& k0 g% L# @( y - McData.constraints[ 1 ].from_part_occ = tagOccCyl;
4 i c2 r* {* f - McData.constraints[ 1 ].from_status = UF_ASSEM_ok;- M, a2 N3 r) K d& ?
- McData.constraints[ 1 ].from_type = UF_ASSEM_cylindrical_face;
/ q, ^8 w6 p0 T$ o H2 Y# n- D# t - McData.constraints[ 1 ].to = tagPrototypeTo;& ?( H b! v4 c3 c1 B
- McData.constraints[ 1 ].to_part_occ = tagOccVBlk;
! ]$ E& |- M& L7 f$ F - McData.constraints[ 1 ].to_status = UF_ASSEM_ok;
& ]( `8 m- L! w* K" w1 U - McData.constraints[ 1 ].to_type = UF_ASSEM_planar_face;! i& ?2 A! `! ?3 |2 G4 a: H( h/ E. [
- McData.constraints[ 1 ].mate_type = UF_ASSEM_tangent;+ j2 z; S1 Z; t4 o- [
- McData.constraints[ 1 ].offset = NULL_TAG;
( r* a% s5 _4 X. m# z$ ]2 l" ` - McData.constraints[ 1 ].name = NULL;
" k/ {8 T7 K% X. k - McData.constraints[ 1 ].user_name = false;
1 {& k* p7 _0 O ? - McData.constraints[ 1 ].inherited = false;
0 \# u- f& ]9 B' V0 }' ]' G - McData.constraints[ 1 ].suppressed = false;9 e6 K. M J0 D; A& D9 X2 {
- McData.constraints[ 1 ].has_help_point = false;& D2 Z* ^4 n1 P' n2 U' V9 M) l. t
- UF_DISP_set_highlight( tagObjectFrom, 1 );- f- ?- k4 @$ ^/ ^0 ?8 Y
- UF_DISP_set_highlight( tagObjectTo, 1 );
* S1 ^9 d; D4 L5 W% ]2 t1 a7 } - uc1601( "这两个面进行相切操作", 1 );
* S" \4 e! A! u: }0 U( f - UF_DISP_set_highlight( tagObjectFrom, 0 );0 i# o4 p( {9 X& Y; P9 Y
- UF_DISP_set_highlight( tagObjectTo, 0 );
1 i* U" B. {% ~
Q/ x% h2 s* _- tagObjectFrom = NULL_TAG;5 V0 P/ ^; p- h) d( S" y
- tagObjectTo = NULL_TAG;5 _& f( ^/ J! z
- UF_OBJ_cycle_by_name( "CYL_FACE_1", &tagObjectFrom );
1 `) ]2 l' Q; r% } - UF_OBJ_cycle_by_name( "P3", &tagObjectTo );
: P% J! |. f) T5 o4 Z - tagPrototypeFrom= UF_ASSEM_ask_prototype_of_occ( tagObjectFrom );5 r7 A8 P n! i. Z/ A* P
- tagPrototypeTo = UF_ASSEM_ask_prototype_of_occ( tagObjectTo );' o7 W) X/ }) _: R0 |
- McData.constraints[ 2 ].from = tagPrototypeFrom;) _0 Z) B" m) p1 H
- McData.constraints[ 2 ].from_part_occ = tagOccCyl;
3 @& [( m% d- L$ o! w - McData.constraints[ 2 ].from_status = UF_ASSEM_ok;
: q8 `& ?8 v' j9 v# i) N3 Q - McData.constraints[ 2 ].from_type = UF_ASSEM_planar_face;
% m! a2 [+ b7 N/ e9 m& g - McData.constraints[ 2 ].to = tagPrototypeTo;0 T H5 L0 t* U
- McData.constraints[ 2 ].to_part_occ = tagOccVBlk;
1 n$ w3 M- \0 J( e - McData.constraints[ 2 ].to_status = UF_ASSEM_ok;
' U! x) a: m6 w& f5 d: F% @ - McData.constraints[ 2 ].to_type = UF_ASSEM_planar_face;
7 A' ?3 C; r& ]8 p - McData.constraints[ 2 ].mate_type = UF_ASSEM_align;
4 Y U# v. j& n o! ]( \( c( s - McData.constraints[ 2 ].offset = NULL_TAG;5 Y! E' \7 j/ a* _7 P7 r8 P
- McData.constraints[ 2 ].name = NULL;
2 U( J, b1 v0 t# G$ B, Q& A - McData.constraints[ 2 ].user_name = false;
/ y- U0 s9 z+ ~6 {& G - McData.constraints[ 2 ].inherited = false;; c7 |# l: b k1 ~2 c0 {
- McData.constraints[ 2 ].suppressed = false;
; K" Y: O K9 U- c1 A& n' \) ?& F - McData.constraints[ 2 ].has_help_point = false;
/ R' I N0 Q4 f' L - UF_DISP_set_highlight( tagObjectFrom, 1 );1 q5 d: O$ a& p$ |5 Q+ y" o
- UF_DISP_set_highlight( tagObjectTo, 1 );6 j* n1 }4 V! [( \9 i9 R$ I. C& |+ L
- uc1601( "这两个面进行对齐操作", 1 );
5 L* A% W7 v' ^( @# { - UF_DISP_set_highlight( tagObjectFrom, 0 );% j" @5 n: ^! L- m, f, t
- UF_DISP_set_highlight( tagObjectTo, 0 );
; v/ H! S) g5 p2 v1 }/ y0 E" U) J - 5 }+ G7 G5 Z0 O& c* Q% ?
- double dblzTransform[ 4 ][ 4 ];+ |5 i/ w+ B. z- D$ m
- UF_ASSEM_dof_t Dof;
0 y% \' ]! Z6 [5 M - UF_ASSEM_mc_status_t Status;
6 J2 [6 `4 k7 x# i/ p6 P# q - ) h7 v6 D X& s& u( J! o. ~
) k- b. u) k4 s$ P) G1 t3 A- /* 求解约束*/
( e( ~. A; h. M" C; V, f - UF_CALL( UF_ASSEM_solve_mc( &McData, &Status, &Dof, dblzTransform ) );
+ h# _* e# v& B# U" k - if ( UF_ASSEM_mc_solved == Status )
9 @. k% G& B L; H$ P3 A- _ - {
. \/ |% z q6 A$ y - uc1601( "求解约束成功!", 1 );
% b! z8 \2 \4 t) \1 y. U - UF_ASSEM_mc_structure_state_t StructStatus;8 |' ]- m7 I( T! W9 p
- $ ]2 D2 t( L c! p6 t# i. m1 I
- /* 将约束应用到装配体上*/
. x% h l9 M5 C+ k+ L - UF_CALL( UF_ASSEM_apply_mc_data( &McData, &StructStatus, &Status ) );
/ H9 ]2 U( r2 s - if ( UF_ASSEM_structure_ok == StructStatus )
/ r, D# @& d V" ~" p& J6 C - {
& W0 p6 x7 k) ~) r - uc1601( "应用装配成功!", 1 );0 d# f0 ~( b4 v( I3 z# X
-
: H" c' {" m& B, l Z! ~ - /* 更新模型*/. d7 e P; d( |* t
- UF_MODL_update();- l! L9 H' C$ T# D9 t
- UF_DISP_refresh();
0 i' X1 N4 V6 M2 F- T - }# [! h" ]0 ^/ M- r8 U
- else uc1601( "应用装配失败!", 1 );; C; d' a, M: p. H( ~4 C# B) J
- }
: q# @/ p% }; ^! R, Q, O. a - else uc1601( "求解约束失败!", 1 );. A' @. A! D: t# Q( B
- }% F/ A7 n. r% G
- }
% `' v4 V9 @4 o0 U, V
复制代码
# Z% [; _% T* C/ k. R. q9 G
! j g: g( V f% s' a' z! ~$ g# j+ a; P# ^$ w5 r
8 w/ x$ p; N7 i+ g
8 Q c3 }, _- w: [* t+ K8 G' C
: M9 n- M, m0 P2 R. ^( V* q% j2 B2 _. x6 b0 R1 J
|
|