You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:22:26