|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条2 O2 A2 o, a- r( \' ^
2 r+ {- d# y' ^9 M4 V% Q+ L" |! K所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
' u5 c6 R. J5 J我们来在PartDesign中插入一个工具条。 u e; U2 i" ?& z
1、新建一个module命名为myPartAddin,并将它设为active。8 ^) P! _9 L: b
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
H9 ~" J3 C" T/ x: z1 K/ r输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
n5 |5 U$ _, `/ v5 l
0 `; V! D+ @- f3 w0 j1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口, b0 ?! B- ?: M* d% i- m' D# H
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前" u+ ^$ j2 K5 F/ B: P8 ^9 r& e- @
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
2 t2 \* R6 ?3 J) i. I' a台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
5 Q1 U+ }" I, H下都显示当前工具条。
( R6 s9 U+ B4 B; A 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:! y7 r) g! J6 _) Z6 l
myAddin CATIPrtWksAddin libmyModule$ v+ }3 Y. L( `& i! U
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。2 X$ A3 \8 e' h5 E: _' A
在NewAddin类中添加两个Public函数声明:
! j6 s3 [, |+ o) c9 e; G: E: Lvoid CreateCommands();
* a1 [+ B! }, I! [9 ?! nCATCmdContainer * CreateToolbars();
; v$ q; r1 t* @4 _# F; X* L J在NewAddin.cpp中添加宏定义:6 t( v7 ]4 Q$ B5 u) y
#include "CATCommandHeader.h"
: J+ U6 e5 b2 n$ u5 M) ]3 B7 WMacDeclareHeader(PartCmdHeader);
6 _- C. q5 W) Q0 ?% s这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: 6 e' ^! I- l, B' [4 t; }6 H/ i
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
! ~4 S0 W( k6 q* |; z! j; Bnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
# A0 G e7 z2 n3 e& ?$ V1 v第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。' c) o+ i8 H- k4 t8 w/ Y
$ T+ |/ M1 _$ ^3 f+ }: L s& L
CreateToolbars里面就是要建的工具条和菜单的主要内容:! r4 K. y) f0 F; w' _9 P+ ^
% n! ?' z2 [2 |/ g/ p7 h9 R$ }' M, c2 k' Q1 f
//设置工具条0 h/ F! [1 U! ^1 Z+ E( g
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);2 d4 n' A0 j+ @
AddToolbarView(pPartBenchTlb,1,Right);
C/ n: z( _- J' @! `) D1 Q# j NewAccess(CATCmdStarter,pPointCmd,PointCmd);
! o! |; d, z) _: }) l& s SetAccessCommand(pPointCmd,"Create Point");
1 M- F9 T9 \. _; k- w- ^ SetAccessChild(pPartBenchTlb,pPointCmd);- w! y0 ^9 [. K6 b6 y7 |
NewAccess(CATCmdStarter,pLineCmd,LineCmd);# J! W% \1 Q. y2 l6 q( L2 t
SetAccessCommand(pLineCmd,"Create Line");
6 E9 x1 Z, o8 O( V SetAccessNext(pPointCmd,pLineCmd);
$ }9 j( t6 S) \2 l ! ?- b9 z* Q, ]* g- j# y, P8 k
//设置菜单- o' P" K1 ?3 @# Z
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);) I+ G* @* F _3 U+ p
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);7 m; W8 t! f! t: g l* h6 ^5 [/ p
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);& m- C T6 l' T
SetAccessCommand(pPointCmdm,"Create Point");$ W/ E3 Q! @' D: h+ `
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);, i5 ~9 {. h% u _: s; a) a! e
SetAccessCommand(pLineCmdm,"Create Line");% p9 j- d! a7 O$ j( U
. h. T/ Q) }4 x( I# p
SetAccessChild(pPartBenchMun,pPartBenchSmu);
% K5 P+ U$ J: K) B1 B1 o# z SetAccessChild(pPartBenchSmu,pPointCmdm);
# y* i* u9 C9 x' j" d SetAccessNext(pPointCmdm,pLineCmdm); 3 K- e0 }" r4 y H% h
SetAddinMenu(pPartBenchTlb,pPartBenchMun);
& l& q0 g8 c" L! c! N$ I/ Y工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
/ A+ I. H/ V8 E9 n+ m9 cSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
. K! t7 i- p0 Q N2 r! PSetWorkshopMenu()、SetAddinMenu()等: r4 r, T$ d! E* V
NewAccess 的函数定义如下: 4 V0 M! B2 G+ G* D9 k* v+ d
Macro NewAccess (className,variableName,objectName) 7 P& W5 \) p- ?# ]; {
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、! j& `6 c- G5 V k3 u9 E$ a, h' x
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表# U+ } Z6 }* E& a2 z0 t& ^- D. N w
示分隔符)
; e$ z* a$ p3 Q5 N( m' }0 b: C. K7 C5 y5 U
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。9 _$ d; K* ^) u% ^# {& p
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"" c1 [7 e" ~7 r: C6 ~2 _, E) Z2 X
在.cpp中加入:#include "CATCmdContainer.h"- m6 T9 x; H2 b% n% G
#include "CATCreateWorkshop.h" Y5 I2 A" ^2 G( A5 W/ p
在.mk文件中加入:WIZARD_LINK_MODULES = \
% {9 v; U, `: K8 L. ^JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
# B8 F" R' f" f3 F- [* Z$ vCATApplicationFrame f7 g5 n5 K" @/ Y" d
# END WIZARD EDITION ZONE / {7 Y1 G! j0 Q; L0 z
LINK_WITH = $(WIZARD_LINK_MODULES) \0 I2 D2 _+ C' G+ C
CATApplicationFrame
; s9 _: `! T! y8 A& T8 X7 U在Identitycard.h中加入:+ ]4 G% i1 D/ w5 u) G8 T
AddPrereqComponent("ConstraintModelerUI",Protected);, J. y. C, J9 O5 a3 Z8 J5 N/ B
注意:每次换行时,都要加一斜线用来继续执行下面的module.5 Q1 W' r+ {. d) ~) J* Q" M$ y
4 u8 @3 ~4 `+ Z( i' S8 j; q' X8 O
重新进入编译后,可以看到结果如下:
/ ~9 v6 \3 q: |8 S8 L q. D/ I- d" y/ Q& p ]+ V) W
% N, X' T1 Y; x5 N4 E- Y: U4 J, V6 g7 \% ^
. }# E# a& X( E: B! a
, ~" G* X( H$ M
) o) L2 g; j0 ^2 o; x
- T. A# N `8 b) E; S) D |
|