无公开3D视图的Revit模型如何从Model Derivative获取标高数据?
从Model Derivative数据中获取标高信息(规避Revit语言差异)
核心思路:用Revit内置参数ID/内部名称定位标高属性
Revit的参数具备语言无关的内置ID和内部名称,不管UI是中文还是英文,这些标识始终保持一致,这是解决属性键不一致问题的关键:
- 标高关联参数的内置ID为
20011(对应Revit API中的BuiltInParameter.LEVEL_PARAM) - 该参数的内部名称为
LEVEL_PARAM
具体操作步骤
- 获取带内置参数ID的元素属性
调用Model Derivative的属性接口时,添加参数确保拿到完整的参数元数据:
GET https://developer.api.autodesk.com/modelderivative/v2/designdata/{urn}/metadata/{guid}/properties?forceget=true&includeParamId=true
其中includeParamId=true会返回每个属性的paramId字段,forceget=true确保获取最新的属性数据。
遍历元素,匹配标高属性
遍历返回的元素数据,找到paramId为20011(或internalName为LEVEL_PARAM)的属性,其value字段就是该元素所属标高的唯一标识(通常是标高的ID或名称)。获取标高自身的详细信息
若需要标高的具体参数(比如标高值),可以:
- 通过元素的
parent字段找到所属标高元素的ID,单独查询该元素的属性 - 或者直接筛选所有
category.id为-2000003(Revit标高类别的内置ID)的元素,这些就是模型中的所有标高,它们的属性里包含标高的高度值等信息。
示例代码片段(伪代码)
// 假设已获取到元素属性列表 const groupByLevel = {}; elements.forEach(element => { const levelParam = element.properties.find(p => p.paramId === "20011"); if (levelParam) { const levelKey = levelParam.value; groupByLevel[levelKey] = groupByLevel[levelKey] || []; groupByLevel[levelKey].push(element); } });
内容的提问来源于stack exchange,提问作者Duc Trung Tran
相关产品推荐
相关产品推荐

