__title__ = "Toggle SheetVisibility Menu"
__doc__ = """Version = 1.0
Date = 13.02.2025
________________________________________________________________
Description:
Create a UI form to control the toggle state of ViewSheet parameter: 'Appears in Sheet List'.
It's quick and dirty prototype 🧙♂️.
________________________________________________________________
Author: Erik Frits"""
from Autodesk.Revit.DB import *
from pyrevit import forms
import wpf, os, clr
from pyrevit.forms import select_views
clr.AddReference("System")
from System.Collections.Generic import List
from System.Windows import Application, Window, Visibility
from System.Windows.Controls import CheckBox, Button, TextBox, ListBoxItem, TextBlock
from System import Uri
PATH_SCRIPT = os.path.dirname(__file__)
doc = __revit__.ActiveUIDocument.Document
uidoc = __revit__.ActiveUIDocument
app = __revit__.Application
class WPF_SheetToggle(Window):
def __init__(self):
path_xaml_file = os.path.join(PATH_SCRIPT, 'ListBoxSearch.xaml')
wpf.LoadComponent(self, path_xaml_file)
self.populate_listbox()
self.ShowDialog()
def populate_listbox(self):
"""Add Sheet items to your ListBox."""
self.UI_listbox.Items.Clear()
all_sheets = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Sheets).WhereElementIsNotElementType().ToElements()
dict_sheets = {'[{}]_{}'.format(sheet.SheetNumber, sheet.Name): sheet for sheet in all_sheets}
for sheet_name, sheet in dict_sheets.items():
self.create_listbox_item(sheet_name, sheet)
def create_listbox_item(self, sheet_name, sheet):
"""Create ListBoxItem for each sheet"""
textblock = TextBlock()
textblock.Text = sheet_name
checkbox = CheckBox()
checkbox.Content = textblock
checkbox.Tag = sheet
checkbox.Click += self.UIe_toggle_visibility
current_toggle = sheet.get_Parameter(BuiltInParameter.SHEET_SCHEDULED).AsInteger()
checkbox.IsChecked = bool(current_toggle)
listbox_item = ListBoxItem()
listbox_item.Content = checkbox
self.UI_listbox.Items.Add(listbox_item)
@property
def search(self):
return self.UI_search.Text
def UIe_btn_run(self, sender, e):
print('Form Submitted!')
self.Close()
def UIe_search_text_changed(self, sender, e):
search_text = self.search.lower()
if search_text:
search_words = search_text.split()
for listbox_item in self.UI_listbox.Items:
checkbox = listbox_item.Content
textblock = checkbox.Content
view_name = textblock.Text.lower()
if all(word in view_name for word in search_words):
listbox_item.Visibility = Visibility.Visible
else:
listbox_item.Visibility = Visibility.Collapsed
if not search_text:
for listbox_item in self.UI_listbox.Items:
listbox_item.Visibility = Visibility.Visible
def UIe_toggle_visibility(self,sender, e):
sheet = sender.Tag
with Transaction(doc,'Change Sheet Visibiltiy Parameter') as t:
t.Start()
p_visibility = sheet.get_Parameter(BuiltInParameter.SHEET_SCHEDULED)
value = 1 if p_visibility.AsInteger() ==0 else 0
p_visibility.Set(value)
t.Commit()
UI = WPF_SheetToggle()