@realsee/five 6.8.1 → 6.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/docs/assets/hierarchy.js +1 -1
  2. package/docs/assets/navigation.js +1 -1
  3. package/docs/assets/search.js +1 -1
  4. package/docs/classes/five.AdaptiveLuminancePass.html +1 -1
  5. package/docs/classes/five.BoundingMesh.html +1 -1
  6. package/docs/classes/five.EyeDomeLightingPass.html +1 -1
  7. package/docs/classes/five.Five.html +1 -1
  8. package/docs/classes/five.FivePass.html +1 -1
  9. package/docs/classes/five.Model.html +1 -1
  10. package/docs/classes/five.ModelScene.html +1 -1
  11. package/docs/classes/five.PBMContainer.html +1 -1
  12. package/docs/classes/five.PBMCustomShader.html +1 -1
  13. package/docs/classes/five.PBMGSObject.html +1 -1
  14. package/docs/classes/five.PBMGroup.html +1 -1
  15. package/docs/classes/five.PBMMesh.html +1 -1
  16. package/docs/classes/five.PBMMeshMaterial.html +1 -1
  17. package/docs/classes/five.PBMPanoFilter.html +1 -1
  18. package/docs/classes/five.PBMPointCloud.html +1 -1
  19. package/docs/classes/five.PBMPointCloudMaterial.html +1 -1
  20. package/docs/classes/five.PBMSkinnedMesh.html +1 -1
  21. package/docs/classes/five.PBMUpdateable.html +1 -1
  22. package/docs/classes/five.PanoCircleMesh.html +1 -1
  23. package/docs/classes/five.PanoCircleMeshCustom.html +1 -1
  24. package/docs/classes/five.PanoCircleMeshSolid.html +1 -1
  25. package/docs/classes/five.Parameter.html +1 -1
  26. package/docs/classes/five.Tile3D.html +1 -1
  27. package/docs/classes/five.TileNode.html +1 -1
  28. package/docs/classes/five.TrajectoryNode.html +1 -1
  29. package/docs/classes/five.WorkResolvedObserver.html +1 -1
  30. package/docs/classes/gltf-loader.DDSLoader.html +1 -1
  31. package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
  32. package/docs/classes/gltf-loader.GLTFObject.html +1 -1
  33. package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
  34. package/docs/classes/line.LineGeometry.html +1 -1
  35. package/docs/classes/line.LineMaterial.html +1 -1
  36. package/docs/classes/line.LineSegmentsGeometry.html +1 -1
  37. package/docs/classes/line.THREE_Line2.html +1 -1
  38. package/docs/classes/line.THREE_LineSegments2.html +1 -1
  39. package/docs/classes/plugins.CSS2DObject.html +1 -1
  40. package/docs/classes/plugins.CSS3DObject.html +1 -1
  41. package/docs/classes/plugins.CSS3DSprite.html +1 -1
  42. package/docs/classes/plugins.InstancedPrefabBufferGeometry.html +18 -0
  43. package/docs/classes/plugins.Object3DHelperController.html +1 -1
  44. package/docs/classes/plugins.PointBufferGeometry.html +12 -0
  45. package/docs/classes/plugins.PrefabBufferGeometry.html +24 -0
  46. package/docs/classes/plugins.RoundedBoxGeometry.html +1 -1
  47. package/docs/classes/vfx.Airflow.html +1 -1
  48. package/docs/classes/vfx.Flame.html +1 -1
  49. package/docs/classes/vfx.Particle.html +1 -1
  50. package/docs/classes/vfx.ParticleGPU.html +1 -1
  51. package/docs/classes/vfx.SpotLight.html +1 -1
  52. package/docs/functions/react.useFivePlugin.html +5 -4
  53. package/docs/hierarchy.html +1 -1
  54. package/docs/interfaces/five.AddableObject.html +1 -1
  55. package/docs/interfaces/five.EventCallback.html +1 -1
  56. package/docs/interfaces/five.GestureEvent.html +13 -13
  57. package/docs/interfaces/five.GesturePointer.html +9 -9
  58. package/docs/interfaces/five.ImageOptions.html +1 -1
  59. package/docs/interfaces/five.IntersectMesh.html +1 -1
  60. package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
  61. package/docs/interfaces/five.Intersection.html +1 -1
  62. package/docs/interfaces/five.LooseWorkWithExtrinsics.html +1 -1
  63. package/docs/interfaces/five.ModeChangeEvent.html +2 -2
  64. package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
  65. package/docs/interfaces/five.ModelEvent.html +3 -3
  66. package/docs/interfaces/five.ModelSceneEvent.html +2 -2
  67. package/docs/interfaces/five.ModelTileEvent.html +3 -3
  68. package/docs/interfaces/five.MovePanoOptions.html +1 -1
  69. package/docs/interfaces/five.NetworkResourceEvent.html +2 -2
  70. package/docs/interfaces/five.ObjectEvent.html +2 -2
  71. package/docs/interfaces/five.PBMMaterial.html +1 -1
  72. package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
  73. package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
  74. package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
  75. package/docs/interfaces/five.PanoPrepareEvent.html +8 -4
  76. package/docs/interfaces/five.PanoTextureEvent.html +5 -5
  77. package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +9 -9
  78. package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
  79. package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
  80. package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
  81. package/docs/interfaces/five.ParameterValue.html +1 -1
  82. package/docs/interfaces/five.Pose.html +1 -1
  83. package/docs/interfaces/five.RenderEvent.html +2 -2
  84. package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
  85. package/docs/interfaces/five.State.html +1 -1
  86. package/docs/interfaces/five.StateEvent.html +1 -1
  87. package/docs/interfaces/five.TextureOptions.html +1 -1
  88. package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +1 -1
  89. package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +9 -9
  90. package/docs/interfaces/five.ViewLayer.html +1 -1
  91. package/docs/interfaces/five.WorkCubeImage.html +1 -1
  92. package/docs/interfaces/five.WorkImage.html +1 -1
  93. package/docs/interfaces/five.WorkObserver.html +1 -1
  94. package/docs/interfaces/five.WorkObserverProto.html +1 -1
  95. package/docs/interfaces/five.WorkTile.html +1 -1
  96. package/docs/interfaces/five.WorksEvent.html +3 -3
  97. package/docs/interfaces/five.XRControllerEvent.html +4 -4
  98. package/docs/interfaces/five.XRControllerState.html +4 -4
  99. package/docs/interfaces/five.XRGestureEvent.html +7 -7
  100. package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +9 -9
  101. package/docs/interfaces/five.XRSessionEvent.html +3 -3
  102. package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
  103. package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
  104. package/docs/interfaces/plugins.CSS2DPluginController.html +1 -1
  105. package/docs/interfaces/plugins.CSS2DPluginType.EventMap.html +1 -1
  106. package/docs/interfaces/plugins.CSS2DPluginType.State.html +1 -1
  107. package/docs/interfaces/plugins.CSS3DPluginController.html +1 -1
  108. package/docs/interfaces/plugins.CSS3DPluginType.EventMap.html +1 -1
  109. package/docs/interfaces/plugins.CSS3DPluginType.State.html +1 -1
  110. package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
  111. package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
  112. package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
  113. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationController.html +1 -1
  114. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.EventMap.html +1 -1
  115. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.State.html +1 -1
  116. package/docs/interfaces/plugins.ItemMaskController.html +1 -1
  117. package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
  118. package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
  119. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseController.html +1 -1
  120. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseHelper.html +1 -1
  121. package/docs/interfaces/plugins.Object3DHelperPluginType.BoundingBoxController.html +1 -1
  122. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveController.html +1 -1
  123. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveHelperAbstract.html +1 -1
  124. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateController.html +1 -1
  125. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateHelperAbstract.html +1 -1
  126. package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
  127. package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
  128. package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
  129. package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
  130. package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
  131. package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
  132. package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
  133. package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
  134. package/docs/interfaces/plugins.TrajectoryController.html +1 -1
  135. package/docs/interfaces/react.FiveAppProps.html +3 -3
  136. package/docs/interfaces/react.FiveInjectionTypes.html +1 -1
  137. package/docs/interfaces/react.UseFivePluginOptions.html +5 -0
  138. package/docs/interfaces/react.UseFivePluginOptionsWithCreate.html +5 -0
  139. package/docs/modules/plugins.html +1 -1
  140. package/docs/modules/react.html +1 -1
  141. package/docs/types/five.ParseOptions.html +1 -1
  142. package/docs/variables/react.FiveApp.html +1 -1
  143. package/five/controllers/panorama.d.ts +2 -2
  144. package/five/controllers/xrPanorama.d.ts +4 -2
  145. package/five/index.js +22 -22
  146. package/five/index.mjs +502 -488
  147. package/five/utils/event.d.ts +5 -1
  148. package/gltf-loader/index.js +3 -3
  149. package/gltf-loader/index.mjs +3 -3
  150. package/line/index.js +3 -3
  151. package/line/index.mjs +3 -3
  152. package/package.json +1 -1
  153. package/plugins/index.d.ts +3 -0
  154. package/plugins/index.js +3 -3
  155. package/plugins/index.mjs +587 -468
  156. package/plugins/thirdParty/instancedPrefabBufferGeometry.d.ts +32 -0
  157. package/plugins/thirdParty/pointBufferGeometry.d.ts +22 -0
  158. package/plugins/thirdParty/prefabBufferGeometry.d.ts +38 -0
  159. package/react/hooks/useFivePlugin.d.ts +7 -11
  160. package/react/index.d.ts +1 -1
  161. package/react/index.js +3 -3
  162. package/react/index.mjs +11 -10
  163. package/shader-lib/index.js +2 -2
  164. package/shader-lib/index.mjs +2 -2
  165. package/sticker/index.js +3 -3
  166. package/sticker/index.mjs +3 -3
  167. package/umd/five-gltf-loader.js +3 -3
  168. package/umd/five-line.js +3 -3
  169. package/umd/five-plugins.js +3 -3
  170. package/umd/five-react.js +3 -3
  171. package/umd/five-shader-lib.js +2 -2
  172. package/umd/five-sticker.js +3 -3
  173. package/umd/five-vfx.js +2 -2
  174. package/umd/five-vue.js +2 -2
  175. package/umd/five.js +7 -7
  176. package/vfx/index.js +2 -2
  177. package/vfx/index.mjs +2 -2
  178. package/vue/index.js +2 -2
  179. package/vue/index.mjs +2 -2
  180. package/work-downloader/index.js +2 -2
  181. package/work-downloader/index.mjs +2 -2
package/plugins/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five
4
- * Generated: 2026/4/28
5
- * Version: 6.8.1
4
+ * Generated: 5/8/2026
5
+ * Version: 6.8.2
6
6
  * Terms:
7
7
  * Realsee SDK License Agreement
8
8
  * Update: July 28, 2021
@@ -846,4 +846,4 @@ void main() {
846
846
  #five-CSS2DPlugin .five-CSS2DPlugin-hidden * {
847
847
  pointer-events: none;
848
848
  }
849
- `,Ue=class extends p.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){super(e),this.scene=new l.Scene,this.styleSheet=new CSSStyleSheet,this.camera=new l.PerspectiveCamera,this.createCSS2DObject=({id:e=Me(),name:t,innerHTML:n,center:r,position:i,visible:a=!0,timeout:o})=>{let s=document.createElement(`div`);s.className=`five-CSS2DPlugin-X`,a||s.classList.add(`five-CSS2DPlugin-hidden`),o&&s.style.setProperty(`--timeout`,o+`ms`),s.innerHTML=n;let c=new Fe(s);return c.userData={id:e,_visible:a,_timeout:o,get visible(){return this._visible},set visible(e){e?s.classList.remove(`five-CSS2DPlugin-hidden`):s.classList.add(`five-CSS2DPlugin-hidden`),this._visible=e},get timeout(){return this._timeout},set timeout(e){s.style.setProperty(`--timeout`,e+`ms`),this._timeout=e}},r&&c.center.copy(r),i&&c.position.copy(i),t&&(c.name=t),c},this.render=()=>{this.camera.fov=this.five.camera.fov,this.camera.aspect=this.five.camera.aspect,this.camera.position.copy(this.five.camera.position),this.camera.rotation.copy(this.five.camera.rotation),this.camera.updateProjectionMatrix(),this.renderer.render(this.scene,this.camera)},this._addEventListener=()=>{this.five.on(`render.prepare`,this.render),this.appendToFiveContainer()},this._removeEventListener=()=>{var e;this.five.off(`render.prepare`,this.render),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=void 0},this.dispose=()=>{this.removeAll(),this._disable({userAction:!1})},this.five=e,this.renderer=new Ve,this.renderer.domElement.id=`five-CSS2DPlugin`,this.styleSheet.replaceSync(He),document&&document.adoptedStyleSheets.push(this.styleSheet),this.state=Object.assign({enabled:!0,visible:!0},t==null?void 0:t.initialState),this.state.enabled?this._enable({userAction:!1}):this.styleSheet.disabled=!0}load(e){return m(this,void 0,void 0,function*(){})}appendToFiveContainer(){var e;if(!this.five.renderer)return;let t=this.five.getElement();if(!(t!=null&&t.parentElement))return;let{x:n,y:r}=this.five.renderer.getSize(new l.Vector2);t.parentElement.appendChild(this.renderer.domElement),this.renderer.setSize(n,r),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=new ResizeObserver(()=>{var e;if(!this.five.renderer)return;let t=(e=this.five.getElement())==null?void 0:e.getBoundingClientRect();if(!t)return;let{x:n,y:r,width:i,height:a}=t;this.renderer.setSize(i,a),this.renderer.domElement.style.left=n+`px`,this.renderer.domElement.style.top=r+`px`,this.render()}),this.resizeObserver.observe(t)}add(...e){this.scene.add(...e),this.render()}remove(e){this.scene.remove(e),e.traverse(e=>{e instanceof Fe&&e.element.remove()}),this.render()}removeAll(){this.scene.remove(...this.scene.children),this.render()}fadeInObjects(...e){for(let t of e)t.userData.visible=!0;this.render()}fadeOutObjects(...e){for(let t of e)t.userData.visible=!1;this.render()}_enable(e){this.styleSheet.disabled=!1,this.updateState({enabled:!0},e.userAction),this._addEventListener(),this.render()}_disable(e){this.styleSheet.disabled=!0,this.updateState({enabled:!1},e.userAction),this._removeEventListener()}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this._enable({userAction:n})}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this._disable({userAction:n})}show(e){this.renderer.domElement.style.display=`block`,this.updateState({visible:!0},!0),this.render()}hide(e){this.renderer.domElement.style.display=`none`,this.updateState({visible:!1},!0)}},We=(e,t)=>new Ue(e,t);function Ge(e,t,n){if(n){let r=new l.Vector3().subVectors(e.position,n).applyQuaternion(e.quaternion.clone().inverse()).applyQuaternion(t).add(n);e.position.copy(r)}e.quaternion.copy(t)}function Ke(e){return e==null}var qe=class extends l.Object3D{removeChildren(){for(;this.children.length>0;)this.remove(this.children[0]);return this}add(...e){let t=e.filter(Boolean);return t.length===0?this:super.add(...t)}addIfNotExists(...e){return e.forEach(e=>{this.children.includes(e)||this.add(e)}),this}remove(...e){if(e.length===0)return this;let t=e.filter(Boolean);return super.remove(...t)}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}get helperObject(){return this}constructor(e,t){var n,r;super(),this.originObject3D=e,this.onRender=(n=t==null?void 0:t.onRender)==null?(()=>{}):n,this.positionFrom=(r=t==null?void 0:t.positionFrom)==null?`objectPosition`:r}render(){this.onRender()}enable(){this.parent&&(this.parent.children.includes(this)||this.parent.add(this))}disable(){this.removeFromParent()}show(){this.visible=!0,this.render()}hide(){this.visible=!1,this.render()}raycasterIntersectObject(e,t=[]){return e.intersectObject(this,!0,t)}initialPosition(e){this.positionFrom===`objectPosition`?this.position.copy(this.originObject3D.position):this.positionFrom===`boundingBox`||this.positionFrom===`boundingSphere`?this.position.copy(new l.Box3().expandByObject(this.originObject3D).getCenter(new l.Vector3)):this.positionFrom instanceof l.Vector3?this.position.copy(this.positionFrom):this.positionFrom instanceof Function&&this.position.copy(this.positionFrom(this.originObject3D)),e&&this.position.add(e)}setScaleByCamera(e){}initQuaternion(e){if(this.quaternion.set(0,0,0,1),e&&(e.xAxis||e.yAxis||e.zAxis)){let t=e.xAxis instanceof Function?e.xAxis():e.xAxis,n=e.yAxis instanceof Function?e.yAxis():e.yAxis,r=e.zAxis instanceof Function?e.zAxis():e.zAxis,i=t==null?void 0:t.clone(),a=n==null?void 0:n.clone(),o=r==null?void 0:r.clone();if(i&&!a&&!a){let e=new l.Quaternion().setFromUnitVectors(new l.Vector3(1,0,0),i.normalize());this.applyQuaternion(e)}if(a&&!i&&!o){let e=new l.Quaternion().setFromUnitVectors(new l.Vector3(0,1,0),a.normalize());this.applyQuaternion(e)}if(o&&!i&&!a){let e=new l.Quaternion().setFromUnitVectors(new l.Vector3(0,0,1),o.normalize());this.applyQuaternion(e)}if([i,a,o].filter(e=>!Ke(e)).length>=2){i||(i=new l.Vector3().crossVectors(a,o).normalize()),a||(a=new l.Vector3().crossVectors(i,o).normalize()),o||(o=new l.Vector3().crossVectors(i,a).normalize()),i.applyQuaternion(this.quaternion),a.applyQuaternion(this.quaternion),o.applyQuaternion(this.quaternion);let e=new l.Matrix4().makeBasis(i,a,o),t=new l.Quaternion().setFromRotationMatrix(e);this.quaternion.copy(t)}}}applyHelperScaleMatrix4(e,t){this.scale.applyMatrix4(e)}setHelperQuaternion(e,t){this.initQuaternion(),t?Ge(this,this.quaternion.clone().premultiply(e),t):this.quaternion.premultiply(e)}applyHelperQuaternion(e,t){if(t){let n=new l.Vector3().subVectors(this.position,t).applyQuaternion(e).add(t);this.position.copy(n)}this.applyQuaternion(e)}dispose(){this.removeFromParent()}},Je=class extends qe{},Ye=class extends qe{},Xe=class extends qe{},Ze=class extends l.Group{constructor(e){super(),this.direction=e||`x`}};l.Line;var Qe=class extends l.Mesh{constructor(e,t,n){super(e,t),this.direction=n||`x`}},$e={X:16730698,Y:54927,Z:3368703},W=class{static get X(){return new l.Color($e.X).convertSRGBToLinear().clone()}static get Y(){return new l.Color($e.Y).convertSRGBToLinear().clone()}static get Z(){return new l.Color($e.Z).convertSRGBToLinear().clone()}},G={ROTATE_HELPER:9992,MOVE_HELPER:9993,SCALE_HELPER_LINE:9994,SCALE_HELPER_SPHERE:9995,MOVE_HELPER_ARROW:10001,MOVE_HELPER_CENTER:10002,DRAG_GUIDE_LINE:10003,DRAG_FACE_PATCH:10004},K=class extends Ze{constructor(e){var t;super(e.direction),this.lineHeight=.5,this.arrowHeight=.1,this.name=`ArrowGroup`;let n=new l.Color((t=e.color)==null?16214315:t),r=()=>new l.MeshBasicMaterial({color:n,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1});this.arrow=new Qe(new l.ConeGeometry(.04,this.arrowHeight,32),r(),e.direction),this.arrow.name=`arrow-${e.direction}`,this.arrow.renderOrder=G.MOVE_HELPER_ARROW,this.arrowNeg=new Qe(new l.ConeGeometry(.04,this.arrowHeight,32),r(),e.direction),this.arrowNeg.name=`arrow-neg-${e.direction}`,this.arrowNeg.renderOrder=G.MOVE_HELPER_ARROW;let i=.004;this.line=new Qe(new l.CylinderGeometry(i,i,this.lineHeight,32),r(),e.direction),this.line.name=`line-${e.direction}`,this.line.renderOrder=G.MOVE_HELPER_ARROW,this.formatGeometries(),this.add(this.arrow,this.arrowNeg,this.line)}formatGeometries(){let e=this.lineHeight,t=this.arrowHeight;this.arrow.geometry.translate(0,e+t/2,0),this.arrowNeg.geometry.rotateZ(Math.PI),this.arrowNeg.geometry.translate(0,-(e+t/2),0),this.line.geometry.translate(0,e/2,0),this.direction===`x`?(this.arrow.geometry.rotateX(Math.PI/2),this.arrow.geometry.rotateY(Math.PI/2),this.arrowNeg.geometry.rotateX(Math.PI/2),this.arrowNeg.geometry.rotateY(Math.PI/2),this.line.geometry.rotateX(Math.PI/2),this.line.geometry.rotateY(Math.PI/2)):this.direction===`z`&&(this.arrow.geometry.rotateX(Math.PI/2),this.arrowNeg.geometry.rotateX(Math.PI/2),this.line.geometry.rotateX(Math.PI/2))}},et=class extends Ze{constructor(e){var t,n;super(`plane`),this.name=`CenterHandle`,this.faceNormals=[new l.Vector3(1,0,0),new l.Vector3(-1,0,0),new l.Vector3(0,1,0),new l.Vector3(0,-1,0),new l.Vector3(0,0,1),new l.Vector3(0,0,-1)],this.baseColor=new l.Color((t=e==null?void 0:e.color)==null?16419862:t);let r=(n=e==null?void 0:e.size)==null?.05:n,i=new l.Color(16755008).convertSRGBToLinear();this.faceMaterials=Array.from({length:6},()=>new l.MeshBasicMaterial({color:i,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,side:l.FrontSide}));let a=new l.BoxGeometry(r,r,r),o=new l.Mesh(a,this.faceMaterials);o.direction=`plane`,o.renderOrder=G.MOVE_HELPER_CENTER,o.name=`center-plane-handle`,this.cube=o,this.add(this.cube)}update(e){let t=new l.Vector3().subVectors(e.position,this.cube.getWorldPosition(new l.Vector3)).normalize(),n=this.cube.getWorldQuaternion(new l.Quaternion),r=this.faceNormals.map((e,r)=>{let i=e.clone().applyQuaternion(n).dot(t);return{index:r,angle:Math.acos(Math.abs(i))}});r.sort((e,t)=>e.angle-t.angle);let i=[new l.Color(16755008).convertSRGBToLinear(),new l.Color(16419862).convertSRGBToLinear(),new l.Color(13921032).convertSRGBToLinear()];r.forEach((e,t)=>{let n=Math.floor(t/2);this.faceMaterials[e.index].color.copy(i[n])})}},tt=class extends Ze{constructor(e){var t,n,r;super(e.direction),this.name=`PlaneHandle`;let i=(t=e.size)==null?.12:t,a=(n=e.offset)==null?.12:n,o=new l.Color((r=e.color)==null?16776960:r),s=new l.BoxGeometry(i,i,.005),c=new l.MeshBasicMaterial({color:o,transparent:!0,opacity:.4,depthTest:!1,depthWrite:!1,side:l.DoubleSide});switch(this.handle=new l.Mesh(s,c),this.handle.direction=e.direction,this.handle.renderOrder=G.MOVE_HELPER_ARROW,this.handle.name=`plane-handle-${e.direction}`,e.direction){case`xy`:this.handle.position.set(a,a,0);break;case`xz`:this.handle.position.set(a,0,a),this.handle.rotation.x=-Math.PI/2;break;case`yz`:this.handle.position.set(0,a,a),this.handle.rotation.y=Math.PI/2;break}this.add(this.handle)}};function nt(e,t,n){let r=e.position.distanceTo(t),i=e.fov,a=e.distance||3,o=r/3,s=i/90,c=a/3,l=o*s*c,u=(n==null?void 0:n.min)||.6,d=n==null?void 0:n.max;return u&&l<u?u:d&&l>d?d:l}function rt(e){let{latitude:t,longitude:n}=e,r=new l.Vector3;return it-t<.03?r.set(0,1,0):at(0,n)?r.set(0,0,1):at(Math.PI,n)?r.set(0,0,-1):at(it,n)?r.set(1,0,0):r.set(-1,0,0),r}var it=Number((Math.PI/2).toFixed(5));function at(e,t){return typeof e!=`number`||typeof t!=`number`?!1:Math.abs(e-t)<.001}function q(e,t){return ot(document.createElement(t==null?`div`:t),e)}function ot(e,t){if(!t)return e;for(let n in t)n&&t[n]&&(e.style[n]=t[n]);return e}function J(e){let t=q(Object.assign({position:`absolute`,display:`block`,borderRadius:`4px`,paddingTop:`1px`,paddingBottom:`1px`,paddingLeft:`4px`,paddingRight:`4px`,pointerEvents:`none`,userSelect:`none`,zIndex:`99999`,backgroundColor:`rgba(0,0,0,0.7)`,fontSize:`12px`,color:`#fff`,letterSpacing:`0`,lineHeight:`18px`},e)),n=()=>{t.style.display!==`block`&&t.style.top&&t.style.left&&(t.style.display=`block`)};return{element:t,show:n,hide:()=>{t.style.display=`none`,t.style.top=``,t.style.left=``},setLeftTop:(e,r)=>{t.style.left=e,t.style.top=r,n()}}}var Y=class extends Je{constructor(e,t){super(e,t),this.name=`MoveHelper`,(t==null?void 0:t.xArrowEnable)!==!1&&(this.xArrow=new K({direction:`x`,color:W.X})),(t==null?void 0:t.yArrowEnable)!==!1&&(this.yArrow=new K({direction:`y`,color:W.Y})),(t==null?void 0:t.zArrowEnable)!==!1&&(this.zArrow=new K({direction:`z`,color:W.Z})),(t==null?void 0:t.centerHandleEnable)!==!1&&(this.centerHandle=new et),(t==null?void 0:t.xyPlaneEnable)!==!1&&(this.xyPlane=new tt({direction:`xy`,color:W.Z})),(t==null?void 0:t.xzPlaneEnable)!==!1&&(this.xzPlane=new tt({direction:`xz`,color:W.Y})),(t==null?void 0:t.yzPlaneEnable)!==!1&&(this.yzPlane=new tt({direction:`yz`,color:W.X})),t!=null&&t.container&&(t==null?void 0:t.moveTipsEnable)!==!1&&(this.container=t.container,this.moveTips=J({display:`none`}),this.container.appendChild(this.moveTips.element)),this.add(...[this.xArrow,this.yArrow,this.zArrow,this.centerHandle,this.xyPlane,this.xzPlane,this.yzPlane].filter(Boolean))}update(e){if(this.xArrow&&(this.xArrow.visible=!0),this.yArrow&&(this.yArrow.visible=!0),this.zArrow&&(this.zArrow.visible=!0),this.centerHandle&&this.centerHandle.update(e),e.type===`OrthographicCamera`){let t=new l.Vector3(1,0,0).applyQuaternion(this.quaternion),n=new l.Vector3(0,1,0).applyQuaternion(this.quaternion),r=new l.Vector3(0,0,1).applyQuaternion(this.quaternion),i=e.pose,a=rt(i),o=.0872665;Math.abs(t.angleTo(a)-0)<o||Math.abs(t.angleTo(a)-Math.PI)<o?this.xArrow&&(this.xArrow.visible=!1):Math.abs(n.angleTo(a)-0)<o||Math.abs(n.angleTo(a)-Math.PI)<o?this.yArrow&&(this.yArrow.visible=!1):(Math.abs(r.angleTo(a)-0)<o||Math.abs(r.angleTo(a)-Math.PI)<o)&&this.zArrow&&(this.zArrow.visible=!1)}}show(){var e;super.show(),this.xArrow&&this.add(this.xArrow),this.yArrow&&this.add(this.yArrow),this.zArrow&&this.add(this.zArrow),this.centerHandle&&this.add(this.centerHandle),this.xyPlane&&this.add(this.xyPlane),this.xzPlane&&this.add(this.xzPlane),this.yzPlane&&this.add(this.yzPlane),(e=this.moveTips)==null||e.hide()}setScaleByCamera(e){this.scale.setScalar(nt(e,this.position))}showDraggingHelper(e){this.xArrow&&(e.includes(`x`)?this.add(this.xArrow):this.remove(this.xArrow)),this.yArrow&&(e.includes(`y`)?this.add(this.yArrow):this.remove(this.yArrow)),this.zArrow&&(e.includes(`z`)?this.add(this.zArrow):this.remove(this.zArrow)),this.centerHandle&&(e.includes(`plane`)?this.add(this.centerHandle):this.remove(this.centerHandle)),this.xyPlane&&(e.includes(`xy`)?this.add(this.xyPlane):this.remove(this.xyPlane)),this.xzPlane&&(e.includes(`xz`)?this.add(this.xzPlane):this.remove(this.xzPlane)),this.yzPlane&&(e.includes(`yz`)?this.add(this.yzPlane):this.remove(this.yzPlane))}dispose(){var e,t;this.remove(...[this.xArrow,this.yArrow,this.zArrow,this.centerHandle,this.xyPlane,this.xzPlane,this.yzPlane].filter(Boolean)),(t=(e=this.moveTips)==null?void 0:e.element)==null||t.remove(),super.dispose()}},st=class extends Xe{constructor(e,t){super(e,t),this.name=`RotateHelper`,this.children=[],(t==null?void 0:t.yzCircleEnable)!==!1&&(this.xCircle=new X({direction:`x`,color:W.X})),(t==null?void 0:t.xzCircleEnable)!==!1&&(this.yCircle=new X({direction:`y`,color:W.Y})),(t==null?void 0:t.xyCircleEnable)!==!1&&(this.zCircle=new X({direction:`z`,color:W.Z})),t!=null&&t.container&&(t==null?void 0:t.angleTipsEnable)!==!1&&(this.container=t==null?void 0:t.container,this.angleTips=J({display:`none`}),this.container.appendChild(this.angleTips.element)),this.add(...[this.xCircle,this.yCircle,this.zCircle].filter(Boolean)),this.show()}hide(){this.children.forEach(e=>e.hide())}show(){var e;this.children.forEach(e=>e.showCircle()),(e=this.angleTips)==null||e.hide()}setScaleByCamera(e){this.scale.setScalar(nt(e,this.position))}update(e){if(e.type===`OrthographicCamera`)return;let t=this.helperObject.position.clone().sub(e.position).normalize(),n=new l.Vector3(1,0,0).applyQuaternion(this.quaternion),r=new l.Vector3(0,1,0).applyQuaternion(this.quaternion),i=new l.Vector3(0,0,1).applyQuaternion(this.quaternion),a=t.angleTo(n),o=t.angleTo(r),s=t.angleTo(i),c=Math.PI/2,u=o>=c,d=s>=c,f=a>=c;if(this.xCircle){let e=this.xCircle.circle.gapAngle;u&&d?this.xCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):u&&!d?this.xCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!u&&d?this.xCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!u&&!d&&(this.xCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),this.xCircle.angleSector&&(this.xCircle.angleSector.offsetAngle=e=>e,u&&d||u&&!d?this.xCircle.angleSector.baseAxes=new l.Vector3(0,0,1):!u&&d?(this.xCircle.angleSector.baseAxes=new l.Vector3(0,-1,0),this.xCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!u&&!d&&(this.xCircle.angleSector.baseAxes=new l.Vector3(0,0,-1),this.xCircle.angleSector.offsetAngle=e=>e-Math.PI))}if(this.yCircle){this.yCircle.angleSector.offsetAngle=e=>e;let e=this.yCircle.circle.gapAngle;f&&d?this.yCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):f&&!d?this.yCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!f&&d?this.yCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!f&&!d&&(this.yCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),f&&d?this.yCircle.angleSector.baseAxes=new l.Vector3(1,0,0):f&&!d?(this.yCircle.angleSector.baseAxes=new l.Vector3(0,0,-1),this.yCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!f&&d?(this.yCircle.angleSector.baseAxes=new l.Vector3(0,0,1),this.yCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!f&&!d&&(this.yCircle.angleSector.baseAxes=new l.Vector3(-1,0,0),this.yCircle.angleSector.offsetAngle=e=>e+Math.PI)}if(this.zCircle){this.zCircle.angleSector.offsetAngle=e=>e;let e=this.zCircle.circle.gapAngle;f&&u?this.zCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):f&&!u?this.zCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!f&&u?this.zCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!f&&!u&&(this.zCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),this.zCircle.angleSector&&(f&&u?this.zCircle.angleSector.baseAxes=new l.Vector3(1,0,0):f&&!u?(this.zCircle.angleSector.baseAxes=new l.Vector3(0,-1,0),this.zCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!f&&u?(this.zCircle.angleSector.baseAxes=new l.Vector3(0,1,0),this.zCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!f&&!u&&(this.zCircle.angleSector.baseAxes=new l.Vector3(-1,0,0),this.zCircle.angleSector.offsetAngle=e=>e+Math.PI))}}showDraggingHelper(e){var t;this.hide(),this.children.filter(t=>e.includes(t.direction)).forEach(e=>e.showRing()),(t=this.angleTips)==null||t.show()}dispose(){var e,t;this.removeFromParent(),(t=(e=this.angleTips)==null?void 0:e.element)==null||t.remove()}},X=class extends l.Group{constructor(e){super(),this.direction=e.direction,this.circle=new Z(e),this.ring=new ct(e),this.angleSector=new lt(e),this.add(this.circle,this.ring,this.angleSector),this.direction===`y`?this.rotation.x=Math.PI/2:this.direction===`x`&&(this.rotation.y=-Math.PI/2)}showCircle(){this.add(this.circle),this.remove(this.ring,this.angleSector)}showRing(){this.add(this.ring,this.angleSector),this.remove(this.circle)}hide(){this.remove(this.ring,this.angleSector,this.circle)}},Z=class extends l.Mesh{constructor(e){var t;super(),this.gapAngle=.02,this.geometry=new l.RingGeometry(.3,.35,20,8,this.gapAngle,Math.PI/2-this.gapAngle*2),this.material=new l.MeshBasicMaterial({opacity:.6,transparent:!0,color:(t=e.color)==null?16777215:t,side:l.DoubleSide,depthTest:!1}),this.direction=e.direction,this.renderOrder=G.ROTATE_HELPER,this.geometry.name=`RotateHelperCircleGeometry-${this.direction}`}},ct=class extends l.Group{constructor(e){super(),this.direction=e.direction;let t=.015,n=Array(8).fill(null).map((e,n)=>{let r=new l.RingGeometry(.3,.35,20,8,Math.PI/4*n+t,Math.PI/4-t*2),i=new l.MeshBasicMaterial({opacity:1,color:16777215,depthTest:!1,depthWrite:!1,transparent:!0,side:l.DoubleSide}),a=new l.Mesh(r,i);return a.name=`AxesDashedRing-${this.direction}-${n}`,a});this.add(...n)}},lt=class extends l.Mesh{constructor(e){var t;switch(super(),this.offsetAngle=e=>e,e.direction){case`x`:this.baseAxes=new l.Vector3(0,0,1);break;case`y`:this.baseAxes=new l.Vector3(1,0,0);break;case`z`:this.baseAxes=new l.Vector3(1,0,0);break}this.geometry=new l.CircleGeometry(.3505,48,0,1e-4),this.material=new l.MeshBasicMaterial({opacity:.4,color:(t=e.color)==null?16777215:t,depthTest:!1,depthWrite:!1,transparent:!0,side:l.DoubleSide}),this.direction=e.direction,this.angleDirection=1}setClockwiseDirection(){this.angleDirection=-1}setCounterClockwiseDirection(){this.angleDirection=1}toggleDirection(){this.angleDirection=this.angleDirection===1?-1:1}setBaseAxes(e){this.baseAxes=e.clone().normalize()}getDirection(){return this.angleDirection===-1?`clockwise`:`counterclockwise`}},ut=class extends Ye{constructor(e){super(e),this.name=`BoundingBoxHelper`,this.positionAttribute=new l.BufferAttribute(new Float32Array(24),3),this.box=this.createBox(),this.outline=this.createOutline(),this.add(this.box,this.outline),this.update()}initQuaternion(){this.quaternion.copy(this.originObject3D.quaternion),this.scale.copy(this.originObject3D.scale)}setHelperQuaternion(e,t){Ge(this,e,t)}raycasterIntersectObject(e,t){return e.intersectObject(this,!1,t)}raycast(e,t){this.box.raycast(e,t)}update(){let e=new l.Box3,t=new l.Matrix4().getInverse(this.originObject3D.matrixWorld),n=new l.Vector3;if(this.originObject3D.updateMatrixWorld(!0),this.originObject3D.traverse(r=>{let i=r.geometry;if(!i)return;r.updateMatrixWorld(!0);let a=new l.Matrix4().multiplyMatrices(t,r.matrixWorld);if(i.isBufferGeometry){let t=i,r=t.attributes.position;if(r)for(let t=0,i=r.count;t<i;t++)n.fromBufferAttribute(r,t).applyMatrix4(a),e.expandByPoint(n);let o=t.attributes.instanceStart,s=t.attributes.instanceEnd;if(o)for(let t=0,r=o.count;t<r;t++)n.fromBufferAttribute(o,t).applyMatrix4(a),e.expandByPoint(n);if(s)for(let t=0,r=s.count;t<r;t++)n.fromBufferAttribute(s,t).applyMatrix4(a),e.expandByPoint(n)}else if(i.vertices){let t=i.vertices;for(let r of t)n.copy(r).applyMatrix4(a),e.expandByPoint(n)}}),e.isEmpty())return;let{min:r,max:i}=e;this.positionAttribute.setXYZ(0,i.x,i.y,i.z),this.positionAttribute.setXYZ(1,r.x,i.y,i.z),this.positionAttribute.setXYZ(2,r.x,r.y,i.z),this.positionAttribute.setXYZ(3,i.x,r.y,i.z),this.positionAttribute.setXYZ(4,i.x,i.y,r.z),this.positionAttribute.setXYZ(5,r.x,i.y,r.z),this.positionAttribute.setXYZ(6,r.x,r.y,r.z),this.positionAttribute.setXYZ(7,i.x,r.y,r.z),this.positionAttribute.needsUpdate=!0}createOutline(){let e=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),t=new l.BufferGeometry;t.setIndex(new l.BufferAttribute(e,1)),t.setAttribute(`position`,this.positionAttribute);let n=new l.LineBasicMaterial({color:64767,linewidth:1,opacity:1,toneMapped:!1}),r=new l.LineSegments(t,n);return r.matrixAutoUpdate=!1,r}createBox(){let e=new Uint16Array([0,1,2,0,2,3,0,3,7,0,7,4,0,4,5,0,5,1,6,1,5,6,2,1,6,5,4,6,4,7,6,3,2,6,7,3]),t=new l.BufferGeometry;t.setIndex(new l.BufferAttribute(e,1)),t.setAttribute(`position`,this.positionAttribute);let n=new l.MeshBasicMaterial({color:64767,opacity:.1,depthTest:!1,transparent:!0});return new l.Mesh(t,n)}},Q=new Map;function dt(e){if(Q.has(e))return Q.get(e).hooks;let t=new c.Subscribe,n=null,r,i=()=>{n=requestAnimationFrame(i);let a=e.projectionMatrix.toArray().join(`,`)+e.matrixWorld.toArray().join(`,`);a!==r&&(r=a,t.emit(`cameraUpdate`))};return i(),Q.set(e,{hooks:t,dispose:()=>{Q.delete(e),cancelAnimationFrame(n)}}),t}function ft(e){return arguments.length===0?[]:Array.isArray(e)?e:[e]}var pt=class{updateOtherControllers(e){this.otherControllers=e}getIsDragging(){return this.isDragging}constructor(e,t){var n,r,i;this.preventTapDefaultEvent=!1,this.disposers=[],this.isDragging=!1,this.enabled=!1,this.name=`BaseController`,this.onWantsTapGesture=e=>{if(this.getIntersectObject(e))return!1},this.updateHelperScale=()=>{`update`in this.helperObject3D&&typeof this.helperObject3D.update==`function`&&this.helperObject3D.update(this.camera),this.helperObject3D.setScaleByCamera(this.camera)},this.getBox=()=>(this.boundingBox||(this.boundingBox=new l.Box3().expandByObject(this.originObject3D)),this.boundingBox),this.hooks=(n=e.sharedHooks)==null?new c.Subscribe:n,this.internalHooks=(r=e.sharedInternalHooks)==null?new c.Subscribe:r,this.camera=e.camera,this.model=e.model,this.originObject3D=e.originObject3D,this.helperObject3D=e.helperObject3D,this.container=e.container,this.scene=e.scene,this.domEvents=e.domEvents,this.onRender=(i=e.onRender)==null?(()=>{}):i,this.config=t==null?{}:t,this.otherControllers=e.otherControllers,this.initialHelperPosition(),this.initialHelperQuaternion(),this.updateHelperScale(),this.cameraHooks=dt(this.camera),this.enable();let a=this.onSetOriginObjectScale.bind(this),o=this.onSetOriginObjectRotate.bind(this),s=this.onSetOriginObjectPosition.bind(this),u=this.onApplyOriginObjectScale.bind(this),d=this.onApplyOriginObjectRotate.bind(this),f=this.onApplyOriginObjectPosition.bind(this),p=this.initialHelperPosition.bind(this);this.cameraHooks.on(`cameraUpdate`,this.updateHelperScale),this.internalHooks.on(`initialHelperPosition`,p),this.internalHooks.on(`setObjectScale`,a),this.internalHooks.on(`setObjectRotate`,o),this.internalHooks.on(`setObjectPosition`,s),this.internalHooks.on(`applyObjectPosition`,f),this.internalHooks.on(`applyObjectRotate`,d),this.internalHooks.on(`applyObjectScale`,u),this.hooks.on(`moveEnd`,this.updateHelperScale),this.internalHooks.on(`setObjectPosition`,this.updateHelperScale),this.internalHooks.on(`initialHelperPosition`,this.updateHelperScale),this.disposers.push(()=>{this.cameraHooks.off(`cameraUpdate`,this.updateHelperScale),this.internalHooks.off(`initialHelperPosition`,p),this.internalHooks.off(`setObjectScale`,a),this.internalHooks.off(`setObjectRotate`,o),this.internalHooks.off(`setObjectPosition`,s),this.internalHooks.off(`applyObjectPosition`,f),this.internalHooks.off(`applyObjectRotate`,d),this.internalHooks.off(`applyObjectScale`,u),this.hooks.off(`moveEnd`,this.updateHelperScale),this.internalHooks.off(`setObjectPosition`,this.updateHelperScale),this.internalHooks.off(`initialHelperPosition`,this.updateHelperScale)})}initialHelperPosition(){this.helperObject3D.initialPosition(this.calculateOffset(this.config.offset))}initialHelperQuaternion(){this.helperObject3D.initQuaternion(this.config)}enable(){this.enabled||(this.enabled=!0,this.scene.add(this.helperObject3D),this.helperObject3D.enable(),this.render())}disable(){this.enabled&&(this.enabled=!1,this.helperObject3D.disable(),this.render())}show(){this.helperObject3D.show(),this.render()}hide(){this.helperObject3D.hide(),this.render()}dispose(){var e;(e=this.disposers)==null||e.forEach(e=>e==null?void 0:e()),this.helperObject3D.dispose(),this.render()}applyHelperMatrix4(e){this.helperObject3D.applyMatrix4(e)}applyHelperQuaternion(e,t){this.helperObject3D.applyHelperQuaternion(e,t)}applyHelperScaleMatrix4(e,t){this.helperObject3D.applyHelperScaleMatrix4(e,t)}onWantsGesture(e,t,n){if(this.isDragging)return!1}onIntersectionOnModelUpdate(e){}onApplyOriginObjectScale(e){this.applyHelperScaleMatrix4(e.matrix,e.origin)}onApplyOriginObjectRotate(e){let t=e.origin;if(t){let n=new l.Vector3().subVectors(this.helperObject3D.position,t).applyQuaternion(e.quaternion).add(t);this.helperObject3D.position.copy(n)}}onApplyOriginObjectPosition(e){this.applyHelperMatrix4(e.matrix)}onSetOriginObjectScale(e){this.helperObject3D.scale.copy(e),this.updateOffsetByScale(e)}onSetOriginObjectRotate(e,t){}onSetOriginObjectPosition(e){this.helperObject3D.position.copy(e.clone().add(this.calculateOffset(this.config.offset)))}render(){this.onRender()}updateOffsetByScale(e){if(this.boundingBox&&this.config.offset){let t=this.originObject3D.position,n=new l.Vector3().subVectors(this.boundingBox.max,t).multiply(e).add(t),r=new l.Vector3().subVectors(this.boundingBox.min,t).multiply(e).add(t),i=this.calculateOffset(this.config.offset,{min:r,max:n});this.helperObject3D.initialPosition(i)}}hoverListener(e,t=16777215,n=1){let r=ft(e).filter(e=>!Ke(e)),i=[];for(let e of r)if(e.material||e instanceof l.Group){let r=e instanceof l.Group?e.children.filter(e=>e instanceof l.Mesh):[e];r.forEach(e=>{var t,n,r,i;let a=e.material;Array.isArray(a)?(e.__originalColor__=(t=e.__originalColor__)==null?a.map(e=>e.color.clone()):t,e.__originalOpacity__=(n=e.__originalOpacity__)==null?a.map(e=>e.opacity):n):(e.__originalColor__=(r=e.__originalColor__)==null?a.color.clone():r,e.__originalOpacity__=(i=e.__originalOpacity__)==null?a.opacity:i)});let a=()=>{r.forEach(e=>{if(e.name===`ScaleHelperTransparentGroup`){if(e.children[0]){let r=e.children[0].material;r.color.set(t),r.opacity=n}}else{let r=e.material;Array.isArray(r)?r.forEach(e=>{e.color.set(t),e.opacity=n}):(r.color.set(t),r.opacity=n)}}),this.render()},o=()=>{r.forEach(e=>{if(e.name===`ScaleHelperTransparentGroup`){if(e.children[0]){let t=e.children[0].material;t.color.set(16776960),t.opacity=1}}else{let t=e.material;if(Array.isArray(t)){let n=e.__originalColor__,r=e.__originalOpacity__;t.forEach((e,t)=>{n&&n[t]&&e.color.copy(n[t]),r&&r[t]!==void 0&&(e.opacity=r[t])})}else t.color.copy(e.__originalColor__),t.opacity=e.__originalOpacity__}}),this.render()},s=e=>{this.isDragging||a()},c=e=>{this.isDragging||o()};for(let e of r)this.domEvents.addEventListener(e,`mouseover`,s),this.domEvents.addEventListener(e,`mouseout`,c),this.hooks.on(`moveStart`,a),this.hooks.on(`moveEnd`,o),this.hooks.on(`rotateEnd`,o),this.hooks.on(`scaleEnd`,o),i.push(()=>{this.domEvents.removeEventListener(e,`mouseover`,s),this.domEvents.removeEventListener(e,`mouseout`,c),this.hooks.off(`moveStart`,a),this.hooks.off(`moveEnd`,o),this.hooks.off(`rotateEnd`,o),this.hooks.off(`scaleEnd`,o)})}return()=>i.forEach(e=>e==null?void 0:e())}getIntersectObject(e){let t=this.camera.position,n=this.helperObject3D;if(!n)return;let r=this.helperObject3D.raycasterIntersectObject(e)[0];if(!r)return;let i=r;if(i.object=n,this.model.intersectRaycaster){let n=this.model.intersectRaycaster(e)[0];if(n&&n.point.distanceTo(t)<i.point.distanceTo(t))return}return i.object}calculateOffset(e,t){let n=new l.Vector3(0,0,0);if(!e)return n;let r=()=>t||this.getBox();if(typeof e.x==`number`)n.setX(e.x);else if(typeof e.x==`object`){let t=r();n.setX((t.max.x-t.min.x)*e.x.percents)}if(typeof e.y==`number`)n.setY(e.y);else if(typeof e.y==`object`){let t=r();n.setY((t.max.y-t.min.y)*e.y.percents)}if(typeof e.z==`number`)n.setZ(e.z);else if(typeof e.z==`object`){let t=r();n.setZ((t.max.z-t.min.z)*e.z.percents)}return n}};function mt(e,t){let n=10,r=10,i=e.isPerspectiveCamera,a=e.isOrthographicCamera;if(i){let i=e,a=i.position.distanceTo(t),o=i.fov*Math.PI/180;r=2*Math.tan(o/2)*a,n=r*i.aspect}else if(a){let t=e;n=Math.abs(t.right-t.left),r=Math.abs(t.top-t.bottom)}let o=Math.sqrt(n*n+r*r),s=o*.8,c=Math.min(n,r)*.25,l=o*1.2;return Math.max(c,Math.min(s,l))}var ht=class{constructor(e,t,n){this.camera=e,this.container=t,this.defaults=Object.assign({},n||{})}createSolidLine(e,t,n){let r=Object.assign(Object.assign({color:16777215,renderOrder:G.DRAG_GUIDE_LINE},this.defaults),n||{}),i=t.clone().normalize(),a=this.computeInfiniteLineLength(e),o=e.clone().add(i.clone().multiplyScalar(-a)),s=e.clone().add(i.clone().multiplyScalar(a)),c=new Float32Array([o.x,o.y,o.z,s.x,s.y,s.z]),u=new l.BufferGeometry;u.setAttribute(`position`,new l.BufferAttribute(c,3));let d=new l.LineBasicMaterial({color:r.color,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.65}),f=new l.Line(u,d);return f.renderOrder=r.renderOrder,f}updateSolidLine(e,t,n,r){let i=n.clone().normalize(),a=this.computeInfiniteLineLength(t),o=t.clone().add(i.clone().multiplyScalar(-a)),s=t.clone().add(i.clone().multiplyScalar(a)),c=new Float32Array([o.x,o.y,o.z,s.x,s.y,s.z]),u=e.geometry,d=u.getAttribute(`position`);d&&d.itemSize===3&&d.array.length===c.length?(d.array.set(c),d.needsUpdate=!0):u.setAttribute(`position`,new l.BufferAttribute(c,3)),(r==null?void 0:r.color)!==void 0&&e.material.color.setHex(r.color)}computeInfiniteLineLength(e){return mt(this.camera,e)*10}dispose(e){if(!e)return;e.geometry.dispose();let t=e.material;Array.isArray(t)?t.forEach(e=>e.dispose()):t.dispose()}updateDefaults(e){this.defaults=Object.assign(Object.assign({},this.defaults),e)}};function gt(e,t,n){if(!t||!n||!e)return;let r=P(t,n);if(Math.abs(r.x)===1||Math.abs(r.y)===1)return;let i=new l.Raycaster;return i.setFromCamera(r,e),i.params.Points&&(i.params.Points.threshold=.1),i}function _t(e){let{raycaster:t,line:n,clampToLine:r=!0}=e,i=new l.Plane().setFromNormalAndCoplanarPoint(t.ray.direction.clone().normalize(),new l.Vector3),a=i.projectPoint(n.start,new l.Vector3),o=i.projectPoint(n.end,new l.Vector3),s=new l.Line3(a,o),c=s.closestPointToPoint(t.ray.origin,r,new l.Vector3),u=c.distanceTo(o),d=c.distanceTo(a),f=s.distance();if(u>d&&u>f){let e=-c.distanceTo(a)/f,t=n.start.clone().sub(n.end).normalize();return n.start.clone().sub(t.clone().multiplyScalar(e*n.distance()))}else{let e=c.distanceTo(a)/f;return new l.Vector3().lerpVectors(n.start,n.end,e)}}var vt=class extends pt{get moveByMouseEnable(){return this._moveByMouse.enabled}constructor(...e){var t,n,r,i,a;super(...e),this.name=`MoveController`,this.solidGuide=new ht(this.camera,this.container,(n=(t=this.config)==null?void 0:t.solidGuide)==null?{}:n),this._moveByMouse={enabled:!1},this.dragStart=e=>{if(this.moveByMouseEnable||this.isDragging)return;let t=e==null?void 0:e.intersect;if(!t)return this.dragEnd();let n=(t==null?void 0:t.object).direction;if(!n)return this.dragEnd();let r=new l.Vector3(1,0,0),i=new l.Vector3(0,1,0),a=new l.Vector3(0,0,1),o=(()=>{switch(n){case`x`:return r;case`y`:return i;case`z`:return a;case`xy`:case`xz`:case`yz`:case`plane`:return}})(),s=t.point.clone();if(n===`xy`||n===`xz`||n===`yz`){let e=(()=>{switch(n){case`xy`:return a;case`xz`:return i;case`yz`:return r}})(),t=new l.Plane().setFromNormalAndCoplanarPoint(e,s),o=s.clone();this.startInfo={draggingDirection:n,startVectorProject:o,line:new l.Line3(o.clone(),o.clone()),plane:t}}else if(n===`plane`){let e=this.camera.position.clone(),t=s.clone(),r=t.clone().sub(e).normalize(),i=new l.Plane().setFromNormalAndCoplanarPoint(r,t),a=t.clone();this.startInfo={draggingDirection:n,startVectorProject:a,line:new l.Line3(a.clone(),a.clone()),plane:i}}else{if(!o)return this.dragEnd();this.startInfo={draggingDirection:n,startVectorProject:s,line:new l.Line3(s.clone().sub(o.normalize()),s.clone().add(o.normalize()))};try{let e=o.clone().normalize(),t=this.helperObject3D.getWorldPosition(new l.Vector3),n=this.solidGuide.createSolidLine(t,e,{color:16777215,renderOrder:G.DRAG_GUIDE_LINE});this.scene.add(n),this.dragGuideLine=n}catch(e){}}let c=(()=>{switch(n){case`plane`:return[];case`xy`:return[`x`,`y`,`xy`];case`xz`:return[`x`,`z`,`xz`];case`yz`:return[`y`,`z`,`yz`];default:return[n]}})();this.helperObject3D.showDraggingHelper(c),this.hooks.emit(`moveStart`,n),this.isDragging=!0,this.setTipsText(this.originObject3D.position),this.setTipsPosition(s)},this.dragging=e=>{if(!this.isDragging||!this.startInfo)return;let t=`touches`in e?e.touches[0].clientX:e.x,n=`touches`in e?e.touches[0].clientY:e.y,r=gt(this.camera,{x:t,y:n},this.container);return r?(this.move(r),!1):this.dragEnd()},this.dragEnd=()=>{if(this.isDragging){if(this.startInfo=void 0,this.isDragging=!1,this.dragGuideLine){this.scene.remove(this.dragGuideLine),this.dragGuideLine.geometry.dispose();let e=this.dragGuideLine.material;Array.isArray(e)?e.forEach(e=>e.dispose()):e.dispose(),this.dragGuideLine=void 0}this.helperObject3D.show(),this.hooks.emit(`moveEnd`)}};let o=this.helperObject3D;if(this.hoverListener([o.xArrow,o.yArrow,o.zArrow,(r=o.xyPlane)==null?void 0:r.handle,(i=o.xzPlane)==null?void 0:i.handle,(a=o.yzPlane)==null?void 0:a.handle]),o.centerHandle&&o.centerHandle instanceof et){let e=o.centerHandle,t=e.cube;this.domEvents.addEventListener(t,`mouseover`,()=>{this.isDragging||(Array.isArray(t.material)&&t.material.forEach(e=>{e.color.set(16777215)}),this.render())}),this.domEvents.addEventListener(t,`mouseout`,()=>{this.isDragging||(e.update(this.camera),this.render())})}let s=this.show.bind(this),c=this.hide.bind(this),u=()=>{this.helperObject3D.update(this.camera),this.isDragging&&this.updateDragGuideLineScale(),this.render()};u(),this.domEvents.addEventListener(this.helperObject3D,`mousedown`,this.dragStart),document.addEventListener(`mousemove`,this.dragging),document.addEventListener(`mouseup`,this.dragEnd),this.domEvents.addEventListener(this.helperObject3D,`touchstart`,this.dragStart),document.addEventListener(`touchmove`,this.dragging),document.addEventListener(`touchend`,this.dragEnd),this.hooks.on(`rotateStart`,c),this.hooks.on(`rotateEnd`,s),this.hooks.on(`scaleStart`,c),this.hooks.on(`scaleEnd`,s),this.hooks.on(`moveByMouseEnable`,c),this.hooks.on(`moveByMouseDisable`,s),this.hooks.on(`updateOtherHelpers`,e=>{this.helperObject3D.update(e.camera),this.render()}),this.cameraHooks.on(`cameraUpdate`,u),this.disposers.push(()=>{this.domEvents.removeEventListener(this.helperObject3D,`mousedown`,this.dragStart),document.removeEventListener(`mousemove`,this.dragging),document.removeEventListener(`mouseup`,this.dragEnd),this.domEvents.removeEventListener(this.helperObject3D,`touchstart`,this.dragStart),document.removeEventListener(`touchmove`,this.dragging),document.removeEventListener(`touchend`,this.dragEnd),this.hooks.off(`rotateStart`,c),this.hooks.off(`rotateEnd`,s),this.hooks.off(`scaleStart`,c),this.hooks.off(`scaleEnd`,s),this.hooks.off(`moveByMouseEnable`,c),this.hooks.off(`moveByMouseDisable`,s),this.hooks.off(`updateOtherHelpers`),this.cameraHooks.off(`cameraUpdate`,u)}),this.moveByMouseEnable&&this.moveByMouse()}dispose(){var e;super.dispose(),(e=this.disposers)==null||e.forEach(e=>e==null?void 0:e())}moveByMouse(e){this._moveByMouse={enabled:!0,useFaceNormal:e==null?void 0:e.useFaceNormal},this.preventTapDefaultEvent=!0;let t=this.handleMouseDown.bind(this),n=this.handleMouseUp.bind(this);this.hooks.emit(`moveByMouseEnable`),setTimeout(()=>{this.container.addEventListener(`mousedown`,t),this.container.addEventListener(`mouseup`,n)}),this.mousedownEventListenerDisposer=()=>{this.container.removeEventListener(`mousedown`,t),this.container.removeEventListener(`mouseup`,n)}}disableMoveByMouse(){var e;this._moveByMouse={enabled:!1},this.preventTapDefaultEvent=!1,this.hooks.emit(`moveByMouseDisable`),(e=this.mousedownEventListenerDisposer)==null||e.call(this)}onIntersectionOnModelUpdate(e){var t,n,r;if(!this.moveByMouseEnable)return;let{point:i,face:a}=e;if(!this.hooks.emit(`wantToMove`,i)){if(this.originObject3D.position.copy(i),(this._moveByMouse.useFaceNormal===!0||typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.enable!==!1)&&a!=null&&a.normal){let e=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.alignmentVector?this._moveByMouse.useFaceNormal.alignmentVector:{x:0,y:1,z:0},i=new l.Vector3((t=e.x)==null?0:t,(n=e.y)==null?0:n,(r=e.z)==null?0:r),o=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.fixedFaceNormal?this._moveByMouse.useFaceNormal.fixedFaceNormal(a.normal):a.normal;this.originObject3D.quaternion.setFromUnitVectors(i,o),this.internalHooks.emit(`setObjectRotate`,this.originObject3D.quaternion.clone(),new l.Vector3)}this.internalHooks.emit(`setObjectPosition`,i),this.hooks.emit(`move`,i)}}handleMouseDown(e){let{x:t,y:n}=e;this.mouseInfo={x:t,y:n,mouseDownTimestamp:Date.now()}}handleMouseUp(e){if(!this.mouseInfo)return;let{x:t,y:n}=e;this.mouseInfo.x===t&&this.mouseInfo.y===n&&Date.now()-this.mouseInfo.mouseDownTimestamp<500&&(this.disableMoveByMouse(),this.mouseInfo=void 0)}updateDragGuideLineScale(){if(!this.dragGuideLine||!this.startInfo)return;let{line:e}=this.startInfo,t=e.end.clone().sub(e.start).normalize();if(t.lengthSq()<1e-6)return;let n=this.helperObject3D.getWorldPosition(new l.Vector3);this.solidGuide.updateSolidLine(this.dragGuideLine,n,t)}move(e){if(!this.startInfo)return this.dragEnd();let{line:t,startVectorProject:n}=this.startInfo,r=this.originObject3D,i=this.startInfo.draggingDirection===`plane`||this.startInfo.draggingDirection===`xy`||this.startInfo.draggingDirection===`xz`||this.startInfo.draggingDirection===`yz`,a;if(i){let t=this.startInfo.plane;if(!t)return;let n=new l.Vector3,r=t.normal.dot(e.ray.direction);if(Math.abs(r)<1e-6)return;let i=-(t.normal.dot(e.ray.origin)+t.constant)/r;if(i<0)return;n.copy(e.ray.origin.clone().add(e.ray.direction.clone().multiplyScalar(i))),a=n}else a=_t({raycaster:e,line:t,clampToLine:!1});let o=r.position.clone(),s=a.clone().sub(n),c=new l.Matrix4;c.setPosition(s);let u=r.position.clone().applyMatrix4(c);if(this.hooks.emit(`wantToMove`,u))return;let d=u.clone();this.hooks.emit(`moveBefore`,d);let f=new l.Matrix4;f.setPosition(d.clone().sub(o)),r.position.copy(d),this.setTipsText(d),this.setTipsPosition(d),n.copy(a),this.internalHooks.emit(`applyObjectPosition`,{matrix:f}),this.hooks.emit(`move`,d)}setTipsText(e){var t;let n=(t=this.helperObject3D.moveTips)==null?void 0:t.element;if(!n||!this.startInfo)return;let r=this.startInfo.draggingDirection,i=e=>e.toFixed(3);switch(r){case`x`:n.innerText=`x: ${i(e.x)}`;break;case`y`:n.innerText=`y: ${i(e.y)}`;break;case`z`:n.innerText=`z: ${i(e.z)}`;break;case`xy`:n.innerText=`x: ${i(e.x)} y: ${i(e.y)}`;break;case`xz`:n.innerText=`x: ${i(e.x)} z: ${i(e.z)}`;break;case`yz`:n.innerText=`y: ${i(e.y)} z: ${i(e.z)}`;break;case`plane`:n.innerText=`x: ${i(e.x)} y: ${i(e.y)} z: ${i(e.z)}`;break}}setTipsPosition(e){let t=this.helperObject3D.moveTips;if(!t)return;let{x:n,y:r,z:i}=this.helperObject3D.getWorldPosition(new l.Vector3).clone().project(this.camera);if(i>1){t.hide();return}let a=this.container.getBoundingClientRect(),o=(n+1)/2*a.width,s=(-r+1)/2*a.height;t.setLeftTop(o+`px`,s+`px`)}},yt=class{constructor(e,t,n,r,i,a,o,s,c){this.onFiveWantsTapGesture=e=>{if(!this.helperController)return;if(this.helperController.preventTapDefaultEvent)return!1;let t=this.helperController.onWantsTapGesture(e);return this.five.needsRender=!0,t},this.onFiveWantsGesture=(...e)=>{if(!this.helperController)return;let t=this.helperController.onWantsGesture(...e);return this.five.needsRender=!0,t},this.onFiveIntersectionOnModelUpdate=(...e)=>{this.helperController&&this.helperController.onIntersectionOnModelUpdate(...e)};let{camera:l,model:u,scene:d}=e,f=e.getElement();this.five=e,!(!l||!u||!f||!d)&&(this.helperController=new n({camera:l,model:u,domEvents:t,originObject3D:r,helperObject3D:i,container:f,scene:c==null?d:c,onRender:()=>{e.needsRender=!0},sharedHooks:o,sharedInternalHooks:s},a),e.on(`wantsTapGesture`,this.onFiveWantsTapGesture),e.on(`wantsGesture`,this.onFiveWantsGesture),e.on(`intersectionOnModelUpdate`,this.onFiveIntersectionOnModelUpdate))}dispose(){var e;this.five.off(`wantsTapGesture`,this.onFiveWantsTapGesture),this.five.off(`wantsGesture`,this.onFiveWantsGesture),this.five.off(`intersectionOnModelUpdate`,this.onFiveIntersectionOnModelUpdate),(e=this.helperController)==null||e.dispose()}},bt=new l.Quaternion,xt=class extends pt{get rotateCenter(){return this.helperObject3D.position.clone()}constructor(...e){var t,n,r;super(...e),this.name=`RotateController`,this.solidGuide=new ht(this.camera,this.container),this.snapGuideLines=[];let i=this.helperObject3D;this.hoverListener([(t=i.xCircle)==null?void 0:t.circle,(n=i.yCircle)==null?void 0:n.circle,(r=i.zCircle)==null?void 0:r.circle].filter(Boolean));let a=this.dragStart.bind(this),o=this.dragging.bind(this),s=this.dragEnd.bind(this),c=this.show.bind(this),l=this.hide.bind(this),u=()=>{this.helperObject3D.update(this.camera),this.render()};u(),this.domEvents.addEventListener(this.helperObject3D,`mousedown`,a),document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),this.domEvents.addEventListener(this.helperObject3D,`touchstart`,a),document.addEventListener(`touchmove`,o),document.addEventListener(`touchend`,s),this.hooks.on(`moveStart`,l),this.hooks.on(`moveEnd`,c),this.hooks.on(`scaleStart`,l),this.hooks.on(`scaleEnd`,c),this.hooks.on(`moveByMouseEnable`,l),this.hooks.on(`moveByMouseDisable`,c),this.hooks.on(`updateOtherHelpers`,e=>{this.helperObject3D.update(e.camera),this.render()}),this.cameraHooks.on(`cameraUpdate`,u),this.disposers.push(()=>{this.domEvents.removeEventListener(this.helperObject3D,`mousedown`,a),document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s),this.domEvents.removeEventListener(this.helperObject3D,`touchstart`,a),document.removeEventListener(`touchmove`,o),document.removeEventListener(`touchend`,s),this.hooks.off(`moveStart`,l),this.hooks.off(`moveEnd`,c),this.hooks.off(`scaleStart`,l),this.hooks.off(`scaleEnd`,c),this.hooks.off(`moveByMouseEnable`,l),this.hooks.off(`moveByMouseDisable`,c),this.hooks.off(`updateOtherHelpers`),this.cameraHooks.off(`cameraUpdate`,u)})}setRotateAngle(e){let{x:t=0,y:n=0,z:r=0}=e,i=new l.Euler(l.MathUtils.degToRad(t),l.MathUtils.degToRad(n),l.MathUtils.degToRad(r)),a=new l.Quaternion().setFromEuler(i);if(this.hooks.emit(`wantToRotate`,a))return;let{originObject3D:o,rotateCenter:s}=this;Ge(o,a,s),this.internalHooks.emit(`setObjectRotate`,a,s),this.hooks.emit(`rotate`,a),this.render()}getEulerAngle(e,t){let{originObject3D:n}=this,r=new l.Euler().setFromQuaternion(n.quaternion),i={x:l.MathUtils.radToDeg(r.x),y:l.MathUtils.radToDeg(r.y),z:l.MathUtils.radToDeg(r.z)},a={x:e===`x`?t:i.x,y:e===`y`?t:i.y,z:e===`z`?t:i.z},o=new l.Euler(l.MathUtils.degToRad(a.x),l.MathUtils.degToRad(a.y),l.MathUtils.degToRad(a.z));return new l.Quaternion().setFromEuler(o)}onApplyOriginObjectRotate(e){this.isDragging||super.onApplyOriginObjectRotate(e)}onApplyOriginObjectScale(e){}dragStart(e){if(this.isDragging)return;this.helperObject3D.update(this.camera);let t=e==null?void 0:e.intersect;if(!t)return this.dragEnd();let n=(t==null?void 0:t.object).direction;if(!n)return this.dragEnd();let r=t.point;this.setTipsAngle(0);let i=r.clone();i.y+=.2,this.setTipsPosition(i);let a=new l.Quaternion,o=n===`x`?new l.Vector3(1,0,0):n===`y`?new l.Vector3(0,1,0):n===`z`?new l.Vector3(0,0,1):new l.Vector3(0,1,0),s=new l.Plane().setFromNormalAndCoplanarPoint(o,r),c=s.projectPoint(r.clone(),new l.Vector3).clone().sub(this.rotateCenter),u=this.getAngleHelper(n);if(!u)return this.dragEnd();let d=c.angleTo(u.baseAxes.clone().applyQuaternion(a)),f=u.offsetAngle(d);this.setAngleHelperStart(n,f),this.setAngleHelperLength(n,0),this.startInfo={direction:n,startVector:c,directionVector:o,plane:s,angleHelper:u,angle:0,helperQuaternion:a.clone(),startQuaternion:this.originObject3D.quaternion.clone()},bt=new l.Quaternion,this.helperObject3D.showDraggingHelper([n]),this.hooks.emit(`rotateStart`,n),this.isDragging=!0}getMatrix(){var e,t;return(t=(e=this.originObject3D)==null?void 0:e.ext)==null?void 0:t.matrix}getMatrixAngle(e,t){let n;if(e&&e.isMatrix4){n=new l.Quaternion,e.decompose(new l.Vector3,n,new l.Vector3);let r=new l.Euler().setFromQuaternion(n);if(t===`x`)return Math.round(l.MathUtils.radToDeg(r.z));if(t===`y`)return Math.round(l.MathUtils.radToDeg(r.y));if(t===`z`)return Math.round(l.MathUtils.radToDeg(r.x))}}parseAngleByDirection(e){var t,n;let r=(n=(t=this.originObject3D)==null?void 0:t.ext)==null?void 0:n.matrix,i;if(r&&r.isMatrix4){i=new l.Quaternion,r.decompose(new l.Vector3,i,new l.Vector3);let t=new l.Euler().setFromQuaternion(i);if(e===`x`)return Math.round(l.MathUtils.radToDeg(t.z));if(e===`y`)return Math.round(l.MathUtils.radToDeg(t.y));if(e===`z`)return Math.round(l.MathUtils.radToDeg(t.x))}}dragging(e){if(!this.isDragging)return;let t=`touches`in e?e.touches[0].clientX:e.x,n=`touches`in e?e.touches[0].clientY:e.y,r=gt(this.camera,{x:t,y:n},this.container);return r?(this.rotate(r),!1):this.dragEnd()}rotate(e){if(!this.startInfo)return this.dragEnd();let{startVector:t,plane:n,angleHelper:r,direction:i,helperQuaternion:a}=this.startInfo,{originObject3D:o}=this,s=e.ray.intersectPlane(n,new l.Vector3);if(!s)return;let c=this.rotateCenter.clone(),u=n.projectPoint(s.clone(),new l.Vector3).clone().sub(c),d=this.startInfo.directionVector.clone().normalize();u=u.clone().projectOnPlane(d).normalize().multiplyScalar(u.length());let f=new l.Quaternion().setFromUnitVectors(t.clone().normalize(),u.clone().normalize()),p=o.quaternion.clone().premultiply(f);if(t.angleTo(u)===0||this.hooks.emit(`wantToRotate`,p))return;let m=new l.Euler().setFromQuaternion(new l.Quaternion().setFromUnitVectors(t.clone().normalize().applyQuaternion(a.clone().inverse()),u.clone().normalize().applyQuaternion(a.clone().inverse())),`${i.toUpperCase()}${`XZY`.replace(i.toUpperCase(),``)}`)[i]*r.angleDirection,h=this.startInfo.angle,g=h+m,_=Math.PI/2,v=l.MathUtils.degToRad(5),y=l.MathUtils.degToRad(10),b=new l.Quaternion().setFromAxisAngle(d,g),x=this.startInfo.startQuaternion.clone().premultiply(b),S=this.extractAxisAngle(x,d),C=Math.round(S/_)*_,w=Math.abs(S-C);if(Math.abs(g)>y&&w<v){let e=C-S;g+=e}let T=g-h;this.startInfo.angle=g;let E=Math.abs(T)<1e-6&&Math.abs(m)>1e-6,D=this.snapGuideLines.length>0;E&&!D?this.showSnapGuideLines(i,c):!E&&D&&this.removeSnapGuideLines(),this.setAngleHelperLength(i,this.startInfo.angle),this.setTipsAngle(l.MathUtils.radToDeg(this.startInfo.angle));let O=new l.Quaternion().setFromAxisAngle(d,T);if(c){let e=new l.Vector3().subVectors(o.position,c).applyQuaternion(O).add(c);o.position.copy(e)}o.applyQuaternion(O),bt.premultiply(O),this.internalHooks.emit(`applyObjectRotate`,{quaternion:O,origin:c}),this.hooks.emit(`rotate`,o.quaternion),E||(this.startInfo.startVector=u)}dragEnd(){var e;this.isDragging&&(this.removeSnapGuideLines(),(e=this.startInfo)!=null&&e.lineMeshes&&this.startInfo.lineMeshes.forEach(e=>{this.scene.remove(e),e.geometry.dispose(),e.material instanceof l.Material&&e.material.dispose()}),this.startInfo=void 0,this.isDragging=!1,this.helperObject3D.show(),this.updateOtherHelpers(),this.hooks.emit(`rotateEnd`))}updateOtherHelpers(){this.hooks.emit(`updateOtherHelpers`,{camera:this.camera})}getAngleHelper(e){var t,n,r;switch(e){case`x`:return(t=this.helperObject3D.xCircle)==null?void 0:t.angleSector;case`y`:return(n=this.helperObject3D.yCircle)==null?void 0:n.angleSector;case`z`:return(r=this.helperObject3D.zCircle)==null?void 0:r.angleSector}}setAngleHelperStart(e,t){let n=this.getAngleHelper(e);if(!n){console.warn(`angleHelper is undefined`);return}if(n instanceof l.Mesh&&n.geometry instanceof l.CircleGeometry){let{radius:e,segments:r,thetaLength:i}=n.geometry.parameters;n.geometry=new l.CircleGeometry(e,r,t,i)}else console.warn(`only support THREE.CircleGeometry`)}setAngleHelperLength(e,t){let n=.001,r=e===`x`||e===`y`?-t:t,i=r>=0?Math.max(r,n):Math.min(r,-n),a=this.getAngleHelper(e);if(a instanceof l.Mesh&&a.geometry instanceof l.CircleGeometry){let{radius:e,thetaStart:t}=a.geometry.parameters,n=Math.ceil(Math.abs(i)*(40/(2*Math.PI)));a.geometry=new l.CircleGeometry(e,n,t,i)}else console.warn(`only support THREE.CircleGeometry`)}setTipsAngle(e){var t;let n=(t=this.helperObject3D.angleTips)==null?void 0:t.element;n&&(n.innerText=`${e.toFixed(0)}°`)}setTipsPosition(e){let t=this.helperObject3D.angleTips;if(!t)return;let{x:n,y:r,z:i}=this.helperObject3D.getWorldPosition(new l.Vector3).clone().project(this.camera);if(i>1){t.hide();return}let a=this.container.getBoundingClientRect(),o=(n+1)/2*a.width,s=(-r+1)/2*a.height;t.setLeftTop(o+`px`,s+`px`)}extractAxisAngle(e,t){let n=t.clone().normalize(),r=e.x*n.x+e.y*n.y+e.z*n.z,i=e.w,a=2*Math.atan2(r,i);return Math.atan2(Math.sin(a),Math.cos(a))}showSnapGuideLines(e,t){this.removeSnapGuideLines();let n=(()=>{switch(e){case`x`:return[new l.Vector3(0,1,0),new l.Vector3(0,0,1)];case`y`:return[new l.Vector3(1,0,0),new l.Vector3(0,0,1)];case`z`:return[new l.Vector3(1,0,0),new l.Vector3(0,1,0)];default:return[]}})();for(let e of n){let n=this.solidGuide.createSolidLine(t,e,{color:16777215,renderOrder:G.DRAG_GUIDE_LINE});this.scene.add(n),this.snapGuideLines.push(n)}this.render()}removeSnapGuideLines(){for(let e of this.snapGuideLines)this.scene.remove(e),this.solidGuide.dispose(e);this.snapGuideLines=[]}},St=class extends pt{constructor(...e){super(...e),this.name=`BoundingBoxController`;let t=()=>{this.syncWithObject(),this.render()};this.hooks.on(`moveEnd`,t),this.hooks.on(`rotateEnd`,t),this.hooks.on(`scaleEnd`,t),this.disposers.push(()=>{this.hooks.off(`moveEnd`,t),this.hooks.off(`rotateEnd`,t),this.hooks.off(`scaleEnd`,t)})}onApplyOriginObjectRotate(e){this.helperObject3D.applyHelperQuaternion(e.quaternion,e.origin)}onSetOriginObjectRotate(e,t){this.helperObject3D.setHelperQuaternion(e,t)}syncWithObject(){this.helperObject3D.position.copy(this.originObject3D.position),this.helperObject3D.quaternion.copy(this.originObject3D.quaternion),this.helperObject3D.scale.copy(this.originObject3D.scale);let e=this.helperObject3D;e.update&&e.update()}};function $(e,t){this._camera=e||null,this._domElement=t||document,this._raycaster=new l.Raycaster,this._selected=null,this._boundObjs={};var n=this;this._$onClick=function(){n._onClick.apply(n,arguments)},this._$onDblClick=function(){n._onDblClick.apply(n,arguments)},this._$onMouseMove=function(){n._onMouseMove.apply(n,arguments)},this._$onMouseDown=function(){n._onMouseDown.apply(n,arguments)},this._$onMouseUp=function(){n._onMouseUp.apply(n,arguments)},this._$onTouchMove=function(){n._onTouchMove.apply(n,arguments)},this._$onTouchStart=function(){n._onTouchStart.apply(n,arguments)},this._$onTouchEnd=function(){n._onTouchEnd.apply(n,arguments)},this._$onContextmenu=function(){n._onContextmenu.apply(n,arguments)},this._domElement.addEventListener(`click`,this._$onClick,!1),this._domElement.addEventListener(`dblclick`,this._$onDblClick,!1),this._domElement.addEventListener(`mousemove`,this._$onMouseMove,!1),this._domElement.addEventListener(`mousedown`,this._$onMouseDown,!1),this._domElement.addEventListener(`mouseup`,this._$onMouseUp,!1),this._domElement.addEventListener(`touchmove`,this._$onTouchMove,!1),this._domElement.addEventListener(`touchstart`,this._$onTouchStart,!1),this._domElement.addEventListener(`touchend`,this._$onTouchEnd,!1),this._domElement.addEventListener(`contextmenu`,this._$onContextmenu,!1)}$.prototype.destroy=function(){this._domElement.removeEventListener(`click`,this._$onClick,!1),this._domElement.removeEventListener(`dblclick`,this._$onDblClick,!1),this._domElement.removeEventListener(`mousemove`,this._$onMouseMove,!1),this._domElement.removeEventListener(`mousedown`,this._$onMouseDown,!1),this._domElement.removeEventListener(`mouseup`,this._$onMouseUp,!1),this._domElement.removeEventListener(`touchmove`,this._$onTouchMove,!1),this._domElement.removeEventListener(`touchstart`,this._$onTouchStart,!1),this._domElement.removeEventListener(`touchend`,this._$onTouchEnd,!1),this._domElement.removeEventListener(`contextmenu`,this._$onContextmenu,!1)},$.eventNames=[`click`,`dblclick`,`mouseover`,`mouseout`,`mousemove`,`mousedown`,`mouseup`,`contextmenu`,`touchstart`,`touchend`],$.prototype._getRelativeMouseXY=function(e){var t=e.target||e.srcElement;t.nodeType===3&&(t=t.parentNode);var n={x:0,y:0},r=t,i=getComputedStyle(r,null);n.y+=parseInt(i.getPropertyValue(`padding-top`),10),n.x+=parseInt(i.getPropertyValue(`padding-left`),10);do n.x+=r.offsetLeft,n.y+=r.offsetTop,i=getComputedStyle(r,null),n.x+=parseInt(i.getPropertyValue(`border-left-width`),10),n.y+=parseInt(i.getPropertyValue(`border-top-width`),10);while(r=r.offsetParent);var a={width:t===window?window.innerWidth:t.offsetWidth,height:t===window?window.innerHeight:t.offsetHeight};return{x:Number((e.pageX-n.x)/a.width)*2-1,y:-((e.pageY-n.y)/a.height)*2+1}},$.prototype._objectCtxInit=function(e){e._3xDomEvent={}},$.prototype._objectCtxDeinit=function(e){delete e._3xDomEvent},$.prototype._objectCtxIsInit=function(e){return!!e._3xDomEvent},$.prototype._objectCtxGet=function(e){return e._3xDomEvent},$.prototype.camera=function(e){return e&&(this._camera=e),this._camera},$.prototype.bind=function(e,t,n,r){console.assert($.eventNames.indexOf(t)!==-1,`not available events:`+t),this._objectCtxIsInit(e)||this._objectCtxInit(e);var i=this._objectCtxGet(e);i[t+`Handlers`]||(i[t+`Handlers`]=[]),i[t+`Handlers`].push({callback:n,useCapture:r}),this._boundObjs[t]===void 0&&(this._boundObjs[t]=[]),this._boundObjs[t].push(e)},$.prototype.addEventListener=$.prototype.bind,$.prototype.unbind=function(e,t,n,r){console.assert($.eventNames.indexOf(t)!==-1,`not available events:`+t),this._objectCtxIsInit(e)||this._objectCtxInit(e);var i=this._objectCtxGet(e);i[t+`Handlers`]||(i[t+`Handlers`]=[]);for(var a=i[t+`Handlers`],o=0;o<a.length;o++){var s=a[o];if(n==s.callback&&r==s.useCapture){a.splice(o,1);break}}var c=this._boundObjs[t].indexOf(e);this._boundObjs[t].splice(c,1)},$.prototype.removeEventListener=$.prototype.unbind,$.prototype._bound=function(e,t){var n=this._objectCtxGet(t);return n?!!n[e+`Handlers`]:!1},$.prototype._isObjectVisible=function(e){for(var t=e;t;){if(t.visible===!1)return!1;t=t.parent}return!0},$.prototype._filterVisibleObjects=function(e){var t=this;return e.filter(function(e){return t._isObjectVisible(e)})},$.prototype._onMove=function(e,t,n,r){var i=this._boundObjs[e];if(!(i===void 0||i.length===0)){var a=this._filterVisibleObjects(i);if(a.length!==0){var o=new l.Vector2;o.set(t,n),this._raycaster.setFromCamera(o,this._camera);var s=this._raycaster.intersectObjects(a),c=this;s=s.filter(function(e){return c._isObjectVisible(e.object)}),s.sort(function(e,t){var n=e.object.renderOrder||0,r=t.object.renderOrder||0;return n===r?e.distance-t.distance:r-n});var u=this._selected;if(s.length>0){var d,f,p,m=s[0],h=m.object;this._selected=h,p=this._bound(`mousemove`,h),u!=h&&(d=this._bound(`mouseover`,h),f=u&&this._bound(`mouseout`,u))}else f=u&&this._bound(`mouseout`,u),this._selected=null;p&&this._notify(`mousemove`,h,r,m),d&&this._notify(`mouseover`,h,r,m),f&&this._notify(`mouseout`,u,r,m)}}},$.prototype._onEvent=function(e,t,n,r){var i=this._boundObjs[e];if(!(i===void 0||i.length===0)){var a=this._filterVisibleObjects(i);if(a.length!==0){var o=new l.Vector2;o.set(t,n),this._raycaster.setFromCamera(o,this._camera);var s=this._raycaster.intersectObjects(a,!0),c=this;if(s=s.filter(function(e){return c._isObjectVisible(e.object)}),s.sort(function(e,t){var n=e.object.renderOrder||0,r=t.object.renderOrder||0;return n===r?e.distance-t.distance:r-n}),s.length!==0){for(var u=s[0],d=u.object,f=this._objectCtxGet(d),p=d.parent;f===void 0&&p;)f=this._objectCtxGet(p),p=p.parent;f&&this._notify(e,d,r,u)}}}},$.prototype._notify=function(e,t,n,r){var i=this._objectCtxGet(t),a=i?i[e+`Handlers`]:null;if(!i||!a||a.length===0){t.parent&&this._notify(e,t.parent,n,r);return}for(var a=i[e+`Handlers`],o=0;o<a.length;o++){var s=a[o],c=!0;s.callback({type:e,target:t,origDomEvent:n,intersect:r,stopPropagation:function(){c=!1}}),c&&s.useCapture===!1&&t.parent&&this._notify(e,t.parent,n,r)}},$.prototype._onMouseDown=function(e){return this._onMouseEvent(`mousedown`,e)},$.prototype._onMouseUp=function(e){return this._onMouseEvent(`mouseup`,e)},$.prototype._onMouseEvent=function(e,t){var n=this._getRelativeMouseXY(t);this._onEvent(e,n.x,n.y,t)},$.prototype._onMouseMove=function(e){var t=this._getRelativeMouseXY(e);this._onMove(`mousemove`,t.x,t.y,e),this._onMove(`mouseover`,t.x,t.y,e),this._onMove(`mouseout`,t.x,t.y,e)},$.prototype._onClick=function(e){this._onMouseEvent(`click`,e)},$.prototype._onDblClick=function(e){this._onMouseEvent(`dblclick`,e)},$.prototype._onContextmenu=function(e){this._onMouseEvent(`contextmenu`,e)},$.prototype._onTouchStart=function(e){return this._onTouchEvent(`touchstart`,e)},$.prototype._onTouchEnd=function(e){return this._onTouchEvent(`touchend`,e)},$.prototype._onTouchMove=function(e){if(e.touches.length==1){var t=Number(e.touches[0].pageX/window.innerWidth)*2-1,n=-(e.touches[0].pageY/window.innerHeight)*2+1;this._onMove(`mousemove`,t,n,e),this._onMove(`mouseover`,t,n,e),this._onMove(`mouseout`,t,n,e)}},$.prototype._onTouchEvent=function(e,t){var n=t.touches;if(n.length==0&&(n=t.changedTouches),n.length==1){var r=Number(n[0].pageX/window.innerWidth)*2-1,i=-(n[0].pageY/window.innerHeight)*2+1;this._onEvent(e,r,i,t)}};var Ct=`Object3DHelperPlugin`,wt=Ct,Tt=()=>{console.error(`${wt} is disposed`)},Et=()=>{console.warn(`${wt} is disabled`)},Dt=()=>{console.error(`${wt} is disabled`)},Ot=class{constructor(e){this.controllers={},this.state={visible:!0,enabled:!0,disposed:!1},this.hooks=new c.Subscribe,e&&this.addControllers(e),this.setState(this.state)}show(e){this.setState({visible:!0},e)}hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,t){if(this.state.disposed||!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return;let n=Object.assign({},this.state);this.state=Object.assign(Object.assign({},this.state),e),e.disposed!==void 0&&e.disposed!==n.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&this.handleVisible(e.visible),e.enabled!==void 0&&this.handleEnable(e.enabled),this.hooks.emit(`stateChange`,{state:this.state,prevState:n})}addControllers(e){this.controllers=Object.assign(Object.assign({},this.controllers),e),this.setState(this.state)}initialHelperMatrix(){this.everyControllerDo(e=>{e.initialHelperPosition(),e.initialHelperQuaternion()})}handleEnable(e,t=!0){e?(this.everyControllerDo(e=>e.enable()),this.hooks.emit(`enable`,{userAction:t})):(this.everyControllerDo(e=>e.disable()),this.hooks.emit(`disable`,{userAction:t}))}handleVisible(e,t=!0){e?(this.everyControllerDo(e=>e.show()),this.state.enabled&&this.hooks.emit(`show`,{userAction:t})):(this.everyControllerDo(e=>e.hide()),this.state.enabled&&this.hooks.emit(`hide`,{userAction:t}))}handleDispose(){Object.values(this.controllers).forEach(e=>{e==null||e.dispose()})}everyControllerDo(e){Object.values(this.controllers).forEach(t=>{t&&e(t)})}},kt=class extends p.Controller{constructor(e){super(e),this.name=Ct,this.state={visible:!0,enabled:!0,disposed:!1},this.objectHelperMap=new Map,this.five=e}show(e){return m(this,void 0,void 0,function*(){this.setState({visible:!0},e)})}hide(e){return m(this,void 0,void 0,function*(){this.setState({visible:!1},e)})}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}load(e){return m(this,void 0,void 0,function*(){})}setState(e,t){var n;if(this.state.disposed)return Tt();if(!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return Dt();let r=Object.assign({},this.state);this.state=Object.assign(Object.assign({},this.state),e),e.disposed!==void 0&&e.disposed!==r.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==r.visible&&this.handleVisible(e.visible),e.enabled!==void 0&&e.enabled!==r.enabled&&this.handleEnable(e.enabled),this.hooks.emit(`stateChange`,{state:this.state,prevState:r,userAction:(n=t==null?void 0:t.userAction)==null?!0:n})}getObject3DHelper(e){return this.objectHelperMap.get(e)}addObject3DHelper(e,t={}){var n,r;if(!e){console.error(`Object3D is undefined`);return}if(this.objectHelperMap.has(e)){console.warn(`Object3DHelperPlugin: object3D ${e.name} already has helper`);return}let i=new Ot,a=[],o=(n=this.five.getElement())==null?void 0:n.parentElement;this.five.camera;let s=Object.assign(Object.assign({},{moveHelper:!0,rotateHelper:!0,boundingBoxHelper:!1,moveHelperTips:!1,positionFrom:`objectPosition`}),t),{moveHelper:u,rotateHelper:d,boundingBoxHelper:f}=s,p=new l.Group;s.helperOffset&&p.position.copy(s.helperOffset),this.five.scene.add(p);let m=i.hooks,h=new c.Subscribe,g=new $(this.five.camera,this.five.getElement()),_=e=>{if(e)return typeof e==`boolean`?e:e.enable},v={};if(_(u)){let t=Object.assign(Object.assign({},this.getConfig(s.moveHelper)),s),n=new Y(e,Object.assign({container:o==null?void 0:o,moveTipsEnable:(r=s.moveHelperTips)==null?!1:r},t)),i=new yt(this.five,g,vt,e,n,t,m,h,p);v.moveController=i.helperController,a.push(()=>i.dispose())}if(_(d)){let t=Object.assign(Object.assign({},this.getConfig(s.rotateHelper)),s),n=new st(e,Object.assign({container:o==null?void 0:o},t)),r=new yt(this.five,g,xt,e,n,t,m,h,p);v.rotateController=r.helperController,a.push(()=>r.dispose())}if(_(f)){let t=new ut(e),n=new yt(this.five,g,St,e,t,void 0,m,h,p);v.boundingBoxController=n.helperController,a.push(()=>n.dispose())}return Object.values(v).forEach(e=>{e&&typeof e.updateOtherControllers==`function`&&e.updateOtherControllers(v)}),i.addControllers(v),this.objectHelperMap.set(e,{helper:i,disposers:a,helperGroup:p}),i.controllers}removeObject3DHelper(e){if(!this.objectHelperMap.has(e))return;let{helper:t,disposers:n,helperGroup:r}=this.objectHelperMap.get(e);this.objectHelperMap.delete(e),t.dispose(),n==null||n.forEach(e=>e==null?void 0:e()),r.parent&&r.parent.remove(r)}handleEnable(e,t=!0){e?(this.everyHelperDo(e=>e.enable()),this.hooks.emit(`enable`,{userAction:t})):(this.everyHelperDo(e=>e.disable()),this.hooks.emit(`disable`,{userAction:t})),this.state.enabled=e}handleVisible(e,t=!0){e?(this.everyHelperDo(e=>e.show()),this.actionIfStateIsEnabled(()=>this.hooks.emit(`show`,{userAction:t}))):(this.everyHelperDo(e=>e.hide()),this.actionIfStateIsEnabled(()=>this.hooks.emit(`hide`,{userAction:t}))),this.state.visible=e}handleDispose(){this.objectHelperMap.forEach(({helper:e,disposers:t,helperGroup:n})=>{e.dispose(),t==null||t.forEach(e=>e==null?void 0:e()),n.parent&&n.parent.remove(n)}),this.objectHelperMap.clear()}everyHelperDo(e){this.objectHelperMap.forEach(({helper:t,disposers:n})=>{t&&e(t,n)})}actionIfStateIsEnabled(e,t){if(this.state.enabled)return e();t!=null&&t.warnLog&&Et()}getConfig(e){if(e&&typeof e!=`boolean`&&e.enable)return e}},At=e=>new kt(e),jt=class{constructor(e,t,n,r,i){this.R=e,this.Q=t,this.A=n,this.B=r,this.C=i,this.cov=NaN,this.x=NaN}filter(e,t=0){if(isNaN(this.x))this.x=1/this.C*e,this.cov=1/this.C*this.Q*(1/this.C);else{let n=this.A*this.x+this.B*t,r=this.A*this.cov*this.A+this.R,i=r*this.C*(1/(this.C*r*this.C+this.Q));this.x=n+i*(e-this.C*n),this.cov=r-i*this.C*r}return this.x}},Mt=class extends p.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){var n,r,i;super(e),this.boundingAABB=null,this.cancelAnimation=null,this.boundsSet=!1,this.keyframes=[],this.five=e,this.state={enabled:!0,visible:!0},this.duration=(n=t==null?void 0:t.duration)==null?6e3:n,this.curveHeight=(r=t==null?void 0:t.curveHeight)==null?1.5:r,this.pointDuration=(i=t==null?void 0:t.pointDuration)==null?4e3:i}load(){return m(this,void 0,void 0,function*(){})}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!0},n)}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!1},n)}dispose(){this.disable(),this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null);try{let e=this.findRenderMesh();if(e){let t=e.material.uniforms;t.u_aggregationEnabled.value=!1,t.u_aggregationProgress.value=1}}catch(e){}}extractKeyframes(e){let t=[];if(!e.content.data)throw Error(`轨迹数据未加载`);let n=e.content.data.positionArray,r=n.length/3,i=.01,a=.1,o=new jt(i,a,1,0,1),s=new jt(i,a,1,0,1),c=new jt(i,a,1,0,1),u=new Float32Array(r);for(let e=0;e<r;e++)if(e===0)u[e]=0;else{let t=new l.Vector3(n[(e-1)*3],n[(e-1)*3+1],n[(e-1)*3+2]);u[e]=new l.Vector3(n[e*3],n[e*3+1],n[e*3+2]).distanceTo(t)+u[e-1]}for(let i=0;i<r;i++){let a=new l.Vector3(0,0,0),d=0;for(let e=i-5;e<i+6;e++)e>=0&&e<r&&(a.add(new l.Vector3(n[e*3],n[e*3+1],n[e*3+2])),d++);a.divideScalar(d).applyMatrix4(e.transform);let f=o.filter(a.x),p=s.filter(a.y),m=c.filter(a.z);t.push({position:new l.Vector3(f,p,m),location:u[i]})}return t}computeAABB2D(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e)a.position.x<t&&(t=a.position.x),a.position.x>n&&(n=a.position.x),a.position.z<r&&(r=a.position.z),a.position.z>i&&(i=a.position.z);return{min:new l.Vector2(t,r),max:new l.Vector2(n,i)}}findClosestKeyframeToRay(e,t){let n=1/0,r=t[0].position.clone(),i=new l.Vector3;for(let a of t){e.closestPointToPoint(a.position,i);let t=i.distanceTo(a.position);t<n&&(n=t,r=a.position.clone())}return r}getCameraCurve(){return m(this,void 0,void 0,function*(){var e,t,n;let r=(n=(t=(e=this.five.model.viewLayers[0])==null?void 0:e.scene)==null?void 0:t.trajectories)==null?void 0:n[0];if(!r)throw Error(`未找到轨迹数据`);r.visible=!0,yield new Promise(e=>{let t=c.AnimationFrameLoop.shared.add(()=>{r.content.loadState===`READY`&&(t(),e(),r.visible=!1)})});let i=this.extractKeyframes(r);if(i.length<2)throw Error(`轨迹关键帧不足,至少需要2个关键帧`);this.keyframes=i;let a=this.computeAABB2D(i);this.boundingAABB=a;let o=this.curveHeight,s=new l.Vector3((a.min.x+a.max.x)/2,o,(a.min.y+a.max.y)/2),u=(a.max.x-a.min.x)/2,d=(a.max.y-a.min.y)/2,f=Math.sqrt(u*u+d*d),p=e=>{let t=new l.Vector3().subVectors(e,s);return t.length()<.001&&t.set(1,0,0),s.clone().add(t.normalize().multiplyScalar(f))},m=new l.Vector3(i[0].position.x,o,i[0].position.z),h=p(m),g=new l.Vector3().subVectors(s,m).normalize(),_=new l.Ray(m,g),v=new l.Vector3(-g.z,0,g.x).normalize(),y=new l.Ray(s,v),b=this.findClosestKeyframeToRay(y,i),x=p(new l.Vector3(b.x,o,b.z)),S=this.findClosestKeyframeToRay(_,i),C=p(new l.Vector3(S.x,o,S.z));return new l.CatmullRomCurve3([h,x,C],!1,`centripetal`,.5)})}findRenderMesh(){let e=null;if(this.five.scene.traverse(t=>{e||t instanceof l.Mesh&&t.material&&t.material.uniforms&&t.material.uniforms.u_aggregationEnabled&&(e=t)}),!e)throw Error(`未找到 GaussianSplatting 渲染网格`);return e}setBounding(e,t,n){let r=this.findRenderMesh();r.material.uniforms.u_aggregationBoundsMin.value.copy(e),r.material.uniforms.u_aggregationBoundsMax.value.copy(t),this.boundsSet=!0}setBounds(){if(!this.boundingAABB)throw Error(`请先调用 getCameraCurve 计算轨迹边界`);let e=this.boundingAABB,t=this.findRenderMesh(),n=new l.Vector3(e.min.x,0,e.min.y),r=new l.Vector3(e.max.x,3,e.max.y);t.material.uniforms.u_aggregationBoundsMin.value.copy(n),t.material.uniforms.u_aggregationBoundsMax.value.copy(r),this.boundsSet=!0}startAggregation(){if(!this.boundsSet)throw Error(`请先调用 setBounds 设置聚合边界`);let e=this.findRenderMesh().material.uniforms;e.u_aggregationEnabled.value=!0,e.u_aggregationProgress.value=0,e.u_aggregationPointDuration.value=Math.min(this.pointDuration/this.duration,1),this.five.needsRender=!0;let t=performance.now(),n=this.duration;this.cancelAnimation=c.AnimationFrameLoop.shared.add(()=>{let r=performance.now()-t,i=Math.min(r/n,1),a=i*i*(3-2*i);e.u_aggregationProgress.value=a,this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0,i>=1&&(e.u_aggregationEnabled.value=!1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null))})}playEntrance(){return m(this,void 0,void 0,function*(){let e=yield this.getCameraCurve(),t=this.boundingAABB,n=new l.Vector3((t.min.x+t.max.x)/2,this.curveHeight,(t.min.y+t.max.y)/2),r=e.getPointAt(0),i=new c.Camera(90).copy(this.five.camera);i.position.copy(r),i.lookAt(n),i.computePose(0),this.five.setState(Object.assign({},i.pose)),this.setBounds();let a=this.findRenderMesh().material.uniforms;a.u_aggregationEnabled.value=!0,a.u_aggregationProgress.value=0,a.u_aggregationPointDuration.value=Math.min(this.pointDuration/this.duration,1),this.five.needsRender=!0;let o=this.duration,s=performance.now();return new Promise(t=>{this.cancelAnimation=c.AnimationFrameLoop.shared.add(()=>{let r=performance.now()-s,c=Math.min(r/o,1),l=c*c*(3-2*c);a.u_aggregationProgress.value=l,this.five.modelSceneNeedsRender=!0;let u=e.getPointAt(l);i.position.copy(u),i.lookAt(n),i.computePose(0),this.five.setState(Object.assign({},i.pose)),this.five.needsRender=!0,c>=1&&(a.u_aggregationEnabled.value=!1,a.u_aggregationProgress.value=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),t())})})})}},Nt=(e,t)=>new Mt(e,t);exports.BackgroundPlugin=ue,Object.defineProperty(exports,`BasePlugin`,{enumerable:!0,get:function(){return p}}),exports.CSS2DObject=Fe,exports.CSS2DPlugin=We,exports.CSS2DRenderer=Ve,exports.CSS3DObject=M,exports.CSS3DPlugin=Pe,exports.CSS3DRenderer=se,exports.CSS3DSprite=ae,exports.DynamicPathLinePlugin=ke,exports.GaussianSplattingEntranceAnimationPlugin=Nt,exports.ItemMaskPlugin=A,exports.Object3DHelperController=kt,exports.Object3DHelperPlugin=At,exports.OrbitControls=j,exports.OrientationPlugin=V,exports.PanoAnimePlugin=xe,exports.RoundedBoxGeometry=F,exports.TrajectoryPlugin=U;
849
+ `,Ue=class extends p.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){super(e),this.scene=new l.Scene,this.styleSheet=new CSSStyleSheet,this.camera=new l.PerspectiveCamera,this.createCSS2DObject=({id:e=Me(),name:t,innerHTML:n,center:r,position:i,visible:a=!0,timeout:o})=>{let s=document.createElement(`div`);s.className=`five-CSS2DPlugin-X`,a||s.classList.add(`five-CSS2DPlugin-hidden`),o&&s.style.setProperty(`--timeout`,o+`ms`),s.innerHTML=n;let c=new Fe(s);return c.userData={id:e,_visible:a,_timeout:o,get visible(){return this._visible},set visible(e){e?s.classList.remove(`five-CSS2DPlugin-hidden`):s.classList.add(`five-CSS2DPlugin-hidden`),this._visible=e},get timeout(){return this._timeout},set timeout(e){s.style.setProperty(`--timeout`,e+`ms`),this._timeout=e}},r&&c.center.copy(r),i&&c.position.copy(i),t&&(c.name=t),c},this.render=()=>{this.camera.fov=this.five.camera.fov,this.camera.aspect=this.five.camera.aspect,this.camera.position.copy(this.five.camera.position),this.camera.rotation.copy(this.five.camera.rotation),this.camera.updateProjectionMatrix(),this.renderer.render(this.scene,this.camera)},this._addEventListener=()=>{this.five.on(`render.prepare`,this.render),this.appendToFiveContainer()},this._removeEventListener=()=>{var e;this.five.off(`render.prepare`,this.render),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=void 0},this.dispose=()=>{this.removeAll(),this._disable({userAction:!1})},this.five=e,this.renderer=new Ve,this.renderer.domElement.id=`five-CSS2DPlugin`,this.styleSheet.replaceSync(He),document&&document.adoptedStyleSheets.push(this.styleSheet),this.state=Object.assign({enabled:!0,visible:!0},t==null?void 0:t.initialState),this.state.enabled?this._enable({userAction:!1}):this.styleSheet.disabled=!0}load(e){return m(this,void 0,void 0,function*(){})}appendToFiveContainer(){var e;if(!this.five.renderer)return;let t=this.five.getElement();if(!(t!=null&&t.parentElement))return;let{x:n,y:r}=this.five.renderer.getSize(new l.Vector2);t.parentElement.appendChild(this.renderer.domElement),this.renderer.setSize(n,r),(e=this.resizeObserver)==null||e.disconnect(),this.resizeObserver=new ResizeObserver(()=>{var e;if(!this.five.renderer)return;let t=(e=this.five.getElement())==null?void 0:e.getBoundingClientRect();if(!t)return;let{x:n,y:r,width:i,height:a}=t;this.renderer.setSize(i,a),this.renderer.domElement.style.left=n+`px`,this.renderer.domElement.style.top=r+`px`,this.render()}),this.resizeObserver.observe(t)}add(...e){this.scene.add(...e),this.render()}remove(e){this.scene.remove(e),e.traverse(e=>{e instanceof Fe&&e.element.remove()}),this.render()}removeAll(){this.scene.remove(...this.scene.children),this.render()}fadeInObjects(...e){for(let t of e)t.userData.visible=!0;this.render()}fadeOutObjects(...e){for(let t of e)t.userData.visible=!1;this.render()}_enable(e){this.styleSheet.disabled=!1,this.updateState({enabled:!0},e.userAction),this._addEventListener(),this.render()}_disable(e){this.styleSheet.disabled=!0,this.updateState({enabled:!1},e.userAction),this._removeEventListener()}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this._enable({userAction:n})}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this._disable({userAction:n})}show(e){this.renderer.domElement.style.display=`block`,this.updateState({visible:!0},!0),this.render()}hide(e){this.renderer.domElement.style.display=`none`,this.updateState({visible:!1},!0)}},We=(e,t)=>new Ue(e,t);function Ge(e,t,n){if(n){let r=new l.Vector3().subVectors(e.position,n).applyQuaternion(e.quaternion.clone().inverse()).applyQuaternion(t).add(n);e.position.copy(r)}e.quaternion.copy(t)}function Ke(e){return e==null}var qe=class extends l.Object3D{removeChildren(){for(;this.children.length>0;)this.remove(this.children[0]);return this}add(...e){let t=e.filter(Boolean);return t.length===0?this:super.add(...t)}addIfNotExists(...e){return e.forEach(e=>{this.children.includes(e)||this.add(e)}),this}remove(...e){if(e.length===0)return this;let t=e.filter(Boolean);return super.remove(...t)}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}get helperObject(){return this}constructor(e,t){var n,r;super(),this.originObject3D=e,this.onRender=(n=t==null?void 0:t.onRender)==null?(()=>{}):n,this.positionFrom=(r=t==null?void 0:t.positionFrom)==null?`objectPosition`:r}render(){this.onRender()}enable(){this.parent&&(this.parent.children.includes(this)||this.parent.add(this))}disable(){this.removeFromParent()}show(){this.visible=!0,this.render()}hide(){this.visible=!1,this.render()}raycasterIntersectObject(e,t=[]){return e.intersectObject(this,!0,t)}initialPosition(e){this.positionFrom===`objectPosition`?this.position.copy(this.originObject3D.position):this.positionFrom===`boundingBox`||this.positionFrom===`boundingSphere`?this.position.copy(new l.Box3().expandByObject(this.originObject3D).getCenter(new l.Vector3)):this.positionFrom instanceof l.Vector3?this.position.copy(this.positionFrom):this.positionFrom instanceof Function&&this.position.copy(this.positionFrom(this.originObject3D)),e&&this.position.add(e)}setScaleByCamera(e){}initQuaternion(e){if(this.quaternion.set(0,0,0,1),e&&(e.xAxis||e.yAxis||e.zAxis)){let t=e.xAxis instanceof Function?e.xAxis():e.xAxis,n=e.yAxis instanceof Function?e.yAxis():e.yAxis,r=e.zAxis instanceof Function?e.zAxis():e.zAxis,i=t==null?void 0:t.clone(),a=n==null?void 0:n.clone(),o=r==null?void 0:r.clone();if(i&&!a&&!a){let e=new l.Quaternion().setFromUnitVectors(new l.Vector3(1,0,0),i.normalize());this.applyQuaternion(e)}if(a&&!i&&!o){let e=new l.Quaternion().setFromUnitVectors(new l.Vector3(0,1,0),a.normalize());this.applyQuaternion(e)}if(o&&!i&&!a){let e=new l.Quaternion().setFromUnitVectors(new l.Vector3(0,0,1),o.normalize());this.applyQuaternion(e)}if([i,a,o].filter(e=>!Ke(e)).length>=2){i||(i=new l.Vector3().crossVectors(a,o).normalize()),a||(a=new l.Vector3().crossVectors(i,o).normalize()),o||(o=new l.Vector3().crossVectors(i,a).normalize()),i.applyQuaternion(this.quaternion),a.applyQuaternion(this.quaternion),o.applyQuaternion(this.quaternion);let e=new l.Matrix4().makeBasis(i,a,o),t=new l.Quaternion().setFromRotationMatrix(e);this.quaternion.copy(t)}}}applyHelperScaleMatrix4(e,t){this.scale.applyMatrix4(e)}setHelperQuaternion(e,t){this.initQuaternion(),t?Ge(this,this.quaternion.clone().premultiply(e),t):this.quaternion.premultiply(e)}applyHelperQuaternion(e,t){if(t){let n=new l.Vector3().subVectors(this.position,t).applyQuaternion(e).add(t);this.position.copy(n)}this.applyQuaternion(e)}dispose(){this.removeFromParent()}},Je=class extends qe{},Ye=class extends qe{},Xe=class extends qe{},Ze=class extends l.Group{constructor(e){super(),this.direction=e||`x`}};l.Line;var Qe=class extends l.Mesh{constructor(e,t,n){super(e,t),this.direction=n||`x`}},$e={X:16730698,Y:54927,Z:3368703},W=class{static get X(){return new l.Color($e.X).convertSRGBToLinear().clone()}static get Y(){return new l.Color($e.Y).convertSRGBToLinear().clone()}static get Z(){return new l.Color($e.Z).convertSRGBToLinear().clone()}},G={ROTATE_HELPER:9992,MOVE_HELPER:9993,SCALE_HELPER_LINE:9994,SCALE_HELPER_SPHERE:9995,MOVE_HELPER_ARROW:10001,MOVE_HELPER_CENTER:10002,DRAG_GUIDE_LINE:10003,DRAG_FACE_PATCH:10004},K=class extends Ze{constructor(e){var t;super(e.direction),this.lineHeight=.5,this.arrowHeight=.1,this.name=`ArrowGroup`;let n=new l.Color((t=e.color)==null?16214315:t),r=()=>new l.MeshBasicMaterial({color:n,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1});this.arrow=new Qe(new l.ConeGeometry(.04,this.arrowHeight,32),r(),e.direction),this.arrow.name=`arrow-${e.direction}`,this.arrow.renderOrder=G.MOVE_HELPER_ARROW,this.arrowNeg=new Qe(new l.ConeGeometry(.04,this.arrowHeight,32),r(),e.direction),this.arrowNeg.name=`arrow-neg-${e.direction}`,this.arrowNeg.renderOrder=G.MOVE_HELPER_ARROW;let i=.004;this.line=new Qe(new l.CylinderGeometry(i,i,this.lineHeight,32),r(),e.direction),this.line.name=`line-${e.direction}`,this.line.renderOrder=G.MOVE_HELPER_ARROW,this.formatGeometries(),this.add(this.arrow,this.arrowNeg,this.line)}formatGeometries(){let e=this.lineHeight,t=this.arrowHeight;this.arrow.geometry.translate(0,e+t/2,0),this.arrowNeg.geometry.rotateZ(Math.PI),this.arrowNeg.geometry.translate(0,-(e+t/2),0),this.line.geometry.translate(0,e/2,0),this.direction===`x`?(this.arrow.geometry.rotateX(Math.PI/2),this.arrow.geometry.rotateY(Math.PI/2),this.arrowNeg.geometry.rotateX(Math.PI/2),this.arrowNeg.geometry.rotateY(Math.PI/2),this.line.geometry.rotateX(Math.PI/2),this.line.geometry.rotateY(Math.PI/2)):this.direction===`z`&&(this.arrow.geometry.rotateX(Math.PI/2),this.arrowNeg.geometry.rotateX(Math.PI/2),this.line.geometry.rotateX(Math.PI/2))}},et=class extends Ze{constructor(e){var t,n;super(`plane`),this.name=`CenterHandle`,this.faceNormals=[new l.Vector3(1,0,0),new l.Vector3(-1,0,0),new l.Vector3(0,1,0),new l.Vector3(0,-1,0),new l.Vector3(0,0,1),new l.Vector3(0,0,-1)],this.baseColor=new l.Color((t=e==null?void 0:e.color)==null?16419862:t);let r=(n=e==null?void 0:e.size)==null?.05:n,i=new l.Color(16755008).convertSRGBToLinear();this.faceMaterials=Array.from({length:6},()=>new l.MeshBasicMaterial({color:i,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,side:l.FrontSide}));let a=new l.BoxGeometry(r,r,r),o=new l.Mesh(a,this.faceMaterials);o.direction=`plane`,o.renderOrder=G.MOVE_HELPER_CENTER,o.name=`center-plane-handle`,this.cube=o,this.add(this.cube)}update(e){let t=new l.Vector3().subVectors(e.position,this.cube.getWorldPosition(new l.Vector3)).normalize(),n=this.cube.getWorldQuaternion(new l.Quaternion),r=this.faceNormals.map((e,r)=>{let i=e.clone().applyQuaternion(n).dot(t);return{index:r,angle:Math.acos(Math.abs(i))}});r.sort((e,t)=>e.angle-t.angle);let i=[new l.Color(16755008).convertSRGBToLinear(),new l.Color(16419862).convertSRGBToLinear(),new l.Color(13921032).convertSRGBToLinear()];r.forEach((e,t)=>{let n=Math.floor(t/2);this.faceMaterials[e.index].color.copy(i[n])})}},tt=class extends Ze{constructor(e){var t,n,r;super(e.direction),this.name=`PlaneHandle`;let i=(t=e.size)==null?.12:t,a=(n=e.offset)==null?.12:n,o=new l.Color((r=e.color)==null?16776960:r),s=new l.BoxGeometry(i,i,.005),c=new l.MeshBasicMaterial({color:o,transparent:!0,opacity:.4,depthTest:!1,depthWrite:!1,side:l.DoubleSide});switch(this.handle=new l.Mesh(s,c),this.handle.direction=e.direction,this.handle.renderOrder=G.MOVE_HELPER_ARROW,this.handle.name=`plane-handle-${e.direction}`,e.direction){case`xy`:this.handle.position.set(a,a,0);break;case`xz`:this.handle.position.set(a,0,a),this.handle.rotation.x=-Math.PI/2;break;case`yz`:this.handle.position.set(0,a,a),this.handle.rotation.y=Math.PI/2;break}this.add(this.handle)}};function nt(e,t,n){let r=e.position.distanceTo(t),i=e.fov,a=e.distance||3,o=r/3,s=i/90,c=a/3,l=o*s*c,u=(n==null?void 0:n.min)||.6,d=n==null?void 0:n.max;return u&&l<u?u:d&&l>d?d:l}function rt(e){let{latitude:t,longitude:n}=e,r=new l.Vector3;return it-t<.03?r.set(0,1,0):at(0,n)?r.set(0,0,1):at(Math.PI,n)?r.set(0,0,-1):at(it,n)?r.set(1,0,0):r.set(-1,0,0),r}var it=Number((Math.PI/2).toFixed(5));function at(e,t){return typeof e!=`number`||typeof t!=`number`?!1:Math.abs(e-t)<.001}function q(e,t){return ot(document.createElement(t==null?`div`:t),e)}function ot(e,t){if(!t)return e;for(let n in t)n&&t[n]&&(e.style[n]=t[n]);return e}function J(e){let t=q(Object.assign({position:`absolute`,display:`block`,borderRadius:`4px`,paddingTop:`1px`,paddingBottom:`1px`,paddingLeft:`4px`,paddingRight:`4px`,pointerEvents:`none`,userSelect:`none`,zIndex:`99999`,backgroundColor:`rgba(0,0,0,0.7)`,fontSize:`12px`,color:`#fff`,letterSpacing:`0`,lineHeight:`18px`},e)),n=()=>{t.style.display!==`block`&&t.style.top&&t.style.left&&(t.style.display=`block`)};return{element:t,show:n,hide:()=>{t.style.display=`none`,t.style.top=``,t.style.left=``},setLeftTop:(e,r)=>{t.style.left=e,t.style.top=r,n()}}}var Y=class extends Je{constructor(e,t){super(e,t),this.name=`MoveHelper`,(t==null?void 0:t.xArrowEnable)!==!1&&(this.xArrow=new K({direction:`x`,color:W.X})),(t==null?void 0:t.yArrowEnable)!==!1&&(this.yArrow=new K({direction:`y`,color:W.Y})),(t==null?void 0:t.zArrowEnable)!==!1&&(this.zArrow=new K({direction:`z`,color:W.Z})),(t==null?void 0:t.centerHandleEnable)!==!1&&(this.centerHandle=new et),(t==null?void 0:t.xyPlaneEnable)!==!1&&(this.xyPlane=new tt({direction:`xy`,color:W.Z})),(t==null?void 0:t.xzPlaneEnable)!==!1&&(this.xzPlane=new tt({direction:`xz`,color:W.Y})),(t==null?void 0:t.yzPlaneEnable)!==!1&&(this.yzPlane=new tt({direction:`yz`,color:W.X})),t!=null&&t.container&&(t==null?void 0:t.moveTipsEnable)!==!1&&(this.container=t.container,this.moveTips=J({display:`none`}),this.container.appendChild(this.moveTips.element)),this.add(...[this.xArrow,this.yArrow,this.zArrow,this.centerHandle,this.xyPlane,this.xzPlane,this.yzPlane].filter(Boolean))}update(e){if(this.xArrow&&(this.xArrow.visible=!0),this.yArrow&&(this.yArrow.visible=!0),this.zArrow&&(this.zArrow.visible=!0),this.centerHandle&&this.centerHandle.update(e),e.type===`OrthographicCamera`){let t=new l.Vector3(1,0,0).applyQuaternion(this.quaternion),n=new l.Vector3(0,1,0).applyQuaternion(this.quaternion),r=new l.Vector3(0,0,1).applyQuaternion(this.quaternion),i=e.pose,a=rt(i),o=.0872665;Math.abs(t.angleTo(a)-0)<o||Math.abs(t.angleTo(a)-Math.PI)<o?this.xArrow&&(this.xArrow.visible=!1):Math.abs(n.angleTo(a)-0)<o||Math.abs(n.angleTo(a)-Math.PI)<o?this.yArrow&&(this.yArrow.visible=!1):(Math.abs(r.angleTo(a)-0)<o||Math.abs(r.angleTo(a)-Math.PI)<o)&&this.zArrow&&(this.zArrow.visible=!1)}}show(){var e;super.show(),this.xArrow&&this.add(this.xArrow),this.yArrow&&this.add(this.yArrow),this.zArrow&&this.add(this.zArrow),this.centerHandle&&this.add(this.centerHandle),this.xyPlane&&this.add(this.xyPlane),this.xzPlane&&this.add(this.xzPlane),this.yzPlane&&this.add(this.yzPlane),(e=this.moveTips)==null||e.hide()}setScaleByCamera(e){this.scale.setScalar(nt(e,this.position))}showDraggingHelper(e){this.xArrow&&(e.includes(`x`)?this.add(this.xArrow):this.remove(this.xArrow)),this.yArrow&&(e.includes(`y`)?this.add(this.yArrow):this.remove(this.yArrow)),this.zArrow&&(e.includes(`z`)?this.add(this.zArrow):this.remove(this.zArrow)),this.centerHandle&&(e.includes(`plane`)?this.add(this.centerHandle):this.remove(this.centerHandle)),this.xyPlane&&(e.includes(`xy`)?this.add(this.xyPlane):this.remove(this.xyPlane)),this.xzPlane&&(e.includes(`xz`)?this.add(this.xzPlane):this.remove(this.xzPlane)),this.yzPlane&&(e.includes(`yz`)?this.add(this.yzPlane):this.remove(this.yzPlane))}dispose(){var e,t;this.remove(...[this.xArrow,this.yArrow,this.zArrow,this.centerHandle,this.xyPlane,this.xzPlane,this.yzPlane].filter(Boolean)),(t=(e=this.moveTips)==null?void 0:e.element)==null||t.remove(),super.dispose()}},st=class extends Xe{constructor(e,t){super(e,t),this.name=`RotateHelper`,this.children=[],(t==null?void 0:t.yzCircleEnable)!==!1&&(this.xCircle=new X({direction:`x`,color:W.X})),(t==null?void 0:t.xzCircleEnable)!==!1&&(this.yCircle=new X({direction:`y`,color:W.Y})),(t==null?void 0:t.xyCircleEnable)!==!1&&(this.zCircle=new X({direction:`z`,color:W.Z})),t!=null&&t.container&&(t==null?void 0:t.angleTipsEnable)!==!1&&(this.container=t==null?void 0:t.container,this.angleTips=J({display:`none`}),this.container.appendChild(this.angleTips.element)),this.add(...[this.xCircle,this.yCircle,this.zCircle].filter(Boolean)),this.show()}hide(){this.children.forEach(e=>e.hide())}show(){var e;this.children.forEach(e=>e.showCircle()),(e=this.angleTips)==null||e.hide()}setScaleByCamera(e){this.scale.setScalar(nt(e,this.position))}update(e){if(e.type===`OrthographicCamera`)return;let t=this.helperObject.position.clone().sub(e.position).normalize(),n=new l.Vector3(1,0,0).applyQuaternion(this.quaternion),r=new l.Vector3(0,1,0).applyQuaternion(this.quaternion),i=new l.Vector3(0,0,1).applyQuaternion(this.quaternion),a=t.angleTo(n),o=t.angleTo(r),s=t.angleTo(i),c=Math.PI/2,u=o>=c,d=s>=c,f=a>=c;if(this.xCircle){let e=this.xCircle.circle.gapAngle;u&&d?this.xCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):u&&!d?this.xCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!u&&d?this.xCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!u&&!d&&(this.xCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),this.xCircle.angleSector&&(this.xCircle.angleSector.offsetAngle=e=>e,u&&d||u&&!d?this.xCircle.angleSector.baseAxes=new l.Vector3(0,0,1):!u&&d?(this.xCircle.angleSector.baseAxes=new l.Vector3(0,-1,0),this.xCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!u&&!d&&(this.xCircle.angleSector.baseAxes=new l.Vector3(0,0,-1),this.xCircle.angleSector.offsetAngle=e=>e-Math.PI))}if(this.yCircle){this.yCircle.angleSector.offsetAngle=e=>e;let e=this.yCircle.circle.gapAngle;f&&d?this.yCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):f&&!d?this.yCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!f&&d?this.yCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!f&&!d&&(this.yCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),f&&d?this.yCircle.angleSector.baseAxes=new l.Vector3(1,0,0):f&&!d?(this.yCircle.angleSector.baseAxes=new l.Vector3(0,0,-1),this.yCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!f&&d?(this.yCircle.angleSector.baseAxes=new l.Vector3(0,0,1),this.yCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!f&&!d&&(this.yCircle.angleSector.baseAxes=new l.Vector3(-1,0,0),this.yCircle.angleSector.offsetAngle=e=>e+Math.PI)}if(this.zCircle){this.zCircle.angleSector.offsetAngle=e=>e;let e=this.zCircle.circle.gapAngle;f&&u?this.zCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):f&&!u?this.zCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!f&&u?this.zCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!f&&!u&&(this.zCircle.circle.geometry=new l.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),this.zCircle.angleSector&&(f&&u?this.zCircle.angleSector.baseAxes=new l.Vector3(1,0,0):f&&!u?(this.zCircle.angleSector.baseAxes=new l.Vector3(0,-1,0),this.zCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!f&&u?(this.zCircle.angleSector.baseAxes=new l.Vector3(0,1,0),this.zCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!f&&!u&&(this.zCircle.angleSector.baseAxes=new l.Vector3(-1,0,0),this.zCircle.angleSector.offsetAngle=e=>e+Math.PI))}}showDraggingHelper(e){var t;this.hide(),this.children.filter(t=>e.includes(t.direction)).forEach(e=>e.showRing()),(t=this.angleTips)==null||t.show()}dispose(){var e,t;this.removeFromParent(),(t=(e=this.angleTips)==null?void 0:e.element)==null||t.remove()}},X=class extends l.Group{constructor(e){super(),this.direction=e.direction,this.circle=new Z(e),this.ring=new ct(e),this.angleSector=new lt(e),this.add(this.circle,this.ring,this.angleSector),this.direction===`y`?this.rotation.x=Math.PI/2:this.direction===`x`&&(this.rotation.y=-Math.PI/2)}showCircle(){this.add(this.circle),this.remove(this.ring,this.angleSector)}showRing(){this.add(this.ring,this.angleSector),this.remove(this.circle)}hide(){this.remove(this.ring,this.angleSector,this.circle)}},Z=class extends l.Mesh{constructor(e){var t;super(),this.gapAngle=.02,this.geometry=new l.RingGeometry(.3,.35,20,8,this.gapAngle,Math.PI/2-this.gapAngle*2),this.material=new l.MeshBasicMaterial({opacity:.6,transparent:!0,color:(t=e.color)==null?16777215:t,side:l.DoubleSide,depthTest:!1}),this.direction=e.direction,this.renderOrder=G.ROTATE_HELPER,this.geometry.name=`RotateHelperCircleGeometry-${this.direction}`}},ct=class extends l.Group{constructor(e){super(),this.direction=e.direction;let t=.015,n=Array(8).fill(null).map((e,n)=>{let r=new l.RingGeometry(.3,.35,20,8,Math.PI/4*n+t,Math.PI/4-t*2),i=new l.MeshBasicMaterial({opacity:1,color:16777215,depthTest:!1,depthWrite:!1,transparent:!0,side:l.DoubleSide}),a=new l.Mesh(r,i);return a.name=`AxesDashedRing-${this.direction}-${n}`,a});this.add(...n)}},lt=class extends l.Mesh{constructor(e){var t;switch(super(),this.offsetAngle=e=>e,e.direction){case`x`:this.baseAxes=new l.Vector3(0,0,1);break;case`y`:this.baseAxes=new l.Vector3(1,0,0);break;case`z`:this.baseAxes=new l.Vector3(1,0,0);break}this.geometry=new l.CircleGeometry(.3505,48,0,1e-4),this.material=new l.MeshBasicMaterial({opacity:.4,color:(t=e.color)==null?16777215:t,depthTest:!1,depthWrite:!1,transparent:!0,side:l.DoubleSide}),this.direction=e.direction,this.angleDirection=1}setClockwiseDirection(){this.angleDirection=-1}setCounterClockwiseDirection(){this.angleDirection=1}toggleDirection(){this.angleDirection=this.angleDirection===1?-1:1}setBaseAxes(e){this.baseAxes=e.clone().normalize()}getDirection(){return this.angleDirection===-1?`clockwise`:`counterclockwise`}},ut=class extends Ye{constructor(e){super(e),this.name=`BoundingBoxHelper`,this.positionAttribute=new l.BufferAttribute(new Float32Array(24),3),this.box=this.createBox(),this.outline=this.createOutline(),this.add(this.box,this.outline),this.update()}initQuaternion(){this.quaternion.copy(this.originObject3D.quaternion),this.scale.copy(this.originObject3D.scale)}setHelperQuaternion(e,t){Ge(this,e,t)}raycasterIntersectObject(e,t){return e.intersectObject(this,!1,t)}raycast(e,t){this.box.raycast(e,t)}update(){let e=new l.Box3,t=new l.Matrix4().getInverse(this.originObject3D.matrixWorld),n=new l.Vector3;if(this.originObject3D.updateMatrixWorld(!0),this.originObject3D.traverse(r=>{let i=r.geometry;if(!i)return;r.updateMatrixWorld(!0);let a=new l.Matrix4().multiplyMatrices(t,r.matrixWorld);if(i.isBufferGeometry){let t=i,r=t.attributes.position;if(r)for(let t=0,i=r.count;t<i;t++)n.fromBufferAttribute(r,t).applyMatrix4(a),e.expandByPoint(n);let o=t.attributes.instanceStart,s=t.attributes.instanceEnd;if(o)for(let t=0,r=o.count;t<r;t++)n.fromBufferAttribute(o,t).applyMatrix4(a),e.expandByPoint(n);if(s)for(let t=0,r=s.count;t<r;t++)n.fromBufferAttribute(s,t).applyMatrix4(a),e.expandByPoint(n)}else if(i.vertices){let t=i.vertices;for(let r of t)n.copy(r).applyMatrix4(a),e.expandByPoint(n)}}),e.isEmpty())return;let{min:r,max:i}=e;this.positionAttribute.setXYZ(0,i.x,i.y,i.z),this.positionAttribute.setXYZ(1,r.x,i.y,i.z),this.positionAttribute.setXYZ(2,r.x,r.y,i.z),this.positionAttribute.setXYZ(3,i.x,r.y,i.z),this.positionAttribute.setXYZ(4,i.x,i.y,r.z),this.positionAttribute.setXYZ(5,r.x,i.y,r.z),this.positionAttribute.setXYZ(6,r.x,r.y,r.z),this.positionAttribute.setXYZ(7,i.x,r.y,r.z),this.positionAttribute.needsUpdate=!0}createOutline(){let e=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),t=new l.BufferGeometry;t.setIndex(new l.BufferAttribute(e,1)),t.setAttribute(`position`,this.positionAttribute);let n=new l.LineBasicMaterial({color:64767,linewidth:1,opacity:1,toneMapped:!1}),r=new l.LineSegments(t,n);return r.matrixAutoUpdate=!1,r}createBox(){let e=new Uint16Array([0,1,2,0,2,3,0,3,7,0,7,4,0,4,5,0,5,1,6,1,5,6,2,1,6,5,4,6,4,7,6,3,2,6,7,3]),t=new l.BufferGeometry;t.setIndex(new l.BufferAttribute(e,1)),t.setAttribute(`position`,this.positionAttribute);let n=new l.MeshBasicMaterial({color:64767,opacity:.1,depthTest:!1,transparent:!0});return new l.Mesh(t,n)}},Q=new Map;function dt(e){if(Q.has(e))return Q.get(e).hooks;let t=new c.Subscribe,n=null,r,i=()=>{n=requestAnimationFrame(i);let a=e.projectionMatrix.toArray().join(`,`)+e.matrixWorld.toArray().join(`,`);a!==r&&(r=a,t.emit(`cameraUpdate`))};return i(),Q.set(e,{hooks:t,dispose:()=>{Q.delete(e),cancelAnimationFrame(n)}}),t}function ft(e){return arguments.length===0?[]:Array.isArray(e)?e:[e]}var pt=class{updateOtherControllers(e){this.otherControllers=e}getIsDragging(){return this.isDragging}constructor(e,t){var n,r,i;this.preventTapDefaultEvent=!1,this.disposers=[],this.isDragging=!1,this.enabled=!1,this.name=`BaseController`,this.onWantsTapGesture=e=>{if(this.getIntersectObject(e))return!1},this.updateHelperScale=()=>{`update`in this.helperObject3D&&typeof this.helperObject3D.update==`function`&&this.helperObject3D.update(this.camera),this.helperObject3D.setScaleByCamera(this.camera)},this.getBox=()=>(this.boundingBox||(this.boundingBox=new l.Box3().expandByObject(this.originObject3D)),this.boundingBox),this.hooks=(n=e.sharedHooks)==null?new c.Subscribe:n,this.internalHooks=(r=e.sharedInternalHooks)==null?new c.Subscribe:r,this.camera=e.camera,this.model=e.model,this.originObject3D=e.originObject3D,this.helperObject3D=e.helperObject3D,this.container=e.container,this.scene=e.scene,this.domEvents=e.domEvents,this.onRender=(i=e.onRender)==null?(()=>{}):i,this.config=t==null?{}:t,this.otherControllers=e.otherControllers,this.initialHelperPosition(),this.initialHelperQuaternion(),this.updateHelperScale(),this.cameraHooks=dt(this.camera),this.enable();let a=this.onSetOriginObjectScale.bind(this),o=this.onSetOriginObjectRotate.bind(this),s=this.onSetOriginObjectPosition.bind(this),u=this.onApplyOriginObjectScale.bind(this),d=this.onApplyOriginObjectRotate.bind(this),f=this.onApplyOriginObjectPosition.bind(this),p=this.initialHelperPosition.bind(this);this.cameraHooks.on(`cameraUpdate`,this.updateHelperScale),this.internalHooks.on(`initialHelperPosition`,p),this.internalHooks.on(`setObjectScale`,a),this.internalHooks.on(`setObjectRotate`,o),this.internalHooks.on(`setObjectPosition`,s),this.internalHooks.on(`applyObjectPosition`,f),this.internalHooks.on(`applyObjectRotate`,d),this.internalHooks.on(`applyObjectScale`,u),this.hooks.on(`moveEnd`,this.updateHelperScale),this.internalHooks.on(`setObjectPosition`,this.updateHelperScale),this.internalHooks.on(`initialHelperPosition`,this.updateHelperScale),this.disposers.push(()=>{this.cameraHooks.off(`cameraUpdate`,this.updateHelperScale),this.internalHooks.off(`initialHelperPosition`,p),this.internalHooks.off(`setObjectScale`,a),this.internalHooks.off(`setObjectRotate`,o),this.internalHooks.off(`setObjectPosition`,s),this.internalHooks.off(`applyObjectPosition`,f),this.internalHooks.off(`applyObjectRotate`,d),this.internalHooks.off(`applyObjectScale`,u),this.hooks.off(`moveEnd`,this.updateHelperScale),this.internalHooks.off(`setObjectPosition`,this.updateHelperScale),this.internalHooks.off(`initialHelperPosition`,this.updateHelperScale)})}initialHelperPosition(){this.helperObject3D.initialPosition(this.calculateOffset(this.config.offset))}initialHelperQuaternion(){this.helperObject3D.initQuaternion(this.config)}enable(){this.enabled||(this.enabled=!0,this.scene.add(this.helperObject3D),this.helperObject3D.enable(),this.render())}disable(){this.enabled&&(this.enabled=!1,this.helperObject3D.disable(),this.render())}show(){this.helperObject3D.show(),this.render()}hide(){this.helperObject3D.hide(),this.render()}dispose(){var e;(e=this.disposers)==null||e.forEach(e=>e==null?void 0:e()),this.helperObject3D.dispose(),this.render()}applyHelperMatrix4(e){this.helperObject3D.applyMatrix4(e)}applyHelperQuaternion(e,t){this.helperObject3D.applyHelperQuaternion(e,t)}applyHelperScaleMatrix4(e,t){this.helperObject3D.applyHelperScaleMatrix4(e,t)}onWantsGesture(e,t,n){if(this.isDragging)return!1}onIntersectionOnModelUpdate(e){}onApplyOriginObjectScale(e){this.applyHelperScaleMatrix4(e.matrix,e.origin)}onApplyOriginObjectRotate(e){let t=e.origin;if(t){let n=new l.Vector3().subVectors(this.helperObject3D.position,t).applyQuaternion(e.quaternion).add(t);this.helperObject3D.position.copy(n)}}onApplyOriginObjectPosition(e){this.applyHelperMatrix4(e.matrix)}onSetOriginObjectScale(e){this.helperObject3D.scale.copy(e),this.updateOffsetByScale(e)}onSetOriginObjectRotate(e,t){}onSetOriginObjectPosition(e){this.helperObject3D.position.copy(e.clone().add(this.calculateOffset(this.config.offset)))}render(){this.onRender()}updateOffsetByScale(e){if(this.boundingBox&&this.config.offset){let t=this.originObject3D.position,n=new l.Vector3().subVectors(this.boundingBox.max,t).multiply(e).add(t),r=new l.Vector3().subVectors(this.boundingBox.min,t).multiply(e).add(t),i=this.calculateOffset(this.config.offset,{min:r,max:n});this.helperObject3D.initialPosition(i)}}hoverListener(e,t=16777215,n=1){let r=ft(e).filter(e=>!Ke(e)),i=[];for(let e of r)if(e.material||e instanceof l.Group){let r=e instanceof l.Group?e.children.filter(e=>e instanceof l.Mesh):[e];r.forEach(e=>{var t,n,r,i;let a=e.material;Array.isArray(a)?(e.__originalColor__=(t=e.__originalColor__)==null?a.map(e=>e.color.clone()):t,e.__originalOpacity__=(n=e.__originalOpacity__)==null?a.map(e=>e.opacity):n):(e.__originalColor__=(r=e.__originalColor__)==null?a.color.clone():r,e.__originalOpacity__=(i=e.__originalOpacity__)==null?a.opacity:i)});let a=()=>{r.forEach(e=>{if(e.name===`ScaleHelperTransparentGroup`){if(e.children[0]){let r=e.children[0].material;r.color.set(t),r.opacity=n}}else{let r=e.material;Array.isArray(r)?r.forEach(e=>{e.color.set(t),e.opacity=n}):(r.color.set(t),r.opacity=n)}}),this.render()},o=()=>{r.forEach(e=>{if(e.name===`ScaleHelperTransparentGroup`){if(e.children[0]){let t=e.children[0].material;t.color.set(16776960),t.opacity=1}}else{let t=e.material;if(Array.isArray(t)){let n=e.__originalColor__,r=e.__originalOpacity__;t.forEach((e,t)=>{n&&n[t]&&e.color.copy(n[t]),r&&r[t]!==void 0&&(e.opacity=r[t])})}else t.color.copy(e.__originalColor__),t.opacity=e.__originalOpacity__}}),this.render()},s=e=>{this.isDragging||a()},c=e=>{this.isDragging||o()};for(let e of r)this.domEvents.addEventListener(e,`mouseover`,s),this.domEvents.addEventListener(e,`mouseout`,c),this.hooks.on(`moveStart`,a),this.hooks.on(`moveEnd`,o),this.hooks.on(`rotateEnd`,o),this.hooks.on(`scaleEnd`,o),i.push(()=>{this.domEvents.removeEventListener(e,`mouseover`,s),this.domEvents.removeEventListener(e,`mouseout`,c),this.hooks.off(`moveStart`,a),this.hooks.off(`moveEnd`,o),this.hooks.off(`rotateEnd`,o),this.hooks.off(`scaleEnd`,o)})}return()=>i.forEach(e=>e==null?void 0:e())}getIntersectObject(e){let t=this.camera.position,n=this.helperObject3D;if(!n)return;let r=this.helperObject3D.raycasterIntersectObject(e)[0];if(!r)return;let i=r;if(i.object=n,this.model.intersectRaycaster){let n=this.model.intersectRaycaster(e)[0];if(n&&n.point.distanceTo(t)<i.point.distanceTo(t))return}return i.object}calculateOffset(e,t){let n=new l.Vector3(0,0,0);if(!e)return n;let r=()=>t||this.getBox();if(typeof e.x==`number`)n.setX(e.x);else if(typeof e.x==`object`){let t=r();n.setX((t.max.x-t.min.x)*e.x.percents)}if(typeof e.y==`number`)n.setY(e.y);else if(typeof e.y==`object`){let t=r();n.setY((t.max.y-t.min.y)*e.y.percents)}if(typeof e.z==`number`)n.setZ(e.z);else if(typeof e.z==`object`){let t=r();n.setZ((t.max.z-t.min.z)*e.z.percents)}return n}};function mt(e,t){let n=10,r=10,i=e.isPerspectiveCamera,a=e.isOrthographicCamera;if(i){let i=e,a=i.position.distanceTo(t),o=i.fov*Math.PI/180;r=2*Math.tan(o/2)*a,n=r*i.aspect}else if(a){let t=e;n=Math.abs(t.right-t.left),r=Math.abs(t.top-t.bottom)}let o=Math.sqrt(n*n+r*r),s=o*.8,c=Math.min(n,r)*.25,l=o*1.2;return Math.max(c,Math.min(s,l))}var ht=class{constructor(e,t,n){this.camera=e,this.container=t,this.defaults=Object.assign({},n||{})}createSolidLine(e,t,n){let r=Object.assign(Object.assign({color:16777215,renderOrder:G.DRAG_GUIDE_LINE},this.defaults),n||{}),i=t.clone().normalize(),a=this.computeInfiniteLineLength(e),o=e.clone().add(i.clone().multiplyScalar(-a)),s=e.clone().add(i.clone().multiplyScalar(a)),c=new Float32Array([o.x,o.y,o.z,s.x,s.y,s.z]),u=new l.BufferGeometry;u.setAttribute(`position`,new l.BufferAttribute(c,3));let d=new l.LineBasicMaterial({color:r.color,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.65}),f=new l.Line(u,d);return f.renderOrder=r.renderOrder,f}updateSolidLine(e,t,n,r){let i=n.clone().normalize(),a=this.computeInfiniteLineLength(t),o=t.clone().add(i.clone().multiplyScalar(-a)),s=t.clone().add(i.clone().multiplyScalar(a)),c=new Float32Array([o.x,o.y,o.z,s.x,s.y,s.z]),u=e.geometry,d=u.getAttribute(`position`);d&&d.itemSize===3&&d.array.length===c.length?(d.array.set(c),d.needsUpdate=!0):u.setAttribute(`position`,new l.BufferAttribute(c,3)),(r==null?void 0:r.color)!==void 0&&e.material.color.setHex(r.color)}computeInfiniteLineLength(e){return mt(this.camera,e)*10}dispose(e){if(!e)return;e.geometry.dispose();let t=e.material;Array.isArray(t)?t.forEach(e=>e.dispose()):t.dispose()}updateDefaults(e){this.defaults=Object.assign(Object.assign({},this.defaults),e)}};function gt(e,t,n){if(!t||!n||!e)return;let r=P(t,n);if(Math.abs(r.x)===1||Math.abs(r.y)===1)return;let i=new l.Raycaster;return i.setFromCamera(r,e),i.params.Points&&(i.params.Points.threshold=.1),i}function _t(e){let{raycaster:t,line:n,clampToLine:r=!0}=e,i=new l.Plane().setFromNormalAndCoplanarPoint(t.ray.direction.clone().normalize(),new l.Vector3),a=i.projectPoint(n.start,new l.Vector3),o=i.projectPoint(n.end,new l.Vector3),s=new l.Line3(a,o),c=s.closestPointToPoint(t.ray.origin,r,new l.Vector3),u=c.distanceTo(o),d=c.distanceTo(a),f=s.distance();if(u>d&&u>f){let e=-c.distanceTo(a)/f,t=n.start.clone().sub(n.end).normalize();return n.start.clone().sub(t.clone().multiplyScalar(e*n.distance()))}else{let e=c.distanceTo(a)/f;return new l.Vector3().lerpVectors(n.start,n.end,e)}}var vt=class extends pt{get moveByMouseEnable(){return this._moveByMouse.enabled}constructor(...e){var t,n,r,i,a;super(...e),this.name=`MoveController`,this.solidGuide=new ht(this.camera,this.container,(n=(t=this.config)==null?void 0:t.solidGuide)==null?{}:n),this._moveByMouse={enabled:!1},this.dragStart=e=>{if(this.moveByMouseEnable||this.isDragging)return;let t=e==null?void 0:e.intersect;if(!t)return this.dragEnd();let n=(t==null?void 0:t.object).direction;if(!n)return this.dragEnd();let r=new l.Vector3(1,0,0),i=new l.Vector3(0,1,0),a=new l.Vector3(0,0,1),o=(()=>{switch(n){case`x`:return r;case`y`:return i;case`z`:return a;case`xy`:case`xz`:case`yz`:case`plane`:return}})(),s=t.point.clone();if(n===`xy`||n===`xz`||n===`yz`){let e=(()=>{switch(n){case`xy`:return a;case`xz`:return i;case`yz`:return r}})(),t=new l.Plane().setFromNormalAndCoplanarPoint(e,s),o=s.clone();this.startInfo={draggingDirection:n,startVectorProject:o,line:new l.Line3(o.clone(),o.clone()),plane:t}}else if(n===`plane`){let e=this.camera.position.clone(),t=s.clone(),r=t.clone().sub(e).normalize(),i=new l.Plane().setFromNormalAndCoplanarPoint(r,t),a=t.clone();this.startInfo={draggingDirection:n,startVectorProject:a,line:new l.Line3(a.clone(),a.clone()),plane:i}}else{if(!o)return this.dragEnd();this.startInfo={draggingDirection:n,startVectorProject:s,line:new l.Line3(s.clone().sub(o.normalize()),s.clone().add(o.normalize()))};try{let e=o.clone().normalize(),t=this.helperObject3D.getWorldPosition(new l.Vector3),n=this.solidGuide.createSolidLine(t,e,{color:16777215,renderOrder:G.DRAG_GUIDE_LINE});this.scene.add(n),this.dragGuideLine=n}catch(e){}}let c=(()=>{switch(n){case`plane`:return[];case`xy`:return[`x`,`y`,`xy`];case`xz`:return[`x`,`z`,`xz`];case`yz`:return[`y`,`z`,`yz`];default:return[n]}})();this.helperObject3D.showDraggingHelper(c),this.hooks.emit(`moveStart`,n),this.isDragging=!0,this.setTipsText(this.originObject3D.position),this.setTipsPosition(s)},this.dragging=e=>{if(!this.isDragging||!this.startInfo)return;let t=`touches`in e?e.touches[0].clientX:e.x,n=`touches`in e?e.touches[0].clientY:e.y,r=gt(this.camera,{x:t,y:n},this.container);return r?(this.move(r),!1):this.dragEnd()},this.dragEnd=()=>{if(this.isDragging){if(this.startInfo=void 0,this.isDragging=!1,this.dragGuideLine){this.scene.remove(this.dragGuideLine),this.dragGuideLine.geometry.dispose();let e=this.dragGuideLine.material;Array.isArray(e)?e.forEach(e=>e.dispose()):e.dispose(),this.dragGuideLine=void 0}this.helperObject3D.show(),this.hooks.emit(`moveEnd`)}};let o=this.helperObject3D;if(this.hoverListener([o.xArrow,o.yArrow,o.zArrow,(r=o.xyPlane)==null?void 0:r.handle,(i=o.xzPlane)==null?void 0:i.handle,(a=o.yzPlane)==null?void 0:a.handle]),o.centerHandle&&o.centerHandle instanceof et){let e=o.centerHandle,t=e.cube;this.domEvents.addEventListener(t,`mouseover`,()=>{this.isDragging||(Array.isArray(t.material)&&t.material.forEach(e=>{e.color.set(16777215)}),this.render())}),this.domEvents.addEventListener(t,`mouseout`,()=>{this.isDragging||(e.update(this.camera),this.render())})}let s=this.show.bind(this),c=this.hide.bind(this),u=()=>{this.helperObject3D.update(this.camera),this.isDragging&&this.updateDragGuideLineScale(),this.render()};u(),this.domEvents.addEventListener(this.helperObject3D,`mousedown`,this.dragStart),document.addEventListener(`mousemove`,this.dragging),document.addEventListener(`mouseup`,this.dragEnd),this.domEvents.addEventListener(this.helperObject3D,`touchstart`,this.dragStart),document.addEventListener(`touchmove`,this.dragging),document.addEventListener(`touchend`,this.dragEnd),this.hooks.on(`rotateStart`,c),this.hooks.on(`rotateEnd`,s),this.hooks.on(`scaleStart`,c),this.hooks.on(`scaleEnd`,s),this.hooks.on(`moveByMouseEnable`,c),this.hooks.on(`moveByMouseDisable`,s),this.hooks.on(`updateOtherHelpers`,e=>{this.helperObject3D.update(e.camera),this.render()}),this.cameraHooks.on(`cameraUpdate`,u),this.disposers.push(()=>{this.domEvents.removeEventListener(this.helperObject3D,`mousedown`,this.dragStart),document.removeEventListener(`mousemove`,this.dragging),document.removeEventListener(`mouseup`,this.dragEnd),this.domEvents.removeEventListener(this.helperObject3D,`touchstart`,this.dragStart),document.removeEventListener(`touchmove`,this.dragging),document.removeEventListener(`touchend`,this.dragEnd),this.hooks.off(`rotateStart`,c),this.hooks.off(`rotateEnd`,s),this.hooks.off(`scaleStart`,c),this.hooks.off(`scaleEnd`,s),this.hooks.off(`moveByMouseEnable`,c),this.hooks.off(`moveByMouseDisable`,s),this.hooks.off(`updateOtherHelpers`),this.cameraHooks.off(`cameraUpdate`,u)}),this.moveByMouseEnable&&this.moveByMouse()}dispose(){var e;super.dispose(),(e=this.disposers)==null||e.forEach(e=>e==null?void 0:e())}moveByMouse(e){this._moveByMouse={enabled:!0,useFaceNormal:e==null?void 0:e.useFaceNormal},this.preventTapDefaultEvent=!0;let t=this.handleMouseDown.bind(this),n=this.handleMouseUp.bind(this);this.hooks.emit(`moveByMouseEnable`),setTimeout(()=>{this.container.addEventListener(`mousedown`,t),this.container.addEventListener(`mouseup`,n)}),this.mousedownEventListenerDisposer=()=>{this.container.removeEventListener(`mousedown`,t),this.container.removeEventListener(`mouseup`,n)}}disableMoveByMouse(){var e;this._moveByMouse={enabled:!1},this.preventTapDefaultEvent=!1,this.hooks.emit(`moveByMouseDisable`),(e=this.mousedownEventListenerDisposer)==null||e.call(this)}onIntersectionOnModelUpdate(e){var t,n,r;if(!this.moveByMouseEnable)return;let{point:i,face:a}=e;if(!this.hooks.emit(`wantToMove`,i)){if(this.originObject3D.position.copy(i),(this._moveByMouse.useFaceNormal===!0||typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.enable!==!1)&&a!=null&&a.normal){let e=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.alignmentVector?this._moveByMouse.useFaceNormal.alignmentVector:{x:0,y:1,z:0},i=new l.Vector3((t=e.x)==null?0:t,(n=e.y)==null?0:n,(r=e.z)==null?0:r),o=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.fixedFaceNormal?this._moveByMouse.useFaceNormal.fixedFaceNormal(a.normal):a.normal;this.originObject3D.quaternion.setFromUnitVectors(i,o),this.internalHooks.emit(`setObjectRotate`,this.originObject3D.quaternion.clone(),new l.Vector3)}this.internalHooks.emit(`setObjectPosition`,i),this.hooks.emit(`move`,i)}}handleMouseDown(e){let{x:t,y:n}=e;this.mouseInfo={x:t,y:n,mouseDownTimestamp:Date.now()}}handleMouseUp(e){if(!this.mouseInfo)return;let{x:t,y:n}=e;this.mouseInfo.x===t&&this.mouseInfo.y===n&&Date.now()-this.mouseInfo.mouseDownTimestamp<500&&(this.disableMoveByMouse(),this.mouseInfo=void 0)}updateDragGuideLineScale(){if(!this.dragGuideLine||!this.startInfo)return;let{line:e}=this.startInfo,t=e.end.clone().sub(e.start).normalize();if(t.lengthSq()<1e-6)return;let n=this.helperObject3D.getWorldPosition(new l.Vector3);this.solidGuide.updateSolidLine(this.dragGuideLine,n,t)}move(e){if(!this.startInfo)return this.dragEnd();let{line:t,startVectorProject:n}=this.startInfo,r=this.originObject3D,i=this.startInfo.draggingDirection===`plane`||this.startInfo.draggingDirection===`xy`||this.startInfo.draggingDirection===`xz`||this.startInfo.draggingDirection===`yz`,a;if(i){let t=this.startInfo.plane;if(!t)return;let n=new l.Vector3,r=t.normal.dot(e.ray.direction);if(Math.abs(r)<1e-6)return;let i=-(t.normal.dot(e.ray.origin)+t.constant)/r;if(i<0)return;n.copy(e.ray.origin.clone().add(e.ray.direction.clone().multiplyScalar(i))),a=n}else a=_t({raycaster:e,line:t,clampToLine:!1});let o=r.position.clone(),s=a.clone().sub(n),c=new l.Matrix4;c.setPosition(s);let u=r.position.clone().applyMatrix4(c);if(this.hooks.emit(`wantToMove`,u))return;let d=u.clone();this.hooks.emit(`moveBefore`,d);let f=new l.Matrix4;f.setPosition(d.clone().sub(o)),r.position.copy(d),this.setTipsText(d),this.setTipsPosition(d),n.copy(a),this.internalHooks.emit(`applyObjectPosition`,{matrix:f}),this.hooks.emit(`move`,d)}setTipsText(e){var t;let n=(t=this.helperObject3D.moveTips)==null?void 0:t.element;if(!n||!this.startInfo)return;let r=this.startInfo.draggingDirection,i=e=>e.toFixed(3);switch(r){case`x`:n.innerText=`x: ${i(e.x)}`;break;case`y`:n.innerText=`y: ${i(e.y)}`;break;case`z`:n.innerText=`z: ${i(e.z)}`;break;case`xy`:n.innerText=`x: ${i(e.x)} y: ${i(e.y)}`;break;case`xz`:n.innerText=`x: ${i(e.x)} z: ${i(e.z)}`;break;case`yz`:n.innerText=`y: ${i(e.y)} z: ${i(e.z)}`;break;case`plane`:n.innerText=`x: ${i(e.x)} y: ${i(e.y)} z: ${i(e.z)}`;break}}setTipsPosition(e){let t=this.helperObject3D.moveTips;if(!t)return;let{x:n,y:r,z:i}=this.helperObject3D.getWorldPosition(new l.Vector3).clone().project(this.camera);if(i>1){t.hide();return}let a=this.container.getBoundingClientRect(),o=(n+1)/2*a.width,s=(-r+1)/2*a.height;t.setLeftTop(o+`px`,s+`px`)}},yt=class{constructor(e,t,n,r,i,a,o,s,c){this.onFiveWantsTapGesture=e=>{if(!this.helperController)return;if(this.helperController.preventTapDefaultEvent)return!1;let t=this.helperController.onWantsTapGesture(e);return this.five.needsRender=!0,t},this.onFiveWantsGesture=(...e)=>{if(!this.helperController)return;let t=this.helperController.onWantsGesture(...e);return this.five.needsRender=!0,t},this.onFiveIntersectionOnModelUpdate=(...e)=>{this.helperController&&this.helperController.onIntersectionOnModelUpdate(...e)};let{camera:l,model:u,scene:d}=e,f=e.getElement();this.five=e,!(!l||!u||!f||!d)&&(this.helperController=new n({camera:l,model:u,domEvents:t,originObject3D:r,helperObject3D:i,container:f,scene:c==null?d:c,onRender:()=>{e.needsRender=!0},sharedHooks:o,sharedInternalHooks:s},a),e.on(`wantsTapGesture`,this.onFiveWantsTapGesture),e.on(`wantsGesture`,this.onFiveWantsGesture),e.on(`intersectionOnModelUpdate`,this.onFiveIntersectionOnModelUpdate))}dispose(){var e;this.five.off(`wantsTapGesture`,this.onFiveWantsTapGesture),this.five.off(`wantsGesture`,this.onFiveWantsGesture),this.five.off(`intersectionOnModelUpdate`,this.onFiveIntersectionOnModelUpdate),(e=this.helperController)==null||e.dispose()}},bt=new l.Quaternion,xt=class extends pt{get rotateCenter(){return this.helperObject3D.position.clone()}constructor(...e){var t,n,r;super(...e),this.name=`RotateController`,this.solidGuide=new ht(this.camera,this.container),this.snapGuideLines=[];let i=this.helperObject3D;this.hoverListener([(t=i.xCircle)==null?void 0:t.circle,(n=i.yCircle)==null?void 0:n.circle,(r=i.zCircle)==null?void 0:r.circle].filter(Boolean));let a=this.dragStart.bind(this),o=this.dragging.bind(this),s=this.dragEnd.bind(this),c=this.show.bind(this),l=this.hide.bind(this),u=()=>{this.helperObject3D.update(this.camera),this.render()};u(),this.domEvents.addEventListener(this.helperObject3D,`mousedown`,a),document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),this.domEvents.addEventListener(this.helperObject3D,`touchstart`,a),document.addEventListener(`touchmove`,o),document.addEventListener(`touchend`,s),this.hooks.on(`moveStart`,l),this.hooks.on(`moveEnd`,c),this.hooks.on(`scaleStart`,l),this.hooks.on(`scaleEnd`,c),this.hooks.on(`moveByMouseEnable`,l),this.hooks.on(`moveByMouseDisable`,c),this.hooks.on(`updateOtherHelpers`,e=>{this.helperObject3D.update(e.camera),this.render()}),this.cameraHooks.on(`cameraUpdate`,u),this.disposers.push(()=>{this.domEvents.removeEventListener(this.helperObject3D,`mousedown`,a),document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s),this.domEvents.removeEventListener(this.helperObject3D,`touchstart`,a),document.removeEventListener(`touchmove`,o),document.removeEventListener(`touchend`,s),this.hooks.off(`moveStart`,l),this.hooks.off(`moveEnd`,c),this.hooks.off(`scaleStart`,l),this.hooks.off(`scaleEnd`,c),this.hooks.off(`moveByMouseEnable`,l),this.hooks.off(`moveByMouseDisable`,c),this.hooks.off(`updateOtherHelpers`),this.cameraHooks.off(`cameraUpdate`,u)})}setRotateAngle(e){let{x:t=0,y:n=0,z:r=0}=e,i=new l.Euler(l.MathUtils.degToRad(t),l.MathUtils.degToRad(n),l.MathUtils.degToRad(r)),a=new l.Quaternion().setFromEuler(i);if(this.hooks.emit(`wantToRotate`,a))return;let{originObject3D:o,rotateCenter:s}=this;Ge(o,a,s),this.internalHooks.emit(`setObjectRotate`,a,s),this.hooks.emit(`rotate`,a),this.render()}getEulerAngle(e,t){let{originObject3D:n}=this,r=new l.Euler().setFromQuaternion(n.quaternion),i={x:l.MathUtils.radToDeg(r.x),y:l.MathUtils.radToDeg(r.y),z:l.MathUtils.radToDeg(r.z)},a={x:e===`x`?t:i.x,y:e===`y`?t:i.y,z:e===`z`?t:i.z},o=new l.Euler(l.MathUtils.degToRad(a.x),l.MathUtils.degToRad(a.y),l.MathUtils.degToRad(a.z));return new l.Quaternion().setFromEuler(o)}onApplyOriginObjectRotate(e){this.isDragging||super.onApplyOriginObjectRotate(e)}onApplyOriginObjectScale(e){}dragStart(e){if(this.isDragging)return;this.helperObject3D.update(this.camera);let t=e==null?void 0:e.intersect;if(!t)return this.dragEnd();let n=(t==null?void 0:t.object).direction;if(!n)return this.dragEnd();let r=t.point;this.setTipsAngle(0);let i=r.clone();i.y+=.2,this.setTipsPosition(i);let a=new l.Quaternion,o=n===`x`?new l.Vector3(1,0,0):n===`y`?new l.Vector3(0,1,0):n===`z`?new l.Vector3(0,0,1):new l.Vector3(0,1,0),s=new l.Plane().setFromNormalAndCoplanarPoint(o,r),c=s.projectPoint(r.clone(),new l.Vector3).clone().sub(this.rotateCenter),u=this.getAngleHelper(n);if(!u)return this.dragEnd();let d=c.angleTo(u.baseAxes.clone().applyQuaternion(a)),f=u.offsetAngle(d);this.setAngleHelperStart(n,f),this.setAngleHelperLength(n,0),this.startInfo={direction:n,startVector:c,directionVector:o,plane:s,angleHelper:u,angle:0,helperQuaternion:a.clone(),startQuaternion:this.originObject3D.quaternion.clone()},bt=new l.Quaternion,this.helperObject3D.showDraggingHelper([n]),this.hooks.emit(`rotateStart`,n),this.isDragging=!0}getMatrix(){var e,t;return(t=(e=this.originObject3D)==null?void 0:e.ext)==null?void 0:t.matrix}getMatrixAngle(e,t){let n;if(e&&e.isMatrix4){n=new l.Quaternion,e.decompose(new l.Vector3,n,new l.Vector3);let r=new l.Euler().setFromQuaternion(n);if(t===`x`)return Math.round(l.MathUtils.radToDeg(r.z));if(t===`y`)return Math.round(l.MathUtils.radToDeg(r.y));if(t===`z`)return Math.round(l.MathUtils.radToDeg(r.x))}}parseAngleByDirection(e){var t,n;let r=(n=(t=this.originObject3D)==null?void 0:t.ext)==null?void 0:n.matrix,i;if(r&&r.isMatrix4){i=new l.Quaternion,r.decompose(new l.Vector3,i,new l.Vector3);let t=new l.Euler().setFromQuaternion(i);if(e===`x`)return Math.round(l.MathUtils.radToDeg(t.z));if(e===`y`)return Math.round(l.MathUtils.radToDeg(t.y));if(e===`z`)return Math.round(l.MathUtils.radToDeg(t.x))}}dragging(e){if(!this.isDragging)return;let t=`touches`in e?e.touches[0].clientX:e.x,n=`touches`in e?e.touches[0].clientY:e.y,r=gt(this.camera,{x:t,y:n},this.container);return r?(this.rotate(r),!1):this.dragEnd()}rotate(e){if(!this.startInfo)return this.dragEnd();let{startVector:t,plane:n,angleHelper:r,direction:i,helperQuaternion:a}=this.startInfo,{originObject3D:o}=this,s=e.ray.intersectPlane(n,new l.Vector3);if(!s)return;let c=this.rotateCenter.clone(),u=n.projectPoint(s.clone(),new l.Vector3).clone().sub(c),d=this.startInfo.directionVector.clone().normalize();u=u.clone().projectOnPlane(d).normalize().multiplyScalar(u.length());let f=new l.Quaternion().setFromUnitVectors(t.clone().normalize(),u.clone().normalize()),p=o.quaternion.clone().premultiply(f);if(t.angleTo(u)===0||this.hooks.emit(`wantToRotate`,p))return;let m=new l.Euler().setFromQuaternion(new l.Quaternion().setFromUnitVectors(t.clone().normalize().applyQuaternion(a.clone().inverse()),u.clone().normalize().applyQuaternion(a.clone().inverse())),`${i.toUpperCase()}${`XZY`.replace(i.toUpperCase(),``)}`)[i]*r.angleDirection,h=this.startInfo.angle,g=h+m,_=Math.PI/2,v=l.MathUtils.degToRad(5),y=l.MathUtils.degToRad(10),b=new l.Quaternion().setFromAxisAngle(d,g),x=this.startInfo.startQuaternion.clone().premultiply(b),S=this.extractAxisAngle(x,d),C=Math.round(S/_)*_,w=Math.abs(S-C);if(Math.abs(g)>y&&w<v){let e=C-S;g+=e}let T=g-h;this.startInfo.angle=g;let E=Math.abs(T)<1e-6&&Math.abs(m)>1e-6,D=this.snapGuideLines.length>0;E&&!D?this.showSnapGuideLines(i,c):!E&&D&&this.removeSnapGuideLines(),this.setAngleHelperLength(i,this.startInfo.angle),this.setTipsAngle(l.MathUtils.radToDeg(this.startInfo.angle));let O=new l.Quaternion().setFromAxisAngle(d,T);if(c){let e=new l.Vector3().subVectors(o.position,c).applyQuaternion(O).add(c);o.position.copy(e)}o.applyQuaternion(O),bt.premultiply(O),this.internalHooks.emit(`applyObjectRotate`,{quaternion:O,origin:c}),this.hooks.emit(`rotate`,o.quaternion),E||(this.startInfo.startVector=u)}dragEnd(){var e;this.isDragging&&(this.removeSnapGuideLines(),(e=this.startInfo)!=null&&e.lineMeshes&&this.startInfo.lineMeshes.forEach(e=>{this.scene.remove(e),e.geometry.dispose(),e.material instanceof l.Material&&e.material.dispose()}),this.startInfo=void 0,this.isDragging=!1,this.helperObject3D.show(),this.updateOtherHelpers(),this.hooks.emit(`rotateEnd`))}updateOtherHelpers(){this.hooks.emit(`updateOtherHelpers`,{camera:this.camera})}getAngleHelper(e){var t,n,r;switch(e){case`x`:return(t=this.helperObject3D.xCircle)==null?void 0:t.angleSector;case`y`:return(n=this.helperObject3D.yCircle)==null?void 0:n.angleSector;case`z`:return(r=this.helperObject3D.zCircle)==null?void 0:r.angleSector}}setAngleHelperStart(e,t){let n=this.getAngleHelper(e);if(!n){console.warn(`angleHelper is undefined`);return}if(n instanceof l.Mesh&&n.geometry instanceof l.CircleGeometry){let{radius:e,segments:r,thetaLength:i}=n.geometry.parameters;n.geometry=new l.CircleGeometry(e,r,t,i)}else console.warn(`only support THREE.CircleGeometry`)}setAngleHelperLength(e,t){let n=.001,r=e===`x`||e===`y`?-t:t,i=r>=0?Math.max(r,n):Math.min(r,-n),a=this.getAngleHelper(e);if(a instanceof l.Mesh&&a.geometry instanceof l.CircleGeometry){let{radius:e,thetaStart:t}=a.geometry.parameters,n=Math.ceil(Math.abs(i)*(40/(2*Math.PI)));a.geometry=new l.CircleGeometry(e,n,t,i)}else console.warn(`only support THREE.CircleGeometry`)}setTipsAngle(e){var t;let n=(t=this.helperObject3D.angleTips)==null?void 0:t.element;n&&(n.innerText=`${e.toFixed(0)}°`)}setTipsPosition(e){let t=this.helperObject3D.angleTips;if(!t)return;let{x:n,y:r,z:i}=this.helperObject3D.getWorldPosition(new l.Vector3).clone().project(this.camera);if(i>1){t.hide();return}let a=this.container.getBoundingClientRect(),o=(n+1)/2*a.width,s=(-r+1)/2*a.height;t.setLeftTop(o+`px`,s+`px`)}extractAxisAngle(e,t){let n=t.clone().normalize(),r=e.x*n.x+e.y*n.y+e.z*n.z,i=e.w,a=2*Math.atan2(r,i);return Math.atan2(Math.sin(a),Math.cos(a))}showSnapGuideLines(e,t){this.removeSnapGuideLines();let n=(()=>{switch(e){case`x`:return[new l.Vector3(0,1,0),new l.Vector3(0,0,1)];case`y`:return[new l.Vector3(1,0,0),new l.Vector3(0,0,1)];case`z`:return[new l.Vector3(1,0,0),new l.Vector3(0,1,0)];default:return[]}})();for(let e of n){let n=this.solidGuide.createSolidLine(t,e,{color:16777215,renderOrder:G.DRAG_GUIDE_LINE});this.scene.add(n),this.snapGuideLines.push(n)}this.render()}removeSnapGuideLines(){for(let e of this.snapGuideLines)this.scene.remove(e),this.solidGuide.dispose(e);this.snapGuideLines=[]}},St=class extends pt{constructor(...e){super(...e),this.name=`BoundingBoxController`;let t=()=>{this.syncWithObject(),this.render()};this.hooks.on(`moveEnd`,t),this.hooks.on(`rotateEnd`,t),this.hooks.on(`scaleEnd`,t),this.disposers.push(()=>{this.hooks.off(`moveEnd`,t),this.hooks.off(`rotateEnd`,t),this.hooks.off(`scaleEnd`,t)})}onApplyOriginObjectRotate(e){this.helperObject3D.applyHelperQuaternion(e.quaternion,e.origin)}onSetOriginObjectRotate(e,t){this.helperObject3D.setHelperQuaternion(e,t)}syncWithObject(){this.helperObject3D.position.copy(this.originObject3D.position),this.helperObject3D.quaternion.copy(this.originObject3D.quaternion),this.helperObject3D.scale.copy(this.originObject3D.scale);let e=this.helperObject3D;e.update&&e.update()}};function $(e,t){this._camera=e||null,this._domElement=t||document,this._raycaster=new l.Raycaster,this._selected=null,this._boundObjs={};var n=this;this._$onClick=function(){n._onClick.apply(n,arguments)},this._$onDblClick=function(){n._onDblClick.apply(n,arguments)},this._$onMouseMove=function(){n._onMouseMove.apply(n,arguments)},this._$onMouseDown=function(){n._onMouseDown.apply(n,arguments)},this._$onMouseUp=function(){n._onMouseUp.apply(n,arguments)},this._$onTouchMove=function(){n._onTouchMove.apply(n,arguments)},this._$onTouchStart=function(){n._onTouchStart.apply(n,arguments)},this._$onTouchEnd=function(){n._onTouchEnd.apply(n,arguments)},this._$onContextmenu=function(){n._onContextmenu.apply(n,arguments)},this._domElement.addEventListener(`click`,this._$onClick,!1),this._domElement.addEventListener(`dblclick`,this._$onDblClick,!1),this._domElement.addEventListener(`mousemove`,this._$onMouseMove,!1),this._domElement.addEventListener(`mousedown`,this._$onMouseDown,!1),this._domElement.addEventListener(`mouseup`,this._$onMouseUp,!1),this._domElement.addEventListener(`touchmove`,this._$onTouchMove,!1),this._domElement.addEventListener(`touchstart`,this._$onTouchStart,!1),this._domElement.addEventListener(`touchend`,this._$onTouchEnd,!1),this._domElement.addEventListener(`contextmenu`,this._$onContextmenu,!1)}$.prototype.destroy=function(){this._domElement.removeEventListener(`click`,this._$onClick,!1),this._domElement.removeEventListener(`dblclick`,this._$onDblClick,!1),this._domElement.removeEventListener(`mousemove`,this._$onMouseMove,!1),this._domElement.removeEventListener(`mousedown`,this._$onMouseDown,!1),this._domElement.removeEventListener(`mouseup`,this._$onMouseUp,!1),this._domElement.removeEventListener(`touchmove`,this._$onTouchMove,!1),this._domElement.removeEventListener(`touchstart`,this._$onTouchStart,!1),this._domElement.removeEventListener(`touchend`,this._$onTouchEnd,!1),this._domElement.removeEventListener(`contextmenu`,this._$onContextmenu,!1)},$.eventNames=[`click`,`dblclick`,`mouseover`,`mouseout`,`mousemove`,`mousedown`,`mouseup`,`contextmenu`,`touchstart`,`touchend`],$.prototype._getRelativeMouseXY=function(e){var t=e.target||e.srcElement;t.nodeType===3&&(t=t.parentNode);var n={x:0,y:0},r=t,i=getComputedStyle(r,null);n.y+=parseInt(i.getPropertyValue(`padding-top`),10),n.x+=parseInt(i.getPropertyValue(`padding-left`),10);do n.x+=r.offsetLeft,n.y+=r.offsetTop,i=getComputedStyle(r,null),n.x+=parseInt(i.getPropertyValue(`border-left-width`),10),n.y+=parseInt(i.getPropertyValue(`border-top-width`),10);while(r=r.offsetParent);var a={width:t===window?window.innerWidth:t.offsetWidth,height:t===window?window.innerHeight:t.offsetHeight};return{x:Number((e.pageX-n.x)/a.width)*2-1,y:-((e.pageY-n.y)/a.height)*2+1}},$.prototype._objectCtxInit=function(e){e._3xDomEvent={}},$.prototype._objectCtxDeinit=function(e){delete e._3xDomEvent},$.prototype._objectCtxIsInit=function(e){return!!e._3xDomEvent},$.prototype._objectCtxGet=function(e){return e._3xDomEvent},$.prototype.camera=function(e){return e&&(this._camera=e),this._camera},$.prototype.bind=function(e,t,n,r){console.assert($.eventNames.indexOf(t)!==-1,`not available events:`+t),this._objectCtxIsInit(e)||this._objectCtxInit(e);var i=this._objectCtxGet(e);i[t+`Handlers`]||(i[t+`Handlers`]=[]),i[t+`Handlers`].push({callback:n,useCapture:r}),this._boundObjs[t]===void 0&&(this._boundObjs[t]=[]),this._boundObjs[t].push(e)},$.prototype.addEventListener=$.prototype.bind,$.prototype.unbind=function(e,t,n,r){console.assert($.eventNames.indexOf(t)!==-1,`not available events:`+t),this._objectCtxIsInit(e)||this._objectCtxInit(e);var i=this._objectCtxGet(e);i[t+`Handlers`]||(i[t+`Handlers`]=[]);for(var a=i[t+`Handlers`],o=0;o<a.length;o++){var s=a[o];if(n==s.callback&&r==s.useCapture){a.splice(o,1);break}}var c=this._boundObjs[t].indexOf(e);this._boundObjs[t].splice(c,1)},$.prototype.removeEventListener=$.prototype.unbind,$.prototype._bound=function(e,t){var n=this._objectCtxGet(t);return n?!!n[e+`Handlers`]:!1},$.prototype._isObjectVisible=function(e){for(var t=e;t;){if(t.visible===!1)return!1;t=t.parent}return!0},$.prototype._filterVisibleObjects=function(e){var t=this;return e.filter(function(e){return t._isObjectVisible(e)})},$.prototype._onMove=function(e,t,n,r){var i=this._boundObjs[e];if(!(i===void 0||i.length===0)){var a=this._filterVisibleObjects(i);if(a.length!==0){var o=new l.Vector2;o.set(t,n),this._raycaster.setFromCamera(o,this._camera);var s=this._raycaster.intersectObjects(a),c=this;s=s.filter(function(e){return c._isObjectVisible(e.object)}),s.sort(function(e,t){var n=e.object.renderOrder||0,r=t.object.renderOrder||0;return n===r?e.distance-t.distance:r-n});var u=this._selected;if(s.length>0){var d,f,p,m=s[0],h=m.object;this._selected=h,p=this._bound(`mousemove`,h),u!=h&&(d=this._bound(`mouseover`,h),f=u&&this._bound(`mouseout`,u))}else f=u&&this._bound(`mouseout`,u),this._selected=null;p&&this._notify(`mousemove`,h,r,m),d&&this._notify(`mouseover`,h,r,m),f&&this._notify(`mouseout`,u,r,m)}}},$.prototype._onEvent=function(e,t,n,r){var i=this._boundObjs[e];if(!(i===void 0||i.length===0)){var a=this._filterVisibleObjects(i);if(a.length!==0){var o=new l.Vector2;o.set(t,n),this._raycaster.setFromCamera(o,this._camera);var s=this._raycaster.intersectObjects(a,!0),c=this;if(s=s.filter(function(e){return c._isObjectVisible(e.object)}),s.sort(function(e,t){var n=e.object.renderOrder||0,r=t.object.renderOrder||0;return n===r?e.distance-t.distance:r-n}),s.length!==0){for(var u=s[0],d=u.object,f=this._objectCtxGet(d),p=d.parent;f===void 0&&p;)f=this._objectCtxGet(p),p=p.parent;f&&this._notify(e,d,r,u)}}}},$.prototype._notify=function(e,t,n,r){var i=this._objectCtxGet(t),a=i?i[e+`Handlers`]:null;if(!i||!a||a.length===0){t.parent&&this._notify(e,t.parent,n,r);return}for(var a=i[e+`Handlers`],o=0;o<a.length;o++){var s=a[o],c=!0;s.callback({type:e,target:t,origDomEvent:n,intersect:r,stopPropagation:function(){c=!1}}),c&&s.useCapture===!1&&t.parent&&this._notify(e,t.parent,n,r)}},$.prototype._onMouseDown=function(e){return this._onMouseEvent(`mousedown`,e)},$.prototype._onMouseUp=function(e){return this._onMouseEvent(`mouseup`,e)},$.prototype._onMouseEvent=function(e,t){var n=this._getRelativeMouseXY(t);this._onEvent(e,n.x,n.y,t)},$.prototype._onMouseMove=function(e){var t=this._getRelativeMouseXY(e);this._onMove(`mousemove`,t.x,t.y,e),this._onMove(`mouseover`,t.x,t.y,e),this._onMove(`mouseout`,t.x,t.y,e)},$.prototype._onClick=function(e){this._onMouseEvent(`click`,e)},$.prototype._onDblClick=function(e){this._onMouseEvent(`dblclick`,e)},$.prototype._onContextmenu=function(e){this._onMouseEvent(`contextmenu`,e)},$.prototype._onTouchStart=function(e){return this._onTouchEvent(`touchstart`,e)},$.prototype._onTouchEnd=function(e){return this._onTouchEvent(`touchend`,e)},$.prototype._onTouchMove=function(e){if(e.touches.length==1){var t=Number(e.touches[0].pageX/window.innerWidth)*2-1,n=-(e.touches[0].pageY/window.innerHeight)*2+1;this._onMove(`mousemove`,t,n,e),this._onMove(`mouseover`,t,n,e),this._onMove(`mouseout`,t,n,e)}},$.prototype._onTouchEvent=function(e,t){var n=t.touches;if(n.length==0&&(n=t.changedTouches),n.length==1){var r=Number(n[0].pageX/window.innerWidth)*2-1,i=-(n[0].pageY/window.innerHeight)*2+1;this._onEvent(e,r,i,t)}};var Ct=`Object3DHelperPlugin`,wt=Ct,Tt=()=>{console.error(`${wt} is disposed`)},Et=()=>{console.warn(`${wt} is disabled`)},Dt=()=>{console.error(`${wt} is disabled`)},Ot=class{constructor(e){this.controllers={},this.state={visible:!0,enabled:!0,disposed:!1},this.hooks=new c.Subscribe,e&&this.addControllers(e),this.setState(this.state)}show(e){this.setState({visible:!0},e)}hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,t){if(this.state.disposed||!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return;let n=Object.assign({},this.state);this.state=Object.assign(Object.assign({},this.state),e),e.disposed!==void 0&&e.disposed!==n.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&this.handleVisible(e.visible),e.enabled!==void 0&&this.handleEnable(e.enabled),this.hooks.emit(`stateChange`,{state:this.state,prevState:n})}addControllers(e){this.controllers=Object.assign(Object.assign({},this.controllers),e),this.setState(this.state)}initialHelperMatrix(){this.everyControllerDo(e=>{e.initialHelperPosition(),e.initialHelperQuaternion()})}handleEnable(e,t=!0){e?(this.everyControllerDo(e=>e.enable()),this.hooks.emit(`enable`,{userAction:t})):(this.everyControllerDo(e=>e.disable()),this.hooks.emit(`disable`,{userAction:t}))}handleVisible(e,t=!0){e?(this.everyControllerDo(e=>e.show()),this.state.enabled&&this.hooks.emit(`show`,{userAction:t})):(this.everyControllerDo(e=>e.hide()),this.state.enabled&&this.hooks.emit(`hide`,{userAction:t}))}handleDispose(){Object.values(this.controllers).forEach(e=>{e==null||e.dispose()})}everyControllerDo(e){Object.values(this.controllers).forEach(t=>{t&&e(t)})}},kt=class extends p.Controller{constructor(e){super(e),this.name=Ct,this.state={visible:!0,enabled:!0,disposed:!1},this.objectHelperMap=new Map,this.five=e}show(e){return m(this,void 0,void 0,function*(){this.setState({visible:!0},e)})}hide(e){return m(this,void 0,void 0,function*(){this.setState({visible:!1},e)})}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}load(e){return m(this,void 0,void 0,function*(){})}setState(e,t){var n;if(this.state.disposed)return Tt();if(!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return Dt();let r=Object.assign({},this.state);this.state=Object.assign(Object.assign({},this.state),e),e.disposed!==void 0&&e.disposed!==r.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==r.visible&&this.handleVisible(e.visible),e.enabled!==void 0&&e.enabled!==r.enabled&&this.handleEnable(e.enabled),this.hooks.emit(`stateChange`,{state:this.state,prevState:r,userAction:(n=t==null?void 0:t.userAction)==null?!0:n})}getObject3DHelper(e){return this.objectHelperMap.get(e)}addObject3DHelper(e,t={}){var n,r;if(!e){console.error(`Object3D is undefined`);return}if(this.objectHelperMap.has(e)){console.warn(`Object3DHelperPlugin: object3D ${e.name} already has helper`);return}let i=new Ot,a=[],o=(n=this.five.getElement())==null?void 0:n.parentElement;this.five.camera;let s=Object.assign(Object.assign({},{moveHelper:!0,rotateHelper:!0,boundingBoxHelper:!1,moveHelperTips:!1,positionFrom:`objectPosition`}),t),{moveHelper:u,rotateHelper:d,boundingBoxHelper:f}=s,p=new l.Group;s.helperOffset&&p.position.copy(s.helperOffset),this.five.scene.add(p);let m=i.hooks,h=new c.Subscribe,g=new $(this.five.camera,this.five.getElement()),_=e=>{if(e)return typeof e==`boolean`?e:e.enable},v={};if(_(u)){let t=Object.assign(Object.assign({},this.getConfig(s.moveHelper)),s),n=new Y(e,Object.assign({container:o==null?void 0:o,moveTipsEnable:(r=s.moveHelperTips)==null?!1:r},t)),i=new yt(this.five,g,vt,e,n,t,m,h,p);v.moveController=i.helperController,a.push(()=>i.dispose())}if(_(d)){let t=Object.assign(Object.assign({},this.getConfig(s.rotateHelper)),s),n=new st(e,Object.assign({container:o==null?void 0:o},t)),r=new yt(this.five,g,xt,e,n,t,m,h,p);v.rotateController=r.helperController,a.push(()=>r.dispose())}if(_(f)){let t=new ut(e),n=new yt(this.five,g,St,e,t,void 0,m,h,p);v.boundingBoxController=n.helperController,a.push(()=>n.dispose())}return Object.values(v).forEach(e=>{e&&typeof e.updateOtherControllers==`function`&&e.updateOtherControllers(v)}),i.addControllers(v),this.objectHelperMap.set(e,{helper:i,disposers:a,helperGroup:p}),i.controllers}removeObject3DHelper(e){if(!this.objectHelperMap.has(e))return;let{helper:t,disposers:n,helperGroup:r}=this.objectHelperMap.get(e);this.objectHelperMap.delete(e),t.dispose(),n==null||n.forEach(e=>e==null?void 0:e()),r.parent&&r.parent.remove(r)}handleEnable(e,t=!0){e?(this.everyHelperDo(e=>e.enable()),this.hooks.emit(`enable`,{userAction:t})):(this.everyHelperDo(e=>e.disable()),this.hooks.emit(`disable`,{userAction:t})),this.state.enabled=e}handleVisible(e,t=!0){e?(this.everyHelperDo(e=>e.show()),this.actionIfStateIsEnabled(()=>this.hooks.emit(`show`,{userAction:t}))):(this.everyHelperDo(e=>e.hide()),this.actionIfStateIsEnabled(()=>this.hooks.emit(`hide`,{userAction:t}))),this.state.visible=e}handleDispose(){this.objectHelperMap.forEach(({helper:e,disposers:t,helperGroup:n})=>{e.dispose(),t==null||t.forEach(e=>e==null?void 0:e()),n.parent&&n.parent.remove(n)}),this.objectHelperMap.clear()}everyHelperDo(e){this.objectHelperMap.forEach(({helper:t,disposers:n})=>{t&&e(t,n)})}actionIfStateIsEnabled(e,t){if(this.state.enabled)return e();t!=null&&t.warnLog&&Et()}getConfig(e){if(e&&typeof e!=`boolean`&&e.enable)return e}},At=e=>new kt(e),jt=class{constructor(e,t,n,r,i){this.R=e,this.Q=t,this.A=n,this.B=r,this.C=i,this.cov=NaN,this.x=NaN}filter(e,t=0){if(isNaN(this.x))this.x=1/this.C*e,this.cov=1/this.C*this.Q*(1/this.C);else{let n=this.A*this.x+this.B*t,r=this.A*this.cov*this.A+this.R,i=r*this.C*(1/(this.C*r*this.C+this.Q));this.x=n+i*(e-this.C*n),this.cov=r-i*this.C*r}return this.x}},Mt=class extends p.Controller{updateState(e,t){let n=this.state;this.state=Object.assign(Object.assign({},this.state),e),this.hooks.emit(`stateChange`,{state:this.state,prevState:n,userAction:t})}constructor(e,t){var n,r,i;super(e),this.boundingAABB=null,this.cancelAnimation=null,this.boundsSet=!1,this.keyframes=[],this.five=e,this.state={enabled:!0,visible:!0},this.duration=(n=t==null?void 0:t.duration)==null?6e3:n,this.curveHeight=(r=t==null?void 0:t.curveHeight)==null?1.5:r,this.pointDuration=(i=t==null?void 0:t.pointDuration)==null?4e3:i}load(){return m(this,void 0,void 0,function*(){})}enable(e){var t;if(this.state.enabled)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!0},n)}disable(e){var t;if(this.state.enabled===!1)return;let n=(t=e==null?void 0:e.userAction)==null?!0:t;this.updateState({enabled:!1},n)}dispose(){this.disable(),this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null);try{let e=this.findRenderMesh();if(e){let t=e.material.uniforms;t.u_aggregationEnabled.value=!1,t.u_aggregationProgress.value=1}}catch(e){}}extractKeyframes(e){let t=[];if(!e.content.data)throw Error(`轨迹数据未加载`);let n=e.content.data.positionArray,r=n.length/3,i=.01,a=.1,o=new jt(i,a,1,0,1),s=new jt(i,a,1,0,1),c=new jt(i,a,1,0,1),u=new Float32Array(r);for(let e=0;e<r;e++)if(e===0)u[e]=0;else{let t=new l.Vector3(n[(e-1)*3],n[(e-1)*3+1],n[(e-1)*3+2]);u[e]=new l.Vector3(n[e*3],n[e*3+1],n[e*3+2]).distanceTo(t)+u[e-1]}for(let i=0;i<r;i++){let a=new l.Vector3(0,0,0),d=0;for(let e=i-5;e<i+6;e++)e>=0&&e<r&&(a.add(new l.Vector3(n[e*3],n[e*3+1],n[e*3+2])),d++);a.divideScalar(d).applyMatrix4(e.transform);let f=o.filter(a.x),p=s.filter(a.y),m=c.filter(a.z);t.push({position:new l.Vector3(f,p,m),location:u[i]})}return t}computeAABB2D(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let a of e)a.position.x<t&&(t=a.position.x),a.position.x>n&&(n=a.position.x),a.position.z<r&&(r=a.position.z),a.position.z>i&&(i=a.position.z);return{min:new l.Vector2(t,r),max:new l.Vector2(n,i)}}findClosestKeyframeToRay(e,t){let n=1/0,r=t[0].position.clone(),i=new l.Vector3;for(let a of t){e.closestPointToPoint(a.position,i);let t=i.distanceTo(a.position);t<n&&(n=t,r=a.position.clone())}return r}getCameraCurve(){return m(this,void 0,void 0,function*(){var e,t,n;let r=(n=(t=(e=this.five.model.viewLayers[0])==null?void 0:e.scene)==null?void 0:t.trajectories)==null?void 0:n[0];if(!r)throw Error(`未找到轨迹数据`);r.visible=!0,yield new Promise(e=>{let t=c.AnimationFrameLoop.shared.add(()=>{r.content.loadState===`READY`&&(t(),e(),r.visible=!1)})});let i=this.extractKeyframes(r);if(i.length<2)throw Error(`轨迹关键帧不足,至少需要2个关键帧`);this.keyframes=i;let a=this.computeAABB2D(i);this.boundingAABB=a;let o=this.curveHeight,s=new l.Vector3((a.min.x+a.max.x)/2,o,(a.min.y+a.max.y)/2),u=(a.max.x-a.min.x)/2,d=(a.max.y-a.min.y)/2,f=Math.sqrt(u*u+d*d),p=e=>{let t=new l.Vector3().subVectors(e,s);return t.length()<.001&&t.set(1,0,0),s.clone().add(t.normalize().multiplyScalar(f))},m=new l.Vector3(i[0].position.x,o,i[0].position.z),h=p(m),g=new l.Vector3().subVectors(s,m).normalize(),_=new l.Ray(m,g),v=new l.Vector3(-g.z,0,g.x).normalize(),y=new l.Ray(s,v),b=this.findClosestKeyframeToRay(y,i),x=p(new l.Vector3(b.x,o,b.z)),S=this.findClosestKeyframeToRay(_,i),C=p(new l.Vector3(S.x,o,S.z));return new l.CatmullRomCurve3([h,x,C],!1,`centripetal`,.5)})}findRenderMesh(){let e=null;if(this.five.scene.traverse(t=>{e||t instanceof l.Mesh&&t.material&&t.material.uniforms&&t.material.uniforms.u_aggregationEnabled&&(e=t)}),!e)throw Error(`未找到 GaussianSplatting 渲染网格`);return e}setBounding(e,t,n){let r=this.findRenderMesh();r.material.uniforms.u_aggregationBoundsMin.value.copy(e),r.material.uniforms.u_aggregationBoundsMax.value.copy(t),this.boundsSet=!0}setBounds(){if(!this.boundingAABB)throw Error(`请先调用 getCameraCurve 计算轨迹边界`);let e=this.boundingAABB,t=this.findRenderMesh(),n=new l.Vector3(e.min.x,0,e.min.y),r=new l.Vector3(e.max.x,3,e.max.y);t.material.uniforms.u_aggregationBoundsMin.value.copy(n),t.material.uniforms.u_aggregationBoundsMax.value.copy(r),this.boundsSet=!0}startAggregation(){if(!this.boundsSet)throw Error(`请先调用 setBounds 设置聚合边界`);let e=this.findRenderMesh().material.uniforms;e.u_aggregationEnabled.value=!0,e.u_aggregationProgress.value=0,e.u_aggregationPointDuration.value=Math.min(this.pointDuration/this.duration,1),this.five.needsRender=!0;let t=performance.now(),n=this.duration;this.cancelAnimation=c.AnimationFrameLoop.shared.add(()=>{let r=performance.now()-t,i=Math.min(r/n,1),a=i*i*(3-2*i);e.u_aggregationProgress.value=a,this.five.needsRender=!0,this.five.modelSceneNeedsRender=!0,i>=1&&(e.u_aggregationEnabled.value=!1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null))})}playEntrance(){return m(this,void 0,void 0,function*(){let e=yield this.getCameraCurve(),t=this.boundingAABB,n=new l.Vector3((t.min.x+t.max.x)/2,this.curveHeight,(t.min.y+t.max.y)/2),r=e.getPointAt(0),i=new c.Camera(90).copy(this.five.camera);i.position.copy(r),i.lookAt(n),i.computePose(0),this.five.setState(Object.assign({},i.pose)),this.setBounds();let a=this.findRenderMesh().material.uniforms;a.u_aggregationEnabled.value=!0,a.u_aggregationProgress.value=0,a.u_aggregationPointDuration.value=Math.min(this.pointDuration/this.duration,1),this.five.needsRender=!0;let o=this.duration,s=performance.now();return new Promise(t=>{this.cancelAnimation=c.AnimationFrameLoop.shared.add(()=>{let r=performance.now()-s,c=Math.min(r/o,1),l=c*c*(3-2*c);a.u_aggregationProgress.value=l,this.five.modelSceneNeedsRender=!0;let u=e.getPointAt(l);i.position.copy(u),i.lookAt(n),i.computePose(0),this.five.setState(Object.assign({},i.pose)),this.five.needsRender=!0,c>=1&&(a.u_aggregationEnabled.value=!1,a.u_aggregationProgress.value=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),t())})})})}},Nt=(e,t)=>new Mt(e,t),Pt=class extends l.InstancedBufferGeometry{constructor(e,t){super(),this.prefabGeometry=e,this.copy(e),this.instanceCount=t,this.prefabCount=t}createAttribute(e,t,n){let r=new l.InstancedBufferAttribute(new Float32Array(this.prefabCount*t),t);if(this.setAttribute(e,r),n){let e=[];for(let t=0;t<this.prefabCount;t++)n(e,t,this.prefabCount),this.setPrefabData(r,t,e)}return r}setPrefabData(e,t,n){let r=typeof e==`string`?this.attributes[e]:e,i=t*r.itemSize,a=r.array;for(let e=0;e<r.itemSize;e++)a[i++]=n[e]}},Ft=class extends l.BufferGeometry{constructor(e,t){super(),this.prefabGeometry=e,this.isPrefabBufferGeometry=e.isBufferGeometry,this.prefabCount=t,this.isPrefabBufferGeometry?this.prefabVertexCount=e.attributes.position.count:this.prefabVertexCount=e.vertices.length,this.bufferIndices(),this.bufferPositions()}bufferIndices(){let e=[],t;if(this.isPrefabBufferGeometry){let n=this.prefabGeometry;if(n.index)t=n.index.count,e=Array.from(n.index.array);else{t=this.prefabVertexCount;for(let n=0;n<t;n++)e.push(n)}}else{let n=this.prefabGeometry,r=n.faces.length;t=r*3;for(let t=0;t<r;t++){let r=n.faces[t];e.push(r.a,r.b,r.c)}}let n=new Uint32Array(this.prefabCount*t);this.setIndex(new l.BufferAttribute(n,1));for(let r=0;r<this.prefabCount;r++)for(let i=0;i<t;i++)n[r*t+i]=e[i]+r*this.prefabVertexCount}bufferPositions(){let e=this.createAttribute(`position`,3).array;if(this.isPrefabBufferGeometry){let t=this.prefabGeometry.attributes.position.array;for(let n=0,r=0;n<this.prefabCount;n++)for(let n=0;n<this.prefabVertexCount;n++,r+=3)e[r]=t[n*3],e[r+1]=t[n*3+1],e[r+2]=t[n*3+2]}else{let t=this.prefabGeometry;for(let n=0,r=0;n<this.prefabCount;n++)for(let n=0;n<this.prefabVertexCount;n++,r+=3){let i=t.vertices[n];e[r]=i.x,e[r+1]=i.y,e[r+2]=i.z}}}bufferUvs(){let e=this.createAttribute(`uv`,2).array;if(this.isPrefabBufferGeometry){let t=this.prefabGeometry.attributes.uv.array;for(let n=0,r=0;n<this.prefabCount;n++)for(let n=0;n<this.prefabVertexCount;n++,r+=2)e[r]=t[n*2],e[r+1]=t[n*2+1]}else{let t=this.prefabGeometry,n=t.faces.length,r=[];for(let e=0;e<n;e++){let n=t.faces[e],i=t.faceVertexUvs[0][e];r[n.a]=i[0],r[n.b]=i[1],r[n.c]=i[2]}for(let t=0,n=0;t<this.prefabCount;t++)for(let t=0;t<this.prefabVertexCount;t++,n+=2){let i=r[t];e[n]=i.x,e[n+1]=i.y}}}bufferNormals(){let e=this.createAttribute(`normal`,3).array;if(this.isPrefabBufferGeometry){let t=this.prefabGeometry.attributes.normal.array;for(let n=0,r=0;n<this.prefabCount;n++)for(let n=0;n<this.prefabVertexCount;n++,r+=3)e[r]=t[n*3],e[r+1]=t[n*3+1],e[r+2]=t[n*3+2]}else{let t=this.prefabGeometry,n=t.faces.length,r=[];for(let e=0;e<n;e++){let n=t.faces[e];n.vertexNormals.length>0?(r[n.a]=n.vertexNormals[0],r[n.b]=n.vertexNormals[1],r[n.c]=n.vertexNormals[2]):(r[n.a]=n.normal,r[n.b]=n.normal,r[n.c]=n.normal)}for(let t=0,n=0;t<this.prefabCount;t++)for(let t=0;t<this.prefabVertexCount;t++,n+=3){let i=r[t];e[n]=i.x,e[n+1]=i.y,e[n+2]=i.z}}}createAttribute(e,t,n){let r=new l.BufferAttribute(new Float32Array(this.prefabCount*this.prefabVertexCount*t),t);if(this.setAttribute(e,r),n){let e=[];for(let t=0;t<this.prefabCount;t++)n(e,t,this.prefabCount),this.setPrefabData(r,t,e)}return r}setPrefabData(e,t,n){let r=typeof e==`string`?this.attributes[e]:e,i=t*this.prefabVertexCount*r.itemSize,a=r.array;for(let e=0;e<this.prefabVertexCount;e++)for(let e=0;e<r.itemSize;e++)a[i++]=n[e]}},It=class extends l.BufferGeometry{constructor(e){super(),this.pointCount=e,this.bufferPositions()}bufferPositions(){this.createAttribute(`position`,3)}createAttribute(e,t,n){let r=new l.BufferAttribute(new Float32Array(this.pointCount*t),t);if(this.setAttribute(e,r),n){let e=[];for(let t=0;t<this.pointCount;t++)n(e,t,this.pointCount),this.setPointData(r,t,e)}return r}setPointData(e,t,n){let r=typeof e==`string`?this.attributes[e]:e,i=t*r.itemSize,a=r.array;for(let e=0;e<r.itemSize;e++)a[i++]=n[e]}};exports.BackgroundPlugin=ue,Object.defineProperty(exports,`BasePlugin`,{enumerable:!0,get:function(){return p}}),exports.CSS2DObject=Fe,exports.CSS2DPlugin=We,exports.CSS2DRenderer=Ve,exports.CSS3DObject=M,exports.CSS3DPlugin=Pe,exports.CSS3DRenderer=se,exports.CSS3DSprite=ae,exports.DynamicPathLinePlugin=ke,exports.GaussianSplattingEntranceAnimationPlugin=Nt,exports.InstancedPrefabBufferGeometry=Pt,exports.ItemMaskPlugin=A,exports.Object3DHelperController=kt,exports.Object3DHelperPlugin=At,exports.OrbitControls=j,exports.OrientationPlugin=V,exports.PanoAnimePlugin=xe,exports.PointBufferGeometry=It,exports.PrefabBufferGeometry=Ft,exports.RoundedBoxGeometry=F,exports.TrajectoryPlugin=U;