Forge Viewer中BimWalk模式下setNavigationLock功能异常问题咨询
Forge Viewer BimWalk模式导航锁异常问题解答
问题定性
该现象属于非预期异常行为,由BimWalk工具和导航锁的逻辑不兼容导致:导航锁仅阻止了视图更新动作,但未清空锁生效期间BimWalk工具捕获并积压的鼠标位移事件,锁解除后所有积压事件会一次性触发视图位移。Orbit模式的输入拦截逻辑直接作用于事件捕获层,不会留存未处理的输入事件,因此无该问题。
可用规避方案
- 方案1:解除导航锁前主动清空BimWalk工具的输入状态缓存
在调用NOP_VIEWER.setNavigationLock(false)前,先执行以下代码:const bimWalkTool = NOP_VIEWER.getTool('bimwalk'); bimWalkTool && bimWalkTool.clearInputState(); - 方案2:导航锁激活期间临时停用BimWalk工具的输入捕获
开启导航锁时执行:
解除导航锁后重新激活BimWalk工具即可恢复第一人称操作:const bimWalkTool = NOP_VIEWER.getTool('bimwalk'); bimWalkTool && bimWalkTool.deactivate();const bimWalkTool = NOP_VIEWER.getTool('bimwalk'); bimWalkTool && bimWalkTool.activate(); - 方案3:全局监听导航锁状态变更事件,自动处理缓存清理
注册事件监听器后无需手动调用清理逻辑,适配所有导航锁切换场景:NOP_VIEWER.addEventListener(Autodesk.Viewing.NAVIGATION_LOCK_CHANGED_EVENT, (e) => { if (e.isLocked) { const bimWalkTool = NOP_VIEWER.getTool('bimwalk'); bimWalkTool && bimWalkTool.clearInputState(); } });
内容的提问来源于stack exchange,提问作者g-birk
相关产品推荐
相关产品推荐

