如何通过AutoDesk Forge API修改IFC模型默认单位,使属性库返回毫米值?
解决IFC属性库单位统一为毫米的方案
- 核心思路:绕过直接修改IFC源数据的限制,在属性库读取值后自动做单位转换,同时提前获取模型的原始单位信息来判断是否需要转换。
- 具体操作步骤:
- 获取模型原始单位:通过Viewer的API拿到加载后的模型实例,读取其
units属性(如model.units),判断是否为英寸("in")。 - 封装属性读取逻辑:写一个包装函数替代直接调用属性库,自动处理单位转换:
async function getPropInMm(model, dbId, propName) { const rawValue = await userfunction(model, dbId, propName); // 原属性库调用 const originalUnit = model.units; if (originalUnit === 'in') { // 1英寸=25.4毫米,转换后保留两位精度 return (parseFloat(rawValue) * 25.4).toFixed(2); } return rawValue; } - 替换原有调用:所有需要获取属性值的场景,都用这个包装函数代替直接调用
userfunction。
- 获取模型原始单位:通过Viewer的API拿到加载后的模型实例,读取其
- 进阶优化:如果不想逐个属性处理,可监听属性加载的全局事件,批量识别长度类属性并统一转换单位。
注意:若属性值带单位字符串(如"5 in"),需先解析提取纯数值后再做转换。
内容的提问来源于stack exchange,提问作者Desmond Robers
相关产品推荐
相关产品推荐

