public static List <MountingPanel> GetPanels(BlockTableRecord btr, Point3d ptBase, Matrix3d transform, PanelLibraryLoadService libLoadServ, FloorMounting floor) { // Поиск всех панелей СБ в определении блока var panelsSB = new List <MountingPanel>(); foreach (ObjectId idEnt in btr) { if (idEnt.IsValidEx() && idEnt.ObjectClass.Name == "AcDbBlockReference") { using (var blRefPanelSB = idEnt.GetObject(OpenMode.ForRead, false, true) as BlockReference) { var panelSb = DefinePanel(blRefPanelSB, transform, libLoadServ, floor); if (panelSb != null) { panelsSB.Add(panelSb); } } } } if (panelsSB.Count == 0) { // Ошибка - в блоке монтажного плана, не найдена ни одна панель Inspector.AddError($"В блоке монтажного плана {btr.Name} не найдена ни одна панель.", new Extents3d(ptBase, new Point3d(ptBase.X + 10000, ptBase.Y + 10000, 0)), btr.Id, icon: System.Drawing.SystemIcons.Error); } return(panelsSB); }
// мин значение х среди всех границ блоков панелей внктри этажа /// <summary> /// Поиск всех блоков монтажек в модели в WorkingDatabase /// Запускается транзакция /// </summary> public static List <FloorMounting> GetMountingBlocks(PanelLibraryLoadService libLoadServ, BlockTableRecord ms) { List <FloorMounting> floors = new List <FloorMounting>(); // Найти блоки монтажек пересекающиеся с блоками обозначения стороны фасада //// Поиск панелейСБ в Модели и добавление в общий список панелей СБ. //libLoadServ.AllPanelsSB.AddRange(PanelSB.GetPanels(ms.Id, Point3d.Origin, Matrix3d.Identity)); foreach (ObjectId idEnt in ms) { if (!idEnt.IsValidEx()) { continue; } var blRefMounting = idEnt.GetObject(OpenMode.ForRead, false, true) as BlockReference; if (blRefMounting == null) { continue; } // Если это блок монтажного плана - имя блока начинается с АКР_Монтажка_ if (blRefMounting.Name.StartsWith(Settings.Default.BlockPlaneMountingPrefixName, StringComparison.CurrentCultureIgnoreCase)) { FloorMounting floor = new FloorMounting(blRefMounting, libLoadServ); floor.GetAllPanels(); floors.Add(floor); } } return(floors); }
/// <summary> /// Получение фасадов из блоков монтажных планов и обозначений стороны фасада в чертеже /// </summary> /// <returns></returns> public static List <FacadeMounting> GetFacadesFromMountingPlans(PanelLibraryLoadService libLoadServ = null) { List <FacadeMounting> facades = new List <FacadeMounting>(); var db = HostApplicationServices.WorkingDatabase; using (var t = db.TransactionManager.StartTransaction()) { var ms = SymbolUtilityServices.GetBlockModelSpaceId(db).GetObject(OpenMode.ForRead) as BlockTableRecord; // Поиск всех блоков монтажных планов в Модели чертежа с соотв обозначением стороны фасада List <FloorMounting> floors = FloorMounting.GetMountingBlocks(libLoadServ, ms); // блоки сторон фасадов - Фасады List <FacadeFrontBlock> facadeFrontBlocks = FacadeFrontBlock.GetFacadeFrontBlocks(ms, floors); // Создание фасадов foreach (var front in facadeFrontBlocks) { FacadeMounting facade = new FacadeMounting(front); facades.Add(facade); } // определение уровней этажей Storey defineFloorStoreys(facades); t.Commit(); } return(facades); }
public FloorMounting(BlockReference blRefMounting, PanelLibraryLoadService libLoadServ) { IdBtrMounting = blRefMounting.BlockTableRecord; PosBlMounting = blRefMounting.Position; LibLoadServ = libLoadServ; IdBlRefMounting = blRefMounting.Id; BlRefName = blRefMounting.Name; Transform = blRefMounting.BlockTransform; Section = DefinePlanSection(blRefMounting); try { Extents = blRefMounting.GeometricExtents; } catch { string err = $"Ошибка при определении границ монтажного плана - {BlRefName}"; Inspector.AddError(err, IdBlRefMounting, System.Drawing.SystemIcons.Error); throw new Exception(err); } var ext = Extents; ext.TransformBy(blRefMounting.BlockTransform.Inverse()); var h = Extents.MaxPoint.Y - Extents.MinPoint.Y; var l = Extents.MaxPoint.X - Extents.MinPoint.X; PlanExtentsHeight = ext.MaxPoint.Y - ext.MinPoint.Y; PlanExtentsLength = ext.MaxPoint.X - ext.MinPoint.X; RectangleRTree = new Rectangle(Extents.MinPoint.X, Extents.MinPoint.Y, Extents.MaxPoint.X, Extents.MaxPoint.Y, 0, 0); //defFloorNameAndNumber(blRefMounting); //// добавление блоков паненлей в общий список панелей СБ //libLoadServ.AllPanelsSB.AddRange(_allPanelsSbInFloor); }
public static bool IsMountingPanel(BlockReference blRefPanelSB, out string mark, out string paint, out List <AttributeRefDetail> attrsDet, PanelLibraryLoadService libLoadServ = null) { mark = null; paint = null; attrsDet = null; if (!blRefPanelSB.IsDynamicBlock && blRefPanelSB.AttributeCollection != null) { attrsDet = new List <AttributeRefDetail>(); foreach (ObjectId idAtrRef in blRefPanelSB.AttributeCollection) { var atrRef = idAtrRef.GetObject(OpenMode.ForRead, false, true) as AttributeReference; // ПОКРАСКА if (string.Equals(atrRef.Tag, Settings.Default.AttributePanelSbPaint, StringComparison.CurrentCultureIgnoreCase)) { var atrDet = new AttributeRefDetail(atrRef); attrsDet.Add(atrDet); paint = atrRef.TextString.Trim(); // Если выполняется создание альбома и выключена опция проверки покраски, то стираем марку покраски из монтажной панели if (libLoadServ?.Album != null && !libLoadServ.Album.StartOptions.CheckMarkPainting) { // Удаление старой марки покраски из блока монтажной панели atrRef.UpgradeOpen(); atrRef.TextString = string.Empty; } } // МАРКА else if (string.Equals(atrRef.Tag, Settings.Default.AttributePanelSbMark, StringComparison.CurrentCultureIgnoreCase)) { var atrDet = new AttributeRefDetail(atrRef); attrsDet.Add(atrDet); mark = atrRef.TextString.Trim(); } } return(attrsDet.Count == 2); } return(false); }
public static MountingPanel DefinePanel(BlockReference blRef, Matrix3d transform, PanelLibraryLoadService libLoadServ = null, FloorMounting floor = null) { // как определить что это блок панели СБ? // По набору атрибутов: Покраска, МАРКА string mark; string paint; List <AttributeRefDetail> attrsDet; if (IsMountingPanel(blRef, out mark, out paint, out attrsDet, libLoadServ)) { return(new MountingPanel(blRef, attrsDet, transform, mark, paint, floor)); } return(null); }
// Создание альбома панелей public void CreateAlbum() { ChangeJob.ChangeJobService.Init(); // Пока не нужны XML панели для создания альбома. //if (StartOptions.NewMode) //{ // BasePanelsService = new BaseService(); // BasePanelsService.ReadPanelsFromBase(); //} // Определение включен ли артикул подписи в плитке (по состоянию замороженности слоя - Артикул пдлитки) IsTileArticleOn = GetTileArticleState(); // Подсчет общего кол плитки на альбом TotalTilesCalc = TileCalc.CalcAlbum(this); // Создание папки альбома панелей _sheetsSet = new SheetsSet(this); _sheetsSet.CreateAlbum(); // Заполнение атрибутов марок покраски в блоках монтажек try { var libService = new PanelLibrary.PanelLibraryLoadService(); libService.FillMarkPainting(this); this.LibLoadService = libService; } catch (System.Exception ex) { string errMsg = "Ошибка заполнения марок покраски в монтажки - libService.FillMarkPainting(_album);"; this.Doc.Editor.WriteMessage($"\n{errMsg} - {ex.Message}"); Logger.Log.Error(ex, errMsg); } //// Проверка новых панелей, которых нет в библиотеке //try //{ // PanelLibrarySaveService.CheckNewPanels(); //} //catch (Exception ex) //{ // Logger.Log.Error(ex, "Не удалось проверить есть ли новые панели в чертеже фасада, которых нет в библиотеке."); //} // Если есть панели с изменениями - создание задания. try { ChangeJob.ChangeJobService.CreateJob(this); } catch (System.Exception ex) { Inspector.AddError($"Ошибка при создании Задания на Изменение марок покраски - {ex.Message}"); } // Еспорт списка панелей в ексель. try { ExportToExcel.Export(this); } catch (System.Exception ex) { Logger.Log.Error(ex, "Не удалось экспортировать панели в Excel."); } // вставка итоговой таблицы по плитке try { TotalTileTable tableTileTotal = new TotalTileTable(this); tableTileTotal.InsertTableTotalTile(); } catch (System.Exception ex) { Logger.Log.Error(ex, "Не удалось вставить итоговую таблицу плитки на альбом."); } }
// Создание альбома панелей public void CreateAlbum() { ChangeJob.ChangeJobService.Init(); // Пока не нужны XML панели для создания альбома. //if (StartOptions.NewMode) //{ // BasePanelsService = new BaseService(); // BasePanelsService.ReadPanelsFromBase(); //} // Определение включен ли артикул подписи в плитке (по состоянию замороженности слоя - Артикул пдлитки) //IsTileArticleOn = GetTileArticleState(); // Подсчет общего кол плитки на альбом TotalTilesCalc = TileCalc.CalcAlbum(this); // Создание папки альбома панелей _sheetsSet = new SheetsSet(this); _sheetsSet.CreateAlbum(); // Заполнение атрибутов марок покраски в блоках монтажек try { var libService = new PanelLibrary.PanelLibraryLoadService(); libService.FillMarkPainting(this); this.LibLoadService = libService; } catch (System.Exception ex) { string errMsg = "Ошибка заполнения марок покраски в монтажки - libService.FillMarkPainting(_album);"; this.Doc.Editor.WriteMessage($"\n{errMsg} - {ex.Message}"); Logger.Log.Error(ex, errMsg); } //// Проверка новых панелей, которых нет в библиотеке //try //{ // PanelLibrarySaveService.CheckNewPanels(); //} //catch (Exception ex) //{ // Logger.Log.Error(ex, "Не удалось проверить есть ли новые панели в чертеже фасада, которых нет в библиотеке."); //} // Если есть панели с изменениями - создание задания. try { ChangeJob.ChangeJobService.CreateJob(this); } catch (System.Exception ex) { Inspector.AddError($"Ошибка при создании Задания на Изменение марок покраски - {ex.Message}"); } // Еспорт списка панелей в ексель. try { ExportToExcel.Export(this); } catch (System.Exception ex) { Logger.Log.Error(ex, "Не удалось экспортировать панели в Excel."); } // вставка итоговой таблицы по плитке try { TotalTileTable tableTileTotal = new TotalTileTable(this); tableTileTotal.InsertTableTotalTile(); } catch (System.Exception ex) { Logger.Log.Error(ex, "Не удалось вставить итоговую таблицу плитки на альбом."); } }
/// <summary> /// Получение фасадов из блоков монтажных планов и обозначений стороны фасада в чертеже /// </summary> /// <returns></returns> public static List<FacadeMounting> GetFacadesFromMountingPlans(PanelLibraryLoadService libLoadServ = null) { List<FacadeMounting> facades = new List<FacadeMounting>(); var db = HostApplicationServices.WorkingDatabase; using (var t = db.TransactionManager.StartTransaction()) { var ms = SymbolUtilityServices.GetBlockModelSpaceId(db).GetObject(OpenMode.ForRead) as BlockTableRecord; // Поиск всех блоков монтажных планов в Модели чертежа с соотв обозначением стороны фасада List<FloorMounting> floors = FloorMounting.GetMountingBlocks(libLoadServ, ms); // блоки сторон фасадов - Фасады List<FacadeFrontBlock> facadeFrontBlocks = FacadeFrontBlock.GetFacadeFrontBlocks(ms, floors); // Создание фасадов foreach (var front in facadeFrontBlocks) { FacadeMounting facade = new FacadeMounting (front); facades.Add(facade); } // определение уровней этажей Storey defineFloorStoreys(facades); t.Commit(); } return facades; }
public void AKR_LoadPanelsFromLibrary() { CommandStart.Start(doc => { using (var DocLock = doc.LockDocument()) { PanelLibraryLoadService loadPanelsService = new PanelLibraryLoadService(); loadPanelsService.LoadPanels(); } }); }