Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }