CAD 软件二次开发平台实现技术.pdf
第15卷第4期 2003年4月 计算机辅助设计与图形学学报 JOURNAL OF COMPUTER2AIDED DESIGN 修改稿收到日期20022122161 本课题得到国家重点工程 “九五” 攻关项目 96 2A012012 11 资助1 赵卫东,男, 1965年生,博士,副研究员,主要研究方向为CAD、 智能CAD1柳先辉,男,1979年生,硕士研究生,主要研究方向为CAD1 卫 刚,男,1973年 生,博士研究生,讲师,主要研究方向为CAD1 产品开发策略 CAD软件二次开发平台实现技术 赵卫东 柳先辉 卫 刚 同济大学CAD中心 上海 200433 摘 要 阐述CAD软件对二次开发支持的重要性,并对二次开发平台基本理论作初步研究;同时提出基于组件的实 现方案,在钢结构CAD软件开发中较好地解决了构建CAD软件二次开发平台的问题1 关键词 二次开发;COM组件;钢结构CAD软件 中图法分类号 TP391 Realization Technology of Application Development Toolkit for CAD Software Zhao Weidong Liu Xianhui Wei Gang CAD Center , Tongji University , Shanghai 200433 Abstract The important role and architecture of application development toolkit are discussed1The way to realize the toolkit using component technology is presented based on the experience of developing steel structure design software1 Key words application development ; COM ; steel structure CAD software 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 从本质上讲,二次开发也是一个软件创新过程1 212 CAD软件二次开发平台的质量标准 开发一个优秀的二次开发平台是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中的Au2 toLisp就属于这种形式1 外部开发机制则是由外部 集成开发环境,如VC , VB , Delphi等,调用宿 主程序暴露的接口,在调用程序中实现宿主程序的 功能模块提供的功能1 内嵌机制的优点是针对性较 强,与宿主程序的融合性好,易学易用,它主要用于 对宿主程序功能的扩充如CAD图形节点自动探 测、 自动更正 , 再建CAD模板库及界面定制等1 然 而由于它固定在宿主程序上,因此功能受到限制,灵 活性不足,只能与宿主程序一起运行1 外部开发机 制方式则具有非常强大的功能,几乎可以实现宿主 程序提供的所有功能,并具有较强的独立性,还可生 成新的应用程序,拥有自己的界面和功能,它的执行 不影响宿主程序的运行1 另外,外部开发机制还可 以将开发成果作为插件形式在宿主程序中调用,增 加宿主程序的功能模块1 这一开发模式就相当于一 次软件创新,但是亦有其不足,它要求二次开发人员 具有较高的素质,对宿主程序有相当地了解,且对宿 主程序的要求较高1 1内嵌机制的体系结构 内嵌机制以宿主程序为核心,脚本语法解释器 是其关键部件1 在这一模式中,先由宿主程序初始 化内嵌的语法解释器,再装入脚本程序段;语法解释 器根据程序代码控制宿主程序对功能模块的调用, 通过功能模块在宿主程序中实现脚本代码需要执行 的功能1 图1所示为内嵌机制的体系结构1 图1 内嵌机制体系结构 315 4期赵卫东等CAD软件二次开发平台实现技术 2外部开发机制 外部开发机制具有较强的独立性1 二次开发应 用程序通过自己的内部函数,按一定的方式调用宿 主程序的功能模块,而不与宿主程序发生关系1 这 些功能模块的功能可被认为是二次开发应用程序内 部功能,与二次开发应用程序无缝连接,并直接在程 序中实现,如图2所示1 图2 外部开发机制体系结构 图3 内嵌模式实现方案 3 二次开发平台设计方案 组件是Windows操作系统的基本模型,它具有 高度封装性、 语言无关性、 进程透明性和可重用性的 特点,是二次开发平台当前采用的最理想技术1 目 前常用的组件模型主要有 COM组件模型包括 Automation和ActiveX ,Corba ,JavaBean1 考虑到大 部分CAD软件运行在Windows平台下,我们采用 与Windows系统结合密切的COM组件技术1 一个完整的二次开发平台必须同时提供二次开 发的两种机制,以适应不同二次开发程序员的需求, 并可增强系统的可扩展性1 这对系统功能组件的划 分提出了较高的要求,因为品质优良的二次开发平 台需要宿主程序各功能模块提供很好地支持1 311 系统组件模块划分 我们将钢结构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内嵌语法解释模块是系统提供的二次开发 环境,是内嵌机制实现的关键部分,也是我们二次开 发平台开发的一个难点1 312 内嵌机制 内嵌模式一直是CAD软件二次开发的主流,若 每个CAD软件都以自己的语法结构开发内嵌语法 解释器,无疑会加大二次开发平台开发的难度,加重 二次开发用户负担1 假如有一种通用的语言,早已 被大家所熟知,而又有现成的语法解释器,只要把它 嵌入到我们的CAD软件中就可以立即使用,这不正 是我们所孜孜以求的吗 在钢结构CAD软件中我们采用ActiveX Script2 415 计算机辅助设计与图形学学报2003年 ing技术,以VBScriprt作为宿主语言,它由微软提 供的脚本引擎Script Engine解释,这个脚本引擎 是一组COM接口1 为了脚本解释器更符合系统的 要求,我们在微软脚本引擎的基础上设计了脚本解 释器,定义为本地脚本引擎;它增加了大量特有的内 部函数,称之为名字空间,简化了CAD系统功能模 块的调用1 在构造本地脚本引擎时,应用COM技术 的特性,封装所有接口,只暴露在系统中能引用的对 象1 图3所示为钢结构CAD内嵌二次开发平台的 设计方案1 具体过程如下 Step11 在宿主程序初始化时创建引擎,得到的接口指 针是应用系统控制引擎的唯一途径; Step21 宿主程序打开二次开发程序员书写的程序段, 并置入本地脚本引擎; Step31 本地脚本引擎是该系统的关键部分,它调用微 软脚本解释器提供的接口,解释代码,并根据名字空间,分别 调用本地引擎解释函数或微软解释器内部函数1 当宿主程 序发出执行指令时,脚本引擎按照这个过程控制宿主程序创 建组件对象,并执行这些对象的功能1 Step41 组件对象实例化后,在宿主程序中显示出来如 果是界面对象,则添加界面元素1 从上述过程可以看出,脚本引擎与宿主程序耦 合比较松散,不影响宿主程序的性能1 313 外部开发机制 外部开发机制主要涉及组件的调用1 在系统提 供的组件模型中,大部分组件由宿主程序的Basic , Application , Document三个层次接口对象封装,如 图4所示1 图4 宿主程序外部接口层次结构 Document对象负责作图、 显示和存储,可以在 文档上创建CAD模型;Application对象负责创建文 档对象,向文档对象发送消息,一个Application对 象可以拥有多个文档对象;Basic对象是整个框架的 基础,负责系统的自动化1 此外,宿主程序还提供了 一些独立的接口,主要是由功能控制管理模块、 数据 管理模块、CAD建模模块和界面管理模块暴露的1 从外部开发目的看主要有两种开发系统功能 扩展模块,和开发独立系统1 功能扩展模块,即DLL 插件,主要是通过继承系统提供的插件接口类,改写 接口函数实现;在加载注册功能扩展模块时,由界面 管理模块利用动态消息机制和宿主程序进行交互1 独立系统的开发是更高层次的二次开发,涉及到上 述三个层次接口对象和独立接口的调用1 如我们可 以调用由数据管理模块暴露的接口对象,实现和宿 主程序一样的系统数据库访问方式,提取数据;也可 以通过调用界面管理模块,在客户程序中实现特定 的界面显示效果;还可以通过调用Application对象 对宿主程序发送指令1 314 对二次开发的CAD软件的要求 根据我们的经验,总结出基于组件的支持二次 开发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 由于在脚本中使用本地引擎内置的 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 Bingshu1The development of CAD technology[J ]1Jour2 nal of Engineering Graphics , 19993 18~22 in Chinese 童秉枢1 试论CAD技术的发展[J ]1 工程图学学报, 1999 3 18~ 22 [2]Tong Shizhong , Li Ping1Secondary development is key points of obtaining actual effect for CAD[J ]1Electronic Machinery En2 gineering , 19994 34~38 in Chinese 童时中,李 平1 二次开发是CAD取得实效的关键环节 [J ]1 电子机械工程, 19994 34~ 38 [3]Wang Yunpeng , Lei Yi , Pan Xiang ,et al1Techniques of CAXA2EB application development [J ]1Journal of Computer2 Aided Design Computer Graphics , 2002 , 142 189~192 in Chinese 王云鹏,雷 毅,潘 翔,等1CAXA电子图版的二次开发技 术[J ]1 计算机辅助设计与图形学学报, 2002 , 142 189~ 192 615 计算机辅助设计与图形学学报2003年