three-stdlib 2.28.11 → 2.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) 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/lines/LineGeometry.cjs +23 -10
  26. package/lines/LineGeometry.cjs.map +1 -1
  27. package/lines/LineGeometry.js +23 -10
  28. package/lines/LineGeometry.js.map +1 -1
  29. package/lines/LineMaterial.cjs +29 -11
  30. package/lines/LineMaterial.cjs.map +1 -1
  31. package/lines/LineMaterial.js +29 -11
  32. package/lines/LineMaterial.js.map +1 -1
  33. package/lines/LineSegmentsGeometry.cjs +4 -4
  34. package/lines/LineSegmentsGeometry.cjs.map +1 -1
  35. package/lines/LineSegmentsGeometry.d.ts +1 -1
  36. package/lines/LineSegmentsGeometry.js +4 -4
  37. package/lines/LineSegmentsGeometry.js.map +1 -1
  38. package/loaders/FontLoader.cjs.map +1 -1
  39. package/loaders/FontLoader.js.map +1 -1
  40. package/loaders/HDRCubeTextureLoader.cjs +3 -1
  41. package/loaders/HDRCubeTextureLoader.cjs.map +1 -1
  42. package/loaders/HDRCubeTextureLoader.d.ts +1 -1
  43. package/loaders/HDRCubeTextureLoader.js +3 -1
  44. package/loaders/HDRCubeTextureLoader.js.map +1 -1
  45. package/modifiers/CurveModifier.cjs.map +1 -1
  46. package/modifiers/CurveModifier.js.map +1 -1
  47. package/modifiers/TessellateModifier.cjs.map +1 -1
  48. package/modifiers/TessellateModifier.js.map +1 -1
  49. package/package.json +1 -1
  50. package/postprocessing/BloomPass.cjs.map +1 -1
  51. package/postprocessing/BloomPass.d.ts +16 -3
  52. package/postprocessing/BloomPass.js.map +1 -1
  53. package/postprocessing/DotScreenPass.cjs.map +1 -1
  54. package/postprocessing/DotScreenPass.d.ts +3 -2
  55. package/postprocessing/DotScreenPass.js.map +1 -1
  56. package/postprocessing/FilmPass.cjs.map +1 -1
  57. package/postprocessing/FilmPass.d.ts +3 -2
  58. package/postprocessing/FilmPass.js.map +1 -1
  59. package/postprocessing/GlitchPass.cjs.map +1 -1
  60. package/postprocessing/GlitchPass.d.ts +3 -2
  61. package/postprocessing/GlitchPass.js.map +1 -1
  62. package/postprocessing/WaterPass.cjs +2 -2
  63. package/postprocessing/WaterPass.cjs.map +1 -1
  64. package/postprocessing/WaterPass.d.ts +7 -2
  65. package/postprocessing/WaterPass.js +3 -3
  66. package/postprocessing/WaterPass.js.map +1 -1
  67. package/webxr/OculusHandModel.cjs.map +1 -1
  68. 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,