|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
' m& G O. X0 \8 P4 U2 Y
3 q f& k, O4 n1 }* A% [3 X R! _所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
v& H; k; Q! @我们来在PartDesign中插入一个工具条。
* |9 Q7 x7 v9 r+ a" c$ ?5 o9 f 1、新建一个module命名为myPartAddin,并将它设为active。
$ K) c V5 N4 g+ |4 @2 g 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
; O6 n8 [' D% ^- ]输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
) [! v. V) h5 t M# `9 q6 @
q5 I' [7 h% i& | W
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,1 A# j+ \: k$ | R$ ~+ m4 W9 S+ J* i5 [
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前1 r+ N6 L# |' F1 T4 \0 |/ w6 {" i
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作* q4 h' s) ^ z& q
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench# d5 F8 a! b* x* e5 X+ F9 ~
下都显示当前工具条。
0 Z( K& D! ?0 `+ p+ f 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:& h) y7 R; X5 }: H3 x8 O! l
myAddin CATIPrtWksAddin libmyModule( ^! k& U7 G3 \
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。* ~- |9 P/ M; l/ \% v9 ~' S
在NewAddin类中添加两个Public函数声明:
! M/ e5 n$ V: M; h+ Mvoid CreateCommands();$ P! A' G: S1 z, H1 _
CATCmdContainer * CreateToolbars();
( {! n& `: J4 [: q3 |' `7 v' \在NewAddin.cpp中添加宏定义:. p/ [" s. B( x# G0 p; ~
#include "CATCommandHeader.h"
/ j2 m1 M+ c O3 vMacDeclareHeader(PartCmdHeader);
# Z; D. Z1 _5 b' H这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: & u9 y; E0 m' M# D$ K% ~
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
9 E# w! @1 y2 _6 G* dnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
! N0 B) O+ l/ V" ]& t2 ^9 i( _第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。+ |8 M1 _; o. y. |' ?( L
# E5 d3 l# E; k# ^
CreateToolbars里面就是要建的工具条和菜单的主要内容:( [" h! ?1 X! i( X
6 N# T; o% n5 d6 M4 Q
" b8 g3 g, `! }8 w) ^- q! k% c //设置工具条, h5 m. D) W7 k5 ?/ [ J! |
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);$ o0 {, \6 R3 J8 e9 z% n, Z# a7 a9 x
AddToolbarView(pPartBenchTlb,1,Right);6 p* u% c1 d& f; D N+ [
NewAccess(CATCmdStarter,pPointCmd,PointCmd);; d+ m# i( Z5 j
SetAccessCommand(pPointCmd,"Create Point");
0 U' e+ o8 t, J* V$ z0 V SetAccessChild(pPartBenchTlb,pPointCmd);8 F. c/ f- _/ q% b
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
g# h6 J) W5 h: |3 g+ c0 e SetAccessCommand(pLineCmd,"Create Line");% @7 Y; S5 p7 d" C- t( j! { {5 \
SetAccessNext(pPointCmd,pLineCmd);
- v- V$ D5 c* x7 h
* X8 o( [ f2 A, Y' e% T8 R! h; S2 e //设置菜单6 V) a& l' `" Z; f3 `
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);" A0 B8 C) J3 U/ y9 n* ]. i* B
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);% s& s N8 e4 n" _
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
! ]2 L8 |4 Z* D, e3 I SetAccessCommand(pPointCmdm,"Create Point");. b, F2 F$ h/ w
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);4 X% A6 y1 w& C- X
SetAccessCommand(pLineCmdm,"Create Line");
6 u! y0 J9 J$ Q6 @0 c 1 g/ `: p$ E" |8 r
SetAccessChild(pPartBenchMun,pPartBenchSmu);. Y/ Q2 T0 s# p& L; @; F
SetAccessChild(pPartBenchSmu,pPointCmdm);
% n! K& y* X* W! h5 v9 b- k% F SetAccessNext(pPointCmdm,pLineCmdm);
% k0 O7 ^" Q6 S- E SetAddinMenu(pPartBenchTlb,pPartBenchMun);& Q4 Q# \* S( V! l) {
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
1 [1 M F: p. G1 E6 c nSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、, x. `% `* L: i9 X! |* Q5 s
SetWorkshopMenu()、SetAddinMenu()等/ F( A9 B1 U1 p' v8 E5 r3 q
NewAccess 的函数定义如下: ' u) G) n8 W2 i: M8 g* [5 v
Macro NewAccess (className,variableName,objectName) 8 _1 r: i3 _9 a
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、# |- J! R5 p S/ k C0 A
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表9 v& V2 `* ~ q, D* ~% V# K' q* Q n
示分隔符)
( j6 t/ a" I) }: x! w
, s' o, B8 D8 e# rNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。% i: L/ p/ L) D
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
' G, r' h* `5 W在.cpp中加入:#include "CATCmdContainer.h"( i8 _5 T! k* p
#include "CATCreateWorkshop.h"! S- z, t* M6 T/ p$ o: C8 @
在.mk文件中加入:WIZARD_LINK_MODULES = \: G- I& c3 @, y7 V5 Q& d8 G8 M
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \7 K' M4 s1 o; v% U' c0 ?8 C- T5 b% j+ s/ w
CATApplicationFrame
$ A8 R; O$ c n/ u2 W$ T) \3 n# END WIZARD EDITION ZONE & Q% f& d& f Q5 b3 t' ~0 K0 a1 y
LINK_WITH = $(WIZARD_LINK_MODULES) \
! b$ \6 q6 l4 v; @& K. i! o CATApplicationFrame / o5 W8 |8 e( B3 F$ e$ y
在Identitycard.h中加入:
# w" X) ~$ `- ?9 qAddPrereqComponent("ConstraintModelerUI",Protected);; k& }, E1 h% o5 {/ l' Q
注意:每次换行时,都要加一斜线用来继续执行下面的module.
! R4 A1 q& z: a* [ O: q+ }# Z' m+ h8 Q
; ?3 Q W, K& `+ w7 \: s' x& _重新进入编译后,可以看到结果如下:6 u" J7 \6 K/ z2 N1 o
0 Q; n5 L& n9 P
) f' R; F! b$ p; G1 S1 }- f" g
! t# n4 d( W" o9 i' x/ f6 b( T& U
: _6 Q+ {3 N# J. E- S' h5 Y
* [7 R1 R+ S" N, u* p& c; N
; U* X# T6 R5 F* x/ f1 ]$ J
6 O5 i- j( P0 a: | |
|