|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
5 v, z) r8 W) u; j! B- c. h. |, I" E
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
' R- x7 ?: Z* Q1 B我们来在PartDesign中插入一个工具条。
/ ^; p7 e2 U# K 1、新建一个module命名为myPartAddin,并将它设为active。' w# U& G" V" c3 u3 i: i
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
/ S$ i4 g5 n3 }7 v输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
6 E" C* o) v( c4 `; O( z
3 h9 ?: A' E6 g; O6 X. }
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
. j# ^6 c8 ?1 `8 x* W# R7 vCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前5 B: g4 y6 z" S! `
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
- E! `9 ^1 G- u8 {* E台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
! U. l5 b( M3 V( I7 o8 q下都显示当前工具条。
5 v$ ^3 h" P+ t. { 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:% x' _3 Q8 v3 C' Q1 t4 [7 |
myAddin CATIPrtWksAddin libmyModule4 q4 e; i3 i- O* v# a
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。# S8 K8 y/ Q9 y1 N5 K0 D4 j
在NewAddin类中添加两个Public函数声明:
" p0 d; M$ l$ H$ u/ }9 T! c' Pvoid CreateCommands();# ~; l( \! X- p0 D! Z. i K4 Y
CATCmdContainer * CreateToolbars();
+ b0 k" B+ s) Z- e在NewAddin.cpp中添加宏定义: P4 w) T3 M# B$ J. F# `
#include "CATCommandHeader.h" 7 o1 j3 Q, V0 Q1 m/ m
MacDeclareHeader(PartCmdHeader);
" ?( C0 h9 I1 O/ @这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: " K) A! _/ ], ^, Q' K
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);2 u+ Z* o Z8 G- n: r
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);$ P. e7 Z5 z4 b! {0 q# z
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。% ]( M7 k3 l& f+ \$ L9 v. G
, \0 Z ]8 _0 A' P: o* i& _CreateToolbars里面就是要建的工具条和菜单的主要内容:* ?* ?4 f- E4 p/ X2 V8 K- \
- D) k3 w' `! t
( u/ ]8 K3 B' g7 B; {2 ~ //设置工具条8 H7 _% A7 d4 a8 {' q
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);2 V1 q# x0 G/ C s+ x/ ~2 W# ]0 N
AddToolbarView(pPartBenchTlb,1,Right);7 @2 Z+ N, B" m) m0 a
NewAccess(CATCmdStarter,pPointCmd,PointCmd);, }/ D1 I7 ^7 x2 d" j5 N
SetAccessCommand(pPointCmd,"Create Point");& a" }9 r1 i2 L8 {8 p5 N7 ~
SetAccessChild(pPartBenchTlb,pPointCmd);! _5 a0 |3 z6 S, U9 B
NewAccess(CATCmdStarter,pLineCmd,LineCmd);- S4 s e7 e, }1 I; J9 h
SetAccessCommand(pLineCmd,"Create Line");; C" O; y7 c" P/ u. i- W
SetAccessNext(pPointCmd,pLineCmd);
/ D# U+ N$ `$ [* R: t l
& y; [; Q( g& K \ s //设置菜单+ p8 f+ Z1 L8 ~; |7 S
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
* R/ D6 x+ Z( N NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
( v' J7 P! X& G NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);( E0 ~) `2 r/ y# I8 L# Y
SetAccessCommand(pPointCmdm,"Create Point");: t1 u; C1 i$ l: s& c8 z
NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);( i8 v0 E X# D- {# E: D {# Y! T2 M
SetAccessCommand(pLineCmdm,"Create Line");
) |* D& M5 K$ s5 z
; ^, T# @7 @4 o3 _$ \0 c SetAccessChild(pPartBenchMun,pPartBenchSmu);
- i: R8 k+ N2 a8 W! o SetAccessChild(pPartBenchSmu,pPointCmdm); i5 G7 j, k' F
SetAccessNext(pPointCmdm,pLineCmdm);
2 F7 f4 a) l8 M SetAddinMenu(pPartBenchTlb,pPartBenchMun);# ?% e0 {# N& \
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、8 w5 U& i8 W6 ]: U2 j7 M
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
5 @; [+ |% c+ l- ^. p: h6 fSetWorkshopMenu()、SetAddinMenu()等 u" e; Y) L: T6 Z; T! z& C
NewAccess 的函数定义如下:
2 }2 }( A8 o$ C# P$ M% Z; m$ BMacro NewAccess (className,variableName,objectName)
! E- L/ ~9 k, n/ h其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
% Q% _! t9 S* q3 C7 l& ~# S: V& `# U# iCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
/ d$ x# [+ \% |1 W6 c% H示分隔符)
" n+ f! C% t- a0 ] ~$ O2 M0 D' Q, |* z1 f, t
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。6 i7 N4 R% k1 I
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"1 x$ `0 ]5 Y( p2 ]4 e8 z
在.cpp中加入:#include "CATCmdContainer.h"
3 o2 @4 g6 Q3 [3 h1 A. s" S#include "CATCreateWorkshop.h"
" Y3 ? I4 e: \2 q. C& ]9 I: H在.mk文件中加入:WIZARD_LINK_MODULES = \
e! A3 R5 d: S( i; xJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
6 _& l% g: N1 L, K. N. XCATApplicationFrame! r, {' b5 z, R* k# ^5 s
# END WIZARD EDITION ZONE 9 J# t2 S' I/ n5 T! E6 t
LINK_WITH = $(WIZARD_LINK_MODULES) \
) U! ?$ u0 z0 X0 N# N$ | CATApplicationFrame
4 t4 W1 a+ u" B- o1 i, F在Identitycard.h中加入:
' q5 [' T6 B7 Z& }! ]7 t8 HAddPrereqComponent("ConstraintModelerUI",Protected);
* D' G7 P. L6 c4 t+ M, B( T( {- G注意:每次换行时,都要加一斜线用来继续执行下面的module. o9 O- n0 B x
# s: z- l, a& ?& g
" ^4 I, Q% y# s重新进入编译后,可以看到结果如下:' p0 I1 m+ u- \* `6 i
- x5 x' ~2 ]$ j! p) P# t' N3 M
% R# |5 [/ K0 D" E4 N# ^2 D4 q! o- u! I
' w M" M, x* A/ j$ x8 h
8 u) m* [) M' ]0 x) }2 `- Q2 m* k% v4 l# p+ `) m
2 W* g- F+ V2 _$ ^3 k% L2 I G |
|