I’m not sure this exactly what you’re after, but you might be able to follow my logic:
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
import System
from System.Collections.Generic import List
doc = DocumentManager.Instance.CurrentDBDocument
cats = IN[0]
paramName = IN[1]
pValue = IN[2]
views = IN[3]
doc = DocumentManager.Instance.CurrentDBDocument
TransactionManager.Instance.EnsureInTransaction(doc)
castlst = []
for i in cats:
castlst.append(ElementId(i.Id))
typedCatList = List[ElementId](castlst)
rules = []
builtInParams = System.Enum.GetValues(BuiltInParameter)
bipNames = []
outview = []
for i in builtInParams:
bipNames.append(str(i))
bipDict = dict(zip(bipNames,builtInParams))
bips = [bipDict.get(p, "none") for p in paramName]
x = 0
TransactionManager.Instance.EnsureInTransaction(doc)
for view in views:
for bip in bips:
rules.append(ParameterFilterRuleFactory.CreateLessRule(ElementId(bip), pValue, 0.001))
filter = ParameterFilterElement.Create(doc, 'Test'+str(x), typedCatList, rules)
viewc = UnwrapElement(view)
viewc.AddFilter(filter.Id)
outview.append(viewc)
x = x+1
TransactionManager.Instance.TransactionTaskDone()
OUT = outview
Hi @vanlion,
The following (and inelegant) script, add the same view filter to several views :
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
import System
from System.Collections.Generic import List
doc = DocumentManager.Instance.CurrentDBDocument
cats = IN[0]
paramName = IN[1]
pValue = IN[2]
views = UnwrapElement(IN[4])
doc = DocumentManager.Instance.CurrentDBDocument
TransactionManager.Instance.EnsureInTransaction(doc)
castlst = []
for i in cats:
castlst.append(ElementId(i.Id))
typedCatList = List[ElementId](castlst)
rules = []
builtInParams = System.Enum.GetValues(BuiltInParameter)
bipNames = []
outview = []
for i in builtInParams:
bipNames.append(str(i))
bipDict = dict(zip(bipNames,builtInParams))
bips = [bipDict.get(p, "none") for p in paramName]
TransactionManager.Instance.EnsureInTransaction(doc)
for bip in bips:
rules.append(ParameterFilterRuleFactory.CreateLessRule(ElementId(bip), pValue, 0.001))
filter = ParameterFilterElement.Create(doc, IN[3], typedCatList, rules)
for view in views:
view.AddFilter(filter.Id)
outview.append(views)
TransactionManager.Instance.TransactionTaskDone()
OUT = outview[0]
4 Likes
You can also wrap it in a custom node and using lacing.
In fact, with a custom node with lacing on longest, the original script will try to create the same view filter again and again.
1 Like
Totally correct. I forgot we were creating the filter at the same time.
I’m not not able to test it at the moment. But i think this is the solution