|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条/ `0 O6 l5 ~0 I9 Q# ^/ J: w
~: K5 k2 k- ?: @6 x0 v2 Q, n所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
4 g8 n: T0 m* O& W4 s" T9 y; M我们来在PartDesign中插入一个工具条。 j. v' j/ w. [% Y8 j$ e5 A; l1 K
1、新建一个module命名为myPartAddin,并将它设为active。
% `0 m W9 z2 i4 J! T+ i" x9 a 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框7 ]; B/ T) w1 Z/ R: M
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
3 t/ M7 j3 o! N4 o: X/ ]
6 H+ O$ z( O( w& |1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,5 i2 a0 J# E7 c
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
6 H& w. A, L% {* a0 \4 Q# J, X$ P Q工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
2 G, o* \3 P" Y2 a2 J% t台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench' _' S! D! p) j+ C+ I- r, E- r
下都显示当前工具条。 1 z6 i/ V/ l" _' d
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:3 w! S m, F. T* t' i8 o) a
myAddin CATIPrtWksAddin libmyModule3 `% @4 z7 a/ S# e5 `& e" [7 c" ^# ]! C
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
3 ?8 X. l4 U. @2 g* \在NewAddin类中添加两个Public函数声明:5 H9 r! M) @% r) V V2 O o- g: r* j
void CreateCommands();
6 ^, j! D3 K3 ]! {& E1 ICATCmdContainer * CreateToolbars();% d% c# ]8 i3 A* E9 i
在NewAddin.cpp中添加宏定义:
4 }) p8 r) V9 h) g5 s e3 F6 k#include "CATCommandHeader.h"
' a8 Y4 i; v- c3 x" P5 C6 z( OMacDeclareHeader(PartCmdHeader);1 Q; w+ V# E, ~+ h5 K
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: & n; `' G# F' E6 I
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
4 H. u7 w1 Q" Unew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
2 @ f: q' A! a8 \+ D第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。9 G/ L# a. ^" [" h
! _( z5 f! T+ ]5 d8 JCreateToolbars里面就是要建的工具条和菜单的主要内容:3 ~- e9 q) t; z. b4 b; u
) Z/ L' B5 @1 M- W8 n% A9 M+ Y
/ J/ k* D l' D' I. S# Y# r$ g7 g //设置工具条, v. u2 @, g6 J) n
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);. a/ |; n( O* M3 ^5 R- R3 F" h
AddToolbarView(pPartBenchTlb,1,Right);
# l7 b3 k2 g& M4 l; x NewAccess(CATCmdStarter,pPointCmd,PointCmd); h2 J% E" @) d$ f
SetAccessCommand(pPointCmd,"Create Point");) V# S* Z) L3 w- a4 N
SetAccessChild(pPartBenchTlb,pPointCmd);5 H& w: O- Q3 v0 p% q$ k2 c
NewAccess(CATCmdStarter,pLineCmd,LineCmd);) ]% A5 x$ e& m6 P, D
SetAccessCommand(pLineCmd,"Create Line");
! T' ?; w1 l) j' \0 Q) `0 V ~ SetAccessNext(pPointCmd,pLineCmd); 8 K3 n7 l9 c, ~/ t
6 `- F. j9 _9 F6 s! B' \ //设置菜单" ?* P7 t& v+ O" T7 [
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
- O% b1 i, h9 p6 b NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
4 ?, Y' {* i$ `$ p% I! M1 z6 Y NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
x7 Y3 H5 Q! H5 N9 G. V4 R SetAccessCommand(pPointCmdm,"Create Point");# J$ p, q) u( X) X7 o
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
/ Y3 F% E5 Z$ | SetAccessCommand(pLineCmdm,"Create Line");
% x2 ~6 M8 G$ ]: O. M9 Z- G
$ {; o1 m% X$ H8 J6 {- r SetAccessChild(pPartBenchMun,pPartBenchSmu);
& Z) r" }" m( y' f2 l SetAccessChild(pPartBenchSmu,pPointCmdm);! L; k, X+ R& W, j' c6 Z
SetAccessNext(pPointCmdm,pLineCmdm); $ Q( k9 d: L$ e1 {- H0 H0 r
SetAddinMenu(pPartBenchTlb,pPartBenchMun);6 Q" _. x0 N% m! y* A; n8 ]/ z
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、0 c, W+ k1 X7 i& _/ u* j
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、' i! |% d+ l2 [2 H9 z. l
SetWorkshopMenu()、SetAddinMenu()等3 T q- C8 L. D% o" T) i0 S# Z
NewAccess 的函数定义如下: t5 t6 @% |/ L) y1 K
Macro NewAccess (className,variableName,objectName)
: c1 J" u$ ^, i; Q. z2 h6 U. x& Y# Q& U其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、: @& b7 S6 K& |( O% x1 j) R, W
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表0 J9 A) e' y+ f" ^6 M" {# F
示分隔符) ! S3 q- O8 h2 O
0 L! R0 e$ t9 x
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。- L0 @% [5 I9 a; E3 u; g0 L
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
4 U7 Z3 e$ f6 J8 c5 o& M在.cpp中加入:#include "CATCmdContainer.h" r/ z+ C5 H F! ?3 k- i
#include "CATCreateWorkshop.h") Q) w7 Z0 O4 j5 \0 _ G: _9 W6 m* G, {7 X' O
在.mk文件中加入:WIZARD_LINK_MODULES = \; [6 `0 `' S5 a* s7 c) A9 q% W
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \; R) p- Y* _4 Q/ M1 ^
CATApplicationFrame
0 j3 k5 }* C8 ~5 p/ K4 a2 L# END WIZARD EDITION ZONE & k2 }/ B7 c8 x
LINK_WITH = $(WIZARD_LINK_MODULES) \
! C. B7 }5 X# e$ T5 l8 f) g+ E CATApplicationFrame , F) {% x1 Z F3 X5 `! G5 r
在Identitycard.h中加入:
- M. S. s! j' Y. a' QAddPrereqComponent("ConstraintModelerUI",Protected);
) b/ Q6 p+ P4 }3 M4 P+ t; t f& [注意:每次换行时,都要加一斜线用来继续执行下面的module.+ u8 O+ J2 [, S* X3 g) X
3 T: t) {- F* e# l% W
1 a! \4 o2 s4 ?0 x8 p. ]9 ^. f重新进入编译后,可以看到结果如下:
& N( N. [3 }% O& A( d7 U0 B* z" }- ]$ i" Q" [+ h( J, {' @
6 a. g& A& O; l9 l, h
0 M6 M4 V8 c3 b9 S4 p( p2 r; v% x( y& a- |
$ g5 _2 v* A& R% G* C& N' R& K
- D( }' Z4 ~' g3 s9 L1 M! N( z
1 y% H( N6 c# v! j E9 X
|
|