|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条9 B- _# }, `/ j/ s$ v! p
; Q" }! a: c! _" |/ f. U$ X所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
3 g! y$ x" M+ `我们来在PartDesign中插入一个工具条。+ o2 A; A# c8 e7 D$ t t
1、新建一个module命名为myPartAddin,并将它设为active。
/ [$ G, v& P% }, u( @ 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
4 d- p: {" d! n1 ?" M输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
- u0 d0 M& _6 P1 a2 W4 T) o
' o" n0 H+ \2 e) m+ p% t9 }, X3 K1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
: K( P$ E, T4 E5 Y9 LCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前 A! r- y0 @6 Y( y( [
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
6 L2 \! m4 o7 @8 ~+ v ~1 O$ ~台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench( O0 Y$ x$ C$ r- A# v
下都显示当前工具条。 6 J5 k% T1 b5 }+ E1 k1 m
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:. G5 k: p5 i( b. C- s
myAddin CATIPrtWksAddin libmyModule
9 p& y# k) M1 k4 a但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
+ N1 S+ _8 D' J在NewAddin类中添加两个Public函数声明:6 ]) K, ?$ R& }( s
void CreateCommands();
! O5 s1 _ e1 a6 \1 D( E0 A' ^3 YCATCmdContainer * CreateToolbars();
. P+ Y1 n+ ^* w7 @) ^) F* t/ b在NewAddin.cpp中添加宏定义:
1 a% k( s& U7 |' ~% H#include "CATCommandHeader.h"
" z5 E" P& r/ t7 b) bMacDeclareHeader(PartCmdHeader);
, x. z' v) ~ b1 q这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: " z5 ^# I5 I+ [
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
" ~' D( n) M3 B5 w/ onew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
% q; W- F& O3 z+ {: ?* t( ~) Q% c第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
7 Z5 k: E& a8 Q' A" X
* r4 F6 H7 Q' \. \) _CreateToolbars里面就是要建的工具条和菜单的主要内容:
7 _5 K e5 M7 h, t G" A6 `; k4 I2 d- i
3 [2 n/ ~0 o5 s0 E2 c0 O3 J
//设置工具条
' T: Q0 K, h) R S7 Z# @ NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);0 ]; e1 K2 k9 T3 h( ~0 @
AddToolbarView(pPartBenchTlb,1,Right);! G- W/ j! X! a1 J! m1 \
NewAccess(CATCmdStarter,pPointCmd,PointCmd);0 c4 l# |' {1 y, I- J, b
SetAccessCommand(pPointCmd,"Create Point");" `3 u# B! \3 X! \$ U. }
SetAccessChild(pPartBenchTlb,pPointCmd);
8 b( i7 w/ x0 q: { NewAccess(CATCmdStarter,pLineCmd,LineCmd);
/ ^' P8 B2 @5 t" w SetAccessCommand(pLineCmd,"Create Line");( g a/ R& z, p4 C" N
SetAccessNext(pPointCmd,pLineCmd); 5 o7 ~* E! X* M+ l, r
2 z2 Y# k! ]% ?: @/ F8 e5 V# e
//设置菜单
8 E+ Y, c- K* z$ ^) X6 Y$ Q/ g: Y NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
4 l& a- J1 p6 d1 i0 P$ _6 D6 @ NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
7 ~& G! X+ [0 N8 r M NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
, P3 \# H! t9 a k) `% } SetAccessCommand(pPointCmdm,"Create Point"); Q# K' B+ V# |4 q1 j2 q! _
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);* a8 |( |, l* _% F
SetAccessCommand(pLineCmdm,"Create Line");
, c; J d' s- E6 @9 P+ B. e) |- ~ & x& N* k4 }6 H6 d: z
SetAccessChild(pPartBenchMun,pPartBenchSmu);! ?0 r% [, Y' D5 T3 P
SetAccessChild(pPartBenchSmu,pPointCmdm);% f- s0 m# K6 X
SetAccessNext(pPointCmdm,pLineCmdm);
) G2 Z1 q; F* e$ o, _7 W SetAddinMenu(pPartBenchTlb,pPartBenchMun);
: j2 x: A$ @& z" ^工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
( F3 t0 R2 e! X+ Y( N8 c$ W5 OSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
7 U& N9 q9 Y2 VSetWorkshopMenu()、SetAddinMenu()等
2 p& C% N' u0 K) D ?) p: t3 oNewAccess 的函数定义如下: * P/ Q+ ]2 k- p. f( r1 `7 J! N
Macro NewAccess (className,variableName,objectName)
' l5 n+ w$ _& C& y3 e其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
" e$ }( J& O! w% Q) ^5 rCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表' s/ n) m# ?7 x) A
示分隔符)
0 ^$ ^2 C' G/ \& }
$ J7 ?2 f4 Y2 ~5 I2 zNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
5 {0 f; `& P! |; |( ^# u4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"5 \( k8 ]2 l/ e+ ~# Z" Y, F
在.cpp中加入:#include "CATCmdContainer.h"
) k9 r: O9 O1 w6 [8 J#include "CATCreateWorkshop.h"7 w0 z j5 d9 c$ s) i
在.mk文件中加入:WIZARD_LINK_MODULES = \
( R d+ z/ _/ U, s; XJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \- Y' f$ C! F/ N, F' I
CATApplicationFrame+ j# h$ l; r/ s4 ]) y) r
# END WIZARD EDITION ZONE
4 ?6 K, o( Q1 q, x$ t" T- y1 `8 ]LINK_WITH = $(WIZARD_LINK_MODULES) \3 a) i9 }& D7 P2 J2 S, R, z
CATApplicationFrame # L% O7 l4 L5 I7 L
在Identitycard.h中加入:
1 w1 m) j r, PAddPrereqComponent("ConstraintModelerUI",Protected);' s7 `& V, D" ], b9 a. p% u& g6 J0 {
注意:每次换行时,都要加一斜线用来继续执行下面的module.; ~$ l3 j9 e. }+ h9 Z
, C* G( u' O V6 e" o5 u% J
7 \6 a" w) X% Q7 |: {重新进入编译后,可以看到结果如下:
6 V4 B- I7 K0 ^- R0 S( p9 E7 ]; s0 `) v4 M# K& \
) @( l7 l& k; N( M, m5 J4 s+ h1 D
3 q$ W* u* ]* }" ?( X, `! J* j+ I* S: d/ g+ p( F K% H6 J
6 C" Z8 A' P; _* f
$ B( U, b, L/ P. D Z ^3 ~' ]% k6 @# I
|
|