endset_three_editor 0.2.2 → 0.2.3

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.
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("vue"),r=require("three"),At=require("@tweenjs/tween.js");function Pt(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const D=Pt(r),Fe={type:"change"},ke={type:"start"},ot={type:"end"},ge=new r.Ray,He=new r.Plane,Lt=Math.cos(70*r.MathUtils.DEG2RAD),I=new r.Vector3,j=2*Math.PI,A={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},Se=1e-6;class Nt extends r.Controls{constructor(e,t=null){super(e,t),this.state=A.NONE,this.target=new r.Vector3,this.cursor=new r.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:r.MOUSE.ROTATE,MIDDLE:r.MOUSE.DOLLY,RIGHT:r.MOUSE.PAN},this.touches={ONE:r.TOUCH.ROTATE,TWO:r.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._cursorStyle="auto",this._domElementKeyEvents=null,this._lastPosition=new r.Vector3,this._lastQuaternion=new r.Quaternion,this._lastTargetPosition=new r.Vector3,this._quat=new r.Quaternion().setFromUnitVectors(e.up,new r.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new r.Spherical,this._sphericalDelta=new r.Spherical,this._scale=1,this._panOffset=new r.Vector3,this._rotateStart=new r.Vector2,this._rotateEnd=new r.Vector2,this._rotateDelta=new r.Vector2,this._panStart=new r.Vector2,this._panEnd=new r.Vector2,this._panDelta=new r.Vector2,this._dollyStart=new r.Vector2,this._dollyEnd=new r.Vector2,this._dollyDelta=new r.Vector2,this._dollyDirection=new r.Vector3,this._mouse=new r.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=It.bind(this),this._onPointerDown=Ct.bind(this),this._onPointerUp=Ot.bind(this),this._onContextMenu=Bt.bind(this),this._onMouseWheel=Vt.bind(this),this._onKeyDown=jt.bind(this),this._onTouchStart=Ft.bind(this),this._onTouchMove=Ht.bind(this),this._onMouseDown=Dt.bind(this),this._onMouseMove=kt.bind(this),this._interceptControlDown=Gt.bind(this),this._interceptControlUp=Ut.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}set cursorStyle(e){this._cursorStyle=e,e==="grab"?this.domElement.style.cursor="grab":this.domElement.style.cursor="auto"}get cursorStyle(){return this._cursorStyle}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=""}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(Fe),this.update(),this.state=A.NONE}pan(e,t){this._pan(e,t),this.update()}dollyIn(e){this._dollyIn(e),this.update()}dollyOut(e){this._dollyOut(e),this.update()}rotateLeft(e){this._rotateLeft(e),this.update()}rotateUp(e){this._rotateUp(e),this.update()}update(e=null){const t=this.object.position;I.copy(t).sub(this.target),I.applyQuaternion(this._quat),this._spherical.setFromVector3(I),this.autoRotate&&this.state===A.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let s=this.minAzimuthAngle,n=this.maxAzimuthAngle;isFinite(s)&&isFinite(n)&&(s<-Math.PI?s+=j:s>Math.PI&&(s-=j),n<-Math.PI?n+=j:n>Math.PI&&(n-=j),s<=n?this._spherical.theta=Math.max(s,Math.min(n,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(s+n)/2?Math.max(s,this._spherical.theta):Math.min(n,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let o=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const i=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),o=i!=this._spherical.radius}if(I.setFromSpherical(this._spherical),I.applyQuaternion(this._quatInverse),t.copy(this.target).add(I),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let i=null;if(this.object.isPerspectiveCamera){const l=I.length();i=this._clampDistance(l*this._scale);const c=l-i;this.object.position.addScaledVector(this._dollyDirection,c),this.object.updateMatrixWorld(),o=!!c}else if(this.object.isOrthographicCamera){const l=new r.Vector3(this._mouse.x,this._mouse.y,0);l.unproject(this.object);const c=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),o=c!==this.object.zoom;const d=new r.Vector3(this._mouse.x,this._mouse.y,0);d.unproject(this.object),this.object.position.sub(d).add(l),this.object.updateMatrixWorld(),i=I.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;i!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(i).add(this.object.position):(ge.origin.copy(this.object.position),ge.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(ge.direction))<Lt?this.object.lookAt(this.target):(He.setFromNormalAndCoplanarPoint(this.object.up,this.target),ge.intersectPlane(He,this.target))))}else if(this.object.isOrthographicCamera){const i=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),i!==this.object.zoom&&(this.object.updateProjectionMatrix(),o=!0)}return this._scale=1,this._performCursorZoom=!1,o||this._lastPosition.distanceToSquared(this.object.position)>Se||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Se||this._lastTargetPosition.distanceToSquared(this.target)>Se?(this.dispatchEvent(Fe),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?j/60*this.autoRotateSpeed*e:j/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){I.setFromMatrixColumn(t,0),I.multiplyScalar(-e),this._panOffset.add(I)}_panUp(e,t){this.screenSpacePanning===!0?I.setFromMatrixColumn(t,1):(I.setFromMatrixColumn(t,0),I.crossVectors(this.object.up,I)),I.multiplyScalar(e),this._panOffset.add(I)}_pan(e,t){const s=this.domElement;if(this.object.isPerspectiveCamera){const n=this.object.position;I.copy(n).sub(this.target);let o=I.length();o*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*o/s.clientHeight,this.object.matrix),this._panUp(2*t*o/s.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/s.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/s.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const s=this.domElement.getBoundingClientRect(),n=e-s.left,o=t-s.top,i=s.width,l=s.height;this._mouse.x=n/i*2-1,this._mouse.y=-(o/l)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(j*this._rotateDelta.x/t.clientHeight),this._rotateUp(j*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(j*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-j*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(j*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-j*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._rotateStart.set(s,n)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._panStart.set(s,n)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),s=e.pageX-t.x,n=e.pageY-t.y,o=Math.sqrt(s*s+n*n);this._dollyStart.set(0,o)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),n=.5*(e.pageX+s.x),o=.5*(e.pageY+s.y);this._rotateEnd.set(n,o)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(j*this._rotateDelta.x/t.clientHeight),this._rotateUp(j*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._panEnd.set(s,n)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),s=e.pageX-t.x,n=e.pageY-t.y,o=Math.sqrt(s*s+n*n);this._dollyEnd.set(0,o),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const i=(e.pageX+t.x)*.5,l=(e.pageY+t.y)*.5;this._updateZoomParameters(i,l)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(e){let t=this._pointerPositions[e.pointerId];t===void 0&&(t=new r.Vector2,this._pointerPositions[e.pointerId]=t),t.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){const t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){const t=e.deltaMode,s={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:s.deltaY*=16;break;case 2:s.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(s.deltaY*=10),s}}function Ct(a){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(a.pointerId),this.domElement.ownerDocument.addEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(a)&&(this._addPointer(a),a.pointerType==="touch"?this._onTouchStart(a):this._onMouseDown(a),this._cursorStyle==="grab"&&(this.domElement.style.cursor="grabbing")))}function It(a){this.enabled!==!1&&(a.pointerType==="touch"?this._onTouchMove(a):this._onMouseMove(a))}function Ot(a){switch(this._removePointer(a),this._pointers.length){case 0:this.domElement.releasePointerCapture(a.pointerId),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(ot),this.state=A.NONE,this._cursorStyle==="grab"&&(this.domElement.style.cursor="grab");break;case 1:const e=this._pointers[0],t=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:t.x,pageY:t.y});break}}function Dt(a){let e;switch(a.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case r.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(a),this.state=A.DOLLY;break;case r.MOUSE.ROTATE:if(a.ctrlKey||a.metaKey||a.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(a),this.state=A.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(a),this.state=A.ROTATE}break;case r.MOUSE.PAN:if(a.ctrlKey||a.metaKey||a.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(a),this.state=A.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(a),this.state=A.PAN}break;default:this.state=A.NONE}this.state!==A.NONE&&this.dispatchEvent(ke)}function kt(a){switch(this.state){case A.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(a);break;case A.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(a);break;case A.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(a);break}}function Vt(a){this.enabled===!1||this.enableZoom===!1||this.state!==A.NONE||(a.preventDefault(),this.dispatchEvent(ke),this._handleMouseWheel(this._customWheelEvent(a)),this.dispatchEvent(ot))}function jt(a){this.enabled!==!1&&this._handleKeyDown(a)}function Ft(a){switch(this._trackPointer(a),this._pointers.length){case 1:switch(this.touches.ONE){case r.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(a),this.state=A.TOUCH_ROTATE;break;case r.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(a),this.state=A.TOUCH_PAN;break;default:this.state=A.NONE}break;case 2:switch(this.touches.TWO){case r.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(a),this.state=A.TOUCH_DOLLY_PAN;break;case r.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(a),this.state=A.TOUCH_DOLLY_ROTATE;break;default:this.state=A.NONE}break;default:this.state=A.NONE}this.state!==A.NONE&&this.dispatchEvent(ke)}function Ht(a){switch(this._trackPointer(a),this.state){case A.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(a),this.update();break;case A.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(a),this.update();break;case A.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(a),this.update();break;case A.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(a),this.update();break;default:this.state=A.NONE}}function Bt(a){this.enabled!==!1&&a.preventDefault()}function Gt(a){a.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Ut(a){a.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}const $=new r.Raycaster,k=new r.Vector3,Q=new r.Vector3,N=new r.Quaternion,Be={X:new r.Vector3(1,0,0),Y:new r.Vector3(0,1,0),Z:new r.Vector3(0,0,1)},ve={type:"change"},Ge={type:"mouseDown",mode:null},Ue={type:"mouseUp",mode:null},ze={type:"objectChange"};class zt extends r.Controls{constructor(e,t=null){super(void 0,t);const s=new qt(this);this._root=s;const n=new Wt;this._gizmo=n,s.add(n);const o=new $t;this._plane=o,s.add(o);const i=this;function l(M,S){let R=S;Object.defineProperty(i,M,{get:function(){return R!==void 0?R:S},set:function(x){R!==x&&(R=x,o[M]=x,n[M]=x,i.dispatchEvent({type:M+"-changed",value:x}),i.dispatchEvent(ve))}}),i[M]=S,o[M]=S,n[M]=S}l("camera",e),l("object",void 0),l("enabled",!0),l("axis",null),l("mode","translate"),l("translationSnap",null),l("rotationSnap",null),l("scaleSnap",null),l("space","world"),l("size",1),l("dragging",!1),l("showX",!0),l("showY",!0),l("showZ",!0),l("showXY",!0),l("showYZ",!0),l("showXZ",!0),l("minX",-1/0),l("maxX",1/0),l("minY",-1/0),l("maxY",1/0),l("minZ",-1/0),l("maxZ",1/0);const c=new r.Vector3,d=new r.Vector3,p=new r.Quaternion,u=new r.Quaternion,f=new r.Vector3,y=new r.Quaternion,w=new r.Vector3,g=new r.Vector3,_=new r.Vector3,m=0,b=new r.Vector3;l("worldPosition",c),l("worldPositionStart",d),l("worldQuaternion",p),l("worldQuaternionStart",u),l("cameraPosition",f),l("cameraQuaternion",y),l("pointStart",w),l("pointEnd",g),l("rotationAxis",_),l("rotationAngle",m),l("eye",b),this._offset=new r.Vector3,this._startNorm=new r.Vector3,this._endNorm=new r.Vector3,this._cameraScale=new r.Vector3,this._parentPosition=new r.Vector3,this._parentQuaternion=new r.Quaternion,this._parentQuaternionInv=new r.Quaternion,this._parentScale=new r.Vector3,this._worldScaleStart=new r.Vector3,this._worldQuaternionInv=new r.Quaternion,this._worldScale=new r.Vector3,this._positionStart=new r.Vector3,this._quaternionStart=new r.Quaternion,this._scaleStart=new r.Vector3,this._getPointer=Xt.bind(this),this._onPointerDown=Kt.bind(this),this._onPointerHover=Yt.bind(this),this._onPointerMove=Zt.bind(this),this._onPointerUp=Qt.bind(this),t!==null&&this.connect(t)}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction=""}getHelper(){return this._root}pointerHover(e){if(this.object===void 0||this.dragging===!0)return;e!==null&&$.setFromCamera(e,this.camera);const t=Re(this._gizmo.picker[this.mode],$);t?this.axis=t.object.name:this.axis=null}pointerDown(e){if(!(this.object===void 0||this.dragging===!0||e!=null&&e.button!==0)&&this.axis!==null){e!==null&&$.setFromCamera(e,this.camera);const t=Re(this._plane,$,!0);t&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(t.point).sub(this.worldPositionStart)),this.dragging=!0,Ge.mode=this.mode,this.dispatchEvent(Ge)}}pointerMove(e){const t=this.axis,s=this.mode,n=this.object;let o=this.space;if(s==="scale"?o="local":(t==="E"||t==="XYZE"||t==="XYZ")&&(o="world"),n===void 0||t===null||this.dragging===!1||e!==null&&e.button!==-1)return;e!==null&&$.setFromCamera(e,this.camera);const i=Re(this._plane,$,!0);if(i){if(this.pointEnd.copy(i.point).sub(this.worldPositionStart),s==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),o==="local"&&t!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),t.indexOf("X")===-1&&(this._offset.x=0),t.indexOf("Y")===-1&&(this._offset.y=0),t.indexOf("Z")===-1&&(this._offset.z=0),o==="local"&&t!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),n.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(o==="local"&&(n.position.applyQuaternion(N.copy(this._quaternionStart).invert()),t.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.position.applyQuaternion(this._quaternionStart)),o==="world"&&(n.parent&&n.position.add(k.setFromMatrixPosition(n.parent.matrixWorld)),t.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.parent&&n.position.sub(k.setFromMatrixPosition(n.parent.matrixWorld)))),n.position.x=Math.max(this.minX,Math.min(this.maxX,n.position.x)),n.position.y=Math.max(this.minY,Math.min(this.maxY,n.position.y)),n.position.z=Math.max(this.minZ,Math.min(this.maxZ,n.position.z));else if(s==="scale"){if(t.search("XYZ")!==-1){let l=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(l*=-1),Q.set(l,l,l)}else k.copy(this.pointStart),Q.copy(this.pointEnd),k.applyQuaternion(this._worldQuaternionInv),Q.applyQuaternion(this._worldQuaternionInv),Q.divide(k),t.search("X")===-1&&(Q.x=1),t.search("Y")===-1&&(Q.y=1),t.search("Z")===-1&&(Q.z=1);n.scale.copy(this._scaleStart).multiply(Q),this.scaleSnap&&(t.search("X")!==-1&&(n.scale.x=Math.round(n.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Y")!==-1&&(n.scale.y=Math.round(n.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Z")!==-1&&(n.scale.z=Math.round(n.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(s==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const l=20/this.worldPosition.distanceTo(k.setFromMatrixPosition(this.camera.matrixWorld));let c=!1;t==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(k.copy(this.rotationAxis).cross(this.eye))*l):(t==="X"||t==="Y"||t==="Z")&&(this.rotationAxis.copy(Be[t]),k.copy(Be[t]),o==="local"&&k.applyQuaternion(this.worldQuaternion),k.cross(this.eye),k.length()===0?c=!0:this.rotationAngle=this._offset.dot(k.normalize())*l),(t==="E"||c)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),o==="local"&&t!=="E"&&t!=="XYZE"?(n.quaternion.copy(this._quaternionStart),n.quaternion.multiply(N.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),n.quaternion.copy(N.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),n.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(ve),this.dispatchEvent(ze)}}pointerUp(e){e!==null&&e.button!==0||(this.dragging&&this.axis!==null&&(Ue.mode=this.mode,this.dispatchEvent(Ue)),this.dragging=!1,this.axis=null)}dispose(){this.disconnect(),this._root.dispose()}attach(e){return this.object=e,this._root.visible=!0,this}detach(){return this.object=void 0,this.axis=null,this._root.visible=!1,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(ve),this.dispatchEvent(ze),this.pointStart.copy(this.pointEnd))}getRaycaster(){return $}getMode(){return this.mode}setMode(e){this.mode=e}setTranslationSnap(e){this.translationSnap=e}setRotationSnap(e){this.rotationSnap=e}setScaleSnap(e){this.scaleSnap=e}setSize(e){this.size=e}setSpace(e){this.space=e}setColors(e,t,s,n){const o=this._gizmo.materialLib;o.xAxis.color.set(e),o.yAxis.color.set(t),o.zAxis.color.set(s),o.active.color.set(n),o.xAxisTransparent.color.set(e),o.yAxisTransparent.color.set(t),o.zAxisTransparent.color.set(s),o.activeTransparent.color.set(n),o.xAxis._color&&o.xAxis._color.set(e),o.yAxis._color&&o.yAxis._color.set(t),o.zAxis._color&&o.zAxis._color.set(s),o.active._color&&o.active._color.set(n),o.xAxisTransparent._color&&o.xAxisTransparent._color.set(e),o.yAxisTransparent._color&&o.yAxisTransparent._color.set(t),o.zAxisTransparent._color&&o.zAxisTransparent._color.set(s),o.activeTransparent._color&&o.activeTransparent._color.set(n)}}function Xt(a){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:a.button};{const e=this.domElement.getBoundingClientRect();return{x:(a.clientX-e.left)/e.width*2-1,y:-(a.clientY-e.top)/e.height*2+1,button:a.button}}}function Yt(a){if(this.enabled)switch(a.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(a));break}}function Kt(a){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(a.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(a)),this.pointerDown(this._getPointer(a)))}function Zt(a){this.enabled&&this.pointerMove(this._getPointer(a))}function Qt(a){this.enabled&&(this.domElement.releasePointerCapture(a.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(a)))}function Re(a,e,t){const s=e.intersectObject(a,!0);for(let n=0;n<s.length;n++)if(s[n].object.visible||t)return s[n];return!1}const ye=new r.Euler,P=new r.Vector3(0,1,0),Xe=new r.Vector3(0,0,0),Ye=new r.Matrix4,_e=new r.Quaternion,Ee=new r.Quaternion,X=new r.Vector3,Ke=new r.Matrix4,ce=new r.Vector3(1,0,0),ee=new r.Vector3(0,1,0),he=new r.Vector3(0,0,1),be=new r.Vector3,re=new r.Vector3,ae=new r.Vector3;class qt extends r.Object3D{constructor(e){super(),this.isTransformControlsRoot=!0,this.controls=e,this.visible=!1}updateMatrixWorld(e){const t=this.controls;t.object!==void 0&&(t.object.updateMatrixWorld(),t.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):t.object.parent.matrixWorld.decompose(t._parentPosition,t._parentQuaternion,t._parentScale),t.object.matrixWorld.decompose(t.worldPosition,t.worldQuaternion,t._worldScale),t._parentQuaternionInv.copy(t._parentQuaternion).invert(),t._worldQuaternionInv.copy(t.worldQuaternion).invert()),t.camera.updateMatrixWorld(),t.camera.matrixWorld.decompose(t.cameraPosition,t.cameraQuaternion,t._cameraScale),t.camera.isOrthographicCamera?t.camera.getWorldDirection(t.eye).negate():t.eye.copy(t.cameraPosition).sub(t.worldPosition).normalize(),super.updateMatrixWorld(e)}dispose(){this.traverse(function(e){e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()})}}class Wt extends r.Object3D{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const e=new r.MeshBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),t=new r.LineBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),s=e.clone();s.opacity=.15;const n=t.clone();n.opacity=.5;const o=e.clone();o.color.setHex(16711680);const i=e.clone();i.color.setHex(65280);const l=e.clone();l.color.setHex(255);const c=e.clone();c.color.setHex(16711680),c.opacity=.5;const d=e.clone();d.color.setHex(65280),d.opacity=.5;const p=e.clone();p.color.setHex(255),p.opacity=.5;const u=e.clone();u.opacity=.25;const f=e.clone();f.color.setHex(16776960),f.opacity=.25;const y=e.clone();y.color.setHex(16776960);const w=e.clone();w.color.setHex(7895160),this.materialLib={xAxis:o,yAxis:i,zAxis:l,active:y,xAxisTransparent:c,yAxisTransparent:d,zAxisTransparent:p,activeTransparent:f};const g=new r.CylinderGeometry(0,.04,.1,12);g.translate(0,.05,0);const _=new r.BoxGeometry(.08,.08,.08);_.translate(0,.04,0);const m=new r.BufferGeometry;m.setAttribute("position",new r.Float32BufferAttribute([0,0,0,1,0,0],3));const b=new r.CylinderGeometry(.0075,.0075,.5,3);b.translate(0,.25,0);function M(F,de){const U=new r.TorusGeometry(F,.0075,3,64,de*Math.PI*2);return U.rotateY(Math.PI/2),U.rotateX(Math.PI/2),U}function S(){const F=new r.BufferGeometry;return F.setAttribute("position",new r.Float32BufferAttribute([0,0,0,1,1,1],3)),F}const R={X:[[new r.Mesh(g,o),[.5,0,0],[0,0,-Math.PI/2]],[new r.Mesh(g,o),[-.5,0,0],[0,0,Math.PI/2]],[new r.Mesh(b,o),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new r.Mesh(g,i),[0,.5,0]],[new r.Mesh(g,i),[0,-.5,0],[Math.PI,0,0]],[new r.Mesh(b,i)]],Z:[[new r.Mesh(g,l),[0,0,.5],[Math.PI/2,0,0]],[new r.Mesh(g,l),[0,0,-.5],[-Math.PI/2,0,0]],[new r.Mesh(b,l),null,[Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.OctahedronGeometry(.1,0),u),[0,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),p),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),c),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),d),[.15,0,.15],[-Math.PI/2,0,0]]]},x={X:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[.3,0,0],[0,0,-Math.PI/2]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,.3,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,-.3,0],[0,0,Math.PI]]],Z:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,0,.3],[Math.PI/2,0,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.OctahedronGeometry(.2,0),s)]],XY:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[.15,0,.15],[-Math.PI/2,0,0]]]},L={START:[[new r.Mesh(new r.OctahedronGeometry(.01,2),n),null,null,null,"helper"]],END:[[new r.Mesh(new r.OctahedronGeometry(.01,2),n),null,null,null,"helper"]],DELTA:[[new r.Line(S(),n),null,null,null,"helper"]],X:[[new r.Line(m,n),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new r.Line(m,n),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new r.Line(m,n),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},K={XYZE:[[new r.Mesh(M(.5,1),w),null,[0,Math.PI/2,0]]],X:[[new r.Mesh(M(.5,.5),o)]],Y:[[new r.Mesh(M(.5,.5),i),null,[0,0,-Math.PI/2]]],Z:[[new r.Mesh(M(.5,.5),l),null,[0,Math.PI/2,0]]],E:[[new r.Mesh(M(.75,1),f),null,[0,Math.PI/2,0]]]},z={AXIS:[[new r.Line(m,n),[-1e3,0,0],null,[1e6,1,1],"helper"]]},W={XYZE:[[new r.Mesh(new r.SphereGeometry(.25,10,8),s)]],X:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),s),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),s),[0,0,0],[Math.PI/2,0,0]]],Z:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),s),[0,0,0],[0,0,-Math.PI/2]]],E:[[new r.Mesh(new r.TorusGeometry(.75,.1,2,24),s)]]},G={X:[[new r.Mesh(_,o),[.5,0,0],[0,0,-Math.PI/2]],[new r.Mesh(b,o),[0,0,0],[0,0,-Math.PI/2]],[new r.Mesh(_,o),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(_,i),[0,.5,0]],[new r.Mesh(b,i)],[new r.Mesh(_,i),[0,-.5,0],[0,0,Math.PI]]],Z:[[new r.Mesh(_,l),[0,0,.5],[Math.PI/2,0,0]],[new r.Mesh(b,l),[0,0,0],[Math.PI/2,0,0]],[new r.Mesh(_,l),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),p),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),c),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),d),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.BoxGeometry(.1,.1,.1),u)]]},T={X:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[.3,0,0],[0,0,-Math.PI/2]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,.3,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,-.3,0],[0,0,Math.PI]]],Z:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,0,.3],[Math.PI/2,0,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.2),s),[0,0,0]]]},O={X:[[new r.Line(m,n),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new r.Line(m,n),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new r.Line(m,n),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function Z(F){const de=new r.Object3D;for(const U in F)for(let se=F[U].length;se--;){const V=F[U][se][0].clone(),pe=F[U][se][1],me=F[U][se][2],fe=F[U][se][3],Rt=F[U][se][4];V.name=U,V.tag=Rt,pe&&V.position.set(pe[0],pe[1],pe[2]),me&&V.rotation.set(me[0],me[1],me[2]),fe&&V.scale.set(fe[0],fe[1],fe[2]),V.updateMatrix();const je=V.geometry.clone();je.applyMatrix4(V.matrix),V.geometry=je,V.renderOrder=1/0,V.position.set(0,0,0),V.rotation.set(0,0,0),V.scale.set(1,1,1),de.add(V)}return de}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=Z(R)),this.add(this.gizmo.rotate=Z(K)),this.add(this.gizmo.scale=Z(G)),this.add(this.picker.translate=Z(x)),this.add(this.picker.rotate=Z(W)),this.add(this.picker.scale=Z(T)),this.add(this.helper.translate=Z(L)),this.add(this.helper.rotate=Z(z)),this.add(this.helper.scale=Z(O)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(e){const s=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:Ee;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let n=[];n=n.concat(this.picker[this.mode].children),n=n.concat(this.gizmo[this.mode].children),n=n.concat(this.helper[this.mode].children);for(let o=0;o<n.length;o++){const i=n[o];i.visible=!0,i.rotation.set(0,0,0),i.position.copy(this.worldPosition);let l;if(this.camera.isOrthographicCamera?l=(this.camera.top-this.camera.bottom)/this.camera.zoom:l=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),i.scale.set(1,1,1).multiplyScalar(l*this.size/4),i.tag==="helper"){i.visible=!1,i.name==="AXIS"?(i.visible=!!this.axis,this.axis==="X"&&(N.setFromEuler(ye.set(0,0,0)),i.quaternion.copy(s).multiply(N),Math.abs(P.copy(ce).applyQuaternion(s).dot(this.eye))>.9&&(i.visible=!1)),this.axis==="Y"&&(N.setFromEuler(ye.set(0,0,Math.PI/2)),i.quaternion.copy(s).multiply(N),Math.abs(P.copy(ee).applyQuaternion(s).dot(this.eye))>.9&&(i.visible=!1)),this.axis==="Z"&&(N.setFromEuler(ye.set(0,Math.PI/2,0)),i.quaternion.copy(s).multiply(N),Math.abs(P.copy(he).applyQuaternion(s).dot(this.eye))>.9&&(i.visible=!1)),this.axis==="XYZE"&&(N.setFromEuler(ye.set(0,Math.PI/2,0)),P.copy(this.rotationAxis),i.quaternion.setFromRotationMatrix(Ye.lookAt(Xe,P,ee)),i.quaternion.multiply(N),i.visible=this.dragging),this.axis==="E"&&(i.visible=!1)):i.name==="START"?(i.position.copy(this.worldPositionStart),i.visible=this.dragging):i.name==="END"?(i.position.copy(this.worldPosition),i.visible=this.dragging):i.name==="DELTA"?(i.position.copy(this.worldPositionStart),i.quaternion.copy(this.worldQuaternionStart),k.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),k.applyQuaternion(this.worldQuaternionStart.clone().invert()),i.scale.copy(k),i.visible=this.dragging):(i.quaternion.copy(s),this.dragging?i.position.copy(this.worldPositionStart):i.position.copy(this.worldPosition),this.axis&&(i.visible=this.axis.search(i.name)!==-1));continue}i.quaternion.copy(s),this.mode==="translate"||this.mode==="scale"?(i.name==="X"&&Math.abs(P.copy(ce).applyQuaternion(s).dot(this.eye))>.99&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="Y"&&Math.abs(P.copy(ee).applyQuaternion(s).dot(this.eye))>.99&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="Z"&&Math.abs(P.copy(he).applyQuaternion(s).dot(this.eye))>.99&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="XY"&&Math.abs(P.copy(he).applyQuaternion(s).dot(this.eye))<.2&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="YZ"&&Math.abs(P.copy(ce).applyQuaternion(s).dot(this.eye))<.2&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="XZ"&&Math.abs(P.copy(ee).applyQuaternion(s).dot(this.eye))<.2&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1)):this.mode==="rotate"&&(_e.copy(s),P.copy(this.eye).applyQuaternion(N.copy(s).invert()),i.name.search("E")!==-1&&i.quaternion.setFromRotationMatrix(Ye.lookAt(this.eye,Xe,ee)),i.name==="X"&&(N.setFromAxisAngle(ce,Math.atan2(-P.y,P.z)),N.multiplyQuaternions(_e,N),i.quaternion.copy(N)),i.name==="Y"&&(N.setFromAxisAngle(ee,Math.atan2(P.x,P.z)),N.multiplyQuaternions(_e,N),i.quaternion.copy(N)),i.name==="Z"&&(N.setFromAxisAngle(he,Math.atan2(P.y,P.x)),N.multiplyQuaternions(_e,N),i.quaternion.copy(N))),i.visible=i.visible&&(i.name.indexOf("X")===-1||this.showX),i.visible=i.visible&&(i.name.indexOf("Y")===-1||this.showY),i.visible=i.visible&&(i.name.indexOf("Z")===-1||this.showZ),i.visible=i.visible&&(i.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),i.visible=i.visible&&(i.name.indexOf("XY")===-1||this.showXY),i.visible=i.visible&&(i.name.indexOf("YZ")===-1||this.showYZ),i.visible=i.visible&&(i.name.indexOf("XZ")===-1||this.showXZ),i.material._color=i.material._color||i.material.color.clone(),i.material._opacity=i.material._opacity||i.material.opacity,i.material.color.copy(i.material._color),i.material.opacity=i.material._opacity,this.enabled&&this.axis&&(i.name===this.axis?(i.material.color.copy(this.materialLib.active.color),i.material.opacity=1):this.axis.split("").some(function(c){return i.name===c})&&(i.material.color.copy(this.materialLib.active.color),i.material.opacity=1))}super.updateMatrixWorld(e)}}class $t extends r.Mesh{constructor(){super(new r.PlaneGeometry(1e5,1e5,2,2),new r.MeshBasicMaterial({visible:!1,wireframe:!0,side:r.DoubleSide,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(e){let t=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(t="local"),be.copy(ce).applyQuaternion(t==="local"?this.worldQuaternion:Ee),re.copy(ee).applyQuaternion(t==="local"?this.worldQuaternion:Ee),ae.copy(he).applyQuaternion(t==="local"?this.worldQuaternion:Ee),P.copy(re),this.mode){case"translate":case"scale":switch(this.axis){case"X":P.copy(this.eye).cross(be),X.copy(be).cross(P);break;case"Y":P.copy(this.eye).cross(re),X.copy(re).cross(P);break;case"Z":P.copy(this.eye).cross(ae),X.copy(ae).cross(P);break;case"XY":X.copy(ae);break;case"YZ":X.copy(be);break;case"XZ":P.copy(ae),X.copy(re);break;case"XYZ":case"E":X.set(0,0,0);break}break;case"rotate":default:X.set(0,0,0)}X.length()===0?this.quaternion.copy(this.cameraQuaternion):(Ke.lookAt(k.set(0,0,0),X,P),this.quaternion.setFromRotationMatrix(Ke)),super.updateMatrixWorld(e)}}const E={mode:"",scene:null,camera:null,renderer:null,orbitControls:null,transformControls:null,container:null,gridHelper:null,selectedObject:null};let Ae=!1,ie=!1,te=null,Ie=null,Me=null,ne=[];function it(a,e="edit",t){if(E.container=a,E.mode=e,Jt(),en(),nn(),t){mt(t.scene,e);const s=t.camera;E.camera.position.fromArray(s.position),E.camera.rotation.fromArray(s.rotation)}on(),sn(),un(),rt(),e==="edit"&&a.addEventListener("click",ln),window.addEventListener("resize",an),t||rn(),e==="edit"&&tn()}function Jt(){const a=new D.WebGLRenderer({antialias:!0,alpha:!0});a.setSize(E.container.clientWidth,E.container.clientHeight),a.setPixelRatio(Math.min(window.devicePixelRatio,2)),E.container.appendChild(a.domElement),E.renderer=a}function en(){E.scene=new D.Scene,E.scene.name="sl_scene"}function tn(){const a=new D.GridHelper(30,30,8956671,3364232);a.name="地板",a.userData.type="initFloor",E.scene.add(a),E.gridHelper=a}function nn(){const a=E.container,e=a.clientWidth/a.clientHeight,t=new D.PerspectiveCamera(45,e,.1,1e3);t.position.set(0,6,15),t.lookAt(0,0,0),E.camera=t}function sn(){const a=new Nt(E.camera,E.renderer.domElement);a.minDistance=0,a.maxDistance=1/0,a.addEventListener("start",()=>{Ae=!1}),a.addEventListener("change",()=>{Ae=!0}),a.addEventListener("end",()=>{Ae&&(ie=!0,setTimeout(()=>{ie=!1},200))}),E.orbitControls=a}function on(){const a=new zt(E.camera,E.renderer.domElement);a.addEventListener("dragging-changed",e=>{E.orbitControls.enabled=!e.value,e.value||(ie=!0,setTimeout(()=>{ie=!1},200))}),a.addEventListener("objectChange",()=>{Ie&&E.selectedObject&&Ie(E.selectedObject)}),E.scene.add(a.getHelper()),E.transformControls=a}function rn(){const a=new D.AmbientLight(16777215,2);E.scene.add(a);const e=new D.DirectionalLight(16777215,3);e.position.set(48,104,138),E.scene.add(e)}function rt(){var a,e;requestAnimationFrame(rt),At.update(),(a=E.orbitControls)==null||a.update(),(e=E.renderer)==null||e.render(E.scene,E.camera)}function an(){if(!E.container||!E.camera||!E.renderer)return;const a=E.container.clientWidth,e=E.container.clientHeight;a===0||e===0||(E.camera.aspect=a/e,E.camera.updateProjectionMatrix(),E.renderer.setSize(a,e))}function Te(a){E.selectedObject!==a&&(E.selectedObject&&E.transformControls.detach(),E.selectedObject=a,E.transformControls.attach(a),E.transformControls.setMode("translate"),E.transformControls.showX=!0,E.transformControls.showY=!0,E.transformControls.showZ=!0,te==null||te(a))}function at(){E.selectedObject&&(E.transformControls.detach(),E.selectedObject=null,te==null||te(null))}function ln(a){if(ie){ie=!1;return}const e=E.renderer.domElement.getBoundingClientRect(),t=new D.Vector2((a.clientX-e.left)/e.width*2-1,-((a.clientY-e.top)/e.height)*2+1),s=new D.Raycaster;s.setFromCamera(t,E.camera);const n=[];E.scene.traverse(i=>{i.type==="Mesh"&&i.userData.isMovable&&n.push(i)});const o=s.intersectObjects(n);o.length>0?Te(o[0].object):at()}function xe(a,e=!1){E.scene.add(a),a.userData.isMovable&&(cn(a),Ve()),e&&E.mode==="edit"&&Te(a)}function lt(a){E.selectedObject===a&&at(),a.parent?a.parent.remove(a):E.scene.remove(a),hn(a),Ve()}function ct(a){const e=E.scene.getObjectByProperty("uuid",a);e&&lt(e)}function cn(a){a.userData.isMovable&&a.parent===E.scene&&(ne.includes(a)||ne.push(a))}function hn(a){const e=ne.indexOf(a);e!==-1&&ne.splice(e,1)}function un(){const a=[];E.scene.children.forEach(e=>{e.userData.isMovable&&a.push(e)}),ne=a,Ve()}function Ve(){Me==null||Me([...ne])}function ht(a){te=a}function ut(a){Ie=a}function dt(a){Me=a}function pt(){return ne}function dn(){return E.scene}function pn(){return E.camera}function mn(){return E.renderer}function fn(){var n,o;const a=E.scene;if(!a)return"{}";let e=a;e=a.clone(),e.children=e.children.filter(i=>i.userData.type!=="initFloor");const t=e.toJSON(),s={position:(n=E.camera)==null?void 0:n.position,rotation:(o=E.camera)==null?void 0:o.rotation};return JSON.stringify({scene:t,camera:s})}function mt(a,e="edit"){var o;const t=typeof a=="string"?JSON.parse(a):a,n=new D.ObjectLoader().parse(t);n.type==="Scene"?E.scene=n:(o=E.scene)==null||o.add(n)}const gn=/^[og]\s*(.+)?/,yn=/^mtllib /,_n=/^usemtl /,bn=/^usemap /,Ze=/\s+/,Qe=new r.Vector3,Pe=new r.Vector3,qe=new r.Vector3,We=new r.Vector3,H=new r.Vector3,we=new r.Color;function wn(){const a={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const s=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(n,o){const i=this._finalize(!1);i&&(i.inherited||i.groupCount<=0)&&this.materials.splice(i.index,1);const l={index:this.materials.length,name:n||"",mtllib:Array.isArray(o)&&o.length>0?o[o.length-1]:"",smooth:i!==void 0?i.smooth:this.smooth,groupStart:i!==void 0?i.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(c){const d={index:typeof c=="number"?c:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return d.clone=this.clone.bind(d),d}};return this.materials.push(l),l},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(n){const o=this.currentMaterial();if(o&&o.groupEnd===-1&&(o.groupEnd=this.geometry.vertices.length/3,o.groupCount=o.groupEnd-o.groupStart,o.inherited=!1),n&&this.materials.length>1)for(let i=this.materials.length-1;i>=0;i--)this.materials[i].groupCount<=0&&this.materials.splice(i,1);return n&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),o}},s&&s.name&&typeof s.clone=="function"){const n=s.clone(0);n.inherited=!0,this.object.materials.push(n)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/3)*3},parseNormalIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/3)*3},parseUVIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/2)*2},addVertex:function(e,t,s){const n=this.vertices,o=this.object.geometry.vertices;o.push(n[e+0],n[e+1],n[e+2]),o.push(n[t+0],n[t+1],n[t+2]),o.push(n[s+0],n[s+1],n[s+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,s){const n=this.normals,o=this.object.geometry.normals;o.push(n[e+0],n[e+1],n[e+2]),o.push(n[t+0],n[t+1],n[t+2]),o.push(n[s+0],n[s+1],n[s+2])},addFaceNormal:function(e,t,s){const n=this.vertices,o=this.object.geometry.normals;Qe.fromArray(n,e),Pe.fromArray(n,t),qe.fromArray(n,s),H.subVectors(qe,Pe),We.subVectors(Qe,Pe),H.cross(We),H.normalize(),o.push(H.x,H.y,H.z),o.push(H.x,H.y,H.z),o.push(H.x,H.y,H.z)},addColor:function(e,t,s){const n=this.colors,o=this.object.geometry.colors;n[e]!==void 0&&o.push(n[e+0],n[e+1],n[e+2]),n[t]!==void 0&&o.push(n[t+0],n[t+1],n[t+2]),n[s]!==void 0&&o.push(n[s+0],n[s+1],n[s+2])},addUV:function(e,t,s){const n=this.uvs,o=this.object.geometry.uvs;o.push(n[e+0],n[e+1]),o.push(n[t+0],n[t+1]),o.push(n[s+0],n[s+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,s,n,o,i,l,c,d){const p=this.vertices.length;let u=this.parseVertexIndex(e,p),f=this.parseVertexIndex(t,p),y=this.parseVertexIndex(s,p);if(this.addVertex(u,f,y),this.addColor(u,f,y),l!==void 0&&l!==""){const w=this.normals.length;u=this.parseNormalIndex(l,w),f=this.parseNormalIndex(c,w),y=this.parseNormalIndex(d,w),this.addNormal(u,f,y)}else this.addFaceNormal(u,f,y);if(n!==void 0&&n!==""){const w=this.uvs.length;u=this.parseUVIndex(n,w),f=this.parseUVIndex(o,w),y=this.parseUVIndex(i,w),this.addUV(u,f,y),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let s=0,n=e.length;s<n;s++){const o=this.parseVertexIndex(e[s],t);this.addVertexPoint(o),this.addColor(o)}},addLineGeometry:function(e,t){this.object.geometry.type="Line";const s=this.vertices.length,n=this.uvs.length;for(let o=0,i=e.length;o<i;o++)this.addVertexLine(this.parseVertexIndex(e[o],s));for(let o=0,i=t.length;o<i;o++)this.addUVLine(this.parseUVIndex(t[o],n))}};return a.startObject("",!1),a}class En extends r.Loader{constructor(e){super(e),this.materials=null}load(e,t,s,n){const o=this,i=new r.FileLoader(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,function(l){try{t(o.parse(l))}catch(c){n?n(c):console.error(c),o.manager.itemError(e)}},s,n)}setMaterials(e){return this.materials=e,this}parse(e){const t=new wn;e.indexOf(`\r
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("vue"),r=require("three"),At=require("@tweenjs/tween.js");function Pt(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const D=Pt(r),Fe={type:"change"},ke={type:"start"},ot={type:"end"},ge=new r.Ray,He=new r.Plane,Lt=Math.cos(70*r.MathUtils.DEG2RAD),I=new r.Vector3,j=2*Math.PI,A={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},Se=1e-6;class Nt extends r.Controls{constructor(e,t=null){super(e,t),this.state=A.NONE,this.target=new r.Vector3,this.cursor=new r.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:r.MOUSE.ROTATE,MIDDLE:r.MOUSE.DOLLY,RIGHT:r.MOUSE.PAN},this.touches={ONE:r.TOUCH.ROTATE,TWO:r.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._cursorStyle="auto",this._domElementKeyEvents=null,this._lastPosition=new r.Vector3,this._lastQuaternion=new r.Quaternion,this._lastTargetPosition=new r.Vector3,this._quat=new r.Quaternion().setFromUnitVectors(e.up,new r.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new r.Spherical,this._sphericalDelta=new r.Spherical,this._scale=1,this._panOffset=new r.Vector3,this._rotateStart=new r.Vector2,this._rotateEnd=new r.Vector2,this._rotateDelta=new r.Vector2,this._panStart=new r.Vector2,this._panEnd=new r.Vector2,this._panDelta=new r.Vector2,this._dollyStart=new r.Vector2,this._dollyEnd=new r.Vector2,this._dollyDelta=new r.Vector2,this._dollyDirection=new r.Vector3,this._mouse=new r.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=It.bind(this),this._onPointerDown=Ct.bind(this),this._onPointerUp=Ot.bind(this),this._onContextMenu=Bt.bind(this),this._onMouseWheel=Vt.bind(this),this._onKeyDown=jt.bind(this),this._onTouchStart=Ft.bind(this),this._onTouchMove=Ht.bind(this),this._onMouseDown=Dt.bind(this),this._onMouseMove=kt.bind(this),this._interceptControlDown=Gt.bind(this),this._interceptControlUp=Ut.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}set cursorStyle(e){this._cursorStyle=e,e==="grab"?this.domElement.style.cursor="grab":this.domElement.style.cursor="auto"}get cursorStyle(){return this._cursorStyle}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=""}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(Fe),this.update(),this.state=A.NONE}pan(e,t){this._pan(e,t),this.update()}dollyIn(e){this._dollyIn(e),this.update()}dollyOut(e){this._dollyOut(e),this.update()}rotateLeft(e){this._rotateLeft(e),this.update()}rotateUp(e){this._rotateUp(e),this.update()}update(e=null){const t=this.object.position;I.copy(t).sub(this.target),I.applyQuaternion(this._quat),this._spherical.setFromVector3(I),this.autoRotate&&this.state===A.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let s=this.minAzimuthAngle,n=this.maxAzimuthAngle;isFinite(s)&&isFinite(n)&&(s<-Math.PI?s+=j:s>Math.PI&&(s-=j),n<-Math.PI?n+=j:n>Math.PI&&(n-=j),s<=n?this._spherical.theta=Math.max(s,Math.min(n,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(s+n)/2?Math.max(s,this._spherical.theta):Math.min(n,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let o=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const i=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),o=i!=this._spherical.radius}if(I.setFromSpherical(this._spherical),I.applyQuaternion(this._quatInverse),t.copy(this.target).add(I),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let i=null;if(this.object.isPerspectiveCamera){const l=I.length();i=this._clampDistance(l*this._scale);const c=l-i;this.object.position.addScaledVector(this._dollyDirection,c),this.object.updateMatrixWorld(),o=!!c}else if(this.object.isOrthographicCamera){const l=new r.Vector3(this._mouse.x,this._mouse.y,0);l.unproject(this.object);const c=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),o=c!==this.object.zoom;const d=new r.Vector3(this._mouse.x,this._mouse.y,0);d.unproject(this.object),this.object.position.sub(d).add(l),this.object.updateMatrixWorld(),i=I.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;i!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(i).add(this.object.position):(ge.origin.copy(this.object.position),ge.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(ge.direction))<Lt?this.object.lookAt(this.target):(He.setFromNormalAndCoplanarPoint(this.object.up,this.target),ge.intersectPlane(He,this.target))))}else if(this.object.isOrthographicCamera){const i=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),i!==this.object.zoom&&(this.object.updateProjectionMatrix(),o=!0)}return this._scale=1,this._performCursorZoom=!1,o||this._lastPosition.distanceToSquared(this.object.position)>Se||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Se||this._lastTargetPosition.distanceToSquared(this.target)>Se?(this.dispatchEvent(Fe),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?j/60*this.autoRotateSpeed*e:j/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){I.setFromMatrixColumn(t,0),I.multiplyScalar(-e),this._panOffset.add(I)}_panUp(e,t){this.screenSpacePanning===!0?I.setFromMatrixColumn(t,1):(I.setFromMatrixColumn(t,0),I.crossVectors(this.object.up,I)),I.multiplyScalar(e),this._panOffset.add(I)}_pan(e,t){const s=this.domElement;if(this.object.isPerspectiveCamera){const n=this.object.position;I.copy(n).sub(this.target);let o=I.length();o*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*o/s.clientHeight,this.object.matrix),this._panUp(2*t*o/s.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/s.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/s.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const s=this.domElement.getBoundingClientRect(),n=e-s.left,o=t-s.top,i=s.width,l=s.height;this._mouse.x=n/i*2-1,this._mouse.y=-(o/l)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(j*this._rotateDelta.x/t.clientHeight),this._rotateUp(j*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(j*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-j*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(j*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-j*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._rotateStart.set(s,n)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._panStart.set(s,n)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),s=e.pageX-t.x,n=e.pageY-t.y,o=Math.sqrt(s*s+n*n);this._dollyStart.set(0,o)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const s=this._getSecondPointerPosition(e),n=.5*(e.pageX+s.x),o=.5*(e.pageY+s.y);this._rotateEnd.set(n,o)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(j*this._rotateDelta.x/t.clientHeight),this._rotateUp(j*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),s=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);this._panEnd.set(s,n)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),s=e.pageX-t.x,n=e.pageY-t.y,o=Math.sqrt(s*s+n*n);this._dollyEnd.set(0,o),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const i=(e.pageX+t.x)*.5,l=(e.pageY+t.y)*.5;this._updateZoomParameters(i,l)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(e){let t=this._pointerPositions[e.pointerId];t===void 0&&(t=new r.Vector2,this._pointerPositions[e.pointerId]=t),t.set(e.pageX,e.pageY)}_getSecondPointerPosition(e){const t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){const t=e.deltaMode,s={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:s.deltaY*=16;break;case 2:s.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(s.deltaY*=10),s}}function Ct(a){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(a.pointerId),this.domElement.ownerDocument.addEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(a)&&(this._addPointer(a),a.pointerType==="touch"?this._onTouchStart(a):this._onMouseDown(a),this._cursorStyle==="grab"&&(this.domElement.style.cursor="grabbing")))}function It(a){this.enabled!==!1&&(a.pointerType==="touch"?this._onTouchMove(a):this._onMouseMove(a))}function Ot(a){switch(this._removePointer(a),this._pointers.length){case 0:this.domElement.releasePointerCapture(a.pointerId),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(ot),this.state=A.NONE,this._cursorStyle==="grab"&&(this.domElement.style.cursor="grab");break;case 1:const e=this._pointers[0],t=this._pointerPositions[e];this._onTouchStart({pointerId:e,pageX:t.x,pageY:t.y});break}}function Dt(a){let e;switch(a.button){case 0:e=this.mouseButtons.LEFT;break;case 1:e=this.mouseButtons.MIDDLE;break;case 2:e=this.mouseButtons.RIGHT;break;default:e=-1}switch(e){case r.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(a),this.state=A.DOLLY;break;case r.MOUSE.ROTATE:if(a.ctrlKey||a.metaKey||a.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(a),this.state=A.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(a),this.state=A.ROTATE}break;case r.MOUSE.PAN:if(a.ctrlKey||a.metaKey||a.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(a),this.state=A.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(a),this.state=A.PAN}break;default:this.state=A.NONE}this.state!==A.NONE&&this.dispatchEvent(ke)}function kt(a){switch(this.state){case A.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(a);break;case A.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(a);break;case A.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(a);break}}function Vt(a){this.enabled===!1||this.enableZoom===!1||this.state!==A.NONE||(a.preventDefault(),this.dispatchEvent(ke),this._handleMouseWheel(this._customWheelEvent(a)),this.dispatchEvent(ot))}function jt(a){this.enabled!==!1&&this._handleKeyDown(a)}function Ft(a){switch(this._trackPointer(a),this._pointers.length){case 1:switch(this.touches.ONE){case r.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(a),this.state=A.TOUCH_ROTATE;break;case r.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(a),this.state=A.TOUCH_PAN;break;default:this.state=A.NONE}break;case 2:switch(this.touches.TWO){case r.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(a),this.state=A.TOUCH_DOLLY_PAN;break;case r.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(a),this.state=A.TOUCH_DOLLY_ROTATE;break;default:this.state=A.NONE}break;default:this.state=A.NONE}this.state!==A.NONE&&this.dispatchEvent(ke)}function Ht(a){switch(this._trackPointer(a),this.state){case A.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(a),this.update();break;case A.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(a),this.update();break;case A.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(a),this.update();break;case A.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(a),this.update();break;default:this.state=A.NONE}}function Bt(a){this.enabled!==!1&&a.preventDefault()}function Gt(a){a.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function Ut(a){a.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}const $=new r.Raycaster,k=new r.Vector3,Q=new r.Vector3,N=new r.Quaternion,Be={X:new r.Vector3(1,0,0),Y:new r.Vector3(0,1,0),Z:new r.Vector3(0,0,1)},ve={type:"change"},Ge={type:"mouseDown",mode:null},Ue={type:"mouseUp",mode:null},ze={type:"objectChange"};class zt extends r.Controls{constructor(e,t=null){super(void 0,t);const s=new qt(this);this._root=s;const n=new Wt;this._gizmo=n,s.add(n);const o=new $t;this._plane=o,s.add(o);const i=this;function l(M,S){let R=S;Object.defineProperty(i,M,{get:function(){return R!==void 0?R:S},set:function(x){R!==x&&(R=x,o[M]=x,n[M]=x,i.dispatchEvent({type:M+"-changed",value:x}),i.dispatchEvent(ve))}}),i[M]=S,o[M]=S,n[M]=S}l("camera",e),l("object",void 0),l("enabled",!0),l("axis",null),l("mode","translate"),l("translationSnap",null),l("rotationSnap",null),l("scaleSnap",null),l("space","world"),l("size",1),l("dragging",!1),l("showX",!0),l("showY",!0),l("showZ",!0),l("showXY",!0),l("showYZ",!0),l("showXZ",!0),l("minX",-1/0),l("maxX",1/0),l("minY",-1/0),l("maxY",1/0),l("minZ",-1/0),l("maxZ",1/0);const c=new r.Vector3,d=new r.Vector3,p=new r.Quaternion,u=new r.Quaternion,f=new r.Vector3,y=new r.Quaternion,w=new r.Vector3,g=new r.Vector3,_=new r.Vector3,m=0,b=new r.Vector3;l("worldPosition",c),l("worldPositionStart",d),l("worldQuaternion",p),l("worldQuaternionStart",u),l("cameraPosition",f),l("cameraQuaternion",y),l("pointStart",w),l("pointEnd",g),l("rotationAxis",_),l("rotationAngle",m),l("eye",b),this._offset=new r.Vector3,this._startNorm=new r.Vector3,this._endNorm=new r.Vector3,this._cameraScale=new r.Vector3,this._parentPosition=new r.Vector3,this._parentQuaternion=new r.Quaternion,this._parentQuaternionInv=new r.Quaternion,this._parentScale=new r.Vector3,this._worldScaleStart=new r.Vector3,this._worldQuaternionInv=new r.Quaternion,this._worldScale=new r.Vector3,this._positionStart=new r.Vector3,this._quaternionStart=new r.Quaternion,this._scaleStart=new r.Vector3,this._getPointer=Xt.bind(this),this._onPointerDown=Kt.bind(this),this._onPointerHover=Yt.bind(this),this._onPointerMove=Zt.bind(this),this._onPointerUp=Qt.bind(this),t!==null&&this.connect(t)}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointermove",this._onPointerHover),this.domElement.addEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerHover),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.style.touchAction=""}getHelper(){return this._root}pointerHover(e){if(this.object===void 0||this.dragging===!0)return;e!==null&&$.setFromCamera(e,this.camera);const t=Re(this._gizmo.picker[this.mode],$);t?this.axis=t.object.name:this.axis=null}pointerDown(e){if(!(this.object===void 0||this.dragging===!0||e!=null&&e.button!==0)&&this.axis!==null){e!==null&&$.setFromCamera(e,this.camera);const t=Re(this._plane,$,!0);t&&(this.object.updateMatrixWorld(),this.object.parent.updateMatrixWorld(),this._positionStart.copy(this.object.position),this._quaternionStart.copy(this.object.quaternion),this._scaleStart.copy(this.object.scale),this.object.matrixWorld.decompose(this.worldPositionStart,this.worldQuaternionStart,this._worldScaleStart),this.pointStart.copy(t.point).sub(this.worldPositionStart)),this.dragging=!0,Ge.mode=this.mode,this.dispatchEvent(Ge)}}pointerMove(e){const t=this.axis,s=this.mode,n=this.object;let o=this.space;if(s==="scale"?o="local":(t==="E"||t==="XYZE"||t==="XYZ")&&(o="world"),n===void 0||t===null||this.dragging===!1||e!==null&&e.button!==-1)return;e!==null&&$.setFromCamera(e,this.camera);const i=Re(this._plane,$,!0);if(i){if(this.pointEnd.copy(i.point).sub(this.worldPositionStart),s==="translate")this._offset.copy(this.pointEnd).sub(this.pointStart),o==="local"&&t!=="XYZ"&&this._offset.applyQuaternion(this._worldQuaternionInv),t.indexOf("X")===-1&&(this._offset.x=0),t.indexOf("Y")===-1&&(this._offset.y=0),t.indexOf("Z")===-1&&(this._offset.z=0),o==="local"&&t!=="XYZ"?this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale):this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale),n.position.copy(this._offset).add(this._positionStart),this.translationSnap&&(o==="local"&&(n.position.applyQuaternion(N.copy(this._quaternionStart).invert()),t.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.position.applyQuaternion(this._quaternionStart)),o==="world"&&(n.parent&&n.position.add(k.setFromMatrixPosition(n.parent.matrixWorld)),t.search("X")!==-1&&(n.position.x=Math.round(n.position.x/this.translationSnap)*this.translationSnap),t.search("Y")!==-1&&(n.position.y=Math.round(n.position.y/this.translationSnap)*this.translationSnap),t.search("Z")!==-1&&(n.position.z=Math.round(n.position.z/this.translationSnap)*this.translationSnap),n.parent&&n.position.sub(k.setFromMatrixPosition(n.parent.matrixWorld)))),n.position.x=Math.max(this.minX,Math.min(this.maxX,n.position.x)),n.position.y=Math.max(this.minY,Math.min(this.maxY,n.position.y)),n.position.z=Math.max(this.minZ,Math.min(this.maxZ,n.position.z));else if(s==="scale"){if(t.search("XYZ")!==-1){let l=this.pointEnd.length()/this.pointStart.length();this.pointEnd.dot(this.pointStart)<0&&(l*=-1),Q.set(l,l,l)}else k.copy(this.pointStart),Q.copy(this.pointEnd),k.applyQuaternion(this._worldQuaternionInv),Q.applyQuaternion(this._worldQuaternionInv),Q.divide(k),t.search("X")===-1&&(Q.x=1),t.search("Y")===-1&&(Q.y=1),t.search("Z")===-1&&(Q.z=1);n.scale.copy(this._scaleStart).multiply(Q),this.scaleSnap&&(t.search("X")!==-1&&(n.scale.x=Math.round(n.scale.x/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Y")!==-1&&(n.scale.y=Math.round(n.scale.y/this.scaleSnap)*this.scaleSnap||this.scaleSnap),t.search("Z")!==-1&&(n.scale.z=Math.round(n.scale.z/this.scaleSnap)*this.scaleSnap||this.scaleSnap))}else if(s==="rotate"){this._offset.copy(this.pointEnd).sub(this.pointStart);const l=20/this.worldPosition.distanceTo(k.setFromMatrixPosition(this.camera.matrixWorld));let c=!1;t==="XYZE"?(this.rotationAxis.copy(this._offset).cross(this.eye).normalize(),this.rotationAngle=this._offset.dot(k.copy(this.rotationAxis).cross(this.eye))*l):(t==="X"||t==="Y"||t==="Z")&&(this.rotationAxis.copy(Be[t]),k.copy(Be[t]),o==="local"&&k.applyQuaternion(this.worldQuaternion),k.cross(this.eye),k.length()===0?c=!0:this.rotationAngle=this._offset.dot(k.normalize())*l),(t==="E"||c)&&(this.rotationAxis.copy(this.eye),this.rotationAngle=this.pointEnd.angleTo(this.pointStart),this._startNorm.copy(this.pointStart).normalize(),this._endNorm.copy(this.pointEnd).normalize(),this.rotationAngle*=this._endNorm.cross(this._startNorm).dot(this.eye)<0?1:-1),this.rotationSnap&&(this.rotationAngle=Math.round(this.rotationAngle/this.rotationSnap)*this.rotationSnap),o==="local"&&t!=="E"&&t!=="XYZE"?(n.quaternion.copy(this._quaternionStart),n.quaternion.multiply(N.setFromAxisAngle(this.rotationAxis,this.rotationAngle)).normalize()):(this.rotationAxis.applyQuaternion(this._parentQuaternionInv),n.quaternion.copy(N.setFromAxisAngle(this.rotationAxis,this.rotationAngle)),n.quaternion.multiply(this._quaternionStart).normalize())}this.dispatchEvent(ve),this.dispatchEvent(ze)}}pointerUp(e){e!==null&&e.button!==0||(this.dragging&&this.axis!==null&&(Ue.mode=this.mode,this.dispatchEvent(Ue)),this.dragging=!1,this.axis=null)}dispose(){this.disconnect(),this._root.dispose()}attach(e){return this.object=e,this._root.visible=!0,this}detach(){return this.object=void 0,this.axis=null,this._root.visible=!1,this}reset(){this.enabled&&this.dragging&&(this.object.position.copy(this._positionStart),this.object.quaternion.copy(this._quaternionStart),this.object.scale.copy(this._scaleStart),this.dispatchEvent(ve),this.dispatchEvent(ze),this.pointStart.copy(this.pointEnd))}getRaycaster(){return $}getMode(){return this.mode}setMode(e){this.mode=e}setTranslationSnap(e){this.translationSnap=e}setRotationSnap(e){this.rotationSnap=e}setScaleSnap(e){this.scaleSnap=e}setSize(e){this.size=e}setSpace(e){this.space=e}setColors(e,t,s,n){const o=this._gizmo.materialLib;o.xAxis.color.set(e),o.yAxis.color.set(t),o.zAxis.color.set(s),o.active.color.set(n),o.xAxisTransparent.color.set(e),o.yAxisTransparent.color.set(t),o.zAxisTransparent.color.set(s),o.activeTransparent.color.set(n),o.xAxis._color&&o.xAxis._color.set(e),o.yAxis._color&&o.yAxis._color.set(t),o.zAxis._color&&o.zAxis._color.set(s),o.active._color&&o.active._color.set(n),o.xAxisTransparent._color&&o.xAxisTransparent._color.set(e),o.yAxisTransparent._color&&o.yAxisTransparent._color.set(t),o.zAxisTransparent._color&&o.zAxisTransparent._color.set(s),o.activeTransparent._color&&o.activeTransparent._color.set(n)}}function Xt(a){if(this.domElement.ownerDocument.pointerLockElement)return{x:0,y:0,button:a.button};{const e=this.domElement.getBoundingClientRect();return{x:(a.clientX-e.left)/e.width*2-1,y:-(a.clientY-e.top)/e.height*2+1,button:a.button}}}function Yt(a){if(this.enabled)switch(a.pointerType){case"mouse":case"pen":this.pointerHover(this._getPointer(a));break}}function Kt(a){this.enabled&&(document.pointerLockElement||this.domElement.setPointerCapture(a.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.pointerHover(this._getPointer(a)),this.pointerDown(this._getPointer(a)))}function Zt(a){this.enabled&&this.pointerMove(this._getPointer(a))}function Qt(a){this.enabled&&(this.domElement.releasePointerCapture(a.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.pointerUp(this._getPointer(a)))}function Re(a,e,t){const s=e.intersectObject(a,!0);for(let n=0;n<s.length;n++)if(s[n].object.visible||t)return s[n];return!1}const ye=new r.Euler,P=new r.Vector3(0,1,0),Xe=new r.Vector3(0,0,0),Ye=new r.Matrix4,_e=new r.Quaternion,Ee=new r.Quaternion,X=new r.Vector3,Ke=new r.Matrix4,ce=new r.Vector3(1,0,0),ee=new r.Vector3(0,1,0),he=new r.Vector3(0,0,1),be=new r.Vector3,re=new r.Vector3,ae=new r.Vector3;class qt extends r.Object3D{constructor(e){super(),this.isTransformControlsRoot=!0,this.controls=e,this.visible=!1}updateMatrixWorld(e){const t=this.controls;t.object!==void 0&&(t.object.updateMatrixWorld(),t.object.parent===null?console.error("TransformControls: The attached 3D object must be a part of the scene graph."):t.object.parent.matrixWorld.decompose(t._parentPosition,t._parentQuaternion,t._parentScale),t.object.matrixWorld.decompose(t.worldPosition,t.worldQuaternion,t._worldScale),t._parentQuaternionInv.copy(t._parentQuaternion).invert(),t._worldQuaternionInv.copy(t.worldQuaternion).invert()),t.camera.updateMatrixWorld(),t.camera.matrixWorld.decompose(t.cameraPosition,t.cameraQuaternion,t._cameraScale),t.camera.isOrthographicCamera?t.camera.getWorldDirection(t.eye).negate():t.eye.copy(t.cameraPosition).sub(t.worldPosition).normalize(),super.updateMatrixWorld(e)}dispose(){this.traverse(function(e){e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()})}}class Wt extends r.Object3D{constructor(){super(),this.isTransformControlsGizmo=!0,this.type="TransformControlsGizmo";const e=new r.MeshBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),t=new r.LineBasicMaterial({depthTest:!1,depthWrite:!1,fog:!1,toneMapped:!1,transparent:!0}),s=e.clone();s.opacity=.15;const n=t.clone();n.opacity=.5;const o=e.clone();o.color.setHex(16711680);const i=e.clone();i.color.setHex(65280);const l=e.clone();l.color.setHex(255);const c=e.clone();c.color.setHex(16711680),c.opacity=.5;const d=e.clone();d.color.setHex(65280),d.opacity=.5;const p=e.clone();p.color.setHex(255),p.opacity=.5;const u=e.clone();u.opacity=.25;const f=e.clone();f.color.setHex(16776960),f.opacity=.25;const y=e.clone();y.color.setHex(16776960);const w=e.clone();w.color.setHex(7895160),this.materialLib={xAxis:o,yAxis:i,zAxis:l,active:y,xAxisTransparent:c,yAxisTransparent:d,zAxisTransparent:p,activeTransparent:f};const g=new r.CylinderGeometry(0,.04,.1,12);g.translate(0,.05,0);const _=new r.BoxGeometry(.08,.08,.08);_.translate(0,.04,0);const m=new r.BufferGeometry;m.setAttribute("position",new r.Float32BufferAttribute([0,0,0,1,0,0],3));const b=new r.CylinderGeometry(.0075,.0075,.5,3);b.translate(0,.25,0);function M(F,de){const U=new r.TorusGeometry(F,.0075,3,64,de*Math.PI*2);return U.rotateY(Math.PI/2),U.rotateX(Math.PI/2),U}function S(){const F=new r.BufferGeometry;return F.setAttribute("position",new r.Float32BufferAttribute([0,0,0,1,1,1],3)),F}const R={X:[[new r.Mesh(g,o),[.5,0,0],[0,0,-Math.PI/2]],[new r.Mesh(g,o),[-.5,0,0],[0,0,Math.PI/2]],[new r.Mesh(b,o),[0,0,0],[0,0,-Math.PI/2]]],Y:[[new r.Mesh(g,i),[0,.5,0]],[new r.Mesh(g,i),[0,-.5,0],[Math.PI,0,0]],[new r.Mesh(b,i)]],Z:[[new r.Mesh(g,l),[0,0,.5],[Math.PI/2,0,0]],[new r.Mesh(g,l),[0,0,-.5],[-Math.PI/2,0,0]],[new r.Mesh(b,l),null,[Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.OctahedronGeometry(.1,0),u),[0,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),p),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),c),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),d),[.15,0,.15],[-Math.PI/2,0,0]]]},x={X:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[.3,0,0],[0,0,-Math.PI/2]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,.3,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,-.3,0],[0,0,Math.PI]]],Z:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,0,.3],[Math.PI/2,0,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,0,-.3],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.OctahedronGeometry(.2,0),s)]],XY:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[.15,0,.15],[-Math.PI/2,0,0]]]},L={START:[[new r.Mesh(new r.OctahedronGeometry(.01,2),n),null,null,null,"helper"]],END:[[new r.Mesh(new r.OctahedronGeometry(.01,2),n),null,null,null,"helper"]],DELTA:[[new r.Line(S(),n),null,null,null,"helper"]],X:[[new r.Line(m,n),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new r.Line(m,n),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new r.Line(m,n),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]},K={XYZE:[[new r.Mesh(M(.5,1),w),null,[0,Math.PI/2,0]]],X:[[new r.Mesh(M(.5,.5),o)]],Y:[[new r.Mesh(M(.5,.5),i),null,[0,0,-Math.PI/2]]],Z:[[new r.Mesh(M(.5,.5),l),null,[0,Math.PI/2,0]]],E:[[new r.Mesh(M(.75,1),f),null,[0,Math.PI/2,0]]]},z={AXIS:[[new r.Line(m,n),[-1e3,0,0],null,[1e6,1,1],"helper"]]},W={XYZE:[[new r.Mesh(new r.SphereGeometry(.25,10,8),s)]],X:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),s),[0,0,0],[0,-Math.PI/2,-Math.PI/2]]],Y:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),s),[0,0,0],[Math.PI/2,0,0]]],Z:[[new r.Mesh(new r.TorusGeometry(.5,.1,4,24),s),[0,0,0],[0,0,-Math.PI/2]]],E:[[new r.Mesh(new r.TorusGeometry(.75,.1,2,24),s)]]},G={X:[[new r.Mesh(_,o),[.5,0,0],[0,0,-Math.PI/2]],[new r.Mesh(b,o),[0,0,0],[0,0,-Math.PI/2]],[new r.Mesh(_,o),[-.5,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(_,i),[0,.5,0]],[new r.Mesh(b,i)],[new r.Mesh(_,i),[0,-.5,0],[0,0,Math.PI]]],Z:[[new r.Mesh(_,l),[0,0,.5],[Math.PI/2,0,0]],[new r.Mesh(b,l),[0,0,0],[Math.PI/2,0,0]],[new r.Mesh(_,l),[0,0,-.5],[-Math.PI/2,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),p),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),c),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.15,.15,.01),d),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.BoxGeometry(.1,.1,.1),u)]]},T={X:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[.3,0,0],[0,0,-Math.PI/2]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[-.3,0,0],[0,0,Math.PI/2]]],Y:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,.3,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,-.3,0],[0,0,Math.PI]]],Z:[[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,0,.3],[Math.PI/2,0,0]],[new r.Mesh(new r.CylinderGeometry(.2,0,.6,4),s),[0,0,-.3],[-Math.PI/2,0,0]]],XY:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[.15,.15,0]]],YZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[0,.15,.15],[0,Math.PI/2,0]]],XZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.01),s),[.15,0,.15],[-Math.PI/2,0,0]]],XYZ:[[new r.Mesh(new r.BoxGeometry(.2,.2,.2),s),[0,0,0]]]},O={X:[[new r.Line(m,n),[-1e3,0,0],null,[1e6,1,1],"helper"]],Y:[[new r.Line(m,n),[0,-1e3,0],[0,0,Math.PI/2],[1e6,1,1],"helper"]],Z:[[new r.Line(m,n),[0,0,-1e3],[0,-Math.PI/2,0],[1e6,1,1],"helper"]]};function Z(F){const de=new r.Object3D;for(const U in F)for(let se=F[U].length;se--;){const V=F[U][se][0].clone(),pe=F[U][se][1],me=F[U][se][2],fe=F[U][se][3],Rt=F[U][se][4];V.name=U,V.tag=Rt,pe&&V.position.set(pe[0],pe[1],pe[2]),me&&V.rotation.set(me[0],me[1],me[2]),fe&&V.scale.set(fe[0],fe[1],fe[2]),V.updateMatrix();const je=V.geometry.clone();je.applyMatrix4(V.matrix),V.geometry=je,V.renderOrder=1/0,V.position.set(0,0,0),V.rotation.set(0,0,0),V.scale.set(1,1,1),de.add(V)}return de}this.gizmo={},this.picker={},this.helper={},this.add(this.gizmo.translate=Z(R)),this.add(this.gizmo.rotate=Z(K)),this.add(this.gizmo.scale=Z(G)),this.add(this.picker.translate=Z(x)),this.add(this.picker.rotate=Z(W)),this.add(this.picker.scale=Z(T)),this.add(this.helper.translate=Z(L)),this.add(this.helper.rotate=Z(z)),this.add(this.helper.scale=Z(O)),this.picker.translate.visible=!1,this.picker.rotate.visible=!1,this.picker.scale.visible=!1}updateMatrixWorld(e){const s=(this.mode==="scale"?"local":this.space)==="local"?this.worldQuaternion:Ee;this.gizmo.translate.visible=this.mode==="translate",this.gizmo.rotate.visible=this.mode==="rotate",this.gizmo.scale.visible=this.mode==="scale",this.helper.translate.visible=this.mode==="translate",this.helper.rotate.visible=this.mode==="rotate",this.helper.scale.visible=this.mode==="scale";let n=[];n=n.concat(this.picker[this.mode].children),n=n.concat(this.gizmo[this.mode].children),n=n.concat(this.helper[this.mode].children);for(let o=0;o<n.length;o++){const i=n[o];i.visible=!0,i.rotation.set(0,0,0),i.position.copy(this.worldPosition);let l;if(this.camera.isOrthographicCamera?l=(this.camera.top-this.camera.bottom)/this.camera.zoom:l=this.worldPosition.distanceTo(this.cameraPosition)*Math.min(1.9*Math.tan(Math.PI*this.camera.fov/360)/this.camera.zoom,7),i.scale.set(1,1,1).multiplyScalar(l*this.size/4),i.tag==="helper"){i.visible=!1,i.name==="AXIS"?(i.visible=!!this.axis,this.axis==="X"&&(N.setFromEuler(ye.set(0,0,0)),i.quaternion.copy(s).multiply(N),Math.abs(P.copy(ce).applyQuaternion(s).dot(this.eye))>.9&&(i.visible=!1)),this.axis==="Y"&&(N.setFromEuler(ye.set(0,0,Math.PI/2)),i.quaternion.copy(s).multiply(N),Math.abs(P.copy(ee).applyQuaternion(s).dot(this.eye))>.9&&(i.visible=!1)),this.axis==="Z"&&(N.setFromEuler(ye.set(0,Math.PI/2,0)),i.quaternion.copy(s).multiply(N),Math.abs(P.copy(he).applyQuaternion(s).dot(this.eye))>.9&&(i.visible=!1)),this.axis==="XYZE"&&(N.setFromEuler(ye.set(0,Math.PI/2,0)),P.copy(this.rotationAxis),i.quaternion.setFromRotationMatrix(Ye.lookAt(Xe,P,ee)),i.quaternion.multiply(N),i.visible=this.dragging),this.axis==="E"&&(i.visible=!1)):i.name==="START"?(i.position.copy(this.worldPositionStart),i.visible=this.dragging):i.name==="END"?(i.position.copy(this.worldPosition),i.visible=this.dragging):i.name==="DELTA"?(i.position.copy(this.worldPositionStart),i.quaternion.copy(this.worldQuaternionStart),k.set(1e-10,1e-10,1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1),k.applyQuaternion(this.worldQuaternionStart.clone().invert()),i.scale.copy(k),i.visible=this.dragging):(i.quaternion.copy(s),this.dragging?i.position.copy(this.worldPositionStart):i.position.copy(this.worldPosition),this.axis&&(i.visible=this.axis.search(i.name)!==-1));continue}i.quaternion.copy(s),this.mode==="translate"||this.mode==="scale"?(i.name==="X"&&Math.abs(P.copy(ce).applyQuaternion(s).dot(this.eye))>.99&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="Y"&&Math.abs(P.copy(ee).applyQuaternion(s).dot(this.eye))>.99&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="Z"&&Math.abs(P.copy(he).applyQuaternion(s).dot(this.eye))>.99&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="XY"&&Math.abs(P.copy(he).applyQuaternion(s).dot(this.eye))<.2&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="YZ"&&Math.abs(P.copy(ce).applyQuaternion(s).dot(this.eye))<.2&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1),i.name==="XZ"&&Math.abs(P.copy(ee).applyQuaternion(s).dot(this.eye))<.2&&(i.scale.set(1e-10,1e-10,1e-10),i.visible=!1)):this.mode==="rotate"&&(_e.copy(s),P.copy(this.eye).applyQuaternion(N.copy(s).invert()),i.name.search("E")!==-1&&i.quaternion.setFromRotationMatrix(Ye.lookAt(this.eye,Xe,ee)),i.name==="X"&&(N.setFromAxisAngle(ce,Math.atan2(-P.y,P.z)),N.multiplyQuaternions(_e,N),i.quaternion.copy(N)),i.name==="Y"&&(N.setFromAxisAngle(ee,Math.atan2(P.x,P.z)),N.multiplyQuaternions(_e,N),i.quaternion.copy(N)),i.name==="Z"&&(N.setFromAxisAngle(he,Math.atan2(P.y,P.x)),N.multiplyQuaternions(_e,N),i.quaternion.copy(N))),i.visible=i.visible&&(i.name.indexOf("X")===-1||this.showX),i.visible=i.visible&&(i.name.indexOf("Y")===-1||this.showY),i.visible=i.visible&&(i.name.indexOf("Z")===-1||this.showZ),i.visible=i.visible&&(i.name.indexOf("E")===-1||this.showX&&this.showY&&this.showZ),i.visible=i.visible&&(i.name.indexOf("XY")===-1||this.showXY),i.visible=i.visible&&(i.name.indexOf("YZ")===-1||this.showYZ),i.visible=i.visible&&(i.name.indexOf("XZ")===-1||this.showXZ),i.material._color=i.material._color||i.material.color.clone(),i.material._opacity=i.material._opacity||i.material.opacity,i.material.color.copy(i.material._color),i.material.opacity=i.material._opacity,this.enabled&&this.axis&&(i.name===this.axis?(i.material.color.copy(this.materialLib.active.color),i.material.opacity=1):this.axis.split("").some(function(c){return i.name===c})&&(i.material.color.copy(this.materialLib.active.color),i.material.opacity=1))}super.updateMatrixWorld(e)}}class $t extends r.Mesh{constructor(){super(new r.PlaneGeometry(1e5,1e5,2,2),new r.MeshBasicMaterial({visible:!1,wireframe:!0,side:r.DoubleSide,transparent:!0,opacity:.1,toneMapped:!1})),this.isTransformControlsPlane=!0,this.type="TransformControlsPlane"}updateMatrixWorld(e){let t=this.space;switch(this.position.copy(this.worldPosition),this.mode==="scale"&&(t="local"),be.copy(ce).applyQuaternion(t==="local"?this.worldQuaternion:Ee),re.copy(ee).applyQuaternion(t==="local"?this.worldQuaternion:Ee),ae.copy(he).applyQuaternion(t==="local"?this.worldQuaternion:Ee),P.copy(re),this.mode){case"translate":case"scale":switch(this.axis){case"X":P.copy(this.eye).cross(be),X.copy(be).cross(P);break;case"Y":P.copy(this.eye).cross(re),X.copy(re).cross(P);break;case"Z":P.copy(this.eye).cross(ae),X.copy(ae).cross(P);break;case"XY":X.copy(ae);break;case"YZ":X.copy(be);break;case"XZ":P.copy(ae),X.copy(re);break;case"XYZ":case"E":X.set(0,0,0);break}break;case"rotate":default:X.set(0,0,0)}X.length()===0?this.quaternion.copy(this.cameraQuaternion):(Ke.lookAt(k.set(0,0,0),X,P),this.quaternion.setFromRotationMatrix(Ke)),super.updateMatrixWorld(e)}}const E={mode:"",scene:null,camera:null,renderer:null,orbitControls:null,transformControls:null,container:null,gridHelper:null,selectedObject:null};let Ae=!1,ie=!1,te=null,Ie=null,Me=null,ne=[];function it(a,e="edit",t){if(E.container=a,E.mode=e,Jt(),en(),nn(),t){mt(t.scene,e);const s=t.camera;E.camera.position.set(s.position.x,s.position.y,s.position.z),E.camera.rotation.set(s.rotation._x,s.rotation._y,s.rotation._z)}on(),sn(),un(),rt(),e==="edit"&&a.addEventListener("click",ln),window.addEventListener("resize",an),t||rn(),e==="edit"&&tn()}function Jt(){const a=new D.WebGLRenderer({antialias:!0,alpha:!0});a.setSize(E.container.clientWidth,E.container.clientHeight),a.setPixelRatio(Math.min(window.devicePixelRatio,2)),E.container.appendChild(a.domElement),E.renderer=a}function en(){E.scene=new D.Scene,E.scene.name="sl_scene"}function tn(){const a=new D.GridHelper(30,30,8956671,3364232);a.name="地板",a.userData.type="initFloor",E.scene.add(a),E.gridHelper=a}function nn(){const a=E.container,e=a.clientWidth/a.clientHeight,t=new D.PerspectiveCamera(45,e,.1,1e3);t.position.set(0,6,15),t.lookAt(0,0,0),E.camera=t}function sn(){const a=new Nt(E.camera,E.renderer.domElement);a.minDistance=0,a.maxDistance=1/0,a.addEventListener("start",()=>{Ae=!1}),a.addEventListener("change",()=>{Ae=!0}),a.addEventListener("end",()=>{Ae&&(ie=!0,setTimeout(()=>{ie=!1},200))}),E.orbitControls=a}function on(){const a=new zt(E.camera,E.renderer.domElement);a.addEventListener("dragging-changed",e=>{E.orbitControls.enabled=!e.value,e.value||(ie=!0,setTimeout(()=>{ie=!1},200))}),a.addEventListener("objectChange",()=>{Ie&&E.selectedObject&&Ie(E.selectedObject)}),E.scene.add(a.getHelper()),E.transformControls=a}function rn(){const a=new D.AmbientLight(16777215,2);E.scene.add(a);const e=new D.DirectionalLight(16777215,3);e.position.set(48,104,138),E.scene.add(e)}function rt(){var a,e;requestAnimationFrame(rt),At.update(),(a=E.orbitControls)==null||a.update(),(e=E.renderer)==null||e.render(E.scene,E.camera)}function an(){if(!E.container||!E.camera||!E.renderer)return;const a=E.container.clientWidth,e=E.container.clientHeight;a===0||e===0||(E.camera.aspect=a/e,E.camera.updateProjectionMatrix(),E.renderer.setSize(a,e))}function Te(a){E.selectedObject!==a&&(E.selectedObject&&E.transformControls.detach(),E.selectedObject=a,E.transformControls.attach(a),E.transformControls.setMode("translate"),E.transformControls.showX=!0,E.transformControls.showY=!0,E.transformControls.showZ=!0,te==null||te(a))}function at(){E.selectedObject&&(E.transformControls.detach(),E.selectedObject=null,te==null||te(null))}function ln(a){if(ie){ie=!1;return}const e=E.renderer.domElement.getBoundingClientRect(),t=new D.Vector2((a.clientX-e.left)/e.width*2-1,-((a.clientY-e.top)/e.height)*2+1),s=new D.Raycaster;s.setFromCamera(t,E.camera);const n=[];E.scene.traverse(i=>{i.type==="Mesh"&&i.userData.isMovable&&n.push(i)});const o=s.intersectObjects(n);o.length>0?Te(o[0].object):at()}function xe(a,e=!1){E.scene.add(a),a.userData.isMovable&&(cn(a),Ve()),e&&E.mode==="edit"&&Te(a)}function lt(a){E.selectedObject===a&&at(),a.parent?a.parent.remove(a):E.scene.remove(a),hn(a),Ve()}function ct(a){const e=E.scene.getObjectByProperty("uuid",a);e&&lt(e)}function cn(a){a.userData.isMovable&&a.parent===E.scene&&(ne.includes(a)||ne.push(a))}function hn(a){const e=ne.indexOf(a);e!==-1&&ne.splice(e,1)}function un(){const a=[];E.scene.children.forEach(e=>{e.userData.isMovable&&a.push(e)}),ne=a,Ve()}function Ve(){Me==null||Me([...ne])}function ht(a){te=a}function ut(a){Ie=a}function dt(a){Me=a}function pt(){return ne}function dn(){return E.scene}function pn(){return E.camera}function mn(){return E.renderer}function fn(){var n,o;const a=E.scene;if(!a)return"{}";let e=a;e=a.clone(),e.children=e.children.filter(i=>i.userData.type!=="initFloor");const t=e.toJSON(),s={position:(n=E.camera)==null?void 0:n.position,rotation:(o=E.camera)==null?void 0:o.rotation};return JSON.stringify({scene:t,camera:s})}function mt(a,e="edit"){var o;const t=typeof a=="string"?JSON.parse(a):a,n=new D.ObjectLoader().parse(t);n.type==="Scene"?E.scene=n:(o=E.scene)==null||o.add(n)}const gn=/^[og]\s*(.+)?/,yn=/^mtllib /,_n=/^usemtl /,bn=/^usemap /,Ze=/\s+/,Qe=new r.Vector3,Pe=new r.Vector3,qe=new r.Vector3,We=new r.Vector3,H=new r.Vector3,we=new r.Color;function wn(){const a={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const s=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(n,o){const i=this._finalize(!1);i&&(i.inherited||i.groupCount<=0)&&this.materials.splice(i.index,1);const l={index:this.materials.length,name:n||"",mtllib:Array.isArray(o)&&o.length>0?o[o.length-1]:"",smooth:i!==void 0?i.smooth:this.smooth,groupStart:i!==void 0?i.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(c){const d={index:typeof c=="number"?c:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return d.clone=this.clone.bind(d),d}};return this.materials.push(l),l},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(n){const o=this.currentMaterial();if(o&&o.groupEnd===-1&&(o.groupEnd=this.geometry.vertices.length/3,o.groupCount=o.groupEnd-o.groupStart,o.inherited=!1),n&&this.materials.length>1)for(let i=this.materials.length-1;i>=0;i--)this.materials[i].groupCount<=0&&this.materials.splice(i,1);return n&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),o}},s&&s.name&&typeof s.clone=="function"){const n=s.clone(0);n.inherited=!0,this.object.materials.push(n)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/3)*3},parseNormalIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/3)*3},parseUVIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/2)*2},addVertex:function(e,t,s){const n=this.vertices,o=this.object.geometry.vertices;o.push(n[e+0],n[e+1],n[e+2]),o.push(n[t+0],n[t+1],n[t+2]),o.push(n[s+0],n[s+1],n[s+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,s){const n=this.normals,o=this.object.geometry.normals;o.push(n[e+0],n[e+1],n[e+2]),o.push(n[t+0],n[t+1],n[t+2]),o.push(n[s+0],n[s+1],n[s+2])},addFaceNormal:function(e,t,s){const n=this.vertices,o=this.object.geometry.normals;Qe.fromArray(n,e),Pe.fromArray(n,t),qe.fromArray(n,s),H.subVectors(qe,Pe),We.subVectors(Qe,Pe),H.cross(We),H.normalize(),o.push(H.x,H.y,H.z),o.push(H.x,H.y,H.z),o.push(H.x,H.y,H.z)},addColor:function(e,t,s){const n=this.colors,o=this.object.geometry.colors;n[e]!==void 0&&o.push(n[e+0],n[e+1],n[e+2]),n[t]!==void 0&&o.push(n[t+0],n[t+1],n[t+2]),n[s]!==void 0&&o.push(n[s+0],n[s+1],n[s+2])},addUV:function(e,t,s){const n=this.uvs,o=this.object.geometry.uvs;o.push(n[e+0],n[e+1]),o.push(n[t+0],n[t+1]),o.push(n[s+0],n[s+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,s,n,o,i,l,c,d){const p=this.vertices.length;let u=this.parseVertexIndex(e,p),f=this.parseVertexIndex(t,p),y=this.parseVertexIndex(s,p);if(this.addVertex(u,f,y),this.addColor(u,f,y),l!==void 0&&l!==""){const w=this.normals.length;u=this.parseNormalIndex(l,w),f=this.parseNormalIndex(c,w),y=this.parseNormalIndex(d,w),this.addNormal(u,f,y)}else this.addFaceNormal(u,f,y);if(n!==void 0&&n!==""){const w=this.uvs.length;u=this.parseUVIndex(n,w),f=this.parseUVIndex(o,w),y=this.parseUVIndex(i,w),this.addUV(u,f,y),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let s=0,n=e.length;s<n;s++){const o=this.parseVertexIndex(e[s],t);this.addVertexPoint(o),this.addColor(o)}},addLineGeometry:function(e,t){this.object.geometry.type="Line";const s=this.vertices.length,n=this.uvs.length;for(let o=0,i=e.length;o<i;o++)this.addVertexLine(this.parseVertexIndex(e[o],s));for(let o=0,i=t.length;o<i;o++)this.addUVLine(this.parseUVIndex(t[o],n))}};return a.startObject("",!1),a}class En extends r.Loader{constructor(e){super(e),this.materials=null}load(e,t,s,n){const o=this,i=new r.FileLoader(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,function(l){try{t(o.parse(l))}catch(c){n?n(c):console.error(c),o.manager.itemError(e)}},s,n)}setMaterials(e){return this.materials=e,this}parse(e){const t=new wn;e.indexOf(`\r
2
2
  `)!==-1&&(e=e.replace(/\r\n/g,`
3
3
  `)),e.indexOf(`\\
4
4
  `)!==-1&&(e=e.replace(/\\\n/g,""));const s=e.split(`