|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条( o$ [9 U* B7 i- v) x; |2 d7 d
3 ]" b& R2 a1 a8 V5 d5 N所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。, A2 ? f. |# y
我们来在PartDesign中插入一个工具条。8 K3 X4 ^* J8 O
1、新建一个module命名为myPartAddin,并将它设为active。' c7 ~+ U/ w) D+ Q8 [
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
* \2 M/ {' D$ Z( g W6 b* H: j输入addin的名字,点击add再点击浏览选择要执行的接口,如图:# N7 f6 c$ p; F& h; k
$ l2 F' m( \! a# c1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
% a; R5 m7 L5 J& q! X% FCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前9 w% k5 Y$ s- R2 R5 T! Y
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
$ }$ g, q- H' a$ [& H( }台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
% v5 g1 a( k) L, t. g, s下都显示当前工具条。 Y% m* M M2 ~3 z
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
( r( `/ L u; y" V* W" c9 b( | myAddin CATIPrtWksAddin libmyModule
1 y3 a& _4 u9 K; y( d但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。8 y- q$ y: N% p/ E: ]
在NewAddin类中添加两个Public函数声明:/ f$ H! W' K4 K, e6 C3 P1 R
void CreateCommands();. K. i; v' o& H' H: J( @- s
CATCmdContainer * CreateToolbars();5 ~7 b- k9 J, s4 v' q; `& U6 s9 ?
在NewAddin.cpp中添加宏定义:: U+ [# u! U/ @
#include "CATCommandHeader.h" & G8 B/ u Y9 n) s
MacDeclareHeader(PartCmdHeader);5 |$ \3 z, w. L* i7 Q& x
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: , \8 b( \$ g; u0 Z9 w
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);, n. t4 q4 {& S
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);/ I1 z( ?! i4 _: e* n( G! x+ J
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。, w/ a# x* |, @1 D9 ]
" M d! B: B/ `9 t ?; e+ m
CreateToolbars里面就是要建的工具条和菜单的主要内容:
7 ~% Q9 q& [0 e0 [$ T( c- W4 s, v# M" i
j" A6 z) w. a //设置工具条
( D. T; E. r) Y8 B NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
9 N" N# C) T7 j AddToolbarView(pPartBenchTlb,1,Right);4 i. K2 B& l. b! T& |
NewAccess(CATCmdStarter,pPointCmd,PointCmd);% k1 m8 E; E0 v. o
SetAccessCommand(pPointCmd,"Create Point");
% f) D7 r3 F! h2 `* I# a, j SetAccessChild(pPartBenchTlb,pPointCmd);
" e1 ]( O* f2 i5 {0 q. @ @! J( v NewAccess(CATCmdStarter,pLineCmd,LineCmd);
! K3 w9 h% o5 T+ R, H5 x SetAccessCommand(pLineCmd,"Create Line");
& T/ G7 M2 t+ g' J; v SetAccessNext(pPointCmd,pLineCmd);
9 y# m* ~7 `5 p, g/ H
* `8 U$ P' t% R1 v# I5 |0 c7 Z //设置菜单. |0 M; z6 j$ z6 l. A% u& J
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);% h7 J" V& b* e' h& F
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);; y2 P& L/ V7 `1 y
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
/ f2 r- {% j; m i1 d; g, A SetAccessCommand(pPointCmdm,"Create Point");
4 `* c7 S6 L7 n+ l( T; J7 g3 l NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);5 e$ t9 T* S$ ]& E
SetAccessCommand(pLineCmdm,"Create Line");
* O& @1 {8 s( V9 \
% N$ }/ D0 d& C( U3 G N# Q J. a1 r SetAccessChild(pPartBenchMun,pPartBenchSmu);
~8 M8 e5 \ E+ L SetAccessChild(pPartBenchSmu,pPointCmdm);
! m' _4 t/ A2 D SetAccessNext(pPointCmdm,pLineCmdm); 8 C; h; T, a% \( Z: \7 W
SetAddinMenu(pPartBenchTlb,pPartBenchMun);
; v8 ^9 A2 o. B! n2 a工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、' N, ^0 z4 v1 H, l$ {$ f( w* ]; y5 d
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
( R. Y7 y" ^+ e ^- I" L6 DSetWorkshopMenu()、SetAddinMenu()等& e) @$ ^, @/ g
NewAccess 的函数定义如下: : x% A& n) s! _; L5 I% c
Macro NewAccess (className,variableName,objectName) ' U) i* S1 i. A' ^6 M2 k( x. J
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、. M2 @% y& t9 `/ }) Q$ c
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表; C" C0 D& O: @6 S, p G
示分隔符)
) j* U; s1 J- h f7 [# Z% R% X% M# N+ H7 T* _
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
" F6 j% U }+ {/ r+ Z- |+ k9 w1 T4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"% z6 a6 K9 C: Y
在.cpp中加入:#include "CATCmdContainer.h"
8 d3 v$ e, K' M" W0 s' i8 L, U#include "CATCreateWorkshop.h" q$ ?7 K( k0 n! C4 f) n. X4 \" a
在.mk文件中加入:WIZARD_LINK_MODULES = \. J5 v' O" G( Y X( m8 l
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \- M. I$ z* a/ Q% _, ^$ I! g
CATApplicationFrame# v% d6 V+ x5 Z/ G% G. z
# END WIZARD EDITION ZONE 0 j7 }$ B* \8 }$ q. A" M) ^
LINK_WITH = $(WIZARD_LINK_MODULES) \
" d, q$ l& p5 N0 D" w CATApplicationFrame
- G- P5 Z. a, u* J' H. H在Identitycard.h中加入:/ |8 G. Z; r+ u, S
AddPrereqComponent("ConstraintModelerUI",Protected);- W: s& P+ z! C
注意:每次换行时,都要加一斜线用来继续执行下面的module./ \& A8 q- W' x' j
' [5 Q. Y7 r! L# X. B- e/ ]0 }6 @4 W9 A6 }
重新进入编译后,可以看到结果如下:
1 L( ?+ L) R) C# o! P' Z
B5 h8 _$ E. e$ ?8 M
0 A. ^, w1 }" O; p5 S8 ~
; q$ Q1 V' \! D3 t2 G% I
/ B) w+ f: R1 {! E6 z ]- \$ j9 ~) E: ~1 Q0 h; N( G7 X; w9 I, c
$ ^3 R8 R P* L! C& p: y
, N: ` G/ B. `5 D5 o- c5 M |
|