找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1326|回复: 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. 下面的例子在AutoCAD中加入一个组。
  36.      void MakeGroup()
  37.     {
  38.         PromptSelectionResult res=Tools.Editor.GetSelection();//选择对象
  39.         SelectionSet ss=res.Value; //获取选择集
  40.         ObjectId[] ids=ss.GetObjectIds(); //获取表示所选对象的objectId数组
  41.         Group gp=new Group("grouptest",true);//创建名为grouptest的组对象
  42.         gp.Append(new ObjectIdCollection(ids));// 加入上面的所选对象到组中
  43.         Tools.AddDictionaryObject("ASDK_GROUPTEST",gp,Tools.Database.GroupDictionaryId);
  44.         //使用AddDictionaryObject()函数把组加入到AutoCAD中。
  45.    }
  46. 扩展记录
  47. 下面的例子在AutoCAD中加入一个扩展记录。
  48.       
  49.       
  50.    void MakeXRecord()
  51.     {
  52.         Xrecord rec=new Xrecord();//创建一个扩展记录对象
  53.         rec.Data=new ResultBuffer(
  54.                 new TypedValue((int)DxfCode.Text,"This is a test"),
  55.                 new TypedValue((int)DxfCode.Int8,0),
  56.                 new TypedValue((int)DxfCode.UcsOrg,new Point3d(0,0,0))
  57.         );//使用Xreord的Data属性来设置Xreord的内容
  58.         Tools.AddDictionaryObject("test",rec,Tools.Database.NamedObjectsDictionaryId);
  59.         //使用AddDictionaryObject()函数把扩展记录加入到AutoCAD中。
  60.         foreach (TypedValue rb in rec.Data) //输出刚才加入的条目
  61.         {
  62.          Tools.Editor.WriteMessage(string.Format("TypedCode={0},Value={1}\n",rb.TypeCode,rb.Value));
  63.         }
  64.     }
  65. 扩展数据
  66. 下面的例子在AutoCAD中加入扩展数据。
  67.     void MakeXData()
  68.     {
  69.         Lines line=new Lines(new Point3d(0,0,0),new Point3d(100,100,0));
  70.         //创建直线
  71.         RegAppTableRecord app=new RegAppTableRecord();
  72.         //加入扩展数据到直线,首先注册程序
  73.         app.Name="MyApp";
  74.         Tools.AddSymbolTableRecord(app,Tools.Database.RegAppTableId);
  75.         //使用AddSymbolTableRecord 函数把app加入到RegAppTable。

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

  156.   [/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, 2024-12-23 17:43 , Processed in 0.404085 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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