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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
9 }- I3 x# b8 W3 Q6 l9 a& G- f0 X) f, A* O" w; T  K, _2 n
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
4 f8 H: `% `+ E我们来在PartDesign中插入一个工具条。$ j# v* z4 c* S+ I5 Q+ H6 z- E
1、新建一个module命名为myPartAddin,并将它设为active。7 e9 ?9 @# X: n  j/ r7 k
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
" c$ N; Y2 X/ C9 m) W5 m: q7 Y输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

$ K+ _* O6 A+ C7 a, k, h: U addmin.png 8 H% q6 r2 l5 E1 h& h* j
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
. c8 R+ _; t# k! N) J5 UCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
0 A2 x& ]3 V+ x6 e) f7 V8 w2 ?$ r! `工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
6 D9 g- Q/ v% V+ l0 i1 _, T台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench5 }9 X* L% `0 {8 f6 a
下都显示当前工具条。
7 ^  f- O, ]7 H: D5 j  J
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:( Y5 ?; l5 \6 T4 q7 M% r9 D! s
myAddin CATIPrtWksAddin libmyModule
2 D! a5 f7 }7 P; v# t但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
$ c- |0 h/ J% F0 Q- A: w% y* `在NewAddin类中添加两个Public函数声明:
% Y- q7 h: X3 w- M- W0 a0 ^/ b
void CreateCommands();
3 b! k: G- V% n: ACATCmdContainer * CreateToolbars();
6 {1 ?" X$ g: X6 q8 R7 ]
在NewAddin.cpp中添加宏定义:  z! p, o) X3 [' m  r
#include "CATCommandHeader.h"        & c- R* l) m3 V$ \$ s$ k8 U
MacDeclareHeader(PartCmdHeader);

7 m8 ~! G4 O/ r0 b) `0 c这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
# H. d+ G  ^2 Q5 [" {/ A4 \2 Onew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
, T2 M' i0 q3 Z, t) x4 ]2 \new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

6 p/ @# \5 g/ |; w第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
; O7 ~/ T: }# R& `1 l! d: H; i. ?: N& V% D' T& b' L7 S
CreateToolbars里面就是要建的工具条和菜单的主要内容:
6 D# m2 W2 [; k9 o0 |" z0 c7 I0 p4 q
! z# y* ?1 A) L" ^/ a
6 S: o# b0 {, H, _7 g# u+ c, K
//设置工具条
- N! A2 \* R. J! a$ R; U% j  z# g NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);* j) ]8 z; J- o
   AddToolbarView(pPartBenchTlb,1,Right);

$ i1 L- o, Y9 e1 d NewAccess(CATCmdStarter,pPointCmd,PointCmd);
. Y8 U* B* j' B" a( Z SetAccessCommand(pPointCmd,"Create Point");& v% D& q  `2 \( v' U
SetAccessChild(pPartBenchTlb,pPointCmd);: W& M. {& Y5 s3 j/ t  {& |6 ^
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
8 j. N% T2 |9 r1 V1 d SetAccessCommand(pLineCmd,"Create Line");+ ^+ G1 s/ H+ ?/ K2 j1 m: v
SetAccessNext(pPointCmd,pLineCmd);
. }# [1 C) [( s/ Z4 Y- ?
8 J! N7 D  U' e! O
//设置菜单

* m  `) ~: o5 r( X NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);, n3 ^* T. T) L' h1 A
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);( j: G) H* z( S/ ^8 s. p' }
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
( X2 m8 {1 `3 U. q+ g9 j9 x SetAccessCommand(pPointCmdm,"Create Point");5 o$ ^# `5 x6 E/ r+ X8 v; a4 D
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
- r* [: R" e8 W5 X7 u" _1 z    SetAccessCommand(pLineCmdm,"Create Line");- ?+ t; U4 j" k3 U6 h

- n, \6 f' N/ h% Q3 D SetAccessChild(pPartBenchMun,pPartBenchSmu);1 A, `: Q1 j4 S- {  Z
    SetAccessChild(pPartBenchSmu,pPointCmdm);% _9 e) l0 w) }" @! N# O* _9 C! Z$ \
SetAccessNext(pPointCmdm,pLineCmdm);
; [9 @+ q5 @9 K; m    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
- L: h1 _9 T+ z6 u) P工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
! F, S: l/ \2 H7 x" ~SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、: m) \6 r, D5 z- Y% q
SetWorkshopMenu()、SetAddinMenu()等# v% B2 C! x; K& M7 }+ [7 E1 H
NewAccess 的函数定义如下:
& U1 K6 q8 V" |; E+ |/ ?Macro NewAccess (className,variableName,objectName)
# ~5 J6 V8 \* e+ \$ e  y' ?其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
/ B) f  ^7 `4 h0 d0 [" m8 }. O9 eCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表. l9 y' S" @' b6 \3 |4 H, x
示分隔符)
/ A" t8 a& ^, [3 P! ?

: B0 R( n- j* V4 J" g/ Z  ^" }0 YNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
# X+ C5 P9 \4 W+ \) |4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"9 h3 G! K$ Y+ h/ Y
在.cpp中加入:#include "CATCmdContainer.h"
" s$ X& m* g( S1 J8 B#include "CATCreateWorkshop.h"
& E- G6 t" \/ `+ {! d0 T' @在.mk文件中加入:WIZARD_LINK_MODULES =  \
9 C! a3 k. f7 z1 fJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
) _0 ?8 k6 V7 V) Q; E/ _2 FCATApplicationFrame* M; E8 U8 O! X8 k! D" |( k
# END WIZARD EDITION ZONE
1 `( ?2 P% H4 b; fLINK_WITH = $(WIZARD_LINK_MODULES)  \
1 D+ J; V# ^' E% m1 Y4 |7 G          CATApplicationFrame # J6 K4 l) L% c3 r9 ^8 Y
在Identitycard.h中加入:7 {3 r, e, K* a+ I- ?/ J) ^4 @
AddPrereqComponent("ConstraintModelerUI",Protected);+ f: B# V/ S0 L! h
注意:每次换行时,都要加一斜线用来继续执行下面的module.
& ~1 z9 a/ L5 f3 H* }
) P  K! B4 [  Y- q2 Y
/ {# Y: d& V: z( B. y" t/ q8 I7 M- \
重新进入编译后,可以看到结果如下:
& q* e4 R  V5 @, t: h& v
% A$ v3 ?  V" u- M3 K
tool.jpg
; A/ f1 e# U( D) B
+ L+ D! ]9 D  O( J
- p5 a! A, A$ I4 M/ h1 s. I

' Y4 S$ L4 `2 }) {; @" {% C  U& G) A, W1 |7 k

* G) b. G* c2 I4 n' y6 m! o& B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了