CATIA CAA:在CATIA中创建自己的工具栏按钮和菜单

原文链接

注:本文在CATIA P3 V5R19和VS2005下实现,文中的链接请自己在CAADoc中寻找

Command(命令) 和 Access(按钮/菜单) 通过 Command Header联系起来

各个标识符的命名习惯请参考Checklist for CAA V5 C++ Naming Rules

一、准备工作

1. 创建Workspace

2. Locate Prerequisite Workspaces

3. 创建Framework,Implementation / Development

二、创建Addin

1. 创建Module,shared object

2. 插入Component

Component name:Addin名字
Interfaces adhesion:附着的接口。BOA/TIE/TIE chain为三种模式,具体区别见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

image
image

三、创建Command

1. 创建Module,shared object

2. 插入Command

见下图,各选项作用具体见Working with the RADE Dashboards - Part 2

image

四、代码实现——Addin部分

大部分代码已自动生成,需要自己添加的如下:

.h文件中:

预编译部分

class CATCmdContainer;        // 声明类,下面要用到返回值类型CATCmdContainer*</pre>

类声明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)   CATApplicationFrame

2. Framework的 IdentityCard.h 中添加

AddPrereqComponent ("ApplicationFrame",Protected);

3. mkmk

4. Create/Update Runtime View

5. Open Runtime Windows
输入 cnext,等待CATIA打开
若此前 Addin 附着的接口是 CATIPrtWksAddin,则此时进入 零件设计 或线框和曲面设计,将看到刚才建立的按钮或菜单

七、代码实现——Command部分

重载以下三个函数,完成需要实现的功能。

(注意,我们选择的Command类型是Basic Command,相当于一个勾选框。如果要实现其他类型的按钮,可以选择Statechart Command)

Activate():按钮激活时的动作
Desactivate ():按钮失去焦点时的动作
Cancel:命令被撤销时的动作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 我女儿满月那天,我突然收到一个微信好友的反复请求,没有任何的敷衍,只是在昵称上写了电话号码。我以为只是一个微抢啥的...
    小婉菇凉阅读 237评论 0 4
  • 广州,一个承载无数梦想的繁华城市,在那个夜色迷离的不知所措的夜晚,拖着一颗疲倦的心,X小妹又一次呆呆的看着公交车窗...
    HiFi不二阅读 517评论 0 1
  • 贺变丽 焦点解决中级十期 洛阳嵩县 坚持分享第175天 2018--12--3 昨天从老家回来,我和儿子...
    hebl阅读 252评论 0 1