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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
5 G, d# S6 A# {) t' U3 |5 X9 x" z0 [2 e: P( J, V1 c& ^- p
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
' J! B( q; ^8 C( ]$ Y# Q/ Y+ d/ h我们来在PartDesign中插入一个工具条。
8 N8 O! v5 L- \& _% e3 s, j) G 1、新建一个module命名为myPartAddin,并将它设为active。) h1 n, e# p% s2 f9 A+ l
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
8 B- `, p# J  g- y, A, x- Y输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
9 B8 q8 q& v1 B$ f0 {  G
addmin.png 8 ?' ~8 G' u, m1 @3 p* T; ]9 H6 y
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
8 Q8 }0 S# ~. z8 V0 @; L6 l( F4 ~& @CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前# m" y: |0 O* V' G& m
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作5 M; b9 E# }# g( H
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
$ D- T& `, D; L9 }* x" f下都显示当前工具条。

1 `: k$ |" U: \+ {# C( E  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
0 k; S! r9 _# }5 X2 Y myAddin CATIPrtWksAddin libmyModule
. r9 f( I3 b6 ?7 D1 B但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
0 }7 N5 a7 d7 n+ U4 k, r$ Z- l在NewAddin类中添加两个Public函数声明:
. W+ ?8 I* F" V
void CreateCommands();; Q0 t1 W2 H0 Y3 {* O
CATCmdContainer * CreateToolbars();
* ?, P% T9 R  W
在NewAddin.cpp中添加宏定义:
) E; g- O! U7 S6 J: j  u#include "CATCommandHeader.h"        9 o: ?; f! {: c( v  z  g  t8 H
MacDeclareHeader(PartCmdHeader);

* g  O% a) B4 C2 _$ g这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
" ^( A" k' ~; o1 I" inew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);8 S/ }4 B, L* u( Y: L7 Q
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

8 q2 V$ {, x  a第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。! J( B* {# b  J7 N7 T% ]
  u& q; J3 [6 [+ w! m* T
CreateToolbars里面就是要建的工具条和菜单的主要内容:3 u& e) ^- q* D2 {
& V+ [0 h. I7 ?/ `% h7 W( ~

" i& Z4 v, }0 T6 G- R% g$ ]. { //设置工具条
5 @' y, q3 ]$ g7 i) v NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);8 n9 O$ Y- {- C5 d7 k) }6 d5 R
   AddToolbarView(pPartBenchTlb,1,Right);

3 {/ o3 Z  ^) V0 C NewAccess(CATCmdStarter,pPointCmd,PointCmd);
1 g6 A. D' y, }/ k& Y SetAccessCommand(pPointCmd,"Create Point");
( p* @, F- n) o& s/ H; K SetAccessChild(pPartBenchTlb,pPointCmd);
' z% \$ I$ S" E: `  I+ m NewAccess(CATCmdStarter,pLineCmd,LineCmd);( j0 N# W) M- k3 b7 W+ b( W
SetAccessCommand(pLineCmd,"Create Line");( P  ]! y$ i/ W) h% M; j. O
SetAccessNext(pPointCmd,pLineCmd);

/ X, J# ~% t- B# G9 K1 ?, _
. v" x5 s7 d5 b* h4 \ //设置菜单

( D1 z% d4 e& \ NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
1 ~3 d( U$ X- p" S NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
0 t8 {. V* V9 v NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
# i7 H) C9 _1 u& F! E( x" p SetAccessCommand(pPointCmdm,"Create Point");
9 I3 B, S% W2 m! U) Q    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);; t+ M- v4 v* J/ U' p
    SetAccessCommand(pLineCmdm,"Create Line");6 y' ]9 U' {3 R' g4 z. f
% C! d2 j0 `6 ?
SetAccessChild(pPartBenchMun,pPartBenchSmu);1 O% z* |# K/ F2 e5 l
    SetAccessChild(pPartBenchSmu,pPointCmdm);1 b  {3 T% V7 g
SetAccessNext(pPointCmdm,pLineCmdm); ( Q% D& g* {/ m( Z& H" F
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);$ n. s6 F# m( p% S. U
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
0 |; F. ~! I* o% u+ M2 e7 z; |  FSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、: j3 ]# }, `5 l9 @+ G9 ~
SetWorkshopMenu()、SetAddinMenu()等# N( i4 E) Y+ k5 M! K, m, r
NewAccess 的函数定义如下: 1 r; t5 X1 f' s9 y
Macro NewAccess (className,variableName,objectName)
& P' g8 a) G0 n' Q4 M1 S其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、- [1 ]( G2 p  y$ e5 X6 z3 I
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表5 a) X- S+ H' m5 v9 i
示分隔符)
4 Y; R5 H% c" x  V, e" L" h

$ ^! j% h+ p; {3 _NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。- q7 a9 D  r- T5 l
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"9 K2 D6 l/ }! ?1 d: V4 ?
在.cpp中加入:#include "CATCmdContainer.h"" G0 a9 o9 \1 o
#include "CATCreateWorkshop.h"
0 a, _, c+ ^4 b1 c& `6 F' u在.mk文件中加入:WIZARD_LINK_MODULES =  \
2 ]7 e4 x4 N9 VJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
" f4 X5 k) ?* b- R/ B+ oCATApplicationFrame; {( l9 J+ U. {5 d. G. O4 P
# END WIZARD EDITION ZONE
3 u# F" Z; ~/ f* o# WLINK_WITH = $(WIZARD_LINK_MODULES)  \( t2 L3 Q7 Z7 N# @. h6 z
          CATApplicationFrame & `4 M  A/ x/ [1 ~, v" e* t4 M
在Identitycard.h中加入:
9 h# @' x) @5 w' K! Q4 `AddPrereqComponent("ConstraintModelerUI",Protected);
  ^, o8 I1 z1 q2 {) F2 c2 E注意:每次换行时,都要加一斜线用来继续执行下面的module.
) f7 d: i, A! P
* L$ ~4 Z  E8 k( T2 r9 y
  Q3 ~- G  R* d5 v  D5 U
重新进入编译后,可以看到结果如下:
( K- e5 S2 @2 X9 x2 v8 z) S# W
; ^: e" G) g+ c6 ^% ~* D: z: e* R* D
tool.jpg
/ T% a9 Q- Z9 D- C$ K% @* _
, X' ^9 E" j& u! @" p2 v2 Y+ ?

% s: L) K5 n$ m0 V' e4 o: q) p; A" ^/ y+ E
6 W% B6 ~; m8 I2 [

$ }2 w/ k( p5 J: t: R3 C
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了