Download presentation
Presentation is loading. Please wait.
Published byLydia Berry Modified 6年之前
1
CAA 第一章 安装 1 安装CATIA。在安装CATIA时,要把它装到根目录下,文件夹名称不能含有空格,(在此命名为CATIA)安装完后,用crack文件下JS0GROUP.dll拷贝到d:\CATIA\B14\intel_a\code\bin下的覆盖。 2 安装vc。装vc时选自定义,把里面的所有组件都选上。 3 安装CAA和rade。先装CAA系统会自动安装到CATIA文件夹下,再安装rade不要装在CATIA文件夹下,安装方法和安装CATIA一样。安装完后,把服务里面的 LaunchCommandServer和ReleaseClient停止,再把Rade的crack文件下JS0GROUP.dll拷贝到d:\ rade\B14\intel_a\code\bin下覆盖。启动服务。
2
1.RADE产品的认证,通过命令启动RADE Tools Licensing:
d:\ rade\B14\intel_a\code\bin\ Tools Licensing 2.安装联机帮助,以便在RADE开发环境下提供CAA帮助(这是V5R14下的也不知是与别的版本不一样还是是我的软件的问题别人说第一想也要安装的我的是空的) : d:\ rade\B14\intel_a\code\bin\ Tools Licensing \CATVBTSetup.exe
5
3 vc设定 Tools->customize
然后你就会发现VC的menu多了些东西
6
第二章 CATIA V5 组件体系结构分析及其软件工程思想
CATIA V5 是法国达索公司与IBM公司开发的新一代CAD/CAM产品。不同于老一代CAD/CAM产品,它采用了全新的、基于组件的开放式体系结构(Open Architecture Products)。应用了许多现代软件工程思想,整个体系结构虽然十分庞大,但结构清晰、合理。维护、开发、扩展方便。有着相当优良的扩展性能。它开放的组件应用架构允许更多的第三方供应商针对用户的需要特别定制的应用解决方案。本文着重分析了CATIA V5的基础体系结构(Architecture Infrastructure)及其软件工程思想。以期对CATIA V5的学习和二次开发以及理解其它基于相同体系结构的软件如:ENOVIA LCA,DELMIA等有所帮助。
7
CATIA V5在开发之初就遵循面向对象的设计思想(OO),构建了完全基于组件的体系结构(PPR: Products,Process,Resource),有效地解决了维护、管理、扩展的困难,并大量使用了最新的计算机技术和标准以及软件工程技术,其中包括基于组件架构思想的JAVA BEAN 、COM/OLE、CORBA 技术和Web技术、C++语言、Visual Basic Journaling 、STEP-SDAI、XML、OpenGL等,这使CATIA V5具有与众不同的鲜明的特点:数据结构单一,各个模块全相关,某些模块之间还是双向相关;端到端的集成系统,拥有强大的专业应用扩展能力。 1.软件组件结构(SCI: Software Component Infrastructure)的基本概念 软件组件结构(SCI)是软件工程继过程模型和面向对象模型的下一代逻辑模型。面向对象技术已在许多重要应用中取得成功。 但是,随着更多面向对象解决方法的开发和使用,很显然的是,单单采用面向对象技术难以与软件日益增长的复杂性抗衡。因为,对象只构成应用程序的一部分。它完全不能把握应用程序的结构(控制流)。只能通过重用类库里有的类来实现有限的重用。但实际情况是,大量应用程序,特别是同一领域(DOMAIN)中的应用程序,分享相似的结构。不同的程序员使用不同的技术去把握和实现这些相似的结构。结果,这些结构并没有经过通常的面向对象技术而被重用。
8
面向对象技术只能通过重用类库已有的类来实现有限的重用,而软件组件结构(SCI)提供了最高层次的代码重用。
软件组件结构(SCI:Software Component Infrastructure)有三个基本的概念:框架(FRAMEWORK)、组件(Component)和对象总线(Products Bus)。 组件(Component):是软件的基本量子(单元)。组件既应当足够小,以便于维护;又应足够大,可具备相当的功能,可以被打包和插用。由于传统的客户/服务器应用不能应付软件应用日益增加的复杂性。它们不能加入到即插即用的环境之中。组件的特征提供了将一个应用程序分成若干个组件的机制。每个组件提供了一个相当专门的功能,它向框架的其余部分描述自己,以便别的组件能够访问它的功能。描述是通过说明性语言如IDL实现的,它本质上是把组件的接口与实现分离开来。由于组件是可单独维护、升级的,因此,组件不直接与别的组件通信是至关重要的。它必须通过使用框架或对象总线来实现组件之间的交互。 框架(FRAMEWORK):框架提供对所有应用程序有用的功能(如接口、存储)。它提供了统一的总设计。框架是对相似应用程序集合的一个部分(统一但不完整)解决方案。开发者的任务是用这不完整的解决方案加上必要的代码建立完整的应用。在领域(DOMAIN)内的一个应用包括不变部分和可变部分。不变部分由框架把握,一般可占到80%,可变部分由开发者把握,一般可占到20% 。开发者通过向框架添加变化部分的代码把握其动作,而形成新的特定应用。框架根据是否针对特殊领域还是若干领域,可分为水平框架、垂直框架、复合文挡框架。
9
对象总线:对象总线是基本的中间件。它允许成千上万能够相互理解接口定义语言IDL的对象相互发生作用。这种作用对对象来说是完全透明的。对象总线把组件和框架的能力扩展到开放网络和其它伙伴应用程序。它使成千上万独立的软件单元在由不同操作系统、语言、硬件平台和编译工具组成的环境下互相无缝地交互运作。对象总线不仅提供对象之间的连接,它还提供对在总线上所有对象都有用的核心服务集(对象服务)。如:生命周期服务程序、安全性、持久性、命名等。 通过组件构造/修改软件,用框架把握软件结构,用对象总线连接事务,支持即插即用(Plug & Play)功能的扩展。 2.CATIA V5体系结构(Architecture Infrastructure) CATIA V5的体系结构(Architecture Infrastructure)是一种面向行业应用的垂直框架体系结构,组件是CAD/CAM系统的各种几何特征和管理、分析单元。框架是一些应用如:2D/3D建模、分析、混合建模、制图、数控加工等,CATIA V5也称为领域(DOMAIN)或应用(APPLICATION)。并通过3D PLM PPR(PRODUCTS,PROCESS, RESOURCE)HUB产品总线连接起来。其架构如下图:
10
CATIA V5 的一些框架: Framework Administration Framework AdvancedMathematics Framework AdvancedTopologicalOpe Framework AnalysisMeshingModel Framework ApplicationFrame Framework AutomationInterfaces Framework BasicTopologicalOpe Framework CATAnalysisBase Framework CATAnalysisGPSInterfaces Framework CATAnalysisInterfaces Framework CATAnalysisResources Framework CATAnalysisVisuInterfaces Framework CATAssemblyInterfaces Framework CATFunctSystemItf Framework CATHVDiagramInterfaces Framework CATHullConceptualInterfaces Framework CATIAApplicationFrame Framework CATIAV4Interfaces Framework CATMatInterfaces 框架通过公用接口来实现对象之间的交互。下图是混合建模(HybridShape)的部分对象及其继承关系。
11
3.CATIA V5体系结构的特点分析 CATIA V5采用了多种支持组件技术的软件技术如:JAVA、COM/DCOM、CORBA等,内部模块全部采用CNEXT(CATIA 内部使用的一种C++语言)实现,结构单一。提供了多种开发接口,支持C++/JAVA、Automation API ,支持各种开发工具:CAA C++,JAVA ,VB,脚本语言。采用单继承,对象之间关系明确,体系结构严谨,维护容易。 根据CAD软件的特点和实际需要,CATIA 的设计模式比较简单,主要有工厂模式、层模式等。在面向对象的编程中,工厂模式是一种经常被使用到的模式。根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。 图2 CATIA中的具体实现如下例所示: 如要做一条垂直于曲面的线,由对象继承关系如下 +---CATBaseUnknown | +---CATBaseDispatch | +---AnyObject | +---HybridShape | +---Line | +---HybridShapeLineNormal
12
工厂的继承关系: +---CATBaseUnknown | +---CATBaseDispatch | +---AnyObject | +---Factory | +---HybridShapeFactory 先在HybridShapeLineNormal对象设定做这条线的属性参数如:点、参考面,在公共抽象层Line中设定线的共同属性如坐标、法矢等,然后调用HybridShapeFactory中的AddNewLineNormal方法进行对象实例化。 CATIA V5 的产品总线PPR不是真正意义上的对象总线,缺乏真正对象总线的一些特征。它主要注重其它伙伴应用如EVOVIA LCA、DELMIA的互操作和集成,因此称之为“产品总线”。产品总线分层的,如机械设计基于Mechanical Modeler&Sketcher,产品功能定义、EBOM、DMU, 知识工程等与Mechanical Modeler&Sketcher基于3D PLM PPR HUB OPEN GATEWAY 而文档管理,PDM应用集成,配置管理等基于3D PLM ENTERPRISE ARCHITECTURE。(见图1)并且全部应用都是基于CORBA,DCOM或J2EE之上。以实现真正意义上的对象总线功能。
13
CATIA的一些基本概念 l Workshop和Workbench:它们为CATIA的功能模块的组织。CATIA将其功能细分,每个人都可以选择自己的模块进入进行设计,简化了界面。 如下图: Module Framework Workbench Workshop
14
Catia对话框
15
1:容器,主要包括组件对象的布置,容器即可见也可不可见,其本身并不和用户打交道,除了重新配置和重新定义窗口大小。
对话框架包含在类CATInteractiveApplication下,此类如下:public class CATInteractiveApplication ,交互式应用的基类,作用:交互应用程序的基类,进化论是在单文档,多文档或者模态对话框,如catia v5版本那样。为了创建你的交互式应用程序,你应该,创建一个从CATInteractiveApplication派生的类,并且重载BeginApplication and EndApplication方法,但是不要直接实例化这个类 对话框架主要包括两个主要的类类型: 1:容器,主要包括组件对象的布置,容器即可见也可不可见,其本身并不和用户打交道,除了重新配置和重新定义窗口大小。 2:组件:是填充容器的基本要素,其中大多数和用户交互,包括控件,菜单,其它的包括分割条以及对其它控件的命名等的指标控件。 下面介绍容器(Containers) 1容器主要用来包括几个对话组件,比如窗口布置目标的组,可分类如下: 窗口派生于抽象基类CATDlgWindow
17
CATDlgDialog:
18
CATDlgNotify CATDlgFile
19
Boxes派生于抽象基类CATDlgBox. 其用于包括几个对话框架对象 CATDlgContainer
CATDlgSplitter CATDlgTabContainer
20
CATDlgFrame CATDlgIconBox
21
Bars CATDlgToolBar CATDlgStatusBar Menus CATDlgMenu CATDlgSubMenu
22
CATDlgContextualMenu
23
Indicators CATDlgSeparator CATDlgLabel CATDlgProgress
24
Control to Trigger an Action
CATDlgPushButton
25
Controls to Set Options
CATDlgRadioButton CATDlgCheckButton Controls to Enter or Select Texts or Values CATDlgSelectorList
26
CATDlgCombo CATDlgEditor
27
CATDlgSpinner CATDlgSlider CATDlgMultiList
28
CATDlgScrollBa Menu Items CATDlgPushItem CATDlgRadioItem
29
CATDlgCheckItem CATDlgSeparatorItem
30
第三章 程序组成及调试 选择当前CATIA的版本,要选到CATIA\B14这一目录。 1 程序打开与调试
1.1 启动VC File-->Open CAA V5 Workspace 选择当前CATIA的版本,要选到CATIA\B14这一目录。
31
1.2 等程序自动运行完后,点close 这时会提示你的frame下没有模块,点OK,会弹出对话框让你选择模块。根据需要选择。点OK。会弹出一下提示。
32
这是提示你没有定义prerequisite,选择命令如下图
弹出以下对话框
33
点击add,找到CATIA的路径添加到里面,如d:\CATIA\B14,
点击OK,会弹出。 点击close
34
1.3 编译程序 选择编译命令MKMK会弹出下面左半部分对话框,选择要编译的模块,第一次编译一般要全选,以后只对修改的模块进行编译就可。
36
2 程序的建立 2.1工程(Workspace)的建立
2.1.1在VC“File”菜单中选择“New CAA V5 Workspace…”,出现对话框: 在工程路径中选择或创建路径,选择“Tool Level”为“V5R14_ B14”,点击Next。 选择或创建工程路径 选择或创建工程路径
37
2.1.2 创建Framework选项。系统提供了4个可用选项,可以不选择或选择第二项。
38
2.1.3 若上面选择了第二项,则显示下面对话框。输入Framework名字和选择其类型。Framework提供两种类型:应用和接口。功能也有三种:运用、测试和教学。
类型选择
39
确定Workspace的创建:
40
确定后VC文件视图(File View)如下:
此时生成了一个带有一个Framework的Workspace。CAA的开发提供了两种模式:批处理模式(Batch Mode)和交互模式(Interactive Mode)。我们开发主要用到的是交互模式。在此模式下,可以创建两种交互界面:Workshop(Workbench)和Addin。前者是创建一个新的模块,在这个模块中除了标准的命令,其余均由用户开发。后者指在已经存在的Workbench中插入新的工具条和命令。下面分别进行示例。
41
在建立工程后,必须先指定CATIA的安装路径,以搜索开发所需要的API资源。点击“CAAV5 Workspace” “Locate Prerequisite Workspace…”,添加CATIA的安装路径。也就是定义prerequisite,具体步骤在打开文件时已经讲过。需要注意的是注意此路径为Intele_a文件夹的上层路径。在这里,如果要引用其他Workspace的接口(Interface),也可以在这里指定此Workspace的路径。
42
2 CAA工程的文件结构树 每个WorkSpace至少需要包含一个Framework。一个Framework包含了一个工程的所有需要的元素,也即是,一个Framework即可以是你的一个工程。Framework的体系如下图:
43
l PublicInterfaces:公共接口,在这个文件夹中是类的声明,即
l PublicInterfaces:公共接口,在这个文件夹中是类的声明,即.h头文件。这些类可以为整个Framework的各个模块共享,也可以被外部Framework使用。 l PretectedInterfaces:系统自动生成的module.h头文件,供编译连接时使用。这些模块只能在本Framework使用。 l IdentityCard.h:本文件定义了所有用于编译使用此Framework的预定义Framework。即,在开发过程中你使用了系统或者外部的API,你必须包含此API所在的头文件,module和Framework,其中Framework的预定义就在这个文件中进行。其格式如下: AddPrereqComponent("ApplicationFrame",Protected); // ApplicationFrame即为所连接的Framework l Cnext文件夹:包含了Resources和Code两部分,其具体的作用下文会具体阐述。 Module文件夹:Module为组织程序代码的一个基本容器。其结构如下图:
44
其中:LocalInterfaces中是仅供本模块使用的头文件集合;Src是所有本模块的. cpp文件集合;Imakefile
其中:LocalInterfaces中是仅供本模块使用的头文件集合;Src是所有本模块的.cpp文件集合;Imakefile.mk文件是所有本模块所包含的头文件所在外部Module的定义。在上面提到的IdentityCard.h中定义的是API所在的Framework,而相应的Module即在此文件中定义。在LINK_WITH后面添加需要连接的Modules。
45
下面用一个例子来说明程序的过程。下面的例子,我们在MechenicalDesign(机械设计)中插入一个名为“test”的Workbench。具体步骤如下:
1.在上面创建的workbace下继续做,创建一个New Module:选择“Project” “New Module…”命令: shared选项表示模块共享,我们一般都选此选项,如果你做的是一个可执行的程序,如你的模块只有一个main函数,你就可以选Executable.输入module名,点OK.
46
进入确定界面,显示此Module信息: 点击OK后,创建了一个新的Module。此时VC中的文件视图(FileView)如下:
47
生成的Module 添加的头文件 在建立工程后,必须先指定CATIA的安装路径,(这是在打开或建立工程后的首要任务)以搜索开发所需要的API资源。点击“CAAV5 Workspace” “Locate Prerequisite Workspace…”,添加CATIA的安装路径。点击“Add”添加,如下图所示:
49
2. 右键点击Module1.m,将其设为当前工作Project(Set As Active Project)。选择“Insert” “CATIA Resource” “CATIA Pattern…”,响应如下: 选择Workshop,点击OK。 3. Workshop或者Workbench选择。选择创建Workbench,并输入其名称。
50
第二个edit是让你输入workbench所在的workshop
4. 点击接口浏览按钮,选择与Workbench所连接的Workshop。这里选择PRDWorkshop,即为Product空间。在新创建的Workbench中,会包含Product空间的一些基本标准命令,如插入产品等。如果选择Part空间,则会包含Part空间的一些基本命令。
51
5.上述步骤结束后点击Next,进入参数设置界面,直接进入NEXT。在这一步我不喜欢选前缀,原因我记不清了。反正不爽。
52
点击Finish,设置完成,如下图。 OK后,生成名为TestWb.m的module及其头文件。
53
6. 在文件夹中删除该Moudle文件夹,以及ProtectedInterfaces文件夹下的Module1
6.在文件夹中删除该Moudle文件夹,以及ProtectedInterfaces文件夹下的Module1.h头文件 ,此时编译会出现一个错: CATMeWorkbench.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) 这实际上是找不到外部连接,在.mk文件中未注明包含CATIPRDWorkshopConfiguration.h这一个头文件的Module,这一个Module名可查API。所以在.mk文件中加入: LINK_WITH = $(WIZARD_LINK_MODULES) \ CATPrsWksPRDWorkshop 注:我每用一个新的API都得在相应的module下的imakfile.mk里添加其所在的模块名,在frame下的identitycard.h里添加其所在的frame名。
54
下面是几个值得注意的地方(也就是定义资源,同一个frame下的所有的资源都放在Cnext/resource/msgcatalog下):
l 在文件:TestWb.CATNIS中,可以定义此Workbench以及其工具条、菜单的所有名字(Title),定义格式为: TestWb.Title=”test”; l 在文件:TestWb.CATRsc中,可以定义此Workbench的图标(Icons)和其放置路径(Category)。前者暂不说明,后者说明如下: TestWb.Category="Infrastructure"; Category可以为:Infrasturcture,MechanicalDesign,Shape,……。分别对应于已有的Workshop。我们将其改为:MechanicalDesign。 在文件:MyFrame1.dico中( Cnext/resource/code/dictionary ),定义了此Workbench的连接库。 一个完整的Workbench创建完毕。编译运行,结果如下:
55
下面简单介绍addin的制作: 所谓Addin,是在系统已有的Workbench中插 入新的工具条或者菜单。下面的例子, 我们来在PartDesign中插入一个工具条 。 1、新建一个module命名为PartAddin, 并将它设为active。 2、做接口CATIPrtWksAddin的implemention, insert->component,弹出对话框如图: 输入addin的名字,点击add再点击浏览选择要执行的接口,如图:
56
要选择的接口为CATIPrtWksAddin注意Search workspace为你的CATIA安装路径,并将下面的单选框设为空。点ok完成。文件相应的视图如下:
57
3、此时建立了一个空的Addin。在myframe.dico文件中可以看到这个Addin的声明:
NewAddin CATIPrtWksAddin libPartDesignAddin 但是,要创建一个工具条,我们还需要在这个类:NewAddin中添加一些函数。 在NewAddin类中添加两个Public函数声明: void CreateCommands(); CATCmdContainer * CreateToolbars(); 在NewAddin.cpp中添加宏定义: #include "CATCommandHeader.h" MacDeclareHeader(PartCmdHeader); 这两个函数及宏都可以按ctrl+F1查到, CreateCommands里面的代码只是用 MacDeclareHeader生成的PartCmdHeader定义命令的header(不知道怎么翻译,就是工具条或菜单里面可以看到的执行命令的按钮了,这个命令是连接界面命令和实现代码的桥梁。)如: new PartCmdHeader(“point”,“CmdModule”,“TestCmd”,(void *)NULL); new PartCmdHeader("line","CmdModule","LinCmd",(void *)NULL);第一个参数是按钮的名字,第二、三个代表按钮执行的命令所在的module和命令的名字,参数四缺省就行了。
58
CreateToolbars里面就是要建的工具条和菜单的主要内容:
NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb); NewAccess(CATCmdStarter,pPointCmd,PointCmd); SetAccessCommand(pPointCmd,"point"); SetAccessChild(pPartBenchTlb,pPointCmd); NewAccess(CATCmdStarter,pLineCmd,LineCmd); SetAccessCommand(pLineCmd,"line"); SetAccessNext(pPointCmd,pLineCmd); 这三个函数都可以查到, NewAccess肯定是新建了,常用的类有CATCmdWorkbench(The workbench's access is a CATCmdContainer which contains containers: one for it's menubar and one for each toolbar. ) 、CATCmdContainer(Class to create the container's access like a menubar, a menu, a submenu, a toolbar or an icon box) 、 CATCmdStarter、(A starter is a leaf of the workshop's accesses tree. At each starter you attach a CATCommandHeader to launch the associated command. )
59
NewAccess, SetAccessCommand, SetAccessChild, SetAccessNext等几个命令的使用。其具体含义可以参看API文档的说明。( SetAccessCommand 就是将starter与上面的PartCmdHeader 建立的东西连接了,注意参数“line” )其他的顾名就可思义。 4、此时编译,发生几个连接错误。主要是CATCmdContainer类型及Newaccess的定义的头文件及其Module的添加。在.h文件中加上:#include "CATCmdContainer.h" 在.cpp中加入:#include "CATCmdContainer.h" #include "CATCreateWorkshop.h" 在.mk文件中加入:WIZARD_LINK_MODULES = \ JS0FM JS0GROUP PrtWorkshop MechanicalModelerUIUUID \ CATApplicationFrame # END WIZARD EDITION ZONE LINK_WITH = $(WIZARD_LINK_MODULES) \ CATApplicationFrame 在Identitycard.h中加入: AddPrereqComponent("ConstraintModelerUI",Protected); 注意:每次换行时,都要加一斜线用来继续执行下面的module.
60
PartBenchTlb.Title=”测试工具条”;
到此addin就做成了。剩下的就是定义资源文件,也就是换换名字或给按钮连接个图片。和前面的workbench一样工具条名字在“NewAddin.CATNIS”中进行定义: PartBenchTlb.Title=”测试工具条”; 在NewAddin.CATRsc定义图片。 NewAddin.point.Icon.Normal = “I_CAAPoint” ;(图片一般放在cnext/resource graphic\ Icon\Normal文件加下 , NewAddin.CATRsc文件可能不会自动生成,你可以在相应的文件加下新建一个问本文档,把后缀改成CATRsc再在VC里刷新你的工程就有了)。 下面简单介绍一下命令的响应, 1、首先就是前面提到的 new PartCmdHeader(“point”,“CmdModule”,“TestCmd”,(void *)NULL); 你做的命令所在的模块和命令名一定要和上面的名字对应。新建一个名为CmdModule的Module。将此Module设为当前的Project,选择“Insert” “CATIA Resource” “Command…”,插入一个名位TestCmd的Command:
61
2、Dialog的插入 将CmdModule设为当前Project,选择“Insert” “CATIA Resource” “Dialog…”,并将其名字设为TestDialog。 然后在TestDialog.CATDlg中添加控件,这里的控件与一般VC程序差不多,不再详述。添加三个回调函数。 在Command(TestCmd.cpp)的BuildGraph()函数或者其构造函数中添加代码: TestDialog *pi=new TestDialog(); pi->Build(); pi->SetVisibility(CATDlgShow);
62
注意先加其头文件: #include "TestDialog.h" 在TestDialog.cpp的Build()函数中添加 在三个回调函数中加入 RequestDelayedDestruction(); 此语句功能为执行Dialog的析构函数。 编译(MKMK),更新(Create/Update runtime virw),运行tools->open runtime window输入cnext。去partdesign里找你的工具调就行了。 补充:在自己做的workbench里加工具条和菜单代码是一样的,一般加在文件workshop.h里面,它里面已经有了工具条的代码,宏定义header class也已经自动添加到yourworkbenchCmdHeader.cpp里面 在做以上例子时最好参考CAA V5 Encyclopedia\user interfaces\Wintop Frame里面的Create workbench、CreateAddin例子,资源文件的定义在这里也讲的比较详细
Similar presentations