欢迎光临
我们一直在努力

.NET开发AutoCAD指南(一)-.NET教程,报表/图形/Office

建站超值云服务器,限时71元/月

.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取代了。
       那到底有没有一种结合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://www.mjtd.com/bbs/viewfile.asp?boardid=33&id=18012演示视频http://wordmemory.net/arx.rar

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » .NET开发AutoCAD指南(一)-.NET教程,报表/图形/Office
分享到: 更多 (0)