|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条8 L" [$ ~; {8 |2 s+ B) Y
6 g* ?# `- s2 P! g0 f# G" }3 m
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。! S9 C4 I5 i6 ]1 p( b
我们来在PartDesign中插入一个工具条。
8 I% R1 h6 Y3 a: s$ T! ~ 1、新建一个module命名为myPartAddin,并将它设为active。
( w7 |9 B! J# `& O0 @ 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框 y9 F, o% } p% a# X( g
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
8 q1 h0 m" N3 u- x# w. X( V
6 e2 N/ V U% k; @# S7 Q
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,: q/ h) G8 r5 t5 b& ~
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前: P- A: E" b" ]6 | W
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
0 ]! O5 q. D$ O台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
; j0 T% W! w2 k6 E, d下都显示当前工具条。 $ `6 T* U2 F3 m4 B# L8 g
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
, f7 L% I) Z: d1 Z" W8 m myAddin CATIPrtWksAddin libmyModule; i3 y# b8 e7 s. l% Z# N: o
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
% \: }# F) C% J0 T6 I8 @: a- y1 z$ Z6 ]在NewAddin类中添加两个Public函数声明:, ?3 h# @6 J! J3 n; L/ s& V
void CreateCommands(); v( ^6 q/ d! z
CATCmdContainer * CreateToolbars(); F2 c- s5 _; n' F3 ^
在NewAddin.cpp中添加宏定义:
% D* j; n& S- k- l: w* b#include "CATCommandHeader.h"
" z; `9 u+ u+ r) N# q' p; I* fMacDeclareHeader(PartCmdHeader);
' p! D% [, g* W% s1 L这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
" s: }' g) A0 ?( \new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);, }' U4 e' }* k# D* [0 A+ `' Y; t- G8 q
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
4 |0 Q. p- n8 c+ l' v/ I( Z4 {6 V8 Q第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
6 ]0 p3 R: n2 E2 r% e
4 w6 E- o, J; i4 GCreateToolbars里面就是要建的工具条和菜单的主要内容:$ D8 @4 N& Z& l8 n2 `* O* v
' X; L+ W% y, i7 m9 s. ^7 U! z
# J* ]9 E* }9 ?2 e0 D; m5 |' y //设置工具条
' u0 |8 A1 C* X. q+ | NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
# s3 w6 a, B% c& d: o AddToolbarView(pPartBenchTlb,1,Right);, f! n* h( b, H4 ^
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
9 H# S! c" S4 Y7 P! m, [ SetAccessCommand(pPointCmd,"Create Point");* N1 n7 G( Q* S( }& X
SetAccessChild(pPartBenchTlb,pPointCmd);
1 m$ K D2 t1 | NewAccess(CATCmdStarter,pLineCmd,LineCmd);
# t) g# j+ F, z SetAccessCommand(pLineCmd,"Create Line");4 d: s8 L' u- c) Q; C' K* o1 D
SetAccessNext(pPointCmd,pLineCmd);
; q% [! P+ E- J. g& l
; p) M I8 M. t //设置菜单' B& v- _* z: x
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);9 @$ C2 Y6 l6 O6 Z- T8 z* p+ U
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);$ c- |+ W* q5 d) Q& ?- F/ c
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
! j2 D0 Y( B4 m8 G9 @1 Y' q2 l" k SetAccessCommand(pPointCmdm,"Create Point");
4 j% ~) p | J NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
: J* U/ a, r7 g' W5 P6 O SetAccessCommand(pLineCmdm,"Create Line");8 ~& R% B6 T& \+ k+ X6 e0 ~
. h4 E7 [3 H0 z( o) B: o SetAccessChild(pPartBenchMun,pPartBenchSmu);5 W/ j; ^# r- \* J& Z& h9 r# L
SetAccessChild(pPartBenchSmu,pPointCmdm);
$ Y8 u+ a9 c$ B SetAccessNext(pPointCmdm,pLineCmdm);
9 S: Y! w( R. i6 h5 V5 V SetAddinMenu(pPartBenchTlb,pPartBenchMun);
$ {5 T7 {/ E4 @9 d工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
" N% p/ V1 M2 ]SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、0 J' c% M& r/ P! b: M0 l1 C
SetWorkshopMenu()、SetAddinMenu()等$ C9 j( |" H5 S5 _
NewAccess 的函数定义如下: 4 O4 e0 P" S8 ?% K6 m' Z
Macro NewAccess (className,variableName,objectName)
8 G/ ? A/ j) e9 N. K, N其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
" R7 W5 r! v$ `* ~+ \5 Y! t0 gCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表$ v: {! ~( _: s+ ~# S9 C* z) A T8 K
示分隔符) 1 ^6 z, @/ `6 }- O
% b$ M/ S: W) ^1 [& _: x! h
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。% K: S3 {4 V" c
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
( i9 J% G) l( r6 v, {$ i4 O$ S在.cpp中加入:#include "CATCmdContainer.h"
( z, o7 Q( i N. e; b#include "CATCreateWorkshop.h"
|+ W! r3 e3 r4 k/ x在.mk文件中加入:WIZARD_LINK_MODULES = \
, G7 S6 a: I4 a2 l3 W3 RJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
2 s1 Q- U7 D' A4 T4 P8 p; b) J$ ~CATApplicationFrame; X% f$ C5 L+ U4 c U% Z7 ~
# END WIZARD EDITION ZONE
0 f/ O- p$ _* q, ULINK_WITH = $(WIZARD_LINK_MODULES) \
, A' a$ G2 O* \! I7 D% P CATApplicationFrame
D, u& M0 ^/ ~% s# O8 O8 X( z; n在Identitycard.h中加入:
+ b$ L! T l |1 W) t' zAddPrereqComponent("ConstraintModelerUI",Protected);( y# J* L( B g8 Y9 }4 H
注意:每次换行时,都要加一斜线用来继续执行下面的module.. L* e% ~7 n% f. _" R
9 M' [& M# h8 w0 k7 ^
3 W/ C2 x# \' g; [# _' |重新进入编译后,可以看到结果如下:; k% J& M- v7 r4 H( M
/ D$ a; K$ D" a' v2 P6 E( D: `
0 q* ~! T. Y. w/ X/ B$ w' O4 R; \
* Y7 N* T( g: W
8 h7 U' D! Q6 p0 m
$ Q7 d" H3 w) m3 s7 R6 a2 c4 o. k$ C: v4 r8 N- R
; _& `, V; D! K0 a3 d7 } |
|