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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条2 F) r9 V- [1 m8 t2 V- R

$ H: a/ A1 _5 b. ~& A2 i7 v, M所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。/ ?: d  [: N8 k  a/ `3 X
我们来在PartDesign中插入一个工具条。
) ^3 I, j6 |1 X1 z 1、新建一个module命名为myPartAddin,并将它设为active。
% z' _5 ], g, n, [$ q6 Y6 u7 U- t 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框# g( r7 ^& T" A& s: ]4 `  M2 Q
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

3 W9 H. d: ^- _3 y addmin.png
% n' t3 Q3 U, |2 q7 z1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,( ]5 v4 I' T$ i1 A7 s7 \
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
, w. n- G, _5 C) F' X- K工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作, \7 Q/ B6 F( c
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
- ?, O* z7 Z/ ]* g7 c2 q下都显示当前工具条。
7 I( v; a7 Y$ w2 X: [/ J% m
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:) N, r2 J4 s. x
myAddin CATIPrtWksAddin libmyModule# S! |3 J& P' u) K, I- X
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。, R. Q* v9 @% E7 d' ]( n- D
在NewAddin类中添加两个Public函数声明:

3 p8 J! Y  K# ^% c/ [void CreateCommands();
' z" A9 b; L" }CATCmdContainer * CreateToolbars();
" Z4 g! ~0 D) K) w' v0 m
在NewAddin.cpp中添加宏定义:9 x* u# u. S7 |, ~
#include "CATCommandHeader.h"        & {  ^  _0 h5 a7 N, @) O  l" h
MacDeclareHeader(PartCmdHeader);
) X7 s  f$ }+ p* x
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
9 y1 u8 K: b% l% B0 T. j$ ?new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
: l: r! Q4 H" }" {0 M+ h: ^new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

5 u$ U6 e3 K; V2 T第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。" C* P2 S: v9 T4 j

+ Z9 P0 i) y: q$ ~9 yCreateToolbars里面就是要建的工具条和菜单的主要内容:
* `& a5 R, C+ m& F- q( _
1 _" p1 p0 |( x( z  e3 X5 I
- o  x9 e, [2 D9 D
//设置工具条& Z" X" @/ N' m- K
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
4 C" Z2 f3 e1 R( n   AddToolbarView(pPartBenchTlb,1,Right);

* R/ c+ V9 U0 y/ k7 C9 b) @/ _ NewAccess(CATCmdStarter,pPointCmd,PointCmd);6 k% D4 y, J  j3 Z7 @
SetAccessCommand(pPointCmd,"Create Point");
; T2 N. I: \! y# N# g- o SetAccessChild(pPartBenchTlb,pPointCmd);
; m8 X. {. q7 l. O NewAccess(CATCmdStarter,pLineCmd,LineCmd);! r8 B. b: W7 A: R+ }6 x
SetAccessCommand(pLineCmd,"Create Line");
5 g& X0 X% ?/ X7 ]  a- A" l SetAccessNext(pPointCmd,pLineCmd);
; W" p7 n7 n* _* I) z( F

( Z0 r; ]/ [" \7 g' @ //设置菜单

# R7 `6 J$ e5 ~% o' Q8 X. v5 q/ J$ V NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
* G: C2 z2 |1 d( ~' I& ? NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
4 p6 Q7 p$ _2 ?% [' K2 t' @  R( ?7 u( V NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);" _+ ^6 l8 B' g& D- y* a1 Y
SetAccessCommand(pPointCmdm,"Create Point");
2 n- v1 y6 i+ ]% R, D    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);6 g. Y- v& W- X, h- g
    SetAccessCommand(pLineCmdm,"Create Line");- r4 L* W0 _' ~# S; H& N0 z- {
& p* q9 F$ U9 ^, |3 A
SetAccessChild(pPartBenchMun,pPartBenchSmu);
* c3 D8 V0 _: w' F/ p    SetAccessChild(pPartBenchSmu,pPointCmdm);
# }3 s3 d, d! [+ a+ k( X; h SetAccessNext(pPointCmdm,pLineCmdm); 8 `2 F% \; g- g" d8 ~
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);" T; r* b! E3 J/ I+ T
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
4 p7 S7 i; E0 D7 Q3 T& SSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
  C$ l( o0 v' M/ \7 ~SetWorkshopMenu()、SetAddinMenu()等
  w) X2 H5 o6 ]NewAccess 的函数定义如下: 0 A6 x5 \6 j, [2 C1 ^
Macro NewAccess (className,variableName,objectName) 7 X- O- m! z6 l( D. n( s3 B1 q
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
; _, U  [3 c& \CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
( }  H- M9 ~3 m9 B9 M% |  s8 C示分隔符)

, v0 O' R! t( F2 ~1 D1 Y! l
" J: X0 p8 n, S+ b$ DNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
1 d8 C% |5 G* f- V, n4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"4 d3 ^, l8 D3 U) w) `& i- t1 W
在.cpp中加入:#include "CATCmdContainer.h"
- f( n5 Y" |+ T& t9 U7 n4 x#include "CATCreateWorkshop.h"
2 v7 t$ X6 J+ J' C# _在.mk文件中加入:WIZARD_LINK_MODULES =  \. k4 {5 R2 Y: Y& o( C$ \( P& x
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
" r- e, q# |0 E8 l% O6 L0 N; T( @CATApplicationFrame
+ S& ?% R6 m& Q/ a# END WIZARD EDITION ZONE
- }4 ^  y) b% ?5 A/ hLINK_WITH = $(WIZARD_LINK_MODULES)  \3 E* \4 s) y  ?
          CATApplicationFrame
2 y0 N5 I( g  e/ J- @在Identitycard.h中加入:9 B& U  C3 U% n: h3 k6 ~
AddPrereqComponent("ConstraintModelerUI",Protected);
9 x+ W1 V$ c$ i注意:每次换行时,都要加一斜线用来继续执行下面的module.
# N" l2 _# I9 K- V/ C

! F( Y# ^/ {: b- I( {( A1 Q1 ]- h% Y2 I  r0 Z
重新进入编译后,可以看到结果如下:
: r6 \2 u9 l& l7 x2 V
" {' F, G; r: Z$ c9 t% W- z
tool.jpg 9 D* @' I) N6 Q. k2 k

4 y" f1 e* \- _+ H
7 X" k, I4 @" G6 L
/ \8 Q3 n2 [2 O; W: T* g9 x  P: o
- H6 o; R5 ^: _4 O) @

* s( m7 g( F% P8 b$ f
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了