您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Autodesk官方最新的NET教程(一)(CNET版)
第1章HelloWorld:访问ObjectARX.NET封装类在这一章中,我们将使用VisualStudio.NET来创建一个新的类库工程。通过这个工程,你可以创建一个能被AutoCAD装载的.NETdll文件。这个dll文件会向AutoCAD加入一个名为“HelloWorld”的新命令。当用户运行这个命令后,在AutoCAD命令行上将显示“HelloWorld”文本。启动VisualStudio.NET,选择”文件新建工程”(FileNewProject)。在新建工程对话框中选择工程类型为”VisualC#工程”,然后选择”类库”模板,在工程名字框中输入”Lab1”,然后选择工程存放的位置。点击确定按钮来创建工程。在工程的Class1.cs文件中,一个公有类“Class1”已经被系统自动创建了。接下来向这个类加入命令。要加入命令,你必须使用AutoCAD.NET托管封装类。这些托管封装类包含在两个托管模块中。要加入对这两个托管模块的引用,请用鼠标右键单击”引用”然后选择”添加引用”。在弹出的”添加引用”对话框中选择”浏览”。在”选择组件”对话框中,选择AutoCAD2006的安装目录(这里假定为C:\ProgramFiles\AutoCAD2006\),在这个目录下找到“acdbmgd.dll”然后选择并打开它。再一次选择”浏览”,在AutoCAD2006的安装目录下找到“acmgd.dll”并打开它。当这两个组件被加入后,请单击”添加引用”对话框中的”确定”按钮。正如它们的名字所表示的,acdbmgd.dll包含ObjectDBX托管类,而acmgd.dll包含AutoCAD托管类。使用对象浏览器(VisualStudio.NET的”查看其它窗口对象浏览器”菜单项)来浏览加入的两个托管模块所提供的类。请展开“AutoCAD.NETManagedWrapper”对象(在对象浏览器中显示为acmgd),在整个教程中我们将使用这个对象中的类。在本章中,我们将使用“Autodesk.AutoCAD.EditorInput.Editor”类的一个实例来在AutoCAD命令行中显示文本。请再展开“ObjectDBX.NETManagedWrapper”对象(在对象浏览器中显示为acdbmgd),这个对象中的类将被用来访问和编辑AutoCAD图形中的实体(这部分内容将在以后的章节中介绍)。引用了ObjectARX.NET封装类后,我们就可以导入它们。在Class1类的声明语句(位于Class1.cs文件的顶部的)之前,导入ApplicationServices,EditorInput和Runtime命名空间。usingAutodesk.AutoCAD.ApplicationServices;usingAutodesk.AutoCAD.EditorInput;usingAutodesk.AutoCAD.Runtime;接下来在类Class1中加入命令。要加入能在AutoCAD中调用的命令,你必须使用“CommandMethod”属性。这个属性由Runtime命名空间提供。在类Class1中加入下列属性和函数。[CommandMethod(HelloWorld)]publicvoidHelloWorld(){}当“HelloWorld”命令在AutoCAD中运行的时候,上面定义的HelloWorld函数就会被调用。在这个函数中,一个Editor类的实例将被创建。Editor类拥有访问AutoCAD命令行的相关方法,它还包括选择对象和其它一些重要的功能。AutoCAD当前活动文档的Editor对象可以使用Application类来访问。当Editor对象被创建后,你可以使用它的WriteMessage方法在命令行中显示“HelloWorld”文本。在HelloWorld函数中加入以下代码:Editored=Application.DocumentManager.MdiActiveDocument.Editor;ed.WriteMessage(HelloWorld);要在AutoCAD中调试这个程序,你可以让VisualStudio.NET启动一个AutoCAD进程。在解决方案管理器中右键单击“Lab1”,然后选择”属性”。在Lab1的属性页对话框中,选择”配置属性调试”。在”启动”项中,选择”调试模式”为”程序”,在”启动程序”的右边单击省略号按钮然后选择AutoCAD2006安装目录下的acad.exe。设置好以后,按F5来启动一个AutoCAD进程。这样就会编译你的程序然后自动启动AutoCAD,而当编译后有错误的时候就会停止。请修正你可能碰到的任何错误。“NETLOAD”命令被用来装载托管程序。在AutoCAD命令行中输入NETLOAD,会出现”选择.NET组件”的对话框。选择上面生成的“lab1.dll”然后打开它。在命令行中输入“HellowWorld”。如果一切顺利的话,命令行中将显示“HelloWorld”文本。切换到VisualStudio.NET,在ed.WriteMessage(“HelloWorld”);语句处加入一个断点。在AutoCAD中再次运行HelloWorld命令,你会注意到你可以跟踪代码的运行。VisulStudio.NET的”调试”菜单有好几项可以用来跟踪程序的运行。如果有时间的话,请浏览一下CommandMethod属性。你会发现它有七种不同的形式。在上面的例子中,我们使用了最简单的形式,它只有一个输入参数(命令的名字)。你可以使用其它的形式来控制命令的工作方式,例如你可以确定命令组的名字、全局和局部名字、命令标识(命令如何来运行)等。第2章.NETAutoCAD向导及Editor类在第一章中,我们使用的是类库模板,这样就不得不手工加入acdbmdg.dll和acmgd.dll这两个引用。在这一章中,我们将使用AutoCAD托管C#应用程序向导来创建.NET工程,它会自动加入以上两个引用。在开始本章之前,你首先得安装ObjectARX向导(ObjectARX2006开发包的\utils\ObjARXWiz\ArxWizards.msi)。启动VisualStudio.NET,选择”文件新建工程”(FileNewProject)。在新建工程对话框中选择工程类型为”VisualC#工程”,然后选择“AutoCADManagedCSProjectApplication”模板。在工程名字框中输入”Lab2”,然后选择工程存放的位置。点击确定按钮,“AutoCADManagedCSharpApplicationWizard”对话框将会出现。因为我们不需要使用非托管代码,所以不要选择“EnableUnmanagedDebugging”项。“RegisteredDeveloperSymbol”将会使用你在安装ObjectARX向导时输入的值。单击”finish”按钮来创建工程。下面来看一下向导生成的工程。在解决方案浏览器中,你会看到acdbmgd和acmgd已经被引用了。在Class.cs文件中,“Autodesk.AutoCAD.Runtime”命名空间已被导入,工程使用“RegisteredDeveloperSymbol”的名字来命名缺省的公有类。向导还为类加入了一个CommandMethod属性和一个函数,它们用于AutoCAD命令。在前一章中,我们使用一个“Autodesk.AutoCAD.EditorInput.Editor”类的实例对象在AutoCAD命令行上输出文本。在这一章中,我们将使用这个类来提示用户在AutoCAD图形中选择一个点,然后将用户选择的点的x,y,z值显示出来。和前一章一样,请导入Autodesk.AutoCAD.ApplicationServices和Autodesk.AutoCAD.EditorInput命名空间。把向导生成的CommandMethod属性的值改为有意义一些的名字如“selectPoint”(函数的名字可以不用修改)。PromptPointOptions类用来设置提示字符串和其它的一些控制提示的选项。这个类的一个实例作为参数被传入到Editor.GetPoint方法。在函数的开始,实例化这个类,设置字符串参数为“Selectapoint”。因为Editor.GetPoint方法会返回一个PromptPointResult类的实例对象,所以我们也要把它实例化。PromptPointOptionsprPointOptions=newPromptPointOptions(Selectapoint);PromptPointResultprPointRes;接下来实例化一个Editor类的对象并使用参数为PromptPointOptions对象的GetPoint方法。用GetPoint方法的返回值来给上面声明的PromptPointResult对象赋值。赋值好以后,我们可以测试PromptPointResult对象的状态,如果不是OK就返回。prPointRes=ed.GetPoint(prPointOptions);if(prPointRes.Status!=PromptStatus.OK){ed.WriteMessage(Error);}如果PromptPointResult对象返回了一个有效的点,我们就可以使用WriteMessage方法把结果输出到命令行。PromptPointResult.Value的ToString方法使输出非常容易:ed.WriteMessage(YouselectedpointprPointRes.Value.ToString)按F5来运行一个调试AutoCAD的进程。(注意:向导已经设置好用acad.exe来调试)在AutoCAD命令行中输入NETLOAD,选择Lab2.dll并打开。在命令行中输入你起的命令名字(selectPoint)。在选择点的提示下,单击图形中的任一点。如果一切正常的话,你可以在命令行中看到你所选的点的坐标值。在Class.cs文件的“ed.WriteMessage(Error);”行加入断点,然后再次运行selectPoint命令。这一次,在选择点的提示下按ESC键而不是选择一个点。PromptPointResult对象的状态就不是OK了,所以上面代码中的if语句就会被执行,“ed.WriteMessage(Error)”;语句就会被调用。接下来我们将加入另外一个命令,它可以获取两个点之间的距离。向导没有添加命令的功能,所以我们必须手工添加。在Class.cs文件的选择点的函数(getPoint)下面添加一个名为getDistance的新命令。加入命令的方法请参考上一章的内容或本章的源代码,这里就不列出了。使用CommandMethod属性并使字符串参数为“getdistance”或其它类似的名字。在命令的函数中使用PromptDistanceOptions代替PromptPointOptions。当然GetDistance方法的返回值是一个PromptDoubleResult类的实例对象,所以请用PromptDoubleResult来代替PromptPointResult:PromptDistanceOptionsprDistOptions=newPromptDistanceOptions(Finddistance,selectfirstpoint:);PromptDoubleResultprDistRes;prDistRes=ed.GetDistance(prDistOptions);和前面的命令一样,也可以测试PromptDoubleResult的状态,然后用WriteMessage方法在命令行中显示值。if(prDistRes.Status!=PromptStatus.OK){ed.WriteMessage(Error);}else{ed.WriteMessage(Th
本文标题:Autodesk官方最新的NET教程(一)(CNET版)
链接地址:https://www.777doc.com/doc-2902147 .html