All files / Sources/Widgets/Manipulators/PlaneManipulator index.js

60% Statements 6/10
0% Branches 0/1
60% Functions 3/5
60% Lines 6/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66                                                  21x   21x                                   21x               21x   21x         1x          
import macro from 'vtk.js/Sources/macros';
import vtkPlane from 'vtk.js/Sources/Common/DataModel/Plane';
 
import vtkAbstractManipulator from 'vtk.js/Sources/Widgets/Manipulators/AbstractManipulator';
 
export function intersectDisplayWithPlane(
  x,
  y,
  planeOrigin,
  planeNormal,
  renderer,
  glRenderWindow
) {
  const near = glRenderWindow.displayToWorld(x, y, 0, renderer);
  const far = glRenderWindow.displayToWorld(x, y, 1, renderer);
 
  return vtkPlane.intersectWithLine(near, far, planeOrigin, planeNormal).x;
}
 
// ----------------------------------------------------------------------------
// vtkPlaneManipulator methods
// ----------------------------------------------------------------------------
 
function vtkPlaneManipulator(publicAPI, model) {
  // Set our className
  model.classHierarchy.push('vtkPlaneManipulator');
 
  publicAPI.handleEvent = (callData, glRenderWindow) =>
    model._addWorldDeltas({
      worldCoords: intersectDisplayWithPlane(
        callData.position.x,
        callData.position.y,
        publicAPI.getOrigin(callData),
        publicAPI.getNormal(callData),
        callData.pokedRenderer,
        glRenderWindow
      ),
    });
}
 
// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
 
function defaultValues(initialValues) {
  return {
    ...initialValues,
  };
}
 
// ----------------------------------------------------------------------------
 
export function extend(publicAPI, model, initialValues = {}) {
  vtkAbstractManipulator.extend(publicAPI, model, defaultValues(initialValues));
 
  vtkPlaneManipulator(publicAPI, model);
}
 
// ----------------------------------------------------------------------------
 
export const newInstance = macro.newInstance(extend, 'vtkPlaneManipulator');
 
// ----------------------------------------------------------------------------
 
export default { intersectDisplayWithPlane, extend, newInstance };