three-stdlib 2.34.0 → 2.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/controls/ArcballControls.cjs +2 -1
- package/controls/ArcballControls.cjs.map +1 -1
- package/controls/ArcballControls.d.ts +4 -2
- package/controls/ArcballControls.js +2 -1
- package/controls/ArcballControls.js.map +1 -1
- package/controls/DeviceOrientationControls.cjs +2 -1
- package/controls/DeviceOrientationControls.cjs.map +1 -1
- package/controls/DeviceOrientationControls.d.ts +4 -2
- package/controls/DeviceOrientationControls.js +2 -1
- package/controls/DeviceOrientationControls.js.map +1 -1
- package/controls/DragControls.cjs +2 -1
- package/controls/DragControls.cjs.map +1 -1
- package/controls/DragControls.d.ts +35 -2
- package/controls/DragControls.js +2 -1
- package/controls/DragControls.js.map +1 -1
- package/controls/EventDispatcher.cjs +78 -0
- package/controls/EventDispatcher.cjs.map +1 -0
- package/controls/EventDispatcher.d.ts +41 -0
- package/controls/EventDispatcher.js +78 -0
- package/controls/EventDispatcher.js.map +1 -0
- package/controls/FirstPersonControls.cjs +2 -1
- package/controls/FirstPersonControls.cjs.map +1 -1
- package/controls/FirstPersonControls.d.ts +3 -2
- package/controls/FirstPersonControls.js +2 -1
- package/controls/FirstPersonControls.js.map +1 -1
- package/controls/FlyControls.cjs +2 -1
- package/controls/FlyControls.cjs.map +1 -1
- package/controls/FlyControls.d.ts +9 -2
- package/controls/FlyControls.js +2 -1
- package/controls/FlyControls.js.map +1 -1
- package/controls/OrbitControls.cjs +2 -1
- package/controls/OrbitControls.cjs.map +1 -1
- package/controls/OrbitControls.d.ts +4 -2
- package/controls/OrbitControls.js +2 -1
- package/controls/OrbitControls.js.map +1 -1
- package/controls/PointerLockControls.cjs +4 -5
- package/controls/PointerLockControls.cjs.map +1 -1
- package/controls/PointerLockControls.d.ts +17 -2
- package/controls/PointerLockControls.js +4 -5
- package/controls/PointerLockControls.js.map +1 -1
- package/controls/StandardControlsEventMap.d.ts +14 -0
- package/controls/TrackballControls.cjs +2 -1
- package/controls/TrackballControls.cjs.map +1 -1
- package/controls/TrackballControls.d.ts +4 -2
- package/controls/TrackballControls.js +2 -1
- package/controls/TrackballControls.js.map +1 -1
- package/controls/experimental/CameraControls.cjs +2 -1
- package/controls/experimental/CameraControls.cjs.map +1 -1
- package/controls/experimental/CameraControls.d.ts +3 -2
- package/controls/experimental/CameraControls.js +2 -1
- package/controls/experimental/CameraControls.js.map +1 -1
- package/helpers/RaycasterHelper.d.ts +33 -0
- package/package.json +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { MOUSE, Vector3, PerspectiveCamera, OrthographicCamera } from 'three';
|
|
2
|
+
import { EventDispatcher } from './EventDispatcher';
|
|
3
|
+
import { StandardControlsEventMap } from './StandardControlsEventMap';
|
|
4
|
+
declare class TrackballControls extends EventDispatcher<StandardControlsEventMap> {
|
|
3
5
|
enabled: boolean;
|
|
4
6
|
screen: {
|
|
5
7
|
left: number;
|
|
@@ -4,7 +4,8 @@ var __publicField = (obj, key, value) => {
|
|
|
4
4
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
return value;
|
|
6
6
|
};
|
|
7
|
-
import {
|
|
7
|
+
import { MOUSE, Vector3, Vector2, Quaternion } from "three";
|
|
8
|
+
import { EventDispatcher } from "./EventDispatcher.js";
|
|
8
9
|
class TrackballControls extends EventDispatcher {
|
|
9
10
|
constructor(object, domElement) {
|
|
10
11
|
super();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrackballControls.js","sources":["../../src/controls/TrackballControls.ts"],"sourcesContent":["import { EventDispatcher, MOUSE, Quaternion, Vector2, Vector3, PerspectiveCamera, OrthographicCamera } from 'three'\n\nclass TrackballControls extends EventDispatcher {\n public enabled = true\n\n public screen = { left: 0, top: 0, width: 0, height: 0 }\n\n public rotateSpeed = 1.0\n public zoomSpeed = 1.2\n public panSpeed = 0.3\n\n public noRotate = false\n public noZoom = false\n public noPan = false\n\n public staticMoving = false\n public dynamicDampingFactor = 0.2\n\n public minDistance = 0\n public maxDistance = Infinity\n\n public keys: [string, string, string] = ['KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/]\n\n public mouseButtons = {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN,\n }\n\n public object: PerspectiveCamera | OrthographicCamera\n public domElement: HTMLElement | undefined\n public cursorZoom: boolean = false\n\n readonly target = new Vector3()\n private mousePosition = new Vector2()\n\n // internals\n private STATE = {\n NONE: -1,\n ROTATE: 0,\n ZOOM: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_ZOOM_PAN: 4,\n }\n\n private EPS = 0.000001\n private lastZoom = 1\n\n private lastPosition = new Vector3()\n private cursorVector = new Vector3()\n private targetVector = new Vector3()\n\n private _state = this.STATE.NONE\n private _keyState = this.STATE.NONE\n private _eye = new Vector3()\n private _movePrev = new Vector2()\n private _moveCurr = new Vector2()\n private _lastAxis = new Vector3()\n private _lastAngle = 0\n private _zoomStart = new Vector2()\n private _zoomEnd = new Vector2()\n private _touchZoomDistanceStart = 0\n private _touchZoomDistanceEnd = 0\n private _panStart = new Vector2()\n private _panEnd = new Vector2()\n\n private target0: Vector3\n private position0: Vector3\n private up0: Vector3\n private zoom0: number\n\n // events\n\n private changeEvent = { type: 'change' }\n private startEvent = { type: 'start' }\n private endEvent = { type: 'end' }\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement?: HTMLElement) {\n super()\n this.object = object\n\n // for reset\n\n this.target0 = this.target.clone()\n this.position0 = this.object.position.clone()\n this.up0 = this.object.up.clone()\n this.zoom0 = this.object.zoom\n\n // connect events\n if (domElement !== undefined) this.connect(domElement)\n\n // force an update at start\n this.update()\n }\n\n private onScreenVector = new Vector2()\n\n private getMouseOnScreen = (pageX: number, pageY: number): Vector2 => {\n this.onScreenVector.set(\n (pageX - this.screen.left) / this.screen.width,\n (pageY - this.screen.top) / this.screen.height,\n )\n\n return this.onScreenVector\n }\n\n private onCircleVector = new Vector2()\n\n private getMouseOnCircle = (pageX: number, pageY: number): Vector2 => {\n this.onCircleVector.set(\n (pageX - this.screen.width * 0.5 - this.screen.left) / (this.screen.width * 0.5),\n (this.screen.height + 2 * (this.screen.top - pageY)) / this.screen.width, // screen.width intentional\n )\n\n return this.onCircleVector\n }\n\n private axis = new Vector3()\n private quaternion = new Quaternion()\n private eyeDirection = new Vector3()\n private objectUpDirection = new Vector3()\n private objectSidewaysDirection = new Vector3()\n private moveDirection = new Vector3()\n private angle: number = 0\n\n private rotateCamera = (): void => {\n this.moveDirection.set(this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0)\n this.angle = this.moveDirection.length()\n\n if (this.angle) {\n this._eye.copy(this.object.position).sub(this.target)\n\n this.eyeDirection.copy(this._eye).normalize()\n this.objectUpDirection.copy(this.object.up).normalize()\n this.objectSidewaysDirection.crossVectors(this.objectUpDirection, this.eyeDirection).normalize()\n\n this.objectUpDirection.setLength(this._moveCurr.y - this._movePrev.y)\n this.objectSidewaysDirection.setLength(this._moveCurr.x - this._movePrev.x)\n\n this.moveDirection.copy(this.objectUpDirection.add(this.objectSidewaysDirection))\n\n this.axis.crossVectors(this.moveDirection, this._eye).normalize()\n\n this.angle *= this.rotateSpeed\n this.quaternion.setFromAxisAngle(this.axis, this.angle)\n\n this._eye.applyQuaternion(this.quaternion)\n this.object.up.applyQuaternion(this.quaternion)\n\n this._lastAxis.copy(this.axis)\n this._lastAngle = this.angle\n } else if (!this.staticMoving && this._lastAngle) {\n this._lastAngle *= Math.sqrt(1.0 - this.dynamicDampingFactor)\n this._eye.copy(this.object.position).sub(this.target)\n this.quaternion.setFromAxisAngle(this._lastAxis, this._lastAngle)\n this._eye.applyQuaternion(this.quaternion)\n this.object.up.applyQuaternion(this.quaternion)\n }\n\n this._movePrev.copy(this._moveCurr)\n }\n\n private zoomCamera = (): void => {\n let factor\n\n if (this._state === this.STATE.TOUCH_ZOOM_PAN) {\n factor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd\n this._touchZoomDistanceStart = this._touchZoomDistanceEnd\n\n if ((this.object as PerspectiveCamera).isPerspectiveCamera) {\n this._eye.multiplyScalar(factor)\n } else if ((this.object as OrthographicCamera).isOrthographicCamera) {\n this.object.zoom /= factor\n this.object.updateProjectionMatrix()\n } else {\n console.warn('THREE.TrackballControls: Unsupported camera type')\n }\n } else {\n factor = 1.0 + (this._zoomEnd.y - this._zoomStart.y) * this.zoomSpeed\n\n if (Math.abs(factor - 1.0) > this.EPS && factor > 0.0) {\n if ((this.object as PerspectiveCamera).isPerspectiveCamera) {\n if (factor > 1.0 && this._eye.length() >= this.maxDistance - this.EPS) {\n factor = 1.0\n }\n this._eye.multiplyScalar(factor)\n } else if ((this.object as OrthographicCamera).isOrthographicCamera) {\n if (factor > 1.0 && this.object.zoom < this.maxDistance * this.maxDistance) {\n factor = 1.0\n }\n this.object.zoom /= factor\n } else {\n console.warn('THREE.TrackballControls: Unsupported camera type')\n }\n }\n\n if (this.staticMoving) {\n this._zoomStart.copy(this._zoomEnd)\n } else {\n this._zoomStart.y += (this._zoomEnd.y - this._zoomStart.y) * this.dynamicDampingFactor\n }\n\n if (this.cursorZoom) {\n //determine 3D position of mouse cursor (on target plane)\n this.targetVector.copy(this.target).project(this.object)\n let worldPos = this.cursorVector\n .set(this.mousePosition.x, this.mousePosition.y, this.targetVector.z)\n .unproject(this.object)\n\n //adjust target point so that \"point\" stays in place\n this.target.lerpVectors(worldPos, this.target, factor)\n }\n\n // Update the projection matrix after all properties are changed\n if ((this.object as OrthographicCamera).isOrthographicCamera) {\n this.object.updateProjectionMatrix()\n }\n }\n }\n\n private mouseChange = new Vector2()\n private objectUp = new Vector3()\n private pan = new Vector3()\n\n private panCamera = (): void => {\n if (!this.domElement) return\n this.mouseChange.copy(this._panEnd).sub(this._panStart)\n\n if (this.mouseChange.lengthSq() > this.EPS) {\n if ((this.object as OrthographicCamera).isOrthographicCamera) {\n const orthoObject = this.object as OrthographicCamera\n const scale_x = (orthoObject.right - orthoObject.left) / this.object.zoom\n const scale_y = (orthoObject.top - orthoObject.bottom) / this.object.zoom\n\n this.mouseChange.x *= scale_x\n this.mouseChange.y *= scale_y\n } else {\n this.mouseChange.multiplyScalar(this._eye.length() * this.panSpeed)\n }\n\n this.pan.copy(this._eye).cross(this.object.up).setLength(this.mouseChange.x)\n this.pan.add(this.objectUp.copy(this.object.up).setLength(this.mouseChange.y))\n\n this.object.position.add(this.pan)\n this.target.add(this.pan)\n\n if (this.staticMoving) {\n this._panStart.copy(this._panEnd)\n } else {\n this._panStart.add(\n this.mouseChange.subVectors(this._panEnd, this._panStart).multiplyScalar(this.dynamicDampingFactor),\n )\n }\n }\n }\n\n private checkDistances = (): void => {\n if (!this.noZoom || !this.noPan) {\n if (this._eye.lengthSq() > this.maxDistance * this.maxDistance) {\n this.object.position.addVectors(this.target, this._eye.setLength(this.maxDistance))\n this._zoomStart.copy(this._zoomEnd)\n }\n\n if (this._eye.lengthSq() < this.minDistance * this.minDistance) {\n this.object.position.addVectors(this.target, this._eye.setLength(this.minDistance))\n this._zoomStart.copy(this._zoomEnd)\n }\n }\n }\n\n public handleResize = (): void => {\n if (!this.domElement) return\n const box = this.domElement.getBoundingClientRect()\n // adjustments come from similar code in the jquery offset() function\n const d = this.domElement.ownerDocument.documentElement\n this.screen.left = box.left + window.pageXOffset - d.clientLeft\n this.screen.top = box.top + window.pageYOffset - d.clientTop\n this.screen.width = box.width\n this.screen.height = box.height\n }\n\n public update = (): void => {\n this._eye.subVectors(this.object.position, this.target)\n\n if (!this.noRotate) {\n this.rotateCamera()\n }\n\n if (!this.noZoom) {\n this.zoomCamera()\n }\n\n if (!this.noPan) {\n this.panCamera()\n }\n\n this.object.position.addVectors(this.target, this._eye)\n\n if ((this.object as PerspectiveCamera).isPerspectiveCamera) {\n this.checkDistances()\n\n this.object.lookAt(this.target)\n\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS) {\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.lastPosition.copy(this.object.position)\n }\n } else if ((this.object as OrthographicCamera).isOrthographicCamera) {\n this.object.lookAt(this.target)\n\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || this.lastZoom !== this.object.zoom) {\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.lastPosition.copy(this.object.position)\n this.lastZoom = this.object.zoom\n }\n } else {\n console.warn('THREE.TrackballControls: Unsupported camera type')\n }\n }\n\n public reset = (): void => {\n this._state = this.STATE.NONE\n this._keyState = this.STATE.NONE\n\n this.target.copy(this.target0)\n this.object.position.copy(this.position0)\n this.object.up.copy(this.up0)\n this.object.zoom = this.zoom0\n\n this.object.updateProjectionMatrix()\n\n this._eye.subVectors(this.object.position, this.target)\n\n this.object.lookAt(this.target)\n\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.lastPosition.copy(this.object.position)\n this.lastZoom = this.object.zoom\n }\n\n private keydown = (event: KeyboardEvent): void => {\n if (this.enabled === false) return\n\n window.removeEventListener('keydown', this.keydown)\n\n if (this._keyState !== this.STATE.NONE) {\n return\n } else if (event.code === this.keys[this.STATE.ROTATE] && !this.noRotate) {\n this._keyState = this.STATE.ROTATE\n } else if (event.code === this.keys[this.STATE.ZOOM] && !this.noZoom) {\n this._keyState = this.STATE.ZOOM\n } else if (event.code === this.keys[this.STATE.PAN] && !this.noPan) {\n this._keyState = this.STATE.PAN\n }\n }\n\n private onPointerDown = (event: PointerEvent): void => {\n if (this.enabled === false) return\n\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n this.onMouseDown(event)\n break\n\n // TODO touch\n }\n }\n\n private onPointerMove = (event: PointerEvent): void => {\n if (this.enabled === false) return\n\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n this.onMouseMove(event)\n break\n\n // TODO touch\n }\n }\n\n private onPointerUp = (event: PointerEvent): void => {\n if (this.enabled === false) return\n\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n this.onMouseUp()\n break\n\n // TODO touch\n }\n }\n\n private keyup = (): void => {\n if (this.enabled === false) return\n\n this._keyState = this.STATE.NONE\n\n window.addEventListener('keydown', this.keydown)\n }\n\n private onMouseDown = (event: MouseEvent): void => {\n if (!this.domElement) return\n if (this._state === this.STATE.NONE) {\n switch (event.button) {\n case this.mouseButtons.LEFT:\n this._state = this.STATE.ROTATE\n break\n\n case this.mouseButtons.MIDDLE:\n this._state = this.STATE.ZOOM\n break\n\n case this.mouseButtons.RIGHT:\n this._state = this.STATE.PAN\n break\n }\n }\n\n const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state\n\n if (state === this.STATE.ROTATE && !this.noRotate) {\n this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY))\n this._movePrev.copy(this._moveCurr)\n } else if (state === this.STATE.ZOOM && !this.noZoom) {\n this._zoomStart.copy(this.getMouseOnScreen(event.pageX, event.pageY))\n this._zoomEnd.copy(this._zoomStart)\n } else if (state === this.STATE.PAN && !this.noPan) {\n this._panStart.copy(this.getMouseOnScreen(event.pageX, event.pageY))\n this._panEnd.copy(this._panStart)\n }\n\n this.domElement.ownerDocument.addEventListener('pointermove', this.onPointerMove)\n this.domElement.ownerDocument.addEventListener('pointerup', this.onPointerUp)\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n }\n\n private onMouseMove = (event: MouseEvent): void => {\n if (this.enabled === false) return\n\n const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state\n\n if (state === this.STATE.ROTATE && !this.noRotate) {\n this._movePrev.copy(this._moveCurr)\n this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY))\n } else if (state === this.STATE.ZOOM && !this.noZoom) {\n this._zoomEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY))\n } else if (state === this.STATE.PAN && !this.noPan) {\n this._panEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY))\n }\n }\n\n private onMouseUp = (): void => {\n if (!this.domElement) return\n if (this.enabled === false) return\n\n this._state = this.STATE.NONE\n\n this.domElement.ownerDocument.removeEventListener('pointermove', this.onPointerMove)\n this.domElement.ownerDocument.removeEventListener('pointerup', this.onPointerUp)\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n }\n\n private mousewheel = (event: WheelEvent): void => {\n if (this.enabled === false) return\n\n if (this.noZoom === true) return\n\n event.preventDefault()\n\n switch (event.deltaMode) {\n case 2:\n // Zoom in pages\n this._zoomStart.y -= event.deltaY * 0.025\n break\n\n case 1:\n // Zoom in lines\n this._zoomStart.y -= event.deltaY * 0.01\n break\n\n default:\n // undefined, 0, assume pixels\n this._zoomStart.y -= event.deltaY * 0.00025\n break\n }\n\n this.mousePosition.x = (event.offsetX / this.screen.width) * 2 - 1\n this.mousePosition.y = -(event.offsetY / this.screen.height) * 2 + 1\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n }\n\n private touchstart = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (event.touches.length) {\n case 1:\n this._state = this.STATE.TOUCH_ROTATE\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY))\n this._movePrev.copy(this._moveCurr)\n break\n\n default:\n // 2 or more\n this._state = this.STATE.TOUCH_ZOOM_PAN\n const dx = event.touches[0].pageX - event.touches[1].pageX\n const dy = event.touches[0].pageY - event.touches[1].pageY\n this._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy)\n\n const x = (event.touches[0].pageX + event.touches[1].pageX) / 2\n const y = (event.touches[0].pageY + event.touches[1].pageY) / 2\n this._panStart.copy(this.getMouseOnScreen(x, y))\n this._panEnd.copy(this._panStart)\n break\n }\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n }\n\n private touchmove = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (event.touches.length) {\n case 1:\n this._movePrev.copy(this._moveCurr)\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY))\n break\n\n default:\n // 2 or more\n const dx = event.touches[0].pageX - event.touches[1].pageX\n const dy = event.touches[0].pageY - event.touches[1].pageY\n this._touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy)\n\n const x = (event.touches[0].pageX + event.touches[1].pageX) / 2\n const y = (event.touches[0].pageY + event.touches[1].pageY) / 2\n this._panEnd.copy(this.getMouseOnScreen(x, y))\n break\n }\n }\n\n private touchend = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n switch (event.touches.length) {\n case 0:\n this._state = this.STATE.NONE\n break\n\n case 1:\n this._state = this.STATE.TOUCH_ROTATE\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY))\n this._movePrev.copy(this._moveCurr)\n break\n }\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n }\n\n private contextmenu = (event: MouseEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n }\n\n // https://github.com/mrdoob/three.js/issues/20575\n public connect = (domElement: HTMLElement): void => {\n if ((domElement as any) === document) {\n console.error(\n 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.',\n )\n }\n this.domElement = domElement\n this.domElement.addEventListener('contextmenu', this.contextmenu)\n\n this.domElement.addEventListener('pointerdown', this.onPointerDown)\n this.domElement.addEventListener('wheel', this.mousewheel)\n\n this.domElement.addEventListener('touchstart', this.touchstart)\n this.domElement.addEventListener('touchend', this.touchend)\n this.domElement.addEventListener('touchmove', this.touchmove)\n\n this.domElement.ownerDocument.addEventListener('pointermove', this.onPointerMove)\n this.domElement.ownerDocument.addEventListener('pointerup', this.onPointerUp)\n\n window.addEventListener('keydown', this.keydown)\n window.addEventListener('keyup', this.keyup)\n\n this.handleResize()\n }\n\n public dispose = (): void => {\n if (!this.domElement) return\n this.domElement.removeEventListener('contextmenu', this.contextmenu)\n\n this.domElement.removeEventListener('pointerdown', this.onPointerDown)\n this.domElement.removeEventListener('wheel', this.mousewheel)\n\n this.domElement.removeEventListener('touchstart', this.touchstart)\n this.domElement.removeEventListener('touchend', this.touchend)\n this.domElement.removeEventListener('touchmove', this.touchmove)\n\n this.domElement.ownerDocument.removeEventListener('pointermove', this.onPointerMove)\n this.domElement.ownerDocument.removeEventListener('pointerup', this.onPointerUp)\n\n window.removeEventListener('keydown', this.keydown)\n window.removeEventListener('keyup', this.keyup)\n }\n}\n\nexport { TrackballControls }\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TrackballControls.js","sources":["../../src/controls/TrackballControls.ts"],"sourcesContent":["import { MOUSE, Quaternion, Vector2, Vector3, PerspectiveCamera, OrthographicCamera } from 'three'\nimport { EventDispatcher } from './EventDispatcher'\nimport { StandardControlsEventMap } from './StandardControlsEventMap'\n\nclass TrackballControls extends EventDispatcher<StandardControlsEventMap> {\n public enabled = true\n\n public screen = { left: 0, top: 0, width: 0, height: 0 }\n\n public rotateSpeed = 1.0\n public zoomSpeed = 1.2\n public panSpeed = 0.3\n\n public noRotate = false\n public noZoom = false\n public noPan = false\n\n public staticMoving = false\n public dynamicDampingFactor = 0.2\n\n public minDistance = 0\n public maxDistance = Infinity\n\n public keys: [string, string, string] = ['KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/]\n\n public mouseButtons = {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN,\n }\n\n public object: PerspectiveCamera | OrthographicCamera\n public domElement: HTMLElement | undefined\n public cursorZoom: boolean = false\n\n readonly target = new Vector3()\n private mousePosition = new Vector2()\n\n // internals\n private STATE = {\n NONE: -1,\n ROTATE: 0,\n ZOOM: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_ZOOM_PAN: 4,\n }\n\n private EPS = 0.000001\n private lastZoom = 1\n\n private lastPosition = new Vector3()\n private cursorVector = new Vector3()\n private targetVector = new Vector3()\n\n private _state = this.STATE.NONE\n private _keyState = this.STATE.NONE\n private _eye = new Vector3()\n private _movePrev = new Vector2()\n private _moveCurr = new Vector2()\n private _lastAxis = new Vector3()\n private _lastAngle = 0\n private _zoomStart = new Vector2()\n private _zoomEnd = new Vector2()\n private _touchZoomDistanceStart = 0\n private _touchZoomDistanceEnd = 0\n private _panStart = new Vector2()\n private _panEnd = new Vector2()\n\n private target0: Vector3\n private position0: Vector3\n private up0: Vector3\n private zoom0: number\n\n // events\n\n private changeEvent = { type: 'change' }\n private startEvent = { type: 'start' }\n private endEvent = { type: 'end' }\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement?: HTMLElement) {\n super()\n this.object = object\n\n // for reset\n\n this.target0 = this.target.clone()\n this.position0 = this.object.position.clone()\n this.up0 = this.object.up.clone()\n this.zoom0 = this.object.zoom\n\n // connect events\n if (domElement !== undefined) this.connect(domElement)\n\n // force an update at start\n this.update()\n }\n\n private onScreenVector = new Vector2()\n\n private getMouseOnScreen = (pageX: number, pageY: number): Vector2 => {\n this.onScreenVector.set(\n (pageX - this.screen.left) / this.screen.width,\n (pageY - this.screen.top) / this.screen.height,\n )\n\n return this.onScreenVector\n }\n\n private onCircleVector = new Vector2()\n\n private getMouseOnCircle = (pageX: number, pageY: number): Vector2 => {\n this.onCircleVector.set(\n (pageX - this.screen.width * 0.5 - this.screen.left) / (this.screen.width * 0.5),\n (this.screen.height + 2 * (this.screen.top - pageY)) / this.screen.width, // screen.width intentional\n )\n\n return this.onCircleVector\n }\n\n private axis = new Vector3()\n private quaternion = new Quaternion()\n private eyeDirection = new Vector3()\n private objectUpDirection = new Vector3()\n private objectSidewaysDirection = new Vector3()\n private moveDirection = new Vector3()\n private angle: number = 0\n\n private rotateCamera = (): void => {\n this.moveDirection.set(this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0)\n this.angle = this.moveDirection.length()\n\n if (this.angle) {\n this._eye.copy(this.object.position).sub(this.target)\n\n this.eyeDirection.copy(this._eye).normalize()\n this.objectUpDirection.copy(this.object.up).normalize()\n this.objectSidewaysDirection.crossVectors(this.objectUpDirection, this.eyeDirection).normalize()\n\n this.objectUpDirection.setLength(this._moveCurr.y - this._movePrev.y)\n this.objectSidewaysDirection.setLength(this._moveCurr.x - this._movePrev.x)\n\n this.moveDirection.copy(this.objectUpDirection.add(this.objectSidewaysDirection))\n\n this.axis.crossVectors(this.moveDirection, this._eye).normalize()\n\n this.angle *= this.rotateSpeed\n this.quaternion.setFromAxisAngle(this.axis, this.angle)\n\n this._eye.applyQuaternion(this.quaternion)\n this.object.up.applyQuaternion(this.quaternion)\n\n this._lastAxis.copy(this.axis)\n this._lastAngle = this.angle\n } else if (!this.staticMoving && this._lastAngle) {\n this._lastAngle *= Math.sqrt(1.0 - this.dynamicDampingFactor)\n this._eye.copy(this.object.position).sub(this.target)\n this.quaternion.setFromAxisAngle(this._lastAxis, this._lastAngle)\n this._eye.applyQuaternion(this.quaternion)\n this.object.up.applyQuaternion(this.quaternion)\n }\n\n this._movePrev.copy(this._moveCurr)\n }\n\n private zoomCamera = (): void => {\n let factor\n\n if (this._state === this.STATE.TOUCH_ZOOM_PAN) {\n factor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd\n this._touchZoomDistanceStart = this._touchZoomDistanceEnd\n\n if ((this.object as PerspectiveCamera).isPerspectiveCamera) {\n this._eye.multiplyScalar(factor)\n } else if ((this.object as OrthographicCamera).isOrthographicCamera) {\n this.object.zoom /= factor\n this.object.updateProjectionMatrix()\n } else {\n console.warn('THREE.TrackballControls: Unsupported camera type')\n }\n } else {\n factor = 1.0 + (this._zoomEnd.y - this._zoomStart.y) * this.zoomSpeed\n\n if (Math.abs(factor - 1.0) > this.EPS && factor > 0.0) {\n if ((this.object as PerspectiveCamera).isPerspectiveCamera) {\n if (factor > 1.0 && this._eye.length() >= this.maxDistance - this.EPS) {\n factor = 1.0\n }\n this._eye.multiplyScalar(factor)\n } else if ((this.object as OrthographicCamera).isOrthographicCamera) {\n if (factor > 1.0 && this.object.zoom < this.maxDistance * this.maxDistance) {\n factor = 1.0\n }\n this.object.zoom /= factor\n } else {\n console.warn('THREE.TrackballControls: Unsupported camera type')\n }\n }\n\n if (this.staticMoving) {\n this._zoomStart.copy(this._zoomEnd)\n } else {\n this._zoomStart.y += (this._zoomEnd.y - this._zoomStart.y) * this.dynamicDampingFactor\n }\n\n if (this.cursorZoom) {\n //determine 3D position of mouse cursor (on target plane)\n this.targetVector.copy(this.target).project(this.object)\n let worldPos = this.cursorVector\n .set(this.mousePosition.x, this.mousePosition.y, this.targetVector.z)\n .unproject(this.object)\n\n //adjust target point so that \"point\" stays in place\n this.target.lerpVectors(worldPos, this.target, factor)\n }\n\n // Update the projection matrix after all properties are changed\n if ((this.object as OrthographicCamera).isOrthographicCamera) {\n this.object.updateProjectionMatrix()\n }\n }\n }\n\n private mouseChange = new Vector2()\n private objectUp = new Vector3()\n private pan = new Vector3()\n\n private panCamera = (): void => {\n if (!this.domElement) return\n this.mouseChange.copy(this._panEnd).sub(this._panStart)\n\n if (this.mouseChange.lengthSq() > this.EPS) {\n if ((this.object as OrthographicCamera).isOrthographicCamera) {\n const orthoObject = this.object as OrthographicCamera\n const scale_x = (orthoObject.right - orthoObject.left) / this.object.zoom\n const scale_y = (orthoObject.top - orthoObject.bottom) / this.object.zoom\n\n this.mouseChange.x *= scale_x\n this.mouseChange.y *= scale_y\n } else {\n this.mouseChange.multiplyScalar(this._eye.length() * this.panSpeed)\n }\n\n this.pan.copy(this._eye).cross(this.object.up).setLength(this.mouseChange.x)\n this.pan.add(this.objectUp.copy(this.object.up).setLength(this.mouseChange.y))\n\n this.object.position.add(this.pan)\n this.target.add(this.pan)\n\n if (this.staticMoving) {\n this._panStart.copy(this._panEnd)\n } else {\n this._panStart.add(\n this.mouseChange.subVectors(this._panEnd, this._panStart).multiplyScalar(this.dynamicDampingFactor),\n )\n }\n }\n }\n\n private checkDistances = (): void => {\n if (!this.noZoom || !this.noPan) {\n if (this._eye.lengthSq() > this.maxDistance * this.maxDistance) {\n this.object.position.addVectors(this.target, this._eye.setLength(this.maxDistance))\n this._zoomStart.copy(this._zoomEnd)\n }\n\n if (this._eye.lengthSq() < this.minDistance * this.minDistance) {\n this.object.position.addVectors(this.target, this._eye.setLength(this.minDistance))\n this._zoomStart.copy(this._zoomEnd)\n }\n }\n }\n\n public handleResize = (): void => {\n if (!this.domElement) return\n const box = this.domElement.getBoundingClientRect()\n // adjustments come from similar code in the jquery offset() function\n const d = this.domElement.ownerDocument.documentElement\n this.screen.left = box.left + window.pageXOffset - d.clientLeft\n this.screen.top = box.top + window.pageYOffset - d.clientTop\n this.screen.width = box.width\n this.screen.height = box.height\n }\n\n public update = (): void => {\n this._eye.subVectors(this.object.position, this.target)\n\n if (!this.noRotate) {\n this.rotateCamera()\n }\n\n if (!this.noZoom) {\n this.zoomCamera()\n }\n\n if (!this.noPan) {\n this.panCamera()\n }\n\n this.object.position.addVectors(this.target, this._eye)\n\n if ((this.object as PerspectiveCamera).isPerspectiveCamera) {\n this.checkDistances()\n\n this.object.lookAt(this.target)\n\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS) {\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.lastPosition.copy(this.object.position)\n }\n } else if ((this.object as OrthographicCamera).isOrthographicCamera) {\n this.object.lookAt(this.target)\n\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || this.lastZoom !== this.object.zoom) {\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.lastPosition.copy(this.object.position)\n this.lastZoom = this.object.zoom\n }\n } else {\n console.warn('THREE.TrackballControls: Unsupported camera type')\n }\n }\n\n public reset = (): void => {\n this._state = this.STATE.NONE\n this._keyState = this.STATE.NONE\n\n this.target.copy(this.target0)\n this.object.position.copy(this.position0)\n this.object.up.copy(this.up0)\n this.object.zoom = this.zoom0\n\n this.object.updateProjectionMatrix()\n\n this._eye.subVectors(this.object.position, this.target)\n\n this.object.lookAt(this.target)\n\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.lastPosition.copy(this.object.position)\n this.lastZoom = this.object.zoom\n }\n\n private keydown = (event: KeyboardEvent): void => {\n if (this.enabled === false) return\n\n window.removeEventListener('keydown', this.keydown)\n\n if (this._keyState !== this.STATE.NONE) {\n return\n } else if (event.code === this.keys[this.STATE.ROTATE] && !this.noRotate) {\n this._keyState = this.STATE.ROTATE\n } else if (event.code === this.keys[this.STATE.ZOOM] && !this.noZoom) {\n this._keyState = this.STATE.ZOOM\n } else if (event.code === this.keys[this.STATE.PAN] && !this.noPan) {\n this._keyState = this.STATE.PAN\n }\n }\n\n private onPointerDown = (event: PointerEvent): void => {\n if (this.enabled === false) return\n\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n this.onMouseDown(event)\n break\n\n // TODO touch\n }\n }\n\n private onPointerMove = (event: PointerEvent): void => {\n if (this.enabled === false) return\n\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n this.onMouseMove(event)\n break\n\n // TODO touch\n }\n }\n\n private onPointerUp = (event: PointerEvent): void => {\n if (this.enabled === false) return\n\n switch (event.pointerType) {\n case 'mouse':\n case 'pen':\n this.onMouseUp()\n break\n\n // TODO touch\n }\n }\n\n private keyup = (): void => {\n if (this.enabled === false) return\n\n this._keyState = this.STATE.NONE\n\n window.addEventListener('keydown', this.keydown)\n }\n\n private onMouseDown = (event: MouseEvent): void => {\n if (!this.domElement) return\n if (this._state === this.STATE.NONE) {\n switch (event.button) {\n case this.mouseButtons.LEFT:\n this._state = this.STATE.ROTATE\n break\n\n case this.mouseButtons.MIDDLE:\n this._state = this.STATE.ZOOM\n break\n\n case this.mouseButtons.RIGHT:\n this._state = this.STATE.PAN\n break\n }\n }\n\n const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state\n\n if (state === this.STATE.ROTATE && !this.noRotate) {\n this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY))\n this._movePrev.copy(this._moveCurr)\n } else if (state === this.STATE.ZOOM && !this.noZoom) {\n this._zoomStart.copy(this.getMouseOnScreen(event.pageX, event.pageY))\n this._zoomEnd.copy(this._zoomStart)\n } else if (state === this.STATE.PAN && !this.noPan) {\n this._panStart.copy(this.getMouseOnScreen(event.pageX, event.pageY))\n this._panEnd.copy(this._panStart)\n }\n\n this.domElement.ownerDocument.addEventListener('pointermove', this.onPointerMove)\n this.domElement.ownerDocument.addEventListener('pointerup', this.onPointerUp)\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n }\n\n private onMouseMove = (event: MouseEvent): void => {\n if (this.enabled === false) return\n\n const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state\n\n if (state === this.STATE.ROTATE && !this.noRotate) {\n this._movePrev.copy(this._moveCurr)\n this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY))\n } else if (state === this.STATE.ZOOM && !this.noZoom) {\n this._zoomEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY))\n } else if (state === this.STATE.PAN && !this.noPan) {\n this._panEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY))\n }\n }\n\n private onMouseUp = (): void => {\n if (!this.domElement) return\n if (this.enabled === false) return\n\n this._state = this.STATE.NONE\n\n this.domElement.ownerDocument.removeEventListener('pointermove', this.onPointerMove)\n this.domElement.ownerDocument.removeEventListener('pointerup', this.onPointerUp)\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n }\n\n private mousewheel = (event: WheelEvent): void => {\n if (this.enabled === false) return\n\n if (this.noZoom === true) return\n\n event.preventDefault()\n\n switch (event.deltaMode) {\n case 2:\n // Zoom in pages\n this._zoomStart.y -= event.deltaY * 0.025\n break\n\n case 1:\n // Zoom in lines\n this._zoomStart.y -= event.deltaY * 0.01\n break\n\n default:\n // undefined, 0, assume pixels\n this._zoomStart.y -= event.deltaY * 0.00025\n break\n }\n\n this.mousePosition.x = (event.offsetX / this.screen.width) * 2 - 1\n this.mousePosition.y = -(event.offsetY / this.screen.height) * 2 + 1\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n }\n\n private touchstart = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (event.touches.length) {\n case 1:\n this._state = this.STATE.TOUCH_ROTATE\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY))\n this._movePrev.copy(this._moveCurr)\n break\n\n default:\n // 2 or more\n this._state = this.STATE.TOUCH_ZOOM_PAN\n const dx = event.touches[0].pageX - event.touches[1].pageX\n const dy = event.touches[0].pageY - event.touches[1].pageY\n this._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy)\n\n const x = (event.touches[0].pageX + event.touches[1].pageX) / 2\n const y = (event.touches[0].pageY + event.touches[1].pageY) / 2\n this._panStart.copy(this.getMouseOnScreen(x, y))\n this._panEnd.copy(this._panStart)\n break\n }\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n }\n\n private touchmove = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (event.touches.length) {\n case 1:\n this._movePrev.copy(this._moveCurr)\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY))\n break\n\n default:\n // 2 or more\n const dx = event.touches[0].pageX - event.touches[1].pageX\n const dy = event.touches[0].pageY - event.touches[1].pageY\n this._touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy)\n\n const x = (event.touches[0].pageX + event.touches[1].pageX) / 2\n const y = (event.touches[0].pageY + event.touches[1].pageY) / 2\n this._panEnd.copy(this.getMouseOnScreen(x, y))\n break\n }\n }\n\n private touchend = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n switch (event.touches.length) {\n case 0:\n this._state = this.STATE.NONE\n break\n\n case 1:\n this._state = this.STATE.TOUCH_ROTATE\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY))\n this._movePrev.copy(this._moveCurr)\n break\n }\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n }\n\n private contextmenu = (event: MouseEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n }\n\n // https://github.com/mrdoob/three.js/issues/20575\n public connect = (domElement: HTMLElement): void => {\n if ((domElement as any) === document) {\n console.error(\n 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.',\n )\n }\n this.domElement = domElement\n this.domElement.addEventListener('contextmenu', this.contextmenu)\n\n this.domElement.addEventListener('pointerdown', this.onPointerDown)\n this.domElement.addEventListener('wheel', this.mousewheel)\n\n this.domElement.addEventListener('touchstart', this.touchstart)\n this.domElement.addEventListener('touchend', this.touchend)\n this.domElement.addEventListener('touchmove', this.touchmove)\n\n this.domElement.ownerDocument.addEventListener('pointermove', this.onPointerMove)\n this.domElement.ownerDocument.addEventListener('pointerup', this.onPointerUp)\n\n window.addEventListener('keydown', this.keydown)\n window.addEventListener('keyup', this.keyup)\n\n this.handleResize()\n }\n\n public dispose = (): void => {\n if (!this.domElement) return\n this.domElement.removeEventListener('contextmenu', this.contextmenu)\n\n this.domElement.removeEventListener('pointerdown', this.onPointerDown)\n this.domElement.removeEventListener('wheel', this.mousewheel)\n\n this.domElement.removeEventListener('touchstart', this.touchstart)\n this.domElement.removeEventListener('touchend', this.touchend)\n this.domElement.removeEventListener('touchmove', this.touchmove)\n\n this.domElement.ownerDocument.removeEventListener('pointermove', this.onPointerMove)\n this.domElement.ownerDocument.removeEventListener('pointerup', this.onPointerUp)\n\n window.removeEventListener('keydown', this.keydown)\n window.removeEventListener('keyup', this.keyup)\n }\n}\n\nexport { TrackballControls }\n"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ var __publicField = (obj, key, value) => {
|
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
9
9
|
const THREE = require("three");
|
|
10
|
+
const EventDispatcher = require("../EventDispatcher.cjs");
|
|
10
11
|
const STATE = {
|
|
11
12
|
NONE: -1,
|
|
12
13
|
ROTATE: 0,
|
|
@@ -17,7 +18,7 @@ const STATE = {
|
|
|
17
18
|
TOUCH_DOLLY_PAN: 5,
|
|
18
19
|
TOUCH_DOLLY_ROTATE: 6
|
|
19
20
|
};
|
|
20
|
-
class CameraControls extends
|
|
21
|
+
class CameraControls extends EventDispatcher.EventDispatcher {
|
|
21
22
|
constructor(object, domElement) {
|
|
22
23
|
super();
|
|
23
24
|
__publicField(this, "object");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CameraControls.cjs","sources":["../../../src/controls/experimental/CameraControls.ts"],"sourcesContent":["import {\n EventDispatcher,\n MOUSE,\n Matrix4,\n OrthographicCamera,\n PerspectiveCamera,\n Quaternion,\n Spherical,\n TOUCH,\n Vector2,\n Vector3,\n} from 'three'\n\nexport type CHANGE_EVENT = {\n type: 'change' | 'start' | 'end'\n}\n\nexport const 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: 6,\n}\n\nclass CameraControls extends EventDispatcher {\n object: PerspectiveCamera | OrthographicCamera\n domElement: HTMLElement\n\n /** Set to false to disable this control */\n enabled = true\n\n /** \"target\" sets the location of focus, where the object orbits around */\n target = new Vector3()\n\n /** Set to true to enable trackball behavior */\n trackball = false\n\n /** How far you can dolly in ( PerspectiveCamera only ) */\n minDistance = 0\n /** How far you can dolly out ( PerspectiveCamera only ) */\n maxDistance = Infinity\n\n // How far you can zoom in and out ( OrthographicCamera only )\n minZoom = 0\n maxZoom = Infinity\n\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n minPolarAngle = 0\n maxPolarAngle = Math.PI\n\n // 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 ].\n minAzimuthAngle = -Infinity // radians\n maxAzimuthAngle = Infinity // radians\n\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n enableDamping = false\n dampingFactor = 0.05\n\n /**\n * This option enables dollying in and out; property named as \"zoom\" for backwards compatibility\n * Set to false to disable zooming\n */\n enableZoom = true\n zoomSpeed = 1.0\n\n /** Set to false to disable rotating */\n enableRotate = true\n rotateSpeed = 1.0\n\n /** Set to false to disable panning */\n enablePan = true\n panSpeed = 1.0\n /** if true, pan in screen-space */\n screenSpacePanning = false\n /** pixels moved per arrow key push */\n keyPanSpeed = 7.0\n\n /**\n * Set to true to automatically rotate around the target\n * If auto-rotate is enabled, you must call controls.update() in your animation loop\n * auto-rotate is not supported for trackball behavior\n */\n autoRotate = false\n autoRotateSpeed = 2.0 // 30 seconds per round when fps is 60\n\n /** Set to false to disable use of the keys */\n enableKeys = true\n\n /** The four arrow keys */\n keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' }\n\n mouseButtons: {\n LEFT: MOUSE\n MIDDLE?: MOUSE\n RIGHT: MOUSE\n }\n\n /** Touch fingers */\n touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }\n\n // for reset\n target0: Vector3\n position0: Vector3\n quaternion0: Quaternion\n zoom0: number\n\n // current position in spherical coordinates\n spherical = new Spherical()\n sphericalDelta = new Spherical()\n\n private changeEvent = { type: 'change' }\n private startEvent = { type: 'start' }\n private endEvent = { type: 'end' }\n private state = STATE.NONE\n\n private EPS = 0.000001\n\n private scale = 1\n private panOffset = new Vector3()\n private zoomChanged = false\n\n private rotateStart = new Vector2()\n private rotateEnd = new Vector2()\n private rotateDelta = new Vector2()\n\n private panStart = new Vector2()\n private panEnd = new Vector2()\n private panDelta = new Vector2()\n\n private dollyStart = new Vector2()\n private dollyEnd = new Vector2()\n private dollyDelta = new Vector2()\n\n private offset = new Vector3()\n\n private lastPosition = new Vector3()\n private lastQuaternion = new Quaternion()\n\n private q = new Quaternion()\n private v = new Vector3()\n private vec = new Vector3()\n\n private quat: Quaternion\n private quatInverse: Quaternion\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement) {\n super()\n\n if (domElement === undefined) {\n console.warn('THREE.CameraControls: The second parameter \"domElement\" is now mandatory.')\n }\n if (domElement instanceof Document) {\n console.error(\n 'THREE.CameraControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.',\n )\n }\n\n this.object = object\n this.domElement = domElement\n\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN,\n }\n\n // for reset\n this.target0 = this.target.clone()\n this.position0 = this.object.position.clone()\n this.quaternion0 = this.object.quaternion.clone()\n this.zoom0 = this.object.zoom\n\n //\n // internals\n //\n\n // so camera.up is the orbit axis\n this.quat = new Quaternion().setFromUnitVectors(this.object.up, new Vector3(0, 1, 0))\n this.quatInverse = this.quat.clone().invert()\n\n this.lastPosition = new Vector3()\n this.lastQuaternion = new Quaternion()\n\n this.domElement.addEventListener('contextmenu', this.onContextMenu, false)\n\n this.domElement.addEventListener('mousedown', this.onMouseDown, false)\n this.domElement.addEventListener('wheel', this.onMouseWheel, false)\n\n this.domElement.addEventListener('touchstart', this.onTouchStart, false)\n this.domElement.addEventListener('touchend', this.onTouchEnd, false)\n this.domElement.addEventListener('touchmove', this.onTouchMove, false)\n\n this.domElement.addEventListener('keydown', this.onKeyDown, false)\n\n // make sure element can receive keys.\n\n if (this.domElement.tabIndex === -1) {\n this.domElement.tabIndex = 0\n }\n\n // force an update at start\n\n this.object.lookAt(this.target)\n this.update()\n this.saveState()\n }\n\n getPolarAngle = (): number => this.spherical.phi\n\n getAzimuthalAngle = (): number => this.spherical.theta\n\n saveState = (): void => {\n this.target0.copy(this.target)\n this.position0.copy(this.object.position)\n this.quaternion0.copy(this.object.quaternion)\n this.zoom0 = this.object.zoom\n }\n\n reset = (): void => {\n this.target.copy(this.target0)\n this.object.position.copy(this.position0)\n this.object.quaternion.copy(this.quaternion0)\n this.object.zoom = this.zoom0\n\n this.object.updateProjectionMatrix()\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.update()\n\n this.state = STATE.NONE\n }\n\n dispose = (): void => {\n this.domElement.removeEventListener('contextmenu', this.onContextMenu, false)\n this.domElement.removeEventListener('mousedown', this.onMouseDown, false)\n this.domElement.removeEventListener('wheel', this.onMouseWheel, false)\n\n this.domElement.removeEventListener('touchstart', this.onTouchStart, false)\n this.domElement.removeEventListener('touchend', this.onTouchEnd, false)\n this.domElement.removeEventListener('touchmove', this.onTouchMove, false)\n\n document.removeEventListener('mousemove', this.onMouseMove, false)\n document.removeEventListener('mouseup', this.onMouseUp, false)\n\n this.domElement.removeEventListener('keydown', this.onKeyDown, false)\n\n //this.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n }\n\n private update = (): boolean => {\n const position = this.object.position\n\n this.offset.copy(position).sub(this.target)\n\n if (this.trackball) {\n // rotate around screen-space y-axis\n\n if (this.sphericalDelta.theta) {\n this.vec.set(0, 1, 0).applyQuaternion(this.object.quaternion)\n\n const factor = this.enableDamping ? this.dampingFactor : 1\n\n this.q.setFromAxisAngle(this.vec, this.sphericalDelta.theta * factor)\n\n this.object.quaternion.premultiply(this.q)\n this.offset.applyQuaternion(this.q)\n }\n\n // rotate around screen-space x-axis\n\n if (this.sphericalDelta.phi) {\n this.vec.set(1, 0, 0).applyQuaternion(this.object.quaternion)\n\n const factor = this.enableDamping ? this.dampingFactor : 1\n\n this.q.setFromAxisAngle(this.vec, this.sphericalDelta.phi * factor)\n\n this.object.quaternion.premultiply(this.q)\n this.offset.applyQuaternion(this.q)\n }\n\n this.offset.multiplyScalar(this.scale)\n this.offset.clampLength(this.minDistance, this.maxDistance)\n } else {\n // rotate offset to \"y-axis-is-up\" space\n this.offset.applyQuaternion(this.quat)\n\n if (this.autoRotate && this.state === STATE.NONE) {\n this.rotateLeft(this.getAutoRotationAngle())\n }\n\n this.spherical.setFromVector3(this.offset)\n\n if (this.enableDamping) {\n this.spherical.theta += this.sphericalDelta.theta * this.dampingFactor\n this.spherical.phi += this.sphericalDelta.phi * this.dampingFactor\n } else {\n this.spherical.theta += this.sphericalDelta.theta\n this.spherical.phi += this.sphericalDelta.phi\n }\n\n // restrict theta to be between desired limits\n this.spherical.theta = Math.max(this.minAzimuthAngle, Math.min(this.maxAzimuthAngle, this.spherical.theta))\n\n // restrict phi to be between desired limits\n this.spherical.phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, this.spherical.phi))\n\n this.spherical.makeSafe()\n\n this.spherical.radius *= this.scale\n\n // restrict radius to be between desired limits\n this.spherical.radius = Math.max(this.minDistance, Math.min(this.maxDistance, this.spherical.radius))\n\n this.offset.setFromSpherical(this.spherical)\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n this.offset.applyQuaternion(this.quatInverse)\n }\n\n // move target to panned location\n\n if (this.enableDamping === true) {\n this.target.addScaledVector(this.panOffset, this.dampingFactor)\n } else {\n this.target.add(this.panOffset)\n }\n\n position.copy(this.target).add(this.offset)\n\n if (this.trackball === false) {\n this.object.lookAt(this.target)\n }\n\n if (this.enableDamping === true) {\n this.sphericalDelta.theta *= 1 - this.dampingFactor\n this.sphericalDelta.phi *= 1 - this.dampingFactor\n\n this.panOffset.multiplyScalar(1 - this.dampingFactor)\n } else {\n this.sphericalDelta.set(0, 0, 0)\n\n this.panOffset.set(0, 0, 0)\n }\n\n this.scale = 1\n\n // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if (\n this.zoomChanged ||\n this.lastPosition.distanceToSquared(this.object.position) > this.EPS ||\n 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS\n ) {\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.lastPosition.copy(this.object.position)\n this.lastQuaternion.copy(this.object.quaternion)\n this.zoomChanged = false\n\n return true\n }\n\n return false\n }\n\n private getAutoRotationAngle = (): number => ((2 * Math.PI) / 60 / 60) * this.autoRotateSpeed\n\n private getZoomScale = (): number => Math.pow(0.95, this.zoomSpeed)\n\n private rotateLeft = (angle: number): void => {\n this.sphericalDelta.theta -= angle\n }\n\n private rotateUp = (angle: number): void => {\n this.sphericalDelta.phi -= angle\n }\n\n private panLeft = (distance: number, objectMatrix: Matrix4): void => {\n this.v.setFromMatrixColumn(objectMatrix, 0) // get X column of objectMatrix\n this.v.multiplyScalar(-distance)\n\n this.panOffset.add(this.v)\n }\n\n private panUp = (distance: number, objectMatrix: Matrix4): void => {\n if (this.screenSpacePanning === true) {\n this.v.setFromMatrixColumn(objectMatrix, 1)\n } else {\n this.v.setFromMatrixColumn(objectMatrix, 0)\n this.v.crossVectors(this.object.up, this.v)\n }\n\n this.v.multiplyScalar(distance)\n\n this.panOffset.add(this.v)\n }\n\n // deltaX and deltaY are in pixels; right and down are positive\n private pan = (deltaX: number, deltaY: number): void => {\n const element = this.domElement\n\n if (this.object instanceof PerspectiveCamera) {\n // perspective\n const position = this.object.position\n this.offset.copy(position).sub(this.target)\n let targetDistance = this.offset.length()\n\n // half of the fov is center to top of screen\n targetDistance *= Math.tan(((this.object.fov / 2) * Math.PI) / 180.0)\n\n // we use only clientHeight here so aspect ratio does not distort speed\n this.panLeft((2 * deltaX * targetDistance) / element.clientHeight, this.object.matrix)\n this.panUp((2 * deltaY * targetDistance) / element.clientHeight, this.object.matrix)\n } else if (this.object.isOrthographicCamera) {\n // orthographic\n this.panLeft(\n (deltaX * (this.object.right - this.object.left)) / this.object.zoom / element.clientWidth,\n this.object.matrix,\n )\n this.panUp(\n (deltaY * (this.object.top - this.object.bottom)) / this.object.zoom / element.clientHeight,\n this.object.matrix,\n )\n } else {\n // camera neither orthographic nor perspective\n console.warn('WARNING: CameraControls.js encountered an unknown camera type - pan disabled.')\n this.enablePan = false\n }\n }\n\n private dollyIn = (dollyScale: number): void => {\n // TODO: replace w/.isPerspectiveCamera ?\n if (this.object instanceof PerspectiveCamera) {\n this.scale /= dollyScale\n // TODO: replace w/.isOrthographicCamera ?\n } else if (this.object instanceof OrthographicCamera) {\n this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom * dollyScale))\n this.object.updateProjectionMatrix()\n this.zoomChanged = true\n } else {\n console.warn('WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled.')\n this.enableZoom = false\n }\n }\n\n private dollyOut = (dollyScale: number): void => {\n // TODO: replace w/.isPerspectiveCamera ?\n if (this.object instanceof PerspectiveCamera) {\n this.scale *= dollyScale\n // TODO: replace w/.isOrthographicCamera ?\n } else if (this.object instanceof OrthographicCamera) {\n this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / dollyScale))\n this.object.updateProjectionMatrix()\n this.zoomChanged = true\n } else {\n console.warn('WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled.')\n this.enableZoom = false\n }\n }\n\n // event callbacks - update the object state\n\n private handleMouseDownRotate = (event: MouseEvent): void => {\n this.rotateStart.set(event.clientX, event.clientY)\n }\n\n // TODO: confirm if worthwhile to return the Vector2 instead of void\n private handleMouseDownDolly = (event: MouseEvent): void => {\n this.dollyStart.set(event.clientX, event.clientY)\n }\n\n private handleMouseDownPan = (event: MouseEvent): void => {\n this.panStart.set(event.clientX, event.clientY)\n }\n\n private handleMouseMoveRotate = (event: MouseEvent): void => {\n this.rotateEnd.set(event.clientX, event.clientY)\n\n this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed)\n\n const element = this.domElement\n\n this.rotateLeft((2 * Math.PI * this.rotateDelta.x) / element.clientHeight) // yes, height\n\n this.rotateUp((2 * Math.PI * this.rotateDelta.y) / element.clientHeight)\n\n this.rotateStart.copy(this.rotateEnd)\n\n this.update()\n }\n\n private handleMouseMoveDolly = (event: MouseEvent): void => {\n this.dollyEnd.set(event.clientX, event.clientY)\n\n this.dollyDelta.subVectors(this.dollyEnd, this.dollyStart)\n\n if (this.dollyDelta.y > 0) {\n this.dollyIn(this.getZoomScale())\n } else if (this.dollyDelta.y < 0) {\n this.dollyOut(this.getZoomScale())\n }\n\n this.dollyStart.copy(this.dollyEnd)\n\n this.update()\n }\n\n private handleMouseMovePan = (event: MouseEvent): void => {\n this.panEnd.set(event.clientX, event.clientY)\n\n this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed)\n\n this.pan(this.panDelta.x, this.panDelta.y)\n\n this.panStart.copy(this.panEnd)\n\n this.update()\n }\n\n private handleMouseUp(/*event*/): void {\n // no-op\n }\n\n private handleMouseWheel = (event: WheelEvent): void => {\n if (event.deltaY < 0) {\n this.dollyOut(this.getZoomScale())\n } else if (event.deltaY > 0) {\n this.dollyIn(this.getZoomScale())\n }\n\n this.update()\n }\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n let needsUpdate = false\n\n switch (event.code) {\n case this.keys.UP:\n this.pan(0, this.keyPanSpeed)\n needsUpdate = true\n break\n\n case this.keys.BOTTOM:\n this.pan(0, -this.keyPanSpeed)\n needsUpdate = true\n break\n\n case this.keys.LEFT:\n this.pan(this.keyPanSpeed, 0)\n needsUpdate = true\n break\n\n case this.keys.RIGHT:\n this.pan(-this.keyPanSpeed, 0)\n needsUpdate = true\n break\n }\n\n if (needsUpdate) {\n // prevent the browser from scrolling on cursor keys\n event.preventDefault()\n\n this.update()\n }\n }\n\n private handleTouchStartRotate = (event: TouchEvent): void => {\n if (event.touches.length == 1) {\n this.rotateStart.set(event.touches[0].pageX, event.touches[0].pageY)\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX)\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY)\n\n this.rotateStart.set(x, y)\n }\n }\n\n private handleTouchStartPan = (event: TouchEvent): void => {\n if (event.touches.length == 1) {\n this.panStart.set(event.touches[0].pageX, event.touches[0].pageY)\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX)\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY)\n\n this.panStart.set(x, y)\n }\n }\n\n private handleTouchStartDolly = (event: TouchEvent): void => {\n const dx = event.touches[0].pageX - event.touches[1].pageX\n const dy = event.touches[0].pageY - event.touches[1].pageY\n\n const distance = Math.sqrt(dx * dx + dy * dy)\n\n this.dollyStart.set(0, distance)\n }\n\n private handleTouchStartDollyPan = (event: TouchEvent): void => {\n if (this.enableZoom) this.handleTouchStartDolly(event)\n\n if (this.enablePan) this.handleTouchStartPan(event)\n }\n\n private handleTouchStartDollyRotate = (event: TouchEvent): void => {\n if (this.enableZoom) this.handleTouchStartDolly(event)\n\n if (this.enableRotate) this.handleTouchStartRotate(event)\n }\n\n private handleTouchMoveRotate = (event: TouchEvent): void => {\n if (event.touches.length == 1) {\n this.rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY)\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX)\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY)\n\n this.rotateEnd.set(x, y)\n }\n\n this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed)\n\n const element = this.domElement\n\n this.rotateLeft((2 * Math.PI * this.rotateDelta.x) / element.clientHeight) // yes, height\n\n this.rotateUp((2 * Math.PI * this.rotateDelta.y) / element.clientHeight)\n\n this.rotateStart.copy(this.rotateEnd)\n }\n\n private handleTouchMovePan = (event: TouchEvent): void => {\n if (event.touches.length == 1) {\n this.panEnd.set(event.touches[0].pageX, event.touches[0].pageY)\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX)\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY)\n\n this.panEnd.set(x, y)\n }\n\n this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed)\n\n this.pan(this.panDelta.x, this.panDelta.y)\n\n this.panStart.copy(this.panEnd)\n }\n\n private handleTouchMoveDolly = (event: TouchEvent): void => {\n const dx = event.touches[0].pageX - event.touches[1].pageX\n const dy = event.touches[0].pageY - event.touches[1].pageY\n\n const distance = Math.sqrt(dx * dx + dy * dy)\n\n this.dollyEnd.set(0, distance)\n\n this.dollyDelta.set(0, Math.pow(this.dollyEnd.y / this.dollyStart.y, this.zoomSpeed))\n\n this.dollyIn(this.dollyDelta.y)\n\n this.dollyStart.copy(this.dollyEnd)\n }\n\n private handleTouchMoveDollyPan = (event: TouchEvent): void => {\n if (this.enableZoom) this.handleTouchMoveDolly(event)\n\n if (this.enablePan) this.handleTouchMovePan(event)\n }\n\n private handleTouchMoveDollyRotate = (event: TouchEvent): void => {\n if (this.enableZoom) this.handleTouchMoveDolly(event)\n\n if (this.enableRotate) this.handleTouchMoveRotate(event)\n }\n\n private handleTouchEnd(/*event*/): void {\n // no-op\n }\n\n //\n // event handlers - FSM: listen for events and reset state\n //\n\n private onMouseDown = (event: MouseEvent): void => {\n if (this.enabled === false) return\n\n // Prevent the browser from scrolling.\n\n event.preventDefault()\n\n // Manually set the focus since calling preventDefault above\n // prevents the browser from setting it automatically.\n\n this.domElement.focus ? this.domElement.focus() : window.focus()\n\n let mouseAction\n\n switch (event.button) {\n case 0:\n mouseAction = this.mouseButtons.LEFT\n break\n\n case 1:\n mouseAction = this.mouseButtons.MIDDLE\n break\n\n case 2:\n mouseAction = this.mouseButtons.RIGHT\n break\n\n default:\n mouseAction = -1\n }\n\n switch (mouseAction) {\n case MOUSE.DOLLY:\n if (this.enableZoom === false) return\n\n this.handleMouseDownDolly(event)\n\n this.state = STATE.DOLLY\n\n break\n\n case MOUSE.ROTATE:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (this.enablePan === false) return\n\n this.handleMouseDownPan(event)\n\n this.state = STATE.PAN\n } else {\n if (this.enableRotate === false) return\n\n this.handleMouseDownRotate(event)\n\n this.state = STATE.ROTATE\n }\n\n break\n\n case MOUSE.PAN:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (this.enableRotate === false) return\n\n this.handleMouseDownRotate(event)\n\n this.state = STATE.ROTATE\n } else {\n if (this.enablePan === false) return\n\n this.handleMouseDownPan(event)\n\n this.state = STATE.PAN\n }\n\n break\n\n default:\n this.state = STATE.NONE\n }\n\n if (this.state !== STATE.NONE) {\n document.addEventListener('mousemove', this.onMouseMove, false)\n document.addEventListener('mouseup', this.onMouseUp, false)\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n }\n }\n\n private onMouseMove = (event: MouseEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (this.state) {\n case STATE.ROTATE:\n if (this.enableRotate === false) return\n\n this.handleMouseMoveRotate(event)\n\n break\n\n case STATE.DOLLY:\n if (this.enableZoom === false) return\n\n this.handleMouseMoveDolly(event)\n\n break\n\n case STATE.PAN:\n if (this.enablePan === false) return\n\n this.handleMouseMovePan(event)\n\n break\n }\n }\n\n private onMouseUp = (): void => {\n if (this.enabled === false) return\n\n // this.handleMouseUp()\n\n document.removeEventListener('mousemove', this.onMouseMove, false)\n document.removeEventListener('mouseup', this.onMouseUp, false)\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n\n this.state = STATE.NONE\n }\n\n private onMouseWheel = (event: WheelEvent): void => {\n if (\n this.enabled === false ||\n this.enableZoom === false ||\n (this.state !== STATE.NONE && this.state !== STATE.ROTATE)\n ) {\n return\n }\n\n event.preventDefault()\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n\n this.handleMouseWheel(event)\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n }\n\n private onKeyDown = (event: KeyboardEvent): void => {\n if (this.enabled === false || this.enableKeys === false || this.enablePan === false) return\n\n this.handleKeyDown(event)\n }\n\n private onTouchStart = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (event.touches.length) {\n case 1:\n switch (this.touches.ONE) {\n case TOUCH.ROTATE:\n if (this.enableRotate === false) return\n\n this.handleTouchStartRotate(event)\n\n this.state = STATE.TOUCH_ROTATE\n\n break\n\n case TOUCH.PAN:\n if (this.enablePan === false) return\n\n this.handleTouchStartPan(event)\n\n this.state = STATE.TOUCH_PAN\n\n break\n\n default:\n this.state = STATE.NONE\n }\n\n break\n\n case 2:\n switch (this.touches.TWO) {\n case TOUCH.DOLLY_PAN:\n if (this.enableZoom === false && this.enablePan === false) return\n\n this.handleTouchStartDollyPan(event)\n\n this.state = STATE.TOUCH_DOLLY_PAN\n\n break\n\n case TOUCH.DOLLY_ROTATE:\n if (this.enableZoom === false && this.enableRotate === false) return\n\n this.handleTouchStartDollyRotate(event)\n\n this.state = STATE.TOUCH_DOLLY_ROTATE\n\n break\n\n default:\n this.state = STATE.NONE\n }\n\n break\n\n default:\n this.state = STATE.NONE\n }\n\n if (this.state !== STATE.NONE) {\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n }\n }\n\n private onTouchMove = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (this.state) {\n case STATE.TOUCH_ROTATE:\n if (this.enableRotate === false) return\n\n this.handleTouchMoveRotate(event)\n\n this.update()\n\n break\n\n case STATE.TOUCH_PAN:\n if (this.enablePan === false) return\n\n this.handleTouchMovePan(event)\n\n this.update()\n\n break\n\n case STATE.TOUCH_DOLLY_PAN:\n if (this.enableZoom === false && this.enablePan === false) return\n\n this.handleTouchMoveDollyPan(event)\n\n this.update()\n\n break\n\n case STATE.TOUCH_DOLLY_ROTATE:\n if (this.enableZoom === false && this.enableRotate === false) return\n\n this.handleTouchMoveDollyRotate(event)\n\n this.update()\n\n break\n\n default:\n this.state = STATE.NONE\n }\n }\n\n private onTouchEnd = (): void => {\n if (this.enabled === false) return\n\n // this.handleTouchEnd()\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n\n this.state = STATE.NONE\n }\n\n private onContextMenu = (event: Event): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n }\n}\n\n/**\n * OrbitControls maintains the \"up\" direction, camera.up (+Y by default).\n *\n * @event Orbit - left mouse / touch: one-finger move\n * @event Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n * @event Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n */\nclass OrbitControlsExp extends CameraControls {\n mouseButtons: {\n LEFT: MOUSE\n RIGHT: MOUSE\n }\n touches: {\n ONE: TOUCH\n TWO: TOUCH\n }\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement) {\n super(object, domElement)\n\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n RIGHT: MOUSE.PAN,\n }\n this.touches = {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN,\n }\n }\n}\n\n/**\n * MapControls maintains the \"up\" direction, camera.up (+Y by default)\n *\n * @event Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n * @event Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n * @event Pan - left mouse, or left right + ctrl/meta/shiftKey, or arrow keys / touch: one-finger move\n */\nclass MapControlsExp extends CameraControls {\n mouseButtons: {\n LEFT: MOUSE\n RIGHT: MOUSE\n }\n touches: {\n ONE: TOUCH\n TWO: TOUCH\n }\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement) {\n super(object, domElement)\n\n this.mouseButtons = {\n LEFT: MOUSE.PAN,\n RIGHT: MOUSE.ROTATE,\n }\n this.touches = {\n ONE: TOUCH.PAN,\n TWO: TOUCH.DOLLY_ROTATE,\n }\n }\n}\n\n/**\n * TrackballControls allows the camera to rotate over the polls and does not maintain camera.up\n *\n * @event Orbit - left mouse / touch: one-finger move\n * @event Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n * @event Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n */\nclass TrackballControlsExp extends CameraControls {\n trackball: boolean\n screenSpacePanning: boolean\n autoRotate: boolean\n mouseButtons: {\n LEFT: MOUSE\n RIGHT: MOUSE\n }\n touches: {\n ONE: TOUCH\n TWO: TOUCH\n }\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement) {\n super(object, domElement)\n\n this.trackball = true\n this.screenSpacePanning = true\n this.autoRotate = false\n\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n RIGHT: MOUSE.PAN,\n }\n\n this.touches = {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN,\n }\n }\n}\n\nexport { CameraControls, OrbitControlsExp, MapControlsExp, TrackballControlsExp }\n"],"names":["EventDispatcher","Vector3","TOUCH","Spherical","Vector2","Quaternion","PerspectiveCamera","OrthographicCamera","MOUSE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CameraControls.cjs","sources":["../../../src/controls/experimental/CameraControls.ts"],"sourcesContent":["import {\n MOUSE,\n Matrix4,\n OrthographicCamera,\n PerspectiveCamera,\n Quaternion,\n Spherical,\n TOUCH,\n Vector2,\n Vector3,\n} from 'three'\nimport { EventDispatcher } from '../EventDispatcher'\n\nexport type CHANGE_EVENT = {\n type: 'change' | 'start' | 'end'\n}\n\nexport const 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: 6,\n}\n\nclass CameraControls extends EventDispatcher<Record<string, {}>> {\n object: PerspectiveCamera | OrthographicCamera\n domElement: HTMLElement\n\n /** Set to false to disable this control */\n enabled = true\n\n /** \"target\" sets the location of focus, where the object orbits around */\n target = new Vector3()\n\n /** Set to true to enable trackball behavior */\n trackball = false\n\n /** How far you can dolly in ( PerspectiveCamera only ) */\n minDistance = 0\n /** How far you can dolly out ( PerspectiveCamera only ) */\n maxDistance = Infinity\n\n // How far you can zoom in and out ( OrthographicCamera only )\n minZoom = 0\n maxZoom = Infinity\n\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n minPolarAngle = 0\n maxPolarAngle = Math.PI\n\n // 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 ].\n minAzimuthAngle = -Infinity // radians\n maxAzimuthAngle = Infinity // radians\n\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n enableDamping = false\n dampingFactor = 0.05\n\n /**\n * This option enables dollying in and out; property named as \"zoom\" for backwards compatibility\n * Set to false to disable zooming\n */\n enableZoom = true\n zoomSpeed = 1.0\n\n /** Set to false to disable rotating */\n enableRotate = true\n rotateSpeed = 1.0\n\n /** Set to false to disable panning */\n enablePan = true\n panSpeed = 1.0\n /** if true, pan in screen-space */\n screenSpacePanning = false\n /** pixels moved per arrow key push */\n keyPanSpeed = 7.0\n\n /**\n * Set to true to automatically rotate around the target\n * If auto-rotate is enabled, you must call controls.update() in your animation loop\n * auto-rotate is not supported for trackball behavior\n */\n autoRotate = false\n autoRotateSpeed = 2.0 // 30 seconds per round when fps is 60\n\n /** Set to false to disable use of the keys */\n enableKeys = true\n\n /** The four arrow keys */\n keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' }\n\n mouseButtons: {\n LEFT: MOUSE\n MIDDLE?: MOUSE\n RIGHT: MOUSE\n }\n\n /** Touch fingers */\n touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }\n\n // for reset\n target0: Vector3\n position0: Vector3\n quaternion0: Quaternion\n zoom0: number\n\n // current position in spherical coordinates\n spherical = new Spherical()\n sphericalDelta = new Spherical()\n\n private changeEvent = { type: 'change' }\n private startEvent = { type: 'start' }\n private endEvent = { type: 'end' }\n private state = STATE.NONE\n\n private EPS = 0.000001\n\n private scale = 1\n private panOffset = new Vector3()\n private zoomChanged = false\n\n private rotateStart = new Vector2()\n private rotateEnd = new Vector2()\n private rotateDelta = new Vector2()\n\n private panStart = new Vector2()\n private panEnd = new Vector2()\n private panDelta = new Vector2()\n\n private dollyStart = new Vector2()\n private dollyEnd = new Vector2()\n private dollyDelta = new Vector2()\n\n private offset = new Vector3()\n\n private lastPosition = new Vector3()\n private lastQuaternion = new Quaternion()\n\n private q = new Quaternion()\n private v = new Vector3()\n private vec = new Vector3()\n\n private quat: Quaternion\n private quatInverse: Quaternion\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement) {\n super()\n\n if (domElement === undefined) {\n console.warn('THREE.CameraControls: The second parameter \"domElement\" is now mandatory.')\n }\n if (domElement instanceof Document) {\n console.error(\n 'THREE.CameraControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.',\n )\n }\n\n this.object = object\n this.domElement = domElement\n\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN,\n }\n\n // for reset\n this.target0 = this.target.clone()\n this.position0 = this.object.position.clone()\n this.quaternion0 = this.object.quaternion.clone()\n this.zoom0 = this.object.zoom\n\n //\n // internals\n //\n\n // so camera.up is the orbit axis\n this.quat = new Quaternion().setFromUnitVectors(this.object.up, new Vector3(0, 1, 0))\n this.quatInverse = this.quat.clone().invert()\n\n this.lastPosition = new Vector3()\n this.lastQuaternion = new Quaternion()\n\n this.domElement.addEventListener('contextmenu', this.onContextMenu, false)\n\n this.domElement.addEventListener('mousedown', this.onMouseDown, false)\n this.domElement.addEventListener('wheel', this.onMouseWheel, false)\n\n this.domElement.addEventListener('touchstart', this.onTouchStart, false)\n this.domElement.addEventListener('touchend', this.onTouchEnd, false)\n this.domElement.addEventListener('touchmove', this.onTouchMove, false)\n\n this.domElement.addEventListener('keydown', this.onKeyDown, false)\n\n // make sure element can receive keys.\n\n if (this.domElement.tabIndex === -1) {\n this.domElement.tabIndex = 0\n }\n\n // force an update at start\n\n this.object.lookAt(this.target)\n this.update()\n this.saveState()\n }\n\n getPolarAngle = (): number => this.spherical.phi\n\n getAzimuthalAngle = (): number => this.spherical.theta\n\n saveState = (): void => {\n this.target0.copy(this.target)\n this.position0.copy(this.object.position)\n this.quaternion0.copy(this.object.quaternion)\n this.zoom0 = this.object.zoom\n }\n\n reset = (): void => {\n this.target.copy(this.target0)\n this.object.position.copy(this.position0)\n this.object.quaternion.copy(this.quaternion0)\n this.object.zoom = this.zoom0\n\n this.object.updateProjectionMatrix()\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.update()\n\n this.state = STATE.NONE\n }\n\n dispose = (): void => {\n this.domElement.removeEventListener('contextmenu', this.onContextMenu, false)\n this.domElement.removeEventListener('mousedown', this.onMouseDown, false)\n this.domElement.removeEventListener('wheel', this.onMouseWheel, false)\n\n this.domElement.removeEventListener('touchstart', this.onTouchStart, false)\n this.domElement.removeEventListener('touchend', this.onTouchEnd, false)\n this.domElement.removeEventListener('touchmove', this.onTouchMove, false)\n\n document.removeEventListener('mousemove', this.onMouseMove, false)\n document.removeEventListener('mouseup', this.onMouseUp, false)\n\n this.domElement.removeEventListener('keydown', this.onKeyDown, false)\n\n //this.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n }\n\n private update = (): boolean => {\n const position = this.object.position\n\n this.offset.copy(position).sub(this.target)\n\n if (this.trackball) {\n // rotate around screen-space y-axis\n\n if (this.sphericalDelta.theta) {\n this.vec.set(0, 1, 0).applyQuaternion(this.object.quaternion)\n\n const factor = this.enableDamping ? this.dampingFactor : 1\n\n this.q.setFromAxisAngle(this.vec, this.sphericalDelta.theta * factor)\n\n this.object.quaternion.premultiply(this.q)\n this.offset.applyQuaternion(this.q)\n }\n\n // rotate around screen-space x-axis\n\n if (this.sphericalDelta.phi) {\n this.vec.set(1, 0, 0).applyQuaternion(this.object.quaternion)\n\n const factor = this.enableDamping ? this.dampingFactor : 1\n\n this.q.setFromAxisAngle(this.vec, this.sphericalDelta.phi * factor)\n\n this.object.quaternion.premultiply(this.q)\n this.offset.applyQuaternion(this.q)\n }\n\n this.offset.multiplyScalar(this.scale)\n this.offset.clampLength(this.minDistance, this.maxDistance)\n } else {\n // rotate offset to \"y-axis-is-up\" space\n this.offset.applyQuaternion(this.quat)\n\n if (this.autoRotate && this.state === STATE.NONE) {\n this.rotateLeft(this.getAutoRotationAngle())\n }\n\n this.spherical.setFromVector3(this.offset)\n\n if (this.enableDamping) {\n this.spherical.theta += this.sphericalDelta.theta * this.dampingFactor\n this.spherical.phi += this.sphericalDelta.phi * this.dampingFactor\n } else {\n this.spherical.theta += this.sphericalDelta.theta\n this.spherical.phi += this.sphericalDelta.phi\n }\n\n // restrict theta to be between desired limits\n this.spherical.theta = Math.max(this.minAzimuthAngle, Math.min(this.maxAzimuthAngle, this.spherical.theta))\n\n // restrict phi to be between desired limits\n this.spherical.phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, this.spherical.phi))\n\n this.spherical.makeSafe()\n\n this.spherical.radius *= this.scale\n\n // restrict radius to be between desired limits\n this.spherical.radius = Math.max(this.minDistance, Math.min(this.maxDistance, this.spherical.radius))\n\n this.offset.setFromSpherical(this.spherical)\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n this.offset.applyQuaternion(this.quatInverse)\n }\n\n // move target to panned location\n\n if (this.enableDamping === true) {\n this.target.addScaledVector(this.panOffset, this.dampingFactor)\n } else {\n this.target.add(this.panOffset)\n }\n\n position.copy(this.target).add(this.offset)\n\n if (this.trackball === false) {\n this.object.lookAt(this.target)\n }\n\n if (this.enableDamping === true) {\n this.sphericalDelta.theta *= 1 - this.dampingFactor\n this.sphericalDelta.phi *= 1 - this.dampingFactor\n\n this.panOffset.multiplyScalar(1 - this.dampingFactor)\n } else {\n this.sphericalDelta.set(0, 0, 0)\n\n this.panOffset.set(0, 0, 0)\n }\n\n this.scale = 1\n\n // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if (\n this.zoomChanged ||\n this.lastPosition.distanceToSquared(this.object.position) > this.EPS ||\n 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS\n ) {\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n\n this.lastPosition.copy(this.object.position)\n this.lastQuaternion.copy(this.object.quaternion)\n this.zoomChanged = false\n\n return true\n }\n\n return false\n }\n\n private getAutoRotationAngle = (): number => ((2 * Math.PI) / 60 / 60) * this.autoRotateSpeed\n\n private getZoomScale = (): number => Math.pow(0.95, this.zoomSpeed)\n\n private rotateLeft = (angle: number): void => {\n this.sphericalDelta.theta -= angle\n }\n\n private rotateUp = (angle: number): void => {\n this.sphericalDelta.phi -= angle\n }\n\n private panLeft = (distance: number, objectMatrix: Matrix4): void => {\n this.v.setFromMatrixColumn(objectMatrix, 0) // get X column of objectMatrix\n this.v.multiplyScalar(-distance)\n\n this.panOffset.add(this.v)\n }\n\n private panUp = (distance: number, objectMatrix: Matrix4): void => {\n if (this.screenSpacePanning === true) {\n this.v.setFromMatrixColumn(objectMatrix, 1)\n } else {\n this.v.setFromMatrixColumn(objectMatrix, 0)\n this.v.crossVectors(this.object.up, this.v)\n }\n\n this.v.multiplyScalar(distance)\n\n this.panOffset.add(this.v)\n }\n\n // deltaX and deltaY are in pixels; right and down are positive\n private pan = (deltaX: number, deltaY: number): void => {\n const element = this.domElement\n\n if (this.object instanceof PerspectiveCamera) {\n // perspective\n const position = this.object.position\n this.offset.copy(position).sub(this.target)\n let targetDistance = this.offset.length()\n\n // half of the fov is center to top of screen\n targetDistance *= Math.tan(((this.object.fov / 2) * Math.PI) / 180.0)\n\n // we use only clientHeight here so aspect ratio does not distort speed\n this.panLeft((2 * deltaX * targetDistance) / element.clientHeight, this.object.matrix)\n this.panUp((2 * deltaY * targetDistance) / element.clientHeight, this.object.matrix)\n } else if (this.object.isOrthographicCamera) {\n // orthographic\n this.panLeft(\n (deltaX * (this.object.right - this.object.left)) / this.object.zoom / element.clientWidth,\n this.object.matrix,\n )\n this.panUp(\n (deltaY * (this.object.top - this.object.bottom)) / this.object.zoom / element.clientHeight,\n this.object.matrix,\n )\n } else {\n // camera neither orthographic nor perspective\n console.warn('WARNING: CameraControls.js encountered an unknown camera type - pan disabled.')\n this.enablePan = false\n }\n }\n\n private dollyIn = (dollyScale: number): void => {\n // TODO: replace w/.isPerspectiveCamera ?\n if (this.object instanceof PerspectiveCamera) {\n this.scale /= dollyScale\n // TODO: replace w/.isOrthographicCamera ?\n } else if (this.object instanceof OrthographicCamera) {\n this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom * dollyScale))\n this.object.updateProjectionMatrix()\n this.zoomChanged = true\n } else {\n console.warn('WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled.')\n this.enableZoom = false\n }\n }\n\n private dollyOut = (dollyScale: number): void => {\n // TODO: replace w/.isPerspectiveCamera ?\n if (this.object instanceof PerspectiveCamera) {\n this.scale *= dollyScale\n // TODO: replace w/.isOrthographicCamera ?\n } else if (this.object instanceof OrthographicCamera) {\n this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / dollyScale))\n this.object.updateProjectionMatrix()\n this.zoomChanged = true\n } else {\n console.warn('WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled.')\n this.enableZoom = false\n }\n }\n\n // event callbacks - update the object state\n\n private handleMouseDownRotate = (event: MouseEvent): void => {\n this.rotateStart.set(event.clientX, event.clientY)\n }\n\n // TODO: confirm if worthwhile to return the Vector2 instead of void\n private handleMouseDownDolly = (event: MouseEvent): void => {\n this.dollyStart.set(event.clientX, event.clientY)\n }\n\n private handleMouseDownPan = (event: MouseEvent): void => {\n this.panStart.set(event.clientX, event.clientY)\n }\n\n private handleMouseMoveRotate = (event: MouseEvent): void => {\n this.rotateEnd.set(event.clientX, event.clientY)\n\n this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed)\n\n const element = this.domElement\n\n this.rotateLeft((2 * Math.PI * this.rotateDelta.x) / element.clientHeight) // yes, height\n\n this.rotateUp((2 * Math.PI * this.rotateDelta.y) / element.clientHeight)\n\n this.rotateStart.copy(this.rotateEnd)\n\n this.update()\n }\n\n private handleMouseMoveDolly = (event: MouseEvent): void => {\n this.dollyEnd.set(event.clientX, event.clientY)\n\n this.dollyDelta.subVectors(this.dollyEnd, this.dollyStart)\n\n if (this.dollyDelta.y > 0) {\n this.dollyIn(this.getZoomScale())\n } else if (this.dollyDelta.y < 0) {\n this.dollyOut(this.getZoomScale())\n }\n\n this.dollyStart.copy(this.dollyEnd)\n\n this.update()\n }\n\n private handleMouseMovePan = (event: MouseEvent): void => {\n this.panEnd.set(event.clientX, event.clientY)\n\n this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed)\n\n this.pan(this.panDelta.x, this.panDelta.y)\n\n this.panStart.copy(this.panEnd)\n\n this.update()\n }\n\n private handleMouseUp(/*event*/): void {\n // no-op\n }\n\n private handleMouseWheel = (event: WheelEvent): void => {\n if (event.deltaY < 0) {\n this.dollyOut(this.getZoomScale())\n } else if (event.deltaY > 0) {\n this.dollyIn(this.getZoomScale())\n }\n\n this.update()\n }\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n let needsUpdate = false\n\n switch (event.code) {\n case this.keys.UP:\n this.pan(0, this.keyPanSpeed)\n needsUpdate = true\n break\n\n case this.keys.BOTTOM:\n this.pan(0, -this.keyPanSpeed)\n needsUpdate = true\n break\n\n case this.keys.LEFT:\n this.pan(this.keyPanSpeed, 0)\n needsUpdate = true\n break\n\n case this.keys.RIGHT:\n this.pan(-this.keyPanSpeed, 0)\n needsUpdate = true\n break\n }\n\n if (needsUpdate) {\n // prevent the browser from scrolling on cursor keys\n event.preventDefault()\n\n this.update()\n }\n }\n\n private handleTouchStartRotate = (event: TouchEvent): void => {\n if (event.touches.length == 1) {\n this.rotateStart.set(event.touches[0].pageX, event.touches[0].pageY)\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX)\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY)\n\n this.rotateStart.set(x, y)\n }\n }\n\n private handleTouchStartPan = (event: TouchEvent): void => {\n if (event.touches.length == 1) {\n this.panStart.set(event.touches[0].pageX, event.touches[0].pageY)\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX)\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY)\n\n this.panStart.set(x, y)\n }\n }\n\n private handleTouchStartDolly = (event: TouchEvent): void => {\n const dx = event.touches[0].pageX - event.touches[1].pageX\n const dy = event.touches[0].pageY - event.touches[1].pageY\n\n const distance = Math.sqrt(dx * dx + dy * dy)\n\n this.dollyStart.set(0, distance)\n }\n\n private handleTouchStartDollyPan = (event: TouchEvent): void => {\n if (this.enableZoom) this.handleTouchStartDolly(event)\n\n if (this.enablePan) this.handleTouchStartPan(event)\n }\n\n private handleTouchStartDollyRotate = (event: TouchEvent): void => {\n if (this.enableZoom) this.handleTouchStartDolly(event)\n\n if (this.enableRotate) this.handleTouchStartRotate(event)\n }\n\n private handleTouchMoveRotate = (event: TouchEvent): void => {\n if (event.touches.length == 1) {\n this.rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY)\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX)\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY)\n\n this.rotateEnd.set(x, y)\n }\n\n this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed)\n\n const element = this.domElement\n\n this.rotateLeft((2 * Math.PI * this.rotateDelta.x) / element.clientHeight) // yes, height\n\n this.rotateUp((2 * Math.PI * this.rotateDelta.y) / element.clientHeight)\n\n this.rotateStart.copy(this.rotateEnd)\n }\n\n private handleTouchMovePan = (event: TouchEvent): void => {\n if (event.touches.length == 1) {\n this.panEnd.set(event.touches[0].pageX, event.touches[0].pageY)\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX)\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY)\n\n this.panEnd.set(x, y)\n }\n\n this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed)\n\n this.pan(this.panDelta.x, this.panDelta.y)\n\n this.panStart.copy(this.panEnd)\n }\n\n private handleTouchMoveDolly = (event: TouchEvent): void => {\n const dx = event.touches[0].pageX - event.touches[1].pageX\n const dy = event.touches[0].pageY - event.touches[1].pageY\n\n const distance = Math.sqrt(dx * dx + dy * dy)\n\n this.dollyEnd.set(0, distance)\n\n this.dollyDelta.set(0, Math.pow(this.dollyEnd.y / this.dollyStart.y, this.zoomSpeed))\n\n this.dollyIn(this.dollyDelta.y)\n\n this.dollyStart.copy(this.dollyEnd)\n }\n\n private handleTouchMoveDollyPan = (event: TouchEvent): void => {\n if (this.enableZoom) this.handleTouchMoveDolly(event)\n\n if (this.enablePan) this.handleTouchMovePan(event)\n }\n\n private handleTouchMoveDollyRotate = (event: TouchEvent): void => {\n if (this.enableZoom) this.handleTouchMoveDolly(event)\n\n if (this.enableRotate) this.handleTouchMoveRotate(event)\n }\n\n private handleTouchEnd(/*event*/): void {\n // no-op\n }\n\n //\n // event handlers - FSM: listen for events and reset state\n //\n\n private onMouseDown = (event: MouseEvent): void => {\n if (this.enabled === false) return\n\n // Prevent the browser from scrolling.\n\n event.preventDefault()\n\n // Manually set the focus since calling preventDefault above\n // prevents the browser from setting it automatically.\n\n this.domElement.focus ? this.domElement.focus() : window.focus()\n\n let mouseAction\n\n switch (event.button) {\n case 0:\n mouseAction = this.mouseButtons.LEFT\n break\n\n case 1:\n mouseAction = this.mouseButtons.MIDDLE\n break\n\n case 2:\n mouseAction = this.mouseButtons.RIGHT\n break\n\n default:\n mouseAction = -1\n }\n\n switch (mouseAction) {\n case MOUSE.DOLLY:\n if (this.enableZoom === false) return\n\n this.handleMouseDownDolly(event)\n\n this.state = STATE.DOLLY\n\n break\n\n case MOUSE.ROTATE:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (this.enablePan === false) return\n\n this.handleMouseDownPan(event)\n\n this.state = STATE.PAN\n } else {\n if (this.enableRotate === false) return\n\n this.handleMouseDownRotate(event)\n\n this.state = STATE.ROTATE\n }\n\n break\n\n case MOUSE.PAN:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (this.enableRotate === false) return\n\n this.handleMouseDownRotate(event)\n\n this.state = STATE.ROTATE\n } else {\n if (this.enablePan === false) return\n\n this.handleMouseDownPan(event)\n\n this.state = STATE.PAN\n }\n\n break\n\n default:\n this.state = STATE.NONE\n }\n\n if (this.state !== STATE.NONE) {\n document.addEventListener('mousemove', this.onMouseMove, false)\n document.addEventListener('mouseup', this.onMouseUp, false)\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n }\n }\n\n private onMouseMove = (event: MouseEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (this.state) {\n case STATE.ROTATE:\n if (this.enableRotate === false) return\n\n this.handleMouseMoveRotate(event)\n\n break\n\n case STATE.DOLLY:\n if (this.enableZoom === false) return\n\n this.handleMouseMoveDolly(event)\n\n break\n\n case STATE.PAN:\n if (this.enablePan === false) return\n\n this.handleMouseMovePan(event)\n\n break\n }\n }\n\n private onMouseUp = (): void => {\n if (this.enabled === false) return\n\n // this.handleMouseUp()\n\n document.removeEventListener('mousemove', this.onMouseMove, false)\n document.removeEventListener('mouseup', this.onMouseUp, false)\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n\n this.state = STATE.NONE\n }\n\n private onMouseWheel = (event: WheelEvent): void => {\n if (\n this.enabled === false ||\n this.enableZoom === false ||\n (this.state !== STATE.NONE && this.state !== STATE.ROTATE)\n ) {\n return\n }\n\n event.preventDefault()\n\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n\n this.handleMouseWheel(event)\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n }\n\n private onKeyDown = (event: KeyboardEvent): void => {\n if (this.enabled === false || this.enableKeys === false || this.enablePan === false) return\n\n this.handleKeyDown(event)\n }\n\n private onTouchStart = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (event.touches.length) {\n case 1:\n switch (this.touches.ONE) {\n case TOUCH.ROTATE:\n if (this.enableRotate === false) return\n\n this.handleTouchStartRotate(event)\n\n this.state = STATE.TOUCH_ROTATE\n\n break\n\n case TOUCH.PAN:\n if (this.enablePan === false) return\n\n this.handleTouchStartPan(event)\n\n this.state = STATE.TOUCH_PAN\n\n break\n\n default:\n this.state = STATE.NONE\n }\n\n break\n\n case 2:\n switch (this.touches.TWO) {\n case TOUCH.DOLLY_PAN:\n if (this.enableZoom === false && this.enablePan === false) return\n\n this.handleTouchStartDollyPan(event)\n\n this.state = STATE.TOUCH_DOLLY_PAN\n\n break\n\n case TOUCH.DOLLY_ROTATE:\n if (this.enableZoom === false && this.enableRotate === false) return\n\n this.handleTouchStartDollyRotate(event)\n\n this.state = STATE.TOUCH_DOLLY_ROTATE\n\n break\n\n default:\n this.state = STATE.NONE\n }\n\n break\n\n default:\n this.state = STATE.NONE\n }\n\n if (this.state !== STATE.NONE) {\n // @ts-ignore\n this.dispatchEvent(this.startEvent)\n }\n }\n\n private onTouchMove = (event: TouchEvent): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n\n switch (this.state) {\n case STATE.TOUCH_ROTATE:\n if (this.enableRotate === false) return\n\n this.handleTouchMoveRotate(event)\n\n this.update()\n\n break\n\n case STATE.TOUCH_PAN:\n if (this.enablePan === false) return\n\n this.handleTouchMovePan(event)\n\n this.update()\n\n break\n\n case STATE.TOUCH_DOLLY_PAN:\n if (this.enableZoom === false && this.enablePan === false) return\n\n this.handleTouchMoveDollyPan(event)\n\n this.update()\n\n break\n\n case STATE.TOUCH_DOLLY_ROTATE:\n if (this.enableZoom === false && this.enableRotate === false) return\n\n this.handleTouchMoveDollyRotate(event)\n\n this.update()\n\n break\n\n default:\n this.state = STATE.NONE\n }\n }\n\n private onTouchEnd = (): void => {\n if (this.enabled === false) return\n\n // this.handleTouchEnd()\n\n // @ts-ignore\n this.dispatchEvent(this.endEvent)\n\n this.state = STATE.NONE\n }\n\n private onContextMenu = (event: Event): void => {\n if (this.enabled === false) return\n\n event.preventDefault()\n }\n}\n\n/**\n * OrbitControls maintains the \"up\" direction, camera.up (+Y by default).\n *\n * @event Orbit - left mouse / touch: one-finger move\n * @event Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n * @event Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n */\nclass OrbitControlsExp extends CameraControls {\n mouseButtons: {\n LEFT: MOUSE\n RIGHT: MOUSE\n }\n touches: {\n ONE: TOUCH\n TWO: TOUCH\n }\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement) {\n super(object, domElement)\n\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n RIGHT: MOUSE.PAN,\n }\n this.touches = {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN,\n }\n }\n}\n\n/**\n * MapControls maintains the \"up\" direction, camera.up (+Y by default)\n *\n * @event Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n * @event Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n * @event Pan - left mouse, or left right + ctrl/meta/shiftKey, or arrow keys / touch: one-finger move\n */\nclass MapControlsExp extends CameraControls {\n mouseButtons: {\n LEFT: MOUSE\n RIGHT: MOUSE\n }\n touches: {\n ONE: TOUCH\n TWO: TOUCH\n }\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement) {\n super(object, domElement)\n\n this.mouseButtons = {\n LEFT: MOUSE.PAN,\n RIGHT: MOUSE.ROTATE,\n }\n this.touches = {\n ONE: TOUCH.PAN,\n TWO: TOUCH.DOLLY_ROTATE,\n }\n }\n}\n\n/**\n * TrackballControls allows the camera to rotate over the polls and does not maintain camera.up\n *\n * @event Orbit - left mouse / touch: one-finger move\n * @event Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n * @event Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n */\nclass TrackballControlsExp extends CameraControls {\n trackball: boolean\n screenSpacePanning: boolean\n autoRotate: boolean\n mouseButtons: {\n LEFT: MOUSE\n RIGHT: MOUSE\n }\n touches: {\n ONE: TOUCH\n TWO: TOUCH\n }\n\n constructor(object: PerspectiveCamera | OrthographicCamera, domElement: HTMLElement) {\n super(object, domElement)\n\n this.trackball = true\n this.screenSpacePanning = true\n this.autoRotate = false\n\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n RIGHT: MOUSE.PAN,\n }\n\n this.touches = {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN,\n }\n }\n}\n\nexport { CameraControls, OrbitControlsExp, MapControlsExp, TrackballControlsExp }\n"],"names":["EventDispatcher","Vector3","TOUCH","Spherical","Vector2","Quaternion","PerspectiveCamera","OrthographicCamera","MOUSE"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MOUSE, OrthographicCamera, PerspectiveCamera, Quaternion, Spherical, TOUCH, Vector3 } from 'three';
|
|
2
|
+
import { EventDispatcher } from '../EventDispatcher';
|
|
2
3
|
export type CHANGE_EVENT = {
|
|
3
4
|
type: 'change' | 'start' | 'end';
|
|
4
5
|
};
|
|
@@ -12,7 +13,7 @@ export declare const STATE: {
|
|
|
12
13
|
TOUCH_DOLLY_PAN: number;
|
|
13
14
|
TOUCH_DOLLY_ROTATE: number;
|
|
14
15
|
};
|
|
15
|
-
declare class CameraControls extends EventDispatcher {
|
|
16
|
+
declare class CameraControls extends EventDispatcher<Record<string, {}>> {
|
|
16
17
|
object: PerspectiveCamera | OrthographicCamera;
|
|
17
18
|
domElement: HTMLElement;
|
|
18
19
|
/** Set to false to disable this control */
|
|
@@ -4,7 +4,8 @@ var __publicField = (obj, key, value) => {
|
|
|
4
4
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
return value;
|
|
6
6
|
};
|
|
7
|
-
import {
|
|
7
|
+
import { Vector3, TOUCH, Spherical, Vector2, Quaternion, MOUSE, PerspectiveCamera, OrthographicCamera } from "three";
|
|
8
|
+
import { EventDispatcher } from "../EventDispatcher.js";
|
|
8
9
|
const STATE = {
|
|
9
10
|
NONE: -1,
|
|
10
11
|
ROTATE: 0,
|