C#.NET教程:AutoCAD向导及Editor类

开发 后端
本文继续C#.NET教程:.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类的实例对象,所以我们也要把它实例化。

  1. PromptPointOptions prPointOptions =  
  2. new PromptPointOptions("Select a point");  
  3. PromptPointResult prPointRes; 

5) 接下来实例化一个Editor类的对象并使用参数为PromptPointOptions对象的GetPoint方法。用GetPoint方法的返回值来给上面声明的PromptPointResult对象赋值。赋值好以后,我们可以测试PromptPointResult对象的状态,如果不是OK就返回。

  1. prPointRes = ed.GetPoint(prPointOptions);  
  2. if (prPointRes.Status != PromptStatus.OK)  
  3. {  
  4. ed.WriteMessage("Error");  

6) 如果PromptPointResult对象返回了一个有效的点,我们就可以使用WriteMessage方法把结果输出到命令行。PromptPointResult.Value的ToString方法使输出非常容易:

  1. ed.WriteMessage("You selected point " 
  2. 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:

  1. PromptDistanceOptions prDistOptions = new 
  2. PromptDistanceOptions("Find distance, select first point:");  
  3. PromptDoubleResult prDistRes;  
  4. prDistRes = ed.GetDistance(prDistOptions); 

9) 和前面的命令一样,也可以测试PromptDoubleResult的状态,然后用WriteMessage方法在命令行中显示值。

  1. if (prDistRes.Status != PromptStatus.OK)  
  2. {  
  3. ed.WriteMessage("Error");  
  4. }  
  5. else 
  6. {  
  7. ed.WriteMessage("The distance is: " + prDistRes.Value.ToString());  
  8.  
  9. }  

C#.net 教程中AutoCAD及Editor类的相关内容就介绍到这里。

【编辑推荐】

  1. C#事件和委托的编译代码
  2. C#事件的由来
  3. 学习C#委托:将方法绑定到委托
  4. 学习C#委托:将方法作为方法的参数
  5. C# 插件构架实例详解
责任编辑:book05 来源: 新浪博客
相关推荐

2009-08-19 15:44:09

ObjectARX .

2009-08-25 13:53:20

C#.NET rege

2009-08-26 14:23:14

C#.Net Fram

2009-08-19 16:19:33

Employee对象

2011-06-01 15:45:28

实体类序列化

2009-08-26 10:09:22

C#编码规范

2009-08-24 16:19:54

C#.NET绑定Off

2009-08-13 10:35:55

C#.NET操作XML

2011-06-17 15:55:19

ArrayListC#

2009-09-11 11:30:53

Net60C#.NET

2009-08-24 16:30:43

C#.NET绑定Off

2009-08-28 09:29:02

2009-08-31 14:45:15

C#.NET多线程应用

2009-04-02 15:21:43

c#IDisposeFinalize

2009-09-01 16:14:05

ArrayList与A

2009-08-28 16:43:08

AutoCAD托管C#

2009-08-28 14:15:19

SocketVisual C#.N

2023-08-02 08:48:11

C#碟片算法

2023-10-11 14:18:40

C#.Net析构

2023-09-26 07:57:17

C#.NetCCtor函数
点赞
收藏

51CTO技术栈公众号