|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
. t% L9 v8 f0 \+ F- V: t5 F: s
! \/ I6 h9 U; S" U6 b% u/ [所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
8 ^; m/ v8 I1 V) I我们来在PartDesign中插入一个工具条。
4 i7 _2 ~: _# o* f1 I* l/ f+ m 1、新建一个module命名为myPartAddin,并将它设为active。" g. r0 y; T: Q+ g8 b/ a
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
r% {' b% M v, g$ ^% F输入addin的名字,点击add再点击浏览选择要执行的接口,如图:9 |5 x' Q0 ?8 c1 r9 G8 ^
( X4 `+ D2 x0 B1 E
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,' q! C* ~2 Z$ a! b E
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
2 a% G0 a( G+ K+ [工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
. Z/ @& y- R# \( d8 z7 c台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
. ?0 z! q" J/ u6 B/ R4 u/ J下都显示当前工具条。
C+ Q! h# N& I% r( e9 ~: h# F' j: r3 L 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:' ]' A! y: m% P" |7 E; ]
myAddin CATIPrtWksAddin libmyModule
, J3 b& x7 U8 N! G5 h( c$ k但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。- ^5 H9 x1 E5 i$ U! ^" G- V
在NewAddin类中添加两个Public函数声明:
4 [. T$ Y) |! |$ ^: Yvoid CreateCommands();' O% a2 p$ L7 K0 ]
CATCmdContainer * CreateToolbars();- @: r7 i5 b6 ]1 U# M' t1 x
在NewAddin.cpp中添加宏定义:
1 ^% p7 p: z! Z" ?#include "CATCommandHeader.h"
) ]1 K3 r9 H7 a+ o# o HMacDeclareHeader(PartCmdHeader);
' u9 J/ q/ `# w6 ?这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: / E. d) N! R+ _' ^, P
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);# ~" e- U. b3 z. W1 j
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);7 u) P( V+ i1 u7 w0 `
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
4 h5 ~2 E1 h$ C. a2 \2 ]1 s
t% L$ e j) h+ h& SCreateToolbars里面就是要建的工具条和菜单的主要内容:, Q. n5 Q4 y v/ ~( `1 S. x
6 P8 r1 P- f0 K7 X6 A4 Z. u+ O' T A
7 x# S3 p# \5 V% j //设置工具条! A" G9 S5 u* _+ V6 W
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
5 `1 ?. M5 d0 T/ T AddToolbarView(pPartBenchTlb,1,Right);
6 x$ w% t. ^# w+ w+ F* S+ Q NewAccess(CATCmdStarter,pPointCmd,PointCmd);& O5 X. i) J }6 Z3 l: S
SetAccessCommand(pPointCmd,"Create Point");
( l. f! G: n0 r( K- R" [) \ SetAccessChild(pPartBenchTlb,pPointCmd);
" S+ ?5 S; y% k4 s7 [5 h o NewAccess(CATCmdStarter,pLineCmd,LineCmd);
( n# i8 J0 B& M7 V SetAccessCommand(pLineCmd,"Create Line");
* Z' H' f& \0 z& [% @ SetAccessNext(pPointCmd,pLineCmd); : u$ U, F0 c# Y! w- ^
, `9 a) c0 ~- |7 S //设置菜单3 C; ^. z' @8 m5 V0 S% O; J9 F
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
$ G& i. v; ?6 H' k NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
- I/ J$ |! Y: I9 Y: }" G$ O NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);7 G; H2 n) S }, V1 V7 M' P
SetAccessCommand(pPointCmdm,"Create Point");
9 b5 R; u' [6 d# [, F$ ~ \$ }% s NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
9 H/ d3 M7 d3 ?/ ^ H4 F* g& M# _( C SetAccessCommand(pLineCmdm,"Create Line");
/ _( s) W9 ^4 C
; ^; i3 I" d$ m" E- L2 U S SetAccessChild(pPartBenchMun,pPartBenchSmu);
+ r y9 y/ F5 P1 g* v; _ SetAccessChild(pPartBenchSmu,pPointCmdm);8 a# q$ I9 z5 e: @7 Z' u$ n
SetAccessNext(pPointCmdm,pLineCmdm);
7 C m6 k+ |9 H* s% f8 z } SetAddinMenu(pPartBenchTlb,pPartBenchMun);
: w) `: E0 |; L, C* P' ^工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
) q3 p& d X/ U! E+ lSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
* S3 D5 e8 T2 {! E7 ISetWorkshopMenu()、SetAddinMenu()等
" ?0 z& m5 N) H+ Z6 `1 N3 ONewAccess 的函数定义如下:
3 h7 e9 X) k- [4 mMacro NewAccess (className,variableName,objectName) 4 F$ u- T c/ m& v% o" L! k+ N0 L
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、+ K7 _& E4 v, F7 ?& {/ F# H' S
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
5 ^9 d! H3 k* ]' x3 W+ g0 T3 q) q示分隔符)
0 q4 l+ v; d5 \/ S: r t% C! V
1 D2 G% f9 r/ L. F" bNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
/ a! H" |9 ?# f' }8 \1 m4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
+ H# Z7 x9 q7 Q8 g在.cpp中加入:#include "CATCmdContainer.h". f: b9 V' p+ ]4 R
#include "CATCreateWorkshop.h"
! v Z( d3 Q) t9 P在.mk文件中加入:WIZARD_LINK_MODULES = \* E: o, l- z9 \4 M) w
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
+ B; U1 a0 G+ ]& _7 Q qCATApplicationFrame
. d' q+ D! R1 ~# END WIZARD EDITION ZONE
1 S' S/ p5 @. J$ o) y4 cLINK_WITH = $(WIZARD_LINK_MODULES) \
& U8 \8 M& r0 N) n( x CATApplicationFrame + T7 w7 R9 ?0 E$ ~) c* O1 |1 r2 [7 Q
在Identitycard.h中加入:
2 Z+ ?8 p+ F: P( y8 J4 P7 ZAddPrereqComponent("ConstraintModelerUI",Protected);# ?+ J/ t6 M( n2 y: t- H; v
注意:每次换行时,都要加一斜线用来继续执行下面的module.
: a& {# G( u% c" J ]
6 W- v: o2 p9 q- U
/ _# b$ S5 l1 |5 M重新进入编译后,可以看到结果如下:1 t5 u$ E8 ?6 d. T6 { O9 I
& x0 S) U! @* I3 V2 C) _' @
! v+ @& J; z- n% P/ `- @
% j5 Y8 y' O; o o5 @* p7 i/ k" D# a! S0 F7 `
$ w9 L4 o& |! `% N- e* U* h
) p M$ I$ F) A5 ]5 g
B+ Z1 Z2 S' e/ j |
|