|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
CATIA二次开发入门教程---10 添加Add in菜单和工具条9 j9 W& t/ U! j2 U. a4 N( T( W
% C8 A* l, i- K* c* `所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
/ ]) L8 p$ g% _我们来在PartDesign中插入一个工具条。
0 `( n/ [ i! |: A 1、新建一个module命名为myPartAddin,并将它设为active。6 D: t6 j! [! x. D6 `
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
- z: Q- k5 s4 {" k6 e+ }输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
1 y/ n5 f2 @5 D/ ?
2 Z# b+ l) j' M$ o1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,5 X. S, B! ^* c
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
' b/ J& S0 j" H9 f( m+ W: h工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作: q) q# e( J e8 g* }7 `- C: X: e, n
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
- v: q9 f4 e, c( p下都显示当前工具条。
6 q2 \" b* f; Y; Z+ U9 ~ 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:; Y) |& W) x5 C# t! o; Q' o! n! L
myAddin CATIPrtWksAddin libmyModule& t: [9 S/ Z2 z& V! n
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
0 c( ^! [ K/ v) B, O' M# t在NewAddin类中添加两个Public函数声明:: L4 ]. a- ~- i7 a
void CreateCommands();- N# d! m! c' I" s6 R% Z: E. Q
CATCmdContainer * CreateToolbars();
' `. |9 z; z7 X$ W. Y: g在NewAddin.cpp中添加宏定义:
0 N8 \( e' |3 m1 F#include "CATCommandHeader.h"
7 Z" v- z) [" R+ q. L) T6 PMacDeclareHeader(PartCmdHeader);
P, ~# c+ |2 n, A7 J' R这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
: v% V$ _" [, i# {- dnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);& i8 L& ~3 W2 w o
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
( ]" p4 U6 q! p% I( M6 v9 v- a第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。$ T/ ^; N( g# @# G. [
, o6 b1 V* f0 c8 O4 GCreateToolbars里面就是要建的工具条和菜单的主要内容:
7 `' r2 \/ n6 Z- [0 o) G, b
7 B. U9 |7 l2 l& I7 D0 s& }% v
+ z$ i, ^* E( P. h //设置工具条
9 _( B F; s7 z- T b" u* _ NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
6 b2 }! }3 ], l2 e3 ?. P- E2 | AddToolbarView(pPartBenchTlb,1,Right);
: R# X6 p3 s, s/ T1 q- c! D NewAccess(CATCmdStarter,pPointCmd,PointCmd);
8 O' o# u1 O0 _* R0 F9 W SetAccessCommand(pPointCmd,"Create Point");9 y! Q, t% M( f+ C4 t5 A
SetAccessChild(pPartBenchTlb,pPointCmd);4 S& ]5 O9 `2 C5 _
NewAccess(CATCmdStarter,pLineCmd,LineCmd);1 S3 S1 \" O- X. M F& c" N
SetAccessCommand(pLineCmd,"Create Line");' K( j3 I' P+ J( E
SetAccessNext(pPointCmd,pLineCmd); ( d3 p0 n% E% J/ a2 S
/ l1 C( C6 g. [ //设置菜单
6 e7 G0 x; D- q; h NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
! W0 E7 l3 ?( l4 q1 Y p! K! \ NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);- C5 ]! D, l% p! t8 d' Z
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
, a p* g6 }; j SetAccessCommand(pPointCmdm,"Create Point");8 C7 w- M; ^8 w$ f9 ? v, d; m
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);" u0 s6 E8 H) E i
SetAccessCommand(pLineCmdm,"Create Line");1 h& l$ I X( k( I7 @7 k
5 c% u; k" j4 ^: d! M3 z- {0 g
SetAccessChild(pPartBenchMun,pPartBenchSmu);) O; o! }7 Q$ x
SetAccessChild(pPartBenchSmu,pPointCmdm);
6 }3 f' r. K2 {% u, R9 N4 _, z% n SetAccessNext(pPointCmdm,pLineCmdm);
2 P9 W1 A* x4 Q8 H1 } c SetAddinMenu(pPartBenchTlb,pPartBenchMun);4 g4 k2 W% G5 t( G. t9 \) N
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
- z9 H1 G A1 G8 X; ~' ySetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、' Q! z- X. u" h
SetWorkshopMenu()、SetAddinMenu()等
2 P$ B3 Z7 e b, tNewAccess 的函数定义如下:
7 f- e6 U# c$ M4 V0 zMacro NewAccess (className,variableName,objectName)
9 X& P. x6 Y9 H* U# ?# ?/ o: w/ b; m其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
9 D- ~4 y% [3 I/ S1 GCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表+ Y1 A& \! z4 F. C m
示分隔符) ( u5 d. @: l. \0 c! T9 h
! b# J# W2 o3 Y9 J$ H$ S, F
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
$ n H# h9 D- a4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"" H- ?! z1 w9 @+ `& a# w
在.cpp中加入:#include "CATCmdContainer.h"
# H$ | h% T O2 S. L3 @#include "CATCreateWorkshop.h", I" V) h C2 c4 G1 q7 a( K
在.mk文件中加入:WIZARD_LINK_MODULES = \2 V9 v6 ]# N ]6 F7 v Y2 C5 G
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
3 @" I1 y! B- V! {; N6 ICATApplicationFrame& g( t+ W0 `: E, m& Z5 C
# END WIZARD EDITION ZONE
' D+ H \; \4 C5 J, \3 h% jLINK_WITH = $(WIZARD_LINK_MODULES) \" H3 n- Y P+ b3 T
CATApplicationFrame
7 f+ D1 B+ A" t在Identitycard.h中加入:- ?8 z0 F0 O. k0 F8 u
AddPrereqComponent("ConstraintModelerUI",Protected);$ p& K2 h2 Y0 \: Y5 ^/ a" ~
注意:每次换行时,都要加一斜线用来继续执行下面的module.
% v5 e* X3 q! A3 O! a5 _* I% }' P S
* u5 z5 F7 ^- z3 m1 d3 _8 ~. W2 B" e. x重新进入编译后,可以看到结果如下:. ?! W# c7 V0 E6 r D$ L
4 e7 E- n& o1 O6 k3 i
2 k7 f1 D/ ~$ N1 Q5 k# v
+ K/ b% k$ B$ W2 s7 ^
0 i, b- G, T1 n9 A* Z$ h# g/ @: U0 ?! U
- q! Y1 O) |+ M+ k: C
m5 }* V* }5 i' I7 q6 C \ |
|