コード例 #1
0
        public static List <Panel> SetConstructions(this List <Panel> panels, IConstruction newConstruction, List <string> typeNames = null)
        {
            List <Panel> clones       = new List <Panel>(panels.Select(x => x.DeepClone <Panel>()).ToList());
            List <Panel> returnPanels = new List <Panel>();

            foreach (Panel p in clones)
            {
                if (typeNames == null || typeNames.Count() == 0)
                {
                    p.Construction = newConstruction;
                }
                else
                {
                    OriginContextFragment context = p.FindFragment <OriginContextFragment>(typeof(OriginContextFragment));
                    if (context != null && typeNames.Contains(context.TypeName))
                    {
                        p.Construction = newConstruction;
                    }
                }

                returnPanels.Add(p);
            }

            return(returnPanels);
        }
コード例 #2
0
        public static List <Opening> SetConstructions(this List <Opening> openings, IConstruction newConstruction, List <string> typeNames = null)
        {
            List <Opening> clones         = new List <Opening>(openings.Select(x => x.DeepClone <Opening>()).ToList());
            List <Opening> returnOpenings = new List <Opening>();

            foreach (Opening o in clones)
            {
                if (typeNames == null)
                {
                    o.OpeningConstruction = newConstruction;
                }
                else
                {
                    OriginContextFragment context = o.FindFragment <OriginContextFragment>(typeof(OriginContextFragment));
                    if (context != null && typeNames.Contains(context.TypeName))
                    {
                        o.OpeningConstruction = newConstruction;
                    }
                }

                returnOpenings.Add(o);
            }

            return(returnOpenings);
        }
コード例 #3
0
ファイル: Space.cs プロジェクト: BHoM/XML_Toolkit
        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);
        }
コード例 #4
0
        /***************************************************/
        /****              Public methods               ****/
        /***************************************************/

        public static OriginContextFragment OriginContext(this HostObject hostObject, RevitSettings settings)
        {
            if (hostObject == null)
            {
                return(null);
            }

            OriginContextFragment originContext = new OriginContextFragment();

            originContext.ElementID = hostObject.Id.IntegerValue.ToString();
            originContext.TypeName  = hostObject.FamilyTypeFullName();
            originContext.SetProperties(hostObject, settings.ParameterSettings);
            originContext.SetProperties(hostObject.Document.GetElement(hostObject.GetTypeId()) as ElementType, settings.ParameterSettings);
            return(originContext);
        }
コード例 #5
0
ファイル: Panels.cs プロジェクト: LivAndersson/BHoM_Engine
        public static List <Panel> UniquePanelInstances(this List <Panel> panels)
        {
            List <Panel> returnPanels = new List <Panel>();

            foreach (Panel p in panels)
            {
                OriginContextFragment o = p.FindFragment <OriginContextFragment>(typeof(OriginContextFragment));
                if (o != null)
                {
                    Panel testCheck = returnPanels.Where(x => x.FindFragment <OriginContextFragment>(typeof(OriginContextFragment)) != null && x.FindFragment <OriginContextFragment>(typeof(OriginContextFragment)).TypeName == o.TypeName).FirstOrDefault();
                    if (testCheck == null)
                    {
                        returnPanels.Add(p);
                    }
                }
            }
            return(returnPanels);
        }
コード例 #6
0
        public static List <Opening> UniqueOpeningInstances(this List <Opening> openings)
        {
            List <Opening> returnOpenings = new List <Opening>();

            foreach (Opening p in openings)
            {
                OriginContextFragment o = p.FindFragment <OriginContextFragment>(typeof(OriginContextFragment));
                if (o != null)
                {
                    Opening testCheck = returnOpenings.Where(x => x.FindFragment <OriginContextFragment>(typeof(OriginContextFragment)) != null && x.FindFragment <OriginContextFragment>(typeof(OriginContextFragment)).TypeName == o.TypeName).FirstOrDefault();
                    if (testCheck == null)
                    {
                        returnOpenings.Add(p);
                    }
                }
            }

            return(returnOpenings);
        }
コード例 #7
0
        public static List <Panel> SetConstructions(this List <Panel> panels, List <string> typeNames, IConstruction newConstruction)
        {
            List <Panel> returnPanels = new List <Panel>();

            foreach (Panel p in panels)
            {
                OriginContextFragment context = p.FindFragment <OriginContextFragment>(typeof(OriginContextFragment));
                if (context == null || !typeNames.Contains(context.TypeName))
                {
                    returnPanels.Add(p);
                }
                else if (context != null && typeNames.Contains(context.TypeName))
                {
                    p.Construction = newConstruction;
                    returnPanels.Add(p);
                }
            }

            return(returnPanels);
        }
コード例 #8
0
        public static List <Opening> SetConstructions(this List <Opening> openings, List <string> typeNames, IConstruction newConstruction)
        {
            List <Opening> returnOpenings = new List <Opening>();

            foreach (Opening o in openings)
            {
                OriginContextFragment context = o.FindFragment <OriginContextFragment>(typeof(OriginContextFragment));
                if (context == null || !typeNames.Contains(context.TypeName))
                {
                    returnOpenings.Add(o);
                }
                else if (context != null && typeNames.Contains(context.TypeName))
                {
                    o.OpeningConstruction = newConstruction;
                    returnOpenings.Add(o);
                }
            }

            return(returnOpenings);
        }
コード例 #9
0
ファイル: Read.cs プロジェクト: MajaLindroth/XML_Toolkit
        private List <BHE.Space> ReadSpaces(BHX.GBXML gbx, List <string> ids = null)
        {
            //ToDo - Fix this!
            List <BHE.Space> s = new List <BHE.Space>();

            if (gbx.Campus != null)
            {
                foreach (BHX.Building b in gbx.Campus.Building)
                {
                    foreach (BHX.Space space in b.Space)
                    {
                        BHE.Space bhomS = new oM.Environment.Elements.Space();
                        bhomS.Name = space.Name;
                        OriginContextFragment f = new OriginContextFragment();
                        f.ElementID = space.ID;
                        bhomS.Fragments.Add(f);
                        s.Add(bhomS);
                    }
                }
            }

            return(s);
        }
コード例 #10
0
        /***************************************************/

        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);
        }
コード例 #11
0
ファイル: Panel.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/
        /****             Internal Methods              ****/
        /***************************************************/

        internal static oM.Environment.Elements.Panel EnvironmentPanelFromRevit(this Element element, ICurve crv, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            oM.Environment.Elements.Panel panel = refObjects.GetValue <oM.Environment.Elements.Panel>(element.Id);
            if (panel != null)
            {
                return(panel);
            }

            ElementType elementType = element.Document.GetElement(element.GetTypeId()) as ElementType;

            panel = new oM.Environment.Elements.Panel()
            {
                ExternalEdges = crv.ToEdges(),
                Name          = element.FamilyTypeFullName(),
            };

            //Set ExtendedProperties
            OriginContextFragment originContext = new OriginContextFragment()
            {
                ElementID = element.Id.IntegerValue.ToString(), TypeName = element.FamilyTypeFullName()
            };

            originContext.SetProperties(element, settings.ParameterSettings);
            originContext.SetProperties(elementType, settings.ParameterSettings);
            panel.Fragments.Add(originContext);

            PanelAnalyticalFragment panelAnalytical = new PanelAnalyticalFragment();

            panelAnalytical.SetProperties(element, settings.ParameterSettings);
            panelAnalytical.SetProperties(elementType, settings.ParameterSettings);
            panel.Fragments.Add(panelAnalytical);

            PanelContextFragment panelContext = new PanelContextFragment();

            panelContext.SetProperties(element, settings.ParameterSettings);
            panelContext.SetProperties(elementType, settings.ParameterSettings);
            panel.Fragments.Add(panelContext);

            BuildingResultFragment buildingResults = new BuildingResultFragment();

            buildingResults.SetProperties(element, settings.ParameterSettings);
            buildingResults.SetProperties(elementType, settings.ParameterSettings);
            panel.Fragments.Add(buildingResults);

            oM.Environment.Elements.PanelType?panelType = element.Category.PanelType();
            if (panelType.HasValue)
            {
                panel.Type = panelType.Value;
            }
            else
            {
                panel.Type = oM.Environment.Elements.PanelType.Undefined;
            }

            //Set identifiers, parameters & custom data
            panel.SetIdentifiers(element);
            panel.CopyParameters(element, settings.ParameterSettings);
            panel.SetProperties(element, settings.ParameterSettings);

            refObjects.AddOrReplace(element.Id, panel);
            return(panel);
        }
コード例 #12
0
ファイル: Panel.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/

        internal static oM.Environment.Elements.Panel EnvironmentPanelFromRevit(this EnergyAnalysisSurface energyAnalysisSurface, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            oM.Environment.Elements.Panel panel = refObjects.GetValue <oM.Environment.Elements.Panel>(energyAnalysisSurface.Id);
            if (panel != null)
            {
                return(panel);
            }

            //Get the geometry Curve
            ICurve curve = null;

            if (energyAnalysisSurface != null)
            {
                curve = energyAnalysisSurface.GetPolyloop().FromRevit();
            }

            //Get the name and element type
            Element     element     = energyAnalysisSurface.Document.Element(energyAnalysisSurface.CADObjectUniqueId, energyAnalysisSurface.CADLinkUniqueId);
            ElementType elementType = null;

            if (element == null)
            {
                return(panel);
            }

            elementType = element.Document.GetElement(element.GetTypeId()) as ElementType;
            panel       = new oM.Environment.Elements.Panel()
            {
                ExternalEdges = curve.ToEdges(),
                Name          = element.FamilyTypeFullName(),
            };

            //Set ExtendedProperties
            OriginContextFragment originContext = new OriginContextFragment()
            {
                ElementID = element.Id.IntegerValue.ToString(), TypeName = element.FamilyTypeFullName()
            };

            originContext.SetProperties(element, settings.ParameterSettings);
            originContext.SetProperties(elementType, settings.ParameterSettings);
            panel.AddFragment(originContext);

            PanelAnalyticalFragment panelAnalytical = new PanelAnalyticalFragment();

            panelAnalytical.SetProperties(elementType, settings.ParameterSettings);
            panelAnalytical.SetProperties(element, settings.ParameterSettings);
            panel.AddFragment(panelAnalytical);

            PanelContextFragment panelContext = new PanelContextFragment();

            List <string>       connectedSpaces     = new List <string>();
            EnergyAnalysisSpace energyAnalysisSpace = null;

            energyAnalysisSpace = energyAnalysisSurface.GetAnalyticalSpace();
            if (energyAnalysisSpace != null)
            {
                SpatialElement spatialElement = energyAnalysisSpace.Document.Element(energyAnalysisSpace.CADObjectUniqueId) as SpatialElement;
                connectedSpaces.Add(Query.Name(spatialElement));
            }

            energyAnalysisSpace = energyAnalysisSurface.GetAdjacentAnalyticalSpace();
            if (energyAnalysisSpace != null)
            {
                SpatialElement spatialElement = energyAnalysisSpace.Document.Element(energyAnalysisSpace.CADObjectUniqueId) as SpatialElement;
                if (spatialElement != null)
                {
                    connectedSpaces.Add(Query.Name(spatialElement));

                    if (spatialElement is Autodesk.Revit.DB.Mechanical.Space)
                    {
                        Autodesk.Revit.DB.Mechanical.Space space = (Autodesk.Revit.DB.Mechanical.Space)spatialElement;

                        BuildingResultFragment buildingResultsProperties = new BuildingResultFragment();
                        buildingResultsProperties.PeakCooling = space.DesignCoolingLoad.ToSI(UnitType.UT_HVAC_Cooling_Load);
                        buildingResultsProperties.PeakHeating = space.DesignHeatingLoad.ToSI(UnitType.UT_HVAC_Heating_Load);
                        panel.AddFragment(buildingResultsProperties);
                    }
                }
            }

            panel.ConnectedSpaces = connectedSpaces;
            panelContext.SetProperties(elementType, settings.ParameterSettings);
            panelContext.SetProperties(element, settings.ParameterSettings);
            panel.AddFragment(panelContext);

            oM.Environment.Elements.PanelType?panelType = element.Category.PanelType();
            if (panelType.HasValue)
            {
                panel.Type = panelType.Value;
            }
            else
            {
                panel.Type = oM.Environment.Elements.PanelType.Undefined;
            }

            panel.Construction = Convert.ConstructionFromRevit(elementType as dynamic, null, settings, refObjects);

            //Set identifiers, parameters & custom data
            panel.SetIdentifiers(element);
            panel.CopyParameters(element, settings.ParameterSettings);
            panel.SetProperties(element, settings.ParameterSettings);

            refObjects.AddOrReplace(energyAnalysisSurface.Id, panel);
            return(panel);
        }
コード例 #13
0
ファイル: Space.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/

        public static Space SpaceFromRevit(this SpatialElement spatialElement, SpatialElementGeometryCalculator spatialElementGeometryCalculator, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            if (spatialElement == null || spatialElementGeometryCalculator == null)
            {
                return(new Space());
            }

            settings = settings.DefaultIfNull();

            Space space = refObjects.GetValue <Space>(spatialElement.Id);

            if (space != null)
            {
                return(space);
            }

            //Create the Space
            space      = new Space();
            space.Name = Query.Name(spatialElement);

            PolyCurve pcurve = spatialElement.Perimeter(settings).FirstOrDefault();

            if (pcurve != null)
            {
                space.Location  = pcurve.Centroid();
                space.Perimeter = pcurve;
            }
            else if (spatialElement.Location != null && spatialElement.Location is LocationPoint)
            {
                space.Location = ((LocationPoint)spatialElement.Location).FromRevit();
            }

            //Set ExtendedProperties
            OriginContextFragment originContext = new OriginContextFragment()
            {
                ElementID = spatialElement.Id.IntegerValue.ToString(), TypeName = Query.Name(spatialElement)
            };

            originContext.SetProperties(spatialElement, settings.ParameterSettings);
            space.AddFragment(originContext);

            SpaceAnalyticalFragment spaceAnalytical = new SpaceAnalyticalFragment();

            spaceAnalytical.SetProperties(spatialElement, settings.ParameterSettings);
            space.AddFragment(spaceAnalytical);

            SpaceContextFragment spaceContext = new SpaceContextFragment();

            spaceContext.SetProperties(spatialElement, settings.ParameterSettings);

            //TODO: Implement ConnectedElements
            space.AddFragment(spaceContext);

            //Set identifiers, parameters & custom data
            space.SetIdentifiers(spatialElement);
            space.CopyParameters(spatialElement, settings.ParameterSettings);
            space.SetProperties(spatialElement, settings.ParameterSettings);

            refObjects.AddOrReplace(spatialElement.Id, space);
            return(space);
        }
コード例 #14
0
ファイル: Space.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/

        public static Space SpaceFromRevit(this EnergyAnalysisSpace energyAnalysisSpace, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            if (energyAnalysisSpace == null)
            {
                return(new Space());
            }

            settings = settings.DefaultIfNull();

            Space space = refObjects.GetValue <Space>(energyAnalysisSpace.Id.IntegerValue);

            if (space != null)
            {
                return(space);
            }

            SpatialElement spatialElement = energyAnalysisSpace.Document.Element(energyAnalysisSpace.CADObjectUniqueId) as SpatialElement;

            if (spatialElement == null)
            {
                return(space); //If we can't get data from it let's not waste our time
            }
            space      = new Space();
            space.Name = Query.Name(spatialElement);

            Polyline pline = energyAnalysisSpace.GetBoundary().Select(x => x.FromRevit()).ToList().Join().FirstOrDefault();

            if (pline != null)
            {
                space.Location  = pline.Centroid();
                space.Perimeter = pline;
            }
            else if (spatialElement != null && spatialElement.Location != null)
            {
                space.Location = (spatialElement.Location as LocationPoint).FromRevit();
            }

            //Set ExtendedProperties
            OriginContextFragment originContext = new OriginContextFragment()
            {
                ElementID = spatialElement.Id.IntegerValue.ToString(), TypeName = Query.Name(spatialElement)
            };

            originContext.SetProperties(energyAnalysisSpace, settings.ParameterSettings);
            originContext.SetProperties(spatialElement, settings.ParameterSettings);
            space.AddFragment(originContext);

            SpaceAnalyticalFragment spaceAnalytical = new SpaceAnalyticalFragment();

            spaceAnalytical.SetProperties(energyAnalysisSpace, settings.ParameterSettings);
            spaceAnalytical.SetProperties(spatialElement, settings.ParameterSettings);
            space.AddFragment(spaceAnalytical);

            SpaceContextFragment spaceContext      = new SpaceContextFragment();
            List <string>        connectedElements = new List <string>();

            foreach (EnergyAnalysisSurface energyAnalysisSurface in energyAnalysisSpace.GetAnalyticalSurfaces())
            {
                connectedElements.Add(energyAnalysisSurface.CADObjectUniqueId);
            }

            spaceContext.ConnectedElements = connectedElements;
            spaceContext.SetProperties(energyAnalysisSpace, settings.ParameterSettings);
            spaceContext.SetProperties(spatialElement, settings.ParameterSettings);
            space.AddFragment(spaceContext);

            //Set identifiers, parameters & custom data
            space.SetIdentifiers(spatialElement);
            space.CopyParameters(spatialElement, settings.ParameterSettings);
            space.SetProperties(spatialElement, settings.ParameterSettings);
            space.SetProperties(energyAnalysisSpace, settings.ParameterSettings);

            refObjects.AddOrReplace(energyAnalysisSpace.Id, space);
            return(space);
        }
コード例 #15
0
ファイル: ToGBXML.cs プロジェクト: BHoM/XML_Toolkit
        public static GBXML.GBXML ToGBXML(this List <IBHoMObject> objs, GBXMLSettings settings)
        {
            List <Panel>    panels    = objs.Panels();
            List <Space>    spaces    = objs.Spaces();
            List <Level>    levels    = objs.Levels();
            List <Building> buildings = objs.Buildings();

            if (buildings.Count > 1)
            {
                BH.Engine.Reflection.Compute.RecordWarning("More than 1 building has been supplied. Space information will be assigned to the first building but all buildings will be serialised");
            }
            else if (buildings.Count == 0)
            {
                BH.Engine.Reflection.Compute.RecordWarning("No building was supplied, generic empty building is being used to group the data");
                buildings.Add(new Building());
            }

            List <Panel> shadingElements = panels.FilterPanelsByType(PanelType.Shade).Item1;

            panels = panels.FilterPanelsByType(PanelType.Shade).Item2; //Remove shading if it exists

            List <List <Panel> > panelsAsSpaces      = panels.ToSpaces();
            List <Construction>  constructions       = panels.Where(x => x.Construction != null).Select(x => x.Construction as Construction).ToList();
            List <Construction>  windowConstructions = panels.OpeningsFromElements().UniqueConstructions();

            List <GBXML.Building>       xmlBuildings     = buildings.Select(x => x.ToGBXML()).ToList();
            List <GBXML.BuildingStorey> xmlLevels        = levels.Where(x => x.StoreyGeometry(panelsAsSpaces) != null).Select(x => x.ToGBXML(x.StoreyGeometry(panelsAsSpaces), settings)).ToList();
            List <GBXML.Space>          xmlSpaces        = panelsAsSpaces.Select(x => x.ToGBXML(x.Level(levels), settings)).OrderBy(x => x.Name).ToList();
            List <GBXML.Surface>        xmlSurfaces      = new List <GBXML.Surface>();
            List <GBXML.Construction>   xmlConstructions = new List <GBXML.Construction>();
            List <GBXML.Layer>          xmlLayers        = new List <GBXML.Layer>();
            List <GBXML.Material>       xmlMaterials     = new List <GBXML.Material>();
            List <GBXML.WindowType>     xmlWindows       = new List <GBXML.WindowType>();

            List <Panel> usedPanels = new List <Panel>();

            foreach (List <Panel> space in panelsAsSpaces)
            {
                foreach (Panel p in space)
                {
                    if (usedPanels.Where(x => x.BHoM_Guid == p.BHoM_Guid).FirstOrDefault() != null)
                    {
                        continue;
                    }

                    xmlSurfaces.Add(p.ToGBXML(settings, space));
                    usedPanels.Add(p);
                }
            }

            //Check we haven't missed any panels (such as shading) and include them
            foreach (Panel p in panels)
            {
                if (usedPanels.Where(x => x.BHoM_Guid == p.BHoM_Guid).FirstOrDefault() != null)
                {
                    continue;
                }

                xmlSurfaces.Add(p.ToGBXML(settings));
                usedPanels.Add(p);
            }

            //Include shading
            foreach (Panel p in shadingElements)
            {
                if (usedPanels.Where(x => x.BHoM_Guid == p.BHoM_Guid).FirstOrDefault() != null)
                {
                    continue;
                }

                xmlSurfaces.Add(p.ToGBXMLShade(settings));
                usedPanels.Add(p);
            }

            foreach (Construction c in constructions)
            {
                if (c == null)
                {
                    continue;
                }

                GBXML.Construction xmlConc = c.ToGBXML();
                if (xmlConstructions.Where(x => x.ID == xmlConc.ID).FirstOrDefault() != null)
                {
                    continue; //Don't add the same construction twice
                }
                List <GBXML.Material> layerMaterials = new List <GBXML.Material>();
                foreach (Layer l in c.Layers)
                {
                    layerMaterials.Add(l.ToGBXML(settings));
                }

                xmlMaterials.AddRange(layerMaterials);

                GBXML.Layer layer = layerMaterials.ToGBXML();
                xmlLayers.Add(layer);

                xmlConc.LayerID.LayerIDRef = layer.ID;
                xmlConstructions.Add(xmlConc);
            }

            foreach (Opening o in panels.OpeningsFromElements())
            {
                OriginContextFragment openingEnvContextProperties = o.FindFragment <OriginContextFragment>(typeof(OriginContextFragment));

                string nameCheck = "";
                if (openingEnvContextProperties != null)
                {
                    nameCheck = openingEnvContextProperties.TypeName;
                }
                else if (o.OpeningConstruction != null)
                {
                    nameCheck = o.OpeningConstruction.Name;
                }

                var t = xmlWindows.Where(a => a.Name == nameCheck).FirstOrDefault();
                if (t == null && o.OpeningConstruction != null)
                {
                    xmlWindows.Add(o.OpeningConstruction.ToGBXMLWindow(settings, o));
                }
            }

            GBXML.GBXML gbx = new GBXML.GBXML();

            gbx.Campus.Building = xmlBuildings.ToArray();
            gbx.Campus.Location = buildings[0].ToGBXMLLocation(settings);
            gbx.Campus.Building[0].BuildingStorey = xmlLevels.ToArray();
            gbx.Campus.Building[0].Space          = xmlSpaces;
            gbx.Campus.Surface = xmlSurfaces;

            if (settings.IncludeConstructions)
            {
                gbx.Construction = xmlConstructions.ToArray();
                gbx.Layer        = xmlLayers.ToArray();
                gbx.Material     = xmlMaterials.ToArray();
                gbx.WindowType   = xmlWindows.ToArray();
            }
            else
            {
                gbx.WindowType = null;
            }

            //Set the building area
            List <Panel> floorElements = panels.Where(x => x.Type == PanelType.Floor || x.Type == PanelType.FloorExposed || x.Type == PanelType.FloorInternal || x.Type == PanelType.FloorRaised || x.Type == PanelType.SlabOnGrade || x.Type == PanelType.UndergroundSlab).ToList();

            double buildingFloorArea = 0;

            foreach (Panel p in floorElements)
            {
                buildingFloorArea += p.Area();
            }

            gbx.Campus.Building[0].Area = buildingFloorArea;

            //Document History
            GBXML.DocumentHistory DocumentHistory = new GBXML.DocumentHistory();
            DocumentHistory.CreatedBy.Date = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
            gbx.DocumentHistory            = DocumentHistory;

            //Unit set up
            gbx.TemperatureUnit      = settings.UnitSetUp.TemperatureUnit.ToGBX();
            gbx.LengthUnit           = settings.UnitSetUp.LengthUnit.ToGBX();
            gbx.AreaUnit             = settings.UnitSetUp.AreaUnit.ToGBX();
            gbx.VolumeUnit           = settings.UnitSetUp.VolumeUnit.ToGBX();
            gbx.UseSIUnitsForResults = (settings.ResultsUnitType == oM.Adapters.XML.Enums.UnitType.SI ? "true" : "false");

            return(gbx);
        }
コード例 #16
0
ファイル: Panel.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Environment.Elements.Panel EnvironmentPanelFromRevit(this FamilyInstance familyInstance, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            //Create a BuildingElement from the familyInstance geometry
            settings = settings.DefaultIfNull();

            oM.Environment.Elements.Panel panel = refObjects.GetValue <oM.Environment.Elements.Panel>(familyInstance.Id);
            if (panel != null)
            {
                return(panel);
            }

            PlanarSurface openingSurface = familyInstance.OpeningSurface(null, settings) as PlanarSurface;
            ICurve        outline        = openingSurface?.ExternalBoundary;

            if (outline == null)
            {
                return(null);
            }

            panel = new oM.Environment.Elements.Panel()
            {
                ExternalEdges = outline.ToEdges(),
                Name          = familyInstance.FamilyTypeFullName(),
            };

            //Set ExtendedProperties
            OriginContextFragment originContext = new OriginContextFragment()
            {
                ElementID = familyInstance.Id.IntegerValue.ToString(), TypeName = familyInstance.FamilyTypeFullName()
            };

            originContext.SetProperties(familyInstance.Symbol, settings.ParameterSettings);
            originContext.SetProperties(familyInstance, settings.ParameterSettings);
            panel.Fragments.Add(originContext);

            PanelAnalyticalFragment panelAnalytical = new PanelAnalyticalFragment();

            panelAnalytical.SetProperties(familyInstance.Symbol, settings.ParameterSettings);
            panelAnalytical.SetProperties(familyInstance, settings.ParameterSettings);
            panel.Fragments.Add(panelAnalytical);

            PanelContextFragment panelContext = new PanelContextFragment();

            panelContext.SetProperties(familyInstance.Symbol, settings.ParameterSettings);
            panelContext.SetProperties(familyInstance, settings.ParameterSettings);
            panel.Fragments.Add(panelContext);

            BuildingResultFragment buildingResults = new BuildingResultFragment();

            buildingResults.SetProperties(familyInstance.Symbol, settings.ParameterSettings);
            buildingResults.SetProperties(familyInstance, settings.ParameterSettings);
            panel.Fragments.Add(buildingResults);

            oM.Environment.Elements.PanelType?panelType = familyInstance.Category.PanelType();
            if (panelType.HasValue)
            {
                panel.Type = panelType.Value;
            }
            else
            {
                panel.Type = oM.Environment.Elements.PanelType.Undefined;
            }

            //Set identifiers, parameters & custom data
            panel.SetIdentifiers(familyInstance);
            panel.CopyParameters(familyInstance, settings.ParameterSettings);
            panel.SetProperties(familyInstance, settings.ParameterSettings);

            refObjects.AddOrReplace(familyInstance.Id, panel);
            return(panel);
        }
コード例 #17
0
ファイル: Opening.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Environment.Elements.Opening OpeningFromRevit(this EnergyAnalysisOpening energyAnalysisOpening, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            Element element = energyAnalysisOpening.Element();

            if (element == null)
            {
                oM.Environment.Elements.Opening result = refObjects.GetValue <oM.Environment.Elements.Opening>(energyAnalysisOpening.Id);
                if (result != null)
                {
                    return(result);
                }

                ICurve curve = energyAnalysisOpening.GetPolyloop().FromRevit();
                result = new oM.Environment.Elements.Opening()
                {
                    Edges = curve.ToEdges(),
                };

                OriginContextFragment originContext = new OriginContextFragment()
                {
                    ElementID = energyAnalysisOpening.Id.IntegerValue.ToString(), TypeName = energyAnalysisOpening.OpeningName
                };
                originContext.SetProperties(energyAnalysisOpening, settings.ParameterSettings);
                result.AddFragment(originContext);

                result.OpeningConstruction = energyAnalysisOpening.Construction(settings);
                result.Type = OpeningType.Undefined;

                //Set identifiers, parameters & custom data
                result.SetIdentifiers(energyAnalysisOpening);
                result.CopyParameters(energyAnalysisOpening, settings.ParameterSettings);
                result.SetProperties(energyAnalysisOpening, settings.ParameterSettings);

                refObjects.AddOrReplace(energyAnalysisOpening.Id, result);
                return(result);
            }
            else
            {
                oM.Environment.Elements.Opening result = refObjects.GetValue <oM.Environment.Elements.Opening>(energyAnalysisOpening.Id.IntegerValue);
                if (result != null)
                {
                    return(result);
                }

                ElementType elementType = element.Document.GetElement(element.GetTypeId()) as ElementType;

                ICurve curve = energyAnalysisOpening.GetPolyloop().FromRevit();
                result = new oM.Environment.Elements.Opening()
                {
                    Edges = curve.ToEdges(),
                    Name  = element.FamilyTypeFullName(),
                };

                OriginContextFragment originContext = new OriginContextFragment()
                {
                    ElementID = element.Id.IntegerValue.ToString(), TypeName = element.FamilyTypeFullName()
                };
                originContext.SetProperties(element, settings.ParameterSettings);
                originContext.SetProperties(elementType, settings.ParameterSettings);
                result.AddFragment(originContext);

                result.OpeningConstruction = energyAnalysisOpening.Construction(settings);

                OpeningType?openingType = element.Category.OpeningType();
                if (openingType.HasValue)
                {
                    result.Type = openingType.Value;
                }
                else
                {
                    result.Type = OpeningType.Undefined;
                }

                //Set identifiers, parameters & custom data
                result.SetIdentifiers(element);
                result.CopyParameters(element, settings.ParameterSettings);
                result.SetProperties(element, settings.ParameterSettings);

                refObjects.AddOrReplace(energyAnalysisOpening.Id, result);
                return(result);
            }
        }
コード例 #18
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static Building BuildingFromRevit(this ProjectInfo projectInfo, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();
            Document document = projectInfo.Document;

            Building building = refObjects.GetValue <Building>(projectInfo.Id);

            if (building != null)
            {
                return(building);
            }

            double elevation          = 0;
            double longitude          = 0;
            double latitude           = 0;
            double timeZone           = 0;
            string placeName          = string.Empty;
            string weatherStationName = string.Empty;

            if (document.SiteLocation != null)
            {
                elevation          = document.SiteLocation.Elevation.ToSI(UnitType.UT_Length);
                longitude          = document.SiteLocation.Longitude.ToSI(UnitType.UT_Length);
                latitude           = document.SiteLocation.Latitude.ToSI(UnitType.UT_Length);
                timeZone           = document.SiteLocation.TimeZone;
                placeName          = document.SiteLocation.PlaceName;
                weatherStationName = document.SiteLocation.WeatherStationName;
            }

            double projectAngle            = 0;
            double projectEastWestOffset   = 0;
            double projectElevation        = 0;
            double projectNorthSouthOffset = 0;

            if (document.ActiveProjectLocation != null)
            {
                ProjectLocation projectLocation = document.ActiveProjectLocation;
                XYZ             xyz             = new XYZ(0, 0, 0);
                ProjectPosition projectPosition = projectLocation.GetProjectPosition(xyz);
                if (projectPosition != null)
                {
                    projectAngle            = projectPosition.Angle;
                    projectEastWestOffset   = projectPosition.EastWest;
                    projectElevation        = projectPosition.Elevation;
                    projectNorthSouthOffset = projectPosition.NorthSouth;
                }
            }

            BH.oM.Environment.Climate.Location location = new BH.oM.Environment.Climate.Location()
            {
                Latitude = latitude, Longitude = longitude
            };
            building = new Building {
                Elevation = elevation, Location = location
            };

            //Set ExtendedProperties
            OriginContextFragment originContext = new OriginContextFragment()
            {
                ElementID = projectInfo.Id.IntegerValue.ToString(), Description = projectInfo.OrganizationDescription, TypeName = projectInfo.Name
            };

            building.AddFragment(originContext);

            BuildingAnalyticalFragment buildingAnalytical = new BuildingAnalyticalFragment()
            {
                GMTOffset = timeZone, NorthAngle = projectAngle
            };

            building.AddFragment(buildingAnalytical);

            BuildingContextFragment buildingContext = new BuildingContextFragment()
            {
                PlaceName = placeName, WeatherStation = weatherStationName
            };

            building.AddFragment(buildingContext);

            //Set identifiers, parameters & custom data
            building.SetIdentifiers(projectInfo);
            building.CopyParameters(projectInfo, settings.ParameterSettings);
            building.SetProperties(projectInfo, settings.ParameterSettings);

            refObjects.AddOrReplace(projectInfo.Id, building);
            return(building);
        }
コード例 #19
0
ファイル: Panel.cs プロジェクト: chuongmep/Revit_Toolkit
        /***************************************************/

        public static List <oM.Environment.Elements.Panel> EnvironmentPanelsFromRevit(this Wall wall, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            List <oM.Environment.Elements.Panel> panels = refObjects.GetValues <oM.Environment.Elements.Panel>(wall.Id);

            if (panels != null && panels.Count > 0)
            {
                return(panels);
            }

            if (wall.StackedWallOwnerId != null && wall.StackedWallOwnerId != ElementId.InvalidElementId)
            {
                return(null);
            }

            Dictionary <PlanarSurface, List <PlanarSurface> > surfaces = wall.PanelSurfaces(wall.FindInserts(true, true, true, true), settings);

            if (surfaces == null)
            {
                return(panels);
            }

            BH.oM.Physical.Constructions.Construction constrtuction = wall.WallType.ConstructionFromRevit(null, settings, refObjects);

            panels = new List <oM.Environment.Elements.Panel>();
            foreach (PlanarSurface surface in surfaces.Keys)
            {
                //Create the BuildingElement
                oM.Environment.Elements.Panel panel = new oM.Environment.Elements.Panel()
                {
                    ExternalEdges = surface.ExternalBoundary.ToEdges(),
                    Name          = wall.FamilyTypeFullName(),
                };

                //Set ExtendedProperties
                OriginContextFragment originContext = new OriginContextFragment()
                {
                    ElementID = wall.Id.IntegerValue.ToString(), TypeName = wall.FamilyTypeFullName()
                };
                originContext.SetProperties(wall.WallType, settings.ParameterSettings);
                originContext.SetProperties(wall, settings.ParameterSettings);
                panel.AddFragment(originContext);

                PanelAnalyticalFragment panelAnalytical = new PanelAnalyticalFragment();
                panelAnalytical.SetProperties(wall.WallType, settings.ParameterSettings);
                panelAnalytical.SetProperties(wall, settings.ParameterSettings);
                panel.AddFragment(panelAnalytical);

                PanelContextFragment panelContext = new PanelContextFragment();
                panelContext.SetProperties(wall.WallType, settings.ParameterSettings);
                panelContext.SetProperties(wall, settings.ParameterSettings);
                panel.AddFragment(panelContext);

                BuildingResultFragment buildingResults = new BuildingResultFragment();
                buildingResults.SetProperties(wall.WallType, settings.ParameterSettings);
                buildingResults.SetProperties(wall, settings.ParameterSettings);
                panel.AddFragment(buildingResults);

                panel.Construction = constrtuction;
                panel.Type         = oM.Environment.Elements.PanelType.Wall;

                //Set identifiers, parameters & custom data
                panel.SetIdentifiers(wall);
                panel.CopyParameters(wall, settings.ParameterSettings);
                panel.SetProperties(wall, settings.ParameterSettings);

                refObjects.AddOrReplace(wall.Id, panel);

                panels.Add(panel);
            }

            return(panels);
        }