EaBIM

标题: [实体对象] GetObjectSnapPoints获取对象捕捉点 [打印本页]

作者: 萧闫子    时间: 2014-1-8 15:07
标题: [实体对象] GetObjectSnapPoints获取对象捕捉点
下面代码演示如何通过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. }
复制代码





欢迎光临 EaBIM (https://eabim.net/) Powered by Discuz! X3.2