CATIA CAA关于workbench和adding的二次开发
本文介绍的实例将在MechenicalDesign(机械设计)中插入一个名为“测试工作台”的Workbench,内容非常基础,每个步骤尽可能描述的非常详细,供初学者参考。具体步骤如下:
1. 准备工作
参照前面的步骤,创建一个解决方案和一个Framework,并将解决方案与CATIA的系统接口建立连接。该过程参见《CATIA二次开发CAA培训课件》
2. 新建Workbench
3.1 选择“文件->Add CAAV5 Item->CATIA Resources->CATIA Pattern”命令:
在弹出对话框中选择“Workshop”并点击OK按钮:
3.2 在新弹出的对话框中选择对象的类型为Workbench,在Work Object Name栏输入Workbench的名称。然后点击Associated Workshop输入框后面的“…”按钮,这里选择PRDWorkshop,即为Product空间。在新创建的Workbench中,会包含Product空间的一些基本标准命令,如插入产品等。如果选择Part空间,则会包含Part空间的一些基本命令。
设置完成后点击OK,最终状态如下:
3.3 点击Next:
3.4 该设置界面保持默认即可,点击Next,进入参数设置界面:
也保持默认,点击Finish,在最后弹出的信息确认对话框中直接点击OK。
3.5 选择“项目->Select CAA V5 Projects …”:
在弹出的窗口中将刚才新建立的TestWb模块载入到开发环境中:
将MyTestWbk.m设置成当前启动项目:
现在的目录结构如下图所示:
Workbench的资源文件保存在下图所示的位置:
3. 编译(mkmk)工程
点击“生成->mkmk”,编译新建的Module。
4. 运行CNEXT查看效果
点击Tools->Open Runtime Window ,打开命令框。输入“cnext”打开CATIA。
这里输入cnext后按回车键就可以,下面一行是自动生成的
在CATIA中找到新建的工作台:
在其中无法发现刚才新建的工作台!!!这是因为资源没有被载入运行目录!
5. 更新运行环境(Create/Update Runtime View...)
点击Create/Update Runtime View…命令,如下所示:
在弹出的对话框中保持默认:
点击OK按钮,消息窗口输出如下信息:
再次启动CAA V5 Runtime Window,输入CNEXT启动CATIA:
现在可以发现我们新建的工作台已经集成到了CATIA环境中。
6. 要点回顾
不要忘记使用Create/Update Runtime View...命令,否则在CATIA集成环境中将不会出现上面定义的工作台。
工作台的相关的资源文件如下:
1)在文件MyTestWkb.CATNIS中,在其中定义此Workbench以及其工具条、菜单的所有名字(Title),如下所示:
// DO NOT EDIT :: THE CAA2 WIZARDS WILL ADD CODE HERE
// Title of the workshop
MyTestWkb.Title="MyTestWkb title";
// END WIZARD EDITION ZONE
2)在文件MyTestWkb.CATRsc中定义了工作台(Workbench)使用的非本地化资源,比如图标(Icons)、父类(Category),如下所示:
// Category of the workshop
MyTestWkb.Category="Infrastructure";
// END WIZARD EDITION ZONE
Category可以为:Infrasturcture,MechanicalDesign,Shape,……。分别对应于已有的Workshop。如果将其改为MechanicalDesign,则可以将其归类到机械设计。
3)在文件HelloWorld.dico中,定义了此Workbench的链接库。
# COPYRIGHT DassaultSystemes 2013
#======================================================================
# Dictionary HelloWorld.dico
# associated with framework HelloWorld
#======================================================================
#
# Apr 2013 Creation: Code generated by the CAA wizard Administrator
#======================================================================
# DO NOT EDIT :: THE CAA2 WIZARDS WILL ADD CODE HERE
#======================================================================
# Dictionary MyTestWkb.dico
# These are necessary dictionary declarations for a workshop
#====================================================================== CATApplicationFrameCATIMyTestWkbWorkbenchFactorylibMyTestWkb MyTestWkbCATIPRDWorkshopConfigurationlibMyTestWkb
Adding的创建
所谓Addin,是在系统已有的Workbench中插入新的工具条或者菜单。CAA开发创建workshop/workbench应用程序的详细步骤详细介绍了CAA开发workshop/workbench程序的基本步骤,本文的例子,我们实现一个在PartDesign中插入一个名字为“MyCenterLine”工具条的应用程序。
1. 准备工作
参照前面的步骤,创建一个解决方案和一个Framework,并将解决方案与CATIA的系统接口建立连接。
2. 新建Module
2.1 选择“文件->Add CAAV5 Project->New Module…”命令:
2.2 在弹出的对话框中输入Module名称为PartDesignAddin并设置对应的编译方式为Shared Object,如下所示:
在弹出的信息确认对话框中点击OK。右键点击刚才新建的Module,将其设置成当前工作项目(如果已经是活动项目,则可以省略此步骤):
3. 新建Component
选择“文件->Add CAAV5 Item->Component”
在弹出的对话框中输入Component的名称NewAddin,在TIE mode栏点击Add:
在弹出的对话框中点击“…”
在Serach workspace栏选择CATIA的安装路径,在下方的Interface(s) to implement栏选择CATIPrtWksAddin:
不要勾选下方的Search in prerequisite frameworks only!设置完成的状态如下图:
点击OK。解决方案的目录结构如下:
如果现在进行编译(mkmk),会提示如下错误:
4. 添加CreateCommands和CreateToolbars方法
1). NewAddin.h头文件
“NewAddin.h”头文件最终完成如下:
// COPYRIGHT DassaultSystemes 2013
//=================================================================== //
// NewAddin.h
// Provide implementation to interface
// CATIPrtWksAddin
//
//=================================================================== //
// Usage notes:
//
//=================================================================== //CAA2 Wizard Generation Report
//IMPLEMENTATION
// TIE: CATIPrtWksAddin
//End CAA2 Wizard Generation Report
//
// Apr 2013 Creation: Code generated by the CAA wizard Administrator
//=================================================================== #ifndefNewAddin_H
#define NewAddin_H
#include "CATBaseUnknown.h"
#include "CATCmdContainer.h" //黄底为代码中添加的语句,以下相同
//-----------------------------------------------------------------------
/**
* Class representing xxx.
*
*
Role: Provide the basic class function...
*
* It implements the interfaces :
*
- @hrefCATIPrtWksAddin
*
*
*
* @hrefClassReference, Class#MethodReference, #InternalMethod... */
classNewAddin: public CATBaseUnknown
{
CATDeclareClass;
public:
// Standard constructors and destructors for an implementation class // -----------------------------------------------------------------
NewAddin ();
virtual ~NewAddin ();
voidCreateCommands();
CATCmdContainer * CreateToolbars();
private:
// The copy constructor and the equal operator must not be implemented
// -------------------------------------------------------------------
NewAddin (NewAddin&);
NewAddin& operator=(NewAddin&);
};
//-----------------------------------------------------------------------
#endif
在其中:
●添加了CreateCommands和CreateToolbars两个方法的声明;
●添加头文件包含语句:#include "CATCmdContainer.h";
2). NewAddin.cpp源文件
在“NewAddin.cpp”最终完成的代码如下:
// COPYRIGHT DassaultSystemes 2013
//=================================================================== //
// NewAddin.cpp
// Provide implementation to interface
// CATIPrtWksAddin
//
//===================================================================
//
// Usage notes:
//
//=================================================================== // Apr 2013 Creation: Code generated by the CAA wizard Administrator
//=================================================================== #include "NewAddin.h"
#include "CATCreateWorkshop.h"
#include "CATCommandHeader.h"
CATImplementClass(NewAddin,
Implementation,
CATBaseUnknown,
CATnull );
//-----------------------------------------------------------------------------
// NewAddin : constructor
//-----------------------------------------------------------------------------
NewAddin::NewAddin():
CATBaseUnknown()
{
}
//-----------------------------------------------------------------------------
// NewAddin : destructor
//-----------------------------------------------------------------------------
NewAddin::~NewAddin()
{
}
// Link the implementation to its interface
// ---------------------------------------
//TIE or TIEchain definitions
#include "TIE_CATIPrtWksAddin.h"
TIE_CATIPrtWksAddin(NewAddin);
//Methods implementation
voidNewAddin ::CreateCommands(){
//new CAADrwHeader("CenterLine","CAADrwCenterLine","VCICenterLineCmd",(void *)NULL);
}
CATCmdContainer *NewAddin::CreateToolbars(){
NewAccess(CATCmdContainer, pCAADrwTlb, MyCenterLine);
NewAccess(CATCmdStarter, pCenterLineStr, CenterLineStr );
SetAccessCommand(pCenterLineStr, "CenterLine" );
SetAccessChild(pCAADrwTlb, pCenterLineStr );
AddToolbarView(pCAADrwTlb, 1, UnDock);
returnpCAADrwTlb;
在其中:
●添加了头文件包含语句:
#include "CATCreateWorkshop.h"
#include "CATCommandHeader.h"
●完成了用于实现工具命令的CreateCommands函数;
●完成了用于添加工具栏的CreateToolbars函数;
3). Framework的“IdentityCard.h”文件:
// COPYRIGHT DassaultSystemes 2013
//=================================================================== //
// IdentityCard.h
// Supplies the list of prerequisite components for framework HelloWorld
//
//=================================================================== //
// Usage notes:
// For every prereq framework FW, use the syntax:
// AddPrereqComponent ("FW", Public);
//
//=================================================================== //
// Apr 2013 Creation: Code generated by the CAA wizard Administrator
//=================================================================== // DO NOT EDIT :: THE CAA2 WIZARDS WILL ADD CODE HERE
AddPrereqComponent("System",Protected);
AddPrereqComponent("ApplicationFrame",Protected);
AddPrereqComponent("Dialog",Public);
AddPrereqComponent("ObjectModelerBase",Protected);
AddPrereqComponent("ProductStructureUI",Protected);
AddPrereqComponent("MechanicalModelerUI",Protected);
// END WIZARD EDITION ZONE
}
如果需要使用其他Framework的资源,在这里进行引入。实际使用时可以使用向导完成,点击Define Prerequsite Frameworks...命令:
在弹出的对话框中添加你需要使用到的Framework,如下所示:
4). imakfile.mk文件