Revit API: Isolate Elements

There is no method to permanently isolate elements. So I will show you how to use .Excluding method of FilteredElementCollector to hide everything except elements we need.

Tags: 
Oct 2022

❓How to Isolate Elements with Revit API + python

So you have come to the point where you wanted to isolate your elements and you could not find the right method. You might have seen IsolateElementsTemporary method but that's not exactly the right fit.

There are probably many different ways to Isolate your elements, but I like to use .Excluding method of FilteredElementCollector to get all elements except for the ones I want to isolate and hide them (if possible).

code
# -*- coding: utf-8 -*-
# ⬇️ Imports
from Autodesk.Revit.DB import *
import clr

clr.AddReference('System')
from System.Collections.Generic import List

# 📦 Variables
uidoc       = __revit__.ActiveUIDocument
doc         = __revit__.ActiveUIDocument.Document
active_view = doc.ActiveView


# 🎯 Function
def isolate_elements(elements, view):
    # type:(List[ElementId], View) -> None
    """Function to Isolate Elements in the given View."""

    # ❌Elements to Hide
    hide_elem = FilteredElementCollector(doc, view.Id)\
        .Excluding(elements)\
        .WhereElementIsNotElementType().ToElements()

    # 🔎 Filter Elements that can not be hidden.
    hide_elem_ids = [e.Id for e in hide_elem 
                      if e.CanBeHidden(view)]

    # 🔅 Isolate Elements
    view.HideElements(List[ElementId](hide_elem_ids))


# 🎯 Main
t = Transaction(doc, 'Isolate Elements')
t.Start()

# 🔦 Get Elements to Isolate
elements_to_isolate = [doc.GetElement(e_id) 
        for e_id in uidoc.Selection.GetElementIds()]


List_isolate_ids = List[ElementId](elements_to_isolate)

# ✅ Isolate Elements
isolate_elements(List_isolate_ids, active_view)
t.Commit()

__author__ = 'Erik Frits'

⌨️ Happy Coding!

— Erik Frits