|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
飞机零部件设计是飞机总体设计中的一个重要步骤。由于飞机零部件有几万个,而且大部分零部件类似,结构复杂,重复设计这些飞机零部件耗时耗力,因此如何快速地生成飞机零部件是一个重要的问题。本文以某飞机的框类零件作为研究对象,以CATIA的二次开发作为工具研究了一种可快速驱动生成新的框类零件的参数化建模方法。首先,创建CATIA/CAA二次开发环境跟架构;然后,基于CATIA二次开发的方法,进行三维零部件的参数驱动。
4 i8 W$ i% o& u5 ?$ s5 w1 CATIA/CAA二次开发平台的创建: Z) U' B( v+ x3 P8 w9 w# t+ ^% K2 P
1.1 搭建CAA二次开发的RADE环境
0 ^; P/ q, g4 s5 E; V1 J2 i CAA API的实现是通过其提供的快速应用研发环境RADE(rapid application development environment)来完成的。RADE是一个可视化的集成开发环境,它提供完整的编程工具组。实际上RADE以Microsoft Visual Studio VC++为载体,在VC++环境中增加了CAA的开发工具。
& M# g. g9 s; \9 ?9 K 安装完CAA与RADE后,打开RADE目录下Environment Setup,选择文件安装路径D:\CATIA\B14,此时启动Microsoft Visual Studio VC++,单击工具—定制选择CAA V5 的附加项和宏文件,创建RADE 环境,重新启动Microsoft Visual Studio VC++即完成与CAA的结合。CAA将自动添加自身的菜单和命令到界面中,通过使用新的编程环境来进行CATIA的二次开发。如图1所示。
' u& ^0 j% b/ v* |( ^3 ]系统界面6 u9 d7 }7 c- w/ i
7 y) N$ u& } {8 d r5 E+ X 1.2 构架CATIA二次开发的结构框架0 ` u3 W9 F; f
(1)创建二次开发的workspace跟module。并在CAA V5 Workspace菜单中选择菜单项Locate Prerequisite Workspace,添加CATIA的安装路径,由RADE调用相关资源。$ u$ i1 z. _8 f
(2)创建接口。将module设置为活动工程,插入compenent,添加接口函数,此时建立了一个空的Addin。在MyFrame.dico文件中可以看到这个Addin的声明:) n7 t# _2 H" e% y. [- }
NewAddin CATIPrtWksAddin libPartDesignAddin
# P9 E& M ?; ]& Y! P; E 在NewAddin.cpp中添加两个函数体- j+ g# N) K1 e& x
void NewAddin: :CreateCommands( ) { }& W' a# P0 _* q6 G0 o7 w! q
CATCmdContainer*NewAddin: :CreateToolbars( ) { }' Y/ p: O. U5 d8 {% V+ i0 ^# M/ n
在函数体内添加创建菜单跟工具条的代码。6 {( w( t! w# O; b+ H; ]( y# a
(3)创建响应命令。设置module 为当前活动工程,插入Resourse—command,并对创建的命令建立响应
4 n* S5 Z. r1 w& E$ H: d5 i new CATMyWorkBenchCmdHeader("菜单","PartDesignAddin","TestCmd",(void*)NULL);
& g- \0 v' x% r' Z `. x O# j. ` 在CAA V5 Encyclopedia的C++ API下All Frameworks中查找需要运用的接口函数,利用其使用方法编写程序,实现对飞机零部件的二次开发。如图2和图3所示。- \: h6 x/ e& S8 j
2 框类零件的三维参数化建模
1 ~3 D0 L' E1 @9 c5 `( W 2.1 调用CATIA已创建的飞机框类零件
1 v1 `/ [- a2 M2 v8 J3 ] 为便于用户在前台进行操作,用二次开发的方式书写程序将飞机零部件模型在Microsoft Visual Studio VC++运行的同时显示在CATIA界面中。
A1 x4 a, A' u y CATSession*pSession=NULL;
" y) Q% Z9 k0 Q! Q. `; V rc=GetPtrSession(pSession);
; z" l/ N7 R# f# h7 d: h CATIIniInteractiveSession*interSession=NULL;1 e- |% U" y* i; y* u- J* ^# Y0 ~
rc=pSession→QueryInterface(IID_CATIIniInteractiveSession,(void**)&interSession);……
x. K# ^% V+ G6 m7 H7 ]3 E2 Q
! l6 ?$ b0 j( J0 K$ N! H) r3 y- W 2.2 提取飞机框类零件的特征参数信息
4 Z; G# p O1 b O 根据飞机零部件结构复杂、维数级别繁琐与特征复杂的特点,需要先读取模型,将不同类型的参数分类,并采取对其进行提取特征参数信息的方法,实现对飞机框类零件几何信息,拓扑信息的获取。
9 [+ \* z5 T4 [4 j cout<<"PushButton020"<<endl;9 z+ v, E2 \4 [+ ^. S% m
//定义并实现CATFrmEditor接口,获取当前的Part% t0 q9 F" C9 m) y
CATFrmEditor*pEditor=CATFrmEditor: :GetCurrentEditor( );
) R8 h9 _ o3 Z( n) ]0 s0 y ……
' o' O: ^6 k1 }4 G& J* U: K CATInit_var spInitOnDoc(pDoc);% |% f5 X* m5 Z3 K, j$ J* A4 n
//定义并实现CATIPrtContainer 接口( r$ P6 E0 a4 E. m; R/ R: p
CATIPrtContainer*spPartConatiner=(CATIPrtContainer*)spInitOnDoc→GetRootContainer("CATIPrtContainer");7 W/ R3 o; T3 V
……: @# \; r# }0 b1 U
if(spCkeFact==NULL_var){cout <<"spCkeFact==NULL_var"<<endl;return;}
% l: w) Z$ x q; u //CATICkeParmFactory_varspCkeFact=CATIPrtContainer;) L9 K2 H! D) B* u; U
CATLISTV(CATBaseUnknown_var)list;5 E( p& [ u8 \; s, y/ }
//CATIVisitor_var aStandardVisitor=spCkeFact→CreateStandardVisitor(IID_CATICkeParm,&list);) E% k3 P0 Z9 @2 x4 j- {# P; g. l
CATIPrtPart_var myPart=NULL_var;
+ D! C$ f* a- ~% n; u myPart=spPartConatiner→GetPart( );* k4 B& _, \* k% |
……
3 M2 d# l' C- y1 n0 { CATUnicodeString pathName = spParm→Pathname( );, Q9 s j; f5 b( W/ A. G9 {- j8 q+ g
//cout<<"pathName:"<<pathName<<endl;/ ?) ~9 n; Y" ?& {; o. D3 r0 N
……
/ Y7 M, \) W* k/ J5 f if(m==1)continue;" j0 ^0 u+ T& P. n5 K
CATICkeInst_var oValue=spParm→Value( );
2 N# u+ N' T- e) ` CATUnicodeString paramValue=oValue→AsString( );( w1 z! b7 L. [# ?8 e. w0 a7 o
……/ ?/ f0 P+ G$ o; {+ J6 j* c: ]$ ?
提取的特征参数类型跟参数值。
! M( x. l: d4 h. K特征参数
$ C; [/ m- |6 `$ k( H7 z) Q0 }
k! w+ e$ v$ r7 O) e 2.3 修改参数,驱动生成新的模型0 k) _- p( q/ z
将提取的信息写入设计表中,创建要修改的主副参数的对话框,对提取的参数类型分类,并对不同类型的参数值进行修改,将已经赋好的参数值带回,驱动重新生成新的模型。在修改一个尺寸后,参数化模型中的相关尺寸会自动更新。
& C6 _9 e( a/ y //创建Txt的Sheet6 \2 Z- Y2 |3 |8 j( j8 ^0 U' |7 i
CATICkeSheet_var
0 z) O) q( z+ Q# k }! ~, ~ JDCreateDftCmd: :CreateSheet(CATILinkableObject _ var ispiLink,2 }0 o" n! [8 @
CATUnicodeString ioFilePath)//创建表格* ]+ {( J7 e) t/ t; f# @* H
{+ O3 x f0 Q' v) O. \5 d" Y
CATDocument*pDoc=ispiLink→GetDocument( );
1 J9 @% L) d4 y9 j0 l if(pDoc==NULL)
2 s3 J4 \' l' x# g$ k' ~7 W {
$ a' [8 ]! ~/ C' Y" b ……
. H, `0 |4 C5 a }
# ]9 a% d0 B' v2 {' m* L3 x7 B CATICkeSheet_var spSheet=NULL_var;
: w R7 f2 }% B" a' n* ]; q CATIDesignTable_var spDesign=NULL_var;0 I7 Y6 F ]" n( [7 Q W% D# h
CATICkeParmFactory_var spCkeFact;; k% z0 R1 m& M7 p" j7 s! \, }
……( ?) j. c+ H: X5 a, e. H
spSheet=spDesign→Sheet( );
/ N: n: `( G* s Q; a return spSheet;* t, h7 t$ \# u, Q/ S/ U& Y
}
. A: b. J, ~2 ]+ y: J 在Dialog.CATNIs中设置对应的需要修改的特征参数信息,使得已提取的参数信息跟对话框上的参数一一对应。1 j/ S$ ^' f3 G# Y) u& k
参数对应5 g% _1 s, t. F* ~+ \- H
8 V3 P0 {* C' m3 i9 E5 W. r: S# H
Label001.Title="长度";
! L _5 _* |3 @% d( Z6 P4 ? Label003.Title="宽度";
3 ~) N7 y/ f. e8 N! F5 i; M o Label006.Title="高度";
, G! k3 [8 d; K7 U* V4 k7 B, h Label008.Title="MBD";/ R9 L" S1 s- k* ^
Label011.Title="副参数";& {8 N E$ s" a5 W) R" y/ y' M
Label015.Title="主参数";
1 M- p }: ?! b3 Q! g Label016.Title="孔1半径";! V ?+ B8 }3 p" z. C
Label018.Title="凹糟间距";) }& o6 X/ I. g( G4 P
修改特征参数信息,确定后将值赋回,驱动重新生成模型。如图6所示。8 W: {% P! J2 i3 D4 P
重新生成模型3 y, ~$ p- v9 e7 m
图6 重新生成模型
8 W, c+ g, t% A( C. O5 _# y3 结束语. G! V, D: n, B" q) Z+ v/ v
针对飞机零部件的特点,多次重复的建模工作带来了人力、物力以及时间上的极大地浪费,而且这样描述的零件数据种类过多,存在大量的几何拓扑结构相同或相似,以及尺寸规格不同的零件。因此,基于CATIA二次开发平台CAA,结合Visual C++6.0提出了一种三维参数建模的方法,开发了可以修改驱动生成三维模型的参数化设计程序,实现了用户交互式对飞机零部件的快速设计,极大的缩短了设计时间,提高了设计效率。 |
|