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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条1 e  i5 n1 I5 w, S
7 L  ?( l- B. @' s
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
! \. O( F, X! f& O; f6 t5 l. J8 l我们来在PartDesign中插入一个工具条。8 @. |# i% @4 Y7 B
1、新建一个module命名为myPartAddin,并将它设为active。
" B8 c3 K4 T( S 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
# `  r5 q( o6 w2 B3 y输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

  k/ T' `* c) N8 F+ e/ f& e0 t5 z* g addmin.png . X1 C. r9 T) P. O! J
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,$ }$ P+ e! m& ^
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前* l. v9 C# ^! E' v+ e
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作' D5 g% c3 s# i/ \
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
( Q3 o0 X8 h9 w6 O下都显示当前工具条。

, K4 v5 s' @5 l! n  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:0 \/ I$ a% g+ U8 \* k
myAddin CATIPrtWksAddin libmyModule
5 x# G5 j4 r+ x8 d( g$ k但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。2 p9 `+ ?  G& M) w8 M5 r
在NewAddin类中添加两个Public函数声明:
7 r* `9 m( M7 B" p: T6 ~5 ^6 p
void CreateCommands();
8 b, ^% h* v# M" i* ~, VCATCmdContainer * CreateToolbars();
1 G5 T3 j; N$ J1 J# V
在NewAddin.cpp中添加宏定义:
$ Y7 m% z! {( W0 y6 K) _( O: q! s#include "CATCommandHeader.h"        
2 [" C; X" W4 L/ S9 NMacDeclareHeader(PartCmdHeader);
9 ^8 r3 n3 |1 F5 h- ?) I8 T' D; [
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: / s2 p7 s: O& G/ F9 G
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);% D+ c! S% v* u, k  k) m
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

0 [5 x* G' {: G% `# i第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
# ~# H. z6 K$ d( m
/ |0 b6 V( E5 X- T9 ICreateToolbars里面就是要建的工具条和菜单的主要内容:& s/ }, K+ a# d2 Z5 w; v. B2 s( i
) f5 _$ q/ S9 ?# i+ m) p) H6 r

" \$ ^9 z0 q8 H4 z3 W //设置工具条  |# i1 H( V0 G( T! L5 Y; X
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);5 l, {6 C$ }  `$ @, r  i  J$ y; ]4 Q3 }
   AddToolbarView(pPartBenchTlb,1,Right);
  h4 G0 e9 p# E) d8 S
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
; E. U4 d. W0 v SetAccessCommand(pPointCmd,"Create Point");  K4 J# H! k  `
SetAccessChild(pPartBenchTlb,pPointCmd);2 T  _  T- }0 N7 }% O2 }- M0 d
NewAccess(CATCmdStarter,pLineCmd,LineCmd);5 r( \, y) N8 R9 r/ \& E: V
SetAccessCommand(pLineCmd,"Create Line");
  M/ q# L+ `0 B3 a; b  b SetAccessNext(pPointCmd,pLineCmd);
4 U, i, }( z$ r6 c1 M" N8 Z
: ?( z! ~6 g- v$ c6 @
//设置菜单

6 m" t2 J1 X0 z. k9 h NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
) P5 T/ _* U6 R8 t2 R( Z! U$ | NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);4 t* c0 N8 {! O+ @1 b1 T
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);7 o0 M9 Y  v$ p% o, `' g! Q
SetAccessCommand(pPointCmdm,"Create Point");
0 |) Y8 x5 I! h    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
/ D5 D/ C0 G8 Z8 I0 |; v4 s, n    SetAccessCommand(pLineCmdm,"Create Line");
, }' p  f8 s$ W$ V) o4 ]: @! w9 K  J / U* @9 Q5 X% g- v- N; ]& V0 o
SetAccessChild(pPartBenchMun,pPartBenchSmu);
$ x0 q7 ]  E  I1 V  F# D  v    SetAccessChild(pPartBenchSmu,pPointCmdm);
; r" w4 A/ l- \$ U SetAccessNext(pPointCmdm,pLineCmdm); 3 L. U! F5 S1 c, d* X, T% k
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);+ `4 A; d8 b/ X# A
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
; d/ C* M* u" _SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、7 a6 {8 ?9 M" \3 P) W. ~3 p
SetWorkshopMenu()、SetAddinMenu()等* {9 l) k4 Y1 p8 L2 S
NewAccess 的函数定义如下: 7 q; W0 ^3 F+ W! D# Y
Macro NewAccess (className,variableName,objectName) , I8 L4 M$ K* j  x( @
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、$ [. [6 K  F3 f) J
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表: G! F3 [2 g- u$ N9 k
示分隔符)
4 X! J5 s* S( b, k3 c

4 N" j: R) A4 z9 b+ HNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
9 z; }; d( C/ R$ G+ X" @3 C4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
* K; d0 l' t' ^0 P! K! z在.cpp中加入:#include "CATCmdContainer.h", I; @8 k- U! x/ d
#include "CATCreateWorkshop.h", ?0 X4 O9 _5 L% b; K5 |
在.mk文件中加入:WIZARD_LINK_MODULES =  \) B; }0 y; i7 f8 V+ {
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \  `' j2 ]: x8 e; b) O
CATApplicationFrame
- n! \& ?4 c% N& K+ O: L8 E' }# END WIZARD EDITION ZONE
" U3 f: ]+ o; h" p. i5 jLINK_WITH = $(WIZARD_LINK_MODULES)  \: t. {2 N& V- W. y) Z
          CATApplicationFrame
0 l5 J2 \6 j% B! h2 ]* a. q在Identitycard.h中加入:) }; [  ^6 T+ }
AddPrereqComponent("ConstraintModelerUI",Protected);
) G" {' @; F! W! t6 R8 K& [* ]注意:每次换行时,都要加一斜线用来继续执行下面的module.
: N  A0 D4 a) j5 M0 x, U7 e

) \# [. h( W7 Y! Y) t2 O
2 u( C# ]& F0 {4 D5 ^9 }9 Z重新进入编译后,可以看到结果如下:
( m( ^) Y, b& w% O8 ~& A$ d) e' Q# _$ L, Y; ^2 N7 `/ G
tool.jpg . i7 y+ l6 r$ o: x0 f6 E; S- W
5 _2 y4 Q8 n% @0 e# ]) Z7 r

1 ^# E9 }- A; b" k1 R0 o4 Y& k+ m) x& }  [5 O# D
* D+ l- h; H. @4 U; X" M* v
; B! h* T# Q; p9 i
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了