|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条: O7 J- z! P) N) s6 n |
5 A [' M. ~, }所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。' j- N: N$ h' E" q1 i
我们来在PartDesign中插入一个工具条。0 |* ^5 O, @3 _, W6 e: x
1、新建一个module命名为myPartAddin,并将它设为active。
, d, J5 [" A. t' q! H 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框, j. Z- G( n7 _. ]# d+ u9 Q
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
, Q6 P6 n( I* H( l7 F, ?% @# r3 W) k, P
0 [6 m! m- U0 v
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
' Z7 Y* n- Y9 {8 D; _% [& ICATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前 ~( h) J5 I w* [' v
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
6 g0 t! q# a$ \5 X7 u x2 h台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
6 e- b& t9 m" T! t: c: Z; M2 b下都显示当前工具条。 - j* X, s3 b- O; k9 I9 F
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:$ X/ h4 A4 g9 U3 d8 k5 s" S
myAddin CATIPrtWksAddin libmyModule, e& @ X9 n. z$ x( `7 g: u
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。' t# s1 e) ^! r# o9 e# B( Z
在NewAddin类中添加两个Public函数声明:
% @# e. Q8 |4 @void CreateCommands();
+ h" e0 c# K- \; Q* L' v! @( VCATCmdContainer * CreateToolbars();
- I6 g1 e8 `2 ?) |& E0 n在NewAddin.cpp中添加宏定义:
a. o9 \' Q, R4 M# ~#include "CATCommandHeader.h" . P2 b3 m! ?) O4 [
MacDeclareHeader(PartCmdHeader);
5 v, D, n- J8 y" k8 A! A9 T这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
. d& E" s# A% qnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
- S5 P$ r1 `3 ]3 w1 l) Tnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
' l0 k4 q. `+ ]. ?7 J: f0 {/ w; ?第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。. V3 ~* @4 z, ~* f5 V: R# h
$ ]8 A- ^5 e/ i/ [4 a/ VCreateToolbars里面就是要建的工具条和菜单的主要内容:
5 ^2 w6 M/ a/ `! P% D A# T+ V% U `% r; _& q2 \
% ^0 V" m$ K7 T( \3 N; W3 L4 t //设置工具条+ T! u% R" k G0 F1 u
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
5 A- m7 `& G* w' Q& [6 E6 V AddToolbarView(pPartBenchTlb,1,Right);5 g1 X' p& u4 ?
NewAccess(CATCmdStarter,pPointCmd,PointCmd);6 O$ s. W" E3 E3 I' {1 e
SetAccessCommand(pPointCmd,"Create Point");0 J. a. U6 x* ^! U# B) d
SetAccessChild(pPartBenchTlb,pPointCmd);) A0 S3 V) M7 H, {& L
NewAccess(CATCmdStarter,pLineCmd,LineCmd);) c# m+ c, X- E( w- k0 Z4 [
SetAccessCommand(pLineCmd,"Create Line");8 s) p' L _& c8 ~
SetAccessNext(pPointCmd,pLineCmd);
, F9 c; S; i- x( [$ g# W
* [, l9 l5 H. U# w5 @ //设置菜单
; y) h( f0 Y0 n NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);7 Y! ^* _( Z1 t( B
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);' c9 ]" V! O# h5 Z
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
# I* L; }* _: M6 C SetAccessCommand(pPointCmdm,"Create Point");& j) c% | c: p( n
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
* `7 h1 }/ J* H+ d2 y SetAccessCommand(pLineCmdm,"Create Line");- I, x% n6 I9 L6 T8 @) X, S0 ~
# B( a8 ~: C# @. f3 y/ I SetAccessChild(pPartBenchMun,pPartBenchSmu);
8 G _- _+ B8 h SetAccessChild(pPartBenchSmu,pPointCmdm);
5 P3 | f( c( f9 c; s* G/ w SetAccessNext(pPointCmdm,pLineCmdm);
8 W+ V( `5 F0 h SetAddinMenu(pPartBenchTlb,pPartBenchMun);
8 x+ Q; a% u5 G2 W3 Y5 v5 Y4 t+ r工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、5 N6 e9 f4 ?; O, l/ V
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
6 }4 ?. q5 d: c4 l; m( d! w9 h$ ASetWorkshopMenu()、SetAddinMenu()等/ c. d% X! H$ ?" E' V' r
NewAccess 的函数定义如下: F$ Y9 k4 L/ L; G+ o) M! @
Macro NewAccess (className,variableName,objectName) 8 S, y7 {% x) E& Y; j( D
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、; ^9 L$ y7 b8 N. Q; G" ?9 e; l
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
5 R" i0 \5 s" X/ s1 x示分隔符) * E: g6 l' @& O* S2 A& \
( }4 f( ~ }$ f/ J |: v0 ~+ eNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
" B' u$ [$ C+ d0 ^4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"* ~; [; E& Y+ I
在.cpp中加入:#include "CATCmdContainer.h"$ L9 s8 e/ I$ v/ K& E
#include "CATCreateWorkshop.h"+ w& f* S" I9 B, j
在.mk文件中加入:WIZARD_LINK_MODULES = \
+ ]% n: N% B' d1 YJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
4 @5 D/ n+ V$ `CATApplicationFrame3 k0 i7 g" K, m+ [0 [% u# v8 N
# END WIZARD EDITION ZONE ' T T( F' c4 P F0 ^; ?: B
LINK_WITH = $(WIZARD_LINK_MODULES) \2 N b0 V h5 b8 |: s
CATApplicationFrame
N1 {4 m1 L% V% e% S在Identitycard.h中加入: `8 s. g* n1 a
AddPrereqComponent("ConstraintModelerUI",Protected);
1 G4 o# v6 n5 `# z注意:每次换行时,都要加一斜线用来继续执行下面的module.$ n+ R8 O7 L `5 G
1 M) a# W2 n7 F! i3 G3 p
0 U. c/ O: B! \# Q% n K/ {重新进入编译后,可以看到结果如下:6 z9 y( H$ I2 w- g$ e- q+ w
: j N3 e5 T2 U- y
) ~/ H- z0 H4 k9 _! ]. E
3 S* Y9 a% K: x' |: |/ }7 o5 _" x6 T6 e! V
. u0 Z0 S9 ?. p% x; a3 u; }1 i2 U) Q! S9 S4 R" H$ t
; V. t7 p8 M# d/ C/ w" t: a
|
|