示例#1
0
        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Нет панелей для сохранения в библиотеку (в текущем чертеже нет новых и изменившихся панелей).");
                }
            }
        }
示例#2
0
        private void buttonShow_Click(object sender, EventArgs e)
        {
            // Показать панель в текущем чертеже
            activateDoc();
            if (_curListBox.SelectedIndex == -1)
            {
                MessageBox.Show("Не выбрана панель");
                return;
            }
            PanelAkrFacade panel = (PanelAkrFacade)_curListBox.SelectedItem;

            panel.ShowPanelInFacade(_doc);
        }
示例#3
0
        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();
            }
        }
示例#4
0
        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();
                }
            }
        }