基于Revit Python Shell从Revit图纸构件中获取cost属性的技术问询
用Revit Python Shell提取构件成本属性的实现方案
完全可以通过Revit API结合Revit Python Shell实现这个需求,以下是具体实现步骤和示例代码:
1. 确认成本属性的参数标识
首先要明确你所说的"cost属性"是Revit自带系统参数(如内置的Cost参数)还是自定义添加的共享/项目参数。你可以在Revit的属性面板中找到对应构件的成本参数,记下它的参数名称或参数GUID(如果是共享参数),这是代码中定位参数的关键。
2. 筛选目标构件
注意:Revit中的"图纸"(ViewSheet)本质是承载视图的容器,图纸上的构件是模型元素在对应视图中的投影。你可以选择两种筛选方式:
- 遍历项目中所有墙体、门窗构件,再判断它们是否在目标图纸的视图范围内(精准匹配图纸可见元素)
- 直接遍历项目中所有墙体、门窗类型的实例元素(快速获取全项目目标构件的成本属性)
3. Python代码示例
在Revit Python Shell中运行以下代码(根据实际参数名称调整):
# 导入Revit API依赖 import clr clr.AddReference('RevitAPI') clr.AddReference('RevitAPIUI') from Autodesk.Revit.DB import * from Autodesk.Revit.UI import * # 获取当前激活的Revit文档 doc = __revit__.ActiveUIDocument.Document # 定义需要提取的构件类别(墙体、门、窗) target_categories = [ BuiltInCategory.OST_Walls, BuiltInCategory.OST_Doors, BuiltInCategory.OST_Windows ] # 替换为你实际的成本参数名称(如"Cost"或自定义参数名) cost_param_name = "Cost" # 开启事务执行操作 with Transaction(doc, "提取构件成本属性") as trans: trans.Start() # 遍历每个目标类别 for cat in target_categories: # 收集该类别下的所有实例元素(排除族类型) collector = FilteredElementCollector(doc).OfCategory(cat).WhereElementIsNotElementType() for elem in collector: # 获取成本参数 cost_param = elem.LookupParameter(cost_param_name) # 检查参数是否存在且有值 if cost_param and cost_param.HasValue: # 输出构件信息和成本值 print(f"构件ID: {elem.Id.IntegerValue} | 类别: {elem.Category.Name} | 成本: {cost_param.AsValueString()}") trans.Commit()
补充说明
- 如果成本属性是共享参数,建议通过参数GUID查找,避免重名问题,示例代码可调整为:
cost_param = elem.get_Parameter(GUID("你的参数GUID")) - 若需仅提取指定图纸上的构件,可先获取目标
ViewSheet对象,再用FilteredElementCollector(doc, view_sheet.Id)限定筛选范围。
内容的提问来源于stack exchange,提问作者Cesar Jr Rodriguez
相关产品推荐
相关产品推荐

