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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
' m& G  O. X0 \8 P4 U2 Y
3 q  f& k, O4 n1 }* A% [3 X  R! _所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
  v& H; k; Q! @我们来在PartDesign中插入一个工具条。
* |9 Q7 x7 v9 r+ a" c$ ?5 o9 f 1、新建一个module命名为myPartAddin,并将它设为active。
$ K) c  V5 N4 g+ |4 @2 g 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
; O6 n8 [' D% ^- ]输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

) [! v. V) h5 t  M# `9 q6 @ addmin.png   q5 I' [7 h% i& |  W
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,1 A# j+ \: k$ |  R$ ~+ m4 W9 S+ J* i5 [
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前1 r+ N6 L# |' F1 T4 \0 |/ w6 {" i
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作* q4 h' s) ^  z& q
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench# d5 F8 a! b* x* e5 X+ F9 ~
下都显示当前工具条。

0 Z( K& D! ?0 `+ p+ f  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:& h) y7 R; X5 }: H3 x8 O! l
myAddin CATIPrtWksAddin libmyModule( ^! k& U7 G3 \
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。* ~- |9 P/ M; l/ \% v9 ~' S
在NewAddin类中添加两个Public函数声明:

! M/ e5 n$ V: M; h+ Mvoid CreateCommands();$ P! A' G: S1 z, H1 _
CATCmdContainer * CreateToolbars();

( {! n& `: J4 [: q3 |' `7 v' \在NewAddin.cpp中添加宏定义:. p/ [" s. B( x# G0 p; ~
#include "CATCommandHeader.h"        
/ j2 m1 M+ c  O3 vMacDeclareHeader(PartCmdHeader);

# Z; D. Z1 _5 b' H这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: & u9 y; E0 m' M# D$ K% ~
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
9 E# w! @1 y2 _6 G* dnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

! N0 B) O+ l/ V" ]& t2 ^9 i( _第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。+ |8 M1 _; o. y. |' ?( L
# E5 d3 l# E; k# ^
CreateToolbars里面就是要建的工具条和菜单的主要内容:( [" h! ?1 X! i( X

6 N# T; o% n5 d6 M4 Q

" b8 g3 g, `! }8 w) ^- q! k% c //设置工具条, h5 m. D) W7 k5 ?/ [  J! |
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);$ o0 {, \6 R3 J8 e9 z% n, Z# a7 a9 x
   AddToolbarView(pPartBenchTlb,1,Right);
6 p* u% c1 d& f; D  N+ [
NewAccess(CATCmdStarter,pPointCmd,PointCmd);; d+ m# i( Z5 j
SetAccessCommand(pPointCmd,"Create Point");
0 U' e+ o8 t, J* V$ z0 V SetAccessChild(pPartBenchTlb,pPointCmd);8 F. c/ f- _/ q% b
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
  g# h6 J) W5 h: |3 g+ c0 e SetAccessCommand(pLineCmd,"Create Line");% @7 Y; S5 p7 d" C- t( j! {  {5 \
SetAccessNext(pPointCmd,pLineCmd);

- v- V$ D5 c* x7 h
* X8 o( [  f2 A, Y' e% T8 R! h; S2 e //设置菜单
6 V) a& l' `" Z; f3 `
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);" A0 B8 C) J3 U/ y9 n* ]. i* B
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);% s& s  N8 e4 n" _
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
! ]2 L8 |4 Z* D, e3 I SetAccessCommand(pPointCmdm,"Create Point");. b, F2 F$ h/ w
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);4 X% A6 y1 w& C- X
    SetAccessCommand(pLineCmdm,"Create Line");
6 u! y0 J9 J$ Q6 @0 c 1 g/ `: p$ E" |8 r
SetAccessChild(pPartBenchMun,pPartBenchSmu);. Y/ Q2 T0 s# p& L; @; F
    SetAccessChild(pPartBenchSmu,pPointCmdm);
% n! K& y* X* W! h5 v9 b- k% F SetAccessNext(pPointCmdm,pLineCmdm);
% k0 O7 ^" Q6 S- E    SetAddinMenu(pPartBenchTlb,pPartBenchMun);& Q4 Q# \* S( V! l) {
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
1 [1 M  F: p. G1 E6 c  nSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、, x. `% `* L: i9 X! |* Q5 s
SetWorkshopMenu()、SetAddinMenu()等/ F( A9 B1 U1 p' v8 E5 r3 q
NewAccess 的函数定义如下: ' u) G) n8 W2 i: M8 g* [5 v
Macro NewAccess (className,variableName,objectName) 8 _1 r: i3 _9 a
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、# |- J! R5 p  S/ k  C0 A
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表9 v& V2 `* ~  q, D* ~% V# K' q* Q  n
示分隔符)

( j6 t/ a" I) }: x! w
, s' o, B8 D8 e# rNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。% i: L/ p/ L) D
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
' G, r' h* `5 W在.cpp中加入:#include "CATCmdContainer.h"( i8 _5 T! k* p
#include "CATCreateWorkshop.h"! S- z, t* M6 T/ p$ o: C8 @
在.mk文件中加入:WIZARD_LINK_MODULES =  \: G- I& c3 @, y7 V5 Q& d8 G8 M
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \7 K' M4 s1 o; v% U' c0 ?8 C- T5 b% j+ s/ w
CATApplicationFrame
$ A8 R; O$ c  n/ u2 W$ T) \3 n# END WIZARD EDITION ZONE & Q% f& d& f  Q5 b3 t' ~0 K0 a1 y
LINK_WITH = $(WIZARD_LINK_MODULES)  \
! b$ \6 q6 l4 v; @& K. i! o          CATApplicationFrame / o5 W8 |8 e( B3 F$ e$ y
在Identitycard.h中加入:
# w" X) ~$ `- ?9 qAddPrereqComponent("ConstraintModelerUI",Protected);; k& }, E1 h% o5 {/ l' Q
注意:每次换行时,都要加一斜线用来继续执行下面的module.

! R4 A1 q& z: a* [  O: q+ }# Z' m+ h8 Q

; ?3 Q  W, K& `+ w7 \: s' x& _重新进入编译后,可以看到结果如下:6 u" J7 \6 K/ z2 N1 o
0 Q; n5 L& n9 P
tool.jpg ) f' R; F! b$ p; G1 S1 }- f" g
! t# n4 d( W" o9 i' x/ f6 b( T& U
: _6 Q+ {3 N# J. E- S' h5 Y
* [7 R1 R+ S" N, u* p& c; N

; U* X# T6 R5 F* x/ f1 ]$ J
6 O5 i- j( P0 a: |
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了