CAD .NET开发 教程(C#)——第二章
2018-02-25 13:43
267 查看
第 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());
}
在第一章中,我们使用的是类库模板,这样就不得不手工加入 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());
}
相关文章推荐
- CAD .NET开发 教程(C#)——第四章
- CAD .NET开发 教程(C#)——第一章
- CAD .NET开发 教程(C#)——第三章
- 微信公众平台入门开发教程.Net(C#)框架
- 支付宝移动支付开发详细教程服务端采用.net mvc webapi(C#)
- ASP.NET 视频教程 商务网站 购物车制作 VS2008 C# SQL2005 开发
- 微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- DirectUI Skin++界面解决方案 界面设计 界面开发 软件UI界面开发 软件UI界面美术设计 界面编程 界面教程 Skin VC VB C# .net pb delphi c builder GUI
- 微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)
- 《Web Service 编程 --用C#.NET 开发网络服务》北京希望出版社 我的学习笔记(第二章)(也就是书上抄了一写东西而已)
- 微信公众平台入门开发教程.Net(C#)框架
- 微信公众平台入门开发教程.Net(C#)框架
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 主细表事务处理的标准例子
- ASP.NET 控件开发速成教程:生成复合控件
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(十二)神奇的副本地图
- 老顽固在13英寸苹果笔记本MacBook Air上开发C#.NET程序的感受浅谈
- C# .NET webservice开发
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十三) 锦上添花之魔法特效装饰