|

楼主 |
发表于 2007-10-1 14:46:53
|
显示全部楼层
来自: 中国江苏徐州
假设已经在组建环境中装配了一个元件(已经手动装配完成),名称为a.prt,现在欲向这个组件中装配另一个元件b,且在元件a和元件b中已分别定义了用于对齐的两组轴和两组平面,分别为A_AXIS_1和B_AXIS_1,A_DATUM和B_DATUM.
" ]5 ~; m; {; C) O% _7 F' m目前出现的问题是我点击Button2按钮想执行OnButton2()时pro/e自行关闭,哪位高手帮帮忙哈!5 A& q& a& F" p% R9 ?
) R7 Y- o5 G3 Z6 n, N
{: u$ t3 g% }$ gvoid CAssembly::OnButton2()
6 `! g3 P( ?/ d* Y6 T9 E P{
# _3 t6 }( k1 n3 S( H8 ~, o: J ProError status;2 b' }! N7 Z* H
ProFileName MSGFILE; //消息文件! T; ]% G- Q' H0 e6 a7 c6 @
ProMdl assembly; //已装配好元件的组件) T+ _! k+ [) p( B% c
ProMdl comp_a; //作为装配参考的元件; ^6 `" b2 K: z, f
ProMdl comp_b; //待装配的元件句柄+ _% f. ^2 x% S2 |/ x; l4 D
ProName w_asm_def_axis; //接受comp_a中的默认的装配轴A_AXIS_1
% D, g1 O ?% J ProName w_asm_def_datum; //接受comp_a中的默认的装配平面A_DATUM
& @ v6 N7 d1 m5 } ProName w_comp_def_axis; //接受comp_b中的默认的装配轴B_AXIS_13 {. }6 k' R+ [: j
ProName w_comp_def_datum; //接受comp_b中的默认的装配平面B_DATUM
: P0 \% W9 K, c0 g ProPath file_path; //待装配的文件的路径
- L( `; w) B+ U+ R% r7 ` int AssemblyWindowID; //当前组件环境的窗口ID 1 L6 C6 K' N% B4 Y, M3 Z
ProName w_a_name; //接受comp_a的名称8 f/ O S$ k% f: E# [5 o; P
int id_comp_a; //用于接受作为装配参考的元件的标识符
4 C4 ]2 y' H, A+ S" h- p: z8 c
5 R' p% e3 u8 o( |0 Z( g: | ProStringToWstring(MSGFILE, "usermsg.txt");/ v9 k! v9 R3 f4 R
status=ProMdlCurrentGet(&assembly); //获得当前已装配元件的组件" y& U2 K, y" G& ]. r4 i
+ a$ c+ {4 F3 F6 j$ d V8 X! s
ProStringToWstring(w_a_name,"a"); //将装配元件a的名称转为wchar_t型) j: n9 ]8 v' }1 ~0 F
status=ProMdlInit(w_a_name,PRO_MDL_PART,&comp_a); //获得作为参考的以装配元件a
- G3 @3 j, ^6 k$ | status=ProMdlIdGet(comp_a ,&id_comp_a); //获得作为参考的已装配元件a的标识符, x2 S2 v. B& ~8 I$ C a
4 C% d# v; g5 l% \4 e8 s /*================================================================*\/ h% H3 M) [7 Y: m% c. q
将元件中的轴和平面名称转化为wchar_t的类型
+ X- U4 X, b+ V2 i4 P+ c \*================================================================*/5 _2 @' V( p7 W( \" o
ProStringToWstring(w_asm_def_axis,"A_AXIS_1");
' {0 o$ I, P/ E3 y3 D0 N3 U ProStringToWstring(w_asm_def_datum,"A_DATUM");
$ @, o6 z" |: |1 h0 k- P$ p l9 u* v
5 D9 [1 X" T# m1 H. S$ Z. x8 { ProMdlWindowGet(assembly,&AssemblyWindowID); //得到装配容器assembly的窗口ID值, Z z# l/ V, U# P
6 p1 a3 B* u8 L7 ~2 f9 ]
ProStringToWstring(file_path,"D:\\Protoolkit\\Zhijia\\四杆机构\\b.prt");
2 _+ T8 @* Y$ G0 v k" `: }+ e R status=ProMdlLoad(file_path,PRO_MDL_UNUSED,PRO_B_FALSE,&comp_b); //开始获得待装配零件component2 z" a6 K# `: h" Q1 t% h1 ~% ~5 w
6 r% G/ \* p! o& |. m$ } /*================================================================*\
* n- V. ~- J5 q P8 D 获得待装配零件component的装配轴和装配平面% u/ Q' s6 m( B) y6 _
\*================================================================*/1 ]7 L C. ?7 q9 I
ProStringToWstring(w_comp_def_axis,"B_AXIS_1");* O8 V' O3 o0 H0 J1 Q; H+ A
ProStringToWstring(w_comp_def_datum,"B_DATUM");2 l6 t* l: r: K; j1 d8 }6 j& E
2 v! X1 k2 h, l1 F; Y9 v; c /*================================================================*\
% Q; B5 I7 _) {: ^& [: e0 {1 g k 调用函数,开始装配! f, ], H/ [. N0 q3 Z- {( D1 ^
\*================================================================*/% i/ r3 C9 c* V, i' Z' z
status=UserAssembleByAxisAndDatum((ProAssembly) assembly, //已装配元件的组件句柄2 v, S7 C/ h7 N9 }/ v) y! h! {& H! g
(ProSolid)comp_a, //组件中用于参照的元件a句柄
1 e# \8 z# z4 x w_asm_def_axis, //用于参照的元件a中的轴
& x: R& _# f/ K3 u" n5 g w_asm_def_datum, //用于参照的元件a中的平面
" G5 e8 O9 b; z# I) Z: d4 r1 U (ProSolid)comp_b, //待装配元件b的句柄0 S1 Z# n* c7 ~& O( e
w_comp_def_axis , //用于参照装配的元件b轴/ ~7 E7 w7 h* ~% s1 i
w_comp_def_datum, //用于参照装配的元件b平面5 ?! q1 y, V. ], t0 o4 e
id_comp_a); 5 l) C3 H) z2 ^" M
3 A+ j" a& E7 ^5 |
status=ProMdlDisplay(assembly); //显示装配的结果* c' Y! t! J& t
status=ProWindowCurrentGet(&AssemblyWindowID);3 k' w, W" G; X& ]3 M
status=ProWindowActivate(AssemblyWindowID); //激活当前窗口
/ W, l1 M. P6 j5 R) p+ \/ T' p) L3 }$ h" u% }, u& f+ x7 A) W
return ;, f7 _3 ~4 K" [2 c, U) w
} |
|