|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条2 F) r9 V- [1 m8 t2 V- R
$ H: a/ A1 _5 b. ~& A2 i7 v, M所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。/ ?: d [: N8 k a/ `3 X
我们来在PartDesign中插入一个工具条。
) ^3 I, j6 |1 X1 z 1、新建一个module命名为myPartAddin,并将它设为active。
% z' _5 ], g, n, [$ q6 Y6 u7 U- t 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框# g( r7 ^& T" A& s: ]4 ` M2 Q
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
3 W9 H. d: ^- _3 y
% n' t3 Q3 U, |2 q7 z1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,( ]5 v4 I' T$ i1 A7 s7 \
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
, w. n- G, _5 C) F' X- K工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作, \7 Q/ B6 F( c
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
- ?, O* z7 Z/ ]* g7 c2 q下都显示当前工具条。 7 I( v; a7 Y$ w2 X: [/ J% m
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:) N, r2 J4 s. x
myAddin CATIPrtWksAddin libmyModule# S! |3 J& P' u) K, I- X
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。, R. Q* v9 @% E7 d' ]( n- D
在NewAddin类中添加两个Public函数声明:
3 p8 J! Y K# ^% c/ [void CreateCommands();
' z" A9 b; L" }CATCmdContainer * CreateToolbars();" Z4 g! ~0 D) K) w' v0 m
在NewAddin.cpp中添加宏定义:9 x* u# u. S7 |, ~
#include "CATCommandHeader.h" & { ^ _0 h5 a7 N, @) O l" h
MacDeclareHeader(PartCmdHeader);) X7 s f$ }+ p* x
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
9 y1 u8 K: b% l% B0 T. j$ ?new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
: l: r! Q4 H" }" {0 M+ h: ^new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
5 u$ U6 e3 K; V2 T第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。" C* P2 S: v9 T4 j
+ Z9 P0 i) y: q$ ~9 yCreateToolbars里面就是要建的工具条和菜单的主要内容:
* `& a5 R, C+ m& F- q( _
1 _" p1 p0 |( x( z e3 X5 I- o x9 e, [2 D9 D
//设置工具条& Z" X" @/ N' m- K
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
4 C" Z2 f3 e1 R( n AddToolbarView(pPartBenchTlb,1,Right);
* R/ c+ V9 U0 y/ k7 C9 b) @/ _ NewAccess(CATCmdStarter,pPointCmd,PointCmd);6 k% D4 y, J j3 Z7 @
SetAccessCommand(pPointCmd,"Create Point");
; T2 N. I: \! y# N# g- o SetAccessChild(pPartBenchTlb,pPointCmd);
; m8 X. {. q7 l. O NewAccess(CATCmdStarter,pLineCmd,LineCmd);! r8 B. b: W7 A: R+ }6 x
SetAccessCommand(pLineCmd,"Create Line");
5 g& X0 X% ?/ X7 ] a- A" l SetAccessNext(pPointCmd,pLineCmd); ; W" p7 n7 n* _* I) z( F
( Z0 r; ]/ [" \7 g' @ //设置菜单
# R7 `6 J$ e5 ~% o' Q8 X. v5 q/ J$ V NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
* G: C2 z2 |1 d( ~' I& ? NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
4 p6 Q7 p$ _2 ?% [' K2 t' @ R( ?7 u( V NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);" _+ ^6 l8 B' g& D- y* a1 Y
SetAccessCommand(pPointCmdm,"Create Point");
2 n- v1 y6 i+ ]% R, D NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);6 g. Y- v& W- X, h- g
SetAccessCommand(pLineCmdm,"Create Line");- r4 L* W0 _' ~# S; H& N0 z- {
& p* q9 F$ U9 ^, |3 A
SetAccessChild(pPartBenchMun,pPartBenchSmu);
* c3 D8 V0 _: w' F/ p SetAccessChild(pPartBenchSmu,pPointCmdm);
# }3 s3 d, d! [+ a+ k( X; h SetAccessNext(pPointCmdm,pLineCmdm); 8 `2 F% \; g- g" d8 ~
SetAddinMenu(pPartBenchTlb,pPartBenchMun);" T; r* b! E3 J/ I+ T
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
4 p7 S7 i; E0 D7 Q3 T& SSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
C$ l( o0 v' M/ \7 ~SetWorkshopMenu()、SetAddinMenu()等
w) X2 H5 o6 ]NewAccess 的函数定义如下: 0 A6 x5 \6 j, [2 C1 ^
Macro NewAccess (className,variableName,objectName) 7 X- O- m! z6 l( D. n( s3 B1 q
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
; _, U [3 c& \CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
( } H- M9 ~3 m9 B9 M% | s8 C示分隔符)
, v0 O' R! t( F2 ~1 D1 Y! l
" J: X0 p8 n, S+ b$ DNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
1 d8 C% |5 G* f- V, n4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"4 d3 ^, l8 D3 U) w) `& i- t1 W
在.cpp中加入:#include "CATCmdContainer.h"
- f( n5 Y" |+ T& t9 U7 n4 x#include "CATCreateWorkshop.h"
2 v7 t$ X6 J+ J' C# _在.mk文件中加入:WIZARD_LINK_MODULES = \. k4 {5 R2 Y: Y& o( C$ \( P& x
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
" r- e, q# |0 E8 l% O6 L0 N; T( @CATApplicationFrame
+ S& ?% R6 m& Q/ a# END WIZARD EDITION ZONE
- }4 ^ y) b% ?5 A/ hLINK_WITH = $(WIZARD_LINK_MODULES) \3 E* \4 s) y ?
CATApplicationFrame
2 y0 N5 I( g e/ J- @在Identitycard.h中加入:9 B& U C3 U% n: h3 k6 ~
AddPrereqComponent("ConstraintModelerUI",Protected);
9 x+ W1 V$ c$ i注意:每次换行时,都要加一斜线用来继续执行下面的module.# N" l2 _# I9 K- V/ C
! F( Y# ^/ {: b- I( {( A1 Q1 ]- h% Y2 I r0 Z
重新进入编译后,可以看到结果如下:
: r6 \2 u9 l& l7 x2 V
" {' F, G; r: Z$ c9 t% W- z
9 D* @' I) N6 Q. k2 k
4 y" f1 e* \- _+ H7 X" k, I4 @" G6 L
/ \8 Q3 n2 [2 O; W: T* g9 x P: o
- H6 o; R5 ^: _4 O) @
* s( m7 g( F% P8 b$ f |
|