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
相关产品推荐
相关产品推荐

