Forge Viewer加载第二个模型后首个模型属性被清空如何解决?
问题根因
首个模型属性面板为空的问题,是sharedPropertyDbPath参数的使用场景错误导致的:
- 该参数的设计目的是复用同一设计文件导出的不同视图的属性数据库(比如同一份DWG导出的2D施工图和3D模型共享属性库),仅适用于同源多视图加载场景,不能用于两个独立模型的加载场景。
- 你给第二个模型配置了指向首个模型的
sharedPropertyDbPath后,Viewer会将全局默认的属性数据库替换为共享库,首个模型的构件dbId无法在新的共享属性库中匹配到对应数据,就会出现属性面板为空的问题。
解决方案
该多模型同时加载、各自正常展示属性的场景完全可以实现,按以下步骤调整即可:
- 删掉第二个模型加载参数中的
sharedPropertyDbPath配置项,每个独立模型默认会加载自己的属性数据库,互不干扰。 - 保留其余三个配置项即可满足坐标对齐、单位适配的需求,调整后的加载参数如下:
return { placementTransform: mat, globalOffset: globalOffset, applyScaling: displayUnit, };
- 如果你有自定义属性查询逻辑,多模型场景下建议显式指定模型实例查询属性,避免使用全局
viewer.getProperties方法默认读取当前激活模型的属性,示例写法如下:
// 点击事件回调中获取当前选中的构件所属的模型实例,再查询属性 const selection = viewer.getSelection()[0]; const model = viewer.impl.modelQueue().getModel(selection.modelId); model.getProperties(selection.dbId, (props) => { // 处理属性数据 });
补充说明
版本升级未解决问题的原因是该问题不属于Viewer版本缺陷,属于参数使用场景不符合设计预期,调整参数后即可在7.x全版本正常运行。
内容的提问来源于stack exchange,提问作者Urs Forrer
相关产品推荐
相关产品推荐

