|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条( o1 w# s$ c C. @# `8 p6 S
9 Z1 H+ X2 f. A1 m所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
# w. S/ m: F5 V) u我们来在PartDesign中插入一个工具条。& w7 ?/ e; y: I: Y
1、新建一个module命名为myPartAddin,并将它设为active。4 ?1 M: K. c, p
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
/ h4 ~( r8 x; K, d输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
$ q) T- q6 m! @3 a
* A# O5 O0 q9 g0 V7 F1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,5 W) `' @- N; B* z( q( R
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
) s$ ]$ E6 {# h, C: p. H6 a工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作 }3 {4 j ~; A
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench- w4 O2 p$ \& U
下都显示当前工具条。 D+ T' _6 ~/ v0 V$ ^
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
: s4 o& ^& R7 @0 ]' E. } myAddin CATIPrtWksAddin libmyModule% U9 T) j& M$ \; F1 X$ r3 e5 }; ?
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。- A! z# S$ C* K& G- c8 t5 t/ C% h
在NewAddin类中添加两个Public函数声明:
& @* o6 y6 ]) l, E/ uvoid CreateCommands();
5 w8 a" l/ e LCATCmdContainer * CreateToolbars();
* l1 n9 q' K( {8 M在NewAddin.cpp中添加宏定义:
- K/ x. V' k3 G' k7 P+ t% S#include "CATCommandHeader.h" . {' y }% O$ Z' E+ y+ v3 a
MacDeclareHeader(PartCmdHeader);: ^$ {% j3 k, \6 e5 k
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: ! M, f& J2 {5 j6 u5 K; |9 [
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);; H" x3 K; ~ R, ^
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);% Q4 o; L8 _5 O; g
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。! u! U6 s- ^1 u$ Y. }+ ]
/ {. k# o0 o: _9 {. P- p
CreateToolbars里面就是要建的工具条和菜单的主要内容:
[) E" m% D% |! U4 x
$ g" \& `7 b: V. S; ^- p
/ i: V$ J2 j, n+ A$ _! |( \ //设置工具条: L& b: G1 g3 [ Q8 _2 L* N' Q
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);: E: W a- E$ M6 l8 E& m3 x) Z
AddToolbarView(pPartBenchTlb,1,Right);
( ?4 v, \9 ?5 _' b NewAccess(CATCmdStarter,pPointCmd,PointCmd);
- N: m( z( z5 s0 Z, a& g SetAccessCommand(pPointCmd,"Create Point");) e- L" D, | a9 D
SetAccessChild(pPartBenchTlb,pPointCmd);* @4 B {8 s* {2 y
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
8 d9 W9 O7 M1 L: @3 {9 x' a' \ SetAccessCommand(pLineCmd,"Create Line");2 u. B9 E& G% e1 A
SetAccessNext(pPointCmd,pLineCmd);
: S' w3 p+ G/ p9 i& Y ! h& M/ h9 H- L, ^6 c1 l
//设置菜单
) Z6 k3 t! H- h3 s3 l3 ? NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);# r1 I- H5 A) E# _! J
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);8 T! P# U9 i! R/ c3 [8 _
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);( o: h1 l) \9 T/ j' K8 L
SetAccessCommand(pPointCmdm,"Create Point");
5 D ?8 W) a" b; T9 _ NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);8 [: |. j8 w& T. f: m6 Q) N
SetAccessCommand(pLineCmdm,"Create Line");
( k' K2 X2 _" z$ }6 s, E* \ ; n, j- c6 @9 [
SetAccessChild(pPartBenchMun,pPartBenchSmu);" x6 _# N5 K2 ~5 j, ~
SetAccessChild(pPartBenchSmu,pPointCmdm);) G" }4 X2 B) L$ o* y, `) F
SetAccessNext(pPointCmdm,pLineCmdm); ! O' T% U1 q7 C- `
SetAddinMenu(pPartBenchTlb,pPartBenchMun);
& D, m! ?- C$ x) j5 S工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、, {, V5 M F. P% }
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
& l0 ^ o7 V0 V; u* WSetWorkshopMenu()、SetAddinMenu()等
. l* O8 c% ^4 H: A! SNewAccess 的函数定义如下: 8 {1 h$ K2 E L* r$ q& x
Macro NewAccess (className,variableName,objectName)
( b( \ G7 C& T其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
% O/ t* N- \' i7 d* Y- }, I: x mCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
/ S) y/ c: X8 N4 H/ y# m示分隔符)
% w2 v/ b% |' x% A n4 \& K2 w% S, y* W8 V5 f
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
/ \! ?9 J5 z0 n+ ?! r: U% }. Y4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
) `1 M9 d' n6 f+ b在.cpp中加入:#include "CATCmdContainer.h"3 I" @# T* [# {, g4 N
#include "CATCreateWorkshop.h"
& K6 u, a' N) g4 T! o/ R" H在.mk文件中加入:WIZARD_LINK_MODULES = \
( K" x" U" g# G: N& d CJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
- ^3 H( a0 m0 J/ M: p/ U8 i! dCATApplicationFrame/ T2 { r7 h& s, Z- d- o7 `. `+ t
# END WIZARD EDITION ZONE
% |% h% h, H1 e, [LINK_WITH = $(WIZARD_LINK_MODULES) \
% D. B+ C! [8 Y2 j5 Z CATApplicationFrame 3 M4 y" h' N, V9 ~8 x! P
在Identitycard.h中加入:
9 _3 y; Z8 N8 B$ ~4 n' c# A0 ^. \AddPrereqComponent("ConstraintModelerUI",Protected);
b! [& W7 v% s3 q9 f0 E注意:每次换行时,都要加一斜线用来继续执行下面的module.8 b& [6 m/ z+ ?7 k$ f
6 D8 u; Y p: |" [/ I
" c0 i. S8 A, @0 O' _$ Q重新进入编译后,可以看到结果如下:$ }' n% y" V* [- s- p3 [1 l
. w' e$ K0 ^3 F0 W
+ y9 V3 `. O5 u9 n
# W2 i; q* ^. ^5 ] h( t p
5 k* @7 H Y! a* ~; {( Q2 h6 D. s# X! h) w4 p. B# F0 I/ G7 o
" g+ f, C1 y2 a( h" R: e
( [& v) M S2 X6 B5 z/ a |
|