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

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

[复制链接]

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

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

admin 楼主

2017-1-19 22:46:47

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

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

x
CATIA二次开发入门教程---10 添加Add in菜单和工具条! ]6 X0 s$ r2 e+ ]# T

( x1 S  O% q' h9 [; n1 B$ o所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。
. }( b  R2 V. T+ [- W) R6 _. }我们来在PartDesign中插入一个工具条。
. W% P+ _9 v/ z, q- b9 @ 1、新建一个module命名为myPartAddin,并将它设为active。
; |, g$ J! r! I2 F$ h) t 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框
. r" N0 p5 c" T# \: j输入addin的名字,点击add再点击浏览选择要执行的接口,如图:

* W0 S. T6 q: V/ ?+ K- M5 { addmin.png
0 R. n3 ~$ b  `' I+ [4 L6 X1)接口可以多选。2)除了 CATIPrtWksAddin 外,还有四个最常用的接口,
, p' y+ j, S( r2 i" i+ ~7 b6 U% ~# @: GCATIPRDWorkshopAddin 表示当前工具条在装配环境下显示;CATIDrwAddin 表示当前
' |; l( z: ]" ?, g4 ]/ T- J( ~; B工具条在工程制图工作台下显示;CATIAMGProgramAddin 表示当前工具条在 AMG 工作
; _/ Y+ e* V! ?* M台下显示;CATIAfrGeneralWksAddin 对应普通工作台,即打开 CATIA 后,任何 Workbench
% Y8 y/ C4 i( r2 M: S下都显示当前工具条。
! M$ N' `. b/ }1 H6 d) N0 T
  3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:& g4 A; |/ h4 L
myAddin CATIPrtWksAddin libmyModule  O  A7 `6 e' F3 f( S
但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。! |* |- V% _% E2 B7 z% \) k
在NewAddin类中添加两个Public函数声明:
' j5 ^; S8 r8 h2 k6 n7 f
void CreateCommands();9 i; _  V1 q1 L6 Z' G) I, }
CATCmdContainer * CreateToolbars();

3 ?* W/ S: E* e: C在NewAddin.cpp中添加宏定义:7 G/ w# m0 B1 X! Q  q5 N) s
#include "CATCommandHeader.h"        ) j6 t5 \5 o* {) L" @. g
MacDeclareHeader(PartCmdHeader);

* Q0 W  L& A% ?这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: ( ~7 x. ]6 I- ^* c% N& J
new PartCmdHeader("Create Point","CmdModule","PointCmd",(void *)NULL);
1 n! B. Y+ F. W) A5 Y  T2 c+ xnew PartCmdHeader("Create Line","CmdModule","LineCmd",(void *)NULL);

/ V- ]0 Y" ]6 j  F. l: i( C  B: ~第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。2 q; V0 v  y) ^$ N2 x! i
2 a7 }8 G  M6 x: A' L
CreateToolbars里面就是要建的工具条和菜单的主要内容:
, d+ `3 ^+ H% g- R7 u0 B2 i1 _7 C: ]" B4 f6 `! k) S

9 x. a" `9 u, J# |& ]  c //设置工具条* F! U8 L4 C  [0 {( y/ M( |' W
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);
0 _/ |: {! P3 h$ b' ?9 J; t   AddToolbarView(pPartBenchTlb,1,Right);
6 d" ^5 a  `  t4 e" ^; h! e& L( _
NewAccess(CATCmdStarter,pPointCmd,PointCmd);
9 G% G/ }8 }6 c) E( g SetAccessCommand(pPointCmd,"Create Point");
3 k0 r- r6 M" o  y7 \ SetAccessChild(pPartBenchTlb,pPointCmd);  E+ W1 A1 Y5 Q
NewAccess(CATCmdStarter,pLineCmd,LineCmd);4 ~7 s! |/ z) r& d
SetAccessCommand(pLineCmd,"Create Line");
+ X  c* A* N) c1 V/ O* D0 @ SetAccessNext(pPointCmd,pLineCmd);
+ b8 ]7 A8 K* \
" R! \5 g. r8 x+ t
//设置菜单
6 \  S3 x) [# Y7 [- o4 T
NewAccess(CATCmdContainer,pPartBenchMun,PartBenchMun);( O5 |' x6 }4 g' J! w
NewAccess(CATCmdContainer,pPartBenchSmu,PartBenchSmu);
$ S: P+ t6 C9 Z* ?/ l9 y NewAccess(CATCmdStarter,pPointCmdm,PointCmdm);
+ t: C9 }7 j( H0 _- {6 \4 l% U SetAccessCommand(pPointCmdm,"Create Point");+ b2 e- }' J+ C9 P/ O+ Q* J
    NewAccess(CATCmdStarter,pLineCmdm,LineCmdm);5 }6 m- T, E9 Q# O9 ^2 b9 h1 R, w
    SetAccessCommand(pLineCmdm,"Create Line");) Q9 `6 j9 ]+ T7 m; o' v
9 K' c) Z: Q. B5 N; b5 V$ E4 q
SetAccessChild(pPartBenchMun,pPartBenchSmu);
8 Q1 Y: m# {% Y0 \, _, A- A    SetAccessChild(pPartBenchSmu,pPointCmdm);
; u  w, L: d: j/ j7 u SetAccessNext(pPointCmdm,pLineCmdm); 3 G* k$ E. ~0 A. G4 D; n
    SetAddinMenu(pPartBenchTlb,pPartBenchMun);
4 \  z6 B- x6 {  G1 D, l工作台、工具条、菜单栏中常见的一些宏 NewAccess()、SetAccessCommand()、
$ L1 e4 B7 O7 p% ~( k% w& K& XSetAccessChild() 、 SetAccessNext() 、 AddToolbarView() 、 SetWorkbenchMenu() 、
7 q3 ~2 f0 ]* u! t6 L7 USetWorkshopMenu()、SetAddinMenu()等' B  a; _8 ]3 ?( i! |$ P
NewAccess 的函数定义如下:
: i% `1 d& E0 r9 A8 o8 JMacro NewAccess (className,variableName,objectName) ; ^5 M+ O% G. M, G: J& L
其中:className 包括 CATCmdContainer(表示菜单条、菜单、子菜单或者工具条)、4 z3 w& [- J# s, K
CATCmdWorkshop、CATCmdWorkbench、CATCmdStarter(表示命令)、CATCmdSeparator(表' e2 p5 g) a  W! V7 l& k8 q0 W
示分隔符)
2 @3 a! q, \0 h  `& l6 R! a
4 Y9 X$ K7 v# r  i
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。其他的顾名就可思义。
8 q3 K3 H# v* m1 d4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h"
% r9 g  e# O( @5 P5 y( }在.cpp中加入:#include "CATCmdContainer.h"6 L" b4 h1 r0 P# [5 K) Z) J% d) l
#include "CATCreateWorkshop.h"
  b7 `9 u: r- d! h; X7 C  [; p在.mk文件中加入:WIZARD_LINK_MODULES =  \, H+ a+ ?; w7 {$ X5 C
JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \5 {- A  h* I' v8 Y0 c% R
CATApplicationFrame
6 ~- f1 }  ?9 T/ ]6 ^# END WIZARD EDITION ZONE : l( E/ A4 }( M; g1 }* w8 z2 r
LINK_WITH = $(WIZARD_LINK_MODULES)  \
( q4 k/ j0 p8 B$ C7 M% {          CATApplicationFrame   P: A6 r8 S- d( [$ H" C
在Identitycard.h中加入:' F! s- ^9 x0 ?8 F* x. c& E8 {! a
AddPrereqComponent("ConstraintModelerUI",Protected);
9 o1 |- M& ]  p5 ~9 p4 j注意:每次换行时,都要加一斜线用来继续执行下面的module.
% M; X0 f# a- m

( j* z$ z9 w* T- X1 r7 T2 N- G
6 ~6 W9 k- B. f! f% N7 c重新进入编译后,可以看到结果如下:
) r& f$ d. {. j. x4 W* q  e3 ~% f# {" Z$ j
tool.jpg - ]9 E; [! m* y$ o8 @- w" j. H

! i' Q, q2 b0 j) y" d

1 m$ i6 b4 z2 _( J: x  n
1 r# ?) ]( m9 Y) r) V4 n
% [+ Z8 u- h2 C# V# g$ v) q
- I" a8 e2 d" j8 a/ s
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了