|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---10 添加Add in菜单和工具条, g8 @, J: B+ J0 j$ K, t
& {. @' `2 {* Y' }+ N所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。; T5 @6 ` B, `" S8 R
我们来在PartDesign中插入一个工具条。0 ^" e$ E9 {5 h% o1 b, `2 l- R
1、新建一个module命名为myPartAddin,并将它设为active。
, `5 r/ j# C9 d R1 h+ {4 W$ @ 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
6 D& n* A1 k) D1 ~( a0 J: @输入addin的名字,点击add再点击浏览选择要执行的接口,如图: ~4 t4 F* ?$ O9 j( M; S7 z3 N
1 W! @. U0 |* B" a: X$ n1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
' T- V4 f4 \" N, \/ V+ ICATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前. j3 x/ M g5 e: t
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
4 H' o& g$ e) B, ^3 |. ~! V! y% ~台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench0 m6 J8 ~7 s( n4 @
下都显示当前工具条。
$ v+ u+ ~6 u5 M" U5 z& z1 E. A5 i9 H2 K6 @ 3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:$ Q7 V/ }* C1 A+ P" M# Y% n
myAddin CATIPrtWksAddin libmyModule& O3 m( i4 `$ E/ d3 U/ H
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。% o9 h }/ r7 p* V( f1 r) t9 J
在NewAddin类中添加两个Public函数声明:
: E ~- o/ R+ `/ ~& L/ svoid CreateCommands();
/ `0 i# R1 p' W+ e% e, M1 C% ECATCmdContainer * CreateToolbars();1 t" e0 W9 v+ j3 I% [
在NewAddin.cpp中添加宏定义: a; B* F0 a/ C9 t
#include "CATCommandHeader.h"
& y) B( a) j- ~8 |0 e( RMacDeclareHeader(PartCmdHeader);
6 F! j$ f T8 W, ^这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
0 {0 o, n6 R* h8 o; F. p0 n7 t! ? Inew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);: y1 r6 o4 L2 e- [- S
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);* Z+ u' ?- s- i4 V
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
# ~4 a3 P. E* R0 r7 @9 i6 M$ f' l- f6 _5 X* {" ^9 i; X
CreateToolbars里面就是要建的工具条和菜单的主要内容:5 q$ ?7 ?6 S7 _3 a( e# M
; J; Q0 p$ K2 b& N0 N0 U7 k+ n8 M" H; R
//设置工具条6 i D2 ]* T8 a) M0 S2 Y
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
6 |0 Y( K9 K9 ?7 O8 [ AddToolbarView(pPartBenchTlb,1,Right);
4 T m3 @* z, p/ U7 y) C NewAccess(CATCmdStarter,pPointCmd,PointCmd);
! M% G; {# B: w( r% t SetAccessCommand(pPointCmd,"Create Point");
3 [+ S9 X; }9 Y9 f. w! t SetAccessChild(pPartBenchTlb,pPointCmd);
2 F8 ?! r' k! t" L. y NewAccess(CATCmdStarter,pLineCmd,LineCmd);
$ o0 M, m: M/ j" ~ SetAccessCommand(pLineCmd,"Create Line");
, r4 [3 T0 d* F' ^. d. c" c! {& X SetAccessNext(pPointCmd,pLineCmd);
* D( T, b7 @7 j. Z ( A8 m0 D& H5 C/ M c* e9 \9 Q
//设置菜单
! I& @: b. _ c& z+ w NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
9 u, G7 J4 R7 U9 c NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);4 _9 Q2 X: T9 B5 `" W! J
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);5 ] [5 h8 W3 D/ i, x
SetAccessCommand(pPointCmdm,"Create Point");
8 F7 X5 U$ L2 M8 {2 p NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
3 z7 H8 @% L6 w8 k4 B2 U! e- O SetAccessCommand(pLineCmdm,"Create Line");+ M1 k9 ?! p1 C* \
0 `' r( X& r I SetAccessChild(pPartBenchMun,pPartBenchSmu);& [9 x& C4 e7 T! B8 H$ O3 ?& ]7 G9 |
SetAccessChild(pPartBenchSmu,pPointCmdm);
9 G& K9 D# M" v! e g SetAccessNext(pPointCmdm,pLineCmdm); ; j% T: M2 L2 S
SetAddinMenu(pPartBenchTlb,pPartBenchMun);: ]% d% r- r8 d" M! {, b
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、7 l9 Z! N! }' ]: r
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、4 M! N- Q# x3 E; d$ r
SetWorkshopMenu()、SetAddinMenu()等. B1 L4 M+ Y6 I0 t8 e
NewAccess 的函数定义如下:
$ f9 ]& v5 m0 b2 z: BMacro NewAccess (className,variableName,objectName)
2 X) A7 }7 H) H1 o& Q! F E其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、) y& b' ?+ \, d
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
5 Y' Q4 g* Z5 @示分隔符)
- y: ]7 }9 D% {+ E( M
/ c/ q; {' z" L/ w$ x% D* eNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。# W K2 o) L& K
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
3 p8 |9 B4 v7 t1 y, K在.cpp中加入:#include "CATCmdContainer.h"
& ~9 [# i% B! G0 A#include "CATCreateWorkshop.h"5 t7 J$ c0 l% H" v$ O
在.mk文件中加入:WIZARD_LINK_MODULES = \
/ O3 e' r6 D0 N0 r/ [; o1 \JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \& A& Z y6 C+ c4 F) f
CATApplicationFrame( v$ \8 b {8 @7 C0 t
# END WIZARD EDITION ZONE 3 h1 O* @& D( K+ p
LINK_WITH = $(WIZARD_LINK_MODULES) \
( f+ ?/ G' R G CATApplicationFrame 4 Z4 X1 ~ m8 m# [ G# R5 R, ?
在Identitycard.h中加入:
9 D: [7 H1 N: K' e( BAddPrereqComponent("ConstraintModelerUI",Protected);. q/ Q+ I$ z; k
注意:每次换行时,都要加一斜线用来继续执行下面的module.
, B; u/ L# Z5 w
8 g3 D' a4 \$ S8 G) t/ @
& N0 p8 Z- P7 u: i重新进入编译后,可以看到结果如下:* k7 w+ P- b4 ?
8 k$ B0 }$ X7 l/ ]! b" b
4 B5 g: V9 F1 M3 V; n, q( a$ J
# Z3 A3 u' E5 Y+ P7 }4 k1 [2 R% }; ?% f) g5 o9 a' E+ q/ K/ i B$ ?
; ?. C9 T, r* G" J6 g' b% L! z8 l7 k( q* R* |
% ^ d9 r( @, H7 [1 V7 }
|
|