3、添加菜单
菜单的添加与添加按钮类似,也是在CreateWorkbench()函数中,只不过是在宏中的参数与添加按钮并不一样。添加后的效果图如图5所示
NewAccess(CATCmdContainer, pCAAAfrGeoCreationMbr, CAAAfrGeoCreationMbr);
NewAccess(CATCmdContainer, pCATAfrInsertMnu, CATAfrInsertMnu);
SetAccessChild(pCAAAfrGeoCreationMbr, pCATAfrInsertMnu);
NewAccess(CATCmdSeparator, pCAAAfrGeoCreationInsertSep, CAAAfrGeoCreationInsertSep);
SetAccessChild(pCATAfrInsertMnu, pCAAAfrGeoCreationInsertSep);
NewAccess(CATCmdContainer, pCAAAfrMeu1EltSnu, CAAAfrMeu1EltSnu);
SetAccessNext(pCAAAfrGeoCreationInsertSep, pCAAAfrMeu1EltSnu);
NewAccess(CATCmdStarter, pCAAAfrMMeu1SubMn1Str, CAAAfrMMeu1SubMn1Str);
SetAccessChild(pCAAAfrMeu1EltSnu, pCAAAfrMMeu1SubMn1Str);
SetAccessCommand(pCAAAfrMMeu1SubMn1Str, "CAAAfrCmd1Hdr");
在CAAAfrGeoCreationWkb.CATNls文件中设置菜单显示的属性。
CAAAfr Meu1EltSnu.Title = "新建菜单1" ;
CAAAfr Meu1EltTlb.Title = "command1" ;
3、 建立菜单以及按钮的响应类
建好的workbench空框架中可以创建三种类型的响应(command)类,他们都是CATCommand派生出来的。具体添加过程是打开CAA Rade 菜单"Insert",选择 "CATIA Resource"下的"Command..."。可以选择Statechart command,dialog-box based command和 Basic command。Basic command是创建一个空的响应类,在函数Activate( CATCommand * iFromClient, CATNotification * iEvtDat)中添加响应。
dialog-box based command在二次开发中会被更多的用到。选择该类型响应类,在运行的时候会直接弹出一个对话框,当然,可以对这个对话框进行编辑。对话框编辑界面如图6所示,里面有一个正在编辑的对话框,在图的中部,右边是自带的一些控件,包括CATDlgFrame,CATDlgLabel,CATDlgEditor,CATDlgPushButton,CATDlgRadioButton等等。对话框内所有的控件在Build()函数中列出,应用函数SetGridConstraints(short int iTopRow, short int iLeftColumn, short int iRowSpan, unsigned int iJustification)通过设置控件在对话框中矩阵位置的方式来调整位置。
为控件添加回调函数来响应各种操作。如图7所示,CATDlgPushButton按钮控件包括Creation,Visibility swap,Resizement,Button activation以及Repetitive button activation5中回调函数。选择Button activation产生点击响应生成回调函数OnPushButton004PushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data),可以在这个函数内添加代码。

图6 对话框编辑 图7 添加对话框控件回调函数
四、开发实例
1、通过输入参数绘制拉伸体的例子,可以根据自己的需要生成拉伸体以及其他复杂的模型,并实现参数化的过程,此例中通过输入截面圆的半径、拉伸长度以及拉伸方向与截面法向角度值生成拉伸体,并可以改变其位置。如图8所示。

图8 按钮对话框响应绘制拉伸体
2、五座标数控机床运动仿真。实现了机床的数字化建模以及机床的运动仿真,并可在此基础上实现更多的仿真功能和模块。仿真完成后的效果图如图9所示,图10和图11分别为局部效果以及刀轨的显示。
首先,新建一个独立的工作台,在下面建立两个个模块:机床模型建立模块和运动仿真模块。为每个模块建立各自所需的Toolbar和对话框以及响应函数,可以参考前面提到的方法。
然后,通过利用CATIA本身的建模功能或者利用二次开发自己应用代码生成机床数字化模型。本文采用了后者,这样有利于后面对于模型的操作和添加机床行程等约束参数。建模应用了CATIA的产品结构模块,机床文件为*.CATProduct。首先应用CAA C++的Part Design部分建立机床各部分的零件,每个部分都为独立的*.CATPart文件。然后应用CAA C++的3D PLM PPR组件实现整个机床的装配。
接下来是机床的运动仿真的实现。读取NC文件经过处理后提取到移动的方向和坐标值后。应用CATIDocRoots接口找到机床模型的根产品(Root Product),遍历得到要移动的相应机床部件,得到CATIMovable接口实现相应部分的移动,移动矩阵为CATMathTransformation类型。
最后是刀具轨迹的生成和显示,这里用到了CAA的GSM和Shape Design & Styling。可以显示直线,圆弧和样条曲线。

图9 机床运动仿真的整体效果图

图10 运动仿真局部效果图 图11 独立显示的导轨
机床运动仿真探索了应用CAA实现了界面二次开发、实体和空间曲线建模、产品装配及运动效果等方面。不但可以实现虚拟加工仿真,也可以应用在虚拟装配的动画显示方面。因为CATIA CAA二次开发采用的组件方式以及COM的应用,再加上CATIA本身结构的层次化和严谨,所以对于和其他CAD软件相比也有更大的难度。
五、结束语
应用CAA组件对CATIA软件进行二次开发,可以大大缩短专用系统的开发周期。Component Application Architecture(CAA) 组件应用架构,是第三方产品集成和一般客户进行客户化、个性化设计的强有力的工具,利用CAA完全可以实现Dassault Systemes应用的深层次开发。但是,由于Dassault Systemes应用本身的复杂性和CAA所涉及的深层次内容,再加上CATIA本身结构的层次化和严谨,所以利用CAA进行CATIA二次开发与其他CAD软件相比也具有更大的复杂性和难度,但同时也可以实现更强大的功能。
参考文献
[1] CAADoc Online: CAA V5 Encyclopedia
[2] CAA V5 Help Viewer
[3] CATIADoc Online
[4] 何朝良 周安宁 刘毅,基于CAA的CATIA二次开发的研究 中国航空学会总体分会几何设计专业委员会第六次学术交流会议, 西宁,2004
[5] 陈宁,飞机发动机机匣零件虚拟制造系统,北京航空航天大学硕士论文2004.3
[6] 刘俊堂,CAA及其应用,http://blog.csdn.net/littlechen/articles/57782.aspx
[7] CAA V5 For CATIA Foundations,DASSAULT SYSTEMS,March 2001
[8] CAA V5 For CATIA Mechanical Foundations,DASSAULT SYSTEMS,July 2001



