查看: 7450|回复: 1

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

[复制链接]

4

主题

3

回帖

38

积分

管理员

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

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

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

×
CATIA二次开发入门教程---10 添加Add in菜单和工具条+ Y7 _5 L' X- Y8 C% {; v

6 y6 ]! h  ?2 p( _$ a* A所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。( t, v, p9 C: v
我们来在PartDesign中插入一个工具条。
( P' q- R$ G. q+ v/ o3 k% [/ J 1、新建一个module命名为myPartAddin,并将它设为active。, T8 o: I2 q# l. M  u$ ?
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框% t* w6 v3 P8 Z! I$ H/ E* O0 F
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
: N1 q9 z7 p/ M* \0 {
addmin.png
7 ]# C$ M9 A( e4 U1 n, Y1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
9 i9 G0 ?0 F3 ]3 s2 P8 \CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前5 |2 u. [9 Z& Y! }
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作( K8 E1 V6 N% I
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
# ^) a" v- A7 P  G" r% o( d下都显示当前工具条。

# N% j. r& B0 {2 F2 I! s% A& N8 n: K  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
5 j( l9 A' y  c/ b6 b( W% A+ N myAddin CATIPrtWksAddin libmyModule
& S3 b8 C5 U* r& ~, P  f7 C& g  g但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。7 L: }* y; V9 {$ ]6 X- f
在NewAddin类中添加两个Public函数声明:
$ Z% \) W: B( f8 F# e2 k: j
void CreateCommands();
) Y5 ]# l7 ^0 P( M, J* ACATCmdContainer * CreateToolbars();
& V2 D; I( M, t, L+ H, C! b- E- _
在NewAddin.cpp中添加宏定义:
* F) y6 N4 R0 W2 X; d#include "CATCommandHeader.h"        # P' T7 L3 D( }9 h, \2 g
MacDeclareHeader(PartCmdHeader);
- y( A- |  m/ U8 W
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
" {: w( w: F0 Y2 H+ K6 qnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);; M) W: F, H2 Z6 E$ g
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
: g+ h' n/ g* f
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
+ }* d  [* y0 o+ B% O# p- A- \! O  ^1 s- X  D9 E
CreateToolbars里面就是要建的工具条和菜单的主要内容:
; a- E- x1 t* B# C
( w, k! f# Y9 s( q% h/ E/ I/ |
6 l2 W) c2 q% J& S8 _2 O' X
//设置工具条& z. Q+ d4 G, c
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
7 E3 q8 K( N$ X; R7 E   AddToolbarView(pPartBenchTlb,1,Right);

. F, O9 ^2 M5 [& W1 I' |& U. | NewAccess(CATCmdStarter,pPointCmd,PointCmd);+ b- m8 \' [3 T+ Z
SetAccessCommand(pPointCmd,"Create Point");7 W, ~2 Q# K- L  T
SetAccessChild(pPartBenchTlb,pPointCmd);( ]9 A, J. \) i7 x" g
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
% \' I- p7 w/ Y5 Y& i SetAccessCommand(pLineCmd,"Create Line");
2 \6 H: l: k7 ]; q SetAccessNext(pPointCmd,pLineCmd);

1 e5 C9 q; z4 V
4 C/ Y  `8 ]9 a) J8 h; v //设置菜单
2 x7 C7 g- P9 \, j
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);7 g+ P6 y" h1 }! v$ `) |5 B( E
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);! c/ G, B( K- F. N6 I$ D6 g% h
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
4 M1 H; [; s7 m$ w/ M7 F SetAccessCommand(pPointCmdm,"Create Point");
6 g0 C- G. k1 B" X; d6 m% c% O. \    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
! W; Q( G, O9 ^    SetAccessCommand(pLineCmdm,"Create Line");6 \5 ]+ {4 [4 T+ Z, q" d9 `
9 O" X9 N; d. a) D1 [
SetAccessChild(pPartBenchMun,pPartBenchSmu);1 A  ?6 m$ y4 l
    SetAccessChild(pPartBenchSmu,pPointCmdm);0 T* r% c# V9 r: P# c0 ^- v3 N7 N8 X/ g
SetAccessNext(pPointCmdm,pLineCmdm);
4 v/ P* n% Z/ [) P- L  n: E1 i    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
# K. p5 k" }, {$ u工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
" o7 R  a/ n/ S) ]8 m& ~8 q! bSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、& f1 K% g( _1 D; H
SetWorkshopMenu()、SetAddinMenu()等
9 l  E% F( q+ T$ f7 P4 K. b+ n- M% mNewAccess 的函数定义如下: ; v8 Y1 O8 j) \' c  R* ^3 k
Macro NewAccess (className,variableName,objectName)
$ h2 J" }& x7 D5 Y% B其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
2 {" C) |9 t1 v& hCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
/ V1 I5 J. Q5 x& \示分隔符)
' \; |5 p% s4 F

" {! c5 K- s* V$ e* }NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。8 P7 F+ W# d$ b6 R( ]8 h
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
* ]; @, q# ~, y4 w0 [, l在.cpp中加入:#include "CATCmdContainer.h"( a( H7 J% Z, q7 V5 _( i, ~
#include "CATCreateWorkshop.h"' v! x# k( F; P4 _
在.mk文件中加入:WIZARD_LINK_MODULES =  \7 q$ n7 A! ]+ t! Z! J/ u* ^
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
6 l1 Y( e8 N! S4 O3 u9 FCATApplicationFrame
0 N7 E, Z  i6 g( g7 f" D! [: I# END WIZARD EDITION ZONE 3 {& d8 N$ U1 y0 z0 p( F' J- G; w
LINK_WITH = $(WIZARD_LINK_MODULES)  \
3 R$ q3 w3 o+ w" C. ^8 c. ^! O          CATApplicationFrame + ]6 a. G/ Z2 c$ P' R0 _% T, j
在Identitycard.h中加入:$ _! ~5 ?1 K- s
AddPrereqComponent("ConstraintModelerUI",Protected);
, I: t% s9 _( Y6 Y. }% j注意:每次换行时,都要加一斜线用来继续执行下面的module.
4 l) g7 d2 t1 T7 ?
( U( l, W- G/ g% _' Y

0 q# b* H5 Z9 i3 o7 t6 s  O9 w重新进入编译后,可以看到结果如下:
  r0 P, k' b+ \5 P( c5 h! D" m2 F, [
; y! w; D. r- B+ m1 {6 {- {& ~
tool.jpg ; S, H* H9 y' ]6 a9 J. \7 N$ _3 Y
& o. S' h( }0 N6 d
# K* E: \+ E7 S/ N/ R1 C' n

/ X0 V% \" D$ h" b( R9 k7 t" \- @4 ?  T1 ]/ v4 ]$ F
& b( W4 Y0 c* Y& i4 `
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

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

本版积分规则

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