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,执行对应的命令就好了
执行命令选择实体:

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


浙公网安备 33010602011771号