|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
" A' [' J W- x! I# }& C5 I/ |* G& H" g
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
$ l# r- G$ B, D5 Q我们来在PartDesign中插入一个工具条。
- F' M% `) n! M @" |& p; B2 d 1、新建一个module命名为myPartAddin,并将它设为active。
3 `% h; o2 L% y. K0 g 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
' m+ ]2 |/ Y) ]8 k* e% ~; m输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
" r1 Q, F0 i/ ]; W" z
Y" L& ~9 t& W7 |5 _1 O, W
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,+ S9 h# q& ^# \* n& i9 ]( w. s# K3 m
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
2 j6 h x* I$ X7 I工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作( n8 t% d7 i$ Z$ G( h
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench3 O# g X# g+ w" `
下都显示当前工具条。
n+ _/ |, i* Y3 z 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:, z8 J9 y& Y) e# S
myAddin CATIPrtWksAddin libmyModule
& a0 \. R V- q但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。6 F' Z `2 Y9 F9 K ]
在NewAddin类中添加两个Public函数声明:9 t% K# f0 X9 P8 ?0 ]7 x, b
void CreateCommands();& q( G5 U4 p* o- I# Y
CATCmdContainer * CreateToolbars();
- g8 ?1 Q# R$ }- Q) C在NewAddin.cpp中添加宏定义:! z. v3 o+ s# O: X
#include "CATCommandHeader.h" + a+ e5 o+ _. n
MacDeclareHeader(PartCmdHeader);. K7 N F0 c0 r5 p, V
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: 0 \6 w5 ~+ \; E' q/ I
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);* p5 T. F* d5 r1 \) o/ `+ M* d8 U
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
, [' Q! W, R8 c) t% k第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
% ^& k) Q) S; d3 ?" z- u. z! S
# d' u7 l- N7 v3 X% @1 f/ GCreateToolbars里面就是要建的工具条和菜单的主要内容:2 Y9 K7 J4 n3 j, D7 V+ h6 ^$ [6 n
) I1 e) n/ x: ~1 N% U0 `# ]; ~
! V; O, ^* h7 c) I
//设置工具条
. S2 z) s5 H4 I NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);/ w. m) r+ m) Y9 s
AddToolbarView(pPartBenchTlb,1,Right);
8 L2 @$ e- @- t6 }+ `/ {- r NewAccess(CATCmdStarter,pPointCmd,PointCmd);
( K( V# C5 C! l" }) ~; S SetAccessCommand(pPointCmd,"Create Point");& l. O* Z/ Q" L& Y( F
SetAccessChild(pPartBenchTlb,pPointCmd);1 ?. v% u9 R/ R( D: G% H
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
5 p4 W1 L9 F' o: g8 H SetAccessCommand(pLineCmd,"Create Line");
/ \0 P& ?7 k( w+ s SetAccessNext(pPointCmd,pLineCmd);
- k, q9 |3 Z9 g/ z
6 a$ ?. `2 k6 t4 c& O l% n //设置菜单
. R; y0 h* W8 ]7 x; O- d NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
9 g0 ]3 I5 G! G! ? R$ k ^ NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
6 x/ W2 x |) o1 H9 E; z NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
- m( _* m: t6 t) H$ `, X4 e# ~, _ SetAccessCommand(pPointCmdm,"Create Point");, c9 b# z& \ E; r* f3 s9 r
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);, k7 x4 U5 q4 F4 `
SetAccessCommand(pLineCmdm,"Create Line");
- k) {6 P) J7 U2 j$ U 9 Y4 n# u9 z6 j# y8 y$ j. ~
SetAccessChild(pPartBenchMun,pPartBenchSmu);; A8 M: @/ N" T# W' R# n) g2 |
SetAccessChild(pPartBenchSmu,pPointCmdm);
, h2 u) K+ y( U6 F SetAccessNext(pPointCmdm,pLineCmdm); , e" {8 f- q( F3 ^: {" H- K/ W
SetAddinMenu(pPartBenchTlb,pPartBenchMun);; m1 N9 {. j p* E
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、 Z S, o' V+ ^& J
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、; S! q$ V4 ^* }8 y/ d, W3 }
SetWorkshopMenu()、SetAddinMenu()等
8 x% w$ T. z- k% a9 R. ~6 oNewAccess 的函数定义如下: 8 L( q6 h9 u& ]2 u9 F# x
Macro NewAccess (className,variableName,objectName)
3 l: w& i3 L" k: v6 \其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
8 ~( I# c" l1 Y- YCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表% t q" D: x$ _+ C
示分隔符) 6 I! m' e7 u1 }+ G3 ?
: S% y. R l% ^7 `NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。' C$ }6 a& B0 j: d$ d. \
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"" X0 a6 @& A) X# U' V# C3 h0 f/ ]
在.cpp中加入:#include "CATCmdContainer.h"* i b( k- N2 v: M
#include "CATCreateWorkshop.h"
; ^; q8 `# S' P! s在.mk文件中加入:WIZARD_LINK_MODULES = \" s& g! w1 e# W4 \
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
2 j7 U; E" V% o: w3 M. l) ^% X' ECATApplicationFrame
3 B4 a5 ^- u) _6 i( q# END WIZARD EDITION ZONE & W1 q$ e% f) k& W) D' ?7 ~: \- i+ i- N
LINK_WITH = $(WIZARD_LINK_MODULES) \, C5 m- }, K: r- A9 o0 [
CATApplicationFrame
3 x: `* d9 a5 L, X在Identitycard.h中加入:
! B! n2 D' F' j" WAddPrereqComponent("ConstraintModelerUI",Protected);- Z6 M) I# \ e
注意:每次换行时,都要加一斜线用来继续执行下面的module.
2 @* S3 a6 S% s j0 a$ i' H& b, i
, \" }& R4 N# e3 S2 F( A, S重新进入编译后,可以看到结果如下:/ k( J4 ?5 p. k' \' N! K, [4 w
5 C- ~! t- x, A* a9 l, l2 L* V
0 U1 V$ g; ]: G2 ?2 d, z* \
% a2 w2 V5 |" J/ N/ H9 D
; A' \8 N: O! y; z/ m& Z, f9 O( K+ ~/ g" H/ ~. u$ y6 a
% K& h2 C& F& F+ a
6 x' J: U4 v! Y9 e |
|