From c6dd5f6a9a4c73320e0e5f64ac02d0a8c4591df4 Mon Sep 17 00:00:00 2001 From: Adnane Belmadiaf Date: Tue, 5 May 2026 11:55:03 +0200 Subject: [PATCH] fix(InteractorStyleTrackballCamera): stop mouse move amplifying wheel zoom fixes #2636 --- .../Style/InteractorStyleTrackballCamera/index.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Sources/Interaction/Style/InteractorStyleTrackballCamera/index.js b/Sources/Interaction/Style/InteractorStyleTrackballCamera/index.js index 216c3f93d30..0ff10f0f033 100644 --- a/Sources/Interaction/Style/InteractorStyleTrackballCamera/index.js +++ b/Sources/Interaction/Style/InteractorStyleTrackballCamera/index.js @@ -36,8 +36,12 @@ function vtkInteractorStyleTrackballCamera(publicAPI, model) { break; case States.IS_DOLLY: - publicAPI.handleMouseDolly(renderer, pos); - publicAPI.invokeInteractionEvent({ type: 'InteractionEvent' }); + // Wheel zoom uses the dolly state too, we should ignore pointer movement + // so the mouse position does not amplify wheel zoom while scrolling. + if (!model.wheelDolly) { + publicAPI.handleMouseDolly(renderer, pos); + publicAPI.invokeInteractionEvent({ type: 'InteractionEvent' }); + } break; case States.IS_SPIN: @@ -154,12 +158,14 @@ function vtkInteractorStyleTrackballCamera(publicAPI, model) { //---------------------------------------------------------------------------- publicAPI.handleStartMouseWheel = () => { + model.wheelDolly = true; publicAPI.startDolly(); }; //-------------------------------------------------------------------------- publicAPI.handleEndMouseWheel = () => { publicAPI.endDolly(); + model.wheelDolly = false; }; //---------------------------------------------------------------------------- @@ -448,6 +454,7 @@ function vtkInteractorStyleTrackballCamera(publicAPI, model) { const DEFAULT_VALUES = { motionFactor: 10.0, zoomFactor: 10.0, + wheelDolly: false, }; // ----------------------------------------------------------------------------