AutoCAD开发工具综述
•
技术综合
1 AutoLisp语言
- AutoLisp语言是一种以解释方式运行于AutoCAD内部的解释性程序设计语言。
- AutoLisp没有语句概念或其他语法结构,程序非常简明。它的所有成分都是以函数形式给出的。执行AutoLisp程序就是执行一些函数,然后再调用其他函数。
- AutoLisp把数据和程序统一表达为表结构,故可把程序当作数据来处理,也可把数据当作程序来执行。
- AutoLisp语言中的程序运行过程就是对函数的求值过程,在对函数求值的过程中实现函数的功能。
- AutoLisp语言的主要控制结构采用递归方式。递归方式的使用,使程序简单易懂。
(setq a(getrcal “a=”))
(setq b(getreal “b=))
(setq pO(getpoint “Enter start point:”))
(setq r(getreal “r=”))
(setq x(car p0) y(cadr p0))
(setq xe(- x (/ a 2.0)))
(setq ye(+ y (sqrt(- (* r r) (*a a 0.25)))))
(sctq ce(list xe ye))
(setq p1(list(- x a) y))
(setq p2(list(- x a)(- y b)))
(setq p3(list x (- y b)))
(command “pline” p0 “a” “ce” ce p1 “1” p2 p3 “c”)
)
2 ADS(AutoCAD Development System)开发系统
- ADS程序是一个可执行文件,需要通过AutoLisp和AutoCAD进行通讯。
- ADS程序更“绝缘”,ADS程序是一系列独立的过程,程序崩溃并不一定导致AutoCAD系统崩溃(尽管并不总是如此)。
- ADS程序是不可重复加载的。
- ADS程序的运行过程类似于宏(macro)。ADS中的函数(如ads_command)以及与AutoLisp的通讯使ADS程序的工作过程类似于自动作用的宏。
- ADS仍然只能使用传统的C语言进行编程,只能采用传统的结构化编程方式。
3 ObjectARX( AutoCAD Runtime Extension)开发系统
- ARX程序在很多方面与ADS程序和AutoLisp程序都不相同。最重要的一点是,ARX程序实质上是一个动态链接库(DLL),它和AutoCAD共享地址空间并且直接和AutoCAD进行通讯。在ARX中,每个命令都有独立的入口。ARX程序还可以创建新的类(class),这些类可以为其他程序所共享,从而充分利用面向对象的编程的优点.ARX程序创建的实体和AutoCAD的内在实体几乎是完全等同的。
- 对于需要经常和AutoCAD通讯的应用程序来说,ARX程序比ADS程序运行速度更快,这里的运行速度主要指是访问AutoCAD数据库的速度。但ARX更“脆弱”,’ARX程序和AutoCAD共享进程空间,ARX程序崩溃通常会导致AutoCAD系统的崩溃.
- 相比之下,ARX程序是比宏更基本的程序。主程序(AutoCAD)可调用每个由ARX程序注册的命令。
- ARX程序具有ADS程序和AutoLisp程序所不具备的访问和控制AutoCAD的能力。ARX程序可以监控和处理AutoCAD各种事件,可以定义AutoCAD命令,包括可以透明执行的命令。这些命令可以像AutoCAD自身的命令一样被AutoLisp和ADS所调用.
- ARX提供了面向对象的编程技术,面向对象的编程技术己经成为软件开发的主流技术。ARX可充分支持C++,充分支持面向对象编程技术.
- 对于ARX编程,Autodesk公司建议使用VisualC++4.2及以上版本的开发环境,这一点对于语言的学习要求较高。这里给出直线绘制函数的部分代码:
- void myLine(AcGcPoint3d.AcGePoint3d Pt2)
{AcDbLine * pline=new AcDbLine(Pt1,Pt2):
AcDbBlockTable * pBlockTable:
AcdbCurDwg()->getBlockTable(pBlockTable.AcDb::kForRead);
AcDbBlockTableRecord * pBlockTableRecord;
pBlockTable->getAt(ACDB MODEL_SPACE pBlockTableRecord,AcDb::kForWrite);
pBlockTable->close();
AcDbObjectld lineld;
pBlockTableRecord->appendAcDbEntity(lineld,pline):
pBlockTableRecord->closc();
pLine->close();}4 VBA (Visual Basic for Application)和VB
- 作为从AutoCADR14之后提供的二次开发工具VBA(VB),使渴望CAD编程的人有一个更好的选择,用户不必学习ADS,ARX和AutoLisp就可以用VBA(VB)来开发AutoCAD,Autodesk公司从R14开始内置了VBA开发工具,同时提供了适于VBA(VB)开发的ActiveXAutomation对象模型。VBA(VB)的主要特点如下:
- VBA最早是内嵌在Ofice97中的一种编程语言,它易学易用,功能强大。所以Autodesk公司从Rl4之后把它也嵌入了AutoCAD中。
- VBA(VB)可以利用ActiveX Automation提供的接口访问和控制AutoCAD所有图形对象和非图形对象,并且可以访问这些对象的方法和属性。
- VBA(VB)数据类型丰富、界面友好。
- VBA是内嵌在AuLoCAD中的一种编程语言,对平台有依赖性,但VB对此有改善。
- 正如ADS需要C语言做基础一样,VBA(VB)开发AutoCAD也必须以熟悉VB语言为前提。
- 这里同样给出一段直线的绘制程序。用VBA编制如下:
- Dim stpt, enpt As Variant
- Dim prom
pt1,prom
pt2 As String- Dim startpoint (1 To 3) As Double
- Dim endpoint (1 To 3) As Double
- Dim lineobj As Acadline
- prom
pt1 = NL & “起点:”- prom
pt2 = NL & “终点:”- stpt = ThisDrawing.Utility.GetPoint(,prom
pt1)- enpt = ThisDrawing.Utility.GetPoint(stpt, prom
pt2)- startpoint(1) = stpt(0)
- startpoint(2) = sptt(1)
- startpoint(3) = stpt(2)
- endpoint(1) = enpt(0)
- endpoint(2) = enpt(1)
- endpoint(3) = enpt(2)
- Set lineobj = ThisDrawing.ModelSpace.AddLine(startpomt,endpoint)
- 用VB对AutoCAD开发与VBA的主要区别是当前图形对象的引用方法不同。VB中对象的获得要使用Getobject()和CreatObject()函数,从而有效地启动和切换AutoCAD窗口,具体代码如下:
- Public acadDoc As Object
- Public ModSpace As Object
- Public acadApp As Object
- On Error Resume Next 出错处理
- Set acadlApp = Get Object(,”AutoCAD.Application”)
- If Err Then
- Err.Clear
- Set =cadlApp=CreateObject(“AutoCAD.Application”)
- If Err Then
- MsgBox Err.Des
cription- Exit sub
- End If
- End If
- AcadApp.Visible=True
- Set acadDoc = acadApp.Activedocu
ment- Set ModSpace = acadDoc.ModelSpace
接下来绘制直线的代码与VBA基本相同,只要把ThisDrawing换成acadDoc即可。- 总之,通过以上分析可以看出AutoLisp仍然是AutoCAD的基本开发手段,它适十一般开发者用于较为简单交互性程序的开发。ADS将逐步被更为完善的ARX所取代。VBA则成为AutoCAD用户二次开发的另一支生力军。AutoCAD提供的开发手段让各类开发者都能有适合于自己的开发工具。
- void myLine(AcGcPoint3d.AcGePoint3d Pt2)
作者:西部车床,如若转载,请注明出处:https://www.lathe.cc/2023/12/6967.html