|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条6 ^. i w" j9 b! l" V+ S9 z
2 Y \9 c+ j3 G m u9 H, d7 L所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。0 f: Q* V/ t- F) f6 V
我们来在PartDesign中插入一个工具条。% }+ X. ?' K/ ~ |0 z
1、新建一个module命名为myPartAddin,并将它设为active。
) h, S! H5 O5 ` 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框; x3 c/ |+ H$ e
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:# A2 [) A0 t- E& J
! d: X; M& g& n! H) M
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
2 _; L! i9 h5 y: C" T! r4 k: r' ICATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前# Q6 `: E3 O* G5 D
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
* p( t: V) s8 l' o& @4 F台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
9 L: k) t; [7 B8 k5 h下都显示当前工具条。 ! S1 E2 e0 E* f7 u+ M' S: Q7 p
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:5 n7 W3 B# U I# M( |$ |
myAddin CATIPrtWksAddin libmyModule2 l Z, f+ @* }. K4 }, F V
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
5 @6 P( [ k9 T! _5 D/ i在NewAddin类中添加两个Public函数声明:
' P' o3 p. c! W* _void CreateCommands();
6 S* R7 |% ?3 u$ ?: zCATCmdContainer * CreateToolbars();% B5 f& N3 i7 B; x- ~
在NewAddin.cpp中添加宏定义:
5 R* k/ R) X. x#include "CATCommandHeader.h" " I6 K4 a& B- S9 o, K) @
MacDeclareHeader(PartCmdHeader);0 K# H9 h; E' j5 S3 \! x1 z( t7 n
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
' ?& h& ]# a# ?; f9 K& rnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);; Y! p" |& `3 I# q0 h ~
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);! r% y2 i9 x e/ X2 v9 a- Z/ V
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。, J. g; u7 C, g/ V3 f
5 F' H; B1 p8 ]$ I6 v
CreateToolbars里面就是要建的工具条和菜单的主要内容:6 _" v+ C8 y8 G% d$ a
/ W% F( q0 ?- [# P" {. b1 B% s- ^# A7 G8 ^ [3 R e; M6 N
//设置工具条
5 B: f7 Y4 u' _) A+ L NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
9 _% i, J: t% V AddToolbarView(pPartBenchTlb,1,Right);
" R. Z$ o, I4 I: M% @7 @0 R' j0 k# ] NewAccess(CATCmdStarter,pPointCmd,PointCmd);
8 j, v" f: Q- V SetAccessCommand(pPointCmd,"Create Point");
* V; g# ~: U& }+ X3 d SetAccessChild(pPartBenchTlb,pPointCmd);; q; z$ ]& o7 T" L1 L9 m
NewAccess(CATCmdStarter,pLineCmd,LineCmd);5 n# p4 F, W% R* V9 L! G
SetAccessCommand(pLineCmd,"Create Line");( C8 m6 V" V5 ~
SetAccessNext(pPointCmd,pLineCmd);
2 _- e) }8 n% }9 R
1 L; k+ B P, s( I //设置菜单
- r9 p+ z" A0 G1 ], c NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);0 |: B6 q7 r# B6 J' S
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);* d8 u; o, s8 t T& B9 T
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);. c- L; }3 G: O
SetAccessCommand(pPointCmdm,"Create Point");( z2 ^1 e( m0 S z
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
( D1 c M# }5 m6 \8 C G3 G) ] SetAccessCommand(pLineCmdm,"Create Line");5 x1 h) X) c3 s% u( V
; m* P& k2 s* S) K SetAccessChild(pPartBenchMun,pPartBenchSmu);( D& y# Y! B' c9 j, k/ w1 |
SetAccessChild(pPartBenchSmu,pPointCmdm);, w$ E# G5 q( ^
SetAccessNext(pPointCmdm,pLineCmdm);
3 x4 Z0 p* I/ {4 T SetAddinMenu(pPartBenchTlb,pPartBenchMun);
7 f; X# P3 X5 X4 t) w" J0 N工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、6 p2 \; N* d9 N: a3 |9 ?
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、2 J- e7 D2 O, D- n5 {
SetWorkshopMenu()、SetAddinMenu()等6 S6 ~9 a, k" H
NewAccess 的函数定义如下:
3 x. A: _; x0 ^8 U* o) nMacro NewAccess (className,variableName,objectName)
& x B! Y, M6 b其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
; K, w# H: o. A4 y$ UCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表" C" x5 o8 N2 i
示分隔符)
. x' h2 P7 Y9 h) w% I
. K6 h# U; ], V. b, _: INewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。5 K* @+ {7 j! n
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
" \" [( S0 i! w' d/ R6 y- x在.cpp中加入:#include "CATCmdContainer.h"! L2 K) \* Q' w
#include "CATCreateWorkshop.h"/ w- U2 Z, ?! ~$ X" d3 I
在.mk文件中加入:WIZARD_LINK_MODULES = \
" d; h1 q# N7 Z3 N/ JJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \1 V; ~- @8 s7 ?# S- L
CATApplicationFrame$ e) a4 ?$ {; v* U; I8 q7 H
# END WIZARD EDITION ZONE 2 S' g; \! U5 a6 Y, ^0 L, a
LINK_WITH = $(WIZARD_LINK_MODULES) \
/ E3 R6 V8 ~/ r" D CATApplicationFrame 7 a }0 O/ ?* i ^- c8 y3 x: h
在Identitycard.h中加入:
$ ]9 Y3 x$ k0 ]& jAddPrereqComponent("ConstraintModelerUI",Protected);5 Y/ C' Y3 t8 r. E$ v
注意:每次换行时,都要加一斜线用来继续执行下面的module.( j9 t( z: y% u/ }5 e1 n
* v) L9 R0 q) F3 |# r
. f0 k. Y4 H: o$ e3 [重新进入编译后,可以看到结果如下:
( M! R' H# k% ?& V l1 n( M# a: C0 ^5 ?2 O6 t
2 a& i, b% n: ~/ y8 {; ?1 d6 v8 F5 f2 `
5 E' D3 h7 K7 C8 ?9 l
1 s/ I) _& }, m& f! q/ T3 I5 s) i5 }8 N; Y
- P) E& X3 |: [: h# H, S% r |
|