我正在使用 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)
是的,您需要仔细跟踪哪个文档拥有该视图以及您要查找的元素。活动视图位于当前文档中
A
。您要查找的元素位于链接文档 B
中。当您使用 FilteredElementCollector(Document doc, ElementId view_id)
构造函数时,它会返回一个新的 FilteredElementCollector
,它将搜索和过滤指定视图中 doc
中的可见元素,该视图也必须属于 doc
。因此,我不相信您可以在您描述的情况下使用该功能。
哇,进一步研究这个问题,我在 Revit API 讨论论坛中发现了一个解决此问题的答案,关于如何从链接的 Revit 模型中过滤可见元素。
FilteredElementCollector
构造函数重载,采用两个视图元素 id: FilteredElementCollector(Document, ElementId, ElementId)
构造一个新的 FilteredElementCollector
,它将搜索和过滤主机文档视图中 Revit 链接中的可见元素。