You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取Revit族类型的类型参数?PyRevit+IronPython实现求助

获取Revit族类型参数的正确方法

你之前的问题核心在于混淆了实例参数和类型参数的存储位置:实例参数属于单个构件(比如某根具体的柱子),而类型参数是存在于对应的**族类型(FamilySymbol)**中,不是实例本身。之前的代码一直在访问FamilyInstance(构件实例)的参数,自然只能拿到实例参数啦。

下面给你两种可行的解决思路,直接用IronPython在PyRevit里就能运行:

方式一:直接收集目标类别的族类型

如果只需要获取某一类构件(比如结构柱)的所有类型参数,可以直接过滤收集FamilySymbol对象,这才是存储类型参数的地方:

from pyrevit import revit, DB

doc = __revit__.ActiveUIDocument.Document
target_category = DB.BuiltInCategory.OST_StructuralColumns

# 收集目标类别的所有族类型(FamilySymbol)
family_symbols = DB.FilteredElementCollector(doc)\
    .OfCategory(target_category)\
    .OfClass(DB.FamilySymbol)\
    .ToElements()

# 遍历每个族类型,获取它的参数
for symbol in family_symbols:
    print(f"=== 族类型:{symbol.Name} 的类型参数 ===")
    # 获取所有类型参数
    all_type_params = [p.Definition.Name for p in symbol.Parameters]
    # 获取有序的类型参数
    ordered_type_params = [p.Definition.Name for p in symbol.GetOrderedParameters()]
    
    print("所有类型参数(排序后):")
    print(sorted(all_type_params))
    print("\n有序类型参数:")
    print(ordered_type_params)
    print("\n")

方式二:从构件实例关联到族类型

如果已经有了构件实例的集合,也可以通过实例的Symbol属性获取对应的族类型,再提取参数:

from pyrevit import revit, DB

doc = __revit__.ActiveUIDocument.Document
curview = doc.ActiveView
target_category = DB.BuiltInCategory.OST_StructuralColumns

# 收集当前视图中的结构柱实例
elements = DB.FilteredElementCollector(doc, curview.Id)\
    .OfCategory(target_category)\
    .WhereElementIsNotElementType()\
    .ToElements()

# 去重族类型(避免重复输出同一个类型的参数)
unique_symbols = set()

for ele in elements:
    # 获取当前实例对应的族类型
    symbol = ele.Symbol
    if symbol not in unique_symbols:
        unique_symbols.add(symbol)
        print(f"=== 族类型:{symbol.Name} 的类型参数 ===")
        # 获取所有类型参数
        all_type_params = [p.Definition.Name for p in symbol.Parameters]
        # 获取有序的类型参数
        ordered_type_params = [p.Definition.Name for p in symbol.GetOrderedParameters()]
        
        print("所有类型参数(排序后):")
        print(sorted(all_type_params))
        print("\n有序类型参数:")
        print(ordered_type_params)
        print("\n")

关键说明

  • FamilySymbol:Revit中存储族类型定义的对象,所有类型参数都在这里
  • ele.Symbol:从构件实例(FamilyInstance)获取对应族类型的快捷方式
  • set()去重是因为同一族类型可能有多个实例,避免重复输出参数列表

内容的提问来源于stack exchange,提问作者shahabaz sha

火山引擎 最新活动