|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条1 s6 \* x) r: _6 Z! ~
- @5 P7 _. y" R9 O$ d5 A8 z
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。7 r6 B; E! B% }# u- l A6 T
我们来在PartDesign中插入一个工具条。
2 |; M" u+ C# D W C 1、新建一个module命名为myPartAddin,并将它设为active。! R3 q0 U/ E# {5 G4 K- ~
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
5 x& D" X4 W3 O* X3 i8 ~, {. D0 b输入addin的名字,点击add再点击浏览选择要执行的接口,如图:- ^+ i- P! d) @' ?, |
- {' W3 R0 Y( J# y8 A: s
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
: t" U2 m k# mCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
! V4 O- \% b/ }/ [. C: N3 S0 ~) f工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
- F" z! C) J& C: h台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench7 a! V9 l- O! a6 v! Q) ?
下都显示当前工具条。
d! E; ]; t- p4 P3 {& m2 @. c 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:! _* Q! R$ m6 \+ P
myAddin CATIPrtWksAddin libmyModule2 s2 K; ]7 h( t( Z( k- [
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
- b9 ^" j9 a8 {4 l( z* z9 `在NewAddin类中添加两个Public函数声明:$ y% W$ ~% N- S, u" ], X
void CreateCommands();
) }4 g7 F& B/ }9 l ]/ O1 H& XCATCmdContainer * CreateToolbars();
/ e- X0 S" L# m/ I3 S在NewAddin.cpp中添加宏定义:, g" [+ F% ~) x+ S
#include "CATCommandHeader.h"
8 T1 x! f; H/ p6 g9 [- G. yMacDeclareHeader(PartCmdHeader);
# O; m. |- S9 y L/ u: T这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: 6 `" f2 F+ v- }7 C; ~- S! O* A
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);6 O+ |) N: R9 a: h4 ?
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);2 v! `7 Y, v' h8 I R, \- b
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
0 t8 t' u: K' B
/ X% n) ^3 l- K3 g" r9 S0 hCreateToolbars里面就是要建的工具条和菜单的主要内容:
# s) K# }6 z! |& O) R5 L! B7 F8 i2 I$ B" X) _ x! a; p* ]- J
* f' c) L+ ^- _0 Y% M
//设置工具条
4 L( u( E1 `( f& {; J K NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);0 h5 [: p5 [) }# Q$ {0 _5 Z6 R1 a4 S
AddToolbarView(pPartBenchTlb,1,Right);& [# }% O, O2 v9 i5 f, t4 g2 q
NewAccess(CATCmdStarter,pPointCmd,PointCmd);& s+ }- i+ | _2 Y! B( c
SetAccessCommand(pPointCmd,"Create Point");' t+ t% }5 S7 u& P6 j3 o0 w' m
SetAccessChild(pPartBenchTlb,pPointCmd);) E4 `+ u: {# @( |* F9 Y
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
; p" M( @! h$ i SetAccessCommand(pLineCmd,"Create Line");
& `& d$ [& I0 I) k) x0 z SetAccessNext(pPointCmd,pLineCmd); / K! ~ Z) Y5 h3 @
4 e. R h' W t
//设置菜单
2 J X1 k% U8 J; F2 l/ X NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
4 F, q& o: f5 m9 j NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);9 _4 R+ Z9 v1 R1 i
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
+ o* ?9 L7 {0 F! I SetAccessCommand(pPointCmdm,"Create Point");( t; ]8 Z/ p- Z+ E6 e! S, K
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
+ l ], `4 a( A7 t SetAccessCommand(pLineCmdm,"Create Line");1 o/ b- x8 P. O% B
9 m7 y/ @' w3 Y( f& d
SetAccessChild(pPartBenchMun,pPartBenchSmu);
. T u' L" M( w. H1 l+ M( z1 X SetAccessChild(pPartBenchSmu,pPointCmdm);
6 Y, s$ L' B8 V9 x+ C* ^4 J- G SetAccessNext(pPointCmdm,pLineCmdm);
' I# D% J- K5 i2 U. L# |! l SetAddinMenu(pPartBenchTlb,pPartBenchMun);- h3 J3 ` G- y9 [
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
! n% w o) Z4 A5 A* ^$ X* f9 kSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
5 A: {( g7 }: U* _7 ~SetWorkshopMenu()、SetAddinMenu()等# m+ f2 L8 Y' ^4 e
NewAccess 的函数定义如下:
$ N$ W7 h! ~* XMacro NewAccess (className,variableName,objectName) ' L6 V. c4 T- K
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、7 V7 z7 p3 n7 ]+ g
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表7 H9 X, ]; Y5 Q$ n
示分隔符) 4 I0 @9 ~& c. t. F) @
: _7 q! t& R1 b9 e; S
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
! z" Q, X, w2 H/ Z& w4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
/ C! U, o" `5 h3 N在.cpp中加入:#include "CATCmdContainer.h"; Q/ K% E( C) M9 c, q: t Q4 A0 q% Z
#include "CATCreateWorkshop.h"
: U3 h6 H! V, b# n; k) [在.mk文件中加入:WIZARD_LINK_MODULES = \ \7 o0 `" L" D0 ^- w5 t
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
2 v# S/ @+ U( t1 O4 gCATApplicationFrame* O4 m6 a( I# O5 ?
# END WIZARD EDITION ZONE
7 w" h" @ V# Z7 T( g# f; zLINK_WITH = $(WIZARD_LINK_MODULES) \
0 Q+ q5 e. U; m) |5 q% Q- A A CATApplicationFrame
R3 r) A( q2 N# S/ h在Identitycard.h中加入:. l$ M/ ^$ s( C6 ^ Z
AddPrereqComponent("ConstraintModelerUI",Protected);
2 i4 r3 u* s, y% B$ S注意:每次换行时,都要加一斜线用来继续执行下面的module.
$ S+ @& k$ P8 [6 o2 I/ `. V' E1 ^/ N, S+ ^5 ?" K9 a
6 O9 j& w# Z# \& Y' _重新进入编译后,可以看到结果如下:
& r: K. e6 o- @9 \' a
8 E& o3 v/ a2 Z% D( B' E3 z
1 n' A& w0 d2 n9 a0 b" F
# H6 x B( q* h9 P' G3 u/ R$ _4 m4 U/ y+ J ]$ [; h! ]
& u/ r; c7 e- f5 K
0 \9 {- w, Y1 ?' i1 n, d9 P
+ \ M7 y" a/ `. V
|
|