|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条9 k- r1 B# `; v
( T1 w+ X/ L4 t. E5 }2 L
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
! K+ f5 y4 u3 A( [) O# b: ?2 m! u! q我们来在PartDesign中插入一个工具条。
8 R3 v F9 K$ \3 h$ e 1、新建一个module命名为myPartAddin,并将它设为active。 L& A- @8 z/ S2 M
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
$ R+ |3 o( w$ O9 p输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
3 i9 S& Y$ g& X9 [+ b
; l; F( w$ D# m1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,* S9 k, n2 j8 ?4 l# i- Y" Y
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
2 i/ A7 q5 z: {' t: X工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
4 [; W6 l' v3 Y2 x- ~+ a台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench5 z. @- K: L4 \2 `6 s: s+ B
下都显示当前工具条。 : k7 N, C2 c6 F$ U& \& Z* j
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:) w; s/ ? q2 i) U) \' c: C
myAddin CATIPrtWksAddin libmyModule
, `1 }( b9 C+ v3 ~" [( A但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
: p" U0 q5 {: z5 i* b8 x在NewAddin类中添加两个Public函数声明:, ]# |- c: v' F' ?- [( z9 F
void CreateCommands();
& ?& R& s# H) L" ICATCmdContainer * CreateToolbars();
! Q8 o: H u, R$ a, Y- o在NewAddin.cpp中添加宏定义:! B& C7 s/ Y* j! S; P$ K- \# }
#include "CATCommandHeader.h"
7 n7 t7 Y1 x- S' t6 m7 ^. A- FMacDeclareHeader(PartCmdHeader);/ T2 c$ }3 X6 H; I/ O5 l
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: : } D3 j: e: q6 l5 v" j9 u
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
6 f0 N; ?6 Y! r( h2 ~, Snew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
8 e$ b% y; }" g8 [+ h第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
) F& h& V& h, X4 A* w- f3 j# v4 l; v* p2 @
CreateToolbars里面就是要建的工具条和菜单的主要内容:
& }3 y+ [ V0 ]6 v' {4 E1 q) \( O2 d1 \
$ ]3 \8 M, ^6 M) B* v8 K //设置工具条
* X% U+ {$ }8 S NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
# ~' a7 P+ x0 f5 d) X8 o- h AddToolbarView(pPartBenchTlb,1,Right);$ k3 ?. S- a# d- k# c
NewAccess(CATCmdStarter,pPointCmd,PointCmd);) h; N' Y" h, f( s! k# P- R
SetAccessCommand(pPointCmd,"Create Point");& }3 K( T' P- p0 ?. G& p) ~0 G
SetAccessChild(pPartBenchTlb,pPointCmd);6 u$ L+ V( z: I4 c0 K0 j5 B' Q! ~
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
, K' B$ O' S' d8 y3 F SetAccessCommand(pLineCmd,"Create Line");
" p% m5 W+ ~3 X4 Y+ C SetAccessNext(pPointCmd,pLineCmd); : R3 E7 q' w- f
- F9 r5 Y2 D3 A" d9 ~3 x" t2 w //设置菜单9 ~5 z9 n% n3 D
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
' u8 |( o( M. E) \/ E5 w5 j0 r NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);9 m6 b) j8 z7 O a8 M
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
. t2 M' D) s3 U. {, ]/ B: @ SetAccessCommand(pPointCmdm,"Create Point");
" c, y. M5 I) o NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);! h6 L, O) b6 S* c( ]
SetAccessCommand(pLineCmdm,"Create Line");' }7 E3 j. t2 {% j6 W9 v) A
, _1 t; P5 f: U; q. l SetAccessChild(pPartBenchMun,pPartBenchSmu);
' `# O) i* @/ s9 z) X# A SetAccessChild(pPartBenchSmu,pPointCmdm);7 s* S0 e+ F, M
SetAccessNext(pPointCmdm,pLineCmdm);
* O6 v4 `+ M R3 z d; r( w SetAddinMenu(pPartBenchTlb,pPartBenchMun);0 G' M! Z* D2 b
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、. N( g; j, H8 T S: a
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、2 W- V( H4 c7 h& F, Q5 q/ U
SetWorkshopMenu()、SetAddinMenu()等
! ?% V) Z$ X6 Y" e8 S9 {NewAccess 的函数定义如下:
, H' G, T$ t9 O/ @" z5 f& IMacro NewAccess (className,variableName,objectName) ' d$ `1 a% A2 D, T. C
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
5 }. L$ \7 V V) KCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表4 q# d* r* d3 t: H
示分隔符)
% D% T+ ]9 [2 t% ]
: _( p5 C& [5 p& M3 y" B6 XNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。5 m' r% E" R9 V* E# t
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
2 f; x7 R( ]6 S' ~4 q; p7 w在.cpp中加入:#include "CATCmdContainer.h"
1 T7 z3 B5 X$ K, z" {. x; r2 l$ G1 t#include "CATCreateWorkshop.h"
, O: ]; @5 [# B2 Z. x0 S在.mk文件中加入:WIZARD_LINK_MODULES = \% k2 {4 [# z( m3 g2 o9 }6 ^. S
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \- r. G9 M2 H f; u
CATApplicationFrame
7 c6 I* t* s* v3 J6 R4 {4 e9 Y! d& T+ e# END WIZARD EDITION ZONE 3 R+ J# Q1 M. F% D4 e& G) a. L
LINK_WITH = $(WIZARD_LINK_MODULES) \
% `! B9 a- c* F* }! H0 L7 j CATApplicationFrame
5 b3 }8 s7 k; R# ?) n( V0 @在Identitycard.h中加入:' v5 K8 k3 e( j1 B8 ?
AddPrereqComponent("ConstraintModelerUI",Protected);5 J' }: ]8 [( c5 [( M7 p
注意:每次换行时,都要加一斜线用来继续执行下面的module.! _8 w; U0 z' h- L
% M* k9 ^+ K) |7 s5 e! ?
: |" T$ R4 X9 z0 a. _3 C6 i
重新进入编译后,可以看到结果如下:7 c/ ^; s9 W- f
/ ?1 O. i, q( i
* j: n/ s+ b& o/ D) K( E) b; v ?6 \0 K1 {$ l4 T$ l8 N0 z
/ E W- ^5 h t- S. ?
R$ R* b1 M2 D" E: w
- }) n# V7 ~" D' S
! L4 n8 k, ^& H$ t/ N; ^ |
|