The Revit API provides access to the elements and objects created by Revit to perform energy analyses on conceptual design models. The following classes allow you to work with this data:
In addition to these classes, there is a Document.Export() overload that takes a MassGBXMLExportOptions parameter which exports a gBXML file containing conceptual energy analysis elements (mass elements) only.
The main class associated with conceptual energy analysis is MassEnergyAnalyticalModel. This class associates a mass instance with energy analytical model data and geometry. The geometry begins as a copy of its associated mass instance geometry and is modified according to the requirements of the energy analytical model. The static method MassEnergyAnalyticalModel. GetMassEnergyAnalyticalModelIdForMassInstance() will return the ElementId for the MassEnergyAnalyticalModel for a given mass instance.
A MassLevelData is defined by associating a particular level with a particular mass element in a Revit project. This can be done using the MassInstanceUtils.AddMassLevelDataToMassInstance() method. MassLevelData reports metrics, such as floor areas, related to conceptual space planning. MassLevelData contains information, such as ConceptualConstructionType, used as part of the Conceptual Energy Analytical model. The MassLevel data geometry is determined by combining all the geometry of a mass into a single geometry, and then taking the area of intersection with the level of the MassLevelData.
MassZones are created by dividing a MassEnergyAnalyticalModel into pieces by intersecting MassLevelDatas associated with a Mass FamilyInstance with the geometries of the MassEnergyAnalyticalModel associated with the same Mass FamilyInstance. ElementIds of the MassZones associated with a MassEnergyAnalyticalModel can be retrieved using the GetMassZoneIds() method.
From a MassEnergyAnalyticalModel, you can get References to all Faces which are meaningful for it. Using these references, you can get the MassSurfaceData associated with each one using the GetMassSurfaceDataIdForReference() method. MassSurfaceData holds properties and other data about a face in the MassEnergyAnalyticalModel element, such as the material value, and dimensions of auto-generated elements such as sill height, and skylight width.
MassSurfaceData also holds the id of the ConceptualConstructionType associated with the reference surface. ConceptualConstructionType describes the conceptual physical, construction, and energy properties in a manner that can be understood by both the Revit BIM model and Green Building Studio/Green Building XML. This class has numerous static methods to get the ElementId of the ConceptualConstructionType for different aspects of a building (such as walls and windows) in a given document.
Another property of MassSurfaceData is CategoryIdForConceptualSurfaceType which provides the mass subcategory ElementId used for its ConceptualSurfaceType. ConceptualSurfaceType represents a conceptual BIM object category to assign to faces in Mass geometries. There is one ConceptualSurfaceType element for each of the Mass Surface Subcategories. Using the static method ConceptualSurfaceType.GetByMassSubCategoryId(), the ConceptualSurfaceType for a MassSurfaceData can be obtained from the mass subcategory id.
When Conceptual Energy Analysis is enabled in a Revit Project, massing faces will be assigned to the subcategories of Mass category with which these ConceptualSurfaceType's are associated. A default ConceptualConstructionType is associated with the ConceptualSurfaceType. This default ConceptualConstructionType is assigned to Mass faces with the corresponding subcategory. Changing the default ConceptualConstructionType associated with the ConceptualSurfaceType will update the ConceptualConstruction type for all Mass faces of that subcategory for which the user has not specifically provided an override value.
The MassInstancesUtils utility class provides static methods to get information about a mass instance, such as the total occupiable floor area or total building volume represented by a mass instance, as well as to create a MassLevelData (Mass Floor) to associate a Level with a mass instance as discussed above.