@thewtex/vtk.js-esm
Version:
Visualization Toolkit for the Web
73 lines (61 loc) • 3.13 kB
JavaScript
import macro from '../../macro.js';
import { j as cross, r as radiansFromDegrees } from '../../Common/Core/Math/index.js';
import { i as identity, r as rotate } from '../../vendor/gl-matrix/esm/mat4.js';
import { t as transformMat4 } from '../../vendor/gl-matrix/esm/vec3.js';
function trackballRotate(prevX, prevY, curX, curY, origin, direction, renderer, glRenderWindow) {
var dx = curX - prevX;
var dy = curY - prevY;
var camera = renderer.getActiveCamera();
var viewUp = camera.getViewUp();
var dop = camera.getDirectionOfProjection();
var size = renderer.getRenderWindow().getInteractor().getView().getSize();
var xdeg = 360.0 * dx / size[0];
var ydeg = 360.0 * dy / size[1];
var newDirection = new Float64Array([direction[0], direction[1], direction[2]]);
var xDisplayAxis = viewUp;
var yDisplayAxis = [0, 0, 0];
cross(dop, viewUp, yDisplayAxis);
var rot = identity(new Float64Array(16));
rotate(rot, rot, radiansFromDegrees(xdeg), xDisplayAxis);
rotate(rot, rot, radiansFromDegrees(-ydeg), yDisplayAxis);
transformMat4(newDirection, newDirection, rot);
return newDirection;
} // ----------------------------------------------------------------------------
// vtkTrackballManipulator methods
// ----------------------------------------------------------------------------
function vtkTrackballManipulator(publicAPI, model) {
// Set our className
model.classHierarchy.push('vtkTrackballManipulator');
var prevX = 0;
var prevY = 0; // --------------------------------------------------------------------------
publicAPI.handleEvent = function (callData, glRenderWindow) {
var newDirection = trackballRotate(prevX, prevY, callData.position.x, callData.position.y, model.origin, model.normal, callData.pokedRenderer);
prevX = callData.position.x;
prevY = callData.position.y;
return newDirection;
}; // --------------------------------------------------------------------------
publicAPI.reset = function (callData) {
prevX = callData.position.x;
prevY = callData.position.y;
};
} // ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
var DEFAULT_VALUES = {
normal: [0, 0, 1]
}; // ----------------------------------------------------------------------------
function extend(publicAPI, model) {
var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
Object.assign(model, DEFAULT_VALUES, initialValues);
macro.obj(publicAPI, model);
macro.setGetArray(publicAPI, model, ['normal'], 3);
vtkTrackballManipulator(publicAPI, model);
} // ----------------------------------------------------------------------------
var newInstance = macro.newInstance(extend, 'vtkTrackballManipulator'); // ----------------------------------------------------------------------------
var vtkTrackballManipulator$1 = {
trackballRotate: trackballRotate,
extend: extend,
newInstance: newInstance
};
export default vtkTrackballManipulator$1;
export { extend, newInstance, trackballRotate };