龙源期刊网 http://www.qikan.com.cn
基于VBA的AutoCAD二次开发
作者:李琳
来源:《硅谷》2011年第18期
摘要: AutoCAD作为计算机辅助绘图与设计平台,用于二维绘图、详细绘制、设计文档和基本三维设计,其应用广泛、通用性强,已成为国际上广为流行的绘图工具。但是某些特定的行业及应用中AutoCAD显得专业性不强,使用起来效率不高,这就需要在其基础上进行二次开发。介绍几种常见的AutoCAD二次开发技术,对基于VBA的AutoCAD二次开发技术的相关问题进行分析研究,为用户定制适合自己的AutoCAD系统,提供参考。 关键词: VBA;AutoCAD;二次开发
中图分类号:TP391.72 文献标识码:A 文章编号:1671-7597(2011)0920191-01
AutoCAD(Auto Computer Aided Design)是美国Autodesk公司首次于1982年生产的自动计算机辅助设计软件,用于二维绘图、详细绘制、设计文档和基本三维设计。AutoCAD由于其绘图命令丰富、编辑功能强大、三围造型功能良好及界面友好等特点,深受工程技术人员的喜爱,被广泛应用于建筑、机械、电子、服装、测量等多个领域,已成为CAD市场的主流产品。但是AutoCAD提供的只是一般的CAD功能,专业性不强,有时候系统需要加入其他学科的算法,以实现一些特殊的功能,这就需要对其进行二次开发。AutoCAD的开放式体系结构也允许第三方开发者为它编写应用程序,这使得AutoCAD的二次开发较易于实现。 1 几种常见AutoCAD二次开发技术的分析与比较 1.1 非结构化程序设计技术——Auto LISP
Auto LISP是AutoCAD LIST Processing Language的缩写,它一直是低版本AutoCD的首选编程语言。Auto desk公司在AutoCAD2.1版中引入了Auto LISP作为应用程序编程接口(API),以便于其功能的扩展和自定义。其优点是语言规则简单,易学易用,交互性强。缺点是功能较为单一,综合处理能力差,不适合高强度的数据处理;其次,程序运行速度较慢,效率不高;再次,源程序保密性差,安全性低。 1.2 结构化程序设计技术——ADS
ADS(AutoCAD Development System)是AutoCAD Rll开始支持的一种基于C语言的灵活的开发环境,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序[1]。其优点为综合处理能力强,程序运行速度快,程序源代码的可读性强,适合于高
龙源期刊网 http://www.qikan.com.cn
强度的数据处理。其缺点为C语言难度大,不易于学习和应用;其次,ADS程序的隐藏性错误易导致系统的崩溃;再次,程序需要编译才能运行,不易见到代码的效果。 1.3 面向对象编程技术——Visual LISP、Object ARX、VBA等
Visual LISP是在Auto LISP基础上的扩展产品,并加入了面向对象的特征,克服了Auto LISP的运行速度慢、保密性差的缺点,已经被完整的集成到AutoCAD 2000中,为开发者提供了崭新的、功能强大的开发环境。
Object ARX(Auto CAD Runtime extension)是专门为AutoCAD进行二次开发而推出的一个以C++语言为基础的开发环境和应用程序接口。它具有使得用该应用程序开发的AutoCAD软件具有模块化强,代码重用性强的特点[2]。 2 基于VBA的AutoCAD二次开发 2.1 VBA的主要功能
VBA即ViSual Basic for Application,从语言结构上讲,它是VB(ViSual Basic)的子集,他们具有相同的语言结构。VBA是一种完全面向对象体系结构的编程语言,其使用方便、功能强大的特点使得许多应用程序均嵌入该语言作为开发工具。Auto desk公司也在AutoCAD R14.01版本开始内置了VBA开发工具,同时提供了适用于VBA开发的强大的ActiveX自动化对象模型,通过VBA,可以操作AutoCAD,控制ActiveX和其他一些应用程序。VBA是一种嵌入AutoCAD内部的基于对象的集成编程环境,其依附于主应用程序AutoCAD,由于两者共享内存空间,这使得二次开发的系统能具有较好的执行速度。另外,由于语法结构简单,用户能快速高效的完成二次开发,所以,VBA成为了AutoCAD二次开发的重要技术,并得到了广泛应用。
VBA的主要功能有:① 窗体创建功能强大,便于应用程序对话框及其他界面的建立;② 可以创建自己的工作条;③ 可以创建具有强大功能的模块级宏指令;④ 可建立类模块,有利于大型工程的开发;⑤ 具备完善的数据访问和管理能力,通过AOD(Active Data Objects)可以对Access数据库或其他外部数据库实现访问和管理。 2.2 VBA的开发原理
在VBA中,AutoCAD通过AetiveX提供了一个沟通外部世界的机制,使得AutoCAD通过不同的编程语言和环境进行二次开发。可见,VBA是通过ActiveX接口建立与AutoCAD对象之间的联系,而ActiveX是建立在COM对象模型之上的一个标准通信协议,它允许对象之间通过一定的接口进行通信。
要编写能够访问其他应用程序的代码,就需要使VBA能够使用其他应用程序中的对象,方法是在另一个应用程序的对象库中设置引用。创建对另一个应用程序的对象库的引用之后,
龙源期刊网 http://www.qikan.com.cn
就可以使用VBA对象浏览器来查看应用程序的对象列表。引用应用程序的对象库后,必须创建该应用程序的实例。也就是说,需要通过编程方式启动该应用程序,以便代码可以使用有效对象[3]。
AutoCAD对象是通过分层方式来组织的,应用程序对象为根对象。这种分层结构的视图被归结为对象模型。对象模型提供了用户访问下一层对象的途径。用户可直接通过用户定义变量引用对象。直接引用对象,应包括对象的层次。
例如:在VBA中要利用圆心和半径创建圆可以使用以下代码: Sub drawcircle() Dim pointl(2)As Double Dim radiusAs Double
Pointl(0)=230;pointl(1)=780;pointl(2)=670;radius =500
“调用addcircle方法绘制圆”
this Drawing.ModelSpace.addcircle pointl radius End Sub 3 结语
基于VBA的AutoCAD二次开发技术,可灵活方便的实现AutoCAD功能的拓展,使之更高效率的服务于工程技术人员。
参考文献:
[1]高永惠,AutoCAD二次开发技术分析和比较[J].怀化学院学报,2007,26(11):69-71. [2]熊义君、王国荣,AutoCAD二次开发的常用方法分析[J].中国科技博览,2010(17):13.
[3]吴利明、李金勇,VBA在AutoCAD中的二次开发[J].湖南学院学报,2010,31(2):77-79.