|
|

楼主 |
发表于 2007-10-1 14:46:53
|
显示全部楼层
来自: 中国江苏徐州
假设已经在组建环境中装配了一个元件(已经手动装配完成),名称为a.prt,现在欲向这个组件中装配另一个元件b,且在元件a和元件b中已分别定义了用于对齐的两组轴和两组平面,分别为A_AXIS_1和B_AXIS_1,A_DATUM和B_DATUM.8 \$ J. |' S/ B1 n
目前出现的问题是我点击Button2按钮想执行OnButton2()时pro/e自行关闭,哪位高手帮帮忙哈!
@0 U4 }( q3 e' y( c4 m: l% ~9 `3 i& L6 y: t8 G. J6 o6 D8 S }# Y
: N* [+ u. K( w w- [8 u P7 U
void CAssembly::OnButton2() " ^* L( O$ P, S- ]: M
{
+ T- a/ w0 r* `: r3 h ProError status;4 |( U7 y# n1 k4 ^' ]) u
ProFileName MSGFILE; //消息文件; s: \; M# I0 ?' r( ~. I
ProMdl assembly; //已装配好元件的组件+ U( c0 X+ ~0 I9 ~6 t) w3 t2 y
ProMdl comp_a; //作为装配参考的元件
7 J# i* R8 _) f& r ProMdl comp_b; //待装配的元件句柄
" {- n" A' |/ o8 |4 Q ProName w_asm_def_axis; //接受comp_a中的默认的装配轴A_AXIS_1
4 r5 V$ j# w' u- |* z" w+ v3 P4 ^! F ProName w_asm_def_datum; //接受comp_a中的默认的装配平面A_DATUM6 d& h H; w K x0 Z7 B
ProName w_comp_def_axis; //接受comp_b中的默认的装配轴B_AXIS_1
8 S" Q( ^; W+ R) X+ c ProName w_comp_def_datum; //接受comp_b中的默认的装配平面B_DATUM, C+ l; C. q/ b6 f9 [. d
ProPath file_path; //待装配的文件的路径( h: S0 c' E; w) O: N
int AssemblyWindowID; //当前组件环境的窗口ID ! [# L2 f y+ o4 B4 v( l
ProName w_a_name; //接受comp_a的名称
3 s- a% q: g% e5 R y( B* D) L5 f* @ int id_comp_a; //用于接受作为装配参考的元件的标识符' k- V6 H; X$ g* R3 V: [) S
7 n' E1 F6 m1 u' f: e7 Z ProStringToWstring(MSGFILE, "usermsg.txt");
& i n- }3 R+ k- _5 o* f8 \ status=ProMdlCurrentGet(&assembly); //获得当前已装配元件的组件3 a. B. r6 c: ~0 Q
. E8 \" i/ q. V7 a# T5 ~ ProStringToWstring(w_a_name,"a"); //将装配元件a的名称转为wchar_t型0 Z" k# j0 } ^4 w+ H
status=ProMdlInit(w_a_name,PRO_MDL_PART,&comp_a); //获得作为参考的以装配元件a! }* c5 n" e$ i
status=ProMdlIdGet(comp_a ,&id_comp_a); //获得作为参考的已装配元件a的标识符7 W3 ^6 k1 R! T6 n& Y" Z6 q- T
3 @2 C' X0 o( m( O. q
/*================================================================*\+ F; t% j2 {% I2 h( g3 [ F
将元件中的轴和平面名称转化为wchar_t的类型: v8 y- t" f! q+ \
\*================================================================*/, |7 _" [* E/ H( @
ProStringToWstring(w_asm_def_axis,"A_AXIS_1");
. t4 u. q% I! n% @: Q' q ProStringToWstring(w_asm_def_datum,"A_DATUM");- l/ {1 D" A, S4 z; `0 {! Y7 j& m
+ F+ _, [$ y8 s/ }3 `8 O$ B/ l' O% a! d
ProMdlWindowGet(assembly,&AssemblyWindowID); //得到装配容器assembly的窗口ID值
6 o* }2 C# e2 C9 \3 i2 B0 @3 U2 z+ V
ProStringToWstring(file_path,"D:\\Protoolkit\\Zhijia\\四杆机构\\b.prt");
% K- _/ u' r; M/ @6 Z status=ProMdlLoad(file_path,PRO_MDL_UNUSED,PRO_B_FALSE,&comp_b); //开始获得待装配零件component
: W( O7 D6 a, ? # U0 i& j) R& P8 v
/*================================================================*\
$ @* ] m" F9 ~5 P 获得待装配零件component的装配轴和装配平面
( E, V' k @; n2 x' { \*================================================================*/5 }& @! r7 w, M1 u
ProStringToWstring(w_comp_def_axis,"B_AXIS_1");
% |4 p+ S6 l3 \8 G0 ~' w ProStringToWstring(w_comp_def_datum,"B_DATUM");6 R6 q! a$ G" l/ [+ y e0 V
, `8 o# y$ d. g5 _( { /*================================================================*\
2 T$ x, t; W, d8 `# |! P( L: `* U 调用函数,开始装配0 j, H# o- @3 h5 B+ s/ \
\*================================================================*/
8 y) ?0 E) r ]" X5 h" a status=UserAssembleByAxisAndDatum((ProAssembly) assembly, //已装配元件的组件句柄$ }( s2 Y5 \/ t' F, h# W- D
(ProSolid)comp_a, //组件中用于参照的元件a句柄9 b5 w8 p9 e$ c6 M7 W1 D
w_asm_def_axis, //用于参照的元件a中的轴
/ @" T% D1 f2 B: ^: k/ Q w_asm_def_datum, //用于参照的元件a中的平面# g2 ^7 R; [8 `" V. t" v
(ProSolid)comp_b, //待装配元件b的句柄2 ~3 e" R; |' E
w_comp_def_axis , //用于参照装配的元件b轴
- i, Z8 G+ C/ H* h w_comp_def_datum, //用于参照装配的元件b平面& W% Z4 }9 ?* w
id_comp_a);
- a* f( T' g- L4 |: O3 E3 r T. g6 J P c: t
status=ProMdlDisplay(assembly); //显示装配的结果
+ |+ U3 ` a: o, L status=ProWindowCurrentGet(&AssemblyWindowID);" `) N; r' z/ w5 _, r1 m
status=ProWindowActivate(AssemblyWindowID); //激活当前窗口* g$ Q. [% i4 Q$ {0 Z
( f4 t8 t2 o1 T7 c3 [# k, q# C
return ;! P: K O" h! F! G3 ]
} |
|