.NET开发AutoCAD指南(一)

时下流行的开发AutoCAD的工具,一个是ObjectARX,另一个是AutoCAD自带的VBA(AutoCAD内置的Visual lisp本来也算一个,但它只能开发一些小型的程序,因此不能和前面的两个工具相比)。但两者都存在明显的不足,以VC++为基础的ObjectARX的开发功能无庸质疑是非常强大的,但要想学习并熟练掌握VC++及ObjectARX对于普通人来说是比较困难的。还有大家应该注意到的是,ObjectARX是以VC++为基础的,但就是最新的ObjectARX2006也只能用Visual Stuio.net 2001来进行开发,而不能使用现在普遍使用的Visual Studio.net 2003(呵呵,当然不能用更高版本的Visual Studio.net了)。而VBA正好相反,非常容易上手,但对于编写高效或者复杂的程序就不是那么简单的事情了。更为糟糕的是,VBA已没有更新的版本了,因为VB已经被VB.net取代了。 
      那到底有没有一种结合ObjectARX和VBA优点的开发AutoCAD的工具呢?答案就是利用功能强大并且易用的.net。对于AutoCAD 2004及以前的版本,大家可以使用ActiveX来进行AutoCAD 的.net程序开发(我也写过这方面的文章),但开发出来的程序还不是真正意义上的.net程序,功能不是很强大,和ObjectARX或VBA相比没有任何的优势而言。到了AutoCAD2005,有了真正的可以开发.net程序的ObjectARX managed wrapper classes,但它的功能还是很有限,如连最基本的用于读取AutoCAD命令行的函数都没有。随着最新的AutoCAD2006的发布,ObjectARX managed wrapper classes的性能被大幅度提升,以前只有ObjectARX才有的一些函数和功能(而这些东东往往对于AutoCAD的开发是非常重要的),现在ObjectARX managed wrapper classes都提供了。 

最令人激动的是,利用ObjectARX managed wrapper classes,你可以非常方便的生成AutoCAD工具栏、面板和扩展多页对话框(呵呵,英文名为extend tabbed dialogs,可能翻译的不太准确,用过CAD的人都应该知道选项对话框吧,扩展多页对话框就是指的这一种,甚至你可以在选项对话框中添加你自定义的页,是不是很酷啊!),而这些往往是ObjectARX和VBA非常难以做到的。

类似于属性的面板
 

扩展多页对话框,竟然可以在AutoCAD的选项对话框中添加自定义的选项卡,太酷了! 

呵呵,费话说了这么多,还是让我们来用一个具体的例子来看一下如何使用ObjectARX managed wrapper classes(2006)来开发AutoCAD程序,这个例子是先在AutoCAD中画一个圆,再根据用户在命令行中的选择改变圆的颜色。先说明一下,你可以用任何版本的Visual Studio.net(不管是老版本的2001,还是2003,或者是最新的2005)来进行AutoCAD .net程序的开发,编程语言你可以用C#或VB.net。我用的是Visual Studio.net 2003,语言为C#,AutoCAD 版本为2006英文版。 

       下面是具体的步骤(可以看附件中的演示视频): 

       1.在Visual Studio.net 中,创建一个类库工程。 

       2.添加相关的引用。请把AutoCAD2006安装目录下的acdbmgd.dll和acmgd.dll添加到工程中。 

       3.在源代码文件中,加入以下代码: 

using System; 
//下面加入的命名空间都是开发AutoCAD程序时会用到的 
using Autodesk.AutoCAD.DatabaseServices; 
using Autodesk.AutoCAD.Runtime; 
using Autodesk.AutoCAD.Geometry; 
using Autodesk.AutoCAD.ApplicationServices; 
using Autodesk.AutoCAD.EditorInput; 
using DBTransMan=Autodesk.AutoCAD.DatabaseServices.TransactionManager; 
 
 
 
namespace Example 

     public class Class1 
     { 
         //注册AutoCAD命令,你可以在AutoCAD的命令行中通过输入此命令来调用.net程序 
[CommandMethod("Test")] 
         public void Test() 
         { 
              //定义圆的圆心 
Point3d center=new Point3d(100,100,0); 
//定义圆的半径 
              double radius=50; 
         //定义一个Circle对象来表示你要生成的圆,传入的第二个参数为圆的法向,就是把圆生、//成在什么面上,因为AutoCAD程序一般都是平面问题,因此你一般都把这个法向量定义成//z轴方向。 
              Circle circle=new Circle(center,new Vector3d(0.0,0.0,1.0),radius); 
              //获得当前活动AutoCAD文档所在的数据库 
              Database db=Application.DocumentManager.MdiActiveDocument.Database; 
              //获得事务处理管理器 
              DBTransMan tm=db.TransactionManager; 
              //开始事务处理,也就是往CAD中加入东西 
              using(Transaction trans=tm.StartTransaction()) 
              { 
                   //获得AutoCAD块表,AutoCAD将加入到图形中的对象的信息都放在这个表中 
BlockTable bt=(BlockTable) 
                   tm.GetObject(db.BlockTableId,OpenMode.ForRead,false); 
                   //获得块表记录 
                   BlockTableRecord btr=(BlockTableRecord) 
                   tm.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite,false); 
                   //向块表记录加入圆的相关信息 
                   btr.AppendEntity(circle); 
                   //向AutoCAD加入圆 
tm.AddNewlyCreatedDBObject(circle,true); 
                   trans.Commit(); 
              } 
         } 
     } 

是不是看了上面的东西觉得有点难?(呵呵,如果你要弄清楚什么块表、块表记录、事务处理的,你得先了解AutoCAD内在的一些东西,这我会在以后讲)不就是加入一个圆吗?要这么复杂?!为了让初学者快速地进入.net开发AutoCAD的世界,我给大家编了一个库ZHFARX,你可以通过这个库来简化上面的程序(关于ZHFARX库,你可以在附件中下载。关于这个库的详细介绍请大家看我下一期的文章)。下面是引用ZHFARX库后加入圆的代码: 

using System; 
using Autodesk.AutoCAD.DatabaseServices; 
using Autodesk.AutoCAD.Runtime; 
using Autodesk.AutoCAD.Geometry; 
using Autodesk.AutoCAD.ApplicationServices; 
using Autodesk.AutoCAD.EditorInput; 
using DBTransMan=Autodesk.AutoCAD.DatabaseServices.TransactionManager; 
using ZHFARX;//这是引用的ZHFARX库 
namespace Example 

     public class Class1 
     { 
         [CommandMethod("Test")] 
         public void Test() 
         { 
              Point3d center=new Point3d(100,100,0); 
              double radius=50; 
              //Circles是ZHFARX库中对应于Circle类的类 
Circles circle=new Circles(center,radius); 
//Entities是ZHFARX库中用来向AutoCAD中加入图形的一个类 
              Entities.AddEntity(circle); 
         } 
     } 

呵呵,是不是简单了许多。 

下面的代码是根据用户在命令行中的选择来改变圆的颜色。 

              //Editor代表AutoCAD命令行 
Editor ed=Entities.Editor; 
// PromptKeywordOptions定义一个关键字列表选项 
              PromptKeywordOptions opt= 
new PromptKeywordOptions("选择颜色[绿色(G)/蓝色(B)]<红色(R)>"); 
//加入关键字列表 
              opt.Keywords.Add("R"); 
              opt.Keywords.Add("G"); 
              opt.Keywords.Add("B"); 
              //获取用户输入的关键字 
              PromptResult result=ed.GetKeywords(opt); 
              //判断是否输入了定义的关键字 
              if (result.Status==PromptStatus.OK) 
              { 
                       //根据用户选择的关键字,来改变圆的颜色 
switch(result.StringResult) { 
                       case "R": 
                            // PutColorIndex是ZHFARX库中改变对象颜色的函数 
                            Entities.PutColorIndex(circle,1); 
                            break; 
                       case "G": 
                            Entities.PutColorIndex(circle,3); 
                            break; 
                       case "B": 
                            Entities.PutColorIndex(circle,5); 
                            break; 
                   } 
            } 

编译这个程序,生成Example.dll文件,这就是你编写的.net程序。 

完整的源程序放在附件中。 

4.打开AutoCAD,在命令行中输入NETLOAD命令。在弹出的对话框中选择刚才生成的Example.dll。接下来请在命令行中输入在程序中定义的命令的名字Test,好了应该可以看到一个圆了。这时命令行中出现选择颜色[绿色(G)/蓝色(B)]<红色(R)>[R/G/B] 的提示,你可以键入R,则圆变为红色;键入G,圆变为绿色;键入B,圆变为蓝色。 
好了,今天就介绍到这里。

时间: 2024-10-03 18:13:05

.NET开发AutoCAD指南(一)的相关文章

.NET 开发AutoCAD2006指南(二)

在上一篇文章中向大家简单讲了.NET开发AutoCAD的流程,其中介绍了我编写的一个简化程序开发的ZHFARX库.下面向大家介绍ZHFARX库中的主要函数及如何用它来编写.NET程序.关于ZHFARX库的所有函数的说明,请大家参考本章附件中的ZHFARX帮助文档.       在介绍ZHFARX库之前,让我们首先来了解一下有关的基本概念.你可以把AutoCAD看作为一个数据库,而AutoCAD中有关的东西都放在这个数据库的相关表中.例如,你用Line命令在AutoCAD的模型空间中添加了一条直线

转贴(电脑报):VBA开发实用指南

VBA开发实用指南 唐大中 附录文章 VBA(Visual Basic for Application)是Office自带的二次开发工具,可为日常办公带来极大的便利.本文讲述Office各个成员VBA开发的常用对象和其相关的属性.方法和事件(包括Word.Excel.PowerPoint等),并给出相关的实例代码. 一.VBA基础 1.什么是VBA 在Office对于一些烦琐.重复的操作,用户可以通过"宏"来实现."宏"即是由一系列命令和指令组合而成的命令集,其本质

WSDL编辑器开发人员指南

关于WSDL编辑器 借助WSDL编辑器,可以编辑Web服务描述语言(Web"服务"Description Language,WSDL)文件. WSDL是一种基于XML的语言,用于描述Web服务.一个WSDL文件包含以下类型的信息: 关于Web服务功能的信息 关于如何访问Web服务的信息 WSDL编辑器支持WSDL规范的版本 1.1. WSDL编辑器提供以下视图: 在 "源"视图 中,显示基础XML源码. 在WSDL视图 中,WSDL文件作为树组件或一系列的列出现.

iOS应用开发入门指南 - 编写 Objective-C 代码

如果你刚开始接触 iOS 或 Mac OS X 编程,首先要学习一点编程语言 Objective-C 入门知识.Objective-C 并不是一门复杂的语言,经过一段时间的接触,你就能体会到它的优雅.Objective-C 语言实现了严格的面向对象编程.它扩展了标准 ANSI C 语言,增加了定义类和方法的语法.它还推行类和接口的动态扩展性,使任何类都能适配和采用. 如果你已经掌握了 ANSI C 语言,下面的内容能够帮助你掌握 Objective-C 的基本语法.如果你有其他面向对象编程语言的

MaxCompute(原ODPS)开发入门指南——数据开发工具篇

MaxCompute(原ODPS)开发入门指南--数据开发工具篇 写在最前面 >>>进入了解更多>>>阿里云数加·MaxCompute大数据计算服务. 大家在使用大数据计算服务MaxCompute时,最头疼就是我现在已有的数据如何快速上云?我的日志数据如何采集到MaxCompute上?等等...具体详见<MaxCompute(原ODPS)开发入门指南--数据上云篇>. 但是数据在MaxCompute上了之后,问题又来了,我怎么基于上面进行快速的数据开发,构建

104_《Delphi5开发人员指南》

<Delphi5开发人员指南> Delphi 教程 系列书籍 (104) <Delphi5开发人员指南> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 原书名: Delphi 5开发人员指南 作者: (美)Steve Teixeira.Xavier Pacheco著 出版社: 机械工业出版社 书号: 7111080408 出版日期:2000年7月 开本: 787*1092 1/16 页码: 1263 版次: 2000年7月第一版第

libjingle开发人员指南

libjingle开发人员指南 libjingle SDK包含C + +源代码和文档,使您能够设计连接和网络交换数据的应用程序(通过点对点数据连接).该SDK包含代码和示例应用程序,一个Window平台的Vs2005 的解决方案,其他平台的configuration and makefiles文件用来编辑程序.注意,代码有一些外部依赖(例如:语音聊天程序需要Linphone或GIPS VoiceEngine Lite,这取决于您的平台). 该代码包括网络和代理协商类,XML解析类,STUN服务器

MaxCompute(原ODPS)开发入门指南——数据上云篇

MaxCompute(原ODPS)开发入门指南--数据上云篇 写在最前面 >>>进入了解更多>>>阿里云数加·MaxCompute大数据计算服务. 根据<MaxCompute(原ODPS)开发入门指南--计量计费篇>的了解,大家清楚了MaxCompute可以做什么,计费模式如何,想必大家也开通了MaxCompute想进行一次POC,但是大家遇到第一个问题一定是我的数据如何上云? 可通过多种方式数据流入MaxCompute MaxCompute(原ODPS)提

《Visual C++ 2012 开发权威指南》——第2章 Visual C++2012语言新特性2.1 Visual C++2012的语言新特性(1)

第2章 Visual C++2012语言新特性 Visual C++ 2012 开发权威指南 有一种新的C++标准就有一种新版本的Visual C++,新的版本Visual C++将更加符合C++标准!在其发展过程中新的C++标准被(乐观)称为C++0x.它最后被发布在2011年,现在称为C++11. 对于Visual C++,它有三个不同版本的数字,有不同的内部版本和编译器版本(cl.exe和_MSC_VER宏-显示不同,因为我们C++编译器早在Visual C++中的"可视化").