@realsee/five 6.8.2 → 6.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/ai_guides/api.md +1 -1
  2. package/ai_guides/features/event.md +24 -1
  3. package/ai_guides/release_notes/6.8.md +1 -0
  4. package/docs/assets/hierarchy.js +1 -1
  5. package/docs/classes/gltf-loader.DDSLoader.html +1 -1
  6. package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
  7. package/docs/classes/gltf-loader.GLTFObject.html +1 -1
  8. package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
  9. package/docs/classes/line.LineGeometry.html +1 -1
  10. package/docs/classes/line.LineMaterial.html +1 -1
  11. package/docs/classes/line.LineSegmentsGeometry.html +1 -1
  12. package/docs/classes/line.THREE_Line2.html +1 -1
  13. package/docs/classes/line.THREE_LineSegments2.html +1 -1
  14. package/docs/classes/vfx.Airflow.html +1 -1
  15. package/docs/classes/vfx.Flame.html +1 -1
  16. package/docs/classes/vfx.Particle.html +1 -1
  17. package/docs/classes/vfx.ParticleGPU.html +1 -1
  18. package/docs/classes/vfx.SpotLight.html +1 -1
  19. package/docs/documents/api.html +1 -1
  20. package/docs/documents/features_event.html +34 -2
  21. package/docs/documents/release_notes_6.8.html +1 -0
  22. package/docs/hierarchy.html +1 -1
  23. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationController.html +6 -6
  24. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseController.html +1 -1
  25. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseHelper.html +1 -1
  26. package/docs/interfaces/plugins.Object3DHelperPluginType.BoundingBoxController.html +1 -1
  27. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveController.html +1 -1
  28. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveHelperAbstract.html +1 -1
  29. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateController.html +1 -1
  30. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateHelperAbstract.html +1 -1
  31. package/docs/interfaces/react.FiveInjectionTypes.html +1 -1
  32. package/docs/interfaces/react.UseFivePluginOptions.html +1 -1
  33. package/docs/interfaces/react.UseFivePluginOptionsWithCreate.html +1 -1
  34. package/five/index.js +5 -5
  35. package/five/index.mjs +5 -5
  36. package/gltf-loader/index.js +3 -3
  37. package/gltf-loader/index.mjs +3 -3
  38. package/line/index.js +3 -3
  39. package/line/index.mjs +3 -3
  40. package/package.json +1 -1
  41. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.d.ts +1 -0
  42. package/plugins/index.js +3 -3
  43. package/plugins/index.mjs +23 -16
  44. package/react/index.js +2 -2
  45. package/react/index.mjs +2 -2
  46. package/shader-lib/index.js +2 -2
  47. package/shader-lib/index.mjs +2 -2
  48. package/sticker/index.js +3 -3
  49. package/sticker/index.mjs +3 -3
  50. package/umd/five-gltf-loader.js +3 -3
  51. package/umd/five-line.js +3 -3
  52. package/umd/five-plugins.js +3 -3
  53. package/umd/five-react.js +2 -2
  54. package/umd/five-shader-lib.js +2 -2
  55. package/umd/five-sticker.js +3 -3
  56. package/umd/five-vfx.js +2 -2
  57. package/umd/five-vue.js +2 -2
  58. package/umd/five.js +5 -5
  59. package/vfx/index.js +2 -2
  60. package/vfx/index.mjs +2 -2
  61. package/vue/index.js +2 -2
  62. package/vue/index.mjs +2 -2
  63. package/work-downloader/index.js +2 -2
  64. package/work-downloader/index.mjs +2 -2
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five
4
- * Generated: 5/8/2026
5
- * Version: 6.8.2
4
+ * Generated: 2026/5/11
5
+ * Version: 6.8.3
6
6
  * Terms:
7
7
  * Realsee SDK License Agreement
8
8
  * Update: July 28, 2021
@@ -258,4 +258,4 @@
258
258
  `),a=[`float glossinessFactor = glossiness;`,`#ifdef USE_GLOSSINESSMAP`,` vec4 texelGlossiness = texture2D( glossinessMap, vUv );`,` // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture`,` glossinessFactor *= texelGlossiness.a;`,`#endif`].join(`
259
259
  `),o=[`PhysicalMaterial material;`,`material.diffuseColor = diffuseColor.rgb;`,`vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );`,`float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );`,`material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.`,`material.specularRoughness += geometryRoughness;`,`material.specularRoughness = min( material.specularRoughness, 1.0 );`,`material.specularColor = specularFactor.rgb;`].join(`
260
260
  `),s={specular:{value:new t.Color().setHex(16777215)},glossiness:{value:1},specularMap:{value:null},glossinessMap:{value:null}};this._extraUniforms=s,this.onBeforeCompile=function(e){for(var t in s)e.uniforms[t]=s[t];e.fragmentShader=e.fragmentShader.replace(`uniform float roughness;`,`uniform vec3 specular;`),e.fragmentShader=e.fragmentShader.replace(`uniform float metalness;`,`uniform float glossiness;`),e.fragmentShader=e.fragmentShader.replace(`#include <roughnessmap_pars_fragment>`,n),e.fragmentShader=e.fragmentShader.replace(`#include <metalnessmap_pars_fragment>`,r),e.fragmentShader=e.fragmentShader.replace(`#include <roughnessmap_fragment>`,i),e.fragmentShader=e.fragmentShader.replace(`#include <metalnessmap_fragment>`,a),e.fragmentShader=e.fragmentShader.replace(`#include <lights_physical_fragment>`,o)},Object.defineProperties(this,{specular:{get:function(){return s.specular.value},set:function(e){s.specular.value=e}},specularMap:{get:function(){return s.specularMap.value},set:function(e){s.specularMap.value=e}},glossiness:{get:function(){return s.glossiness.value},set:function(e){s.glossiness.value=e}},glossinessMap:{get:function(){return s.glossinessMap.value},set:function(e){s.glossinessMap.value=e,e?(this.defines.USE_GLOSSINESSMAP=``,this.defines.USE_ROUGHNESSMAP=``):(delete this.defines.USE_ROUGHNESSMAP,delete this.defines.USE_GLOSSINESSMAP)}}}),delete this.metalness,delete this.roughness,delete this.metalnessMap,delete this.roughnessMap,this.setValues(e)}h.prototype=Object.create(t.MeshStandardMaterial.prototype),h.prototype.constructor=h,h.prototype.copy=function(e){return t.MeshStandardMaterial.prototype.copy.call(this,e),this.specularMap=e.specularMap,this.specular.copy(e.specular),this.glossinessMap=e.glossinessMap,this.glossiness=e.glossiness,delete this.metalness,delete this.roughness,delete this.metalnessMap,delete this.roughnessMap,this};function g(){return{name:r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,specularGlossinessParams:[`color`,`map`,`lightMap`,`lightMapIntensity`,`aoMap`,`aoMapIntensity`,`emissive`,`emissiveIntensity`,`emissiveMap`,`bumpMap`,`bumpScale`,`normalMap`,`normalMapType`,`displacementMap`,`displacementScale`,`displacementBias`,`specularMap`,`specular`,`glossinessMap`,`glossiness`,`alphaMap`,`envMap`,`envMapIntensity`,`refractionRatio`],getMaterialType:function(){return h},extendParams:function(e,n,r){var i=n.extensions[this.name];e.color=new t.Color(1,1,1),e.opacity=1;var a=[];if(Array.isArray(i.diffuseFactor)){var o=i.diffuseFactor;e.color.fromArray(o),e.opacity=o[3]}if(i.diffuseTexture!==void 0&&a.push(r.assignTexture(e,`map`,i.diffuseTexture)),e.emissive=new t.Color(0,0,0),e.glossiness=i.glossinessFactor===void 0?1:i.glossinessFactor,e.specular=new t.Color(1,1,1),Array.isArray(i.specularFactor)&&e.specular.fromArray(i.specularFactor),i.specularGlossinessTexture!==void 0){var s=i.specularGlossinessTexture;a.push(r.assignTexture(e,`glossinessMap`,s)),a.push(r.assignTexture(e,`specularMap`,s))}return Promise.all(a)},createMaterial:function(e){var n=new h(e);return n.fog=!0,n.color=e.color,n.map=e.map===void 0?null:e.map,n.lightMap=null,n.lightMapIntensity=1,n.aoMap=e.aoMap===void 0?null:e.aoMap,n.aoMapIntensity=1,n.emissive=e.emissive,n.emissiveIntensity=1,n.emissiveMap=e.emissiveMap===void 0?null:e.emissiveMap,n.bumpMap=e.bumpMap===void 0?null:e.bumpMap,n.bumpScale=1,n.normalMap=e.normalMap===void 0?null:e.normalMap,n.normalMapType=t.TangentSpaceNormalMap,e.normalScale&&(n.normalScale=e.normalScale),n.displacementMap=null,n.displacementScale=1,n.displacementBias=0,n.specularMap=e.specularMap===void 0?null:e.specularMap,n.specular=e.specular,n.glossinessMap=e.glossinessMap===void 0?null:e.glossinessMap,n.glossiness=e.glossiness,n.alphaMap=null,n.envMap=e.envMap===void 0?null:e.envMap,n.envMapIntensity=1,n.refractionRatio=.98,n}}}function _(){this.name=r.KHR_MESH_QUANTIZATION}function v(e,n,r,i){t.Interpolant.call(this,e,n,r,i)}v.prototype=Object.create(t.Interpolant.prototype),v.prototype.constructor=v,v.prototype.copySampleValue_=function(e){for(var t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r*3+r,a=0;a!==r;a++)t[a]=n[i+a];return t},v.prototype.beforeStart_=v.prototype.copySampleValue_,v.prototype.afterEnd_=v.prototype.copySampleValue_,v.prototype.interpolate_=function(e,t,n,r){for(var i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=o*2,c=o*3,l=r-t,u=(n-t)/l,d=u*u,f=d*u,p=e*c,m=p-c,h=-2*f+3*d,g=f-d,_=1-h,v=g-d+u,y=0;y!==o;y++){var b=a[m+y+o],x=a[m+y+s]*l,S=a[p+y+o],C=a[p+y]*l;i[y]=_*b+v*x+h*S+g*C}return i};function y(e){this.parser=e,this.name=r.REALSEE_MATERIALS_LIGHTMAP}y.prototype.getMaterialType=function(e){return t.MeshPhongMaterial},y.prototype.extendParams=function(e,t,n){if(!t.extensions||!t.extensions[this.name])return Promise.resolve();var r=[],i=t.extensions[this.name];return i.lightMapTexture!==void 0&&r.push(n.assignTexture(e,`lightMap`,i.lightMapTexture)),i.lightMapIntensity!==void 0&&(e.lightMapIntensity=i.lightMapIntensity),Promise.all(r)};var b={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},x={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},S={9728:t.NearestFilter,9729:t.LinearFilter,9984:t.NearestMipmapNearestFilter,9985:t.LinearMipmapNearestFilter,9986:t.NearestMipmapLinearFilter,9987:t.LinearMipmapLinearFilter},C={33071:t.ClampToEdgeWrapping,33648:t.MirroredRepeatWrapping,10497:t.RepeatWrapping},w={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},T={POSITION:`position`,NORMAL:`normal`,TANGENT:`tangent`,TEXCOORD_0:`uv`,TEXCOORD_1:`uv2`,COLOR_0:`color`,WEIGHTS_0:`skinWeight`,JOINTS_0:`skinIndex`},E={scale:`scale`,translation:`position`,rotation:`quaternion`,weights:`morphTargetInfluences`},D={CUBICSPLINE:void 0,LINEAR:t.InterpolateLinear,STEP:t.InterpolateDiscrete},O={OPAQUE:`OPAQUE`,MASK:`MASK`,BLEND:`BLEND`},k={"image/png":t.RGBAFormat,"image/jpeg":t.RGBFormat};function A(e,t){return typeof e!=`string`||e===``?``:(/^https?:\/\//i.test(t)&&/^\//.test(e)&&(t=t.replace(/(^https?:\/\/[^\/]+).*/i,`$1`)),/^(https?:)?\/\//i.test(e)||/^data:.*,.*$/i.test(e)||/^blob:.*$/i.test(e)?e:t+e)}function j(e){return e.DefaultMaterial===void 0&&(e.DefaultMaterial=new t.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:t.FrontSide})),e.DefaultMaterial}function M(e,t,n){for(var r in n.extensions)e[r]===void 0&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[r]=n.extensions[r])}function N(e,t){t.extras!==void 0&&(typeof t.extras==`object`?Object.assign(e.userData,t.extras):console.warn(`THREE.GLTFLoader: Ignoring primitive type .extras, `+t.extras))}function P(e,t,n){for(var r=!1,i=!1,a=0,o=t.length;a<o;a++){var s=t[a];if(s.POSITION!==void 0&&(r=!0),s.NORMAL!==void 0&&(i=!0),r&&i)break}if(!r&&!i)return Promise.resolve(e);for(var c=[],l=[],a=0,o=t.length;a<o;a++){var s=t[a];if(r){var u=s.POSITION===void 0?e.attributes.position:n.getDependency(`accessor`,s.POSITION);c.push(u)}if(i){var u=s.NORMAL===void 0?e.attributes.normal:n.getDependency(`accessor`,s.NORMAL);l.push(u)}}return Promise.all([Promise.all(c),Promise.all(l)]).then(function(t){var n=t[0],a=t[1];return r&&(e.morphAttributes.position=n),i&&(e.morphAttributes.normal=a),e.morphTargetsRelative=!0,e})}function F(e,t){if(e.updateMorphTargets(),t.weights!==void 0)for(var n=0,r=t.weights.length;n<r;n++)e.morphTargetInfluences[n]=t.weights[n];if(t.extras&&Array.isArray(t.extras.targetNames)){var i=t.extras.targetNames;if(e.morphTargetInfluences.length===i.length){e.morphTargetDictionary={};for(var n=0,r=i.length;n<r;n++)e.morphTargetDictionary[i[n]]=n}else console.warn(`THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.`)}}function I(e){var t=e.extensions&&e.extensions[r.KHR_DRACO_MESH_COMPRESSION];return t?`draco:`+t.bufferView+`:`+t.indices+`:`+L(t.attributes):e.indices+`:`+L(e.attributes)+`:`+e.mode}function L(e){for(var t=``,n=Object.keys(e).sort(),r=0,i=n.length;r<i;r++)t+=n[r]+`:`+e[n[r]]+`;`;return t}function R(e,r,i){this.json=e||{},this.extensions=r||{},this.options=i||{},this.cache=new n,this.associations=new Map,this.primitiveCache={},this.textureLoader=new t.TextureLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.fileLoader=new t.FileLoader(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}R.prototype.parse=function(e,t){var n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.markDefs(),Promise.all([this.getDependencies(`scene`),this.getDependencies(`animation`),this.getDependencies(`camera`)]).then(function(t){var a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};M(i,a,r),N(a,r),e(a)}).catch(t)},R.prototype.markDefs=function(){for(var e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[],r={},i={},a=0,o=t.length;a<o;a++)for(var s=t[a].joints,c=0,l=s.length;c<l;c++)e[s[c]].isBone=!0;for(var u=0,d=e.length;u<d;u++){var f=e[u];f.mesh!==void 0&&(r[f.mesh]===void 0&&(r[f.mesh]=i[f.mesh]=0),r[f.mesh]++,f.skin!==void 0&&(n[f.mesh].isSkinnedMesh=!0))}this.json.meshReferences=r,this.json.meshUses=i},R.prototype.getDependency=function(e,t){var n=e+`:`+t,i=this.cache.get(n);if(!i){switch(e){case`scene`:i=this.loadScene(t);break;case`node`:i=this.loadNode(t);break;case`mesh`:i=this.loadMesh(t);break;case`accessor`:i=this.loadAccessor(t);break;case`bufferView`:i=this.loadBufferView(t);break;case`buffer`:i=this.loadBuffer(t);break;case`material`:i=this.loadMaterial(t);break;case`texture`:i=this.loadTexture(t);break;case`skin`:i=this.loadSkin(t);break;case`animation`:i=this.loadAnimation(t);break;case`camera`:i=this.loadCamera(t);break;case`light`:i=this.extensions[r.KHR_LIGHTS_PUNCTUAL].loadLight(t);break;default:throw Error(`Unknown type: `+e)}this.cache.add(n,i)}return i},R.prototype.getDependencies=function(e){var t=this.cache.get(e);if(!t){var n=this,r=this.json[e+(e===`mesh`?`es`:`s`)]||[];t=Promise.all(r.map(function(t,r){return n.getDependency(e,r)})),this.cache.add(e,t)}return t},R.prototype.loadBuffer=function(e){var t=this.json.buffers[e],n=this.fileLoader;if(t.type&&t.type!==`arraybuffer`)throw Error(`THREE.GLTFLoader: `+t.type+` buffer type is not supported.`);if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[r.KHR_BINARY_GLTF].body);var i=this.options;return new Promise(function(e,r){n.load(A(t.uri,i.path),e,void 0,function(){r(Error(`THREE.GLTFLoader: Failed to load buffer "`+t.uri+`".`))})})},R.prototype.loadBufferView=function(e){var t=this.json.bufferViews[e];return this.getDependency(`buffer`,t.buffer).then(function(e){var n=t.byteLength||0,r=t.byteOffset||0;return e.slice(r,r+n)})},R.prototype.loadAccessor=function(e){var n=this,r=this.json,i=this.json.accessors[e];if(i.bufferView===void 0&&i.sparse===void 0)return Promise.resolve(null);var a=[];return i.bufferView===void 0?a.push(null):a.push(this.getDependency(`bufferView`,i.bufferView)),i.sparse!==void 0&&(a.push(this.getDependency(`bufferView`,i.sparse.indices.bufferView)),a.push(this.getDependency(`bufferView`,i.sparse.values.bufferView))),Promise.all(a).then(function(e){var a=e[0],o=w[i.type],s=x[i.componentType],c=s.BYTES_PER_ELEMENT,l=c*o,u=i.byteOffset||0,d=i.bufferView===void 0?void 0:r.bufferViews[i.bufferView].byteStride,f=i.normalized===!0,p,m;if(d&&d!==l){var h=Math.floor(u/d),g=`InterleavedBuffer:`+i.bufferView+`:`+i.componentType+`:`+h+`:`+i.count,_=n.cache.get(g);_||(p=new s(a,h*d,i.count*d/c),_=new t.InterleavedBuffer(p,d/c),n.cache.add(g,_)),m=new t.InterleavedBufferAttribute(_,o,u%d/c,f)}else p=a===null?new s(i.count*o):new s(a,u,i.count*o),m=new t.BufferAttribute(p,o,f);if(i.sparse!==void 0){var v=w.SCALAR,y=x[i.sparse.indices.componentType],b=i.sparse.indices.byteOffset||0,S=i.sparse.values.byteOffset||0,C=new y(e[1],b,i.sparse.count*v),T=new s(e[2],S,i.sparse.count*o);a!==null&&(m=new t.BufferAttribute(m.array.slice(),m.itemSize,m.normalized));for(var E=0,D=C.length;E<D;E++){var O=C[E];if(m.setX(O,T[E*o]),o>=2&&m.setY(O,T[E*o+1]),o>=3&&m.setZ(O,T[E*o+2]),o>=4&&m.setW(O,T[E*o+3]),o>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}}return m})},R.prototype.loadTexture=function(e){var n=this,i=this.json,a=this.options,o=this.textureLoader,s=self.URL||self.webkitURL,c=i.textures[e],l=c.extensions||{},u=l[r.MSFT_TEXTURE_DDS]?i.images[l[r.MSFT_TEXTURE_DDS].source]:i.images[c.source],d=u.uri,f=!1;return u.bufferView!==void 0&&(d=n.getDependency(`bufferView`,u.bufferView).then(function(e){f=!0;var t=new Blob([e],{type:u.mimeType});return d=s.createObjectURL(t),d})),Promise.resolve(d).then(function(e){var t=a.manager.getHandler(e);return t||(t=l[r.MSFT_TEXTURE_DDS]?n.extensions[r.MSFT_TEXTURE_DDS].ddsLoader:o),new Promise(function(n,r){t.load(A(e,a.path),n,void 0,r)})}).then(function(r){f===!0&&s.revokeObjectURL(d),r.flipY=!1,c.name&&(r.name=c.name),u.mimeType in k&&(r.format=k[u.mimeType]);var a=(i.samplers||{})[c.sampler]||{};return r.magFilter=S[a.magFilter]||t.LinearFilter,r.minFilter=S[a.minFilter]||t.LinearMipmapLinearFilter,r.wrapS=C[a.wrapS]||t.RepeatWrapping,r.wrapT=C[a.wrapT]||t.RepeatWrapping,n.associations.set(r,{type:`textures`,index:e}),r})},R.prototype.assignTexture=function(e,n,i){var a=this;return this.getDependency(`texture`,i.index).then(function(o){if(!o.isCompressedTexture)switch(n){case`aoMap`:case`emissiveMap`:case`metalnessMap`:case`normalMap`:case`roughnessMap`:o.format=t.RGBFormat;break}if(i.texCoord!==void 0&&i.texCoord!=0&&!(n===`aoMap`&&i.texCoord==1)&&console.warn(`THREE.GLTFLoader: Custom UV set `+i.texCoord+` for texture `+n+` not yet supported.`),a.extensions[r.KHR_TEXTURE_TRANSFORM]){var s=i.extensions===void 0?void 0:i.extensions[r.KHR_TEXTURE_TRANSFORM];if(s){var c=a.associations.get(o);o=a.extensions[r.KHR_TEXTURE_TRANSFORM].extendTexture(o,s),a.associations.set(o,c)}}e[n]=o})},R.prototype.assignFinalMaterial=function(e){var n=e.geometry,r=e.material,i=n.attributes.tangent!==void 0,a=n.attributes.color!==void 0,o=n.attributes.normal===void 0,s=e.isSkinnedMesh===!0,c=Object.keys(n.morphAttributes).length>0,l=c&&n.morphAttributes.normal!==void 0;if(e.isPoints){var u=`PointsMaterial:`+r.uuid,d=this.cache.get(u);d||(d=new t.PointsMaterial,t.Material.prototype.copy.call(d,r),d.color.copy(r.color),d.map=r.map,d.sizeAttenuation=!1,this.cache.add(u,d)),r=d}else if(e.isLine){var u=`LineBasicMaterial:`+r.uuid,f=this.cache.get(u);f||(f=new t.LineBasicMaterial,t.Material.prototype.copy.call(f,r),f.color.copy(r.color),this.cache.add(u,f)),r=f}if(i||a||o||s||c){var u=`ClonedMaterial:`+r.uuid+`:`;r.isGLTFSpecularGlossinessMaterial&&(u+=`specular-glossiness:`),s&&(u+=`skinning:`),i&&(u+=`vertex-tangents:`),a&&(u+=`vertex-colors:`),o&&(u+=`flat-shading:`),c&&(u+=`morph-targets:`),l&&(u+=`morph-normals:`);var p=this.cache.get(u);p||(p=r.clone(),s&&(p.skinning=!0),i&&(p.vertexTangents=!0),a&&(p.vertexColors=!0),o&&(p.flatShading=!0),c&&(p.morphTargets=!0),l&&(p.morphNormals=!0),this.cache.add(u,p),this.associations.set(p,this.associations.get(r))),r=p}r.aoMap&&n.attributes.uv2===void 0&&n.attributes.uv!==void 0&&n.setAttribute(`uv2`,n.attributes.uv),r.normalScale&&!i&&(r.normalScale.y=-r.normalScale.y),r.clearcoatNormalScale&&!i&&(r.clearcoatNormalScale.y=-r.clearcoatNormalScale.y),e.material=r},R.prototype.loadMaterial=function(e){var n=this,i=this.json,a=this.extensions,o=i.materials[e],s,c={},l=o.extensions||{},u=[];if(l[r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]){var d=a[r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];s=d.getMaterialType(),u.push(d.extendParams(c,o,n))}else if(l[r.KHR_MATERIALS_UNLIT]){var f=a[r.KHR_MATERIALS_UNLIT];s=f.getMaterialType(),u.push(f.extendParams(c,o,n))}else{s=t.MeshStandardMaterial;var p=o.pbrMetallicRoughness||{};if(c.color=new t.Color(1,1,1),c.opacity=1,Array.isArray(p.baseColorFactor)){var m=p.baseColorFactor;c.color.fromArray(m),c.opacity=m[3]}p.baseColorTexture!==void 0&&u.push(n.assignTexture(c,`map`,p.baseColorTexture)),c.metalness=p.metallicFactor===void 0?1:p.metallicFactor,c.roughness=p.roughnessFactor===void 0?1:p.roughnessFactor,p.metallicRoughnessTexture!==void 0&&(u.push(n.assignTexture(c,`metalnessMap`,p.metallicRoughnessTexture)),u.push(n.assignTexture(c,`roughnessMap`,p.metallicRoughnessTexture)))}o.doubleSided===!0&&(c.side=t.DoubleSide);var g=o.alphaMode||O.OPAQUE;if(g===O.BLEND?(c.transparent=!0,c.depthWrite=!1):(c.transparent=!1,g===O.MASK&&(c.alphaTest=o.alphaCutoff===void 0?.5:o.alphaCutoff)),o.normalTexture!==void 0&&s!==t.MeshBasicMaterial&&(u.push(n.assignTexture(c,`normalMap`,o.normalTexture)),c.normalScale=new t.Vector2(1,1),o.normalTexture.scale!==void 0&&c.normalScale.set(o.normalTexture.scale,o.normalTexture.scale)),o.occlusionTexture!==void 0&&s!==t.MeshBasicMaterial&&(u.push(n.assignTexture(c,`aoMap`,o.occlusionTexture)),o.occlusionTexture.strength!==void 0&&(c.aoMapIntensity=o.occlusionTexture.strength)),o.emissiveFactor!==void 0&&s!==t.MeshBasicMaterial&&(c.emissive=new t.Color().fromArray(o.emissiveFactor)),o.emissiveTexture!==void 0&&s!==t.MeshBasicMaterial&&u.push(n.assignTexture(c,`emissiveMap`,o.emissiveTexture)),l[r.KHR_MATERIALS_CLEARCOAT]){var _=a[r.KHR_MATERIALS_CLEARCOAT];s=_.getMaterialType(),u.push(_.extendParams(c,{extensions:l},n))}if(l[r.KHR_MATERIALS_TRANSMISSION]){var _=a[r.KHR_MATERIALS_TRANSMISSION];s=_.getMaterialType(),u.push(_.extendParams(c,{extensions:l},n))}if(l[r.REALSEE_MATERIALS_LIGHTMAP]){var v=a[r.REALSEE_MATERIALS_LIGHTMAP];s=v.getMaterialType(),u.push(v.extendParams(c,{extensions:l},n))}return Promise.all(u).then(function(){var i=s===h?a[r.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(c):new s(c);return o.name&&(i.name=o.name),i.map&&(i.map.encoding=t.sRGBEncoding),i.emissiveMap&&(i.emissiveMap.encoding=t.sRGBEncoding),N(i,o),n.associations.set(i,{type:`materials`,index:e}),o.extensions&&M(a,i,o),i})};function z(e,n,r){var i=n.attributes,a=new t.Box3;if(i.POSITION!==void 0){var o=r.json.accessors[i.POSITION],s=o.min,c=o.max;if(s!==void 0&&c!==void 0)a.set(new t.Vector3(s[0],s[1],s[2]),new t.Vector3(c[0],c[1],c[2]));else{console.warn(`THREE.GLTFLoader: Missing min/max properties for accessor POSITION.`);return}}else return;var l=n.targets;if(l!==void 0){for(var u=new t.Vector3,d=new t.Vector3,f=0,p=l.length;f<p;f++){var m=l[f];if(m.POSITION!==void 0){var o=r.json.accessors[m.POSITION],s=o.min,c=o.max;s!==void 0&&c!==void 0?(d.setX(Math.max(Math.abs(s[0]),Math.abs(c[0]))),d.setY(Math.max(Math.abs(s[1]),Math.abs(c[1]))),d.setZ(Math.max(Math.abs(s[2]),Math.abs(c[2]))),u.max(d)):console.warn(`THREE.GLTFLoader: Missing min/max properties for accessor POSITION.`)}}a.expandByVector(u)}e.boundingBox=a;var h=new t.Sphere;a.getCenter(h.center),h.radius=a.min.distanceTo(a.max)/2,e.boundingSphere=h}function B(e,t,n){var r=t.attributes,i=[];function a(t,r){return n.getDependency(`accessor`,t).then(function(t){e.setAttribute(r,t)})}for(var o in r){var s=T[o]||o.toLowerCase();s in e.attributes||i.push(a(r[o],s))}if(t.indices!==void 0&&!e.index){var c=n.getDependency(`accessor`,t.indices).then(function(t){e.setIndex(t)});i.push(c)}return N(e,t),z(e,t,n),Promise.all(i).then(function(){return t.targets===void 0?e:P(e,t.targets,n)})}function V(e,n){var r=e.getIndex();if(r===null){var i=[],a=e.getAttribute(`position`);if(a!==void 0){for(var o=0;o<a.count;o++)i.push(o);e.setIndex(i),r=e.getIndex()}else return console.error(`THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.`),e}var s=r.count-2,c=[];if(n===t.TriangleFanDrawMode)for(var o=1;o<=s;o++)c.push(r.getX(0)),c.push(r.getX(o)),c.push(r.getX(o+1));else for(var o=0;o<s;o++)o%2==0?(c.push(r.getX(o)),c.push(r.getX(o+1)),c.push(r.getX(o+2))):(c.push(r.getX(o+2)),c.push(r.getX(o+1)),c.push(r.getX(o)));c.length/3!==s&&console.error(`THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.`);var l=e.clone();return l.setIndex(c),l}return R.prototype.loadGeometries=function(e){var n=this,i=this.extensions,a=this.primitiveCache;function o(e){return i[r.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,n).then(function(t){return B(t,e,n)})}for(var s=[],c=0,l=e.length;c<l;c++){var u=e[c],d=I(u),f=a[d];if(f)s.push(f.promise);else{var p=u.extensions&&u.extensions[r.KHR_DRACO_MESH_COMPRESSION]?o(u):B(new t.BufferGeometry,u,n);a[d]={primitive:u,promise:p},s.push(p)}}return Promise.all(s)},R.prototype.loadMesh=function(e){for(var n=this,r=this.json.meshes[e],i=r.primitives,a=[],o=0,s=i.length;o<s;o++){var c=i[o].material===void 0?j(this.cache):this.getDependency(`material`,i[o].material);a.push(c)}return a.push(n.loadGeometries(i)),Promise.all(a).then(function(a){for(var o=a.slice(0,a.length-1),s=a[a.length-1],c=[],l=0,u=s.length;l<u;l++){var d=s[l],f=i[l],p,m=o[l];if(f.mode===b.TRIANGLES||f.mode===b.TRIANGLE_STRIP||f.mode===b.TRIANGLE_FAN||f.mode===void 0)p=r.isSkinnedMesh===!0?new t.SkinnedMesh(d,m):new t.Mesh(d,m),p.isSkinnedMesh===!0&&!p.geometry.attributes.skinWeight.normalized&&p.normalizeSkinWeights(),f.mode===b.TRIANGLE_STRIP?p.geometry=V(p.geometry,t.TriangleStripDrawMode):f.mode===b.TRIANGLE_FAN&&(p.geometry=V(p.geometry,t.TriangleFanDrawMode));else if(f.mode===b.LINES)p=new t.LineSegments(d,m);else if(f.mode===b.LINE_STRIP)p=new t.Line(d,m);else if(f.mode===b.LINE_LOOP)p=new t.LineLoop(d,m);else if(f.mode===b.POINTS)p=new t.Points(d,m);else throw Error(`THREE.GLTFLoader: Primitive mode unsupported: `+f.mode);Object.keys(p.geometry.morphAttributes).length>0&&F(p,r),p.name=r.name||`mesh_`+e,s.length>1&&(p.name+=`_`+l),N(p,r),n.assignFinalMaterial(p),c.push(p)}if(c.length===1)return c[0];for(var h=new t.Group,l=0,u=c.length;l<u;l++)h.add(c[l]);return h})},R.prototype.loadCamera=function(e){var n,r=this.json.cameras[e],i=r[r.type];if(!i){console.warn(`THREE.GLTFLoader: Missing camera parameters.`);return}return r.type===`perspective`?n=new t.PerspectiveCamera(t.MathUtils.radToDeg(i.yfov),i.aspectRatio||1,i.znear||1,i.zfar||2e6):r.type===`orthographic`&&(n=new t.OrthographicCamera(-i.xmag,i.xmag,i.ymag,-i.ymag,i.znear,i.zfar)),r.name&&(n.name=r.name),N(n,r),Promise.resolve(n)},R.prototype.loadSkin=function(e){var t=this.json.skins[e],n={joints:t.joints};return t.inverseBindMatrices===void 0?Promise.resolve(n):this.getDependency(`accessor`,t.inverseBindMatrices).then(function(e){return n.inverseBindMatrices=e,n})},R.prototype.loadAnimation=function(e){for(var n=this.json.animations[e],r=[],i=[],a=[],o=[],s=[],c=0,l=n.channels.length;c<l;c++){var u=n.channels[c],d=n.samplers[u.sampler],f=u.target,p=f.node===void 0?f.id:f.node,m=n.parameters===void 0?d.input:n.parameters[d.input],h=n.parameters===void 0?d.output:n.parameters[d.output];r.push(this.getDependency(`node`,p)),i.push(this.getDependency(`accessor`,m)),a.push(this.getDependency(`accessor`,h)),o.push(d),s.push(f)}return Promise.all([Promise.all(r),Promise.all(i),Promise.all(a),Promise.all(o),Promise.all(s)]).then(function(r){for(var i=r[0],a=r[1],o=r[2],s=r[3],c=r[4],l=[],u=0,d=i.length;u<d;u++){var f=i[u],p=a[u],m=o[u],h=s[u],g=c[u];if(f!==void 0){f.updateMatrix(),f.matrixAutoUpdate=!0;var _;switch(E[g.path]){case E.weights:_=t.NumberKeyframeTrack;break;case E.rotation:_=t.QuaternionKeyframeTrack;break;case E.position:case E.scale:default:_=t.VectorKeyframeTrack;break}var y=f.name?f.name:f.uuid,b=h.interpolation===void 0?t.InterpolateLinear:D[h.interpolation],x=[];E[g.path]===E.weights?f.traverse(function(e){e.isMesh===!0&&e.morphTargetInfluences&&x.push(e.name?e.name:e.uuid)}):x.push(y);var S=m.array;if(m.normalized){var C;if(S.constructor===Int8Array)C=1/127;else if(S.constructor===Uint8Array)C=1/255;else if(S.constructor==Int16Array)C=1/32767;else if(S.constructor===Uint16Array)C=1/65535;else throw Error(`THREE.GLTFLoader: Unsupported output accessor component type.`);for(var w=new Float32Array(S.length),T=0,O=S.length;T<O;T++)w[T]=S[T]*C;S=w}for(var T=0,O=x.length;T<O;T++){var k=new _(x[T]+`.`+E[g.path],p.array,S,b);h.interpolation===`CUBICSPLINE`&&(k.createInterpolant=function(e){return new v(this.times,this.values,this.getValueSize()/3,e)},k.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0),l.push(k)}}}return new t.AnimationClip(n.name?n.name:`animation_`+e,void 0,l)})},R.prototype.loadNode=function(e){var n=this.json,i=this.extensions,a=this,o=n.meshReferences,s=n.meshUses,c=n.nodes[e];return function(){var e=[];return c.mesh!==void 0&&e.push(a.getDependency(`mesh`,c.mesh).then(function(e){var t;if(o[c.mesh]>1){var n=s[c.mesh]++;t=e.clone(),t.name+=`_instance_`+n}else t=e;return c.weights!==void 0&&t.traverse(function(e){if(e.isMesh)for(var t=0,n=c.weights.length;t<n;t++)e.morphTargetInfluences[t]=c.weights[t]}),t})),c.camera!==void 0&&e.push(a.getDependency(`camera`,c.camera)),c.extensions&&c.extensions[r.KHR_LIGHTS_PUNCTUAL]&&c.extensions[r.KHR_LIGHTS_PUNCTUAL].light!==void 0&&e.push(a.getDependency(`light`,c.extensions[r.KHR_LIGHTS_PUNCTUAL].light)),Promise.all(e)}().then(function(n){var r=c.isBone===!0?new t.Bone:n.length>1?new t.Group:n.length===1?n[0]:new t.Object3D;if(r!==n[0])for(var o=0,s=n.length;o<s;o++)r.add(n[o]);if(c.name&&(r.userData.name=c.name,r.name=t.PropertyBinding.sanitizeNodeName(c.name)),N(r,c),c.extensions&&M(i,r,c),c.matrix!==void 0){var l=new t.Matrix4;l.fromArray(c.matrix),r.applyMatrix4(l)}else c.translation!==void 0&&r.position.fromArray(c.translation),c.rotation!==void 0&&r.quaternion.fromArray(c.rotation),c.scale!==void 0&&r.scale.fromArray(c.scale);return a.associations.set(r,{type:`nodes`,index:e}),r})},R.prototype.loadScene=function(){function e(n,r,i,a){var o=i.nodes[n];return a.getDependency(`node`,n).then(function(e){if(o.skin===void 0)return e;var n;return a.getDependency(`skin`,o.skin).then(function(e){n=e;for(var t=[],r=0,i=n.joints.length;r<i;r++)t.push(a.getDependency(`node`,n.joints[r]));return Promise.all(t)}).then(function(r){return e.traverse(function(e){if(e.isMesh){for(var i=[],a=[],o=0,s=r.length;o<s;o++){var c=r[o];if(c){i.push(c);var l=new t.Matrix4;n.inverseBindMatrices!==void 0&&l.fromArray(n.inverseBindMatrices.array,o*16),a.push(l)}else console.warn(`THREE.GLTFLoader: Joint "%s" could not be found.`,n.joints[o])}e.bind(new t.Skeleton(i,a),e.matrixWorld)}}),e})}).then(function(t){r.add(t);var n=[];if(o.children)for(var s=o.children,c=0,l=s.length;c<l;c++){var u=s[c];n.push(e(u,t,i,a))}return Promise.all(n)})}return function(n){var r=this.json,i=this.extensions,a=this.json.scenes[n],o=this,s=new t.Group;a.name&&(s.name=a.name),N(s,a),a.extensions&&M(i,s,a);for(var c=a.nodes||[],l=[],u=0,d=c.length;u<d;u++)l.push(e(c[u],s,r,o));return Promise.all(l).then(function(){return s})}}(),e})(),u=function(e){t.Loader.call(this,e),this.decoderPath=``,this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL=``,this.defaultAttributeIDs={position:`POSITION`,normal:`NORMAL`,color:`COLOR`,uv:`TEX_COORD`},this.defaultAttributeTypes={position:`Float32Array`,normal:`Float32Array`,color:`Float32Array`,uv:`Float32Array`}};u.prototype=Object.assign(Object.create(t.Loader.prototype),{constructor:u,setDecoderPath:function(e){return this.decoderPath=e,this},setDecoderConfig:function(e){return this.decoderConfig=e,this},setWorkerLimit:function(e){return this.workerLimit=e,this},setVerbosity:function(){console.warn(`THREE.DRACOLoader: The .setVerbosity() method has been removed.`)},setDrawMode:function(){console.warn(`THREE.DRACOLoader: The .setDrawMode() method has been removed.`)},setSkipDequantization:function(){console.warn(`THREE.DRACOLoader: The .setSkipDequantization() method has been removed.`)},load:function(e,n,r,i){var a=new t.FileLoader(this.manager);a.setPath(this.path),a.setResponseType(`arraybuffer`),this.crossOrigin===`use-credentials`&&a.setWithCredentials(!0),a.load(e,e=>{var t={attributeIDs:this.defaultAttributeIDs,attributeTypes:this.defaultAttributeTypes,useUniqueIDs:!1};this.decodeGeometry(e,t).then(n).catch(i)},r,i)},decodeDracoFile:function(e,t,n,r){var i={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!n};this.decodeGeometry(e,i).then(t)},decodeGeometry:function(e,t){for(var n in t.attributeTypes){var r=t.attributeTypes[n];r.BYTES_PER_ELEMENT!==void 0&&(t.attributeTypes[n]=r.name)}var i=JSON.stringify(t);if(u.taskCache.has(e)){var a=u.taskCache.get(e);if(a.key===i)return a.promise;if(e.byteLength===0)throw Error(`THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.`)}var o,s=this.workerNextTaskID++,c=e.byteLength,l=this._getWorker(s,c).then(n=>(o=n,new Promise((n,r)=>{o._callbacks[s]={resolve:n,reject:r},o.postMessage({type:`decode`,id:s,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return l.catch(()=>!0).then(()=>{o&&s&&this._releaseTask(o,s)}),u.taskCache.set(e,{key:i,promise:l}),l},_createGeometry:function(e){var n=new t.BufferGeometry;e.index&&n.setIndex(new t.BufferAttribute(e.index.array,1));for(var r=0;r<e.attributes.length;r++){var i=e.attributes[r],a=i.name,o=i.array,s=i.itemSize;n.setAttribute(a,new t.BufferAttribute(o,s))}return n},_loadLibrary:function(e,n){var r=new t.FileLoader(this.manager);return r.setPath(this.decoderPath),r.setResponseType(n),new Promise((t,n)=>{r.load(e,t,void 0,n)})},preload:function(){return this._initDecoder(),this},_initDecoder:function(){if(this.decoderPending)return this.decoderPending;var e=typeof WebAssembly!=`object`||this.decoderConfig.type===`js`,t=[];return e?t.push(this._loadLibrary(`draco_decoder.js`,`text`)):(t.push(this._loadLibrary(`draco_wasm_wrapper.js`,`text`)),t.push(this._loadLibrary(`draco_decoder.wasm`,`arraybuffer`))),this.decoderPending=Promise.all(t).then(t=>{var n=t[0];e||(this.decoderConfig.wasmBinary=t[1]);var r=u.DRACOWorker.toString(),i=[`/* draco decoder */`,n,``,`/* worker */`,r.substring(r.indexOf(`{`)+1,r.lastIndexOf(`}`))].join(`
261
- `);this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending},_getWorker:function(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){var n=new Worker(this.workerSourceURL);n._callbacks={},n._taskCosts={},n._taskLoad=0,n.postMessage({type:`init`,decoderConfig:this.decoderConfig}),n.onmessage=function(e){var t=e.data;switch(t.type){case`decode`:n._callbacks[t.id].resolve(t);break;case`error`:n._callbacks[t.id].reject(t);break;default:console.error(`THREE.DRACOLoader: Unexpected message, "`+t.type+`"`)}},this.workerPool.push(n)}else this.workerPool.sort(function(e,t){return e._taskLoad>t._taskLoad?-1:1});var n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})},_releaseTask:function(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]},debug:function(){console.log(`Task load: `,this.workerPool.map(e=>e._taskLoad))},dispose:function(){for(var e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this}}),u.DRACOWorker=function(){var e,t;onmessage=function(r){var i=r.data;switch(i.type){case`init`:e=i.decoderConfig,t=new Promise(function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)});break;case`decode`:var a=i.buffer,o=i.taskConfig;t.then(e=>{var t=e.draco,r=new t.Decoder,s=new t.DecoderBuffer;s.Init(new Int8Array(a),a.byteLength);try{var c=n(t,r,s,o),l=c.attributes.map(e=>e.array.buffer);c.index&&l.push(c.index.array.buffer),self.postMessage({type:`decode`,id:i.id,geometry:c},l)}catch(e){console.error(e),self.postMessage({type:`error`,id:i.id,error:e.message})}finally{t.destroy(s),t.destroy(r)}});break}};function n(e,t,n,i){var a=i.attributeIDs,o=i.attributeTypes,s,c,l=t.GetEncodedGeometryType(n);if(l===e.TRIANGULAR_MESH)s=new e.Mesh,c=t.DecodeBufferToMesh(n,s);else if(l===e.POINT_CLOUD)s=new e.PointCloud,c=t.DecodeBufferToPointCloud(n,s);else throw Error(`THREE.DRACOLoader: Unexpected geometry type.`);if(!c.ok()||s.ptr===0)throw Error(`THREE.DRACOLoader: Decoding failed: `+c.error_msg());var u={index:null,attributes:[]};for(var d in a){var f=self[o[d]],p,m;if(i.useUniqueIDs)m=a[d],p=t.GetAttributeByUniqueId(s,m);else{if(m=t.GetAttributeId(s,e[a[d]]),m===-1)continue;p=t.GetAttribute(s,m)}u.attributes.push(r(e,t,s,d,f,p))}if(l===e.TRIANGULAR_MESH){for(var h=s.num_faces(),g=h*3,_=new Uint32Array(g),v=new e.DracoInt32Array,y=0;y<h;++y){t.GetFaceFromMesh(s,y,v);for(var b=0;b<3;++b)_[y*3+b]=v.GetValue(b)}u.index={array:_,itemSize:1},e.destroy(v)}return e.destroy(s),u}function r(e,t,n,r,i,a){var o=a.num_components(),s=n.num_points()*o,c,l;switch(i){case Float32Array:c=new e.DracoFloat32Array,t.GetAttributeFloatForAllPoints(n,a,c),l=new Float32Array(s);break;case Int8Array:c=new e.DracoInt8Array,t.GetAttributeInt8ForAllPoints(n,a,c),l=new Int8Array(s);break;case Int16Array:c=new e.DracoInt16Array,t.GetAttributeInt16ForAllPoints(n,a,c),l=new Int16Array(s);break;case Int32Array:c=new e.DracoInt32Array,t.GetAttributeInt32ForAllPoints(n,a,c),l=new Int32Array(s);break;case Uint8Array:c=new e.DracoUInt8Array,t.GetAttributeUInt8ForAllPoints(n,a,c),l=new Uint8Array(s);break;case Uint16Array:c=new e.DracoUInt16Array,t.GetAttributeUInt16ForAllPoints(n,a,c),l=new Uint16Array(s);break;case Uint32Array:c=new e.DracoUInt32Array,t.GetAttributeUInt32ForAllPoints(n,a,c),l=new Uint32Array(s);break;default:throw Error(`THREE.DRACOLoader: Unexpected attribute type.`)}for(var u=0;u<s;u++)l[u]=c.GetValue(u);return e.destroy(c),{name:r,array:l,itemSize:o}}},u.taskCache=new WeakMap,u.setDecoderPath=function(){console.warn(`THREE.DRACOLoader: The .setDecoderPath() method has been removed. Use instance methods.`)},u.setDecoderConfig=function(){console.warn(`THREE.DRACOLoader: The .setDecoderConfig() method has been removed. Use instance methods.`)},u.releaseDecoderModule=function(){console.warn(`THREE.DRACOLoader: The .releaseDecoderModule() method has been removed. Use instance methods.`)},u.getDecoderModule=function(){console.warn(`THREE.DRACOLoader: The .getDecoderModule() method has been removed. Use instance methods.`)};var d=function(e){t.CompressedTextureLoader.call(this,e)};d.prototype=Object.assign(Object.create(t.CompressedTextureLoader.prototype),{constructor:d,parse:function(e,n){var r={mipmaps:[],width:0,height:0,format:null,mipmapCount:1},i=542327876,a=131072,o=512,s=1024,c=2048,l=4096,u=8192,d=16384,f=32768,p=4;function m(e){return e.charCodeAt(0)+(e.charCodeAt(1)<<8)+(e.charCodeAt(2)<<16)+(e.charCodeAt(3)<<24)}function h(e){return String.fromCharCode(e&255,e>>8&255,e>>16&255,e>>24&255)}function g(e,t,n,r){for(var i=n*r*4,a=new Uint8Array(e,t,i),o=new Uint8Array(i),s=0,c=0,l=0;l<r;l++)for(var u=0;u<n;u++){var d=a[c];c++;var f=a[c];c++;var p=a[c];c++;var m=a[c];c++,o[s]=p,s++,o[s]=f,s++,o[s]=d,s++,o[s]=m,s++}return o}var _=m(`DXT1`),v=m(`DXT3`),y=m(`DXT5`),b=m(`ETC1`),x=31,S=0,C=1,w=2,T=3,E=4,D=7,O=20,k=21,A=22,j=23,M=24,N=25,P=26,F=28,I=new Int32Array(e,0,x);if(I[S]!==i)return console.error(`THREE.DDSLoader.parse: Invalid magic number in DDS header.`),r;if(!I[O]&p)return console.error(`THREE.DDSLoader.parse: Unsupported format, must contain a FourCC code.`),r;var L,R=I[k],z=!1;switch(R){case _:L=8,r.format=t.RGB_S3TC_DXT1_Format;break;case v:L=16,r.format=t.RGBA_S3TC_DXT3_Format;break;case y:L=16,r.format=t.RGBA_S3TC_DXT5_Format;break;case b:L=8,r.format=t.RGB_ETC1_Format;break;default:if(I[A]===32&&I[j]&16711680&&I[M]&65280&&I[N]&255&&I[P]&4278190080)z=!0,L=64,r.format=t.RGBAFormat;else return console.error(`THREE.DDSLoader.parse: Unsupported FourCC code `,h(R)),r}r.mipmapCount=1,I[w]&a&&n!==!1&&(r.mipmapCount=Math.max(1,I[D]));var B=I[F];if(r.isCubemap=!!(B&o),r.isCubemap&&(!(B&s)||!(B&c)||!(B&l)||!(B&u)||!(B&d)||!(B&f)))return console.error(`THREE.DDSLoader.parse: Incomplete cubemap faces`),r;r.width=I[E],r.height=I[T];for(var V=I[C]+4,H=r.isCubemap?6:1,U=0;U<H;U++)for(var W=r.width,G=r.height,K=0;K<r.mipmapCount;K++){if(z)var q=g(e,V,W,G),J=q.length;else var J=Math.max(4,W)/4*Math.max(4,G)/4*L,q=new Uint8Array(e,V,J);var Y={data:q,width:W,height:G};r.mipmaps.push(Y),V+=J,W=Math.max(W>>1,1),G=Math.max(G>>1,1)}return r}});var f=class extends t.Group{constructor(e){super(),this.needsRender=!0,e&&e.children.length&&this.add(...e.children),this.mixer=new t.AnimationMixer(this)}clone(){let e=super.clone(!0);return e.mixer=new t.AnimationMixer(e),e.needsRender=!0,e}},p=`https://vr-public.realsee-cdn.cn/release/static/image/release/five/resource/draco/1.5.6/`,m=class extends l{static get version(){return`6.8.2`}constructor(e){super(e),this.ddsLoader=new d(e),this.dracoLoader=new u(e),this.dracoLoader.setDecoderPath(p)}load(e,t,n,r){return super.load(e,t,n,r)}parse(e,t,n,r){return super.parse(e,t,e=>{let t=new f(e.scene),r=e.scenes.map(n=>n===e.scene?t:new f(n));n(Object.assign(e,{scene:t,scenes:r}))},r)}};e.DDSLoader=d,e.DRACOLoader=u,e.GLTFLoader=m,e.GLTFObject=f,e.THREEGLTFLoader=l});
261
+ `);this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending},_getWorker:function(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){var n=new Worker(this.workerSourceURL);n._callbacks={},n._taskCosts={},n._taskLoad=0,n.postMessage({type:`init`,decoderConfig:this.decoderConfig}),n.onmessage=function(e){var t=e.data;switch(t.type){case`decode`:n._callbacks[t.id].resolve(t);break;case`error`:n._callbacks[t.id].reject(t);break;default:console.error(`THREE.DRACOLoader: Unexpected message, "`+t.type+`"`)}},this.workerPool.push(n)}else this.workerPool.sort(function(e,t){return e._taskLoad>t._taskLoad?-1:1});var n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})},_releaseTask:function(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]},debug:function(){console.log(`Task load: `,this.workerPool.map(e=>e._taskLoad))},dispose:function(){for(var e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this}}),u.DRACOWorker=function(){var e,t;onmessage=function(r){var i=r.data;switch(i.type){case`init`:e=i.decoderConfig,t=new Promise(function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)});break;case`decode`:var a=i.buffer,o=i.taskConfig;t.then(e=>{var t=e.draco,r=new t.Decoder,s=new t.DecoderBuffer;s.Init(new Int8Array(a),a.byteLength);try{var c=n(t,r,s,o),l=c.attributes.map(e=>e.array.buffer);c.index&&l.push(c.index.array.buffer),self.postMessage({type:`decode`,id:i.id,geometry:c},l)}catch(e){console.error(e),self.postMessage({type:`error`,id:i.id,error:e.message})}finally{t.destroy(s),t.destroy(r)}});break}};function n(e,t,n,i){var a=i.attributeIDs,o=i.attributeTypes,s,c,l=t.GetEncodedGeometryType(n);if(l===e.TRIANGULAR_MESH)s=new e.Mesh,c=t.DecodeBufferToMesh(n,s);else if(l===e.POINT_CLOUD)s=new e.PointCloud,c=t.DecodeBufferToPointCloud(n,s);else throw Error(`THREE.DRACOLoader: Unexpected geometry type.`);if(!c.ok()||s.ptr===0)throw Error(`THREE.DRACOLoader: Decoding failed: `+c.error_msg());var u={index:null,attributes:[]};for(var d in a){var f=self[o[d]],p,m;if(i.useUniqueIDs)m=a[d],p=t.GetAttributeByUniqueId(s,m);else{if(m=t.GetAttributeId(s,e[a[d]]),m===-1)continue;p=t.GetAttribute(s,m)}u.attributes.push(r(e,t,s,d,f,p))}if(l===e.TRIANGULAR_MESH){for(var h=s.num_faces(),g=h*3,_=new Uint32Array(g),v=new e.DracoInt32Array,y=0;y<h;++y){t.GetFaceFromMesh(s,y,v);for(var b=0;b<3;++b)_[y*3+b]=v.GetValue(b)}u.index={array:_,itemSize:1},e.destroy(v)}return e.destroy(s),u}function r(e,t,n,r,i,a){var o=a.num_components(),s=n.num_points()*o,c,l;switch(i){case Float32Array:c=new e.DracoFloat32Array,t.GetAttributeFloatForAllPoints(n,a,c),l=new Float32Array(s);break;case Int8Array:c=new e.DracoInt8Array,t.GetAttributeInt8ForAllPoints(n,a,c),l=new Int8Array(s);break;case Int16Array:c=new e.DracoInt16Array,t.GetAttributeInt16ForAllPoints(n,a,c),l=new Int16Array(s);break;case Int32Array:c=new e.DracoInt32Array,t.GetAttributeInt32ForAllPoints(n,a,c),l=new Int32Array(s);break;case Uint8Array:c=new e.DracoUInt8Array,t.GetAttributeUInt8ForAllPoints(n,a,c),l=new Uint8Array(s);break;case Uint16Array:c=new e.DracoUInt16Array,t.GetAttributeUInt16ForAllPoints(n,a,c),l=new Uint16Array(s);break;case Uint32Array:c=new e.DracoUInt32Array,t.GetAttributeUInt32ForAllPoints(n,a,c),l=new Uint32Array(s);break;default:throw Error(`THREE.DRACOLoader: Unexpected attribute type.`)}for(var u=0;u<s;u++)l[u]=c.GetValue(u);return e.destroy(c),{name:r,array:l,itemSize:o}}},u.taskCache=new WeakMap,u.setDecoderPath=function(){console.warn(`THREE.DRACOLoader: The .setDecoderPath() method has been removed. Use instance methods.`)},u.setDecoderConfig=function(){console.warn(`THREE.DRACOLoader: The .setDecoderConfig() method has been removed. Use instance methods.`)},u.releaseDecoderModule=function(){console.warn(`THREE.DRACOLoader: The .releaseDecoderModule() method has been removed. Use instance methods.`)},u.getDecoderModule=function(){console.warn(`THREE.DRACOLoader: The .getDecoderModule() method has been removed. Use instance methods.`)};var d=function(e){t.CompressedTextureLoader.call(this,e)};d.prototype=Object.assign(Object.create(t.CompressedTextureLoader.prototype),{constructor:d,parse:function(e,n){var r={mipmaps:[],width:0,height:0,format:null,mipmapCount:1},i=542327876,a=131072,o=512,s=1024,c=2048,l=4096,u=8192,d=16384,f=32768,p=4;function m(e){return e.charCodeAt(0)+(e.charCodeAt(1)<<8)+(e.charCodeAt(2)<<16)+(e.charCodeAt(3)<<24)}function h(e){return String.fromCharCode(e&255,e>>8&255,e>>16&255,e>>24&255)}function g(e,t,n,r){for(var i=n*r*4,a=new Uint8Array(e,t,i),o=new Uint8Array(i),s=0,c=0,l=0;l<r;l++)for(var u=0;u<n;u++){var d=a[c];c++;var f=a[c];c++;var p=a[c];c++;var m=a[c];c++,o[s]=p,s++,o[s]=f,s++,o[s]=d,s++,o[s]=m,s++}return o}var _=m(`DXT1`),v=m(`DXT3`),y=m(`DXT5`),b=m(`ETC1`),x=31,S=0,C=1,w=2,T=3,E=4,D=7,O=20,k=21,A=22,j=23,M=24,N=25,P=26,F=28,I=new Int32Array(e,0,x);if(I[S]!==i)return console.error(`THREE.DDSLoader.parse: Invalid magic number in DDS header.`),r;if(!I[O]&p)return console.error(`THREE.DDSLoader.parse: Unsupported format, must contain a FourCC code.`),r;var L,R=I[k],z=!1;switch(R){case _:L=8,r.format=t.RGB_S3TC_DXT1_Format;break;case v:L=16,r.format=t.RGBA_S3TC_DXT3_Format;break;case y:L=16,r.format=t.RGBA_S3TC_DXT5_Format;break;case b:L=8,r.format=t.RGB_ETC1_Format;break;default:if(I[A]===32&&I[j]&16711680&&I[M]&65280&&I[N]&255&&I[P]&4278190080)z=!0,L=64,r.format=t.RGBAFormat;else return console.error(`THREE.DDSLoader.parse: Unsupported FourCC code `,h(R)),r}r.mipmapCount=1,I[w]&a&&n!==!1&&(r.mipmapCount=Math.max(1,I[D]));var B=I[F];if(r.isCubemap=!!(B&o),r.isCubemap&&(!(B&s)||!(B&c)||!(B&l)||!(B&u)||!(B&d)||!(B&f)))return console.error(`THREE.DDSLoader.parse: Incomplete cubemap faces`),r;r.width=I[E],r.height=I[T];for(var V=I[C]+4,H=r.isCubemap?6:1,U=0;U<H;U++)for(var W=r.width,G=r.height,K=0;K<r.mipmapCount;K++){if(z)var q=g(e,V,W,G),J=q.length;else var J=Math.max(4,W)/4*Math.max(4,G)/4*L,q=new Uint8Array(e,V,J);var Y={data:q,width:W,height:G};r.mipmaps.push(Y),V+=J,W=Math.max(W>>1,1),G=Math.max(G>>1,1)}return r}});var f=class extends t.Group{constructor(e){super(),this.needsRender=!0,e&&e.children.length&&this.add(...e.children),this.mixer=new t.AnimationMixer(this)}clone(){let e=super.clone(!0);return e.mixer=new t.AnimationMixer(e),e.needsRender=!0,e}},p=`https://vr-public.realsee-cdn.cn/release/static/image/release/five/resource/draco/1.5.6/`,m=class extends l{static get version(){return`6.8.3`}constructor(e){super(e),this.ddsLoader=new d(e),this.dracoLoader=new u(e),this.dracoLoader.setDecoderPath(p)}load(e,t,n,r){return super.load(e,t,n,r)}parse(e,t,n,r){return super.parse(e,t,e=>{let t=new f(e.scene),r=e.scenes.map(n=>n===e.scene?t:new f(n));n(Object.assign(e,{scene:t,scenes:r}))},r)}};e.DDSLoader=d,e.DRACOLoader=u,e.GLTFLoader=m,e.GLTFObject=f,e.THREEGLTFLoader=l});
package/umd/five-line.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five
4
- * Generated: 5/8/2026
5
- * Version: 6.8.2
4
+ * Generated: 2026/5/11
5
+ * Version: 6.8.3
6
6
  * Terms:
7
7
  * Realsee SDK License Agreement
8
8
  * Update: July 28, 2021
@@ -451,4 +451,4 @@
451
451
  #include <premultiplied_alpha_fragment>
452
452
 
453
453
  }
454
- `},d=class extends t.ShaderMaterial{constructor(e){super({uniforms:t.UniformsUtils.clone(u.uniforms),vertexShader:u.vertexShader,fragmentShader:u.fragmentShader,clipping:!0}),this.type=`LineMaterial`,this.dashed=!1,Object.defineProperties(this,{color:{enumerable:!0,get(){return this.uniforms.diffuse.value},set(e){this.uniforms.diffuse.value=e}},linewidth:{enumerable:!0,get(){return this.uniforms.linewidth.value},set(e){this.uniforms.linewidth.value=e}},dashScale:{enumerable:!0,get(){return this.uniforms.dashScale.value},set(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get(){return this.uniforms.dashSize.value},set(e){this.uniforms.dashSize.value=e}},gapSize:{enumerable:!0,get(){return this.uniforms.gapSize.value},set(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get(){return this.uniforms.opacity.value},set(e){this.uniforms.opacity.value=e}},resolution:{enumerable:!0,get(){return this.uniforms.resolution.value},set(e){this.uniforms.resolution.value.copy(e)}}}),this.setValues(e)}};Object.assign(d.prototype,{isLineMaterial:!0});var f=class extends t.Mesh{constructor(e,t){super(),this.type=`LineSegments2`,this.geometry=e===void 0?new l:e,this.material=t===void 0?new d({color:Math.random()*16777215}):t}computeLineDistances(){let e=this.geometry,n=e.attributes.instanceStart,r=e.attributes.instanceEnd,i=new Float32Array(2*n.count),a=new t.Vector3,o=new t.Vector3;for(var s=0,c=0,l=n.count;s<l;s++,c+=2)a.fromBufferAttribute(n,s),o.fromBufferAttribute(r,s),i[c]=c===0?0:i[c-1],i[c+1]=i[c]+a.distanceTo(o);let u=new t.InstancedInterleavedBuffer(i,2,1);return e.setAttribute(`instanceDistanceStart`,new t.InterleavedBufferAttribute(u,1,0)),e.setAttribute(`instanceDistanceEnd`,new t.InterleavedBufferAttribute(u,1,1)),this}raycast(e,n){e.camera===null&&console.error(`LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.`);let r=e.ray,i=e.camera,a=i.projectionMatrix,o=this.geometry,s=this.material,c=s.resolution,l=s.linewidth,u=o.attributes.instanceStart,d=o.attributes.instanceEnd,f=new t.Vector4,p=new t.Vector4,m=new t.Vector4,h=new t.Vector3,g=new t.Matrix4,_=new t.Line3,v=new t.Vector3;r.at(1,m),m.w=1,m.applyMatrix4(i.matrixWorldInverse),m.applyMatrix4(a),m.multiplyScalar(1/m.w),m.x*=c.x/2,m.y*=c.y/2,m.z=0,h.copy(m);let y=this.matrixWorld;g.multiplyMatrices(i.matrixWorldInverse,y);for(var b=0,x=u.count;b<x;b++){f.fromBufferAttribute(u,b),p.fromBufferAttribute(d,b),f.w=1,p.w=1,f.applyMatrix4(g),p.applyMatrix4(g),f.applyMatrix4(a),p.applyMatrix4(a),f.multiplyScalar(1/f.w),p.multiplyScalar(1/p.w);var S=f.z<-1&&p.z<-1,C=f.z>1&&p.z>1;if(S||C)continue;f.x*=c.x/2,f.y*=c.y/2,p.x*=c.x/2,p.y*=c.y/2,_.start.copy(f),_.start.z=0,_.end.copy(p),_.end.z=0;let e=_.closestPointToPointParameter(h,!0);_.at(e,v);let i=t.MathUtils.lerp(f.z,p.z,e),o=i>=-1&&i<=1;var w=h.distanceTo(v)<l*.5;if(o&&w){_.start.fromBufferAttribute(u,b),_.end.fromBufferAttribute(d,b),_.start.applyMatrix4(y),_.end.applyMatrix4(y);var T=new t.Vector3,E=new t.Vector3;r.distanceSqToSegment(_.start,_.end,E,T),n.push({point:E,pointOnLine:T,distance:r.origin.distanceTo(E),object:this,faceIndex:b})}}}};Object.assign(f.prototype,{isLineSegments2:!0});var p=class extends f{constructor(e,t){super(e,t),this.type=`Line2`}};Object.assign(p.prototype,{isLine2:!0});var m=class extends l{constructor(){super(),this.type=`LineGeometry`}setPositions(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setPositions(n),this}setColors(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setColors(n),this}fromLine(e){let n=e.geometry;if(n instanceof t.Geometry){let e=new t.BufferGeometry().fromGeometry(n);this.setPositions(e.attributes.position.array)}else n instanceof t.BufferGeometry&&this.setPositions(n.attributes.position.array);return this}copy(){return this}};Object.assign(m.prototype,{isLineGeometry:!0});var h=14467195,g=8,_=2,v=20,y=null,b=class extends t.Object3D{static get version(){return`6.8.2`}constructor(e=new t.Vector3,n=new t.Vector3){super(),this.type=`FiveLine`,this.needsRender=!0,this.line=new p(new m,new d({color:h,linewidth:_,dashScale:v,dashed:!1}));let r=new t.BufferGeometry,i=new t.PointsMaterial({color:h,size:g,map:y||(y=new t.TextureLoader().load(`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`)),sizeAttenuation:!1,transparent:!0});this.points=new t.Points(r,i),this.points.renderOrder=11,this.points.frustumCulled=!1,this.setPoints(e,n),this.add(this.line,this.points)}setPoints(e,n){let r=[].concat(e.toArray(),n.toArray());this.points.geometry.setAttribute(`position`,new t.BufferAttribute(new Float32Array(r),3)),this.line.geometry.setPositions(r),this.line.computeLineDistances(),this.needsRender=!0}getPoints(){let e=this.points.geometry.attributes.position.array;return[new t.Vector3(e[0],e[1],e[2]),new t.Vector3(e[3],e[4],e[5])]}setMaterial(e){let t=this.line.material;for(let n in e){if(!e.hasOwnProperty(n))continue;let r=e[n];n===`dashed`?(t.dashed=r,r?t.defines.USE_DASH=``:delete t.defines.USE_DASH,t.needsUpdate=!0):t[n]=e[n]}this.needsRender=!0}setResolution(e,t){let n=this.line.material.resolution;(n.x!==e||n.y!==t)&&(n.set(e,t),this.needsRender=!0)}};Object.assign(b.prototype,{isFiveLine:!0}),e.Line=b,e.LineGeometry=m,e.LineMaterial=d,e.LineSegmentsGeometry=l,e.THREE_Line2=p,e.THREE_LineSegments2=f});
454
+ `},d=class extends t.ShaderMaterial{constructor(e){super({uniforms:t.UniformsUtils.clone(u.uniforms),vertexShader:u.vertexShader,fragmentShader:u.fragmentShader,clipping:!0}),this.type=`LineMaterial`,this.dashed=!1,Object.defineProperties(this,{color:{enumerable:!0,get(){return this.uniforms.diffuse.value},set(e){this.uniforms.diffuse.value=e}},linewidth:{enumerable:!0,get(){return this.uniforms.linewidth.value},set(e){this.uniforms.linewidth.value=e}},dashScale:{enumerable:!0,get(){return this.uniforms.dashScale.value},set(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get(){return this.uniforms.dashSize.value},set(e){this.uniforms.dashSize.value=e}},gapSize:{enumerable:!0,get(){return this.uniforms.gapSize.value},set(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get(){return this.uniforms.opacity.value},set(e){this.uniforms.opacity.value=e}},resolution:{enumerable:!0,get(){return this.uniforms.resolution.value},set(e){this.uniforms.resolution.value.copy(e)}}}),this.setValues(e)}};Object.assign(d.prototype,{isLineMaterial:!0});var f=class extends t.Mesh{constructor(e,t){super(),this.type=`LineSegments2`,this.geometry=e===void 0?new l:e,this.material=t===void 0?new d({color:Math.random()*16777215}):t}computeLineDistances(){let e=this.geometry,n=e.attributes.instanceStart,r=e.attributes.instanceEnd,i=new Float32Array(2*n.count),a=new t.Vector3,o=new t.Vector3;for(var s=0,c=0,l=n.count;s<l;s++,c+=2)a.fromBufferAttribute(n,s),o.fromBufferAttribute(r,s),i[c]=c===0?0:i[c-1],i[c+1]=i[c]+a.distanceTo(o);let u=new t.InstancedInterleavedBuffer(i,2,1);return e.setAttribute(`instanceDistanceStart`,new t.InterleavedBufferAttribute(u,1,0)),e.setAttribute(`instanceDistanceEnd`,new t.InterleavedBufferAttribute(u,1,1)),this}raycast(e,n){e.camera===null&&console.error(`LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.`);let r=e.ray,i=e.camera,a=i.projectionMatrix,o=this.geometry,s=this.material,c=s.resolution,l=s.linewidth,u=o.attributes.instanceStart,d=o.attributes.instanceEnd,f=new t.Vector4,p=new t.Vector4,m=new t.Vector4,h=new t.Vector3,g=new t.Matrix4,_=new t.Line3,v=new t.Vector3;r.at(1,m),m.w=1,m.applyMatrix4(i.matrixWorldInverse),m.applyMatrix4(a),m.multiplyScalar(1/m.w),m.x*=c.x/2,m.y*=c.y/2,m.z=0,h.copy(m);let y=this.matrixWorld;g.multiplyMatrices(i.matrixWorldInverse,y);for(var b=0,x=u.count;b<x;b++){f.fromBufferAttribute(u,b),p.fromBufferAttribute(d,b),f.w=1,p.w=1,f.applyMatrix4(g),p.applyMatrix4(g),f.applyMatrix4(a),p.applyMatrix4(a),f.multiplyScalar(1/f.w),p.multiplyScalar(1/p.w);var S=f.z<-1&&p.z<-1,C=f.z>1&&p.z>1;if(S||C)continue;f.x*=c.x/2,f.y*=c.y/2,p.x*=c.x/2,p.y*=c.y/2,_.start.copy(f),_.start.z=0,_.end.copy(p),_.end.z=0;let e=_.closestPointToPointParameter(h,!0);_.at(e,v);let i=t.MathUtils.lerp(f.z,p.z,e),o=i>=-1&&i<=1;var w=h.distanceTo(v)<l*.5;if(o&&w){_.start.fromBufferAttribute(u,b),_.end.fromBufferAttribute(d,b),_.start.applyMatrix4(y),_.end.applyMatrix4(y);var T=new t.Vector3,E=new t.Vector3;r.distanceSqToSegment(_.start,_.end,E,T),n.push({point:E,pointOnLine:T,distance:r.origin.distanceTo(E),object:this,faceIndex:b})}}}};Object.assign(f.prototype,{isLineSegments2:!0});var p=class extends f{constructor(e,t){super(e,t),this.type=`Line2`}};Object.assign(p.prototype,{isLine2:!0});var m=class extends l{constructor(){super(),this.type=`LineGeometry`}setPositions(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setPositions(n),this}setColors(e){let t=e.length-3,n=new Float32Array(2*t);for(let r=0;r<t;r+=3)n[2*r]=e[r],n[2*r+1]=e[r+1],n[2*r+2]=e[r+2],n[2*r+3]=e[r+3],n[2*r+4]=e[r+4],n[2*r+5]=e[r+5];return super.setColors(n),this}fromLine(e){let n=e.geometry;if(n instanceof t.Geometry){let e=new t.BufferGeometry().fromGeometry(n);this.setPositions(e.attributes.position.array)}else n instanceof t.BufferGeometry&&this.setPositions(n.attributes.position.array);return this}copy(){return this}};Object.assign(m.prototype,{isLineGeometry:!0});var h=14467195,g=8,_=2,v=20,y=null,b=class extends t.Object3D{static get version(){return`6.8.3`}constructor(e=new t.Vector3,n=new t.Vector3){super(),this.type=`FiveLine`,this.needsRender=!0,this.line=new p(new m,new d({color:h,linewidth:_,dashScale:v,dashed:!1}));let r=new t.BufferGeometry,i=new t.PointsMaterial({color:h,size:g,map:y||(y=new t.TextureLoader().load(`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==`)),sizeAttenuation:!1,transparent:!0});this.points=new t.Points(r,i),this.points.renderOrder=11,this.points.frustumCulled=!1,this.setPoints(e,n),this.add(this.line,this.points)}setPoints(e,n){let r=[].concat(e.toArray(),n.toArray());this.points.geometry.setAttribute(`position`,new t.BufferAttribute(new Float32Array(r),3)),this.line.geometry.setPositions(r),this.line.computeLineDistances(),this.needsRender=!0}getPoints(){let e=this.points.geometry.attributes.position.array;return[new t.Vector3(e[0],e[1],e[2]),new t.Vector3(e[3],e[4],e[5])]}setMaterial(e){let t=this.line.material;for(let n in e){if(!e.hasOwnProperty(n))continue;let r=e[n];n===`dashed`?(t.dashed=r,r?t.defines.USE_DASH=``:delete t.defines.USE_DASH,t.needsUpdate=!0):t[n]=e[n]}this.needsRender=!0}setResolution(e,t){let n=this.line.material.resolution;(n.x!==e||n.y!==t)&&(n.set(e,t),this.needsRender=!0)}};Object.assign(b.prototype,{isFiveLine:!0}),e.Line=b,e.LineGeometry=m,e.LineMaterial=d,e.LineSegmentsGeometry=l,e.THREE_Line2=p,e.THREE_LineSegments2=f});
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five
4
- * Generated: 5/8/2026
5
- * Version: 6.8.2
4
+ * Generated: 2026/5/11
5
+ * Version: 6.8.3
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 n.Scene,this.styleSheet=new CSSStyleSheet,this.camera=new n.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:r,y:i}=this.five.renderer.getSize(new n.Vector2);t.parentElement.appendChild(this.renderer.domElement),this.renderer.setSize(r,i),(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,r){if(r){let i=new n.Vector3().subVectors(e.position,r).applyQuaternion(e.quaternion.clone().inverse()).applyQuaternion(t).add(r);e.position.copy(i)}e.quaternion.copy(t)}function Ke(e){return e==null}var qe=class extends n.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 n.Box3().expandByObject(this.originObject3D).getCenter(new n.Vector3)):this.positionFrom instanceof n.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,r=e.yAxis instanceof Function?e.yAxis():e.yAxis,i=e.zAxis instanceof Function?e.zAxis():e.zAxis,a=t==null?void 0:t.clone(),o=r==null?void 0:r.clone(),s=i==null?void 0:i.clone();if(a&&!o&&!o){let e=new n.Quaternion().setFromUnitVectors(new n.Vector3(1,0,0),a.normalize());this.applyQuaternion(e)}if(o&&!a&&!s){let e=new n.Quaternion().setFromUnitVectors(new n.Vector3(0,1,0),o.normalize());this.applyQuaternion(e)}if(s&&!a&&!o){let e=new n.Quaternion().setFromUnitVectors(new n.Vector3(0,0,1),s.normalize());this.applyQuaternion(e)}if([a,o,s].filter(e=>!Ke(e)).length>=2){a||(a=new n.Vector3().crossVectors(o,s).normalize()),o||(o=new n.Vector3().crossVectors(a,s).normalize()),s||(s=new n.Vector3().crossVectors(a,o).normalize()),a.applyQuaternion(this.quaternion),o.applyQuaternion(this.quaternion),s.applyQuaternion(this.quaternion);let e=new n.Matrix4().makeBasis(a,o,s),t=new n.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 r=new n.Vector3().subVectors(this.position,t).applyQuaternion(e).add(t);this.position.copy(r)}this.applyQuaternion(e)}dispose(){this.removeFromParent()}},Je=class extends qe{},Ye=class extends qe{},Xe=class extends qe{},Ze=class extends n.Group{constructor(e){super(),this.direction=e||`x`}};n.Line;var Qe=class extends n.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 n.Color($e.X).convertSRGBToLinear().clone()}static get Y(){return new n.Color($e.Y).convertSRGBToLinear().clone()}static get Z(){return new n.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 r=new n.Color((t=e.color)==null?16214315:t),i=()=>new n.MeshBasicMaterial({color:r,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1});this.arrow=new Qe(new n.ConeGeometry(.04,this.arrowHeight,32),i(),e.direction),this.arrow.name=`arrow-${e.direction}`,this.arrow.renderOrder=G.MOVE_HELPER_ARROW,this.arrowNeg=new Qe(new n.ConeGeometry(.04,this.arrowHeight,32),i(),e.direction),this.arrowNeg.name=`arrow-neg-${e.direction}`,this.arrowNeg.renderOrder=G.MOVE_HELPER_ARROW;let a=.004;this.line=new Qe(new n.CylinderGeometry(a,a,this.lineHeight,32),i(),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,r;super(`plane`),this.name=`CenterHandle`,this.faceNormals=[new n.Vector3(1,0,0),new n.Vector3(-1,0,0),new n.Vector3(0,1,0),new n.Vector3(0,-1,0),new n.Vector3(0,0,1),new n.Vector3(0,0,-1)],this.baseColor=new n.Color((t=e==null?void 0:e.color)==null?16419862:t);let i=(r=e==null?void 0:e.size)==null?.05:r,a=new n.Color(16755008).convertSRGBToLinear();this.faceMaterials=Array.from({length:6},()=>new n.MeshBasicMaterial({color:a,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,side:n.FrontSide}));let o=new n.BoxGeometry(i,i,i),s=new n.Mesh(o,this.faceMaterials);s.direction=`plane`,s.renderOrder=G.MOVE_HELPER_CENTER,s.name=`center-plane-handle`,this.cube=s,this.add(this.cube)}update(e){let t=new n.Vector3().subVectors(e.position,this.cube.getWorldPosition(new n.Vector3)).normalize(),r=this.cube.getWorldQuaternion(new n.Quaternion),i=this.faceNormals.map((e,n)=>{let i=e.clone().applyQuaternion(r).dot(t);return{index:n,angle:Math.acos(Math.abs(i))}});i.sort((e,t)=>e.angle-t.angle);let a=[new n.Color(16755008).convertSRGBToLinear(),new n.Color(16419862).convertSRGBToLinear(),new n.Color(13921032).convertSRGBToLinear()];i.forEach((e,t)=>{let n=Math.floor(t/2);this.faceMaterials[e.index].color.copy(a[n])})}},tt=class extends Ze{constructor(e){var t,r,i;super(e.direction),this.name=`PlaneHandle`;let a=(t=e.size)==null?.12:t,o=(r=e.offset)==null?.12:r,s=new n.Color((i=e.color)==null?16776960:i),c=new n.BoxGeometry(a,a,.005),l=new n.MeshBasicMaterial({color:s,transparent:!0,opacity:.4,depthTest:!1,depthWrite:!1,side:n.DoubleSide});switch(this.handle=new n.Mesh(c,l),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(o,o,0);break;case`xz`:this.handle.position.set(o,0,o),this.handle.rotation.x=-Math.PI/2;break;case`yz`:this.handle.position.set(0,o,o),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:r}=e,i=new n.Vector3;return it-t<.03?i.set(0,1,0):at(0,r)?i.set(0,0,1):at(Math.PI,r)?i.set(0,0,-1):at(it,r)?i.set(1,0,0):i.set(-1,0,0),i}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 n.Vector3(1,0,0).applyQuaternion(this.quaternion),r=new n.Vector3(0,1,0).applyQuaternion(this.quaternion),i=new n.Vector3(0,0,1).applyQuaternion(this.quaternion),a=e.pose,o=rt(a),s=.0872665;Math.abs(t.angleTo(o)-0)<s||Math.abs(t.angleTo(o)-Math.PI)<s?this.xArrow&&(this.xArrow.visible=!1):Math.abs(r.angleTo(o)-0)<s||Math.abs(r.angleTo(o)-Math.PI)<s?this.yArrow&&(this.yArrow.visible=!1):(Math.abs(i.angleTo(o)-0)<s||Math.abs(i.angleTo(o)-Math.PI)<s)&&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(),r=new n.Vector3(1,0,0).applyQuaternion(this.quaternion),i=new n.Vector3(0,1,0).applyQuaternion(this.quaternion),a=new n.Vector3(0,0,1).applyQuaternion(this.quaternion),o=t.angleTo(r),s=t.angleTo(i),c=t.angleTo(a),l=Math.PI/2,u=s>=l,d=c>=l,f=o>=l;if(this.xCircle){let e=this.xCircle.circle.gapAngle;u&&d?this.xCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):u&&!d?this.xCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!u&&d?this.xCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!u&&!d&&(this.xCircle.circle.geometry=new n.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 n.Vector3(0,0,1):!u&&d?(this.xCircle.angleSector.baseAxes=new n.Vector3(0,-1,0),this.xCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!u&&!d&&(this.xCircle.angleSector.baseAxes=new n.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 n.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):f&&!d?this.yCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!f&&d?this.yCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!f&&!d&&(this.yCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),f&&d?this.yCircle.angleSector.baseAxes=new n.Vector3(1,0,0):f&&!d?(this.yCircle.angleSector.baseAxes=new n.Vector3(0,0,-1),this.yCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!f&&d?(this.yCircle.angleSector.baseAxes=new n.Vector3(0,0,1),this.yCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!f&&!d&&(this.yCircle.angleSector.baseAxes=new n.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 n.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):f&&!u?this.zCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!f&&u?this.zCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!f&&!u&&(this.zCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),this.zCircle.angleSector&&(f&&u?this.zCircle.angleSector.baseAxes=new n.Vector3(1,0,0):f&&!u?(this.zCircle.angleSector.baseAxes=new n.Vector3(0,-1,0),this.zCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!f&&u?(this.zCircle.angleSector.baseAxes=new n.Vector3(0,1,0),this.zCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!f&&!u&&(this.zCircle.angleSector.baseAxes=new n.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 n.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 n.Mesh{constructor(e){var t;super(),this.gapAngle=.02,this.geometry=new n.RingGeometry(.3,.35,20,8,this.gapAngle,Math.PI/2-this.gapAngle*2),this.material=new n.MeshBasicMaterial({opacity:.6,transparent:!0,color:(t=e.color)==null?16777215:t,side:n.DoubleSide,depthTest:!1}),this.direction=e.direction,this.renderOrder=G.ROTATE_HELPER,this.geometry.name=`RotateHelperCircleGeometry-${this.direction}`}},ct=class extends n.Group{constructor(e){super(),this.direction=e.direction;let t=.015,r=Array(8).fill(null).map((e,r)=>{let i=new n.RingGeometry(.3,.35,20,8,Math.PI/4*r+t,Math.PI/4-t*2),a=new n.MeshBasicMaterial({opacity:1,color:16777215,depthTest:!1,depthWrite:!1,transparent:!0,side:n.DoubleSide}),o=new n.Mesh(i,a);return o.name=`AxesDashedRing-${this.direction}-${r}`,o});this.add(...r)}},lt=class extends n.Mesh{constructor(e){var t;switch(super(),this.offsetAngle=e=>e,e.direction){case`x`:this.baseAxes=new n.Vector3(0,0,1);break;case`y`:this.baseAxes=new n.Vector3(1,0,0);break;case`z`:this.baseAxes=new n.Vector3(1,0,0);break}this.geometry=new n.CircleGeometry(.3505,48,0,1e-4),this.material=new n.MeshBasicMaterial({opacity:.4,color:(t=e.color)==null?16777215:t,depthTest:!1,depthWrite:!1,transparent:!0,side:n.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 n.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 n.Box3,t=new n.Matrix4().getInverse(this.originObject3D.matrixWorld),r=new n.Vector3;if(this.originObject3D.updateMatrixWorld(!0),this.originObject3D.traverse(i=>{let a=i.geometry;if(!a)return;i.updateMatrixWorld(!0);let o=new n.Matrix4().multiplyMatrices(t,i.matrixWorld);if(a.isBufferGeometry){let t=a,n=t.attributes.position;if(n)for(let t=0,i=n.count;t<i;t++)r.fromBufferAttribute(n,t).applyMatrix4(o),e.expandByPoint(r);let i=t.attributes.instanceStart,s=t.attributes.instanceEnd;if(i)for(let t=0,n=i.count;t<n;t++)r.fromBufferAttribute(i,t).applyMatrix4(o),e.expandByPoint(r);if(s)for(let t=0,n=s.count;t<n;t++)r.fromBufferAttribute(s,t).applyMatrix4(o),e.expandByPoint(r)}else if(a.vertices){let t=a.vertices;for(let n of t)r.copy(n).applyMatrix4(o),e.expandByPoint(r)}}),e.isEmpty())return;let{min:i,max:a}=e;this.positionAttribute.setXYZ(0,a.x,a.y,a.z),this.positionAttribute.setXYZ(1,i.x,a.y,a.z),this.positionAttribute.setXYZ(2,i.x,i.y,a.z),this.positionAttribute.setXYZ(3,a.x,i.y,a.z),this.positionAttribute.setXYZ(4,a.x,a.y,i.z),this.positionAttribute.setXYZ(5,i.x,a.y,i.z),this.positionAttribute.setXYZ(6,i.x,i.y,i.z),this.positionAttribute.setXYZ(7,a.x,i.y,i.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 n.BufferGeometry;t.setIndex(new n.BufferAttribute(e,1)),t.setAttribute(`position`,this.positionAttribute);let r=new n.LineBasicMaterial({color:64767,linewidth:1,opacity:1,toneMapped:!1}),i=new n.LineSegments(t,r);return i.matrixAutoUpdate=!1,i}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 n.BufferGeometry;t.setIndex(new n.BufferAttribute(e,1)),t.setAttribute(`position`,this.positionAttribute);let r=new n.MeshBasicMaterial({color:64767,opacity:.1,depthTest:!1,transparent:!0});return new n.Mesh(t,r)}},Q=new Map;function dt(e){if(Q.has(e))return Q.get(e).hooks;let n=new t.Subscribe,r=null,i,a=()=>{r=requestAnimationFrame(a);let t=e.projectionMatrix.toArray().join(`,`)+e.matrixWorld.toArray().join(`,`);t!==i&&(i=t,n.emit(`cameraUpdate`))};return a(),Q.set(e,{hooks:n,dispose:()=>{Q.delete(e),cancelAnimationFrame(r)}}),n}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,r){var i,a,o;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 n.Box3().expandByObject(this.originObject3D)),this.boundingBox),this.hooks=(i=e.sharedHooks)==null?new t.Subscribe:i,this.internalHooks=(a=e.sharedInternalHooks)==null?new t.Subscribe:a,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=(o=e.onRender)==null?(()=>{}):o,this.config=r==null?{}:r,this.otherControllers=e.otherControllers,this.initialHelperPosition(),this.initialHelperQuaternion(),this.updateHelperScale(),this.cameraHooks=dt(this.camera),this.enable();let s=this.onSetOriginObjectScale.bind(this),c=this.onSetOriginObjectRotate.bind(this),l=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`,s),this.internalHooks.on(`setObjectRotate`,c),this.internalHooks.on(`setObjectPosition`,l),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`,s),this.internalHooks.off(`setObjectRotate`,c),this.internalHooks.off(`setObjectPosition`,l),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 r=new n.Vector3().subVectors(this.helperObject3D.position,t).applyQuaternion(e.quaternion).add(t);this.helperObject3D.position.copy(r)}}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,r=new n.Vector3().subVectors(this.boundingBox.max,t).multiply(e).add(t),i=new n.Vector3().subVectors(this.boundingBox.min,t).multiply(e).add(t),a=this.calculateOffset(this.config.offset,{min:i,max:r});this.helperObject3D.initialPosition(a)}}hoverListener(e,t=16777215,r=1){let i=ft(e).filter(e=>!Ke(e)),a=[];for(let e of i)if(e.material||e instanceof n.Group){let i=e instanceof n.Group?e.children.filter(e=>e instanceof n.Mesh):[e];i.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 o=()=>{i.forEach(e=>{if(e.name===`ScaleHelperTransparentGroup`){if(e.children[0]){let n=e.children[0].material;n.color.set(t),n.opacity=r}}else{let n=e.material;Array.isArray(n)?n.forEach(e=>{e.color.set(t),e.opacity=r}):(n.color.set(t),n.opacity=r)}}),this.render()},s=()=>{i.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()},c=e=>{this.isDragging||o()},l=e=>{this.isDragging||s()};for(let e of i)this.domEvents.addEventListener(e,`mouseover`,c),this.domEvents.addEventListener(e,`mouseout`,l),this.hooks.on(`moveStart`,o),this.hooks.on(`moveEnd`,s),this.hooks.on(`rotateEnd`,s),this.hooks.on(`scaleEnd`,s),a.push(()=>{this.domEvents.removeEventListener(e,`mouseover`,c),this.domEvents.removeEventListener(e,`mouseout`,l),this.hooks.off(`moveStart`,o),this.hooks.off(`moveEnd`,s),this.hooks.off(`rotateEnd`,s),this.hooks.off(`scaleEnd`,s)})}return()=>a.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 r=new n.Vector3(0,0,0);if(!e)return r;let i=()=>t||this.getBox();if(typeof e.x==`number`)r.setX(e.x);else if(typeof e.x==`object`){let t=i();r.setX((t.max.x-t.min.x)*e.x.percents)}if(typeof e.y==`number`)r.setY(e.y);else if(typeof e.y==`object`){let t=i();r.setY((t.max.y-t.min.y)*e.y.percents)}if(typeof e.z==`number`)r.setZ(e.z);else if(typeof e.z==`object`){let t=i();r.setZ((t.max.z-t.min.z)*e.z.percents)}return r}};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,r){let i=Object.assign(Object.assign({color:16777215,renderOrder:G.DRAG_GUIDE_LINE},this.defaults),r||{}),a=t.clone().normalize(),o=this.computeInfiniteLineLength(e),s=e.clone().add(a.clone().multiplyScalar(-o)),c=e.clone().add(a.clone().multiplyScalar(o)),l=new Float32Array([s.x,s.y,s.z,c.x,c.y,c.z]),u=new n.BufferGeometry;u.setAttribute(`position`,new n.BufferAttribute(l,3));let d=new n.LineBasicMaterial({color:i.color,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.65}),f=new n.Line(u,d);return f.renderOrder=i.renderOrder,f}updateSolidLine(e,t,r,i){let a=r.clone().normalize(),o=this.computeInfiniteLineLength(t),s=t.clone().add(a.clone().multiplyScalar(-o)),c=t.clone().add(a.clone().multiplyScalar(o)),l=new Float32Array([s.x,s.y,s.z,c.x,c.y,c.z]),u=e.geometry,d=u.getAttribute(`position`);d&&d.itemSize===3&&d.array.length===l.length?(d.array.set(l),d.needsUpdate=!0):u.setAttribute(`position`,new n.BufferAttribute(l,3)),(i==null?void 0:i.color)!==void 0&&e.material.color.setHex(i.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,r){if(!t||!r||!e)return;let i=P(t,r);if(Math.abs(i.x)===1||Math.abs(i.y)===1)return;let a=new n.Raycaster;return a.setFromCamera(i,e),a.params.Points&&(a.params.Points.threshold=.1),a}function _t(e){let{raycaster:t,line:r,clampToLine:i=!0}=e,a=new n.Plane().setFromNormalAndCoplanarPoint(t.ray.direction.clone().normalize(),new n.Vector3),o=a.projectPoint(r.start,new n.Vector3),s=a.projectPoint(r.end,new n.Vector3),c=new n.Line3(o,s),l=c.closestPointToPoint(t.ray.origin,i,new n.Vector3),u=l.distanceTo(s),d=l.distanceTo(o),f=c.distance();if(u>d&&u>f){let e=-l.distanceTo(o)/f,t=r.start.clone().sub(r.end).normalize();return r.start.clone().sub(t.clone().multiplyScalar(e*r.distance()))}else{let e=l.distanceTo(o)/f;return new n.Vector3().lerpVectors(r.start,r.end,e)}}var vt=class extends pt{get moveByMouseEnable(){return this._moveByMouse.enabled}constructor(...e){var t,r,i,a,o;super(...e),this.name=`MoveController`,this.solidGuide=new ht(this.camera,this.container,(r=(t=this.config)==null?void 0:t.solidGuide)==null?{}:r),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 r=(t==null?void 0:t.object).direction;if(!r)return this.dragEnd();let i=new n.Vector3(1,0,0),a=new n.Vector3(0,1,0),o=new n.Vector3(0,0,1),s=(()=>{switch(r){case`x`:return i;case`y`:return a;case`z`:return o;case`xy`:case`xz`:case`yz`:case`plane`:return}})(),c=t.point.clone();if(r===`xy`||r===`xz`||r===`yz`){let e=(()=>{switch(r){case`xy`:return o;case`xz`:return a;case`yz`:return i}})(),t=new n.Plane().setFromNormalAndCoplanarPoint(e,c),s=c.clone();this.startInfo={draggingDirection:r,startVectorProject:s,line:new n.Line3(s.clone(),s.clone()),plane:t}}else if(r===`plane`){let e=this.camera.position.clone(),t=c.clone(),i=t.clone().sub(e).normalize(),a=new n.Plane().setFromNormalAndCoplanarPoint(i,t),o=t.clone();this.startInfo={draggingDirection:r,startVectorProject:o,line:new n.Line3(o.clone(),o.clone()),plane:a}}else{if(!s)return this.dragEnd();this.startInfo={draggingDirection:r,startVectorProject:c,line:new n.Line3(c.clone().sub(s.normalize()),c.clone().add(s.normalize()))};try{let e=s.clone().normalize(),t=this.helperObject3D.getWorldPosition(new n.Vector3),r=this.solidGuide.createSolidLine(t,e,{color:16777215,renderOrder:G.DRAG_GUIDE_LINE});this.scene.add(r),this.dragGuideLine=r}catch(e){}}let l=(()=>{switch(r){case`plane`:return[];case`xy`:return[`x`,`y`,`xy`];case`xz`:return[`x`,`z`,`xz`];case`yz`:return[`y`,`z`,`yz`];default:return[r]}})();this.helperObject3D.showDraggingHelper(l),this.hooks.emit(`moveStart`,r),this.isDragging=!0,this.setTipsText(this.originObject3D.position),this.setTipsPosition(c)},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 s=this.helperObject3D;if(this.hoverListener([s.xArrow,s.yArrow,s.zArrow,(i=s.xyPlane)==null?void 0:i.handle,(a=s.xzPlane)==null?void 0:a.handle,(o=s.yzPlane)==null?void 0:o.handle]),s.centerHandle&&s.centerHandle instanceof et){let e=s.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 c=this.show.bind(this),l=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`,l),this.hooks.on(`rotateEnd`,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`,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`,l),this.hooks.off(`rotateEnd`,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)}),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,r,i;if(!this.moveByMouseEnable)return;let{point:a,face:o}=e;if(!this.hooks.emit(`wantToMove`,a)){if(this.originObject3D.position.copy(a),(this._moveByMouse.useFaceNormal===!0||typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.enable!==!1)&&o!=null&&o.normal){let e=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.alignmentVector?this._moveByMouse.useFaceNormal.alignmentVector:{x:0,y:1,z:0},a=new n.Vector3((t=e.x)==null?0:t,(r=e.y)==null?0:r,(i=e.z)==null?0:i),s=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.fixedFaceNormal?this._moveByMouse.useFaceNormal.fixedFaceNormal(o.normal):o.normal;this.originObject3D.quaternion.setFromUnitVectors(a,s),this.internalHooks.emit(`setObjectRotate`,this.originObject3D.quaternion.clone(),new n.Vector3)}this.internalHooks.emit(`setObjectPosition`,a),this.hooks.emit(`move`,a)}}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 r=this.helperObject3D.getWorldPosition(new n.Vector3);this.solidGuide.updateSolidLine(this.dragGuideLine,r,t)}move(e){if(!this.startInfo)return this.dragEnd();let{line:t,startVectorProject:r}=this.startInfo,i=this.originObject3D,a=this.startInfo.draggingDirection===`plane`||this.startInfo.draggingDirection===`xy`||this.startInfo.draggingDirection===`xz`||this.startInfo.draggingDirection===`yz`,o;if(a){let t=this.startInfo.plane;if(!t)return;let r=new n.Vector3,i=t.normal.dot(e.ray.direction);if(Math.abs(i)<1e-6)return;let a=-(t.normal.dot(e.ray.origin)+t.constant)/i;if(a<0)return;r.copy(e.ray.origin.clone().add(e.ray.direction.clone().multiplyScalar(a))),o=r}else o=_t({raycaster:e,line:t,clampToLine:!1});let s=i.position.clone(),c=o.clone().sub(r),l=new n.Matrix4;l.setPosition(c);let u=i.position.clone().applyMatrix4(l);if(this.hooks.emit(`wantToMove`,u))return;let d=u.clone();this.hooks.emit(`moveBefore`,d);let f=new n.Matrix4;f.setPosition(d.clone().sub(s)),i.position.copy(d),this.setTipsText(d),this.setTipsPosition(d),r.copy(o),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:r,y:i,z:a}=this.helperObject3D.getWorldPosition(new n.Vector3).clone().project(this.camera);if(a>1){t.hide();return}let o=this.container.getBoundingClientRect(),s=(r+1)/2*o.width,c=(-i+1)/2*o.height;t.setLeftTop(s+`px`,c+`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 n.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:r=0,z:i=0}=e,a=new n.Euler(n.MathUtils.degToRad(t),n.MathUtils.degToRad(r),n.MathUtils.degToRad(i)),o=new n.Quaternion().setFromEuler(a);if(this.hooks.emit(`wantToRotate`,o))return;let{originObject3D:s,rotateCenter:c}=this;Ge(s,o,c),this.internalHooks.emit(`setObjectRotate`,o,c),this.hooks.emit(`rotate`,o),this.render()}getEulerAngle(e,t){let{originObject3D:r}=this,i=new n.Euler().setFromQuaternion(r.quaternion),a={x:n.MathUtils.radToDeg(i.x),y:n.MathUtils.radToDeg(i.y),z:n.MathUtils.radToDeg(i.z)},o={x:e===`x`?t:a.x,y:e===`y`?t:a.y,z:e===`z`?t:a.z},s=new n.Euler(n.MathUtils.degToRad(o.x),n.MathUtils.degToRad(o.y),n.MathUtils.degToRad(o.z));return new n.Quaternion().setFromEuler(s)}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 r=(t==null?void 0:t.object).direction;if(!r)return this.dragEnd();let i=t.point;this.setTipsAngle(0);let a=i.clone();a.y+=.2,this.setTipsPosition(a);let o=new n.Quaternion,s=r===`x`?new n.Vector3(1,0,0):r===`y`?new n.Vector3(0,1,0):r===`z`?new n.Vector3(0,0,1):new n.Vector3(0,1,0),c=new n.Plane().setFromNormalAndCoplanarPoint(s,i),l=c.projectPoint(i.clone(),new n.Vector3).clone().sub(this.rotateCenter),u=this.getAngleHelper(r);if(!u)return this.dragEnd();let d=l.angleTo(u.baseAxes.clone().applyQuaternion(o)),f=u.offsetAngle(d);this.setAngleHelperStart(r,f),this.setAngleHelperLength(r,0),this.startInfo={direction:r,startVector:l,directionVector:s,plane:c,angleHelper:u,angle:0,helperQuaternion:o.clone(),startQuaternion:this.originObject3D.quaternion.clone()},bt=new n.Quaternion,this.helperObject3D.showDraggingHelper([r]),this.hooks.emit(`rotateStart`,r),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 r;if(e&&e.isMatrix4){r=new n.Quaternion,e.decompose(new n.Vector3,r,new n.Vector3);let i=new n.Euler().setFromQuaternion(r);if(t===`x`)return Math.round(n.MathUtils.radToDeg(i.z));if(t===`y`)return Math.round(n.MathUtils.radToDeg(i.y));if(t===`z`)return Math.round(n.MathUtils.radToDeg(i.x))}}parseAngleByDirection(e){var t,r;let i=(r=(t=this.originObject3D)==null?void 0:t.ext)==null?void 0:r.matrix,a;if(i&&i.isMatrix4){a=new n.Quaternion,i.decompose(new n.Vector3,a,new n.Vector3);let t=new n.Euler().setFromQuaternion(a);if(e===`x`)return Math.round(n.MathUtils.radToDeg(t.z));if(e===`y`)return Math.round(n.MathUtils.radToDeg(t.y));if(e===`z`)return Math.round(n.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:r,angleHelper:i,direction:a,helperQuaternion:o}=this.startInfo,{originObject3D:s}=this,c=e.ray.intersectPlane(r,new n.Vector3);if(!c)return;let l=this.rotateCenter.clone(),u=r.projectPoint(c.clone(),new n.Vector3).clone().sub(l),d=this.startInfo.directionVector.clone().normalize();u=u.clone().projectOnPlane(d).normalize().multiplyScalar(u.length());let f=new n.Quaternion().setFromUnitVectors(t.clone().normalize(),u.clone().normalize()),p=s.quaternion.clone().premultiply(f);if(t.angleTo(u)===0||this.hooks.emit(`wantToRotate`,p))return;let m=new n.Euler().setFromQuaternion(new n.Quaternion().setFromUnitVectors(t.clone().normalize().applyQuaternion(o.clone().inverse()),u.clone().normalize().applyQuaternion(o.clone().inverse())),`${a.toUpperCase()}${`XZY`.replace(a.toUpperCase(),``)}`)[a]*i.angleDirection,h=this.startInfo.angle,g=h+m,_=Math.PI/2,v=n.MathUtils.degToRad(5),y=n.MathUtils.degToRad(10),b=new n.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(a,l):!E&&D&&this.removeSnapGuideLines(),this.setAngleHelperLength(a,this.startInfo.angle),this.setTipsAngle(n.MathUtils.radToDeg(this.startInfo.angle));let O=new n.Quaternion().setFromAxisAngle(d,T);if(l){let e=new n.Vector3().subVectors(s.position,l).applyQuaternion(O).add(l);s.position.copy(e)}s.applyQuaternion(O),bt.premultiply(O),this.internalHooks.emit(`applyObjectRotate`,{quaternion:O,origin:l}),this.hooks.emit(`rotate`,s.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 n.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 r=this.getAngleHelper(e);if(!r){console.warn(`angleHelper is undefined`);return}if(r instanceof n.Mesh&&r.geometry instanceof n.CircleGeometry){let{radius:e,segments:i,thetaLength:a}=r.geometry.parameters;r.geometry=new n.CircleGeometry(e,i,t,a)}else console.warn(`only support THREE.CircleGeometry`)}setAngleHelperLength(e,t){let r=.001,i=e===`x`||e===`y`?-t:t,a=i>=0?Math.max(i,r):Math.min(i,-r),o=this.getAngleHelper(e);if(o instanceof n.Mesh&&o.geometry instanceof n.CircleGeometry){let{radius:e,thetaStart:t}=o.geometry.parameters,r=Math.ceil(Math.abs(a)*(40/(2*Math.PI)));o.geometry=new n.CircleGeometry(e,r,t,a)}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:r,y:i,z:a}=this.helperObject3D.getWorldPosition(new n.Vector3).clone().project(this.camera);if(a>1){t.hide();return}let o=this.container.getBoundingClientRect(),s=(r+1)/2*o.width,c=(-i+1)/2*o.height;t.setLeftTop(s+`px`,c+`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 r=(()=>{switch(e){case`x`:return[new n.Vector3(0,1,0),new n.Vector3(0,0,1)];case`y`:return[new n.Vector3(1,0,0),new n.Vector3(0,0,1)];case`z`:return[new n.Vector3(1,0,0),new n.Vector3(0,1,0)];default:return[]}})();for(let e of r){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 n.Raycaster,this._selected=null,this._boundObjs={};var r=this;this._$onClick=function(){r._onClick.apply(r,arguments)},this._$onDblClick=function(){r._onDblClick.apply(r,arguments)},this._$onMouseMove=function(){r._onMouseMove.apply(r,arguments)},this._$onMouseDown=function(){r._onMouseDown.apply(r,arguments)},this._$onMouseUp=function(){r._onMouseUp.apply(r,arguments)},this._$onTouchMove=function(){r._onTouchMove.apply(r,arguments)},this._$onTouchStart=function(){r._onTouchStart.apply(r,arguments)},this._$onTouchEnd=function(){r._onTouchEnd.apply(r,arguments)},this._$onContextmenu=function(){r._onContextmenu.apply(r,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,r,i){var a=this._boundObjs[e];if(!(a===void 0||a.length===0)){var o=this._filterVisibleObjects(a);if(o.length!==0){var s=new n.Vector2;s.set(t,r),this._raycaster.setFromCamera(s,this._camera);var c=this._raycaster.intersectObjects(o),l=this;c=c.filter(function(e){return l._isObjectVisible(e.object)}),c.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(c.length>0){var d,f,p,m=c[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,i,m),d&&this._notify(`mouseover`,h,i,m),f&&this._notify(`mouseout`,u,i,m)}}},$.prototype._onEvent=function(e,t,r,i){var a=this._boundObjs[e];if(!(a===void 0||a.length===0)){var o=this._filterVisibleObjects(a);if(o.length!==0){var s=new n.Vector2;s.set(t,r),this._raycaster.setFromCamera(s,this._camera);var c=this._raycaster.intersectObjects(o,!0),l=this;if(c=c.filter(function(e){return l._isObjectVisible(e.object)}),c.sort(function(e,t){var n=e.object.renderOrder||0,r=t.object.renderOrder||0;return n===r?e.distance-t.distance:r-n}),c.length!==0){for(var u=c[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,i,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 t.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,r={}){var i,a;if(!e){console.error(`Object3D is undefined`);return}if(this.objectHelperMap.has(e)){console.warn(`Object3DHelperPlugin: object3D ${e.name} already has helper`);return}let o=new Ot,s=[],c=(i=this.five.getElement())==null?void 0:i.parentElement;this.five.camera;let l=Object.assign(Object.assign({},{moveHelper:!0,rotateHelper:!0,boundingBoxHelper:!1,moveHelperTips:!1,positionFrom:`objectPosition`}),r),{moveHelper:u,rotateHelper:d,boundingBoxHelper:f}=l,p=new n.Group;l.helperOffset&&p.position.copy(l.helperOffset),this.five.scene.add(p);let m=o.hooks,h=new t.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(l.moveHelper)),l),n=new Y(e,Object.assign({container:c==null?void 0:c,moveTipsEnable:(a=l.moveHelperTips)==null?!1:a},t)),r=new yt(this.five,g,vt,e,n,t,m,h,p);v.moveController=r.helperController,s.push(()=>r.dispose())}if(_(d)){let t=Object.assign(Object.assign({},this.getConfig(l.rotateHelper)),l),n=new st(e,Object.assign({container:c==null?void 0:c},t)),r=new yt(this.five,g,xt,e,n,t,m,h,p);v.rotateController=r.helperController,s.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,s.push(()=>n.dispose())}return Object.values(v).forEach(e=>{e&&typeof e.updateOtherControllers==`function`&&e.updateOtherControllers(v)}),o.addControllers(v),this.objectHelperMap.set(e,{helper:o,disposers:s,helperGroup:p}),o.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 r=e.content.data.positionArray,i=r.length/3,a=.01,o=.1,s=new jt(a,o,1,0,1),c=new jt(a,o,1,0,1),l=new jt(a,o,1,0,1),u=new Float32Array(i);for(let e=0;e<i;e++)if(e===0)u[e]=0;else{let t=new n.Vector3(r[(e-1)*3],r[(e-1)*3+1],r[(e-1)*3+2]);u[e]=new n.Vector3(r[e*3],r[e*3+1],r[e*3+2]).distanceTo(t)+u[e-1]}for(let a=0;a<i;a++){let o=new n.Vector3(0,0,0),d=0;for(let e=a-5;e<a+6;e++)e>=0&&e<i&&(o.add(new n.Vector3(r[e*3],r[e*3+1],r[e*3+2])),d++);o.divideScalar(d).applyMatrix4(e.transform);let f=s.filter(o.x),p=c.filter(o.y),m=l.filter(o.z);t.push({position:new n.Vector3(f,p,m),location:u[a]})}return t}computeAABB2D(e){let t=1/0,r=-1/0,i=1/0,a=-1/0;for(let n of e)n.position.x<t&&(t=n.position.x),n.position.x>r&&(r=n.position.x),n.position.z<i&&(i=n.position.z),n.position.z>a&&(a=n.position.z);return{min:new n.Vector2(t,i),max:new n.Vector2(r,a)}}findClosestKeyframeToRay(e,t){let r=1/0,i=t[0].position.clone(),a=new n.Vector3;for(let n of t){e.closestPointToPoint(n.position,a);let t=a.distanceTo(n.position);t<r&&(r=t,i=n.position.clone())}return i}getCameraCurve(){return m(this,void 0,void 0,function*(){var e,r,i;let a=(i=(r=(e=this.five.model.viewLayers[0])==null?void 0:e.scene)==null?void 0:r.trajectories)==null?void 0:i[0];if(!a)throw Error(`未找到轨迹数据`);a.visible=!0,yield new Promise(e=>{let n=t.AnimationFrameLoop.shared.add(()=>{a.content.loadState===`READY`&&(n(),e(),a.visible=!1)})});let o=this.extractKeyframes(a);if(o.length<2)throw Error(`轨迹关键帧不足,至少需要2个关键帧`);this.keyframes=o;let s=this.computeAABB2D(o);this.boundingAABB=s;let c=this.curveHeight,l=new n.Vector3((s.min.x+s.max.x)/2,c,(s.min.y+s.max.y)/2),u=(s.max.x-s.min.x)/2,d=(s.max.y-s.min.y)/2,f=Math.sqrt(u*u+d*d),p=e=>{let t=new n.Vector3().subVectors(e,l);return t.length()<.001&&t.set(1,0,0),l.clone().add(t.normalize().multiplyScalar(f))},m=new n.Vector3(o[0].position.x,c,o[0].position.z),h=p(m),g=new n.Vector3().subVectors(l,m).normalize(),_=new n.Ray(m,g),v=new n.Vector3(-g.z,0,g.x).normalize(),y=new n.Ray(l,v),b=this.findClosestKeyframeToRay(y,o),x=p(new n.Vector3(b.x,c,b.z)),S=this.findClosestKeyframeToRay(_,o),C=p(new n.Vector3(S.x,c,S.z));return new n.CatmullRomCurve3([h,x,C],!1,`centripetal`,.5)})}findRenderMesh(){let e=null;if(this.five.scene.traverse(t=>{e||t instanceof n.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(),r=new n.Vector3(e.min.x,0,e.min.y),i=new n.Vector3(e.max.x,3,e.max.y);t.material.uniforms.u_aggregationBoundsMin.value.copy(r),t.material.uniforms.u_aggregationBoundsMax.value.copy(i),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 n=performance.now(),r=this.duration;this.cancelAnimation=t.AnimationFrameLoop.shared.add(()=>{let t=performance.now()-n,i=Math.min(t/r,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(),r=this.boundingAABB,i=new n.Vector3((r.min.x+r.max.x)/2,this.curveHeight,(r.min.y+r.max.y)/2),a=e.getPointAt(0),o=new t.Camera(90).copy(this.five.camera);o.position.copy(a),o.lookAt(i),o.computePose(0),this.five.setState(Object.assign({},o.pose)),this.setBounds();let s=this.findRenderMesh().material.uniforms;s.u_aggregationEnabled.value=!0,s.u_aggregationProgress.value=0,s.u_aggregationPointDuration.value=Math.min(this.pointDuration/this.duration,1),this.five.needsRender=!0;let c=this.duration,l=performance.now();return new Promise(n=>{this.cancelAnimation=t.AnimationFrameLoop.shared.add(()=>{let t=performance.now()-l,r=Math.min(t/c,1),a=r*r*(3-2*r);s.u_aggregationProgress.value=a,this.five.modelSceneNeedsRender=!0;let u=e.getPointAt(a);o.position.copy(u),o.lookAt(i),o.computePose(0),this.five.setState(Object.assign({},o.pose)),this.five.needsRender=!0,r>=1&&(s.u_aggregationEnabled.value=!1,s.u_aggregationProgress.value=1,this.cancelAnimation&&(this.cancelAnimation(),this.cancelAnimation=null),n())})})})}},Nt=(e,t)=>new Mt(e,t),Pt=class extends n.InstancedBufferGeometry{constructor(e,t){super(),this.prefabGeometry=e,this.copy(e),this.instanceCount=t,this.prefabCount=t}createAttribute(e,t,r){let i=new n.InstancedBufferAttribute(new Float32Array(this.prefabCount*t),t);if(this.setAttribute(e,i),r){let e=[];for(let t=0;t<this.prefabCount;t++)r(e,t,this.prefabCount),this.setPrefabData(i,t,e)}return i}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 n.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 r=new Uint32Array(this.prefabCount*t);this.setIndex(new n.BufferAttribute(r,1));for(let n=0;n<this.prefabCount;n++)for(let i=0;i<t;i++)r[n*t+i]=e[i]+n*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,r){let i=new n.BufferAttribute(new Float32Array(this.prefabCount*this.prefabVertexCount*t),t);if(this.setAttribute(e,i),r){let e=[];for(let t=0;t<this.prefabCount;t++)r(e,t,this.prefabCount),this.setPrefabData(i,t,e)}return i}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 n.BufferGeometry{constructor(e){super(),this.pointCount=e,this.bufferPositions()}bufferPositions(){this.createAttribute(`position`,3)}createAttribute(e,t,r){let i=new n.BufferAttribute(new Float32Array(this.pointCount*t),t);if(this.setAttribute(e,i),r){let e=[];for(let t=0;t<this.pointCount;t++)r(e,t,this.pointCount),this.setPointData(i,t,e)}return i}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]}};e.BackgroundPlugin=ue,Object.defineProperty(e,`BasePlugin`,{enumerable:!0,get:function(){return p}}),e.CSS2DObject=Fe,e.CSS2DPlugin=We,e.CSS2DRenderer=Ve,e.CSS3DObject=M,e.CSS3DPlugin=Pe,e.CSS3DRenderer=se,e.CSS3DSprite=ae,e.DynamicPathLinePlugin=ke,e.GaussianSplattingEntranceAnimationPlugin=Nt,e.InstancedPrefabBufferGeometry=Pt,e.ItemMaskPlugin=A,e.Object3DHelperController=kt,e.Object3DHelperPlugin=At,e.OrbitControls=j,e.OrientationPlugin=V,e.PanoAnimePlugin=xe,e.PointBufferGeometry=It,e.PrefabBufferGeometry=Ft,e.RoundedBoxGeometry=F,e.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 n.Scene,this.styleSheet=new CSSStyleSheet,this.camera=new n.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:r,y:i}=this.five.renderer.getSize(new n.Vector2);t.parentElement.appendChild(this.renderer.domElement),this.renderer.setSize(r,i),(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,r){if(r){let i=new n.Vector3().subVectors(e.position,r).applyQuaternion(e.quaternion.clone().inverse()).applyQuaternion(t).add(r);e.position.copy(i)}e.quaternion.copy(t)}function Ke(e){return e==null}var qe=class extends n.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 n.Box3().expandByObject(this.originObject3D).getCenter(new n.Vector3)):this.positionFrom instanceof n.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,r=e.yAxis instanceof Function?e.yAxis():e.yAxis,i=e.zAxis instanceof Function?e.zAxis():e.zAxis,a=t==null?void 0:t.clone(),o=r==null?void 0:r.clone(),s=i==null?void 0:i.clone();if(a&&!o&&!o){let e=new n.Quaternion().setFromUnitVectors(new n.Vector3(1,0,0),a.normalize());this.applyQuaternion(e)}if(o&&!a&&!s){let e=new n.Quaternion().setFromUnitVectors(new n.Vector3(0,1,0),o.normalize());this.applyQuaternion(e)}if(s&&!a&&!o){let e=new n.Quaternion().setFromUnitVectors(new n.Vector3(0,0,1),s.normalize());this.applyQuaternion(e)}if([a,o,s].filter(e=>!Ke(e)).length>=2){a||(a=new n.Vector3().crossVectors(o,s).normalize()),o||(o=new n.Vector3().crossVectors(a,s).normalize()),s||(s=new n.Vector3().crossVectors(a,o).normalize()),a.applyQuaternion(this.quaternion),o.applyQuaternion(this.quaternion),s.applyQuaternion(this.quaternion);let e=new n.Matrix4().makeBasis(a,o,s),t=new n.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 r=new n.Vector3().subVectors(this.position,t).applyQuaternion(e).add(t);this.position.copy(r)}this.applyQuaternion(e)}dispose(){this.removeFromParent()}},Je=class extends qe{},Ye=class extends qe{},Xe=class extends qe{},Ze=class extends n.Group{constructor(e){super(),this.direction=e||`x`}};n.Line;var Qe=class extends n.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 n.Color($e.X).convertSRGBToLinear().clone()}static get Y(){return new n.Color($e.Y).convertSRGBToLinear().clone()}static get Z(){return new n.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 r=new n.Color((t=e.color)==null?16214315:t),i=()=>new n.MeshBasicMaterial({color:r,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1});this.arrow=new Qe(new n.ConeGeometry(.04,this.arrowHeight,32),i(),e.direction),this.arrow.name=`arrow-${e.direction}`,this.arrow.renderOrder=G.MOVE_HELPER_ARROW,this.arrowNeg=new Qe(new n.ConeGeometry(.04,this.arrowHeight,32),i(),e.direction),this.arrowNeg.name=`arrow-neg-${e.direction}`,this.arrowNeg.renderOrder=G.MOVE_HELPER_ARROW;let a=.004;this.line=new Qe(new n.CylinderGeometry(a,a,this.lineHeight,32),i(),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,r;super(`plane`),this.name=`CenterHandle`,this.faceNormals=[new n.Vector3(1,0,0),new n.Vector3(-1,0,0),new n.Vector3(0,1,0),new n.Vector3(0,-1,0),new n.Vector3(0,0,1),new n.Vector3(0,0,-1)],this.baseColor=new n.Color((t=e==null?void 0:e.color)==null?16419862:t);let i=(r=e==null?void 0:e.size)==null?.05:r,a=new n.Color(16755008).convertSRGBToLinear();this.faceMaterials=Array.from({length:6},()=>new n.MeshBasicMaterial({color:a,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,side:n.FrontSide}));let o=new n.BoxGeometry(i,i,i),s=new n.Mesh(o,this.faceMaterials);s.direction=`plane`,s.renderOrder=G.MOVE_HELPER_CENTER,s.name=`center-plane-handle`,this.cube=s,this.add(this.cube)}update(e){let t=new n.Vector3().subVectors(e.position,this.cube.getWorldPosition(new n.Vector3)).normalize(),r=this.cube.getWorldQuaternion(new n.Quaternion),i=this.faceNormals.map((e,n)=>{let i=e.clone().applyQuaternion(r).dot(t);return{index:n,angle:Math.acos(Math.abs(i))}});i.sort((e,t)=>e.angle-t.angle);let a=[new n.Color(16755008).convertSRGBToLinear(),new n.Color(16419862).convertSRGBToLinear(),new n.Color(13921032).convertSRGBToLinear()];i.forEach((e,t)=>{let n=Math.floor(t/2);this.faceMaterials[e.index].color.copy(a[n])})}},tt=class extends Ze{constructor(e){var t,r,i;super(e.direction),this.name=`PlaneHandle`;let a=(t=e.size)==null?.12:t,o=(r=e.offset)==null?.12:r,s=new n.Color((i=e.color)==null?16776960:i),c=new n.BoxGeometry(a,a,.005),l=new n.MeshBasicMaterial({color:s,transparent:!0,opacity:.4,depthTest:!1,depthWrite:!1,side:n.DoubleSide});switch(this.handle=new n.Mesh(c,l),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(o,o,0);break;case`xz`:this.handle.position.set(o,0,o),this.handle.rotation.x=-Math.PI/2;break;case`yz`:this.handle.position.set(0,o,o),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:r}=e,i=new n.Vector3;return it-t<.03?i.set(0,1,0):at(0,r)?i.set(0,0,1):at(Math.PI,r)?i.set(0,0,-1):at(it,r)?i.set(1,0,0):i.set(-1,0,0),i}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 n.Vector3(1,0,0).applyQuaternion(this.quaternion),r=new n.Vector3(0,1,0).applyQuaternion(this.quaternion),i=new n.Vector3(0,0,1).applyQuaternion(this.quaternion),a=e.pose,o=rt(a),s=.0872665;Math.abs(t.angleTo(o)-0)<s||Math.abs(t.angleTo(o)-Math.PI)<s?this.xArrow&&(this.xArrow.visible=!1):Math.abs(r.angleTo(o)-0)<s||Math.abs(r.angleTo(o)-Math.PI)<s?this.yArrow&&(this.yArrow.visible=!1):(Math.abs(i.angleTo(o)-0)<s||Math.abs(i.angleTo(o)-Math.PI)<s)&&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(),r=new n.Vector3(1,0,0).applyQuaternion(this.quaternion),i=new n.Vector3(0,1,0).applyQuaternion(this.quaternion),a=new n.Vector3(0,0,1).applyQuaternion(this.quaternion),o=t.angleTo(r),s=t.angleTo(i),c=t.angleTo(a),l=Math.PI/2,u=s>=l,d=c>=l,f=o>=l;if(this.xCircle){let e=this.xCircle.circle.gapAngle;u&&d?this.xCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):u&&!d?this.xCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!u&&d?this.xCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!u&&!d&&(this.xCircle.circle.geometry=new n.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 n.Vector3(0,0,1):!u&&d?(this.xCircle.angleSector.baseAxes=new n.Vector3(0,-1,0),this.xCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!u&&!d&&(this.xCircle.angleSector.baseAxes=new n.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 n.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):f&&!d?this.yCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!f&&d?this.yCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!f&&!d&&(this.yCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),f&&d?this.yCircle.angleSector.baseAxes=new n.Vector3(1,0,0):f&&!d?(this.yCircle.angleSector.baseAxes=new n.Vector3(0,0,-1),this.yCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!f&&d?(this.yCircle.angleSector.baseAxes=new n.Vector3(0,0,1),this.yCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!f&&!d&&(this.yCircle.angleSector.baseAxes=new n.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 n.RingGeometry(.3,.35,20,8,e,Math.PI/2-e*2):f&&!u?this.zCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2*3+e,Math.PI/2-e*2):!f&&u?this.zCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI/2+e,Math.PI/2-e*2):!f&&!u&&(this.zCircle.circle.geometry=new n.RingGeometry(.3,.35,20,8,Math.PI+e,Math.PI/2-e*2)),this.zCircle.angleSector&&(f&&u?this.zCircle.angleSector.baseAxes=new n.Vector3(1,0,0):f&&!u?(this.zCircle.angleSector.baseAxes=new n.Vector3(0,-1,0),this.zCircle.angleSector.offsetAngle=e=>e-Math.PI/2):!f&&u?(this.zCircle.angleSector.baseAxes=new n.Vector3(0,1,0),this.zCircle.angleSector.offsetAngle=e=>e+Math.PI/2):!f&&!u&&(this.zCircle.angleSector.baseAxes=new n.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 n.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 n.Mesh{constructor(e){var t;super(),this.gapAngle=.02,this.geometry=new n.RingGeometry(.3,.35,20,8,this.gapAngle,Math.PI/2-this.gapAngle*2),this.material=new n.MeshBasicMaterial({opacity:.6,transparent:!0,color:(t=e.color)==null?16777215:t,side:n.DoubleSide,depthTest:!1}),this.direction=e.direction,this.renderOrder=G.ROTATE_HELPER,this.geometry.name=`RotateHelperCircleGeometry-${this.direction}`}},ct=class extends n.Group{constructor(e){super(),this.direction=e.direction;let t=.015,r=Array(8).fill(null).map((e,r)=>{let i=new n.RingGeometry(.3,.35,20,8,Math.PI/4*r+t,Math.PI/4-t*2),a=new n.MeshBasicMaterial({opacity:1,color:16777215,depthTest:!1,depthWrite:!1,transparent:!0,side:n.DoubleSide}),o=new n.Mesh(i,a);return o.name=`AxesDashedRing-${this.direction}-${r}`,o});this.add(...r)}},lt=class extends n.Mesh{constructor(e){var t;switch(super(),this.offsetAngle=e=>e,e.direction){case`x`:this.baseAxes=new n.Vector3(0,0,1);break;case`y`:this.baseAxes=new n.Vector3(1,0,0);break;case`z`:this.baseAxes=new n.Vector3(1,0,0);break}this.geometry=new n.CircleGeometry(.3505,48,0,1e-4),this.material=new n.MeshBasicMaterial({opacity:.4,color:(t=e.color)==null?16777215:t,depthTest:!1,depthWrite:!1,transparent:!0,side:n.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 n.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 n.Box3,t=new n.Matrix4().getInverse(this.originObject3D.matrixWorld),r=new n.Vector3;if(this.originObject3D.updateMatrixWorld(!0),this.originObject3D.traverse(i=>{let a=i.geometry;if(!a)return;i.updateMatrixWorld(!0);let o=new n.Matrix4().multiplyMatrices(t,i.matrixWorld);if(a.isBufferGeometry){let t=a,n=t.attributes.position;if(n)for(let t=0,i=n.count;t<i;t++)r.fromBufferAttribute(n,t).applyMatrix4(o),e.expandByPoint(r);let i=t.attributes.instanceStart,s=t.attributes.instanceEnd;if(i)for(let t=0,n=i.count;t<n;t++)r.fromBufferAttribute(i,t).applyMatrix4(o),e.expandByPoint(r);if(s)for(let t=0,n=s.count;t<n;t++)r.fromBufferAttribute(s,t).applyMatrix4(o),e.expandByPoint(r)}else if(a.vertices){let t=a.vertices;for(let n of t)r.copy(n).applyMatrix4(o),e.expandByPoint(r)}}),e.isEmpty())return;let{min:i,max:a}=e;this.positionAttribute.setXYZ(0,a.x,a.y,a.z),this.positionAttribute.setXYZ(1,i.x,a.y,a.z),this.positionAttribute.setXYZ(2,i.x,i.y,a.z),this.positionAttribute.setXYZ(3,a.x,i.y,a.z),this.positionAttribute.setXYZ(4,a.x,a.y,i.z),this.positionAttribute.setXYZ(5,i.x,a.y,i.z),this.positionAttribute.setXYZ(6,i.x,i.y,i.z),this.positionAttribute.setXYZ(7,a.x,i.y,i.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 n.BufferGeometry;t.setIndex(new n.BufferAttribute(e,1)),t.setAttribute(`position`,this.positionAttribute);let r=new n.LineBasicMaterial({color:64767,linewidth:1,opacity:1,toneMapped:!1}),i=new n.LineSegments(t,r);return i.matrixAutoUpdate=!1,i}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 n.BufferGeometry;t.setIndex(new n.BufferAttribute(e,1)),t.setAttribute(`position`,this.positionAttribute);let r=new n.MeshBasicMaterial({color:64767,opacity:.1,depthTest:!1,transparent:!0});return new n.Mesh(t,r)}},Q=new Map;function dt(e){if(Q.has(e))return Q.get(e).hooks;let n=new t.Subscribe,r=null,i,a=()=>{r=requestAnimationFrame(a);let t=e.projectionMatrix.toArray().join(`,`)+e.matrixWorld.toArray().join(`,`);t!==i&&(i=t,n.emit(`cameraUpdate`))};return a(),Q.set(e,{hooks:n,dispose:()=>{Q.delete(e),cancelAnimationFrame(r)}}),n}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,r){var i,a,o;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 n.Box3().expandByObject(this.originObject3D)),this.boundingBox),this.hooks=(i=e.sharedHooks)==null?new t.Subscribe:i,this.internalHooks=(a=e.sharedInternalHooks)==null?new t.Subscribe:a,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=(o=e.onRender)==null?(()=>{}):o,this.config=r==null?{}:r,this.otherControllers=e.otherControllers,this.initialHelperPosition(),this.initialHelperQuaternion(),this.updateHelperScale(),this.cameraHooks=dt(this.camera),this.enable();let s=this.onSetOriginObjectScale.bind(this),c=this.onSetOriginObjectRotate.bind(this),l=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`,s),this.internalHooks.on(`setObjectRotate`,c),this.internalHooks.on(`setObjectPosition`,l),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`,s),this.internalHooks.off(`setObjectRotate`,c),this.internalHooks.off(`setObjectPosition`,l),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 r=new n.Vector3().subVectors(this.helperObject3D.position,t).applyQuaternion(e.quaternion).add(t);this.helperObject3D.position.copy(r)}}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,r=new n.Vector3().subVectors(this.boundingBox.max,t).multiply(e).add(t),i=new n.Vector3().subVectors(this.boundingBox.min,t).multiply(e).add(t),a=this.calculateOffset(this.config.offset,{min:i,max:r});this.helperObject3D.initialPosition(a)}}hoverListener(e,t=16777215,r=1){let i=ft(e).filter(e=>!Ke(e)),a=[];for(let e of i)if(e.material||e instanceof n.Group){let i=e instanceof n.Group?e.children.filter(e=>e instanceof n.Mesh):[e];i.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 o=()=>{i.forEach(e=>{if(e.name===`ScaleHelperTransparentGroup`){if(e.children[0]){let n=e.children[0].material;n.color.set(t),n.opacity=r}}else{let n=e.material;Array.isArray(n)?n.forEach(e=>{e.color.set(t),e.opacity=r}):(n.color.set(t),n.opacity=r)}}),this.render()},s=()=>{i.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()},c=e=>{this.isDragging||o()},l=e=>{this.isDragging||s()};for(let e of i)this.domEvents.addEventListener(e,`mouseover`,c),this.domEvents.addEventListener(e,`mouseout`,l),this.hooks.on(`moveStart`,o),this.hooks.on(`moveEnd`,s),this.hooks.on(`rotateEnd`,s),this.hooks.on(`scaleEnd`,s),a.push(()=>{this.domEvents.removeEventListener(e,`mouseover`,c),this.domEvents.removeEventListener(e,`mouseout`,l),this.hooks.off(`moveStart`,o),this.hooks.off(`moveEnd`,s),this.hooks.off(`rotateEnd`,s),this.hooks.off(`scaleEnd`,s)})}return()=>a.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 r=new n.Vector3(0,0,0);if(!e)return r;let i=()=>t||this.getBox();if(typeof e.x==`number`)r.setX(e.x);else if(typeof e.x==`object`){let t=i();r.setX((t.max.x-t.min.x)*e.x.percents)}if(typeof e.y==`number`)r.setY(e.y);else if(typeof e.y==`object`){let t=i();r.setY((t.max.y-t.min.y)*e.y.percents)}if(typeof e.z==`number`)r.setZ(e.z);else if(typeof e.z==`object`){let t=i();r.setZ((t.max.z-t.min.z)*e.z.percents)}return r}};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,r){let i=Object.assign(Object.assign({color:16777215,renderOrder:G.DRAG_GUIDE_LINE},this.defaults),r||{}),a=t.clone().normalize(),o=this.computeInfiniteLineLength(e),s=e.clone().add(a.clone().multiplyScalar(-o)),c=e.clone().add(a.clone().multiplyScalar(o)),l=new Float32Array([s.x,s.y,s.z,c.x,c.y,c.z]),u=new n.BufferGeometry;u.setAttribute(`position`,new n.BufferAttribute(l,3));let d=new n.LineBasicMaterial({color:i.color,depthTest:!1,depthWrite:!1,transparent:!0,opacity:.65}),f=new n.Line(u,d);return f.renderOrder=i.renderOrder,f}updateSolidLine(e,t,r,i){let a=r.clone().normalize(),o=this.computeInfiniteLineLength(t),s=t.clone().add(a.clone().multiplyScalar(-o)),c=t.clone().add(a.clone().multiplyScalar(o)),l=new Float32Array([s.x,s.y,s.z,c.x,c.y,c.z]),u=e.geometry,d=u.getAttribute(`position`);d&&d.itemSize===3&&d.array.length===l.length?(d.array.set(l),d.needsUpdate=!0):u.setAttribute(`position`,new n.BufferAttribute(l,3)),(i==null?void 0:i.color)!==void 0&&e.material.color.setHex(i.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,r){if(!t||!r||!e)return;let i=P(t,r);if(Math.abs(i.x)===1||Math.abs(i.y)===1)return;let a=new n.Raycaster;return a.setFromCamera(i,e),a.params.Points&&(a.params.Points.threshold=.1),a}function _t(e){let{raycaster:t,line:r,clampToLine:i=!0}=e,a=new n.Plane().setFromNormalAndCoplanarPoint(t.ray.direction.clone().normalize(),new n.Vector3),o=a.projectPoint(r.start,new n.Vector3),s=a.projectPoint(r.end,new n.Vector3),c=new n.Line3(o,s),l=c.closestPointToPoint(t.ray.origin,i,new n.Vector3),u=l.distanceTo(s),d=l.distanceTo(o),f=c.distance();if(u>d&&u>f){let e=-l.distanceTo(o)/f,t=r.start.clone().sub(r.end).normalize();return r.start.clone().sub(t.clone().multiplyScalar(e*r.distance()))}else{let e=l.distanceTo(o)/f;return new n.Vector3().lerpVectors(r.start,r.end,e)}}var vt=class extends pt{get moveByMouseEnable(){return this._moveByMouse.enabled}constructor(...e){var t,r,i,a,o;super(...e),this.name=`MoveController`,this.solidGuide=new ht(this.camera,this.container,(r=(t=this.config)==null?void 0:t.solidGuide)==null?{}:r),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 r=(t==null?void 0:t.object).direction;if(!r)return this.dragEnd();let i=new n.Vector3(1,0,0),a=new n.Vector3(0,1,0),o=new n.Vector3(0,0,1),s=(()=>{switch(r){case`x`:return i;case`y`:return a;case`z`:return o;case`xy`:case`xz`:case`yz`:case`plane`:return}})(),c=t.point.clone();if(r===`xy`||r===`xz`||r===`yz`){let e=(()=>{switch(r){case`xy`:return o;case`xz`:return a;case`yz`:return i}})(),t=new n.Plane().setFromNormalAndCoplanarPoint(e,c),s=c.clone();this.startInfo={draggingDirection:r,startVectorProject:s,line:new n.Line3(s.clone(),s.clone()),plane:t}}else if(r===`plane`){let e=this.camera.position.clone(),t=c.clone(),i=t.clone().sub(e).normalize(),a=new n.Plane().setFromNormalAndCoplanarPoint(i,t),o=t.clone();this.startInfo={draggingDirection:r,startVectorProject:o,line:new n.Line3(o.clone(),o.clone()),plane:a}}else{if(!s)return this.dragEnd();this.startInfo={draggingDirection:r,startVectorProject:c,line:new n.Line3(c.clone().sub(s.normalize()),c.clone().add(s.normalize()))};try{let e=s.clone().normalize(),t=this.helperObject3D.getWorldPosition(new n.Vector3),r=this.solidGuide.createSolidLine(t,e,{color:16777215,renderOrder:G.DRAG_GUIDE_LINE});this.scene.add(r),this.dragGuideLine=r}catch(e){}}let l=(()=>{switch(r){case`plane`:return[];case`xy`:return[`x`,`y`,`xy`];case`xz`:return[`x`,`z`,`xz`];case`yz`:return[`y`,`z`,`yz`];default:return[r]}})();this.helperObject3D.showDraggingHelper(l),this.hooks.emit(`moveStart`,r),this.isDragging=!0,this.setTipsText(this.originObject3D.position),this.setTipsPosition(c)},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 s=this.helperObject3D;if(this.hoverListener([s.xArrow,s.yArrow,s.zArrow,(i=s.xyPlane)==null?void 0:i.handle,(a=s.xzPlane)==null?void 0:a.handle,(o=s.yzPlane)==null?void 0:o.handle]),s.centerHandle&&s.centerHandle instanceof et){let e=s.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 c=this.show.bind(this),l=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`,l),this.hooks.on(`rotateEnd`,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`,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`,l),this.hooks.off(`rotateEnd`,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)}),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,r,i;if(!this.moveByMouseEnable)return;let{point:a,face:o}=e;if(!this.hooks.emit(`wantToMove`,a)){if(this.originObject3D.position.copy(a),(this._moveByMouse.useFaceNormal===!0||typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.enable!==!1)&&o!=null&&o.normal){let e=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.alignmentVector?this._moveByMouse.useFaceNormal.alignmentVector:{x:0,y:1,z:0},a=new n.Vector3((t=e.x)==null?0:t,(r=e.y)==null?0:r,(i=e.z)==null?0:i),s=typeof this._moveByMouse.useFaceNormal==`object`&&this._moveByMouse.useFaceNormal.fixedFaceNormal?this._moveByMouse.useFaceNormal.fixedFaceNormal(o.normal):o.normal;this.originObject3D.quaternion.setFromUnitVectors(a,s),this.internalHooks.emit(`setObjectRotate`,this.originObject3D.quaternion.clone(),new n.Vector3)}this.internalHooks.emit(`setObjectPosition`,a),this.hooks.emit(`move`,a)}}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 r=this.helperObject3D.getWorldPosition(new n.Vector3);this.solidGuide.updateSolidLine(this.dragGuideLine,r,t)}move(e){if(!this.startInfo)return this.dragEnd();let{line:t,startVectorProject:r}=this.startInfo,i=this.originObject3D,a=this.startInfo.draggingDirection===`plane`||this.startInfo.draggingDirection===`xy`||this.startInfo.draggingDirection===`xz`||this.startInfo.draggingDirection===`yz`,o;if(a){let t=this.startInfo.plane;if(!t)return;let r=new n.Vector3,i=t.normal.dot(e.ray.direction);if(Math.abs(i)<1e-6)return;let a=-(t.normal.dot(e.ray.origin)+t.constant)/i;if(a<0)return;r.copy(e.ray.origin.clone().add(e.ray.direction.clone().multiplyScalar(a))),o=r}else o=_t({raycaster:e,line:t,clampToLine:!1});let s=i.position.clone(),c=o.clone().sub(r),l=new n.Matrix4;l.setPosition(c);let u=i.position.clone().applyMatrix4(l);if(this.hooks.emit(`wantToMove`,u))return;let d=u.clone();this.hooks.emit(`moveBefore`,d);let f=new n.Matrix4;f.setPosition(d.clone().sub(s)),i.position.copy(d),this.setTipsText(d),this.setTipsPosition(d),r.copy(o),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:r,y:i,z:a}=this.helperObject3D.getWorldPosition(new n.Vector3).clone().project(this.camera);if(a>1){t.hide();return}let o=this.container.getBoundingClientRect(),s=(r+1)/2*o.width,c=(-i+1)/2*o.height;t.setLeftTop(s+`px`,c+`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 n.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:r=0,z:i=0}=e,a=new n.Euler(n.MathUtils.degToRad(t),n.MathUtils.degToRad(r),n.MathUtils.degToRad(i)),o=new n.Quaternion().setFromEuler(a);if(this.hooks.emit(`wantToRotate`,o))return;let{originObject3D:s,rotateCenter:c}=this;Ge(s,o,c),this.internalHooks.emit(`setObjectRotate`,o,c),this.hooks.emit(`rotate`,o),this.render()}getEulerAngle(e,t){let{originObject3D:r}=this,i=new n.Euler().setFromQuaternion(r.quaternion),a={x:n.MathUtils.radToDeg(i.x),y:n.MathUtils.radToDeg(i.y),z:n.MathUtils.radToDeg(i.z)},o={x:e===`x`?t:a.x,y:e===`y`?t:a.y,z:e===`z`?t:a.z},s=new n.Euler(n.MathUtils.degToRad(o.x),n.MathUtils.degToRad(o.y),n.MathUtils.degToRad(o.z));return new n.Quaternion().setFromEuler(s)}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 r=(t==null?void 0:t.object).direction;if(!r)return this.dragEnd();let i=t.point;this.setTipsAngle(0);let a=i.clone();a.y+=.2,this.setTipsPosition(a);let o=new n.Quaternion,s=r===`x`?new n.Vector3(1,0,0):r===`y`?new n.Vector3(0,1,0):r===`z`?new n.Vector3(0,0,1):new n.Vector3(0,1,0),c=new n.Plane().setFromNormalAndCoplanarPoint(s,i),l=c.projectPoint(i.clone(),new n.Vector3).clone().sub(this.rotateCenter),u=this.getAngleHelper(r);if(!u)return this.dragEnd();let d=l.angleTo(u.baseAxes.clone().applyQuaternion(o)),f=u.offsetAngle(d);this.setAngleHelperStart(r,f),this.setAngleHelperLength(r,0),this.startInfo={direction:r,startVector:l,directionVector:s,plane:c,angleHelper:u,angle:0,helperQuaternion:o.clone(),startQuaternion:this.originObject3D.quaternion.clone()},bt=new n.Quaternion,this.helperObject3D.showDraggingHelper([r]),this.hooks.emit(`rotateStart`,r),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 r;if(e&&e.isMatrix4){r=new n.Quaternion,e.decompose(new n.Vector3,r,new n.Vector3);let i=new n.Euler().setFromQuaternion(r);if(t===`x`)return Math.round(n.MathUtils.radToDeg(i.z));if(t===`y`)return Math.round(n.MathUtils.radToDeg(i.y));if(t===`z`)return Math.round(n.MathUtils.radToDeg(i.x))}}parseAngleByDirection(e){var t,r;let i=(r=(t=this.originObject3D)==null?void 0:t.ext)==null?void 0:r.matrix,a;if(i&&i.isMatrix4){a=new n.Quaternion,i.decompose(new n.Vector3,a,new n.Vector3);let t=new n.Euler().setFromQuaternion(a);if(e===`x`)return Math.round(n.MathUtils.radToDeg(t.z));if(e===`y`)return Math.round(n.MathUtils.radToDeg(t.y));if(e===`z`)return Math.round(n.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:r,angleHelper:i,direction:a,helperQuaternion:o}=this.startInfo,{originObject3D:s}=this,c=e.ray.intersectPlane(r,new n.Vector3);if(!c)return;let l=this.rotateCenter.clone(),u=r.projectPoint(c.clone(),new n.Vector3).clone().sub(l),d=this.startInfo.directionVector.clone().normalize();u=u.clone().projectOnPlane(d).normalize().multiplyScalar(u.length());let f=new n.Quaternion().setFromUnitVectors(t.clone().normalize(),u.clone().normalize()),p=s.quaternion.clone().premultiply(f);if(t.angleTo(u)===0||this.hooks.emit(`wantToRotate`,p))return;let m=new n.Euler().setFromQuaternion(new n.Quaternion().setFromUnitVectors(t.clone().normalize().applyQuaternion(o.clone().inverse()),u.clone().normalize().applyQuaternion(o.clone().inverse())),`${a.toUpperCase()}${`XZY`.replace(a.toUpperCase(),``)}`)[a]*i.angleDirection,h=this.startInfo.angle,g=h+m,_=Math.PI/2,v=n.MathUtils.degToRad(5),y=n.MathUtils.degToRad(10),b=new n.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(a,l):!E&&D&&this.removeSnapGuideLines(),this.setAngleHelperLength(a,this.startInfo.angle),this.setTipsAngle(n.MathUtils.radToDeg(this.startInfo.angle));let O=new n.Quaternion().setFromAxisAngle(d,T);if(l){let e=new n.Vector3().subVectors(s.position,l).applyQuaternion(O).add(l);s.position.copy(e)}s.applyQuaternion(O),bt.premultiply(O),this.internalHooks.emit(`applyObjectRotate`,{quaternion:O,origin:l}),this.hooks.emit(`rotate`,s.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 n.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 r=this.getAngleHelper(e);if(!r){console.warn(`angleHelper is undefined`);return}if(r instanceof n.Mesh&&r.geometry instanceof n.CircleGeometry){let{radius:e,segments:i,thetaLength:a}=r.geometry.parameters;r.geometry=new n.CircleGeometry(e,i,t,a)}else console.warn(`only support THREE.CircleGeometry`)}setAngleHelperLength(e,t){let r=.001,i=e===`x`||e===`y`?-t:t,a=i>=0?Math.max(i,r):Math.min(i,-r),o=this.getAngleHelper(e);if(o instanceof n.Mesh&&o.geometry instanceof n.CircleGeometry){let{radius:e,thetaStart:t}=o.geometry.parameters,r=Math.ceil(Math.abs(a)*(40/(2*Math.PI)));o.geometry=new n.CircleGeometry(e,r,t,a)}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:r,y:i,z:a}=this.helperObject3D.getWorldPosition(new n.Vector3).clone().project(this.camera);if(a>1){t.hide();return}let o=this.container.getBoundingClientRect(),s=(r+1)/2*o.width,c=(-i+1)/2*o.height;t.setLeftTop(s+`px`,c+`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 r=(()=>{switch(e){case`x`:return[new n.Vector3(0,1,0),new n.Vector3(0,0,1)];case`y`:return[new n.Vector3(1,0,0),new n.Vector3(0,0,1)];case`z`:return[new n.Vector3(1,0,0),new n.Vector3(0,1,0)];default:return[]}})();for(let e of r){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 n.Raycaster,this._selected=null,this._boundObjs={};var r=this;this._$onClick=function(){r._onClick.apply(r,arguments)},this._$onDblClick=function(){r._onDblClick.apply(r,arguments)},this._$onMouseMove=function(){r._onMouseMove.apply(r,arguments)},this._$onMouseDown=function(){r._onMouseDown.apply(r,arguments)},this._$onMouseUp=function(){r._onMouseUp.apply(r,arguments)},this._$onTouchMove=function(){r._onTouchMove.apply(r,arguments)},this._$onTouchStart=function(){r._onTouchStart.apply(r,arguments)},this._$onTouchEnd=function(){r._onTouchEnd.apply(r,arguments)},this._$onContextmenu=function(){r._onContextmenu.apply(r,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,r,i){var a=this._boundObjs[e];if(!(a===void 0||a.length===0)){var o=this._filterVisibleObjects(a);if(o.length!==0){var s=new n.Vector2;s.set(t,r),this._raycaster.setFromCamera(s,this._camera);var c=this._raycaster.intersectObjects(o),l=this;c=c.filter(function(e){return l._isObjectVisible(e.object)}),c.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(c.length>0){var d,f,p,m=c[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,i,m),d&&this._notify(`mouseover`,h,i,m),f&&this._notify(`mouseout`,u,i,m)}}},$.prototype._onEvent=function(e,t,r,i){var a=this._boundObjs[e];if(!(a===void 0||a.length===0)){var o=this._filterVisibleObjects(a);if(o.length!==0){var s=new n.Vector2;s.set(t,r),this._raycaster.setFromCamera(s,this._camera);var c=this._raycaster.intersectObjects(o,!0),l=this;if(c=c.filter(function(e){return l._isObjectVisible(e.object)}),c.sort(function(e,t){var n=e.object.renderOrder||0,r=t.object.renderOrder||0;return n===r?e.distance-t.distance:r-n}),c.length!==0){for(var u=c[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,i,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 t.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,r={}){var i,a;if(!e){console.error(`Object3D is undefined`);return}if(this.objectHelperMap.has(e)){console.warn(`Object3DHelperPlugin: object3D ${e.name} already has helper`);return}let o=new Ot,s=[],c=(i=this.five.getElement())==null?void 0:i.parentElement;this.five.camera;let l=Object.assign(Object.assign({},{moveHelper:!0,rotateHelper:!0,boundingBoxHelper:!1,moveHelperTips:!1,positionFrom:`objectPosition`}),r),{moveHelper:u,rotateHelper:d,boundingBoxHelper:f}=l,p=new n.Group;l.helperOffset&&p.position.copy(l.helperOffset),this.five.scene.add(p);let m=o.hooks,h=new t.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(l.moveHelper)),l),n=new Y(e,Object.assign({container:c==null?void 0:c,moveTipsEnable:(a=l.moveHelperTips)==null?!1:a},t)),r=new yt(this.five,g,vt,e,n,t,m,h,p);v.moveController=r.helperController,s.push(()=>r.dispose())}if(_(d)){let t=Object.assign(Object.assign({},this.getConfig(l.rotateHelper)),l),n=new st(e,Object.assign({container:c==null?void 0:c},t)),r=new yt(this.five,g,xt,e,n,t,m,h,p);v.rotateController=r.helperController,s.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,s.push(()=>n.dispose())}return Object.values(v).forEach(e=>{e&&typeof e.updateOtherControllers==`function`&&e.updateOtherControllers(v)}),o.addControllers(v),this.objectHelperMap.set(e,{helper:o,disposers:s,helperGroup:p}),o.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.playing=!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 r=e.content.data.positionArray,i=r.length/3,a=.01,o=.1,s=new jt(a,o,1,0,1),c=new jt(a,o,1,0,1),l=new jt(a,o,1,0,1),u=new Float32Array(i);for(let e=0;e<i;e++)if(e===0)u[e]=0;else{let t=new n.Vector3(r[(e-1)*3],r[(e-1)*3+1],r[(e-1)*3+2]);u[e]=new n.Vector3(r[e*3],r[e*3+1],r[e*3+2]).distanceTo(t)+u[e-1]}for(let a=0;a<i;a++){let o=new n.Vector3(0,0,0),d=0;for(let e=a-5;e<a+6;e++)e>=0&&e<i&&(o.add(new n.Vector3(r[e*3],r[e*3+1],r[e*3+2])),d++);o.divideScalar(d).applyMatrix4(e.transform);let f=s.filter(o.x),p=c.filter(o.y),m=l.filter(o.z);t.push({position:new n.Vector3(f,p,m),location:u[a]})}return t}computeAABB2D(e){let t=1/0,r=-1/0,i=1/0,a=-1/0;for(let n of e)n.position.x<t&&(t=n.position.x),n.position.x>r&&(r=n.position.x),n.position.z<i&&(i=n.position.z),n.position.z>a&&(a=n.position.z);return{min:new n.Vector2(t,i),max:new n.Vector2(r,a)}}findClosestKeyframeToRay(e,t){let r=1/0,i=t[0].position.clone(),a=new n.Vector3;for(let n of t){e.closestPointToPoint(n.position,a);let t=a.distanceTo(n.position);t<r&&(r=t,i=n.position.clone())}return i}getCameraCurve(){return m(this,void 0,void 0,function*(){var e,r,i;let a=(i=(r=(e=this.five.model.viewLayers[0])==null?void 0:e.scene)==null?void 0:r.trajectories)==null?void 0:i[0];if(!a)throw Error(`未找到轨迹数据`);a.visible=!0,yield new Promise(e=>{let n=t.AnimationFrameLoop.shared.add(()=>{a.content.loadState===`READY`&&(n(),e(),a.visible=!1)})});let o=this.extractKeyframes(a);if(o.length<2)throw Error(`轨迹关键帧不足,至少需要2个关键帧`);this.keyframes=o;let s=this.computeAABB2D(o);this.boundingAABB=s;let c=this.curveHeight,l=new n.Vector3((s.min.x+s.max.x)/2,c,(s.min.y+s.max.y)/2),u=(s.max.x-s.min.x)/2,d=(s.max.y-s.min.y)/2,f=Math.sqrt(u*u+d*d),p=e=>{let t=new n.Vector3().subVectors(e,l);return t.length()<.001&&t.set(1,0,0),l.clone().add(t.normalize().multiplyScalar(f))},m=new n.Vector3(o[0].position.x,c,o[0].position.z),h=p(m),g=new n.Vector3().subVectors(l,m).normalize(),_=new n.Ray(m,g),v=new n.Vector3(-g.z,0,g.x).normalize(),y=new n.Ray(l,v),b=this.findClosestKeyframeToRay(y,o),x=p(new n.Vector3(b.x,c,b.z)),S=this.findClosestKeyframeToRay(_,o),C=p(new n.Vector3(S.x,c,S.z));return new n.CatmullRomCurve3([h,x,C],!1,`centripetal`,.5)})}findRenderMesh(){let e=null;if(this.five.scene.traverse(t=>{e||t instanceof n.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(),r=new n.Vector3(e.min.x,0,e.min.y),i=new n.Vector3(e.max.x,3,e.max.y);t.material.uniforms.u_aggregationBoundsMin.value.copy(r),t.material.uniforms.u_aggregationBoundsMax.value.copy(i),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 n=performance.now(),r=this.duration;this.cancelAnimation=t.AnimationFrameLoop.shared.add(()=>{let t=performance.now()-n,i=Math.min(t/r,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*(){if(!this.playing){this.playing=!0;try{let e=yield this.getCameraCurve(),r=this.boundingAABB,i=new n.Vector3((r.min.x+r.max.x)/2,this.curveHeight,(r.min.y+r.max.y)/2),a=e.getPointAt(0),o=new t.Camera(90).copy(this.five.camera);o.position.copy(a),o.lookAt(i),o.computePose(0),this.five.setState(Object.assign({},o.pose)),this.setBounds();let s=this.findRenderMesh().material.uniforms;s.u_aggregationEnabled.value=!0,s.u_aggregationProgress.value=0,s.u_aggregationPointDuration.value=Math.min(this.pointDuration/this.duration,1),this.five.needsRender=!0;let c=this.duration,l=performance.now();yield new Promise(n=>{this.cancelAnimation=t.AnimationFrameLoop.shared.add(()=>{let t=performance.now()-l,r=Math.min(t/c,1),a=r*r*(3-2*r);s.u_aggregationProgress.value=a,this.five.modelSceneNeedsRender=!0;let u=e.getPointAt(a);o.position.copy(u),o.lookAt(i),o.computePose(0),this.five.setState(Object.assign({},o.pose)),this.five.needsRender=!0,console.log(`playEntrance end`,r),r>=1&&(s.u_aggregationEnabled.value=!1,s.u_aggregationProgress.value=1,this.cancelAnimation&&(console.log(`cancelAnimation`),this.cancelAnimation(),this.cancelAnimation=null),n())})})}finally{this.playing=!1}}})}},Nt=(e,t)=>new Mt(e,t),Pt=class extends n.InstancedBufferGeometry{constructor(e,t){super(),this.prefabGeometry=e,this.copy(e),this.instanceCount=t,this.prefabCount=t}createAttribute(e,t,r){let i=new n.InstancedBufferAttribute(new Float32Array(this.prefabCount*t),t);if(this.setAttribute(e,i),r){let e=[];for(let t=0;t<this.prefabCount;t++)r(e,t,this.prefabCount),this.setPrefabData(i,t,e)}return i}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 n.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 r=new Uint32Array(this.prefabCount*t);this.setIndex(new n.BufferAttribute(r,1));for(let n=0;n<this.prefabCount;n++)for(let i=0;i<t;i++)r[n*t+i]=e[i]+n*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,r){let i=new n.BufferAttribute(new Float32Array(this.prefabCount*this.prefabVertexCount*t),t);if(this.setAttribute(e,i),r){let e=[];for(let t=0;t<this.prefabCount;t++)r(e,t,this.prefabCount),this.setPrefabData(i,t,e)}return i}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 n.BufferGeometry{constructor(e){super(),this.pointCount=e,this.bufferPositions()}bufferPositions(){this.createAttribute(`position`,3)}createAttribute(e,t,r){let i=new n.BufferAttribute(new Float32Array(this.pointCount*t),t);if(this.setAttribute(e,i),r){let e=[];for(let t=0;t<this.pointCount;t++)r(e,t,this.pointCount),this.setPointData(i,t,e)}return i}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]}};e.BackgroundPlugin=ue,Object.defineProperty(e,`BasePlugin`,{enumerable:!0,get:function(){return p}}),e.CSS2DObject=Fe,e.CSS2DPlugin=We,e.CSS2DRenderer=Ve,e.CSS3DObject=M,e.CSS3DPlugin=Pe,e.CSS3DRenderer=se,e.CSS3DSprite=ae,e.DynamicPathLinePlugin=ke,e.GaussianSplattingEntranceAnimationPlugin=Nt,e.InstancedPrefabBufferGeometry=Pt,e.ItemMaskPlugin=A,e.Object3DHelperController=kt,e.Object3DHelperPlugin=At,e.OrbitControls=j,e.OrientationPlugin=V,e.PanoAnimePlugin=xe,e.PointBufferGeometry=It,e.PrefabBufferGeometry=Ft,e.RoundedBoxGeometry=F,e.TrajectoryPlugin=U});
package/umd/five-react.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five
4
- * Generated: 5/8/2026
5
- * Version: 6.8.2
4
+ * Generated: 2026/5/11
5
+ * Version: 6.8.3
6
6
  * Terms:
7
7
  * Realsee SDK License Agreement
8
8
  * Update: July 28, 2021
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five
4
- * Generated: 5/8/2026
5
- * Version: 6.8.2
4
+ * Generated: 2026/5/11
5
+ * Version: 6.8.3
6
6
  * Terms:
7
7
  * Realsee SDK License Agreement
8
8
  * Update: July 28, 2021