/***************************************************/

        public static oM.Physical.Constructions.Construction Construction(this string constructionName, string materialName)
        {
            if (string.IsNullOrEmpty(constructionName) || string.IsNullOrEmpty(materialName))
            {
                return(null);
            }

            string matName = null;

            if (!string.IsNullOrEmpty(materialName))
            {
                matName = string.Format("Default {0} Material", materialName);
            }
            else
            {
                matName = "Default Material";
            }

            SolidMaterial transparentMaterialProperties = new SolidMaterial();

            transparentMaterialProperties.Name = matName;

            oM.Physical.Materials.Material material = new oM.Physical.Materials.Material();
            material.Properties.Add(transparentMaterialProperties);

            oM.Physical.Constructions.Construction construction = new oM.Physical.Constructions.Construction();
            construction.Name = constructionName;

            oM.Physical.Constructions.Layer layer = new oM.Physical.Constructions.Layer();
            layer.Material = material;

            construction.Layers.Add(layer);

            return(construction);
        }
Exemple #2
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Physical.Elements.Wall WallFromRevit(this Wall wall, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            if (wall == null)
            {
                return(null);
            }

            settings = settings.DefaultIfNull();

            oM.Physical.Elements.Wall bHoMWall = refObjects.GetValue <oM.Physical.Elements.Wall>(wall.Id);
            if (bHoMWall != null)
            {
                return(bHoMWall);
            }

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

            if (wall.CurtainGrid != null)
            {
                bHoMWall = wall.WallFromRevit_Curtain(settings, refObjects);
            }
            else
            {
                bHoMWall = wall.WallFromRevit_Solid(settings, refObjects);
            }

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

            HostObjAttributes hostObjAttributes = wall.Document.GetElement(wall.GetTypeId()) as HostObjAttributes;
            string            materialGrade     = wall.MaterialGrade(settings);

            oM.Physical.Constructions.Construction construction = hostObjAttributes.ConstructionFromRevit(materialGrade, settings, refObjects);
            bHoMWall.Construction = construction;

            bHoMWall.Name = wall.FamilyTypeFullName();

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

            refObjects.AddOrReplace(wall.Id, bHoMWall);
            return(bHoMWall);
        }
Exemple #3
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Physical.Elements.Roof RoofFromRevit(this RoofBase roof, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            if (roof == null)
            {
                return(null);
            }

            settings = settings.DefaultIfNull();

            oM.Physical.Elements.Roof bHoMRoof = refObjects.GetValue <oM.Physical.Elements.Roof>(roof.Id);
            if (bHoMRoof != null)
            {
                return(bHoMRoof);
            }

            List <CurtainGrid> curtainGrids = roof.ICurtainGrids();

            if (curtainGrids.Count != 0)
            {
                bHoMRoof = roof.CurtainRoofFromRevit(settings, refObjects);
            }
            else
            {
                bHoMRoof = roof.SolidRoofFromRevit(settings, refObjects);
            }

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

            HostObjAttributes hostObjAttributes = roof.Document.GetElement(roof.GetTypeId()) as HostObjAttributes;
            string            materialGrade     = roof.MaterialGrade(settings);

            oM.Physical.Constructions.Construction construction = hostObjAttributes.ConstructionFromRevit(materialGrade, settings, refObjects);
            bHoMRoof.Construction = construction;

            bHoMRoof.Name = roof.FamilyTypeFullName();

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

            refObjects.AddOrReplace(roof.Id, bHoMRoof);
            return(bHoMRoof);
        }
Exemple #4
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Physical.Constructions.Construction ConstructionFromRevit(this HostObjAttributes hostObjAttributes, string materialGrade = null, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            string refId = hostObjAttributes.Id.ReferenceIdentifier(materialGrade);

            oM.Physical.Constructions.Construction construction = refObjects.GetValue <oM.Physical.Constructions.Construction>(refId);
            if (construction != null)
            {
                return(construction);
            }

            List <BH.oM.Physical.Constructions.Layer> layers = new List <oM.Physical.Constructions.Layer>();
            CompoundStructure compoundStructure = hostObjAttributes.GetCompoundStructure();

            if (compoundStructure != null)
            {
                IEnumerable <CompoundStructureLayer> compoundStructureLayers = compoundStructure.GetLayers();
                if (compoundStructureLayers != null)
                {
                    foreach (CompoundStructureLayer layer in compoundStructureLayers)
                    {
                        layers.Add(layer.Layer(hostObjAttributes, materialGrade, settings, refObjects));
                    }
                }
            }

            construction = BH.Engine.Physical.Create.Construction(hostObjAttributes.FamilyTypeFullName(), layers);

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

            refObjects.AddOrReplace(refId, construction);
            return(construction);
        }
Exemple #5
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Architecture.Elements.Ceiling CeilingFromRevit(this Autodesk.Revit.DB.Ceiling ceiling, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            if (ceiling == null)
            {
                return(null);
            }

            settings = settings.DefaultIfNull();

            oM.Architecture.Elements.Ceiling bHoMCeiling = refObjects.GetValue <oM.Architecture.Elements.Ceiling>(ceiling.Id);
            if (bHoMCeiling != null)
            {
                return(bHoMCeiling);
            }

            oM.Physical.Constructions.Construction construction = (ceiling.Document.GetElement(ceiling.GetTypeId()) as HostObjAttributes).ConstructionFromRevit(null, settings, refObjects);

            ISurface location = null;
            Dictionary <PlanarSurface, List <PlanarSurface> > surfaces = ceiling.PanelSurfaces(null, settings);

            if (surfaces != null && surfaces.Count != 0)
            {
                List <ISurface> locations = new List <ISurface>();
                foreach (KeyValuePair <PlanarSurface, List <PlanarSurface> > kvp in surfaces)
                {
                    locations.Add(new PlanarSurface(kvp.Key.ExternalBoundary, kvp.Value.Select(x => x.ExternalBoundary).ToList()));
                }

                if (locations.Count == 1)
                {
                    location = locations[0];
                }
                else
                {
                    location = new PolySurface {
                        Surfaces = locations
                    }
                };
            }
            else
            {
                ceiling.NoPanelLocationError();
            }

            bHoMCeiling = new oM.Architecture.Elements.Ceiling {
                Surface = location, Construction = construction
            };
            bHoMCeiling.Name = ceiling.FamilyTypeFullName();

            // Add ceiling patterns
            List <BH.oM.Geometry.Line> ceilingPatterns = new List <BH.oM.Geometry.Line>();

            if (location is PlanarSurface)
            {
                ceilingPatterns.AddRange(ceiling.CeilingPattern(settings, location as PlanarSurface));
            }
            else if (location is PolySurface)
            {
                foreach (ISurface surface in ((PolySurface)location).Surfaces)
                {
                    if (surface is PlanarSurface)
                    {
                        ceilingPatterns.AddRange(ceiling.CeilingPattern(settings, surface as PlanarSurface));
                    }
                }
            }

            if (ceilingPatterns.Count != 0)
            {
                bHoMCeiling.Tiles = BH.Engine.Architecture.Compute.CeilingTiles(bHoMCeiling, ceilingPatterns);
            }

            if (surfaces.Values.Where(x => x != null).Sum(x => x.Count) != 0)
            {
                BH.Engine.Reflection.Compute.RecordWarning("Currently ceiling openings are not taken into account when generating ceilings.");
            }

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

            refObjects.AddOrReplace(ceiling.Id, bHoMCeiling);
            return(bHoMCeiling);
        }
Exemple #6
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Physical.Elements.Floor FloorFromRevit(this Floor floor, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            if (floor == null)
            {
                return(null);
            }

            settings = settings.DefaultIfNull();

            oM.Physical.Elements.Floor bHoMFloor = refObjects.GetValue <oM.Physical.Elements.Floor>(floor.Id);
            if (bHoMFloor != null)
            {
                return(bHoMFloor);
            }

            HostObjAttributes hostObjAttributes = floor.Document.GetElement(floor.GetTypeId()) as HostObjAttributes;
            string            materialGrade     = floor.MaterialGrade(settings);

            oM.Physical.Constructions.Construction construction = hostObjAttributes.ConstructionFromRevit(materialGrade, settings, refObjects);

            ISurface location = null;
            List <BH.oM.Physical.Elements.IOpening> openings = new List <oM.Physical.Elements.IOpening>();

            Dictionary <PlanarSurface, List <PlanarSurface> > surfaces = null;
            BoundingBoxXYZ bbox = floor.get_BoundingBox(null);

            if (bbox != null)
            {
                BoundingBoxIntersectsFilter bbif      = new BoundingBoxIntersectsFilter(new Outline(bbox.Min, bbox.Max));
                IList <ElementId>           insertIds = (floor as HostObject).FindInserts(true, true, true, true);
                List <Element> inserts;
                if (insertIds.Count == 0)
                {
                    inserts = new List <Element>();
                }
                else
                {
                    inserts = new FilteredElementCollector(floor.Document, insertIds).WherePasses(bbif).ToList();
                }

                List <FamilyInstance> windows = inserts.Where(x => x is FamilyInstance && x.Category.Id.IntegerValue == (int)BuiltInCategory.OST_Windows).Cast <FamilyInstance>().ToList();
                List <FamilyInstance> doors   = inserts.Where(x => x is FamilyInstance && x.Category.Id.IntegerValue == (int)BuiltInCategory.OST_Doors).Cast <FamilyInstance>().ToList();

                surfaces = floor.PanelSurfaces(windows.Union(doors).Select(x => x.Id), settings);
                if (surfaces != null)
                {
                    List <ISurface> locations = new List <ISurface>(surfaces.Keys);
                    if (locations.Count == 1)
                    {
                        location = locations[0];
                    }
                    else
                    {
                        location = new PolySurface {
                            Surfaces = locations
                        }
                    };

                    foreach (List <PlanarSurface> ps in surfaces.Values)
                    {
                        openings.AddRange(ps.Select(x => new BH.oM.Physical.Elements.Void {
                            Location = x
                        }));
                    }

                    foreach (FamilyInstance window in windows)
                    {
                        BH.oM.Physical.Elements.Window bHoMWindow = window.WindowFromRevit(floor, settings, refObjects);
                        if (bHoMWindow != null)
                        {
                            openings.Add(bHoMWindow);
                        }
                    }

                    foreach (FamilyInstance door in doors)
                    {
                        BH.oM.Physical.Elements.Door bHoMDoor = door.DoorFromRevit(floor, settings, refObjects);
                        if (bHoMDoor != null)
                        {
                            openings.Add(bHoMDoor);
                        }
                    }
                }
            }

            if (surfaces == null || surfaces.Count == 0)
            {
                floor.NoPanelLocationError();
            }

            bHoMFloor = new oM.Physical.Elements.Floor {
                Location = location, Openings = openings, Construction = construction
            };
            bHoMFloor.Name = floor.FamilyTypeFullName();

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

            refObjects.AddOrReplace(floor.Id, bHoMFloor);
            return(bHoMFloor);
        }

        /***************************************************/
    }