EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 732|回复: 0
打印 上一主题 下一主题

[实体对象] GetObjectSnapPoints获取对象捕捉点

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 15:07:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面代码演示如何通过Auto CAD的.Net API中的GetObjectSnapPoints函数获取对象上的捕捉点:


  1. using System;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.Geometry;

  7. namespace SnapPoints
  8. {
  9.     public class Class1
  10.      {
  11.          [CommandMethod("spnt")]
  12.         public void GetSnapPnts()
  13.          {
  14.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

  15.             PromptEntityOptions opt = new PromptEntityOptions("\n选择实体:");
  16.              opt.SetRejectMessage("\n不接受的实体类型,请重新选择:");
  17.              opt.AddAllowedClass(typeof(Line), true);
  18.              opt.AddAllowedClass(typeof(Circle), true);
  19.              opt.AddAllowedClass(typeof(Arc), true);
  20.              opt.AddAllowedClass(typeof(Ellipse), true);
  21.              opt.AddAllowedClass(typeof(BlockReference), true);
  22.             PromptEntityResult EntRes = ed.GetEntity(opt);
  23.             if (EntRes.Status != PromptStatus.OK)
  24.              { return; }

  25.              PromptPointOptions PntOpt   = new PromptPointOptions("\n选择参考点:");
  26.              PromptPointResult PntRes;
  27.              PntRes = ed.GetPoint(PntOpt);

  28.             if (PntRes.Status == PromptStatus.OK)
  29.              {
  30.                 using (DocumentLock docLock = Application.DocumentManager.MdiActiveDocument.LockDocument())
  31.                  {
  32.                     Database db = HostApplicationServices.WorkingDatabase;
  33.                     using (Transaction trans = db.TransactionManager.StartTransaction())
  34.                      {
  35.                         
  36.                         BlockTable bt;
  37.                          bt = trans.GetObject(db.BlockTableId,
  38.                                                      OpenMode.ForRead) as BlockTable;
  39.                         BlockTableRecord btr;
  40.                          btr = trans.GetObject(bt[BlockTableRecord.ModelSpace],
  41.                                                         OpenMode.ForWrite) as BlockTableRecord;

  42.                         Entity ent = (Entity)trans.GetObject(EntRes.ObjectId, OpenMode.ForRead);

  43.                         Point3d pickPnt = (Point3d)PntRes.Value;
  44.                          ed.WriteMessage("\n参考点:" + pickPnt.ToString());
  45.    
  46.                          Point3dCollection snapPnts = new Point3dCollection();
  47.                          IntegerCollection geomIds = new IntegerCollection(1);
  48.                          geomIds.Add(0);

  49.                         int[] ModeNums = { 1, 2, 3, 4, 5, 7, 8, 9, 10 };
  50.                         foreach (int j in ModeNums)
  51.                          {
  52.                             try
  53.                              {
  54.                                  ObjectSnapModes objSnapMode = (ObjectSnapModes)Enum.Parse(typeof(ObjectSnapModes), j.ToString());
  55.                                  snapPnts.Clear();

  56.                                  ent.GetObjectSnapPoints(objSnapMode, 0, pickPnt, pickPnt, Matrix3d.Identity, snapPnts, geomIds);
  57.                                 if (snapPnts.Count>0)
  58.                                  {
  59.                                     for (int i = 0; i < snapPnts.Count; i++)
  60.                                      {
  61.                                         Line Lobj = new Line(pickPnt, snapPnts);
  62.                                          btr.AppendEntity(Lobj);
  63.                                          trans.AddNewlyCreatedDBObject(Lobj,true);
  64.                                          ed.WriteMessage("\n" + objSnapMode.ToString() + ": " + (i + 1).ToString() + "# " + snapPnts.ToString());
  65.                                      }
  66.                                     
  67.                                  }
  68.                                 else
  69.                                  {
  70.                                      ed.WriteMessage("\n" + objSnapMode.ToString() + ": None ");
  71.                                  }
  72.                              }
  73.                             catch { }

  74.                          }
  75.                          trans.Commit();

  76.                      }
  77.                  }
  78.              }
  79.          }
  80.      }
  81. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-27 16:36

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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