|

楼主 |
发表于 2007-10-1 14:46:53
|
显示全部楼层
来自: 中国江苏徐州
假设已经在组建环境中装配了一个元件(已经手动装配完成),名称为a.prt,现在欲向这个组件中装配另一个元件b,且在元件a和元件b中已分别定义了用于对齐的两组轴和两组平面,分别为A_AXIS_1和B_AXIS_1,A_DATUM和B_DATUM.2 F* z- Z' F: n a
目前出现的问题是我点击Button2按钮想执行OnButton2()时pro/e自行关闭,哪位高手帮帮忙哈!
% X3 Z7 R" ]# k8 q6 N6 I+ I* e E9 _' r5 k: K+ w* ]
+ [4 I3 J9 H i) _
void CAssembly::OnButton2() 2 E+ W6 ~$ s, l9 D* X8 U1 {
{ 3 Q% M% B2 _' R7 Y
ProError status;) F: L( }7 n' k+ Z( V( @+ D
ProFileName MSGFILE; //消息文件5 @3 F7 w" ^! A
ProMdl assembly; //已装配好元件的组件9 X! t( L5 P* E. z* x: @. x% f
ProMdl comp_a; //作为装配参考的元件4 h" @& n& X9 \7 M z
ProMdl comp_b; //待装配的元件句柄
- m, t5 B& Z) ~* J7 V3 u; h- S ProName w_asm_def_axis; //接受comp_a中的默认的装配轴A_AXIS_1/ Q$ I# _8 P8 E$ c
ProName w_asm_def_datum; //接受comp_a中的默认的装配平面A_DATUM/ Z; w {) }6 w( N" ]4 }
ProName w_comp_def_axis; //接受comp_b中的默认的装配轴B_AXIS_1
R) x0 _4 O3 n8 g X' d ProName w_comp_def_datum; //接受comp_b中的默认的装配平面B_DATUM
`; Q$ g6 ~8 \3 d3 ]$ H ProPath file_path; //待装配的文件的路径
7 Z9 b: R; k( T, N- R" {& z" ? [- T int AssemblyWindowID; //当前组件环境的窗口ID
; T6 F0 G; q/ ?( I: d p% z ProName w_a_name; //接受comp_a的名称; j$ ]3 y7 k3 v- v' P( x" c
int id_comp_a; //用于接受作为装配参考的元件的标识符
4 K8 T1 P3 z2 |: p' a
$ P+ }+ F. h) J4 g4 l ProStringToWstring(MSGFILE, "usermsg.txt");
5 U7 P# X$ t+ E+ o9 `0 `* S- } status=ProMdlCurrentGet(&assembly); //获得当前已装配元件的组件
) J2 v0 H1 ?5 D/ k, X" B& k3 X9 S) e R/ d8 O
ProStringToWstring(w_a_name,"a"); //将装配元件a的名称转为wchar_t型7 i; ^) \1 A# G6 s# |5 w
status=ProMdlInit(w_a_name,PRO_MDL_PART,&comp_a); //获得作为参考的以装配元件a
1 q, M F6 B- k status=ProMdlIdGet(comp_a ,&id_comp_a); //获得作为参考的已装配元件a的标识符. i1 f7 Q' s" I! X) a
; y% ]9 A* T0 [% G" i- L6 ~& @6 i
/*================================================================*\( B# T ~6 f9 t4 F3 e
将元件中的轴和平面名称转化为wchar_t的类型1 v1 t& \1 K8 v9 Y' ]9 j
\*================================================================*/
' ~$ @8 d b/ H" t9 s' \% x/ A ProStringToWstring(w_asm_def_axis,"A_AXIS_1");
6 A% r. M) E0 _& j! S# y ProStringToWstring(w_asm_def_datum,"A_DATUM");) |* g2 \9 e+ y7 t4 N
. x+ y1 C5 `- W3 f8 n" `/ ~* k! ^
ProMdlWindowGet(assembly,&AssemblyWindowID); //得到装配容器assembly的窗口ID值
1 o& K0 [, R9 B! h7 I! b# `* M$ c8 W7 q7 d* F
ProStringToWstring(file_path,"D:\\Protoolkit\\Zhijia\\四杆机构\\b.prt");
b8 \4 N/ S! z$ U v status=ProMdlLoad(file_path,PRO_MDL_UNUSED,PRO_B_FALSE,&comp_b); //开始获得待装配零件component
1 J. _! u" \/ ^0 ~ / w S3 l# p! O! v+ d6 n( t; Z
/*================================================================*\
; X9 e* U! y5 T9 q, w$ P m' ~1 g 获得待装配零件component的装配轴和装配平面4 `2 P9 W6 z# ]" ], J" a
\*================================================================*/
% C; y+ @6 ?7 G+ U+ c ProStringToWstring(w_comp_def_axis,"B_AXIS_1");: g+ X$ J: v% e* i$ m( r3 C* j; S
ProStringToWstring(w_comp_def_datum,"B_DATUM");
% ~. N3 W2 X8 H( W* r, p+ m6 B
( u1 P- O2 H3 P4 C; Q* m$ o& A" k /*================================================================*\. Z( Q% n. M, B+ f7 g4 S
调用函数,开始装配' J3 e) P6 s3 ], z
\*================================================================*/& z/ }+ {+ M. y% n* r8 L
status=UserAssembleByAxisAndDatum((ProAssembly) assembly, //已装配元件的组件句柄
7 X+ m; d/ B- L1 ^+ | (ProSolid)comp_a, //组件中用于参照的元件a句柄$ l8 r& c6 ^3 w" p/ \1 ^4 T+ y V
w_asm_def_axis, //用于参照的元件a中的轴1 b9 N/ A) N p. o! S* `
w_asm_def_datum, //用于参照的元件a中的平面) Z/ @3 f& M, X* H4 c2 y! i
(ProSolid)comp_b, //待装配元件b的句柄. i) }9 w" B7 P+ C1 P+ p3 Y8 u! y- r
w_comp_def_axis , //用于参照装配的元件b轴
" O& i6 `3 a" d2 l w_comp_def_datum, //用于参照装配的元件b平面8 ?3 t5 d0 o/ [! S/ B
id_comp_a);
$ |5 L( j2 r/ A" A3 L
8 ^: a# Z' q1 x7 B& R5 Z status=ProMdlDisplay(assembly); //显示装配的结果
- H/ V! v4 I; i) |& F8 C status=ProWindowCurrentGet(&AssemblyWindowID);5 m# W/ l/ D' K5 p- p0 A
status=ProWindowActivate(AssemblyWindowID); //激活当前窗口) C: R3 b! Z$ U6 l* v0 X9 Q3 _
7 V! s* X+ N" p0 P1 C3 J return ;" q0 t8 H8 F8 g7 x% P+ `
} |
|