You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 21:54:04