《CATIACAA二次开发详细教学教程.pdf》由会员分享,可在线阅读,更多相关《CATIACAA二次开发详细教学教程.pdf(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、CATIA CAA 二次开发详细教程二次开发详细教程 第一讲:基本概念第一讲:基本概念 caa/rade 软件地址软件地址 1. 1. 什么是组件?什么是组件? 由于本人是自学,属于摸着石头过河,所以很多东西显得比较幼稚,大家请见谅。 CAA,全称,全称 Component Application Architecture,组件应用架构。这个东西对不搞软件的 人来说可能很陌生,我也很陌生啊,原来光知道“面向对象的技术”就很牛逼了,“组件技 术”难道更牛逼吗? 既然类和组件有着这么多类似的地方, 那么传统的面向对象编程和面向组件编程有什么区别 呢?简单的说, 面向对象关注的是组合在一个二进制可执
2、行文件中的各个类的关系, 而面向 组件的编程关注的是在彼此独立的基础上模块之间的交互性, 这种交互性使得你并不需要熟 悉它们内部的工作原理。 这两种方法最基本的不同在于它们对最终的应用程序的观点。 在传统的面向对象编程中, 尽 管你可以精心的把所有的商业逻辑分布在不同的类中, 一旦这些类被编译, 它们就被固化成 了一个巨大的二进制代码。所有的类共享同一个物理单元(通常是一个可执行文件)、被操 作系统认为是同一个进程, 使用同一个地址空间以及共享相同的安全策略等等。 如果多个开 发者在同一份代码上进行开发,他们甚至还要共享源文件。在这种情况下,修改一个类可能 会让整个项目被重新链接,并重新进行必
3、要的测试,更严重的,还有可能要修改其他的类。 但是,在面向组件开发中,应用程序是由一系列可以互相交互的二进制模块组合而成的。 一个具体的二进制组件可能并不能完成什么工作。 有些组件是为了提供一些常规服务而编写 的,例如通信的封装或者文件访问组件。也有一些是为了某些特定应用而专门开发的。一个 应用程序的设计者可以通过把这些不同的组件提供的功能粘合在一起来实现他们需要的商 业逻辑。很多面向组件的技术例如: COM 、 J2EE 、 CORBA 和 .NET 都为二进制 组件提供了的无缝链接的机制。而唯一的不同就是你需要在组件通信上花费的力气。 把一个二进制应用程序分解成不同的二进制组件的动机和把不
4、同的类放到不同的文件中是 类似的。 后者使得不同的类的开发人员可以彼此独立的工作, 尽管即时修改了一个类也要重 新链接整个应用程序,但是你只需要重新编译被修改的部分就可以了。 但是, 面向组件的开发还是和简单软件项目的管理更复杂一些。 因为一个面向组件的应用程 序是一个二进制代码块的集合,你可以把组件当作是 LEGO 的积木块一样,随心所欲的拆 装它们。如果你需要修改一个组件的实现,只需要修改那个组件就可以了,而组件的客户机 不需要重新编译也不需要重新开发。 对于那些不常用到的组件, 组件甚至可以在一个程序运 行的时候被更新。 这些改进和增强使得组件可以立即进行更新, 而所有该组件的客户都将立
5、 即受益。无论是在同一台机器上还是通过网络远程访问。 面向组件的应用程序也更易于扩展。 当你需要实现新的需求的时候, 你可以提供一个新的组 件, 而不去影响那些和新需求无关的组件。 这些特点使得面向组件的开发降低了大型软件项 目长期维护的成本,这是一个最实际的商业问题,也正是如此,组件技术才如此迅速的被接 受。 面向组件的应用程序通常可以更快的响应市场, 因为你可以有很大的选择空间, 不仅仅是自 己开发的组件,还可以从第三方厂商来购买某些组件,从而避免了重复制造轮子。这里, VB 就是一个很好的例子,丰富的 ActiveX 控件使得很多人在快速开发中得到了享受。 面向对象和面向组件另一个重要的
6、不同在于这两种技术在继承和重用模型上的侧重点不同。 在面向对象的分析和设计中, 应用程序通常被分解成复杂的类继承结构。 类的设计和要解决 的商业问题紧密结合。你可以从已有基类继承并特化其行为来实现代码重用。问题在于,这 是一种很糟糕的重用的方法。 当你从一个基类派生一个子类的时候, 你必须对基类的实现有 透彻的理解才可能保证不出问题。 例如: 修改一个成员变量会不会带来副作用?这会对基类 中的代码有什么影响?重载基类的方法会不会破坏那些想使用基类版本的客户的行为?等 等。 这种形式的重用被称为白盒重用(White-box reuse),因为当你重用的时候你就需要去了解 基类实现的细节。显然。白
7、盒重用在可扩展性较高的大型应用中并不经济,也很难得到第三 方 Framework 厂商的支持。 面向组件的开发采用了黑盒重用(Black-box reuse)的方法,它可以让你对组件内部全然不 知的情况下来使用组件公开的接口。这样,你就可以远离那些复杂的继承关系。而面向组件 的开发者也可以把更多的精力放在制定组件和客户的沟通的接口上了。 最后, 面向对象编程提供了有限的工具和设计模式来处理和应用程序运行时相关的问题, 例 如多线程、并发管理、安全、分布式应用和版本控制等。面向对象的开发者当面对这些“公 共需求”的时候,或多或少的需要自己来解决问题。但是面向组件的开发方式却使你在这方 面要灵活的
8、多。 以下是 CSDN 社区网友对组件的一个讨论: 1 面向对象是面向组件的基础,组件是在对象的基础上加上属性和事件 2 复用粒度的大小不同。 通常多个密切相关的对象组织在一起完成一个/或多特定的功能。 组 件有多个侧面(facet),不同的使用者可能只使用其中的部分。 3 级别不一样,“面向对象”是对语言级别的,“组件”是对应用级别的。组件可以由对象 实体组成。 4 组件由一个或若干个对象组成。对象提供可访问的接口。 5 可笑,现在很多人把面向对象编程理解为面向组件编程,真是幼稚! 6 组件是一种面向应用的概念,对象是一种面向编程方法的概念。一般进行组件编程都是用 面向对象的方法编程进行实现
9、。 组件已经是一种能实际应用的实例了。 本人的理解, 见笑了。 7 面向对象是在代码一级对数据和方法的封装,C+,JAVA 面向组件是在二进制代码上的封装,COM/COM+,CORBA 8 面向组件的集成度和可重用度更高(如楼上的 meking_lee 所说的),面向组件渴望一种真 正的接口级的搭积木的软件模式,目前在语言特性上支持这一点的就只有 java 了(当然也 许我见识短)。 9 用 C+实现组件,是因为没有直接支持组件的语言。现在的组件太大了。 10 应该说是面向对像和基于组件 2. CAA2. CAA 架构架构 CATIA 本身是按照组件模型建立起来的,用户可以通过开发自己的 CA
10、A 组件,对 DA SSAULT SYSTEMES 的 CATIA V5 进行扩展;也可以把用户自己开发的 CAA 组件结合起 来,实现用户自定义应用。 CAA 应用的框架结构遵从组件对象模型,有自己的框架结构。每个应用有至少一个框架(fra mework),每个框架有至少一个模块(module)。每个框架里面有一个 IdentityCard.h 文件, 这个文件通过宏“AddPrereqComponent(framenwork,protected)”来声明“声明”这个框 架的一些首先必备的其他框架名称,framework 是框架名称。CAA 的编译器就是通过 Identi tyCard.h
11、文件,来把头文件搜索限制在首先必备框架所包含的接口中。 8 每个模块下面定义了一个Imakefile.mk文件,这个文件指明了这个模块中所有文 件在编译时用到的其它模块和一些外部库以及为编译器提供如何编译的模块必 须信息, 还指定在不同的操作系统下面编译时的一些可能的特殊要求。CAA环境 对Cnext能够运行的所有操作系统中采用同样的编译器,这为开发者提供了很大 的方便,因为他们可以不需要知道怎样用不同的编译器和怎么写makefile。但是 MKMK并不能做所有的事情, 开发者至少要说明他们想要做什么。 我们在自己的 源文件中用到其它模块的接口,要在Imakefile.mk中进行说明。 % S
12、( c R y 3 E- T0 Y$ _7 f程序结构采用 了COM组件模型,组件模型中有两个常用的概念:接口(Interface)和实现(Impleme nt)。接口是一个包含许多纯虚函数的抽象对象,这些纯虚函数指明了接口支持的 方法。 实现是一个具体定义接口中的方法的对象,一个实现对象必须显式声明它 支持哪些接口,还必须定义它支持的接口中的所有抽象方法,实现对象可以支持 一个或多个接口,而客户应用只能通过这些接口与实现对象发生联系。 下面的这个图好像比较能体现 CAA 的思想,不过要仔细看看。 3.Whats RADE?3.Whats RADE? RADE,Rapid Applicatio
13、n Development Environment,快速应用研发环境,是 一个可视化的集成开发环境,它提供完整的编程工具组。RADE 以 Microsoft Visual C+6.0 为载体,开发工具完全集成在了 VC+环境中,并且提供了一个 CAA 框架 程序编译器,但同时也限制了 VC+的部分功能。可以说 CATIA CAARADE 是目 前所有高端 CAD/CAM 开发环境中最为复杂、同时也是功能最为强大的一个。 CAA V5 RADE 包括一系列工具:TCK(Tool Configuration Key)、MAB(多工作空 间应用生成器)、CUT(C+单元调试管理器)、MKMK(CAA
14、 编译工具) 、CID(C+交 互式面板)等,以插件的形式与 MSDev VC+集成到一起。然后借助于这些工具在 MSDev 环境下开发自己的 CAA 组件。 TCK 管理 RADE 环境,TCK 命令是用来管理开发工具包的安装,用来创建一个工 作环境。当在 WinowsNT 上用 CAA V5 的可视化创建工具(以插件形式嵌入 Micro soft Developer Studio),tck_init 和 tck_profile 命令在打开一个 V5 的工作区时被 自动调用。 . Z7 MKMK(多工作区应用编译器)是 DS(Dassault Systems)原代码编译工具, 它构建在平 台
15、无关(UNIX 和 WindowsNT)的标准编译器上,它支持面向组件的设计模式。MKM K 提供一种统一的工具来编译和连接 CAA 应用而不管是用的什么编程语言(Fortran, C, C+, IDL, Express, CIRCE, .)。 1 1 V9 K O8 n, S4 n _ CUT 是单元调试管理器,CUT 用 mkodt 命令来运行传递给测试框架中的测试对象, 通过选择不同的命令参数来决定选择测试一个对象或者所有对象。 CID 即 C+交互式面板,CID 根据软件开发人员的需求,支持从设计、开发到测试、 推广及维护的整个开发设计周期,CID 提供对 RADE 产品的单点访问。尽
16、管 CID 在 W indowsNT 下运行,它能够产生 Unix 程序代码。 MAB 多工作空间应用生成器产品, 它为 CATIA V5 应用程序提供一个集成统一的编译、 链接、编辑、生成环境。MAB 能够承担多工作空间编辑,链接,运行代码生成,以 及各工作空间之间依赖性的有效管理。MAB 还可以监控任一工作空间的源代码的变 更,在整个编译过程中显示跟踪该变更,使编译过程只需要编译更改部分即可。 CATIA CAA 二次开发二次开发 第二讲:添加第二讲:添加 Workbench 这一部分很重要请注意认真看, 说它重要是因为在后面程序的调试中可能会出现错误, 请你务必在安装开发 vc 环境的时
17、候注意, 在安装 vc 的时候记得有个地方自己选, 最好你都 装了,如果你没有装也没有关系,到时候从 vc 的安装文件里面考出来也可以,就是关于 RA DE 中会用到的 lib 库,在 vc 中的目录为 vc98/mfc/lib 目录下,如果你调试出现问题,比 如 error 没有找到 mfc42u.lib 或者别的你就要从安装盘里面把所有的 lib 里面的文件考到 你的 vc 对应安装目录下。 1. 2 进入正题 1. 新建工作空间 你按照我以前的帖子安装完开发环境在 vc 下面就有了 RADE 的菜单 找个标签页你可以选择下面的复选框,以后新建工程的时候就不会弹出了,然后选择 ok 你可以
18、先建立你的开发目录然后选择 Workspace Directory 的时候指定目录, with 就选择 m kmk,tool level 选择你的版本。点击 next 选择创建一个新的框架 frame,然后 finish,弹出 new framework 对话框,输入你的 frame 名字,下面的选择如图所示,framework typeimplementation,framework function development,然后 ok 弹出下面的配置对话框 然后 ok,dos 窗口闪动几下就可以了 1. 创建 module 有了工作空间和框架下面就是添加 module 了,好像你做的所有开
19、发都在 module 里面 (我也是刚入门,很多东西还不懂_) Project 目录下面选择 new module 弹出下面的对话框 输入你的 module 名字,module information 选择 shared object,也就是交互式(caa 的 开发分为交互式和批处理,听似水年华这么跟我讲的_),然后 ok。弹出下面的产生文件 对话框 然后点击 ok,你的 module 就添加到 workspace 里面了,在 vc 的 fileview 窗口如下所示: 1. 载入必须的 API 函数 选择菜单如下所示: 弹出如下的对话框 Mode 选择第一项,然后点击 add,添加函数所在目
20、录,选到你的 catia 目录下面的 B14,一 定要选对。添加后的结果为 点击 ok,弹出调入需要的文件对话框如下 点击 close,dos 窗口闪动完成。 1. 插入资源,也就是菜单、对话框等 在 RADE 环境的 insertcatia resourcecatia pattern, 弹出对话框如下 选择 ok,弹出下面的对话框 选择 workObject type 为 workbench,然后输入你的 workbench 名字,点击 associated wo rkshop(也就是你要你的菜单出现在那儿,catia 里面的一个 workshop 对应一个模块,比 如机械设计、曲面等)右面
21、的按钮,弹出下面的对话框 选择 PRDWorkshop,也就是你做的菜单要出现在“机械设计”模块里面,点击 ok 回到原来 对话框 点击 next 弹出 不用选择直接 next,出现对话框 这个对话框是让你选生成类的前缀,可以不用去管,然后点击 finish 弹出将要生成文件对 话框 Ok,完成配置,回到 vc 界面下 fileview 窗口可以看到变化如下 同时将上图里面的 myframe1.mfiles 删除。 多了一个 myworkbench.m 文件包。 1. 删除多余文件并修改 mk 文件 1. 打开你的工作空间所在目录,找到你建立的 frame 框架文件夹, 然后打开删除里面的第一
22、次建立的 module,我这儿是 MyModule1,同时删除 PublicInterfaces 文件夹下面对应第一次建立的 module 的头文件,我这儿 是 MyModule1.h, 2. 修改.mk 文件,因为里面未包含 CATIPRDWorkshopConfiguratio n.h 这一个头文件的 Module,打开该文件后在后面添加下面代码 LINK_WITH = $(WIZARD_LINK_MODULES)? CATPrsWksPRDWorkshop (3)指定你的菜单出现位置,打开 userframd/Cnext/resource/msgcatalog 下面的 MyWork Be
23、nch.CATRsc 文件, 修改 TestWb.Category=Infrastructure里面引号里面的内容为 Mech anicalDesign,也就是变为 TestWb.Category=MechanicalDesign,这样你的菜单就出现 在“机械设计”里面了。 1. .编译调试 1. 编译之前先更新一下运行环境,如下所示 选择 creat/update runtime view,弹出下面对话框 选择图中的设置,点击 ok 完成更新 1. 调试 mkmk 选择环境下面的菜单如下 选择 mkmk 进行编译弹出下面的对话框 选中你的 workbench,在上面的复选框选择编译时要检测的
24、选项,点击 ok 完成编译 1. 生成可执行文件 下面生成你的 workbench,选择编译环境下的菜单如下所示 弹出下面的对话框 选择里面的文件和 debug 标签页, 选择 executeble for debug session 文本框右面的箭头, 选择 brose 弹出下面的对话框和选择 选中里面的 CNEXT.EXE 文件,然后选择打开,然后点击 ok。 1. 执行文件工程查看菜单(马上就要大功告成了激动啊。) 选择环境下的菜单如下 开始启动 catia 了,等着看结果喽_ 嘿嘿看到了吧,这就是你的菜单了,下面就是要添加菜单响应. 1. 友情提示 1. 顺序一定不能错, 在建立完 w
25、orkspace 也就是产生 frame 以后就 要 load prerequisite workspace。 2. 出现问题的时候要更新一下编译环境 creat/update runtime v iew 3. 如果是出现的错误为缺少库文件, 记得开篇说的那样看看自己的 vc 哦 _ CATIA CAA 二次开发二次开发 第三讲:添加第三讲:添加 Addin(菜单、对话框)菜单、对话框) 下面简单介绍 addin 的制作: 所谓 Addin,是在系统已有的 Workbench 中插入新的工具条或者菜单。下面的例子, 我们来在 PartDesign 中插入一个工具条 。 1 1、新建一个、新建一
26、个 modulemodule 命名为命名为 PartAddinPartAddin,并将它设为,并将它设为 activeactive。 2 2、做接口、做接口 CATIPrtWksAddinCATIPrtWksAddin 的的 implemention, implemention, insert-component,弹出对话框如图, 输入 addin 的名字, 点击 add 再点击浏览选择要执行 的接口,如图。 要选择的接口为要选择的接口为 CATIPrtWksAddinCATIPrtWksAddin 注意注意 Search workspaceSearch workspace 为你的为你的 CA
27、TIACATIA 安装路径,并将下安装路径,并将下 面的单选框设为空。点面的单选框设为空。点 okok 完成。文件相应的试图如下:完成。文件相应的试图如下: 3 3、此时建立了一个空的 Addin。在 yourframe.dico 文件中可以看到这个 Addin 的声明: NewAddin? CATIPrtWksAddin? libPartDesignAddin 但是,要创建一个工具条,我们还需要在这个类:NewAddin 中添加一些函数。 在 NewAddin 类中添加两个 Public 函数声明: void CreateCommands(); CATCmdContainer * Creat
28、eToolbars(); 在 NewAddin.cpp 中添加宏定义: #include CATCommandHeader.h? MacDeclareHeader(PartCmdHeader); 这两个函数及宏都可以按 ctrl+F1 查到, CreateCommands 里面的代码只是用 MacDeclareH eader 生成的 PartCmdHeader 定义命令的 header (不知道怎么翻译, 就是工具条或菜单里面 可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:? new PartCmdHeader(“point”,“CmdModule”,“TestCm
29、d”,(void *)NULL); new PartCmdHeader(line,CmdModule,LinCmd,(void *)NULL);第一个参数是按钮的 名字,第二、三个代表按钮执行的命令所在的 module 和命令的名字,参数四缺省就行了。 CreateToolbars 里面就是要建的工具条和菜单的主要内容: NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb); NewAccess(CATCmdStarter,pPointCmd,PointCmd); SetAccessCommand(pPointCmd,point); Set
30、AccessChild(pPartBenchTlb,pPointCmd); NewAccess(CATCmdStarter,pLineCmd,LineCmd); SetAccessCommand(pLineCmd,line); SetAccessNext(pPointCmd,pLineCmd); 这三个函数都可以查到, NewAccess 肯定是新建了,常用的类有 CATCmdWorkbench(The w orkbenchs access is a CATCmdContainer which contains containers: one for its menubar and one f
31、or each toolbar. ) 、CATCmdContainer(Class to create the con tainers access like a menubar, a menu, a submenu, a toolbar or an icon box) 、 CATCmdStarter、(A starter is a leaf of the workshops accesses tree. At each starter you attach a CATCommandHeader to launch the associated command. ) NewAccess, Se
32、tAccessCommand, SetAccessChild, SetAccessNext 等几个命令的使用。其 具体含义可以参看 API 文档的说明。 ( SetAccessCommand 就是将 starter 与上面的 PartC mdHeader 建立的东西连接了,注意参数“line” )其他的顾名就可思义。 4、此时编译,发生几个连接错误。主要是 CATCmdContainer 类型及 Newaccess 的定义的头 文件及其 Module 的添加。在.h 文件中加上:#include CATCmdContainer.h 在.cpp 中加入:#include CATCmdContai
33、ner.h #include CATCreateWorkshop.h 在.mk 文件中加入:WIZARD_LINK_MODULES =? JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID CATApplicationFrame # END WIZARD EDITION ZONE LINK_WITH = $(WIZARD_LINK_MODULES)? CATApplicationFrame 在 Identitycard.h 中加入: AddPrereqComponent(ConstraintModelerUI,Protected); 注意:每次
34、换行时,都要加一斜线用来继续执行下面的 module. 到此 addin 就做成了。剩下的就是定义资源文件,也就是换换名字或给按钮连接个图片。和 前面的 workbench 一样工具条名字在“NewAddin.CATNIS”中进行定义: PartBenchTlb.Title=”测试工具条”; 在 NewAddin.CATRsc 定义图片。 NewAddin.point.Icon.Normal = “I_CAAPoint” ;(图片一般放在 cnext/resource graphi c IconNormal 文件加下 , NewAddin.CATRsc 文件可能不会自动生成, 你可以在相应的文
35、 件加下新建一个问本文档,把后缀改成 CATRsc 再在 VC 里刷新你的工程就有了)。 下面简单介绍一下命令的响应, (1)首先就是前面提到的 new PartCmdHeader(“point”,“CmdModule”,“TestCmd”,(void *)NULL); 你做的命令所在的模块和命令名一定要和上面的名字对应。 新建一个名为 CmdModule 的 Mod ule。将此 Module 设为当前的 Project,选择“Insert”? “CATIA Resource”? “Comman d”,插入一个名位 TestCmd 的 Command: (2)Dialog 的插入 将 Cmd
36、Module 设为当前 Project,选择“Insert”? “CATIA Resource”? “Dialog”, 并将其名字设为 TestDialog。 然后在 TestDialog.CATDlg 中添加控件,这里的控件与一般 VC 程序差不多,不再详述。添 加三个回调函数。 在 Command(TestCmd.cpp)的 BuildGraph()函数或者其构造函数中添加代码: TestDialog *pi=new TestDialog(); pi-Build(); pi-SetVisibility(CATDlgShow); 注意先加其头文件: #include TestDialog.h
37、 在 TestDialog.cpp 的 Build()函数中添加 在三个回调函数中加入 RequestDelayedDestruction(); 此语句功能为执行 Dialog 的析构函数。 编译(MKMK),更新(Create/Update runtime virw),运行 tools-open runtime window 输入 cnext。去 partdesign 里找你的工具调就行了。 补充:在自己做的 workbench 里加工具条和菜单代码是一样的,一般加在文件 worksh op.h 里面,它里面已经有了工具条的代码,宏定义 header class 也已经自动添加到 yourw
38、 orkbenchCmdHeader.cpp 里面 在做以上例子时最好参考CAA V5 Encyclopediauser interfacesWintop Frame里面的Cr eate workbench、CreateAddin 例子,资源文件的定义在这里也讲的比较详细 CATIA CAA 二次开发二次开发 第四讲:创建自定义特征第四讲:创建自定义特征 本例是使用 CAA C+开发方式,建立一个自定义的用户特征,实现的功能是使一个任意曲 面可以根据给定曲面的形状来生成和目标形状相同的形状, 类似于生活中缝补的概念, 其具 体的开发步骤如下: (1)创建一个库(catalog)来定义特征的 S
39、tartUp。用 CATfctEditorAssistant-new-catalog 命 令创建 catalog,通过.osm文件定义 catalog 里 StartUp 数据结构。对 StartUp 的定义要根据自 定义特征的性质,选用合适的 container,在 feature 定义中,要对对自定义特征的输入输出 和该特征的中性数据给予明确的定义。 (2)创建一个扩展接口来访问特征的属性。通常在该接口中定义设置和获取自定义特征属 性的方法。在本文中接口的作用是 取得被缝合的表面和支撑面。 (3)创建一个可以实例化该特征的工厂(Factory) 。该工厂的作用是打开创建的 catalog
40、获 取 startup,然后实例化自定义特征并设置它的属性。 本文中为创建缝合面,然后打开 catalog 并获取 startup,实例化特征设置其属性。 (4)创建工具条 Toolbar。使用 CATCommandHeader 类创建命令头,最简单的方法就是使 用宏命令: #includeCATCommandHeader.h、MacDeclareHeade(rMyHea-der) 。CommandHeader 添加 到工具条的 Addin 函数中,createco-mmand(s)用来实例化一个新的命令,createtoolbars 用来确定访问顺序,SetAccessCommand 的作用
41、是将命令头与按钮相连,SetAccessChild 以 及 SetAccessNext 这两个宏则可以顺序连接到入口。 (5)创建对话框 Panal。在 Bulid 函数里添加设置对话框各按钮相应的功能函数,并为各按 钮设置默认的初始值。用 CATStateCommand 类创建 StateCommand 命令,在 BuildGraph 里 定义状态表(StartChart)来实现用户意图。 (6)最后应用 CATIBuild 方法,当输入改变时对新的特征更新。本文中具体为移除可能的 更新错误、 获取新的输入数据、 定义程序上的结果、 生成特征并存储结果。 主要程序代码 (略) 。 运行程序后
42、,生成图 1 所示的三张不同形状的曲面,其中黄色两个曲面为参考面,绿色为目 标曲面。 当在创建的自定义特征对话框中,参考曲面选择 sphericalsurface,目标曲面选择 base plane 时,点击 ok 按钮后,原绿色平面就生成了缝合球面后的新特征,如图 2 所示。 图 2 以球面为参考生成的自定义特征 当在创建的自定义特征对话框中,参考曲面选择 prismsurface,目标曲面选择 base plane 时, 点击 ok 按钮,原绿色平面就生成了缝合后的新特征,如图 3 所示。 CATIA CAA 二次开发二次开发 详细教程(详细教程(5)添加一个点)添加一个点 在创建任何几何
43、对象之前,必须在激活的函数命令中添加以下代码,:在创建任何几何对象之前,必须在激活的函数命令中添加以下代码,: CATFrmEditor* pEditor = CATFrmEditor:GetCurrentEditor(); if(pEditor = NULL) printf(error getting the FRM editor); CATDocument *pDoc = pEditor-GetDocument(); CATIContainerOfDocument_var spConODocs = pDoc; CATIContainer* pSpecContainer = NULL; HR
44、ESULT hr = spConODocs-GetSpecContainer(pSpecContainer); if(spConODocs = NULL_var) printf(error getting the container of documents); 以上代码的主要功能是获取以上代码的主要功能是获取 editor, the document and the contaieditor, the document and the containerner。 CATIGSMFactory_var spGSMFactory = NULL_var; CATIPrtFactory_var sp
45、PrtFactory = NULL_var; CATICkeParmFactory_var spParmFactory = NULL_var; spGSMFactory = pSpecContainer; spPrtFactory = pSpecContainer; spParmFactory = pSpecContainer; 以上代码设置工厂,在这基础上你才可以造型以上代码设置工厂,在这基础上你才可以造型,GSMFactoryGSMFactory 用于创建底层用于创建底层 的几何对象比如点、线等。的几何对象比如点、线等。PrtFactoryPrtFactory 包含创建孔特征、拉伸特征实体
46、等函数。包含创建孔特征、拉伸特征实体等函数。 ParmFactory ParmFactory 包含设定参数的函数。包含设定参数的函数。 在以上的基础上可以创建点了,步骤如下:在以上的基础上可以创建点了,步骤如下: (1 1)创建一个三维数组)创建一个三维数组(x,y,z)(x,y,z)定义点坐标。定义点坐标。 double Coords3; Coords0 = 0; Coords1 = 0; Coords2 = 0; (2 2)创建一个)创建一个 CATIGSMPointCATIGSMPoint 并将其转换为并将其转换为 CATISpecObjectCATISpecObject CATIGSM
47、Point_var spPoint1 = spGSMFactory-CreatePoint(Coords); / Creates a point CATISpecObject_var spSpecPoint1 = spPoint1; /Casts the point as a CATISpecObject (3 3)为了在)为了在 CATIACATIA 显示你创建的点,必须将其添加到视图中。显示你创建的点,必须将其添加到视图中。 spSpecPoint1-Update(); CATIGSMProceduralView_var spPntObj = spSpecPoint1; spPntObj-
48、InsertInProceduralView(); 所有的源代码如下:所有的源代码如下: / / - CATStatusChangeRC MyCommand:Activate( CATCommand * iFromClient, CATNotification * iEvtDat) CATFrmEditor* pEditor = CATFrmEditor:GetCurrentEditor(); if(pEditor = NULL) printf(error getting the FRM editor); CATDocument *pDoc = pEditor-GetDocument(); CATIContainerOfDocument_var spConODocs = pDoc; CATIContainer* pSpecContainer = NULL; HRESULT hr = spConODocs-GetSpecContainer(pSpecContainer); if(spConOD