public MountingPanel(BlockReference blRefPanelSB, List <AttributeRefDetail> attrsDet, Matrix3d trans, string mark, string painting, FloorMounting floor) { Floor = floor; MarkSb = mark; MarkSbWithoutElectric = AkrHelper.GetMarkWithoutElectric(mark); //.Replace(' ', '-'); // Проверка есть ли запись Окна _ОК1 в имени марки панели string windowSx; MarkSbWithoutElectric = AkrHelper.GetMarkWithoutWindowsSuffix(MarkSbWithoutElectric, out windowSx); WindowSuffix = windowSx; MarkPainting = painting; ExtBlRef = blRefPanelSB.Bounds; ExtBlRefClean = blRefPanelSB.GeometricExtentsСlean(); //blRefPanelSB.GeometricExtents; Thickness = getThickness(ExtBlRefClean); var extTemp = ExtBlRefClean; extTemp.TransformBy(trans); ExtTransToModel = extTemp; IdBlRef = blRefPanelSB.Id; IdBtr = blRefPanelSB.BlockTableRecord; AttrDet = attrsDet; PtCenterPanelSbInModel = getCenterPanelInModel(); IndexConcreteClass = DefineIndexConcreteClass(MarkSb); }
/// <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 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 DefYForUpperAndParapetStorey() //{ // // определение уровней для Ч и П этажей в этом фасаде // // уровеь последнего этажа в фасаде // var floorsNumberType = Floors.Where(f => f.Storey.Type == EnumStorey.Number); // double yLastNumberFloor = 0; // if (floorsNumberType.Count() > 0) // { // yLastNumberFloor = floorsNumberType.Max(f => f.Storey.Y); // } // // чердак // // double yParapet = 0; // var floorUpper = Floors.Where(f => f.Storey.Type == EnumStorey.Upper).FirstOrDefault(); // if (floorUpper != null) // { // //var maxHeightPanel = floorUpper.PanelsSbInFront.Where(p => p.PanelAkr != null)?.Max(p => p.PanelAkr?.HeightPanelByTile); // //if (maxHeightPanel.HasValue) // //{ // floorUpper.Storey.Y = yLastNumberFloor + Settings.Default.FacadeFloorHeight; // //yParapet = floorUpper.Storey.Y + maxHeightPanel.Value; // //floorUpper.Height = maxHeightPanel.Value; // //} // } // var floorParapet = Floors.Where(f => f.Storey.Type == EnumStorey.Parapet).FirstOrDefault(); // if (floorParapet != null) // { // yParapet = yParapet != 0 ? yParapet : yLastNumberFloor + Settings.Default.FacadeFloorHeight; // floorParapet.Storey.Y = yParapet; // var maxHeightPanel = floorParapet.PanelsSbInFront.Where(p => p.PanelAkr != null)?.Max(p => p.PanelAkr?.HeightPanelByTile); // if (maxHeightPanel.HasValue) // { // floorParapet.Height = maxHeightPanel.Value; // } // } //} private static void captionFloor(double x, double yFloor, FloorMounting floor, BlockTableRecord ms, Transaction t) { // Подпись номера этажа DBText textFloor = new DBText(); textFloor.SetDatabaseDefaults(ms.Database); textFloor.Annotative = AnnotativeStates.False; textFloor.Height = Settings.Default.FacadeCaptionFloorTextHeight;// 250;// FacadeCaptionFloorTextHeight textFloor.TextString = floor.Storey.ToString(); var height = floor.Storey.Height != 0? floor.Storey.Height: 2000; textFloor.Position = new Point3d(x - Settings.Default.FacadeCaptionFloorIndent, yFloor + (height * 0.5), 0); ms.AppendEntity(textFloor); t.AddNewlyCreatedDBObject(textFloor, true); }
private void AddPanels(FloorMounting floor) { // найти блоки панелей-СБ входящих внутрь границ блока стороны фасада var panels = new List <MountingPanel>(); foreach (var panelSb in floor.RemainingPanels) { if (Extents.IsPointInBounds(panelSb.ExtTransToModel.MinPoint) && Extents.IsPointInBounds(panelSb.ExtTransToModel.MaxPoint)) { panels.Add(panelSb); } } Panels.AddRange(panels); floor.RemainingPanels.RemoveAll(p => panels.Contains(p)); }
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); }