1

因此,我尝试使用输入字符串列表在使用 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 集合,但我不知道如何操作。先感谢您。提前感谢您的帮助!

4

1 回答 1

3

您的代码不起作用的原因是ElementSet在 Revit API 中没有实现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()
于 2014-05-26T09:19:09.350 回答