|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
CATIA二次开发入门教程---10 添加Add in菜单和工具条
" W# ]7 t, E7 }0 o, l9 b. t5 z4 n* W% ?
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。9 _8 V# G9 ?- }" @4 S) |0 e9 i7 o
我们来在PartDesign中插入一个工具条。( G9 Y) x* _& h- O4 ?
1、新建一个module命名为myPartAddin,并将它设为active。, \$ t* m% a% H3 H3 w! ]5 l8 B
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框$ A6 R* d* U6 U
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:; p- V9 }$ T) U( R
4 Y) f+ u, G, Y+ j1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
9 ]. R3 P9 D' kCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前( {; ~+ u3 N$ G! W8 G( {
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作) h: w! V! Y$ F/ ?8 ^3 E
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
- V8 G( y/ i- n' a, Y# ~下都显示当前工具条。 4 Y e6 z& B# J4 q4 Q
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:8 |( t( T# O$ k r$ o6 {3 ]- W
myAddin CATIPrtWksAddin libmyModule
5 l" e- e" A( t* d2 f但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
3 H+ Q+ g! g, M: x4 L" _在NewAddin类中添加两个Public函数声明:
3 Q9 X; ?$ U& _! Ivoid CreateCommands();8 o( x& Z n6 J+ C
CATCmdContainer * CreateToolbars(); g( m7 {- X: z4 O/ ~
在NewAddin.cpp中添加宏定义:
0 T: K2 \, J4 ^# [8 A( g#include "CATCommandHeader.h" ! S f/ o5 w* \1 I
MacDeclareHeader(PartCmdHeader);
( }/ L, D! |% i- x( I3 ]0 |( `这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
' _8 h. C* s: dnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
6 `. p9 M$ n) B! Z, Ynew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);) N. h+ D4 [' T0 t7 s
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。' I2 |. i9 C& S
3 d% x% O- x+ c" x6 n1 @6 oCreateToolbars里面就是要建的工具条和菜单的主要内容:
' e" z6 H( G- p! S5 g" m9 x5 k$ K' ~. E
) t' E3 W9 {, v* z //设置工具条
: R" i& A, J# C NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
5 a. t2 P# l: t0 t# ?, t# F AddToolbarView(pPartBenchTlb,1,Right);
7 A S/ d( D6 I* J8 u- i$ O; C NewAccess(CATCmdStarter,pPointCmd,PointCmd);
' [: P! y2 e4 ?( L2 Y9 k* f- z9 l SetAccessCommand(pPointCmd,"Create Point");5 }7 |9 ? Y& p X
SetAccessChild(pPartBenchTlb,pPointCmd);6 B& {$ f1 C3 P% f" o7 z) d
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
8 B f& F3 ~& T4 K$ ?0 ? SetAccessCommand(pLineCmd,"Create Line");
|; V( l9 ^( U. W- s* ]- `4 ?# L SetAccessNext(pPointCmd,pLineCmd); & W; G* w' J1 k. x) X9 f9 ~# ]
3 g) E% Y7 a6 s4 @3 y
//设置菜单
z4 r! D/ ?0 _# _ NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);: J$ o. O2 t8 h- v& R( b
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);( ]$ ^* l8 L( ?4 [4 d
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
( q5 w2 E, F3 e: w+ h7 p. n& f SetAccessCommand(pPointCmdm,"Create Point");5 W9 ?, D. ^6 N6 A
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
( D, F2 ?; m0 F! K Z2 Z" L SetAccessCommand(pLineCmdm,"Create Line");+ ]1 g' K) y5 M- Y1 t$ {$ ^6 y6 t
, Q5 o2 P; u% `! `( h# d SetAccessChild(pPartBenchMun,pPartBenchSmu);# s+ U) }# `* v7 G
SetAccessChild(pPartBenchSmu,pPointCmdm);9 h, _4 Z, \ O b- S$ S) _9 _
SetAccessNext(pPointCmdm,pLineCmdm);
% Q8 K, S/ n* d0 V }! M SetAddinMenu(pPartBenchTlb,pPartBenchMun);
$ G) T. A! [, g工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、- c* S& }- [7 e1 Q8 I9 f
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、& f1 R) u4 Z: ^) h/ e- O
SetWorkshopMenu()、SetAddinMenu()等* A/ A* Q z6 H, ], f
NewAccess 的函数定义如下:
* w9 k* ^* S% L5 mMacro NewAccess (className,variableName,objectName) % q! b6 R6 k) X) y) Y+ _& O8 H
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
! d* V6 v. o" H! C l9 Y# G OCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
+ R8 I8 {; S" N! O5 w8 }' K示分隔符)
% r& c( E! P* J- P* x9 H$ }) W7 e" F
# s7 C1 Z# A8 i$ y$ u' M3 ENewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
# X- ?: t! U9 a, @4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"2 S" L6 n6 r3 K. L' x
在.cpp中加入:#include "CATCmdContainer.h"/ A* \3 `* t- d5 x6 R0 P
#include "CATCreateWorkshop.h"
# k7 I9 f) p- k; n4 H( e3 r& Z在.mk文件中加入:WIZARD_LINK_MODULES = \
( [7 r" h: S/ ?& }JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
6 @, T3 z+ r1 m: d* qCATApplicationFrame! f5 Q' r+ ~" y3 |$ ~/ J9 D8 d
# END WIZARD EDITION ZONE 5 c& F1 J/ ] F* F& n g# V x
LINK_WITH = $(WIZARD_LINK_MODULES) \
# H/ A/ X. A# J6 h CATApplicationFrame % l( F: J& w2 D' Y1 v
在Identitycard.h中加入:9 C$ m6 t& ?; p! F% `
AddPrereqComponent("ConstraintModelerUI",Protected);
$ X2 @% u4 r+ u注意:每次换行时,都要加一斜线用来继续执行下面的module.% `1 j8 y1 Y3 B" @: X( H$ H) p" u
9 A+ Z& x- o; Z. u0 z" W) n0 }' {# u8 ?+ s
重新进入编译后,可以看到结果如下:
+ C3 W' Z* D; |( g* l+ x, y2 Q# A2 j2 a* F5 D E
! p, K$ ]; t- R$ T! Y8 L( i0 x; l7 i
! N; \, z+ l1 U3 b9 `( p+ w4 L. Y
* F& ~ ^9 X( W7 o4 ^) ]: b
9 k% O$ i& p8 m/ H
$ x; a/ p- f- K1 B# s/ m$ P, l9 o G
|
|