.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,圆变为蓝色。  
好了,今天就介绍到这里。

转载于:http://bbs.51cto.com/archiver/tid-418118.html

AutoCAD .net开发人员手册中文版 文档介绍: 当前版本为20101128版,为第一个CHM版本,如需更新版本,请及时关注http://www.01vb.com,也可以查看CHM文件中的前言部分的版本通知。 因本版本制作仓促,还有如下不完善的内容。 1、还有一章内容没有翻译完成; 2、目录部分和索引部分还是英文版本,但具体页面中全部是中英文对照(有些在提示中有些在翻译上面)。 本《AutoCAD .NET 开发人员手册》由01VB编程站翻译并提供,版权所有,原英文版本版权归原版权所有者所有。本手册为免费版本,可在网上随意发送,但必须注明出处(01VB编程站及网站链接http://www.01vb.com)及翻译者。 序言 自从 AutoCAD 支持使用 .NET 开发以来,所有关于 .NET 的官方开发资料全部是英文版本,给国内开发者的学习带来了一定的阻碍,为了给广大 .NET 爱好者提供更多方便,于是决定翻译一部分资料。 因本人英文水平及CAD二次开发水平有限,翻译的资料中也许有表达不清楚的地方,请大家谅解,也可以在资料底部找到留言的链接,给我留言或直接点击QQ联系我。 01VB编程站是一个非营利性的网站,但是,网站要生存,必须有经济来源。因此,本人在本手册中的投放了广告,但是,广告都是在正文内容的底部,不影响阅读。原则上我不鼓励大家点击上面的广告,除非真的对广告内容感兴趣。因广告给您带来的不便,还望谅解。 最近一段时间,老婆一直生病,始终没有痊愈,在此,我希望老婆能快点儿好起来, 并想对她说一句:老婆,别哭,好好养病,病痛在你身,也疼在我心。你累了,我会背你;钱花光了,我会去挣,身体是第一位的。如果你也想给我老婆送上祝福,请留言,谢谢!(2010.11.24) 翻译历史 2010年8月中旬 开始,期间由于本人生病,中断了几天,还有部分内容没有翻译完成,仍然在翻译中。 11.6 更新《图层状态管理器的使用》部分。 11.07 更新《文字样式》部分 11.08 更新完《创建和编辑AutoCAD图元》这章。 11.11 更新 《标注的概念》 部分 11.12 更新《创建标注》部分 11.15 更新完 《创建引线和注释》 部分 11.20 更新完《形位公差》 部分 11.24 更新到 《在三维空间中编辑 》 11.28 修正手册中的脚本错误,进行CHM格式文档的制作并在01VB编程站首发。 感谢 《AutoCAD .NET 开发人员手册》的翻译过程得到 明经通道 网站 "明经 AutoCAD.NetApi 群"中许多网友的帮助,像 MCCAD、雪山飞狐、Still等等,另外还有其它人记不清楚了,因为太多太多,总之两个字,谢谢。 版权 本开发人员手册版权属01VB编程站网站所有。 翻译者:黄明新(平凡)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值