查看: 7674|回复: 1

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

[复制链接]

2477

主题

1280

回帖

8万

积分

管理员

PLM之家站长

积分
82265
QQ
发表于 2017-1-19 22:46:47 | 显示全部楼层 |阅读模式

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

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

×
CATIA二次开发入门教程---10 添加Add in菜单和工具条( i7 \, e- V1 L1 p, G$ F0 C

2 ?$ M# c+ I( U* x5 b: q# I& p5 B所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
: s; ~# g; h8 b/ B$ }- ]7 I我们来在PartDesign中插入一个工具条。( a" D; X& L% N+ m2 T2 r
1、新建一个module命名为myPartAddin,并将它设为active。9 `$ S4 ?6 g" l6 N8 g  S
2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框0 H, Y' Z6 g  |  e& \
输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
, \1 A* h( @- Q0 l0 D7 ]
addmin.png ) E2 g; ?$ q- i) z5 e
1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,' `, t3 W+ Z8 y9 p
CATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前- y4 G" Z  Y) x; s$ E
工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
/ y8 Z: F. t: L& w; m台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
6 ^( Y# @" B  r, F7 |下都显示当前工具条。
) Y5 T) r: G9 {' b5 P% C
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:+ q: U+ E; ?& D3 a
myAddin CATIPrtWksAddin libmyModule3 ]; h; ?% W; Q! o2 \$ m
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。8 X% l( q9 c5 b* |
在NewAddin类中添加两个Public函数声明:
" U- x& I# K4 S" R6 u1 D  h
void CreateCommands();
) |4 ]5 v( i  I. u: [$ U' ZCATCmdContainer * CreateToolbars();

$ L0 z2 q, k0 E3 k5 X在NewAddin.cpp中添加宏定义:
- |6 p7 n, M/ F; |3 |# ?#include "CATCommandHeader.h"        
6 x0 u. @2 G- i" z) D0 D; TMacDeclareHeader(PartCmdHeader);

; g' L$ L+ W) Z这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如:
! [+ J4 D2 `* }4 I' X: U. Knew PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);/ J' c$ J& G2 ]3 ]: v6 l% I) i
new PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);
7 O1 }' k' [* G2 R8 L$ W
第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
) }/ _0 h$ f( h. w8 z$ r' ?& r
; f' w9 h1 Q) j5 x# G" rCreateToolbars里面就是要建的工具条和菜单的主要内容:; U" w8 S& G0 ?" t' G$ @7 z

# \% i8 L. r; [& F9 n/ t, Q4 L2 y" K! l

& u5 U! z- W) {+ ^: v4 ^: O: H7 m //设置工具条; P* Z) y" O9 ]$ R" F  y6 c
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);0 ~' j& C. A* T0 e9 @
   AddToolbarView(pPartBenchTlb,1,Right);

4 @' L6 \, U6 \9 D, T, u8 b NewAccess(CATCmdStarter,pPointCmd,PointCmd);
0 @5 [, V0 v  U) _0 z" b9 b+ ? SetAccessCommand(pPointCmd,"Create Point");
* a. Y9 N" |3 v3 @3 I7 q2 j SetAccessChild(pPartBenchTlb,pPointCmd);8 I" ~2 Y) c* x
NewAccess(CATCmdStarter,pLineCmd,LineCmd);
4 ?( \' s& [9 D- C* } SetAccessCommand(pLineCmd,"Create Line");
) p6 I, J0 Q  X. F6 ^+ r SetAccessNext(pPointCmd,pLineCmd);

0 h( g2 W5 u3 q/ N' X& c 9 c7 t: ]4 X0 S) I: d7 e  `) a
//设置菜单

  ?5 K" Y* ^" ]( j NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);
2 T6 c$ {( b( k5 |! Z3 i; f NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);% M% a5 ?! o% f/ G
NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
8 P, [# p. ~3 G4 }- e) t SetAccessCommand(pPointCmdm,"Create Point");/ G+ O' o1 F6 {# G. N7 I
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);/ c. C, m1 Z+ _) x
    SetAccessCommand(pLineCmdm,"Create Line");& D0 x; m2 M" {

# _+ j* z0 c" I) Y0 t0 f SetAccessChild(pPartBenchMun,pPartBenchSmu);
0 L" K% _8 V: @7 _: s    SetAccessChild(pPartBenchSmu,pPointCmdm);
) D5 \: s' Y1 r7 Z% U# ?2 x SetAccessNext(pPointCmdm,pLineCmdm); - c7 L/ o: L8 P0 n% z6 h  d( h' d
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
* s2 {8 u& D1 @8 l! C9 b6 t% }+ I工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
) m9 C, C5 K2 USetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、, J- x' r& [5 h4 Y9 j1 Z0 S. [& s
SetWorkshopMenu()、SetAddinMenu()等$ o/ Q1 d( l  `* r" ~+ y
NewAccess 的函数定义如下:
# `+ K# A2 n2 i0 M# `/ ]! f, C/ BMacro NewAccess (className,variableName,objectName) 7 {7 S' q! ]; e# W' S. }
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、) k$ D, ]7 _3 v9 J9 S' P* |: P
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表
. F/ ^" _6 M, X' ]( {示分隔符)
- E3 C* _% U" J; g9 C7 J

5 c1 v; m& B2 x% @% i( h. ~9 kNewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。! J/ h+ L) x  N4 F: V$ x
4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
1 S. P5 D( b+ y( c在.cpp中加入:#include "CATCmdContainer.h". D& }! Y1 o5 \( L9 z; `& L. r- w
#include "CATCreateWorkshop.h"
" {7 o7 Z7 O6 M* l" p1 f/ }在.mk文件中加入:WIZARD_LINK_MODULES =  \
8 j5 I5 ^5 T; U: qJS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \, c- P/ \* q0 P" L; U5 d. J
CATApplicationFrame
8 I1 ~; e" `" ^- K, _( |# END WIZARD EDITION ZONE
" I! n9 V! j; u0 Z- aLINK_WITH = $(WIZARD_LINK_MODULES)  \
9 f( N6 m- d6 L$ B; Q          CATApplicationFrame / c6 S# w! e: E
在Identitycard.h中加入:3 M1 o$ V0 p, c- _3 F
AddPrereqComponent("ConstraintModelerUI",Protected);
1 z. G% V3 C) W& Q5 }注意:每次换行时,都要加一斜线用来继续执行下面的module.
9 O' t1 M4 q$ ]

9 Q5 U6 y. v5 [! W# n5 j/ _3 ?
# x- X" _- Q* i3 G0 N重新进入编译后,可以看到结果如下:
* j* V0 ]" g' Z2 ~. w5 T! J0 i, ^5 f6 i
tool.jpg & Z& C2 z4 l& f" C$ X+ o4 x6 S
8 U. K1 V  x1 p2 l* K( l& C
4 O' S* o, z4 ^; d% {) e

1 }" x1 \% m' r" l% ?* C6 Z7 M2 _, n1 w; s

' D' A- N: S& R3 r) c
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部