Revit使用Python,按族过滤(族符号)

2024-10-01 22:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始使用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,如果FamilySymbolFilters请求元素Id。 无论如何,我们将非常感谢您的帮助。 谢谢


Tags: nameid元素doc符号family收集器fam
2条回答

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

看起来您正在搜索一个名为“姓氏”的Family。这样调整代码会将所有族作为Family对象获取,并检查一个名为“Family Name”的对象:

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

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

您所命名的FamSymb实际上是一个元素id,用于标识找到的族。您看到的错误是由于您正在将该ElementId实例馈送给ElementId构造函数。但是,ElementId没有实现采用元素id参数的(复制)构造函数。然而,它确实实现了一个BuiltInParameter,参见ElementId documentation

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

相关问题 更多 >

    热门问题