




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.Framework2.Module(空的,用来放workbenchs,components,workbench要把原来的module清掉,components不用,它是直接在上面加的东西)3.Framework:public用来放盛workbench的module头文件Private:这个是加进来workbench怎么继承上面的一个类还一个是生成一个workebench的出去文件3.IdentityCard用来放外部或系统的API所属的外部框架定义4.mk文件时定义外部或系统的API所属的外部模块定义查看dico外部框架外部模块在相应的文件定义是关键5.这里有三个文件CATNIs可以定义此Workbench以及其工具条、菜单的所有名字(Title),定义格式为:TestWb.Title=”test”;CATRsc可以定义此Workbench的图标(Icons)和其放置路径(Category)(这里放模块)MyWorkbench.Icon.NormalPnl="Clouds";MyWorkbench.Icon.NormalCtx="Clouds";MyWorkbench.Icon.NormalRep="Clouds";MyAddin.CATNls中添加MybenchTlb.Title="月亮";MyCmdHeader.CATRsc中添加MyCmdHeader.point.Icon.Normal="mycmd";另一个CATNIs文件是实现workbench的命令头文件6..dico文件定义的是链接库还一个是工厂定义新建一个workbench的时候,首先要以workbench名声明一个工厂然后CATApplicationFrame框与工厂进行库连接给新建的workbench与它下面的配置文件接口进行库连接7.在Module中的trsc文件是ATIEistheobjectthatlinkstheinterfaceandtheimplementationTIE以trsc的形式存在在这个workbench所在的模块里面有src里面是本模块的CPP文件集合,localinterface里面是本模块的.h文件集合,包括上面提到的trsc文件,用来链接接口和现实的对象的的,主要是两组继承,工厂的继承和addin的继承2还有从基工厂类上继承一个wokbench工厂所需要的cpp和.h文件。还一个是创建一个新工厂1,1||1,1还有将执行的命令用MacDefineHeader宏定义当前的workbench命令,也有.h文件和CPP文件1,1实现现实的对象需要header.hworkshop.h还有就是就是从最初基类CATBaseUnknown继承下来的派生类1,3还有一个是interface此接口是定义addin接口文件,用来继承库中的addin1,18.settingCATIA可以启动看到workbench了9.添加工具条注意加头文件,加API所在的模块定义,框架定义查询,头文件是否要加,看上下:voidCreateCommands();CATCmdContainer*CreateToolbars();#include"CATCommandHeader.h"MacDeclareHeader(PartCmdHeader);CreateToolbars里面就是要建的工具条和菜单的主要内容:NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);建立新的进口(内部接口类名,变量名,目标名)NewAccess(CATCmdStarter,pPointCmd,PointCmd);SetAccessCommand(pPointCmd,"point");SetAccessChild(pPartBenchTlb,pPointCmd);NewAccess(CATCmdStarter,pLineCmd,LineCmd);SetAccessCommand(pLineCmd,"line");SetAccessNext(pPointCmd,pLineCmd);AddToolbarView(pPartBenchTlb,1,Right);returnpPartBenchTlb;Command命令的定义:newPartCmdHeader(“point”,“CmdModule”,“TestCmd”,(void*)NULL);newPartCmdHeader("line","CmdModule","LinCmd",(void*)NULL);第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。注意把用到的接口的API所在的头文件,模块名,还有框架加上10.现在做dialog你做的命令所在的模块和命令名一定要和上面的名字对应新建module,insertdialog======================================================================首先声明,我也是一个菜鸟,接触CATIA二次开发时间很短,也在学习,下面的几个概念是我在学习及使用时自己琢磨得到的解释,目的是用尽可能简洁易懂的语言来描述英文文档中相对不容易理解的几个概念,在学习的时候我得到了CAA群的水晶羽和huright的帮助,感谢他们。希望我的总结对初学者有用,另外,可能会有理解不当的地方,欢迎大家指出来,有交流才会有进步,汲取他人的知识和经验为我所用,我们才能走得更远。1.DialogAgent:Adialogagenttranslatesauserinteractionintoauserinput。一个DialogAgent将用户的交互动作转变为了相应的输入,比如,CATIndicationAgent将用户在屏幕上的一个左键单击转换为相应的用户输入,获得单击处的坐标值。我觉得,简单理解,就是作为一个中介(Agent),我们不用关心它是如何转变的,只要知道,我们可以利用它来得到用户的输入就可以了。2.DialogState:AStateisastepinadialogwheretheprogramiswaitingforaninput。一个DialogState就是指一个状态,对于多状态的输入来讲(Statechartdiagram),它就是指程序的几个状态,比如画一个圆,就有选取平面,选取圆心,指定半径,输入结束等几个状态,在相应的状态下利用DialogAgent获得相应的输入,并对输入进行判断,从而激发相应的响应。(即Guardcondition和Action)3.TIE:ATIEistheobjectthatlinkstheinterfaceandtheimplementation。TIE(不知道全称是什么)是用来连接接口与实现的对象。在程序中是以.tsrc文件后缀名存在的,而在程序编译时将会产生一个TIE的.h头文件(参见百科全书UserInterface部分)。4.TIE_CATIPrtWksAddin(NewAddin):NewAddin是一个Component,它实现了接口CATIPrtWksAddin,因此就写成上面的形式:TIE_CATIPrtWksAddin(NewAddin);-----------------------------------------------------------------------------------------------------------5.CATDeclareClass:这是一个类中变量的声明,类似于MFC中的DECLARE_DYNAMIC(我个人以为),其代码如下:#defineCATDeclareClassprivate:staticCATMetaClass*meta_object;public:virtualCATMetaClass*__stdcallGetMetaObject()const;virtualconstchar*IsA()const;virtualintIsAKindOf(constchar*)const;staticCATMetaClass*__stdcallMetaObject();staticconstCLSID&__stdcallClassId();staticconstchar*__stdcallClassName();staticCATBaseUnknown*CreateItself()而相应的MFC中的DECLARE_DYNAMIC代码如下:#defineDECLARE_DYNAMIC(class_name)\protected:\staticCRuntimeClass*PASCAL_GetBaseClass();\public:\staticconstAFX_DATACRuntimeClassclass##class_name;\virtualCRuntimeClass*GetRuntimeClass()const;\//notserializable,butdynamicallyconstructable#defineDECLARE_DYNCREATE(class_name)\DECLARE_DYNAMIC(class_name)\staticCObject*PASCALCreateObject();MFC中的DECLARE_DYNAMIC其目的是在类中构建一个含有CruntimeClass的变量,从而实现RTTI(在App及Window中)和动态重建(在Window中),看上面的函数CreateObject()以及CreateItself()以及相应的变量,我想应该在CAA中也是实现类似的效果。6.CATImplementClass:这个应该不用说了,跟上面的CATDeclareClass形成一个组合,从而达到跟DECLARE_DYNAMIC一样的效果,应该是RTTI和动态重建。其各自的代码简单列如下:CATImplementClass(NewAddin,Implementation,CATBaseUnknown,CATnull):#defineCATImplementClass(Class,Typeofclass,Basemeta,Impmeta)\CATBeginImplementClass(Class,Typeofclass,Basemeta,Impmeta);\CATEndImplementClass(Class)#defineIMPLEMENT_DYNAMIC(class_name,base_class_name)\IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,NULL)7。MacDeclareHeader:Declaresanddefinesaheaderclass。声明并定义一个头,用来声明并定义一个CommandHeader,在命令的响应中使用。如例:MacDeclareHeader(PartCmdHeader),而MacDeclareHeader代码如下:#defineMacDeclareHeader(DerivedHeader)\MacDefineHeader(DerivedHeader);\MacImplementHeader(DerivedHeader);#defineMacDefineHeader(DerivedHeader)\classHeaderExportedByDerivedHeader:publicCATCommandHeader\从中可以看出,PartCmdHeader是我们定义的一个类,而这个类派生于CATCommandHeader,因此,我们在做Addin时就可以直接newPartCmdHeader(…)等了,因为它的参数被定义为一个类。8.SmartPointer:智能指针,这个在C++中就有:Asmartpointerisonewhichreplacesastandardpointerandaddsfunctionality.TheC++standardlibrary,forexample,definesaclassknownasauto_ptr<>whichautomaticallyfreesanyresourceitiscontrollingwhenitsdestructoriscalled。(见:/english/code/cpp_mfc/leakfree_singleton.shtml.htm)说得简易些:智能指针就是一种高级的指针,不同于普通指针的是,它可以自已控制资源的释放,而不用手动去释放所申请的资源。针对CATIA中的SmartPointer:ASmartPointerisaclassassociatedtoaninterface,thatbehaveslikeaninterfacepointer,whichadditionalautomaticreferencecounting。对于一个接口CATI***,其智能指针为:CATI***_var,如CATISketch其对应的智能指针就是CATISketch_var。对于SmartPointer的使用问题:这一部分参见百科全书的中间件部分,推荐的是尽可能不要使用,而采用手动的Addref或Release。下面的例子说明了如何使用CAAC++开发方式来建立一个CATIA内部程序。实现的功能是新建一个独立的工作台(workbench),并在其下面实现添加自定义菜单,添加工具条以及按钮图标,插入CATIA风格的对话框。并生成对界面功能的响应,建立command,实现调用对话框,以及通过输入参数直接用代码生成一个三维模型,并在CATIA主窗口中显示。1、新建独立的workbenchCATIAV5将某类包含一系列交互命令的一些工具条分组显示在不同的工作台(workbench)中,这样有利于工具的查找和使用。通过自己新建的workbench可以将自己二次开发形成的一系列命令集中显示在一个工作台中,便于以后的操作。工作台的建立需要以下几个步骤。创建工作台厂(factory)的接口(interface);?创建工作台厂;?创建工作台描述类;?创建响应命令(command)的标题;?创建工作台并排列图标按钮响应;提供图片及提示等资源并将新建的工作台插入开始菜单;创建工作台的显示界面。插入新建的工作台MyWorkBench后的CATIA开始菜单如图3所示,它与CATIA现有的模块成为并列关系。现在进入MyWorkBench工作台里面没有任何工具条及按钮,下面添加这部分工具。2、添加工具条及按钮首先创建按钮的描述类CAAAfrGeoCreationWkb,派生于CATBaseUnknown类。CATBaseUnknown是创建用户界面并实现界面的基类,所有的接口都是从IUnknown/CATBaseUnknown继承的。这个类中建立了两个函数分别为CATCmdWorkbench*的CreateWorkbench()函数和无返回值类型的CreateCommands()。前面的函数是用来实现顺序插入工具条、按钮图标以及菜单,后面的函数是实现对插入按钮以及菜单和响应函数的关联。在CreateWorkbench()函数中用到了宏NewAccess(className,variableName,objectName)。CATIA的工作场(workshop)或者工作台(workbench)可以被看作是一个入口的集合包,使用NewAccess宏可以创建一个这样的入口。使用SetAccessChild(variableName,childName)以及SetAccessNext(variableName,nextName)这两个宏则可以连接入口。其中className表示被创建类的类型,包括以下几种类型:CATCmdContainer,CATCmdWorkshop,CATCmdSeparator,CATCmdStarter。下面就是创建了一个按钮的容器,也就是工具条,并在其中添加按钮的部分代码。NewAccess(CATCmdContainer,pCAAAfrTB1EltTlb,CAAAfrTB1EltTlb);//创建工具条pCAAAfrTB1EltTlbSetAccessChild(pCAAAfrGeoCreationWkb,pCAAAfrTB1EltTlb);//工具条加入工作台//创建按钮cmd1,并设置其响应宏为CAAAfrCmd1Hdr,最后将其加入工具条TB1中NewAccess(CATCmdStarter,pCAAAfrTTB1EltCmd1Str,CAAAfrTTB1EltCmd1Str);SetAccessCommand(pCAAAfrTTB1EltCmd1Str,"CAAAfrCmd1Hdr");SetAccessChild(pCAAAfrTB1EltTlb,pCAAAfrTTB1EltCmd1Str);接下来绘制一个图标,并在CAAAfrGeoCreationWkbHeader.CATRsc中将其关联,具体如下,则cmd1按钮显示的是CAACmd1.Bmp图标。CAAAfrGeoCreationWkbHeader.CAAAfrCmd1Hdr.Icon.Normal="I_CAACmd1";在CAAAfrGeoCreationWkbHeader.CATNls文件中设置新建按钮的标题以及提示内容CAAAfrGeoCreationWkbHeader.CAAAfrCmd1Hdr.Category="Element";CAAAfrGeoCreationWkbHeader.CAAAfrCmd1Hdr.Title="command1";CAAAfrGeoCreationWkbHeader.CAAAfrCmd1Hdr.ShortHelp="newcmd1";添加两个工具条并插入一系列按钮的效果图如下面图4所示。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文件中设置菜单显示的属性。CAAAfrMeu1EltSnu.Title="新建菜单1";CAAAfrMeu1EltTlb.Title="command1";3、建立菜单以及按钮的响应类建好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国铝镍钴永磁市场前景趋势及发展潜力分析报告
- 2025重庆市安全员-A证考试题库附答案
- 2025-2030年中国金属钴市场发展趋势规划研究报告
- 2025-2030年中国袋式除尘器行业运营趋势规划研究报告
- 2025-2030年中国芝麻素市场运行状况与前景趋势分析报告
- 2025-2030年中国翻译行业竞争状况及发展趋势分析报告
- 2025-2030年中国砂岩行业市场运行态势及发展风险分析报告
- 2025-2030年中国电热水龙头市场运行现状及发展前景预测报告
- 广西民族大学《建筑设备自动化A》2023-2024学年第二学期期末试卷
- 广东外语外贸大学《法律与人生》2023-2024学年第二学期期末试卷
- 2024年电工(高级技师)职业鉴定理论考试题库-下(多选、判断题)
- 20S515 钢筋混凝土及砖砌排水检查井
- 《幼儿园保教质量评估指南》解读
- ICU单间耗材出入库使用登记表
- 外研版(一年级起点)四年级下册英语全册教学课件
- 助贷机构业务流程规范
- 2024四川省凉山州林业局招聘60人历年(高频重点复习提升训练)共500题附带答案详解
- DL∕T 5106-2017 跨越电力线路架线施工规程
- 西师大版数学四年级下册全册教学课件(2024年3月修订)
- 绿化养护服务投标方案(技术标)
- 九年级物理第一课
评论
0/150
提交评论