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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条8 r" W1 Y9 e& R, v5 H& S
5 c7 ]8 j0 C. Z* P$ i" y
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。# Q2 h4 B4 V* I, x0 v# b/ T
我们来在PartDesign中插入一个工具条。
* ~: ^) F% E4 n- _: o  d% e4 H 1、新建一个module命名为myPartAddin,并将它设为active。9 F) F- Q, m! {
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
' ?+ v7 h5 R2 E2 P, W4 j( r1 v  r输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
5 ?/ C# `8 K& t; V
addmin.png
" f, _7 D6 ]8 ?) \. S; ?+ f1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,* }1 ^) V! h' i' j
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前. C1 }, x+ m1 O# o2 }& @0 K
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
2 _$ T; j- l8 ?2 j, r台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
8 A" b0 D4 \4 t# X, a! W: }下都显示当前工具条。
9 V4 z* v6 O9 |
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
  `" s1 }; \, L+ s" L; Z7 s& G myAddin CATIPrtWksAddin libmyModule! Y0 _" ?3 w3 g
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。5 Y& Q7 |; x: ?- l9 \$ h) c9 k- m2 A
在NewAddin类中添加两个Public函数声明:

3 {" F1 O6 {1 A' uvoid CreateCommands();
9 t( @4 R1 h( m3 {4 R1 ?CATCmdContainer * CreateToolbars();

* |  m* ]7 I* y- @在NewAddin.cpp中添加宏定义:+ j$ r; U9 L  {' R! w* r' O
#include "CATCommandHeader.h"        
, I% A( t7 t; Z* S8 b& V# `MacDeclareHeader(PartCmdHeader);
1 T( _, H" C( T" D) }: r
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
! i- G$ {  m' f1 m3 vnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);+ i: X7 C4 W- ^3 J, a2 S
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
$ B; J* c  m# L) U- m; n
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。( p( A% U$ k* m7 m1 h
$ L3 q2 u8 Z2 ]+ @6 ?, d
CreateToolbars里面就是要建的工具条和菜单的主要内容:
& w6 O( Y' \0 O0 L  M+ b5 e: K' P
/ J6 M; T. `: `, A8 k9 j. ]# o) P
6 a1 B; `7 E2 h/ P
//设置工具条
& r1 S6 s# D$ V7 U0 p% h9 C NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);* a. b& l- C9 s1 b+ Y# h) G
   AddToolbarView(pPartBenchTlb,1,Right);
$ k6 X+ d+ d0 ^( h$ S- Y- m
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
8 x% M6 j2 J4 I  j/ O SetAccessCommand(pPointCmd,"Create Point");
: @: z& B) y7 j) H- h9 P9 a2 j& [ SetAccessChild(pPartBenchTlb,pPointCmd);1 ^- g2 x8 d5 g' R/ m% ?! _
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
$ K% E3 \, ]7 f; W SetAccessCommand(pLineCmd,"Create Line");
7 r& g2 w+ U, d8 X, ~ SetAccessNext(pPointCmd,pLineCmd);
: T4 q: z" f# s" D/ _. j2 n
4 Q1 N, r8 w5 |& L" K" |
//设置菜单

: `4 s# E8 ?" X$ N1 Q9 E NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);2 n- W8 n; g1 X
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
! |9 t7 b& a; W$ c$ i' y NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);  |1 V7 X' V. h) n
SetAccessCommand(pPointCmdm,"Create Point");
- V! e5 D! y3 z5 S. h+ h: z    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
  W5 C- A+ _4 \& K( n1 ^    SetAccessCommand(pLineCmdm,"Create Line");
# L5 t" `( Q1 G4 }+ g0 o# \( f
& v* r( p2 }( S& t# y SetAccessChild(pPartBenchMun,pPartBenchSmu);6 b3 l8 H3 M9 L
    SetAccessChild(pPartBenchSmu,pPointCmdm);( W# M- c: Z  X5 D  q
SetAccessNext(pPointCmdm,pLineCmdm); & g/ c- |1 @" Q9 a
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
/ \9 Z7 T$ @- J3 v+ s. S$ u& L工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
' g0 I3 H% ]' Z$ X) T1 V- S: HSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、6 k( H1 T: ~/ `; v6 G
SetWorkshopMenu()、SetAddinMenu()等1 r1 k0 [$ Y. o; F7 A0 v
NewAccess 的函数定义如下: ; ?+ q* y4 ]0 r: p+ V
Macro NewAccess (className,variableName,objectName)
& S& A3 m7 `, p0 o/ A# j/ q0 m其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
9 ^7 l. Z8 s+ \3 D6 Y) B9 VCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表/ @# t2 k' j/ m! n5 u3 q2 }: }
示分隔符)
. k. y; V5 I! \- C
) ?( D( t  ~" W  {8 R3 w
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。, z7 ?8 \2 r( N3 ]1 l, r
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h", ?5 d- j8 K0 p- Y& m7 a) C( \# P
在.cpp中加入:#include "CATCmdContainer.h"6 b0 B; H0 F5 _; G& e
#include "CATCreateWorkshop.h"
+ _* T9 F0 H; U& j在.mk文件中加入:WIZARD_LINK_MODULES =  \
8 ]0 b6 o& D" x8 g. z3 ?- zJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \' z, I( |5 }; P, T; Q' b
CATApplicationFrame
7 _# k8 O8 Q* y6 @$ U2 J, A; |- L# END WIZARD EDITION ZONE : l" j& A) ]7 l
LINK_WITH = $(WIZARD_LINK_MODULES)  \+ }# `6 x/ K4 ?0 `6 a! Q
          CATApplicationFrame
. c7 v! k$ a. y" t. C' H在Identitycard.h中加入:
: @9 E1 J6 T, b7 n# i% {: q$ ]AddPrereqComponent("ConstraintModelerUI",Protected);0 t: c% A7 i. O) b: X7 m
注意:每次换行时,都要加一斜线用来继续执行下面的module.
" g( r1 I9 [  ^8 |2 N: N  T# O
' q% }6 i1 Q4 d4 ~- f: T* u# w

( Y) n, v% J8 R, t! _# `4 N重新进入编译后,可以看到结果如下:$ J8 |. X4 r* D+ w' O' V

! a4 r7 J8 u7 X7 H# d+ p$ [
tool.jpg ! X$ @2 J4 S/ d# e8 ^, X
* [$ u# y# `; m2 M) S8 M

+ A: v- [( M4 c
) i. E8 j# U, H! C: K3 p- g
; v5 Z; _0 v0 n4 M' P& H% J! S9 K" K7 H2 F! N+ T3 Z
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了