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Нет панелей для сохранения в библиотеку (в текущем чертеже нет новых и изменившихся панелей)."); } } }
private void buttonShow_Click(object sender, EventArgs e) { // Показать панель в текущем чертеже activateDoc(); if (_curListBox.SelectedIndex == -1) { MessageBox.Show("Не выбрана панель"); return; } PanelAkrFacade panel = (PanelAkrFacade)_curListBox.SelectedItem; panel.ShowPanelInFacade(_doc); }
private void buttonDesc_Click(object sender, EventArgs e) { if (_curListBox.SelectedIndex == -1) { MessageBox.Show("Не выбрана панель"); return; } PanelAkrFacade panel = (PanelAkrFacade)_curListBox.SelectedItem; FormPanelDesc formPanelDesc = new FormPanelDesc(panel); if (formPanelDesc.ShowDialog() == DialogResult.OK) { refreshDataSource(); } }
private void buttonShowInLib_Click(object sender, EventArgs e) { if (_curListBox.SelectedIndex == -1) { MessageBox.Show("Не выбрана панель"); return; } PanelAkrFacade panelAkrFacade = (PanelAkrFacade)_curListBox.SelectedItem; // Открыть новый чертеж, вставить блок панели, покзать. Document docNew = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Add("Acadiso.dwt"); Database dbNew = docNew.Database; Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument = docNew; // Копирование блока в новый чертеж из библиотеки ObjectId idBtr = ObjectId.Null; try { idBtr = AcadLib.Blocks.Block.CopyBlockFromExternalDrawing(panelAkrFacade.BlName, PanelLibrarySaveService.LibPanelsFilePath, dbNew, DuplicateRecordCloning.Replace); } catch (Exception ex) { docNew.CloseAndDiscard(); MessageBox.Show("Неудалось скопировать блок из библиотеки в новый чертеж для показа."); Logger.Log.Error(ex, "buttonShowInLib_Click"); } if (!idBtr.IsNull && idBtr.IsValid) { using (var cs = dbNew.CurrentSpaceId.Open(OpenMode.ForWrite) as BlockTableRecord) { var blRefPanelAkrLib = new BlockReference(Point3d.Origin, idBtr); cs.AppendEntity(blRefPanelAkrLib); docNew.Editor.ZoomExtents(); } } }