PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

admin 发表于 2017-1-19 22:46:47 |阅读模式

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
7 W; r0 x; X4 d- j' ?" R9 q* v/ ]& s
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
" o+ A' [* g* |: L$ H( j: r( m1 O我们来在PartDesign中插入一个工具条。
; ~$ P' T: A4 t' ?- k6 q 1、新建一个module命名为myPartAddin,并将它设为active。* Z0 G( J$ V; s( G, s
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
- S, W+ e5 j. v) E0 g. g输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

! `/ M. s* n% Y addmin.png 7 e7 r8 u/ L+ L/ q$ h4 n
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,0 V3 {, P  K4 k3 R$ {; Y
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前+ d: b# c( S3 O
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
$ N: B6 D3 g$ i+ }8 @* b4 `+ U台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench: g7 ]; ], I2 u; m+ u5 h* R
下都显示当前工具条。

" p2 d- |8 s; O1 o- b- A! z  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
( M9 x! o! p- y6 H# L myAddin CATIPrtWksAddin libmyModule, Y2 B" z- `5 a# u* f* U7 w, i
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
, Y* ~- z1 `5 Z. c" _1 d! o: Q# f在NewAddin类中添加两个Public函数声明:
5 Y1 p0 ^, G" P+ X" ~: @4 K! {: o
void CreateCommands();
2 \% ?! Q$ w9 {2 r8 ~CATCmdContainer * CreateToolbars();
+ e% Q% e; n/ K  D6 O! m3 M& e0 v
在NewAddin.cpp中添加宏定义:: _! ], Y% f& Z* C4 a* c
#include "CATCommandHeader.h"        $ k' i7 m2 n: ~  l/ I! Q5 I
MacDeclareHeader(PartCmdHeader);

: _( J5 o0 r; {这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
$ ~& V' b) Y0 Y, ^: ]new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);8 v# u( d3 [) X: n
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

! \$ J1 P5 n& {2 Q  C/ g第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
4 M: r0 l" V5 n, s/ ]0 `" w6 N; g9 O3 v- R8 m- A1 L. a+ R, p
CreateToolbars里面就是要建的工具条和菜单的主要内容:
8 C8 q. n6 [8 I* G. @$ O/ p6 F8 b$ M7 r0 V% `( M5 q- e
$ U0 p# G2 n# s' X2 A
//设置工具条- o  \* H$ Q4 k3 L9 A
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);9 ~9 N4 I! K* {9 `3 E3 }
   AddToolbarView(pPartBenchTlb,1,Right);
3 q6 }. X7 N2 r; O9 o6 t5 U
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
6 @9 c+ f4 J, m SetAccessCommand(pPointCmd,"Create Point");
7 f8 A. u( K5 E1 {0 V: P9 _ SetAccessChild(pPartBenchTlb,pPointCmd);
% _3 ]/ ]" _5 ?. @ NewAccess(CATCmdStarter,pLineCmd,LineCmd);
/ J4 x+ p- h4 g1 s SetAccessCommand(pLineCmd,"Create Line");0 N  Z" A4 \5 @" v4 c4 B
SetAccessNext(pPointCmd,pLineCmd);
. w9 q  N& X: _
. Z4 g: h7 Z, i1 g3 o0 |
//设置菜单
& e: f: Y( l: S/ i! {1 [
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);& a7 V( T7 a0 b+ I- }4 V
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
9 y$ a7 y' z$ V0 ~; w NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
: S% M3 l/ x  P* V: v$ Z2 V SetAccessCommand(pPointCmdm,"Create Point");
( W% ~: Z/ k9 |/ R    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);3 T3 ]  v* ~8 k
    SetAccessCommand(pLineCmdm,"Create Line");
6 T- F4 I  h9 a2 K& R9 c5 D * f$ f0 M. V+ ^% q4 {0 y% a) }! i
SetAccessChild(pPartBenchMun,pPartBenchSmu);
( G6 f: B' e; h+ `" v4 E: R5 |+ O% s    SetAccessChild(pPartBenchSmu,pPointCmdm);; P1 \" K* C$ P0 v
SetAccessNext(pPointCmdm,pLineCmdm);
; l7 i* D2 y+ j, g. F+ H* T    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
& Q# U+ o, v- J! K/ c( J& m工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
8 K! y' }2 x% ~# r( A. |7 zSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
! ?/ p, z8 u: C( Z3 f8 vSetWorkshopMenu()、SetAddinMenu()等
0 M3 y% a5 P5 g( h0 b# m3 x' uNewAccess 的函数定义如下: & x* l) z6 ?7 R- @) K
Macro NewAccess (className,variableName,objectName) & g* Z: c( X& l8 \2 P( N
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、* X, i  B6 ^& w  [
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表9 F& k$ Z: J* [0 M
示分隔符)

. z" I- }4 s7 ~' ?* N0 K: I& L
  ]0 T* m; G( v* NNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。& E  }( d# j; l* l
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
& j/ g! P3 R( V7 b$ K在.cpp中加入:#include "CATCmdContainer.h"$ w7 T, Z9 f: \" L- q
#include "CATCreateWorkshop.h"
9 C* Q- @6 t5 Z; ?+ s: I/ W在.mk文件中加入:WIZARD_LINK_MODULES =  \' N0 A- b* s! }+ T; D2 v# ?
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
) s6 e# x* \, |* XCATApplicationFrame* s/ R/ h5 D9 _7 Q$ D
# END WIZARD EDITION ZONE
! L, l) ~2 k* SLINK_WITH = $(WIZARD_LINK_MODULES)  \
1 M6 P' J: y; W' {# I" T          CATApplicationFrame
3 p# G. V0 Q, O8 W在Identitycard.h中加入:# y4 H) b1 _1 r# N5 ]
AddPrereqComponent("ConstraintModelerUI",Protected);
. @3 N) I9 _2 A5 H- h' Q注意:每次换行时,都要加一斜线用来继续执行下面的module.

& C+ J3 C. h# _4 M- [9 a4 d! Y3 c- I# o% v4 g1 C  i/ J
: c# z' G- m  \5 I
重新进入编译后,可以看到结果如下:" S) ^3 d7 Q' D. o
3 _8 C/ v4 h/ }8 x6 `
tool.jpg
, l1 E4 f% \+ ]7 U. {, c( O7 l4 m$ O0 }3 f. t

% }" s. a" z' B8 H1 W1 }0 c) D4 E
9 m9 F6 e- ?. [
3 H# i9 u8 N1 e3 P! n" Z9 e- `8 c) ^( Z5 e$ @0 g4 V
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了