Beispiel #1
0
 public Caption(List <MarkSb> marksSB)
 {
     _db             = HostApplicationServices.WorkingDatabase;
     _marksSB        = marksSB;
     _captionLayer   = Caption.GetLayerForMark(_db);
     _idTextstylePik = DbExtensions.GetTextStylePIK(_db);
 }
Beispiel #2
0
 public void CaptionPanels()
 {
     _captionLayer = Caption.GetLayerForMark(_db);
     foreach (MarkSb markSb in _marksSB)
     {
         if (HostApplicationServices.Current.UserBreak())
         {
             throw new Exception("Отменено пользователем.");
         }
         AddMarkToPanelBtr(markSb.MarkSbClean, markSb.IdBtr);
         foreach (MarkAr markAr in markSb.MarksAR)
         {
             AddMarkToPanelBtr(markAr.MarkARPanelFullName, markAr.IdBtrAr);
         }
     }
 }
Beispiel #3
0
        // Покраска панелей в модели (по блокам зон покраски)
        public void PaintPanels()
        {
            // Запрос начальных значений - Аббревиатуры, Номера первого этажа, Номера первого листа
            //promptStartOptions();
            StartOptions = StartOptions.PromptStartOptions();

            // Определение марок покраски панелей (Марок АР).
            // Создание определениц блоков марок АР.
            // Покраска панелей в чертеже.

            // В Модели должны быть расставлены панели Марки СБ и зоны покраски.
            // сброс списка цветов.
            _colors = new List<Paint>();

            // Определение зон покраски в Модели
            _colorAreas = ColorArea.GetColorAreas(SymbolUtilityServices.GetBlockModelSpaceId(_db), this);
            RTree<ColorArea> rtreeColorAreas = ColorArea.GetRTree(_colorAreas);
            // Бонус - покраска блоков плитки разложенных просто в Модели
            try
            {
                Tile.PaintTileInModel(rtreeColorAreas);
            }
            catch (System.Exception ex)
            {
                Logger.Log.Error(ex, "Tile.PaintTileInModel(rtreeColorAreas);");
            }

            // Сброс блоков панелей Марки АР на панели марки СБ.
            ResetBlocks();

            // Проверка чертежа
            Inspector.Clear();
            CheckDrawing checkDrawing = new CheckDrawing();
            checkDrawing.CheckForPaint();
            if (Inspector.HasErrors)
            {
                throw new System.Exception("\nПокраска панелей не выполнена, в чертеже найдены ошибки в блоках панелей, см. выше.");
            }

            SelectionBlocks selBlocks = new SelectionBlocks(_db);
            selBlocks.SelectBlRefsInModel(StartOptions.SortPanels);
            // В чертеже не должно быть панелей марки АР
            if (selBlocks.IdsBlRefPanelAr.Count > 0)
            {
                Inspector.AddError($"Ошибка. При покраске в чертеже не должно быть блоков панелей марки АР. Найдено {selBlocks.IdsBlRefPanelAr.Count} блоков марки АР.",
                      icon: System.Drawing.SystemIcons.Error);
            }
            Sections = Panels.Section.GetSections(selBlocks.SectionsBlRefs);

            // Определение покраски панелей.
            _marksSB = MarkSb.GetMarksSB(rtreeColorAreas, this, "Покраска панелей...", selBlocks.IdsBlRefPanelSb);
            if (_marksSB?.Count == 0)
            {
                throw new System.Exception("Не найдены блоки панелей в чертеже. Выполните команду AKR-Help для просмотра справки к программе.");
            }

            // Проверить всели плитки покрашены. Если есть непокрашенные плитки, то выдать сообщение об ошибке.
            if (Inspector.HasErrors)
            {
                throw new System.Exception("\nПокраска не выполнена, не все плитки покрашены. См. список непокрашенных плиток в форме ошибок.");
            }

            // Определение принадлежности блоков панелеи секциям
            Panels.Section.DefineSections(this);

            // Переименование марок АР панелей в соответствии с индексами архитекторов (Э2_Яр1)
            RenamePanelsToArchitectIndex(_marksSB);

            // Создание определений блоков панелей покраски МаркиАР
            CreatePanelsMarkAR();

            // Замена вхождений блоков панелей Марки СБ на блоки панелей Марки АР.
            ReplaceBlocksMarkSbOnMarkAr();

            //// Определение принадлежности блоков панелеи фасадам
            //Facade.DefineFacades(this);

            // Добавление подписей к панелям
            Caption caption = new Caption(_marksSB);
            caption.CaptionPanels();
        }
Beispiel #4
0
        // Сброс блоков панелей в чертеже. Замена панелей марки АР на панели марки СБ
        public static void ResetBlocks()
        {
            // Для покраски панелей, нужно, чтобы в чертеже были расставлены блоки панелей Марки СБ.
            // Поэтому, при изменении зон покраски, перед повторным запуском команды покраски панелей и создания альбома,
            // нужно восстановить блоки Марки СБ (вместо Марок АР).
            // Блоки панелей Марки АР - удалить.

            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            using (var t = db.TransactionManager.StartTransaction())
            {
                var bt = t.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                var ms = t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;

                var checkedBlocks = new HashSet<string>();

                foreach (ObjectId idEnt in ms)
                {
                    if (idEnt.ObjectClass.Name == "AcDbBlockReference")
                    {
                        var blRef = t.GetObject(idEnt, OpenMode.ForRead, false, true) as BlockReference;
                        if (MarkSb.IsBlockNamePanel(blRef.Name))
                        {
                            // Если это панель марки АР, то заменяем на панель марки СБ.
                            if (MarkSb.IsBlockNamePanelMarkAr(blRef.Name))
                            {
                                string markSb = MarkSb.GetMarkSbName(blRef.Name);// может быть с суффиксом торца _тп или _тл
                                string markSbBlName = MarkSb.GetMarkSbBlockName(markSb);// может быть с суффиксом торца _тп или _тл
                                if (!bt.Has(markSbBlName))
                                {
                                    // Нет определения блока марки СБ.
                                    // Такое возможно, если после покраски панелей, сделать очистку чертежа (блоки марки СБ удалятся).
                                    MarkSb.CreateBlockMarkSbFromAr(blRef.BlockTableRecord, markSbBlName);
                                    string errMsg = "\nНет определения блока для панели Марки СБ " + markSbBlName +
                                                   ". Оно создано из панели Марки АР " + blRef.Name +
                                                   ". Если внутри блока Марки СБ были зоны покраски, то в блоке Марки АР они были удалены." +
                                                   "Необходимо проверить блоки и заново запустить программу.";
                                    ed.WriteMessage("\n" + errMsg);
                                    // Надо чтобы проектировщик проверил эти блоки, может в них нужно добавить зоны покраски (т.к. в блоках марки АР их нет).
                                }
                                var idBtrMarkSb = bt[markSbBlName];
                                var blRefMarkSb = new BlockReference(blRef.Position, idBtrMarkSb);
                                blRefMarkSb.SetDatabaseDefaults();
                                blRefMarkSb.Layer = blRef.Layer;
                                ms.UpgradeOpen();
                                ms.AppendEntity(blRefMarkSb);
                                t.AddNewlyCreatedDBObject(blRefMarkSb, true);
                                // Перенос плитки на слой "АР_Плитка"
                                if (checkedBlocks.Add(markSbBlName))
                                {
                                    Tile.TilesNormalize(idBtrMarkSb);
                                }
                            }
                            // Перенос плитки на слой "АР_Плитка"
                            if (checkedBlocks.Add(blRef.Name))
                            {
                                Tile.TilesNormalize(blRef.BlockTableRecord);
                            }
                        }
                    }
                }
                Caption captionPanels = new Caption(db);
                // Удаление определений блоков Марок АР.
                foreach (ObjectId idBtr in bt)
                {
                    var btr = t.GetObject(idBtr, OpenMode.ForRead) as BlockTableRecord;
                    if (MarkSb.IsBlockNamePanel(btr.Name))
                    {
                        // Если это блок панели Марки АР
                        if (MarkSb.IsBlockNamePanelMarkAr(btr.Name))
                        {
                            // Удаление всех вхожденний бллока
                            var idsBlRef = btr.GetBlockReferenceIds(true, true);
                            foreach (ObjectId idBlRef in idsBlRef)
                            {
                                var blRef = t.GetObject(idBlRef, OpenMode.ForWrite, false, true) as BlockReference;
                                blRef.Erase(true);
                            }
                            // Удаление определение блока Марки АР
                            btr.UpgradeOpen();
                            btr.Erase(true);
                        }
                        else
                        {
                            // Подпись марки блока
                            string panelMark = btr.Name.Substring(Settings.Default.BlockPanelAkrPrefixName.Length);
                            captionPanels.AddMarkToPanelBtr(panelMark, idBtr);
                        }
                    }
                }
                t.Commit();
            }
        }
Beispiel #5
0
 public Caption(Database db)
 {
     _db             = db;
     _captionLayer   = Caption.GetLayerForMark(db);
     _idTextstylePik = DbExtensions.GetTextStylePIK(_db);
 }