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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条8 L" [$ ~; {8 |2 s+ B) Y
6 g* ?# `- s2 P! g0 f# G" }3 m
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。! S9 C4 I5 i6 ]1 p( b
我们来在PartDesign中插入一个工具条。
8 I% R1 h6 Y3 a: s$ T! ~ 1、新建一个module命名为myPartAddin,并将它设为active。
( w7 |9 B! J# `& O0 @ 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框  y9 F, o% }  p% a# X( g
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

8 q1 h0 m" N3 u- x# w. X( V addmin.png 6 e2 N/ V  U% k; @# S7 Q
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,: q/ h) G8 r5 t5 b& ~
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前: P- A: E" b" ]6 |  W
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
0 ]! O5 q. D$ O台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
; j0 T% W! w2 k6 E, d下都显示当前工具条。
$ `6 T* U2 F3 m4 B# L8 g
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
, f7 L% I) Z: d1 Z" W8 m myAddin CATIPrtWksAddin libmyModule; i3 y# b8 e7 s. l% Z# N: o
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。
% \: }# F) C% J0 T6 I8 @: a- y1 z$ Z6 ]在NewAddin类中添加两个Public函数声明:
, ?3 h# @6 J! J3 n; L/ s& V
void CreateCommands();  v( ^6 q/ d! z
CATCmdContainer * CreateToolbars();
  F2 c- s5 _; n' F3 ^
在NewAddin.cpp中添加宏定义:
% D* j; n& S- k- l: w* b#include "CATCommandHeader.h"        
" z; `9 u+ u+ r) N# q' p; I* fMacDeclareHeader(PartCmdHeader);

' p! D% [, g* W% s1 L这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
" s: }' g) A0 ?( \new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);, }' U4 e' }* k# D* [0 A+ `' Y; t- G8 q
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

4 |0 Q. p- n8 c+ l' v/ I( Z4 {6 V8 Q第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
6 ]0 p3 R: n2 E2 r% e
4 w6 E- o, J; i4 GCreateToolbars里面就是要建的工具条和菜单的主要内容:$ D8 @4 N& Z& l8 n2 `* O* v
' X; L+ W% y, i7 m9 s. ^7 U! z

# J* ]9 E* }9 ?2 e0 D; m5 |' y //设置工具条
' u0 |8 A1 C* X. q+ | NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
# s3 w6 a, B% c& d: o   AddToolbarView(pPartBenchTlb,1,Right);
, f! n* h( b, H4 ^
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
9 H# S! c" S4 Y7 P! m, [ SetAccessCommand(pPointCmd,"Create Point");* N1 n7 G( Q* S( }& X
SetAccessChild(pPartBenchTlb,pPointCmd);
1 m$ K  D2 t1 | NewAccess(CATCmdStarter,pLineCmd,LineCmd);
# t) g# j+ F, z SetAccessCommand(pLineCmd,"Create Line");4 d: s8 L' u- c) Q; C' K* o1 D
SetAccessNext(pPointCmd,pLineCmd);

; q% [! P+ E- J. g& l
; p) M  I8 M. t //设置菜单
' B& v- _* z: x
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);9 @$ C2 Y6 l6 O6 Z- T8 z* p+ U
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);$ c- |+ W* q5 d) Q& ?- F/ c
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
! j2 D0 Y( B4 m8 G9 @1 Y' q2 l" k SetAccessCommand(pPointCmdm,"Create Point");
4 j% ~) p  |  J    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);
: J* U/ a, r7 g' W5 P6 O    SetAccessCommand(pLineCmdm,"Create Line");8 ~& R% B6 T& \+ k+ X6 e0 ~

. h4 E7 [3 H0 z( o) B: o SetAccessChild(pPartBenchMun,pPartBenchSmu);5 W/ j; ^# r- \* J& Z& h9 r# L
    SetAccessChild(pPartBenchSmu,pPointCmdm);
$ Y8 u+ a9 c$ B SetAccessNext(pPointCmdm,pLineCmdm);
9 S: Y! w( R. i6 h5 V5 V    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
$ {5 T7 {/ E4 @9 d工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
" N% p/ V1 M2 ]SetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、0 J' c% M& r/ P! b: M0 l1 C
SetWorkshopMenu()、SetAddinMenu()等$ C9 j( |" H5 S5 _
NewAccess 的函数定义如下: 4 O4 e0 P" S8 ?% K6 m' Z
Macro NewAccess (className,variableName,objectName)
8 G/ ?  A/ j) e9 N. K, N其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、
" R7 W5 r! v$ `* ~+ \5 Y! t0 gCATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表$ v: {! ~( _: s+ ~# S9 C* z) A  T8 K
示分隔符)
1 ^6 z, @/ `6 }- O
% b$ M/ S: W) ^1 [& _: x! h
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。% K: S3 {4 V" c
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
( i9 J% G) l( r6 v, {$ i4 O$ S在.cpp中加入:#include "CATCmdContainer.h"
( z, o7 Q( i  N. e; b#include "CATCreateWorkshop.h"
  |+ W! r3 e3 r4 k/ x在.mk文件中加入:WIZARD_LINK_MODULES =  \
, G7 S6 a: I4 a2 l3 W3 RJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \
2 s1 Q- U7 D' A4 T4 P8 p; b) J$ ~CATApplicationFrame; X% f$ C5 L+ U4 c  U% Z7 ~
# END WIZARD EDITION ZONE
0 f/ O- p$ _* q, ULINK_WITH = $(WIZARD_LINK_MODULES)  \
, A' a$ G2 O* \! I7 D% P          CATApplicationFrame
  D, u& M0 ^/ ~% s# O8 O8 X( z; n在Identitycard.h中加入:
+ b$ L! T  l  |1 W) t' zAddPrereqComponent("ConstraintModelerUI",Protected);( y# J* L( B  g8 Y9 }4 H
注意:每次换行时,都要加一斜线用来继续执行下面的module.
. L* e% ~7 n% f. _" R

9 M' [& M# h8 w0 k7 ^
3 W/ C2 x# \' g; [# _' |重新进入编译后,可以看到结果如下:; k% J& M- v7 r4 H( M
/ D$ a; K$ D" a' v2 P6 E( D: `
tool.jpg 0 q* ~! T. Y. w/ X/ B$ w' O4 R; \
* Y7 N* T( g: W
8 h7 U' D! Q6 p0 m

$ Q7 d" H3 w) m3 s7 R6 a2 c4 o. k$ C: v4 r8 N- R

; _& `, V; D! K0 a3 d7 }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了