孟 魁
【摘 要】本文主要介绍当今流行辅助设计软件AutoCAD二次开发的主要工具及方法,简单的介绍了难为一般用户所掌握的ObjectARX,针对其中的能够在短时间内为非计算专业所掌握的ActiveX作了主要介绍,并结合实际工作对有关功能作出了细致地分析。
【关键词】AutoCAD;二次开发;应用
Discuss application of AUTOCAD 2ne development in engineering
Meng Kui
(Shaanxi province highway investigateion and design institute Xi'an Shaanxi 710068)
【Abstract】The article mainly introduced nowadays main tool and method of spreading the software two developments in AutoCAD of the assistance design and in brief introduced difficult is Object ARX that the general customer controls, aim at among them of can control for doing not compute profession at the in a short time of ActiveX made main introduction, and combine actual work to relevant the function made delicately analytical.
【Key words】AutoCAD; 2nd development; Application
AutoCAD是美国AUTODESK公司生产的功能强大的绘图软件,和它齐名的还有著名的MICROSTATION等软件。但是在设计行业,AUTOCAD能够一枝独秀,其原因在于AutoCAD有着完善的二次开发环境,有高级语言为其提供专门的定制、开发功能,使其能够适应各种需要,在不太复杂的开发工作下,迅速的成为各行各业的专门软件。作为一个工程技术人员,不能只把AutoCAD当成一个绘图板来使用,那是资源上的浪费,AutoCAD的目标是使绘图、出图自动化,用户的手工工作只是一些简单的编辑美化工作!要达到这一点就必须要利用AutoCAD的二次开发功能。
从AutoCAD的发展来看,它的二次开发主要有如下发展阶段:AUTOLISP、ADS、ARX和VBA。现就它们的发展过程难易程度和优劣一一说明。
1. Autolisp
Autolisp是AUTOCAD最古老的一个开发语言,到现在仍然保留。早期的Autolisp是一个内嵌式语言,用其它如记事本等工具书写,在AUTOCAD内部调入使用,没有自己的单独开发环境,学习起来不很容易。但是它能够利用AutoCAD的内部函数,定制工具栏和启动组,缺点是是一门解释性的语言,要和AutoCAD系统之间利用IPC机制进行通讯,运行速度较慢。到现在的AUTOCAD版本仍然保留了这门语言,并且有所发展。在AutoCAD2000版以后,改名叫作Visual Lisp,有了自己的开发平台,可以脱离开发环境独立运行,可以编译,运行速度有了很大的提高。笔者早期用它开发过符号库,但是因为类似商业软件的出现,现在已经不再使用了!下面是生成坎类符号的源程序,笔者已经调试通过。
(defun c:kz()
(setq start(getpoint “\n选择起点:”))
(setq end(getpoint “\n选择终点:”))
(setq di(distance start end))
(command “line” start end “”)
(setq a(angle start end))
(setq b(/ pi 2))
(setq c(+ a b))
(setq total 0)
(setq km 0)
(while (< km di)
(command “line”
(polar start 0 0)
(polar start c 1.5)
()
)
(command “line”
(setq start(polar start a 2))
(polar start 0 0)
()
)
(setq total(+ total 1))
(setq km(* total 2))
)
(command “redraw”)
(princ)
)
2. Ads
Ads是继Autolisp以后出现的一种开发方式,在AutoCAD R11以后出现。它是以C语言编写程序的设计环境,除了可以使用标准的C函数以外,还可以使用对AUTOCAD进行操作ADS函数,可以编译成EXE文件以后被Autolisp作为一组外部函数装入和调用。对于AutoCAD来说,Ads程序等价于Autolisp程序。优点是保密性强,有自己的开发环境,好调试,易加载。缺点是根子里还是一门解释性语言,需要和AutoCAD进行通讯,运行速度较慢!在AutoCAD2000版以后,Ads已被ARX所淘汰。故在此不做太多介绍!
3. ARX
ARX目前最先进的的一种开发方式,它的实质一个动态连接库,和AutoCAD在同一地址空间运行,所以运行速度很快。ARX能够直接利用AutoCAD的内核代码,直接访问AutoCAD的数据库、图形系统和几何造型中心 ,在运行期间实时扩展AutoCAD具有的类及其功能,建立和AutoCAD本身固有的命令操作方式相同的新命令,它是一种全新的运行模式。ARX需要Visual C++作为开发环境,随着AutoCAD版本的改进Visual C++的编译版本也要随之提高。因为函数名和头文件的不同,一种版本AUTOCAD的SDK 开发包开发的程序只能在该版本下运行。
ARX应用程序的基本结构包括头文件,函数说明部分,调用ARX应用程序,初始化函数,卸载函数定义,入口点函数定义和用户程序主体函数定义等几个部分,当然这只是简单的程序,如果要用到用户窗体等将要用到MFC编程技术,使得程序界面更加漂亮,能够支持数据库的访问,程序组成将更加复杂。
要做ARX应用程序,必须掌握Visual C++,这是一门非常难学的语言,指针是整个语言的核心,这就使得ARX在非专业领域的发展非常难。另外ARX应用程序开发周期长,调试困难,使得一些中小用户尽量避免用它来做应用程序。但是它非常专业,能够利用Visual C++的MFC类库,做出的程序界面漂亮,所以大部分基于AutoCAD的专业软件都是利用ARX来开发的!在我们公路上著名的纬地程序和专业地形图成图软件cass就是利用这种开发模式作出来的,它的拖动技术就是典型的对AutoCAD功能和命令的扩展!
4. VBA开发
VBA技术是在AutoCAD R14以后作为标准安装组件的。利用AutoCAD对VBA的支持,用户可以开发VBA应用程序,使用ActiveX对象。但是VBA毕竟不是VB,它只是使用VB的语法和算法,对于实体的定义及扩展又有自己的底层实体库。VB语言简单,易于推广,而VBA功能强大,代码利用率高,运行迅速,作为专业技术人员来说,VBA的确是适合我们的一个很好利用AutoCAD的开发工具!它的缺点就是不能编译(在VB环境下开发的可以编译,但运行速度明显降低),每次运行都需要加载,一个开发环境只能运行于一种版本的autocad之下,不能兼容其他版本。
使用VBA开发环境时每个实体均需要定义,即实例化,它可以直接访问acad数据库,得到实体的所有属性,可以实时修改实例对象的颜色、线宽、起点、终点、字体、字型等表现形式,可以使用数据库编程。在VBA环境中开发的程序所生成的实体都是有名字的实体,这就便于在程序中调用和修改实体本身的属性,下面是笔者在公路征地宗地图开发中的一段程序,定义了INSERTPT无模式变量来得到屏幕选择坐标和zhcirc这个实例化圆变量、tl实例化直线变量:
Dim insertpt As Variant'图形插入点
Dim zhcirc As AcadCircle
Dim tl As AcadLine
Dim st(0 To 2) As Double
Dim et(0 To 2) As Double
Dim i As Single
Open “控制文件.txt” For Input As #1
Input #1, bt$
Input #1, jsdw$
Input #1, dq$
Input #1, dat$
Close #1
ThisDrawing.WindowState = acMaxinsertpt= ThisDrawing.Utility.GetPoint(, vbCrLf & “请输入插入点:”)
qqy$=ThisDrawing.Utility.GetString(1, vbCrLf & “请输入起始页码:”)
Set mjs = ThisDrawing.ModelSpace.AddText(SS$, st, 4)
mjs.Alignment = acAlignmentCenter
mjs.TextAlignmentPoint = st
mjs.StyleName = “mkroman”
mjs.ScaleFactor = 0.75
mjs.Update
程序运行后首先提问基础数据文件夹位置,在问文本段数据文件夹位置,最后程序自动读出控制文件,确定土地权属,然后求出征地路段面积(如图1所示)。接着程序要求用户在屏幕上指定生成图形的位置,用鼠标指定输出位置即可,程序可根据数据多少确定是否自动分表,最后在指定位置绘制表格和图形(如图2所示)。根据在实际工作中的应用,本程序使用方便,计算迅速,界面美观,生成图形易于编辑和保存,比原来用其他语言编写的程序具有无可比拟的优越性。
5. 结束语
AUTOCAD是一个开放的软件,其二次开发博大精深,而且还在不停的发展。随着新一代开发语言VS.NET的普及应用,肯定还会有更方便的开发工具。作为一个工程技术人员,能够熟练使用AUTOCAD是最基本的,能够让AUTOCAD更加专业化,能够最大程度上批处理和定制一些常用功能才是最重要的。笔者水平所限,文中不妥之处敬请专家批评指正。
参考文献
[1] 张帆主编,郑立楷、卢择临、王成煌 编著,清华大学出版社《AutoCAD VBA 二次开发教程》
[2] 刘良华 朱东海著,清华大学出版社《AutoCAD 2000 ARX开发技术》
[3] 中国铁道出版社,《AutoCAD VBA函数库查询辞典》
[文章编号]1006-7619(2008)09-17-533