PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条) p5 ]+ c7 ?7 U. j1 {" Q
+ @( H/ h9 O, d2 P
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
: u3 L* ^* z( n4 ?5 I0 ~我们来在PartDesign中插入一个工具条。
8 g& J$ V% n, S2 K- m$ H* F 1、新建一个module命名为myPartAddin,并将它设为active。
, y1 y. l+ ^! q/ `$ Q+ \- F, y3 r 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框$ h  `. [) I( h- F9 `
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
4 O/ o8 F# m% E! P/ k$ c! R1 w
addmin.png 1 q! W3 f' Q! n; [/ P
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,( t9 b; U1 l8 Z- P
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
  H3 X1 I4 ]+ q5 C7 G) ?) F工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
  Q7 m& A5 Z( L1 N8 w- S台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench2 p. S1 q3 X+ g6 M+ t6 p8 |- v' _
下都显示当前工具条。

! ^4 G: L" N& j% i+ x  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:6 B- G$ r6 [4 O: a
myAddin CATIPrtWksAddin libmyModule) M0 c, n* Z( r( p/ m
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
4 u1 a2 W, [  A+ }) l% O在NewAddin类中添加两个Public函数声明:
3 z/ n. u; T. _
void CreateCommands();  j* S" K9 ^/ s! F7 A
CATCmdContainer * CreateToolbars();

: _4 O9 ]7 z4 y! U# {在NewAddin.cpp中添加宏定义:6 f: h( R, N! V! V% I
#include "CATCommandHeader.h"        ) Q( e% [, z, I& S: C: U( b
MacDeclareHeader(PartCmdHeader);
5 i9 i( }" Z  e
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: 0 ]3 |4 H$ e2 A
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
0 O0 R$ x, V1 t7 rnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
: ?+ o2 o# N) L. C( H
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
8 f# c' D+ \5 @& j$ C+ S. x3 S8 {" F7 u7 H" ]
CreateToolbars里面就是要建的工具条和菜单的主要内容:
5 m- ?" J8 Y  L# H. X2 T
& p) O: v$ a8 |  K1 y. x8 y

8 p4 d! C  J* ~7 w- p, u' p" F: c //设置工具条
  X, {, O  x  b! @# X; |& G NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
1 C4 U& W* ^' W( \/ X, f% P   AddToolbarView(pPartBenchTlb,1,Right);

' d4 g1 N: t9 T4 Z* X, P: O- e NewAccess(CATCmdStarter,pPointCmd,PointCmd);, U# q0 z' u1 ^* M$ }
SetAccessCommand(pPointCmd,"Create Point");
2 `. z' I0 d) H2 N SetAccessChild(pPartBenchTlb,pPointCmd);) T2 y1 ^4 r; D2 g0 S9 ?4 t: N
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
" e& S% _: u$ `+ {7 G SetAccessCommand(pLineCmd,"Create Line");3 y0 W4 A5 o4 c$ ~; Q5 G/ P  A1 Y
SetAccessNext(pPointCmd,pLineCmd);
2 ~* Z8 L4 i( n0 H
* v* ~+ E1 ^# H* ?
//设置菜单
: I; Q/ g! \5 b3 G+ R3 ?2 n) l
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);4 j5 B2 A2 j4 y1 h  I4 h
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);3 A- x6 Y7 J2 p6 q3 q' h- `# @
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);4 e3 ?1 f8 P1 u5 @
SetAccessCommand(pPointCmdm,"Create Point");, a" I+ G4 E& R" u& f
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
$ _# P; j" X/ n$ b    SetAccessCommand(pLineCmdm,"Create Line");5 k' B; ?% m7 f1 m) q
  v: \8 f" b4 N" k' R1 i
SetAccessChild(pPartBenchMun,pPartBenchSmu);! e  }6 q- _5 a, b; [
    SetAccessChild(pPartBenchSmu,pPointCmdm);1 F& o% a- E. Z
SetAccessNext(pPointCmdm,pLineCmdm); 4 a' h3 G( S4 P
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
$ @6 W; }7 j% f7 @; g7 J  N( U" Q工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
( f3 D6 i, X( \& |" @5 n1 L5 l' ^SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、7 q, n4 c" X1 h
SetWorkshopMenu()、SetAddinMenu()等
- ^3 z' m1 n! B- R; oNewAccess 的函数定义如下:
* d5 ^3 T4 \; g, V; c: nMacro NewAccess (className,variableName,objectName)
) J) l1 @7 a# a/ Q0 l其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、4 C* l4 c+ P! F
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
- l) l3 r4 j" j( @- z- u; c示分隔符)

, N% u) S3 A) m9 a. N3 o9 N6 W" k8 s" o3 q' p* r7 }: [
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。6 T' @5 h' ?: w' f7 ^# q
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"- N6 K0 v) l" E
在.cpp中加入:#include "CATCmdContainer.h"
: i, I* C5 G3 F% e8 J#include "CATCreateWorkshop.h"2 \" i: ^) c6 n1 A: Y
在.mk文件中加入:WIZARD_LINK_MODULES =  \  i! e; O8 ], Y. S
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \* G/ z* t% ~6 ]% z3 p
CATApplicationFrame
6 a. e- a1 V7 c* L) [7 f# END WIZARD EDITION ZONE / b1 l( L9 P; \$ [6 q: a9 K' z
LINK_WITH = $(WIZARD_LINK_MODULES)  \
. M9 [% }5 h5 o3 r. \" B$ p( U          CATApplicationFrame 0 M1 q  m. l$ C' H
在Identitycard.h中加入:
/ W3 ]( E2 |' x9 r# AAddPrereqComponent("ConstraintModelerUI",Protected);
% S# A" A, [" P' p: I+ L+ c注意:每次换行时,都要加一斜线用来继续执行下面的module.

# p; x4 [6 j3 N+ M; I% w" |1 p( E- M$ U! j3 [

/ M  t7 g: k- b( y( r' C, B重新进入编译后,可以看到结果如下:3 h. U& G7 i. s) f  O
' i* j; k; P( H- F# d# Q% ~$ J
tool.jpg
  o# b$ G  R$ d- V3 v' o1 y
6 a0 F/ p3 T4 _
/ h  a( D5 ~1 _6 @

( A3 L* J: q& g7 L  S3 N
' E4 I9 M2 y! o" _+ Q+ k& m6 o, \* L9 n6 H9 }" r
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了