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

Revit API修改墙体参数后数据库与UI数值不一致技术问询

问题原因与解决方案

这是典型的Revit单位转换问题:

  • Revit API内部统一使用**英尺(Foot)**作为存储单位,无论项目设置的是公制还是英制。
  • 你直接把毫米数值(2675、45)赋值给参数的AsDouble(),Revit会将这些数值识别为英尺单位。
  • UI属性面板显示的是转换为项目单位(毫米)后的结果:
    • 2675英尺 × 304.8毫米/英尺 = 815340毫米
    • 45英尺 × 304.8毫米/英尺 = 13716毫米
  • Snoop Revit DB查询到的是内部存储的英尺数值,所以和你输入的数字一致,但实际对应UI的毫米值被放大了304.8倍,导致墙体位置异常。

解决方法

使用Revit API的UnitUtils.ConvertToInternalUnits方法,将毫米数值转换为Revit内部单位(英尺)后再赋值:

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import UnitUtils, DisplayUnitType, BuiltInParameter
from rpw import db

# 原始毫米参数值
target_height_mm = 2675
target_offset_mm = 45

# 转换为Revit内部单位
height_internal = UnitUtils.ConvertToInternalUnits(target_height_mm, DisplayUnitType.DUT_MILLIMETERS)
offset_internal = UnitUtils.ConvertToInternalUnits(target_offset_mm, DisplayUnitType.DUT_MILLIMETERS)

# 在事务中创建墙体并设置参数
with db.Transaction("Create Wall with Correct Units"):
    # 假设你已经获取了墙体路径curve、墙体类型wall_type、基准标高level等对象
    wall = Wall.Create(doc, curve, wall_type.Id, level.Id, height_internal, offset_internal, False, False)
    
    # 若需修改已有墙体参数,可使用以下代码
    # wall.get_Parameter(BuiltInParameter.WALL_USER_HEIGHT_PARAM).Set(height_internal)
    # wall.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET).Set(offset_internal)

这样设置后,数据库存储的内部单位数值会正确对应UI显示的毫米值,墙体位置也会恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:36:18