CATIA技术交流论坛

 找回密码
 点击注册
查看: 519|回复: 0

CATIA CAA 二次开发详细教程 第三讲:添加Addin(菜单、对话框)

[复制链接]

1684

主题

1726

帖子

4266

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4266
发表于 2018-1-26 13:42:04 | 显示全部楼层 |阅读模式
下面简单介绍addin的制作:
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。下面的例子, 我们来在PartDesign中插入一个工具条 。
1、新建一个module命名为PartAddin,并将它设为active。  
2、做接口CATIPrtWksAddin的implemention,  insert->component,弹出对话框如图,输入addin的名字,点击add再点击浏览选择要执行的接口,如图。

要选择的接口为CATIPrtWksAddin注意Search workspace为你的CATIA安装路径,并将下面的单选框设为空。点ok完成。
文件相应的试图如下:


3、此时建立了一个空的Addin。在yourframe.dico文件中可以看到这个Addin的声明:
NewAddin????? CATIPrtWksAddin? libPartDesignAddin
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
在NewAddin类中添加两个Public函数声明:
void CreateCommands();
CATCmdContainer * CreateToolbars();
在NewAddin.cpp中添加宏定义:
#include "CATCommandHeader.h"???????  MacDeclareHeader(PartCmdHeader);
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:?  new PartCmdHeader(“point”,“CmdModule”,“TestCmd”,(void *)NULL);
new PartCmdHeader("line","CmdModule","LinCmd",(void *)NULL);第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。 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);  
这三个函数都可以查到, NewAccess肯定是新建了,常用的类有CATCmdWorkbench(The workbench's access is a CATCmdContainer which contains containers: one for it's menubar and one for each toolbar. ) 、CATCmdContainer(Class to create the container's access like a menubar, a menu, a submenu, a toolbar or an icon box) 、 CATCmdStarter、(A starter is a leaf of the workshop's accesses tree. At each starter you attach a CATCommandHeader to launch the associated command. )
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。( SetAccessCommand 就是将starter与上面的PartCmdHeader 建立的东西连接了,注意参数“line” )其他的顾名就可思义。
4、此时编译,发生几个连接错误。
主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。
在.h文件中加上:#include "CATCmdContainer.h"
在.cpp中加入:#include "CATCmdContainer.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);
注意:每次换行时,都要加一斜线用来继续执行下面的module.
到此addin就做成了。剩下的就是定义资源文件,也就是换换名字或给按钮连接个图片。和前面的workbench一样工具条名字在“NewAddin.CATNIS”中进行定义: PartBenchTlb.Title=”测试工具条”; 在NewAddin.CATRsc定义图片。
NewAddin.point.Icon.Normal = “I_CAAPoint” (图片一般放在cnext/resource graphic\ Icon\Normal文件加下 , NewAddin.CATRsc文件可能不会自动生成,你可以在相应的文件加下新建一个问本文档,把后缀改成CATRsc再在VC里刷新你的工程就有了)。
下面简单介绍一下命令的响应
(1)首先就是前面提到的 new PartCmdHeader(“point”,“CmdModule”,“TestCmd”,(void *)NULL);
你做的命令所在的模块和命令名一定要和上面的名字对应。新建一个名为CmdModule的Module。将此Module设为当前的Project,选择“Insert”? “CATIA Resource”? “Command„”,插入一个名位TestCmd的Command:
(2)Dialog的插入  将CmdModule设为当前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"
在TestDialog.cpp的Build()函数中添加 在三个回调函数中加入 RequestDelayedDestruction(); 此语句功能为执行Dialog的析构函数。

编译(MKMK),更新(Create/Update runtime virw),运行tools->open runtime window输入cnext。去partdesign里找你的工具调就行了。
补充:在自己做的workbench里加工具条和菜单代码是一样的,一般加在文件workshop.h里面,它里面已经有了工具条的代码,宏定义header class也已经自动添加到yourworkbenchCmdHeader.cpp里面在做以上例子时最好参考CAA V5 Encyclopedia\user interfaces\Wintop Frame里面的Create workbench、CreateAddin例子,资源文件的定义在这里也讲的比较详细。

本帖子中包含更多资源

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

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

手机|小黑屋|CATIA技术交流论坛

GMT+8, 2019-12-9 19:28 , Processed in 0.033678 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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