PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条/ `0 O6 l5 ~0 I9 Q# ^/ J: w

  ~: K5 k2 k- ?: @6 x0 v2 Q, n所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
4 g8 n: T0 m* O& W4 s" T9 y; M我们来在PartDesign中插入一个工具条。  j. v' j/ w. [% Y8 j$ e5 A; l1 K
1、新建一个module命名为myPartAddin,并将它设为active。
% `0 m  W9 z2 i4 J! T+ i" x9 a 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框7 ]; B/ T) w1 Z/ R: M
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

3 t/ M7 j3 o! N4 o: X/ ] addmin.png
6 H+ O$ z( O( w& |1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,5 i2 a0 J# E7 c
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
6 H& w. A, L% {* a0 \4 Q# J, X$ P  Q工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
2 G, o* \3 P" Y2 a2 J% t台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench' _' S! D! p) j+ C+ I- r, E- r
下都显示当前工具条。
1 z6 i/ V/ l" _' d
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:3 w! S  m, F. T* t' i8 o) a
myAddin CATIPrtWksAddin libmyModule3 `% @4 z7 a/ S# e5 `& e" [7 c" ^# ]! C
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
3 ?8 X. l4 U. @2 g* \在NewAddin类中添加两个Public函数声明:
5 H9 r! M) @% r) V  V2 O  o- g: r* j
void CreateCommands();
6 ^, j! D3 K3 ]! {& E1 ICATCmdContainer * CreateToolbars();
% d% c# ]8 i3 A* E9 i
在NewAddin.cpp中添加宏定义:
4 }) p8 r) V9 h) g5 s  e3 F6 k#include "CATCommandHeader.h"        
' a8 Y4 i; v- c3 x" P5 C6 z( OMacDeclareHeader(PartCmdHeader);
1 Q; w+ V# E, ~+ h5 K
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: & n; `' G# F' E6 I
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
4 H. u7 w1 Q" Unew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

2 @  f: q' A! a8 \+ D第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。9 G/ L# a. ^" [" h

! _( z5 f! T+ ]5 d8 JCreateToolbars里面就是要建的工具条和菜单的主要内容:3 ~- e9 q) t; z. b4 b; u

) Z/ L' B5 @1 M- W8 n% A9 M+ Y

/ J/ k* D  l' D' I. S# Y# r$ g7 g //设置工具条, v. u2 @, g6 J) n
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);. a/ |; n( O* M3 ^5 R- R3 F" h
   AddToolbarView(pPartBenchTlb,1,Right);

# l7 b3 k2 g& M4 l; x NewAccess(CATCmdStarter,pPointCmd,PointCmd);  h2 J% E" @) d$ f
SetAccessCommand(pPointCmd,"Create Point");) V# S* Z) L3 w- a4 N
SetAccessChild(pPartBenchTlb,pPointCmd);5 H& w: O- Q3 v0 p% q$ k2 c
NewAccess(CATCmdStarter,pLineCmd,LineCmd);) ]% A5 x$ e& m6 P, D
SetAccessCommand(pLineCmd,"Create Line");
! T' ?; w1 l) j' \0 Q) `0 V  ~ SetAccessNext(pPointCmd,pLineCmd);
8 K3 n7 l9 c, ~/ t

6 `- F. j9 _9 F6 s! B' \ //设置菜单
" ?* P7 t& v+ O" T7 [
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
- O% b1 i, h9 p6 b NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
4 ?, Y' {* i$ `$ p% I! M1 z6 Y NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
  x7 Y3 H5 Q! H5 N9 G. V4 R SetAccessCommand(pPointCmdm,"Create Point");# J$ p, q) u( X) X7 o
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
/ Y3 F% E5 Z$ |    SetAccessCommand(pLineCmdm,"Create Line");
% x2 ~6 M8 G$ ]: O. M9 Z- G
$ {; o1 m% X$ H8 J6 {- r SetAccessChild(pPartBenchMun,pPartBenchSmu);
& Z) r" }" m( y' f2 l    SetAccessChild(pPartBenchSmu,pPointCmdm);! L; k, X+ R& W, j' c6 Z
SetAccessNext(pPointCmdm,pLineCmdm); $ Q( k9 d: L$ e1 {- H0 H0 r
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);6 Q" _. x0 N% m! y* A; n8 ]/ z
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、0 c, W+ k1 X7 i& _/ u* j
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、' i! |% d+ l2 [2 H9 z. l
SetWorkshopMenu()、SetAddinMenu()等3 T  q- C8 L. D% o" T) i0 S# Z
NewAccess 的函数定义如下:   t5 t6 @% |/ L) y1 K
Macro NewAccess (className,variableName,objectName)
: c1 J" u$ ^, i; Q. z2 h6 U. x& Y# Q& U其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、: @& b7 S6 K& |( O% x1 j) R, W
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表0 J9 A) e' y+ f" ^6 M" {# F
示分隔符)
! S3 q- O8 h2 O
0 L! R0 e$ t9 x
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。- L0 @% [5 I9 a; E3 u; g0 L
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
4 U7 Z3 e$ f6 J8 c5 o& M在.cpp中加入:#include "CATCmdContainer.h"  r/ z+ C5 H  F! ?3 k- i
#include "CATCreateWorkshop.h") Q) w7 Z0 O4 j5 \0 _  G: _9 W6 m* G, {7 X' O
在.mk文件中加入:WIZARD_LINK_MODULES =  \; [6 `0 `' S5 a* s7 c) A9 q% W
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \; R) p- Y* _4 Q/ M1 ^
CATApplicationFrame
0 j3 k5 }* C8 ~5 p/ K4 a2 L# END WIZARD EDITION ZONE & k2 }/ B7 c8 x
LINK_WITH = $(WIZARD_LINK_MODULES)  \
! C. B7 }5 X# e$ T5 l8 f) g+ E          CATApplicationFrame , F) {% x1 Z  F3 X5 `! G5 r
在Identitycard.h中加入:
- M. S. s! j' Y. a' QAddPrereqComponent("ConstraintModelerUI",Protected);
) b/ Q6 p+ P4 }3 M4 P+ t; t  f& [注意:每次换行时,都要加一斜线用来继续执行下面的module.
+ u8 O+ J2 [, S* X3 g) X

3 T: t) {- F* e# l% W
1 a! \4 o2 s4 ?0 x8 p. ]9 ^. f重新进入编译后,可以看到结果如下:
& N( N. [3 }% O& A( d7 U0 B* z" }- ]$ i" Q" [+ h( J, {' @
tool.jpg 6 a. g& A& O; l9 l, h

0 M6 M4 V8 c3 b9 S
4 p( p2 r; v% x( y& a- |
$ g5 _2 v* A& R% G* C& N' R& K
- D( }' Z4 ~' g3 s9 L1 M! N( z
1 y% H( N6 c# v! j  E9 X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了