|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条7 X K, K( }; w
4 j1 M; k/ C" I
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。' Y& C% v6 ~, b5 E7 v$ P, d
我们来在PartDesign中插入一个工具条。
j8 ]. m$ U i4 l, \0 c 1、新建一个module命名为myPartAddin,并将它设为active。
; J& b9 V5 b* p2 ?" r) b 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
* z" K1 r/ k: k8 I0 v Z' B输入addin的名字,点击add再点击浏览选择要执行的接口,如图:' h5 ^* w1 O7 l4 I/ H4 o/ m# j
1 s* O6 N( L) ?" c1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
6 A* W5 E U; RCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
9 Q# Z* ~" d" S工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作+ t' P4 r) G r* L' g
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench: R% l2 a `& w I0 e: N
下都显示当前工具条。 7 C0 Y8 s: y! D( M+ G
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
* o5 T5 L, H F8 Y myAddin CATIPrtWksAddin libmyModule z+ L* `% v6 |5 m
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。$ |3 x9 m: B( J2 A1 g
在NewAddin类中添加两个Public函数声明:
: G& x, ~1 z% o6 K2 Y2 o+ [$ Svoid CreateCommands();
; M/ f& M$ C4 B& m* ZCATCmdContainer * CreateToolbars();
; }7 \5 x* v P$ ~9 k. W" {! |8 ~在NewAddin.cpp中添加宏定义:! T5 F$ [& U! p/ s4 `
#include "CATCommandHeader.h"
$ c8 D( l2 v+ n% L9 u" ]MacDeclareHeader(PartCmdHeader);9 r5 X" v2 e9 u! P
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
2 V. r3 H" J ^new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
0 k& X: r! z$ S( D: e, |5 z! rnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
7 n. I! h7 ?$ V4 J" u) W第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
1 R; h T2 S$ d7 i' j% b, p( W- {( y, k) v
CreateToolbars里面就是要建的工具条和菜单的主要内容:
+ j) F$ M1 F8 r: t! o- J, a* O
1 k. ~- z+ t3 ?& S# F! K: Z2 _2 @# C! `3 b$ \9 N
//设置工具条2 y0 ~8 C; h4 u: U: S
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
; V' Y T% b- M% N% P AddToolbarView(pPartBenchTlb,1,Right); E; F; _% ~! ~0 P
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
6 c! J" N5 y" S+ j* F; C4 v SetAccessCommand(pPointCmd,"Create Point");- u2 e8 B0 o- [7 b3 e. }. s
SetAccessChild(pPartBenchTlb,pPointCmd);* T# f6 k( r% [/ z: }8 a: s
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
4 M# k3 v( x! j3 {/ q; v SetAccessCommand(pLineCmd,"Create Line");
; F: G* g. d3 D* C+ | SetAccessNext(pPointCmd,pLineCmd);
2 a; p/ P2 O. k# V$ D7 r
# M$ |) K- t9 O2 H+ N //设置菜单
( s/ g% U* X _: L" m0 ~ v NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);9 \. G+ K# P' B2 V0 H6 i% e* s: ~
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
5 M1 @+ C; H# J9 J$ W NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);* `+ t, x: V' b) L! ~! O
SetAccessCommand(pPointCmdm,"Create Point");! S. ?7 e6 v' e2 ]. Q" e
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
( W" @1 O8 a. O8 |+ M SetAccessCommand(pLineCmdm,"Create Line");
6 {5 V D$ e3 u, U" E
, o; }7 p) [( s4 _ SetAccessChild(pPartBenchMun,pPartBenchSmu);
$ r$ S5 A7 A6 P5 F6 a% c SetAccessChild(pPartBenchSmu,pPointCmdm);
# ?" x8 Y; ~. @% L0 j* M SetAccessNext(pPointCmdm,pLineCmdm); 5 r2 G) K6 O2 a+ H. n
SetAddinMenu(pPartBenchTlb,pPartBenchMun);
3 e- Z G9 ]0 L- K l1 ?$ ~ j工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
" S& Z9 K' z* q8 s# n6 o& qSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
, g$ r! w o) r( ]. f( z# rSetWorkshopMenu()、SetAddinMenu()等3 a f2 o1 K* Z0 p2 z- c
NewAccess 的函数定义如下:
|8 q$ P! R8 h8 L3 ~& b, w0 s% [/ H! WMacro NewAccess (className,variableName,objectName)
' M2 ], m& Q0 l$ V其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
! r' ?, @& q5 s2 f& fCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表1 N4 Z* O1 J5 c
示分隔符) . V8 e4 W; n" t" x& q2 ?/ W2 Y
& ]! t/ w; Q1 e. y/ z2 I4 o! Y) c% S3 eNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。$ Q! w$ p. d/ `# i6 G- m8 ?4 ~
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
1 \# ?, z2 p9 g6 K$ W- o N& U在.cpp中加入:#include "CATCmdContainer.h" u3 A. ~% j+ k( ?2 R) _: y8 V
#include "CATCreateWorkshop.h"
; [$ a% P1 x! Z+ g8 p: `+ d在.mk文件中加入:WIZARD_LINK_MODULES = \
9 t: L$ d4 p& a! z2 d/ n, _" `, uJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \( E5 W/ ^. Q1 Q- W
CATApplicationFrame+ b- r; G/ Z9 E
# END WIZARD EDITION ZONE
' k( F9 H" {1 x+ W; LLINK_WITH = $(WIZARD_LINK_MODULES) \
9 r0 F# `" }& V* N6 q8 o, A6 y CATApplicationFrame ) E" O5 H4 |9 d/ N; a0 D* x
在Identitycard.h中加入:2 {+ w- e7 ]1 |5 \
AddPrereqComponent("ConstraintModelerUI",Protected);
' g: ^1 N3 C( W* Z9 j注意:每次换行时,都要加一斜线用来继续执行下面的module.
& k4 u8 Y" B4 Q. e+ k% Q# |: J% {
+ ?0 T# C( ]4 R9 |9 w8 K, b
, f! w& q/ _* z重新进入编译后,可以看到结果如下:. q9 `/ h) U/ D/ i/ U
% T/ Y1 n/ e6 v1 Q3 j! b8 m5 U" Y
8 J, k) I! @' ]' ^$ ^
. y; A s6 X$ R9 m9 | H; w X9 x/ M: W
0 ~* o+ J/ y4 P R d" Y
6 [6 |9 X/ @3 E: X6 u& l
% |& J5 N! E' | |
|