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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
2 Z* e$ W" D" W! O- y
( u0 Z; Y2 |2 `+ l0 Q5 f所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。) U% J: L, E$ C6 @2 W7 q
我们来在PartDesign中插入一个工具条。, U3 y! G1 M+ Y3 g& ^% }8 t
1、新建一个module命名为myPartAddin,并将它设为active。( F( x5 a8 n- S/ b0 R/ o, D
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框& @1 h7 z  P6 q
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

! ^7 T1 y$ K/ f4 M0 m$ [8 D2 Q% G addmin.png
5 I" M$ R3 P: {$ ^1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,- E1 o! p8 X2 |% ]
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
- P/ x% D; E) e! Y工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
1 I& J$ I2 j9 |9 K台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
- p+ k0 q* ]' _% `7 B0 j( q; h, w, W7 @下都显示当前工具条。

8 p( e% p( C2 W  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
1 E* i1 Z1 f+ i' k* ^0 u1 U/ z7 r myAddin CATIPrtWksAddin libmyModule
4 g" t' J. N2 u" c$ e$ f' N& l但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。/ ^. S. w5 k! [, @# @' U- \
在NewAddin类中添加两个Public函数声明:
5 ]4 {! F' @5 a0 ]
void CreateCommands();0 M" d2 D$ z, C) x- K8 Y
CATCmdContainer * CreateToolbars();
9 m/ Y+ `3 X# [' }
在NewAddin.cpp中添加宏定义:4 ~: x4 d0 u( @/ t2 p
#include "CATCommandHeader.h"        " a# a; O8 }& m' a5 V
MacDeclareHeader(PartCmdHeader);

+ D  C, L' N! c$ J% }* g8 U这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: . N, X6 a: o- O# ~
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
$ J0 g6 N3 }" |8 C2 a4 Y3 H8 q0 pnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

  t: J! d' R: b  `- C第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。1 }' W  u/ @; l8 N& q/ f
! j% |3 f5 Z# i0 ~1 i
CreateToolbars里面就是要建的工具条和菜单的主要内容:' m/ O0 r/ j9 w+ ]5 x% Z

& Q) ^3 ~! N5 t

% {. C  G/ [; {- r! s+ R4 k //设置工具条! p+ _" x' ^" n9 g1 n* E/ p# ~5 V
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);% |+ _# |7 O0 |8 ^1 X
   AddToolbarView(pPartBenchTlb,1,Right);

: O6 q$ d; `4 i. O! \ NewAccess(CATCmdStarter,pPointCmd,PointCmd);4 A7 b2 q! B& F4 T$ l6 X
SetAccessCommand(pPointCmd,"Create Point");+ G' A! [9 E- K' s) q9 B
SetAccessChild(pPartBenchTlb,pPointCmd);
, P3 q) ~3 a4 P9 j0 W7 s NewAccess(CATCmdStarter,pLineCmd,LineCmd);; E4 e2 s3 e3 J9 u- D
SetAccessCommand(pLineCmd,"Create Line");
. k( T6 d) |/ g6 B0 Z3 v. f& l SetAccessNext(pPointCmd,pLineCmd);

% @8 E+ i0 c8 a$ k: C! {
7 K: {* F6 w$ E. {* P4 h) d/ W //设置菜单

* ^- N: B6 e9 N* @- Z- d. i8 f NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
5 ^6 c$ x7 J; P. S- P  F NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);' q, U6 J  R  m! u: H8 |; `' i( `( C
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);( C: ]% L( R' Y
SetAccessCommand(pPointCmdm,"Create Point");
9 f% Q1 `( F# G- I    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);% g/ F3 r. r( {5 X
    SetAccessCommand(pLineCmdm,"Create Line");
& \! O0 c( a0 U9 x8 _' x
' b$ E) M  q9 Z1 W- ` SetAccessChild(pPartBenchMun,pPartBenchSmu);
/ L# W' f( \4 L5 l7 f8 h    SetAccessChild(pPartBenchSmu,pPointCmdm);9 o  s9 S' `) B6 W
SetAccessNext(pPointCmdm,pLineCmdm); 5 d6 a, N9 e6 c9 X. ~% d
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
3 x4 L' m' j; m. a! F工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
( R, p+ J) `5 j9 I: FSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
5 B% `; e) y% v/ S4 r* q1 LSetWorkshopMenu()、SetAddinMenu()等
- a6 k  C$ I8 n& c! iNewAccess 的函数定义如下:
$ |- T4 ?7 ?, c' k& f8 zMacro NewAccess (className,variableName,objectName)
: F4 Z, q8 w2 @2 x' v' Z3 d其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
5 l+ N: r' z) Y& ]# V- `CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
  {% B# |) s6 n; [示分隔符)

/ L- p/ V# M0 _. ]+ o
# K6 J  y$ L8 }; g* d4 u$ U5 jNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。, t) F0 g( S3 N& k2 c9 v5 [
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"# W* r$ r/ T- K, A% D
在.cpp中加入:#include "CATCmdContainer.h"' x  @; E- G6 ~1 L
#include "CATCreateWorkshop.h"
5 B, q( k$ x6 L9 \7 o7 k3 ^+ o在.mk文件中加入:WIZARD_LINK_MODULES =  \4 s7 |9 {0 p7 l6 ?
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
: k( t' e2 Y1 B4 v# L7 N- r0 cCATApplicationFrame
+ O6 V, H8 g- Y  m- y0 M: R# END WIZARD EDITION ZONE ' I, A1 E9 r& `" M+ R
LINK_WITH = $(WIZARD_LINK_MODULES)  \" \5 {; S3 q6 L) J0 q
          CATApplicationFrame
4 C2 Q4 X2 u1 G8 u( j$ o9 r在Identitycard.h中加入:
7 Y" c' j4 I7 k* I0 rAddPrereqComponent("ConstraintModelerUI",Protected);% m% n2 b" ?8 ^3 b
注意:每次换行时,都要加一斜线用来继续执行下面的module.

7 x# V9 a: {0 G8 r, z% e$ D
4 G8 l" d1 ?3 q% g1 ^/ Q
% t0 E/ E! o$ [! Y  E* v  ?" u重新进入编译后,可以看到结果如下:  O: I4 l2 G: ]: n
) ^. q* t$ ^3 E3 r8 s
tool.jpg / r, y- o5 u$ B. Z* x

1 E0 C* Y# [6 w; @+ m5 A/ b

6 {8 C$ e2 E4 S, i1 H" c/ M
* Z/ n" b* @( \8 q9 ?! u6 y1 a
: ?9 g+ [  r. y4 O9 D3 p0 B+ M
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了