/// <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());
        }
Example #2
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Нет панелей для сохранения в библиотеку (в текущем чертеже нет новых и изменившихся панелей).");
                }
            }
        }
Example #3
0
        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);
        }