[英]Use python to get view filters for views in Revit project
I would like to be able to find all of the view filters in my project that are not being used. 我希望能够在我的项目中找到所有未使用的视图过滤器。
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
from System.Collections.Generic import *
# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
#collect all views in model
collector = FilteredElementCollector(doc)
views = collector.OfClass(View).ToElements()
areaPlans = []
#collect all views filters in the model
collector = FilteredElementCollector(doc)
filters = collector.OfClass(ParameterFilterElement).ToElements()
#viewFilters = []
#filter out view templates
for i in views:
if not i.IsTemplate:
if i.ViewType == ViewType.AreaPlan:
areaPlans.append(i.ToDSType(True))
else:
continue
bipViewFilter = filters
#Assign your output to the OUT variable.
OUT = bipViewFilter, areaPlans
Here's one way you can achieve what you need: 这是实现所需内容的一种方法:
# Import Element wrapper extension methods
import clr
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
# first collect all of the views in a project
allViews = FilteredElementCollector(doc).OfClass(View).ToElements()
# filter out just the Area Plans
areaPlans = []
for i in allViews:
if not i.IsTemplate and i.ViewType == ViewType.AreaPlan:
areaPlans.append(i)
# extract filters used in all area plans
if len(areaPlans) != 0:
viewFilters = [[] for i in range(len(areaPlans))]
for index, item in enumerate(areaPlans):
filters = item.GetFilters()
if len(filters) != 0:
for j in filters:
viewFilters[index].append(doc.GetElement(j))
OUT = areaPlans, viewFilters
My understanding was that you need a way to extract only View Filters that were applied to Area Plans. 我的理解是,您需要一种仅提取应用于区域平面图的视图过滤器的方法。 This is a two step process where you can get Area Plans and then extract all View Filters for each view.
这是一个两步过程,您可以在其中获取区域平面图,然后为每个视图提取所有视图过滤器。 You get something like this:
您得到的是这样的:
One additional step was added to filter for the unused View Filters. 添加了另一步骤来过滤未使用的视图过滤器。 Collected all View Filters in document and used a 'SetDifference' node to get filters that were not being currently used.
收集文档中的所有视图过滤器,并使用“ SetDifference”节点获取当前未使用的过滤器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.