|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条* ]. H) \, a6 [0 V
# f! S! O3 o9 \& ]所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。: Z# x' ~. Y- I6 V3 j
我们来在PartDesign中插入一个工具条。
) C* @9 t$ P: _) g0 f 1、新建一个module命名为myPartAddin,并将它设为active。9 F: j' Y5 E4 d; v3 _" l; N
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框9 W7 }: X# _8 e) C
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
0 a6 E6 w8 r( L. S
/ d9 z4 c4 D0 q& j& f9 l1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口," C- z! M% K) T4 \1 t: d( R) h5 g
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
/ X Z8 g( L9 i工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
( h; [6 | n( M. B& S& B" f% J. A) h台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
3 O) A) z/ U9 q- Y7 N5 \: E下都显示当前工具条。
7 \- p6 Y( B, X% ~( f! r) j" y 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:% B7 G! W1 Z$ @4 q5 f
myAddin CATIPrtWksAddin libmyModule
B5 E2 f; P8 l8 }6 b' I" s但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
5 t4 Y5 K0 B3 ?0 R" X% |: K, |在NewAddin类中添加两个Public函数声明:: G8 K( y r3 C) T! C B
void CreateCommands();
/ c( X6 @' g f& ?9 _; ACATCmdContainer * CreateToolbars();: U; k) x e0 A$ \% g/ [
在NewAddin.cpp中添加宏定义:
+ n# G% ^! \* | \2 P; y! R( S; V#include "CATCommandHeader.h"
& x8 s5 ]9 S/ f* Q3 `1 N: K' I; Z7 hMacDeclareHeader(PartCmdHeader);
# G! E) L5 {" ~& j( V这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: " w; I3 N( \& g5 e( v; B. D
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
' A' z, @0 Y7 R# O; vnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);/ G% I W) A: G7 i" @( O. P
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
* b# T+ W2 O8 _! Z5 _. \$ V2 s; k% F" C' h
CreateToolbars里面就是要建的工具条和菜单的主要内容:0 t7 E" K- x3 d T) C' C
. f$ S3 I; }( Q
: y) ]; W* K/ D$ p3 R U
//设置工具条, R6 r- B b7 S/ f$ m2 J
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
, V4 i, O% W& t4 j AddToolbarView(pPartBenchTlb,1,Right);
& O- ^1 @0 e" S( m/ ? NewAccess(CATCmdStarter,pPointCmd,PointCmd);, v% g7 B6 F$ ?5 |4 Y$ C
SetAccessCommand(pPointCmd,"Create Point");
* ^0 |% Y" H! Z2 ] SetAccessChild(pPartBenchTlb,pPointCmd);* m- z: q7 e- }" O
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
- F% W3 }$ E1 Y) q4 j SetAccessCommand(pLineCmd,"Create Line");
* O4 V# I6 l% l SetAccessNext(pPointCmd,pLineCmd);
2 v2 j& E) _1 e
& l2 K9 o% M8 q //设置菜单, ]$ C. @! N9 P, H& L
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);- u' [& p, X! S8 O+ k; Q
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
7 h. ~( E! O' s1 [ NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
0 i1 \5 \1 l5 Q2 F* L; W% R SetAccessCommand(pPointCmdm,"Create Point");
6 E8 s2 l5 M! L' _/ h5 { NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
9 v, X" q9 w& s SetAccessCommand(pLineCmdm,"Create Line");2 j$ {/ A R2 W2 n2 r6 M; B9 z* r' T/ E
5 [; y1 x9 V2 ]6 A6 |( G7 T SetAccessChild(pPartBenchMun,pPartBenchSmu);
% S3 o5 s- {; P* s2 O( H* q" A SetAccessChild(pPartBenchSmu,pPointCmdm);
8 N' L+ Q8 i" i' ~; O SetAccessNext(pPointCmdm,pLineCmdm); , X9 S+ d8 j% A
SetAddinMenu(pPartBenchTlb,pPartBenchMun);
0 {2 y% {& X6 D7 U工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
9 z% E0 w, P( l$ y. Q* mSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、) g2 J: l$ i+ _
SetWorkshopMenu()、SetAddinMenu()等
: v, A f* J# \6 N5 G) sNewAccess 的函数定义如下:
# }$ V3 x5 P! W& t% ~; f+ ^1 EMacro NewAccess (className,variableName,objectName)
$ E' Z6 F- p. {8 l其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、7 s' a% @& Y" }4 J' J% E; j2 ?
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表2 |! s- }$ ^3 K4 K/ Q, ?0 @
示分隔符)
7 ^% G6 p( a* ]6 U# J* n
5 w- x! M+ p& m8 O: B8 N3 ~& {NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。 z: D; @* {$ V9 B0 m; T% {
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
; v6 c( o$ K, ~* Q( y9 t在.cpp中加入:#include "CATCmdContainer.h"
0 k& G, T- s. m# Y) P0 D; d#include "CATCreateWorkshop.h", w0 L9 q$ p! s2 ^- T
在.mk文件中加入:WIZARD_LINK_MODULES = \% z; _, K- t! o0 E, J# K
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
+ c6 u" X, \9 h# `8 d/ x+ L( RCATApplicationFrame
- x6 |7 v7 |/ n; H& i# END WIZARD EDITION ZONE 7 X3 S% Y, x* i0 D: l
LINK_WITH = $(WIZARD_LINK_MODULES) \& B* {- |* G2 g" a+ }( A
CATApplicationFrame
1 u/ N& O: Q, D3 c+ ]. p1 i6 d在Identitycard.h中加入:
1 _7 i( C6 L: T) E5 ~; O8 YAddPrereqComponent("ConstraintModelerUI",Protected);' h: p9 k+ I" i& |, k
注意:每次换行时,都要加一斜线用来继续执行下面的module.: s! f4 f1 r6 c: D
% Q2 W! S( I6 D/ Y" r ~" x# o# q7 G) G4 L7 U* z& M
重新进入编译后,可以看到结果如下:" f' p9 t( g" a* s. j5 g3 ^- R
. P% }2 W9 \6 K. D# n
3 e* Z* U4 }% {1 }) |( ~; x% s5 [
- o4 |. {- K3 \, j' U
! L7 q0 o9 N" ?# L l+ F0 M8 j k' k0 m) V
! k6 C1 l1 T* p% N1 z
4 I) j% i1 |' O4 D2 i |
|