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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
- D) v/ J( Q/ Q9 ]0 d" w; K, o) }  J- K
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。# i# R/ r2 y) ]1 N  o7 x- Z/ F% S
我们来在PartDesign中插入一个工具条。+ c  v- q. m$ ^% b
1、新建一个module命名为myPartAddin,并将它设为active。
5 m6 i4 ^4 `9 {" K. J 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
9 W1 o% \- ~( ^5 Q/ @输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

+ S0 ^: P  N0 D addmin.png ! L- E* l; o" }& R7 A) }. D
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,9 n, a4 ]+ F. Q; {0 g) S6 E
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
6 y( V6 c! j1 [工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作. J3 z6 p$ C; v' \
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench8 C* ]3 h4 P0 |5 O6 J6 X
下都显示当前工具条。
1 {9 g* k8 ?! @, }' V7 Y
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
- w2 h2 j( Z( t' i6 P myAddin CATIPrtWksAddin libmyModule9 o' f+ g8 v& K, a, {# |
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
% g+ p% f( b# x) ?, ^在NewAddin类中添加两个Public函数声明:
) l) f! w; w, _) p- @, n% F. S
void CreateCommands();
$ ~) I. `3 t; W: F1 ICATCmdContainer * CreateToolbars();

" Z; z& F+ p& u* ^/ u在NewAddin.cpp中添加宏定义:
5 {, F* q- g8 K6 v#include "CATCommandHeader.h"        - q4 x4 V6 u0 P) w% [
MacDeclareHeader(PartCmdHeader);
2 X" T# b- b/ l+ D# z& h
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
1 `8 e) f4 O/ z  @- V3 y6 ]; P/ dnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);) s4 x, v& ?; r  e
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

, a5 b, V' X( G( Z3 e第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
4 B$ @  s5 m; J( m' O2 x
& P. Q  q( A3 i$ vCreateToolbars里面就是要建的工具条和菜单的主要内容:
. @  K* i  {5 B- w, z, @* R
' S" h4 W- k6 `; r

: p& D; C; Z( n$ i( L" Y+ w //设置工具条
: d* Q4 Q" g8 B9 j  @+ J. Q& ~ NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);1 l8 V" T  C4 J: c6 B( l! x* i
   AddToolbarView(pPartBenchTlb,1,Right);
5 J1 a1 ?0 z! m* u$ B2 G7 \. W
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
+ r. b1 A- b; m5 T' r SetAccessCommand(pPointCmd,"Create Point");, L: L) ?3 D/ Y& m9 b% u* k
SetAccessChild(pPartBenchTlb,pPointCmd);! m5 S5 L; P2 q# S3 T- m& f& M( w6 p
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
5 ?) r0 b! _9 \8 K$ d& l; _+ i SetAccessCommand(pLineCmd,"Create Line");! n/ p$ B+ Q. @$ C% m
SetAccessNext(pPointCmd,pLineCmd);

* [+ \5 e; t$ M% E  z ! Q, }2 Y' G1 E
//设置菜单
6 U& |0 L8 E' ?' b$ j4 r, c
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);  B1 Z6 x: G, F$ p. q4 K- [
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
; i7 z9 n# Z" c/ M NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);  x5 J( a: z$ k% \( q# Z0 u
SetAccessCommand(pPointCmdm,"Create Point");
' f$ T9 b! M; [9 [* @1 d    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);5 l3 |& s: o* ]" R+ v  I
    SetAccessCommand(pLineCmdm,"Create Line");
0 g+ H3 z5 V7 h$ h0 q  k
/ g5 q0 K5 r& Z/ m9 ` SetAccessChild(pPartBenchMun,pPartBenchSmu);
( f5 o# z2 _: v! `8 _    SetAccessChild(pPartBenchSmu,pPointCmdm);" x2 K" U+ G6 `$ M% O
SetAccessNext(pPointCmdm,pLineCmdm); . s2 d: ^* W. L+ ]1 a- _
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);6 g$ F: a& }1 K1 h
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、1 Q+ h6 @$ I$ T; I  z
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
& v) w! h1 k2 `2 ^% E4 Y0 k1 s- {' rSetWorkshopMenu()、SetAddinMenu()等6 `9 ?) G5 u. c0 `" e* G" k
NewAccess 的函数定义如下: ' D9 Z5 T# b* c' a
Macro NewAccess (className,variableName,objectName)
" Q6 R1 P0 ^: k. d" t其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、" d/ ^" j: F; O1 z7 P
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表1 q1 W( Q( z+ ]* }
示分隔符)

. ?# K1 T- O  ?8 k; G( X2 l  S; U* O4 G1 {' U1 c3 K2 p( P; \; _
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
1 ^$ x# v+ ?5 t. c4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"2 q; |; i1 a* x6 |3 Q$ B2 ~
在.cpp中加入:#include "CATCmdContainer.h"5 z8 Q5 E" v2 F8 s1 M
#include "CATCreateWorkshop.h"
2 g) r8 c+ |0 E在.mk文件中加入:WIZARD_LINK_MODULES =  \
3 }1 H- n9 w( a# HJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
) f5 }5 _5 ^/ u$ YCATApplicationFrame/ @! r* h9 g: |. o
# END WIZARD EDITION ZONE
. i; N0 p# J9 w3 n- GLINK_WITH = $(WIZARD_LINK_MODULES)  \6 L% d0 a' J7 K% h/ B/ Q& \$ e
          CATApplicationFrame
" I' n: p# d1 y, q, q! u9 k在Identitycard.h中加入:7 P* v7 l+ R1 c1 e
AddPrereqComponent("ConstraintModelerUI",Protected);! T  C# ~% G- o: E& V8 A
注意:每次换行时,都要加一斜线用来继续执行下面的module.

% l% E  P- i, r; f+ K" |
7 Y5 D" a6 a( m% Q9 s/ [& a+ Q. }$ ?8 {4 ~+ l& [, D# m% f
重新进入编译后,可以看到结果如下:
9 l2 X$ i& O- S
) I8 f7 A1 e' Q) B+ n
tool.jpg
1 p2 Z  F- z5 R4 P" ^: v* Z( T) F+ h7 D& r7 u% s! X: L; ]

' {) x( v" l0 _, H. N5 j
! Q% ^: o' R8 `# c% {, I0 b
  u# u, }5 r1 G! _* r' ~1 _* Y
  `" e; }* V* t4 b! ?' L, 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二次开发专题模块培训报名开始啦

    我知道了