|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
- D) v/ J( Q/ Q9 ]0 d" w; K, o) } J- K
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。# i# R/ r2 y) ]1 N o7 x- Z/ F% S
我们来在PartDesign中插入一个工具条。+ c v- q. m$ ^% b
1、新建一个module命名为myPartAddin,并将它设为active。
5 m6 i4 ^4 `9 {" K. J 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
9 W1 o% \- ~( ^5 Q/ @输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
+ S0 ^: P N0 D
! L- E* l; o" }& R7 A) }. D
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,9 n, a4 ]+ F. Q; {0 g) S6 E
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
6 y( V6 c! j1 [工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作. J3 z6 p$ C; v' \
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench8 C* ]3 h4 P0 |5 O6 J6 X
下都显示当前工具条。 1 {9 g* k8 ?! @, }' V7 Y
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
- w2 h2 j( Z( t' i6 P myAddin CATIPrtWksAddin libmyModule9 o' f+ g8 v& K, a, {# |
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
% g+ p% f( b# x) ?, ^在NewAddin类中添加两个Public函数声明:) l) f! w; w, _) p- @, n% F. S
void CreateCommands();
$ ~) I. `3 t; W: F1 ICATCmdContainer * CreateToolbars();
" Z; z& F+ p& u* ^/ u在NewAddin.cpp中添加宏定义:
5 {, F* q- g8 K6 v#include "CATCommandHeader.h" - q4 x4 V6 u0 P) w% [
MacDeclareHeader(PartCmdHeader);2 X" T# b- b/ l+ D# z& h
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
1 `8 e) f4 O/ z @- V3 y6 ]; P/ dnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);) s4 x, v& ?; r e
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
, a5 b, V' X( G( Z3 e第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
4 B$ @ s5 m; J( m' O2 x
& P. Q q( A3 i$ vCreateToolbars里面就是要建的工具条和菜单的主要内容:
. @ K* i {5 B- w, z, @* R
' S" h4 W- k6 `; r
: p& D; C; Z( n$ i( L" Y+ w //设置工具条
: d* Q4 Q" g8 B9 j @+ J. Q& ~ NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);1 l8 V" T C4 J: c6 B( l! x* i
AddToolbarView(pPartBenchTlb,1,Right);5 J1 a1 ?0 z! m* u$ B2 G7 \. W
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
+ r. b1 A- b; m5 T' r SetAccessCommand(pPointCmd,"Create Point");, L: L) ?3 D/ Y& m9 b% u* k
SetAccessChild(pPartBenchTlb,pPointCmd);! m5 S5 L; P2 q# S3 T- m& f& M( w6 p
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
5 ?) r0 b! _9 \8 K$ d& l; _+ i SetAccessCommand(pLineCmd,"Create Line");! n/ p$ B+ Q. @$ C% m
SetAccessNext(pPointCmd,pLineCmd);
* [+ \5 e; t$ M% E z ! Q, }2 Y' G1 E
//设置菜单6 U& |0 L8 E' ?' b$ j4 r, c
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun); B1 Z6 x: G, F$ p. q4 K- [
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
; i7 z9 n# Z" c/ M NewAccess(CATCmdStarter,pPointCmdm,PointCmdm); x5 J( a: z$ k% \( q# Z0 u
SetAccessCommand(pPointCmdm,"Create Point");
' f$ T9 b! M; [9 [* @1 d NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);5 l3 |& s: o* ]" R+ v I
SetAccessCommand(pLineCmdm,"Create Line");
0 g+ H3 z5 V7 h$ h0 q k
/ g5 q0 K5 r& Z/ m9 ` SetAccessChild(pPartBenchMun,pPartBenchSmu);
( f5 o# z2 _: v! `8 _ SetAccessChild(pPartBenchSmu,pPointCmdm);" x2 K" U+ G6 `$ M% O
SetAccessNext(pPointCmdm,pLineCmdm); . s2 d: ^* W. L+ ]1 a- _
SetAddinMenu(pPartBenchTlb,pPartBenchMun);6 g$ F: a& }1 K1 h
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、1 Q+ h6 @$ I$ T; I z
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
& v) w! h1 k2 `2 ^% E4 Y0 k1 s- {' rSetWorkshopMenu()、SetAddinMenu()等6 `9 ?) G5 u. c0 `" e* G" k
NewAccess 的函数定义如下: ' D9 Z5 T# b* c' a
Macro NewAccess (className,variableName,objectName)
" Q6 R1 P0 ^: k. d" t其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、" d/ ^" j: F; O1 z7 P
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表1 q1 W( Q( z+ ]* }
示分隔符)
. ?# K1 T- O ?8 k; G( X2 l S; U* O4 G1 {' U1 c3 K2 p( P; \; _
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
1 ^$ x# v+ ?5 t. c4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"2 q; |; i1 a* x6 |3 Q$ B2 ~
在.cpp中加入:#include "CATCmdContainer.h"5 z8 Q5 E" v2 F8 s1 M
#include "CATCreateWorkshop.h"
2 g) r8 c+ |0 E在.mk文件中加入:WIZARD_LINK_MODULES = \
3 }1 H- n9 w( a# HJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
) f5 }5 _5 ^/ u$ YCATApplicationFrame/ @! r* h9 g: |. o
# END WIZARD EDITION ZONE
. i; N0 p# J9 w3 n- GLINK_WITH = $(WIZARD_LINK_MODULES) \6 L% d0 a' J7 K% h/ B/ Q& \$ e
CATApplicationFrame
" I' n: p# d1 y, q, q! u9 k在Identitycard.h中加入:7 P* v7 l+ R1 c1 e
AddPrereqComponent("ConstraintModelerUI",Protected);! T C# ~% G- o: E& V8 A
注意:每次换行时,都要加一斜线用来继续执行下面的module.
% l% E P- i, r; f+ K" |
7 Y5 D" a6 a( m% Q9 s/ [& a+ Q. }$ ?8 {4 ~+ l& [, D# m% f
重新进入编译后,可以看到结果如下:
9 l2 X$ i& O- S
) I8 f7 A1 e' Q) B+ n
1 p2 Z F- z5 R4 P" ^: v* Z( T) F+ h7 D& r7 u% s! X: L; ]
' {) x( v" l0 _, H. N5 j
! Q% ^: o' R8 `# c% {, I0 b
u# u, }5 r1 G! _* r' ~1 _* Y
`" e; }* V* t4 b! ?' L, M |
|