【问题标题】:Create a collection of item ids Revit API in Python在 Python 中创建项目 ID Revit API 的集合
【发布时间】:2014-05-24 04:31:56
【问题描述】:

所以我尝试使用输入字符串列表在使用 Revit API 的视图中隔离它们。我已经做到了这一点,但是我在尝试创建一个集合的地方陷入困境,该集合将视图中的所有元素删除并删除从输入 ID 创建的元素。我这样做是为了得到一组除我想要隔离的元素之外的所有元素。

dataEnteringNode = IN0
view = IN0
str_ids = IN1
doc = __doc__
collector = FilteredElementCollector(doc, view.Id)

for i in str_ids:
    int_id = int(i)
    id = ElementId(int_id)
    element = doc.GetElement(id)
    element_set = ElementSet()
    element_set.Insert(element)

elements_to_hide = collector.WhereElementIsNotElementType().Excluding(element_set).ToElements()

#Assign your output to the OUT variable
OUT = elements_to_hide

在解决此错误时,我将不胜感激。我得到了“预期的 ICollection [ElementId],已设置”。我猜问题出在排除过滤器中,我需要在其中创建要排除的 ID 集合,但我不知道如何操作。先感谢您。提前感谢您的帮助!

【问题讨论】:

  • 哪一行导致了错误?而且我认为element_set 应该在循环外声明,而不是在循环内。

标签: python-3.x collections set ironpython revit-api


【解决方案1】:

您的代码不起作用的原因是 Revit API 中的 ElementSet 没有实现 ICollection<T> 接口 - 只是 IEnumerable<T>。因此,为了让您的代码正常工作,您需要从您的集合中创建一个 ICollection<T> 对象。

试试这样的:

# ...
from System.Collections.Generic import List
element_collection = List[ElementId](element_set)
elements_to_hide = collector.WhereElementIsNotElementType().Excluding(element_collection).ToElements()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多