From 6fde2594fe80c5d23128b67e7f44327d83306e34 Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 6 Jun 2024 13:18:58 -0400 Subject: [PATCH] fix(ImplicitPlaneWidget): jumpy behavior Manipulators need to have their normals set prior to handleEvent. --- .../Widgets3D/ImplicitPlaneWidget/index.js | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/Sources/Widgets/Widgets3D/ImplicitPlaneWidget/index.js b/Sources/Widgets/Widgets3D/ImplicitPlaneWidget/index.js index 5669c749712..21068112de0 100644 --- a/Sources/Widgets/Widgets3D/ImplicitPlaneWidget/index.js +++ b/Sources/Widgets/Widgets3D/ImplicitPlaneWidget/index.js @@ -47,16 +47,32 @@ function widgetBehavior(publicAPI, model) { return macro.VOID; } - model.lineManipulator.setWidgetOrigin(model.widgetState.getOrigin()); - model.planeManipulator.setWidgetOrigin(model.widgetState.getOrigin()); + model.lineManipulator.setWidgetOrigin(model.activeState.getOrigin()); + model.lineManipulator.setWidgetNormal(model.activeState.getNormal()); + model.planeManipulator.setWidgetOrigin(model.activeState.getOrigin()); + model.planeManipulator.setWidgetNormal(model.activeManipulator.getNormal()); model.trackballManipulator.reset(callData); // setup trackball delta + model.trackballManipulator.setWidgetNormal(model.activeState.getNormal()); - // updates worldDelta - model.lineManipulator.handleEvent(callData, model._apiSpecificRenderWindow); - model.planeManipulator.handleEvent( - callData, - model._apiSpecificRenderWindow - ); + // update worldDelta with the proper manipulator + let activeManipulator = null; + switch (model.activeState.getUpdateMethodName()) { + case 'updateFromOrigin': + activeManipulator = model.planeManipulator; + break; + case 'updateFromPlane': + activeManipulator = model.lineManipulator; + break; + case 'updateFromNormal': + activeManipulator = model.trackballManipulator; + break; + default: + // skip + } + + if (activeManipulator) { + activeManipulator.handleEvent(callData, model._apiSpecificRenderWindow); + } if (model.dragable) { model._draggingWidgetOrigin = model.widgetState.getOrigin();