Skip to content

Commit

Permalink
fix(ImplicitPlaneWidget): jumpy behavior
Browse files Browse the repository at this point in the history
Manipulators need to have their normals set prior to handleEvent.
  • Loading branch information
floryst committed Jun 11, 2024
1 parent c41f48f commit 6fde259
Showing 1 changed file with 24 additions and 8 deletions.
32 changes: 24 additions & 8 deletions Sources/Widgets/Widgets3D/ImplicitPlaneWidget/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit 6fde259

Please sign in to comment.