public static AdjacentSpaceId AdjacentSpaceId(this Space space) { if (space == null) { return(null); } AdjacentSpaceId adjacentSpaceId = new AdjacentSpaceId(); adjacentSpaceId.spaceIdRef = Core.gbXML.Query.Id(space, typeof(gbXMLSerializer.Space)); return(adjacentSpaceId); }
static public Surface SetUpSurfaceFromIDF(EPObj.MemorySafe_Surface epsurface, PlanarGeometry pg) { Surface retsurface = new Surface(); retsurface.PlanarGeometry = pg; if (epsurface._sunExposureVar == "SunExposed") { retsurface.AdjacentSpaceId = new AdjacentSpaceId[1]; if (epsurface.tilt > 45 && epsurface.tilt < 135) { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an exterior wall retsurface.surfaceType = surfaceTypeEnum.ExteriorWall; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; AdjacentSpaceId adj = new AdjacentSpaceId(); adj.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = true; } //it can be a roof else if (epsurface.tilt >= 0 && epsurface.tilt <= 45) { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an exterior wall retsurface.surfaceType = surfaceTypeEnum.Roof; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; AdjacentSpaceId adj = new AdjacentSpaceId(); adj.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = true; } //it can be an exposed floor else { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an exterior wall retsurface.surfaceType = surfaceTypeEnum.UndergroundSlab; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; AdjacentSpaceId adj = new AdjacentSpaceId(); adj.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = true; } } else if (epsurface._sunExposureVar == "NoSun" && epsurface._outsideBoundaryCondition == "Ground") { if (epsurface.tilt > 45 && epsurface.tilt < 135) { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an underground wall retsurface.surfaceType = surfaceTypeEnum.UndergroundWall; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; AdjacentSpaceId adj1 = new AdjacentSpaceId(); adj1.spaceIdRef = epsurface.zoneName; AdjacentSpaceId adj2 = new AdjacentSpaceId(); adj2.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj1; retsurface.AdjacentSpaceId[1] = adj2; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = false; } else if (epsurface.tilt >= 0 && epsurface.tilt <= 45) { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an underground ceiling retsurface.surfaceType = surfaceTypeEnum.UndergroundCeiling; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; AdjacentSpaceId adj1 = new AdjacentSpaceId(); adj1.spaceIdRef = epsurface.zoneName; AdjacentSpaceId adj2 = new AdjacentSpaceId(); adj2.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj1; retsurface.AdjacentSpaceId[1] = adj2; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = false; } else { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an underground slab or slab on grade retsurface.surfaceType = surfaceTypeEnum.UndergroundSlab; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; AdjacentSpaceId adj1 = new AdjacentSpaceId(); adj1.spaceIdRef = epsurface.zoneName; AdjacentSpaceId adj2 = new AdjacentSpaceId(); adj2.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj1; retsurface.AdjacentSpaceId[1] = adj2; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = false; } } else { retsurface.AdjacentSpaceId = new AdjacentSpaceId[2]; //some new code associated with finding the order of the two spaces if (epsurface.tilt > 45 && epsurface.tilt < 135) { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an underground wall retsurface.surfaceType = surfaceTypeEnum.UndergroundWall; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; //this is wrong AdjacentSpaceId adj1 = new AdjacentSpaceId(); adj1.spaceIdRef = epsurface.zoneName; AdjacentSpaceId adj2 = new AdjacentSpaceId(); adj2.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj1; retsurface.AdjacentSpaceId[1] = adj2; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = false; } else if (epsurface.tilt >= 0 && epsurface.tilt <= 45) { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an underground ceiling retsurface.surfaceType = surfaceTypeEnum.UndergroundCeiling; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; //this is wrong AdjacentSpaceId adj1 = new AdjacentSpaceId(); adj1.spaceIdRef = epsurface.zoneName; AdjacentSpaceId adj2 = new AdjacentSpaceId(); adj2.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj1; retsurface.AdjacentSpaceId[1] = adj2; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = false; } else { Dictionary <string, double> WH = new Dictionary <string, double>(); //it can be considered an underground slab or slab on grade retsurface.surfaceType = surfaceTypeEnum.UndergroundSlab; retsurface.constructionIdRef = "something"; retsurface.Name = epsurface.name; //this is wrong AdjacentSpaceId adj1 = new AdjacentSpaceId(); adj1.spaceIdRef = epsurface.zoneName; AdjacentSpaceId adj2 = new AdjacentSpaceId(); adj2.spaceIdRef = epsurface.zoneName; retsurface.AdjacentSpaceId[0] = adj1; retsurface.AdjacentSpaceId[1] = adj2; RectangularGeometry rg = new RectangularGeometry(); rg.Azimuth = gb.FormatDoubleToString(epsurface.azimuth); //find lower left hand corner of exterior wall //for now, we will just arbitrarily choose a point rg.CartesianPoint = pg.PolyLoop.Points[0]; rg.Tilt = gb.FormatDoubleToString(epsurface.tilt); //get width and height WH = GetWidthandHeight(epsurface, retsurface.surfaceType); rg.Width = gb.FormatDoubleToString(WH["width"]); rg.Height = gb.FormatDoubleToString(WH["height"]); retsurface.RectangularGeometry = rg; retsurface.PlanarGeometry = pg; retsurface.exposedToSunField = false; } } return(retsurface); }
public static Surface TogbXML(this Panel panel, List <Space> adjacentSpaces = null, int cADObjectIdSufix_Surface = -1, int cADObjectIdSufix_Opening = -1, double tolerance = Core.Tolerance.MicroDistance) { if (panel == null) { return(null); } PlanarBoundary3D planarBoundary3D = panel.PlanarBoundary3D; if (planarBoundary3D == null) { return(null); } Surface surface = new Surface(); if (cADObjectIdSufix_Surface == -1) { surface.Name = string.Format("{0} [{1}]", panel.Name, panel.Guid); } else { surface.Name = string.Format("{0} [{1}]", panel.Name, cADObjectIdSufix_Surface); } surface.id = Core.gbXML.Query.Id(panel, typeof(Surface)); //surface.constructionIdRef = Core.gbXML.Query.Id(panel.Construction, typeof(gbXMLSerializer.Construction)); surface.CADObjectId = Query.CADObjectId(panel, cADObjectIdSufix_Surface); surface.surfaceType = panel.PanelType.SurfaceTypeEnum(); surface.RectangularGeometry = planarBoundary3D.TogbXML_RectangularGeometry(tolerance); surface.PlanarGeometry = planarBoundary3D.TogbXML(tolerance); surface.exposedToSunField = Analytical.Query.ExposedToSun(panel.PanelType); if (adjacentSpaces != null && adjacentSpaces.Count > 0) { List <AdjacentSpaceId> adjacentSpaceIds = new List <AdjacentSpaceId>(); foreach (Space space in adjacentSpaces) { AdjacentSpaceId adjacentSpaceId = Query.AdjacentSpaceId(space); if (adjacentSpaceId == null) { continue; } adjacentSpaceIds.Add(adjacentSpaceId); } surface.AdjacentSpaceId = adjacentSpaceIds.ToArray(); } List <Aperture> apertures = panel.Apertures; if (apertures != null) { List <Opening> openings = new List <Opening>(); int cADObjectIdSufix_Opening_Temp = cADObjectIdSufix_Opening; foreach (Aperture aperture in apertures) { Opening opening = aperture.TogbXML(cADObjectIdSufix_Opening_Temp, tolerance); if (opening == null) { continue; } if (cADObjectIdSufix_Opening_Temp != -1) { cADObjectIdSufix_Opening_Temp++; } openings.Add(opening); } surface.Opening = openings.ToArray(); } return(surface); }
public static bool CreateSerial(string filepath) { //place an in memory object here that represents your class representation of the building List <EPObj.MemorySafe_Spaces> myspace = new List <EPObj.MemorySafe_Spaces>(); myspace = EnergyPlusClass.EPlusSpacestoObjectList(@"C:\Users\Chiensi\Documents\C\Buro Happold\Oregon Sustainability Center\Run 1 + Daylighting Only\Run 1 new.idf"); gb.gbci = new CultureInfo(String.Empty); bool ret = false; //the basics //constructor to define the basics gbXML gbx = new gbXML(); gbx.lengthUnit = lengthUnitEnum.Feet; gbx.temperatureUnit = temperatureUnitEnum.F; string id = "cmps-1"; Campus cmp = CreateCampus(id); cmp.Buildings = new Building[10000]; gbx.Campus = cmp; //where does this location information from? it could be smartly inferred somehow, but otherwise specified by the user/programmer Location zeloc = new Location(); zeloc.Name = "San Francisco, CA"; zeloc.Latitude = "37.795"; zeloc.Longitude = "-122.394"; //end the basics //tie location and campus back to the gbXML file cmp.Location = zeloc; //Define the building(s) on the site //CHarriman Septempber 19 2013 cmp.Buildings[0] = MakeBuilding(2000, "bldg-1", buildingTypeEnum.DiningBarLoungeOrLeisure); //CHarriman September 19 2013 //define the stories for each building //several ways to do this List <List <double> > points = prod.MakeFakeList(5); BuildingStorey bs = MakeStorey(1, points); //CHarriman Jan 15 2014 //define the spaces for each building (these come from a space object elsewhere List <Space> gbSpaces = new List <Space>(); gbSpaces = MakeSpacesFromEPObj(myspace); for (int spacecount = 0; spacecount < gbSpaces.Count(); spacecount++) { cmp.Buildings[0].Spaces[spacecount] = gbSpaces[spacecount]; } //after making all the spaces, I make the surfaces cmp.Surface = new Surface[uniquesurfaces.Count()]; int surfcount = 0; foreach (KeyValuePair <string, Surface> pair in uniquesurfaces) { Surface surf = new Surface(); surf.id = pair.Key; //this is a hard one, how to deal with this? For now, everything is external, and idf can sort of tell me surf.surfaceType = pair.Value.surfaceType; surf.constructionIdRef = pair.Value.constructionIdRef; surf.Name = pair.Value.Name; AdjacentSpaceId[] adjspaces = new AdjacentSpaceId[pair.Value.AdjacentSpaceId.Count()]; int counter = 0; foreach (AdjacentSpaceId adj in pair.Value.AdjacentSpaceId) { adjspaces[counter] = adj; counter++; } surf.AdjacentSpaceId = adjspaces; RectangularGeometry rg = new RectangularGeometry(); rg = pair.Value.RectangularGeometry; surf.RectangularGeometry = rg; surf.PlanarGeometry = pair.Value.PlanarGeometry; cmp.Surface[surfcount] = surf; surfcount++; } cmp.Buildings[0].bldgStories[0] = bs; //write xml to the file XmlSerializer szer = new XmlSerializer(typeof(gbXML)); TextWriter tw = new StreamWriter(filepath); szer.Serialize(tw, gbx); tw.Close(); return(ret); }