Exemple #1
0
        // Проверка панелей на чертеже и панелей в памяти (this)
        public void CheckPanelsInDrawingAndMemory()
        {
            // Проверка зон покраски
            var colorAreasCheck = ColorArea.GetColorAreas(SymbolUtilityServices.GetBlockModelSpaceId(_db), this);

            // сравнение фоновых зон
            if (!colorAreasCheck.SequenceEqual(_colorAreas))
            {
                throw new System.Exception("Изменились зоны покраски. Рекомендуется выполнить повторную покраску панелей командой PaintPanels.");
            }

            // Проверка панелей
            // Определение покраски панелей.
            var rtreeColorAreas = ColorArea.GetRTree(colorAreasCheck);

            SelectionBlocks selBlocks = new SelectionBlocks(_db);

            selBlocks.SelectBlRefsInModel(StartOptions.SortPanels);

            var marksSbCheck = MarkSb.GetMarksSB(rtreeColorAreas, this, "Проверка панелей...", selBlocks.IdsBlRefPanelAr);

            //RenamePanelsToArchitectIndex(marksSbCheck);
            if (!marksSbCheck.SequenceEqual(_marksSB))
            {
                throw new System.Exception("Панели изменились после последнего выполнения команды покраски. Рекомендуется выполнить повторную покраску панелей командой PaintPanels.");
            }
        }
Exemple #2
0
        private void deletePanels(Database dbExport)
        {
            // Удаление блоков панелей из существующего чертежа экпорта фасадов
            SelectionBlocks selPanels = new SelectionBlocks(dbExport);

            selPanels.SelectBlRefsInModel(false);
            deleteBlRefs(selPanels.IdsBlRefPanelAr);
            // Панелей СБ не должно быть, но на всякий случай удалю.
            deleteBlRefs(selPanels.IdsBlRefPanelSb);
        }
Exemple #3
0
        public void ClearPanelsAkrFromDrawing(Database db)
        {
            SelectionBlocks sel = new SelectionBlocks(db);

            sel.SelectAKRPanelsBtr();

            List <ObjectId> idsBtrPanelsAkr = sel.IdsBtrPanelAr.ToList();

            idsBtrPanelsAkr.AddRange(sel.IdsBtrPanelSb);

            List <ObjectId> idsBtrOther = new List <ObjectId>();

            foreach (ObjectId idBtrPanel in idsBtrPanelsAkr)
            {
                using (var btrPanel = idBtrPanel.Open(OpenMode.ForRead) as BlockTableRecord)
                {
                    foreach (ObjectId idBlRefPanel in btrPanel.GetBlockReferenceIds(false, true))
                    {
                        using (var blRefPanel = idBlRefPanel.Open(OpenMode.ForWrite, false, true) as BlockReference)
                        {
                            blRefPanel.Erase();
                        }
                    }
                    foreach (ObjectId idEnt in btrPanel)
                    {
                        using (var blRef = idEnt.Open(OpenMode.ForRead, false, true) as BlockReference)
                        {
                            if (blRef == null)
                            {
                                continue;
                            }
                            idsBtrOther.Add(blRef.BlockTableRecord);
                        }
                    }
                }
            }

            eraseIdsDbo(idsBtrPanelsAkr);
            eraseIdsDbo(idsBtrOther);
        }
Exemple #4
0
        /// <summary>
        /// Экспорт фасада для АР
        /// </summary>
        public void Export()
        {
            // Список панелей для экспорта
            SelectPanels = new SelectionBlocks();
            SelectPanels.SelectBlRefsInModel(false);
            if (SelectPanels.IdsBlRefPanelSb.Count > 0)
            {
                Inspector.AddError("В текущем чертеже в Модели не должно быть панелей Марки СБ (только Марки АР).", icon: System.Drawing.SystemIcons.Error);
                return;
            }
            if (SelectPanels.IdsBlRefPanelAr.Count == 0)
            {
                Inspector.AddError("Не найдены панели Марки АР в Моделе текущего чертежа.", icon: System.Drawing.SystemIcons.Error);
                return;
            }

            // Определить файл в который экспортировать фасад
            _fileExport = new FileExport();
            _fileExport.DefineFile();

            // определение фасадов (вокруг панелей АКР)
            var facades = Facade.GetFacades(SelectPanels.FacadeBlRefs);

            // Определение экспортируемых панелей и фасадов
            CPS = new ConvertPanelService(this);
            CPS.DefinePanels(facades);

            using (var dbExport = new Database(!_fileExport.IsExistsFileExport, true))
            {
                if (_fileExport.IsExistsFileExport)
                {
                    // удалить старые панели из файла экспорта
                    try
                    {
                        dbExport.ReadDwgFile(_fileExport.FileExportFacade.FullName, FileShare.Read, true, "");
                    }
                    catch (Exception ex)
                    {
                        // файл занят.
                        warningMessageBusyFileExportFacade(ex, _fileExport.FileExportFacade.FullName);
                        throw;
                    }
                    // сделать копию файла
                    _fileExport.Backup();
                    dbExport.CloseInput(true);
                    deletePanels(dbExport);
                }
                dbExport.CloseInput(true);
                CPS.DbExport = dbExport;

                // Копирование панелей АР в экспортный файл
                copyPanelToExportFile(dbExport);

                // Переопределение блока плитки из файла шаблона блоков для Экспорта фасадов.
                redefineBlockTile(dbExport);

                using (AcadLib.WorkingDatabaseSwitcher switchDb = new AcadLib.WorkingDatabaseSwitcher(dbExport))
                {
                    using (var t = dbExport.TransactionManager.StartTransaction())
                    {
                        // Преобразования определений блоков
                        CPS.ConvertBtr();

                        // Преобразования торцов фасадов
                        CPS.ConvertEnds();

                        t.Commit();
                    }
                }
                CPS.Purge();

                dbExport.SaveAs(_fileExport.FileExportFacade.FullName, DwgVersion.Current);
            }
        }
Exemple #5
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();
        }