public static Space FromGBXML(this GBXML.Space space, GBXMLSettings settings = null) { Space bhomS = new oM.Environment.Elements.Space(); bhomS.Name = space.Name; bhomS.Perimeter = space.PlanarGeoemtry.PolyLoop.FromGBXML(); OriginContextFragment f = new OriginContextFragment(); f.ElementID = space.ID; bhomS.Fragments.Add(f); return(bhomS); }
public static GBXML.Space ToGBXML(this List <Panel> panelsAsSpace, Level spaceLevel, GBXMLSettings settings) { GBXML.Space xmlSpace = new GBXML.Space(); xmlSpace.Name = panelsAsSpace.ConnectedSpaceName(); xmlSpace.ID = "Space" + xmlSpace.Name.Replace(" ", "").Replace("-", ""); xmlSpace.CADObjectID = BH.Adapter.XML.Query.CADObjectID(panelsAsSpace); List <Polyline> shellGeometry = panelsAsSpace.ClosedShellGeometry(); List <GBXML.Polyloop> loopShell = new List <GBXML.Polyloop>(); foreach (Polyline p in shellGeometry) { if (p.NormalAwayFromSpace(panelsAsSpace, settings.PlanarTolerance)) { loopShell.Add(p.ToGBXML(settings)); } else { loopShell.Add(p.Flip().ToGBXML(settings)); } } xmlSpace.ShellGeometry.ClosedShell.PolyLoop = loopShell.ToArray(); xmlSpace.ShellGeometry.ID = "SpaceShellGeometry-" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 10); xmlSpace.SpaceBoundary = SpaceBoundaries(panelsAsSpace, settings, settings.PlanarTolerance); xmlSpace.PlanarGeoemtry.ID = "SpacePlanarGeometry-" + Guid.NewGuid().ToString().Replace("-", "").Substring(0, 10); if (BH.Engine.Environment.Query.FloorGeometry(panelsAsSpace) != null) { xmlSpace.PlanarGeoemtry.PolyLoop = ToGBXML(BH.Engine.Environment.Query.FloorGeometry(panelsAsSpace), settings); xmlSpace.Area = BH.Engine.Environment.Query.FloorGeometry(panelsAsSpace).Area(); xmlSpace.Volume = panelsAsSpace.Volume(); } if (spaceLevel != null) { string levelName = ""; if (spaceLevel.Name == "") { levelName = spaceLevel.Elevation.ToString(); } else { levelName = spaceLevel.Name; } xmlSpace.BuildingStoreyIDRef = "Level-" + levelName.Replace(" ", "").ToLower(); } return(xmlSpace); }