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; }); }
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}"); } } }