查看: 7626|回复: 1

[资料] CATIA二次开发入门教程---10 添加Add in菜单和工具条

[复制链接]

6

主题

4

回帖

60

积分

管理员

积分
60
发表于 2017-1-19 22:46:47 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

×
CATIA二次开发入门教程---10 添加Add in菜单和工具条( i3 ~0 e5 Q/ i8 O6 b
" b" n0 \" \# e( f3 |% d
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。' d6 e& o9 g% f/ g0 L" y8 @
我们来在PartDesign中插入一个工具条。
! t; |  G' @. q 1、新建一个module命名为myPartAddin,并将它设为active。
& p+ t$ E$ d# W2 c 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
# y" D" ^: Y, R! U! [* T3 z$ d- [% O输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

. ~( _( N5 N4 q$ V8 r addmin.png 7 E4 Z; ^. U" e- o. ]
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,( B0 H' O6 h6 @/ W8 X4 k& Z9 W+ e( D9 F3 K
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
) Y3 v' G- B& @/ u! ]3 c工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
+ a- V' q$ @7 w' }5 M" N台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench% x$ x' n9 U+ m4 G
下都显示当前工具条。

% T0 N* x# Y. \. o$ H  N: E& Y  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
2 w& e+ ~3 p( K7 a/ c6 f# T) s myAddin CATIPrtWksAddin libmyModule5 u1 C8 z) F5 H8 S3 E
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
; @% w3 b/ S2 q在NewAddin类中添加两个Public函数声明:

+ o2 y: w+ K: t3 H, `4 b3 ~, nvoid CreateCommands();
! V+ B7 z! w: K4 ?CATCmdContainer * CreateToolbars();
1 k( Q- x3 G4 D# P  j
在NewAddin.cpp中添加宏定义:5 h1 a- a! t! `3 |6 k8 y+ _1 d
#include "CATCommandHeader.h"        
. r" J( k0 C+ |$ ]0 {# dMacDeclareHeader(PartCmdHeader);
# H- ^, K* l2 t2 W
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
. `" L: q, y/ r" O, s# snew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
' s3 ^3 {3 `( Enew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

+ S( {4 J. f( W- t8 b5 e第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。* t& L0 Z& N8 ?" V

3 D& r( O* A! N6 c7 U+ }+ ]CreateToolbars里面就是要建的工具条和菜单的主要内容:- ?+ s' u* I! [/ X2 u: ?2 |/ ~# f9 e
9 A) E- Y) @( U5 @# o

# p2 E: @- m3 B+ z, K //设置工具条
# W4 S" W& O! ] NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);, ]$ j/ R/ d7 x) L, b/ R) @
   AddToolbarView(pPartBenchTlb,1,Right);

+ z7 N8 e5 I3 T3 F& Y1 }$ [/ f NewAccess(CATCmdStarter,pPointCmd,PointCmd);
+ k; R, S# C! E7 a0 `. M SetAccessCommand(pPointCmd,"Create Point");$ G' _% d) F! V, U% z
SetAccessChild(pPartBenchTlb,pPointCmd);
2 r# W" y# x  h' P; R& Q9 a NewAccess(CATCmdStarter,pLineCmd,LineCmd);. }9 O5 @. ^2 `0 O2 j$ [% `' Q
SetAccessCommand(pLineCmd,"Create Line");3 E" Z2 {% l- }# G  Q# }& U
SetAccessNext(pPointCmd,pLineCmd);
& Y" Q: R9 k! P5 y

' G2 E/ D* F) ^. @ //设置菜单

  l) B- [8 l6 O; X* ]! N NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);; ]5 E) n& i! _6 P
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);% o* t* q6 C7 U7 X  o5 l# P
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);; I. o4 O( z8 n( E' d- i" K
SetAccessCommand(pPointCmdm,"Create Point");
$ |2 R$ ^9 Y& H5 H3 C4 J- w    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
; ~4 F+ p0 _! N, p9 i4 M, ]    SetAccessCommand(pLineCmdm,"Create Line");
4 ]% `/ u0 U- b7 A  ] 3 }- T3 g' F- f" A
SetAccessChild(pPartBenchMun,pPartBenchSmu);% p% ?- l+ v5 K6 n/ _
    SetAccessChild(pPartBenchSmu,pPointCmdm);4 A7 ~0 v- \6 B  }4 ?& Z# p
SetAccessNext(pPointCmdm,pLineCmdm); 8 p2 B9 s2 D* [$ u
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
9 X* i4 i9 W% E; T0 f" ~工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
1 h# T) m) M( l8 ]  d7 ZSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
& x- ]# M% c6 F* N" |SetWorkshopMenu()、SetAddinMenu()等
! U, _& s9 |0 Z3 FNewAccess 的函数定义如下: 7 e$ J7 A( k0 ^$ Q' U( z, N
Macro NewAccess (className,variableName,objectName)
' f  t; H+ \  ]8 z其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、! ?, S! P' Z! f4 E% J6 T
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
/ B, m) e* J4 Y. g示分隔符)
1 `  K/ ]) {, d2 I( v' |! \$ p" V

$ L! v: r! l; f" w4 V: d; bNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。! [# c3 v6 V* e
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"0 u$ x# O, c  L/ d
在.cpp中加入:#include "CATCmdContainer.h"/ Z1 l  g: w9 B; I+ s
#include "CATCreateWorkshop.h"
/ f1 Q, H! z% G在.mk文件中加入:WIZARD_LINK_MODULES =  \* y* l0 k8 f: L6 f, s0 ?. R# i3 I  d
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
6 a* a1 N- b) x. N! B' YCATApplicationFrame" U: j  u" k1 x/ `) @
# END WIZARD EDITION ZONE
& d. q- D9 s" q. L; |9 M( f* bLINK_WITH = $(WIZARD_LINK_MODULES)  \$ K; }% y4 y4 C
          CATApplicationFrame # }# N- G, ^2 A
在Identitycard.h中加入:
; S) r2 W2 R8 IAddPrereqComponent("ConstraintModelerUI",Protected);! F& E) O* i+ V9 O' d& q  U. g+ Q
注意:每次换行时,都要加一斜线用来继续执行下面的module.
+ n7 n' X4 s' v8 \2 A7 n7 L9 {8 Y- z
/ P( g7 E- G, u& H: {9 I
9 Q5 \" Z  Y, s& n6 @" \# q/ z" H: g
重新进入编译后,可以看到结果如下:, e6 t  q2 U/ v3 e0 D/ s
  t  w" l5 h; s* j0 @" t+ r3 j- l* [
tool.jpg , I, y1 A; _8 m; C$ Q

" ]" O  e- t' z

8 E# N$ s* x; M" c" u+ p3 U& o, s: X+ I6 ~5 j# a& p* r. p% X+ E
% F! U9 s! F8 @8 h

* h& B5 Y6 v( V3 p! e. a! Q; K
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部