【问题标题】:Use python to get view filters for views in Revit project使用python获取Revit项目中视图的视图过滤器
【发布时间】:2018-12-01 20:42:41
【问题描述】:

我希望能够在我的项目中找到所有未使用的视图过滤器。

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

【问题讨论】:

  • 我的回答对您有帮助吗?你能把它标记为解决方案吗?

标签: python revit-2015


【解决方案1】:

添加了一个额外的步骤来过滤未使用的视图过滤器。收集文档中的所有视图过滤器并使用“SetDifference”节点获取当前未使用的过滤器。

【讨论】:

    【解决方案2】:

    这是实现所需的一种方法:

    # 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
    

    我的理解是,您需要一种方法来仅提取应用于区域计划的视图过滤器。这是一个两步过程,您可以获得区域计划,然后为每个视图提取所有视图过滤器。你会得到这样的东西:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 2020-02-26
      • 2014-11-24
      • 1970-01-01
      相关资源
      最近更新 更多