Autodesk官方最新的.NET教程(二)(C#版)
2024-07-10 13:00:07
供稿:网友
第2章 .net autocad 向导及editor类 在第一章中,我们使用的是类库模板,这样就不得不手工加入acdbmdg. dll 和acmgd.dll这两个引用。在这一章中,我们将使用autocad托管c#应用程序向导来创建.net工程,它会自动加入以上两个引用。在开始本章之前,你首先得安装objectarx向导(objectarx2006开发包的/utils/objarxwiz/arxwizards.msi)。 1) 启动visual studio .net,选择”文件>新建>工程”(file> new> project)。在新建工程对话框中选择工程类型为”visual c#工程”,然后选择“autocad managed cs project application”模板。在工程名字框中输入”lab2”,然后选择工程存放的位置。点击确定按钮,“autocad managed csharp application wizard”对话框将会出现。因为我们不需要使用非托管代码,所以不要选择“enable unmanaged debugging”项。“registered developer symbol”将会使用你在安装objectarx向导时输入的值。单击”finish”按钮来创建工程。2) 下面来看一下向导生成的工程。在解决方案浏览器中,你会看到acdbmgd 和 acmgd已经被引用了。在class.cs文件中,“autodesk.autocad.runtime”命名空间已被导入,工程使用“registered developer symbol”的名字来命名缺省的公有类。向导还为类加入了一个commandmethod属性和一个函数,它们用于autocad命令。3) 在前一章中,我们使用一个“autodesk.autocad.editorinput.editor”类的实例对象在autocad命令行上输出文本。在这一章中,我们将使用这个类来提示用户在autocad图形中选择一个点,然后将用户选择的点的x,y,z值显示出来。和前一章一样,请导入autodesk.autocad.applicationservices 和 autodesk.autocad.editorinput命名空间。4) 把向导生成的commandmethod属性的值改为有意义一些的名字如“selectpoint”(函数的名字可以不用修改)。promptpointoptions类用来设置提示字符串和其它的一些控制提示的选项。这个类的一个实例作为参数被传入到editor.getpoint方法。在函数的开始,实例化这个类,设置字符串参数为“select a point”。因为 editor.getpoint方法会返回一个promptpointresult类的实例对象,所以我们也要把它实例化。 promptpointoptions prpointoptions = new promptpointoptions("select a point"); promptpointresult prpointres; 5) 接下来实例化一个editor类的对象并使用参数为promptpointoptions对象的getpoint方法。用getpoint方法的返回值来给上面声明的promptpointresult对象赋值。赋值好以后,我们可以测试promptpointresult对象的状态,如果不是ok就返回。 prpointres = ed.getpoint(prpointoptions); if (prpointres.status != promptstatus.ok) { ed.writemessage("error");} 6) 如果promptpointresult对象返回了一个有效的点,我们就可以使用writemessage方法把结果输出到命令行。promptpointresult.value的tostring方法使输出非常容易: ed.writemessage("you selected point " prpointres.value.tostring) 7) 按f5来运行一个调试autocad的进程。(注意:向导已经设置好用acad.exe来调试)在autocad命令行中输入netload,选择lab2.dll并打开。在命令行中输入你起的命令名字(selectpoint)。在选择点的提示下,单击图形中的任一点。如果一切正常的话,你可以在命令行中看到你所选的点的坐标值。在class.cs文件的“ed.writemessage("error");”行加入断点,然后再次运行selectpoint命令。这一次,在选择点的提示下按esc键而不是选择一个点。promptpointresult对象的状态就不是ok了,所以上面代码中的if语句就会被执行,“ed.writemessage("error")”;语句就会被调用。8) 接下来我们将加入另外一个命令,它可以获取两个点之间的距离。向导没有添加命令的功能,所以我们必须手工添加。在class.cs文件的选择点的函数(getpoint)下面添加一个名为getdistance的新命令。加入命令的方法请参考上一章的内容或本章的源代码,这里就不列出了。使用commandmethod属性并使字符串参数为“getdistance”或其它类似的名字。在命令的函数中使用promptdistanceoptions代替promptpointoptions。当然getdistance方法的返回值是一个promptdoubleresult类的实例对象,所以请用promptdoubleresult来代替promptpointresult: promptdistanceoptions prdistoptions = new promptdistanceoptions("find distance, select first point:"); promptdoubleresult prdistres; prdistres = ed.getdistance(prdistoptions); 9) 和前面的命令一样,也可以测试promptdoubleresult的状态,然后用writemessage方法在命令行中显示值。 if (prdistres.status != promptstatus.ok) { ed.writemessage("error"); } else {ed.writemessage("the distance is: " + prdistres.value.tostring()); }