|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
, r% X6 F+ d2 r+ v& y
. k) [5 a9 x! E7 ^* Z7 Z所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。2 ?3 S0 M& W3 c& {9 @
我们来在PartDesign中插入一个工具条。
& F0 w: m! S$ D 1、新建一个module命名为myPartAddin,并将它设为active。
# z* j6 q8 Y1 ]5 u% I1 }8 I u+ H 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框" Y; I: ]4 l2 {3 Y- H) a4 x
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
. s$ X+ s: s6 a: s
2 b5 R8 x `' N0 `
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,( l# ? z0 u( R* D7 v
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前5 f& A G) h6 A& P: ?; Q) w
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
/ m6 D5 |2 S2 i9 N; ~ v7 F台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
0 p) C& P+ g7 m/ h4 F, x: A% B下都显示当前工具条。
% ]6 B: V& F$ q L, S9 h1 \ 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:( Q& `* v; M, s$ |9 {$ p
myAddin CATIPrtWksAddin libmyModule
% P0 y. e8 S( x* Q但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
0 V" Y! T! d z: V; Z; h/ `* T+ o/ ]6 b在NewAddin类中添加两个Public函数声明:
. J2 d: T. R6 o2 u: ^' q8 u- v% pvoid CreateCommands();
( }$ w+ `% j4 _9 N& m2 iCATCmdContainer * CreateToolbars();5 l$ {$ e5 ?4 v1 S, M, U; z
在NewAddin.cpp中添加宏定义:' s y* Y" u2 |. k
#include "CATCommandHeader.h" # W" j: ?3 N& o
MacDeclareHeader(PartCmdHeader);$ j: ~% M4 [+ P/ U" v+ o
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: # e8 {& V( K$ W8 Z! z1 C
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);+ }9 J1 M {/ N9 x q* b/ @5 U; C
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
6 ]9 I8 g4 x2 Z* P9 m# U: |) q第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
8 k! M# X* J7 K8 p6 k+ O
5 e1 d1 E$ q9 R, dCreateToolbars里面就是要建的工具条和菜单的主要内容:
9 x9 ]5 A. d: Z3 H0 a( k, Y( f, @& }2 X" _" M+ l3 L1 y6 f2 ~) G% Y
8 ~, m) Q. @4 h0 l+ f# M
//设置工具条& S2 Q* W+ I$ T
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
! y n% k" p' Q) w' e' r0 e AddToolbarView(pPartBenchTlb,1,Right);
a o6 w1 L; |- D4 q NewAccess(CATCmdStarter,pPointCmd,PointCmd);
0 b2 E9 a0 R: p/ X8 ?% ^ SetAccessCommand(pPointCmd,"Create Point");7 `) V6 t1 V% T7 O( ]# ^: H! W$ T
SetAccessChild(pPartBenchTlb,pPointCmd); m ~! S+ [: D1 p' Q. F9 h
NewAccess(CATCmdStarter,pLineCmd,LineCmd);. {2 X: F! A9 U4 [: Q# [2 ]
SetAccessCommand(pLineCmd,"Create Line");: e8 j% n5 S f7 T8 r2 {
SetAccessNext(pPointCmd,pLineCmd); 9 {0 Q0 \% l; g" K5 W Q1 Y
# _2 O+ W0 y5 r1 ]; M
//设置菜单
`$ n2 s1 D+ D NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
6 G) }! j6 W& u; F) Q: q, ~+ k; b NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);3 ?% N s5 [! R1 R
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
; g$ |+ U- Q) r8 q' q" W" H. v SetAccessCommand(pPointCmdm,"Create Point");/ A( ?5 T$ c4 }0 D2 ?9 M& J% V
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);" ^# C' `; j/ o7 a" o: t9 ~4 `; F) ?
SetAccessCommand(pLineCmdm,"Create Line");
# R) ~+ u0 V& z
8 }" C* h/ h4 m2 y SetAccessChild(pPartBenchMun,pPartBenchSmu);
) V; n d. ?( @- J8 Z# Z SetAccessChild(pPartBenchSmu,pPointCmdm);( T! q x2 J& G" ~
SetAccessNext(pPointCmdm,pLineCmdm); ; k- d3 L& I" \! E5 b- `
SetAddinMenu(pPartBenchTlb,pPartBenchMun);6 M( f; |+ `! @ j0 k
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、- b- I" ]/ Z. C% I# H# y* H* |2 I
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、6 m$ N; T3 a, v- C3 }* ?
SetWorkshopMenu()、SetAddinMenu()等6 T! a h8 c; c. n5 z
NewAccess 的函数定义如下: 3 ]4 \" O- T* c* m- ^+ q& {* H/ D
Macro NewAccess (className,variableName,objectName) ( }6 o4 u. Y% j; l( ~7 w0 R
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
! b8 m0 h' R5 D# xCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表; ]" u! n/ {9 Q6 q/ U: h( z
示分隔符) ) s7 \8 z& o; P8 `; I, Q1 |2 o
5 ~" i! Z& t9 S' T, W% }- l2 g7 W3 J
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
+ E9 B/ C! K6 D4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"1 J8 \; q6 _; ~& L* n& W% v
在.cpp中加入:#include "CATCmdContainer.h"# n' Q9 L$ n# N/ y7 |
#include "CATCreateWorkshop.h"
: A' k/ b# n/ t. B) y在.mk文件中加入:WIZARD_LINK_MODULES = \3 Z3 u M4 W# w' U; e
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \$ y) @* i- }" Z4 m3 w
CATApplicationFrame
2 F$ I7 Z9 Z, } B# END WIZARD EDITION ZONE
4 v4 R% N1 M" P5 y# B, NLINK_WITH = $(WIZARD_LINK_MODULES) \3 J+ d4 ^1 [5 g8 g
CATApplicationFrame ! d9 C, X$ L, K7 o& U
在Identitycard.h中加入:
- a# z+ w8 ]' e PAddPrereqComponent("ConstraintModelerUI",Protected);
" ^4 \% Q3 M; N注意:每次换行时,都要加一斜线用来继续执行下面的module.
, Q/ Y; z9 e; C& `' B! J* M
2 X& J# u1 U$ R" k# D, i+ z
+ }# Z% Y% |' J& r+ F重新进入编译后,可以看到结果如下:
/ x4 V) |; c/ U- ]$ g
& u7 K4 l& @; o1 @/ x9 ]' q3 ^' J
0 U- \ a# Y3 J
, y% |0 h4 \5 _+ ?! m. b- B5 ]( l* u
% v9 Y8 l2 z7 C p4 i5 _
~5 [, }" q E# E" o1 L
1 g: W, I9 S- R) Z
|
|