public List <Polyline> Create_Boundaries_Util(double Dis = 100) { var Return = new List <Polyline>(); using (DocumentLock DL = AC.Doc.LockDocument()) { #region 택 var acSSet = Utils.Select.MultiObjs(); var acEnts = Utils.Get.Entity(acSSet, typeof(Polyline)); #endregion #region 폴리라인 연장시켜 폴리라인 생성 acEnts.Where(x => x is Polyline).ToList().ForEach(acEnt => { var acPoly = acEnt as Polyline; var acTempLines = new List <Line>(); // 작업 완료 후 지울 보조선 #region 폴리라인 선분 연장선 생성 for (int i = 0; i < acPoly.NumberOfVertices; i++) { try { var acLine = acPoly.GetLineSegmentAt(i); var sp = acLine.StartPoint; var ep = acLine.EndPoint; var Direction = acLine.Direction; var SP = sp - Direction * Dis; var EP = ep + Direction * Dis; var L = CADUtil.CreateLine(SP, EP); acTempLines.Add(L); } catch { } } #endregion #region 택된 폴리라인의 중앙점 var CP = Utils.PointUtil.GetCenterP(acPoly); #endregion #region 밀폐된 공간에서 Boundary 생성 // 선택된 객체 말고 모두 숨긴뒤에 실행해야 오류가 줄어듬 var objColl = AC.Editor.TraceBoundary(CP, true); var acObjs = from a in objColl.Cast <Entity>().ToList() select a; if (acObjs.Any()) { using (Transaction T = AC.DB.TransactionManager.StartTransaction()) { var BT = T.GetObject(AC.DB.BlockTableId, OpenMode.ForRead) as BlockTable; var BTR = T.GetObject(BT[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; acObjs.ToList().ForEach(a => { var Poly = a as Polyline; BTR.AppendEntity(Poly); T.AddNewlyCreatedDBObject(Poly, true); Return.Add(Poly); }); T.Commit(); } } #endregion #region 연장선 제거 acTempLines.ForEach(a => CADUtil.Erase(a.Id)); #endregion }); #endregion } return(Return); }