SpatialElementGeometryCalculator Class


Use this class to calculate the geometry of a spatial element and obtain the relationships between the geometry and the element's boundary elements.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 24.0.0.0 (24.0.0.0)
Since:  2012

Syntax

C#
public class SpatialElementGeometryCalculator : IDisposable
Visual Basic
Public Class SpatialElementGeometryCalculator _
	Implements IDisposable
Visual C++
public ref class SpatialElementGeometryCalculator : IDisposable

Remarks

This class maintains an internal cache for geometry it has already processed. If you intend to calculate geometry for several elements in the same project you should use a single instance of this class. Note that the cache will be cleared when any change is made to the document.

Examples

CopyC#
// Calculate a room's geometry and find its boundary faces
SpatialElementGeometryCalculator calculator = new SpatialElementGeometryCalculator(doc);
SpatialElementGeometryResults results = calculator.CalculateSpatialElementGeometry(room); // compute the room geometry 
Solid roomSolid = results.GetGeometry(); // get the solid representing the room's geometry
foreach (Face face in roomSolid.Faces)
{
    double faceArea = face.Area;
    IList<SpatialElementBoundarySubface> subfaceList = results.GetBoundaryFaceInfo(face); // get the sub-faces for the face of the room
    foreach (SpatialElementBoundarySubface subface in subfaceList)
    {
        if (subfaceList.Count > 1) // there are multiple sub-faces that define the face
        {
            double subfaceArea = subface.GetSubface().Area; // get the area of each sub-face
            // sub-faces exist in situations such as when a room-bounding wall has been
            // horizontally split and the faces of each split wall combine to create the 
            // entire face of the room
        }
    }
}
CopyVB.NET
' Calculate a room's geometry and find its boundary faces
Dim calculator As New SpatialElementGeometryCalculator(doc)
Dim results As SpatialElementGeometryResults = calculator.CalculateSpatialElementGeometry(room)
' compute the room geometry 
Dim roomSolid As Solid = results.GetGeometry()
' get the solid representing the room's geometry
For Each face As Face In roomSolid.Faces
    Dim faceArea As Double = face.Area
    Dim subfaceList As IList(Of SpatialElementBoundarySubface) = results.GetBoundaryFaceInfo(face)
    ' get the sub-faces for the face of the room
    For Each subface As SpatialElementBoundarySubface In subfaceList
        If subfaceList.Count > 1 Then
            ' there are multiple sub-faces that define the face
            ' get the area of each sub-face
            ' sub-faces exist in situations such as when a room-bounding wall has been
            ' horizontally split and the faces of each split wall combine to create the 
            ' entire face of the room
            Dim subfaceArea As Double = subface.GetSubface().Area
        End If
    Next
Next

Inheritance Hierarchy

SystemObject
  Autodesk.Revit.DBSpatialElementGeometryCalculator

See Also

ArchiLabs

Stop fighting Revit automation.

Build repeatable BIM design and documentation workflows with scripts, data, and AI in one place, without wrestling brittle one-off automations.

Try ArchiLabs →