Exemplo n.º 1
0
 public static ObjectId CreateLayerContourPanel()
 {
     // Создание контура плитки
     var layer = new AcadLib.Layers.LayerInfo("АР_Контур-панели");
     layer.LineWeight = LineWeight.LineWeight030;
     return AcadLib.Layers.LayerExt.GetLayerOrCreateNew(layer);
 }
Exemplo n.º 2
0
        public static ObjectId CreateLayerContourPanel()
        {
            // Создание контура плитки
            var layer = new AcadLib.Layers.LayerInfo("АР_Контур-панели");

            layer.LineWeight = LineWeight.LineWeight030;
            return(AcadLib.Layers.LayerExt.GetLayerOrCreateNew(layer));
        }
Exemplo n.º 3
0
        /// <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();
            }
        }
Exemplo n.º 4
0
 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);
     });
 }
Exemplo n.º 5
0
        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();
            }
        }
Exemplo n.º 6
0
        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();
            }
        }
Exemplo n.º 7
0
 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);
     });
 }