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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
. t% L9 v8 f0 \+ F- V: t5 F: s
! \/ I6 h9 U; S" U6 b% u/ [所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
8 ^; m/ v8 I1 V) I我们来在PartDesign中插入一个工具条。
4 i7 _2 ~: _# o* f1 I* l/ f+ m 1、新建一个module命名为myPartAddin,并将它设为active。" g. r0 y; T: Q+ g8 b/ a
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
  r% {' b% M  v, g$ ^% F输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
9 |5 x' Q0 ?8 c1 r9 G8 ^
addmin.png ( X4 `+ D2 x0 B1 E
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,' q! C* ~2 Z$ a! b  E
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
2 a% G0 a( G+ K+ [工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
. Z/ @& y- R# \( d8 z7 c台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
. ?0 z! q" J/ u6 B/ R4 u/ J下都显示当前工具条。

  C+ Q! h# N& I% r( e9 ~: h# F' j: r3 L  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:' ]' A! y: m% P" |7 E; ]
myAddin CATIPrtWksAddin libmyModule
, J3 b& x7 U8 N! G5 h( c$ k但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。- ^5 H9 x1 E5 i$ U! ^" G- V
在NewAddin类中添加两个Public函数声明:

4 [. T$ Y) |! |$ ^: Yvoid CreateCommands();' O% a2 p$ L7 K0 ]
CATCmdContainer * CreateToolbars();
- @: r7 i5 b6 ]1 U# M' t1 x
在NewAddin.cpp中添加宏定义:
1 ^% p7 p: z! Z" ?#include "CATCommandHeader.h"        
) ]1 K3 r9 H7 a+ o# o  HMacDeclareHeader(PartCmdHeader);

' u9 J/ q/ `# w6 ?这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: / E. d) N! R+ _' ^, P
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);# ~" e- U. b3 z. W1 j
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
7 u) P( V+ i1 u7 w0 `
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
4 h5 ~2 E1 h$ C. a2 \2 ]1 s
  t% L$ e  j) h+ h& SCreateToolbars里面就是要建的工具条和菜单的主要内容:, Q. n5 Q4 y  v/ ~( `1 S. x

6 P8 r1 P- f0 K7 X6 A4 Z. u+ O' T  A

7 x# S3 p# \5 V% j //设置工具条! A" G9 S5 u* _+ V6 W
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
5 `1 ?. M5 d0 T/ T   AddToolbarView(pPartBenchTlb,1,Right);

6 x$ w% t. ^# w+ w+ F* S+ Q NewAccess(CATCmdStarter,pPointCmd,PointCmd);& O5 X. i) J  }6 Z3 l: S
SetAccessCommand(pPointCmd,"Create Point");
( l. f! G: n0 r( K- R" [) \ SetAccessChild(pPartBenchTlb,pPointCmd);
" S+ ?5 S; y% k4 s7 [5 h  o NewAccess(CATCmdStarter,pLineCmd,LineCmd);
( n# i8 J0 B& M7 V SetAccessCommand(pLineCmd,"Create Line");
* Z' H' f& \0 z& [% @ SetAccessNext(pPointCmd,pLineCmd);
: u$ U, F0 c# Y! w- ^

, `9 a) c0 ~- |7 S //设置菜单
3 C; ^. z' @8 m5 V0 S% O; J9 F
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
$ G& i. v; ?6 H' k NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
- I/ J$ |! Y: I9 Y: }" G$ O NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);7 G; H2 n) S  }, V1 V7 M' P
SetAccessCommand(pPointCmdm,"Create Point");
9 b5 R; u' [6 d# [, F$ ~  \$ }% s    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
9 H/ d3 M7 d3 ?/ ^  H4 F* g& M# _( C    SetAccessCommand(pLineCmdm,"Create Line");
/ _( s) W9 ^4 C
; ^; i3 I" d$ m" E- L2 U  S SetAccessChild(pPartBenchMun,pPartBenchSmu);
+ r  y9 y/ F5 P1 g* v; _    SetAccessChild(pPartBenchSmu,pPointCmdm);8 a# q$ I9 z5 e: @7 Z' u$ n
SetAccessNext(pPointCmdm,pLineCmdm);
7 C  m6 k+ |9 H* s% f8 z  }    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
: w) `: E0 |; L, C* P' ^工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
) q3 p& d  X/ U! E+ lSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
* S3 D5 e8 T2 {! E7 ISetWorkshopMenu()、SetAddinMenu()等
" ?0 z& m5 N) H+ Z6 `1 N3 ONewAccess 的函数定义如下:
3 h7 e9 X) k- [4 mMacro NewAccess (className,variableName,objectName) 4 F$ u- T  c/ m& v% o" L! k+ N0 L
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、+ K7 _& E4 v, F7 ?& {/ F# H' S
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
5 ^9 d! H3 k* ]' x3 W+ g0 T3 q) q示分隔符)

0 q4 l+ v; d5 \/ S: r  t% C! V
1 D2 G% f9 r/ L. F" bNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
/ a! H" |9 ?# f' }8 \1 m4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
+ H# Z7 x9 q7 Q8 g在.cpp中加入:#include "CATCmdContainer.h". f: b9 V' p+ ]4 R
#include "CATCreateWorkshop.h"
! v  Z( d3 Q) t9 P在.mk文件中加入:WIZARD_LINK_MODULES =  \* E: o, l- z9 \4 M) w
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
+ B; U1 a0 G+ ]& _7 Q  qCATApplicationFrame
. d' q+ D! R1 ~# END WIZARD EDITION ZONE
1 S' S/ p5 @. J$ o) y4 cLINK_WITH = $(WIZARD_LINK_MODULES)  \
& U8 \8 M& r0 N) n( x          CATApplicationFrame + T7 w7 R9 ?0 E$ ~) c* O1 |1 r2 [7 Q
在Identitycard.h中加入:
2 Z+ ?8 p+ F: P( y8 J4 P7 ZAddPrereqComponent("ConstraintModelerUI",Protected);# ?+ J/ t6 M( n2 y: t- H; v
注意:每次换行时,都要加一斜线用来继续执行下面的module.

: a& {# G( u% c" J  ]
6 W- v: o2 p9 q- U
/ _# b$ S5 l1 |5 M重新进入编译后,可以看到结果如下:1 t5 u$ E8 ?6 d. T6 {  O9 I

& x0 S) U! @* I3 V2 C) _' @
tool.jpg ! v+ @& J; z- n% P/ `- @

% j5 Y8 y' O; o  o
5 @* p7 i/ k" D# a! S0 F7 `
$ w9 L4 o& |! `% N- e* U* h
) p  M$ I$ F) A5 ]5 g

  B+ Z1 Z2 S' e/ j
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了