|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
# J+ _2 ?1 @: ~/ G; j4 h
; _8 {1 }3 c/ F6 b T所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
" W* z6 f5 a( q( P; Z* [ X/ l我们来在PartDesign中插入一个工具条。7 i$ {# Z5 e& f( B: n
1、新建一个module命名为myPartAddin,并将它设为active。" {2 A, {; A$ T! i$ i
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
* @, E: Z* U# }4 s输入addin的名字,点击add再点击浏览选择要执行的接口,如图:( b6 i. @6 p+ F, m# p: j+ n8 r1 X- |
. Q+ ?1 [! V0 T3 I5 R
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
) v `# [' P, S8 bCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
, F5 p* @% q8 b* V4 U6 l工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作; j$ W. I) o; Z- s% V. G/ [' Y
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
; M$ H \3 U# T: `6 o7 W下都显示当前工具条。 ' G+ r* i* n7 g) T
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
* S- \6 v; o7 F( }+ z myAddin CATIPrtWksAddin libmyModule6 _$ Y' N# o7 U
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。: ]: P/ M7 Y' ?" K: x5 I
在NewAddin类中添加两个Public函数声明:
3 B- r* n3 ~0 a1 m" Ivoid CreateCommands();
1 I8 D2 C" }# w( p% @* J: lCATCmdContainer * CreateToolbars();2 B7 e* v; k8 t6 B4 a6 \8 w) ]
在NewAddin.cpp中添加宏定义:( ~# e" ^3 L0 c
#include "CATCommandHeader.h"
* E; t' M9 ] Y5 `MacDeclareHeader(PartCmdHeader);0 U! i4 D/ {/ k- T8 n- Q
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: % ?7 B% K) k m3 L8 ]
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);) |( A6 i) O6 r9 _. N
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);. a# M! {+ e& F! H7 j; s4 b& y
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。: \4 V/ C, Z( ^: g
! h# T; p* }' R4 i+ B- [
CreateToolbars里面就是要建的工具条和菜单的主要内容:3 l& l9 X# Z/ D& ^0 r* @
& a- s2 a1 c; E# C) \$ E$ l( v; J0 C( |$ a- ?9 o ^
//设置工具条5 f2 B" b6 D0 `& ^/ \( r
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);/ n, c+ U0 I" }6 ~; O& H( u
AddToolbarView(pPartBenchTlb,1,Right);" m# A6 o" N, f8 e8 s
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
' h: R% W& f$ f, N7 @# q3 @ SetAccessCommand(pPointCmd,"Create Point");2 @3 o+ Q. {: @/ c0 R8 n
SetAccessChild(pPartBenchTlb,pPointCmd);
$ Q% \& r& F8 g9 q6 @ NewAccess(CATCmdStarter,pLineCmd,LineCmd);0 K+ p& k, [1 x% `
SetAccessCommand(pLineCmd,"Create Line");
2 B0 k c/ n5 e% C SetAccessNext(pPointCmd,pLineCmd); $ _& J, G, {: `) _& y
- T! B5 n1 E2 X% d
//设置菜单
4 a8 @. ]1 L5 s( r NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
$ t% ?9 I2 Y, C3 c! e( R Q NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);1 I5 ?- R, D) O- m$ a' z
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);9 s9 O% {0 K/ x
SetAccessCommand(pPointCmdm,"Create Point");
# M+ z/ V/ z" J, r4 N; k( z NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);. v, A( G0 b1 ^4 w
SetAccessCommand(pLineCmdm,"Create Line");$ j+ I4 [# O/ o& c: x! B4 M8 b
+ f. D9 Y7 }6 g, d* V. F- H
SetAccessChild(pPartBenchMun,pPartBenchSmu);5 g0 h% W+ j6 B; x4 ~, j
SetAccessChild(pPartBenchSmu,pPointCmdm);; q. V6 r" u5 Z0 q7 I8 `: S) U( S
SetAccessNext(pPointCmdm,pLineCmdm); 6 o% f e+ ]2 j
SetAddinMenu(pPartBenchTlb,pPartBenchMun);* r/ ?4 m; j7 ~% v
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
3 W4 M( B$ I9 z* I% LSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、) F9 |" L" E% g* `& I6 t
SetWorkshopMenu()、SetAddinMenu()等
* D: C( H% r$ CNewAccess 的函数定义如下: 5 }7 ^* l) W5 c i" r; n' M
Macro NewAccess (className,variableName,objectName) 7 w4 d, I$ I' [
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、7 [3 g. {$ @! U3 R' G
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
! ~1 l# g0 `. A, x+ M& ]示分隔符) 6 w! d* H; [6 }# B8 r$ z
4 C# b, T* w( k) W0 C! Q- {
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
! ^: _, G- F' w) ?0 u- Z4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
; f0 r" L @: z/ J) o5 i在.cpp中加入:#include "CATCmdContainer.h"
9 d3 X- {0 s. N4 ^, D+ R; x#include "CATCreateWorkshop.h") `: N, v }, Y; _
在.mk文件中加入:WIZARD_LINK_MODULES = \ @8 T+ Q' ^# N, ?
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
, }, R+ H& ~+ {6 V! ~2 K$ TCATApplicationFrame3 G( p8 m( G _( F
# END WIZARD EDITION ZONE
7 I E( C" X8 F3 [6 U' [5 [LINK_WITH = $(WIZARD_LINK_MODULES) \7 t. u3 k0 v) ^
CATApplicationFrame
3 Y4 m; P9 e4 o+ [, s在Identitycard.h中加入:& y" f% `4 \9 C% v
AddPrereqComponent("ConstraintModelerUI",Protected);
* b% W+ [5 d! ]$ ?/ D; f注意:每次换行时,都要加一斜线用来继续执行下面的module.
' v$ h! \0 |: c0 a1 |: o- Y! x) w$ M+ {3 D2 S1 F
) a. t1 R" X% z. @重新进入编译后,可以看到结果如下:
& e4 X. s& K4 M! _' U, b0 V$ k+ b C% L7 R, }' _
' ^1 s& F9 o5 [* `- j( W
. G: o% u' N0 i5 v9 M) L, z
0 d ^6 u) k7 t/ i) d2 k/ G; |' s
0 `# f) d, K$ J- H8 _" V B" p, A% u) j- G
|
|