|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
% ^$ `3 b9 O$ m: v6 g( L* X+ {+ {( g) O# h5 b
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。& X9 p3 Z, }4 L8 R
我们来在PartDesign中插入一个工具条。: C+ ^, L6 n" v5 a4 R
1、新建一个module命名为myPartAddin,并将它设为active。; L% @+ t7 s- z/ r& \
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
9 j& X7 ^ T( k0 e( D o输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
( X6 u8 u9 d3 H* F0 k" D! c) ?- X
[7 X, O) t. T& H! R2 x
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,, N6 i" S5 j) l5 ?8 [! K# Y
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前0 H8 J3 ?! {/ {' S6 g
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
6 w3 }( U+ k: w0 E6 V- P+ Q) {5 E台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench3 E( f- J0 V" ^; h
下都显示当前工具条。 $ U% A/ J! _- g- @
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
* p( e! ^: C3 j# O3 J myAddin CATIPrtWksAddin libmyModule8 B2 w+ f' k: \" `! Z5 L
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。5 E, V/ F( Y2 X
在NewAddin类中添加两个Public函数声明:
3 i" h5 V9 j6 I B+ z9 r5 Zvoid CreateCommands();. P9 V3 H2 @0 H2 i1 T& r
CATCmdContainer * CreateToolbars();
& X: @6 ^3 q+ t! ?在NewAddin.cpp中添加宏定义:8 Z1 g1 s7 {9 x; }
#include "CATCommandHeader.h"
, X1 v3 n: r; C F6 U2 L- q8 g4 c8 dMacDeclareHeader(PartCmdHeader);0 k8 O. h5 O% D) V# J
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: + u, V7 k5 Q( K7 A+ l7 K6 q
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
. _$ ~+ s% J, V; Inew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);# l9 U( Q1 b% h/ ^
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。4 o. I9 s7 S. @
4 R% ~2 p2 i; p& w c' uCreateToolbars里面就是要建的工具条和菜单的主要内容:
8 Y3 E Z' H# y/ @& g! K0 v" D+ D6 M* _! @. s
* h& f& A! q6 d8 p
//设置工具条
- O- W" n9 c6 f1 f5 \7 V NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
+ R, G5 L5 b7 l+ y AddToolbarView(pPartBenchTlb,1,Right);8 q b, }. a, Q* _; Q5 I; p
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
" \8 K; C" |: Z" N+ t SetAccessCommand(pPointCmd,"Create Point");! [( ?( S V0 \3 u" R* n3 W
SetAccessChild(pPartBenchTlb,pPointCmd);% O) T) U3 g8 W# ~
NewAccess(CATCmdStarter,pLineCmd,LineCmd);1 z, f% P$ g0 B5 U
SetAccessCommand(pLineCmd,"Create Line");/ C* H! y! f9 r6 Q/ g
SetAccessNext(pPointCmd,pLineCmd); 5 r, |- T' c9 E( F6 K5 T
; V. @6 e) L" @8 H0 J //设置菜单
: ?) `5 n7 r( L' R; ]$ F- J NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);; Q: n0 c& a0 H L6 j
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
# p( ^5 J2 }2 Y. ] @3 F( s NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);# { ]& Q0 r7 P
SetAccessCommand(pPointCmdm,"Create Point");
" q, M0 u- N# X: A5 e0 Y0 W NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
$ S1 h! d) D7 K" b SetAccessCommand(pLineCmdm,"Create Line");7 g4 a9 f- |6 w) b0 l" a/ ~0 W" B
- ?* o- r. g2 A7 n4 I* f
SetAccessChild(pPartBenchMun,pPartBenchSmu);
/ W' G3 K C% k: E8 o$ D SetAccessChild(pPartBenchSmu,pPointCmdm);: T5 \) {4 R# y C# q! N
SetAccessNext(pPointCmdm,pLineCmdm);
) W# m" j$ H5 L/ q3 Q6 @1 a; g SetAddinMenu(pPartBenchTlb,pPartBenchMun);
' o7 `# c4 V. A$ ?工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
9 M# z5 s* F4 e, O) HSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、9 r# Y4 ]; C/ y% F
SetWorkshopMenu()、SetAddinMenu()等- i0 q# i% N) \5 H
NewAccess 的函数定义如下: 8 d4 m, d4 C* y6 M* r2 M
Macro NewAccess (className,variableName,objectName)
. c$ U! H+ j p I* V9 D其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、" {* Z2 M+ p" N* l6 t
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表& x- p6 ? a6 h: G4 g3 \
示分隔符)
! Z2 L! Z$ p% X* ^0 I+ O+ O' {2 `1 `4 T$ q1 j' ?
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。1 ^) k+ P7 Y4 l
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
7 O9 F9 _6 T1 b5 s; o5 R7 y, t在.cpp中加入:#include "CATCmdContainer.h"
! L/ T- b7 M1 V+ p# N. P#include "CATCreateWorkshop.h"
0 r) r( P: a% L8 P在.mk文件中加入:WIZARD_LINK_MODULES = \
; P2 K0 v- s# O& i# |+ ^! _8 \JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
( b! j8 H2 M# [$ I( T ^CATApplicationFrame/ N: o! f4 E/ W9 R9 A. d3 t6 B* C7 X
# END WIZARD EDITION ZONE / J8 h S$ J5 y" a# T* n
LINK_WITH = $(WIZARD_LINK_MODULES) \4 A, L! O$ I W( ?
CATApplicationFrame & S+ u$ ?9 C4 k- G
在Identitycard.h中加入:" Q2 b) ^7 s# F: @
AddPrereqComponent("ConstraintModelerUI",Protected);5 d6 n% z3 z' n f/ W- p' ] k
注意:每次换行时,都要加一斜线用来继续执行下面的module.
; {: V5 C+ |7 `0 J* O/ S, I; e8 u1 S4 G
' x: g2 u1 Q$ l- v. W( o/ d. P
重新进入编译后,可以看到结果如下:+ m* J& j3 L' t# G! }: x' K
2 ]) W: i" |; q5 f
2 {1 N/ E. z2 J& y; j
: O2 a: F/ x. @/ _, L2 U7 I1 ]. I
" d; Z( p" o3 e( {0 Z; p( A
% T2 K9 g3 T( x( J- |2 Y+ w7 [) S* E& [5 W! s3 Z1 K& X" ^8 H$ ?- n2 }
" E3 g( J# b3 K: p |
|