Forge 查看器:如何修复从模型浏览器中选择的隐藏模型的 'toggleVisibility' 未定义?

Forge viewer: how to fix 'toggleVisibility' of undefined for Hidden models selected from model browser?

我正在使用 Autodesk forge viewer 7.2.0 版本并尝试加载多个模型。对于少数模型,我使用 modelOption 'loadAsHidden: true' 模型将被隐藏,但会按预期添加到模型浏览器中(眼睛图标处于活动状态,但我认为它应该处于非活动状态)。 当我单击隐藏模型的眼睛图标时加载查看器后,我希望将模型加载到查看器中,但出现以下错误:

core.js:12501 ERROR TypeError: Cannot read property 'toggleVisibility' of undefined
    at MultiModelVisibilityManager.LMV../src/tools/VisibilityManager.js.MultiModelVisibilityManager.toggleVisibility (viewer3D.js:84086)
    at GuiViewer3D.LMV../src/application/Viewer3D.js.Viewer3D.toggleVisibility (viewer3D.js:33306)
    at ViewerModelStructurePanel.LMV../src/gui/ViewerModelStructurePanel.js.ViewerModelStructurePanel.onEyeIcon (viewer3D.js:67026)
    at ModelStructureTreeDelegate.<anonymous> (viewer3D.js:62564)

通过进一步调查,我发现隐藏模型的 visibilityManager 为空,这是导致问题的原因,但是当我执行 viewer.showModel(hiddenModel) 时,它有 visibilityManager 并且模型浏览器工作预期。

我预计当隐藏模型的眼睛图标被点击时它应该在内部执行 showModel() 并将模型加载到查看器。如果我有不同的看法或建议我解决这个问题,有人可以建议我吗?

您可以像下面这样搭载 onEyeIcon 处理程序:

viewer.modelstructure.onEyeIcon = function(dbId, model) {
        this.viewer.showModel(model);
        this.viewer.toggleVisibility(dbId, model);
    };

编辑:

要同步结构面板中的眼睛图标,您可以手动初始化可见性管理器并在那里翻转模型根的可见性 - 可以在任何 post 模型加载生命周期中执行,这对用户来说是完全无法察觉的最终用户:

NOP_VIEWER.loadModel(svfURL, options, ()=>{
const model = NOP_VIEWER.impl.modelQueue().getHiddenModels()[0];
model.visibilityManager = new Autodesk.Viewing.Private.VisibilityManager(NOP_VIEWER.impl, model);
model.visibilityManager.toggleVisibility(sb.getRootId())
})