PLM之家PLMHome-工业软件践行者

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

[复制链接]

2019-4-9 11:30:42 7340 1

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
# J+ _2 ?1 @: ~/ G; j4 h
; _8 {1 }3 c/ F6 b  T所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
" W* z6 f5 a( q( P; Z* [  X/ l我们来在PartDesign中插入一个工具条。7 i$ {# Z5 e& f( B: n
1、新建一个module命名为myPartAddin,并将它设为active。" {2 A, {; A$ T! i$ i
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
* @, E: Z* U# }4 s输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
( b6 i. @6 p+ F, m# p: j+ n8 r1 X- |
addmin.png . Q+ ?1 [! V0 T3 I5 R
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
) v  `# [' P, S8 bCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
, F5 p* @% q8 b* V4 U6 l工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作; j$ W. I) o; Z- s% V. G/ [' Y
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
; M$ H  \3 U# T: `6 o7 W下都显示当前工具条。
' G+ r* i* n7 g) T
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
* S- \6 v; o7 F( }+ z myAddin CATIPrtWksAddin libmyModule6 _$ Y' N# o7 U
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。: ]: P/ M7 Y' ?" K: x5 I
在NewAddin类中添加两个Public函数声明:

3 B- r* n3 ~0 a1 m" Ivoid CreateCommands();
1 I8 D2 C" }# w( p% @* J: lCATCmdContainer * CreateToolbars();
2 B7 e* v; k8 t6 B4 a6 \8 w) ]
在NewAddin.cpp中添加宏定义:( ~# e" ^3 L0 c
#include "CATCommandHeader.h"        
* E; t' M9 ]  Y5 `MacDeclareHeader(PartCmdHeader);
0 U! i4 D/ {/ k- T8 n- Q
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: % ?7 B% K) k  m3 L8 ]
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);) |( A6 i) O6 r9 _. N
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
. a# M! {+ e& F! H7 j; s4 b& y
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。: \4 V/ C, Z( ^: g
! h# T; p* }' R4 i+ B- [
CreateToolbars里面就是要建的工具条和菜单的主要内容:3 l& l9 X# Z/ D& ^0 r* @

& a- s2 a1 c; E# C) \
$ E$ l( v; J0 C( |$ a- ?9 o  ^
//设置工具条5 f2 B" b6 D0 `& ^/ \( r
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);/ n, c+ U0 I" }6 ~; O& H( u
   AddToolbarView(pPartBenchTlb,1,Right);
" m# A6 o" N, f8 e8 s
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
' h: R% W& f$ f, N7 @# q3 @ SetAccessCommand(pPointCmd,"Create Point");2 @3 o+ Q. {: @/ c0 R8 n
SetAccessChild(pPartBenchTlb,pPointCmd);
$ Q% \& r& F8 g9 q6 @ NewAccess(CATCmdStarter,pLineCmd,LineCmd);0 K+ p& k, [1 x% `
SetAccessCommand(pLineCmd,"Create Line");
2 B0 k  c/ n5 e% C SetAccessNext(pPointCmd,pLineCmd);
$ _& J, G, {: `) _& y
- T! B5 n1 E2 X% d
//设置菜单

4 a8 @. ]1 L5 s( r NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
$ t% ?9 I2 Y, C3 c! e( R  Q NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);1 I5 ?- R, D) O- m$ a' z
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);9 s9 O% {0 K/ x
SetAccessCommand(pPointCmdm,"Create Point");
# M+ z/ V/ z" J, r4 N; k( z    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);. v, A( G0 b1 ^4 w
    SetAccessCommand(pLineCmdm,"Create Line");$ j+ I4 [# O/ o& c: x! B4 M8 b
+ f. D9 Y7 }6 g, d* V. F- H
SetAccessChild(pPartBenchMun,pPartBenchSmu);5 g0 h% W+ j6 B; x4 ~, j
    SetAccessChild(pPartBenchSmu,pPointCmdm);; q. V6 r" u5 Z0 q7 I8 `: S) U( S
SetAccessNext(pPointCmdm,pLineCmdm); 6 o% f  e+ ]2 j
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);* r/ ?4 m; j7 ~% v
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
3 W4 M( B$ I9 z* I% LSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、) F9 |" L" E% g* `& I6 t
SetWorkshopMenu()、SetAddinMenu()等
* D: C( H% r$ CNewAccess 的函数定义如下: 5 }7 ^* l) W5 c  i" r; n' M
Macro NewAccess (className,variableName,objectName) 7 w4 d, I$ I' [
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、7 [3 g. {$ @! U3 R' G
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
! ~1 l# g0 `. A, x+ M& ]示分隔符)
6 w! d* H; [6 }# B8 r$ z
4 C# b, T* w( k) W0 C! Q- {
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
! ^: _, G- F' w) ?0 u- Z4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
; f0 r" L  @: z/ J) o5 i在.cpp中加入:#include "CATCmdContainer.h"
9 d3 X- {0 s. N4 ^, D+ R; x#include "CATCreateWorkshop.h") `: N, v  }, Y; _
在.mk文件中加入:WIZARD_LINK_MODULES =  \  @8 T+ Q' ^# N, ?
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
, }, R+ H& ~+ {6 V! ~2 K$ TCATApplicationFrame3 G( p8 m( G  _( F
# END WIZARD EDITION ZONE
7 I  E( C" X8 F3 [6 U' [5 [LINK_WITH = $(WIZARD_LINK_MODULES)  \7 t. u3 k0 v) ^
          CATApplicationFrame
3 Y4 m; P9 e4 o+ [, s在Identitycard.h中加入:& y" f% `4 \9 C% v
AddPrereqComponent("ConstraintModelerUI",Protected);
* b% W+ [5 d! ]$ ?/ D; f注意:每次换行时,都要加一斜线用来继续执行下面的module.

' v$ h! \0 |: c0 a1 |: o- Y! x) w$ M+ {3 D2 S1 F

) a. t1 R" X% z. @重新进入编译后,可以看到结果如下:
& e4 X. s& K4 M! _' U, b0 V$ k+ b  C% L7 R, }' _
tool.jpg
' ^1 s& F9 o5 [* `- j( W
. G: o% u' N0 i5 v9 M) L, z

0 d  ^6 u) k7 t/ i) d2 k/ G; |' s

0 `# f) d, K$ J- H8 _" V  B" p, A% u) j- G
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了