|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条0 F3 e& I3 q, M( g6 W, W9 J. X4 l
- @: H* i$ U3 R. r
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。) l% o, Q2 C# F* A
我们来在PartDesign中插入一个工具条。
1 @3 i1 M$ f! E S- e 1、新建一个module命名为myPartAddin,并将它设为active。, B2 i3 m3 b9 c# \ X' n0 U/ B
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框: I/ H q6 V1 d4 @
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
9 l% ?' F% a- u+ I, G4 {
% C7 t f1 M9 \
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,0 S; { d9 P% W; A' v( M' P" F
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
, E+ a5 B% r: l3 f2 [; k工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作( ]0 k) Z; W$ D% E% D& U0 u! F
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
' }8 Y9 T) N2 N6 N& N下都显示当前工具条。
% S/ F5 D9 E0 S6 d7 e9 b 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
9 m: m" |3 N0 b/ p2 x7 F9 @, S* d! T1 M myAddin CATIPrtWksAddin libmyModule, Y1 H; y+ h* d0 R! x9 \ _
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
$ t- b, y2 u1 @* p% \8 `) m在NewAddin类中添加两个Public函数声明:
# h) a+ h$ ?' P$ i' e0 [% U% @void CreateCommands();
, O) Y2 L1 [. X0 {- v! |* O5 h- Y/ W4 OCATCmdContainer * CreateToolbars();
5 h- e% h# V7 R1 p: y在NewAddin.cpp中添加宏定义:7 n6 G# {& o: q5 e9 B* w
#include "CATCommandHeader.h"
+ y1 N: @, ?8 b" X" B" q9 wMacDeclareHeader(PartCmdHeader);
% t4 Q0 f7 {- l这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: ! I# j$ c7 E( m
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
; [$ @1 k' Q8 V- U" Vnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
4 e: x0 `& o# m5 |) X! j第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
5 x6 y8 I0 @( ?& L# h" h* L, }! `4 `
CreateToolbars里面就是要建的工具条和菜单的主要内容:
: \/ E6 t* \3 Z: g$ D( g% l( N: ]+ N
+ ~3 T' p# P) f, z2 U' Z/ _9 t/ Q7 a( X% f+ j1 p/ m( y% M; E
//设置工具条
+ g2 }* a/ g3 T. x7 J NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);2 b' j, q/ Z, q) {+ Y* x& P
AddToolbarView(pPartBenchTlb,1,Right);. G9 {& B1 G7 X& V
NewAccess(CATCmdStarter,pPointCmd,PointCmd);' u( a8 C& R7 N/ V
SetAccessCommand(pPointCmd,"Create Point");8 K1 v' G% B. J$ K8 F9 V
SetAccessChild(pPartBenchTlb,pPointCmd);
: P# {4 i( W0 O+ S A" M' y! } NewAccess(CATCmdStarter,pLineCmd,LineCmd);
9 k! ]/ b; k* B0 T SetAccessCommand(pLineCmd,"Create Line");
- t. S3 k8 ?& B6 e) X9 w% y+ t- x SetAccessNext(pPointCmd,pLineCmd);
# ]9 ], a$ G+ a0 L 8 a) S* `% Y& k* q# R; j
//设置菜单3 `3 K( W& [' k) A% ]; e) s
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
0 W3 W/ i r: h" P I# ~ NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
9 ^# q1 x8 N5 V: o+ k8 Z' P3 S NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
. v u7 A' X t' h. |, I$ L SetAccessCommand(pPointCmdm,"Create Point");
& b/ @8 V9 G! `* q NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);) N' F4 t! @, r0 J! Z1 f1 J
SetAccessCommand(pLineCmdm,"Create Line");
4 f* e- O, q& a, o* Z0 { 4 T$ Z8 ?2 {% f+ Z( v# P
SetAccessChild(pPartBenchMun,pPartBenchSmu);
& |! ~, \6 _6 t9 Y% m# N SetAccessChild(pPartBenchSmu,pPointCmdm);5 w4 p6 a8 z6 ]
SetAccessNext(pPointCmdm,pLineCmdm); : [ C( L4 L: v. C, `3 f; B
SetAddinMenu(pPartBenchTlb,pPartBenchMun);
+ W3 ^8 n0 b% ^2 [& o工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
( t1 m1 w5 Z* I- q: WSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
% r1 W4 O c) @- [& i& ]/ D4 rSetWorkshopMenu()、SetAddinMenu()等# r1 D$ a; O r8 K3 d
NewAccess 的函数定义如下: + z, D0 A- ~# l; f% ]
Macro NewAccess (className,variableName,objectName) 2 X+ p7 x d+ `# ~0 \. n, m& [
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、/ t6 \. G: u; [5 ^
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
, f, l; S7 j% t7 t( `' h' _6 C4 T示分隔符)
' @- e- ^3 G- m( K% O, V3 L4 q) S4 b) }9 S4 A: ~ @
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。0 K5 T# }- @" V. q* A4 j
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"* O: @7 l6 J) d) E
在.cpp中加入:#include "CATCmdContainer.h"0 A1 X4 [9 _: z M l* }7 h. B
#include "CATCreateWorkshop.h"
/ t( o2 F! p8 R在.mk文件中加入:WIZARD_LINK_MODULES = \" |0 p8 {+ W0 x7 M6 G
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \4 C/ Y: R8 y6 F
CATApplicationFrame
; p7 \" {" O1 p% g7 b8 R2 n# END WIZARD EDITION ZONE 0 J! l# P" Z6 q
LINK_WITH = $(WIZARD_LINK_MODULES) \8 _) ~* J5 S9 L1 z
CATApplicationFrame
, N/ o' w5 m; }3 |$ D. J在Identitycard.h中加入:8 F! m/ _% i5 a9 O
AddPrereqComponent("ConstraintModelerUI",Protected);, H/ g' N6 Y# P
注意:每次换行时,都要加一斜线用来继续执行下面的module.
: o5 m$ j5 a( s3 r- |0 W5 J
. k+ P4 C$ b( `7 R% y
8 [- P9 ?' D8 m- D重新进入编译后,可以看到结果如下:% k8 }; v5 R& L" r% D
8 v7 B5 c8 _7 W, T6 B
" i; r: z3 q9 N; H( Y9 L6 o$ Q
( l& `4 B1 Z6 g" E
7 v" T c. d T: @/ Y
~9 l- E$ n4 ?) O9 V. E
0 S, s* h2 S9 P* m
6 Z7 T% V7 G$ d1 ]/ ^$ @. r |
|