public static ObjectId CreateLayerContourPanel() { // Создание контура плитки var layer = new AcadLib.Layers.LayerInfo("АР_Контур-панели"); layer.LineWeight = LineWeight.LineWeight030; return AcadLib.Layers.LayerExt.GetLayerOrCreateNew(layer); }
public static ObjectId CreateLayerContourPanel() { // Создание контура плитки var layer = new AcadLib.Layers.LayerInfo("АР_Контур-панели"); layer.LineWeight = LineWeight.LineWeight030; return(AcadLib.Layers.LayerExt.GetLayerOrCreateNew(layer)); }
/// <summary> /// Построение полилиний контура у блоков Блок-Секций. /// Выбор блоков пользователем. /// </summary> public static void CreateContour(Document doc) { using (var t = doc.TransactionManager.StartTransaction()) { // Выбор блоков SelectSection select = new SelectSection(doc); var selIds = select.Select(false); if (selIds.Count == 0) { throw new Exception("Не найдены блоки Блок-Секций"); } else { doc.Editor.WriteMessage($"\nВыбрано {selIds.Count} блоков Блок-Секций."); } int count = 0; AcadLib.Layers.LayerInfo layInfo = new AcadLib.Layers.LayerInfo("Defpoints"); ObjectId layerIdPl = AcadLib.Layers.LayerExt.GetLayerOrCreateNew(layInfo); ObjectId msId = doc.Database.CurrentSpaceId; foreach (var idBlRefSec in selIds) { var ent = idBlRefSec.GetObject(OpenMode.ForRead) as Entity; if (ent is BlockReference) { var blRefSec = (BlockReference)ent; string blName = blRefSec.GetEffectiveName(); if (SectionService.IsBlockNameSection(blName)) { try { Polyline plLayer; var pl = FindContourPolyline(blRefSec, out plLayer); if (pl != null) { var idPlCopy = pl.Id.CopyEnt(msId); var plCopy = idPlCopy.GetObject(OpenMode.ForWrite, false, true) as Polyline; plCopy.LayerId = layerIdPl; plCopy.TransformBy(blRefSec.BlockTransform); count++; } } catch (Exception ex) { Inspector.AddError($"Ошибка построения контура для блока '{blName}' - {ex.Message}", blRefSec, System.Drawing.SystemIcons.Error); } } } } doc.Editor.WriteMessage($"\nПостроено {count} полилиний контура блоков Блок-Секций."); t.Commit(); } }
public void AKR_InsertWindows() { CommandStart.Start(doc => { // Файл шаблонов окон. string fileWins = Path.Combine(CurDllDir, Settings.Default.TemplateBlocksAkrWindows); // Слой для окон AcadLib.Layers.LayerInfo layerWin = new AcadLib.Layers.LayerInfo(Settings.Default.LayerWindows); layerWin.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.ByAci, 4); // Выбор и вставка блока окна. AcadLib.Blocks.Visual.VisualInsertBlock.InsertBlock(fileWins, n => n.StartsWith(Settings.Default.BlockWindowName), layerWin); }); }
public static void CreateContours2(List <Apartment> apartments) { Database db = HostApplicationServices.WorkingDatabase; using (var t = db.TransactionManager.StartTransaction()) { db.RegApp(Commands.RegAppApartBase); ProgressMeter progress = new ProgressMeter(); progress.SetLimit(apartments.Count); progress.Start("Построение контуров квартир..."); foreach (var apart in apartments) { progress.MeterProgress(); try { List <Polyline> colPl = new List <Polyline>(); Point3dCollection pts = new Point3dCollection(); foreach (var module in apart.Modules) { var blRefModule = module.IdBlRef.GetObject(OpenMode.ForRead, false, true) as BlockReference; foreach (var wall in module.Elements.OfType <WallElement>()) { var pl = wall.Contour?.Clone() as Polyline; if (pl == null) { pl = wall.ExtentsClean.GetPolyline(); } pl.TransformBy(blRefModule.BlockTransform); colPl.Add(pl); } } var plContour = colPl.GetExteriorContour(); var btrApart = apart.IdBtr.GetObject(OpenMode.ForWrite) as BlockTableRecord; var blRefApart = apart.IdBlRef.GetObject(OpenMode.ForRead, false, true) as BlockReference; var layerApartInfo = new AcadLib.Layers.LayerInfo(blRefApart.Layer); AcadLib.Layers.LayerExt.CheckLayerState(layerApartInfo); plContour.SetXData(Commands.RegAppApartBase, 1); plContour.SetDatabaseDefaults(); plContour.LayerId = blRefApart.LayerId; ClearOldContour(btrApart); btrApart.AppendEntity(plContour); t.AddNewlyCreatedDBObject(plContour, true); Hatch h = new Hatch(); h.SetXData(Commands.RegAppApartBase, 1); h.SetDatabaseDefaults(); h.LayerId = blRefApart.LayerId; h.SetHatchPattern(HatchPatternType.PreDefined, "Solid"); btrApart.AppendEntity(h); t.AddNewlyCreatedDBObject(h, true); h.Associative = true; var idsH = new ObjectIdCollection(new[] { plContour.Id }); h.AppendLoop(HatchLoopTypes.Default, idsH); h.EvaluateHatch(true); var btrDrawOrder = btrApart.DrawOrderTableId.GetObject(OpenMode.ForWrite) as DrawOrderTable; btrDrawOrder.MoveToBottom(new ObjectIdCollection(new[] { h.Id })); btrApart.SetBlRefsRecordGraphicsModified(); } catch (System.Exception ex) { Inspector.AddError($"Ошибка при построении контура или штриховки в квартире {apart.Name} - {ex.Message}", apart.IdBlRef, System.Drawing.SystemIcons.Error); } } progress.Stop(); t.Commit(); } }
public static void CreateContours(List <Apartment> apartments) { Database db = HostApplicationServices.WorkingDatabase; using (var t = db.TransactionManager.StartTransaction()) { db.RegApp(Commands.RegAppApartBase); foreach (var apart in apartments) { List <Point2d> pts = new List <Point2d>(); foreach (var module in apart.Modules) { var blRefModule = module.IdBlRef.GetObject(OpenMode.ForRead, false, true) as BlockReference; foreach (var wall in module.Elements.OfType <WallElement>()) { //var extWall = wall.ExtentsClean; //extWall.TransformBy(blRefModule.BlockTransform); //pts.Add(extWall.MinPoint.Convert2d()); //pts.Add(new Point2d (extWall.MinPoint.X, extWall.MaxPoint.Y)); //pts.Add(extWall.MaxPoint.Convert2d()); //pts.Add(new Point2d(extWall.MaxPoint.X, extWall.MinPoint.Y)); } } Point2d centroid; var contour = GetConvexHull(pts, out centroid); var blRefApart = apart.IdBlRef.GetObject(OpenMode.ForRead, false, true) as BlockReference; var layerApartInfo = new AcadLib.Layers.LayerInfo(blRefApart.Layer); AcadLib.Layers.LayerExt.CheckLayerState(layerApartInfo); Polyline pl = new Polyline(); pl.SetXData(Commands.RegAppApartBase, 1); pl.SetDatabaseDefaults(); pl.LayerId = blRefApart.LayerId; for (int i = 0; i < contour.Count; i++) { pl.AddVertexAt(i, contour[i], 0, 0, 0); } RectanglePolyline(pl, centroid); var btrApart = apart.IdBtr.GetObject(OpenMode.ForWrite) as BlockTableRecord; ClearOldContour(btrApart); btrApart.AppendEntity(pl); t.AddNewlyCreatedDBObject(pl, true); Hatch h = new Hatch(); h.SetXData(Commands.RegAppApartBase, 1); h.SetDatabaseDefaults(); h.LayerId = blRefApart.LayerId; h.SetHatchPattern(HatchPatternType.PreDefined, "Solid"); btrApart.AppendEntity(h); t.AddNewlyCreatedDBObject(h, true); h.Associative = true; var idsH = new ObjectIdCollection(new[] { pl.Id }); h.AppendLoop(HatchLoopTypes.Default, idsH); h.EvaluateHatch(true); var btrDrawOrder = btrApart.DrawOrderTableId.GetObject(OpenMode.ForWrite) as DrawOrderTable; btrDrawOrder.MoveToBottom(new ObjectIdCollection(new[] { h.Id })); btrApart.SetBlRefsRecordGraphicsModified(); } t.Commit(); } }