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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条
, r3 \" y) e  L6 ]0 \  z% J( `9 l0 L& d. [
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
$ T0 D7 b: t9 {7 K3 \我们来在PartDesign中插入一个工具条。
( l1 i; k) ?) U9 z+ ?+ T 1、新建一个module命名为myPartAddin,并将它设为active。% d# z. s9 K) s# m- x
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框& y* r" j4 }+ X/ W- l
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

7 P( ]' c* f4 ?- M- k0 S addmin.png
5 ]8 x/ z0 |4 e2 S1 Y1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
/ X/ v6 _: ?% G- kCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
' D# \0 ^* I7 y7 U1 g9 m, A! w  [; N" d工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作1 j5 w0 j6 ^: _2 G
台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench: A1 ~5 I& R5 t4 l6 ]) K1 x# c+ x
下都显示当前工具条。
9 t) a  z3 ^+ v/ S+ H& P1 e
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
8 ^# {( Q) d) k3 L1 p$ V% D myAddin CATIPrtWksAddin libmyModule
2 g; t% x3 t3 f" c  j但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。0 ?9 \# ]; y$ [/ Q0 }
在NewAddin类中添加两个Public函数声明:
$ f. u! }$ j. |& s; Y
void CreateCommands();- E# F$ T# }+ y6 g5 Q6 v$ e
CATCmdContainer * CreateToolbars();
9 c- T4 H  P& p5 }) [; H
在NewAddin.cpp中添加宏定义:
- u0 k9 D. W# T7 F! o& p( g, B4 L#include "CATCommandHeader.h"        ) F& o; m4 |, d& H+ j( {( a
MacDeclareHeader(PartCmdHeader);
3 o2 A$ G7 u/ u% k8 K- G. u" B
这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
2 @& S& E! W6 x% B3 xnew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);- _" a! s  D. P" P1 z: I
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
; X% O# p! S+ a% [/ w, D! o
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
! k# s3 d  V) c
4 t; Z  @/ O# `$ w4 A9 F! m9 ICreateToolbars里面就是要建的工具条和菜单的主要内容:
  b7 k* Y7 T+ m( |. D1 |) |& @
9 c; j4 M1 N) ]8 f" c0 Q% Q  M: s

& _5 H6 v# e% [1 o //设置工具条
2 |5 v, w3 n5 u: {$ M% X& d+ G2 } NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);6 t& z$ e: R$ R
   AddToolbarView(pPartBenchTlb,1,Right);

- r5 y7 g& g( X8 N9 [/ b NewAccess(CATCmdStarter,pPointCmd,PointCmd);
/ l" Q" |# J% ]7 t5 \7 m" h0 y SetAccessCommand(pPointCmd,"Create Point");
3 n) y" ]2 e# @9 k SetAccessChild(pPartBenchTlb,pPointCmd);
' o1 K" \8 _' j6 B' W NewAccess(CATCmdStarter,pLineCmd,LineCmd);) U& M1 s5 _! e& L
SetAccessCommand(pLineCmd,"Create Line");
9 z8 [4 q! d( {/ d SetAccessNext(pPointCmd,pLineCmd);
2 U0 q7 l7 R2 U) l, C
' }3 h" q: P# n( g
//设置菜单

0 B( U  s- c9 j5 P9 ]& j% m NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
: W. w. F& c) i  Y' c NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
0 ]! P+ t4 C- M" C NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
  \: A+ s$ R0 S9 y, v% \8 i SetAccessCommand(pPointCmdm,"Create Point");, T2 ^; Q4 e/ W3 g, m- E" h9 j
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
- C! e( U0 \" |2 @9 C    SetAccessCommand(pLineCmdm,"Create Line");
6 w; r. b) Z/ M / M7 }+ v' M. m# ?& Q
SetAccessChild(pPartBenchMun,pPartBenchSmu);
! z, J) o9 r2 V9 X2 b    SetAccessChild(pPartBenchSmu,pPointCmdm);( }4 C# N6 l- y, N$ J* q  K% Z7 `
SetAccessNext(pPointCmdm,pLineCmdm);
  j5 U2 h- P) ]3 u) w% x    SetAddinMenu(pPartBenchTlb,pPartBenchMun);( f9 H# g, S$ p1 f; S
工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、% A6 K' Q  j& ^2 Y" h. L
SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
! F) _8 X5 S2 t6 N7 p$ jSetWorkshopMenu()、SetAddinMenu()等6 j4 g: M7 K" C! t
NewAccess 的函数定义如下:
4 E/ ^/ k2 R/ j" MMacro NewAccess (className,variableName,objectName)
) k4 X7 v$ t6 o* _4 R, q其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
0 t0 ^" K/ B; j9 [6 uCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表, f# n( {( m8 [+ M1 {
示分隔符)
3 m6 c2 _  M4 z. \4 K2 a% u/ J& B

9 K. M1 Q) N1 I3 jNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
5 ^0 N* q0 u4 l( Y! \# ~7 ~# O4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"9 }, J( R% G& T8 i& }' R- P+ S
在.cpp中加入:#include "CATCmdContainer.h"
  ~; B. S0 x, ~#include "CATCreateWorkshop.h"
- h& b8 w) Z4 p& ]0 }在.mk文件中加入:WIZARD_LINK_MODULES =  \: z& p" D9 b2 [, x
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \( n' Q) \. R/ i5 h$ f" I
CATApplicationFrame) y3 N6 m% H9 U" Y1 T' O: c
# END WIZARD EDITION ZONE - b/ T/ k& O- S& J
LINK_WITH = $(WIZARD_LINK_MODULES)  \9 H1 h5 C. R' g0 S3 L6 Z9 ?$ [/ F
          CATApplicationFrame " X, h. g. c2 ^! D( n+ [
在Identitycard.h中加入:
. f" @) V8 K, O- p8 q( TAddPrereqComponent("ConstraintModelerUI",Protected);
6 t0 q1 }0 @6 G, U7 i注意:每次换行时,都要加一斜线用来继续执行下面的module.

5 F" r* l$ y/ Z9 `5 v' a) T
+ l  J4 f. a9 h
! b$ s% X/ I& U" ]% Y重新进入编译后,可以看到结果如下:/ z- H; H5 n8 ]' d- V
! Z+ {) r% e# I* q/ i
tool.jpg
# l. n  H6 e- d* a
' c4 W$ v4 j1 F: E) S( d8 l$ P
. A! {/ M' w: s  o

: C0 g' f; M* S0 K, R7 L! a" K7 e' ?0 w5 G) o. e$ X
5 t$ G% `5 |3 {- Q& R; [5 r
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了