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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条( o1 w# s$ c  C. @# `8 p6 S

9 Z1 H+ X2 f. A1 m所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
# w. S/ m: F5 V) u我们来在PartDesign中插入一个工具条。& w7 ?/ e; y: I: Y
1、新建一个module命名为myPartAddin,并将它设为active。4 ?1 M: K. c, p
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
/ h4 ~( r8 x; K, d输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

$ q) T- q6 m! @3 a addmin.png
* A# O5 O0 q9 g0 V7 F1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,5 W) `' @- N; B* z( q( R
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
) s$ ]$ E6 {# h, C: p. H6 a工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作  }3 {4 j  ~; A
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench- w4 O2 p$ \& U
下都显示当前工具条。
  D+ T' _6 ~/ v0 V$ ^
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
: s4 o& ^& R7 @0 ]' E. } myAddin CATIPrtWksAddin libmyModule% U9 T) j& M$ \; F1 X$ r3 e5 }; ?
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。- A! z# S$ C* K& G- c8 t5 t/ C% h
在NewAddin类中添加两个Public函数声明:

& @* o6 y6 ]) l, E/ uvoid CreateCommands();
5 w8 a" l/ e  LCATCmdContainer * CreateToolbars();

* l1 n9 q' K( {8 M在NewAddin.cpp中添加宏定义:
- K/ x. V' k3 G' k7 P+ t% S#include "CATCommandHeader.h"        . {' y  }% O$ Z' E+ y+ v3 a
MacDeclareHeader(PartCmdHeader);
: ^$ {% j3 k, \6 e5 k
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: ! M, f& J2 {5 j6 u5 K; |9 [
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);; H" x3 K; ~  R, ^
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
% Q4 o; L8 _5 O; g
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。! u! U6 s- ^1 u$ Y. }+ ]
/ {. k# o0 o: _9 {. P- p
CreateToolbars里面就是要建的工具条和菜单的主要内容:
  [) E" m% D% |! U4 x
$ g" \& `7 b: V. S; ^- p

/ i: V$ J2 j, n+ A$ _! |( \ //设置工具条: L& b: G1 g3 [  Q8 _2 L* N' Q
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);: E: W  a- E$ M6 l8 E& m3 x) Z
   AddToolbarView(pPartBenchTlb,1,Right);

( ?4 v, \9 ?5 _' b NewAccess(CATCmdStarter,pPointCmd,PointCmd);
- N: m( z( z5 s0 Z, a& g SetAccessCommand(pPointCmd,"Create Point");) e- L" D, |  a9 D
SetAccessChild(pPartBenchTlb,pPointCmd);* @4 B  {8 s* {2 y
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
8 d9 W9 O7 M1 L: @3 {9 x' a' \ SetAccessCommand(pLineCmd,"Create Line");2 u. B9 E& G% e1 A
SetAccessNext(pPointCmd,pLineCmd);

: S' w3 p+ G/ p9 i& Y ! h& M/ h9 H- L, ^6 c1 l
//设置菜单

) Z6 k3 t! H- h3 s3 l3 ? NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);# r1 I- H5 A) E# _! J
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);8 T! P# U9 i! R/ c3 [8 _
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);( o: h1 l) \9 T/ j' K8 L
SetAccessCommand(pPointCmdm,"Create Point");
5 D  ?8 W) a" b; T9 _    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);8 [: |. j8 w& T. f: m6 Q) N
    SetAccessCommand(pLineCmdm,"Create Line");
( k' K2 X2 _" z$ }6 s, E* \ ; n, j- c6 @9 [
SetAccessChild(pPartBenchMun,pPartBenchSmu);" x6 _# N5 K2 ~5 j, ~
    SetAccessChild(pPartBenchSmu,pPointCmdm);) G" }4 X2 B) L$ o* y, `) F
SetAccessNext(pPointCmdm,pLineCmdm); ! O' T% U1 q7 C- `
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
& D, m! ?- C$ x) j5 S工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、, {, V5 M  F. P% }
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
& l0 ^  o7 V0 V; u* WSetWorkshopMenu()、SetAddinMenu()等
. l* O8 c% ^4 H: A! SNewAccess 的函数定义如下: 8 {1 h$ K2 E  L* r$ q& x
Macro NewAccess (className,variableName,objectName)
( b( \  G7 C& T其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
% O/ t* N- \' i7 d* Y- }, I: x  mCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
/ S) y/ c: X8 N4 H/ y# m示分隔符)

% w2 v/ b% |' x% A  n4 \& K2 w% S, y* W8 V5 f
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
/ \! ?9 J5 z0 n+ ?! r: U% }. Y4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
) `1 M9 d' n6 f+ b在.cpp中加入:#include "CATCmdContainer.h"3 I" @# T* [# {, g4 N
#include "CATCreateWorkshop.h"
& K6 u, a' N) g4 T! o/ R" H在.mk文件中加入:WIZARD_LINK_MODULES =  \
( K" x" U" g# G: N& d  CJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
- ^3 H( a0 m0 J/ M: p/ U8 i! dCATApplicationFrame/ T2 {  r7 h& s, Z- d- o7 `. `+ t
# END WIZARD EDITION ZONE
% |% h% h, H1 e, [LINK_WITH = $(WIZARD_LINK_MODULES)  \
% D. B+ C! [8 Y2 j5 Z          CATApplicationFrame 3 M4 y" h' N, V9 ~8 x! P
在Identitycard.h中加入:
9 _3 y; Z8 N8 B$ ~4 n' c# A0 ^. \AddPrereqComponent("ConstraintModelerUI",Protected);
  b! [& W7 v% s3 q9 f0 E注意:每次换行时,都要加一斜线用来继续执行下面的module.
8 b& [6 m/ z+ ?7 k$ f

6 D8 u; Y  p: |" [/ I
" c0 i. S8 A, @0 O' _$ Q重新进入编译后,可以看到结果如下:$ }' n% y" V* [- s- p3 [1 l

. w' e$ K0 ^3 F0 W
tool.jpg + y9 V3 `. O5 u9 n
# W2 i; q* ^. ^5 ]  h( t  p

5 k* @7 H  Y! a* ~; {( Q2 h6 D. s# X! h) w4 p. B# F0 I/ G7 o

" g+ f, C1 y2 a( h" R: e
( [& v) M  S2 X6 B5 z/ a
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了