All files / Sources/Interaction/Manipulators/VRButtonPanManipulator index.js

42.85% Statements 9/21
0% Branches 0/7
50% Functions 2/4
42.85% Lines 9/21

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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85                            7x   7x               7x                                                                 1x               7x   7x 7x     7x         1x                
import macro from 'vtk.js/Sources/macros';
import vtkCompositeVRManipulator from 'vtk.js/Sources/Interaction/Manipulators/CompositeVRManipulator';
import {
  Device,
  Input,
} from 'vtk.js/Sources/Rendering/Core/RenderWindowInteractor/Constants';
import { States } from 'vtk.js/Sources/Rendering/Core/InteractorStyle/Constants';
 
// ----------------------------------------------------------------------------
// vtkVRButtonPanManipulator methods
// ----------------------------------------------------------------------------
 
function vtkVRButtonPanManipulator(publicAPI, model) {
  // Set our className
  model.classHierarchy.push('vtkVRButtonPanManipulator');
 
  publicAPI.onButton3D = (interactorStyle, renderer, state, eventData) => {
    if (eventData.pressed) {
      interactorStyle.startCameraPose();
    } else if (state === States.IS_CAMERA_POSE) {
      interactorStyle.endCameraPose();
    }
  };
 
  publicAPI.onMove3D = (interactorStyle, renderer, state, eventData) => {
    if (state !== States.IS_CAMERA_POSE) {
      return;
    }
 
    // move the world in the direction of the
    // controller
    const camera = renderer.getActiveCamera();
    const oldTrans = camera.getPhysicalTranslation();
 
    // look at the y axis to determine how fast / what direction to move
    const speed = eventData.gamepad.axes[1];
 
    // 0.05 meters / frame movement
    const pscale = speed * 0.05 * camera.getPhysicalScale();
 
    // convert orientation to world coordinate direction
    const dir = camera.physicalOrientationToWorldDirection(
      eventData.orientation
    );
 
    camera.setPhysicalTranslation(
      oldTrans[0] + dir[0] * pscale,
      oldTrans[1] + dir[1] * pscale,
      oldTrans[2] + dir[2] * pscale
    );
  };
}
 
// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
 
const DEFAULT_VALUES = {
  device: Device.RightController,
  input: Input.TrackPad,
};
 
// ----------------------------------------------------------------------------
 
export function extend(publicAPI, model, initialValues = {}) {
  Object.assign(model, DEFAULT_VALUES, initialValues);
 
  macro.obj(publicAPI, model);
  vtkCompositeVRManipulator.extend(publicAPI, model, initialValues);
 
  // Object specific methods
  vtkVRButtonPanManipulator(publicAPI, model);
}
 
// ----------------------------------------------------------------------------
 
export const newInstance = macro.newInstance(
  extend,
  'vtkVRButtonPanManipulator'
);
 
// ----------------------------------------------------------------------------
 
export default { newInstance, extend };