public static BHE.Opening FromTASOpening(this TBD.Polygon tbdPolygon, TBD.RoomSurface roomSurface, TASSettings tasSettings) { BHE.Opening opening = new oM.Environment.Elements.Opening(); //roomSurface.parentSurface if (roomSurface != null) { TBD.zoneSurface tbdSurface = roomSurface.zoneSurface; TBD.buildingElement tbdElement = tbdSurface.buildingElement; //EnvironmentContextProperties BH.oM.Environment.Fragments.OriginContextFragment environmentContextProperties = new oM.Environment.Fragments.OriginContextFragment(); environmentContextProperties.ElementID = tbdSurface.GUID.RemoveBrackets(); environmentContextProperties.Description = tbdSurface.buildingElement.name + " - " + tbdSurface.buildingElement.GUID.RemoveBrackets(); environmentContextProperties.TypeName = tbdSurface.buildingElement.name; opening.Fragments.Add(environmentContextProperties); opening.Name = environmentContextProperties.TypeName; opening.Type = ((TBD.BuildingElementType)tbdElement.BEType).FromTASOpeningType().FixBuildingElementType(tbdElement, tbdSurface); opening.OpeningConstruction = tbdElement.GetConstruction().FromTAS(); //BuildingElementAnalyticalProperties BH.oM.Environment.Fragments.PanelAnalyticalFragment buildingElementAnalyticalProperties = new oM.Environment.Fragments.PanelAnalyticalFragment(); buildingElementAnalyticalProperties.Altitude = tbdSurface.altitude.Round(); buildingElementAnalyticalProperties.AltitudeRange = tbdSurface.altitudeRange.Round(); buildingElementAnalyticalProperties.Inclination = tbdSurface.inclination.Round(); buildingElementAnalyticalProperties.Orientation = tbdSurface.orientation.Round(); buildingElementAnalyticalProperties.GValue = tbdElement.GValue().Round(); buildingElementAnalyticalProperties.LTValue = tbdElement.LTValue().Round(); buildingElementAnalyticalProperties.UValue = tbdElement.UValue().Round(); opening.Fragments.Add(buildingElementAnalyticalProperties); if (tbdPolygon != null) { opening.Edges = tbdPolygon.FromTAS().CleanPolyline(tasSettings.AngleTolerance, tasSettings.MinimumSegmentLength).ToEdges(); } else { opening.Edges = roomSurface.GetPerimeter().FromTAS().CleanPolyline(tasSettings.AngleTolerance, tasSettings.MinimumSegmentLength).ToEdges(); } if (roomSurface.parentSurface != null && roomSurface.parentSurface.zoneSurface != null && roomSurface.parentSurface.zoneSurface.buildingElement != null) { TASOpeningData tasData = new TASOpeningData(); tasData.ParentGUID = roomSurface.parentSurface.zoneSurface.GUID.RemoveBrackets(); tasData.ParentName = roomSurface.parentSurface.zoneSurface.buildingElement.name; opening.Fragments.Add(tasData); } } return(opening); }
/***************************************************/ public List <Panel> ReadBuildingElements(List <string> ids = null) { TBD.Building building = m_tbdDocument.Building; List <Panel> buildingElements = new List <Panel>(); int zoneIndex = 0; TBD.zone zone = null; while ((zone = building.GetZone(zoneIndex)) != null) { int zoneSurfaceIndex = 0; TBD.zoneSurface zoneSrf = null; while ((zoneSrf = zone.GetSurface(zoneSurfaceIndex)) != null) { //check to exlude tine area if (zoneSrf.internalArea > 0 || zoneSrf.area > 0.2) { buildingElements.Add(zoneSrf.buildingElement.FromTAS(zoneSrf, _tasSettings)); } zoneSurfaceIndex++; } zoneIndex++; } //Clean up building elements with openings and constructions List <Panel> nonOpeningElements = buildingElements.Where(x => { TASPanelData fragment = x.FindFragment <TASPanelData>(typeof(TASPanelData)); return(fragment.PanelIsOpening); }).ToList(); List <Panel> frameElements = buildingElements.Where(x => { TASPanelData fragment = x.FindFragment <TASPanelData>(typeof(TASPanelData)); return(fragment.PanelIsOpening && fragment.OpeningIsFrame); }).ToList(); List <Panel> panes = buildingElements.Where(x => { TASPanelData fragment = x.FindFragment <TASPanelData>(typeof(TASPanelData)); return(fragment.PanelIsOpening && !fragment.OpeningIsFrame); }).ToList(); foreach (Panel element in nonOpeningElements) { //Sort out opening construction OriginContextFragment originContext = element.FindFragment <OriginContextFragment>(typeof(OriginContextFragment)); string elementID = (originContext != null ? originContext.ElementID : ""); element.Openings = new List <Opening>(); List <Panel> frames = frameElements.Where(x => { return(x.Openings.Where(y => { TASOpeningData fragment = y.FindFragment <TASOpeningData>(typeof(TASOpeningData)); return fragment.ParentGUID == elementID; }).Count() > 0); }).ToList(); foreach (Panel frame in frames) { Panel pane = panes.Where(x => (x.FindFragment <OriginContextFragment>(typeof(OriginContextFragment))).TypeName == frame.Name.Replace("frame", "pane")).FirstOrDefault(); if (pane != null) { Opening newOpening = new Opening(); newOpening.Edges = frame.ExternalEdges; newOpening.Fragments = new FragmentSet(pane.Fragments); string oldname = (newOpening.FindFragment <OriginContextFragment>(typeof(OriginContextFragment))).TypeName; (newOpening.FindFragment <OriginContextFragment>(typeof(OriginContextFragment))).TypeName = oldname.RemoveStringPart(" -pane"); newOpening.Name = oldname.RemoveStringPart(" -pane"); element.Openings.Add(newOpening); } } } return(nonOpeningElements); }