{“ast”:null,“code”:“// raw.githubusercontent.com/mrdoob/three.js/master/examples/jsm/controls/OrbitControls.jsnn/**n * @author qiao / github.com/qiaon * @author mrdoob / mrdoob.comn * @author alteredq / alteredqualia.com/n * @author WestLangley / github.com/WestLangleyn * @author erich666 / erichaines.comn * @author ScieCode / github.com/sciecoden */nimport { EventDispatcher, MOUSE, Quaternion, Spherical, TOUCH, Vector2, Vector3 } from "three"; // This set of controls performs orbiting, dollying (zooming), and panning.n// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).n//n// Orbit - left mouse / touch: one-finger moven// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squishn// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger movennvar OrbitControls = function OrbitControls(object, domElement) {n this.object = object;n this.domElement = domElement !== undefined ? domElement : document; // Set to false to disable this controlnn this.enabled = true; // "target" sets the location of focus, where the object orbits aroundnn this.target = new Vector3(); // How far you can dolly in and out ( PerspectiveCamera only )nn this.minDistance = 0;n this.maxDistance = Infinity; // How far you can zoom in and out ( OrthographicCamera only )nn this.minZoom = 0;n this.maxZoom = Infinity; // How far you can orbit vertically, upper and lower limits.n // Range is 0 to Math.PI radians.nn this.minPolarAngle = 0; // radiansnn this.maxPolarAngle = Math.PI; // radiansn // How far you can orbit horizontally, upper and lower limits.n // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].nn this.minAzimuthAngle = -Infinity; // radiansnn this.maxAzimuthAngle = Infinity; // radiansn // Set to true to enable damping (inertia)n // If damping is enabled, you must call controls.update() in your animation loopnn this.enableDamping = false;n this.dampingFactor = 0.05; // This option actually enables dollying in and out; left as "zoom" for backwards compatibility.n // Set to false to disable zoomingnn this.enableZoom = true;n this.zoomSpeed = 1.0; // Set to false to disable rotatingnn this.enableRotate = true;n this.rotateSpeed = 1.0; // Set to false to disable panningnn this.enablePan = true;n this.panSpeed = 1.0;n this.screenSpacePanning = false; // if true, pan in screen-spacenn this.keyPanSpeed = 7.0; // pixels moved per arrow key pushn // Set to true to automatically rotate around the targetn // If auto-rotate is enabled, you must call controls.update() in your animation loopnn this.autoRotate = false;n this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60n // Set to false to disable use of the keysnn this.enableKeys = true; // The four arrow keysnn this.keys = {n LEFT: 37,n UP: 38,n RIGHT: 39,n BOTTOM: 40n }; // Mouse buttonsnn this.mouseButtons = {n LEFT: MOUSE.ROTATE,n MIDDLE: MOUSE.DOLLY,n RIGHT: MOUSE.PANn }; // Touch fingersnn this.touches = {n ONE: TOUCH.ROTATE,n TWO: TOUCH.DOLLY_PANn }; // for resetnn this.target0 = this.target.clone();n this.position0 = this.object.position.clone();n this.zoom0 = this.object.zoom; //n // public methodsn //nn this.getPolarAngle = function () {n return spherical.phi;n };nn this.getAzimuthalAngle = function () {n return spherical.theta;n };nn this.saveState = function () {n scope.target0.copy(scope.target);n scope.position0.copy(scope.object.position);n scope.zoom0 = scope.object.zoom;n };nn this.reset = function () {n scope.target.copy(scope.target0);n scope.object.position.copy(scope.position0);n scope.object.zoom = scope.zoom0;n scope.object.updateProjectionMatrix();n scope.dispatchEvent(changeEvent);n scope.update();n state = STATE.NONE;n }; // this method is exposed, but perhaps it would be better if we can make it private…nnn this.update = function () {n var offset = new Vector3(); // so camera.up is the orbit axisnn var quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0));n var quatInverse = quat.clone().inverse();n var lastPosition = new Vector3();n var lastQuaternion = new Quaternion();n return function update() {n var position = scope.object.position;n offset.copy(position).sub(scope.target); // rotate offset to "y-axis-is-up" spacenn offset.applyQuaternion(quat); // angle from z-axis around y-axisnn spherical.setFromVector3(offset);nn if (scope.autoRotate && state === STATE.NONE) {n rotateLeft(getAutoRotationAngle());n }nn if (scope.enableDamping) {n spherical.theta += sphericalDelta.theta * scope.dampingFactor;n spherical.phi += sphericalDelta.phi * scope.dampingFactor;n } else {n spherical.theta += sphericalDelta.theta;n spherical.phi += sphericalDelta.phi;n } // restrict theta to be between desired limitsnnn spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta)); // restrict phi to be between desired limitsnn spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));n spherical.makeSafe();n spherical.radius *= scale; // restrict radius to be between desired limitsnn spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius)); // move target to panned locationnn if (scope.enableDamping === true) {n scope.target.addScaledVector(panOffset, scope.dampingFactor);n } else {n scope.target.add(panOffset);n }nn offset.setFromSpherical(spherical); // rotate offset back to "camera-up-vector-is-up" spacenn offset.applyQuaternion(quatInverse);n position.copy(scope.target).add(offset);n scope.object.lookAt(scope.target);nn if (scope.enableDamping === true) {n sphericalDelta.theta *= 1 - scope.dampingFactor;n sphericalDelta.phi *= 1 - scope.dampingFactor;n panOffset.multiplyScalar(1 - scope.dampingFactor);n } else {n sphericalDelta.set(0, 0, 0);n panOffset.set(0, 0, 0);n }nn scale = 1; // update condition is:n // min(camera displacement, camera rotation in radians)^2 > EPSn // using small-angle approximation cos(x/2) = 1 - x^2 / 8nn if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {n scope.dispatchEvent(changeEvent);n lastPosition.copy(scope.object.position);n lastQuaternion.copy(scope.object.quaternion);n zoomChanged = false;n return true;n }nn return false;n };n }();nn this.dispose = function () {n scope.domElement.removeEventListener('contextmenu', onContextMenu, false);n scope.domElement.removeEventListener('mousedown', onMouseDown, false);n scope.domElement.removeEventListener('wheel', onMouseWheel, false);n scope.domElement.removeEventListener('touchstart', onTouchStart, false);n scope.domElement.removeEventListener('touchend', onTouchEnd, false);n scope.domElement.removeEventListener('touchmove', onTouchMove, false);n document.removeEventListener('mousemove', onMouseMove, false);n document.removeEventListener('mouseup', onMouseUp, false);n window.removeEventListener('keydown', onKeyDown, false); //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?n }; //n // internalsn //nnn var scope = this;n var changeEvent = {n type: 'change'n };n var startEvent = {n type: 'start'n };n var endEvent = {n type: 'end'n };n var STATE = {n NONE: -1,n ROTATE: 0,n DOLLY: 1,n PAN: 2,n TOUCH_ROTATE: 3,n TOUCH_PAN: 4,n TOUCH_DOLLY_PAN: 5,n TOUCH_DOLLY_ROTATE: 6n };n var state = STATE.NONE;n var EPS = 0.000001; // current position in spherical coordinatesnn var spherical = new Spherical();n var sphericalDelta = new Spherical();n var scale = 1;n var panOffset = new Vector3();n var zoomChanged = false;n var rotateStart = new Vector2();n var rotateEnd = new Vector2();n var rotateDelta = new Vector2();n var panStart = new Vector2();n var panEnd = new Vector2();n var panDelta = new Vector2();n var dollyStart = new Vector2();n var dollyEnd = new Vector2();n var dollyDelta = new Vector2();nn function getAutoRotationAngle() {n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;n }nn function getZoomScale() {n return Math.pow(0.95, scope.zoomSpeed);n }nn function rotateLeft(angle) {n sphericalDelta.theta -= angle;n }nn function rotateUp(angle) {n sphericalDelta.phi -= angle;n }nn var panLeft = function () {n var v = new Vector3();n return function panLeft(distance, objectMatrix) {n v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrixnn v.multiplyScalar(-distance);n panOffset.add(v);n };n }();nn var panUp = function () {n var v = new Vector3();n return function panUp(distance, objectMatrix) {n if (scope.screenSpacePanning === true) {n v.setFromMatrixColumn(objectMatrix, 1);n } else {n v.setFromMatrixColumn(objectMatrix, 0);n v.crossVectors(scope.object.up, v);n }nn v.multiplyScalar(distance);n panOffset.add(v);n };n }(); // deltaX and deltaY are in pixels; right and down are positivennn var pan = function () {n var offset = new Vector3();n return function pan(deltaX, deltaY) {n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;nn if (scope.object.isPerspectiveCamera) {n // perspectiven var position = scope.object.position;n offset.copy(position).sub(scope.target);n var targetDistance = offset.length(); // half of the fov is center to top of screennn targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180.0); // we use only clientHeight here so aspect ratio does not distort speednn panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);n panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);n } else if (scope.object.isOrthographicCamera) {n // orthographicn panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);n panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);n } else {n // camera neither orthographic nor perspectiven console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.');n scope.enablePan = false;n }n };n }();nn function dollyIn(dollyScale) {n if (scope.object.isPerspectiveCamera) {n scale /= dollyScale;n } else if (scope.object.isOrthographicCamera) {n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));n scope.object.updateProjectionMatrix();n zoomChanged = true;n } else {n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');n scope.enableZoom = false;n }n }nn function dollyOut(dollyScale) {n if (scope.object.isPerspectiveCamera) {n scale *= dollyScale;n } else if (scope.object.isOrthographicCamera) {n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));n scope.object.updateProjectionMatrix();n zoomChanged = true;n } else {n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');n scope.enableZoom = false;n }n } //n // event callbacks - update the object staten //nnn function handleMouseDownRotate(event) {n rotateStart.set(event.clientX, event.clientY);n }nn function handleMouseDownDolly(event) {n dollyStart.set(event.clientX, event.clientY);n }nn function handleMouseDownPan(event) {n panStart.set(event.clientX, event.clientY);n }nn function handleMouseMoveRotate(event) {n rotateEnd.set(event.clientX, event.clientY);n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, heightnn rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);n rotateStart.copy(rotateEnd);n scope.update();n }nn function handleMouseMoveDolly(event) {n dollyEnd.set(event.clientX, event.clientY);n dollyDelta.subVectors(dollyEnd, dollyStart);nn if (dollyDelta.y > 0) {n dollyIn(getZoomScale());n } else if (dollyDelta.y < 0) {n dollyOut(getZoomScale());n }nn dollyStart.copy(dollyEnd);n scope.update();n }nn function handleMouseMovePan(event) {n panEnd.set(event.clientX, event.clientY);n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);n pan(panDelta.x, panDelta.y);n panStart.copy(panEnd);n scope.update();n }nn function handleMouseUp()n /event/n {// no-opn }nn function handleMouseWheel(event) {n if (event.deltaY < 0) {n dollyOut(getZoomScale());n } else if (event.deltaY > 0) {n dollyIn(getZoomScale());n }nn scope.update();n }nn function handleKeyDown(event) {n var needsUpdate = false;nn switch (event.keyCode) {n case scope.keys.UP:n pan(0, scope.keyPanSpeed);n needsUpdate = true;n break;nn case scope.keys.BOTTOM:n pan(0, -scope.keyPanSpeed);n needsUpdate = true;n break;nn case scope.keys.LEFT:n pan(scope.keyPanSpeed, 0);n needsUpdate = true;n break;nn case scope.keys.RIGHT:n pan(-scope.keyPanSpeed, 0);n needsUpdate = true;n break;n }nn if (needsUpdate) {n // prevent the browser from scrolling on cursor keysn event.preventDefault();n scope.update();n }n }nn function handleTouchStartRotate(event) {n if (event.touches.length == 1) {n rotateStart.set(event.touches.pageX, event.touches.pageY);n } else {n var x = 0.5 * (event.touches.pageX + event.touches.pageX);n var y = 0.5 * (event.touches.pageY + event.touches.pageY);n rotateStart.set(x, y);n }n }nn function handleTouchStartPan(event) {n if (event.touches.length == 1) {n panStart.set(event.touches.pageX, event.touches.pageY);n } else {n var x = 0.5 * (event.touches.pageX + event.touches.pageX);n var y = 0.5 * (event.touches.pageY + event.touches.pageY);n panStart.set(x, y);n }n }nn function handleTouchStartDolly(event) {n var dx = event.touches.pageX - event.touches.pageX;n var dy = event.touches.pageY - event.touches.pageY;n var distance = Math.sqrt(dx * dx + dy * dy);n dollyStart.set(0, distance);n }nn function handleTouchStartDollyPan(event) {n if (scope.enableZoom) handleTouchStartDolly(event);n if (scope.enablePan) handleTouchStartPan(event);n }nn function handleTouchStartDollyRotate(event) {n if (scope.enableZoom) handleTouchStartDolly(event);n if (scope.enableRotate) handleTouchStartRotate(event);n }nn function handleTouchMoveRotate(event) {n if (event.touches.length == 1) {n rotateEnd.set(event.touches.pageX, event.touches.pageY);n } else {n var x = 0.5 * (event.touches.pageX + event.touches.pageX);n var y = 0.5 * (event.touches.pageY + event.touches.pageY);n rotateEnd.set(x, y);n }nn rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, heightnn rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);n rotateStart.copy(rotateEnd);n }nn function handleTouchMovePan(event) {n if (event.touches.length == 1) {n panEnd.set(event.touches.pageX, event.touches.pageY);n } else {n var x = 0.5 * (event.touches.pageX + event.touches.pageX);n var y = 0.5 * (event.touches.pageY + event.touches.pageY);n panEnd.set(x, y);n }nn panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);n pan(panDelta.x, panDelta.y);n panStart.copy(panEnd);n }nn function handleTouchMoveDolly(event) {n var dx = event.touches.pageX - event.touches.pageX;n var dy = event.touches.pageY - event.touches.pageY;n var distance = Math.sqrt(dx * dx + dy * dy);n dollyEnd.set(0, distance);n dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));n dollyIn(dollyDelta.y);n dollyStart.copy(dollyEnd);n }nn function handleTouchMoveDollyPan(event) {n if (scope.enableZoom) handleTouchMoveDolly(event);n if (scope.enablePan) handleTouchMovePan(event);n }nn function handleTouchMoveDollyRotate(event) {n if (scope.enableZoom) handleTouchMoveDolly(event);n if (scope.enableRotate) handleTouchMoveRotate(event);n }nn function handleTouchEnd()n /event/n {} // no-opn //n // event handlers - FSM: listen for events and reset staten //nnn function onMouseDown(event) {n if (scope.enabled === false) return; // Prevent the browser from scrolling.nn event.preventDefault(); // Manually set the focus since calling preventDefault aboven // prevents the browser from setting it automatically.nn scope.domElement.focus ? scope.domElement.focus() : window.focus();nn switch (event.button) {n case 0:n switch (scope.mouseButtons.LEFT) {n case MOUSE.ROTATE:n if (event.ctrlKey || event.metaKey || event.shiftKey) {n if (scope.enablePan === false) return;n handleMouseDownPan(event);n state = STATE.PAN;n } else {n if (scope.enableRotate === false) return;n handleMouseDownRotate(event);n state = STATE.ROTATE;n }nn break;nn case MOUSE.PAN:n if (event.ctrlKey || event.metaKey || event.shiftKey) {n if (scope.enableRotate === false) return;n handleMouseDownRotate(event);n state = STATE.ROTATE;n } else {n if (scope.enablePan === false) return;n handleMouseDownPan(event);n state = STATE.PAN;n }nn break;nn default:n state = STATE.NONE;n }nn break;nn case 1:n switch (scope.mouseButtons.MIDDLE) {n case MOUSE.DOLLY:n if (scope.enableZoom === false) return;n handleMouseDownDolly(event);n state = STATE.DOLLY;n break;nn default:n state = STATE.NONE;n }nn break;nn case 2:n switch (scope.mouseButtons.RIGHT) {n case MOUSE.ROTATE:n if (scope.enableRotate === false) return;n handleMouseDownRotate(event);n state = STATE.ROTATE;n break;nn case MOUSE.PAN:n if (scope.enablePan === false) return;n handleMouseDownPan(event);n state = STATE.PAN;n break;nn default:n state = STATE.NONE;n }nn break;n }nn if (state !== STATE.NONE) {n document.addEventListener('mousemove', onMouseMove, false);n document.addEventListener('mouseup', onMouseUp, false);n scope.dispatchEvent(startEvent);n }n }nn function onMouseMove(event) {n if (scope.enabled === false) return;n event.preventDefault();nn switch (state) {n case STATE.ROTATE:n if (scope.enableRotate === false) return;n handleMouseMoveRotate(event);n break;nn case STATE.DOLLY:n if (scope.enableZoom === false) return;n handleMouseMoveDolly(event);n break;nn case STATE.PAN:n if (scope.enablePan === false) return;n handleMouseMovePan(event);n break;n }n }nn function onMouseUp(event) {n if (scope.enabled === false) return;n handleMouseUp(event);n document.removeEventListener('mousemove', onMouseMove, false);n document.removeEventListener('mouseup', onMouseUp, false);n scope.dispatchEvent(endEvent);n state = STATE.NONE;n }nn function onMouseWheel(event) {n if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) return;n event.preventDefault();n event.stopPropagation();n scope.dispatchEvent(startEvent);n handleMouseWheel(event);n scope.dispatchEvent(endEvent);n }nn function onKeyDown(event) {n if (scope.enabled === false || scope.enableKeys === false || scope.enablePan === false) return;n handleKeyDown(event);n }nn function onTouchStart(event) {n if (scope.enabled === false) return;n event.preventDefault();nn switch (event.touches.length) {n case 1:n switch (scope.touches.ONE) {n case TOUCH.ROTATE:n if (scope.enableRotate === false) return;n handleTouchStartRotate(event);n state = STATE.TOUCH_ROTATE;n break;nn case TOUCH.PAN:n if (scope.enablePan === false) return;n handleTouchStartPan(event);n state = STATE.TOUCH_PAN;n break;nn default:n state = STATE.NONE;n }nn break;nn case 2:n switch (scope.touches.TWO) {n case TOUCH.DOLLY_PAN:n if (scope.enableZoom === false && scope.enablePan === false) return;n handleTouchStartDollyPan(event);n state = STATE.TOUCH_DOLLY_PAN;n break;nn case TOUCH.DOLLY_ROTATE:n if (scope.enableZoom === false && scope.enableRotate === false) return;n handleTouchStartDollyRotate(event);n state = STATE.TOUCH_DOLLY_ROTATE;n break;nn default:n state = STATE.NONE;n }nn break;nn default:n state = STATE.NONE;n }nn if (state !== STATE.NONE) {n scope.dispatchEvent(startEvent);n }n }nn function onTouchMove(event) {n if (scope.enabled === false) return;n event.preventDefault();n event.stopPropagation();nn switch (state) {n case STATE.TOUCH_ROTATE:n if (scope.enableRotate === false) return;n handleTouchMoveRotate(event);n scope.update();n break;nn case STATE.TOUCH_PAN:n if (scope.enablePan === false) return;n handleTouchMovePan(event);n scope.update();n break;nn case STATE.TOUCH_DOLLY_PAN:n if (scope.enableZoom === false && scope.enablePan === false) return;n handleTouchMoveDollyPan(event);n scope.update();n break;nn case STATE.TOUCH_DOLLY_ROTATE:n if (scope.enableZoom === false && scope.enableRotate === false) return;n handleTouchMoveDollyRotate(event);n scope.update();n break;nn default:n state = STATE.NONE;n }n }nn function onTouchEnd(event) {n if (scope.enabled === false) return;n handleTouchEnd(event);n scope.dispatchEvent(endEvent);n state = STATE.NONE;n }nn function onContextMenu(event) {n if (scope.enabled === false) return;n event.preventDefault();n } //nnn scope.domElement.addEventListener('contextmenu', onContextMenu, false);n scope.domElement.addEventListener('mousedown', onMouseDown, false);n scope.domElement.addEventListener('wheel', onMouseWheel, false);n scope.domElement.addEventListener('touchstart', onTouchStart, false);n scope.domElement.addEventListener('touchend', onTouchEnd, false);n scope.domElement.addEventListener('touchmove', onTouchMove, false);n window.addEventListener('keydown', onKeyDown, false); // force an update at startnn this.update();n};nnOrbitControls.prototype = Object.create(EventDispatcher.prototype);nOrbitControls.prototype.constructor = OrbitControls; // This set of controls performs orbiting, dollying (zooming), and panning.n// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).n// This is very similar to OrbitControls, another set of touch behaviorn//n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotaten// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squishn// Pan - left mouse, or arrow keys / touch: one-finger movennvar MapControls = function MapControls(object, domElement) {n OrbitControls.call(this, object, domElement);n this.mouseButtons.LEFT = MOUSE.PAN;n this.mouseButtons.RIGHT = MOUSE.ROTATE;n this.touches.ONE = TOUCH.PAN;n this.touches.TWO = TOUCH.DOLLY_ROTATE;n};nnMapControls.prototype = Object.create(EventDispatcher.prototype);nMapControls.prototype.constructor = MapControls;nexport { OrbitControls, MapControls };”,“map”:{“version”:3,“sources”:[“/Users/lemonandroid/Banal Dropbox/random/redux-os/app/javascript/packs/kmz/jsm/controls/OrbitControls.js”],“names”:,“mappings”:“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”,“sourcesContent”:[“// raw.githubusercontent.com/mrdoob/three.js/master/examples/jsm/controls/OrbitControls.jsnn/**n * @author qiao / github.com/qiaon * @author mrdoob / mrdoob.comn * @author alteredq / alteredqualia.com/n * @author WestLangley / github.com/WestLangleyn * @author erich666 / erichaines.comn * @author ScieCode / github.com/sciecoden */nnimport {ntEventDispatcher,ntMOUSE,ntQuaternion,ntSpherical,ntTOUCH,ntVector2,ntVector3n} from "three";nn// This set of controls performs orbiting, dollying (zooming), and panning.n// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).n//n// Orbit - left mouse / touch: one-finger moven// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squishn// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger movennvar OrbitControls = function ( object, domElement ) {nntthis.object = object;nntthis.domElement = ( domElement !== undefined ) ? domElement : document;nnt// Set to false to disable this controlntthis.enabled = true;nnt// "target" sets the location of focus, where the object orbits aroundntthis.target = new Vector3();nnt// How far you can dolly in and out ( PerspectiveCamera only )ntthis.minDistance = 0;ntthis.maxDistance = Infinity;nnt// How far you can zoom in and out ( OrthographicCamera only )ntthis.minZoom = 0;ntthis.maxZoom = Infinity;nnt// How far you can orbit vertically, upper and lower limits.nt// Range is 0 to Math.PI radians.ntthis.minPolarAngle = 0; // radiansntthis.maxPolarAngle = Math.PI; // radiansnnt// How far you can orbit horizontally, upper and lower limits.nt// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].ntthis.minAzimuthAngle = - Infinity; // radiansntthis.maxAzimuthAngle = Infinity; // radiansnnt// Set to true to enable damping (inertia)nt// If damping is enabled, you must call controls.update() in your animation loopntthis.enableDamping = false;ntthis.dampingFactor = 0.05;nnt// This option actually enables dollying in and out; left as "zoom" for backwards compatibility.nt// Set to false to disable zoomingntthis.enableZoom = true;ntthis.zoomSpeed = 1.0;nnt// Set to false to disable rotatingntthis.enableRotate = true;ntthis.rotateSpeed = 1.0;nnt// Set to false to disable panningntthis.enablePan = true;ntthis.panSpeed = 1.0;ntthis.screenSpacePanning = false; // if true, pan in screen-spacentthis.keyPanSpeed = 7.0;t// pixels moved per arrow key pushnnt// Set to true to automatically rotate around the targetnt// If auto-rotate is enabled, you must call controls.update() in your animation loopntthis.autoRotate = false;ntthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60nnt// Set to false to disable use of the keysntthis.enableKeys = true;nnt// The four arrow keysntthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };nnt// Mouse buttonsntthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };nnt// Touch fingersntthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };nnt// for resetntthis.target0 = this.target.clone();ntthis.position0 = this.object.position.clone();ntthis.zoom0 = this.object.zoom;nnt//nt// public methodsnt//nntthis.getPolarAngle = function () {nnttreturn spherical.phi;nnt};nntthis.getAzimuthalAngle = function () {nnttreturn spherical.theta;nnt};nntthis.saveState = function () {nnttscope.target0.copy( scope.target );nttscope.position0.copy( scope.object.position );nttscope.zoom0 = scope.object.zoom;nnt};nntthis.reset = function () {nnttscope.target.copy( scope.target0 );nttscope.object.position.copy( scope.position0 );nttscope.object.zoom = scope.zoom0;nnttscope.object.updateProjectionMatrix();nttscope.dispatchEvent( changeEvent );nnttscope.update();nnttstate = STATE.NONE;nnt};nnt// this method is exposed, but perhaps it would be better if we can make it private…ntthis.update = function () {nnttvar offset = new Vector3();nntt// so camera.up is the orbit axisnttvar quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );nttvar quatInverse = quat.clone().inverse();nnttvar lastPosition = new Vector3();nttvar lastQuaternion = new Quaternion();nnttreturn function update() {nntttvar position = scope.object.position;nntttoffset.copy( position ).sub( scope.target );nnttt// rotate offset to "y-axis-is-up" spacentttoffset.applyQuaternion( quat );nnttt// angle from z-axis around y-axisntttspherical.setFromVector3( offset );nntttif ( scope.autoRotate && state === STATE.NONE ) {nnttttrotateLeft( getAutoRotationAngle() );nnttt}nntttif ( scope.enableDamping ) {nnttttspherical.theta += sphericalDelta.theta * scope.dampingFactor;nttttspherical.phi += sphericalDelta.phi * scope.dampingFactor;nnttt} else {nnttttspherical.theta += sphericalDelta.theta;nttttspherical.phi += sphericalDelta.phi;nnttt}nnttt// restrict theta to be between desired limitsntttspherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );nnttt// restrict phi to be between desired limitsntttspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );nntttspherical.makeSafe();nnntttspherical.radius *= scale;nnttt// restrict radius to be between desired limitsntttspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );nnttt// move target to panned locationnntttif ( scope.enableDamping === true ) {nnttttscope.target.addScaledVector( panOffset, scope.dampingFactor );nnttt} else {nnttttscope.target.add( panOffset );nnttt}nntttoffset.setFromSpherical( spherical );nnttt// rotate offset back to "camera-up-vector-is-up" spacentttoffset.applyQuaternion( quatInverse );nntttposition.copy( scope.target ).add( offset );nntttscope.object.lookAt( scope.target );nntttif ( scope.enableDamping === true ) {nnttttsphericalDelta.theta *= ( 1 - scope.dampingFactor );nttttsphericalDelta.phi *= ( 1 - scope.dampingFactor );nnttttpanOffset.multiplyScalar( 1 - scope.dampingFactor );nnttt} else {nnttttsphericalDelta.set( 0, 0, 0 );nnttttpanOffset.set( 0, 0, 0 );nnttt}nntttscale = 1;nnttt// update condition is:nttt// min(camera displacement, camera rotation in radians)^2 > EPSnttt// using small-angle approximation cos(x/2) = 1 - x^2 / 8nntttif ( zoomChanged ||nttttlastPosition.distanceToSquared( scope.object.position ) > EPS ||ntttt8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {nnttttscope.dispatchEvent( changeEvent );nnttttlastPosition.copy( scope.object.position );nttttlastQuaternion.copy( scope.object.quaternion );nttttzoomChanged = false;nnttttreturn true;nnttt}nntttreturn false;nntt};nnt}();nntthis.dispose = function () {nnttscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );nttscope.domElement.removeEventListener( 'mousedown', onMouseDown, false );nttscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );nnttscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );nttscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );nttscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );nnttdocument.removeEventListener( 'mousemove', onMouseMove, false );nttdocument.removeEventListener( 'mouseup', onMouseUp, false );nnttwindow.removeEventListener( 'keydown', onKeyDown, false );nntt//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?nnt};nnt//nt// internalsnt//nntvar scope = this;nntvar changeEvent = { type: 'change' };ntvar startEvent = { type: 'start' };ntvar endEvent = { type: 'end' };nntvar STATE = {nttNONE: - 1,nttROTATE: 0,nttDOLLY: 1,nttPAN: 2,nttTOUCH_ROTATE: 3,nttTOUCH_PAN: 4,nttTOUCH_DOLLY_PAN: 5,nttTOUCH_DOLLY_ROTATE: 6nt};nntvar state = STATE.NONE;nntvar EPS = 0.000001;nnt// current position in spherical coordinatesntvar spherical = new Spherical();ntvar sphericalDelta = new Spherical();nntvar scale = 1;ntvar panOffset = new Vector3();ntvar zoomChanged = false;nntvar rotateStart = new Vector2();ntvar rotateEnd = new Vector2();ntvar rotateDelta = new Vector2();nntvar panStart = new Vector2();ntvar panEnd = new Vector2();ntvar panDelta = new Vector2();nntvar dollyStart = new Vector2();ntvar dollyEnd = new Vector2();ntvar dollyDelta = new Vector2();nntfunction getAutoRotationAngle() {nnttreturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;nnt}nntfunction getZoomScale() {nnttreturn Math.pow( 0.95, scope.zoomSpeed );nnt}nntfunction rotateLeft( angle ) {nnttsphericalDelta.theta -= angle;nnt}nntfunction rotateUp( angle ) {nnttsphericalDelta.phi -= angle;nnt}nntvar panLeft = function () {nnttvar v = new Vector3();nnttreturn function panLeft( distance, objectMatrix ) {nntttv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrixntttv.multiplyScalar( - distance );nntttpanOffset.add( v );nntt};nnt}();nntvar panUp = function () {nnttvar v = new Vector3();nnttreturn function panUp( distance, objectMatrix ) {nntttif ( scope.screenSpacePanning === true ) {nnttttv.setFromMatrixColumn( objectMatrix, 1 );nnttt} else {nnttttv.setFromMatrixColumn( objectMatrix, 0 );nttttv.crossVectors( scope.object.up, v );nnttt}nntttv.multiplyScalar( distance );nntttpanOffset.add( v );nntt};nnt}();nnt// deltaX and deltaY are in pixels; right and down are positiventvar pan = function () {nnttvar offset = new Vector3();nnttreturn function pan( deltaX, deltaY ) {nntttvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;nntttif ( scope.object.isPerspectiveCamera ) {nntttt// perspectiventtttvar position = scope.object.position;nttttoffset.copy( position ).sub( scope.target );nttttvar targetDistance = offset.length();nntttt// half of the fov is center to top of screenntttttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );nntttt// we use only clientHeight here so aspect ratio does not distort speednttttpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );nttttpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );nnttt} else if ( scope.object.isOrthographicCamera ) {nntttt// orthographicnttttpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );nttttpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );nnttt} else {nntttt// camera neither orthographic nor perspectiventtttconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );nttttscope.enablePan = false;nnttt}nntt};nnt}();nntfunction dollyIn( dollyScale ) {nnttif ( scope.object.isPerspectiveCamera ) {nntttscale /= dollyScale;nntt} else if ( scope.object.isOrthographicCamera ) {nntttscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );ntttscope.object.updateProjectionMatrix();ntttzoomChanged = true;nntt} else {nntttconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );ntttscope.enableZoom = false;nntt}nnt}nntfunction dollyOut( dollyScale ) {nnttif ( scope.object.isPerspectiveCamera ) {nntttscale *= dollyScale;nntt} else if ( scope.object.isOrthographicCamera ) {nntttscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );ntttscope.object.updateProjectionMatrix();ntttzoomChanged = true;nntt} else {nntttconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );ntttscope.enableZoom = false;nntt}nnt}nnt//nt// event callbacks - update the object statent//nntfunction handleMouseDownRotate( event ) {nnttrotateStart.set( event.clientX, event.clientY );nnt}nntfunction handleMouseDownDolly( event ) {nnttdollyStart.set( event.clientX, event.clientY );nnt}nntfunction handleMouseDownPan( event ) {nnttpanStart.set( event.clientX, event.clientY );nnt}nntfunction handleMouseMoveRotate( event ) {nnttrotateEnd.set( event.clientX, event.clientY );nnttrotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );nnttvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;nnttrotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, heightnnttrotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );nnttrotateStart.copy( rotateEnd );nnttscope.update();nnt}nntfunction handleMouseMoveDolly( event ) {nnttdollyEnd.set( event.clientX, event.clientY );nnttdollyDelta.subVectors( dollyEnd, dollyStart );nnttif ( dollyDelta.y > 0 ) {nntttdollyIn( getZoomScale() );nntt} else if ( dollyDelta.y < 0 ) {nntttdollyOut( getZoomScale() );nntt}nnttdollyStart.copy( dollyEnd );nnttscope.update();nnt}nntfunction handleMouseMovePan( event ) {nnttpanEnd.set( event.clientX, event.clientY );nnttpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );nnttpan( panDelta.x, panDelta.y );nnttpanStart.copy( panEnd );nnttscope.update();nnt}nntfunction handleMouseUp( /event/ ) {nntt// no-opnnt}nntfunction handleMouseWheel( event ) {nnttif ( event.deltaY < 0 ) {nntttdollyOut( getZoomScale() );nntt} else if ( event.deltaY > 0 ) {nntttdollyIn( getZoomScale() );nntt}nnttscope.update();nnt}nntfunction handleKeyDown( event ) {nnttvar needsUpdate = false;nnttswitch ( event.keyCode ) {nntttcase scope.keys.UP:nttttpan( 0, scope.keyPanSpeed );nttttneedsUpdate = true;nttttbreak;nntttcase scope.keys.BOTTOM:nttttpan( 0, - scope.keyPanSpeed );nttttneedsUpdate = true;nttttbreak;nntttcase scope.keys.LEFT:nttttpan( scope.keyPanSpeed, 0 );nttttneedsUpdate = true;nttttbreak;nntttcase scope.keys.RIGHT:nttttpan( - scope.keyPanSpeed, 0 );nttttneedsUpdate = true;nttttbreak;nntt}nnttif ( needsUpdate ) {nnttt// prevent the browser from scrolling on cursor keysntttevent.preventDefault();nntttscope.update();nntt}nnnt}nntfunction handleTouchStartRotate( event ) {nnttif ( event.touches.length == 1 ) {nntttrotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );nntt} else {nntttvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );ntttvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );nntttrotateStart.set( x, y );nntt}nnt}nntfunction handleTouchStartPan( event ) {nnttif ( event.touches.length == 1 ) {nntttpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );nntt} else {nntttvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );ntttvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );nntttpanStart.set( x, y );nntt}nnt}nntfunction handleTouchStartDolly( event ) {nnttvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;nttvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;nnttvar distance = Math.sqrt( dx * dx + dy * dy );nnttdollyStart.set( 0, distance );nnt}nntfunction handleTouchStartDollyPan( event ) {nnttif ( scope.enableZoom ) handleTouchStartDolly( event );nnttif ( scope.enablePan ) handleTouchStartPan( event );nnt}nntfunction handleTouchStartDollyRotate( event ) {nnttif ( scope.enableZoom ) handleTouchStartDolly( event );nnttif ( scope.enableRotate ) handleTouchStartRotate( event );nnt}nntfunction handleTouchMoveRotate( event ) {nnttif ( event.touches.length == 1 ) {nntttrotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );nntt} else {nntttvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );ntttvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );nntttrotateEnd.set( x, y );nntt}nnttrotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );nnttvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;nnttrotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, heightnnttrotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );nnttrotateStart.copy( rotateEnd );nnt}nntfunction handleTouchMovePan( event ) {nnttif ( event.touches.length == 1 ) {nntttpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );nntt} else {nntttvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );ntttvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );nntttpanEnd.set( x, y );nntt}nnttpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );nnttpan( panDelta.x, panDelta.y );nnttpanStart.copy( panEnd );nnt}nntfunction handleTouchMoveDolly( event ) {nnttvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;nttvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;nnttvar distance = Math.sqrt( dx * dx + dy * dy );nnttdollyEnd.set( 0, distance );nnttdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );nnttdollyIn( dollyDelta.y );nnttdollyStart.copy( dollyEnd );nnt}nntfunction handleTouchMoveDollyPan( event ) {nnttif ( scope.enableZoom ) handleTouchMoveDolly( event );nnttif ( scope.enablePan ) handleTouchMovePan( event );nnt}nntfunction handleTouchMoveDollyRotate( event ) {nnttif ( scope.enableZoom ) handleTouchMoveDolly( event );nnttif ( scope.enableRotate ) handleTouchMoveRotate( event );nnt}nntfunction handleTouchEnd( /event/ ) {nntt// no-opnnt}nnt//nt// event handlers - FSM: listen for events and reset statent//nntfunction onMouseDown( event ) {nnttif ( scope.enabled === false ) return;nntt// Prevent the browser from scrolling.nnttevent.preventDefault();nntt// Manually set the focus since calling preventDefault aboventt// prevents the browser from setting it automatically.nnttscope.domElement.focus ? scope.domElement.focus() : window.focus();nnttswitch ( event.button ) {nntttcase 0:nnttttswitch ( scope.mouseButtons.LEFT ) {nntttttcase MOUSE.ROTATE:nnttttttif ( event.ctrlKey || event.metaKey || event.shiftKey ) {nntttttttif ( scope.enablePan === false ) return;nnttttttthandleMouseDownPan( event );nntttttttstate = STATE.PAN;nntttttt} else {nntttttttif ( scope.enableRotate === false ) return;nnttttttthandleMouseDownRotate( event );nntttttttstate = STATE.ROTATE;nntttttt}nnttttttbreak;nntttttcase MOUSE.PAN:nnttttttif ( event.ctrlKey || event.metaKey || event.shiftKey ) {nntttttttif ( scope.enableRotate === false ) return;nnttttttthandleMouseDownRotate( event );nntttttttstate = STATE.ROTATE;nntttttt} else {nntttttttif ( scope.enablePan === false ) return;nnttttttthandleMouseDownPan( event );nntttttttstate = STATE.PAN;nntttttt}nnttttttbreak;nntttttdefault:nnttttttstate = STATE.NONE;nntttt}nnttttbreak;nnntttcase 1:nnttttswitch ( scope.mouseButtons.MIDDLE ) {nntttttcase MOUSE.DOLLY:nnttttttif ( scope.enableZoom === false ) return;nntttttthandleMouseDownDolly( event );nnttttttstate = STATE.DOLLY;nnttttttbreak;nnntttttdefault:nnttttttstate = STATE.NONE;nntttt}nnttttbreak;nntttcase 2:nnttttswitch ( scope.mouseButtons.RIGHT ) {nntttttcase MOUSE.ROTATE:nnttttttif ( scope.enableRotate === false ) return;nntttttthandleMouseDownRotate( event );nnttttttstate = STATE.ROTATE;nnttttttbreak;nntttttcase MOUSE.PAN:nnttttttif ( scope.enablePan === false ) return;nntttttthandleMouseDownPan( event );nnttttttstate = STATE.PAN;nnttttttbreak;nntttttdefault:nnttttttstate = STATE.NONE;nntttt}nnttttbreak;nntt}nnttif ( state !== STATE.NONE ) {nntttdocument.addEventListener( 'mousemove', onMouseMove, false );ntttdocument.addEventListener( 'mouseup', onMouseUp, false );nntttscope.dispatchEvent( startEvent );nntt}nnt}nntfunction onMouseMove( event ) {nnttif ( scope.enabled === false ) return;nnttevent.preventDefault();nnttswitch ( state ) {nntttcase STATE.ROTATE:nnttttif ( scope.enableRotate === false ) return;nntttthandleMouseMoveRotate( event );nnttttbreak;nntttcase STATE.DOLLY:nnttttif ( scope.enableZoom === false ) return;nntttthandleMouseMoveDolly( event );nnttttbreak;nntttcase STATE.PAN:nnttttif ( scope.enablePan === false ) return;nntttthandleMouseMovePan( event );nnttttbreak;nntt}nnt}nntfunction onMouseUp( event ) {nnttif ( scope.enabled === false ) return;nntthandleMouseUp( event );nnttdocument.removeEventListener( 'mousemove', onMouseMove, false );nttdocument.removeEventListener( 'mouseup', onMouseUp, false );nnttscope.dispatchEvent( endEvent );nnttstate = STATE.NONE;nnt}nntfunction onMouseWheel( event ) {nnttif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;nnttevent.preventDefault();nttevent.stopPropagation();nnttscope.dispatchEvent( startEvent );nntthandleMouseWheel( event );nnttscope.dispatchEvent( endEvent );nnt}nntfunction onKeyDown( event ) {nnttif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;nntthandleKeyDown( event );nnt}nntfunction onTouchStart( event ) {nnttif ( scope.enabled === false ) return;nnttevent.preventDefault();nnttswitch ( event.touches.length ) {nntttcase 1:nnttttswitch ( scope.touches.ONE ) {nntttttcase TOUCH.ROTATE:nnttttttif ( scope.enableRotate === false ) return;nntttttthandleTouchStartRotate( event );nnttttttstate = STATE.TOUCH_ROTATE;nnttttttbreak;nntttttcase TOUCH.PAN:nnttttttif ( scope.enablePan === false ) return;nntttttthandleTouchStartPan( event );nnttttttstate = STATE.TOUCH_PAN;nnttttttbreak;nntttttdefault:nnttttttstate = STATE.NONE;nntttt}nnttttbreak;nntttcase 2:nnttttswitch ( scope.touches.TWO ) {nntttttcase TOUCH.DOLLY_PAN:nnttttttif ( scope.enableZoom === false && scope.enablePan === false ) return;nntttttthandleTouchStartDollyPan( event );nnttttttstate = STATE.TOUCH_DOLLY_PAN;nnttttttbreak;nntttttcase TOUCH.DOLLY_ROTATE:nnttttttif ( scope.enableZoom === false && scope.enableRotate === false ) return;nntttttthandleTouchStartDollyRotate( event );nnttttttstate = STATE.TOUCH_DOLLY_ROTATE;nnttttttbreak;nntttttdefault:nnttttttstate = STATE.NONE;nntttt}nnttttbreak;nntttdefault:nnttttstate = STATE.NONE;nntt}nnttif ( state !== STATE.NONE ) {nntttscope.dispatchEvent( startEvent );nntt}nnt}nntfunction onTouchMove( event ) {nnttif ( scope.enabled === false ) return;nnttevent.preventDefault();nttevent.stopPropagation();nnttswitch ( state ) {nntttcase STATE.TOUCH_ROTATE:nnttttif ( scope.enableRotate === false ) return;nntttthandleTouchMoveRotate( event );nnttttscope.update();nnttttbreak;nntttcase STATE.TOUCH_PAN:nnttttif ( scope.enablePan === false ) return;nntttthandleTouchMovePan( event );nnttttscope.update();nnttttbreak;nntttcase STATE.TOUCH_DOLLY_PAN:nnttttif ( scope.enableZoom === false && scope.enablePan === false ) return;nntttthandleTouchMoveDollyPan( event );nnttttscope.update();nnttttbreak;nntttcase STATE.TOUCH_DOLLY_ROTATE:nnttttif ( scope.enableZoom === false && scope.enableRotate === false ) return;nntttthandleTouchMoveDollyRotate( event );nnttttscope.update();nnttttbreak;nntttdefault:nnttttstate = STATE.NONE;nntt}nnt}nntfunction onTouchEnd( event ) {nnttif ( scope.enabled === false ) return;nntthandleTouchEnd( event );nnttscope.dispatchEvent( endEvent );nnttstate = STATE.NONE;nnt}nntfunction onContextMenu( event ) {nnttif ( scope.enabled === false ) return;nnttevent.preventDefault();nnt}nnt//nntscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );nntscope.domElement.addEventListener( 'mousedown', onMouseDown, false );ntscope.domElement.addEventListener( 'wheel', onMouseWheel, false );nntscope.domElement.addEventListener( 'touchstart', onTouchStart, false );ntscope.domElement.addEventListener( 'touchend', onTouchEnd, false );ntscope.domElement.addEventListener( 'touchmove', onTouchMove, false );nntwindow.addEventListener( 'keydown', onKeyDown, false );nnt// force an update at startnntthis.update();nn};nnOrbitControls.prototype = Object.create( EventDispatcher.prototype );nOrbitControls.prototype.constructor = OrbitControls;nnn// This set of controls performs orbiting, dollying (zooming), and panning.n// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).n// This is very similar to OrbitControls, another set of touch behaviorn//n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotaten// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squishn// Pan - left mouse, or arrow keys / touch: one-finger movennvar MapControls = function ( object, domElement ) {nntOrbitControls.call( this, object, domElement );nntthis.mouseButtons.LEFT = MOUSE.PAN;ntthis.mouseButtons.RIGHT = MOUSE.ROTATE;nntthis.touches.ONE = TOUCH.PAN;ntthis.touches.TWO = TOUCH.DOLLY_ROTATE;nn};nnMapControls.prototype = Object.create( EventDispatcher.prototype );nMapControls.prototype.constructor = MapControls;nnexport { OrbitControls, MapControls };”]},“metadata”:{},“sourceType”:“module”}