找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2135|回复: 3

[ARX程序]:DOTNETARX(一个用于.net开发AutoCAD程序的类库)

[复制链接]
发表于 2005-8-15 21:17:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
DOTNETARX helps the .net programmers write the ObjectARX programs more easily!!



[B]所附文件包括[/B] dotnetarx
                        dotnetarx_src
                        DOTNETARXHelp

适用环境:Win2K, WinXP, Microsoft Windows Server 2003
语言:C#
具体使用请参考DOTNETARX参考文档。

            下面转贴一篇别人的教学文章

  1.   [FONT=courier new]
  2. 本文将向你介绍一些DOTNETARX的例子。要运行文中的例子,你必须创建一个新的工程并加入DOTNETARX2.0组件,然后在代码文件中加入"using DOTNETARX;"。关于DOTNETARX的详细说明,请大家参考DOTNETARX参考文档。
  3. 多重选择集
  4. 在ObjectARX托管封装类中有一个bug,你不能使用多重选择集。例如,你不能使用选择集来同时选择圆和直线。但有了DOTNETARX2.0,你就可以使用多重选择集了。
  5. 下面的例子在选择集中加入半径为1.0的圆和在层ABC上的直线。
  6.      void test()
  7.     {
  8.         TypedValue[] values=new TypedValue[]{
  9.                         new TypedValue(-4,"<or"),
  10.                             new TypedValue(-4,"<and"),
  11.                             new TypedValue(0,"CIRCLE"),
  12.                             new TypedValue((int)DxfCode.Real,1.0),
  13.                             new TypedValue(-4,"and>"),
  14.                             new TypedValue(-4,"<and"),
  15.                             new TypedValue(0,"Line"),
  16.                             new TypedValue((int)DxfCode.LayerName,"ABC"),
  17.                             new TypedValue(-4,"and>"),
  18.                             new TypedValue(-4,"or>")
  19.         };
  20.         int n=Tools.GetSelection(values).Count;//在选择集中加入对象
  21.         Tools.Editor.WriteMessage(n.ToString());
  22.     }
  23. 加入多个实体
  24. 在DOTNETARX1.0(也就是原来的zhfarx),如果你多次使用Tools.AddEntity来加入多个实体,那么效率将非常的低。所以在2.0中,我加入了AddEntities()函数来解决这个问题。
  25. 下面的例子使用AddEntities()在AutoCAD图形中加入直线和圆。
  26.     void AddLineCircle()
  27.     {
  28.         Point3d pt1=new Point3d(0,0,0);
  29.         Point3d pt2=new Point3d(50,50,0);
  30.         Lines line=new Lines(pt1,pt2);
  31.         Point3d center=new Point3d(50,0,0);
  32.         Circles circle=new Circles(center,50);
  33.         Tools.AddEntities(new Entity[]{line,center});
  34.     }
  35. 组
  36. 下面的例子在AutoCAD中加入一个组。
  37.      void MakeGroup()
  38.     {
  39.         PromptSelectionResult res=Tools.Editor.GetSelection();//选择对象
  40.         SelectionSet ss=res.Value; //获取选择集
  41.         ObjectId[] ids=ss.GetObjectIds(); //获取表示所选对象的objectId数组
  42.         Group gp=new Group("grouptest",true);//创建名为grouptest的组对象
  43.         gp.Append(new ObjectIdCollection(ids));// 加入上面的所选对象到组中
  44.         Tools.AddDictionaryObject("ASDK_GROUPTEST",gp,Tools.Database.GroupDictionaryId);
  45.         //使用AddDictionaryObject()函数把组加入到AutoCAD中。
  46.    }
  47. 扩展记录
  48. 下面的例子在AutoCAD中加入一个扩展记录。
  49.       
  50.       
  51.    void MakeXRecord()
  52.     {
  53.         Xrecord rec=new Xrecord();//创建一个扩展记录对象
  54.         rec.Data=new ResultBuffer(
  55.                 new TypedValue((int)DxfCode.Text,"This is a test"),
  56.                 new TypedValue((int)DxfCode.Int8,0),
  57.                 new TypedValue((int)DxfCode.UcsOrg,new Point3d(0,0,0))
  58.         );//使用Xreord的Data属性来设置Xreord的内容
  59.         Tools.AddDictionaryObject("test",rec,Tools.Database.NamedObjectsDictionaryId);
  60.         //使用AddDictionaryObject()函数把扩展记录加入到AutoCAD中。
  61.         foreach (TypedValue rb in rec.Data) //输出刚才加入的条目
  62.         {
  63.          Tools.Editor.WriteMessage(string.Format("TypedCode={0},Value={1}\n",rb.TypeCode,rb.Value));
  64.         }
  65.     }
  66. 扩展数据
  67. 下面的例子在AutoCAD中加入扩展数据。
  68.     void MakeXData()
  69.     {
  70.         Lines line=new Lines(new Point3d(0,0,0),new Point3d(100,100,0));
  71.         //创建直线
  72.         RegAppTableRecord app=new RegAppTableRecord();
  73.         //加入扩展数据到直线,首先注册程序
  74.         app.Name="MyApp";
  75.         Tools.AddSymbolTableRecord(app,Tools.Database.RegAppTableId);
  76.         //使用AddSymbolTableRecord 函数把app加入到RegAppTable。

  77.         line.XData=new ResultBuffer(new TypedValue((int)DxfCode.ExtendedDataRegAppName,"MyApp"),
  78.         new TypedValue((int)DxfCode.ExtendedDataAsciiString,"This is some xdata string"));
  79.         //设置直线的XData属性
  80.         Tools.AddEntity(line);//加入直线到数据库中
  81.         foreach (TypedValue rb in line.XData)// 输出刚才加入的条目
  82.         {
  83.             Tools.Editor.WriteMessage(string.Format("TypedCode={0},Value={1}\n",rb.TypeCode,rb.Value));
  84.         }
  85.      }
  86. 复制和移动
  87. 下面的例子先使用Copy()获取所选实体的拷贝,然后使用Move()来移动这个拷贝。
  88.     void test()
  89.     {
  90.         PromptEntityResult res = Tools.Editor.GetEntity("please select an entity to copy:\n");
  91.         ObjectId id= Tools.Copy(res.ObjectId);
  92.         Tools.Move(id,res.PickedPoint,res.PickedPoint.Add(new Vector3d(20,20,0)));
  93.     }
  94. 镜像拷贝
  95. 下面的例子镜像拷贝所选的实体。
  96.     void test()
  97.     {
  98.         Editor ed=Tools.Editor;
  99.         PromptEntityResult res =ed.GetEntity("please select an entity:\n");
  100.         Point3d pt1=ed.GetPoint("Select the first point of the mirror axis:\n").Value;
  101.         Point3d pt2=ed.GetPoint("Select the second point of the mirror axis:\n").Value;
  102.         Tools.Mirror(res.ObjectId,pt1,pt2,false);
  103.     }
  104. 偏移
  105. 下面的例子偏移所选的实体。
  106.     void test()
  107.     {
  108.         Editor ed=Tools.Editor;
  109.         PromptEntityResult res =ed.GetEntity("please select an entity:\n");
  110.         Tools.Offset(res.ObjectId,20);
  111.     }
  112. 旋转
  113. 下面的例子旋转所选的实体45度角。
  114.     void test()
  115.     {
  116.         Editor ed=Tools.Editor;
  117.         PromptEntityResult res =ed.GetEntity("please select an entity:\n");
  118.         Point3d pt1=ed.GetPoint("Select the base point of rotation:\n").Value;
  119.         Tools.Rotate(res.ObjectId,pt1,45);//注意:是角度而不是弧度
  120.     }
  121. 缩放
  122. 下面的例子放大所选的实体2倍。
  123.     void test()
  124.     {
  125.         Editor ed=Tools.Editor;
  126.         PromptEntityResult res =ed.GetEntity("please select an entity:\n");
  127.         Point3d pt1=ed.GetPoint("Select the base point of scaling:\n").Value;
  128.         Tools.Scale(res.ObjectId,pt1,2);
  129.     }
  130. 加入符号表记录
  131. 下面的例子加入一个名为Test的层
  132.     void CreateLayer()
  133.     {
  134.         LayerTableRecord ltr=new LayerTableRecord();
  135.         ltr.Name="Test";
  136.         Tools.AddSymbolTableRecord(ltr,Tools.Database.LayerTableId);
  137.     }
  138. 获取符号表遍历器
  139. 下面的例子使用GetIteratorForSymbolTable()来遍历层表,并输出层的名字。
  140.     void test()
  141.     {
  142.         DBObjectCollection objs= Tools.GetIteratorForSymbolTable(Tools.Database.LayerTableId);
  143.         foreach (DBObject obj in objs)
  144.         {
  145.             LayerTableRecord ltr=(LayerTableRecord)obj;
  146.             Tools.Editor.WriteMessage(ltr.Name+"\n");
  147.         }
  148.     }
  149. 选择过一个点的所有实体
  150.     void test()
  151.     {
  152.         PromptPointResult res=Tools.Editor.GetPoint("Please select a point:\n");
  153.         Point3d pt=res.Value;
  154.         int n=Tools.SelectAtPoint(pt).Count;
  155.         Tools.Editor.WriteMessage(n.ToString());
  156.     }

  157.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-9-29 11:45:29 | 显示全部楼层
已经下载,很好用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-17 13:22:35 | 显示全部楼层
我正在为DOTNETARX下的XData设置发愁,太感谢楼主了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-9-22 23:09:15 | 显示全部楼层
谢谢楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2026-10-12 03:12 , Processed in 0.582053 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表