论文部分内容阅读
摘要:本文对AutoCAD的二次开发技术进行了探讨,就AutoCAD六种开发技术AutoLISP,VisualLISP,ADS,VBA,Object ARX,Dot NET的内涵作了简要介绍,对其优缺点进行了详细的分析对比,指出ObjectARX和Dot NET是未来AutoCAD二次开发的方向,并为广大的AutoCAD二次开发人员选用其开发工具提供参考性意见。
关键词:AutoCAD;AutoLISP;VBA;ObjectARX;Dot NET;二次开发
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)11-2pppp-0c
Second Development Technology of AutoCAD
KONG Yong-ping,ZHU Juan
(South China University of Technology Computer Science and Engineering Institute,Guangzhou 510006,China)
Abstract:In this paper the development technique of AutoCAD has been discussed,AutoLISP,VisualLISP,ADS,VBA,Object ARX,Dot NET six technique that are used to develop AutoCAD second- ly are introduced in this paper. The merit and demerit of the six technique is analyzed and compa- reed among the technique in detail. indicating that ObjectARX and .NET API is the trend of AutoCAD secondary development, Some suggestions in choosing the tools are offered for engineers who are engaged in secondary developing AutoCAD.
Key words: AutoCAD;AutoLISP;VBA;ObjectARX;Dot NET;Second developed
1 引言
AutoCAD是美国Auto desk公司开发的通用型绘图软件,具有强大的图形编辑和处理功能、开放性结构以及良好的性能价格比,其版本从早期的1.0版到目前的2008版,在国内外都已得到广泛的应用。AutoCAD作为Auto desk公司CAD工业的旗帜产品,伴随着近年来整个PC基础工业的突飞猛进,正在迅速而深刻地影响着人们从事设计和绘图的基本方式。从始至今,AutoCAD是一种定位与全球各大领域和各类专业的通用微机CAD平台软件。到目前为止,Autodesk公司已经相继推出了四代二次开发工具,主要包括六种二次开发技术:AutoLISP,Visual LISP,ADS,VBA,ObjectARX和Dot NET, 其中ObjectARX和Dot NET是全新的的开发手段,功能非常强大,是AutoCAD二次开发的方向。表1为此六种开发技术的性能特点的比较
由于每一种开发技术都有其优点和缺点,而且在有些情况下是不可以比拟的。每个二次开发者可以根据自己的爱好特长和所要完成的任务来选择具体的开发技术。下面将详细介绍这几种开发技术的特点和应用领域。
2 基于AutoLISP/Visual LISP的开发技术
2.1 AutoLISP开发环境
AutoLISP是由Autodesk公司开发的一种采用LISP程序语言的编程工具。AutoLISP语言是一种嵌在AutoCAD内部的LISP编程语言,既具有一般高级语言的基本结构和功能,又具AutoCAD所特有的图形处理功能。利用AutoLISP可以直接增加,修改和调用AutoCAD命令,并能结合各类标准建立大量的参数图形库,还能够对当前图形数据库直接访问和修改等。AutoLISP编程语言最使用的应用之一是实现参数化绘图的实现,其中包括尺寸标注和鼠标拖动交互等等效果的实现,同时能够创建自己的对话框。 但AutoCAD和AutoCAD2.17以下版本的AutoCAD中不含AutoLISP,因此,AutoLISP只能够在AutoCAD2.18以上的版本中应用。AutoLISP不需要任何特定的硬件设备,只要一个系统能够运行AutoCAD就能运行AutoLISP。
2.2 AutoLISP优缺点
AutoLISP具有的优点:利用AutoLISP语言对AutoCAD进行二次开发,能够充分发挥AutoCAD的使用效率,而且AutoLISP特有的优点有,(1)编程十分简洁易懂,便于调试。(2)直接针对AutoCAD,易于交互。(3)解释执行,效果明显。AutoLISP在工程系统,特别是绘图系统的一个重要的开发工具。
AutoLISP的缺点是:(1)功能单一,综合处理能力差。(2)解释执行,程序运行速度慢。(3)缺乏很好的保护机制,源程序保密性差。(4)LISP用表来描述一切,并不能很好地反映现实世界过程,跟人的思维方式不一致。(5)不能直接访问硬件设备和进行二制文件的读写。(6)由于AutoLISP编写的AutoCAD应用程序是用记事本等(7)字处理软件编写的,调试起来很不方便。AutoLISP的这些特点,使得其应用有一定的局限性,使其仅适合于有一定能力的用户来完成一些自己的开发任务。
2.3 Visual LISP开发环境
Visual LISP是Autodesk公司为AutoLISP提供的一个完整的开发环境,从R14版开始,AutoCAD支持Visual LISP开发工具。Visual LISP是一个可视化的LISP语言开发环境,它是AutoLISP语言的扩展和延伸。
Visual LISP具有以下特性:(1)在完全可视化的开发环境下编写、调试程序。(2)Visual LISP程序经过编译后,提高了运行性能和保密性。(3)LISP代码通过AutoCAD R14的Object ARX接口,提高了程序的运行速度。(4)Visual LISP是一个被建立并装载的Object ARX应用程序,因而可以在AutoCAD外部装载和更新。
3 基于ADS的开发技术
3.1 ADS开发环境
ADS(AutoCAD Development System)是AutoCAD的C语言开发系统,是继AutoLISP后的第二代开发工具,是从AutoCAD R14开始引入的C语言开发工具,ADS不是C语言的一个子集,也不是基于C而编译的专用语言(如Microstation的MDL)但它包括了C的全部功能。是一组可以用C语言编写AutoCAD应用程序的头文件和目标库。它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,因此ADS很轻易地克服了AutoLISP语言所固有的诸多缺点。且ADS由于其速度快,有采用结构化的编译体系,因而很适合高强度的数据处理,如二次开发的桥梁CAD,工程分析CAD,建筑结构CAD等等。
3.2 ADS优缺点
与AutoLISP相比,ADS优越之处在于:(1)具备错综复杂的大规模处理能力。(2)编译成机器代码后执行速度快。(3)编译时可以检查出程序设计语言的逻辑错误。(4)程序源代码的可读性好于AutoLISP。
ADS的缺点:(1)C语言比LISP语言难于掌握和熟练应用。(2)ADS程序的隐藏错误往往导致AutoCAD乃至操作系统的崩溃。(3)需要编译才能运行,不易见到代码的效果。(4)同样功能,ADS程序源代码比AutoLISP代码长很多。
ADS都是通过内部进程通信来和AutoCAD通讯,他们与AutoCAD是相互分离的过程;而ObjectARX以DLL形式与AutoCAD共享地址空间。因此相比之下,前者速度更快,运行更稳定,更简单。由于是在Windows及VC 编程环境里运行,所以,对开发者的编程要求较高。
自从AutoLISP R14后,已经不再支持和发展ADS程序设计模式。从第二代的ADS开始,Autodesk开始采用多种语言环境下的开发工具,从LISP语言到Basic,C/C 等。
4 基于VBA的开发技术
4.1 VBA开发环境
Autodesk公司自它的AutoCAD R14.01版开始,内置了VBA开发工具, VBA(Visual Basic for Application)是一种嵌入AutoCAD内部基于对象的集成编程环境。已经被集成到AutoCAD2000以后所有的版本中。VBA为开发者提供了一种新的选择,同时也为用户访问AutoCAD中丰富的技术框架打开了一条新的通道。VBA和AutoCAD中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式架构。VBA和AutoCAD运行在同一处理空间,为AutoCAD提供智能和快速的编程环境。VBA编程环境有它自己一套对象、关键词、常量,并且提供程序流程、控制、调试和执行。VBA具有强大的开发能力。
VBA的主要功能和特点:(1)VBA可提供强大的窗体创建功能,为应用程序建立对话框及其他屏幕界面。(2)可创建自己的工具条。(3)可建立功能强大的模块级宏指令,宏名实质就是模块的过程名。(4)提供建立类模块的功能,这对开发大型工程非常有用,因为类可提供重用组件。另外,对于AutoCAD ActiveX技术中的应用程序级和对象级事件调用,将使用类模块。(5)具备完善的数据访问与管理能力,通过DAO(数据访问对象),可以对Access数据库或其他外部数据(象dBase,Foxpre等)实现访问与管理。此功能比直接使用AutoCAD的数据库管理系统要方便,且功能强大。(6)可以使用SQL语句检索数据,与RDO(远程数据对象)结合起来,能够建立客户机/服务器级的数据通信。(7)能够使用Win32API提供的功能,建立应用程序与操作系统之间的通信。
VBA的不足之处:(1)VBA不能像Visual LISP那样可以随意使用AutoCAD命令,只能像脚本文件的模式,以字符串的方式向AutoCAD命令发送一串响应,这个字符串的内容也只要在自己的程序中生成和进行数据转换。(2)由于VBA是以对象作为数据处理的基本单元的,因此像Trim Extend之类的命令都不能真正实施,要想完成这样的操作,相关数据只能在程序中自己计算。(3)源程序始终以相当容易接近的方式,暴露在最终用户面前,由于拥护的误操作,很容易使正常的应用程序出错甚至崩溃。
5 基于ObjeceARX的开发技术
5.1 ObjectARX开发环境
ObjectARX(AutoCAD Run-Time Extension)是基于AutoCAD R14的一种新的编程环境,它提供了以C 为基础的面向对象的开发环境及应用程序接口,能真正快速地访问AutoCAD图形数据库。ObiedARX程序本质上是Windows动态链接库(DLL)程序,与AutoCAD共享地址空间,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX程序与AutoCAD、Windows之间均采用Windows消息传递机制。
由于ObjectARX应用程序是以C 为基本开发语言,而C 具有面向对象编程方式的数据可封装性、可继承性及多态性的特点,用其开发的AutoCAD软件具有模块性好、独立性强、连接简单、使用方便、内部功能高效实现以及代码可重用性强等特点,并且支持MFC基本类库,能简洁高效地实现许多复杂功能。ObjectARX的核心是两组关键的API,即AcDb (AutoCAD数据库)和AcE(AutoCAD编译器),另外还有其它的一些重要库组件,如AcRX (AutoCAD实时扩展)、AcGi(AutoCAD图形接口)、AeGe(AutoCAD几何库)、ADSRx(AutoCAD开发系统实时扩展)。
与前面几中开发技术相比,这种开发技术拥有对AutoCAD最深入的控制能力,能够提供最多类型的窗体。使用ARX可以向AutoCAD注册自己的命令,用户运行该程序时无需了解关于AutoCAD更多的知识。这种便利的代价就是编制ARX程序比VBA和LISP程序需要花费更多的时间,因此用来编制简单的绘图工具有点浪费了。要掌握ARX的前提是必须熟练掌握C 。ARX能够访问很多的AutoCAD底层工具(这些东西可能VBA和LISP并不能访问),这是大多数开发者选择ARX的主要原因,他们需要作一些用其他两种开发工具不能完成的工作。此外,这也是唯一一种能够确保代码安全(不被别人阅读或非法复制)的开发工具。如果需要开发自定义实体,使用空间过滤,扩展一个使用其他开发工具的应用程序的功能,正在开发用于销售的第三方工具,或者用到一大堆用VBA和LISP不能访问的东西(或者费很大力气去实现的东西),那么ObjectARX是最佳选择。因此ObjectARX的许多特性能够实现很多原来开发环境难以实现的功能,提高了开发效率,它是AutoCAD新一代开发技术。开发人员可以开发相应的模块来定制和扩充AutoCAD的功能。同样,ARX库被设计成能够与AutoLISP和ADS应用程序协同工作,以便编程人员能够选择最能满足其需要和经验的编程工具。
ObjectARX应用程序的主要特点:(1)基于WindowsDLL的编译应用程序环境。(2)集成了AutoCAD,AutoLISP和ADS。(3)提供220个类与3000多个不重复的成员函数。(4)最大的可操作性,直接利用C 进入AutoCAD数据结构内核。(5)运行时可扩展。(6)能够接受不同事件的声明。(7)替代扩充充实实体数据和构建应用程序消息。(8)在不同的操作系统中可以移植。(9)用户能够定义“原始”的AutoCAD命令。(10)对于INTEL平台,一个ARX动态链接库工作于所有的应用程序。
ObjectARX的相对不足之处:对二次开发者的计算机专业知识、软件专业知识要求较高。增加了开发的复杂度和难度,加长了软件开发的周期。
6 新一代基于Dot NET的开发技术
Dot NET是基于Mircosoft.NET架构直接进行AutoCAD二次开发的一种新技术。目前能支持Dot NET开发方法的软件版本为AutoCAD2005到AutoCAD2008,但能完全支持Dot NET开发方法的软件为AutoCAD2006到AutoCAD2008。不管开发人员熟悉的语言是Visual Basic.NET还是Visual C#.NET,使用Dot NET进行AutoCAD二次开发的基本方法和步骤基本上是一样的。在新推出的支持Dot NET开发的AutoCAD 版本中,Autodesk公司专门为其开发增加了.NETAPI。.NET API提供了一系列托管的外包类(Managed Wrapper Class),使开发人员可在.NET框架下,使用任何支持.NET的语言,如VB.NET、C和Managed C 等对AutoCAD进行二次开发。其优点是完全面向对象,在拥有与C 相匹配的强大功能的同时,具有方便易用的特点,是较理想的AutoCAD二次开发工具。
6.1 .NET API与传统Object ARX
ARX的主要区别.NET API与传统ObjectARX的区别主要在于:在.NET环境下开发应用程序与在VC环境下开发应用程序的区别。首先,在VC环境下,程序员需要自己管理内存的申请和释放,而.NET采用了垃圾回收机制,由.NET框架自行判断内存回收的时机并实行回收,从而解决了令C 程序员头痛的内存泄漏问题。也正是由于这个特点,在.NET环境下不能像在C 环境下那样利用析构函数释放其他资源,需要程序员在程序中显式地释放。在.NETAPI中,主要通过Dispose来函数进行资源的释放。其次,ObjectARX中的各种反应器(Reactor)在.NET API中由外包类映射为各种事件(Event),可通过定义这些事件的响应函数来响应AutoCAD的各种操作。同时对于错误信息的处理也从函数返回值改变为“通常;异常”来处理,使其更好地兼容.NET。由于VB.NET、C等语言都是完全面向对象的,没有全局函数的概念,所以.NET API将ObjectARX下的全局函数封装为.NET API下的某些对象或对象的属性,如ObjectARX下与用户交互的系列全局函数被封装为CommandLin -ePrompt类。.NET API在具有ObjectARX强大功能的同时,也具有VBA使用方便易用的优点,同时具有C 的强大功能,是较为理想的开发工具。虽然目前.NET API在某些方面还有些不足,但随着其版本的更新、完善,将会成为众多开发人员的首选工具。
7 结束语
本文对AutoCAD的四代开发技术分别做了详细的介绍和比较。从目前开发技术可知,第一代的AutoLISP基本上能够被第三代的Visual LISP完全替代,第三代和第四代开发工具将成为今后AutoCAD二次开发的必然选择。其中主要的四种开发技术VisualLISP,VBA, ObjectARX, Dot NET分别利用当前比较流行的编辑语言LISP,Visual Basic,Visual C 及Visual C#,。而ObjectARX着眼于应用程序开发的自动化,智能化,为适应未来发展的需要,ObjectARX代表了AutoCAD二次开发技术的一个主要方向,具有广阔的前景。ARX类库与MFC类库的有机结合,必将为AutoCAD的二次开发注入新的生机和活力。Dot NET在具有ObjectARX强大功能的同时,也具有VBA使用方便易用的优点,同时具有C 的强大功能,是最新的较为理想的开发工具。虽然目前.NET API在某些方面还有些不足,但随着其版本的更新、完善。将与ObjectARX一起代表了AutoCAD二次开发技术的未来发展方向。
参考文献:
[1]明经CAD社区.http://www.mjtd.com/bbs/.
[2]ObjectARX编程站.http://www.objectarx.net/.
[3]郭启全.AutoCAD 2002应用与开发教程.北京:机械工业出版社,2003.
[4]孙江宏,丁立伟,米洁.AutoCAD ObjectARX开发工具及应用.北京:清华大学出版社,1999.
[5]老大中,赵占强.AutoCAD 2000 ARX二次开发实例精粹.北京:国防工业出版社,2001.
[6]孙海林,陆帅华,赵海峰.设计大师AutoCAD 2002高级使用篇.北京:清华大学出版社.
[7]高成慧,李燕.关于AutoCAD二次开发工具的探讨.应用技术,2002,(2):31-33.
收稿日期:2008-01-20
作者简介:孔勇平,男,助教,硕士,主要从事CAD,三维设计方面的研究;朱娟,女,硕士生导师,主要从事CAD,三维设计方面的研究。
关键词:AutoCAD;AutoLISP;VBA;ObjectARX;Dot NET;二次开发
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)11-2pppp-0c
Second Development Technology of AutoCAD
KONG Yong-ping,ZHU Juan
(South China University of Technology Computer Science and Engineering Institute,Guangzhou 510006,China)
Abstract:In this paper the development technique of AutoCAD has been discussed,AutoLISP,VisualLISP,ADS,VBA,Object ARX,Dot NET six technique that are used to develop AutoCAD second- ly are introduced in this paper. The merit and demerit of the six technique is analyzed and compa- reed among the technique in detail. indicating that ObjectARX and .NET API is the trend of AutoCAD secondary development, Some suggestions in choosing the tools are offered for engineers who are engaged in secondary developing AutoCAD.
Key words: AutoCAD;AutoLISP;VBA;ObjectARX;Dot NET;Second developed
1 引言
AutoCAD是美国Auto desk公司开发的通用型绘图软件,具有强大的图形编辑和处理功能、开放性结构以及良好的性能价格比,其版本从早期的1.0版到目前的2008版,在国内外都已得到广泛的应用。AutoCAD作为Auto desk公司CAD工业的旗帜产品,伴随着近年来整个PC基础工业的突飞猛进,正在迅速而深刻地影响着人们从事设计和绘图的基本方式。从始至今,AutoCAD是一种定位与全球各大领域和各类专业的通用微机CAD平台软件。到目前为止,Autodesk公司已经相继推出了四代二次开发工具,主要包括六种二次开发技术:AutoLISP,Visual LISP,ADS,VBA,ObjectARX和Dot NET, 其中ObjectARX和Dot NET是全新的的开发手段,功能非常强大,是AutoCAD二次开发的方向。表1为此六种开发技术的性能特点的比较
由于每一种开发技术都有其优点和缺点,而且在有些情况下是不可以比拟的。每个二次开发者可以根据自己的爱好特长和所要完成的任务来选择具体的开发技术。下面将详细介绍这几种开发技术的特点和应用领域。
2 基于AutoLISP/Visual LISP的开发技术
2.1 AutoLISP开发环境
AutoLISP是由Autodesk公司开发的一种采用LISP程序语言的编程工具。AutoLISP语言是一种嵌在AutoCAD内部的LISP编程语言,既具有一般高级语言的基本结构和功能,又具AutoCAD所特有的图形处理功能。利用AutoLISP可以直接增加,修改和调用AutoCAD命令,并能结合各类标准建立大量的参数图形库,还能够对当前图形数据库直接访问和修改等。AutoLISP编程语言最使用的应用之一是实现参数化绘图的实现,其中包括尺寸标注和鼠标拖动交互等等效果的实现,同时能够创建自己的对话框。 但AutoCAD和AutoCAD2.17以下版本的AutoCAD中不含AutoLISP,因此,AutoLISP只能够在AutoCAD2.18以上的版本中应用。AutoLISP不需要任何特定的硬件设备,只要一个系统能够运行AutoCAD就能运行AutoLISP。
2.2 AutoLISP优缺点
AutoLISP具有的优点:利用AutoLISP语言对AutoCAD进行二次开发,能够充分发挥AutoCAD的使用效率,而且AutoLISP特有的优点有,(1)编程十分简洁易懂,便于调试。(2)直接针对AutoCAD,易于交互。(3)解释执行,效果明显。AutoLISP在工程系统,特别是绘图系统的一个重要的开发工具。
AutoLISP的缺点是:(1)功能单一,综合处理能力差。(2)解释执行,程序运行速度慢。(3)缺乏很好的保护机制,源程序保密性差。(4)LISP用表来描述一切,并不能很好地反映现实世界过程,跟人的思维方式不一致。(5)不能直接访问硬件设备和进行二制文件的读写。(6)由于AutoLISP编写的AutoCAD应用程序是用记事本等(7)字处理软件编写的,调试起来很不方便。AutoLISP的这些特点,使得其应用有一定的局限性,使其仅适合于有一定能力的用户来完成一些自己的开发任务。
2.3 Visual LISP开发环境
Visual LISP是Autodesk公司为AutoLISP提供的一个完整的开发环境,从R14版开始,AutoCAD支持Visual LISP开发工具。Visual LISP是一个可视化的LISP语言开发环境,它是AutoLISP语言的扩展和延伸。
Visual LISP具有以下特性:(1)在完全可视化的开发环境下编写、调试程序。(2)Visual LISP程序经过编译后,提高了运行性能和保密性。(3)LISP代码通过AutoCAD R14的Object ARX接口,提高了程序的运行速度。(4)Visual LISP是一个被建立并装载的Object ARX应用程序,因而可以在AutoCAD外部装载和更新。
3 基于ADS的开发技术
3.1 ADS开发环境
ADS(AutoCAD Development System)是AutoCAD的C语言开发系统,是继AutoLISP后的第二代开发工具,是从AutoCAD R14开始引入的C语言开发工具,ADS不是C语言的一个子集,也不是基于C而编译的专用语言(如Microstation的MDL)但它包括了C的全部功能。是一组可以用C语言编写AutoCAD应用程序的头文件和目标库。它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,因此ADS很轻易地克服了AutoLISP语言所固有的诸多缺点。且ADS由于其速度快,有采用结构化的编译体系,因而很适合高强度的数据处理,如二次开发的桥梁CAD,工程分析CAD,建筑结构CAD等等。
3.2 ADS优缺点
与AutoLISP相比,ADS优越之处在于:(1)具备错综复杂的大规模处理能力。(2)编译成机器代码后执行速度快。(3)编译时可以检查出程序设计语言的逻辑错误。(4)程序源代码的可读性好于AutoLISP。
ADS的缺点:(1)C语言比LISP语言难于掌握和熟练应用。(2)ADS程序的隐藏错误往往导致AutoCAD乃至操作系统的崩溃。(3)需要编译才能运行,不易见到代码的效果。(4)同样功能,ADS程序源代码比AutoLISP代码长很多。
ADS都是通过内部进程通信来和AutoCAD通讯,他们与AutoCAD是相互分离的过程;而ObjectARX以DLL形式与AutoCAD共享地址空间。因此相比之下,前者速度更快,运行更稳定,更简单。由于是在Windows及VC 编程环境里运行,所以,对开发者的编程要求较高。
自从AutoLISP R14后,已经不再支持和发展ADS程序设计模式。从第二代的ADS开始,Autodesk开始采用多种语言环境下的开发工具,从LISP语言到Basic,C/C 等。
4 基于VBA的开发技术
4.1 VBA开发环境
Autodesk公司自它的AutoCAD R14.01版开始,内置了VBA开发工具, VBA(Visual Basic for Application)是一种嵌入AutoCAD内部基于对象的集成编程环境。已经被集成到AutoCAD2000以后所有的版本中。VBA为开发者提供了一种新的选择,同时也为用户访问AutoCAD中丰富的技术框架打开了一条新的通道。VBA和AutoCAD中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式架构。VBA和AutoCAD运行在同一处理空间,为AutoCAD提供智能和快速的编程环境。VBA编程环境有它自己一套对象、关键词、常量,并且提供程序流程、控制、调试和执行。VBA具有强大的开发能力。
VBA的主要功能和特点:(1)VBA可提供强大的窗体创建功能,为应用程序建立对话框及其他屏幕界面。(2)可创建自己的工具条。(3)可建立功能强大的模块级宏指令,宏名实质就是模块的过程名。(4)提供建立类模块的功能,这对开发大型工程非常有用,因为类可提供重用组件。另外,对于AutoCAD ActiveX技术中的应用程序级和对象级事件调用,将使用类模块。(5)具备完善的数据访问与管理能力,通过DAO(数据访问对象),可以对Access数据库或其他外部数据(象dBase,Foxpre等)实现访问与管理。此功能比直接使用AutoCAD的数据库管理系统要方便,且功能强大。(6)可以使用SQL语句检索数据,与RDO(远程数据对象)结合起来,能够建立客户机/服务器级的数据通信。(7)能够使用Win32API提供的功能,建立应用程序与操作系统之间的通信。
VBA的不足之处:(1)VBA不能像Visual LISP那样可以随意使用AutoCAD命令,只能像脚本文件的模式,以字符串的方式向AutoCAD命令发送一串响应,这个字符串的内容也只要在自己的程序中生成和进行数据转换。(2)由于VBA是以对象作为数据处理的基本单元的,因此像Trim Extend之类的命令都不能真正实施,要想完成这样的操作,相关数据只能在程序中自己计算。(3)源程序始终以相当容易接近的方式,暴露在最终用户面前,由于拥护的误操作,很容易使正常的应用程序出错甚至崩溃。
5 基于ObjeceARX的开发技术
5.1 ObjectARX开发环境
ObjectARX(AutoCAD Run-Time Extension)是基于AutoCAD R14的一种新的编程环境,它提供了以C 为基础的面向对象的开发环境及应用程序接口,能真正快速地访问AutoCAD图形数据库。ObiedARX程序本质上是Windows动态链接库(DLL)程序,与AutoCAD共享地址空间,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX程序与AutoCAD、Windows之间均采用Windows消息传递机制。
由于ObjectARX应用程序是以C 为基本开发语言,而C 具有面向对象编程方式的数据可封装性、可继承性及多态性的特点,用其开发的AutoCAD软件具有模块性好、独立性强、连接简单、使用方便、内部功能高效实现以及代码可重用性强等特点,并且支持MFC基本类库,能简洁高效地实现许多复杂功能。ObjectARX的核心是两组关键的API,即AcDb (AutoCAD数据库)和AcE(AutoCAD编译器),另外还有其它的一些重要库组件,如AcRX (AutoCAD实时扩展)、AcGi(AutoCAD图形接口)、AeGe(AutoCAD几何库)、ADSRx(AutoCAD开发系统实时扩展)。
与前面几中开发技术相比,这种开发技术拥有对AutoCAD最深入的控制能力,能够提供最多类型的窗体。使用ARX可以向AutoCAD注册自己的命令,用户运行该程序时无需了解关于AutoCAD更多的知识。这种便利的代价就是编制ARX程序比VBA和LISP程序需要花费更多的时间,因此用来编制简单的绘图工具有点浪费了。要掌握ARX的前提是必须熟练掌握C 。ARX能够访问很多的AutoCAD底层工具(这些东西可能VBA和LISP并不能访问),这是大多数开发者选择ARX的主要原因,他们需要作一些用其他两种开发工具不能完成的工作。此外,这也是唯一一种能够确保代码安全(不被别人阅读或非法复制)的开发工具。如果需要开发自定义实体,使用空间过滤,扩展一个使用其他开发工具的应用程序的功能,正在开发用于销售的第三方工具,或者用到一大堆用VBA和LISP不能访问的东西(或者费很大力气去实现的东西),那么ObjectARX是最佳选择。因此ObjectARX的许多特性能够实现很多原来开发环境难以实现的功能,提高了开发效率,它是AutoCAD新一代开发技术。开发人员可以开发相应的模块来定制和扩充AutoCAD的功能。同样,ARX库被设计成能够与AutoLISP和ADS应用程序协同工作,以便编程人员能够选择最能满足其需要和经验的编程工具。
ObjectARX应用程序的主要特点:(1)基于WindowsDLL的编译应用程序环境。(2)集成了AutoCAD,AutoLISP和ADS。(3)提供220个类与3000多个不重复的成员函数。(4)最大的可操作性,直接利用C 进入AutoCAD数据结构内核。(5)运行时可扩展。(6)能够接受不同事件的声明。(7)替代扩充充实实体数据和构建应用程序消息。(8)在不同的操作系统中可以移植。(9)用户能够定义“原始”的AutoCAD命令。(10)对于INTEL平台,一个ARX动态链接库工作于所有的应用程序。
ObjectARX的相对不足之处:对二次开发者的计算机专业知识、软件专业知识要求较高。增加了开发的复杂度和难度,加长了软件开发的周期。
6 新一代基于Dot NET的开发技术
Dot NET是基于Mircosoft.NET架构直接进行AutoCAD二次开发的一种新技术。目前能支持Dot NET开发方法的软件版本为AutoCAD2005到AutoCAD2008,但能完全支持Dot NET开发方法的软件为AutoCAD2006到AutoCAD2008。不管开发人员熟悉的语言是Visual Basic.NET还是Visual C#.NET,使用Dot NET进行AutoCAD二次开发的基本方法和步骤基本上是一样的。在新推出的支持Dot NET开发的AutoCAD 版本中,Autodesk公司专门为其开发增加了.NETAPI。.NET API提供了一系列托管的外包类(Managed Wrapper Class),使开发人员可在.NET框架下,使用任何支持.NET的语言,如VB.NET、C和Managed C 等对AutoCAD进行二次开发。其优点是完全面向对象,在拥有与C 相匹配的强大功能的同时,具有方便易用的特点,是较理想的AutoCAD二次开发工具。
6.1 .NET API与传统Object ARX
ARX的主要区别.NET API与传统ObjectARX的区别主要在于:在.NET环境下开发应用程序与在VC环境下开发应用程序的区别。首先,在VC环境下,程序员需要自己管理内存的申请和释放,而.NET采用了垃圾回收机制,由.NET框架自行判断内存回收的时机并实行回收,从而解决了令C 程序员头痛的内存泄漏问题。也正是由于这个特点,在.NET环境下不能像在C 环境下那样利用析构函数释放其他资源,需要程序员在程序中显式地释放。在.NETAPI中,主要通过Dispose来函数进行资源的释放。其次,ObjectARX中的各种反应器(Reactor)在.NET API中由外包类映射为各种事件(Event),可通过定义这些事件的响应函数来响应AutoCAD的各种操作。同时对于错误信息的处理也从函数返回值改变为“通常;异常”来处理,使其更好地兼容.NET。由于VB.NET、C等语言都是完全面向对象的,没有全局函数的概念,所以.NET API将ObjectARX下的全局函数封装为.NET API下的某些对象或对象的属性,如ObjectARX下与用户交互的系列全局函数被封装为CommandLin -ePrompt类。.NET API在具有ObjectARX强大功能的同时,也具有VBA使用方便易用的优点,同时具有C 的强大功能,是较为理想的开发工具。虽然目前.NET API在某些方面还有些不足,但随着其版本的更新、完善,将会成为众多开发人员的首选工具。
7 结束语
本文对AutoCAD的四代开发技术分别做了详细的介绍和比较。从目前开发技术可知,第一代的AutoLISP基本上能够被第三代的Visual LISP完全替代,第三代和第四代开发工具将成为今后AutoCAD二次开发的必然选择。其中主要的四种开发技术VisualLISP,VBA, ObjectARX, Dot NET分别利用当前比较流行的编辑语言LISP,Visual Basic,Visual C 及Visual C#,。而ObjectARX着眼于应用程序开发的自动化,智能化,为适应未来发展的需要,ObjectARX代表了AutoCAD二次开发技术的一个主要方向,具有广阔的前景。ARX类库与MFC类库的有机结合,必将为AutoCAD的二次开发注入新的生机和活力。Dot NET在具有ObjectARX强大功能的同时,也具有VBA使用方便易用的优点,同时具有C 的强大功能,是最新的较为理想的开发工具。虽然目前.NET API在某些方面还有些不足,但随着其版本的更新、完善。将与ObjectARX一起代表了AutoCAD二次开发技术的未来发展方向。
参考文献:
[1]明经CAD社区.http://www.mjtd.com/bbs/.
[2]ObjectARX编程站.http://www.objectarx.net/.
[3]郭启全.AutoCAD 2002应用与开发教程.北京:机械工业出版社,2003.
[4]孙江宏,丁立伟,米洁.AutoCAD ObjectARX开发工具及应用.北京:清华大学出版社,1999.
[5]老大中,赵占强.AutoCAD 2000 ARX二次开发实例精粹.北京:国防工业出版社,2001.
[6]孙海林,陆帅华,赵海峰.设计大师AutoCAD 2002高级使用篇.北京:清华大学出版社.
[7]高成慧,李燕.关于AutoCAD二次开发工具的探讨.应用技术,2002,(2):31-33.
收稿日期:2008-01-20
作者简介:孔勇平,男,助教,硕士,主要从事CAD,三维设计方面的研究;朱娟,女,硕士生导师,主要从事CAD,三维设计方面的研究。