2023年11月30日发(作者:)

1 认识CAA

1.1 基础知识

在软件开发领域,使用面向对象的程序设计(OOP:Object- Oriented - Programming)已

经成为软件开发设计的主流,它为软件的发展带来了很多好处:可复用性、抽象性、封装性

等。软件专家把软件开发看作是对象的组合。

面向对象程序设计是一种程序设计方法,而建立在面向对象程序设计基础之上的组件对

象模型(COM)和对象的连接和嵌入(OLE)技术,使程序设计更加容易且趋于标准化,使程

序的使用更加简洁明了。MicrosoftCOMOLE 的先祖,基于此种技术的应用软件,如

Microsoft Word,Execl,Access 得到广泛地使用和承认,而且许多应用软件也是基于这种技术,

CAA就是基于这种技术的Windows应用软件。

Component Application Architecture (CAA) 组件应用架构,是Dassault Systemes正对于

其一系列产品,egCATIAENOVIADELIMAetc,进行扩展和客户进行二次开发的一

个强有力的工具。

对客户而言,CAA可以进行从简单到复杂的二次开发工作,而且和原系统的结合非常

紧密,如果没有特别的说明,无法把客户所研发的功能从原系统中区分出来,这非常有利于

用户的使用和集成。

CAA的实现,是通过提供的快速应用研发环境RADE和不同的API接口程序来完成的。

Dassault Systemes提供的CAA产品包括如下内容:

CAA RADE 快速开发环境,基于Microsoft Visual Studio

CAA CATIA V5 API CATIA V5应用开发工具

CAA ENOVIA LCA V5 APIENOVIA LCA应用开发工具

CAA DELMIA V5 APIDELMIA V5应用开发工具

CAA ENOVIA PORTAL V5 API ENOVIA PORTAL V5应用开发工具

API提供了操作各种对象的方法、工具和接口。

在商业运作方面,与Dassault Systemes系统的其他产品一样,CAA也被划分为软件包

Configuration和模块Product用户在购置CAA时要根据需要选择合适的配置和产品。

目前CAA有五个配置软件包:

CAAMulti-workspace Application Building(简称ABC) CAA应用的基本配

CAAC++ Extended Development(简称CDC提供与C++共存的的开发环境,

即对C++开发环境的客户化,用户除可使用C++开发环境的所有工具外,还可使

CAA提供的独特的开发工具.可用于CATIAENOVIA的二次开发.

CAAC++ Base Development(简称CDVCDC类似,但规模小,针对中小市

,可有限地运用于CATIA V5ENOVIA LCA的客户化工作.

CAAJava Base Development(简称JDV:运行于JAVA开发环境,适用于

ENOVIA LCA客户端的定制.

CAALegacy Data Integration Development Configuration(简称LDC:提供数

据接口工具,可使用户继承原有的数据.

1.2 CATIA的二次开发方式

1.2.1 CATIA的二次开发方式

CATIA V5 是法国达索公司与IBM公司开发的新一代CAD/CAM产品,采用了全新的、

基于组件的开放式体系结构(Open Architecture Products),应用了许多现代软件工程思想,

系庞大但结构清晰、合理,维护、开发、扩展方便,有着相当优良的扩展性能。它开放的组

件应用架构允许更多的第三方供应商针对用户的需要特别定制的应用解决方案。本段着重分

析了CATIA V5的基础体系结构(Architecture Infrastructure)及其软件工程思想。

CATIA V5在开发之初就遵循面向对象的设计思想(OO,构建了完全基于组件的体系

结构(PPR: Products, Process, Resource,有效地解决了维护、管理、扩展的困难,并大量

使用了最新的计算机技术和标准以及软件工程技术,其中包括基于组件架构思想的JAVA

BEAN COM/OLECORBA 技术和Web技术、C++语言、Visual Basic Journaling

STEP-SDAIXMLOpenGL等,这使CATIA V5具有与众不同的鲜明的特点:数据结构单

一,各个模块全相关,某些模块之间还是双向相关;端到端的集成系统,拥有强大的专业应

用扩展能力。

CATIA二次开发接口是通过两种方式与外部程序通信:进程内应用程序(In-process

Application)方式和进程外应用程序(Out-Process Application)方式。进程内应用程序方式

下,CATIA软件与脚本运行在同一进程地址空间,比如宏方式(Macro。在CATIA环境下

通过菜单记录宏(Record Macro,宏记录后,生成VB脚本(Visual Basic Script)序列,当

宏开始运行,CATIA就处于非激活状态,因此不能宏调用之间存储变量的值,这种方式比

较简单,在CATIA环境就中可完成。进程外应用程序方式下,CATIA与外部应用程序在不

同进程地址空间运行。CATIA运行的情况下,外部进程可以通过接口驾驭CATIA创建、

修改CATIA环境和几何形体的数据、尺寸等,同时支持对象连接与嵌入OLEObject Linking

and Enbedding.

具体来说,CATIA的二次开发主要有两种方法:使用宏对CATIA进行二次开发和使用

组件应用架构(CAARADE)CATIA进行二次开发。

1 使用宏(Macro)CATIA进行二次开发

可以用于自动化(Automation)组件,使用VBScript作为编辑工具,这是一种交互方式的

定制。可以记录用户的操作过程,自动生成代码。CATIA提供了Automation API用于VBScript

CATIA的二次开发,Automation API具备了与任何OLE所兼容的平台进行通讯能力。自

动化应用接口可以调用“InputBox”“MsgBox”函数获取用户输入信息和进行输出,而对于

NT用户则可以应用Visual Basic来定义更为复杂的输入输出面板。运行的时候可以给宏关

联一个图标,并置入CATIA显示框架。这种方式的开发流程如图1. 1中所示。

1. 1使用VB进行CATIA二次开发的基本流程

2 使用组件应用架构(CAARADE)CATIA进行二次开发

Component Application Architecture (CAA) 组件应用架构,是Dassault Systemes产品扩

展和客户进行二次开发的强有力工具。

快速应用研发环境Rapid Application Development EnvironmentRADE)是一个可视化

的集成开发环境,它提供完整的编程工具组。RADEMicrosoft Visual C++6.0为载体,开

发工具完全集成在了VC++环境中,并且提供了一个 CAA框架程序编译器,但同时也限制

VC++的部分功能。可以说CATIA CAARADE是目前所有高端CAD/CAM开发环境中最

为复杂、同时也是功能最为强大的一个。

CAA采用面向对象的程序语言,开发过程可看作是其组件对象的组合和扩展。CAA

用组件对象模型(COM)和对象的连接和嵌嵌入(OLE)技术,CAA的架构如图1. 2所示。

1. 2 CAA架构

1.2.2 组件

1 软件组件结构(SCI: Software Component Infrastructure)的基本概念

软件组件结构(SCI)是软件工程继过程模型和面向对象模型的下一代逻辑模型,提供

了最高层次的代码重用。软件组件结构(SCISoftware Component Infrastructure)有三个基

本的概念:框架(FRAMEWORK、组件(Component)和对象总线(Products Bus)

框架(FRAMEWORK:框架提供对所有应用程序有用的功能(如接口、存储)。它提

供了统一的总设计。框架是对相似应用程序集合的一个部分(统一但不完整)解决方案。开

发者的任务是用这不完整的解决方案加上必要的代码建立完整的应用。在领域(DOMAIN

内的一个应用包括不变部分和可变部分。不变部分由框架把握,一般可占到80%,可变部

分由开发者把握,一般可占到20% 。开发者通过向框架添加变化部分的代码把握其动作,

而形成新的特定应用。框架根据是否针对特殊领域还是若干领域,可分为水平框架、垂直框

架、复合文挡框架。

组件(Component:是软件的基本量子(单元)COM是一种协议,它建立了一个软

件模块同另一个软件模块之间的连接,然后再将其描述出来。当这种连接建立起来之后,

个模块就可以通过称为“接口”的机制来进行通讯。这些接口既不需要静态的或动态的连接

入口点,也不需要编码很复杂的地址。COM对于接口的定义和接口的实现作了严格的区分。

通过下面的IUnknown接口可以知道,在接口中只有接口方法的描述,而没有实现。

COM接口可以分为以下两类:标准接口和自定义接口。COM标准接口的名字以字母I

打头。COM定义了大量的标准接口。IClassFactoryIDispatchIUnknown等。其中IUnknown

接口最重要,因为所有其它接口都是从IUnknown接口直接或间接继承而来的。IUnkown

口定义了三个方法。

HRESULT QueryInterface([in] REFIID riid,[out] void **ppv);

ULONG AddRef();

ULONG Release();

COM定义的每一个接口都必须从IUnkown接口继承过来,换句话说,任何在COM

象上实现的接口必须以QueryInterfaceAddRefRelease为前三个方法。其原因在于

IUnkown接口提供了两个非常重要的特性:生存期控制和接口查询。客户程序只能通过接口

COM对象进行通信,虽然客户程序可以不管对象内部实现的细节,但它要控制对象存在

与否。如果客户还要继续对对象进行操作,则它必须保证对象一直存在于内存中;如果客户

对对象的操作已经完成,以后也不再需要该对象了,则应该及时地把对象释放掉,以提高系

统资源的利用率。

IUnkown接口中的AddRef()Release()负责对象引用计数,实现组件对象生命周期的

管理。每当COM组件被引用一次就应调用一次AddRef()方法。而当客户端在释放COM

件的某个接口时就需要调用Release()方法。

另外,如果一个COM对象实现了多个接口,在初始时刻客户程序不太可能得到该对象的所

有接口指针,它只会拥有一个接口指针。如果客户程序需要其它的指针,则利用IUnkown

接口中的QueryInterface()方法是用于查询组件对象所实现的其它接口

组件既应当足够小,以便于维护;又应足够大,可具备相当的功能,可以被打包和插用。

由于传统的客户/服务器(C/S)应用不能应付软件应用日益增加的复杂性。它们不能加入到

即插即用的环境之中。组件的特征提供了将一个应用程序分成若干个组件的机制。每个组件

提供了一个相当专门的功能,它向框架的其余部分描述自己,以便别的组件能够访问它的功

能。描述是通过说明性语言如IDL实现的,它本质上是把组件的接口与实现分离开来。由

于组件是可单独维护、升级的,因此,组件不直接与别的组件通信是至关重要的。它必须通

过使用框架或对象总线来实现组件之间的交互。

对象总线:对象总线是基本的中间件。它允许成千上万能够相互理解接口定义语言

IDL)的对象相互发生作用。这种作用对对象来说是完全透明的。对象总线把组件和框架

的能力扩展到开放网络和其它伙伴应用程序。它使成千上万独立的软件单元在由不同操作系

统、语言、硬件平台和编译工具组成的环境下互相无缝地交互运作。对象总线不仅提供对象

之间的连接,它还提供对在总线上所有对象都有用的核心服务集(对象服务)。如:生命周

期服务程序、安全性、持久性、命名等。

通过组件构造/修改软件,用框架把握软件结构,用对象总线连接事务,支持即插即用

Plug Play)功能的扩展

2 CATIA V5体系结构(Architecture Infrastructure

CATIA V5的体系结构(Architecture Infrastructure)是一种面向行业应用的垂直框架体

系结构,组件是CAD/CAM系统的各种几何特征和管理、分析单元。CATIA V5采用了多种

支持组件技术的软件技术如:JAVACOM/DCOMCORBA等,内部模块全部采用CNEXT

CATIA 内部使用的一种C++语言)实现,结构单一。提供了多种开发接口,支持C++/JAVA

Automation API ,支持各种开发工具:CAA C++JAVA VB,脚本语言。采用单继承,

对象之间关系明确,体系结构严谨,维护容易。框架是一些应用如:2D/3D建模、分析、混

合建模、制图、数控加工等,CATIA V5也称为领域(DOMAIN)或应用(APPLICATION

并通过3D PLM PPRPRODUCTS,PROCESS, RESOURCEHUB产品总线连接起来。

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

框架通过公用接口来实现对象之间的交互。

根据CAD软件的特点和实际需要,CATIA 的设计模式比较简单,主要有工厂模式、

模式等。在面向对象的编程中,工厂模式是一种经常被使用到的模式。根据工厂模式实现的

类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类

并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。

CATIA中的具体实现如下例所示,做一条垂直于曲面的线。

对象继承关系

+---CATBaseUnknown

|

+---CATBaseDispatch

|

+---AnyObject

|

+---HybridShape

|

+---Line

|

+---HybridShapeLineNormal

工厂的继承关系

+---CATBaseUnknown

|

+---CATBaseDispatch

|

+---AnyObject

|

+---Factory

|

+---HybridShapeFactory

先在HybridShapeLineNormal对象设定做这条线的属性参数如:点、参考面,在公共抽

象层Line中设定线的共同属性如坐标、法矢等,然后调用HybridShapeFactory中的

AddNewLineNormal方法进行对象实例化。

CATIA V5 的产品总线PPR不是真正意义上的对象总线,缺乏真正对象总线的一些特

征。它主要注重其它伙伴应用如EVOVIA LCADELMIA的互操作和集成,因此称之为“产

品总线”。产品总线分层的,如机械设计基于Mechanical Modeler&Sketcher,产品功能定义、

EBOMDMU, 知识工程等与Mechanical Modeler&Sketcher基于3D PLM PPR HUB OPEN

GATEWAY PDM3D PLM ENTERPRISE

ARCHITECTURE,并且全部应用都是基于CORBA,DCOMJ2EE之上。以实现真正意义

上的对象总线功能。

1.3 基础知识准备

1.3.1 CATIA中一些基本概念

WorkshopWorkbenchCATIA的功能模块的组织。CATIA将其功能细分,每个人

都可以选择自己的模块进入进行设计,简化了界面。 如图1

1. 3 CATIA各功能模块组织

CATIA对话框:

1. 4 CATIA 对话框

CATInteractiveApplicationpublic class

CATInteractiveApplication ,交互式应用的基类,作用:交互应用程序的基类,进化论是在

单文档,多文档或者模态对话框,如CATIA V5版本那样。为了创建你的交互式应用程序,

你应该,创建一个从CATInteractiveApplication派生的类,并且重载BeginApplication and

EndApplication方法,但是不要直接实例化这个类。

对话框架主要包括两个主要的类的类型:

容器主要包括组件对象的布置,容器既可见也不可见,其本身并不和用户打交道,除

了重新配置和重新定义窗口大小。

组件:是填充容器的基本要素,其中大多数和用户交互,包括控件,菜单,其它的包括

分割条以及对其它控件的命名等的指标控件。

下面介绍容器(Containers

容器主要用来包括几个对话组件,比如窗口布置目标的组,可分类如下:

1 窗口,派生于抽象基类CATDlgWindow

CATDlgWindow

CATDlgDialog

ATDlgNotify

CATDlgFile

2 Boxes派生于抽象基类CATDlgBox. 包括几个对话框架对象。

CATDlgContainer

CATDlgSplitter

CATDlgTabContainer

CATDlgFrame

CATDlgIconBox

Bars

CATDlgToolbar

CATDlgStatusBar

3 菜单Menus

CATDlgMenu

CATDlgSubMenu

CATDlgContextualmune

4 CATDlgSaperator

CATDlgLabel

CATDlaProgress

5 用于激发响应的控件Control to Trigger an Action:

CATDlgPushButton:

6 选项控件Controls to Set Options:

CATDlgRadioButton:

CATDlgCheckButton:

7 有输入输出值的控件Controls to Enter or Select Texts or Values

CATDlgSelectorList:

CATDlgCombo:

CATDlgEditor:

CATDlgSpinner:

CATDlgSlider:

CATDlgMultiList:

CATDlgScrollBa:

8 菜单按钮Menu Items

CATDlgPushItem:

CATDlgRadioItem:

CATDlgCheckItem:

CATDlgSeparatorItem:

1.3.2 VC++面向对象程序设计

这一部分简单介绍变量的作用域、类、对象、虚基类、类的继承和派生、成员函数、虚

函数的重载。

1 变量的作用域

自动类变量都是局部变量,他们呗定义在函数体内或分程序中,他们的作用域在定义它

的函数体内或分程序中。

外部变量的作用域最大,它的作用域是整个程序包含该程序的所有文件。外部类变量呗

定义在程序的某个文件的函数体制外,它在该程序的哥哥文件中都是可见的,也是存在的。

外部类变量的可见性和存在性是一致的。

外部类变量的定义和说明是两回事,这是它的一个特点。外部类变量在一个程序只能定

义一次,但是可以说明多次。定义外部变量时,不需要任何存储类说明符,只要写在函数体

外就可以了。它可以定义在程序头,也可以定义在程序中间或结尾。外部类变量定义时,必

须加说明符extern

2 类和对象

类的结构用来确定类对象的行为,这些行为是由类的背部数据结构和相关的操作来确定

的。而来的外部行为,又称服务,是通过一种操作接口来描述的。由于类具有隐藏性,因此

问们对于呗隐藏的数据和操作并不关心,而关心的是类通过操作接口所能提供的外部服务。

对象是类的实例,任何一个对象都是属于某个已知类的。

基类就是已存在的、用来生成新的类的父类,用这一父类所生成的类是它的派生类。

生类继承了基类中的所有成员及其属性,并且派生类本身拥有自己的新成员和属性。

如果要用CAA定义一个对话框,这个对话框的作用是画一个点,那么可以作如下定义:

Class PlainDlg: public CATDlgDialog

{……}

PlainDlg *_Panel;

在这段语句中,定义了一个类名为PlainDlg的类,它的基类是CATDlgDialog。并且用

PlainDlg类定义了一个名为_Panel的指针,来指向PlainDlg类的一个对象。

当不同的派生类继承了一个公共基类,为使在派生类对象中只产生一个基类子对象,

把这个公共基类定义为虚基类。1.2.2节中提到的CATBaseUnknown就是一个典型的虚基

类,它什么也不做,仅仅是为它的派生类提供接口的用处。

以下是类的定义:

class Addin: public CATBaseUnknown

{

Public

Add1 ();

virtual ~Add1 ();

void CreateCommands ();

CATCmdContainer * CreateToolbars();

Private

与基类相对应的,就是纯虚函数,它也没有具体的实现,必须在派生类要通过重载该纯

虚函数来实现一定的功能。

在上面的Addin类中,CreateCommands()和CreateToolbars()都是纯虚函数。他们

CATBaseUnknown的派生类CATIWorkbenchAddin中被定义为纯虚函数,在Addin类的

定义中通过重载来实现其功能。比如画一个点:

void Addin::CreateCommands () //纯虚函数,必须重载

{

new OnLineParameterCmdHeader("","Add1","PlainCmd", (void *)NULL);

}

1.4CAA运行环境和配置

建立CATIA开发环境是基于CATIA做二次开发的基础,本章在Microsoft Windows XP

Professional Service Pack2操作系统上建立CATIA V5R16开发环境,步骤如下:

1 CATIA V5R16的安装与配置(可以选择安装CATIA帮助文件)

CATIA的安装文件放置在两张盘上,

当安装完第一个时系统会提示插入第二张光盘,此时直接安装第二张盘,不必理会提示

框(图1. 5,待全部安装完毕后采用“Windows任务管理器强制退出即可。再继续安装第

二张盘。

1. 5 插入第二章盘

安装完成后,文件拷贝到B16/Intel_a/code/bin 目录下,并覆盖掉同名

文件即可。

1. 6 拷贝JSOGROUP.dll文件

2 VS2002VC++.Net)的安装与配置

解压VS2002之后出现如图1. 7界面,先装Windows Component Install,再装Visual

Service Release 不用装。在安装文件夹下Product 文本里是序列号。

1. 7 VS安装界面

3 VC++6.0的安装与配置(没什么问题)

4 CAA的安装与配置

解压之后的文件夹如图1. 8 先安装CAT_CAA-R16-WIN-1,再安装RADE,最后双

CAAR16GA破解。

1. 8 CAA安装文件夹

5 Visual Assist的安装与配置(本插件可以不装)

推荐使用工具软件Visual Assist(简称VA。它是VC编程环境的一种插件,能够有效

的辅助程序员进行编码。VA可以自动识别程序中的各种关键字、系统函数和成员变量,并

用不同颜色区分开来,便于开发者识别。VA还具有自动给出输入提示、更正大小写错误和

标示错误代码等功能。

6 设置

上述步骤全部完成之后,依次点击“开始/程序/CAA RADE/Tools/RADE License Manager

V5R16,选中以下选项:

1. 9 CAA软件包配置

启动VC++6.0,依次点击“Tools(工具)―>Optimize(定制)―>附加项和宏文件”

选中全部选项。

1. 10 C++设置