中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 临时文章
.NET开发AutoCAD指南(一)
作者:未知 时间:2005-07-27 21:45 出处:CSDN 责编:chinaitpower
              摘要:.NET开发AutoCAD指南(一)

 

 

 

 

 

 

 

.NET开发AutoCAD指南(一)

 

 

 

 

 

 

C#才鸟(Email:zhf7878@sohu.com

 

 

 

 

 

 

       时下流行的开发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取代了。

 

 

 

 

 

 

       那到底有没有一种结合ObjectARXVBA优点的开发AutoCAD的工具呢?答案就是利用功能强大并且易用的.net。对于AutoCAD 2004及以前的版本,大家可以使用ActiveX来进行AutoCAD .net程序开发(我也写过这方面的文章),但开发出来的程序还不是真正意义上的.net程序,功能不是很强大,和ObjectARXVBA相比没有任何的优势而言。到了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的人都应该知道选项对话框吧,扩展多页对话框就是指的这一种,甚至你可以在选项对话框中添加你自定义的页,是不是很酷啊!),而这些往往是ObjectARXVBA非常难以做到的。

 

 

 

 

 

 

 

 

 

 

 

 

类似于属性的面板

 

 

 

 

 

 

 

 

 

 

 

 

扩展多页对话框,竟然可以在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.dllacmgd.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,圆变为蓝色。

 

 

 

 

 

 

好了,今天就介绍到这里。

 

 

 

 

 

 

附件:

 

 

 

 

 

 

 http://www.mjtd.com/bbs/viewFile.asp?Boardid=33&ID=18012

 

 

 

 

 

 

演示视频

 

 

 

 

 

 

http://wordmemory.net/arx.rar

 

 

 

 

 

 


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有