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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条7 X  K, K( }; w
4 j1 M; k/ C" I
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。' Y& C% v6 ~, b5 E7 v$ P, d
我们来在PartDesign中插入一个工具条。
  j8 ]. m$ U  i4 l, \0 c 1、新建一个module命名为myPartAddin,并将它设为active。
; J& b9 V5 b* p2 ?" r) b 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
* z" K1 r/ k: k8 I0 v  Z' B输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
' h5 ^* w1 O7 l4 I/ H4 o/ m# j
addmin.png
1 s* O6 N( L) ?" c1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
6 A* W5 E  U; RCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
9 Q# Z* ~" d" S工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作+ t' P4 r) G  r* L' g
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench: R% l2 a  `& w  I0 e: N
下都显示当前工具条。
7 C0 Y8 s: y! D( M+ G
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
* o5 T5 L, H  F8 Y myAddin CATIPrtWksAddin libmyModule  z+ L* `% v6 |5 m
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。$ |3 x9 m: B( J2 A1 g
在NewAddin类中添加两个Public函数声明:

: G& x, ~1 z% o6 K2 Y2 o+ [$ Svoid CreateCommands();
; M/ f& M$ C4 B& m* ZCATCmdContainer * CreateToolbars();

; }7 \5 x* v  P$ ~9 k. W" {! |8 ~在NewAddin.cpp中添加宏定义:! T5 F$ [& U! p/ s4 `
#include "CATCommandHeader.h"        
$ c8 D( l2 v+ n% L9 u" ]MacDeclareHeader(PartCmdHeader);
9 r5 X" v2 e9 u! P
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
2 V. r3 H" J  ^new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
0 k& X: r! z$ S( D: e, |5 z! rnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

7 n. I! h7 ?$ V4 J" u) W第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
1 R; h  T2 S$ d7 i' j% b, p( W- {( y, k) v
CreateToolbars里面就是要建的工具条和菜单的主要内容:
+ j) F$ M1 F8 r: t! o- J, a* O
1 k. ~- z+ t3 ?& S# F! K
: Z2 _2 @# C! `3 b$ \9 N
//设置工具条2 y0 ~8 C; h4 u: U: S
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
; V' Y  T% b- M% N% P   AddToolbarView(pPartBenchTlb,1,Right);
  E; F; _% ~! ~0 P
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
6 c! J" N5 y" S+ j* F; C4 v SetAccessCommand(pPointCmd,"Create Point");- u2 e8 B0 o- [7 b3 e. }. s
SetAccessChild(pPartBenchTlb,pPointCmd);* T# f6 k( r% [/ z: }8 a: s
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
4 M# k3 v( x! j3 {/ q; v SetAccessCommand(pLineCmd,"Create Line");
; F: G* g. d3 D* C+ | SetAccessNext(pPointCmd,pLineCmd);

2 a; p/ P2 O. k# V$ D7 r
# M$ |) K- t9 O2 H+ N //设置菜单

( s/ g% U* X  _: L" m0 ~  v NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);9 \. G+ K# P' B2 V0 H6 i% e* s: ~
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
5 M1 @+ C; H# J9 J$ W NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);* `+ t, x: V' b) L! ~! O
SetAccessCommand(pPointCmdm,"Create Point");! S. ?7 e6 v' e2 ]. Q" e
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
( W" @1 O8 a. O8 |+ M    SetAccessCommand(pLineCmdm,"Create Line");
6 {5 V  D$ e3 u, U" E
, o; }7 p) [( s4 _ SetAccessChild(pPartBenchMun,pPartBenchSmu);
$ r$ S5 A7 A6 P5 F6 a% c    SetAccessChild(pPartBenchSmu,pPointCmdm);
# ?" x8 Y; ~. @% L0 j* M SetAccessNext(pPointCmdm,pLineCmdm); 5 r2 G) K6 O2 a+ H. n
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
3 e- Z  G9 ]0 L- K  l1 ?$ ~  j工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
" S& Z9 K' z* q8 s# n6 o& qSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
, g$ r! w  o) r( ]. f( z# rSetWorkshopMenu()、SetAddinMenu()等3 a  f2 o1 K* Z0 p2 z- c
NewAccess 的函数定义如下:
  |8 q$ P! R8 h8 L3 ~& b, w0 s% [/ H! WMacro NewAccess (className,variableName,objectName)
' M2 ], m& Q0 l$ V其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
! r' ?, @& q5 s2 f& fCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表1 N4 Z* O1 J5 c
示分隔符)
. V8 e4 W; n" t" x& q2 ?/ W2 Y

& ]! t/ w; Q1 e. y/ z2 I4 o! Y) c% S3 eNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。$ Q! w$ p. d/ `# i6 G- m8 ?4 ~
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
1 \# ?, z2 p9 g6 K$ W- o  N& U在.cpp中加入:#include "CATCmdContainer.h"  u3 A. ~% j+ k( ?2 R) _: y8 V
#include "CATCreateWorkshop.h"
; [$ a% P1 x! Z+ g8 p: `+ d在.mk文件中加入:WIZARD_LINK_MODULES =  \
9 t: L$ d4 p& a! z2 d/ n, _" `, uJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \( E5 W/ ^. Q1 Q- W
CATApplicationFrame+ b- r; G/ Z9 E
# END WIZARD EDITION ZONE
' k( F9 H" {1 x+ W; LLINK_WITH = $(WIZARD_LINK_MODULES)  \
9 r0 F# `" }& V* N6 q8 o, A6 y          CATApplicationFrame ) E" O5 H4 |9 d/ N; a0 D* x
在Identitycard.h中加入:2 {+ w- e7 ]1 |5 \
AddPrereqComponent("ConstraintModelerUI",Protected);
' g: ^1 N3 C( W* Z9 j注意:每次换行时,都要加一斜线用来继续执行下面的module.

& k4 u8 Y" B4 Q. e+ k% Q# |: J% {
+ ?0 T# C( ]4 R9 |9 w8 K, b
, f! w& q/ _* z重新进入编译后,可以看到结果如下:. q9 `/ h) U/ D/ i/ U
% T/ Y1 n/ e6 v1 Q3 j! b8 m5 U" Y
tool.jpg 8 J, k) I! @' ]' ^$ ^

. y; A  s6 X$ R9 m9 |  H
; w  X9 x/ M: W

0 ~* o+ J/ y4 P  R  d" Y
6 [6 |9 X/ @3 E: X6 u& l
% |& J5 N! E' |
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了