CATIA应用开发教程_第1页
CATIA应用开发教程_第2页
CATIA应用开发教程_第3页
CATIA应用开发教程_第4页
CATIA应用开发教程_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE52概述CATIA二次开发方式CATIA的二次开发方式主要有两种,一种是采用CAAC++技术,另一种是采用CAAAUTOMATION技术,两种技术都有其优缺点。CAA(ComponentApplicationArchitecture)C++是CATIA的一整套C++函数库,该函数库在CATIA运行时加载。用户通过安装RADE(RapidApplicationDevelopmentEnvironment)模块,用户可以在VC++编程环境下编制程序,与CATIA进行通信。Automation技术是建立在COM基础之上,由OLEAutomation(ObjectLinkingandEmbeddingAutomation)发展而来的。Automation的核心技术是允许一个应用程序操作另一个应用程序。Automation技术并不是直接获取及处理数据,而是间接地通过暴露的对象和属性,利用对象的方法和属性获取、设置及处理数据。Automation技术包括两个方面:server和client。Automationserver是一个实现了IDispatch接口的COM组件,而Automationclient是一个通过IDispatch接口与自动化服务器进行通信的COM客户。如CATIA我们把它看成一个server,客户编制的应用程序则是client。两种技术比较:从图1可以看出使用CAAC++可以进行最有效率的应用程序开发,但入门困难。CAAAutomation功能限制相当大,但入门容易。所以建议开发工作尽可能使用CAAAutomation,不足之处再以CAAC++完成。CATIA二次开发的基本方法CAA是第三方产品集成和一般客户进行客户化、个性化设计的强有力的工具,利用CAA完全可以实现DassaultSystemes应用的深层次开发。但是,由于DassaultSystemes应用本身的复杂性和CAA所涉及的深层次内容,利用CAA进行二次开发必然具有一定的复杂性和难度,用户在熟练掌握DassaultSystemes相应的应用系统,同时还具备了软件开发的基本知识、C++(或Java)的基本编程能力、COM技术的基本知识等基础上,需要做到:(1)熟悉CAA架构(图1)中的RADE。RADE包含两个模块:Tools和Guides,前者介绍怎样创建运行环境、开发平台上各个功能菜单的作用、对话框的创建等等;后者介绍编程时的相关规则、不同层次的组件、编写代码时的一系列建议等。(2)熟悉CAAV5开发平台中的基本知识。如熟悉Framework的组成原理(图2),客户对象、接口和实现之间的关系(图3),命名规则,Workshop、Workbench、toolbar和menu之间的关系,创建session的目的,以及文件树(FileTree)(图4)的逻辑结构等。只有熟悉这些相关的基本知识,才能够了解CAA的这套实现机制,才能做到有的放矢,从而正确地实现自己开发的目的。这些基本知识位于。(3)掌握其基本编程方法和相关技能。如:如何创建Framework和component、如何创建一个接口、如何创建session、如何获得一个API函数的指针、如何实现交互等。这就需要熟悉CAA组成架构和接口的逻辑关系。要掌握这些基本编程方法和技能,需要仔细研究并进行相应的编程练习和探索。(4)弄清楚CAA提供些什么函数,各函数分别位于哪个component中,怎样才能获得相应函数的接口。如何获得相应函数的接口是比较关键的;而比较困难的是如何利用CAA所提供的这些函数来实现自己开发的目的。这不仅需要仔细研究CAA所提供的C++API中的各Framework下的各种类型的函数和相应的接口关系,而且还要进行大量的编程探索,才能熟悉和掌握。CATIA二次开发知识准备CATIA基础知识C++基础知识类宏指针构造函数与析构函数继承多态、虚函数、重载、抽象类和派生类、纯虚函数COM基础知识COM基本概念组件组件对象模型(COM)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。COM是开发软件组件的一种方法(也有称其为一种标准,而不是实现)。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX,DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。COM所含的概念并不止是在MicrosoftWindows操作系统下才有效。COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。一个应用程序通常使由单个的二进制文件组成的。当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。目前这种状况已经发生变化。开发人员开始将单个的应用程序分隔成单独多个独立的部分,也既组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代以有的组件。此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。组件架构的一个优点就是应用可以随时间的流逝而发展进化。除此之外,使用组件还有一些可以使对以有应用的升级更加方便和灵活的优点,如应用的定制,组件库以及分布式组件等。使用组件的种种优点直接来源于可以将它们动态的插入或卸出应用。为了实现这种功能,所有的组件必须满足两个条件:第一,组件必须动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。接口对于COM来讲,接口是一个包含一个函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现的函数地址。对于COM而言,接口就是此内存结构,其他东西;均是COM不关心的实现细节。在C++中,可以用抽象基类来实现COM接口。由于一个COM组件可以实现支持任意数目的接口,因此对于这样的组件,可以用抽象基类的多重继承来实现。用类来实现组件将比其他方法更为容易。对于客户来说,一个组件就是一个接口集。客户只能通过接口才能和COM组件打交道。从整体上讲,客户对于一个组件可以说是知之甚少的。通常情况下,客户甚至不必知道一个组件所提供的所有接口。客户同组件的交互是通过接口完成的。在客户查询组件其他的接口时,也是通过接口完成的。这个接口就是IUnknown。Iunknown接口的定义包含在Win32SDK中的UNKNOWN.H的头文件中,引用如下:interfaceIUnknown{virtualHRESULT-__stdcallQueryInterface(constIID&iid,void**ppv)=0;virtualULONG__stdcallAddRef()=0;virtualULONG__Release()=0;};所有的COM都要继承IUnknown。可以用Iunknown的接口指针来查询该组件的其他的接口,并且每个接口的vtbl中的前三个函数都是QueryInterface,AddRef和Release。这使得所有的COM接口都可以被当作成IUnknown接口来处理。由于所有的接口都支持QueryInterface,因此组件的任何一个接口都可以被客户用来获取它所支持的其他接口。在用QueryInterface将组件抽象成由多个相互独立的接口构成的集合后,还需要管理组件的生命期。这一点是通过对接口的引用计数实现的。客户并不能直接控制组件的生命期。当使用完一个接口而要用组件的另一个接口时,是不能将改组件释放的。对组件的释放可以由组件在客户使用完所有的组件之后自己完成。IUnknown的另外两个成员函数AddRef和Release的作用就是给客户提供一种让它指示何时处理完一个接口的手段。AddRef和Release实现的是一种名为引用技术的内存管理技术。当客户从组件获得一个接口时,此引用计数值将增1。当客户使用完某个接口时,组件的引用计数值将减1,当引用计数值为0时,组件可以将自己从内存中删除。AddRef和Release可以增加和减少这一计数值。创建将组件分成多个接口只是将单模应用分个成多个部分的第一步,组件需要被放入动态链接库(DLL)中。DLL是一个组件服务程序,或者说是发行组件的一种方式。组件实际上应看成是在DLL中实现的接口集。在客户获取某个组件接口指针之前,它必须先将相应的DLL装载到其进程空间中,并创建此组件。由于客户组件所需要的所有函数都可以通过某个接口指针而访问到,因此,可以在DLL中引出CreatInstance函数就可以使用户调用它。之后,可以装载DLL并调用其中的函数。此功能可由COM库函数CoCreateInstance来实现。CoCreateInstance创建组件的过程是:传给它一个CLSID,然后它创建相应的组件,并返回指向所请求的接口的指针。但CoCreateInstance没有给客户提供一种能控制组件创建过程的方法,缺乏一定的灵活性。事实上,常用类厂来创建组件。类厂就是一个带有能够创建其他组件的接口的组件。客户先创建类厂本身,然后再用一个接口(如IClassFactory)来创建所需的组件。然后还要用DllRegisterSever在Windows中注册这个组件。复用COM组件可以被复用,它支持“接口继承”。这种继承指的是一个类继承其基类的类型或接口。抽象基类是一种最纯粹的接口继承,并且正好也被用来实现COM接口。在COM中,我们可以用包容和聚合来对组件进行改造。包容是在接口级完成的。外部组件包含指向内部接口的指针。此时,外部组件仅仅是内部组件的一个客户而已,它将使用内部组件的接口来实现它自己的接口。外部组件也可以通过将调用转发给内部组件的方法来重新实现内部组件所支持的某个接口。并且外部组件还可以在内部组件代码的前后加上一些代码以对接口进行改造。聚合是包含的一种变化形式。当外部组件聚合了某个内部组件的一个接口时,它并没有象包容那样重新实现此接口并显式的将调用请求转发给内部组件。相反,外部组件直接把内部组件的接口指针返回给客户。使用这种方法,外部组件将无需重新实现并转发接口中的所有函数了。包容和聚合为实现组件的复用提供了一种极具鲁棒性的机制。在组件构架下,客户于组件的实现完全隔离开了。《COM技术内幕》FAQ用户需要什么样的软件产品?这是一个多选题,但高效,健壮是肯定会被选种的。作为一名软件开发人员如何做才能满足用户的需要呢?必须要保证升级应用时不破坏与以前版本的向后兼容性。必须做到扩展系统服务时不依赖特定的操作系统。面向对象的程序设计显然是一次革命性的改变。采用面向对象的设计方法我们可以很容易的把要解决的问题事物抽象成各种类,并将内部动作封装隐藏起来,只提供一些接口。但这并没有完全解决我们的问题。昨天我在《程序员》杂志上看到,现在是后OO时代,那OO以后是什么呢?应该是面向组件吧。刚刚读完《COM技术内幕》一书,整理了一个FAQ,供大家在学习此书时参考。这是第一部分,包含前3章的内容。FAQ1:什么是COM组件?〖第一章〗FAQ2:组件不是……?〖第一章〗FAQ3:什么是接口?〖第二章〗FAQ4:接口的作用是什么?〖第二章〗FAQ5:什么是IUnKnown?〖第三章〗FAQ6:QueryInterface函数的作用是什么?〖第三章〗FAQ7:QueryInterface函数的实现规则是什么?〖第三章〗FAQ8:QueryInterface的样子?〖第三章〗FAQ9:QueryInterface函数的参数IID是什么?〖第三章〗FAQ10:何时需要建立一个新的COM组件版本?〖第三章〗什么是COM组件?COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。COM组件是遵循COM规范编写的COM组件是一些小的二进制可执行文件COM组件可以给应用程序、操作系统以及其他组件提供服务自定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序COM组件可以动态的插入或卸出应用COM组件必须是动态链接的COM组件必须隐藏(封装)其内部实现细节COM组件必须将其实现的语言隐藏COM组件必须以二进制的形式发布COM组件必须可以在不妨碍已有用户的情况下被升级COM组件可以透明的在网络上被重新分配位置COM组件按照一种标准的方式来宣布它们的存在组件不是……?COM组件不是一种计算机语言COM组件不是DLL,只是利用DLL来给组件提供动态链接的能力COM组件不是一个API函数集。COM组件不是类什么是接口?接口就是提供两个不同对象间的一种连接。计算机程序是通过一组函数而进行连接的,这组函数就是定义了程序中不同部分的接口。DLL的接口就是它所输出的那些函数。C++类的接口就是该类的成员函数集。COM中的接口是一组由组件实现的提供给客户使用的函数。在COM中接口是一个包含函数指针数组的内存结构,数组元素是一个由组件实现的函数地址。接口的作用是什么?有了组件如何将它们连接起来构成某个应用程序,需要用接口。在COM中接口就是一切,对客户说组件就是接口集,客户只能通过接口和组件打交道。说明接口可以保护系统免受外界变化的影响。这是封装的体现。接口实现了使用户使用同样的方式来处理不同的组件。这是多态的体现。接口如何实现?COM接口在C++中是用纯抽象基类实现。一个COM组件可以支多个接口。一个C++类可以使用多重继承来实现一个支持多个接口的组件。组件可以支持任意数目的接口。接口应该具有不变性。在组件升级时应该不修改原来的接口,而是添加新的接口。要精心设计实现接口,以使之能够支持各种不同的实现。什么是IUnKnown?IUnKnown是一个接口。所有COM接口都继承IUnKnown。IUnKnown的定义在WIN32SDK中的UNKNWN头文件中。///IUnKnown的定义QueryInterface函数的作用是什么?QueryInterface是IUnKnown的成员函数,客户可以通过此函数来查询组件是否支持某个特定的接口。QueryInterface函数返回一个指向组件支持的接口的指针。如果QueryInterface函数没有找到组件支持的接口则返回指针是NULL。QueryInterface函数可以使用if…then…else语句、数组、散列表、树来实现。QueryInterface函数不能使用case语句,因为QueryInterface函数返回的是一个HRESULT结构而不是一个数。QueryInterface也是一种无封处理组件版本的机制。这种机制使得组件的新旧不同的版本可以互操作。QueryInterface函数的实现规则是什么?QueryInterface返回的IUnKnown指针总是相同。若客户获得了某个接口,那么它总能获得此接口。客户可以再次获得已经拥有的接口。客户可以返回到起始接口。若能够在某个接口获得某个特定接口,那么从任意接口都将可以获得此接口。QueryInterface函数的参数IID是什么?它是一个结构,接口标识符结构。IID标识了客户所需的接口。每一个接口都有一个唯一的接口标识符。所以某个与IID相对应的接口绝对不会发生变化。接口IID决定了COM组件的版本。不同的接口具有不同的ID,包括不同版本的接口。何时需要建立一个新的COM组件版本?当为已有接口指定新的ID时应该是下面的条件至少有一个成立。接口中函数的数目发生改变时。接口中函数的顺序发生改变。接口中某个函数的参数发生改变接口中某个函数的参数的顺序发生改变接口中某个函数的参数的类型发生改变接口中函数的返回值发生改变接口中函数的返回值类型发生改变接口中函数的参数的含义发生改变接口中函数的含义发生改变简单地说,COM是一种跨应用和语言共享二进制代码的方法。与C++不同,它提倡源代码重用。ATL便是一个很好的例证。源码级重用虽然好,但只能用于C++。它还带来了名字冲突的可能性,更不用说不断拷贝重用代码而导致工程膨胀和臃肿。Windows使用DLLs在二进制级共享代码。这也是Windows程序运行的关键——重用kernel32.dll,user32.dll等。但DLLs是针对C接口而写的,它们只能被C或理解C调用规范的语言使用。由编程语言来负责实现共享代码,而不是由DLLs本身。这样的话DLLs的使用受到限制。MFC引入了另外一种MFC扩展DLLs二进制共享机制。但它的使用仍受限制——只能在MFC程序中使用。COM通过定义二进制标准解决了这些问题,即COM明确指出二进制模块(DLLs和EXEs)必须被编译成与指定的结构匹配。这个标准也确切规定了在内存中如何组织COM对象。COM定义的二进制标准还必须独立于任何编程语言(如C++中的命名修饰)。一旦满足了这些条件,就可以轻松地从任何编程语言中存取这些模块。由编译器负责所产生的二进制代码与标准兼容。这样使后来的人就能更容易地使用这些二进制代码。在内存中,COM对象的这种标准形式在C++虚函数中偶尔用到,所以这就是为什么许多COM代码使用C++的原因。但是记住,编写模块所用的语言是无关的,因为结果二进制代码为所有语言可用。此外,COM不是Win32特有的。从理论上讲,它可以被移植到Unix或其它操作系统。但是我好像还从来没有在Windows以外的地方听说过COM。面向组件技术面向对象技术催生了组件技术,组件技术为软件开发提供了改良的方法,它向过时的设想提出了挑战。这些原理共同建立了一种主要的新的技术趋势。组件表现为技术变革的基础,就像面向对象先前表现出的一样。我们在简短地介绍组件的独特原理后再讨论组件技术。迁移到下一个层次的软件技巧要求系统思想、软件处理和技术工具的基本原理都有所改变。下一个主要的技术范围——组件(或面向组件)包含了解决目前危急的软件问题的关键的原理。组件的方法引入了一套紧密相关的技巧和工艺。组件技术引入了用于生成业务结果的一套改进的想法。为了产生业务效果,组件引入了一个技巧性的想法。这些组件原理包括:组件的下层构造、软件模式、软件架构、基于组件的开发。组件与对象的对比组件可以被认为是面向对象和其它软件技术的化身。区分组件和其它先前的技术有四个原则:封装(encapsulation)、多态性(polymorphism)、后期连接(latebinding)和安全性(safety)。这个列表与面向对象是重复的,除了它删除了继承(inheritance)这个重点。在组件思想中,继承是紧密耦合的、白盒(white-box)关系,它对于大多数形式的包装和重复使用都是不适合的。作为代替,组件通过调用其它的对象和组件重复使用功能,代替了从它们那儿继承。在组件术语中,这些调用叫做委托(delegations)。“把各部分装配在一起,一个放在另一个里面,像木匠修建房屋一样建立你自己的轮廓。每样东西都必须建造好,各部分组合在一起就形成了全部…”——HenriMatisse根据惯例,所有组件都拥有与它们的实现对应的规范。这种规范定义了组件的封装(例如它为其它组件提供的公共接口)。组件规范的重复使用是多态性的一种形式,它受到高度鼓励。理想情形是,组件规范是本地的或全局的标准,它在系统、企业或行业中被广泛地重复使用。组件利用合成(composition)来建立系统。在合成中,两个或多个组件集成到一起以建立一个更大的实体,而它可能是一个新组件、组件框架或整个系统。合成是组件的集成。结合的组件从要素组件中得到了联合的规范。如果组件符合了客户端调用和服务的规范,那么它们不需要额外编写代码就能够实现交互操作(interoperate)。这一般被称为即插即用(plug-and-play)集成。在运行时间执行的时候,这是后期连接的一种形似。例如,某个客户端组件可以通过在线目录发现组件服务器(类似CORBATrader服务)。组件符合客户端和服务接口规范后,就能够建立彼此之间的运行时绑定,并通过组件的下部构造无缝地交互作用。在完美的情形中,所有组件都将完全符合它们的规范,并且从所有的缺陷中解放了出来。组件的成功的运行和交互操作依赖于很多内部和外部因素。安全性(Safety)属性可能是有用的,因为它可以最小化某个组件环境中的全部类的缺陷。随着社会日益依赖于软件技术,安全性已经成为一种重要的法定利害关系,并成为计算机科学研究中的最重要的课题之一。例如,Java的垃圾收集(garbagecollection)特性保证了内存的安全性,或者说从内存分配缺陷(在C++程序中这是有问题的)中解放出来了。其它类型的安全性包括类型安全性(typesafety,用于保证数据类型的兼容性)和模块安全性,它控制着软件扩展和组件合成的效果。组件的下部构造组件革命已经发展到组件下部构造的形式上了。主要的平台厂商都把自己的未来寄托在组件产品线上。特别地,微软、太阳微系统公司、IBM和CORBA社团都已经通过大量的技术和市场投资建立了重要的组件下部构造。这些组件下部构造(微软的.Net和太阳微系统公司的JavaEnterpriseJavaBeans包含了CORBA)都是与行业中面向对象的企业应用程序开发部分竞争的主要的下部构造。有趣的是,这些技术通过共同支持的XML、Web服务和其它企业应用程序开发的标准把互相之间的交互操作进行了很大的扩充。微软在当前的.Net产品套件中完全修复了自己的组件下部构造。微软.Net产品套件聚焦于企业级应用程序和分布式服务的开发和布署。尽管它混合了大量的新代码,但是它也包含了微软前期的分布式开发平台——微软分布式网络架构(DNA)和类似微软事务处理服务器(MTS)、微软SQLServer等分布式通用对象模型(DCOM)和长期存在的通用对象模型(COM)/COM+——的很多成功的产品和技术。已有的.Net套件在集成的企业产品套件中更新了这些产品,增加了对XML数据、Web服务和大量改善的开发环境的新的支持。微软.Net是软件行业需要验证的有形证据,证明微软在可以预见的未来的正在形成的组件世界中将扮演主要角色。太阳微系统公司发明的Java语言是编程语言特性、下部构造和相关的类库的持续的演化。Java语言技术引起了行业极大的骚动,并受到独立开发者的支持。Java-Beans和EnterpriseJavaBeans的扩展建立了一种进化的组件模型,它可以在跨平台的应用范围之中与COM和ActiveX竞争。EnterpriseJavaBeans和IBM的SanFrancisco项目正在使用Java远程方法调用(RMI)做分布式计算,它是Java语言程序员可以使用的几个专利下部构造之一。最近,Java语言已经在OMG的Internet内部ORB协议(InternetInterORBProtocol,IIOP)之上包含了RMI,它允许Java与其它拥有CORBAIDL接口的编程语言中的分布式组件交互操作。尽管专利Java语言下部构造的确为程序员提供了便利,但是为了与其它编程语言之间交互操作,它们需要额外的复杂性,特别是在局部使用Java本地接口(JNI)调用Java之外的编程语言中的程序的情形中。这对于共同的项目有重大的障碍,因为它减慢了传统技术的集成和跨语言的开发,而这些对于服务器应用程序是很常见的。在很多了解Internet的组织中Java应用程序服务器已经取代了CORBA的角色。CORBA缺乏的是对可伸缩性、可靠性和可维护性的直接的支持。现在这些能力都是大多数Java应用程序服务器支持的标准特征了。组件的下部构造对于软件开发有重要的影响。在很多方面,这些下部构造正在向成为主流开发平台的方向前进。因为它们都变成了可以交互操作的(通过CORBAIIOP),下部构造模型之间的关系都很好理解了。它们的相似点远远大于它们的专利的差异。下部构造的选择是讨论得最多的一个问题,但是对于组件的实现而言,其重要性却最低。对于共同开发者来说,最重要的问题会在选择下部构造之后遇到。这些问题包括如何掌握使用这种技术进行设计、如何架构系统、如何协调彼此之间的开发工作。组件软件的设计模式软件设计模式由能够应用于所有组件下部构造的软件知识的共同主体组成。软件设计模式是检验过的用于解决特定类别的结构上的软件问题的设计方法,它们已经备案以供其它开发者重复使用。其它重要的模式类别还包括分析模式和AntiPatterns。分析模式定义了对业务信息进行建模的检验过的方法,它可以直接应用于新软件系统和数据库的建模。软件设计模式是组件的一个必要的元素。新的、可以重复使用的组件的开发要求的设计、规范和实现都有专家级的质量。经过检验的设计方案对于建立成功的应用程序系列的组件架构和框架是有必要的。通常,在没有检验过的设计观念中偶然性变数太多了。软件设计模式的流行可以看作是对面向对象在实践中的缺点的反映。AntiPatterns解释了人们开发面向对象软件系统(以及其它类型的系统)的时候通常犯的错误。想要建立成功的系统不仅需要基础的面向对象的原理。设计模式解释了有效的软件设计所需要的额外的、改善的想法。分析模式提出了概念和数据的有效建模所必须包含的改善的想法。在软件开发中彻底改造设计思想仍然是很普遍的,这导致了“试验-错误”实验法的风险和延迟。实际上,大多数软件方法鼓励彻底地改造,把它作为开发的一般模式。给定了需求的改变、技术革新和分布式计算的挑战压力之后,彻底改造对于很多环境都是不必要的风险。这种意见特别适用于组件的开发,在这种情形中缺陷和重新设计的代价可能影响多个系统。总而言之,软件设计模式可以用知识的重复使用(knowledgereuse)来描述。有趣的是大多数模式都被认为像专家级开发者的常识一样简单。但是,对于大多数开发者来说,模式是技术训练中必要的部分,它可以帮助开发者获得世界级的结果。组件软件的架构软件的架构涉及到从早期的系统概念到开发和操作范围内的系统结构的计划和维护。好的架构是稳定的系统结构,它可以适应需求和技术的改变。好的架构确保了系统的生命周期中人们需求(例如质量)的持续的满意度。可以重复使用的组件是良好的架构的例子。它们支持稳定的接口规范,可以适应改变,是在很多系统环境中重复使用的结果。软件架构在组件的设计、规范和使用中扮演着重要角色。软件的架构提供了组件设计和重复使用的设计环境。组件在软件架构的预定义方面扮演一定的角色。例如,组件框架就可能预定义了系统的某个重要部分的架构。组件的软件架构的最令人兴奋的方面之一是支持分布式项目小组。软件的架构包含一个系统规范,它允许系统或系统的部分并行地、独立的开发。适当的软件架构定义了计算的边界(例如API),它把系统分成独立的可以测试的子系统。这些子系统可能被一个或多个分布式项目小组所采用。CATIA开发环境建立CATIA开发环境的步骤建立CATIA开发环境是基于CATIA做二次开发的基础,本章在MicrosoftWindowsXPProfessionalServicePack2操作系统上建立CATIAV5R14开发环境,步骤如下:1)CATIA的安装与配置(可以选择安装CATIA帮助文件)2)VC6.0的安装与配置3)VC6.0的安装与配置(或者安装.NET)4)CAA的安装与配置(包括CAA百科全书)5)RADE的安装与配置6)VisualAssist的安装与配置一般情况下,需要按照上述步骤建立CATIA开发环境。CATIA开发环境的卸载需要使用“控制面板→添加或删除程序”来完成。CATIA的安装与配置双击“G:\CATIA_V5R14开发环境\CATIA_V5R14_CD1\CD1\setup.exe”安装第一张盘。除了修改一下安装路径之外,其它对话框直接点击“确定”。CATIA的安装文件放置在两张盘上,当安装完第一个时系统会提示插入第二张光盘,此时直接安装第二张盘,不必理会提示框(如下图),待全部安装完毕后采用“Windows任务管理器”强制退出即可。安装第二张盘的方法同第一张盘,双击“G:\CATIA_V5R14开发环境\CATIA_V5R14_CD2\CD2\setup.exe”安装。将文件“G:\CATIA_V5R14开发环境\CATIA_V5R14_CD1\JS0GROUP.dll”拷贝到“CATIA安装路径\intel_a\code\bin”(如:D:\CATIA\B14\intel_a\code\bin)并覆盖原文件,此时CATIAV5R14安装完毕,启动CATIA查看是否能正常使用。然后对CATIA的OPTIONS进行配置。用户可以选择安装CATIA的帮助文件(不是必须的),CATIA的帮助文件有四张盘,用户只需要安装第一张,系统自动链接并安装后面三张。安装方法为:双击“G:\CATIA_V5R14开发环境\CAITA_V5R14_HELP\CD1\SETUP.EXE”。安装完毕后,将文件“CATIA帮助安装路径\English\CATIAhomepage.htm”(如D:\CATIA\B14doc\English\CATIAhomepage.htm)的快捷方式发送的桌面,便于今后的学习和查阅。安装形成的文件路径示例如下:VC6.0的安装与配置双击“G:\CATIA_V5R14开发环境\VisualStudio6.0\Disk1(setup)\setup.exe”安装。安装完成后重新启动Windows。将文件夹“G:\CATIA_V5R14开发环境\VisualStudio6.0\Lib”及其所有内容拷贝到“VC6.0安装路径\VC98”下并覆盖原文件夹。本文采用VisualStudio6.0编译环境,也可以采用.NET编译环境,.NET的安装方法参见其它相关文档。CAA的安装与配置双击“G:\CATIA_V5R14开发环境\CAA_V5R14\CAA_CATIA_V5R14\SETUP.EXE”安装CAA。安装完成后,CATIA安装路径下会多出许多CAA相关文件夹,包括CAA百科全书。将CAA百科全书(CAA的帮助文件)发送到桌面,便于今后的查阅。CAA百科全书文件为“CATIA安装路径\CAADoc\Doc\online\CAACenV5Default.htm”(如:D:\CATIA\B14\CAADoc\Doc\online\CAACenV5Default.htm),它包含了三部分内容:1)技术文章(TechnicalArticles):对系统构架详细说明2)使用实例(UseCases):提供大量代码3)快速参考(QuickReference):提供CAA所有API函数和类在开发工程中使用上下文帮助(ContextHelp),选择检索的关键词后按Ctrl+F1,可以在系统API中检索这个关键词。注意,必须先定义CATIA路径才能进行此操作。RADE的安装与配置双击“G:\CATIA_V5R14开发环境\CAA_V5R14\CAA_RADE_V5R14”安装RADE。将文件“G:\CATIA_V5R14开发环境\CAA_V5R14\Licensing.CATSettings”拷贝到“C:\DocumentsandSettings\用户\ApplicationData\DassaultSystemes\CATSettings”文件夹下。注意:为显示隐藏文件,应勾选“文件夹选项→查看→显示所有文件和文件夹”。安装完成后启动VC6.0,点击菜单按钮“Tools→Customize...→Add-insandMacroFiles”,按如下图的方式选择插件,关闭VC6.0后重新启动。VisualAssist的安装与配置推荐使用工具软件VisualAssist(简称VA)。它是VC编程环境的一种插件,能够有效的辅助程序员进行编码。VA可以自动识别程序中的各种关键字、系统函数和成员变量,并用不同颜色区分开来,便于开发者识别。VA还具有自动给出输入提示、更正大小写错误和标示错误代码等功能。双击“G:\CATIA_V5R14开发环境\Visual.Assist.X.v10.0.1230”安装VisualAssist。将“\crack”路径下的两个文件拷贝到VisualAssist的安装路径下,并覆盖原文件Va_x.dll。将“G:\CATIA_V5R14开发环境\Visual.Assist.X.v10.0.1230\CAAHeader”文件夹复制到一个用户制定的路径(如:D:\CATIA\B14)。启动VC6.0,点击菜单按钮“Tools→Option...→Directories→includefiles”,按如下图的方式将CAAHeader中的四个文件夹分别填入。此外,可以安装MSDN作为程序开发的参考资料。CATIA开发框架概述基本概念Addin是一个挂在指定Workbench下的插件,可以理解为一个工具栏,Addin通过Module来创建,是一个空架子,其具体实现是通过增加一个Component来完成的。Workspace、Framework、Module的定义和相互关系Addin,Component,command,dialogDialogComponent等的基本概念文件结构的介绍在VC6.0中新建一个CAA工程,其文件结构树如下图所示:图文件树形结构每个WorkSpace至少需要包含一个Framework。一个Framework包含了一个工程的所有需要的元素,也即是,一个Framework即可以是你的一个工程。Framework的体系如下图:图Framework的体系结构将磁盘中的文件夹结构与上图对照。下面对Framework的几个文件夹及其文件作简单的一个介绍。1)PublicInterfaces:公共接口,在这个文件夹中是类的声明,即.h头文件。这些类可以为整个Framework的各个模块共享,也可以被外部Framework使用。2)PretectedInterfaces:系统自动生成的module.h头文件,供编译连接时使用。这些模块只能在本Framework使用。3)IdentityCard.h:定义了所有用于编译使用此Framework的预定义Framework。即在开发过程中你使用了系统或者外部的API,你必须包含此API所在的头文件,module和Framework,其中Framework的预定义就在这个文件中进行。其格式如下:AddPrereqComponent("ApplicationFrame",Protected);//ApplicationFrame即为所连接的Framework4)Cnext文件夹:包含了Resources和Code两部分,其具体的作用下文会具体阐述。5)Module文件夹:Module为组织程序代码的一个基本容器,结构如下图。其中:LocalInterfaces中是仅供本模块使用的头文件集合;Src是所有本模块的.cpp文件集合;Imakefile.mk文件是所有本模块所包含的头文件所在外部Module的定义。在上面提到的IdentityCard.h中定义的是API所在的Framework,而相应的Module即在此文件中定义。在LINK_WITH后面添加需要连接的Modules。图1.3Module的结构图图1.4.mk文件下面为VC中的文件视图:FrameworkModuleFrameworkModuleMSDev菜单按钮说明Workspace与Framework的创建1)启动VC6.0,点击菜单按钮“File→NewCAAV5Workspace…”,出现对话框如下图,用户填写Workspace路径,并在工程路径中选择或创建路径,选择“ToolLevel”为“V5R14_B14”,点击Next。工程路径创建或选定2)创建Framework选项。系统提供了4个可用选项,选择第二项,单击Finish。Framework预定义3)输入Framework名字和选择其类型。Framework提供两种类型:应用和接口,提供三种功能:运用、测试和教学。也可以通过点击菜单按钮“Project→NewFramework”打开该对话框。Framework类型选择4)确定Workspace的创建。Workspace基本情况提示确定后VC文件视图(FileView)如下:所建立Workspace的文件视图此时生成了一个带有Framework的Workspace。CAA的开发提供了两种模式:批处理模式(BatchMode)和交互模式(InteractiveMode)。我们开发主要用到的是交互模式。在此模式下,可以创建两种交互界面:Workshop(或Workbench)、Addin。前者是创建一个新的模块,在这个模块中除了标准的命令,其余均由用户开发。后者指在已经存在的Workbench中插入新的工具条和命令。下面分别进行示例。在建立Workspace后,必须建立Workspace与CATIA系统接口的连接,以搜索开发所需要的API资源。点击菜单按钮“CAAV5Workspace→LocatePrerequisiteWorkspace…”,添加CATIA的安装路径,点击“Add”添加。预定义Workspace路径注意:此路径为Intele_a文件夹的上层路径。在这里,如果要引用其它Workspace的接口(Interface),也可以在这里指定此Workspace的路径。Workshop(Workbench)的创建在应用系统中创建Workshop或Workbench比较少见,一般都是在CATIA已有的Workshop或Workbench下建立用户化的Addin。下面举例在MechenicalDesignWorkshop中插入一个名为“我的工作台”的Workbench。1)新建一个Module:点击菜单按钮“Project→NewModule…”,填入Module名称并选择构建模式。构建模式有多种,其中常用的是Sharedobject(生成dll文件)和Executable(生成exe文件)。NewModule对话框2)进入创建确认界面,显示此Module信息。点击OK后,创建了一个新的Module。新建Module信息此时VC中的文件视图(FileView)如下:创建新Module后文件视图3)右键点击文件视图中的Module1.m,点击“Insert→CATIAResource→CATIAPattern…”,将其设为当前工作工程。选择Workshop,点击OK。在Module中插入CATIAPattern4)Workshop或者Workbench选择。选择创建Workbench,并输入其名称。点击接口浏览按钮,选择与Workbench所连接的Workshop。这里选择PRDWorkshop,即为Product空间。在新创建的Workbench中,会包含Product空间的一些基本标准命令,如插入产品等。如果选择Part空间,则会包含Part空间的一些基本命令。Workbench定义常用的AssociatedWorkshops有:AssociatedWorkshops定义5)再依次直接点击Next、Finish和OK。新创建Workbench基本信息点击OK后,生成名为MyWorkbench.m的module及其头文件。创建Workbench后文件视图6)其它设置在“MyWorkbench.mfiles\Imakefile.mk”文件中加入如下信息,注明包含CATIPRDWorkshopConfiguration.h这一个头文件的Module。在文件MyWorkbench.CATNIS(文件在工程中的CNext文件下的resourse文件:插图)中可以定义Workbench的工具条和菜单的所有名字(Title),定义格式为:在文件MyWorkbench.CATRsc中可以定义Workbench的图标(Icons)和其放置路径(Category),前者暂不说明。Category可以为:Infrasturcture、MechanicalDesign、Shape……。将其改为:“MechanicalDesign”。在文件MyFramework.dico中,定义了此Workbench的连接库。一个完整的Workbench创建完毕,编译和运行。7)编译和运行代码之前,一般需要更新一下运行时的视图,点击菜单按钮“CAAV5Workspace→Create/UpdateRuntioneview…”,点击OK更新。点击菜单按钮“Build→mkmk...”,弹出如下对话框,按下图配置后单击确定,在输出栏中显示调试信息,检查是否有包含“error”的行,如果没有,编译通过。也可以使用快捷键F7进行编译,但只编译当前的Module。配置运行时的环境,使程序测试用的中间结果可以通过窗口显示出来。点击“Tools→RuntimeEnvironmentVariables…”,在弹出的对话框中配置如下:点击“Tools→OpenRuntimeWindow,在弹出的命令行中输入cnext,回车。测试窗口弹出,稍候,CATIA启动,结果如前图。Addin的创建Addin是在已有的Workbench中插入新的工具条或者菜单,在系统开发中最为常用。下面的例子在PartDesign工作台中插入一个工具条1)新建一个Module,名为PartDesignAddin。将此Module设为当前激活工程,点击菜单按钮“Insert→Component…”,输入组件名为NewAddin,使用TIEmode。选择接口为:CATIPrtWksAddin。注意:Searchinperquisiteframeworksonly项勾除,此外,接口可以复选。NewAddin实际上是工具条的实现,最好命名为后缀为“Comp”,但由于时间关系,不改了。除了CATIPrtWksAddin外,还有两个最常用的接口,一个是“装配件设计”工作台:CATIPRDWorkshopAddin;另一个是普通工作台,即打开CATIA后,无论什么Workbench下工作台:CATIAfrGeneralWksAddin。插入组件信息相应的文件视图如下:文件视图此时建立了一个空的Addin。在MyFrame.dico文件中可以看到这个Addin的声明:要创建一个工具条还需要在NewAddin类中添加一些函数。在文件NewAddin.h中添加两个Public函数声明,并添加:#include"CATCmdContainer.h"为定义工具条,在NewAddin.cpp中添加一些包含文件与CreateToolbars()函数体。在PartDesignAddin.mfiles\Imakefile.mk文件中加入:在文件Identitycard.h中加入:在MyWorkbench中创建一个菜单,其名字为“测试菜单”,其上有一个命令(Command),名为“测试命令”。再创建一个工具条,名称与命令同上。在文件Workshop.h中加入代码:菜单、工具条名字的修改在MyWorkbench.CATNIS中:下面创建工具条。在Addin中只能插入新的工具条,无法插入菜单。如我们在PartDesign中新插入一个名为“测试工具条”的工具条,上有命令“测试命令”:工具条名字在“NewAddin.CATNIS”中进行定义。新建文件NewAddin.CATNIS和NewAddin.CATRsc,并加入文件路径和相应的文件视图中“\MyFramework\CNext\resources\msgcatalog”。PartBenchTlb.Title=”测试工具条”;文件NewAddin.CATRsc中的内容为空,NewAddin.CATNIS内容如下:编译运行结果如下:Command触发Dialog上述操作只是建立了一个空的界面,所有命令都是无法运行的。下面对创建的命令建立响应。1)在MyWorkbench的文件Header.h中加入代码:2)在NewAddin.cpp中加入代码:注意:PartCmdHeader宏定义的名称必须与文件NewAddin.cpp开始的定义的内容相同,如下图。这个命令是连接界面命令和实现代码的桥梁。下面来具体实现这个命令。这个命令的作用是显示一个对话框,包括有Label和Editor控件,Editor中显示“欢迎使用CAA!”。3)将MyFramework作为激活工程,新建一个名为TestModule的Module。将此Module设为当前激活工程,选择菜单按钮“Insert→CATIAResource→Command…”,插入一个名位TestCmd的Command:Command的插入4)将TestModule设为当前Project,选择“Insert→CATIAResource→Dialog…”,并将其名字设为TestDialog。Dialog的插入然后在TestDialog.CATDlg中添加控件,并设置属性,方法为右击控件,在浮动菜单中选择“Properties…”。添加确定和取消按钮的回调函数。右击确定按钮,在浮动菜单中选择“CallbackWizard…”。确定和取消按钮回调函数设置添加关闭对话框的回调函数(关闭对话框的控件为对话框右上脚的红叉按钮)。右击对话框空白处,在浮动菜单中选择“CallbackWizard…”。在弹出的对话框的Message栏选择“Windowclosing”,然后点击“Addcallback”。关闭对话框回调函数设置注意:对话框设计或修改完成后需要点击保存按钮,系统自动更新代码。并且mkmk完成后,使用一下“CAAV5Workspace→Create/UpdateRuntimeview…”,点击OK更新。5)在文件TestCmd.h和TestCmd.cpp中包含头文件:并在文件TestCmd.cpp中的TestCmd构造函数中添加代码:6)在TestDialog.cpp的Build()函数中添加代码在三个回调函数中添加代码,功能为执行Dialog的析构函数。编译运行,结果如下图。点击菜单按钮“测试菜单→测试命令”或者点击工具栏“测试工具栏→测试命令”,弹出测试对话框,点击按钮“确定”、“取消”或对话框右上角红叉,对话框关闭。点击对话框右上角红叉后,测试窗口显示出“再见”。如何解决对话框关闭后,工具栏的红色点点相应消失。CATIA开发经验和技巧编译外来程序的方法将外来代码在本机上运行的方法如下:1)将代码所在文件拷贝到本地路径2)点击菜单按钮“CAAV5Workspace→LocatePrerequisiteWorkspace…”,将CATIA的安装路径修改为本机CATIA安装路,点击“Add”添加。3)点击菜单按钮“Project→Choose/RefreshCAAV5Project...”,在弹出的第一个对话框中点击“OK”,在弹出的第二个对话框中点击“确定”。然后,就可以编译处理外来代码了。点击对话框右上脚红叉关闭对话框的方法右击对话框空白处,在浮动菜单中选择“CallbackW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论