示例#1
0
 // загрузка АКР-панелей из библиотеки с попыткой расстановить их в виде фасадов если правильно расставлены монтажки
 public void LoadPanels()
 {
     Inspector.Clear();
     // Попытка определить фасады по монтажкам
     Facades = FacadeMounting.GetFacadesFromMountingPlans(this);
     if (Inspector.HasErrors)
     {
         Inspector.Show();
         return;
     }
     if (Facades.Count > 0)
     {
         // загрузка АКР-панелей из библиотеки
         MountingPanel.LoadBtrPanels(Facades);
         // удаление АКР-Панелей старых фасадов
         FacadeMounting.DeleteOldAkrPanels(Facades);
         // расстановка АКР-Панелей по фасадам
         FacadeMounting.CreateFacades(Facades);
     }
     else
     {
         Inspector.AddError("Не удалось определить фасады по монтажным планам.", icon: System.Drawing.SystemIcons.Error);
     }
     if (Inspector.HasErrors)
     {
         // Показать ошибки.
         Inspector.Show();
     }
 }
示例#2
0
        public void BaseApartmentsremoveDublicateAttributes()
        {
            Logger.Log.Info("Start command AR-BaseApartmentsremoveDublicateAttributes");
            Document doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }
            Editor   ed = doc.Editor;
            Database db = doc.Database;

            using (doc.LockDocument())
            {
                try
                {
                    Inspector.Clear();
                    int count = RemoveDublicateAttributes.Remove();
                    ed.WriteMessage($"Удалено {count} дублирующихся атрибутов.");
                    Inspector.Show();
                }
                catch (System.Exception ex)
                {
                    doc.Editor.WriteMessage($"\nОшибка : {ex.Message}");
                    if (!ex.Message.Contains(AcadLib.General.CanceledByUser))
                    {
                        Logger.Log.Error(ex, $"Command: AR-BaseApartmentsremoveDublicateAttributes. {doc.Name}");
                    }
                }
            }
        }
示例#3
0
        public void Export()
        {
            // определение наружек для экспорта
            var outsPanelToExport = defineOutsidePanelsToExport();

            if (Inspector.HasErrors)
            {
                // Есть ошибки при определении блоков - продолжать или нет - показ пользователю формы с ошибками, с возможостью продолжить или прервать.
                Inspector.ShowDialog();
                Inspector.Clear();
            }

            // Проверка панелей по базе - есть ли такие марки панелей.
            DB.DbCheckPanels.Check(outsPanelToExport);

            FormExport formExport = new FormExport(outsPanelToExport);

            if (Application.ShowModalDialog(formExport) != System.Windows.Forms.DialogResult.OK)
            {
                formExport.SetDialogMode(false);
                Application.ShowModelessDialog(formExport);
            }

            // Експорт
            var exportPanels = outsPanelToExport.Where(p => p.DbStatus == DB.EnumBaseStatus.Ok).ToList();

            DB.DbExportColor.Export(exportPanels);
        }
示例#4
0
        public void BaseApartmentsSetTypeFlats()
        {
            Logger.Log.Info("Start command AR-BaseApartmentsSetTypeFlats");
            Document doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }
            Editor   ed = doc.Editor;
            Database db = doc.Database;

            try
            {
                Inspector.Clear();
                var sel        = ed.SelectBlRefs("Выбери квартиры");
                var apartments = Apartment.GetApartments(sel);
                RoomsTypeEditor.SetRoomsType(apartments);
                ed.WriteMessage($"\nПараметры записаны.");
                Inspector.Show();
            }
            catch (System.Exception ex)
            {
                doc.Editor.WriteMessage($"\nОшибка : {ex.Message}");
                if (!ex.Message.Contains(AcadLib.General.CanceledByUser))
                {
                    Logger.Log.Error(ex, $"Command: AR-BaseApartmentsSetTypeFlats. {doc.Name}");
                }
            }
        }
示例#5
0
        public void BaseApartmentsPlacement()
        {
            Logger.Log.Info("Start command AR-BaseApartmentsPlacement");
            Document doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }
            Editor   ed = doc.Editor;
            Database db = doc.Database;

            using (doc.LockDocument())
            {
                try
                {
                    Inspector.Clear();
                    ApartmentPlacement.Placement();
                    Inspector.Show();
                }
                catch (System.Exception ex)
                {
                    doc.Editor.WriteMessage($"\nОшибка : {ex.Message}");
                    if (!ex.Message.Contains(AcadLib.General.CanceledByUser))
                    {
                        Logger.Log.Error(ex, $"Command: AR-BaseApartmentsPlacement. {doc.Name}");
                    }
                }
            }
        }
示例#6
0
        public void BaseApartmentsContourRemove()
        {
            Logger.Log.Info("Start command AR-BaseApartmentsContourRemove");
            Document doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }
            Editor ed = doc.Editor;

            try
            {
                Inspector.Clear();
                var sel        = ed.SelectBlRefs("Выбери квартиры");
                var apartments = Apartment.GetApartments(sel);
                Model.AcadServices.ContourHelper.ClearOldContourAll(apartments);
            }
            catch (System.Exception ex)
            {
                doc.Editor.WriteMessage($"\nОшибка : {ex.Message}");
                if (!ex.Message.Contains(AcadLib.General.CanceledByUser))
                {
                    Logger.Log.Error(ex, $"Command: AR-BaseApartmentsContourRemove. {doc.Name}");
                }
            }
        }
示例#7
0
        public void BaseApartmentsDynPropLoad()
        {
            Logger.Log.Info("Start command AR-BaseApartmentsDynPropLoad");
            Document doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }
            Editor   ed = doc.Editor;
            Database db = doc.Database;

            try
            {
                Inspector.Clear();
                var count = SaveDynPropsHelper.Load();
                ed.WriteMessage($"\nВосстановлено параметров в {count} блоков.");
                Inspector.Show();
            }
            catch (System.Exception ex)
            {
                doc.Editor.WriteMessage($"\nОшибка : {ex.Message}");
                if (!ex.Message.Contains("Отменено пользователем"))
                {
                    Logger.Log.Error(ex, $"Command: AR-BaseApartmentsDynPropLoad. {doc.Name}");
                }
            }
        }
示例#8
0
        public void TestCreateTable()
        {
            try
            {
                Inspector.Clear();
                var specService = new SpecService(new SpecTest());
                specService.CreateSpec();
            }
            catch (System.Exception ex)
            {
                Application.ShowAlertDialog(ex.Message);
            }
            TrayItemBubbleWindow bubble = new TrayItemBubbleWindow();

            bubble.IconType = IconType.Warning;
            bubble.Text     = "BubleText";
            bubble.Text2    = "BubleText2";
            bubble.Title    = "BubleTitle";

            TrayItem itemTray = new TrayItem();

            itemTray.Icon        = System.Drawing.SystemIcons.Warning;
            itemTray.ToolTipText = "ToolTipText";

            itemTray.ShowBubbleWindow(bubble);

            Application.StatusBar.TrayItems.Add(itemTray);
            Application.StatusBar.Update();

            if (Inspector.HasErrors)
            {
                Inspector.Show();
            }
        }
示例#9
0
        public void BaseApartmentsContour()
        {
            Logger.Log.Info("Start command AR-BaseApartmentsContour");
            Document doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }
            Editor ed = doc.Editor;

            try
            {
                Inspector.Clear();
                var sel        = ed.SelectBlRefs("Выбери квартиры");
                var apartments = Apartment.GetApartments(sel);
                Model.AcadServices.ContourHelper.CreateContours2(apartments);
                Inspector.Show();
            }
            catch (System.Exception ex)
            {
                doc.Editor.WriteMessage($"\nОшибка : {ex.Message}");
                if (!ex.Message.Contains("Отменено пользователем"))
                {
                    Logger.Log.Error(ex, $"Command: AR-BaseApartmentsContour. {doc.Name}");
                }
            }
        }
示例#10
0
 /// <summary>
 /// Экспорт расчета.
 /// </summary>
 public void Export ()
 {
     Inspector.Clear();
     InsCell.IndexCounter = 0;
     // Отбор групп которым присвоен идентификатор, и в группе всем корпусам назначен идентификаторы
     //List<FrontGroup> notIdentifiedGroups;
     List<FrontGroup> exportedGroups = GetExportedGroups();
     // Форма подтверждения экпортируемых и не экпортируемых групп(неидентифицированных)
     var exportGroupsVM = new ExportGroupsViewModel(exportedGroups);
     if (InsService.ShowDialog(exportGroupsVM) == true)
     {
         var date = DateTime.Now;
         foreach (var item in exportedGroups)
         {
             var exportGroup = new ExportFrontGoup(item);                    
             var exportData = exportGroup.GetExportInsData();
             if (exportData == null)
             {
                 continue;
             }
             exportData.Date = date;                    
             // Запись инсоляции в базу - один таймштамп для группы домов
             exportData.ToDb();                    
         }
     }
     Inspector.Show();
     Inspector.Clear();
 }        
示例#11
0
 // Подготовить задание
 public void Prepare()
 {
     Inspector.Clear();
     // переименование блоков квартир из ревитовских имен в нужные
     renameApartsFromRevit();
     // отключение слоев
     layerPrepare();
     // Создание блока осей
     createBlockAxles();
 }
示例#12
0
        // Сброс данных расчета панелей
        public void ResetData()
        {
            // Набор цветов используемых в альбоме.
            Inspector.Clear();
            _colors     = null;
            _colorAreas = null;
            ObjectId _idLayerMarks = ObjectId.Null;

            _marksSB   = null;
            _sheetsSet = null;
        }
示例#13
0
        public void Calc(List <Pile> piles, PileOptions pileOpt = null)
        {
            if (pileOpt == null)
            {
                PileOptions = PileOptions.Load();
            }
            else
            {
                PileOptions = pileOpt;
            }

            piles = piles.OrderBy(p => p.Pos).ToList();

            // проверка номеров свай
            CheckNums(piles);

            Inspector.ShowDialog();
            Inspector.Clear();

            // Подсчет отметок в каждой сваи
            foreach (var p in piles)
            {
                p.CalcHightMarks();
            }

            // Назначение Вида сваям по уникальности параметров
            SetPileViews(piles);

            // Строки таблицы отметок свай
            var hmRows = getHightMarkRows(piles);

            // Строки спецификации свай
            var specRows = getSpecRows(piles);

            // Форма дерева свай
            FormPiles formPiles = new FormPiles(hmRows, specRows);

            if (Application.ShowModalDialog(formPiles) != System.Windows.Forms.DialogResult.OK)
            {
                formPiles.ButtonDialogVisible(false);
                Application.ShowModelessDialog(formPiles);
                throw new Exception(AcadLib.General.CanceledByUser);
            }

            // Вставка таблицы отметок
            HightMarkTable hmTable = new HightMarkTable(hmRows);

            hmTable.CreateTable();

            // Вставка спец
            SpecTable specTable = new SpecTable(specRows);

            specTable.CreateTable();
        }
示例#14
0
 private void OnUpdateExecute()
 {
     try
     {
         Inspector.Clear();
         Model?.Update();
     }
     catch (Exception ex)
     {
         InsService.ShowMessage(ex, "");
     }
     Inspector.Show();
     Inspector.Clear();
 }
示例#15
0
        public void UpdateExec(SheetSet ss, bool previewOnly)
        {
            Inspector.Clear();
            try
            {
                Nodes = new ObservableCollection <ISSNode>();
                if (ss == null)
                {
                    return;
                }

                ss.Numeration(previewOnly);
                Nodes           = ss.Nodes;
                PropsVM.SSProps = ss.Props;
                BatchVM.Update();
            }
            catch (Exception ex)
            {
                ex.ShowMessage();
            }

            Inspector.Show();
        }
示例#16
0
        public void SB_ExportColorIndexToDB()
        {
            Logger.Log.StartCommand(nameof(SB_ExportColorIndexToDB));
            Document doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }

            try
            {
                if (!Access.Success())
                {
                    doc.Editor.WriteMessage("\nОтказано в доступе.");
                    return;
                }

                Inspector.Clear();

                ExportColor exportColor = new ExportColor();
                exportColor.Export();

                if (Inspector.HasErrors)
                {
                    Inspector.Show();
                }
            }
            catch (System.Exception ex)
            {
                doc.Editor.WriteMessage($"\nОшибка экспорта колористических индексов: {ex.Message}");
                if (!ex.Message.Contains("Отменено пользователем"))
                {
                    Logger.Log.Error(ex, $"{nameof(SB_ExportColorIndexToDB)}. {doc.Name}");
                }
            }
        }
示例#17
0
        // Подсчет секций
        public void CalcSections()
        {
            Inspector.Clear();
            // Выбор блоков
            Select.SelectSection select = new Select.SelectSection(this);
            select.Select();
            if (select.IdsBlRefSections.Count == 0)
            {
                throw new Exception("Не найдены блоки блок-секций");
            }
            else
            {
                Doc.Editor.WriteMessage("\nВыбрано {0} блоков блок-секций.", select.IdsBlRefSections.Count);
            }

            // Обработка выбранных блоков
            ParserBlockSection parser = new ParserBlockSection(this, select.IdsBlRefSections);

            parser.Parse();
            Sections = parser.Sections;

            // Подсчет площадей и типов блок-секций
            DataSection = new DataSection(this);
            DataSection.Calc();

            // Построение таблицы
            TableSecton tableSection = new TableSecton(this);

            tableSection.CreateTable();

            if (Inspector.HasErrors)
            {
                Inspector.Show();
                Inspector.Clear();
            }
        }
示例#18
0
        public void CreateFacadeTest()
        {
            Inspector.Clear();
            var docTest = Application.DocumentManager.MdiActiveDocument;
            var db      = docTest.Database;

            baseService.ClearPanelsAkrFromDrawing(db);
            // Подготовка - копирование блоков, слоев, стилей, и т.п.
            baseService.InitToCreationPanels(db);

            // Определение фасадов
            List <FacadeMounting> facadesMounting = FacadeMounting.GetFacadesFromMountingPlans();
            List <FloorArchitect> floorsAr        = FloorArchitect.GetAllPlanes(db, baseService);

            // Создание определений блоков панелей по базе
            baseService.CreateBtrPanels(facadesMounting, floorsAr);

            //Создание фасадов
            FacadeMounting.CreateFacades(facadesMounting);

            //Восстановление ассоциативной штриховки в дин блоках сечений
            using (var t = db.TransactionManager.StartTransaction())
            {
                var secBlocks = baseService.Env.BlPanelSections;
                foreach (var item in secBlocks)
                {
                    item.ReplaceAssociateHatch();
                }
                t.Commit();
            }

            if (Inspector.HasErrors)
            {
                Inspector.Show();
            }
        }
示例#19
0
        public void BaseApartmentsExport()
        {
            Logger.Log.Info("Start command AR-BaseApartmentsExport");
            Document doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }

            // Проверка допуска пользователя
            if (!AccessUsers.HasAccess())
            {
                doc.Editor.WriteMessage("\nОтказано в доступе");
                return;
            }

            if (!File.Exists(doc.Name))
            {
                doc.Editor.WriteMessage("\nНужно сохранить текущий чертеж.");
                return;
            }

            try
            {
                Inspector.Clear();

                Database db = doc.Database;
                Editor   ed = doc.Editor;

                ExportApartmentsAbout();

                Parameter.BlocksConstantAtrs = new Dictionary <ObjectId, List <Parameter> >();

                // Проверка дубликатов блоков
                CheckDublicateBlocks.Tolerance = new Autodesk.AutoCAD.Geometry.Tolerance(0.02, 15);
                CheckDublicateBlocks.Check(new HashSet <string>()
                {
                    "RV_EL_BS_Базовая стена", "RV_EL_BS_Вентиляционный блок"
                });

                // Создание папки для экспорта подложек квуартир
                DefineDirExportFilesApartments(db);

                // Считывание блоков квартир из чертежа
                var apartments = Apartment.GetApartments(db);
                if (apartments.Count == 0)
                {
                    throw new System.Exception($"Блоки квартир не найдены. Имя блока квартиры должно соответствовать условию Match = '{Options.Instance.BlockApartmentNameMatch}'");
                }
                ed.WriteMessage($"\nВ Модели найдено {apartments.Count} блоков квартир.");

                Inspector.ShowDialog();
                Inspector.Clear();

                // Квартиры в базе
                var apartmentsInBase = GetBaseApartments.GetAll();

                //Проверка всех элементов квартир в базе - категории, параметры.
                CheckApartments.Check(apartments, apartmentsInBase);

                // Сортировка квартир, модулей и элементов
                var alphaComparer = AcadLib.Comparers.AlphanumComparator.New;
                apartments.Sort((a1, a2) => a1.Name.CompareTo(a2.Name));
                apartments.ForEach(a =>
                {
                    a.Modules.Sort((m1, m2) => m1.Name.CompareTo(m2.Name));
                    a.Modules.ForEach(m => m.Elements.Sort((e1, e2) => alphaComparer.Compare(e1.NodeName, e2.NodeName)));
                });

                // Форма предпросмотра экспорта блоков
                FormBlocksExport formExport = new FormBlocksExport(apartments);
                var dlgRes = Application.ShowModalDialog(formExport);

                // Прервать
                if (dlgRes == System.Windows.Forms.DialogResult.Abort)
                {
                    formExport.SetModaless();
                    Application.ShowModelessDialog(formExport);
                    throw new System.Exception(AcadLib.General.CanceledByUser);
                }

                if (dlgRes == System.Windows.Forms.DialogResult.OK)
                {
                    // Экспорт блоков в файлы
                    var count = Apartment.ExportToFiles(apartments);
                    ed.WriteMessage($"\nЭкспортированно '{count}' квартир в отдельные файлы.");

                    // Выбор квартир записываемых в базу - изменившиеся и новые
                    var apartsToDb = apartments.Where
                                         (a => !a.BaseStatus.HasFlag(EnumBaseStatus.Error) &&
                                         !a.BaseStatus.HasFlag(EnumBaseStatus.NotInDwg) &&
                                         (
                                             a.BaseStatus.HasFlag(EnumBaseStatus.Changed) ||
                                             a.BaseStatus.HasFlag(EnumBaseStatus.New) ||
                                             a.Modules.Any(m => !m.BaseStatus.HasFlag(EnumBaseStatus.Error) &&
                                                           (
                                                               m.BaseStatus.HasFlag(EnumBaseStatus.Changed) ||
                                                               m.BaseStatus.HasFlag(EnumBaseStatus.New)
                                                           ))
                                         )).ToList();
                    //var apartsNotToDB = apartments.Except(apartsToDb);
                    //foreach (var apartNotToDB in apartsNotToDB)
                    //{
                    //    ed.WriteMessage($"\nКвартира не будет записана в базу, статус '{apartNotToDB.BaseStatus}' - '{apartNotToDB.Name}'.");
                    //}

                    //// Запись квартир в xml
                    //string fileXml = Path.Combine(Path.GetDirectoryName(doc.Name), Path.GetFileNameWithoutExtension(doc.Name) + ".xml");
                    //Apartment.ExportToXML(fileXml, apartmentsToExport);

                    // Запись в DB
                    try
                    {
                        BaseApartments.Export(apartsToDb);
                    }
                    catch (System.Exception ex)
                    {
                        Inspector.AddError($"Ошибка экспорта в БД - {ex.Message}", icon: System.Drawing.SystemIcons.Error);
                    }

                    // Запись лога экспортированных блоков
                    string   logFile  = Path.Combine(Path.GetDirectoryName(doc.Name), Options.Instance.LogFileName);
                    ExcelLog excelLog = new ExcelLog(logFile);
                    excelLog.AddtoLog(apartments);

                    // Показ ошибок
                    Inspector.Show();
                }
            }
            catch (System.Exception ex)
            {
                doc.Editor.WriteMessage($"\nОшибка экспорта блоков: {ex.Message}");
                if (!ex.Message.Contains(AcadLib.General.CanceledByUser))
                {
                    Logger.Log.Error(ex, $"Command: AR-BaseApartmentsExport. {doc.Name}");
                }
            }
        }
示例#20
0
        /// <summary>
        /// Включение отключение расчета для текущего документа
        /// </summary>
        /// <param name="onOff">Включение или выключение расчета</param>
        private static void ActivateIns(bool onOff)
        {
            Inspector.Clear();
            var doc = Application.DocumentManager.MdiActiveDocument;

            if (insViewModel == null)
            {
                return;
            }

            if (doc == null || doc.IsDisposed)
            {
                insViewModel.Model = null;
                return;
            }

            var insModel = GetInsModel(doc);

            // Включение расчета для текущего документа
            if (onOff)
            {
                if (insModel == null)
                {
                    // Новый расчет
                    // Загрузка сохраненного расчета в чертеже (если он есть)
                    insModel = InsModel.LoadIns(doc);
                    if (insModel == null)
                    {
                        // Создание нового расчета
                        insModel = new InsModel();
                    }
                    insModels.Add(doc, insModel);
                    // Инициализация расчета
                    //insModel.Initialize(doc);
                    //insModel.Map.UpdateVisual();// Т.к. расчет не обновляется, то визуализация домов на карте (без отдельной визуализации домов во фронтах.)

                    // Не обновлять расчет - пусть вручную обновляют
                    //try
                    //{
                    //    insModel.Update();
                    //}
                    //catch(UserBreakException)
                    //{
                    //}
                    // лог включения инсоляции для текущего чертежа
                    Logger.Log.Info($"Включение расчета инсоляции для чертежа - {doc.Name}");
                }
                //else
                //{
                //    insModel.Initialize(doc);
                //    insModel.UpdateVisual();
                //}
                insModel.IsEnabled = true;
                insModel.Update();
            }
            // Отключение расчета для текущего документа
            else
            {
                if (insModel != null)
                {
                    insModel.ClearVisual(); // Очистка визуализаций
                    insModel.IsEnabled = false;
                    // лог отключения инсоляции для текущего чертежа
                    Logger.Log.Info($"Отключение расчета инсоляции для чертежа - {doc.Name}");
                }
            }
            // Переключение на модель (или на null)
            insViewModel.Model = insModel;
            Inspector.Show();
        }
示例#21
0
        public void AKR_AlbumPanels()
        {
            CommandStart.Start(doc =>
            {
                CheckAcadVer2016();

                string commandName = "AlbumPanels";
                if (string.Equals(_lastStartCommandName, commandName))
                {
                    if ((DateTime.Now - _lastStartCommandDateTime).Seconds < 5)
                    {
                        doc.Editor.WriteMessage("Между запусками команды прошло меньше 5 секунд. Отмена.");
                        return;
                    }
                }

                if (!File.Exists(doc.Name))
                {
                    doc.Editor.WriteMessage("\nНужно сохранить текущий чертеж.");
                    return;
                }

                if (_album == null)
                {
                    doc.Editor.WriteMessage("\nСначала нужно выполнить команду PaintPanels для покраски плитки.");
                }
                else
                {
                    Inspector.Clear();
                    _album.ChecksBeforeCreateAlbum();
                    // После покраски панелей, пользователь мог изменить панели на чертеже, а в альбом это не попадет.
                    // Нужно или выполнить перекраску панелей перед созданием альбома
                    // Или проверить список панелей в _albom и список панелей на чертеже, и выдать сообщение если есть изменения.
                    _album.CheckPanelsInDrawingAndMemory();

                    // Переименование марок пользователем.
                    // Вывод списка панелей для возможности переименования марок АР пользователем
                    FormRenameMarkAR formRenameMarkAR = new FormRenameMarkAR(_album);
                    if (AcAp.ShowModalDialog(formRenameMarkAR) == DialogResult.OK)
                    {
                        var renamedMarksAR = formRenameMarkAR.RenamedMarksAr();
                        // сохранить в словарь
                        Lib.DictNOD.SaveRenamedMarkArToDict(renamedMarksAR);

                        // Переименовать марки АР
                        renamedMarksAR.ForEach(r => r.MarkAR.MarkPainting = r.MarkPainting);

                        // Создание альбома
                        _album.CreateAlbum();

                        if (Inspector.HasErrors)
                        {
                            Inspector.Show();
                        }
                        doc.Editor.Regen();
                        doc.Editor.WriteMessage("\nАльбом панелей выполнен успешно:" + _album.AlbumDir);
                        Logger.Log.Info("Альбом панелей выполнен успешно: {0}", _album.AlbumDir);
                    }
                    else
                    {
                        doc.Editor.WriteMessage("\nОтменено пользователем.");
                    }
                }
                _lastStartCommandName     = commandName;
                _lastStartCommandDateTime = DateTime.Now;
            });
        }
示例#22
0
        public void AKR_PaintPanels()
        {
            CommandStart.Start(doc =>
            {
                //// Принудительное сохранение файла
                //if (File.Exists(doc.Name))
                //{
                //   object obj = AcAp.GetSystemVariable("DBMOD");
                //   // Проверка значения системной переменной DBMOD. Если 0 - значит чертёж не был изменён
                //   if (Convert.ToInt16(obj) != 0)
                //   {
                //      var db = doc.Database;
                //      try
                //      {
                //         db.SaveAs(db.Filename, true, DwgVersion.Current, db.SecurityParameters);
                //      }
                //      catch (System.Exception ex)
                //      {
                //         doc.Editor.WriteMessage($"Ошибка сохранения файла. {ex.Message}");
                //         Logger.Log.Error(ex, "Ошибка при сохранении чертеже перед покраской");
                //      }
                //   }
                //}

                string commandName = nameof(AKR_PaintPanels);
                if (string.Equals(_lastStartCommandName, commandName))
                {
                    if ((DateTime.Now - _lastStartCommandDateTime).Seconds < 5)
                    {
                        doc.Editor.WriteMessage("Между запусками команды прошло меньше 5 секунд. Отмена.");
                        return;
                    }
                }

                // Проверка дубликатов блоков
                Select.SelectionBlocks sel = new Select.SelectionBlocks(doc.Database);
                sel.SelectBlRefsInModel(false);
                var panelsToCheck = sel.IdsBlRefPanelAr;
                panelsToCheck.AddRange(sel.IdsBlRefPanelSb);
                CheckDublicateBlocks.Check(panelsToCheck);

                Inspector.Clear();
                if (_album == null)
                {
                    _album = new Album();
                }
                else
                {
                    // Повторный запуск программы покраски панелей.
                    // Сброс данных
                    _album.ResetData();
                }

                // Покраска
                _album.PaintPanels();

                doc.Editor.Regen();
                doc.Editor.WriteMessage("\nПокраска панелей выполнена успешно.");
                Logger.Log.Info("Покраска панелей выполнена успешно. {0}", doc.Name);

                _lastStartCommandName     = commandName;
                _lastStartCommandDateTime = DateTime.Now;
            });
        }
示例#23
0
        private static void StartCommand(Action <Document> action, MethodBase caller, string commandName, bool woStatistic = false)
        {
            var doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }
            CommandStart commandStart = null;

            try
            {
                commandStart = GetCallerCommand(caller, commandName);
                if (!woStatistic)
                {
                    Logger.Log.StartCommand(commandStart);
                    Logger.Log.Info($"Document={doc.Name}");
                    PluginStatisticsHelper.PluginStart(commandStart);
                }
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex, "CommandStart");
            }

            try
            {
                // Проверка блокировки команды
                if (commandStart != null && !CommandLockService.CanStartCommand(commandStart.CommandName))
                {
                    Logger.Log.Info($"Команда заблокирована - {commandStart.CommandName}");
                    return;
                }
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex, "Проверка блокировки команды");
            }

            try
            {
                Inspector.Clear();
                action(doc);
            }
            catch (OperationCanceledException ex)
            {
                if (!doc.IsDisposed)
                {
                    doc.Editor.WriteMessage(ex.Message);
                }
            }
            catch (Exceptions.ErrorException error)
            {
                Inspector.AddError(error.Error);
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex, CurrentCommand);
                Inspector.AddError($"Ошибка в программе. {ex.Message}", System.Drawing.SystemIcons.Error);

                if (!doc.IsDisposed)
                {
                    doc.Editor.WriteMessage(ex.Message);
                }
            }

            Inspector.Show();
        }
示例#24
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();
        }
示例#25
0
        // все блоки панелей-СБ в чертеже
        //private List<PanelSB> _allPanelsSB = new List<PanelSB> ();

        //public List<PanelSB> AllPanelsSB { get { return _allPanelsSB; } }

        // в чертеже должны быть расставлены монтажки с блоками обозначения фасадов на них.
        // нужно для блоков панелей СБ найти соответствующую панель покраски в библиотеки
        // но, марки панелей у СБ и у АР могут немного отличаться пробелами и -, нужно это учесть.
        // в результате должны получится фасады из панелей

        // задача архитектора:
        // проверить вставленные блоки панелей, т.к. могут быть новые изменения, а вставленные панели не соответствовать этим изменениям.
        // проверить расстановку панелей по фасаду. хз как оно должно быть.

        // найти блоки монтажек (они должны распологаться в столбик для каждого фасада)
        // допустимое отклонение по вертикали между точками вставки блоков монтажек = +- 1000мм.

        // 1. Найти фасады в чертеже
        // Фасад - это ряд блоков монтажных планов этажей с блоками обозначения стороны плана как фасада составляющие один фасада дома

        /// <summary>
        /// Заполнение марок покраски в блоки монтажных панелей СБ
        /// </summary>
        public void FillMarkPainting(Album album)
        {
            Album = album;
            // Определение фасадов по монтажным планам
            Facades = FacadeMounting.GetFacadesFromMountingPlans(this);
            var allMountPanels = Facades.SelectMany(s => s.Panels);

            //testPtFacades(facades);

            Inspector.Clear();

            if (Facades.Count == 0)
            {
                string errMsg = "Не найдены фасады по монтажным планам для заполнения марок покраски в монтажках.";
                Logger.Log.Info(errMsg);
                Album.Doc.Editor.WriteMessage("\n{0}", errMsg);
                return;
            }

            // список всех блоков АКР-Панелей
            foreach (var markSbAkr in Album.MarksSB)
            {
                foreach (var markAr in markSbAkr.MarksAR)
                {
                    foreach (var panelAr in markAr.Panels)
                    {
                        bool isFound = false;
                        // Границы блока АКР-Панели по плитке
                        var    extPanelAkr     = panelAr.GetExtentsTiles(markSbAkr);
                        double xCenterPanelAkr = extPanelAkr.MinPoint.X + (extPanelAkr.MaxPoint.X - extPanelAkr.MinPoint.X) * 0.5;

                        // Поск монтажки по линии от центра панели АКР
                        var mountingsPanelSb = allMountPanels.Where(p =>
                                                                    p.Floor.Storey.Equals(panelAr.Storey) &&
                                                                    p.ExtTransToModel.MinPoint.X <= xCenterPanelAkr && p.ExtTransToModel.MaxPoint.X >= xCenterPanelAkr);
                        // Проверка имени панели
                        if (mountingsPanelSb.Any())
                        {
                            foreach (var mountingPanelSb in mountingsPanelSb)
                            {
                                string markSbWithoutWhite  = mountingPanelSb.MarkSbWithoutElectric.Replace(' ', '-');
                                string markAkrWithoutWhite = AkrHelper.GetMarkWithoutElectric(markSbAkr.MarkSbClean).Replace(' ', '-');
                                if (string.Equals(markSbWithoutWhite, markAkrWithoutWhite, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    //Проверка индекса окна
                                    //if (!album.StartOptions.NewMode &&
                                    //    markSbAkr.WindowIndex != 0 &&
                                    //    !string.Equals(mountingPanelSb.WindowSuffix, markSbAkr.WindowName,
                                    //                   StringComparison.CurrentCultureIgnoreCase)
                                    //   )
                                    //{
                                    //    Inspector.AddError("Предупреждение. Не совпали индексы окон в монтажной панели и в АКР панели. " +
                                    //       $"Панель АКР {markAr.MarkARPanelFullName}, Монтажная панель {mountingPanelSb.MarkSbWithoutElectric}",
                                    //        panelAr.Extents, panelAr.IdBlRefAr, icon: System.Drawing.SystemIcons.Information);
                                    //    //continue;
                                    //}

                                    //Найдена монтажная панель
                                    isFound = true;
                                    // Проверка марки покраски
                                    if (Album.StartOptions.CheckMarkPainting)
                                    {
                                        if (!string.Equals(mountingPanelSb.MarkPainting, markAr.MarkPaintingFull, StringComparison.CurrentCultureIgnoreCase))
                                        {
                                            //// Ошибка - марки покраски не совпали.
                                            //string errMsg = $"Не совпала марка покраски. Панель АКР {markAr.MarkARPanelFullName}, " +
                                            //   $"Монтажная панель {mountingPanelSb.MarkSbWithoutElectric}{mountingPanelSb.MarkPainting}";
                                            //Inspector.AddError(errMsg, panelAr.Extents, panelAr.IdBlRefAr, icon: System.Drawing.SystemIcons.Error);
                                            //Logger.Log.Error(errMsg);
                                            ChangeJob.ChangeJobService.AddChangePanel(panelAr, mountingPanelSb);
                                        }
                                        break;
                                    }
                                    // Заполнение атрибута покраски
                                    else
                                    {
                                        mountingPanelSb.SetPaintingToAttr(markAr);
                                    }
                                }
                            }
                        }
                        if (!isFound)
                        {
                            Inspector.AddError($"{markAr.MarkARPanelFullName} - Не найдена соответствующая монтажная панель для заполнения атрибута марки покраски.",
                                               extPanelAkr, panelAr.IdBlRefAr, icon: System.Drawing.SystemIcons.Error);
                        }
                    }
                }
            }
        }