public FormPanelDesc(PanelAKR panel) { _panel = panel; InitializeComponent(); textBoxDesc.Text = panel.Description; label1.Text = "Примечание к панели " + panel.BlName; }
private void backupChangedPanels(List <PanelAkrFacade> panelsToSave, List <PanelAKR> panelsAkrInLib, Database dbLib) { // сохранение изменяемых панель в файл // создание новоq базы и копирование туда блоков изменяемемых панелей (до изменения) ObjectIdCollection idsBtrToCopy = new ObjectIdCollection(); foreach (var panelFacadeTosave in panelsToSave) { PanelAKR panelLib = panelsAkrInLib.Find( p => string.Equals(p.BlName, panelFacadeTosave.BlName, StringComparison.OrdinalIgnoreCase)); if (panelLib != null) { idsBtrToCopy.Add(panelLib.IdBtrAkrPanel); } } if (idsBtrToCopy.Count > 0) { string newFile = getBackupPanelsLibFile(LibPanelsFilePath); using (var dbBak = new Database(true, true)) { dbBak.CloseInput(true); using (IdMapping map = new IdMapping()) { dbLib.WblockCloneObjects(idsBtrToCopy, dbBak.BlockTableId, map, DuplicateRecordCloning.Replace, false); dbBak.SaveAs(newFile, DwgVersion.Current); } } } }
/// <summary> /// Загрузка панелей из библиотеки. И запись загруженных блоков в список панелей СБ. /// </summary> /// <param name="_allPanelsSB">Список всех панелей-СБ в чертеже</param> public static void LoadBtrPanels(List <FacadeMounting> facades) { // файл библиотеки if (!File.Exists(PanelLibrarySaveService.LibPanelsFilePath)) { throw new Exception("Не найден файл библиотеки АКР-Панелей - " + PanelLibrarySaveService.LibPanelsFilePath); } Database dbFacade = HostApplicationServices.WorkingDatabase; using (Database dbLib = new Database(false, true)) { dbLib.ReadDwgFile(PanelLibrarySaveService.LibPanelsFilePath, FileShare.ReadWrite, true, ""); dbLib.CloseInput(true); // список блоков АКР-Панелей в библиотеке (полные имена блоков). List <PanelAKR> panelsAkrInLib = PanelAKR.GetAkrPanelLib(dbLib, false); // словарь соответствия блоков в библиотеке и в чертеже фасада после копирования блоков Dictionary <ObjectId, PanelAKR> idsPanelsAkrInLibAndFacade = new Dictionary <ObjectId, PanelAKR>(); List <MountingPanel> allPanelsSb = facades.SelectMany(f => f.Panels).ToList(); foreach (var panelSb in allPanelsSb) { PanelAKR panelAkrLib = findAkrPanelFromPanelSb(panelSb, panelsAkrInLib); if (panelAkrLib == null) { // Не найден блок в библиотеке Inspector.AddError($"Не найдена панель в библиотеке соответствующая монтажке - '{panelSb.MarkSbWithoutElectric}'", panelSb.ExtTransToModel, panelSb.IdBlRef, icon: System.Drawing.SystemIcons.Error); } else { //panelAkrLib.PanelSb = panelSb; if (!idsPanelsAkrInLibAndFacade.ContainsKey(panelAkrLib.IdBtrAkrPanel)) { idsPanelsAkrInLibAndFacade.Add(panelAkrLib.IdBtrAkrPanel, panelAkrLib); } panelSb.PanelAkr = panelAkrLib; } } // Копирование блоков в базу чертежа фасада if (idsPanelsAkrInLibAndFacade.Count > 0) { using (IdMapping iMap = new IdMapping()) { dbFacade.WblockCloneObjects(new ObjectIdCollection(idsPanelsAkrInLibAndFacade.Keys.ToArray()), dbFacade.BlockTableId, iMap, DuplicateRecordCloning.Replace, false); // запись соответствия панелей foreach (var item in idsPanelsAkrInLibAndFacade) { item.Value.IdBtrPanelAkrInFacade = iMap[item.Key].Value; // определение габаритов панели item.Value.DefineGeom(item.Value.IdBtrPanelAkrInFacade); } } } } // определение отметок этажей Ч и П в фасадах //facades.ForEach(f => f.DefYForUpperAndParapetStorey()); }
private void savePanelsAkrToLibDb(List <PanelAkrFacade> panelsAkrInFacade, out string msgReport) { msgReport = string.Empty; using (var dbLib = new Database(false, true)) { try { dbLib.ReadDwgFile(LibPanelsFilePath, FileShare.Read, false, ""); dbLib.CloseInput(true); } catch (Exception ex) { // Кто-то уже выполняет сохранение панелей в библиотеку. Сообщить кто занял библиотеку и попросить повторить позже. WarningBusyLibrary(ex); return; } dbLib.CloseInput(true); // список панелей в библиотеке List <PanelAKR> panelsAkrInLib = PanelAKR.GetAkrPanelLib(dbLib, false); //GetPanelsAkrInDb(dbLib); //GetPanelsInLib(); // Список изменившихся панелей и новых для записи в базу. List <PanelAkrFacade> panelsAkrToSave = PanelAkrFacade.GetChangedAndNewPanels(panelsAkrInFacade, panelsAkrInLib); // Форма для просмотра и управления списков сохранения панелей FormSavePanelsToLib formSave = new FormSavePanelsToLib( panelsAkrToSave.Where(p => p.ReportStatus == EnumReportStatus.New).ToList(), panelsAkrToSave.Where(p => p.ReportStatus == EnumReportStatus.Changed).ToList(), panelsAkrInFacade.Where(p => p.ReportStatus == EnumReportStatus.Other).ToList()); if (Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(formSave) != System.Windows.Forms.DialogResult.OK) { return; } if (formSave.PanelsToSave.Count > 0) { //// копия текущего файла библиотеки панелей с приставкой сегодняшней даты //copyLibPanelFile(LibPanelsFilePath); // файл с панелями до изменений - сохранить. backupChangedPanels(formSave.PanelsToSave, panelsAkrInLib, dbLib); // Копирование новых панелей copyNewPanels(dbLib, formSave.PanelsToSave); // Текст изменений. //textChangesToLibDwg(panelsAkrToCopy, dbLib, t); // Сохранение файла библиотеки панелей dbLib.SaveAs(dbLib.Filename, DwgVersion.Current); // строка отчета msgReport = getReport(formSave.PanelsToSave); Logger.Log.Info("Обновлена библиотека панелей."); SaveChangesToExel.Save(formSave.PanelsToSave); } else { throw new Exception("\nНет панелей для сохранения в библиотеку (в текущем чертеже нет новых и изменившихся панелей)."); } } }
public static List <PanelAKR> GetAkrPanelLib(Database dbLib, bool defineFullPaneldata) { List <PanelAKR> panelsAkrLIb = new List <PanelAKR>(); using (var bt = dbLib.BlockTableId.Open(OpenMode.ForRead) as BlockTable) { using (ProgressMeter progress = new ProgressMeter()) { List <Tuple <ObjectId, string> > idBtrPanels = new List <Tuple <ObjectId, string> >(); foreach (ObjectId idBtr in bt) { if (!idBtr.IsValidEx()) { continue; } using (var btr = idBtr.Open(OpenMode.ForRead) as BlockTableRecord) { if (MarkSb.IsBlockNamePanel(btr.Name)) { idBtrPanels.Add(new Tuple <ObjectId, string>(idBtr, btr.Name)); } } } progress.SetLimit(idBtrPanels.Count); progress.Start("Считывание панелей из библиотеки..."); foreach (var idBtr in idBtrPanels) { if (HostApplicationServices.Current.UserBreak()) { throw new System.Exception(AcadLib.General.CanceledByUser); } PanelAKR panelAkr = new PanelAKR(idBtr.Item1, idBtr.Item2); if (defineFullPaneldata) { panelAkr.DefineGeom(idBtr.Item1); } panelsAkrLIb.Add(panelAkr); progress.MeterProgress(); } progress.Stop(); } } return(panelsAkrLIb); }
public static List <PanelAKR> GetPanelsInLib(string panelsFile, bool defineFullPanelData) { List <PanelAKR> panelsInLib = new List <PanelAKR>(); // Получение списка панелей в библиотеке // файл библиотеки if (!File.Exists(PanelLibrarySaveService.LibPanelsFilePath)) { throw new Exception("Не найден файл библиотеки АКР-Панелей - " + PanelLibrarySaveService.LibPanelsFilePath); } // копирование в temp //string fileLibPanelsTemp = Path.GetTempFileName(); //File.Copy(PanelLibrarySaveService.LibPanelsFilePath, fileLibPanelsTemp, true); using (Database dbLib = new Database(false, true)) { dbLib.ReadDwgFile(panelsFile, FileShare.ReadWrite, true, ""); dbLib.CloseInput(true); // список блоков АКР-Панелей в библиотеке (полные имена блоков). panelsInLib = PanelAKR.GetAkrPanelLib(dbLib, defineFullPanelData); } return(panelsInLib); }
public static List<PanelAKR> GetAkrPanelLib(Database dbLib, bool defineFullPaneldata) { List<PanelAKR> panelsAkrLIb = new List<PanelAKR>(); using (var bt = dbLib.BlockTableId.Open(OpenMode.ForRead) as BlockTable) { using (ProgressMeter progress = new ProgressMeter()) { List<Tuple<ObjectId, string>> idBtrPanels = new List<Tuple<ObjectId, string>>(); foreach (ObjectId idBtr in bt) { using (var btr = idBtr.Open(OpenMode.ForRead) as BlockTableRecord) { if (MarkSb.IsBlockNamePanel(btr.Name)) { idBtrPanels.Add(new Tuple<ObjectId, string>(idBtr, btr.Name)); } } } progress.SetLimit(idBtrPanels.Count); progress.Start("Считывание панелей из библиотеки..."); foreach (var idBtr in idBtrPanels) { if (HostApplicationServices.Current.UserBreak()) { throw new System.Exception(AcadLib.General.CanceledByUser); } PanelAKR panelAkr = new PanelAKR(idBtr.Item1, idBtr.Item2); if (defineFullPaneldata) { panelAkr.DefineGeom(idBtr.Item1); } panelsAkrLIb.Add(panelAkr); progress.MeterProgress(); } progress.Stop(); } } return panelsAkrLIb; }