/***************************************************/ 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); }
/***************************************************/ /**** 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); }
/***************************************************/ /**** 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); }
/***************************************************/ /**** 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); }
/***************************************************/ /**** 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); }
/***************************************************/ /**** 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); } /***************************************************/ }