AutoCAD二次开发工具综述. K2 a) ]' K2 I9 W. r6 n
2007-9-24 作者:梁艳霞 曹飞
+ c# l; V6 u% r6 j4 } AutoCAD是目前微机上应用最为广泛的通用交互式计算机辅助绘图与设计软件包。AutoCAD的强大生命力在于它的通用性、多种工业标准和开放的体系结构。其通用性使得它在机械、电子、航空、船舶、建筑、服装等领域得到了极为广泛的应用。但是,不同的行业标准使得各领域在使用AutoCAD的过程中均需根据自身特点进行定制或开发。Autodesk公司为满足广大用户的需求,自AutoCAD v2.18版至AutoCAD 2000的短短十几年间,就相继推出了三代二次开发工具,如图1所示。可以说,AutoCAD的通用性为其二次开发提供了必要条件,而AutoCAD开放的体系结构则使其二次开发成为可能。
8 l0 c6 E7 G) ?- x$ G% a+ z2 s + c% q, I9 I- I S# h6 t% |
图1 AutoCAD二次开发工具的演变
8 S" O- y- [5 S5 f4 J+ ^ 下面对AutoCAD的三代开发工具进行浅析。7 E$ v0 I' T5 s$ H+ w6 W
一、第一代开发工具——AutoLISP
7 T4 T( F. s4 @" w AutoLISP是1986年随AutoCAD v2.18提供的二次开发工具。它是一种人工智能语言,是嵌入AutoCAD内部的COMMON LISP的一个子集。在AutoCAD的二次开发工具中,它是唯一的一种解释型语言。使用AutoLISP可直接调用几乎所有的AutoCAD命令。
: ]5 F& i& f. m9 q& u' f AutoLISP语言最典型的应用之一是实现参数化绘图程序设计,包括尺寸驱动程序和鼠标拖动程序等。另一个典型应用就是驱动AutoCAD提供PDB模块构成DCL(Dialog Control Language)文件,创建自己的对话框。
* I# F6 e7 H; c% S# I AutoLISP具有以下优点:(1)语言规则十分简单,易学易用;(2)直接针对AutoCAD,易于交互;(3)解释执行,立竿见影。
. W. j. f2 T1 f, L- I2 V AutoLISP的缺点是:(1)功能单一,综合处理能力差;(2)解释执行,程序运行速度慢;(3)缺乏很好的保护机制,源程序保密性差;(4)LISP用表来描述一切,并不能很好地反映现实世界和过程,跟人的思维方式也不一致;(5)不能直接访问硬件设备、进行二进制文件的读写。& N" E) p1 ^) I5 {/ o
AutoLISP的这些特点,使其仅适合于有能力的终端用户完成一些自己的开发任务。5 F% U' ?6 }1 m1 ^
二、第二代开发工具——ADS
) Z3 L `3 S; W9 ]3 v- u ADS(AutoCAD Development System)是AutoCAD R11开始支持的一种基于C语言的灵活的开发环境。ADS可直接利用用户熟悉的C编译器,将应用程序编译成可执行文件后在AutoCAD环境下运行,从而既利用了AutoCAD环境的强大功能,又利用了C语言的结构化编程、运行效率高的优势。& z. Z4 N4 o) }5 S3 D- w
与AutoLISP 相比,ADS优越之处在于:(1)具备错综复杂的大规模处理能力;(2)编译成机器代码后执行速度快;(3)编译时可以检查出程序设计语言的逻辑错误;(4)程序源代码的可读性好于AutoLISP。 而其不便之处在于:(1)C语言比LISP语言难于掌握和熟练应用;(2)ADS程序的隐藏错误往往导致AutoCAD,乃至操作系统的崩溃;(3)需要编译才能运行,不易见到代码的效果;(4)同样功能,ADS程序源代码比AutoLISP代码长很多。
/ _- `# f( p) J2 f" w 三、第三代开发工具——Visual LISP,ARX及基于ActiveX Automation技术的VBA等1 A) p+ w0 Z: H% S
1.Visual LISP(VLISP)( K) Y# C3 S! P3 t2 F
VLISP是AutoLISP的换代产品。它与AutoLISP完全兼容,并提供它所有的功能,是新一代的AutoCAD LISP语言。VLISP对语言进行了扩展,可以通过Microsoft ActiveX Automation接口与对象交互。同时,通过实现反应器函数,还扩展了AutoLISP响应事件的能力。作为开发工具,VLISP提供了一个完整的集成开发环境(IDE),包括编译器、调试器和其他工具,可以提高二次开发的效率 。另外,VLISP还提供了工具用于发布独立的应用程序。
) X2 l7 g3 W8 M# c6 |7 g: w 2.ARX
3 T/ [: t' B1 a( K& R9 r4 R1 y4 p ARX(AutoCAD Runtime eXtension)是AutoCAD R13之后推出的一个以C++语言为基础的面向对象的开发环境和应用程序接口。ARX程序本质上为Windows动态链接库(DLL)程序,与AutoCAD共享地址空间,直接调用AutoCAD的核心函数,可直接访问AutoCAD数据库的核心数据结构和代码,以便能够在运行期间扩展AutoCAD固有的类及其功能,创建能够全面享受AutoCAD固有命令特权的新命令。ARX程序与AutoCAD、Windows之间均采用Windows消息传递机制直接通讯。
+ a# w* S/ S0 f* k( o AutoLISP、ADS、ARX都是AutoCAD提供的内嵌式编程语言。AutoLISP和ADS都是通过内部进程通讯(IPC)来和AutoCAD通讯,它们与AutoCAD是相互分离的过程,而ARX以DLL形式与AutoCAD共享地址空间,如图2所示。因此,与前两者相比,其速度更快、运行更稳定、更简单。由于是在Windows及VC++编程环境里运行,所以,对开发者的编程能力要求较高。3 X, t e& m% z
/ o a9 U! q8 y: E0 E- v4 F
图2 ARX、ADS、AutoLisp与AutoCAD的关系
5 h j1 b3 H; o! ^; t# H. a3 Q ObjectARX应用程序以C++为基本开发语言,具有面向对象编程方式的数据可封装性、可继承性及多态性的特点,用其开发的CAD软件具有模块性好、独立性强、连接简单、使用方便、内部功能高效实现以及代码可重用性强等特点,并且支持MFC基本类库,能简洁高效地实现许多复杂功能。- D" v( v9 d1 j1 ~5 C+ ^
这里顺便提一下ADSRX。AutoCAD R14的开发环境ADSRX是ARX的一个子集,它等效于ADS。使用ADSRX,能够用C语言编写基于AutoCAD的程序,也能很方便地将ADS程序移植为ARX程序。
4 e! O* {' k8 o' I 图3比较了AutoLISP、ADS、ADSRX和ARX的关于速度、暴露性、功能和要求使用每个API的编程经验等方面的编程接口。“暴露性”参数显示了用户编程错误的可能严重性。尽管ARX接口是四个API中最强有力的,它也具有产生严重编程错误的最大潜在性,如破坏AutoCAD数据结构等。其它编程环境要求较少的编程经验,但提供的功能和范围也较小。# U1 g& p6 b8 P6 a5 j& p7 i5 Z% y
' o: L- y, _' K# E 图3 AutoLisp、ADS和ARX的系统比较
) Q( R: T1 v0 [+ L2 u' } 可以说,AutoLISP着眼于应用程序的交互性,ADS C/C++着眼于应用程序的综合性,而ARX则着眼于应用程序的智能性。
/ I l3 h) j7 F# T0 N. a 3.基于ActiveX Automation技术的VBA等开发工具
7 G& Z9 c8 `3 j. _+ ]7 h! k! R. d ActiveX Automation是一套微软标准,以前称为OLE Automation技术。该标准允许通过外显的对象由一个Windows应用程序控制另一个Windows应用程序,这也是面向对象编程技术的精髓所在。AutoCAD从R14开始增加了作为ActiveX Automation服务器应用程序的功能,使得许多面向对象编译语言和应用程序可以通过ActiveX与AutoCAD进行通信,并操纵AutoCAD的许多功能,如图4所示。' S( ^ m" e" C( E6 J
/ w+ x9 c& L. X, r 图4 ActiveX在开发语言与AutoCAD之间所起的作用9 r4 K2 k9 ^- O! [) F
ActiveX Automation服务器应用程序是通过自身对象的属性、方法和事件实现其功能。对象是服务器应用程序简单而抽象的代表。不管是用VB、VC、OFFICE VBA等从外部开发,还是用AutoCAD VBA从内部对AutoCAD进行二次开发,都是通过调用AutoCAD的对象体系结构来进行的。AutoCAD 2000 ActiveX Automation技术将AutoCAD 2000的各种功能封装在AutoCAD ActiveX对象中,供编程使用。AutoCAD 2000中提供的所有对象组成一个树形结构,如图5所示,最高层是Application对象,其他对象都是它的后代。为了得到一个特定的对象,必须从Application对象对其子孙进行遍历,直到找到该特定的对象。$ Y; K" {5 N1 E
( ^( I/ m% b3 |$ l+ t" R3 b 图5 AutoCAD对象模型
1 D& T4 Y1 Z4 j) L ActiveX Automation技术的完全面向对象化编程的特点,使其开发环境具备了强大的开发能力和简单易用的优良特点,开发工具的选择也具有很大的灵活性。所以,利用ActiveX Automation技术,是极具潜力的一种开发手段。
* n# c& m: k% q 四、结束语
6 J( i9 t, F7 e7 h; D7 E 以上对AutoCAD的三代开发工具分别作了简要介绍。目前,第一代的AutoLISP已能被第三代的VLISP完全替代,第二代的ADS在AutoCAD 2000中已不再支持,所以,第三代开发工具将成为今后AutoCAD二次开发的必然选择。而在第三代工具中具体选择哪一种,笔者认为,主要还应根据用户应用程序的需要和开发人员的编程经验。
# I; _) w2 s3 ^1 h3 O# H9 j
: B% W5 S9 N% Z: C* Q: Y% u
% ~* f% g' C4 G以上文献来源于网络,我转至此处仅为了给二次开发的朋友一个头绪: M% B4 @1 E1 Q( d2 o4 r
/ w' L) K6 ^5 B: t4 c5 J[ 本帖最后由 baller 于 2008-10-9 17:03 编辑 ] |