|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
1 ]& M4 n, ~, _7 h0 n# b9 u {4 u R9 @$ x
& a, T: N! W R* G所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
3 l+ u w O. ]7 R O我们来在PartDesign中插入一个工具条。
4 F# h) |; J/ Q1 R/ E. E' Y- x 1、新建一个module命名为myPartAddin,并将它设为active。
4 k9 h$ D2 v+ W& [: ~: s 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框$ r0 I1 ~5 V# L, z# f3 t! I0 N
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:; W4 t. O: i, l
: W" y/ r4 ]4 [
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,* t3 C$ S. p9 {6 N
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
7 b) o# c( F" ^, [+ C. Q: W工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
3 ^0 ]8 B: E, @2 @" c9 o* H1 B% f/ ]台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
/ J2 C9 F" i6 s1 r: B7 q: `/ S( F( _下都显示当前工具条。 ' k2 G9 S! \1 [) i( v# P
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:5 W6 F+ D* V$ C1 ?$ `
myAddin CATIPrtWksAddin libmyModule
1 i) h: T5 R+ x9 e但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。' E- j/ y' v! ~9 @- l( l* r0 L
在NewAddin类中添加两个Public函数声明:0 r' J- n9 D) U! B: E$ \
void CreateCommands();4 v4 W2 X1 _* s4 p6 t5 {% L8 \
CATCmdContainer * CreateToolbars();
: L8 o; s6 F9 L3 A# O; q在NewAddin.cpp中添加宏定义:
! k% j/ b( |% |1 u% F#include "CATCommandHeader.h"
9 t1 N8 h5 g- ^; zMacDeclareHeader(PartCmdHeader);
0 z6 \, k3 e) j4 A这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
+ j7 m- y8 L4 ~5 H4 ^1 y: m1 gnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);# ^& X' \0 D4 I6 N& j
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);0 @1 l5 c- m8 H, x
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
O/ D( f: i% ~4 Q" @
+ m; _7 f: J @* {CreateToolbars里面就是要建的工具条和菜单的主要内容:
: M4 [' k* n# ~0 b; _9 \4 X! E) X9 o$ k
F# ]+ |9 U# l* R
//设置工具条
8 A3 E1 x7 p0 j NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
E# [) d9 q8 ]" q AddToolbarView(pPartBenchTlb,1,Right);+ P8 L% r, c( A% O7 J X& y
NewAccess(CATCmdStarter,pPointCmd,PointCmd);0 H1 e. m; K9 ^! H. g
SetAccessCommand(pPointCmd,"Create Point");- {: ]6 S' i8 R+ N4 a- x9 m
SetAccessChild(pPartBenchTlb,pPointCmd);
' K' `! F. j1 M$ l! u NewAccess(CATCmdStarter,pLineCmd,LineCmd);
7 O8 J/ A5 U% y1 P- G7 R5 \+ W SetAccessCommand(pLineCmd,"Create Line");( |' o* S: v5 D9 k% d( Z
SetAccessNext(pPointCmd,pLineCmd); * w* v8 t" g" _& o
/ U7 q. t" F1 t* [# [ //设置菜单
( D8 v/ y& n" A- F; i, z NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);) J6 y6 u7 R: d% U( V
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);" ]5 p6 F: a3 l# b, N# S0 c
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
: J, y0 Z2 A3 m& r! u( W# s0 L SetAccessCommand(pPointCmdm,"Create Point");3 D4 ]# |5 l2 d$ y
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
, t4 R3 e# R- o, K% z9 n' v+ q$ m SetAccessCommand(pLineCmdm,"Create Line");- Y( b' \' w$ ^, [
) Y2 N0 a' h2 A9 T! K
SetAccessChild(pPartBenchMun,pPartBenchSmu);3 k5 \/ V" z# {
SetAccessChild(pPartBenchSmu,pPointCmdm);) [; y( e8 g L6 e) {
SetAccessNext(pPointCmdm,pLineCmdm);
0 A x; x' J2 p9 a2 _) P SetAddinMenu(pPartBenchTlb,pPartBenchMun);( _5 ?( \8 m! H# i2 ~, V7 I4 B
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、& t0 i* r! O. ~
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、6 L( H: _6 Z3 U: x
SetWorkshopMenu()、SetAddinMenu()等1 p. H3 u6 q& E! P# c# S4 E/ U
NewAccess 的函数定义如下:
3 r! o* z- s0 H3 p2 @Macro NewAccess (className,variableName,objectName)
: q8 A0 k9 S6 I- B8 Z其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、0 {+ M+ }" ?5 C/ |, G7 t
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表* j. A$ z8 s$ W5 `6 `! g g% U
示分隔符) , I' k a+ Y( W; H( y% ^. W
/ w& ]% K$ t# m- d' z1 _NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
/ F7 X6 N8 D: b+ ^% n5 V$ m8 g6 X9 h4 @4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"$ L1 @; t( v9 n' z
在.cpp中加入:#include "CATCmdContainer.h"+ i/ h8 q1 {& T* w0 f* A$ o
#include "CATCreateWorkshop.h"1 T1 }6 C) v3 H$ y1 l$ p
在.mk文件中加入:WIZARD_LINK_MODULES = \# F& ^' {% ~ p; ?2 L& r$ t1 e
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \, l5 W/ @- S1 f; B5 i
CATApplicationFrame
# K7 V; W/ l' B4 h ]4 @# END WIZARD EDITION ZONE 0 N, e& f _& W* ?6 x1 e
LINK_WITH = $(WIZARD_LINK_MODULES) \
( T5 N: @6 v4 W, O8 c8 ^ CATApplicationFrame
+ `/ Q6 k" v$ ~在Identitycard.h中加入:' P. ~9 V3 k+ H7 W9 U
AddPrereqComponent("ConstraintModelerUI",Protected);6 q6 @. r; Z1 T+ w. Z
注意:每次换行时,都要加一斜线用来继续执行下面的module.
4 R. ]# T3 E0 Q4 e3 g- ` N. k% s# j2 K: Q+ {; ]$ \
& S. q N5 m! Z& a9 s重新进入编译后,可以看到结果如下:* g, t" V6 l9 t2 P* F# I" H* G7 h
1 z' \) L+ c G3 {% z
( K. ^) P9 k6 r A& g0 v4 A
; |7 T/ W6 v- r+ j2 T: L! z3 s6 x
V6 z/ b+ J7 G2 e4 \( O4 z6 W
# A. B4 M$ {- r9 `8 ~7 K
4 F; C' e0 _8 w1 y8 ^6 Z: g) ?" o, h5 A2 ~* h
|
|