three-stdlib 2.28.11 → 2.28.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. package/controls/ArcballControls.cjs.map +1 -1
  2. package/controls/ArcballControls.js.map +1 -1
  3. package/controls/DeviceOrientationControls.cjs.map +1 -1
  4. package/controls/DeviceOrientationControls.js.map +1 -1
  5. package/controls/DragControls.cjs.map +1 -1
  6. package/controls/DragControls.js.map +1 -1
  7. package/controls/FlyControls.cjs +1 -1
  8. package/controls/FlyControls.cjs.map +1 -1
  9. package/controls/FlyControls.js +1 -1
  10. package/controls/FlyControls.js.map +1 -1
  11. package/controls/OrbitControls.cjs.map +1 -1
  12. package/controls/OrbitControls.js.map +1 -1
  13. package/controls/PointerLockControls.cjs.map +1 -1
  14. package/controls/PointerLockControls.js.map +1 -1
  15. package/controls/TrackballControls.cjs +0 -2
  16. package/controls/TrackballControls.cjs.map +1 -1
  17. package/controls/TrackballControls.js +0 -2
  18. package/controls/TrackballControls.js.map +1 -1
  19. package/controls/TransformControls.cjs +2 -2
  20. package/controls/TransformControls.cjs.map +1 -1
  21. package/controls/TransformControls.js +2 -2
  22. package/controls/TransformControls.js.map +1 -1
  23. package/controls/experimental/CameraControls.cjs.map +1 -1
  24. package/controls/experimental/CameraControls.js.map +1 -1
  25. package/loaders/FontLoader.cjs.map +1 -1
  26. package/loaders/FontLoader.js.map +1 -1
  27. package/loaders/HDRCubeTextureLoader.cjs +3 -1
  28. package/loaders/HDRCubeTextureLoader.cjs.map +1 -1
  29. package/loaders/HDRCubeTextureLoader.d.ts +1 -1
  30. package/loaders/HDRCubeTextureLoader.js +3 -1
  31. package/loaders/HDRCubeTextureLoader.js.map +1 -1
  32. package/modifiers/CurveModifier.cjs.map +1 -1
  33. package/modifiers/CurveModifier.js.map +1 -1
  34. package/modifiers/TessellateModifier.cjs.map +1 -1
  35. package/modifiers/TessellateModifier.js.map +1 -1
  36. package/package.json +1 -1
  37. package/postprocessing/BloomPass.cjs.map +1 -1
  38. package/postprocessing/BloomPass.d.ts +16 -3
  39. package/postprocessing/BloomPass.js.map +1 -1
  40. package/postprocessing/DotScreenPass.cjs.map +1 -1
  41. package/postprocessing/DotScreenPass.d.ts +3 -2
  42. package/postprocessing/DotScreenPass.js.map +1 -1
  43. package/postprocessing/FilmPass.cjs.map +1 -1
  44. package/postprocessing/FilmPass.d.ts +3 -2
  45. package/postprocessing/FilmPass.js.map +1 -1
  46. package/postprocessing/GlitchPass.cjs.map +1 -1
  47. package/postprocessing/GlitchPass.d.ts +3 -2
  48. package/postprocessing/GlitchPass.js.map +1 -1
  49. package/postprocessing/WaterPass.cjs +2 -2
  50. package/postprocessing/WaterPass.cjs.map +1 -1
  51. package/postprocessing/WaterPass.d.ts +7 -2
  52. package/postprocessing/WaterPass.js +3 -3
  53. package/postprocessing/WaterPass.js.map +1 -1
  54. package/webxr/OculusHandModel.cjs.map +1 -1
  55. package/webxr/OculusHandModel.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TransformControls.cjs","sources":["../../src/controls/TransformControls.ts"],"sourcesContent":["import {\n BoxGeometry,\n BufferGeometry,\n Color,\n CylinderGeometry,\n DoubleSide,\n Euler,\n Float32BufferAttribute,\n Line,\n LineBasicMaterial,\n Material,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n OctahedronGeometry,\n OrthographicCamera,\n PerspectiveCamera,\n PlaneGeometry,\n Quaternion,\n Raycaster,\n SphereGeometry,\n Intersection,\n TorusGeometry,\n Vector3,\n Camera,\n Vector2,\n} from 'three'\n\nexport interface TransformControlsPointerObject {\n x: number\n y: number\n button: number\n}\n\nclass TransformControls<TCamera extends Camera = Camera> extends Object3D {\n public readonly isTransformControls = true\n\n public visible = false\n\n private domElement: HTMLElement | undefined\n\n private raycaster = new Raycaster()\n\n private gizmo: TransformControlsGizmo\n private plane: TransformControlsPlane\n\n private tempVector = new Vector3()\n private tempVector2 = new Vector3()\n private tempQuaternion = new Quaternion()\n private unit = {\n X: new Vector3(1, 0, 0),\n Y: new Vector3(0, 1, 0),\n Z: new Vector3(0, 0, 1),\n }\n\n private pointStart = new Vector3()\n private pointEnd = new Vector3()\n private offset = new Vector3()\n private rotationAxis = new Vector3()\n private startNorm = new Vector3()\n private endNorm = new Vector3()\n private rotationAngle = 0\n\n private cameraPosition = new Vector3()\n private cameraQuaternion = new Quaternion()\n private cameraScale = new Vector3()\n\n private parentPosition = new Vector3()\n private parentQuaternion = new Quaternion()\n private parentQuaternionInv = new Quaternion()\n private parentScale = new Vector3()\n\n private worldPositionStart = new Vector3()\n private worldQuaternionStart = new Quaternion()\n private worldScaleStart = new Vector3()\n\n private worldPosition = new Vector3()\n private worldQuaternion = new Quaternion()\n private worldQuaternionInv = new Quaternion()\n private worldScale = new Vector3()\n\n private eye = new Vector3()\n\n private positionStart = new Vector3()\n private quaternionStart = new Quaternion()\n private scaleStart = new Vector3()\n\n private camera: TCamera\n private object: Object3D | undefined\n private enabled = true\n private axis: string | null = null\n private mode: 'translate' | 'rotate' | 'scale' = 'translate'\n private translationSnap: number | null = null\n private rotationSnap: number | null = null\n private scaleSnap: number | null = null\n private space = 'world'\n private size = 1\n private dragging = false\n private showX = true\n private showY = true\n private showZ = true\n\n // events\n private changeEvent = { type: 'change' }\n private mouseDownEvent = { type: 'mouseDown', mode: this.mode }\n private mouseUpEvent = { type: 'mouseUp', mode: this.mode }\n private objectChangeEvent = { type: 'objectChange' }\n\n constructor(camera: TCamera, domElement: HTMLElement | undefined) {\n super()\n\n this.domElement = domElement\n this.camera = camera\n\n this.gizmo = new TransformControlsGizmo()\n this.add(this.gizmo)\n\n this.plane = new TransformControlsPlane()\n this.add(this.plane)\n\n // Defined getter, setter and store for a property\n const defineProperty = <TValue>(propName: string, defaultValue: TValue): void => {\n let propValue = defaultValue\n\n Object.defineProperty(this, propName, {\n get: function () {\n return propValue !== undefined ? propValue : defaultValue\n },\n\n set: function (value) {\n if (propValue !== value) {\n propValue = value\n this.plane[propName] = value\n this.gizmo[propName] = value\n\n this.dispatchEvent({ type: propName + '-changed', value: value })\n this.dispatchEvent(this.changeEvent)\n }\n },\n })\n\n //@ts-ignore\n this[propName] = defaultValue\n // @ts-ignore\n this.plane[propName] = defaultValue\n // @ts-ignore\n this.gizmo[propName] = defaultValue\n }\n\n defineProperty('camera', this.camera)\n defineProperty('object', this.object)\n defineProperty('enabled', this.enabled)\n defineProperty('axis', this.axis)\n defineProperty('mode', this.mode)\n defineProperty('translationSnap', this.translationSnap)\n defineProperty('rotationSnap', this.rotationSnap)\n defineProperty('scaleSnap', this.scaleSnap)\n defineProperty('space', this.space)\n defineProperty('size', this.size)\n defineProperty('dragging', this.dragging)\n defineProperty('showX', this.showX)\n defineProperty('showY', this.showY)\n defineProperty('showZ', this.showZ)\n defineProperty('worldPosition', this.worldPosition)\n defineProperty('worldPositionStart', this.worldPositionStart)\n defineProperty('worldQuaternion', this.worldQuaternion)\n defineProperty('worldQuaternionStart', this.worldQuaternionStart)\n defineProperty('cameraPosition', this.cameraPosition)\n defineProperty('cameraQuaternion', this.cameraQuaternion)\n defineProperty('pointStart', this.pointStart)\n defineProperty('pointEnd', this.pointEnd)\n defineProperty('rotationAxis', this.rotationAxis)\n defineProperty('rotationAngle', this.rotationAngle)\n defineProperty('eye', this.eye)\n\n // connect events\n if (domElement !== undefined) this.connect(domElement)\n }\n\n private intersectObjectWithRay = (\n object: Object3D,\n raycaster: Raycaster,\n includeInvisible?: boolean,\n ): false | Intersection => {\n const allIntersections = raycaster.intersectObject(object, true)\n\n for (let i = 0; i < allIntersections.length; i++) {\n if (allIntersections[i].object.visible || includeInvisible) {\n return allIntersections[i]\n }\n }\n\n return false\n }\n\n // Set current object\n public attach = (object: Object3D): this => {\n this.object = object\n this.visible = true\n\n return this\n }\n\n // Detatch from object\n public detach = (): this => {\n this.object = undefined\n this.visible = false\n this.axis = null\n\n return this\n }\n\n // Reset\n public reset = (): this => {\n if (!this.enabled) return this\n\n if (this.dragging) {\n if (this.object !== undefined) {\n this.object.position.copy(this.positionStart)\n this.object.quaternion.copy(this.quaternionStart)\n this.object.scale.copy(this.scaleStart)\n this.dispatchEvent(this.changeEvent)\n this.dispatchEvent(this.objectChangeEvent)\n this.pointStart.copy(this.pointEnd)\n }\n }\n\n return this\n }\n\n public updateMatrixWorld = (): void => {\n if (this.object !== undefined) {\n this.object.updateMatrixWorld()\n\n if (this.object.parent === null) {\n console.error('TransformControls: The attached 3D object must be a part of the scene graph.')\n } else {\n this.object.parent.matrixWorld.decompose(this.parentPosition, this.parentQuaternion, this.parentScale)\n }\n\n this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this.worldScale)\n\n this.parentQuaternionInv.copy(this.parentQuaternion).invert()\n this.worldQuaternionInv.copy(this.worldQuaternion).invert()\n }\n\n this.camera.updateMatrixWorld()\n this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this.cameraScale)\n\n this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize()\n\n super.updateMatrixWorld()\n }\n\n private pointerHover = (pointer: TransformControlsPointerObject): void => {\n if (this.object === undefined || this.dragging === true) return\n\n this.raycaster.setFromCamera((pointer as unknown) as Vector2, this.camera)\n\n const intersect = this.intersectObjectWithRay(this.gizmo.picker[this.mode], this.raycaster)\n\n if (intersect) {\n this.axis = intersect.object.name\n } else {\n this.axis = null\n }\n }\n\n private pointerDown = (pointer: TransformControlsPointerObject): void => {\n if (this.object === undefined || this.dragging === true || pointer.button !== 0) return\n\n if (this.axis !== null) {\n this.raycaster.setFromCamera((pointer as unknown) as Vector2, this.camera)\n\n const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true)\n\n if (planeIntersect) {\n let space = this.space\n\n if (this.mode === 'scale') {\n space = 'local'\n } else if (this.axis === 'E' || this.axis === 'XYZE' || this.axis === 'XYZ') {\n space = 'world'\n }\n\n if (space === 'local' && this.mode === 'rotate') {\n const snap = this.rotationSnap\n\n if (this.axis === 'X' && snap) this.object.rotation.x = Math.round(this.object.rotation.x / snap) * snap\n if (this.axis === 'Y' && snap) this.object.rotation.y = Math.round(this.object.rotation.y / snap) * snap\n if (this.axis === 'Z' && snap) this.object.rotation.z = Math.round(this.object.rotation.z / snap) * snap\n }\n\n this.object.updateMatrixWorld()\n\n if (this.object.parent) {\n this.object.parent.updateMatrixWorld()\n }\n\n this.positionStart.copy(this.object.position)\n this.quaternionStart.copy(this.object.quaternion)\n this.scaleStart.copy(this.object.scale)\n\n this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this.worldScaleStart)\n\n this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart)\n }\n\n this.dragging = true\n this.mouseDownEvent.mode = this.mode\n this.dispatchEvent(this.mouseDownEvent)\n }\n }\n\n private pointerMove = (pointer: TransformControlsPointerObject): void => {\n const axis = this.axis\n const mode = this.mode\n const object = this.object\n let space = this.space\n\n if (mode === 'scale') {\n space = 'local'\n } else if (axis === 'E' || axis === 'XYZE' || axis === 'XYZ') {\n space = 'world'\n }\n\n if (object === undefined || axis === null || this.dragging === false || pointer.button !== -1) return\n\n this.raycaster.setFromCamera((pointer as unknown) as Vector2, this.camera)\n\n const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true)\n\n if (!planeIntersect) return\n\n this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart)\n\n if (mode === 'translate') {\n // Apply translate\n\n this.offset.copy(this.pointEnd).sub(this.pointStart)\n\n if (space === 'local' && axis !== 'XYZ') {\n this.offset.applyQuaternion(this.worldQuaternionInv)\n }\n\n if (axis.indexOf('X') === -1) this.offset.x = 0\n if (axis.indexOf('Y') === -1) this.offset.y = 0\n if (axis.indexOf('Z') === -1) this.offset.z = 0\n\n if (space === 'local' && axis !== 'XYZ') {\n this.offset.applyQuaternion(this.quaternionStart).divide(this.parentScale)\n } else {\n this.offset.applyQuaternion(this.parentQuaternionInv).divide(this.parentScale)\n }\n\n object.position.copy(this.offset).add(this.positionStart)\n\n // Apply translation snap\n\n if (this.translationSnap) {\n if (space === 'local') {\n object.position.applyQuaternion(this.tempQuaternion.copy(this.quaternionStart).invert())\n\n if (axis.search('X') !== -1) {\n object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap\n }\n\n if (axis.search('Y') !== -1) {\n object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap\n }\n\n if (axis.search('Z') !== -1) {\n object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap\n }\n\n object.position.applyQuaternion(this.quaternionStart)\n }\n\n if (space === 'world') {\n if (object.parent) {\n object.position.add(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld))\n }\n\n if (axis.search('X') !== -1) {\n object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap\n }\n\n if (axis.search('Y') !== -1) {\n object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap\n }\n\n if (axis.search('Z') !== -1) {\n object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap\n }\n\n if (object.parent) {\n object.position.sub(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld))\n }\n }\n }\n } else if (mode === 'scale') {\n if (axis.search('XYZ') !== -1) {\n let d = this.pointEnd.length() / this.pointStart.length()\n\n if (this.pointEnd.dot(this.pointStart) < 0) d *= -1\n\n this.tempVector2.set(d, d, d)\n } else {\n this.tempVector.copy(this.pointStart)\n this.tempVector2.copy(this.pointEnd)\n\n this.tempVector.applyQuaternion(this.worldQuaternionInv)\n this.tempVector2.applyQuaternion(this.worldQuaternionInv)\n\n this.tempVector2.divide(this.tempVector)\n\n if (axis.search('X') === -1) {\n this.tempVector2.x = 1\n }\n\n if (axis.search('Y') === -1) {\n this.tempVector2.y = 1\n }\n\n if (axis.search('Z') === -1) {\n this.tempVector2.z = 1\n }\n }\n\n // Apply scale\n\n object.scale.copy(this.scaleStart).multiply(this.tempVector2)\n\n if (this.scaleSnap && this.object) {\n if (axis.search('X') !== -1) {\n this.object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap\n }\n\n if (axis.search('Y') !== -1) {\n object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap\n }\n\n if (axis.search('Z') !== -1) {\n object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap\n }\n }\n } else if (mode === 'rotate') {\n this.offset.copy(this.pointEnd).sub(this.pointStart)\n\n const ROTATION_SPEED =\n 20 / this.worldPosition.distanceTo(this.tempVector.setFromMatrixPosition(this.camera.matrixWorld))\n\n if (axis === 'E') {\n this.rotationAxis.copy(this.eye)\n this.rotationAngle = this.pointEnd.angleTo(this.pointStart)\n\n this.startNorm.copy(this.pointStart).normalize()\n this.endNorm.copy(this.pointEnd).normalize()\n\n this.rotationAngle *= this.endNorm.cross(this.startNorm).dot(this.eye) < 0 ? 1 : -1\n } else if (axis === 'XYZE') {\n this.rotationAxis.copy(this.offset).cross(this.eye).normalize()\n this.rotationAngle = this.offset.dot(this.tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED\n } else if (axis === 'X' || axis === 'Y' || axis === 'Z') {\n this.rotationAxis.copy(this.unit[axis])\n\n this.tempVector.copy(this.unit[axis])\n\n if (space === 'local') {\n this.tempVector.applyQuaternion(this.worldQuaternion)\n }\n\n this.rotationAngle = this.offset.dot(this.tempVector.cross(this.eye).normalize()) * ROTATION_SPEED\n }\n\n // Apply rotation snap\n\n if (this.rotationSnap) {\n this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap\n }\n\n // Apply rotate\n if (space === 'local' && axis !== 'E' && axis !== 'XYZE') {\n object.quaternion.copy(this.quaternionStart)\n object.quaternion\n .multiply(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle))\n .normalize()\n } else {\n this.rotationAxis.applyQuaternion(this.parentQuaternionInv)\n object.quaternion.copy(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle))\n object.quaternion.multiply(this.quaternionStart).normalize()\n }\n }\n\n this.dispatchEvent(this.changeEvent)\n this.dispatchEvent(this.objectChangeEvent)\n }\n\n private pointerUp = (pointer: TransformControlsPointerObject): void => {\n if (pointer.button !== 0) return\n\n if (this.dragging && this.axis !== null) {\n this.mouseUpEvent.mode = this.mode\n this.dispatchEvent(this.mouseUpEvent)\n }\n\n this.dragging = false\n this.axis = null\n }\n\n private getPointer = (event: Event): TransformControlsPointerObject => {\n if (this.domElement && this.domElement.ownerDocument?.pointerLockElement) {\n return {\n x: 0,\n y: 0,\n button: (event as MouseEvent).button,\n }\n } else {\n const pointer = (event as TouchEvent).changedTouches\n ? (event as TouchEvent).changedTouches[0]\n : (event as MouseEvent)\n\n const rect = (this.domElement as HTMLElement)?.getBoundingClientRect()\n\n return {\n x: ((pointer.clientX - rect.left) / rect.width) * 2 - 1,\n y: (-(pointer.clientY - rect.top) / rect.height) * 2 + 1,\n button: (event as MouseEvent).button,\n }\n }\n }\n\n private onPointerHover = (event: Event): void => {\n if (!this.enabled) return\n\n switch ((event as PointerEvent).pointerType) {\n case 'mouse':\n case 'pen':\n this.pointerHover(this.getPointer(event))\n break\n }\n }\n\n private onPointerDown = (event: Event): void => {\n if (!this.enabled || !this.domElement) return\n\n this.domElement.style.touchAction = 'none' // disable touch scroll\n this.domElement.ownerDocument.addEventListener('pointermove', this.onPointerMove)\n this.pointerHover(this.getPointer(event))\n this.pointerDown(this.getPointer(event))\n }\n\n private onPointerMove = (event: Event): void => {\n if (!this.enabled) return\n\n this.pointerMove(this.getPointer(event))\n }\n\n private onPointerUp = (event: Event): void => {\n if (!this.enabled || !this.domElement) return\n\n this.domElement.style.touchAction! = ''\n this.domElement.ownerDocument.removeEventListener('pointermove', this.onPointerMove)\n\n this.pointerUp(this.getPointer(event))\n }\n\n public getMode = (): TransformControls['mode'] => this.mode\n\n public setMode = (mode: TransformControls['mode']): void => {\n this.mode = mode\n }\n\n public setTranslationSnap = (translationSnap: number): void => {\n this.translationSnap = translationSnap\n }\n\n public setRotationSnap = (rotationSnap: number): void => {\n this.rotationSnap = rotationSnap\n }\n\n public setScaleSnap = (scaleSnap: number): void => {\n this.scaleSnap = scaleSnap\n }\n\n public setSize = (size: number): void => {\n this.size = size\n }\n\n public setSpace = (space: string): void => {\n this.space = space\n }\n\n public update = (): void => {\n console.warn(\n 'THREE.TransformControls: update function has no more functionality and therefore has been deprecated.',\n )\n }\n\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\n this.domElement.addEventListener('pointerdown', this.onPointerDown)\n this.domElement.addEventListener('pointermove', this.onPointerHover)\n this.domElement.ownerDocument.addEventListener('pointerup', this.onPointerUp)\n }\n\n public dispose = (): void => {\n this.domElement?.removeEventListener('pointerdown', this.onPointerDown)\n this.domElement?.removeEventListener('pointermove', this.onPointerHover)\n this.domElement?.ownerDocument?.removeEventListener('pointermove', this.onPointerMove)\n this.domElement?.ownerDocument?.removeEventListener('pointerup', this.onPointerUp)\n\n this.traverse((child) => {\n const mesh = child as Mesh<BufferGeometry, Material>\n if (mesh.geometry) {\n mesh.geometry.dispose()\n }\n if (mesh.material) {\n mesh.material.dispose()\n }\n })\n }\n}\n\ntype TransformControlsGizmoPrivateGizmos = {\n ['translate']: Object3D\n ['scale']: Object3D\n ['rotate']: Object3D\n ['visible']: boolean\n}\n\nclass TransformControlsGizmo extends Object3D {\n private isTransformControlsGizmo = true\n public type = 'TransformControlsGizmo'\n\n private tempVector = new Vector3(0, 0, 0)\n private tempEuler = new Euler()\n private alignVector = new Vector3(0, 1, 0)\n private zeroVector = new Vector3(0, 0, 0)\n private lookAtMatrix = new Matrix4()\n private tempQuaternion = new Quaternion()\n private tempQuaternion2 = new Quaternion()\n private identityQuaternion = new Quaternion()\n\n private unitX = new Vector3(1, 0, 0)\n private unitY = new Vector3(0, 1, 0)\n private unitZ = new Vector3(0, 0, 1)\n\n private gizmo: TransformControlsGizmoPrivateGizmos\n public picker: TransformControlsGizmoPrivateGizmos\n private helper: TransformControlsGizmoPrivateGizmos\n\n // these are set from parent class TransformControls\n private rotationAxis = new Vector3()\n\n private cameraPosition = new Vector3()\n\n private worldPositionStart = new Vector3()\n private worldQuaternionStart = new Quaternion()\n\n private worldPosition = new Vector3()\n private worldQuaternion = new Quaternion()\n\n private eye = new Vector3()\n\n private camera: PerspectiveCamera | OrthographicCamera = null!\n private enabled = true\n private axis: string | null = null\n private mode: 'translate' | 'rotate' | 'scale' = 'translate'\n private space = 'world'\n private size = 1\n private dragging = false\n private showX = true\n private showY = true\n private showZ = true\n\n constructor() {\n super()\n\n const gizmoMaterial = new MeshBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n side: DoubleSide,\n fog: false,\n toneMapped: false,\n })\n\n const gizmoLineMaterial = new LineBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n linewidth: 1,\n fog: false,\n toneMapped: false,\n })\n\n // Make unique material for each axis/color\n\n const matInvisible = gizmoMaterial.clone()\n matInvisible.opacity = 0.15\n\n const matHelper = gizmoMaterial.clone()\n matHelper.opacity = 0.33\n\n const matRed = gizmoMaterial.clone() as MeshBasicMaterial\n matRed.color.set(0xff0000)\n\n const matGreen = gizmoMaterial.clone() as MeshBasicMaterial\n matGreen.color.set(0x00ff00)\n\n const matBlue = gizmoMaterial.clone() as MeshBasicMaterial\n matBlue.color.set(0x0000ff)\n\n const matWhiteTransparent = gizmoMaterial.clone() as MeshBasicMaterial\n matWhiteTransparent.opacity = 0.25\n\n const matYellowTransparent = matWhiteTransparent.clone() as MeshBasicMaterial\n matYellowTransparent.color.set(0xffff00)\n\n const matCyanTransparent = matWhiteTransparent.clone() as MeshBasicMaterial\n matCyanTransparent.color.set(0x00ffff)\n\n const matMagentaTransparent = matWhiteTransparent.clone() as MeshBasicMaterial\n matMagentaTransparent.color.set(0xff00ff)\n\n const matYellow = gizmoMaterial.clone() as MeshBasicMaterial\n matYellow.color.set(0xffff00)\n\n const matLineRed = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineRed.color.set(0xff0000)\n\n const matLineGreen = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineGreen.color.set(0x00ff00)\n\n const matLineBlue = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineBlue.color.set(0x0000ff)\n\n const matLineCyan = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineCyan.color.set(0x00ffff)\n\n const matLineMagenta = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineMagenta.color.set(0xff00ff)\n\n const matLineYellow = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineYellow.color.set(0xffff00)\n\n const matLineGray = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineGray.color.set(0x787878)\n\n const matLineYellowTransparent = matLineYellow.clone() as LineBasicMaterial\n matLineYellowTransparent.opacity = 0.25\n\n // reusable geometry\n\n const arrowGeometry = new CylinderGeometry(0, 0.05, 0.2, 12, 1, false)\n\n const scaleHandleGeometry = new BoxGeometry(0.125, 0.125, 0.125)\n\n const lineGeometry = new BufferGeometry()\n lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3))\n\n const CircleGeometry = (radius: number, arc: number): BufferGeometry => {\n const geometry = new BufferGeometry()\n const vertices = []\n\n for (let i = 0; i <= 64 * arc; ++i) {\n vertices.push(0, Math.cos((i / 32) * Math.PI) * radius, Math.sin((i / 32) * Math.PI) * radius)\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n // Special geometry for transform helper. If scaled with position vector it spans from [0,0,0] to position\n\n const TranslateHelperGeometry = (): BufferGeometry => {\n const geometry = new BufferGeometry()\n\n geometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3))\n\n return geometry\n }\n\n // Gizmo definitions - custom hierarchy definitions for setupGizmo() function\n\n const gizmoTranslate = {\n X: [\n [new Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, -Math.PI / 2], null, 'fwd'],\n [new Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, Math.PI / 2], null, 'bwd'],\n [new Line(lineGeometry, matLineRed)],\n ],\n Y: [\n [new Mesh(arrowGeometry, matGreen), [0, 1, 0], null, null, 'fwd'],\n [new Mesh(arrowGeometry, matGreen), [0, 1, 0], [Math.PI, 0, 0], null, 'bwd'],\n [new Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2]],\n ],\n Z: [\n [new Mesh(arrowGeometry, matBlue), [0, 0, 1], [Math.PI / 2, 0, 0], null, 'fwd'],\n [new Mesh(arrowGeometry, matBlue), [0, 0, 1], [-Math.PI / 2, 0, 0], null, 'bwd'],\n [new Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0]],\n ],\n XYZ: [[new Mesh(new OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0], [0, 0, 0]]],\n XY: [\n [new Mesh(new PlaneGeometry(0.295, 0.295), matYellowTransparent.clone()), [0.15, 0.15, 0]],\n [new Line(lineGeometry, matLineYellow), [0.18, 0.3, 0], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineYellow), [0.3, 0.18, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n ],\n YZ: [\n [new Mesh(new PlaneGeometry(0.295, 0.295), matCyanTransparent.clone()), [0, 0.15, 0.15], [0, Math.PI / 2, 0]],\n [new Line(lineGeometry, matLineCyan), [0, 0.18, 0.3], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n [new Line(lineGeometry, matLineCyan), [0, 0.3, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]],\n ],\n XZ: [\n [\n new Mesh(new PlaneGeometry(0.295, 0.295), matMagentaTransparent.clone()),\n [0.15, 0, 0.15],\n [-Math.PI / 2, 0, 0],\n ],\n [new Line(lineGeometry, matLineMagenta), [0.18, 0, 0.3], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineMagenta), [0.3, 0, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]],\n ],\n }\n\n const pickerTranslate = {\n X: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0.6, 0, 0], [0, 0, -Math.PI / 2]]],\n Y: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0.6, 0]]],\n Z: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0, 0.6], [Math.PI / 2, 0, 0]]],\n XYZ: [[new Mesh(new OctahedronGeometry(0.2, 0), matInvisible)]],\n XY: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0.2, 0]]],\n YZ: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0, 0.2, 0.2], [0, Math.PI / 2, 0]]],\n XZ: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0, 0.2], [-Math.PI / 2, 0, 0]]],\n }\n\n const helperTranslate = {\n START: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, 'helper']],\n END: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, 'helper']],\n DELTA: [[new Line(TranslateHelperGeometry(), matHelper), null, null, null, 'helper']],\n X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']],\n Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], 'helper']],\n Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], 'helper']],\n }\n\n const gizmoRotate = {\n X: [\n [new Line(CircleGeometry(1, 0.5), matLineRed)],\n [new Mesh(new OctahedronGeometry(0.04, 0), matRed), [0, 0, 0.99], null, [1, 3, 1]],\n ],\n Y: [\n [new Line(CircleGeometry(1, 0.5), matLineGreen), null, [0, 0, -Math.PI / 2]],\n [new Mesh(new OctahedronGeometry(0.04, 0), matGreen), [0, 0, 0.99], null, [3, 1, 1]],\n ],\n Z: [\n [new Line(CircleGeometry(1, 0.5), matLineBlue), null, [0, Math.PI / 2, 0]],\n [new Mesh(new OctahedronGeometry(0.04, 0), matBlue), [0.99, 0, 0], null, [1, 3, 1]],\n ],\n E: [\n [new Line(CircleGeometry(1.25, 1), matLineYellowTransparent), null, [0, Math.PI / 2, 0]],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [1.17, 0, 0],\n [0, 0, -Math.PI / 2],\n [1, 1, 0.001],\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [-1.17, 0, 0],\n [0, 0, Math.PI / 2],\n [1, 1, 0.001],\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [0, -1.17, 0],\n [Math.PI, 0, 0],\n [1, 1, 0.001],\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [0, 1.17, 0],\n [0, 0, 0],\n [1, 1, 0.001],\n ],\n ],\n XYZE: [[new Line(CircleGeometry(1, 1), matLineGray), null, [0, Math.PI / 2, 0]]],\n }\n\n const helperRotate = {\n AXIS: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']],\n }\n\n const pickerRotate = {\n X: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]]],\n Y: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]]],\n Z: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]]],\n E: [[new Mesh(new TorusGeometry(1.25, 0.1, 2, 24), matInvisible)]],\n XYZE: [[new Mesh(new SphereGeometry(0.7, 10, 8), matInvisible)]],\n }\n\n const gizmoScale = {\n X: [\n [new Mesh(scaleHandleGeometry, matRed), [0.8, 0, 0], [0, 0, -Math.PI / 2]],\n [new Line(lineGeometry, matLineRed), null, null, [0.8, 1, 1]],\n ],\n Y: [\n [new Mesh(scaleHandleGeometry, matGreen), [0, 0.8, 0]],\n [new Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2], [0.8, 1, 1]],\n ],\n Z: [\n [new Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.8], [Math.PI / 2, 0, 0]],\n [new Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0], [0.8, 1, 1]],\n ],\n XY: [\n [new Mesh(scaleHandleGeometry, matYellowTransparent), [0.85, 0.85, 0], null, [2, 2, 0.2]],\n [new Line(lineGeometry, matLineYellow), [0.855, 0.98, 0], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineYellow), [0.98, 0.855, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n ],\n YZ: [\n [new Mesh(scaleHandleGeometry, matCyanTransparent), [0, 0.85, 0.85], null, [0.2, 2, 2]],\n [new Line(lineGeometry, matLineCyan), [0, 0.855, 0.98], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n [new Line(lineGeometry, matLineCyan), [0, 0.98, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]],\n ],\n XZ: [\n [new Mesh(scaleHandleGeometry, matMagentaTransparent), [0.85, 0, 0.85], null, [2, 0.2, 2]],\n [new Line(lineGeometry, matLineMagenta), [0.855, 0, 0.98], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineMagenta), [0.98, 0, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]],\n ],\n XYZX: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [1.1, 0, 0]]],\n XYZY: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 1.1, 0]]],\n XYZZ: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 0, 1.1]]],\n }\n\n const pickerScale = {\n X: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0.5, 0, 0], [0, 0, -Math.PI / 2]]],\n Y: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0.5, 0]]],\n Z: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0, 0.5], [Math.PI / 2, 0, 0]]],\n XY: [[new Mesh(scaleHandleGeometry, matInvisible), [0.85, 0.85, 0], null, [3, 3, 0.2]]],\n YZ: [[new Mesh(scaleHandleGeometry, matInvisible), [0, 0.85, 0.85], null, [0.2, 3, 3]]],\n XZ: [[new Mesh(scaleHandleGeometry, matInvisible), [0.85, 0, 0.85], null, [3, 0.2, 3]]],\n XYZX: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [1.1, 0, 0]]],\n XYZY: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 1.1, 0]]],\n XYZZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 1.1]]],\n }\n\n const helperScale = {\n X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']],\n Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], 'helper']],\n Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], 'helper']],\n }\n\n // Creates an Object3D with gizmos described in custom hierarchy definition.\n // this is nearly impossible to Type so i'm leaving it\n const setupGizmo = (gizmoMap: any): Object3D => {\n const gizmo = new Object3D()\n\n for (let name in gizmoMap) {\n for (let i = gizmoMap[name].length; i--; ) {\n const object = gizmoMap[name][i][0].clone() as Mesh\n const position = gizmoMap[name][i][1]\n const rotation = gizmoMap[name][i][2]\n const scale = gizmoMap[name][i][3]\n const tag = gizmoMap[name][i][4]\n\n // name and tag properties are essential for picking and updating logic.\n object.name = name\n // @ts-ignore\n object.tag = tag\n\n if (position) {\n object.position.set(position[0], position[1], position[2])\n }\n\n if (rotation) {\n object.rotation.set(rotation[0], rotation[1], rotation[2])\n }\n\n if (scale) {\n object.scale.set(scale[0], scale[1], scale[2])\n }\n\n object.updateMatrix()\n\n const tempGeometry = object.geometry.clone()\n tempGeometry.applyMatrix4(object.matrix)\n object.geometry = tempGeometry\n object.renderOrder = Infinity\n\n object.position.set(0, 0, 0)\n object.rotation.set(0, 0, 0)\n object.scale.set(1, 1, 1)\n\n gizmo.add(object)\n }\n }\n\n return gizmo\n }\n\n this.gizmo = {} as TransformControlsGizmoPrivateGizmos\n this.picker = {} as TransformControlsGizmoPrivateGizmos\n this.helper = {} as TransformControlsGizmoPrivateGizmos\n\n this.add((this.gizmo['translate'] = setupGizmo(gizmoTranslate)))\n this.add((this.gizmo['rotate'] = setupGizmo(gizmoRotate)))\n this.add((this.gizmo['scale'] = setupGizmo(gizmoScale)))\n this.add((this.picker['translate'] = setupGizmo(pickerTranslate)))\n this.add((this.picker['rotate'] = setupGizmo(pickerRotate)))\n this.add((this.picker['scale'] = setupGizmo(pickerScale)))\n this.add((this.helper['translate'] = setupGizmo(helperTranslate)))\n this.add((this.helper['rotate'] = setupGizmo(helperRotate)))\n this.add((this.helper['scale'] = setupGizmo(helperScale)))\n\n // Pickers should be hidden always\n\n this.picker['translate'].visible = false\n this.picker['rotate'].visible = false\n this.picker['scale'].visible = false\n }\n\n // updateMatrixWorld will update transformations and appearance of individual handles\n public updateMatrixWorld = (): void => {\n let space = this.space\n\n if (this.mode === 'scale') {\n space = 'local' // scale always oriented to local rotation\n }\n\n const quaternion = space === 'local' ? this.worldQuaternion : this.identityQuaternion\n\n // Show only gizmos for current transform mode\n\n this.gizmo['translate'].visible = this.mode === 'translate'\n this.gizmo['rotate'].visible = this.mode === 'rotate'\n this.gizmo['scale'].visible = this.mode === 'scale'\n\n this.helper['translate'].visible = this.mode === 'translate'\n this.helper['rotate'].visible = this.mode === 'rotate'\n this.helper['scale'].visible = this.mode === 'scale'\n\n let handles: Array<Object3D & { tag?: string }> = []\n handles = handles.concat(this.picker[this.mode].children)\n handles = handles.concat(this.gizmo[this.mode].children)\n handles = handles.concat(this.helper[this.mode].children)\n\n for (let i = 0; i < handles.length; i++) {\n const handle = handles[i]\n\n // hide aligned to camera\n\n handle.visible = true\n handle.rotation.set(0, 0, 0)\n handle.position.copy(this.worldPosition)\n\n let factor\n\n if ((this.camera as OrthographicCamera).isOrthographicCamera) {\n factor =\n ((this.camera as OrthographicCamera).top - (this.camera as OrthographicCamera).bottom) /\n (this.camera as OrthographicCamera).zoom\n } else {\n factor =\n this.worldPosition.distanceTo(this.cameraPosition) *\n Math.min((1.9 * Math.tan((Math.PI * (this.camera as PerspectiveCamera).fov) / 360)) / this.camera.zoom, 7)\n }\n\n handle.scale.set(1, 1, 1).multiplyScalar((factor * this.size) / 7)\n\n // TODO: simplify helpers and consider decoupling from gizmo\n\n if (handle.tag === 'helper') {\n handle.visible = false\n\n if (handle.name === 'AXIS') {\n handle.position.copy(this.worldPositionStart)\n handle.visible = !!this.axis\n\n if (this.axis === 'X') {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, 0))\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion)\n\n if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false\n }\n }\n\n if (this.axis === 'Y') {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, Math.PI / 2))\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion)\n\n if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false\n }\n }\n\n if (this.axis === 'Z') {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0))\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion)\n\n if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false\n }\n }\n\n if (this.axis === 'XYZE') {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0))\n this.alignVector.copy(this.rotationAxis)\n handle.quaternion.setFromRotationMatrix(\n this.lookAtMatrix.lookAt(this.zeroVector, this.alignVector, this.unitY),\n )\n handle.quaternion.multiply(this.tempQuaternion)\n handle.visible = this.dragging\n }\n\n if (this.axis === 'E') {\n handle.visible = false\n }\n } else if (handle.name === 'START') {\n handle.position.copy(this.worldPositionStart)\n handle.visible = this.dragging\n } else if (handle.name === 'END') {\n handle.position.copy(this.worldPosition)\n handle.visible = this.dragging\n } else if (handle.name === 'DELTA') {\n handle.position.copy(this.worldPositionStart)\n handle.quaternion.copy(this.worldQuaternionStart)\n this.tempVector\n .set(1e-10, 1e-10, 1e-10)\n .add(this.worldPositionStart)\n .sub(this.worldPosition)\n .multiplyScalar(-1)\n this.tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert())\n handle.scale.copy(this.tempVector)\n handle.visible = this.dragging\n } else {\n handle.quaternion.copy(quaternion)\n\n if (this.dragging) {\n handle.position.copy(this.worldPositionStart)\n } else {\n handle.position.copy(this.worldPosition)\n }\n\n if (this.axis) {\n handle.visible = this.axis.search(handle.name) !== -1\n }\n }\n\n // If updating helper, skip rest of the loop\n continue\n }\n\n // Align handles to current local or world rotation\n\n handle.quaternion.copy(quaternion)\n\n if (this.mode === 'translate' || this.mode === 'scale') {\n // Hide translate and scale axis facing the camera\n\n const AXIS_HIDE_TRESHOLD = 0.99\n const PLANE_HIDE_TRESHOLD = 0.2\n const AXIS_FLIP_TRESHOLD = 0.0\n\n if (handle.name === 'X' || handle.name === 'XYZX') {\n if (\n Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'Y' || handle.name === 'XYZY') {\n if (\n Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'Z' || handle.name === 'XYZZ') {\n if (\n Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'XY') {\n if (\n Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'YZ') {\n if (\n Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'XZ') {\n if (\n Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n // Flip translate and scale axis ocluded behind another axis\n\n if (handle.name.search('X') !== -1) {\n if (this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === 'fwd') {\n handle.visible = false\n } else {\n handle.scale.x *= -1\n }\n } else if (handle.tag === 'bwd') {\n handle.visible = false\n }\n }\n\n if (handle.name.search('Y') !== -1) {\n if (this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === 'fwd') {\n handle.visible = false\n } else {\n handle.scale.y *= -1\n }\n } else if (handle.tag === 'bwd') {\n handle.visible = false\n }\n }\n\n if (handle.name.search('Z') !== -1) {\n if (this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === 'fwd') {\n handle.visible = false\n } else {\n handle.scale.z *= -1\n }\n } else if (handle.tag === 'bwd') {\n handle.visible = false\n }\n }\n } else if (this.mode === 'rotate') {\n // Align handles to current local or world rotation\n\n this.tempQuaternion2.copy(quaternion)\n this.alignVector.copy(this.eye).applyQuaternion(this.tempQuaternion.copy(quaternion).invert())\n\n if (handle.name.search('E') !== -1) {\n handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.eye, this.zeroVector, this.unitY))\n }\n\n if (handle.name === 'X') {\n this.tempQuaternion.setFromAxisAngle(this.unitX, Math.atan2(-this.alignVector.y, this.alignVector.z))\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion)\n handle.quaternion.copy(this.tempQuaternion)\n }\n\n if (handle.name === 'Y') {\n this.tempQuaternion.setFromAxisAngle(this.unitY, Math.atan2(this.alignVector.x, this.alignVector.z))\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion)\n handle.quaternion.copy(this.tempQuaternion)\n }\n\n if (handle.name === 'Z') {\n this.tempQuaternion.setFromAxisAngle(this.unitZ, Math.atan2(this.alignVector.y, this.alignVector.x))\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion)\n handle.quaternion.copy(this.tempQuaternion)\n }\n }\n\n // Hide disabled axes\n handle.visible = handle.visible && (handle.name.indexOf('X') === -1 || this.showX)\n handle.visible = handle.visible && (handle.name.indexOf('Y') === -1 || this.showY)\n handle.visible = handle.visible && (handle.name.indexOf('Z') === -1 || this.showZ)\n handle.visible = handle.visible && (handle.name.indexOf('E') === -1 || (this.showX && this.showY && this.showZ))\n\n // highlight selected axis\n\n //@ts-ignore\n handle.material.tempOpacity = handle.material.tempOpacity || handle.material.opacity\n //@ts-ignore\n handle.material.tempColor = handle.material.tempColor || handle.material.color.clone()\n //@ts-ignore\n handle.material.color.copy(handle.material.tempColor)\n //@ts-ignore\n handle.material.opacity = handle.material.tempOpacity\n\n if (!this.enabled) {\n //@ts-ignore\n handle.material.opacity *= 0.5\n //@ts-ignore\n handle.material.color.lerp(new Color(1, 1, 1), 0.5)\n } else if (this.axis) {\n if (handle.name === this.axis) {\n //@ts-ignore\n handle.material.opacity = 1.0\n //@ts-ignore\n handle.material.color.lerp(new Color(1, 1, 1), 0.5)\n } else if (\n this.axis.split('').some(function (a) {\n return handle.name === a\n })\n ) {\n //@ts-ignore\n handle.material.opacity = 1.0\n //@ts-ignore\n handle.material.color.lerp(new Color(1, 1, 1), 0.5)\n } else {\n //@ts-ignore\n handle.material.opacity *= 0.25\n //@ts-ignore\n handle.material.color.lerp(new Color(1, 1, 1), 0.5)\n }\n }\n }\n\n super.updateMatrixWorld()\n }\n}\n\nclass TransformControlsPlane extends Mesh<PlaneGeometry, MeshBasicMaterial> {\n private isTransformControlsPlane = true\n public type = 'TransformControlsPlane'\n\n constructor() {\n super(\n new PlaneGeometry(100000, 100000, 2, 2),\n new MeshBasicMaterial({\n visible: false,\n wireframe: true,\n side: DoubleSide,\n transparent: true,\n opacity: 0.1,\n toneMapped: false,\n }),\n )\n }\n\n private unitX = new Vector3(1, 0, 0)\n private unitY = new Vector3(0, 1, 0)\n private unitZ = new Vector3(0, 0, 1)\n\n private tempVector = new Vector3()\n private dirVector = new Vector3()\n private alignVector = new Vector3()\n private tempMatrix = new Matrix4()\n private identityQuaternion = new Quaternion()\n\n // these are set from parent class TransformControls\n private cameraQuaternion = new Quaternion()\n\n private worldPosition = new Vector3()\n private worldQuaternion = new Quaternion()\n\n private eye = new Vector3()\n\n private axis: string | null = null\n private mode: 'translate' | 'rotate' | 'scale' = 'translate'\n private space = 'world'\n\n public updateMatrixWorld = (): void => {\n let space = this.space\n\n this.position.copy(this.worldPosition)\n\n if (this.mode === 'scale') space = 'local' // scale always oriented to local rotation\n\n this.unitX.set(1, 0, 0).applyQuaternion(space === 'local' ? this.worldQuaternion : this.identityQuaternion)\n this.unitY.set(0, 1, 0).applyQuaternion(space === 'local' ? this.worldQuaternion : this.identityQuaternion)\n this.unitZ.set(0, 0, 1).applyQuaternion(space === 'local' ? this.worldQuaternion : this.identityQuaternion)\n\n // Align the plane for current transform mode, axis and space.\n\n this.alignVector.copy(this.unitY)\n\n switch (this.mode) {\n case 'translate':\n case 'scale':\n switch (this.axis) {\n case 'X':\n this.alignVector.copy(this.eye).cross(this.unitX)\n this.dirVector.copy(this.unitX).cross(this.alignVector)\n break\n case 'Y':\n this.alignVector.copy(this.eye).cross(this.unitY)\n this.dirVector.copy(this.unitY).cross(this.alignVector)\n break\n case 'Z':\n this.alignVector.copy(this.eye).cross(this.unitZ)\n this.dirVector.copy(this.unitZ).cross(this.alignVector)\n break\n case 'XY':\n this.dirVector.copy(this.unitZ)\n break\n case 'YZ':\n this.dirVector.copy(this.unitX)\n break\n case 'XZ':\n this.alignVector.copy(this.unitZ)\n this.dirVector.copy(this.unitY)\n break\n case 'XYZ':\n case 'E':\n this.dirVector.set(0, 0, 0)\n break\n }\n\n break\n case 'rotate':\n default:\n // special case for rotate\n this.dirVector.set(0, 0, 0)\n }\n\n if (this.dirVector.length() === 0) {\n // If in rotate mode, make the plane parallel to camera\n this.quaternion.copy(this.cameraQuaternion)\n } else {\n this.tempMatrix.lookAt(this.tempVector.set(0, 0, 0), this.dirVector, this.alignVector)\n\n this.quaternion.setFromRotationMatrix(this.tempMatrix)\n }\n\n super.updateMatrixWorld()\n }\n}\n\nexport { TransformControls, TransformControlsGizmo, TransformControlsPlane }\n"],"names":["Object3D","Raycaster","Vector3","Quaternion","Euler","Matrix4","Color","MeshBasicMaterial","DoubleSide","LineBasicMaterial","CylinderGeometry","BoxGeometry","BufferGeometry","Float32BufferAttribute","Mesh","Line","OctahedronGeometry","PlaneGeometry","TorusGeometry","SphereGeometry"],"mappings":"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"}
1
+ {"version":3,"file":"TransformControls.cjs","sources":["../../src/controls/TransformControls.ts"],"sourcesContent":["import {\n BoxGeometry,\n BufferGeometry,\n Color,\n CylinderGeometry,\n DoubleSide,\n Euler,\n Float32BufferAttribute,\n Line,\n LineBasicMaterial,\n Material,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n OctahedronGeometry,\n OrthographicCamera,\n PerspectiveCamera,\n PlaneGeometry,\n Quaternion,\n Raycaster,\n SphereGeometry,\n Intersection,\n TorusGeometry,\n Vector3,\n Camera,\n Vector2,\n} from 'three'\n\nexport interface TransformControlsPointerObject {\n x: number\n y: number\n button: number\n}\n\nclass TransformControls<TCamera extends Camera = Camera> extends Object3D {\n public readonly isTransformControls = true\n\n public visible = false\n\n private domElement: HTMLElement | undefined\n\n private raycaster = new Raycaster()\n\n private gizmo: TransformControlsGizmo\n private plane: TransformControlsPlane\n\n private tempVector = new Vector3()\n private tempVector2 = new Vector3()\n private tempQuaternion = new Quaternion()\n private unit = {\n X: new Vector3(1, 0, 0),\n Y: new Vector3(0, 1, 0),\n Z: new Vector3(0, 0, 1),\n }\n\n private pointStart = new Vector3()\n private pointEnd = new Vector3()\n private offset = new Vector3()\n private rotationAxis = new Vector3()\n private startNorm = new Vector3()\n private endNorm = new Vector3()\n private rotationAngle = 0\n\n private cameraPosition = new Vector3()\n private cameraQuaternion = new Quaternion()\n private cameraScale = new Vector3()\n\n private parentPosition = new Vector3()\n private parentQuaternion = new Quaternion()\n private parentQuaternionInv = new Quaternion()\n private parentScale = new Vector3()\n\n private worldPositionStart = new Vector3()\n private worldQuaternionStart = new Quaternion()\n private worldScaleStart = new Vector3()\n\n private worldPosition = new Vector3()\n private worldQuaternion = new Quaternion()\n private worldQuaternionInv = new Quaternion()\n private worldScale = new Vector3()\n\n private eye = new Vector3()\n\n private positionStart = new Vector3()\n private quaternionStart = new Quaternion()\n private scaleStart = new Vector3()\n\n private camera: TCamera\n private object: Object3D | undefined\n private enabled = true\n private axis: string | null = null\n private mode: 'translate' | 'rotate' | 'scale' = 'translate'\n private translationSnap: number | null = null\n private rotationSnap: number | null = null\n private scaleSnap: number | null = null\n private space = 'world'\n private size = 1\n private dragging = false\n private showX = true\n private showY = true\n private showZ = true\n\n // events\n private changeEvent = { type: 'change' }\n private mouseDownEvent = { type: 'mouseDown', mode: this.mode }\n private mouseUpEvent = { type: 'mouseUp', mode: this.mode }\n private objectChangeEvent = { type: 'objectChange' }\n\n constructor(camera: TCamera, domElement: HTMLElement | undefined) {\n super()\n\n this.domElement = domElement\n this.camera = camera\n\n this.gizmo = new TransformControlsGizmo()\n this.add(this.gizmo)\n\n this.plane = new TransformControlsPlane()\n this.add(this.plane)\n\n // Defined getter, setter and store for a property\n const defineProperty = <TValue>(propName: string, defaultValue: TValue): void => {\n let propValue = defaultValue\n\n Object.defineProperty(this, propName, {\n get: function () {\n return propValue !== undefined ? propValue : defaultValue\n },\n\n set: function (value) {\n if (propValue !== value) {\n propValue = value\n this.plane[propName] = value\n this.gizmo[propName] = value\n\n this.dispatchEvent({ type: propName + '-changed', value: value })\n this.dispatchEvent(this.changeEvent)\n }\n },\n })\n\n //@ts-ignore\n this[propName] = defaultValue\n // @ts-ignore\n this.plane[propName] = defaultValue\n // @ts-ignore\n this.gizmo[propName] = defaultValue\n }\n\n defineProperty('camera', this.camera)\n defineProperty('object', this.object)\n defineProperty('enabled', this.enabled)\n defineProperty('axis', this.axis)\n defineProperty('mode', this.mode)\n defineProperty('translationSnap', this.translationSnap)\n defineProperty('rotationSnap', this.rotationSnap)\n defineProperty('scaleSnap', this.scaleSnap)\n defineProperty('space', this.space)\n defineProperty('size', this.size)\n defineProperty('dragging', this.dragging)\n defineProperty('showX', this.showX)\n defineProperty('showY', this.showY)\n defineProperty('showZ', this.showZ)\n defineProperty('worldPosition', this.worldPosition)\n defineProperty('worldPositionStart', this.worldPositionStart)\n defineProperty('worldQuaternion', this.worldQuaternion)\n defineProperty('worldQuaternionStart', this.worldQuaternionStart)\n defineProperty('cameraPosition', this.cameraPosition)\n defineProperty('cameraQuaternion', this.cameraQuaternion)\n defineProperty('pointStart', this.pointStart)\n defineProperty('pointEnd', this.pointEnd)\n defineProperty('rotationAxis', this.rotationAxis)\n defineProperty('rotationAngle', this.rotationAngle)\n defineProperty('eye', this.eye)\n\n // connect events\n if (domElement !== undefined) this.connect(domElement)\n }\n\n private intersectObjectWithRay = (\n object: Object3D,\n raycaster: Raycaster,\n includeInvisible?: boolean,\n ): false | Intersection => {\n const allIntersections = raycaster.intersectObject(object, true)\n\n for (let i = 0; i < allIntersections.length; i++) {\n if (allIntersections[i].object.visible || includeInvisible) {\n return allIntersections[i]\n }\n }\n\n return false\n }\n\n // Set current object\n public attach = (object: Object3D): this => {\n this.object = object\n this.visible = true\n\n return this\n }\n\n // Detatch from object\n public detach = (): this => {\n this.object = undefined\n this.visible = false\n this.axis = null\n\n return this\n }\n\n // Reset\n public reset = (): this => {\n if (!this.enabled) return this\n\n if (this.dragging) {\n if (this.object !== undefined) {\n this.object.position.copy(this.positionStart)\n this.object.quaternion.copy(this.quaternionStart)\n this.object.scale.copy(this.scaleStart)\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n // @ts-ignore\n this.dispatchEvent(this.objectChangeEvent)\n this.pointStart.copy(this.pointEnd)\n }\n }\n\n return this\n }\n\n public updateMatrixWorld = (): void => {\n if (this.object !== undefined) {\n this.object.updateMatrixWorld()\n\n if (this.object.parent === null) {\n console.error('TransformControls: The attached 3D object must be a part of the scene graph.')\n } else {\n this.object.parent.matrixWorld.decompose(this.parentPosition, this.parentQuaternion, this.parentScale)\n }\n\n this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this.worldScale)\n\n this.parentQuaternionInv.copy(this.parentQuaternion).invert()\n this.worldQuaternionInv.copy(this.worldQuaternion).invert()\n }\n\n this.camera.updateMatrixWorld()\n this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this.cameraScale)\n\n this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize()\n\n super.updateMatrixWorld()\n }\n\n private pointerHover = (pointer: TransformControlsPointerObject): void => {\n if (this.object === undefined || this.dragging === true) return\n\n this.raycaster.setFromCamera((pointer as unknown) as Vector2, this.camera)\n\n const intersect = this.intersectObjectWithRay(this.gizmo.picker[this.mode], this.raycaster)\n\n if (intersect) {\n this.axis = intersect.object.name\n } else {\n this.axis = null\n }\n }\n\n private pointerDown = (pointer: TransformControlsPointerObject): void => {\n if (this.object === undefined || this.dragging === true || pointer.button !== 0) return\n\n if (this.axis !== null) {\n this.raycaster.setFromCamera((pointer as unknown) as Vector2, this.camera)\n\n const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true)\n\n if (planeIntersect) {\n let space = this.space\n\n if (this.mode === 'scale') {\n space = 'local'\n } else if (this.axis === 'E' || this.axis === 'XYZE' || this.axis === 'XYZ') {\n space = 'world'\n }\n\n if (space === 'local' && this.mode === 'rotate') {\n const snap = this.rotationSnap\n\n if (this.axis === 'X' && snap) this.object.rotation.x = Math.round(this.object.rotation.x / snap) * snap\n if (this.axis === 'Y' && snap) this.object.rotation.y = Math.round(this.object.rotation.y / snap) * snap\n if (this.axis === 'Z' && snap) this.object.rotation.z = Math.round(this.object.rotation.z / snap) * snap\n }\n\n this.object.updateMatrixWorld()\n\n if (this.object.parent) {\n this.object.parent.updateMatrixWorld()\n }\n\n this.positionStart.copy(this.object.position)\n this.quaternionStart.copy(this.object.quaternion)\n this.scaleStart.copy(this.object.scale)\n\n this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this.worldScaleStart)\n\n this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart)\n }\n\n this.dragging = true\n this.mouseDownEvent.mode = this.mode\n // @ts-ignore\n this.dispatchEvent(this.mouseDownEvent)\n }\n }\n\n private pointerMove = (pointer: TransformControlsPointerObject): void => {\n const axis = this.axis\n const mode = this.mode\n const object = this.object\n let space = this.space\n\n if (mode === 'scale') {\n space = 'local'\n } else if (axis === 'E' || axis === 'XYZE' || axis === 'XYZ') {\n space = 'world'\n }\n\n if (object === undefined || axis === null || this.dragging === false || pointer.button !== -1) return\n\n this.raycaster.setFromCamera((pointer as unknown) as Vector2, this.camera)\n\n const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true)\n\n if (!planeIntersect) return\n\n this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart)\n\n if (mode === 'translate') {\n // Apply translate\n\n this.offset.copy(this.pointEnd).sub(this.pointStart)\n\n if (space === 'local' && axis !== 'XYZ') {\n this.offset.applyQuaternion(this.worldQuaternionInv)\n }\n\n if (axis.indexOf('X') === -1) this.offset.x = 0\n if (axis.indexOf('Y') === -1) this.offset.y = 0\n if (axis.indexOf('Z') === -1) this.offset.z = 0\n\n if (space === 'local' && axis !== 'XYZ') {\n this.offset.applyQuaternion(this.quaternionStart).divide(this.parentScale)\n } else {\n this.offset.applyQuaternion(this.parentQuaternionInv).divide(this.parentScale)\n }\n\n object.position.copy(this.offset).add(this.positionStart)\n\n // Apply translation snap\n\n if (this.translationSnap) {\n if (space === 'local') {\n object.position.applyQuaternion(this.tempQuaternion.copy(this.quaternionStart).invert())\n\n if (axis.search('X') !== -1) {\n object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap\n }\n\n if (axis.search('Y') !== -1) {\n object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap\n }\n\n if (axis.search('Z') !== -1) {\n object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap\n }\n\n object.position.applyQuaternion(this.quaternionStart)\n }\n\n if (space === 'world') {\n if (object.parent) {\n object.position.add(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld))\n }\n\n if (axis.search('X') !== -1) {\n object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap\n }\n\n if (axis.search('Y') !== -1) {\n object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap\n }\n\n if (axis.search('Z') !== -1) {\n object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap\n }\n\n if (object.parent) {\n object.position.sub(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld))\n }\n }\n }\n } else if (mode === 'scale') {\n if (axis.search('XYZ') !== -1) {\n let d = this.pointEnd.length() / this.pointStart.length()\n\n if (this.pointEnd.dot(this.pointStart) < 0) d *= -1\n\n this.tempVector2.set(d, d, d)\n } else {\n this.tempVector.copy(this.pointStart)\n this.tempVector2.copy(this.pointEnd)\n\n this.tempVector.applyQuaternion(this.worldQuaternionInv)\n this.tempVector2.applyQuaternion(this.worldQuaternionInv)\n\n this.tempVector2.divide(this.tempVector)\n\n if (axis.search('X') === -1) {\n this.tempVector2.x = 1\n }\n\n if (axis.search('Y') === -1) {\n this.tempVector2.y = 1\n }\n\n if (axis.search('Z') === -1) {\n this.tempVector2.z = 1\n }\n }\n\n // Apply scale\n\n object.scale.copy(this.scaleStart).multiply(this.tempVector2)\n\n if (this.scaleSnap && this.object) {\n if (axis.search('X') !== -1) {\n this.object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap\n }\n\n if (axis.search('Y') !== -1) {\n object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap\n }\n\n if (axis.search('Z') !== -1) {\n object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap\n }\n }\n } else if (mode === 'rotate') {\n this.offset.copy(this.pointEnd).sub(this.pointStart)\n\n const ROTATION_SPEED =\n 20 / this.worldPosition.distanceTo(this.tempVector.setFromMatrixPosition(this.camera.matrixWorld))\n\n if (axis === 'E') {\n this.rotationAxis.copy(this.eye)\n this.rotationAngle = this.pointEnd.angleTo(this.pointStart)\n\n this.startNorm.copy(this.pointStart).normalize()\n this.endNorm.copy(this.pointEnd).normalize()\n\n this.rotationAngle *= this.endNorm.cross(this.startNorm).dot(this.eye) < 0 ? 1 : -1\n } else if (axis === 'XYZE') {\n this.rotationAxis.copy(this.offset).cross(this.eye).normalize()\n this.rotationAngle = this.offset.dot(this.tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED\n } else if (axis === 'X' || axis === 'Y' || axis === 'Z') {\n this.rotationAxis.copy(this.unit[axis])\n\n this.tempVector.copy(this.unit[axis])\n\n if (space === 'local') {\n this.tempVector.applyQuaternion(this.worldQuaternion)\n }\n\n this.rotationAngle = this.offset.dot(this.tempVector.cross(this.eye).normalize()) * ROTATION_SPEED\n }\n\n // Apply rotation snap\n\n if (this.rotationSnap) {\n this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap\n }\n\n // Apply rotate\n if (space === 'local' && axis !== 'E' && axis !== 'XYZE') {\n object.quaternion.copy(this.quaternionStart)\n object.quaternion\n .multiply(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle))\n .normalize()\n } else {\n this.rotationAxis.applyQuaternion(this.parentQuaternionInv)\n object.quaternion.copy(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle))\n object.quaternion.multiply(this.quaternionStart).normalize()\n }\n }\n\n // @ts-ignore\n this.dispatchEvent(this.changeEvent)\n // @ts-ignore\n this.dispatchEvent(this.objectChangeEvent)\n }\n\n private pointerUp = (pointer: TransformControlsPointerObject): void => {\n if (pointer.button !== 0) return\n\n if (this.dragging && this.axis !== null) {\n this.mouseUpEvent.mode = this.mode\n // @ts-ignore\n this.dispatchEvent(this.mouseUpEvent)\n }\n\n this.dragging = false\n this.axis = null\n }\n\n private getPointer = (event: Event): TransformControlsPointerObject => {\n if (this.domElement && this.domElement.ownerDocument?.pointerLockElement) {\n return {\n x: 0,\n y: 0,\n button: (event as MouseEvent).button,\n }\n } else {\n const pointer = (event as TouchEvent).changedTouches\n ? (event as TouchEvent).changedTouches[0]\n : (event as MouseEvent)\n\n const rect = this.domElement!.getBoundingClientRect()\n\n return {\n x: ((pointer.clientX - rect.left) / rect.width) * 2 - 1,\n y: (-(pointer.clientY - rect.top) / rect.height) * 2 + 1,\n button: (event as MouseEvent).button,\n }\n }\n }\n\n private onPointerHover = (event: Event): void => {\n if (!this.enabled) return\n\n switch ((event as PointerEvent).pointerType) {\n case 'mouse':\n case 'pen':\n this.pointerHover(this.getPointer(event))\n break\n }\n }\n\n private onPointerDown = (event: Event): void => {\n if (!this.enabled || !this.domElement) return\n\n this.domElement.style.touchAction = 'none' // disable touch scroll\n this.domElement.ownerDocument.addEventListener('pointermove', this.onPointerMove)\n this.pointerHover(this.getPointer(event))\n this.pointerDown(this.getPointer(event))\n }\n\n private onPointerMove = (event: Event): void => {\n if (!this.enabled) return\n\n this.pointerMove(this.getPointer(event))\n }\n\n private onPointerUp = (event: Event): void => {\n if (!this.enabled || !this.domElement) return\n\n this.domElement.style.touchAction! = ''\n this.domElement.ownerDocument.removeEventListener('pointermove', this.onPointerMove)\n\n this.pointerUp(this.getPointer(event))\n }\n\n public getMode = (): TransformControls['mode'] => this.mode\n\n public setMode = (mode: TransformControls['mode']): void => {\n this.mode = mode\n }\n\n public setTranslationSnap = (translationSnap: number): void => {\n this.translationSnap = translationSnap\n }\n\n public setRotationSnap = (rotationSnap: number): void => {\n this.rotationSnap = rotationSnap\n }\n\n public setScaleSnap = (scaleSnap: number): void => {\n this.scaleSnap = scaleSnap\n }\n\n public setSize = (size: number): void => {\n this.size = size\n }\n\n public setSpace = (space: string): void => {\n this.space = space\n }\n\n public update = (): void => {\n console.warn(\n 'THREE.TransformControls: update function has no more functionality and therefore has been deprecated.',\n )\n }\n\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\n this.domElement.addEventListener('pointerdown', this.onPointerDown)\n this.domElement.addEventListener('pointermove', this.onPointerHover)\n this.domElement.ownerDocument.addEventListener('pointerup', this.onPointerUp)\n }\n\n public dispose = (): void => {\n this.domElement?.removeEventListener('pointerdown', this.onPointerDown)\n this.domElement?.removeEventListener('pointermove', this.onPointerHover)\n this.domElement?.ownerDocument?.removeEventListener('pointermove', this.onPointerMove)\n this.domElement?.ownerDocument?.removeEventListener('pointerup', this.onPointerUp)\n\n this.traverse((child) => {\n const mesh = child as Mesh<BufferGeometry, Material>\n if (mesh.geometry) {\n mesh.geometry.dispose()\n }\n if (mesh.material) {\n mesh.material.dispose()\n }\n })\n }\n}\n\ntype TransformControlsGizmoPrivateGizmos = {\n ['translate']: Object3D\n ['scale']: Object3D\n ['rotate']: Object3D\n ['visible']: boolean\n}\n\nclass TransformControlsGizmo extends Object3D {\n private isTransformControlsGizmo = true\n public type = 'TransformControlsGizmo'\n\n private tempVector = new Vector3(0, 0, 0)\n private tempEuler = new Euler()\n private alignVector = new Vector3(0, 1, 0)\n private zeroVector = new Vector3(0, 0, 0)\n private lookAtMatrix = new Matrix4()\n private tempQuaternion = new Quaternion()\n private tempQuaternion2 = new Quaternion()\n private identityQuaternion = new Quaternion()\n\n private unitX = new Vector3(1, 0, 0)\n private unitY = new Vector3(0, 1, 0)\n private unitZ = new Vector3(0, 0, 1)\n\n private gizmo: TransformControlsGizmoPrivateGizmos\n public picker: TransformControlsGizmoPrivateGizmos\n private helper: TransformControlsGizmoPrivateGizmos\n\n // these are set from parent class TransformControls\n private rotationAxis = new Vector3()\n\n private cameraPosition = new Vector3()\n\n private worldPositionStart = new Vector3()\n private worldQuaternionStart = new Quaternion()\n\n private worldPosition = new Vector3()\n private worldQuaternion = new Quaternion()\n\n private eye = new Vector3()\n\n private camera: PerspectiveCamera | OrthographicCamera = null!\n private enabled = true\n private axis: string | null = null\n private mode: 'translate' | 'rotate' | 'scale' = 'translate'\n private space = 'world'\n private size = 1\n private dragging = false\n private showX = true\n private showY = true\n private showZ = true\n\n constructor() {\n super()\n\n const gizmoMaterial = new MeshBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n side: DoubleSide,\n fog: false,\n toneMapped: false,\n })\n\n const gizmoLineMaterial = new LineBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n linewidth: 1,\n fog: false,\n toneMapped: false,\n })\n\n // Make unique material for each axis/color\n\n const matInvisible = gizmoMaterial.clone()\n matInvisible.opacity = 0.15\n\n const matHelper = gizmoMaterial.clone()\n matHelper.opacity = 0.33\n\n const matRed = gizmoMaterial.clone() as MeshBasicMaterial\n matRed.color.set(0xff0000)\n\n const matGreen = gizmoMaterial.clone() as MeshBasicMaterial\n matGreen.color.set(0x00ff00)\n\n const matBlue = gizmoMaterial.clone() as MeshBasicMaterial\n matBlue.color.set(0x0000ff)\n\n const matWhiteTransparent = gizmoMaterial.clone() as MeshBasicMaterial\n matWhiteTransparent.opacity = 0.25\n\n const matYellowTransparent = matWhiteTransparent.clone() as MeshBasicMaterial\n matYellowTransparent.color.set(0xffff00)\n\n const matCyanTransparent = matWhiteTransparent.clone() as MeshBasicMaterial\n matCyanTransparent.color.set(0x00ffff)\n\n const matMagentaTransparent = matWhiteTransparent.clone() as MeshBasicMaterial\n matMagentaTransparent.color.set(0xff00ff)\n\n const matYellow = gizmoMaterial.clone() as MeshBasicMaterial\n matYellow.color.set(0xffff00)\n\n const matLineRed = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineRed.color.set(0xff0000)\n\n const matLineGreen = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineGreen.color.set(0x00ff00)\n\n const matLineBlue = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineBlue.color.set(0x0000ff)\n\n const matLineCyan = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineCyan.color.set(0x00ffff)\n\n const matLineMagenta = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineMagenta.color.set(0xff00ff)\n\n const matLineYellow = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineYellow.color.set(0xffff00)\n\n const matLineGray = gizmoLineMaterial.clone() as LineBasicMaterial\n matLineGray.color.set(0x787878)\n\n const matLineYellowTransparent = matLineYellow.clone() as LineBasicMaterial\n matLineYellowTransparent.opacity = 0.25\n\n // reusable geometry\n\n const arrowGeometry = new CylinderGeometry(0, 0.05, 0.2, 12, 1, false)\n\n const scaleHandleGeometry = new BoxGeometry(0.125, 0.125, 0.125)\n\n const lineGeometry = new BufferGeometry()\n lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3))\n\n const CircleGeometry = (radius: number, arc: number): BufferGeometry => {\n const geometry = new BufferGeometry()\n const vertices = []\n\n for (let i = 0; i <= 64 * arc; ++i) {\n vertices.push(0, Math.cos((i / 32) * Math.PI) * radius, Math.sin((i / 32) * Math.PI) * radius)\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3))\n\n return geometry\n }\n\n // Special geometry for transform helper. If scaled with position vector it spans from [0,0,0] to position\n\n const TranslateHelperGeometry = (): BufferGeometry => {\n const geometry = new BufferGeometry()\n\n geometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3))\n\n return geometry\n }\n\n // Gizmo definitions - custom hierarchy definitions for setupGizmo() function\n\n const gizmoTranslate = {\n X: [\n [new Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, -Math.PI / 2], null, 'fwd'],\n [new Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, Math.PI / 2], null, 'bwd'],\n [new Line(lineGeometry, matLineRed)],\n ],\n Y: [\n [new Mesh(arrowGeometry, matGreen), [0, 1, 0], null, null, 'fwd'],\n [new Mesh(arrowGeometry, matGreen), [0, 1, 0], [Math.PI, 0, 0], null, 'bwd'],\n [new Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2]],\n ],\n Z: [\n [new Mesh(arrowGeometry, matBlue), [0, 0, 1], [Math.PI / 2, 0, 0], null, 'fwd'],\n [new Mesh(arrowGeometry, matBlue), [0, 0, 1], [-Math.PI / 2, 0, 0], null, 'bwd'],\n [new Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0]],\n ],\n XYZ: [[new Mesh(new OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0], [0, 0, 0]]],\n XY: [\n [new Mesh(new PlaneGeometry(0.295, 0.295), matYellowTransparent.clone()), [0.15, 0.15, 0]],\n [new Line(lineGeometry, matLineYellow), [0.18, 0.3, 0], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineYellow), [0.3, 0.18, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n ],\n YZ: [\n [new Mesh(new PlaneGeometry(0.295, 0.295), matCyanTransparent.clone()), [0, 0.15, 0.15], [0, Math.PI / 2, 0]],\n [new Line(lineGeometry, matLineCyan), [0, 0.18, 0.3], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n [new Line(lineGeometry, matLineCyan), [0, 0.3, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]],\n ],\n XZ: [\n [\n new Mesh(new PlaneGeometry(0.295, 0.295), matMagentaTransparent.clone()),\n [0.15, 0, 0.15],\n [-Math.PI / 2, 0, 0],\n ],\n [new Line(lineGeometry, matLineMagenta), [0.18, 0, 0.3], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineMagenta), [0.3, 0, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]],\n ],\n }\n\n const pickerTranslate = {\n X: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0.6, 0, 0], [0, 0, -Math.PI / 2]]],\n Y: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0.6, 0]]],\n Z: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0, 0.6], [Math.PI / 2, 0, 0]]],\n XYZ: [[new Mesh(new OctahedronGeometry(0.2, 0), matInvisible)]],\n XY: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0.2, 0]]],\n YZ: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0, 0.2, 0.2], [0, Math.PI / 2, 0]]],\n XZ: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0, 0.2], [-Math.PI / 2, 0, 0]]],\n }\n\n const helperTranslate = {\n START: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, 'helper']],\n END: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, 'helper']],\n DELTA: [[new Line(TranslateHelperGeometry(), matHelper), null, null, null, 'helper']],\n X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']],\n Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], 'helper']],\n Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], 'helper']],\n }\n\n const gizmoRotate = {\n X: [\n [new Line(CircleGeometry(1, 0.5), matLineRed)],\n [new Mesh(new OctahedronGeometry(0.04, 0), matRed), [0, 0, 0.99], null, [1, 3, 1]],\n ],\n Y: [\n [new Line(CircleGeometry(1, 0.5), matLineGreen), null, [0, 0, -Math.PI / 2]],\n [new Mesh(new OctahedronGeometry(0.04, 0), matGreen), [0, 0, 0.99], null, [3, 1, 1]],\n ],\n Z: [\n [new Line(CircleGeometry(1, 0.5), matLineBlue), null, [0, Math.PI / 2, 0]],\n [new Mesh(new OctahedronGeometry(0.04, 0), matBlue), [0.99, 0, 0], null, [1, 3, 1]],\n ],\n E: [\n [new Line(CircleGeometry(1.25, 1), matLineYellowTransparent), null, [0, Math.PI / 2, 0]],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [1.17, 0, 0],\n [0, 0, -Math.PI / 2],\n [1, 1, 0.001],\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [-1.17, 0, 0],\n [0, 0, Math.PI / 2],\n [1, 1, 0.001],\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [0, -1.17, 0],\n [Math.PI, 0, 0],\n [1, 1, 0.001],\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [0, 1.17, 0],\n [0, 0, 0],\n [1, 1, 0.001],\n ],\n ],\n XYZE: [[new Line(CircleGeometry(1, 1), matLineGray), null, [0, Math.PI / 2, 0]]],\n }\n\n const helperRotate = {\n AXIS: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']],\n }\n\n const pickerRotate = {\n X: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]]],\n Y: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]]],\n Z: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]]],\n E: [[new Mesh(new TorusGeometry(1.25, 0.1, 2, 24), matInvisible)]],\n XYZE: [[new Mesh(new SphereGeometry(0.7, 10, 8), matInvisible)]],\n }\n\n const gizmoScale = {\n X: [\n [new Mesh(scaleHandleGeometry, matRed), [0.8, 0, 0], [0, 0, -Math.PI / 2]],\n [new Line(lineGeometry, matLineRed), null, null, [0.8, 1, 1]],\n ],\n Y: [\n [new Mesh(scaleHandleGeometry, matGreen), [0, 0.8, 0]],\n [new Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2], [0.8, 1, 1]],\n ],\n Z: [\n [new Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.8], [Math.PI / 2, 0, 0]],\n [new Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0], [0.8, 1, 1]],\n ],\n XY: [\n [new Mesh(scaleHandleGeometry, matYellowTransparent), [0.85, 0.85, 0], null, [2, 2, 0.2]],\n [new Line(lineGeometry, matLineYellow), [0.855, 0.98, 0], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineYellow), [0.98, 0.855, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n ],\n YZ: [\n [new Mesh(scaleHandleGeometry, matCyanTransparent), [0, 0.85, 0.85], null, [0.2, 2, 2]],\n [new Line(lineGeometry, matLineCyan), [0, 0.855, 0.98], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n [new Line(lineGeometry, matLineCyan), [0, 0.98, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]],\n ],\n XZ: [\n [new Mesh(scaleHandleGeometry, matMagentaTransparent), [0.85, 0, 0.85], null, [2, 0.2, 2]],\n [new Line(lineGeometry, matLineMagenta), [0.855, 0, 0.98], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineMagenta), [0.98, 0, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]],\n ],\n XYZX: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [1.1, 0, 0]]],\n XYZY: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 1.1, 0]]],\n XYZZ: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 0, 1.1]]],\n }\n\n const pickerScale = {\n X: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0.5, 0, 0], [0, 0, -Math.PI / 2]]],\n Y: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0.5, 0]]],\n Z: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0, 0.5], [Math.PI / 2, 0, 0]]],\n XY: [[new Mesh(scaleHandleGeometry, matInvisible), [0.85, 0.85, 0], null, [3, 3, 0.2]]],\n YZ: [[new Mesh(scaleHandleGeometry, matInvisible), [0, 0.85, 0.85], null, [0.2, 3, 3]]],\n XZ: [[new Mesh(scaleHandleGeometry, matInvisible), [0.85, 0, 0.85], null, [3, 0.2, 3]]],\n XYZX: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [1.1, 0, 0]]],\n XYZY: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 1.1, 0]]],\n XYZZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 1.1]]],\n }\n\n const helperScale = {\n X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], 'helper']],\n Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], 'helper']],\n Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], 'helper']],\n }\n\n // Creates an Object3D with gizmos described in custom hierarchy definition.\n // this is nearly impossible to Type so i'm leaving it\n const setupGizmo = (gizmoMap: any): Object3D => {\n const gizmo = new Object3D()\n\n for (let name in gizmoMap) {\n for (let i = gizmoMap[name].length; i--; ) {\n const object = gizmoMap[name][i][0].clone() as Mesh\n const position = gizmoMap[name][i][1]\n const rotation = gizmoMap[name][i][2]\n const scale = gizmoMap[name][i][3]\n const tag = gizmoMap[name][i][4]\n\n // name and tag properties are essential for picking and updating logic.\n object.name = name\n // @ts-ignore\n object.tag = tag\n\n if (position) {\n object.position.set(position[0], position[1], position[2])\n }\n\n if (rotation) {\n object.rotation.set(rotation[0], rotation[1], rotation[2])\n }\n\n if (scale) {\n object.scale.set(scale[0], scale[1], scale[2])\n }\n\n object.updateMatrix()\n\n const tempGeometry = object.geometry.clone()\n tempGeometry.applyMatrix4(object.matrix)\n object.geometry = tempGeometry\n object.renderOrder = Infinity\n\n object.position.set(0, 0, 0)\n object.rotation.set(0, 0, 0)\n object.scale.set(1, 1, 1)\n\n gizmo.add(object)\n }\n }\n\n return gizmo\n }\n\n this.gizmo = {} as TransformControlsGizmoPrivateGizmos\n this.picker = {} as TransformControlsGizmoPrivateGizmos\n this.helper = {} as TransformControlsGizmoPrivateGizmos\n\n this.add((this.gizmo['translate'] = setupGizmo(gizmoTranslate)))\n this.add((this.gizmo['rotate'] = setupGizmo(gizmoRotate)))\n this.add((this.gizmo['scale'] = setupGizmo(gizmoScale)))\n this.add((this.picker['translate'] = setupGizmo(pickerTranslate)))\n this.add((this.picker['rotate'] = setupGizmo(pickerRotate)))\n this.add((this.picker['scale'] = setupGizmo(pickerScale)))\n this.add((this.helper['translate'] = setupGizmo(helperTranslate)))\n this.add((this.helper['rotate'] = setupGizmo(helperRotate)))\n this.add((this.helper['scale'] = setupGizmo(helperScale)))\n\n // Pickers should be hidden always\n\n this.picker['translate'].visible = false\n this.picker['rotate'].visible = false\n this.picker['scale'].visible = false\n }\n\n // updateMatrixWorld will update transformations and appearance of individual handles\n public updateMatrixWorld = (): void => {\n let space = this.space\n\n if (this.mode === 'scale') {\n space = 'local' // scale always oriented to local rotation\n }\n\n const quaternion = space === 'local' ? this.worldQuaternion : this.identityQuaternion\n\n // Show only gizmos for current transform mode\n\n this.gizmo['translate'].visible = this.mode === 'translate'\n this.gizmo['rotate'].visible = this.mode === 'rotate'\n this.gizmo['scale'].visible = this.mode === 'scale'\n\n this.helper['translate'].visible = this.mode === 'translate'\n this.helper['rotate'].visible = this.mode === 'rotate'\n this.helper['scale'].visible = this.mode === 'scale'\n\n let handles: Array<Object3D & { tag?: string }> = []\n handles = handles.concat(this.picker[this.mode].children)\n handles = handles.concat(this.gizmo[this.mode].children)\n handles = handles.concat(this.helper[this.mode].children)\n\n for (let i = 0; i < handles.length; i++) {\n const handle = handles[i]\n\n // hide aligned to camera\n\n handle.visible = true\n handle.rotation.set(0, 0, 0)\n handle.position.copy(this.worldPosition)\n\n let factor\n\n if ((this.camera as OrthographicCamera).isOrthographicCamera) {\n factor =\n ((this.camera as OrthographicCamera).top - (this.camera as OrthographicCamera).bottom) /\n (this.camera as OrthographicCamera).zoom\n } else {\n factor =\n this.worldPosition.distanceTo(this.cameraPosition) *\n Math.min((1.9 * Math.tan((Math.PI * (this.camera as PerspectiveCamera).fov) / 360)) / this.camera.zoom, 7)\n }\n\n handle.scale.set(1, 1, 1).multiplyScalar((factor * this.size) / 7)\n\n // TODO: simplify helpers and consider decoupling from gizmo\n\n if (handle.tag === 'helper') {\n handle.visible = false\n\n if (handle.name === 'AXIS') {\n handle.position.copy(this.worldPositionStart)\n handle.visible = !!this.axis\n\n if (this.axis === 'X') {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, 0))\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion)\n\n if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false\n }\n }\n\n if (this.axis === 'Y') {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, Math.PI / 2))\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion)\n\n if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false\n }\n }\n\n if (this.axis === 'Z') {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0))\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion)\n\n if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false\n }\n }\n\n if (this.axis === 'XYZE') {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0))\n this.alignVector.copy(this.rotationAxis)\n handle.quaternion.setFromRotationMatrix(\n this.lookAtMatrix.lookAt(this.zeroVector, this.alignVector, this.unitY),\n )\n handle.quaternion.multiply(this.tempQuaternion)\n handle.visible = this.dragging\n }\n\n if (this.axis === 'E') {\n handle.visible = false\n }\n } else if (handle.name === 'START') {\n handle.position.copy(this.worldPositionStart)\n handle.visible = this.dragging\n } else if (handle.name === 'END') {\n handle.position.copy(this.worldPosition)\n handle.visible = this.dragging\n } else if (handle.name === 'DELTA') {\n handle.position.copy(this.worldPositionStart)\n handle.quaternion.copy(this.worldQuaternionStart)\n this.tempVector\n .set(1e-10, 1e-10, 1e-10)\n .add(this.worldPositionStart)\n .sub(this.worldPosition)\n .multiplyScalar(-1)\n this.tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert())\n handle.scale.copy(this.tempVector)\n handle.visible = this.dragging\n } else {\n handle.quaternion.copy(quaternion)\n\n if (this.dragging) {\n handle.position.copy(this.worldPositionStart)\n } else {\n handle.position.copy(this.worldPosition)\n }\n\n if (this.axis) {\n handle.visible = this.axis.search(handle.name) !== -1\n }\n }\n\n // If updating helper, skip rest of the loop\n continue\n }\n\n // Align handles to current local or world rotation\n\n handle.quaternion.copy(quaternion)\n\n if (this.mode === 'translate' || this.mode === 'scale') {\n // Hide translate and scale axis facing the camera\n\n const AXIS_HIDE_TRESHOLD = 0.99\n const PLANE_HIDE_TRESHOLD = 0.2\n const AXIS_FLIP_TRESHOLD = 0.0\n\n if (handle.name === 'X' || handle.name === 'XYZX') {\n if (\n Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'Y' || handle.name === 'XYZY') {\n if (\n Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'Z' || handle.name === 'XYZZ') {\n if (\n Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'XY') {\n if (\n Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'YZ') {\n if (\n Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n if (handle.name === 'XZ') {\n if (\n Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD\n ) {\n handle.scale.set(1e-10, 1e-10, 1e-10)\n handle.visible = false\n }\n }\n\n // Flip translate and scale axis ocluded behind another axis\n\n if (handle.name.search('X') !== -1) {\n if (this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === 'fwd') {\n handle.visible = false\n } else {\n handle.scale.x *= -1\n }\n } else if (handle.tag === 'bwd') {\n handle.visible = false\n }\n }\n\n if (handle.name.search('Y') !== -1) {\n if (this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === 'fwd') {\n handle.visible = false\n } else {\n handle.scale.y *= -1\n }\n } else if (handle.tag === 'bwd') {\n handle.visible = false\n }\n }\n\n if (handle.name.search('Z') !== -1) {\n if (this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === 'fwd') {\n handle.visible = false\n } else {\n handle.scale.z *= -1\n }\n } else if (handle.tag === 'bwd') {\n handle.visible = false\n }\n }\n } else if (this.mode === 'rotate') {\n // Align handles to current local or world rotation\n\n this.tempQuaternion2.copy(quaternion)\n this.alignVector.copy(this.eye).applyQuaternion(this.tempQuaternion.copy(quaternion).invert())\n\n if (handle.name.search('E') !== -1) {\n handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.eye, this.zeroVector, this.unitY))\n }\n\n if (handle.name === 'X') {\n this.tempQuaternion.setFromAxisAngle(this.unitX, Math.atan2(-this.alignVector.y, this.alignVector.z))\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion)\n handle.quaternion.copy(this.tempQuaternion)\n }\n\n if (handle.name === 'Y') {\n this.tempQuaternion.setFromAxisAngle(this.unitY, Math.atan2(this.alignVector.x, this.alignVector.z))\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion)\n handle.quaternion.copy(this.tempQuaternion)\n }\n\n if (handle.name === 'Z') {\n this.tempQuaternion.setFromAxisAngle(this.unitZ, Math.atan2(this.alignVector.y, this.alignVector.x))\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion)\n handle.quaternion.copy(this.tempQuaternion)\n }\n }\n\n // Hide disabled axes\n handle.visible = handle.visible && (handle.name.indexOf('X') === -1 || this.showX)\n handle.visible = handle.visible && (handle.name.indexOf('Y') === -1 || this.showY)\n handle.visible = handle.visible && (handle.name.indexOf('Z') === -1 || this.showZ)\n handle.visible = handle.visible && (handle.name.indexOf('E') === -1 || (this.showX && this.showY && this.showZ))\n\n // highlight selected axis\n\n //@ts-ignore\n handle.material.tempOpacity = handle.material.tempOpacity || handle.material.opacity\n //@ts-ignore\n handle.material.tempColor = handle.material.tempColor || handle.material.color.clone()\n //@ts-ignore\n handle.material.color.copy(handle.material.tempColor)\n //@ts-ignore\n handle.material.opacity = handle.material.tempOpacity\n\n if (!this.enabled) {\n //@ts-ignore\n handle.material.opacity *= 0.5\n //@ts-ignore\n handle.material.color.lerp(new Color(1, 1, 1), 0.5)\n } else if (this.axis) {\n if (handle.name === this.axis) {\n //@ts-ignore\n handle.material.opacity = 1.0\n //@ts-ignore\n handle.material.color.lerp(new Color(1, 1, 1), 0.5)\n } else if (\n this.axis.split('').some(function (a) {\n return handle.name === a\n })\n ) {\n //@ts-ignore\n handle.material.opacity = 1.0\n //@ts-ignore\n handle.material.color.lerp(new Color(1, 1, 1), 0.5)\n } else {\n //@ts-ignore\n handle.material.opacity *= 0.25\n //@ts-ignore\n handle.material.color.lerp(new Color(1, 1, 1), 0.5)\n }\n }\n }\n\n super.updateMatrixWorld()\n }\n}\n\nclass TransformControlsPlane extends Mesh<PlaneGeometry, MeshBasicMaterial> {\n private isTransformControlsPlane = true\n public type = 'TransformControlsPlane'\n\n constructor() {\n super(\n new PlaneGeometry(100000, 100000, 2, 2),\n new MeshBasicMaterial({\n visible: false,\n wireframe: true,\n side: DoubleSide,\n transparent: true,\n opacity: 0.1,\n toneMapped: false,\n }),\n )\n }\n\n private unitX = new Vector3(1, 0, 0)\n private unitY = new Vector3(0, 1, 0)\n private unitZ = new Vector3(0, 0, 1)\n\n private tempVector = new Vector3()\n private dirVector = new Vector3()\n private alignVector = new Vector3()\n private tempMatrix = new Matrix4()\n private identityQuaternion = new Quaternion()\n\n // these are set from parent class TransformControls\n private cameraQuaternion = new Quaternion()\n\n private worldPosition = new Vector3()\n private worldQuaternion = new Quaternion()\n\n private eye = new Vector3()\n\n private axis: string | null = null\n private mode: 'translate' | 'rotate' | 'scale' = 'translate'\n private space = 'world'\n\n public updateMatrixWorld = (): void => {\n let space = this.space\n\n this.position.copy(this.worldPosition)\n\n if (this.mode === 'scale') space = 'local' // scale always oriented to local rotation\n\n this.unitX.set(1, 0, 0).applyQuaternion(space === 'local' ? this.worldQuaternion : this.identityQuaternion)\n this.unitY.set(0, 1, 0).applyQuaternion(space === 'local' ? this.worldQuaternion : this.identityQuaternion)\n this.unitZ.set(0, 0, 1).applyQuaternion(space === 'local' ? this.worldQuaternion : this.identityQuaternion)\n\n // Align the plane for current transform mode, axis and space.\n\n this.alignVector.copy(this.unitY)\n\n switch (this.mode) {\n case 'translate':\n case 'scale':\n switch (this.axis) {\n case 'X':\n this.alignVector.copy(this.eye).cross(this.unitX)\n this.dirVector.copy(this.unitX).cross(this.alignVector)\n break\n case 'Y':\n this.alignVector.copy(this.eye).cross(this.unitY)\n this.dirVector.copy(this.unitY).cross(this.alignVector)\n break\n case 'Z':\n this.alignVector.copy(this.eye).cross(this.unitZ)\n this.dirVector.copy(this.unitZ).cross(this.alignVector)\n break\n case 'XY':\n this.dirVector.copy(this.unitZ)\n break\n case 'YZ':\n this.dirVector.copy(this.unitX)\n break\n case 'XZ':\n this.alignVector.copy(this.unitZ)\n this.dirVector.copy(this.unitY)\n break\n case 'XYZ':\n case 'E':\n this.dirVector.set(0, 0, 0)\n break\n }\n\n break\n case 'rotate':\n default:\n // special case for rotate\n this.dirVector.set(0, 0, 0)\n }\n\n if (this.dirVector.length() === 0) {\n // If in rotate mode, make the plane parallel to camera\n this.quaternion.copy(this.cameraQuaternion)\n } else {\n this.tempMatrix.lookAt(this.tempVector.set(0, 0, 0), this.dirVector, this.alignVector)\n\n this.quaternion.setFromRotationMatrix(this.tempMatrix)\n }\n\n super.updateMatrixWorld()\n }\n}\n\nexport { TransformControls, TransformControlsGizmo, TransformControlsPlane }\n"],"names":["Object3D","Raycaster","Vector3","Quaternion","Euler","Matrix4","Color","MeshBasicMaterial","DoubleSide","LineBasicMaterial","CylinderGeometry","BoxGeometry","BufferGeometry","Float32BufferAttribute","Mesh","Line","OctahedronGeometry","PlaneGeometry","TorusGeometry","SphereGeometry"],"mappings":"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"}
@@ -315,7 +315,7 @@ class TransformControls extends Object3D {
315
315
  this.axis = null;
316
316
  });
317
317
  __publicField(this, "getPointer", (event) => {
318
- var _a, _b;
318
+ var _a;
319
319
  if (this.domElement && ((_a = this.domElement.ownerDocument) == null ? void 0 : _a.pointerLockElement)) {
320
320
  return {
321
321
  x: 0,
@@ -324,7 +324,7 @@ class TransformControls extends Object3D {
324
324
  };
325
325
  } else {
326
326
  const pointer = event.changedTouches ? event.changedTouches[0] : event;
327
- const rect = (_b = this.domElement) == null ? void 0 : _b.getBoundingClientRect();
327
+ const rect = this.domElement.getBoundingClientRect();
328
328
  return {
329
329
  x: (pointer.clientX - rect.left) / rect.width * 2 - 1,
330
330
  y: -(pointer.clientY - rect.top) / rect.height * 2 + 1,