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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
2 v9 n$ y# A# r4 s# A( \; A7 \
- k% J% q; P. [所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
: t: J- I  y7 g4 |我们来在PartDesign中插入一个工具条。7 B$ @9 R2 z% U, x
1、新建一个module命名为myPartAddin,并将它设为active。
7 M% q' @4 h! S7 b4 R- ` 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
5 _7 x+ K% }; H* Q0 l, e3 l# b) g- X输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

' f' _4 }" u4 i2 U! ~2 K" \ addmin.png - \9 ]  z- l" q4 ~
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,, e& K! |( ^5 d: O& `
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
/ z8 L: L' e0 f8 r0 Q工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作$ o  M9 A( p  n+ O" C" R% d
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench4 s6 l* C5 A$ U8 }
下都显示当前工具条。
3 Y) F: g6 E3 J  K
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:  Y' b% E5 x. L- ]0 k9 V9 {  {5 @
myAddin CATIPrtWksAddin libmyModule
+ X2 J- g4 y7 C, C% R# g8 O6 Y7 R但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
$ }: y2 a& c5 j5 B/ A2 v2 o* Y在NewAddin类中添加两个Public函数声明:

4 F& x$ p6 v/ d. B' J% r9 Evoid CreateCommands();
4 Z4 `1 v9 r6 b. h# v: u8 rCATCmdContainer * CreateToolbars();

) _/ X* n% d) y+ g/ t1 n; \1 l- P在NewAddin.cpp中添加宏定义:6 W5 {  g9 z) s
#include "CATCommandHeader.h"        
' Y4 e1 T  U( |1 f' U2 N, U; dMacDeclareHeader(PartCmdHeader);
7 Z1 _) v0 t) U3 K# t: m
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
6 h7 ~- R" @- X0 Q* lnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);6 R2 h. F, H$ Y: T. u
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
/ F8 j4 s+ e: l
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。! S% A2 N7 o5 v" y( Q: v" g

& K2 d/ @2 J7 x5 WCreateToolbars里面就是要建的工具条和菜单的主要内容:% |, g( K% _. g, u. N" K- d: g6 `+ r

* r$ l% C2 |4 @4 W

3 u9 |" R) m' D% n //设置工具条
" U- [, i& _0 V  y NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
" h1 G: s9 K0 D" e8 o. k   AddToolbarView(pPartBenchTlb,1,Right);
4 r. X+ O, T" j6 h4 d' C
NewAccess(CATCmdStarter,pPointCmd,PointCmd);# H+ [8 d5 t0 S
SetAccessCommand(pPointCmd,"Create Point");
1 }. n9 V+ B* M" q0 A% \+ M SetAccessChild(pPartBenchTlb,pPointCmd);) k- e# S. x( K) I& [5 i5 Z% |6 G9 q
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
1 q/ a( X  e" X+ r SetAccessCommand(pLineCmd,"Create Line");
; M, O% G6 v  I  ~' w3 O' l+ w SetAccessNext(pPointCmd,pLineCmd);
5 v$ \) O' M/ m3 {/ B
' `3 n8 J" S- L3 E1 v) Z
//设置菜单

2 \5 ]2 E4 T* v1 V# e NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
* Z; v, ]& i$ f6 G# I$ V# o NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
# E- V2 H  o2 t8 F) e NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
% }$ T4 w3 n. R  j5 J5 Y SetAccessCommand(pPointCmdm,"Create Point");
7 O' ]( J; G. |# N: g7 b% y5 r    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);# N: Z. U  C& T% Q' C
    SetAccessCommand(pLineCmdm,"Create Line");- [/ B( m/ T9 A- L( _# d: x( |: y

7 k- H' q! p* G' i4 r SetAccessChild(pPartBenchMun,pPartBenchSmu);
! W- N5 a4 u3 y6 `. N    SetAccessChild(pPartBenchSmu,pPointCmdm);
6 I) R* k( B: R6 h; T: @5 Z! j1 b0 C0 U SetAccessNext(pPointCmdm,pLineCmdm); 5 e0 ^5 l6 ~1 y5 g' d0 g( g) \
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);8 i4 h, ]! F- T6 k: x/ P
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
! K: P; A9 `6 y6 l0 KSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
" t. f2 \) ]9 k# O/ S3 [; YSetWorkshopMenu()、SetAddinMenu()等
5 [9 t9 E7 L/ yNewAccess 的函数定义如下: 2 c* [* D4 o8 M5 G4 {
Macro NewAccess (className,variableName,objectName)
) ]" y7 c1 \1 q8 Y& `1 A! [其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、: Z( {& j; b: ?0 s  Z: r. u" r
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表) \5 V5 }8 U& R( b3 }, j: B% \
示分隔符)

+ s' F/ o! I  \% k& e& `1 p
9 u8 [2 Z) @9 _+ H, TNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。3 |3 A! R( V: |, k; F5 r
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"  H! r) k9 A; s5 m: n$ k; d/ Z
在.cpp中加入:#include "CATCmdContainer.h"
3 U2 m& ?! J" m0 [+ F3 m#include "CATCreateWorkshop.h"
) B! a0 b# @4 X; e在.mk文件中加入:WIZARD_LINK_MODULES =  \/ K0 i* O, X% n& l' X
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
( j5 w- h# b: L  RCATApplicationFrame: h6 @+ d: U# |9 W
# END WIZARD EDITION ZONE : m. r. n$ |5 Z- p
LINK_WITH = $(WIZARD_LINK_MODULES)  \6 `/ o- u' p6 [! c
          CATApplicationFrame ) [4 B. o4 n' [3 p
在Identitycard.h中加入:4 c( a$ e. |, q8 y  c
AddPrereqComponent("ConstraintModelerUI",Protected);* r& `0 [# R* y- n# [' W6 @* @
注意:每次换行时,都要加一斜线用来继续执行下面的module.

9 h: b% F; R7 s( ?" u. L9 ~: k6 n5 f# H* w2 {0 w; j! `

- m0 z8 {( v  o9 Z重新进入编译后,可以看到结果如下:8 z, ]; m( X5 S% D  Y# H  E
- d+ w0 f7 _: j. N3 C1 }% I; u
tool.jpg ( V6 l# ^- W  t5 w) Y% k1 h

( _+ I; U4 X% f/ W; L7 v0 N& z

5 Z1 w, _. X% j! V6 s( \: \: u8 ~0 K3 v0 Z2 ], b
5 r( H1 y; z) B3 D0 f! X5 G8 g
; G, g& J/ i' }1 ]( }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了