使用MarkupsCore时Markup View模式下viewer.restoreState失效求助
MarkupsCore ViewMode下restoreState失效问题解决方案
根因说明
MarkupsCore扩展在进入View/Edit模式后会接管Viewer的相机、视图状态控制逻辑,你当前的执行顺序中,hide方法执行后相关的视图劫持还未完全释放,此时调用restoreState的动作会被拦截,所以无法生效。
修正执行逻辑
- 首先退出编辑模式、隐藏Markup层,等待视图控制权交还给原生Viewer
- 调用restoreState恢复保存的视图状态,可通过Viewer的
VIEWER_STATE_RESTORED事件监听确认状态恢复完成 - 再显示Markup层、加载标注数据
修正后代码示例
// 先退出Markup相关模式,释放视图控制 _markupExtension.leaveEditMode(); _markupExtension.hide(); // 恢复保存的视图状态,可自定义需要恢复的状态项 _markupExtension.viewer.restoreState(_state, { viewport: true, selection: true, hideObjects: true, explode: true }); // 监听视图状态恢复完成事件后再加载标注,避免时序问题 _markupExtension.viewer.addEventListener(Autodesk.Viewing.VIEWER_STATE_RESTORED, () => { _markupExtension.show(layerId.toString()); _markupExtension.loadMarkups(_data, layerId.toString()); }, { once: true });
额外注意事项
- 如果低性能设备上偶尔出现时序问题,可以给restoreState加100-200ms的延迟触发,适配渲染耗时
- 保存视图状态时需要确保是在未进入Markup模式的状态下调用
viewer.getState(),否则保存的状态本身会携带Markup的异常参数,导致恢复失败 - 不要在show或者loadMarkups执行之后调用restoreState,此时Markup已经重新接管视图控制,恢复动作会被直接忽略
内容的提问来源于stack exchange,提问作者vanc
相关产品推荐
相关产品推荐

