|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
' {, W, _: K( q
. B6 {! v0 x( `3 H所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。* d( o5 O4 q8 C
我们来在PartDesign中插入一个工具条。2 `. p# n6 r) ^6 S" h4 H" n# q
1、新建一个module命名为myPartAddin,并将它设为active。 T5 p* o" r( C& B8 h' ]
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
: Q! h W1 h/ A$ P4 K! H输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
) d( N9 V: l: n- t
/ X% Y9 `2 _ @( Z& A/ p$ L* }5 u I1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,4 I# h2 J1 W4 T% c- l
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
+ H- h9 j2 D; @) F; b4 S工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作0 c2 M) e2 T/ ^! Y+ G
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench; S$ e7 k/ b; \& B! Z/ l0 q9 H
下都显示当前工具条。
) [( v9 G9 H3 _6 J$ t& \ f+ _/ h 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
$ P' V4 I! {4 o8 g8 { myAddin CATIPrtWksAddin libmyModule3 T6 U$ Z% @1 t+ \* h* z
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。7 `& j* T6 W+ S1 V1 r' K
在NewAddin类中添加两个Public函数声明:6 v- x2 ]9 u; g, n; F! F5 B
void CreateCommands();3 m1 Q. q: h+ ~. e& }, h* k
CATCmdContainer * CreateToolbars();
& I/ Y# [, p* Y6 R; a! {/ ^在NewAddin.cpp中添加宏定义:
- |5 ? [" N( G$ o' ^+ e _#include "CATCommandHeader.h"
' `: h Y0 Q) ZMacDeclareHeader(PartCmdHeader);6 G& d- F* l( O8 |1 |
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
. M y7 H9 s. V/ l( N9 q8 Fnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
" ?; t. t6 g+ C: K4 onew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
3 V3 j1 t: |7 k- Z! ]2 L第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。0 v; V3 H8 z! m0 f/ [+ s E' f
6 C+ ?, }- I5 y+ p- K& v
CreateToolbars里面就是要建的工具条和菜单的主要内容:
- A, }9 W6 x8 b* d4 J! A( q4 H$ V
* e2 m& z2 E! P/ m# F- P" O4 P: Q4 c \3 D
//设置工具条
/ F# q5 h2 B( _% z/ S NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
_2 t% h4 q8 U+ E7 j, } AddToolbarView(pPartBenchTlb,1,Right); W- L$ o/ S" b6 o4 p6 q/ C
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
1 N& c& X8 \2 k6 ~- W" _ W) C9 A SetAccessCommand(pPointCmd,"Create Point");. M* t( r8 [9 n
SetAccessChild(pPartBenchTlb,pPointCmd);# B9 l1 h+ J) W- m8 h
NewAccess(CATCmdStarter,pLineCmd,LineCmd);2 U0 d e- x* G8 X$ h
SetAccessCommand(pLineCmd,"Create Line");
1 F2 V* V9 s, I6 {/ z# G SetAccessNext(pPointCmd,pLineCmd);
& k3 f$ {& u. A. j4 D; _
4 g- j7 N0 v' B4 F1 }& e5 C //设置菜单) k1 n6 @5 X3 M
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
3 Q. i8 p% N' _9 | NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);6 T+ K) h7 S* J1 X/ U
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
; g! G1 \ y: g( c+ k$ q SetAccessCommand(pPointCmdm,"Create Point");
9 q" q: ^# `% ~ NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
, y ?+ ]. s4 n( a" b2 | SetAccessCommand(pLineCmdm,"Create Line");" n) M; m4 p8 \# L3 H, f
6 f) Q% x- v6 ? SetAccessChild(pPartBenchMun,pPartBenchSmu);
; u: q1 }4 z& V' W- b ^- e* E SetAccessChild(pPartBenchSmu,pPointCmdm);
6 J4 ?( h1 a. i. V. G0 S/ c SetAccessNext(pPointCmdm,pLineCmdm);
( S1 w) C0 f) I) t$ k. ^5 s& R SetAddinMenu(pPartBenchTlb,pPartBenchMun);
* i; S4 I, w, v- Q工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、# {$ M# z/ u2 q2 J" n
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、 d$ O v! h9 Y, _
SetWorkshopMenu()、SetAddinMenu()等/ z" P6 ]" o- Y' ?& C
NewAccess 的函数定义如下:
P C/ q) p$ |; `& {1 ?Macro NewAccess (className,variableName,objectName) # _, d2 E2 g+ o; A2 F6 p M: s
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
; w+ I) X( b: s, N! v" ]$ FCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
( M+ f- |) E' L; R" c) h1 J示分隔符)
1 x9 e, E! B- h- W% T
( P* E3 l# [/ E3 c) cNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
1 a! a9 D- q* f$ K! a4 H" w8 [4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h" K4 z C3 }7 N; a
在.cpp中加入:#include "CATCmdContainer.h"
; w) a; A1 m9 @9 F# W* d- d0 \( ?9 u#include "CATCreateWorkshop.h"
, P0 A9 K i) \2 u! w在.mk文件中加入:WIZARD_LINK_MODULES = \# T" X7 l: y2 J K9 |
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
0 D, C9 H1 p. b- c# gCATApplicationFrame
- ?- X% N$ a+ g% F a1 Y# END WIZARD EDITION ZONE
! `- [9 O: T/ y5 y4 H. [! y$ OLINK_WITH = $(WIZARD_LINK_MODULES) \
. f1 ^5 v b/ |2 i$ D$ Q CATApplicationFrame
) X" f* `1 H9 N/ h4 ?7 }2 M在Identitycard.h中加入:( w! ?2 P! @% F
AddPrereqComponent("ConstraintModelerUI",Protected);5 d5 h9 f. D2 ?8 h" z
注意:每次换行时,都要加一斜线用来继续执行下面的module.
7 F2 e9 |% p o. ^! o0 Q, l: O: o- f3 q' x( ^) E
1 B8 _6 |2 x. \: Y$ C& X9 S/ z0 R重新进入编译后,可以看到结果如下:
9 J3 M- O- u% I8 r, Z# `) m, ~1 R
: }* F; j! S& T* G+ B- M. X- y0 L9 E
, x7 q1 {- S2 c$ M2 m, J s9 @2 P
; Y$ V: U7 K0 E1 S8 C, l
! b4 {7 m: q; j- E
4 w, A/ Q( l3 R7 J) ` |
|