예제 #1
0
 public FormPanelDesc(PanelAKR panel)
 {
     _panel = panel;
     InitializeComponent();
     textBoxDesc.Text = panel.Description;
     label1.Text      = "Примечание к панели " + panel.BlName;
 }
예제 #2
0
 public FormPanelDesc(PanelAKR panel)
 {
     _panel = panel;
      InitializeComponent();
      textBoxDesc.Text = panel.Description;
      label1.Text = "Примечание к панели " + panel.BlName;
 }
예제 #3
0
        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);
                    }
                }
            }
        }
예제 #4
0
        /// <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());
        }
예제 #5
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Нет панелей для сохранения в библиотеку (в текущем чертеже нет новых и изменившихся панелей).");
                }
            }
        }
예제 #6
0
        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);
        }
예제 #7
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);
        }
예제 #8
0
        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;
        }