第15卷第4期2003年4月
计算机辅助设计与图形学学报
JO U RNAL OF COM PU T ER -AI DED DESIGN &COM PU T ER GRA PHI CS V ol 115,No 14
Apr 1,2003
原稿收到日期:2002-10-15;修改稿收到日期:2002-12-161本课题得到国家重点工程/九五0攻关项目(96-A01-01-11)资助1赵卫东,男,1965年生,博士,副研究员,主要研究方向为CAD 、智能CAD 1柳先辉,男,1979年生,硕士研究生,主要研究方向为CAD 1卫 刚,男,1973年生,博士研究生,讲师,主要研究方向为CAD 1
产品开发策略
CAD 软件二次开发平台实现技术
赵卫东 柳先辉 卫 刚
(同济大学CAD 中心 上海 200433)
摘 要 阐述CA D 软件对二次开发支持的重要性,并对二次开发平台基本理论作初步研究;同时提出基于组件的实现方案,在钢结构CAD 软件开发中较好地解决了构建CA D 软件二次开发平台的问题1关键词 二次开发;COM 组件;钢结构CA D 软件中图法分类号 T P391
Realization Technology of Application Development Toolkit for CAD Software
Zhao Weidong Liu Xianhui Wei Gang
(CAD Ce nter ,T ongji Univ ersity,S hanghai 200433)
Abstract The important role and architecture of application development toolkit are discussed 1T he way to realize the toolkit using component technology is presented based on the ex perience of developing steel structure design softw are 1
Key words application development;COM;steel structure CAD softw are
1 引 言
应用软件对二次开发的支持已经成为当今软件业的一大趋势,是否拥有二次开发功能,也成为衡量软件品质的一项标准1
在CAD 应用软件领域同样存在这样的趋势,在文献[1]中,二次开发就作为第4代CAD 系统的一个特而单独列出1随着CAD 技术应用领域的不断扩大和应用技术水平的不断提高,用户需求和CAD 系统规模的矛盾日益增加,多数CAD 软件已不能充分满足用户需求[2]
,即使专业CAD 软件也不例外1传统的专业CAD 软件由于缺少二次开发支持,导致其存在不可定制、功能组织缺乏弹性等问题1虽然通用CAD 软件系统拥有运行效率高的二次
开发平台,但由于功能复杂,不适应某些专业领域1因此,支持二次开发平台的专业CAD 软件的开发成为该领域的一项重要课题1
然而,国内开发二次开发平台经验却极其匮乏,
这对中国CAD 软件的发展是一大阻碍,也使得我国的CAD 技术落后于国外先进水平1基于这一原因,本文结合钢结构CAD 软件的开发经验,提出基于组件模型的二次开发技术,并阐述了这一方法的实现过程1
2 二次开发的基本理论
211 基本含义
二次开发是增值开发商或最终用户在软件开发商所提供的开发环境与编程接口基础上,根据自身
的技术需求,进行新功能开发或软件环境定制的过程1从本质上讲,二次开发也是一个软件创新过程1212 C AD 软件二次开发平台的质量标准
开发一个优秀的二次开发平台是CAD 软件设计者的目标,我们可以从以下几方面衡量一个二次开发平台的品质[3]
1
(1)平台易用性
二次开发技术应简单易用、面向一般工程技术人员,并尽量符合他们的工程习惯1这是影响二次开发平台质量的首要因素1(2)技术先进性
二次开发技术应该尽量保持和软件技术的同步,保持一定的技术先进性1否则,将由于技术落后而最终被淘汰1
(3)执行高效性
CAD 软件对图形处理比较普遍,应用先进的算法和先进的软件技术提高系统执行速度显得相当重要1
(4)平台稳定性
不仅对于二次开发平台,就所有软件产品而言,稳定性都是衡量产品质量的重要指标1
(5)可移植性和兼容性
目前,由于二次开发技术还没有一个统一的标准,而每个CAD 软件有着自己的特点和数据结构,因此具有可移植性是一项比较高的要求;另一方面,随着软件技术的发展,推出新的开发方式或对原有的开发方式进行改进以后,对用户原开发的应用程序应该保持比较好的向下兼容性1从软件技术发展趋势来看,组件技术将是解决可移植性和兼容性的可行方案1
(6)可伸缩性
可伸缩性是二次开发平台的基本特,它指的是二次开发平台应该提供一种机制,使宿主应用程序可以同时管理多个用户开发的应用程序,可以实时动态地加载和释放应用模块,实现软件规模的动态伸缩1
(7)系统融合性和相对独立性
融合性是指二次开发平台应该提供相应的编程接口,使用户开发的应用程序能够进入宿主程序的交互流程和消息循环,与宿主程序及其他应用程序之间可以进行互操作,实现无缝集成1相对独立性是指二次开发平台应该提供一种机制,使用户开发的应用程序相对独立,它的加载和卸载不会影响宿
主应用程序和其他二次开发应用程序的正常运行1
二次开发平台不仅要提供良好的融合性,亦要保证其相对独立性1
213 CAD 软件二次开发平台的体系结构
在二次开发过程中,根据二次开发技术的不同,可分为两种模式:内嵌机制和外部开发机制1内嵌机制
是把语法解释器集成在宿主程序中,直接在程序中调用脚本程序段,执行后即可在宿主程序中获得结果1如ArcView 中的脚本、AutoCAD 中的Au -toLisp 就属于这种形式1外部开发机制则是由外部集成开发环境,如VC++,VB,Delphi 等,调用宿主程序暴露的接口,在调用程序中实现宿主程序的功能模块提供的功能1内嵌机制的优点是针对性较强,与宿主程序的融合性好,易学易用,它主要用于对宿主程序功能的扩充(如CAD 图形节点自动探测、自动更正),再建CAD 模板库及界面定制等1然而由于它固定在宿主程序上,因此功能受到限制,灵活性不足,只能与宿主程序一起运行1外部开发机制方式则具有非常强大的功能,几乎可以实现宿主程序提供的所有功能,并具有较强的独立性,还可生成新的应用程序,拥有自己的界面和功能,它的执行不影响宿主程序的运行1另外,外部开发机制还可以将开发成果作为插件形式在宿主程序中调用,增加宿主程序的功能模块1这一开发模式就相当于一次软件创新,但是亦有其不足,它要求二次开发人员具有较高的素质,对宿主程序有相当地了解,且对宿主程序的要求较高1
(1)内嵌机制的体系结构
内嵌机制以宿主程序为核心,脚本语法解释器是其关键部件1在这一模式中,先由宿主程序初始化内嵌的语法解释器,再装入脚本程序段;语法解释器根据程序代码控制宿主程序对功能模块的调用,通过功能模块在宿主程序中实现脚本代码需要执行的功能1图1所示为内嵌机制的体系结构1
图1 内嵌机制体系结构
513
4期赵卫东等:CAD 软件二次开发平台实现技术
(2)外部开发机制
外部开发机制具有较强的独立性1二次开发应用程序通过自己的内部函数,按一定的方式调用宿主程序的功能模块,而不与宿主程序发生关系1这些功能模块的功能可被认为是二次开发应用程序内部功能,与二次开发应用程序无缝连接,并直接在程序中实现,如图2所示
1
图2 外部开发机制体系结构
图3 内嵌模式实现方案
3 二次开发平台设计方案
组件是Window s 操作系统的基本模型,它具有
高度封装性、语言无关性、进程透明性和可重用性的特点,是二次开发平台当前采用的最理想技术1目前常用的组件模型主要有:COM 组件模型(包括Autom ation 和ActiveX),Corba,JavaBean 1考虑到大部分CAD 软件运行在Window s 平台下,我们采用与Windows 系统结合密切的COM 组件技术1
一个完整的二次开发平台必须同时提供二次开发的两种机制,以适应不同二次开发程序员的需求,并可增强系统的可扩展性1这对系统功能组件的划分提出了较高的要求,因为品质优良的二次开发平台需要宿主程序各功能模块提供很好地支持1311 系统组件模块划分
我们将钢结构CAD 软件整个系统分为5大模块:功能控制管理模块、数据管理模块、CAD 建模模块、界面管理模块、内嵌语法解释模块1各个模块皆
以组件方式实现1
(1)功能控制管理模块是对整个系统功能调用的控制,支持插件,并负责功能组件的注册,每一个
二次开发得来的新功能都需注册才能被调用1
(2)数据管理模块是负责CAD 全局数据的访问,在二次开发程序中也可以通过调用此模块开放的接口对整个系统数据实现透明访问1
(3)CAD 建模模块负责CAD 二维、三维建模,它所提供的功能是系统所有扩展功能的基础1一个出的CAD 软件,关键在于拥有强大的建模能力,因此,这一功能模块是系统的关键模块1在钢结构
CAD 软件中,我们将所有建模过程封装在COM 组件中,并且开发这些组件接口1
(4)界面管理模块是管理CAD 软件界面的模块,可以调用它定制宿主程序的界面1这样,二次开发组件就可以向其他内部功能组件一样,无缝地融入到宿主程序中1此外,外部开发的二次开发应用程序也可以调用界面管理模块,在程序中嵌入系统提供的界面元素,提高开发效率1
(5)内嵌语法解释模块是系统提供的二次开发环境,是内嵌机制实现的关键部分,也是我们二次开发平台开发的一个难点1312 内嵌机制
内嵌模式一直是CAD 软件二次开发的主流,若每个CAD 软件都以自己的语法结构开发内嵌语法解释器,无疑会加大二次开发平台开发的难度,加重二次开发用户负担1假如有一种通用的语言,早已被大家所熟知,而又有现成的语法解释器,只要把它嵌入到我们的CAD 软件中就可以立即使用,这不正是我们所孜孜以求的吗?
在钢结构CAD 软件中我们采用ActiveX Script -
514
计算机辅助设计与图形学学报2003年
ing 技术,以VBScriprt 作为宿主语言,它由微软提供的脚本引擎(Script Engine)解释,这个脚本引擎是一组COM 接口1为了脚本解释器更符合系统的要求,我们在微软脚本引擎的基础上设计了脚本解释器,定义为本地脚本引擎;它增加了大量特有的内部函数,称之为名字空间,简化了CAD 系统功能模块的调用1在构造本地脚本引擎时,应用COM 技术的特性,封装所有接口,只暴露在系统中能引用的对象1图3所示为钢结构CAD 内嵌二次开发平台的设计方案1
具体过程如下:
Step11在宿主程序初始化时创建引擎,得到的接口指针是应用系统控制引擎的唯一途径;
Step21宿主程序打开二次开发程序员书写的程序段,并置入本地脚本引擎;
Step31本地脚本引擎是该系统的关键部分,它调用微软脚本解释器提供的接口,解释代码,并根据名字空间,分别调用本地引擎解释函数或微软解释器内部函数1当宿主程序发出执行指令时,脚本引擎按照这个过程控制宿主程序创建组件对象,并执行这些对象的功能1
Step41组件对象实例化后,在宿主程序中显示出来(如果是界面对象,则添加界面元素)1
从上述过程可以看出,脚本引擎与宿主程序耦合比较松散,不影响宿主程序的性能1313 外部开发机制
外部开发机制主要涉及组件的调用1在系统提供的组件模型中,大部分组件由宿主程序的Basic,Application,Document 三个层次接口对象封装,如图4所示
1
图4 宿主程序外部接口层次结构
Document 对象负责作图、显示和存储,可以在文档上创建CAD 模型;Application 对象负责创建文档对
象,向文档对象发送消息,一个Application 对象可以拥有多个文档对象;Basic 对象是整个框架的基础,负责系统的自动化1此外,宿主程序还提供了一些独立的接口,主要是由功能控制管理模块、数据管理模块、CAD 建模模块和界面管理模块暴露的1
从外部开发目的看主要有两种:开发系统功能扩展模块,和开发独立系统1功能扩展模块,即DLL
插件,主要是通过继承系统提供的插件接口类,改写接口函数实现;在加载注册功能扩展模块时,由界面管理模块利用动态消息机制和宿主程序进行交互1独立系统的开发是更高层次的二次开发,涉及到上述三个层次接口对象和独立接口的调用1如我们可以调用由数据管理模块暴露的接口对象,实现和宿主程序一样的系统数据库访问方式,提取数据;也可以通过调用界面管理模块,在客户程序中实现特定的界面显示效果;还可以通过调用Application 对象对宿主程序发送指令1
314 对二次开发的C AD 软件的要求
根据我们的经验,总结出基于组件的支持二次开发CAD 软件对各部分的要求1
对宿主程序的要求:
(1)必须支持自动化1对自动化的支持使得其他程序能调用CAD 系统的文档,并且可以应用宿主程序的自动化接口创建独立的程序1这通过COM 组件实现1
(2)能创建至少一个语法解释器1语法解释器是执行用户二次开发脚本代码的关键,解释器的性能好坏是二次开发平台易用和稳定的基础1
(3)程序需具有动态定义CAD 模型的能力1构建CAD 模型是CAD 系统的根本要求,应用用户编写的脚本调用系统基本模型来构建复杂模型、或用外部语言(如VC)生成模型模块、在系统中无缝调用是CAD 系统扩展功能的捷径1这主要由CAD 建模模块和界面管理模块提供1
(4)程序能支持DLL 插件1支持DLL 插件使得系统具有更强的伸缩性1
(5)所有的内部CAD 模型都有组件封装,并由文档(Document 对象)创建1
对各功能模块COM 组件的要求:
(1)COM 组件需具有连接点;
(2)封装CAD 模型的COM 组件需支持集合和
枚举;
(3)封装CAD 模型的COM 组件能序列化;
(4)COM 对象能接受设备指针或设备句柄;(5)所有的建模过程都在组件对象内部完成1
4 钢结构二次开发平台应用和分析
图3中所示的脚本代码实现了在文档中每隔20个单位的地方创建一根梁(使用默认设置)的效果如图5所示1由于在脚本中使用本地引擎内置的basic语言被淘汰了吗
515
4期赵卫东等:CAD 软件二次开发平台实现技术
CreateBeam 函数以及Document 对象开放的一些接口函数,因此代码结构清晰,提高了二次开发平台的易用性1
在外部开发中,我们只需在程序中引用宿主程序注册过的组件,便可以方便地实现其封装的功能1如要在二次开发程序中创建一根柱,只需引用CAD 建模模块,定义一个柱对象,再调用这个柱对象的作图接口函数,就可以实现在宿主程序中添加柱的功能1具体代码略
1
图5 脚本执行演示
基于上述分析及实际应用,我们总结了基于组件的钢结构二次开发平台主要优点:
(1)提供丰富的接口1由于宿主程序本身的运
行就是调用这些功能组件接口完成的,而所有的这些接口都暴露给用户,因此在二次开发中几乎可以使用该系统提供所有功能,完成宿主程序所能完成的任务1
(2)接口的封装性好1由于采用组件方案,所有的接口安全性控制都在组件中完成,因此用户不必考虑系统的安全性;而且良好的封装性增加了用户调用系统功能的透明度1
(3)易于开发易于使用1由于采用了第三方的脚本解释编译器,并以VBScript 作为宿主脚本语言,同时系统提供大量通俗的扩展函数,因此降低了
二次开发平台开发难度,提高了平台的易用性1另一方面,系统用清晰的多层结构封装系统接口对象,降低了外部开发的难度1
(4)易于软件升级1基于组件模式的CAD 软件只要接口不变,组件内部函数算法的改变不影响原程序的调用1此外,在我们开发过程中,还可以预留一些接口,供以后升级使用1
(5)适用性广1在外部开发模式开发时不受编程语言的限制1
5 结束语
在CAD 技术日益成熟的今天,拥有一个优良的二次开发平台是CAD 软件的共同目标1通过我们的实践证明,组件技术是当前解决这一问题的最佳方案,而采用微软脚本引擎是创建内嵌二次开发平台的捷径1参 考 文 献
[1]Tong Bingshu 1The development of CAD technology [J]1Jour -nal of Engineering Graph i cs,1999(3):18~22(in Chi n ese)(童秉枢1试论CAD 技术的发展[J]1工程图学学报,1999(3):18~22)
[2]Tong Shizhong,Li Ping 1Secondary development i s key points of obtai n i ng actual effect for CAD[J]1Electronic M ach i nery En -gineering,1999(4):34~38(in Chinese)
(童时中,李 平1二次开发是CAD 取得实效的关键环节[J]1电子机械工程,1999(4):34~38)
[3]Wang Yunpeng,Lei Yi,Pan Xiang,et al 1T echniques of CAXA -EB application development [J]1Journal of Com puter -Aided Design &Computer Graphics,2002,14(2):189~192(in Chinese)
(王云鹏,雷 毅,潘 翔,等1CAXA 电子图版的二次开发技术[J]1计算机辅助设计与图形学学报,2002,14(2):189~192)
516
计算机辅助设计与图形学学报2003年
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论