QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

goto3d 说: 在线网校重磅上线MC2022&Inventor2022全新课程,虞为民老师、大表哥同事精彩讲解,快去围观!
2021-06-25
查看: 2567|回复: 9
收起左侧

[已解决] 请教二次开发实现自动装配,谢谢!

[复制链接]
发表于 2007-9-16 11:35:51 | 显示全部楼层 |阅读模式 来自: 中国江苏徐州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
大家好,俺想请教各位利用Pro/TOOLKIT如何实现自动装配。
) `% n3 z$ S' R* @0 c8 f2 G4 c      具体情况如下:已经建立了零件的PRO/E模型,想在装配过程不使用PRO/E自带的那些装配方法,而是利用二次开发,直接将想要装配的零件调入装配环境并自动装配到装配体的相应位置上。小弟想通过Pro/TOOLKIT来实现,但没有装配方面的资料,还望各位高手指点指点!最好能详细一点,比如利用哪些函数,如何在装配环境下自动加载别的零件,并放到相应的位置上。要是能给个具体的实例参考那就再好不过了,谢先啦!9 X( _7 P9 f* d7 ~+ P$ C
     也希望论坛上好多高手的指导,基本都是按北京科技大学的一篇文献来做(proE二次开发实现自动装配的一种方法 )!
, o2 {; T$ P5 G- T8 s本人思路:
! m/ P+ m, Q# v" ]  D) [(1)首先在四个杆件中分别定义两个轴和一个平面以便用于装配参照,名称类似于A_AXIS_1,A_AXIS_2和A_DATUM;
" ?. `3 O; a! i% l/ c  n0 w4 L' M+ C4 N
(2)首先打开一个空的组件环境,否则单击一个按钮会提示用户;
0 R2 d7 e0 \% j: n(3)单击“装配四连杆基座a”按钮,将杆件a调入界面,通过ProAsmcompConstrRedefUI()函数调用pro/e内部的装配对话框,用户来决定其位置,一般默认即可;, ]+ Y2 J4 d0 }
& Q  f# Q! T, _8 e
(4)定义一个函数UserAssembleByAxisAndDatum(),可用于将一对轴和一组平面分别对齐;(参照protoolkit的help,可能有问题);
; y1 A) K& X( Q; ^8 g( b
0 a! `/ F( g. ^) B& y$ b(5)单击“装配零件b”按钮,首先将零件b调入内存,然后先通过ProAsmcompAssemble()函数初始装配,然后调用4中的函数实现A_AXIS_1与B_AXIS_1对齐,A_AXIS_2与B_AXIS_2对齐和A_DATUM与B_DATUM对齐,从而实现对零件b的装配(这里只是部分约束,还要通过ProAsmcompConstrRedefUI调用它的装配对话框适当调整);5 C, H: ~+ f9 j2 b6 u/ Z' z
     可是在装配b时老是提示在装配好a的组件环境中找不到A_AXIS_1,A_AXIS_2和A_DATUM。
; \( t  V. _# Z$ b& V" T
本人联系方式:QQ:24260732
8 ^3 ?: M+ A% q! c4 J* w3 |& N                        EMAIL:24260732@qq.com
- J! r# F/ R9 ]) [                           希望你的指导和交流。
+ v& W. y- k# r7 n) ]2 L& W- {
0 ^6 Z2 F9 J" @+ _2 Y补充内容 (2013-2-16 13:03):# n# q# c6 T- V' c' X
QQ密码丢失,已停用。技术交流:xuzhouren@126.com

TEST.part1.rar

292.97 KB, 下载次数: 37

TEST.part2.rar

231.76 KB, 下载次数: 38

 楼主| 发表于 2007-9-19 15:57:47 | 显示全部楼层 来自: 中国江苏徐州
怎么光有下的,没人会啊,帮帮忙啊
头像被屏蔽
发表于 2007-9-19 16:41:09 | 显示全部楼层 来自: 中国浙江温州
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2007-9-20 08:41:10 | 显示全部楼层 来自: 中国江苏徐州
期待高手啊,该出手时就出手啊!
# Z9 m. [+ o  e1 n: i9 u千万别客气!
; C8 }. I' o% g% @$ f: ~, D3 R
9 l$ }, g9 f, {* `! m[ 本帖最后由 haifengcumt 于 2007-9-20 08:45 编辑 ]
 楼主| 发表于 2007-10-1 14:46:53 | 显示全部楼层 来自: 中国江苏徐州
假设已经在组建环境中装配了一个元件(已经手动装配完成),名称为a.prt,现在欲向这个组件中装配另一个元件b,且在元件a和元件b中已分别定义了用于对齐的两组轴和两组平面,分别为A_AXIS_1和B_AXIS_1,A_DATUM和B_DATUM.
- s: E# w$ e: R1 T目前出现的问题是我点击Button2按钮想执行OnButton2()时pro/e自行关闭,哪位高手帮帮忙哈!
0 v' ^0 l; G( D! f. P
3 g. t* e0 C# x9 Y0 r0 W0 C& F8 Z7 ?
void CAssembly::OnButton2() 4 n5 @1 v" e, D- D( n& c" `
{               
# O+ S, ^% K2 o. Q6 {        ProError status;
3 N; |4 u# F  M8 N0 j" X        ProFileName MSGFILE;   //消息文件: _4 s9 @' H( b3 ~, E% S
        ProMdl assembly;  //已装配好元件的组件- B( \$ e7 I5 Y- t
        ProMdl comp_a;        //作为装配参考的元件) B  |6 z, x& W% o
        ProMdl comp_b; //待装配的元件句柄8 }; {' y# T6 i2 W
        ProName w_asm_def_axis;  //接受comp_a中的默认的装配轴A_AXIS_15 I6 a- x9 w7 g5 Q/ @% J5 h
        ProName w_asm_def_datum;  //接受comp_a中的默认的装配平面A_DATUM
! B2 B3 h- N! e        ProName w_comp_def_axis;   //接受comp_b中的默认的装配轴B_AXIS_19 [8 w6 n' K* N+ G1 C
        ProName w_comp_def_datum;  //接受comp_b中的默认的装配平面B_DATUM8 k+ w. R0 M" u0 o
        ProPath file_path;                                //待装配的文件的路径0 b2 t; }* Z; Q
        int AssemblyWindowID;        //当前组件环境的窗口ID       
) T6 d' y& l3 [' b* D* y/ a        ProName w_a_name;     //接受comp_a的名称
- k% K! f/ c! l$ u' O- g        int id_comp_a;                  //用于接受作为装配参考的元件的标识符+ ]" A( t# A- Y* h' ~/ S  h5 ]
4 Q" k/ X  T+ Z; b2 J
        ProStringToWstring(MSGFILE, "usermsg.txt");. p3 }  ~8 ?% ^- }/ C, u4 ]5 g4 ]
        status=ProMdlCurrentGet(&assembly);   //获得当前已装配元件的组件) P, F& \2 f6 k9 |8 ]

5 ?% j$ b; \8 N        ProStringToWstring(w_a_name,"a");   //将装配元件a的名称转为wchar_t型
! M; o9 g6 d9 }/ p5 |* L        status=ProMdlInit(w_a_name,PRO_MDL_PART,&comp_a);  //获得作为参考的以装配元件a  [. \; w. G( e$ w+ T8 b$ L2 Y
        status=ProMdlIdGet(comp_a ,&id_comp_a);   //获得作为参考的已装配元件a的标识符
+ c: x7 b3 |* P( K; M9 i/ _3 t* b2 I* j# N1 L. _5 }/ o2 x
        /*================================================================*\& G+ u' z# |) a8 C/ L
                将元件中的轴和平面名称转化为wchar_t的类型# z& Z' `7 r' j/ s( a( L* X: v
        \*================================================================*/
; }9 R4 O1 t0 l. T- k7 r        ProStringToWstring(w_asm_def_axis,"A_AXIS_1");
% K5 y: ^# M7 ]        ProStringToWstring(w_asm_def_datum,"A_DATUM");2 [' y8 A9 ~" o
+ R7 D' y; Q- h3 z
        ProMdlWindowGet(assembly,&AssemblyWindowID);  //得到装配容器assembly的窗口ID值
6 P4 I# \6 d0 m  N' a4 m2 R, H5 z6 [  Z; J3 W8 W& a
        ProStringToWstring(file_path,"D:\\Protoolkit\\Zhijia\\四杆机构\\b.prt");6 O# L# e% _: Y3 K& {2 X
        status=ProMdlLoad(file_path,PRO_MDL_UNUSED,PRO_B_FALSE,&comp_b);        //开始获得待装配零件component
0 G( `- c, s, {7 Q5 R        . O) r4 Q4 @' x! Q. u6 N* E
        /*================================================================*\
0 k! J, U) M0 V* W                获得待装配零件component的装配轴和装配平面
# z* l% \1 A, M( U. v( S3 X* R        \*================================================================*/
4 a) ]. l# W; B% x; C5 d0 U! k        ProStringToWstring(w_comp_def_axis,"B_AXIS_1");) k3 ?( P8 |, Z: S$ l
        ProStringToWstring(w_comp_def_datum,"B_DATUM");
! U* K8 u, W3 ~$ R5 m/ B* _0 x2 b
        /*================================================================*\& {" S2 S* O3 X* v
                        调用函数,开始装配
" J5 w& f) Q, T& S        \*================================================================*/5 }" K" t' O0 }- q/ W0 l, w( t
     status=UserAssembleByAxisAndDatum((ProAssembly) assembly,   //已装配元件的组件句柄( [" {) C1 n7 l' L# D
                                        (ProSolid)comp_a,    //组件中用于参照的元件a句柄
+ {& \0 b; h. D. N                                        w_asm_def_axis,    //用于参照的元件a中的轴: w. e5 \  e) r* J3 ~+ Y
                                        w_asm_def_datum,   //用于参照的元件a中的平面* A: c4 r7 Z) d4 H' Q5 ]
                                        (ProSolid)comp_b,      //待装配元件b的句柄
/ S+ ?7 Q+ L: H1 R- m! i                                        w_comp_def_axis ,   //用于参照装配的元件b轴
) I8 @7 Q5 x1 R: l5 Y; }# u) X                                        w_comp_def_datum,   //用于参照装配的元件b平面6 P8 b# O% g: j) o* n$ r0 i( t
                                        id_comp_a);
: S' y. ~2 C& @' A  g/ j8 {+ j$ j7 z. S% ~
        status=ProMdlDisplay(assembly);  //显示装配的结果1 u1 i; h3 B: A0 ]8 O0 L
        status=ProWindowCurrentGet(&AssemblyWindowID);
, ?2 B+ L0 D; e( t        status=ProWindowActivate(AssemblyWindowID);  //激活当前窗口
$ {1 ~. Q6 a0 ]+ B& m. u
! W6 m1 M: s0 t8 z% m3 b: R% a0 s! B. ?/ |        return ;
2 }& d, n. X: \$ a}
发表于 2010-8-16 15:48:59 | 显示全部楼层 来自: 中国山东济南
UserAssembleByAxisAndDatum这个函数怎么定义的
发表于 2010-8-16 15:59:40 | 显示全部楼层 来自: 中国江苏苏州
等待高手出招,你这问题太难了有点
发表于 2010-8-17 14:25:00 | 显示全部楼层 来自: 中国江苏徐州
这个有难度,还是等高手接招,偶水平不够!
发表于 2010-8-17 14:43:16 | 显示全部楼层 来自: 中国浙江温州
不知道搞这个有用吗,
发表于 2010-8-18 06:55:09 | 显示全部楼层 来自: 中国河南郑州
是等高手接招
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表