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 6679 1

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条( o$ [9 U* B7 i- v) x; |2 d7 d

3 ]" b& R2 a1 a8 V5 d5 N所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。, A2 ?  f. |# y
我们来在PartDesign中插入一个工具条。8 K3 X4 ^* J8 O
1、新建一个module命名为myPartAddin,并将它设为active。' c7 ~+ U/ w) D+ Q8 [
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
* \2 M/ {' D$ Z( g  W6 b* H: j输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
# N7 f6 c$ p; F& h; k
addmin.png
$ l2 F' m( \! a# c1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
% a; R5 m7 L5 J& q! X% FCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前9 w% k5 Y$ s- R2 R5 T! Y
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
$ }$ g, q- H' a$ [& H( }台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
% v5 g1 a( k) L, t. g, s下都显示当前工具条。
  Y% m* M  M2 ~3 z
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
( r( `/ L  u; y" V* W" c9 b( | myAddin CATIPrtWksAddin libmyModule
1 y3 a& _4 u9 K; y( d但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。8 y- q$ y: N% p/ E: ]
在NewAddin类中添加两个Public函数声明:
/ f$ H! W' K4 K, e6 C3 P1 R
void CreateCommands();. K. i; v' o& H' H: J( @- s
CATCmdContainer * CreateToolbars();
5 ~7 b- k9 J, s4 v' q; `& U6 s9 ?
在NewAddin.cpp中添加宏定义:: U+ [# u! U/ @
#include "CATCommandHeader.h"        & G8 B/ u  Y9 n) s
MacDeclareHeader(PartCmdHeader);
5 |$ \3 z, w. L* i7 Q& x
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: , \8 b( \$ g; u0 Z9 w
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);, n. t4 q4 {& S
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
/ I1 z( ?! i4 _: e* n( G! x+ J
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。, w/ a# x* |, @1 D9 ]
" M  d! B: B/ `9 t  ?; e+ m
CreateToolbars里面就是要建的工具条和菜单的主要内容:
7 ~% Q9 q& [0 e0 [$ T( c- W4 s, v# M" i

  j" A6 z) w. a //设置工具条
( D. T; E. r) Y8 B NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
9 N" N# C) T7 j   AddToolbarView(pPartBenchTlb,1,Right);
4 i. K2 B& l. b! T& |
NewAccess(CATCmdStarter,pPointCmd,PointCmd);% k1 m8 E; E0 v. o
SetAccessCommand(pPointCmd,"Create Point");
% f) D7 r3 F! h2 `* I# a, j SetAccessChild(pPartBenchTlb,pPointCmd);
" e1 ]( O* f2 i5 {0 q. @  @! J( v NewAccess(CATCmdStarter,pLineCmd,LineCmd);
! K3 w9 h% o5 T+ R, H5 x SetAccessCommand(pLineCmd,"Create Line");
& T/ G7 M2 t+ g' J; v SetAccessNext(pPointCmd,pLineCmd);

9 y# m* ~7 `5 p, g/ H
* `8 U$ P' t% R1 v# I5 |0 c7 Z //设置菜单
. |0 M; z6 j$ z6 l. A% u& J
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);% h7 J" V& b* e' h& F
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);; y2 P& L/ V7 `1 y
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
/ f2 r- {% j; m  i1 d; g, A SetAccessCommand(pPointCmdm,"Create Point");
4 `* c7 S6 L7 n+ l( T; J7 g3 l    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);5 e$ t9 T* S$ ]& E
    SetAccessCommand(pLineCmdm,"Create Line");
* O& @1 {8 s( V9 \
% N$ }/ D0 d& C( U3 G  N# Q  J. a1 r SetAccessChild(pPartBenchMun,pPartBenchSmu);
  ~8 M8 e5 \  E+ L    SetAccessChild(pPartBenchSmu,pPointCmdm);
! m' _4 t/ A2 D SetAccessNext(pPointCmdm,pLineCmdm); 8 C; h; T, a% \( Z: \7 W
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
; v8 ^9 A2 o. B! n2 a工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、' N, ^0 z4 v1 H, l$ {$ f( w* ]; y5 d
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
( R. Y7 y" ^+ e  ^- I" L6 DSetWorkshopMenu()、SetAddinMenu()等& e) @$ ^, @/ g
NewAccess 的函数定义如下: : x% A& n) s! _; L5 I% c
Macro NewAccess (className,variableName,objectName) ' U) i* S1 i. A' ^6 M2 k( x. J
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、. M2 @% y& t9 `/ }) Q$ c
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表; C" C0 D& O: @6 S, p  G
示分隔符)

) j* U; s1 J- h  f7 [# Z% R% X% M# N+ H7 T* _
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
" F6 j% U  }+ {/ r+ Z- |+ k9 w1 T4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"% z6 a6 K9 C: Y
在.cpp中加入:#include "CATCmdContainer.h"
8 d3 v$ e, K' M" W0 s' i8 L, U#include "CATCreateWorkshop.h"  q$ ?7 K( k0 n! C4 f) n. X4 \" a
在.mk文件中加入:WIZARD_LINK_MODULES =  \. J5 v' O" G( Y  X( m8 l
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \- M. I$ z* a/ Q% _, ^$ I! g
CATApplicationFrame# v% d6 V+ x5 Z/ G% G. z
# END WIZARD EDITION ZONE 0 j7 }$ B* \8 }$ q. A" M) ^
LINK_WITH = $(WIZARD_LINK_MODULES)  \
" d, q$ l& p5 N0 D" w          CATApplicationFrame
- G- P5 Z. a, u* J' H. H在Identitycard.h中加入:/ |8 G. Z; r+ u, S
AddPrereqComponent("ConstraintModelerUI",Protected);- W: s& P+ z! C
注意:每次换行时,都要加一斜线用来继续执行下面的module.
/ \& A8 q- W' x' j

' [5 Q. Y7 r! L# X. B- e/ ]0 }6 @4 W9 A6 }
重新进入编译后,可以看到结果如下:
1 L( ?+ L) R) C# o! P' Z
  B5 h8 _$ E. e$ ?8 M
tool.jpg
0 A. ^, w1 }" O; p5 S8 ~
; q$ Q1 V' \! D3 t2 G% I

/ B) w+ f: R1 {! E6 z  ]- \$ j9 ~) E: ~1 Q0 h; N( G7 X; w9 I, c
$ ^3 R8 R  P* L! C& p: y

, N: `  G/ B. `5 D5 o- c5 M
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了