public static List <DBText> Command(string Text, double Size, TextPosition Position) { var Return = new List <DBText>(); using (DocumentLock DL = AC.Doc.LockDocument()) { var acSSet = Utils.Select.MultiObjs(); var acPolys = Utils.Get.GetEntity <Polyline>(acSSet); acPolys.ForEach(acPoly => { var CP = Utils.PointUtil.GetCenterP(acPoly); var Vec = Utils.Vector.GetByLong(acPoly); var Ang = Utils.Vector.To2D(Vec).Angle; if (Ang > Math.PI / 2 && Ang <= Math.PI / 2 * 3) { Ang += Math.PI; } Return.Add(CADUtil.CreateText(CP, Size, Ang, Position, Text)); }); AC.Editor.PostCommandPrompt(); } return(Return); }
/// <summary> /// 폴리라인 중심에 면적 입력하기(복수 선택) /// </summary> /// <param name="TextSize">문자 크기</param> /// <param name="n">반올림 자리수</param> public void CreateMultiObj(double TextSize = 100, int n = 2) { #region 복수 객체 선택 var acSSet = Utils.Select.MultiObjs(); if (acSSet == null) { return; } var acEnts = Utils.Get.Entity(acSSet, typeof(Polyline)); #endregion #region 면적 입력 acEnts.ForEach(acEnt => { var acPolyline = acEnt as Polyline; var p = Utils.PointUtil.GetCenterP(acPolyline); var PL_Area = acPolyline.Area; // mm² var Area = Math.Round(PL_Area / 100000, n); // m² var acText = CADUtil.CreateText(p, TextSize, Area.ToString() + "m²", ColorIndex.Green); acDocEd.WriteMessage(" 폴리라인에 면적 [" + acText.TextString + "]이 입력되었습니다. \n"); }); #endregion acDocEd.PostCommandPrompt(); }
private void Sb_Refresh_Click(object sender, EventArgs e) { var R = GC.DataSource as List <Room>; R.ForEach(r => { if (r.Handle == new Handle()) { return; } var handle = r.Handle; // Children 제거 Utils.Get.ObjectIDs(r.ChildrenH).Where(id => !id.IsErased).ToList().ForEach(id => CADUtil.Erase(id)); r.Children.Clear(); r.ChildrenH.Clear(); var ObjId = new ObjectId(); AC.DB.TryGetObjectId(handle, out ObjId); if (ObjId.IsErased) { r.IsLink = false; r.Area = 0; return; } var acPoly = Utils.Get.GetObject <Polyline>(ObjId); if (acPoly == null) { return; } r.Area = Math.Round(acPoly.Area / 1000000, 4); var cen = Utils.PointUtil.GetCenterP(acPoly); var pos1 = new Point3d(cen.X, cen.Y + 150, cen.Z); var pos2 = new Point3d(cen.X, cen.Y - 150, cen.Z); // 이름 적기 r.ChildrenH.Add(CADUtil.CreateText(pos1, 200, r.Name, ColorIndex.Red).Handle); // 길이 적기 var objIds = Utils.DIMUtil.ReCreate(acPoly, DB.DimLayerId, DB.DimStyleId); r.ChildrenH.AddRange(Utils.Get.ObjHandles(objIds)); // 면적 적기 r.ChildrenH.Add(CADUtil.CreateText(pos2, 200, Math.Round(r.Area, 4).ToString(), ColorIndex.Red).Handle); }); GV.RefreshData(); DB.ROOM = GC.DataSource as List <Room>; }
/// <summary> /// 폴리라인 중심에 면적 입력하기(단일 선택) /// </summary> public void Create_PolylineAreaText() { bool B = true; while (B) { var acSSet = SelectAPolyline(); if (acSSet == null) { B = false; return; } using (Transaction T = AC.DB.TransactionManager.StartTransaction()) { #region 폴리라인 선택 var Lines = from id in acSSet.GetObjectIds() let acEnt = T.GetObject(id, OpenMode.ForWrite) as Entity where acEnt is Polyline let acLine = acEnt as Polyline select acLine; if (!Lines.Any()) { return; } var acPolyline = Lines.ToList().First(); #endregion #region 면적 입력 var p = acPolyline.NumberOfVertices == 4 ? GetCenterPoint(acPolyline) : GetVisualCenterPoint(acPolyline); var PL_Area = acPolyline.Area; var Area = Math.Round(PL_Area / 100000, 2); var acText = CADUtil.CreateText(p, 100, Area.ToString() + "m²"); acText.Color = ColorIndex.Green; AC.Editor.WriteMessage(" 폴리라인에 면적 [" + acText.TextString + "]이 입력되었습니다. \n"); #endregion T.Commit(); } } AC.Editor.PostCommandPrompt(); }
void RefreshRoom(Handle handle) { var R = GC.DataSource as List <Room>; var A = R.Where(a => a.Handle.Equals(handle)); if (!A.Any()) { return; } var r = A.First(); // Children 제거 CADUtil.Erases(Utils.Get.ObjectIDs(r.ChildrenH)); r.Children.Clear(); r.ChildrenH.Clear(); var ObjId = new ObjectId(); AC.DB.TryGetObjectId(handle, out ObjId); var acPoly = Utils.Get.GetObject <Polyline>(ObjId); if (acPoly == null) { return; } r.Area = Math.Round(acPoly.Area / 1000000, 4); var cen = Utils.PointUtil.GetCenterP(acPoly); var pos1 = new Point3d(cen.X, cen.Y + 150, cen.Z); var pos2 = new Point3d(cen.X, cen.Y - 150, cen.Z); // 이름 적기 r.ChildrenH.Add(CADUtil.CreateText(pos1, 200, r.Name, ColorIndex.Red).Handle); // 길이 적기 var objIds = Utils.DIMUtil.ReCreate(acPoly, DB.DimLayerId, DB.DimStyleId); r.ChildrenH.AddRange(Utils.Get.ObjHandles(objIds)); // 면적 적기 r.ChildrenH.Add(CADUtil.CreateText(pos2, 200, Math.Round(r.Area, 4).ToString(), ColorIndex.Red).Handle); GV.RefreshData(); DB.ROOM = GC.DataSource as List <Room>; }
/// <summary> /// 폴리라인 중심에 면적 입력하기(복수 선택) /// </summary> public void Create_PolylineAreaTexts() { var acSSet = SelectPolylines(); if (acSSet == null) { return; } using (Transaction T = AC.DB.TransactionManager.StartTransaction()) { #region 폴리라인 선택 var Lines = from id in acSSet.GetObjectIds() let acEnt = T.GetObject(id, OpenMode.ForWrite) as Entity where acEnt is Polyline let acLine = acEnt as Polyline where acLine.Closed select acLine; if (!Lines.Any()) { return; } #endregion int n = 0; Lines.ToList().ForEach(acPolyline => { #region 면적 입력 var p = acPolyline.NumberOfVertices == 4 ? GetCenterPoint(acPolyline) : GetVisualCenterPoint(acPolyline); var PL_Area = acPolyline.Area; var Area = Math.Round(PL_Area / 100000, 2); var acText = CADUtil.CreateText(p, 100, Area.ToString() + "m²"); acText.Color = ColorIndex.Green; n++; #endregion }); T.Commit(); AC.Editor.WriteMessage("\n" + n.ToString() + "개의 폴리라인에 면적이 입력되었습니다."); AC.Editor.PostCommandPrompt(); } }
void RefreshRoom(ObjectId id) { var R = GC.DataSource as List <Room>; var A = R.Where(x => x.Id.Equals(id)); if (!A.Any()) { return; } var r = A.First(); //MessageBox.Show("테스트1"); r.Children.ForEach(cid => CADUtil.Erase(cid)); //MessageBox.Show("테스트2"); r.Children.Clear(); var acPoly = Utils.Get.GetObject <Polyline>(id); if (acPoly == null) { return; } r.Area = Math.Round(acPoly.Area / 1000000, 4); var cen = Utils.PointUtil.GetCenterP(acPoly); var pos1 = new Point3d(cen.X, cen.Y + 150, cen.Z); var pos2 = new Point3d(cen.X, cen.Y - 150, cen.Z); //var acDimLayerId = Utils.Layer.Create("HDC_Dimension", ColorIndex.Green); // 레이어 생성 //var acDimStyleId = Utils.DIMUtil.Create_HDC_DimensionStyle("HDC_Dim_Style"); // 치수 스타일 생성 // 이름 적기 r.Children.Add(CADUtil.CreateText(pos1, 200, r.Name).Id); // 길이 적기 r.Children.AddRange(Utils.DIMUtil.ReCreate(acPoly, DB.DimLayerId, DB.DimStyleId)); // 면적 적기 //r.Children.Add(AC.Drawing.CreateText(pos2, Math.Round(r.Area, 4).ToString())); GV.RefreshData(); DB.ROOM = GC.DataSource as List <Room>; }
void LinkRoom() { // F = GC.SelectedRows // f = GC.GetFocusedRow(); #region 택 var F = Utils.GC.GetSelectedRows <Room>(GV); if (F.Count == 0) { return; } #endregion #region 치수 foreach (Room f in F) { var msg = string.Format("실 {0} 을/를 선택하세요", f.Name); if (new U_Msgbox("실(공간) 선택", msg).ShowDialog() != DialogResult.OK) { break; } var acSSet = Utils.Select.SingleObj(string.Format("실 {0} 를 선택하세요", f.Name)); if (acSSet == null) { continue; } var acPolys = Utils.Get.GetEntity <Polyline>(acSSet); if (acPolys.Count == 0) { continue; } var acPoly = acPolys.First(); if (acPoly.Id == ObjectId.Null) { continue; } f.Id = acPoly.Id; f.Handle = acPoly.Handle; f.IsLink = true; f.Area = Math.Round(acPoly.Area / 1000000, 4); var A = F.Where(a => a.Handle.Equals(f.Handle)); if (A.Any()) { RefreshRoom(f.Handle); } else { var cen = Utils.PointUtil.GetCenterP(acPoly); var pos1 = new Point3d(cen.X, cen.Y + 150, cen.Z); var pos2 = new Point3d(cen.X, cen.Y - 150, cen.Z); // 이름 적기 f.ChildrenH.Add(CADUtil.CreateText(pos1, 200, f.Name, ColorIndex.Red).Handle); // 길이 적기 var objIds = Utils.DIMUtil.ReCreate(acPoly, DB.DimLayerId, DB.DimStyleId); f.ChildrenH.AddRange(Utils.Get.ObjHandles(objIds)); // 면적 적기 f.ChildrenH.Add(CADUtil.CreateText(pos2, 200, Math.Round(f.Area, 4).ToString(), ColorIndex.Red).Handle); } } #endregion GV.RefreshData(); DB.ROOM = GC.DataSource as List <Room>; }
public void CreateText_Polyline_Center() { var acPolyLines = new List <Polyline>(); using (Transaction T = AC.DB.TransactionManager.StartTransaction()) { try { #region 폴리라인 선택 SelectionSet acSSet = SelectLines(); var Lines = from id in acSSet.GetObjectIds() let acEnt = T.GetObject(id, OpenMode.ForWrite) as Entity where acEnt is Polyline let acLine = acEnt as Polyline select acLine; if (!Lines.Any()) { return; } acPolyLines.AddRange(Lines.ToArray()); #endregion } catch (System.Exception ex) { AC.Editor.WriteMessage(Convert.ToString(ex)); } } #region 실행 acPolyLines.ForEach(acPolyline => { double X = 0; double Y = 0; int N = acPolyline.NumberOfVertices; double length = 0; double ang = 0; if (U002.Instance.rotate) { for (int i = 0; i < N; i++) { try { var L = acPolyline.GetLineSegment2dAt(i); var CP = CADUtil.GetCenterPoint2d(L); X += CP.X; Y += CP.Y; if (length < L.Length) { length = L.Length; ang = CADUtil.GetVector(L).Angle; } } catch { N = N - 1; } } if (ang > Math.PI / 2 && ang <= Math.PI / 2 * 3) { ang += Math.PI; } } var P = acPolyline.NumberOfVertices == 4 ? GetCenterPoint(acPolyline) : GetVisualCenterPoint(acPolyline); var acText = CADUtil.CreateText(P, T_Size, ang, T_Position, Txt); }); #endregion AC.Editor.WriteMessage("\nPolyline 내부에 Text생성이 완료되었습니다."); AC.Editor.PostCommandPrompt(); }
public static List <ObjectId> Create2(Polyline acPoly, ObjectId LayerID, ObjectId StyleID) { List <ObjectId> Return = new List <ObjectId>(); #region 객체 받기 var A = Utils.Get.PointCollection(acPoly); var acCPSSet = AC.Editor.SelectCrossingPolygon(A).Value; if (acCPSSet.Count == 0) { return(new List <ObjectId>()); } var Texts = Utils.Get.GetEntity <DBText>(acCPSSet); var Dims = Utils.Get.GetEntity <AlignedDimension>(acCPSSet); #endregion #region 면적 지우기 if (Texts.Any()) { var acTexts = Texts.Where(x => Utils.Get.IsDouble(x.TextString)).ToList(); if (acTexts.Count == 1) { using (Transaction t = AC.DB.TransactionManager.StartTransaction()) { acTexts.ForEach(text => { var B = t.GetObject(text.Id, OpenMode.ForWrite) as DBText; B.Erase(true); t.Commit(); }); } } } #endregion #region 치수선 지우기 & 치수선 생성 if (Dims.Any()) { using (Transaction t = AC.DB.TransactionManager.StartTransaction()) { Dims.ToList().ForEach(Dim => { var acDim = t.GetObject(Dim.Id, OpenMode.ForWrite) as AlignedDimension; if (Utils.PointUtil.IsInsidePolyline(acPoly, acDim.TextPosition, true)) { acDim.Erase(true); } }); t.Commit(); } } Return.AddRange(Utils.DIMUtil.Create(A.Cast <Point3d>().ToList(), 100, false, StyleID, LayerID)); #endregion #region 새로 면적 입력 var p = Utils.PointUtil.Move(Utils.PointUtil.GetCenterP(acPoly), 0, -100); var PL_Area = acPoly.Area; // mm² var Area = Math.Round(PL_Area / 1000000, 3); // m² var acText = CADUtil.CreateText(p, 200, Area.ToString(), ColorIndex.Red); //var acText = CAD.CreateText(p, 100, Area.ToString() + "m²", TxtStyleId, ColorIndex.Green); Return.Add(acText.Id); #endregion return(Return); }