用AutoCAD和.NET开始
要开始为AutoCAD编写.NET程序,需要为AutoCAD2007下载ObjectARX SDK。SDK里面的samples/dotNet文件夹中有很多有用的例子,说明了如何使用AutoCAD的托管API的各种各样的特性。
随便提一下,SDK例子里面的那些工程文件等,一般是按Visual Studio的版本来保存的,这个版本的Visual Studio被推荐使用来为相应版本的AutoCAD构建ObjectARX(C++)程序。因此在ObjectARX 2006 SDK里面的工程是用VS2002,在ObjectARX2007中,则是用VS2005的。这些特定的VS版本并非一定要用于各个版本的AutoCAD的托管API(这是.NET一个很好的特性,因为这让你不需要一个特定的编译器版本),但为了一致性和测试工作,我们维持版本间的对应以构建相应的AutoCAD的ObjectARX/C++程序。
用于开始的最简单的经典例子是叫做“Hello World”的例子,暂时不对这个例子做深入的分析;先专注于如何使用ObjectARX向导来创建一个VB.NET程序。
在ObjectARX SDk的utils/ObjARXWiz文件夹中,有ObjectARX向导的安装程序ArxWizards.msi。将会使用ObjectARX SDK为AutoCAD2007提供的这个向导。
在安装后,当然就可以创建新的ObjectARX/C++工程;这个向导一个新的特性是添加了对VB.NET和C#的支持,这在你用VS2005创建一个新的工程的时候可以看到:
在选择OK后,有一个页面来配置工程:
选择“Finish”,就能设置需要的工程设置,并产生程序的基本代码,其中定义了一个简单的命令“Asdkcmd1”。
在我们说明代码前,这个向导做了什么?它创建了一个类库工程,添加了一对DLL引用定义AutoCAD中的托管API,如果你在工程中选择“Add Reference”,可在“Recent”列表中看到他们:
这里面有两个AutoCAD的核心引用:acdbmgd.dll和acmgd.dll,前者暴露了AcDb内部接口并支持类,后者暴露由AutoCAD程序指定的类(这两点不是很明白)
下面来看看代码,非常直接--导入了一个命令空间(这会让我们在编程时省力些),然后定义了一个类来代表程序模块。这个类AdskClass定义了一个命令的回调函数,这会告诉AutoCADAsdkcmd1方法需要被注册成一个命令的方法,并在命令行中输入这个命令时就会运行这个函数。
Imports Autodesk.AutoCAD.Runtime
Public Class AdskClass
' Define command 'Asdkcmd1'
<CommandMethod("Asdkcmd1")> _
Public Sub Asdkcmd1()
' Type your code here
End Sub
End Class
就这么回事,看看它的工作,添加一个函数来调用命令函数,如MsgBox("Hello!),构建程序,并用AutoCAD的NETLOAD命令来载入产生的DLL。当在命令行中输入asdkcmd1时,你自定义的命令就会被调用。