Revit API 如何从 Revit 链接过滤元素

问题描述 投票:0回答:1

我正在使用 Python、pyRevit 和 Revit 2021

主要目标

我想使用

FilteredElementCollector
来收集我的项目中链接的 Revit 链接中的特定元素。

我的问题

我的问题是如何仅收集当前视图中且属于 Revit Links 的图元? 我不确定我尝试了什么,因为我正在处理一个包含多个 Revit 链接的大文件,当我尝试打印元素时,我会在每个链接内得到无穷无尽的元素列表,考虑到我当前的视图是,这似乎不正确一个没有太多元素的部分。

link_doc.ActiveView.Id
出现 NoneType 错误... 但是,当不传递活动视图时,我会得到我提到的无穷无尽的元素列表。

我的剧本

#######################################
# VARIABLES
#######################################
doc           = __revit__.ActiveUIDocument.Document     # type: Document
uidoc         = __revit__.ActiveUIDocument              # type: UIDocument
selection     = uidoc.Selection                         # type: Selection
#######################################
# MAIN
#######################################


# Collect all Revit Links instances
revit_link_instances_collector = FilteredElementCollector(doc, active_view.Id).OfClass(RevitLinkInstance).ToElements()
for link in revit_link_instances_collector:
    # Get the doc for current Link
    link_doc = link.GetLinkDocument()
    if link_doc:
        # collect all FamilyInstances
        linked_elemens = FilteredElementCollector(link_doc, link_doc.ActiveView.Id).OfClass(FamilyInstance).WhereElementIsNotElementType().ToElements()
        for element in linked_elemens:
            print(element)
python revit-api revitpythonshell pyrevit
1个回答
0
投票

是的,您需要仔细跟踪哪个文档拥有该视图以及您要查找的元素。活动视图位于当前文档中

A
。您要查找的元素位于链接文档
B
中。当您使用
FilteredElementCollector(Document doc, ElementId view_id)
构造函数时,它会返回一个新的
FilteredElementCollector
,它将搜索和过滤指定视图中
doc
中的可见元素,该视图也必须属于
doc
。因此,我不相信您可以在您描述的情况下使用该功能。

哇,进一步研究这个问题,我在 Revit API 讨论论坛中发现了一个解决此问题的答案,关于如何从链接的 Revit 模型中过滤可见元素

解决方案是使用新的

FilteredElementCollector
构造函数重载,采用两个视图元素 id
FilteredElementCollector(Document, ElementId, ElementId)
构造一个新的
FilteredElementCollector
,它将搜索和过滤主机文档视图中 Revit 链接中的可见元素。

© www.soinside.com 2019 - 2024. All rights reserved.