您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > AutoCAD .NET开发API教程
第二篇AutoCADNET开发教程第1章:AutoCADNETAPI概览ØAutoCAD.NETAPI概述。Ø.NET框架简介Ø程序集和命名空间。ØAutoCAD.NET开发环境和工程创建。1.1AutoCAD.NETAPI概述我们在前一篇详细讲解了AutoCAD的开发工具-ObjectARX,毫无疑问以VC++为基础的ObjectARX的开发功能是非常强大的,但是掌握VC++及ObjectARX相对来说困难也是最大的,而AutoCAD其他已有的开发工具如VBA、VisualLisp等虽然方便易学,开发周期也比较短,但是,对执行速度和性能要求都很高的解决方案或者复杂的程序,VBA和VisualLisp就难以胜任了。从AutoCAD2006开始,AutoCAD增加了.NETAPI,它提供了一系列托管的学习要点了解AutoCAD.NETAPI。了解.NET框架。了解程序集和命名空间的概念。掌握AutoCAD.NET工程的创建。本章简介8138第1篇××××××外包类(ManagedWrapperClass),使开发人员可在.NET框架下,使用任何支持.NET的语言,如VB.NET、C#和ManagedC++等对AutoCAD进行二次开发。随着版本的更新,在最新的AutoCAD2008中,NETAPI已经拥有与C++相匹配的强大功能,由于开发接口是完全面向对象的,又具有方便易用的特点,所以NETAPI是目前较理想的AutoCAD开发工具,也是今后的发展方向。1.2.NET简介.NET是Microsoft面向XMLWeb服务的平台,它允许应用程序通过Internet进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。.NET框架是NET的最为重要的组件,它是一个可以构造、发布以及运行Web服务的开发环境。从概念上讲,.NET框架平台代表了一种崭新的软件开发模式,它与Win32API或COM一样,是把系统服务以接口形式提供给开发人员的软件开发平台。与以往不同的是,.NET框架能够更好地完成代码重用、资源配置、多语言集成开发和安全管理等任务,在安全性、易用性以及开发效率等方面远远超过了以前的开发模式。.NET框架平台包含两个方面的核心内容:一个是运行时引擎(RuntimeEngine),另一个是基类库(BaseClassLibrary)。对于运行时引擎,可能所有的开发人员都不会感到陌生,因为,从使用标准C语言开发工具开始,我们就至少接触过C运行时库(CRuntimeLibrary)。后来,我们使用的工具越来越强大,接触过的运行时库的种类也越来越多。像微软基本类库(MFC)、活动模板库(ATL)、VB运行时库(VBRuntimelibrary)和Java虚拟机等。139第1章AutoCAD开发概览图1-1.NET框架使用.NET开发程序具有许多好处,概括起来有以下几点:n统一的面向对象开发平台n内存自动管理–垃圾收集.NET通过垃圾收集机制来实现资源的自动回收功能,简单地说,就是将那些程序中释放内存的代码由系统在后台自动地完成。例如在C++中,当我们申请了一份内存,使用完成后必须显式地将其释放,否则会导致内存泄露,如下代码所示:char*pName=(char*)malloc(128);strcpy(pName,Hello);//...free(pName);而在.NET下,我们可以不用关心内存的使用,例如:C++String*pName=newString(Hello)VBDimNameAsString=HelloC#StringName=“Hello”;垃圾收集机制会负责内存的释放,不需要我们显示地释放。140第1篇××××××n一致的异常处理在Windows平台上进行编程,不同的开发平台或语言提示错误信息的风格不一,错误的处理方式也不一样,如在VB用下面语句来完成错误处理,很难理解而且有问题。OnErrorGoToUnexpectedErrorDimxAsDouble=10/0‘…错误将抛出异常!UnexpectedError:MsgBoxStr$(Err.Number)而在.NET下,采用统一的异常处理,所有的错误处理都通过异常来报告,异常可以让开发人员从代码中去掉那些复杂的、可能导致错误的判断的语句,使代码的编写、阅读以及维护工作大大简化,如TryDimxAsDouble=10/0‘…错误将抛出异常Catch‘…发生了什么?除以0!Finally‘…清理EndTryn支持多种开发语言.NET框架可以让不同的语言集成在一起。例如,如果开发人员在VisualC++中编写了一个托管的类,那么其他开发人员便可以可以轻松地在VisualBasic中对这个类进行继承,以产生这个类的子类,在这个类的基础上,使用VisualBasic语言继续完善这个类,实际上,AutoCAD的托管部件是用托管C++写的,但是可以是被VB.NET访问。141第1章AutoCAD开发概览图1-2.NET开发语言所有语言编译成被在公共语言运行库(CLR)执行的的IL(中间语言),在性能上没有明显的差别。用.Net开发的程序都需要公共语言运行库(CLR)才可以执行,这种程序称之为托管程序,同样使用NET开发的AutoCAD程序必须运行在NET框架2.0环境下,缺省情况下,如果当前电脑没有NET2.0环境,在安装AutoCAD2007/2008时,会完成NET运行环境的设置。1.3程序集和命名空间程序集是.NET框架应用程序的主要构造块,它是作为一个单一的实现单元(包含一个或多个文件)来创建、标识和部署的功能集合。所有的托管类型和资源都可以被标记为仅在其实现单元内访问,或者标记为可由该单元以外的代码来访问。。程序集通过清单来进行自我说明,清单是每个程序集的不可或缺的组成部分。清单通常包含以下内容:l建立程序集标识(以文本名称的格式)、版本、类别和数字签名(如果要在应用程序之间共享该程序集)。l定义组成程序集实现的文件(通过名称和文件散列)。142第1篇××××××l指定组成程序集的类型和资源,包括哪些是从程序集中导出的。l逐条记录编译时对其他程序集的依存。图1-3程序集清单内容AutoCAD的托管程序集为两个文件:acdbmgd.dll和acmgd.dll,它们保存在AutoCAD的安装目录下,如C:\ProgramFiles\AutoCAD2008\,其中acdbmgd.dll包含ObjectDBX托管类,主要包含用于处理AutoCAD数据库和DWG文件的相关操作的命名空间和类,如实体操作等,而acmgd.dll包含AutoCAD托管类,用户处理AutoCAD程序级别的对象,如程序对象、文档对象等。在编写.NET程序时,会用到类和其他类型,为了使应用程序更有条理性,可以将类组合为名字空间,用到的类通常都包含在特定的命名空间中,系统缺省的重要命名空间包括System、System.IO、System.Drawing等,如果要调用AutoCAD中的类,就需要使用AutoCAD的命名空间。如果要在程序中使用名字空间,可以首先导入它,以便在以后每次使用其成员时无需重复该名字空间的名字,C#中需要使用关键字using导入命名空间,在本篇中我们约定缺省情况下都导入以下命名空间:访问AutoCAD程序对象usingAutodesk.AutoCAD.ApplicationServices;访问theAutoCAD编辑器usingAutodesk.AutoCAD.EditorInput;命令注册usingAutodesk.AutoCAD.Runtime;143第1章AutoCAD开发概览本篇以C#为例来讲解AutoCAD.NETAPI,如果用户使用VB.NET开发,可对代码做相应的转化,可以借助一些C#转换为VB.NET的工具。1.4创建工程使用.NETAPI对AutoCAD进行开发需要MicrosoftVisualStudio2005集成开发环境作为开发平台,也可以可以使用MicrosoftVisualC#2005ExpressEdition集成开发环境(IDE)进行C#语言进行编程,测试版的VisualC#2005ExpressEdition已经通过Web下载()免费提供。下面以AutoCAD2008运行平台为例介绍了创建一个工程的具体步骤:注意:该过程以创建C#工程为例加以说明,创建VB.NET工程稍微有些不同。1)、启动MicrosoftVisualStudio.NET2005,如图1-2所示。图1-4VisualStudio2005软件界面2)、在【文件】菜单中,选择用C#语言创建工程,【新建】一个类库(ClassLibrary)项目,指定工程名称和存放位置如图1-3所示。144第1篇××××××图1-5创建项目3)、工程建立完成后,需要添加程序集(托管模块)的引用,用鼠标右键单击”引用”然后选择”添加引用”。在弹出的”添加引用”对话框中选择”浏览”。在”选择组件”对话框中,选择AutoCAD2008的安装目录(这里假定为C:\ProgramFiles\AutoCAD2008\),在这个目录下找到acdbmgd.dll和acmgd.dll,将程序集添加到当前工程。4)、添加完程序集(托管模块)的引用后,我们就可以导入它们,在Class1类的声明语句之前,导入所需的AutoCAD的ApplicationServices,EditorInput和Runtime命名空间:usingAutodesk.AutoCAD.Runtime;usingAutodesk.AutoCAD.ApplicationServices;usingAutodesk.AutoCAD.EditorInput;5)、要使定制的程序能够在AutoCAD中被调用,需要在工程中添加定制的命令,可以用CommandMethod或CommandMethodAttribute完成命令的注册,这个属性由Runtime命名空间提供,在类Class1中添加下列属性和函数。例如:[CommandMethod(HelloNet)]145第1章AutoCAD开发概览publicvoidHelloNet(){}CommandMethod或者CommandMethodAttribute可以接受多个参数,例如命令组名,全局和本地命令名,以及命令标记等。5)在命令的执行部分,我们要在命令行中输出信息,可以通过Editor对象实现,Editor类拥有访问AutoCAD命令行的相关方法,它还包括选择对象和其它一些重要的功能,保存在Autodesk.AutoCAD.EditorInput命名空间中。AutoCAD当前活动文档的Editor对象可以使用Application类来访问,如下代码所示:Editored=Application.DocumentManager.MdiActiveDocument.Editor;当Editor对象被创建后,可以它的WriteMessage方法在命令行中输出信息,完整的代码如下:[CommandMethod(HelloNet)]publicvoidHelloNet(){Editored=Application.DocumentManager.MdiActiveDocument.Editor;ed.WriteMessage(使用NET开发AutoCAD程序);}1.5程序的加载和调试要运行开发的应用程序,首先要在AutoCAD中加载程序,通过在命令行中输入“NETLOAD”命令将编译后的dll文件加载进来,这样就可以通过在命令行中输入定制的命令名如HelloNet来调用定制的命令,目前的.NET还不支持卸载。当我们在编写一个AutoCAD的工程时,经常要面临程序调试的问题。当我们需要调用其中的命令时,需要首先通过”NETLOAD”命令加载定制的程序,然后调用程序中定制的命令,下面将详细介绍调试的设置和操作步骤。1.
本文标题:AutoCAD .NET开发API教程
链接地址:https://www.777doc.com/doc-4523877 .html