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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
5 v, z) r8 W) u; j! B- c. h. |, I" E
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
' R- x7 ?: Z* Q1 B我们来在PartDesign中插入一个工具条。
/ ^; p7 e2 U# K 1、新建一个module命名为myPartAddin,并将它设为active。' w# U& G" V" c3 u3 i: i
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
/ S$ i4 g5 n3 }7 v输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

6 E" C* o) v( c4 `; O( z addmin.png 3 h9 ?: A' E6 g; O6 X. }
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
. j# ^6 c8 ?1 `8 x* W# R7 vCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前5 B: g4 y6 z" S! `
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
- E! `9 ^1 G- u8 {* E台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
! U. l5 b( M3 V( I7 o8 q下都显示当前工具条。

5 v$ ^3 h" P+ t. {  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:% x' _3 Q8 v3 C' Q1 t4 [7 |
myAddin CATIPrtWksAddin libmyModule4 q4 e; i3 i- O* v# a
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。# S8 K8 y/ Q9 y1 N5 K0 D4 j
在NewAddin类中添加两个Public函数声明:

" p0 d; M$ l$ H$ u/ }9 T! c' Pvoid CreateCommands();# ~; l( \! X- p0 D! Z. i  K4 Y
CATCmdContainer * CreateToolbars();

+ b0 k" B+ s) Z- e在NewAddin.cpp中添加宏定义:  P4 w) T3 M# B$ J. F# `
#include "CATCommandHeader.h"        7 o1 j3 Q, V0 Q1 m/ m
MacDeclareHeader(PartCmdHeader);

" ?( C0 h9 I1 O/ @这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: " K) A! _/ ], ^, Q' K
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);2 u+ Z* o  Z8 G- n: r
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
$ P. e7 Z5 z4 b! {0 q# z
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。% ]( M7 k3 l& f+ \$ L9 v. G

, \0 Z  ]8 _0 A' P: o* i& _CreateToolbars里面就是要建的工具条和菜单的主要内容:* ?* ?4 f- E4 p/ X2 V8 K- \

- D) k3 w' `! t

( u/ ]8 K3 B' g7 B; {2 ~ //设置工具条8 H7 _% A7 d4 a8 {' q
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);2 V1 q# x0 G/ C  s+ x/ ~2 W# ]0 N
   AddToolbarView(pPartBenchTlb,1,Right);
7 @2 Z+ N, B" m) m0 a
NewAccess(CATCmdStarter,pPointCmd,PointCmd);, }/ D1 I7 ^7 x2 d" j5 N
SetAccessCommand(pPointCmd,"Create Point");& a" }9 r1 i2 L8 {8 p5 N7 ~
SetAccessChild(pPartBenchTlb,pPointCmd);! _5 a0 |3 z6 S, U9 B
NewAccess(CATCmdStarter,pLineCmd,LineCmd);- S4 s  e7 e, }1 I; J9 h
SetAccessCommand(pLineCmd,"Create Line");; C" O; y7 c" P/ u. i- W
SetAccessNext(pPointCmd,pLineCmd);

/ D# U+ N$ `$ [* R: t  l
& y; [; Q( g& K  \  s //设置菜单
+ p8 f+ Z1 L8 ~; |7 S
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
* R/ D6 x+ Z( N NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
( v' J7 P! X& G NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);( E0 ~) `2 r/ y# I8 L# Y
SetAccessCommand(pPointCmdm,"Create Point");: t1 u; C1 i$ l: s& c8 z
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);( i8 v0 E  X# D- {# E: D  {# Y! T2 M
    SetAccessCommand(pLineCmdm,"Create Line");
) |* D& M5 K$ s5 z
; ^, T# @7 @4 o3 _$ \0 c SetAccessChild(pPartBenchMun,pPartBenchSmu);
- i: R8 k+ N2 a8 W! o    SetAccessChild(pPartBenchSmu,pPointCmdm);  i5 G7 j, k' F
SetAccessNext(pPointCmdm,pLineCmdm);
2 F7 f4 a) l8 M    SetAddinMenu(pPartBenchTlb,pPartBenchMun);# ?% e0 {# N& \
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、8 w5 U& i8 W6 ]: U2 j7 M
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
5 @; [+ |% c+ l- ^. p: h6 fSetWorkshopMenu()、SetAddinMenu()等  u" e; Y) L: T6 Z; T! z& C
NewAccess 的函数定义如下:
2 }2 }( A8 o$ C# P$ M% Z; m$ BMacro NewAccess (className,variableName,objectName)
! E- L/ ~9 k, n/ h其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
% Q% _! t9 S* q3 C7 l& ~# S: V& `# U# iCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
/ d$ x# [+ \% |1 W6 c% H示分隔符)

" n+ f! C% t- a0 ]  ~$ O2 M0 D' Q, |* z1 f, t
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。6 i7 N4 R% k1 I
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"1 x$ `0 ]5 Y( p2 ]4 e8 z
在.cpp中加入:#include "CATCmdContainer.h"
3 o2 @4 g6 Q3 [3 h1 A. s" S#include "CATCreateWorkshop.h"
" Y3 ?  I4 e: \2 q. C& ]9 I: H在.mk文件中加入:WIZARD_LINK_MODULES =  \
  e! A3 R5 d: S( i; xJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
6 _& l% g: N1 L, K. N. XCATApplicationFrame! r, {' b5 z, R* k# ^5 s
# END WIZARD EDITION ZONE 9 J# t2 S' I/ n5 T! E6 t
LINK_WITH = $(WIZARD_LINK_MODULES)  \
) U! ?$ u0 z0 X0 N# N$ |          CATApplicationFrame
4 t4 W1 a+ u" B- o1 i, F在Identitycard.h中加入:
' q5 [' T6 B7 Z& }! ]7 t8 HAddPrereqComponent("ConstraintModelerUI",Protected);
* D' G7 P. L6 c4 t+ M, B( T( {- G注意:每次换行时,都要加一斜线用来继续执行下面的module.
  o9 O- n0 B  x
# s: z- l, a& ?& g

" ^4 I, Q% y# s重新进入编译后,可以看到结果如下:' p0 I1 m+ u- \* `6 i

- x5 x' ~2 ]$ j! p) P# t' N3 M
tool.jpg
% R# |5 [/ K0 D" E4 N# ^2 D4 q! o- u! I
' w  M" M, x* A/ j$ x8 h

8 u) m* [) M' ]0 x) }2 `- Q2 m* k% v4 l# p+ `) m

2 W* g- F+ V2 _$ ^3 k% L2 I  G
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了