您的位置:首页 > 其它

CAA创建自定义CATIA工具栏按钮和菜单

2018-04-04 16:44 447 查看
转自https://www.cnblogs.com/ayanamistltz/archive/2012/11/29/2793947.html

注:本文在CATIA P3 V5R19和VS2005下实现,文中的链接请自己在CAADoc中寻找 Command(命令) 和 Access(按钮/菜单) 通过 Command Header联系起来各个标识符的命名习惯请参考Checklist for CAA V5 C++ Naming Rules 

一、准备工作

1. 创建Workspace2. Locate Prerequisite Workspaces3. 创建Framework,Implementation / Development

二、创建Addin

1. 创建Module,shared object2. 插入Component    Component name:Addin名字    Interfaces adhesion:附着的接口。BOA/TIE/TIE chain为三种模式,具体区别见pdf和CAADoc中的Working with the RADE Dashboards - Part 2。(请选择TIE,BOA在运行时会出错)3. 选择Interface    Search Workspace:CATIA的安装路径,注意最下面的复选框不要勾上    Interface 决定了工具栏/按钮出现在哪个 Workshop/ Workbench 中,如CATIPrtWksAddin则出现在零件设计中                    具体见CAADoc——C++ API——Object/Class Hierarchy 

  

 

三、创建Command

1. 创建Module,shared object2. 插入Command    见下图,各选项作用具体见Working with the RADE Dashboards - Part 2

 

四、代码实现——Addin部分

大部分代码已自动生成,需要自己添加的如下:.h文件中:    预编译部分
class CATCmdContainer;        // 声明类,下面要用到返回值类型CATCmdContainer*
        类声明public部分:
//------------------------添加创建Toolbar和Command Header的函数----------------------//
void CreateCommands();
CATCmdContainer * CreateToolbars();
//-----------------------------------------------------------------------------------//
 .cpp文件中:        预编译部分
#include "CATCmdContainer.h"
#include "CATCreateWorkshop.h"     // 包含管理 Access 的一系列宏

#include "CATCommandHeader.h"
MacDeclareHeader(WorkblankHdr);
//    该宏用于创建 command header class,一个class内可创建(new)多个command header
         函数实现部分
void WorkblankToolbar::CreateCommands()
{
new WorkblankHdr( "Generate",                 // command header标识符(也用于定义显示的文本或图标等资源)
"WorkblankCmds",                          // 所关联command的代码在哪个模块/库/DLL里
"GenerateCmd",                            // 所关联的command名(即类名)
(void *)NULL);                            // 可选的传递参数(传递给command,确定不同的操作)
}
CATCmdContainer* WorkblankToolbar::CreateToolbars()
{
NewAccess        ( CATCmdContainer, pWorkblankTlb, WorkblankTlb );
//    参数1:工具栏是CATCmdContainer的实例
//    参数2:指向该工具栏的句柄指针
//    参数3:该工具栏的标识符
//    2和3自己命名,保证标识符唯一

NewAccess        ( CATCmdStarter, pWorkblankStr, WorkblankStr );    // 按钮是CATCmdStarter的实例,后两个同上
SetAccessCommand ( pWorkblankStr, "Generate" );                     // 关联(按钮句柄,Command Header标识符)
SetAccessChild   ( pWorkblankTlb , pWorkblankStr  );                // 设置父子关系(父句柄,子句柄)

//    若在该工具栏上再添加一个按钮,则第三行改为设置邻接关系:
//    SetAccessNext (WorkblankStr, 按钮句柄);

AddToolbarView   ( pWorkblankTlb , 1 , Left );
//    参数1:工具栏句柄
//    参数2:1 工具栏可见,-1(默认) 不可见
//    参数3:工具栏固定在右边

return pWorkblankTlb;
}

 更多实例请参见 Creating Standard Command Headers 和 Creating an Add-in 

六、编译链接

1. Addin模块的 Imakefile.mk 中添加    LINK_WITH = $(WIZARD_LINK_MODULES)   CATApplicationFrame2. Framework的 IdentityCard.h 中添加    AddPrereqComponent ("ApplicationFrame",Protected);3. mkmk4. Create/Update Runtime View5. Open Runtime Windows    输入 cnext,等待CATIA打开    若此前 Addin 附着的接口是 CATIPrtWksAddin,则此时进入 零件设计 或线框和曲面设计,将看到刚才建立的按钮或菜单 

七、代码实现——Command部分

重载以下三个函数,完成需要实现的功能。(注意,我们选择的Command类型是Basic Command,相当于一个勾选框。如果要实现其他类型的按钮,可以选择Statechart Command) Activate():按钮激活时的动作Desactivate ():按钮失去焦点时的动作Cancel:命令被撤销时的动作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐