AutoCAD.NET二次开发根据所选的实体范围画闭合的多段线

在CAD开发中,总有客户提需求根据多宗地线的范围生成图框,也就是根据多段线多段线生成一条闭合的多段线。发现公司的之前的人是通过转Geometry来扩展范围面,其实没必要那么麻烦,CAD提供了对应的接口,我们只要利用它的接口就行了,方便又快速。

下面直接上代码:

 1         [Autodesk.AutoCAD.Runtime.CommandMethod("HUXFACE")]
 2         public static void GetPolineForEntity() 
 3         {
 4             var db = HostApplicationServices.WorkingDatabase;
 5              var ed =  Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
 6              var selectResult = ed.GetSelection();
 7              if (selectResult.Status == PromptStatus.OK) 
 8              {
 9                  using (var acTran = db.TransactionManager.StartTransaction()) 
10                  {
11                      BlockTable blkTbl = acTran.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
12                      BlockTableRecord blktbcrd = acTran.GetObject(blkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
13                      Extents3d ext = new Extents3d();//要画的图框的范围面
14                      foreach (var entid in selectResult.Value.GetObjectIds())//遍历所选实体
15                      {
16                          var ent = acTran.GetObject(entid, OpenMode.ForRead) as Entity;
17                          if (ent != null)
18                          {
19                              var evp = ent.GeometricExtents;//通过这个属性可以获取实体的范围面
20                              ext.AddExtents(evp);  //累加扩展面的范围                          
21                          }
22                      }
23                      var pl =ext.ToPolyline();
24                      blktbcrd.AppendEntity(pl);
25                      acTran.AddNewlyCreatedDBObject(pl,true);
26                      acTran.Commit();             
27                      
28                  } 
29              }
30         }

 

下面是对Extents3d的扩展,通过它可以调用Extents3d.ToPolyline()来获取范围信息的最大闭合多段线线,其实是根据Extents3d的最大点坐标和做小点坐标来生成多段线

 1         public static Polyline ToPolyline(this Extents3d ex)
 2         {
 3             var pl = new Polyline();
 4             pl.AddVertexAt(0, new Point2d(ex.MinPoint.X, ex.MinPoint.Y), 0, 0, 0);
 5             pl.AddVertexAt(1, new Point2d(ex.MinPoint.X, ex.MaxPoint.Y), 0, 0, 0);
 6             pl.AddVertexAt(2, new Point2d(ex.MaxPoint.X, ex.MaxPoint.Y), 0, 0, 0);
 7             pl.AddVertexAt(3, new Point2d(ex.MaxPoint.X, ex.MinPoint.Y), 0, 0, 0);
 8             pl.Closed = true;
 9             return pl;
10         }

演示效果:通过netload命令加载我们开发好的dll,执行对应的命令就好了

执行命令选择实体:

按回车生成我们所需要的闭合线,也就是图框

 

posted @ 2019-08-01 16:36  IT浪客  阅读(1532)  评论(0)    收藏  举报