Am not a python user yet, can anyone help me to edit the below code from “Quasar package” to run in all views at once rather than running in only active view
# dynamo version - 1.3.2
# author - min.naung
import clr
clr.AddReference("RevitAPI")
clr.AddReference("RevitServices")
import System
from System.Collections.Generic import List
from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
# document manager
doc = DocumentManager.Instance.CurrentDBDocument
# start transaction
TransactionManager.Instance.EnsureInTransaction(doc);
# active view
active_view = doc.ActiveView
# filter name "can name anything"
ifilter = "LinkLevelGrid_QuasarPackage"
found = False
# input[0] boolean
hide = False if IN[0] else True
# collect all filter elements
allFilters = FilteredElementCollector(doc).OfClass(FilterElement).ToElements()
# get filters from current view
viewFilters = active_view.GetFilters();
# collect filters' names
viewFiltersName = [doc.GetElement(i).Name.ToString() for i in viewFilters]
# loop each filter
for fter in allFilters:
# filter already have in doc but not in current view
if ifilter == fter.Name.ToString() and ifilter not in viewFiltersName:
# add filter
active_view.AddFilter(fter.Id)
# set filter visibility
active_view.SetFilterVisibility(fter.Id, hide);
found = True
# filter already have in doc and current view
if ifilter == fter.Name.ToString() and ifilter in viewFiltersName:
# set filter visibility
active_view.SetFilterVisibility(fter.Id, hide);
found = True
# if filter not found in doc
if not found:
# all grids in doc
grids = FilteredElementCollector(doc).OfClass(Grid).ToElements()
# all levels in doc
levels = FilteredElementCollector(doc).OfClass(Level).ToElements()
# collect category id from grid and level
CateIds = List[ElementId]([grids[0].Category.Id,levels[0].Category.Id])
# type ids from grids
gridTypeIds = set([i.GetTypeId() for i in grids])
# type ids from levels
levelTypeIds = set([i.GetTypeId() for i in levels])
# get grid type element
type_elems = [doc.GetElement(i) for i in gridTypeIds]
# get level type element
type_elems.extend([doc.GetElement(l) for l in levelTypeIds])
# loop type elements
for elem in type_elems:
# if "_quasar" not include in type name
if not "_quasar" in elem.LookupParameter("Type Name").AsString():
# add "_quasar" in type name
elem.Name = elem.LookupParameter("Type Name").AsString() + "_quasar";
# get type names
type_names = [i.LookupParameter("Type Name").AsString() for i in type_elems]
# type name parameter id
paramId = type_elems[0].LookupParameter("Type Name").Id
# create a "not ends with" filter rule
notendswith = ParameterFilterRuleFactory.CreateNotEndsWithRule(paramId,"_quasar",False)
# create parameter filter element
paramFilterElem = ParameterFilterElement.Create(doc, ifilter,CateIds,[notendswith])
# set filter overrides (same with add filter to current)
active_view.SetFilterOverrides(paramFilterElem.Id, OverrideGraphicSettings())
# set filter visibility
active_view.SetFilterVisibility(paramFilterElem.Id, hide)
# transaction done
TransactionManager.Instance.TransactionTaskDone()
# output
OUT = "DONE!"