// загрузка АКР-панелей из библиотеки с попыткой расстановить их в виде фасадов если правильно расставлены монтажки 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(); } }
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}"); } } } }
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); }
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}"); } } }
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}"); } } } }
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}"); } } }
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}"); } } }
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(); } }
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}"); } } }
/// <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(); }
// Подготовить задание public void Prepare() { Inspector.Clear(); // переименование блоков квартир из ревитовских имен в нужные renameApartsFromRevit(); // отключение слоев layerPrepare(); // Создание блока осей createBlockAxles(); }
// Сброс данных расчета панелей public void ResetData() { // Набор цветов используемых в альбоме. Inspector.Clear(); _colors = null; _colorAreas = null; ObjectId _idLayerMarks = ObjectId.Null; _marksSB = null; _sheetsSet = null; }
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(); }
private void OnUpdateExecute() { try { Inspector.Clear(); Model?.Update(); } catch (Exception ex) { InsService.ShowMessage(ex, ""); } Inspector.Show(); Inspector.Clear(); }
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(); }
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}"); } } }
// Подсчет секций 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(); } }
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(); } }
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}"); } } }
/// <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(); }
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; }); }
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; }); }
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(); }
// Покраска панелей в модели (по блокам зон покраски) 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(); }
// все блоки панелей-СБ в чертеже //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); } } } } }