three-stdlib 2.34.0 → 2.34.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. package/controls/ArcballControls.cjs +2 -1
  2. package/controls/ArcballControls.cjs.map +1 -1
  3. package/controls/ArcballControls.d.ts +4 -2
  4. package/controls/ArcballControls.js +2 -1
  5. package/controls/ArcballControls.js.map +1 -1
  6. package/controls/DeviceOrientationControls.cjs +2 -1
  7. package/controls/DeviceOrientationControls.cjs.map +1 -1
  8. package/controls/DeviceOrientationControls.d.ts +4 -2
  9. package/controls/DeviceOrientationControls.js +2 -1
  10. package/controls/DeviceOrientationControls.js.map +1 -1
  11. package/controls/DragControls.cjs +2 -1
  12. package/controls/DragControls.cjs.map +1 -1
  13. package/controls/DragControls.d.ts +35 -2
  14. package/controls/DragControls.js +2 -1
  15. package/controls/DragControls.js.map +1 -1
  16. package/controls/EventDispatcher.cjs +78 -0
  17. package/controls/EventDispatcher.cjs.map +1 -0
  18. package/controls/EventDispatcher.d.ts +41 -0
  19. package/controls/EventDispatcher.js +78 -0
  20. package/controls/EventDispatcher.js.map +1 -0
  21. package/controls/FirstPersonControls.cjs +2 -1
  22. package/controls/FirstPersonControls.cjs.map +1 -1
  23. package/controls/FirstPersonControls.d.ts +3 -2
  24. package/controls/FirstPersonControls.js +2 -1
  25. package/controls/FirstPersonControls.js.map +1 -1
  26. package/controls/FlyControls.cjs +2 -1
  27. package/controls/FlyControls.cjs.map +1 -1
  28. package/controls/FlyControls.d.ts +9 -2
  29. package/controls/FlyControls.js +2 -1
  30. package/controls/FlyControls.js.map +1 -1
  31. package/controls/OrbitControls.cjs +2 -1
  32. package/controls/OrbitControls.cjs.map +1 -1
  33. package/controls/OrbitControls.d.ts +4 -2
  34. package/controls/OrbitControls.js +2 -1
  35. package/controls/OrbitControls.js.map +1 -1
  36. package/controls/PointerLockControls.cjs +4 -5
  37. package/controls/PointerLockControls.cjs.map +1 -1
  38. package/controls/PointerLockControls.d.ts +17 -2
  39. package/controls/PointerLockControls.js +4 -5
  40. package/controls/PointerLockControls.js.map +1 -1
  41. package/controls/StandardControlsEventMap.d.ts +14 -0
  42. package/controls/TrackballControls.cjs +2 -1
  43. package/controls/TrackballControls.cjs.map +1 -1
  44. package/controls/TrackballControls.d.ts +4 -2
  45. package/controls/TrackballControls.js +2 -1
  46. package/controls/TrackballControls.js.map +1 -1
  47. package/controls/experimental/CameraControls.cjs +2 -1
  48. package/controls/experimental/CameraControls.cjs.map +1 -1
  49. package/controls/experimental/CameraControls.d.ts +3 -2
  50. package/controls/experimental/CameraControls.js +2 -1
  51. package/controls/experimental/CameraControls.js.map +1 -1
  52. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
- import { EventDispatcher, MOUSE, Vector3, PerspectiveCamera, OrthographicCamera } from 'three';
2
- declare class TrackballControls extends EventDispatcher {
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 { EventDispatcher, MOUSE, Vector3, Vector2, Quaternion } from "three";
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 THREE.EventDispatcher {
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 { EventDispatcher, MOUSE, OrthographicCamera, PerspectiveCamera, Quaternion, Spherical, TOUCH, Vector3 } from 'three';
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 { EventDispatcher, Vector3, TOUCH, Spherical, Vector2, Quaternion, MOUSE, PerspectiveCamera, OrthographicCamera } from "three";
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,