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