您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于.NET的AUCTOCAD二次开发
CAD开发背景•AutoCAD(AutoComputerAidedDesign)是美国Autodesk公司首次于1982年生产的自动计算机辅助设计软件,用于二维绘图、详细绘制、设计文档和基本三维设计。现已经成为国际上广为流行的绘图工具。AutoCAD具有良好的用户界面,通过交互菜单或命令行方式便可以进行各种操作。它的多文档设计环境,让非计算机专业人员也能很快地学会使用。在不断实践的过程中更好地掌握它的各种应用和开发技巧,从而不断提高工作效率。•AutoCAD具有广泛的用途,它可以在许多领域发挥不可估量的作用,但是在复杂CAD问题或特殊用途的设计中,依据AutoCAD的原始功能往往难以解决问题,在此情况下,只是会适用软件的基本功能是不够的,根据客户的特殊用途进行软件的客户化定制和二次开发,往往能够大大提高企业的生产效率和技术水平。因此,CAD的开发是十分必要的。CAD开发方式•当前AutoCAD的二次开发工具主要有:VisualLisp、VBA、ObjectARX和.NETAPI等。其中,VisualLisp与VBA较为简单,特别是VBA,使用方便且开发速度较快,但其功能相比ObjectARX有所不足,尤其是对面向对象的功能支持不好。而ObjectARX基于VC平台,在C++的支持下,其功能非常强大,可以很好地运用各种面向对象技术,但其缺点是发开速度比较慢,同时对开发人员的能力要求较高。•ObjectARX使用C#语言时,不但融合了VBA开发速度快、语言相对简单的特点,还结合了C++面向对象的许多优点,可以说C#是最适合做CAD开发的语言。基于.NET平台对AutoCAD进行二次开发,可充分利用.NET的各种优势,在保证功能强大的前提下大大提高开发速度。.NETAPI开发•当AutoCAD被首次用.NET编生成的时候(开始于AutoCAD2004,.NET开发AutoCAD的大门就被打开了。•.NETAPI提供了一系列托管的外包类(ManagedWrapperClass),使开发人员可在.NET框架下,使用任何支持.NET的语言,如VB.NET、C#和ManagedC++等对AutoCAD进行二次开发。其优点是完全面向对象,在拥有与C++相匹配的强大功能的同时,具有方便易用的特点,是较理想的AutoCAD二次开发工具。•.NETAPI与传统ObjectARX的区别主要源于在.NET环境下开发应用程序与在VC环境下开发应用程序的区别。首先,在VC环境下,程序员需要自己管理内存的申请和释放,而.NET采用了垃圾回收机制,由.NET框架自行判断内存回收的时机并实行回收,从而解决了令C++程序员头痛的内存泄漏问题。也正是由于这个特点,在.NET环境下不能像在C++环境下那样利用析构函数释放其他的资源,需要程序员在程序中显式地释放。在.NETAPI中,主要通过Dispose函数进行资源的释放。•其次,ObjectARX中的各种反应器(Reactor)在.NETAPI中由外包类映射为各种事件(Event),可通过定义这些事件的响应函数来响应AutoCAD的各种操作。同时对于错误信息的处理也从函数返回值改变为通常异常来处理,使其更好地兼容.NET。由于VB.NET、C#等语言都是完全面向对象的,没有全局函数的概念,所以.NETAPI将ObjectARX下的全局函数封装为.NETAPI下的某些对象或对象的属性ObjectARX下与用户交互的系列全局函数被封装为CommandLinePrompt类。AUTOCAD.NET开发过程•让我们以在AUTOCAD最下端的命令行窗口显示一行欢迎文本来开始.NET的开发旅程。我们将使用VisualStudio2010来创建一个类库项目,通过这个项目可以生成一个被AUTOCAD加载的dll文件。这个dll文件会向AUTOCAD加入一个名为Hello的新命令。当用户执行这个命令后,在AUTOCAD命令行上将显示“欢迎进入.NET开发AUTOCAD的世界!”的字样。•一.打开VS2010•新建项目-类库•二.引用autocad2008命名空间•1.添加引用com•a.AutoCAD2008TypeLibrary•b.AutoCAD/ObjectDBXCommon17.0TypeLibrary2.添加其它引用•如下:•具体地址为(因autocad2008安装目录不同有差异):•C:\ProgramFiles\AutoCAD2008\AcCui.dll•C:\ProgramFiles\AutoCAD2008\acdbmgd.dll•C:\ProgramFiles\AutoCAD2008\acmgd.dll•这三个文件包含的空间内容如下:•Autodesk.AutoCAD.Customization;//accui.dll•//*******************************************//Visualstudio对象浏览器•//acdbmgd.dll包含以下命名空间//•//*******************************************//•Autodesk.AutoCAD.LayerManager;Autodesk.AutoCAD.GraphicsSystem;•Autodesk.AutoCAD.GraphicsInterface;•Autodesk.AutoCAD.Runtime;•Autodesk.AutoCAD.Geometry;Autodesk.AutoCAD.DatabaseServices.Filters;•Autodesk.AutoCAD.DatabaseServices;Autodesk.AutoCAD.ComponentModel;•Autodesk.AutoCAD.Colors;•//******************************************//•//acmgd.dll包含以下命名空间//•//------------------------------------------*//•Autodesk.AutoCAD.Windows.ToolPalette;•Autodesk.AutoCAD.Windows;•Autodesk.AutoCAD.Runtime;//acdbmgd.dll也含此空间*//•Autodesk.AutoCAD.Publishing;•Autodesk.AutoCAD.PlottingServices;•Autodesk.AutoCAD.GraphicsSystem;//acdbmgd.dll也含此空间*//•Autodesk.AutoCAD.EditorInput;•Autodesk.AutoCAD.ApplicationServices;•3.在类中加入AutoCAD要调用的自定义命令•我们开发的程序以命令的形式让AutoCAD来引用就像用autocad的zoom、netload一样。•我们的类就要描述这些命令,语法如下例(定义命令你必须使用“CommandMethod”属性,这个属性由Runtime命名空间提供,有多种形式可查资料参考):•[CommandMethod(“HELLO”)]•publicvoidHELLO()•{•//****在这里写我们的插件功能***//•Editored=Application.DocumentManager.MdiActiveDocument.Editor;•ed.WriteMessage(欢迎进入.NET开发AUTOCAD的世界!);•//这里我们写的功能就要用到各命名空间里的类、接口、方法,这是学习的重点//•}•这样我们的第一个net程序就写好了。完整代码如下:•usingSystem;•usingSystem.Collections.Generic;•usingSystem.Linq;•usingSystem.Text;•usingAutodesk.AutoCAD.ApplicationServices;•usingAutodesk.AutoCAD.EditorInput;•usingAutodesk.AutoCAD.Runtime;namespaceClassLib1•{•publicclassleiku•{•[CommandMethod(HELLO)]•publicvoidHELLO()•{•Editored=Application.DocumentManager.MdiActiveDocument.Editor;•ed.WriteMessage(欢迎进入.NET开发AUTOCAD的世界!);•}•}•}•4.运行•打开autocad2008,在命令窗口输入netload,选择我们编译的dll。•在命令窗口输入hello,显示的结果自已看吧,我们已经迈入了.net下autocad的二次开发。
本文标题:基于.NET的AUCTOCAD二次开发
链接地址:https://www.777doc.com/doc-2568236 .html