12月份太钢不锈钢计划产量将减少,158机床
AutoCAD开发工具综述rr-960
两部门公布抗震救灾及灾后重建税收优惠政策m

AutoCAD开发工具综述rr-960

日期:2020-07-01 14:51点击数:

  AutoCAD开发工具综述随着CAD技术的发展,CAD领域的支挣软件也越来越多,国内外许多公司相继推出了其主导产品,Autodesk公司是目前世界上比较成功的 CAD领域的开发商,其开发的AutoCAD一直是CAD市场中的主流产品,随着AutoCAD的日益普及,在其上进行二次开发的工具也相继由该公司推出。许多企业购进AutoCAD软件,并非只是用作“代替图板”。只有真正地在其上实现了二次开发,才能充分发挥AutoCAD作用。到目前为止, Autodesk公司提供了4种主要的二次开发工具:AutoLisp(VisuaLisp)、ADS、ObjectARX及VBA(VB)。本文就此向大家分别做一介绍。1 AutoLisp语言Lisp语言是一种表处理语言,是广泛应用于人工智能的语言。 AutoLisp语言完全嵌套在AutoCAD内部,同AutoCAD有机地结合成一体它既具备一般高级语言的基本结构和功能,又具备一般高级语言所没有的图形处理能力AutoLisp可直接调用几乎全部AutoCAD的命令,从而进行AutoCAD的二次开发。利用AutoLisp开发AutoCAD的一个典型例子就是实现参数化绘图的程序设计。AutoLisp具有如下特点:AutoLisp语言是一种以解释方式运行于AutoCAD内部的解释性程序设计语言。AutoLisp没有语句概念或其他语法结构,程序非常简明。它的所有成分都是以函数形式给出的。执行AutoLisp程序就是执行一些函数,然后再调用其他函数。AutoLisp把数据和程序统一表达为表结构,故可把程序当作数据来处理,也可把数据当作程序来执行。AutoLisp语言中的程序运行过程就是对函数的求值过程,在对函数求值的过程中实现函数的功能。AutoLisp语言的主要控制结构采用递归方式。递归方式的使用,使程序简单易懂。VisuaLisp是AutoLisp的发展,它利用可视化的编程环境为学习减小难度。它的特点可以归纳出十几条,但基本上是可视化与Autolisp的结合,不再列出。这里给出用AutoLisp绘制键槽的一个小程序,可以看出其简明性:(defun C:LWX()(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"))执行这段程序,输入a,b,r的值,即可绘出键槽。2 ADS(AutoCAD Development System)开发系统ADS 是从AutoCAD R11开始引入的基于C语言开发应用程序的系统。ADS不是C语言的一个子集,也不是基于C而编制的专用语言(如Microstation的MDL),但它包括了C的全部功能。它对开发人员C语言要求较高,C是编译型语言,功能强大,因此ADS很轻易地克服了AutoLisp所固有的许多缺点而具有速度快,安全性高的特点。ADS不包含于AutoCAD内部,而是作为一组AutoLisp外部函数由AutoLisp解释器装入、解释并请求AutoCAD 运行。其特点如下:ADS程序是一个可执行文件,需要通过AutoLisp和AutoCAD进行通讯。ADS程序更“绝缘”,ADS程序是一系列独立的过程,程序崩溃并不一定导致AutoCAD系统崩溃(尽管并不总是如此)。ADS程序是不可重复加载的。ADS程序的运行过程类似于宏(macro)。ADS中的函数(如ads_command)以及与AutoLisp的通讯使ADS程序的工作过程类似于自动作用的宏。ADS仍然只能使用传统的C语言进行编程,只能采用传统的结构化编程方式。早期国内常见的应用软件多是用ADS进行开发的,但ADS程序必须经过AutoLisp解释加载,因此ADS的各方面性能受到限制。同时,随着网络技术的迅速发展,面向过程的ADS己有些力不从心了,所以,在AutoCADR13中提供了面向对象的开发工具ARX。有关ADS的实例代码,因与ARX类似(比如ADS中的对象名称ads_name就和ARX中的AcDbObjectld是等价的)这里不再给出。3 ObjectARX( AutoCAD Runtime Extension)开发系统近几年广为应用的ObjectARX是从AutoCADR13开始推出的一个全新的面向对象的开发环境,是AutoCAD提供的第一个面向对象的开发工具。它提供了以C++为基础的面向对象的开发环境及应用程序接口,能真正快速访问AutoCAD图形、数据库。ObjectARX支持面向对象编程方法,同时向下兼容ADS。它的特点是很明显的: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 VariantDim prompt1,prompt2 As StringDim startpoint (1 To 3) As DoubleDim endpoint (1 To 3) As DoubleDim lineobj As Acadlineprompt1 = NL & “起点:”prompt2 = NL & “终点:”stpt = ThisDrawing.Utility.GetPoint(,prompt1)enpt = ThisDrawing.Utility.GetPoint(stpt, prompt2)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 ObjectPublic ModSpace As ObjectPublic acadApp As ObjectOn Error Resume Next 出错处理Set acadlApp = Get Object(,"AutoCAD.Application")If Err ThenErr.ClearSet =cadlApp=CreateObject("AutoCAD.Application")If Err ThenMsgBox Err.DescriptionExit subEnd IfEnd IfAcadApp.Visible=TrueSet acadDoc = acadApp.ActiveDocumentSet ModSpace = acadDoc.ModelSpace接下来绘制直线的代码与VBA基本相同,只要把ThisDrawing换成acadDoc即可。总之,通过以上分析可以看出AutoLisp仍然是AutoCAD的基本开发手段,它适十一般开发者用于较为简单交互性程序的开发。ADS将逐步被更为完善的ARX所取代。VBA则成为AutoCAD用户二次开发的另一支生力军。AutoCAD提供的开发手段让各类开发者都能有适合于自己的开发工具。