|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条8 w- B' R" I" l1 m
7 c7 f0 w7 ?& A- W: P所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
6 \+ p/ p# z9 [. z5 L9 Y* G5 ]我们来在PartDesign中插入一个工具条。. }" s; r2 z$ X6 C: W' w$ _
1、新建一个module命名为myPartAddin,并将它设为active。: F) f9 d6 E6 z+ |% o _
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框4 W' q" l5 k5 o
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
8 ]: v# I) ~( r
. e6 V) d4 n2 }( }0 _, |& F Y2 B
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,: F! i' V( |- R. n
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前7 i: g7 x u4 `2 S8 J
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
# {. g5 y- ^2 L: d. u台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench( }' R6 E2 \# f N
下都显示当前工具条。
' S8 N! Z4 Z. [' k- Z 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
8 C% h1 v9 d6 ~5 g3 T: F v myAddin CATIPrtWksAddin libmyModule
( F: ~6 }) B5 e# R但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。2 N2 H% v3 A3 e! B2 ], b
在NewAddin类中添加两个Public函数声明:# U/ k. {3 d' B$ l' T% ]2 H, o
void CreateCommands();
3 G1 D/ y5 L8 ^! [# a% ?/ y- LCATCmdContainer * CreateToolbars();
6 ^- l1 w) z k8 {+ Q在NewAddin.cpp中添加宏定义:# o$ w) N! a8 S+ v; E
#include "CATCommandHeader.h"
* x' @( \' O6 L/ W. F/ \MacDeclareHeader(PartCmdHeader);
. T, z, y, @. F6 m F% p这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: % X" k+ R" o) ?/ i
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
2 Y+ N, W4 R I- A6 r- Knew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
8 _# J _; R- d& I7 `, t; v第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
& Q2 {& b$ I8 _8 O* A) M
6 @; {7 _7 s2 p6 S& zCreateToolbars里面就是要建的工具条和菜单的主要内容:% w, K. H. H1 y! S) ~7 D
2 R7 _2 `# e, I; k3 o0 O! ?+ _/ G
N' @( y! T* K* X. P0 V //设置工具条
6 a1 R" f7 ]( Z$ L) h! \ ? NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
# u5 g( b8 w( d) I: c% z" i AddToolbarView(pPartBenchTlb,1,Right);% D9 J6 a* @2 F
NewAccess(CATCmdStarter,pPointCmd,PointCmd);+ j3 X, k! Y: @; U5 ~1 t: E
SetAccessCommand(pPointCmd,"Create Point"); Q$ D% b8 K8 g4 M
SetAccessChild(pPartBenchTlb,pPointCmd);
% P! f; D% a7 [8 V7 U, ?: `& } NewAccess(CATCmdStarter,pLineCmd,LineCmd);
3 L* @; n8 t" T- m% ?( X2 Q SetAccessCommand(pLineCmd,"Create Line");
. h- q0 y0 |. y$ c2 u SetAccessNext(pPointCmd,pLineCmd);
- Q+ Q! \7 {9 j" h @% K+ \
2 r/ s4 m% m2 j //设置菜单
* m0 j+ j/ m7 ] NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);8 W) g0 J4 p- ^( M
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
& j' g/ f% a9 b7 [ NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
2 d5 B+ |4 H& W' L SetAccessCommand(pPointCmdm,"Create Point");
, @9 U7 R4 u& o0 k0 G' |" P7 \ NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);$ x6 h8 I8 n) O. L% k% ?. W
SetAccessCommand(pLineCmdm,"Create Line");
2 K+ H. M1 }" [+ S
# r h; s/ X8 ]! l; L W4 e; Z0 _ SetAccessChild(pPartBenchMun,pPartBenchSmu);
% M$ }5 B. [/ h1 w) [( Z. Z SetAccessChild(pPartBenchSmu,pPointCmdm);! \. v7 E0 M0 q# Z; t& [
SetAccessNext(pPointCmdm,pLineCmdm); ' T! q3 L8 h, F8 K3 S+ H
SetAddinMenu(pPartBenchTlb,pPartBenchMun);
$ D* n- y1 ~" s0 @. }工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
. A7 b# O$ u$ I4 I/ K3 X) j! U: q5 @SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
4 d) |0 ]( B/ n! I4 LSetWorkshopMenu()、SetAddinMenu()等
! P* B' S; k+ ^7 F& ]9 yNewAccess 的函数定义如下: 8 H* N o3 B" ~) l/ ~* h
Macro NewAccess (className,variableName,objectName) " [* w: j! y ]4 u2 U# }6 ?
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
# x; Z V! Y2 W# O: g) {* \+ FCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表" j7 b; W+ q" b
示分隔符) 8 r$ \- Q1 Y! S# l7 ^
: C" `) Z* }* K
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。4 | T+ e. m9 c# A% o9 ]. f
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"$ |& @6 a4 T0 k" `8 d/ K, Z: u
在.cpp中加入:#include "CATCmdContainer.h"
5 z! m2 r% ~, k8 @$ f0 c/ ?. _#include "CATCreateWorkshop.h"; o, A! d( r5 C
在.mk文件中加入:WIZARD_LINK_MODULES = \9 q4 h9 e8 g) z, q: S8 v
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \! ?# e* U% L S
CATApplicationFrame
4 [0 D$ {0 B4 O/ N" q; B# END WIZARD EDITION ZONE * L) Y* @& P' p7 e' p. r6 ]' y
LINK_WITH = $(WIZARD_LINK_MODULES) \
7 y9 \1 G3 E- p4 w$ `, ]- { CATApplicationFrame 4 }% F+ u5 e$ ?( F& e3 A
在Identitycard.h中加入:
0 p5 {8 R* }' d, n' v5 s) bAddPrereqComponent("ConstraintModelerUI",Protected);
: ^1 p8 T. d6 w1 _3 H注意:每次换行时,都要加一斜线用来继续执行下面的module.1 T+ l( {! U" K; |4 B' d
& T A9 g4 {8 y4 X5 d( ]
+ _1 j* f! }7 R8 z) I重新进入编译后,可以看到结果如下:
5 o* `, q! P! q4 K% h) E$ a+ R- _2 u. Z) }+ T7 P! c
; X9 c7 u) y0 R9 v1 l# a' W
& ], z: _! r" n5 k% c6 c+ d$ @# A, U. k5 \/ a# N" p
: w0 t" |5 p6 w( d' z
: `5 z, q# m$ R& i, f) r- h
3 }; C; B4 t& j0 q8 _$ C |
|