GetGeneratingElementIds Method


Element Get Generating Element Ids Method

Returns the ids of the element(s) that generated the input geometry object.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 25.0.0.0 (25.0.0.0)
Syntax
public ICollection<ElementId> GetGeneratingElementIds(
	GeometryObject geometryObject
)

Parameters

geometryObject GeometryObject
The geometry object whose generating element is requested.

Return Value

ICollection ElementId
The id(s) of the element(s) that generated (or may have generated) the given geometry object. Empty if no generating elements are found. If the set contains just one id, it is the id of the element that generated the geometry object.
Exceptions
Exception Condition
ArgumentException The input geometryObject is invalid and so cannot be used to obtain the generating element ids.
ArgumentNullException A non-optional argument was null
Remarks
This function supports many different types of relationships among elements. Most of these relationships will return a single element, for example:
  • Window and door cutting walls
  • Openings cutting hosts
  • Face splitting faces
  • Wall sweep or reveal traversing wall
A few relationships have the potential for returning multiple elements, including:
  • Walls joining to other wall(s)
  • Elements extending to roof(s)
If more than one id is returned, one of them (unspecified) is the id of the element that generated the geometry object and the others are ids of related elements. For example, if a wall A is joined to two walls B and C in a way that creates two end faces, and if this function is called for one of the two end faces, it will return the ids of walls B and C.
Example
// Find elements joined or attached to the end faces of a given wall (such as walls and roofs).
// Mid-joined walls (such as in a T configuration) are not found because they do not affect end face geometry.

ICollection<ElementId> joinedElements = new Collection<ElementId>(); // collection to store the walls joined to the selected wall

// find all faces of the selected wall
GeometryElement geometryElement = wall.get_Geometry(new Options());
foreach (GeometryObject geometryObject in geometryElement)
{
    if (geometryObject is Solid)
    {
        Solid solid = geometryObject as Solid;
        foreach (Face face in solid.Faces)
        {
            // for each face, find the other elements that generated the geometry of that face
            ICollection<ElementId> generatingElementIds = wall.GetGeneratingElementIds(face);

            generatingElementIds.Remove(wall.Id); // remove the originally selected wall, leaving only other elements joined to it
            foreach (ElementId id in generatingElementIds)
            {
                if (!(joinedElements.Contains(id)))
                    joinedElements.Add(id); // add each wall joined to this face to the overall collection 
            }
        }
    }
}

uidocument.Selection.SetElementIds(joinedElements); // select all of the joined elements
See Also