我刚刚开始使用Revit API,但有一个问题。我一直在寻找一种按家庭筛选Revit元素的方法。这是我的程序:首先,我执行一个过滤器元素收集器以获得所有家庭符号ID。
Families = FilteredElementCollector(doc).OfClass(Family).ToElements()
for fam in Families:
if fam.Name == 'Family Name':
FamSymb = fam.ID
这应该使我获得家庭符号ID。然后,我尝试使用此ID创建过滤后的元素收集器。
ElementFilter = FamilySymbolFilter(ElementId(FamSymb))
New_Collector = FilteredElementCollector(doc).WherePasses(ElementFilter).ToElementIds()
这给我以下错误:Microsoft.Scripting.ArgumentTypeException: expected BuiltInParameter, got ElementId
。
如果BuiltInParameter
要求元素ID,我不知道为什么要期待FamilySymbolFilters
。无论如何,我们将不胜感激。谢谢!
欢迎使用Revit API。首先通过getting started material工作,可能会节省一些时间,精力和头部抓挠。此外,它将帮助您理解族定义及其类型之间的区别,族定义及其类型在项目环境中生成符号,这些符号作为单独的实例放置。
您命名为FamSymb
的实际上是一个标识您找到的家庭的元素ID。您看到的错误是由于您将ElementId实例馈送到ElementId
构造函数这一事实引起的。但是,ElementId
没有实现带有元素id参数的(副本)构造函数。但是,它确实实现了一个取BuiltInParameter
的功能,请参见。 ElementId documentation。
您可以立即实例化FamilySymbolFilter(FamSymb)
(虽然我强烈建议您以其他方式命名FamSymb
)。