首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Revit API 2019中ElementId(BuiltInCategory.OST_Walls)会失败?

为什么在Revit API 2019中ElementId(BuiltInCategory.OST_Walls)会失败?
EN

Stack Overflow用户
提问于 2019-03-01 18:51:53
回答 3查看 448关注 0票数 0

我在试着过滤墙壁。为此,我使用

代码语言:javascript
复制
categories = List[ElementId]()
myId = ElementId(BuiltInCategory.OST_Walls)
categories.Add(myId)

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

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

代码语言:javascript
复制
filter = ParameterFilterElement.Create(doc, "Walls filter", categories)

...I获取ArgumentException。我使用的是Revit 2019 (带pyRevit)。据我所知,它曾经与Revit 2018一起工作,但我看不出有任何理由它不应该再工作了。我遗漏了什么?

非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2019-03-03 23:31:14

您可以简单地使用filtered element collector OfCategory Method

例如,查看filtered element collector optimisation上的Building Coder提示。

票数 1
EN

Stack Overflow用户

发布于 2019-04-23 18:16:20

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

代码语言:javascript
复制
FilteredElementCollector collector = new FilteredElementCollector(document);
ICollection<Element> walls = collector.OfCategory(BuiltInCategory.OST_Walls).ToElements();
票数 0
EN

Stack Overflow用户

发布于 2021-09-07 14:30:36

我同意Mah Noor的回答。

如果您需要一个具有多个类别的筛选器,您可以使用:

代码语言:javascript
复制
        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()添加到查询中。

诚挚的问候

弗朗索瓦

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54943111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档