|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
5 G, d# S6 A# {) t' U3 |5 X9 x" z0 [2 e: P( J, V1 c& ^- p
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
' J! B( q; ^8 C( ]$ Y# Q/ Y+ d/ h我们来在PartDesign中插入一个工具条。
8 N8 O! v5 L- \& _% e3 s, j) G 1、新建一个module命名为myPartAddin,并将它设为active。) h1 n, e# p% s2 f9 A+ l
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
8 B- `, p# J g- y, A, x- Y输入addin的名字,点击add再点击浏览选择要执行的接口,如图:9 B8 q8 q& v1 B$ f0 { G
8 ?' ~8 G' u, m1 @3 p* T; ]9 H6 y
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
8 Q8 }0 S# ~. z8 V0 @; L6 l( F4 ~& @CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前# m" y: |0 O* V' G& m
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作5 M; b9 E# }# g( H
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
$ D- T& `, D; L9 }* x" f下都显示当前工具条。
1 `: k$ |" U: \+ {# C( E 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
0 k; S! r9 _# }5 X2 Y myAddin CATIPrtWksAddin libmyModule
. r9 f( I3 b6 ?7 D1 B但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
0 }7 N5 a7 d7 n+ U4 k, r$ Z- l在NewAddin类中添加两个Public函数声明:. W+ ?8 I* F" V
void CreateCommands();; Q0 t1 W2 H0 Y3 {* O
CATCmdContainer * CreateToolbars();* ?, P% T9 R W
在NewAddin.cpp中添加宏定义:
) E; g- O! U7 S6 J: j u#include "CATCommandHeader.h" 9 o: ?; f! {: c( v z g t8 H
MacDeclareHeader(PartCmdHeader);
* g O% a) B4 C2 _$ g这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
" ^( A" k' ~; o1 I" inew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);8 S/ }4 B, L* u( Y: L7 Q
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
8 q2 V$ {, x a第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。! J( B* {# b J7 N7 T% ]
u& q; J3 [6 [+ w! m* T
CreateToolbars里面就是要建的工具条和菜单的主要内容:3 u& e) ^- q* D2 {
& V+ [0 h. I7 ?/ `% h7 W( ~
" i& Z4 v, }0 T6 G- R% g$ ]. { //设置工具条
5 @' y, q3 ]$ g7 i) v NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);8 n9 O$ Y- {- C5 d7 k) }6 d5 R
AddToolbarView(pPartBenchTlb,1,Right);
3 {/ o3 Z ^) V0 C NewAccess(CATCmdStarter,pPointCmd,PointCmd);
1 g6 A. D' y, }/ k& Y SetAccessCommand(pPointCmd,"Create Point");
( p* @, F- n) o& s/ H; K SetAccessChild(pPartBenchTlb,pPointCmd);
' z% \$ I$ S" E: ` I+ m NewAccess(CATCmdStarter,pLineCmd,LineCmd);( j0 N# W) M- k3 b7 W+ b( W
SetAccessCommand(pLineCmd,"Create Line");( P ]! y$ i/ W) h% M; j. O
SetAccessNext(pPointCmd,pLineCmd);
/ X, J# ~% t- B# G9 K1 ?, _
. v" x5 s7 d5 b* h4 \ //设置菜单
( D1 z% d4 e& \ NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
1 ~3 d( U$ X- p" S NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
0 t8 {. V* V9 v NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
# i7 H) C9 _1 u& F! E( x" p SetAccessCommand(pPointCmdm,"Create Point");
9 I3 B, S% W2 m! U) Q NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);; t+ M- v4 v* J/ U' p
SetAccessCommand(pLineCmdm,"Create Line");6 y' ]9 U' {3 R' g4 z. f
% C! d2 j0 `6 ?
SetAccessChild(pPartBenchMun,pPartBenchSmu);1 O% z* |# K/ F2 e5 l
SetAccessChild(pPartBenchSmu,pPointCmdm);1 b {3 T% V7 g
SetAccessNext(pPointCmdm,pLineCmdm); ( Q% D& g* {/ m( Z& H" F
SetAddinMenu(pPartBenchTlb,pPartBenchMun);$ n. s6 F# m( p% S. U
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
0 |; F. ~! I* o% u+ M2 e7 z; | FSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、: j3 ]# }, `5 l9 @+ G9 ~
SetWorkshopMenu()、SetAddinMenu()等# N( i4 E) Y+ k5 M! K, m, r
NewAccess 的函数定义如下: 1 r; t5 X1 f' s9 y
Macro NewAccess (className,variableName,objectName)
& P' g8 a) G0 n' Q4 M1 S其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、- [1 ]( G2 p y$ e5 X6 z3 I
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表5 a) X- S+ H' m5 v9 i
示分隔符) 4 Y; R5 H% c" x V, e" L" h
$ ^! j% h+ p; {3 _NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。- q7 a9 D r- T5 l
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"9 K2 D6 l/ }! ?1 d: V4 ?
在.cpp中加入:#include "CATCmdContainer.h"" G0 a9 o9 \1 o
#include "CATCreateWorkshop.h"
0 a, _, c+ ^4 b1 c& `6 F' u在.mk文件中加入:WIZARD_LINK_MODULES = \
2 ]7 e4 x4 N9 VJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
" f4 X5 k) ?* b- R/ B+ oCATApplicationFrame; {( l9 J+ U. {5 d. G. O4 P
# END WIZARD EDITION ZONE
3 u# F" Z; ~/ f* o# WLINK_WITH = $(WIZARD_LINK_MODULES) \( t2 L3 Q7 Z7 N# @. h6 z
CATApplicationFrame & `4 M A/ x/ [1 ~, v" e* t4 M
在Identitycard.h中加入:
9 h# @' x) @5 w' K! Q4 `AddPrereqComponent("ConstraintModelerUI",Protected);
^, o8 I1 z1 q2 {) F2 c2 E注意:每次换行时,都要加一斜线用来继续执行下面的module.) f7 d: i, A! P
* L$ ~4 Z E8 k( T2 r9 y
Q3 ~- G R* d5 v D5 U
重新进入编译后,可以看到结果如下:
( K- e5 S2 @2 X9 x2 v8 z) S# W
; ^: e" G) g+ c6 ^% ~* D: z: e* R* D
/ T% a9 Q- Z9 D- C$ K% @* _
, X' ^9 E" j& u! @" p2 v2 Y+ ?
% s: L) K5 n$ m0 V' e4 o: q) p; A" ^/ y+ E
6 W% B6 ~; m8 I2 [
$ }2 w/ k( p5 J: t: R3 C |
|