0

我正在尝试过滤墙壁。为此我使用

categories = List[ElementId]()
myId = ElementId(BuiltInCategory.OST_Walls)
categories.Add(myId)

..但这显然不会返回有效的ElementId,因为当我打印它时,它有一些负值(如果我打印“doc.GetElement(myId)”,我会得到“None”)。

然后,确实在创建过滤器时...

filter = ParameterFilterElement.Create(doc, "Walls filter", categories)

...我得到一个 ArgumentException。我正在使用 Revit 2019(带有 pyRevit)。据我记得,它曾经与 Revit 2018 一起使用,但我看不出有任何理由不再适用。我错过了什么?

非常感谢!

4

3 回答 3

1

您可以简单地使用过滤元素收集器OfCategory方法

例如,查看关于过滤元素收集器优化的建筑编码器提示。

于 2019-03-03T15:31:14.190 回答
0

将 ElementCategoryFilter 应用于收集器以获取项目的所有墙壁。通过使用以下代码,您可以过滤任何类型的类别。我在 Revit 2019 上试过这个。

FilteredElementCollector collector = new FilteredElementCollector(document);
ICollection<Element> walls = collector.OfCategory(BuiltInCategory.OST_Walls).ToElements();
于 2019-04-23T10:16:19.820 回答
0

我同意@Mah Noor 的回答。

如果您需要具有多个类别的过滤器,您可以使用:

        ElementCategoryFilter wallFilter = new ElementCategoryFilter(BuiltInCategory.OST_Walls);
        ElementCategoryFilter windowFilter = new ElementCategoryFilter(BuiltInCategory.OST_Windows);
        LogicalOrFilter wallAndWindowFilter = new LogicalOrFilter(wallFilter, windowFilter);
        ICollection<Element> collection = new FilteredElementCollector(doc).WherePasses(wallAndWindowFilter);

额外提示,您可能希望将 .WhereElementIsNotElementType() 或 .WhereElementIsElementType() 添加到您的查询中。

此致

弗朗索瓦

于 2021-09-07T14:30:36.403 回答