【问题标题】:Revit using Python, Filter by families (Family Symbol)Revit 使用 Python,按族过滤(族符号)
【发布时间】:2020-08-29 00:09:53
【问题描述】:

我刚开始使用 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

如果FamilySymbolFilters 要求提供元素 ID,我不知道为什么它会期待 BuiltInParameter。 无论如何,任何帮助将不胜感激。 谢谢!

【问题讨论】:

    标签: python revit-api revit revitpythonshell pyrevit


    【解决方案1】:

    欢迎使用 Revit API。首先通过getting started material 工作,您可能会节省一些时间、精力和头疼的问题。此外,它将帮助您了解族定义与其类型之间的区别,后者在项目环境中生成符号,这些符号作为单独的实例放置。

    您所命名的FamSymb 实际上是标识您找到的家庭的元素ID。您看到的错误是由于您将该 ElementId 实例提供给 ElementId 构造函数的事实引起的。但是,ElementId 没有实现一个(复制)构造函数,它带有一个元素 id 参数。然而,它确实实现了一个采用BuiltInParameter 的方法,参见。 ElementId documentation

    您可以立即实例化 FamilySymbolFilter(FamSymb)(尽管我强烈建议以不同的方式命名 FamSymb)。

    【讨论】:

    • 抱歉回复晚了。非常感谢!这非常有效。也感谢您提供链接和信息。当我深入研究 Revit API 时,我相信它会派上用场。
    【解决方案2】:

    我认为您已经拥有所需的代码 - 但只是添加了一个不必要的条件。

    您似乎正在搜索一个名为“姓氏”的Family。像这样调整您的代码会将所有家庭作为Family 对象获取,并检查一个名为“家庭名称”的家庭:

    Families = FilteredElementCollector(doc).OfClass(Family)
    for fam in Families:
        if fam.Name == 'Family Name':
             # fam is the Family object called 'Family Name', do your worst!
             print fam.Name,'found!'
             print fam.FamilyCategory.Name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 2020-10-16
      • 2019-10-05
      • 2015-10-03
      相关资源
      最近更新 更多