Share

Document.GetUnusedElements Method

Returns the list of element ids that are not used and can be deleted from the document.


Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 26.1.0.0 (26.1.0.34)

Syntax

C#

public ISet<ElementId> GetUnusedElements(
	ISet<ElementId> categories
)

Parameters

categories  ISet<ElementId>
Collection of categories to check for unused elements.

Return Value

ISet<ElementId>
Unused elements that can be deleted from the document.

Exceptions

ExceptionCondition
ArgumentNullException A non-optional argument was null

Remarks

This method returns unused element ids that are available in the Purge Unused window in the Revit. To get unused elements that do not have a category assigned add INVALID to the collection of categories. If the input categories collection is empty, the method returns all unused elements in the document.

Example

C#

public void DeleteAllUnused(Autodesk.Revit.DB.Document document)
{
   using (Transaction transaction = new Transaction(document, "Delete unused elements"))
   {
      transaction.Start();

      ISet<ElementId> unusedElementIds = document.GetUnusedElements(new HashSet<ElementId>());
      while (unusedElementIds.Any())
      {
         document.Delete(unusedElementIds);
         unusedElementIds = document.GetUnusedElements(new HashSet<ElementId>());
      }

      transaction.Commit();
   }
}

public void GetUnusedElements(Autodesk.Revit.DB.Document document)
{
   // Get all unused elements in the document
   var allUnusedElementIds = document.GetUnusedElements(new HashSet<ElementId>());

   // Get unused elements without a category
   var unusedElementIdsWithNoCategory = document.GetUnusedElements(new HashSet<ElementId>() { new ElementId(BuiltInCategory.INVALID) });

   // Get unused wall and floors types
   HashSet<ElementId> categoriesToPurge = new HashSet<ElementId>
   {
      new ElementId(BuiltInCategory.OST_Walls),
      new ElementId(BuiltInCategory.OST_Floors)
   };

   var unusedElementIds = document.GetUnusedElements(categoriesToPurge);
}

VB

     Public Sub DeleteAllUnused(ByVal document As Document)
         Using transaction As Transaction = New Transaction(document, "Delete unused elements")
             transaction.Start()

             Dim unusedElementIds As ISet(Of ElementId) = document.GetUnusedElements(New HashSet(Of ElementId)())
             While unusedElementIds.Any()
                 document.Delete(unusedElementIds)
                 unusedElementIds = document.GetUnusedElements(New HashSet(Of ElementId)())
             End While

             transaction.Commit()
         End Using
     End Sub

     Public Sub GetUnusedElements(ByVal document As Document)
         ' Get all unused elements in the document
         Dim allUnusedElementIds = document.GetUnusedElements(New HashSet(Of ElementId)())

         ' Get unused elements without a category
         Dim unusedElementIdsWithNoCategory = document.GetUnusedElements(New HashSet(Of ElementId)() From {
                New ElementId(BuiltInCategory.INVALID)
            })

         ' Get unused wall and floors types
         Dim categoriesToPurge As HashSet(Of ElementId) = New HashSet(Of ElementId) From {
   New ElementId(BuiltInCategory.OST_Walls),
   New ElementId(BuiltInCategory.OST_Floors)
}

         Dim unusedElementIds = document.GetUnusedElements(categoriesToPurge)
     End Sub

See Also

Reference

Was this information helpful?