@realsee/five 6.8.0-alpha.24 → 6.8.0-alpha.26
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.
- package/ai_guides/api.md +18 -8
- package/ai_guides/features/event.md +99 -8
- package/ai_guides/features/flowing-light-2d-pass.md +10 -6
- package/ai_guides/features/flowing-light-3d-pass.md +11 -6
- package/ai_guides/features/load-external-model.md +1 -0
- package/ai_guides/features/state.md +2 -2
- package/ai_guides/glossary.md +2 -2
- package/ai_guides/release_notes/6.8.md +1 -0
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/five.AdaptiveLuminancePass.html +1 -1
- package/docs/classes/five.BoundingMesh.html +1 -1
- package/docs/classes/five.Camera.html +1 -1
- package/docs/classes/five.EyeDomeLightingPass.html +1 -1
- package/docs/classes/five.Five.html +48 -48
- package/docs/classes/five.FivePass.html +1 -1
- package/docs/classes/five.InternalWebGLRenderer.html +1 -1
- package/docs/classes/five.Model.html +1 -1
- package/docs/classes/five.ModelScene.html +1 -1
- package/docs/classes/five.NetworkSubscribe.html +1 -1
- package/docs/classes/five.PBMContainer.html +1 -1
- package/docs/classes/five.PBMCustomShader.html +1 -1
- package/docs/classes/five.PBMGSObject.html +1 -1
- package/docs/classes/five.PBMGroup.html +1 -1
- package/docs/classes/five.PBMMesh.html +1 -1
- package/docs/classes/five.PBMMeshMaterial.html +1 -1
- package/docs/classes/five.PBMPanoFilter.html +1 -1
- package/docs/classes/five.PBMPointCloud.html +1 -1
- package/docs/classes/five.PBMPointCloudMaterial.html +1 -1
- package/docs/classes/five.PBMSkinnedMesh.html +1 -1
- package/docs/classes/five.PBMUpdateable.html +1 -1
- package/docs/classes/five.PanoCircleMesh.html +1 -1
- package/docs/classes/five.PanoCircleMeshCustom.html +1 -1
- package/docs/classes/five.PanoCircleMeshSolid.html +1 -1
- package/docs/classes/five.Parameter.html +1 -1
- package/docs/classes/five.Scene.html +1 -1
- package/docs/classes/five.Subscribe.html +1 -1
- package/docs/classes/five.Tile3D.html +1 -1
- package/docs/classes/five.TileNode.html +1 -1
- package/docs/classes/five.TrajectoryNode.html +1 -1
- package/docs/classes/five.WorkResolvedObserver.html +1 -1
- package/docs/classes/gltf-loader.DDSLoader.html +1 -1
- package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
- package/docs/classes/gltf-loader.GLTFLoader.html +1 -1
- package/docs/classes/gltf-loader.GLTFObject.html +1 -1
- package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
- package/docs/classes/line.Line.html +1 -1
- package/docs/classes/line.LineGeometry.html +1 -1
- package/docs/classes/line.LineMaterial.html +1 -1
- package/docs/classes/line.LineSegmentsGeometry.html +1 -1
- package/docs/classes/line.THREE_Line2.html +1 -1
- package/docs/classes/line.THREE_LineSegments2.html +1 -1
- package/docs/classes/plugins.BasePlugin.Controller.html +1 -1
- package/docs/classes/plugins.RoundedBoxGeometry.html +1 -1
- package/docs/classes/sticker.Sticker.html +1 -1
- package/docs/classes/vfx.Airflow.html +1 -1
- package/docs/classes/vfx.Flame.html +1 -1
- package/docs/classes/vfx.Particle.html +1 -1
- package/docs/classes/vfx.ParticleGPU.html +1 -1
- package/docs/classes/vfx.SpotLight.html +1 -1
- package/docs/documents/api.html +58 -8
- package/docs/documents/features_event.html +39 -6
- package/docs/documents/features_flowing-light-2d-pass.html +12 -109
- package/docs/documents/features_flowing-light-3d-pass.html +15 -117
- package/docs/documents/features_load-external-model.html +1 -0
- package/docs/documents/features_state.html +1 -1
- package/docs/documents/glossary.html +3 -3
- package/docs/documents/release_notes_6.8.html +1 -0
- package/docs/functions/plugins.GaussianSplattingEntranceAnimationPlugin.html +1 -0
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/five.AddableObject.html +1 -1
- package/docs/interfaces/five.AjaxOptions.html +1 -1
- package/docs/interfaces/five.BaseEvent.html +5 -5
- package/docs/interfaces/five.BaseExtendableEvent.html +11 -0
- package/docs/interfaces/five.EventCallback.html +45 -43
- package/docs/interfaces/five.FloorplanControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/five.GestureEvent.html +19 -19
- package/docs/interfaces/five.GesturePointer.html +9 -9
- package/docs/interfaces/five.ImageOptions.html +1 -1
- package/docs/interfaces/five.IntersectEvent.html +8 -8
- package/docs/interfaces/five.IntersectMesh.html +1 -1
- package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
- package/docs/interfaces/five.Intersection.html +1 -1
- package/docs/interfaces/five.LooseWorkWithExtrinsics.html +1 -1
- package/docs/interfaces/five.MapviewControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/five.ModeChangeEvent.html +7 -7
- package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ModelEvent.html +5 -5
- package/docs/interfaces/five.ModelSceneEvent.html +5 -5
- package/docs/interfaces/five.ModelTileEvent.html +5 -5
- package/docs/interfaces/five.MovePanoOptions.html +1 -1
- package/docs/interfaces/five.NetworkAbortError.html +1 -1
- package/docs/interfaces/five.NetworkFirbiddenError.html +1 -1
- package/docs/interfaces/five.NetworkOptions.html +1 -1
- package/docs/interfaces/five.NetworkProxyError.html +1 -1
- package/docs/interfaces/five.NetworkResourceEvent.html +5 -5
- package/docs/interfaces/five.NetworkResponseError.html +1 -1
- package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
- package/docs/interfaces/five.ObjectEvent.html +5 -5
- package/docs/interfaces/five.PBMMaterial.html +1 -1
- package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
- package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
- package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
- package/docs/interfaces/five.PanoEvent.html +13 -11
- package/docs/interfaces/five.PanoPrepareEvent.html +15 -0
- package/docs/interfaces/five.PanoTextureEvent.html +9 -9
- package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
- package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
- package/docs/interfaces/five.ParameterValue.html +1 -1
- package/docs/interfaces/five.Pose.html +1 -1
- package/docs/interfaces/five.RenderEvent.html +5 -5
- package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
- package/docs/interfaces/five.State.html +1 -1
- package/docs/interfaces/five.StateEvent.html +7 -7
- package/docs/interfaces/five.TextureOptions.html +1 -1
- package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +7 -7
- package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/five.ViewLayer.html +1 -1
- package/docs/interfaces/five.WorkCubeImage.html +1 -1
- package/docs/interfaces/five.WorkImage.html +1 -1
- package/docs/interfaces/five.WorkObserver.html +1 -1
- package/docs/interfaces/five.WorkObserverProto.html +1 -1
- package/docs/interfaces/five.WorkTile.html +1 -1
- package/docs/interfaces/five.WorksEvent.html +5 -5
- package/docs/interfaces/five.XRControllerEvent.html +8 -8
- package/docs/interfaces/five.XRControllerState.html +4 -4
- package/docs/interfaces/five.XRGestureEvent.html +11 -11
- package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/five.XRSessionEvent.html +7 -7
- package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
- package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.BasePlugin.State.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationController.html +44 -0
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.BoundingAABB2D.html +3 -0
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.Config.html +8 -0
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.EventMap.html +10 -0
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.Keyframe.html +3 -0
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.State.html +8 -0
- package/docs/interfaces/plugins.ItemMaskController.html +1 -1
- package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
- package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
- package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
- package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
- package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
- package/docs/interfaces/plugins.TrajectoryController.html +1 -1
- package/docs/interfaces/react.FiveInjectionTypes.html +13 -13
- package/docs/modules/five.html +1 -1
- package/docs/modules/plugins.GaussianSplattingEntranceAnimationPluginType.html +1 -0
- package/docs/modules/plugins.html +1 -1
- package/docs/types/five.ControllerEventTypes.html +22 -20
- package/docs/types/five.EventTypes.html +26 -26
- package/docs/types/five.ParseOptions.html +1 -1
- package/docs/types/plugins.BasePlugin.EventMap.html +1 -1
- package/docs/variables/five.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
- package/five/application/events.d.ts +1 -1
- package/five/application/five.d.ts +1 -1
- package/five/controllers/events.d.ts +3 -1
- package/five/controllers/panorama.d.ts +1 -1
- package/five/controllers/xrPanorama.d.ts +1 -1
- package/five/index.d.ts +1 -1
- package/five/index.js +64 -61
- package/five/index.mjs +1927 -1692
- package/five/model/loaders/glTF-helpers/extensions/KHR_gaussian_splatting.d.ts +8 -0
- package/five/model/loaders/glTF-helpers/extensions/KHR_gaussian_splatting_compression_spz.d.ts +4 -4
- package/five/model/loaders/glTF-helpers/extensions/base.d.ts +2 -1
- package/five/model/loaders/glTF-helpers/index.d.ts +2 -0
- package/five/model/loaders/glTF-helpers/parser.d.ts +2 -1
- package/five/utils/error.d.ts +1 -0
- package/five/utils/event.d.ts +14 -0
- package/gltf-loader/index.js +3 -3
- package/gltf-loader/index.mjs +3 -3
- package/line/index.js +3 -3
- package/line/index.mjs +3 -3
- package/package.json +1 -1
- package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.d.ts +30 -0
- package/plugins/GaussianSplattingEntranceAnimationPlugin/index.d.ts +5 -0
- package/plugins/GaussianSplattingEntranceAnimationPlugin/typing.d.ts +28 -0
- package/plugins/index.d.ts +1 -0
- package/plugins/index.js +10 -10
- package/plugins/index.mjs +164 -4
- package/react/index.js +2 -2
- package/react/index.mjs +2 -2
- package/shader-lib/index.js +2 -2
- package/shader-lib/index.mjs +2 -2
- package/sticker/index.js +3 -3
- package/sticker/index.mjs +3 -3
- package/umd/five-gltf-loader.js +3 -3
- package/umd/five-line.js +3 -3
- package/umd/five-plugins.js +10 -10
- package/umd/five-react.js +2 -2
- package/umd/five-shader-lib.js +2 -2
- package/umd/five-sticker.js +3 -3
- package/umd/five-vfx.js +2 -2
- package/umd/five-vue.js +2 -2
- package/umd/five.js +27 -24
- package/vfx/index.js +2 -2
- package/vfx/index.mjs +2 -2
- package/vue/index.js +2 -2
- package/vue/index.mjs +2 -2
- package/work-downloader/index.js +2 -2
- package/work-downloader/index.mjs +2 -2
package/umd/five.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
3
|
* @realsee/five
|
|
4
|
-
* Generated:
|
|
5
|
-
* Version: 6.8.0-alpha.
|
|
4
|
+
* Generated: 4/1/2026
|
|
5
|
+
* Version: 6.8.0-alpha.26
|
|
6
6
|
* Terms:
|
|
7
7
|
* Realsee SDK License Agreement
|
|
8
8
|
* Update: July 28, 2021
|
|
@@ -361,7 +361,7 @@ self.onmessage = function(event) {
|
|
|
361
361
|
}
|
|
362
362
|
postMessage({ id: packet.id, error: "type never matched." });
|
|
363
363
|
};
|
|
364
|
-
`,support=typeof Worker<`u`&&typeof Blob<`u`,lzmaWorkerURL=``;if(support)try{let e=new Blob([lzmaWorkerSource],{type:`text/javascript`});lzmaWorkerURL=URL.createObjectURL(e)}catch(e){}var LZMAWorker=class{constructor(){if(!support)throw Error(`LZMAWorker cannot work in this broswer.`);this.callCounter=0,this.requests={};let e=this.worker=new Worker(lzmaWorkerURL);e.onmessage=e=>{let{id:t,result:n,error:r}=e.data,o=this.getKey(t);this.requests[o]&&(r?this.requests[o](Error(r)):this.requests[o](null,n),delete this.requests[o])},e.onerror=e=>console.error(e)}getKey(e){return`key_`+String(e)}decompress(e,t){let n=++this.callCounter;this.requests[this.getKey(n)]=t,this.worker.postMessage({type:`decompress`,id:n,data:e},[e.buffer])}terminate(){this.worker.terminate()}};LZMAWorker.support=support;function readUint32(e){return Array.prototype.reduce.call(e,(e,t,n)=>e|t<<n*8,0)}function binaryArrays(e){let t=[],n=e.length;for(let o=0;o<n;o++){let n={data:e[o],offset:0,readByte(){return this.data[this.offset++]}},s=n.data.length,c={data:[],offset:0,writeByte(e){let t=Math.floor(this.offset/s);this.data[t]||(this.data[t]=new Uint8Array(s)),this.data[t][this.offset%s]=e,this.offset++}};LZMA.decompressFile(n,c);var r=new Uint8Array(c.offset);for(let e=0;e<c.offset;e++)r[e]=c.data[Math.floor(e/s)][e%s];t.push(r)}return t}function binaryArraysWithWorker(e){let t=[],n=e.length;for(let r=0;r<n;r++)t.push(new Promise((t,n)=>{let o=new LZMAWorker;o.decompress(e[r],(e,r)=>{if(o.terminate(),e)return n(e);t(r)})}));return Promise.all(t)}function lzma(e){let t=new Uint8Array(e),n=readUint32(t.slice(0,4));if(n>10)return Promise.reject(Error(`LZMA got too many sub chunks.`));let r=[],o=[],s=4+n*4;for(let e=0;e<n;e++)o[e]=readUint32(t.slice(4+e*4,8+e*4)),e===n-1?r[e]=t.subarray(s,s+o[e]):r[e]=t.slice(s,s+o[e]),s+=o[e];return LZMAWorker.support?binaryArraysWithWorker(r):Promise.resolve(binaryArrays(r))}function loadAt3d(e,t={}){var n,r,o,s,c,l,u;let d=(n=t.upAxis)==null?`Z`:n,f=(r=t.light)==null?!1:r,p=(o=t.fetcher)==null?internalFetcher:o,m=(s=t.onDownloadProgress)==null?noop:s,h=(c=t.textureBaseUri)==null?guessTextureBaseUriFromFileUrl(e):c,g=t.textureBaseUri===void 0?[]:((l=t.textureArray)==null?[]:l).slice(),_=autoRestImageOptionsByTextureLength((u=t.textureOptions)==null?{}:u,g.length),v=new Map;for(let e of g){let t=isAbsoluteURL(e)?e:pathJoin(h,e);v.set(t,loadTexture$1(t,_,p))}let y={byteLength:0};return Promise.resolve().then(()=>p.ajax(e,{responseType:`arraybuffer`},void 0,void 0,m)).then(e=>lzma(e.body)).then(e=>{let t={chunks:[],createAt:void 0,description:void 0};for(let n of e){let e=Model$2.decode(n);if(e.chunks.length){for(let n=0;n<e.chunks.length;n++)t.chunks.push(e.chunks[n]);t.createAt=e.createAt,t.description=e.description}}return t}).then(e=>parse$4(e,f,h,g,_,v,p)).then(t=>{v.clear();let n=new three.Group;n.name=e;for(let e of t.objects)n.add(e);return d===`Y`&&n.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`at3d`,modelUpAxis:`Z`,upAxis:d,uri:e,byteLength:y.byteLength,memoryUsage:getMemoryUsage(n),scene:n,textures:t.textures,animations:[],dispose:()=>t.dispose()}})}var $Reader=import_minimal.Reader,$util=import_minimal.util,$root=import_minimal.roots[`@REALSEE/FIVE:five/model/loaders/protobuf/dome.proto`]||(import_minimal.roots[`@REALSEE/FIVE:five/model/loaders/protobuf/dome.proto`]={}),Model$1=$root.Model=(()=>{function e(e){if(this.meshes=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.meshes=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Model;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.meshes&&o.meshes.length||(o.meshes=[]),o.meshes.push($root.Mesh.decode(e,e.uint32()));break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Model`},e})(),Mesh$1=$root.Mesh=(()=>{function e(e){if(this.chunks=[],this.matrix=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.name=``,e.prototype.chunks=$util.emptyArray,e.prototype.matrix=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Mesh;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.name=e.string();break;case 2:o.chunks&&o.chunks.length||(o.chunks=[]),o.chunks.push($root.Chunk.decode(e,e.uint32()));break;case 3:o.matrix&&o.matrix.length||(o.matrix=[]),o.matrix.push($root.Matrix.decode(e,e.uint32()));break;default:e.skipType(t&7);break}}if(!o.hasOwnProperty(`name`))throw $util.ProtocolError(`missing required 'name'`,{instance:o});return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Mesh`},e})(),Matrix=$root.Matrix=(()=>{function e(e){if(this.elements=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.elements=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Matrix;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.elements&&o.elements.length||(o.elements=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.elements.push(e.float())}else o.elements.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Matrix`},e})(),Chunk=$root.Chunk=(()=>{function e(e){if(this.material=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.geometry=null,e.prototype.material=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Chunk;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 2:o.geometry=$root.Geometry.decode(e,e.uint32());break;case 3:o.material&&o.material.length||(o.material=[]),o.material.push($root.Material.decode(e,e.uint32()));break;default:e.skipType(t&7);break}}if(!o.hasOwnProperty(`geometry`))throw $util.ProtocolError(`missing required 'geometry'`,{instance:o});return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Chunk`},e})(),Geometry=$root.Geometry=(()=>{function e(e){if(this.groups=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.position=null,e.prototype.uv=null,e.prototype.uv2=null,e.prototype.normal=null,e.prototype.groups=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Geometry;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.position=$root.Position.decode(e,e.uint32());break;case 2:o.uv=$root.UV.decode(e,e.uint32());break;case 3:o.uv2=$root.UV.decode(e,e.uint32());break;case 4:o.normal=$root.Normal.decode(e,e.uint32());break;case 5:o.groups&&o.groups.length||(o.groups=[]),o.groups.push($root.Group.decode(e,e.uint32()));break;default:e.skipType(t&7);break}}if(!o.hasOwnProperty(`position`))throw $util.ProtocolError(`missing required 'position'`,{instance:o});if(!o.hasOwnProperty(`normal`))throw $util.ProtocolError(`missing required 'normal'`,{instance:o});return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Geometry`},e})(),Position=$root.Position=(()=>{function e(e){if(this.array=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.array=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Position;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.array&&o.array.length||(o.array=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.array.push(e.float())}else o.array.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Position`},e})(),UV=$root.UV=(()=>{function e(e){if(this.array=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.array=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.UV;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.array&&o.array.length||(o.array=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.array.push(e.float())}else o.array.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/UV`},e})(),Normal=$root.Normal=(()=>{function e(e){if(this.array=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.array=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Normal;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.array&&o.array.length||(o.array=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.array.push(e.float())}else o.array.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Normal`},e})(),Group=$root.Group=(()=>{function e(e){if(e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.start=0,e.prototype.count=0,e.prototype.materialIndex=0,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Group;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.start=e.uint32();break;case 2:o.count=e.uint32();break;case 3:o.materialIndex=e.uint32();break;default:e.skipType(t&7);break}}if(!o.hasOwnProperty(`start`))throw $util.ProtocolError(`missing required 'start'`,{instance:o});if(!o.hasOwnProperty(`count`))throw $util.ProtocolError(`missing required 'count'`,{instance:o});if(!o.hasOwnProperty(`materialIndex`))throw $util.ProtocolError(`missing required 'materialIndex'`,{instance:o});return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Group`},e})(),Material=$root.Material=(()=>{function e(e){if(e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.kd=null,e.prototype.ks=null,e.prototype.ke=null,e.prototype.mapkd=``,e.prototype.mapks=``,e.prototype.mapke=``,e.prototype.norm=``,e.prototype.mapbump=``,e.prototype.bump=``,e.prototype.mapd=``,e.prototype.ns=0,e.prototype.d=0,e.prototype.tr=0,e.prototype.mapkdrepeat=``,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Material;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.kd=$root.Color.decode(e,e.uint32());break;case 2:o.ks=$root.Color.decode(e,e.uint32());break;case 3:o.ke=$root.Color.decode(e,e.uint32());break;case 4:o.mapkd=e.string();break;case 5:o.mapks=e.string();break;case 6:o.mapke=e.string();break;case 7:o.norm=e.string();break;case 8:o.mapbump=e.string();break;case 9:o.bump=e.string();break;case 10:o.mapd=e.string();break;case 11:o.ns=e.float();break;case 12:o.d=e.float();break;case 13:o.tr=e.float();break;case 14:o.mapkdrepeat=e.string();break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Material`},e})(),Color=$root.Color=(()=>{function e(e){if(this.rgb=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.rgb=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Color;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.rgb&&o.rgb.length||(o.rgb=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.rgb.push(e.float())}else o.rgb.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Color`},e})();function loadDome(e,t={}){var n,r,o;let s=(n=t.upAxis)==null?`Z`:n,c=(r=t.fetcher)==null?internalFetcher:r,l=(o=t.onDownloadProgress)==null?noop:o,u={byteLength:0};return Promise.resolve().then(()=>c.ajax(e,{responseType:`arraybuffer`},void 0,void 0,l)).then(e=>{var n,r;return u.byteLength=e.body.byteLength,parse$3(new Uint8Array(e.body),(n=t.light)==null?!0:n,t.textureBaseUri||``,(r=t.textureOptions)==null?{}:r,c)}).then(t=>{let n=new three.Group;n.matrixAutoUpdate=!1,s===`Z`&&n.applyMatrix4(ROTATE_X_MATRIX$1),n.matrix.compose(n.position,n.quaternion,n.scale),n.name=e;for(let e of t.objects)n.add(e);return{type:`dome`,modelUpAxis:`Y`,upAxis:s,uri:e,byteLength:u.byteLength,memoryUsage:getMemoryUsage(n),scene:n,textures:t.textures,animations:[],dispose:()=>t.dispose()}})}function flipBufferGeometryNormals(e){let t=[0,0,0];for(let n=0;n<e.attributes.normal.array.length/9;n++)t[0]=e.attributes.normal.array[n*9],t[1]=e.attributes.normal.array[n*9+1],t[2]=e.attributes.normal.array[n*9+2],e.attributes.normal.array[n*9]=e.attributes.normal.array[n*9+6],e.attributes.normal.array[n*9+1]=e.attributes.normal.array[n*9+7],e.attributes.normal.array[n*9+2]=e.attributes.normal.array[n*9+8],e.attributes.normal.array[n*9+6]=t[0],e.attributes.normal.array[n*9+7]=t[1],e.attributes.normal.array[n*9+8]=t[2];for(let n=0;n<e.attributes.position.array.length/9;n++)t[0]=e.attributes.position.array[n*9],t[1]=e.attributes.position.array[n*9+1],t[2]=e.attributes.position.array[n*9+2],e.attributes.position.array[n*9]=e.attributes.position.array[n*9+6],e.attributes.position.array[n*9+1]=e.attributes.position.array[n*9+7],e.attributes.position.array[n*9+2]=e.attributes.position.array[n*9+8],e.attributes.position.array[n*9+6]=t[0],e.attributes.position.array[n*9+7]=t[1],e.attributes.position.array[n*9+8]=t[2];for(let n=0;n<e.attributes.uv.array.length/6;n++)t[0]=e.attributes.uv.array[n*6],t[1]=e.attributes.uv.array[n*6+1],e.attributes.uv.array[n*6]=e.attributes.uv.array[n*6+4],e.attributes.uv.array[n*6+1]=e.attributes.uv.array[n*6+5],e.attributes.uv.array[n*6+4]=t[0],e.attributes.uv.array[n*6+5]=t[1];e.attributes.normal.needsUpdate=!0,e.attributes.position.needsUpdate=!0,e.attributes.uv.needsUpdate=!0}function parseGeometry({position:e,normal:t,uv:n,uv2:r,groups:o}){let s=new three.BufferGeometry;s.setAttribute(`position`,new three.BufferAttribute(new Float32Array(e.array),3)),t&&s.setAttribute(`normal`,new three.BufferAttribute(new Float32Array(t.array),3)),n&&s.setAttribute(`uv`,new three.BufferAttribute(new Float32Array(n.array),2)),r&&s.setAttribute(`uv2`,new three.BufferAttribute(new Float32Array(r.array),2));for(let e of o)s.addGroup(e.start,e.count,e.materialIndex);return s}function loadTexture(e,t,n,r,o,s,c){if(c.hasOwnProperty(e))return c[e];e=e.split(`?`)[0],isAbsoluteURL(e)||(e=pathJoin(t,e)),e=e.replace(/\/\/vrlab-image\d*.ljcdn.com\//,`//vrlab-public.ljcdn.com/`),e.indexOf(`//`)===0&&(e=`https:`+e);let l=Object.assign({key:`texture.dome`,size:64},pick(n,[`quality`,`format`,`sharpen`,`forceUseExifOrientation`,`mappings`]));return c[e]=o.loadTexture(e,{imageURL:{transform:n.transform,options:l},wrapS:three.RepeatWrapping,wrapT:three.RepeatWrapping,fetcher:s}).then(e=>{let t=e.body;return r&&t.repeat.copy(r),t.needsUpdate=!0,t.updateMatrix(),t})}function parseMaterial(e,t,n,r,o,s,c,l,u){let d=[],f=new PBMMeshMaterial(t?`phong`:`basic`);if(l.add(f),e.kd&&(f.color=new three.Color().fromArray(e.kd.rgb).convertLinearToSRGB()),e.mapkd){let t=null;if(e.mapkdrepeat){let[n,r]=e.mapkdrepeat.split(/\s+/).map(e=>Number(e));t=new three.Vector2(n,r)}d.push(loadTexture(e.mapkd,n,r,t,o,s,c).then(e=>{e.encoding=three.sRGBEncoding,f.map=e,l.add(e),u.add(e),f.needsUpdate=!0}).catch(noop))}if(e.ks&&(f.specular=new three.Color().fromArray(e.ks.rgb).convertLinearToSRGB()),e.mapks&&d.push(loadTexture(e.mapks,n,r,null,o,s,c).then(e=>{f.specularMap=e,l.add(e),u.add(e)}).catch(noop)),e.ke&&(f.emissive=new three.Color().fromArray(e.ke.rgb).convertLinearToSRGB()),e.mapke&&d.push(loadTexture(e.mapke,n,r,null,o,s,c).then(e=>{e.encoding=three.sRGBEncoding,f.emissiveMap=e,l.add(e),u.add(e)}).catch(noop)),e.norm&&d.push(loadTexture(e.norm,n,r,null,o,s,c).then(e=>{f.normalMap=e,l.add(e),u.add(e)}).catch(noop)),e.mapbump&&d.push(loadTexture(e.mapbump,n,r,null,o,s,c).then(e=>{f.bumpMap=e,l.add(e),u.add(e)}).catch(noop)),e.bump&&d.push(loadTexture(e.bump,n,r,null,o,s,c).then(e=>{f.bumpMap=e,l.add(e),u.add(e)}).catch(noop)),typeof e.ns==`number`&&(f.shininess=e.ns),typeof e.d==`number`){let t=e.d;t>0&&t<1&&(f.opacity=t)}return f.floorIndex=0,{material:f,textureReady:Promise.all(d).then(noop)}}function fromProtoBuf(e){return Model$1.decode(e).meshes}function parse$3(e,t,n,r,o){let s=[],c=[],l=new Set,u=fromProtoBuf(e),d=new TextureLoader,f=new three.Matrix4,p=new three.Vector3,m=new three.Quaternion,h=new three.Vector3,g={},_=new Set;for(let{name:e,chunks:v,matrix:y}of u)if(!(e===`Ceiling`||e===`CeilingDrop`))for(let u of y){f.elements=u.elements;let y=new three.Group;for(let e=0;e<v.length;e++){let s=parseGeometry(v[e].geometry);s.applyMatrix4(f),f.decompose(p,m,h),h.x*h.y*h.z<0&&s.attributes.normal&&s.attributes.position&&s.attributes.uv&&flipBufferGeometryNormals(s),l.add(s);let u=[];for(let s of v[e].material){let{material:e,textureReady:f}=parseMaterial(s,t,n||``,r,d,o,g,l,_);c.push(f),u.push(e)}let b=new PBMMesh(s,u);b.name=`chunk_`+e,b.matrix.compose(b.position,b.quaternion,b.scale),b.matrixAutoUpdate=!1,b.frustumCulled=!1,y.add(b)}y.name=e,s.push(y)}return Promise.all(c).catch(noop).then(()=>({createAt:0,description:``,objects:s,textures:Array.from(_),dispose:()=>{l.forEach(e=>{e.dispose()}),l.clear()}}))}function loadDomez(e,t={}){var n,r,o;let s=(n=t.upAxis)==null?`Z`:n,c=(r=t.fetcher)==null?internalFetcher:r,l=(o=t.onDownloadProgress)==null?noop:o,u={byteLength:0};return Promise.resolve().then(()=>c.ajax(e,{responseType:`arraybuffer`},void 0,void 0,l)).then(e=>(u.byteLength=e.body.byteLength,lzma(e.body))).then(e=>{let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;return e.forEach(e=>{n.set(e,r),r+=e.length}),n}).then(e=>{var n,r;return parse$3(e,(n=t.light)==null?!0:n,t.textureBaseUri||``,(r=t.textureOptions)==null?{}:r,c)}).then(t=>{let n=new three.Group;n.matrixAutoUpdate=!1,s===`Z`&&n.applyMatrix4(ROTATE_X_MATRIX$1),n.matrix.compose(n.position,n.quaternion,n.scale),n.name=e;for(let e of t.objects)n.add(e);return{type:`domez`,modelUpAxis:`Y`,upAxis:`Z`,uri:e,byteLength:u.byteLength,memoryUsage:getMemoryUsage(n),scene:n,textures:t.textures,animations:[],dispose:()=>t.dispose()}})}var SIZEOF_UINT32$1=4;function parseHeader$1(e,t,n){let r=new DataView(t);if(e.magic=r.getUint32(n,!0),n+=SIZEOF_UINT32$1,e.version=r.getUint32(n,!0),n+=SIZEOF_UINT32$1,e.byteLength=r.getUint32(n,!0),n+=SIZEOF_UINT32$1,e.version!==1)throw Error(`3D Tile Version ${e.version} not supported`);return n}var GL_TYPE;(function(e){e[e.BYTE=5120]=`BYTE`,e[e.UNSIGNED_BYTE=5121]=`UNSIGNED_BYTE`,e[e.SHORT=5122]=`SHORT`,e[e.UNSIGNED_SHORT=5123]=`UNSIGNED_SHORT`,e[e.INT=5124]=`INT`,e[e.UNSIGNED_INT=5125]=`UNSIGNED_INT`,e[e.FLOAT=5126]=`FLOAT`,e[e.DOUBLE=5130]=`DOUBLE`})(GL_TYPE||(GL_TYPE={}));var GL_TYPE_TO_ARRAY_TYPE={[GL_TYPE.DOUBLE]:Float64Array,[GL_TYPE.FLOAT]:Float32Array,[GL_TYPE.UNSIGNED_SHORT]:Uint16Array,[GL_TYPE.UNSIGNED_INT]:Uint32Array,[GL_TYPE.UNSIGNED_BYTE]:Uint8Array,[GL_TYPE.BYTE]:Int8Array,[GL_TYPE.SHORT]:Int16Array,[GL_TYPE.INT]:Int32Array},NAME_TO_GL_TYPE={DOUBLE:GL_TYPE.DOUBLE,FLOAT:GL_TYPE.FLOAT,UNSIGNED_SHORT:GL_TYPE.UNSIGNED_SHORT,UNSIGNED_INT:GL_TYPE.UNSIGNED_INT,UNSIGNED_BYTE:GL_TYPE.UNSIGNED_BYTE,BYTE:GL_TYPE.BYTE,SHORT:GL_TYPE.SHORT,INT:GL_TYPE.INT};function getArrayType(e){let t=GL_TYPE_TO_ARRAY_TYPE[e];if(!t)throw Error(`Failed to convert GL type`);return t}function getByteSize(e){return getArrayType(e).BYTES_PER_ELEMENT}function createTypedArray(e,t,n=0,r){let o=getArrayType(e);return n%getByteSize(e)===0?new o(t,n,r==null?(t.byteLength-n)/getByteSize(e):r):new o(r?t.slice(n,n+r*getByteSize(e)):t.slice(n))}function glTypeFromName(e){let t=NAME_TO_GL_TYPE[e];if(!t)throw Error(`Failed to convert GL type`);return t}var FeatureTable=class{constructor(e,t){this.featuresLength=0,this.cachedTypedArrays={},this.json=e,this.buffer=t;let n=this.getGlobalProperty(`POINTS_LENGTH`,GL_TYPE.UNSIGNED_INT,1);n&&n.length&&(this.featuresLength=n[0])}getExtension(e){return this.json.extensions&&this.json.extensions[e]}hasProperty(e){return!!this.json[e]}getGlobalProperty(e,t,n){let r=this.json[e];return typeof r==`number`?new(getArrayType(t))([r]):Array.isArray(r)?new(getArrayType(t))(r):r&&Number.isFinite(r.byteOffset)?this.getTypedArrayFromBinary(e,t,n,1,r.byteOffset):null}getPropertyArray(e,t,n){let r=this.json[e];return r&&Number.isFinite(r.byteOffset)?(`componentType`in r&&(t=glTypeFromName(r.componentType)),this.getTypedArrayFromBinary(e,t,n,this.featuresLength,r.byteOffset)):this.getTypedArrayFromArray(e,t,r)}getProperty(e,t,n,r,o){if(!this.json[e])return null;let s=this.getPropertyArray(e,t,n);if(n===1)return o[0]=s[r],o;for(let e=0;e<n;++e)o[e]=s[n*r+e];return o}getTypedArrayFromBinary(e,t,n,r,o){let s=this.cachedTypedArrays,c=s[e];return c||(c=createTypedArray(t,this.buffer.buffer,this.buffer.byteOffset+o,r*n),s[e]=c),c}getTypedArrayFromArray(e,t,n){let r=this.cachedTypedArrays,o=r[e];return o||(o=createTypedArray(t,n),r[e]=o),o}},SIZEOF_UINT32=4,DEPRECATION_WARNING=`b3dm tile in legacy format.`;function getStringFromArrayBuffer(e,t,n){let r=new TextDecoder(`utf8`),o=new Uint8Array(e,t,n);return r.decode(o)}function parseTable(e,t,n){return n=parseTablesHeader(e,t,n),n=parseFeatureTable(e,t,n),n=parseBatchTable(e,t,n),n}function parseTablesHeader(e,t,n){let r=new DataView(t),o=0;e.header=e.header||{};let s=r.getUint32(n,!0);n+=SIZEOF_UINT32;let c=r.getUint32(n,!0);n+=SIZEOF_UINT32;let l=r.getUint32(n,!0);n+=SIZEOF_UINT32;let u=r.getUint32(n,!0);return n+=SIZEOF_UINT32,l>=570425344?(n-=SIZEOF_UINT32*2,o=s,l=c,u=0,s=0,c=0,console.warn(DEPRECATION_WARNING)):u>=570425344&&(n-=SIZEOF_UINT32,o=l,l=s,u=c,s=0,c=0,console.warn(DEPRECATION_WARNING)),e.header.featureTableJsonByteLength=s,e.header.featureTableBinaryByteLength=c,e.header.batchTableJsonByteLength=l,e.header.batchTableBinaryByteLength=u,e.header.batchLength=o,n}function parseFeatureTable(e,t,n){let{featureTableJsonByteLength:r,featureTableBinaryByteLength:o,batchLength:s}=e.header||{};if(e.featureTableJson={BATCH_LENGTH:s||0},r&&r>0){let o=getStringFromArrayBuffer(t,n,r);e.featureTableJson=JSON.parse(o)}n+=r||0,e.featureTableBinary=new Uint8Array(t,n,o),n+=o||0;let c=new FeatureTable(e.featureTableJson,e.featureTableBinary);if(Array.isArray(c.json.RTC_CENTER)){let t=c.json.RTC_CENTER;e.rtcCenter=[t[0],t[1],t[2]]}else{let t=c.getGlobalProperty(`RTC_CENTER`,GL_TYPE.FLOAT,3);t&&(e.rtcCenter=[t[0],t[1],t[2]])}return n}function parseBatchTable(e,t,n){let{batchTableJsonByteLength:r,batchTableBinaryByteLength:o}=e.header||{};if(r&&r>0){let s=getStringFromArrayBuffer(t,n,r);e.batchTableJson=JSON.parse(s),n+=r,o&&o>0&&(e.batchTableBinary=new Uint8Array(t,n,o),e.batchTableBinary=new Uint8Array(e.batchTableBinary),n+=o)}return n}function sliceArrayBuffer(e,t,n){let r=n===void 0?new Uint8Array(e).subarray(t):new Uint8Array(e).subarray(t,t+n);return new Uint8Array(r).buffer}function parseGlTFArrayBuffer(e,t,n){let r=e.byteLength-n;if(r===0)throw Error(`glTF byte length must be greater than 0.`);return n%4!=0&&console.warn(`${e.type}: embedded glb is not aligned to a 4-byte boundary.`),e.gltfArrayBuffer=sliceArrayBuffer(t,n,r),e.byteLength}function decodeText(e){if(typeof TextDecoder<`u`)return new TextDecoder().decode(e);let t=``;for(let n=0,r=e.length;n<r;n++)t+=String.fromCharCode(e[n]);try{return decodeURIComponent(escape(t))}catch(e){return t}}var WEBGL_CONSTANTS={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},WEBGL_COMPONENT_TYPES={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},WEBGL_FILTERS={9728:three.NearestFilter,9729:three.LinearFilter,9984:three.NearestMipmapNearestFilter,9985:three.LinearMipmapNearestFilter,9986:three.NearestMipmapLinearFilter,9987:three.LinearMipmapLinearFilter},WEBGL_WRAPPINGS={33071:three.ClampToEdgeWrapping,33648:three.MirroredRepeatWrapping,10497:three.RepeatWrapping},WEBGL_TYPE_SIZES={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ATTRIBUTES={POSITION:`position`,NORMAL:`normal`,TANGENT:`tangent`,TEXCOORD_0:`uv`,TEXCOORD_1:`uv2`,TEXCOORD_2:`uv3`,TEXCOORD_3:`uv4`,COLOR_0:`color`,WEIGHTS_0:`skinWeight`,JOINTS_0:`skinIndex`},PATH_PROPERTIES={scale:`scale`,translation:`position`,rotation:`quaternion`,weights:`morphTargetInfluences`},INTERPOLATION={CUBICSPLINE:void 0,LINEAR:three.InterpolateLinear,STEP:three.InterpolateDiscrete},ALPHA_MODES={OPAQUE:`OPAQUE`,MASK:`MASK`,BLEND:`BLEND`};function values(e){let t=[];for(let n in e)t.push(e[n]);return t}function composeDsiposeSet(e){let t=Array.from(e);return()=>{for(let e of t)typeof e.dispose==`function`&&e.dispose(),typeof e.close==`function`&&e.close()}}var Parser=class{constructor(e,t,n){if(this.json=e,this.json.materials){let e=new Set;for(let t of this.json.materials){if(typeof t.name!=`string`)continue;let n=0;for(;t.name;){let r=t.name+(n>0?`__${n}`:``);if(!e.has(r)){e.add(r),t.name=r;break}console.warn(`glTF: material name "${t.name}" duplicated.`),n++}}e.clear()}if(this.json.nodes){let e=new Set;for(let t of this.json.nodes){if(typeof t.name!=`string`)continue;let n=0;for(;t.name;){let r=t.name+(n>0?`__${n}`:``);if(!e.has(r)){e.add(r),t.name=r;break}console.warn(`glTF: node name "${t.name}" duplicated.`),n++}}e.clear()}this.extensions=t,this.options=n,this.cache=new Map,this.disposeSet=new Set,this.textureSet=new Set,this.nodeNamesUsed={}}dispose(){this.cache.clear(),this.disposeSet.forEach(e=>{typeof e.dispose==`function`&&e.dispose(),typeof e.close==`function`&&e.close()}),this.disposeSet.clear(),this.textureSet.clear(),this.extensions={},this.json={asset:{version:`unknown`}}}markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n<r;n++){let r=t[n].joints;for(let t=0,n=r.length;t<n;t++)e[r[t]].isBone=!0}for(let t=0,r=e.length;t<r;t++){let r=e[t];r.mesh!==void 0&&r.skin!==void 0&&(n[r.mesh].isSkinnedMesh=!0)}}parse(){let e=this.json,t=this.extensions;this.markDefs();for(let e of values(t))e.markDefs(this);return Promise.all(values(t).map(e=>e.prepare(this))).then(()=>{var t,n,r;return Promise.all([Promise.all(((t=e.scenes)==null?[]:t).map((e,t)=>this.loadScene(t))),Promise.all(((n=e.cameras)==null?[]:n).map((e,t)=>this.loadCamera(t))),Promise.all(((r=e.animations)==null?[]:r).map((e,t)=>this.loadAnimation(t)))])}).then(([t,n,r])=>({json:e,scene:t[e.scene||0],scenes:t,animations:r,cameras:n,textures:[],dispose:noop})).then(e=>Promise.all(values(t).map(t=>t.emitResult(e,this))).then(()=>e)).then(e=>{let t=Array.from(this.textureSet),n=composeDsiposeSet(this.disposeSet);return Object.assign(e,{textures:t,dispose:n}),this.textureSet.clear(),this.disposeSet.clear(),this.dispose(),e})}loadCamera(e){let t=`camera:`+e,n=this.cache.get(t);if(n)return n;let r=null;for(let t of values(this.extensions))if(r=t.loadCamera(e,this),r)break;if(!r){let t,n=this.json.cameras[e],o=n[n.type];o?n.type===`perspective`?t=new three.PerspectiveCamera(three.MathUtils.radToDeg(o.yfov),o.aspectRatio||1,o.znear||1,o.zfar||2e6):n.type===`orthographic`?t=new three.OrthographicCamera(-o.xmag,o.xmag,o.ymag,-o.ymag,o.znear,o.zfar):(console.warn(`glTF: Invalid camera type ${n.type}.`),t=new three.Camera):(console.warn(`glTF: Missing camera parameters.`),t=new three.Camera),n.name&&(t.name=n.name),r=Promise.resolve(t)}return this.cache.set(t,r),r}loadSkin(e){let t=`skin:`+e,n=this.cache.get(t);if(n)return n;let r,o=this.json.skins[e],s={joints:o.joints};return r=o.inverseBindMatrices===void 0?Promise.resolve(s):this.loadAccessor(o.inverseBindMatrices).then(e=>(e&&(s.inverseBindMatrices=e),s)),this.cache.set(t,r),r}loadAnimation(e){var t;let n=`animation:`+e,r=this.cache.get(n);if(r)return r;let o=null;for(let t of values(this.extensions))if(o=t.loadAnimation(e,this),o)break;if(!o){let n=this.json.animations[e],r=n.name?n.name:`animation_`+e,s=[],c=[],l=[],u=[],d=[];for(let e=0,r=n.channels.length;e<r;e++){let r=n.channels[e],o=n.samplers[r.sampler],f=r.target,p=f.node===void 0?f.id:f.node,m=n.parameters===void 0?o.input:n.parameters[o.input],h=n.parameters===void 0?o.output:n.parameters[o.output],g=(t=f.extensions)==null?{}:t;if(f.path===`pointer`&&g.KHR_animation_pointer&&g.KHR_animation_pointer.pointer&&/^\/nodes\/\d+\//.test(g.KHR_animation_pointer.pointer)){let e=g.KHR_animation_pointer.pointer.slice(1).split(`/`),t=Number(e[1]);s.push(this.loadNode(t))}else p===void 0?s.push(Promise.resolve(null)):s.push(this.loadNode(p));c.push(this.loadAccessor(m)),l.push(this.loadAccessor(h)),u.push(o),d.push(f)}o=Promise.all([Promise.all(s),Promise.all(c),Promise.all(l),Promise.all(u),Promise.all(d)]).then(([e,t,n,o,s])=>{var c;let l=[];for(let r=0,u=e.length;r<u;r++){let u=e[r],d=t[r],f=n[r],p=o[r],m=s[r];u&&(u.updateMatrix(),u.matrixAutoUpdate=!0);let h=f.array;if(f.normalized){let e=getNormalizedComponentScale(h.constructor),t=new Float32Array(h.length);for(let n=0,r=h.length;n<r;n++)t[n]=h[n]*e;h=t}let g=p.interpolation===void 0?three.InterpolateLinear:INTERPOLATION[p.interpolation],_=(c=m.extensions)==null?{}:c;if(_.KHR_animation_pointer&&m.path&&m.path===`pointer`){let e=_.KHR_animation_pointer.pointer;if(e.indexOf(`/nodes/`)===0){let t=e.match(/^\/nodes\/(\d+)\/(.+)/);if(!t)continue;Number(t[1]);let n=t[2],r;switch(n){case`weights`:n=`morphTargetInfluences`,r=three.NumberKeyframeTrack;break;case`rotation`:n=`quaternion`,r=three.QuaternionKeyframeTrack;break;case`translation`:n=`position`,r=three.VectorKeyframeTrack;break;case`scale`:n=`scale`,r=three.VectorKeyframeTrack;break;case`extensions/KHR_node_visibility/visible`:n=`visible`,r=three.BooleanKeyframeTrack;break;default:break}if(!r)continue;let o=[];if(u){let e=u.name?u.name:u.uuid;n===`morphTargetInfluences`?u.traverse(e=>{e.morphTargetInfluences&&o.push(e.name?e.name:e.uuid)}):o.push(e)}for(let e=0,t=o.length;e<t;e++){let t=new r(`.nodes.${o[e]}.${n}`,d.array,r===three.BooleanKeyframeTrack?Array.from(h).map(e=>e>0):h,g);l.push(t)}}else if(e.indexOf(`/materials/`)===0){let t=e.match(/^\/materials\/(\d+)\/(.+)/);if(!t)continue;let n=Number(t[1]),r=t[2],o=this.json.materials[n].name,s;switch(r){case`pbrMetallicRoughness/baseColorFactor`:r=`color`,s=three.ColorKeyframeTrack;break;case`pbrMetallicRoughness/roughnessFactor`:r=`roughness`,s=three.NumberKeyframeTrack;break;case`pbrMetallicRoughness/metallicFactor`:r=`metalness`,s=three.NumberKeyframeTrack;break;case`emissiveFactor`:r=`emissive`,s=three.NumberKeyframeTrack;break;case`alphaCutoff`:r=`alphaTest`,s=three.NumberKeyframeTrack;break;case`occlusionTexture/strength`:r=`aoMapIntensity`,s=three.NumberKeyframeTrack;break;case`normalTexture/scale`:r=`normalScale`,s=three.VectorKeyframeTrack;break;case`pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale`:r=`map.repeat`,s=three.VectorKeyframeTrack;break;case`pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset`:r=`map.offset`,s=three.VectorKeyframeTrack;break;case`pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/rotation`:r=`map.rotation`,s=three.NumberKeyframeTrack;break;case`normalTexture/extensions/KHR_texture_transform/scale`:r=`normalMap.repeat`,s=three.VectorKeyframeTrack;break;case`normalTexture/extensions/KHR_texture_transform/offset`:r=`normalMap.offset`,s=three.VectorKeyframeTrack;break;case`normalTexture/extensions/KHR_texture_transform/rotation`:r=`normalMap.rotation`,s=three.NumberKeyframeTrack;break;case`emissiveTexture/extensions/KHR_texture_transform/scale`:r=`emissiveMap.repeat`,s=three.VectorKeyframeTrack;break;case`emissiveTexture/extensions/KHR_texture_transform/offset`:r=`emissiveMap.offset`,s=three.VectorKeyframeTrack;break;case`emissiveTexture/extensions/KHR_texture_transform/rotation`:r=`emissiveMap.rotation`,s=three.NumberKeyframeTrack;break;case`occlusionTexture/extensions/KHR_texture_transform/scale`:r=`aoMap.repeat`,s=three.VectorKeyframeTrack;break;case`occlusionTexture/extensions/KHR_texture_transform/offset`:r=`aoMap.offset`,s=three.VectorKeyframeTrack;break;case`occlusionTexture/extensions/KHR_texture_transform/rotation`:r=`aoMap.rotation`,s=three.NumberKeyframeTrack;break;case`extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/scale`:r=`clearcoatNormalMap.scale`,s=three.NumberKeyframeTrack;break;case`extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/offset`:r=`clearcoatNormalMap.offset`,s=three.VectorKeyframeTrack;break;case`extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/rotation`:r=`clearcoatNormalMap.rotation`,s=three.NumberKeyframeTrack;break;default:break}if(!s)continue;let c=new s(`.materials.${o}.${r}`,d.array,h,g);if(l.push(c),r===`color`&&f.itemSize===4){let e=new Float32Array(h.length/4);for(let t=0,n=h.length/4;t<n;t+=1)e[t]=h[t*4+3];let t=new three.NumberKeyframeTrack(`.materials.${o}.opacity`,d.array,e,g);l.push(t)}}else if(e.indexOf(`/cameras/`)===0){let t=e.match(/^\/cameras\/(\d+)\/(.+)/);if(!t)continue;let n=Number(t[1]),r=t[2],o=this.json.cameras[n].name,s;switch(r){case`perspective/yfov`:r=`fov`,s=three.NumberKeyframeTrack;break;case`perspective/znear`:case`orthographic/znear`:r=`near`,s=three.NumberKeyframeTrack;break;case`perspective/zfar`:case`orthographic/zfar`:r=`far`,s=three.NumberKeyframeTrack;break;case`perspective/aspect`:r=`aspect`,s=three.NumberKeyframeTrack;break;default:break}if(!s)continue;let c=new s(`.cameras.${o}.${r}`,d.array,h,g);l.push(c)}}else{let e;switch(PATH_PROPERTIES[m.path]){case PATH_PROPERTIES.weights:e=three.NumberKeyframeTrack;break;case PATH_PROPERTIES.rotation:e=three.QuaternionKeyframeTrack;break;case PATH_PROPERTIES.position:case PATH_PROPERTIES.scale:default:e=three.VectorKeyframeTrack;break}let t=[];if(u){let e=u.name?u.name:u.uuid;PATH_PROPERTIES[m.path]===PATH_PROPERTIES.weights?u.traverse(e=>{e.morphTargetInfluences&&t.push(e.name?e.name:e.uuid)}):t.push(e)}let n=f.array;if(f.normalized){let e=getNormalizedComponentScale(n.constructor),t=new Float32Array(n.length);for(let r=0,o=n.length;r<o;r++)t[r]=n[r]*e;n=t}for(let r=0,o=t.length;r<o;r++){let o=new e(t[r]+`.`+PATH_PROPERTIES[m.path],d.array,n,g);l.push(o)}}}return new three.AnimationClip(r,void 0,l)})}return this.cache.set(n,o),o}loadBuffer(e){let t=this.json.buffers[e];if(t.type&&t.type!==`arraybuffer`)throw Error(`glTF: `+t.type+` buffer type is not supported.`);let n=`buffer:`+e,r=this.cache.get(n);if(r)return r;let o=null;for(let t of values(this.extensions))if(o=t.loadBuffer(e,this),o)break;if(!o){let t=this.json.buffers[e];o=this.options.fetcher.ajax(this.resolveResouce(t.uri),{responseType:`arraybuffer`}).then(e=>e.body)}return this.cache.set(n,o),o}loadBufferView(e){let t=`bufferView:`+e,n=this.cache.get(t);if(n)return n;let r=null;for(let t of values(this.extensions))if(r=t.loadBufferView(e,this),r)break;if(!r){let t=this.json.bufferViews[e];r=this.loadBuffer(t.buffer).then(e=>{let n=t.byteLength||0,r=t.byteOffset||0;return e.slice(r,r+n)})}return this.cache.set(t,r),r}loadAccessor(e){let t=`accessor:`+e,n=this.cache.get(t);if(n)return n;let r=null;if(!r){let t=this.json.accessors[e];if(t.bufferView===void 0&&t.sparse===void 0)r=Promise.resolve(null);else{let e=[];t.bufferView===void 0?e.push(Promise.resolve(null)):e.push(this.loadBufferView(t.bufferView)),t.sparse!==void 0&&(e.push(this.loadBufferView(t.sparse.indices.bufferView)),e.push(this.loadBufferView(t.sparse.values.bufferView))),r=Promise.all(e).then(e=>{let n=e[0],r=WEBGL_TYPE_SIZES[t.type],o=WEBGL_COMPONENT_TYPES[t.componentType],s=o.BYTES_PER_ELEMENT,c=s*r,l=t.byteOffset||0,u=t.bufferView===void 0?void 0:this.json.bufferViews[t.bufferView].byteStride,d=t.normalized===!0,f,p;if(u&&u!==c){let e=Math.floor(l/u),c=`InterleavedBuffer:`+t.bufferView+`:`+t.componentType+`:`+e+`:`+t.count,m=this.cache.get(c);m||(f=new o(n,e*u,t.count*u/s),m=new three.InterleavedBuffer(f,u/s),this.cache.set(c,m)),p=new three.InterleavedBufferAttribute(m,r,l%u/s,d)}else f=n===null?new o(t.count*r):new o(n,l,t.count*r),p=new three.BufferAttribute(f,r,d);if(t.sparse!==void 0){let s=WEBGL_TYPE_SIZES.SCALAR,c=WEBGL_COMPONENT_TYPES[t.sparse.indices.componentType],l=t.sparse.indices.byteOffset||0,u=t.sparse.values.byteOffset||0,d=new c(e[1],l,t.sparse.count*s),f=new o(e[2],u,t.sparse.count*r);n!==null&&(p=new three.BufferAttribute(p.array.slice(),p.itemSize,p.normalized));for(let e=0,t=d.length;e<t;e++){let t=d[e];if(p.setX(t,f[e*r]),r>=2&&p.setY(t,f[e*r+1]),r>=3&&p.setZ(t,f[e*r+2]),r>=4&&p.setW(t,f[e*r+3]),r>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}}return p})}}return this.cache.set(t,r),r}createPrimitiveKey(e){for(let t of values(this.extensions)){let n=t.createPrimitiveKey(e,this);if(n)return n}let t=``,n=Object.keys(e.attributes).sort();for(let r=0,o=n.length;r<o;r++)t+=n[r]+`:`+e.attributes[n[r]]+`;`;return e.indices+`:`+t+`:`+e.mode}loadGeometry(e){let t=null;for(let n of values(this.extensions))if(t=n.loadGeometry(e,this),t)break;return t||(t=this.addGeometryPrimitiveAttributes(new three.BufferGeometry,e)),t=t.then(e=>(this.disposeSet.add(e),e)),t}loadImage(e){let t=null;for(let n of values(this.extensions))if(t=n.loadImage(e,this),t)break;if(!t){let n=this.json.images[e];if(n.bufferView!==void 0){let e=this.json.bufferViews[n.bufferView];t=this.loadBuffer(e.buffer).then(t=>{let r=e.byteOffset||0,o=e.byteLength||0;return createImageBitmapLike(new Blob([new Uint8Array(t,r,o)],{type:n.mimeType}))})}else if(n.uri){let e=this.resolveResouce(n.uri);t=canUseNativeImageBitmap()?this.options.fetcher.ajax(e,{responseType:`blob`}).then(e=>{let t=e.body;return createImageBitmapLike(t)}):this.options.fetcher.loadImage(e,{},void 0,void 0,void 0,createImageBitmapLikeImage()).then(e=>e.body)}else throw Error(`glTF: Invalid image defs.`)}return t=t.then(e=>(this.disposeSet.add(e),e)),t}loadMesh(e){let t=null;for(let n of values(this.extensions))if(t=n.loadMesh(e,this),t)break;if(!t){let n=this.json.meshes[e],r=n.primitives,o=Promise.all(r.map(e=>this.loadGeometry(e))),s=Promise.all(r.map(e=>this.loadMaterial(e)));t=Promise.all([o,s]).then(([t,o])=>{var s;let c=[];for(let l=0;l<r.length;l++){let u=r[l],d=t[l],f=o[l],p=(s=u.mode)==null?WEBGL_CONSTANTS.TRIANGLES:s,m;if(p===WEBGL_CONSTANTS.TRIANGLES||p===WEBGL_CONSTANTS.TRIANGLE_STRIP||p===WEBGL_CONSTANTS.TRIANGLE_FAN)if(p===WEBGL_CONSTANTS.TRIANGLE_STRIP?d=this.toGeometryTrianglesDrawMode(d,three.TriangleStripDrawMode):p===WEBGL_CONSTANTS.TRIANGLE_FAN&&(d=this.toGeometryTrianglesDrawMode(d,three.TriangleFanDrawMode)),d.clearGroups(),d.addGroup(0,d.index?d.index.count:d.attributes.position.count,0),this.disposeSet.add(d),n.isSkinnedMesh){let e=new PBMSkinnedMesh(d,[f]);this.normalizeSkinWeights(e),m=e}else m=new PBMMesh(d,[f]);else if(p===WEBGL_CONSTANTS.LINES)m=new three.LineSegments(d,f);else if(p===WEBGL_CONSTANTS.LINE_STRIP)m=new three.Line(d,f);else if(p===WEBGL_CONSTANTS.LINE_LOOP)m=new three.LineLoop(d,f);else if(p===WEBGL_CONSTANTS.POINTS)m=new PBMPointCloud(d,f);else throw Error(`glTF: Primitive mode unsupported: `+p);if(Object.keys(d.morphAttributes).length>0){if(n.weights!==void 0)for(let e=0,t=n.weights.length;e<t;e++)m.morphTargetInfluences[e]=n.weights[e];if(n.extras&&Array.isArray(n.extras.targetNames)){let e=n.extras.targetNames;if(m.morphTargetInfluences.length===e.length){m.morphTargetDictionary={};for(let t=0,n=e.length;t<n;t++)m.morphTargetDictionary[e[t]]=t}else console.warn(`glTF: Invalid extras.targetNames length. Ignoring names.`)}}m.name=n.name||`mesh_`+e,this.assignFinalMaterial(m),c.push(m)}if(c.length===1)return c[0];let l=new three.Group;for(let e of c)l.add(e);return l})}return t}loadMaterial(e){var t;let n=(t=e.mode)==null?WEBGL_CONSTANTS.TRIANGLES:t,r=`material:`+this.createPrimitiveKey(e),o=this.cache.get(r);if(o)return o;let s=null;for(let t of values(this.extensions))if(s=t.loadMaterial(e,this),s)break;if(!s){if(n===WEBGL_CONSTANTS.TRIANGLES||n===WEBGL_CONSTANTS.TRIANGLE_STRIP||n===WEBGL_CONSTANTS.TRIANGLE_FAN)s=this.loadMaterialAsPBMMeshMaterial(e);else if(n===WEBGL_CONSTANTS.LINES||n===WEBGL_CONSTANTS.LINE_STRIP||n===WEBGL_CONSTANTS.LINE_LOOP)s=this.loadMaterialAsLineBasicMaterial(e);else if(n===WEBGL_CONSTANTS.POINTS)s=this.loadMaterialAsPBMPointCloudMaterial(e);else throw Error(`glTF: Primitive mode unsupported: `+n);s=s.then(t=>Promise.all(values(this.extensions).map(n=>n.extendMaterial(t,e,this))).then(()=>t))}return s}loadMaterialAsPBMPointCloudMaterial(e){let t=new PBMPointCloudMaterial;return this.disposeSet.add(t),Promise.resolve(t)}loadMaterialAsPBMMeshMaterial(e){let t=[],n=new PBMMeshMaterial(`standard`);if(n.color=new three.Color(1,1,1),n.opacity=1,n.colorAlpha=1,e.material!==void 0){let r=this.json.materials[e.material];r.name&&(n.name=r.name);let o=r.pbrMetallicRoughness||{};if(Array.isArray(o.baseColorFactor)){let e=o.baseColorFactor;n.color=new three.Color().fromArray(e),n.colorAlpha=e[3]}o.baseColorTexture!==void 0&&t.push(this.createMaterialTexture(o.baseColorTexture).then(e=>{e.encoding=three.sRGBEncoding,n.map=e,r.alphaMode===ALPHA_MODES.MASK&&!(e instanceof three.CompressedTexture)&&e.minFilter!==three.LinearMipmapLinearFilter&&(e.minFilter=three.LinearMipmapLinearFilter,e.generateMipmaps=!0),this.disposeSet.add(e)})),n.metalness=o.metallicFactor===void 0?1:o.metallicFactor,n.roughness=o.roughnessFactor===void 0?1:o.roughnessFactor,o.metallicRoughnessTexture!==void 0&&t.push(this.createMaterialTexture(o.metallicRoughnessTexture).then(e=>{e.format=three.RGBFormat,n.roughnessMap=e,n.metalnessMap=e,this.disposeSet.add(e)})),r.doubleSided===!0&&(n.side=three.DoubleSide);let s=r.alphaMode||ALPHA_MODES.OPAQUE;if(n.alphaMode=`OPAQUE`,s===ALPHA_MODES.BLEND?(n.alphaMode=`BLEND`,n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,s===ALPHA_MODES.MASK&&(n.alphaMode=`MASK`,n.alphaTest=r.alphaCutoff===void 0?.5:r.alphaCutoff)),r.normalTexture!==void 0&&(t.push(this.createMaterialTexture(r.normalTexture).then(e=>{this.disposeSet.add(e),n.normalMap=e})),n.normalScale=new three.Vector2(1,1),r.normalTexture.scale!==void 0)){let e=r.normalTexture.scale;n.normalScale.set(e,e)}r.occlusionTexture!==void 0&&(t.push(this.createMaterialTexture(r.occlusionTexture).then(e=>{e.format=three.RGBFormat,n.aoMap=e,this.disposeSet.add(e)})),r.occlusionTexture.strength!==void 0&&(n.aoMapIntensity=r.occlusionTexture.strength)),r.emissiveFactor!==void 0&&(n.emissive=new three.Color().fromArray(r.emissiveFactor)),r.emissiveTexture!==void 0&&t.push(this.createMaterialTexture(r.emissiveTexture).then(e=>{e.format=three.RGBFormat,n.emissiveMap=e,this.disposeSet.add(e)}))}return this.disposeSet.add(n),Promise.all(t).then(()=>n)}loadMaterialAsLineBasicMaterial(e){let t=[],n=new three.LineBasicMaterial;if(n.color=new three.Color(1,1,1),n.opacity=1,e.material!==void 0){let t=this.json.materials[e.material];t.name&&(n.name=t.name);let r=t.pbrMetallicRoughness||{};if(Array.isArray(r.baseColorFactor)){let e=r.baseColorFactor;n.color.fromArray(e),n.opacity=e[3]}t.doubleSided===!0&&(n.side=three.DoubleSide);let o=t.alphaMode||ALPHA_MODES.OPAQUE;o===ALPHA_MODES.BLEND?(n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,o===ALPHA_MODES.MASK&&(n.alphaTest=t.alphaCutoff===void 0?.5:t.alphaCutoff))}return this.disposeSet.add(n),Promise.all(t).then(()=>n)}loadTexture(e){let t=`texture:`+e,n=this.cache.get(t);if(n)return n;let r=null;for(let t of values(this.extensions))if(r=t.loadTexture(e,this),r)break;if(!r){let t=this.json.textures[e];r=this.loadImage(t.source).then(e=>{let n=new three.Texture(e);n.needsUpdate=!0,n.flipY=!1,t.name&&(n.name=t.name);let r=(this.json.samplers||{})[t.sampler]||{};return n.magFilter=WEBGL_FILTERS[r.magFilter]||three.LinearFilter,n.minFilter=WEBGL_FILTERS[r.minFilter]||three.LinearMipmapLinearFilter,n.wrapS=WEBGL_WRAPPINGS[r.wrapS]||three.RepeatWrapping,n.wrapT=WEBGL_WRAPPINGS[r.wrapT]||three.RepeatWrapping,n.onUpdate=function(){e.close()},n})}return r=r.then(e=>(this.disposeSet.add(e),e)),this.cache.set(t,r),r}normalizeSkinWeights(e){let t=e.geometry,n=t.attributes.skinWeight,r=1;if(n.array instanceof Uint8Array?r=255:n.array instanceof Uint16Array?r=65535:n.array instanceof Uint32Array&&(r=4294967295),r>1){let e=n.count,o=n.itemSize,s=n.normalized,c=new three.BufferAttribute(new Float32Array(e*o),o,s);for(let t=0;t<e;t++)c.setX(t,n.getX(t)/r),c.setY(t,n.getY(t)/r),c.setZ(t,n.getZ(t)/r),c.setW(t,n.getW(t)/r);t.attributes.skinWeight=c}n.normalized||e.normalizeSkinWeights()}assignFinalMaterial(e){let t=e.geometry,n=[].concat(e.material),r=t.attributes.tangent!==void 0,o=t.attributes.color!==void 0,s=t.attributes.normal===void 0,c=e instanceof three.SkinnedMesh,l=Object.keys(t.morphAttributes).length>0,u=l&&t.morphAttributes.normal!==void 0;n=n.map(e=>{if(r||o||s||c||l||u){let t=`cloned-material:`+e.uuid+`:`;r&&(t+=`vertex-tangents:`),o&&(t+=`vertex-colors:`),s&&(t+=`flat-shading:`),c&&(t+=`skinning:`),l&&(t+=`morph-targets:`),u&&(t+=`morph-normals:`);let n=this.cache.get(t);n||(n=e.clone(),r&&(n.vertexTangents=!0),o&&(n.vertexColors=!0),s&&(n.flatShading=!0),c&&(n.skinning=!0),l&&(n.morphTargets=!0),u&&(n.morphNormals=!0),r&&(n.normalScale&&(n.normalScale.y*=-1),n.clearcoatNormalScale&&(n.clearcoatNormalScale.y*=-1)),this.cache.set(t,n)),e=n}return e}),Array.isArray(e.material)?e.material=n:e.material=n[0]}loadNodeAttachments(e){let t=[];for(let n of values(this.extensions)){let r=n.loadNodeAttachments(e,this);r&&t.push(r)}return t}loadNode(e){let t=`node:`+e,n=this.cache.get(t);if(n)return n;let r=this.json.nodes[e],o=[];r.mesh!==void 0&&o.push(this.loadMesh(r.mesh).then(e=>{if(r.weights!==void 0){let t=r.weights;e.traverse(e=>{if(e instanceof three.Mesh||e instanceof three.Line||e instanceof three.Points)for(let n=0,r=t.length;n<r;n++)e.morphTargetInfluences[n]=t[n]})}return e})),r.camera!==void 0&&o.push(this.loadCamera(r.camera));let s=this.loadNodeAttachments(e);for(let e of s)o.push(e);let c=Promise.all(o).then(e=>{let t;if(t=r.isBone===!0?new three.Bone:e.length>1?new three.Group:e.length===1?e[0]:new three.Object3D,t!==e[0])for(let n=0,r=e.length;n<r;n++)t.add(e[n]);if(r.name&&(t.userData.name=r.name,t.name=three.PropertyBinding.sanitizeNodeName(r.name)),r.matrix!==void 0){let e=new three.Matrix4;e.fromArray(r.matrix),t.applyMatrix4(e)}else r.translation!==void 0&&t.position.fromArray(r.translation),r.rotation!==void 0&&t.quaternion.fromArray(r.rotation),r.scale!==void 0&&t.scale.fromArray(r.scale);return c=c.then(e=>Promise.all(values(this.extensions).map(t=>t.extendNode(e,r,this))).then(()=>e)),t});return this.cache.set(t,c),c}loadScene(e){let t=this.json.scenes[e],n=new three.Group;t.name&&(n.name=t.name);let r=t.nodes||[],o=[];for(let e=0,t=r.length;e<t;e++)o.push(this.buildNodeHierarchy(r[e],n));return Promise.all(o).then(()=>n)}createMaterialTexture(e){return this.loadTexture(e.index).then(t=>{t instanceof three.CompressedTexture||(t.minFilter=three.LinearFilter,t.magFilter=three.LinearFilter,t.generateMipmaps=!1);for(let n of values(this.extensions)){let r=n.extendTexture(t,e,this);r&&(t=r)}return this.textureSet.add(t),this.disposeSet.add(t),t})}addGeometryPrimitiveAttributes(e,t){let n=t.attributes,r=[];for(let t in n){let o=ATTRIBUTES[t]||t.toLowerCase();o in e.attributes||r.push(this.loadAccessor(n[t]).then(t=>{t&&e.setAttribute(o,t)}))}t.indices!==void 0&&!e.index&&r.push(this.loadAccessor(t.indices).then(t=>{t&&e.setIndex(t)}));let o=new three.Box3;if(n.POSITION!==void 0){let e=this.json.accessors[n.POSITION],t=e.min,r=e.max;if(t!==void 0&&r!==void 0){if(o.set(new three.Vector3(t[0],t[1],t[2]),new three.Vector3(r[0],r[1],r[2])),e.normalized){let t=getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[e.componentType]);o.min.multiplyScalar(t),o.max.multiplyScalar(t)}}else console.warn(`glTF: Missing min/max properties for accessor POSITION.`)}let s=t.targets;if(s!==void 0){let e=new three.Vector3,t=new three.Vector3;for(let n=0,r=s.length;n<r;n++){let r=s[n];if(r.POSITION!==void 0){let n=this.json.accessors[r.POSITION],o=n.min,s=n.max;if(o!==void 0&&s!==void 0){if(t.setX(Math.max(Math.abs(o[0]),Math.abs(s[0]))),t.setY(Math.max(Math.abs(o[1]),Math.abs(s[1]))),t.setZ(Math.max(Math.abs(o[2]),Math.abs(s[2]))),n.normalized){let e=getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn(`glTF: Missing min/max properties for accessor POSITION.`)}}o.expandByVector(e)}e.boundingBox=o;let c=new three.Sphere;return o.getCenter(c.center),c.radius=o.min.distanceTo(o.max)/2,e.boundingSphere=c,Promise.all(r).then(()=>{let n=!1;if(t.material!==void 0&&this.json.materials[t.material].occlusionTexture&&(n=!0),(n||this.options.copyUV2)&&e.attributes.uv&&!e.attributes.uv2&&e.setAttribute(`uv2`,e.attributes.uv),t.targets){let n=!1,r=!1;for(let e=0,o=t.targets.length;e<o;e++){let o=t.targets[e];if(o.POSITION!==void 0&&(n=!0),o.NORMAL!==void 0&&(r=!0),n&&r)break}if(!n&&!r)return e;let o=[];e.morphTargetsRelative=!0;for(let s=0,c=t.targets.length;s<c;s++){let c=t.targets[s];n?o.push(this.loadAccessor(c.POSITION).then(t=>{t&&(e.morphAttributes.position=e.morphAttributes.position||[],e.morphAttributes.position[s]=t)})):e.attributes.position&&(e.morphAttributes.position=e.morphAttributes.position||[],e.morphAttributes.position[s]=e.attributes.position),r?o.push(this.loadAccessor(c.NORMAL).then(t=>{t&&(e.morphAttributes.normal=e.morphAttributes.normal||[],e.morphAttributes.normal[s]=t)})):e.attributes.normal&&(e.morphAttributes.normal=e.morphAttributes.normal||[],e.morphAttributes.normal[s]=e.attributes.normal)}return Promise.all(o).then(()=>e)}else return e})}buildNodeHierarchy(e,t){let n=this.json.nodes[e];return this.loadNode(e).then(e=>{if(n.skin===void 0)return e;let t;return this.loadSkin(n.skin).then(e=>{t=e;let n=[];for(let e=0,r=t.joints.length;e<r;e++)n.push(this.loadNode(t.joints[e]));return Promise.all(n)}).then(n=>(e.traverse(e=>{if(!(e instanceof three.SkinnedMesh))return;let r=[],o=[];for(let e=0,s=n.length;e<s;e++){let s=n[e];if(s instanceof three.Bone){r.push(s);let n=new three.Matrix4;t.inverseBindMatrices!==void 0&&n.fromArray(t.inverseBindMatrices.array,e*16),o.push(n)}else console.warn(`glTF: Joint "%s" could not be found.`,t.joints[e])}let s=new three.Skeleton(r,o);e.bind(s,e.matrixWorld)}),e))}).then(e=>{t.add(e);let r=[];if(n.children){let t=n.children;for(let n=0,o=t.length;n<o;n++){let o=t[n];r.push(this.buildNodeHierarchy(o,e))}}return Promise.all(r).then(()=>e)})}resolveResouce(e){return/^[a-z]{0,8}\:/i.test(e)?e:pathJoin(this.options.resourcePath,appendSearch(e,this.options.search))}toGeometryTrianglesDrawMode(e,t){let n=e.getIndex();if(n===null){let t=[],r=e.getAttribute(`position`);if(r!==void 0){for(let e=0;e<r.count;e++)t.push(e);e.setIndex(t),n=e.getIndex()}}if(n===null)return console.error(`glTF: Undefined position attribute. Processing not possible.`),e;let r=n.count-2,o=[];if(t===three.TriangleFanDrawMode)for(let e=1;e<=r;e++)o.push(n.getX(0)),o.push(n.getX(e)),o.push(n.getX(e+1));else for(let e=0;e<r;e++)e%2==0?(o.push(n.getX(e)),o.push(n.getX(e+1)),o.push(n.getX(e+2))):(o.push(n.getX(e+2)),o.push(n.getX(e+1)),o.push(n.getX(e)));o.length/3!==r&&console.error(`glTF: Unable to generate correct amount of triangles.`);let s=e.clone();return s.setIndex(o),this.disposeSet.add(s),s}};function getNormalizedComponentScale(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw Error(`glTF: Unsupported normalized accessor component type.`)}}var _havePatchedPropertyBindings=!1,findNodeFn=null;function _ensurePropertyBindingPatch(){if(_havePatchedPropertyBindings)return;_havePatchedPropertyBindings=!0;let e=findNodeFn||(findNodeFn=three.PropertyBinding.findNode);three.PropertyBinding.findNode=function(t,n){if(!n)return e(t,n);if(n.startsWith(`.materials.`)){let e=n.substring(11).substring(n.indexOf(`.`)),r=e.indexOf(`.`),o=r<0?e:e.substring(0,r),s=r<0?null:e.slice(r+1),c=null;return t.traverse(e=>{if(c!==null||e.type!==`Mesh`&&e.type!==`SkinnedMesh`)return;let t=[].concat(e.material);for(let e of t)e&&(e.uuid===o||e.name===o)&&(c=e,c!==null&&s&&(c=c[s]))}),c}else if(n.startsWith(`.nodes.`)||n.startsWith(`.lights.`)||n.startsWith(`.cameras.`)){let r=n.split(`.`),o;for(let e=1;e<r.length;e++){let n=r[e];if(n.length==36)o=t.getObjectByProperty(`uuid`,n);else if(o&&o[n]){let e=Number.parseInt(n),t=n;e>=0&&(t=e),o=o[t]}else{let e=t.getObjectByName(n);e&&(o=e)}}if(!o){let o=e(t,r[2]);return o||console.warn(`KHR_animation_pointer: Property binding not found`,n,t,t.name,r),o}return o}let r=e(t,n);return r||(console.error(`THREE.PropertyBinding: Trying to update node for track: `+n+` but it wasn't found.`),r=new three.Object3D,r.name=n,r.visible=!1,t.add(r)),r=e(t,n),r}}_ensurePropertyBindingPatch();var BaseExtension=class{markDefs(e){}prepare(e){}emitResult(e,t){}createPrimitiveKey(e,t){}extendTexture(e,t,n){return null}loadBuffer(e,t){return null}loadBufferView(e,t){return null}loadImage(e,t){return null}loadTexture(e,t){return null}loadGeometry(e,t){return null}loadMaterial(e,t){return null}extendMaterial(e,t,n){return Promise.resolve()}loadMesh(e,t){return null}extendNode(e,t,n){return Promise.resolve()}loadNodeAttachments(e,t){return null}loadCamera(e,t){return null}loadAnimation(e,t){return null}},EXTENSION_NAME$13=`KHR_binary_glTF`,KHR_binary_glTF=class e extends BaseExtension{static getMagic(e){return decodeText(new Uint8Array(e.slice(0,4)))}constructor(){super(),this.header={magic:``,version:0,length:0},this.content=``,this.body=null}loadGlbBinary(t){let n=new DataView(t,0,e.HEADER_LENGTH);if(this.header={magic:e.getMagic(t),version:n.getUint32(4,!0),length:n.getUint32(8,!0)},this.header.magic!==e.HEADER_MAGIC)throw Error(`glTF:KHR_binary_glTF: Unsupported.`);if(this.header.version<2)throw Error(`glTF:KHR_binary_glTF: Legacy binary file detected.`);let r=new DataView(t,e.HEADER_LENGTH),o=0,s=null,c=null;for(;o<r.byteLength;){let n=r.getUint32(o,!0);if(o+=4,n===0)continue;let l=r.getUint32(o,!0);if(o+=4,l===e.CHUNK_TYPES.JSON)s=decodeText(new Uint8Array(t,e.HEADER_LENGTH+o,n));else if(l===e.CHUNK_TYPES.BIN){let r=e.HEADER_LENGTH+o;c=t.slice(r,r+n)}o+=n}if(s===null)throw Error(`glTF:${EXTENSION_NAME$13}: JSON content not found.`);this.content=s,this.body=c}loadBuffer(e,t){return t.json.buffers[e].uri===void 0&&e===0&&this.body?Promise.resolve(this.body):null}clear(){this.body=null,this.content=``}};KHR_binary_glTF.HEADER_MAGIC=`glTF`,KHR_binary_glTF.HEADER_LENGTH=12,KHR_binary_glTF.CHUNK_TYPES={JSON:1313821514,BIN:5130562};var defaultDecoderPath=`https://vr-public.realsee-cdn.cn/release/static/image/release/five/resource/draco/1.5.6/`,defaultAttributeIDs={position:`POSITION`,normal:`NORMAL`,color:`COLOR`,uv:`TEX_COORD`},defaultAttributeTypes={position:`Float32Array`,normal:`Float32Array`,color:`Float32Array`,uv:`Float32Array`},Draco=class{constructor(){this.decoderPath=defaultDecoderPath,this.decoderConfig={},this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL=``}setDecoderPath(e){this.decoderPath=e}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}decodeDracoFile(e,t,n,r){let o={attributeIDs:n||defaultAttributeIDs,attributeTypes:r||defaultAttributeTypes,useUniqueIDs:!!n};this.decodeGeometry(e,o).then(t)}decodeGeometry(e,t={attributeIDs:defaultAttributeIDs,attributeTypes:defaultAttributeTypes,useUniqueIDs:!1}){for(let e in t.attributeTypes){let n=t.attributeTypes[e];n.BYTES_PER_ELEMENT!==void 0&&(t.attributeTypes[e]=n.name)}let n,r=this.workerNextTaskID++,o=e.byteLength,s=this._getWorker(r,o).then(o=>(n=o,new Promise((o,s)=>{n._callbacks[r]={resolve:o,reject:s},n.postMessage({type:`decode`,id:r,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return s.catch(()=>!0).then(()=>{n&&r&&this._releaseTask(n,r)}),s}_createGeometry(e){let t=new three.BufferGeometry;e.index&&t.setIndex(new three.BufferAttribute(e.index.array,1));for(let n=0;n<e.attributes.length;n++){let r=e.attributes[n],o=r.name,s=r.array,c=r.itemSize,l=!(s instanceof Float32Array||s instanceof Float64Array);t.setAttribute(o,new three.BufferAttribute(s,c,l))}return t}_initDecoder(){if(this.decoderPending)return this.decoderPending;if(typeof WebAssembly!=`object`||this.decoderConfig.type===`js`)this.decoderPending=internalFetcher.ajax(this.decoderPath+`draco_decoder.js`,{responseType:`text`}).then(e=>e.body).then(e=>{let t=[`/* draco decoder */`,e,``,`/* worker */`,DRACOWorker].join(`
|
|
364
|
+
`,support=typeof Worker<`u`&&typeof Blob<`u`,lzmaWorkerURL=``;if(support)try{let e=new Blob([lzmaWorkerSource],{type:`text/javascript`});lzmaWorkerURL=URL.createObjectURL(e)}catch(e){}var LZMAWorker=class{constructor(){if(!support)throw Error(`LZMAWorker cannot work in this broswer.`);this.callCounter=0,this.requests={};let e=this.worker=new Worker(lzmaWorkerURL);e.onmessage=e=>{let{id:t,result:n,error:r}=e.data,o=this.getKey(t);this.requests[o]&&(r?this.requests[o](Error(r)):this.requests[o](null,n),delete this.requests[o])},e.onerror=e=>console.error(e)}getKey(e){return`key_`+String(e)}decompress(e,t){let n=++this.callCounter;this.requests[this.getKey(n)]=t,this.worker.postMessage({type:`decompress`,id:n,data:e},[e.buffer])}terminate(){this.worker.terminate()}};LZMAWorker.support=support;function readUint32(e){return Array.prototype.reduce.call(e,(e,t,n)=>e|t<<n*8,0)}function binaryArrays(e){let t=[],n=e.length;for(let o=0;o<n;o++){let n={data:e[o],offset:0,readByte(){return this.data[this.offset++]}},s=n.data.length,c={data:[],offset:0,writeByte(e){let t=Math.floor(this.offset/s);this.data[t]||(this.data[t]=new Uint8Array(s)),this.data[t][this.offset%s]=e,this.offset++}};LZMA.decompressFile(n,c);var r=new Uint8Array(c.offset);for(let e=0;e<c.offset;e++)r[e]=c.data[Math.floor(e/s)][e%s];t.push(r)}return t}function binaryArraysWithWorker(e){let t=[],n=e.length;for(let r=0;r<n;r++)t.push(new Promise((t,n)=>{let o=new LZMAWorker;o.decompress(e[r],(e,r)=>{if(o.terminate(),e)return n(e);t(r)})}));return Promise.all(t)}function lzma(e){let t=new Uint8Array(e),n=readUint32(t.slice(0,4));if(n>10)return Promise.reject(Error(`LZMA got too many sub chunks.`));let r=[],o=[],s=4+n*4;for(let e=0;e<n;e++)o[e]=readUint32(t.slice(4+e*4,8+e*4)),e===n-1?r[e]=t.subarray(s,s+o[e]):r[e]=t.slice(s,s+o[e]),s+=o[e];return LZMAWorker.support?binaryArraysWithWorker(r):Promise.resolve(binaryArrays(r))}function loadAt3d(e,t={}){var n,r,o,s,c,l,u;let d=(n=t.upAxis)==null?`Z`:n,f=(r=t.light)==null?!1:r,p=(o=t.fetcher)==null?internalFetcher:o,m=(s=t.onDownloadProgress)==null?noop:s,h=(c=t.textureBaseUri)==null?guessTextureBaseUriFromFileUrl(e):c,g=t.textureBaseUri===void 0?[]:((l=t.textureArray)==null?[]:l).slice(),_=autoRestImageOptionsByTextureLength((u=t.textureOptions)==null?{}:u,g.length),v=new Map;for(let e of g){let t=isAbsoluteURL(e)?e:pathJoin(h,e);v.set(t,loadTexture$1(t,_,p))}let y={byteLength:0};return Promise.resolve().then(()=>p.ajax(e,{responseType:`arraybuffer`},void 0,void 0,m)).then(e=>lzma(e.body)).then(e=>{let t={chunks:[],createAt:void 0,description:void 0};for(let n of e){let e=Model$2.decode(n);if(e.chunks.length){for(let n=0;n<e.chunks.length;n++)t.chunks.push(e.chunks[n]);t.createAt=e.createAt,t.description=e.description}}return t}).then(e=>parse$4(e,f,h,g,_,v,p)).then(t=>{v.clear();let n=new three.Group;n.name=e;for(let e of t.objects)n.add(e);return d===`Y`&&n.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`at3d`,modelUpAxis:`Z`,upAxis:d,uri:e,byteLength:y.byteLength,memoryUsage:getMemoryUsage(n),scene:n,textures:t.textures,animations:[],dispose:()=>t.dispose()}})}var $Reader=import_minimal.Reader,$util=import_minimal.util,$root=import_minimal.roots[`@REALSEE/FIVE:five/model/loaders/protobuf/dome.proto`]||(import_minimal.roots[`@REALSEE/FIVE:five/model/loaders/protobuf/dome.proto`]={}),Model$1=$root.Model=(()=>{function e(e){if(this.meshes=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.meshes=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Model;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.meshes&&o.meshes.length||(o.meshes=[]),o.meshes.push($root.Mesh.decode(e,e.uint32()));break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Model`},e})(),Mesh$1=$root.Mesh=(()=>{function e(e){if(this.chunks=[],this.matrix=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.name=``,e.prototype.chunks=$util.emptyArray,e.prototype.matrix=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Mesh;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.name=e.string();break;case 2:o.chunks&&o.chunks.length||(o.chunks=[]),o.chunks.push($root.Chunk.decode(e,e.uint32()));break;case 3:o.matrix&&o.matrix.length||(o.matrix=[]),o.matrix.push($root.Matrix.decode(e,e.uint32()));break;default:e.skipType(t&7);break}}if(!o.hasOwnProperty(`name`))throw $util.ProtocolError(`missing required 'name'`,{instance:o});return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Mesh`},e})(),Matrix=$root.Matrix=(()=>{function e(e){if(this.elements=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.elements=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Matrix;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.elements&&o.elements.length||(o.elements=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.elements.push(e.float())}else o.elements.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Matrix`},e})(),Chunk=$root.Chunk=(()=>{function e(e){if(this.material=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.geometry=null,e.prototype.material=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Chunk;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 2:o.geometry=$root.Geometry.decode(e,e.uint32());break;case 3:o.material&&o.material.length||(o.material=[]),o.material.push($root.Material.decode(e,e.uint32()));break;default:e.skipType(t&7);break}}if(!o.hasOwnProperty(`geometry`))throw $util.ProtocolError(`missing required 'geometry'`,{instance:o});return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Chunk`},e})(),Geometry=$root.Geometry=(()=>{function e(e){if(this.groups=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.position=null,e.prototype.uv=null,e.prototype.uv2=null,e.prototype.normal=null,e.prototype.groups=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Geometry;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.position=$root.Position.decode(e,e.uint32());break;case 2:o.uv=$root.UV.decode(e,e.uint32());break;case 3:o.uv2=$root.UV.decode(e,e.uint32());break;case 4:o.normal=$root.Normal.decode(e,e.uint32());break;case 5:o.groups&&o.groups.length||(o.groups=[]),o.groups.push($root.Group.decode(e,e.uint32()));break;default:e.skipType(t&7);break}}if(!o.hasOwnProperty(`position`))throw $util.ProtocolError(`missing required 'position'`,{instance:o});if(!o.hasOwnProperty(`normal`))throw $util.ProtocolError(`missing required 'normal'`,{instance:o});return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Geometry`},e})(),Position=$root.Position=(()=>{function e(e){if(this.array=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.array=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Position;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.array&&o.array.length||(o.array=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.array.push(e.float())}else o.array.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Position`},e})(),UV=$root.UV=(()=>{function e(e){if(this.array=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.array=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.UV;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.array&&o.array.length||(o.array=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.array.push(e.float())}else o.array.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/UV`},e})(),Normal=$root.Normal=(()=>{function e(e){if(this.array=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.array=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Normal;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.array&&o.array.length||(o.array=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.array.push(e.float())}else o.array.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Normal`},e})(),Group=$root.Group=(()=>{function e(e){if(e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.start=0,e.prototype.count=0,e.prototype.materialIndex=0,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Group;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.start=e.uint32();break;case 2:o.count=e.uint32();break;case 3:o.materialIndex=e.uint32();break;default:e.skipType(t&7);break}}if(!o.hasOwnProperty(`start`))throw $util.ProtocolError(`missing required 'start'`,{instance:o});if(!o.hasOwnProperty(`count`))throw $util.ProtocolError(`missing required 'count'`,{instance:o});if(!o.hasOwnProperty(`materialIndex`))throw $util.ProtocolError(`missing required 'materialIndex'`,{instance:o});return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Group`},e})(),Material=$root.Material=(()=>{function e(e){if(e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.kd=null,e.prototype.ks=null,e.prototype.ke=null,e.prototype.mapkd=``,e.prototype.mapks=``,e.prototype.mapke=``,e.prototype.norm=``,e.prototype.mapbump=``,e.prototype.bump=``,e.prototype.mapd=``,e.prototype.ns=0,e.prototype.d=0,e.prototype.tr=0,e.prototype.mapkdrepeat=``,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Material;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:o.kd=$root.Color.decode(e,e.uint32());break;case 2:o.ks=$root.Color.decode(e,e.uint32());break;case 3:o.ke=$root.Color.decode(e,e.uint32());break;case 4:o.mapkd=e.string();break;case 5:o.mapks=e.string();break;case 6:o.mapke=e.string();break;case 7:o.norm=e.string();break;case 8:o.mapbump=e.string();break;case 9:o.bump=e.string();break;case 10:o.mapd=e.string();break;case 11:o.ns=e.float();break;case 12:o.d=e.float();break;case 13:o.tr=e.float();break;case 14:o.mapkdrepeat=e.string();break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Material`},e})(),Color=$root.Color=(()=>{function e(e){if(this.rgb=[],e)for(let t=Object.keys(e),n=0;n<t.length;++n)e[t[n]]!=null&&(this[t[n]]=e[t[n]])}return e.prototype.rgb=$util.emptyArray,e.decode=function(e,t,n){e instanceof $Reader||(e=$Reader.create(e));let r=t===void 0?e.len:e.pos+t,o=new $root.Color;for(;e.pos<r;){let t=e.uint32();if(t===n)break;switch(t>>>3){case 1:if(o.rgb&&o.rgb.length||(o.rgb=[]),(t&7)==2){let t=e.uint32()+e.pos;for(;e.pos<t;)o.rgb.push(e.float())}else o.rgb.push(e.float());break;default:e.skipType(t&7);break}}return o},e.getTypeUrl=function(e){return e===void 0&&(e=`type.googleapis.com`),e+`/Color`},e})();function loadDome(e,t={}){var n,r,o;let s=(n=t.upAxis)==null?`Z`:n,c=(r=t.fetcher)==null?internalFetcher:r,l=(o=t.onDownloadProgress)==null?noop:o,u={byteLength:0};return Promise.resolve().then(()=>c.ajax(e,{responseType:`arraybuffer`},void 0,void 0,l)).then(e=>{var n,r;return u.byteLength=e.body.byteLength,parse$3(new Uint8Array(e.body),(n=t.light)==null?!0:n,t.textureBaseUri||``,(r=t.textureOptions)==null?{}:r,c)}).then(t=>{let n=new three.Group;n.matrixAutoUpdate=!1,s===`Z`&&n.applyMatrix4(ROTATE_X_MATRIX$1),n.matrix.compose(n.position,n.quaternion,n.scale),n.name=e;for(let e of t.objects)n.add(e);return{type:`dome`,modelUpAxis:`Y`,upAxis:s,uri:e,byteLength:u.byteLength,memoryUsage:getMemoryUsage(n),scene:n,textures:t.textures,animations:[],dispose:()=>t.dispose()}})}function flipBufferGeometryNormals(e){let t=[0,0,0];for(let n=0;n<e.attributes.normal.array.length/9;n++)t[0]=e.attributes.normal.array[n*9],t[1]=e.attributes.normal.array[n*9+1],t[2]=e.attributes.normal.array[n*9+2],e.attributes.normal.array[n*9]=e.attributes.normal.array[n*9+6],e.attributes.normal.array[n*9+1]=e.attributes.normal.array[n*9+7],e.attributes.normal.array[n*9+2]=e.attributes.normal.array[n*9+8],e.attributes.normal.array[n*9+6]=t[0],e.attributes.normal.array[n*9+7]=t[1],e.attributes.normal.array[n*9+8]=t[2];for(let n=0;n<e.attributes.position.array.length/9;n++)t[0]=e.attributes.position.array[n*9],t[1]=e.attributes.position.array[n*9+1],t[2]=e.attributes.position.array[n*9+2],e.attributes.position.array[n*9]=e.attributes.position.array[n*9+6],e.attributes.position.array[n*9+1]=e.attributes.position.array[n*9+7],e.attributes.position.array[n*9+2]=e.attributes.position.array[n*9+8],e.attributes.position.array[n*9+6]=t[0],e.attributes.position.array[n*9+7]=t[1],e.attributes.position.array[n*9+8]=t[2];for(let n=0;n<e.attributes.uv.array.length/6;n++)t[0]=e.attributes.uv.array[n*6],t[1]=e.attributes.uv.array[n*6+1],e.attributes.uv.array[n*6]=e.attributes.uv.array[n*6+4],e.attributes.uv.array[n*6+1]=e.attributes.uv.array[n*6+5],e.attributes.uv.array[n*6+4]=t[0],e.attributes.uv.array[n*6+5]=t[1];e.attributes.normal.needsUpdate=!0,e.attributes.position.needsUpdate=!0,e.attributes.uv.needsUpdate=!0}function parseGeometry({position:e,normal:t,uv:n,uv2:r,groups:o}){let s=new three.BufferGeometry;s.setAttribute(`position`,new three.BufferAttribute(new Float32Array(e.array),3)),t&&s.setAttribute(`normal`,new three.BufferAttribute(new Float32Array(t.array),3)),n&&s.setAttribute(`uv`,new three.BufferAttribute(new Float32Array(n.array),2)),r&&s.setAttribute(`uv2`,new three.BufferAttribute(new Float32Array(r.array),2));for(let e of o)s.addGroup(e.start,e.count,e.materialIndex);return s}function loadTexture(e,t,n,r,o,s,c){if(c.hasOwnProperty(e))return c[e];e=e.split(`?`)[0],isAbsoluteURL(e)||(e=pathJoin(t,e)),e=e.replace(/\/\/vrlab-image\d*.ljcdn.com\//,`//vrlab-public.ljcdn.com/`),e.indexOf(`//`)===0&&(e=`https:`+e);let l=Object.assign({key:`texture.dome`,size:64},pick(n,[`quality`,`format`,`sharpen`,`forceUseExifOrientation`,`mappings`]));return c[e]=o.loadTexture(e,{imageURL:{transform:n.transform,options:l},wrapS:three.RepeatWrapping,wrapT:three.RepeatWrapping,fetcher:s}).then(e=>{let t=e.body;return r&&t.repeat.copy(r),t.needsUpdate=!0,t.updateMatrix(),t})}function parseMaterial(e,t,n,r,o,s,c,l,u){let d=[],f=new PBMMeshMaterial(t?`phong`:`basic`);if(l.add(f),e.kd&&(f.color=new three.Color().fromArray(e.kd.rgb).convertLinearToSRGB()),e.mapkd){let t=null;if(e.mapkdrepeat){let[n,r]=e.mapkdrepeat.split(/\s+/).map(e=>Number(e));t=new three.Vector2(n,r)}d.push(loadTexture(e.mapkd,n,r,t,o,s,c).then(e=>{e.encoding=three.sRGBEncoding,f.map=e,l.add(e),u.add(e),f.needsUpdate=!0}).catch(noop))}if(e.ks&&(f.specular=new three.Color().fromArray(e.ks.rgb).convertLinearToSRGB()),e.mapks&&d.push(loadTexture(e.mapks,n,r,null,o,s,c).then(e=>{f.specularMap=e,l.add(e),u.add(e)}).catch(noop)),e.ke&&(f.emissive=new three.Color().fromArray(e.ke.rgb).convertLinearToSRGB()),e.mapke&&d.push(loadTexture(e.mapke,n,r,null,o,s,c).then(e=>{e.encoding=three.sRGBEncoding,f.emissiveMap=e,l.add(e),u.add(e)}).catch(noop)),e.norm&&d.push(loadTexture(e.norm,n,r,null,o,s,c).then(e=>{f.normalMap=e,l.add(e),u.add(e)}).catch(noop)),e.mapbump&&d.push(loadTexture(e.mapbump,n,r,null,o,s,c).then(e=>{f.bumpMap=e,l.add(e),u.add(e)}).catch(noop)),e.bump&&d.push(loadTexture(e.bump,n,r,null,o,s,c).then(e=>{f.bumpMap=e,l.add(e),u.add(e)}).catch(noop)),typeof e.ns==`number`&&(f.shininess=e.ns),typeof e.d==`number`){let t=e.d;t>0&&t<1&&(f.opacity=t)}return f.floorIndex=0,{material:f,textureReady:Promise.all(d).then(noop)}}function fromProtoBuf(e){return Model$1.decode(e).meshes}function parse$3(e,t,n,r,o){let s=[],c=[],l=new Set,u=fromProtoBuf(e),d=new TextureLoader,f=new three.Matrix4,p=new three.Vector3,m=new three.Quaternion,h=new three.Vector3,g={},_=new Set;for(let{name:e,chunks:v,matrix:y}of u)if(!(e===`Ceiling`||e===`CeilingDrop`))for(let u of y){f.elements=u.elements;let y=new three.Group;for(let e=0;e<v.length;e++){let s=parseGeometry(v[e].geometry);s.applyMatrix4(f),f.decompose(p,m,h),h.x*h.y*h.z<0&&s.attributes.normal&&s.attributes.position&&s.attributes.uv&&flipBufferGeometryNormals(s),l.add(s);let u=[];for(let s of v[e].material){let{material:e,textureReady:f}=parseMaterial(s,t,n||``,r,d,o,g,l,_);c.push(f),u.push(e)}let b=new PBMMesh(s,u);b.name=`chunk_`+e,b.matrix.compose(b.position,b.quaternion,b.scale),b.matrixAutoUpdate=!1,b.frustumCulled=!1,y.add(b)}y.name=e,s.push(y)}return Promise.all(c).catch(noop).then(()=>({createAt:0,description:``,objects:s,textures:Array.from(_),dispose:()=>{l.forEach(e=>{e.dispose()}),l.clear()}}))}function loadDomez(e,t={}){var n,r,o;let s=(n=t.upAxis)==null?`Z`:n,c=(r=t.fetcher)==null?internalFetcher:r,l=(o=t.onDownloadProgress)==null?noop:o,u={byteLength:0};return Promise.resolve().then(()=>c.ajax(e,{responseType:`arraybuffer`},void 0,void 0,l)).then(e=>(u.byteLength=e.body.byteLength,lzma(e.body))).then(e=>{let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;return e.forEach(e=>{n.set(e,r),r+=e.length}),n}).then(e=>{var n,r;return parse$3(e,(n=t.light)==null?!0:n,t.textureBaseUri||``,(r=t.textureOptions)==null?{}:r,c)}).then(t=>{let n=new three.Group;n.matrixAutoUpdate=!1,s===`Z`&&n.applyMatrix4(ROTATE_X_MATRIX$1),n.matrix.compose(n.position,n.quaternion,n.scale),n.name=e;for(let e of t.objects)n.add(e);return{type:`domez`,modelUpAxis:`Y`,upAxis:`Z`,uri:e,byteLength:u.byteLength,memoryUsage:getMemoryUsage(n),scene:n,textures:t.textures,animations:[],dispose:()=>t.dispose()}})}var SIZEOF_UINT32$1=4;function parseHeader$1(e,t,n){let r=new DataView(t);if(e.magic=r.getUint32(n,!0),n+=SIZEOF_UINT32$1,e.version=r.getUint32(n,!0),n+=SIZEOF_UINT32$1,e.byteLength=r.getUint32(n,!0),n+=SIZEOF_UINT32$1,e.version!==1)throw Error(`3D Tile Version ${e.version} not supported`);return n}var GL_TYPE;(function(e){e[e.BYTE=5120]=`BYTE`,e[e.UNSIGNED_BYTE=5121]=`UNSIGNED_BYTE`,e[e.SHORT=5122]=`SHORT`,e[e.UNSIGNED_SHORT=5123]=`UNSIGNED_SHORT`,e[e.INT=5124]=`INT`,e[e.UNSIGNED_INT=5125]=`UNSIGNED_INT`,e[e.FLOAT=5126]=`FLOAT`,e[e.DOUBLE=5130]=`DOUBLE`})(GL_TYPE||(GL_TYPE={}));var GL_TYPE_TO_ARRAY_TYPE={[GL_TYPE.DOUBLE]:Float64Array,[GL_TYPE.FLOAT]:Float32Array,[GL_TYPE.UNSIGNED_SHORT]:Uint16Array,[GL_TYPE.UNSIGNED_INT]:Uint32Array,[GL_TYPE.UNSIGNED_BYTE]:Uint8Array,[GL_TYPE.BYTE]:Int8Array,[GL_TYPE.SHORT]:Int16Array,[GL_TYPE.INT]:Int32Array},NAME_TO_GL_TYPE={DOUBLE:GL_TYPE.DOUBLE,FLOAT:GL_TYPE.FLOAT,UNSIGNED_SHORT:GL_TYPE.UNSIGNED_SHORT,UNSIGNED_INT:GL_TYPE.UNSIGNED_INT,UNSIGNED_BYTE:GL_TYPE.UNSIGNED_BYTE,BYTE:GL_TYPE.BYTE,SHORT:GL_TYPE.SHORT,INT:GL_TYPE.INT};function getArrayType(e){let t=GL_TYPE_TO_ARRAY_TYPE[e];if(!t)throw Error(`Failed to convert GL type`);return t}function getByteSize(e){return getArrayType(e).BYTES_PER_ELEMENT}function createTypedArray(e,t,n=0,r){let o=getArrayType(e);return n%getByteSize(e)===0?new o(t,n,r==null?(t.byteLength-n)/getByteSize(e):r):new o(r?t.slice(n,n+r*getByteSize(e)):t.slice(n))}function glTypeFromName(e){let t=NAME_TO_GL_TYPE[e];if(!t)throw Error(`Failed to convert GL type`);return t}var FeatureTable=class{constructor(e,t){this.featuresLength=0,this.cachedTypedArrays={},this.json=e,this.buffer=t;let n=this.getGlobalProperty(`POINTS_LENGTH`,GL_TYPE.UNSIGNED_INT,1);n&&n.length&&(this.featuresLength=n[0])}getExtension(e){return this.json.extensions&&this.json.extensions[e]}hasProperty(e){return!!this.json[e]}getGlobalProperty(e,t,n){let r=this.json[e];return typeof r==`number`?new(getArrayType(t))([r]):Array.isArray(r)?new(getArrayType(t))(r):r&&Number.isFinite(r.byteOffset)?this.getTypedArrayFromBinary(e,t,n,1,r.byteOffset):null}getPropertyArray(e,t,n){let r=this.json[e];return r&&Number.isFinite(r.byteOffset)?(`componentType`in r&&(t=glTypeFromName(r.componentType)),this.getTypedArrayFromBinary(e,t,n,this.featuresLength,r.byteOffset)):this.getTypedArrayFromArray(e,t,r)}getProperty(e,t,n,r,o){if(!this.json[e])return null;let s=this.getPropertyArray(e,t,n);if(n===1)return o[0]=s[r],o;for(let e=0;e<n;++e)o[e]=s[n*r+e];return o}getTypedArrayFromBinary(e,t,n,r,o){let s=this.cachedTypedArrays,c=s[e];return c||(c=createTypedArray(t,this.buffer.buffer,this.buffer.byteOffset+o,r*n),s[e]=c),c}getTypedArrayFromArray(e,t,n){let r=this.cachedTypedArrays,o=r[e];return o||(o=createTypedArray(t,n),r[e]=o),o}},SIZEOF_UINT32=4,DEPRECATION_WARNING=`b3dm tile in legacy format.`;function getStringFromArrayBuffer(e,t,n){let r=new TextDecoder(`utf8`),o=new Uint8Array(e,t,n);return r.decode(o)}function parseTable(e,t,n){return n=parseTablesHeader(e,t,n),n=parseFeatureTable(e,t,n),n=parseBatchTable(e,t,n),n}function parseTablesHeader(e,t,n){let r=new DataView(t),o=0;e.header=e.header||{};let s=r.getUint32(n,!0);n+=SIZEOF_UINT32;let c=r.getUint32(n,!0);n+=SIZEOF_UINT32;let l=r.getUint32(n,!0);n+=SIZEOF_UINT32;let u=r.getUint32(n,!0);return n+=SIZEOF_UINT32,l>=570425344?(n-=SIZEOF_UINT32*2,o=s,l=c,u=0,s=0,c=0,console.warn(DEPRECATION_WARNING)):u>=570425344&&(n-=SIZEOF_UINT32,o=l,l=s,u=c,s=0,c=0,console.warn(DEPRECATION_WARNING)),e.header.featureTableJsonByteLength=s,e.header.featureTableBinaryByteLength=c,e.header.batchTableJsonByteLength=l,e.header.batchTableBinaryByteLength=u,e.header.batchLength=o,n}function parseFeatureTable(e,t,n){let{featureTableJsonByteLength:r,featureTableBinaryByteLength:o,batchLength:s}=e.header||{};if(e.featureTableJson={BATCH_LENGTH:s||0},r&&r>0){let o=getStringFromArrayBuffer(t,n,r);e.featureTableJson=JSON.parse(o)}n+=r||0,e.featureTableBinary=new Uint8Array(t,n,o),n+=o||0;let c=new FeatureTable(e.featureTableJson,e.featureTableBinary);if(Array.isArray(c.json.RTC_CENTER)){let t=c.json.RTC_CENTER;e.rtcCenter=[t[0],t[1],t[2]]}else{let t=c.getGlobalProperty(`RTC_CENTER`,GL_TYPE.FLOAT,3);t&&(e.rtcCenter=[t[0],t[1],t[2]])}return n}function parseBatchTable(e,t,n){let{batchTableJsonByteLength:r,batchTableBinaryByteLength:o}=e.header||{};if(r&&r>0){let s=getStringFromArrayBuffer(t,n,r);e.batchTableJson=JSON.parse(s),n+=r,o&&o>0&&(e.batchTableBinary=new Uint8Array(t,n,o),e.batchTableBinary=new Uint8Array(e.batchTableBinary),n+=o)}return n}function sliceArrayBuffer(e,t,n){let r=n===void 0?new Uint8Array(e).subarray(t):new Uint8Array(e).subarray(t,t+n);return new Uint8Array(r).buffer}function parseGlTFArrayBuffer(e,t,n){let r=e.byteLength-n;if(r===0)throw Error(`glTF byte length must be greater than 0.`);return n%4!=0&&console.warn(`${e.type}: embedded glb is not aligned to a 4-byte boundary.`),e.gltfArrayBuffer=sliceArrayBuffer(t,n,r),e.byteLength}function decodeText(e){if(typeof TextDecoder<`u`)return new TextDecoder().decode(e);let t=``;for(let n=0,r=e.length;n<r;n++)t+=String.fromCharCode(e[n]);try{return decodeURIComponent(escape(t))}catch(e){return t}}var WEBGL_CONSTANTS={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},WEBGL_COMPONENT_TYPES={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},WEBGL_FILTERS={9728:three.NearestFilter,9729:three.LinearFilter,9984:three.NearestMipmapNearestFilter,9985:three.LinearMipmapNearestFilter,9986:three.NearestMipmapLinearFilter,9987:three.LinearMipmapLinearFilter},WEBGL_WRAPPINGS={33071:three.ClampToEdgeWrapping,33648:three.MirroredRepeatWrapping,10497:three.RepeatWrapping},WEBGL_TYPE_SIZES={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ATTRIBUTES={POSITION:`position`,NORMAL:`normal`,TANGENT:`tangent`,TEXCOORD_0:`uv`,TEXCOORD_1:`uv2`,TEXCOORD_2:`uv3`,TEXCOORD_3:`uv4`,COLOR_0:`color`,WEIGHTS_0:`skinWeight`,JOINTS_0:`skinIndex`},PATH_PROPERTIES={scale:`scale`,translation:`position`,rotation:`quaternion`,weights:`morphTargetInfluences`},INTERPOLATION={CUBICSPLINE:void 0,LINEAR:three.InterpolateLinear,STEP:three.InterpolateDiscrete},ALPHA_MODES={OPAQUE:`OPAQUE`,MASK:`MASK`,BLEND:`BLEND`};function values(e){let t=[];for(let n in e)t.push(e[n]);return t}function composeDsiposeSet(e){let t=Array.from(e);return()=>{for(let e of t)typeof e.dispose==`function`&&e.dispose(),typeof e.close==`function`&&e.close()}}var Parser=class{constructor(e,t,n){if(this.json=e,this.json.materials){let e=new Set;for(let t of this.json.materials){if(typeof t.name!=`string`)continue;let n=0;for(;t.name;){let r=t.name+(n>0?`__${n}`:``);if(!e.has(r)){e.add(r),t.name=r;break}console.warn(`glTF: material name "${t.name}" duplicated.`),n++}}e.clear()}if(this.json.nodes){let e=new Set;for(let t of this.json.nodes){if(typeof t.name!=`string`)continue;let n=0;for(;t.name;){let r=t.name+(n>0?`__${n}`:``);if(!e.has(r)){e.add(r),t.name=r;break}console.warn(`glTF: node name "${t.name}" duplicated.`),n++}}e.clear()}this.extensions=t,this.options=n,this.cache=new Map,this.disposeSet=new Set,this.textureSet=new Set,this.nodeNamesUsed={}}dispose(){this.cache.clear(),this.disposeSet.forEach(e=>{typeof e.dispose==`function`&&e.dispose(),typeof e.close==`function`&&e.close()}),this.disposeSet.clear(),this.textureSet.clear(),this.extensions={},this.json={asset:{version:`unknown`}}}markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n<r;n++){let r=t[n].joints;for(let t=0,n=r.length;t<n;t++)e[r[t]].isBone=!0}for(let t=0,r=e.length;t<r;t++){let r=e[t];r.mesh!==void 0&&r.skin!==void 0&&(n[r.mesh].isSkinnedMesh=!0)}}parse(){let e=this.json,t=this.extensions;this.markDefs();for(let e of values(t))e.markDefs(this);return Promise.all(values(t).map(e=>e.prepare(this))).then(()=>{var t,n,r;return Promise.all([Promise.all(((t=e.scenes)==null?[]:t).map((e,t)=>this.loadScene(t))),Promise.all(((n=e.cameras)==null?[]:n).map((e,t)=>this.loadCamera(t))),Promise.all(((r=e.animations)==null?[]:r).map((e,t)=>this.loadAnimation(t)))])}).then(([t,n,r])=>({json:e,scene:t[e.scene||0],scenes:t,animations:r,cameras:n,textures:[],dispose:noop})).then(e=>Promise.all(values(t).map(t=>t.emitResult(e,this))).then(()=>e)).then(e=>{let t=Array.from(this.textureSet),n=composeDsiposeSet(this.disposeSet);return Object.assign(e,{textures:t,dispose:n}),this.textureSet.clear(),this.disposeSet.clear(),this.dispose(),e})}loadCamera(e){let t=`camera:`+e,n=this.cache.get(t);if(n)return n;let r=null;for(let t of values(this.extensions))if(r=t.loadCamera(e,this),r)break;if(!r){let t,n=this.json.cameras[e],o=n[n.type];o?n.type===`perspective`?t=new three.PerspectiveCamera(three.MathUtils.radToDeg(o.yfov),o.aspectRatio||1,o.znear||1,o.zfar||2e6):n.type===`orthographic`?t=new three.OrthographicCamera(-o.xmag,o.xmag,o.ymag,-o.ymag,o.znear,o.zfar):(console.warn(`glTF: Invalid camera type ${n.type}.`),t=new three.Camera):(console.warn(`glTF: Missing camera parameters.`),t=new three.Camera),n.name&&(t.name=n.name),r=Promise.resolve(t)}return this.cache.set(t,r),r}loadSkin(e){let t=`skin:`+e,n=this.cache.get(t);if(n)return n;let r,o=this.json.skins[e],s={joints:o.joints};return r=o.inverseBindMatrices===void 0?Promise.resolve(s):this.loadAccessor(o.inverseBindMatrices).then(e=>(e&&(s.inverseBindMatrices=e),s)),this.cache.set(t,r),r}loadAnimation(e){var t;let n=`animation:`+e,r=this.cache.get(n);if(r)return r;let o=null;for(let t of values(this.extensions))if(o=t.loadAnimation(e,this),o)break;if(!o){let n=this.json.animations[e],r=n.name?n.name:`animation_`+e,s=[],c=[],l=[],u=[],d=[];for(let e=0,r=n.channels.length;e<r;e++){let r=n.channels[e],o=n.samplers[r.sampler],f=r.target,p=f.node===void 0?f.id:f.node,m=n.parameters===void 0?o.input:n.parameters[o.input],h=n.parameters===void 0?o.output:n.parameters[o.output],g=(t=f.extensions)==null?{}:t;if(f.path===`pointer`&&g.KHR_animation_pointer&&g.KHR_animation_pointer.pointer&&/^\/nodes\/\d+\//.test(g.KHR_animation_pointer.pointer)){let e=g.KHR_animation_pointer.pointer.slice(1).split(`/`),t=Number(e[1]);s.push(this.loadNode(t))}else p===void 0?s.push(Promise.resolve(null)):s.push(this.loadNode(p));c.push(this.loadAccessor(m)),l.push(this.loadAccessor(h)),u.push(o),d.push(f)}o=Promise.all([Promise.all(s),Promise.all(c),Promise.all(l),Promise.all(u),Promise.all(d)]).then(([e,t,n,o,s])=>{var c;let l=[];for(let r=0,u=e.length;r<u;r++){let u=e[r],d=t[r],f=n[r],p=o[r],m=s[r];u&&(u.updateMatrix(),u.matrixAutoUpdate=!0);let h=f.array;if(f.normalized){let e=getNormalizedComponentScale(h.constructor),t=new Float32Array(h.length);for(let n=0,r=h.length;n<r;n++)t[n]=h[n]*e;h=t}let g=p.interpolation===void 0?three.InterpolateLinear:INTERPOLATION[p.interpolation],_=(c=m.extensions)==null?{}:c;if(_.KHR_animation_pointer&&m.path&&m.path===`pointer`){let e=_.KHR_animation_pointer.pointer;if(e.indexOf(`/nodes/`)===0){let t=e.match(/^\/nodes\/(\d+)\/(.+)/);if(!t)continue;Number(t[1]);let n=t[2],r;switch(n){case`weights`:n=`morphTargetInfluences`,r=three.NumberKeyframeTrack;break;case`rotation`:n=`quaternion`,r=three.QuaternionKeyframeTrack;break;case`translation`:n=`position`,r=three.VectorKeyframeTrack;break;case`scale`:n=`scale`,r=three.VectorKeyframeTrack;break;case`extensions/KHR_node_visibility/visible`:n=`visible`,r=three.BooleanKeyframeTrack;break;default:break}if(!r)continue;let o=[];if(u){let e=u.name?u.name:u.uuid;n===`morphTargetInfluences`?u.traverse(e=>{e.morphTargetInfluences&&o.push(e.name?e.name:e.uuid)}):o.push(e)}for(let e=0,t=o.length;e<t;e++){let t=new r(`.nodes.${o[e]}.${n}`,d.array,r===three.BooleanKeyframeTrack?Array.from(h).map(e=>e>0):h,g);l.push(t)}}else if(e.indexOf(`/materials/`)===0){let t=e.match(/^\/materials\/(\d+)\/(.+)/);if(!t)continue;let n=Number(t[1]),r=t[2],o=this.json.materials[n].name,s;switch(r){case`pbrMetallicRoughness/baseColorFactor`:r=`color`,s=three.ColorKeyframeTrack;break;case`pbrMetallicRoughness/roughnessFactor`:r=`roughness`,s=three.NumberKeyframeTrack;break;case`pbrMetallicRoughness/metallicFactor`:r=`metalness`,s=three.NumberKeyframeTrack;break;case`emissiveFactor`:r=`emissive`,s=three.NumberKeyframeTrack;break;case`alphaCutoff`:r=`alphaTest`,s=three.NumberKeyframeTrack;break;case`occlusionTexture/strength`:r=`aoMapIntensity`,s=three.NumberKeyframeTrack;break;case`normalTexture/scale`:r=`normalScale`,s=three.VectorKeyframeTrack;break;case`pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale`:r=`map.repeat`,s=three.VectorKeyframeTrack;break;case`pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset`:r=`map.offset`,s=three.VectorKeyframeTrack;break;case`pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/rotation`:r=`map.rotation`,s=three.NumberKeyframeTrack;break;case`normalTexture/extensions/KHR_texture_transform/scale`:r=`normalMap.repeat`,s=three.VectorKeyframeTrack;break;case`normalTexture/extensions/KHR_texture_transform/offset`:r=`normalMap.offset`,s=three.VectorKeyframeTrack;break;case`normalTexture/extensions/KHR_texture_transform/rotation`:r=`normalMap.rotation`,s=three.NumberKeyframeTrack;break;case`emissiveTexture/extensions/KHR_texture_transform/scale`:r=`emissiveMap.repeat`,s=three.VectorKeyframeTrack;break;case`emissiveTexture/extensions/KHR_texture_transform/offset`:r=`emissiveMap.offset`,s=three.VectorKeyframeTrack;break;case`emissiveTexture/extensions/KHR_texture_transform/rotation`:r=`emissiveMap.rotation`,s=three.NumberKeyframeTrack;break;case`occlusionTexture/extensions/KHR_texture_transform/scale`:r=`aoMap.repeat`,s=three.VectorKeyframeTrack;break;case`occlusionTexture/extensions/KHR_texture_transform/offset`:r=`aoMap.offset`,s=three.VectorKeyframeTrack;break;case`occlusionTexture/extensions/KHR_texture_transform/rotation`:r=`aoMap.rotation`,s=three.NumberKeyframeTrack;break;case`extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/scale`:r=`clearcoatNormalMap.scale`,s=three.NumberKeyframeTrack;break;case`extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/offset`:r=`clearcoatNormalMap.offset`,s=three.VectorKeyframeTrack;break;case`extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/rotation`:r=`clearcoatNormalMap.rotation`,s=three.NumberKeyframeTrack;break;default:break}if(!s)continue;let c=new s(`.materials.${o}.${r}`,d.array,h,g);if(l.push(c),r===`color`&&f.itemSize===4){let e=new Float32Array(h.length/4);for(let t=0,n=h.length/4;t<n;t+=1)e[t]=h[t*4+3];let t=new three.NumberKeyframeTrack(`.materials.${o}.opacity`,d.array,e,g);l.push(t)}}else if(e.indexOf(`/cameras/`)===0){let t=e.match(/^\/cameras\/(\d+)\/(.+)/);if(!t)continue;let n=Number(t[1]),r=t[2],o=this.json.cameras[n].name,s;switch(r){case`perspective/yfov`:r=`fov`,s=three.NumberKeyframeTrack;break;case`perspective/znear`:case`orthographic/znear`:r=`near`,s=three.NumberKeyframeTrack;break;case`perspective/zfar`:case`orthographic/zfar`:r=`far`,s=three.NumberKeyframeTrack;break;case`perspective/aspect`:r=`aspect`,s=three.NumberKeyframeTrack;break;default:break}if(!s)continue;let c=new s(`.cameras.${o}.${r}`,d.array,h,g);l.push(c)}}else{let e;switch(PATH_PROPERTIES[m.path]){case PATH_PROPERTIES.weights:e=three.NumberKeyframeTrack;break;case PATH_PROPERTIES.rotation:e=three.QuaternionKeyframeTrack;break;case PATH_PROPERTIES.position:case PATH_PROPERTIES.scale:default:e=three.VectorKeyframeTrack;break}let t=[];if(u){let e=u.name?u.name:u.uuid;PATH_PROPERTIES[m.path]===PATH_PROPERTIES.weights?u.traverse(e=>{e.morphTargetInfluences&&t.push(e.name?e.name:e.uuid)}):t.push(e)}let n=f.array;if(f.normalized){let e=getNormalizedComponentScale(n.constructor),t=new Float32Array(n.length);for(let r=0,o=n.length;r<o;r++)t[r]=n[r]*e;n=t}for(let r=0,o=t.length;r<o;r++){let o=new e(t[r]+`.`+PATH_PROPERTIES[m.path],d.array,n,g);l.push(o)}}}return new three.AnimationClip(r,void 0,l)})}return this.cache.set(n,o),o}loadBuffer(e){let t=this.json.buffers[e];if(t.type&&t.type!==`arraybuffer`)throw Error(`glTF: `+t.type+` buffer type is not supported.`);let n=`buffer:`+e,r=this.cache.get(n);if(r)return r;let o=null;for(let t of values(this.extensions))if(o=t.loadBuffer(e,this),o)break;if(!o){let t=this.json.buffers[e];o=this.options.fetcher.ajax(this.resolveResouce(t.uri),{responseType:`arraybuffer`}).then(e=>e.body)}return this.cache.set(n,o),o}loadBufferView(e){let t=`bufferView:`+e,n=this.cache.get(t);if(n)return n;let r=null;for(let t of values(this.extensions))if(r=t.loadBufferView(e,this),r)break;if(!r){let t=this.json.bufferViews[e];r=this.loadBuffer(t.buffer).then(e=>{let n=t.byteLength||0,r=t.byteOffset||0;return e.slice(r,r+n)})}return this.cache.set(t,r),r}loadAccessor(e){let t=`accessor:`+e,n=this.cache.get(t);if(n)return n;let r=null;if(!r){let t=this.json.accessors[e];if(t.bufferView===void 0&&t.sparse===void 0)r=Promise.resolve(null);else{let e=[];t.bufferView===void 0?e.push(Promise.resolve(null)):e.push(this.loadBufferView(t.bufferView)),t.sparse!==void 0&&(e.push(this.loadBufferView(t.sparse.indices.bufferView)),e.push(this.loadBufferView(t.sparse.values.bufferView))),r=Promise.all(e).then(e=>{let n=e[0],r=WEBGL_TYPE_SIZES[t.type],o=WEBGL_COMPONENT_TYPES[t.componentType],s=o.BYTES_PER_ELEMENT,c=s*r,l=t.byteOffset||0,u=t.bufferView===void 0?void 0:this.json.bufferViews[t.bufferView].byteStride,d=t.normalized===!0,f,p;if(u&&u!==c){let e=Math.floor(l/u),c=`InterleavedBuffer:`+t.bufferView+`:`+t.componentType+`:`+e+`:`+t.count,m=this.cache.get(c);m||(f=new o(n,e*u,t.count*u/s),m=new three.InterleavedBuffer(f,u/s),this.cache.set(c,m)),p=new three.InterleavedBufferAttribute(m,r,l%u/s,d)}else f=n===null?new o(t.count*r):new o(n,l,t.count*r),p=new three.BufferAttribute(f,r,d);if(t.sparse!==void 0){let s=WEBGL_TYPE_SIZES.SCALAR,c=WEBGL_COMPONENT_TYPES[t.sparse.indices.componentType],l=t.sparse.indices.byteOffset||0,u=t.sparse.values.byteOffset||0,d=new c(e[1],l,t.sparse.count*s),f=new o(e[2],u,t.sparse.count*r);n!==null&&(p=new three.BufferAttribute(p.array.slice(),p.itemSize,p.normalized));for(let e=0,t=d.length;e<t;e++){let t=d[e];if(p.setX(t,f[e*r]),r>=2&&p.setY(t,f[e*r+1]),r>=3&&p.setZ(t,f[e*r+2]),r>=4&&p.setW(t,f[e*r+3]),r>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}}return p})}}return this.cache.set(t,r),r}createPrimitiveKey(e){for(let t of values(this.extensions)){let n=t.createPrimitiveKey(e,this);if(n)return n}let t=``,n=Object.keys(e.attributes).sort();for(let r=0,o=n.length;r<o;r++)t+=n[r]+`:`+e.attributes[n[r]]+`;`;return e.indices+`:`+t+`:`+e.mode}loadGeometry(e){let t=null;for(let n of values(this.extensions))if(t=n.loadGeometry(e,this),t)break;return t||(t=this.addGeometryPrimitiveAttributes(new three.BufferGeometry,e)),t=t.then(e=>(this.disposeSet.add(e),e)),t}loadImage(e){let t=null;for(let n of values(this.extensions))if(t=n.loadImage(e,this),t)break;if(!t){let n=this.json.images[e];if(n.bufferView!==void 0){let e=this.json.bufferViews[n.bufferView];t=this.loadBuffer(e.buffer).then(t=>{let r=e.byteOffset||0,o=e.byteLength||0;return createImageBitmapLike(new Blob([new Uint8Array(t,r,o)],{type:n.mimeType}))})}else if(n.uri){let e=this.resolveResouce(n.uri);t=canUseNativeImageBitmap()?this.options.fetcher.ajax(e,{responseType:`blob`}).then(e=>{let t=e.body;return createImageBitmapLike(t)}):this.options.fetcher.loadImage(e,{},void 0,void 0,void 0,createImageBitmapLikeImage()).then(e=>e.body)}else throw Error(`glTF: Invalid image defs.`)}return t=t.then(e=>(this.disposeSet.add(e),e)),t}loadMeshPrimitive(e,t){let n=null;for(let r of values(this.extensions))if(n=r.loadMeshPrimitive(e,t,this),n)break;if(!n){let r=this.loadGeometry(t),o=this.loadMaterial(t);n=Promise.all([r,o]).then(([n,r])=>{var o;let s=(o=t.mode)==null?WEBGL_CONSTANTS.TRIANGLES:o,c;if(s===WEBGL_CONSTANTS.TRIANGLES||s===WEBGL_CONSTANTS.TRIANGLE_STRIP||s===WEBGL_CONSTANTS.TRIANGLE_FAN)if(s===WEBGL_CONSTANTS.TRIANGLE_STRIP?n=this.toGeometryTrianglesDrawMode(n,three.TriangleStripDrawMode):s===WEBGL_CONSTANTS.TRIANGLE_FAN&&(n=this.toGeometryTrianglesDrawMode(n,three.TriangleFanDrawMode)),n.clearGroups(),n.addGroup(0,n.index?n.index.count:n.attributes.position.count,0),this.disposeSet.add(n),e.isSkinnedMesh){let e=new PBMSkinnedMesh(n,[r]);this.normalizeSkinWeights(e),c=e}else c=new PBMMesh(n,[r]);else if(s===WEBGL_CONSTANTS.LINES)c=new three.LineSegments(n,r);else if(s===WEBGL_CONSTANTS.LINE_STRIP)c=new three.Line(n,r);else if(s===WEBGL_CONSTANTS.LINE_LOOP)c=new three.LineLoop(n,r);else if(s===WEBGL_CONSTANTS.POINTS)c=new PBMPointCloud(n,r);else throw Error(`glTF: Primitive mode unsupported: `+s);if(Object.keys(n.morphAttributes).length>0){if(e.weights!==void 0)for(let t=0,n=e.weights.length;t<n;t++)c.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){let t=e.extras.targetNames;if(c.morphTargetInfluences.length===t.length){c.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++)c.morphTargetDictionary[t[e]]=e}else console.warn(`glTF: Invalid extras.targetNames length. Ignoring names.`)}}return c})}return n}loadMesh(e){let t=null;for(let n of values(this.extensions))if(t=n.loadMesh(e,this),t)break;if(!t){let n=this.json.meshes[e],r=n.primitives;t=Promise.all(r.map(e=>this.loadMeshPrimitive(n,e))).then(t=>{for(let o=0;o<r.length;o++){let r=t[o];r.name=n.name||`mesh_`+e,this.assignFinalMaterial(r),t.push(r)}if(t.length===1)return t[0];let o=new three.Group;o.name=n.name;for(let e of t)o.add(e);return o})}return t}loadMaterial(e){var t;let n=(t=e.mode)==null?WEBGL_CONSTANTS.TRIANGLES:t,r=`material:`+this.createPrimitiveKey(e),o=this.cache.get(r);if(o)return o;let s=null;for(let t of values(this.extensions))if(s=t.loadMaterial(e,this),s)break;if(!s){if(n===WEBGL_CONSTANTS.TRIANGLES||n===WEBGL_CONSTANTS.TRIANGLE_STRIP||n===WEBGL_CONSTANTS.TRIANGLE_FAN)s=this.loadMaterialAsPBMMeshMaterial(e);else if(n===WEBGL_CONSTANTS.LINES||n===WEBGL_CONSTANTS.LINE_STRIP||n===WEBGL_CONSTANTS.LINE_LOOP)s=this.loadMaterialAsLineBasicMaterial(e);else if(n===WEBGL_CONSTANTS.POINTS)s=this.loadMaterialAsPBMPointCloudMaterial(e);else throw Error(`glTF: Primitive mode unsupported: `+n);s=s.then(t=>Promise.all(values(this.extensions).map(n=>n.extendMaterial(t,e,this))).then(()=>t))}return s}loadMaterialAsPBMPointCloudMaterial(e){let t=new PBMPointCloudMaterial;return this.disposeSet.add(t),Promise.resolve(t)}loadMaterialAsPBMMeshMaterial(e){let t=[],n=new PBMMeshMaterial(`standard`);if(n.color=new three.Color(1,1,1),n.opacity=1,n.colorAlpha=1,e.material!==void 0){let r=this.json.materials[e.material];r.name&&(n.name=r.name);let o=r.pbrMetallicRoughness||{};if(Array.isArray(o.baseColorFactor)){let e=o.baseColorFactor;n.color=new three.Color().fromArray(e),n.colorAlpha=e[3]}o.baseColorTexture!==void 0&&t.push(this.createMaterialTexture(o.baseColorTexture).then(e=>{e.encoding=three.sRGBEncoding,n.map=e,r.alphaMode===ALPHA_MODES.MASK&&!(e instanceof three.CompressedTexture)&&e.minFilter!==three.LinearMipmapLinearFilter&&(e.minFilter=three.LinearMipmapLinearFilter,e.generateMipmaps=!0),this.disposeSet.add(e)})),n.metalness=o.metallicFactor===void 0?1:o.metallicFactor,n.roughness=o.roughnessFactor===void 0?1:o.roughnessFactor,o.metallicRoughnessTexture!==void 0&&t.push(this.createMaterialTexture(o.metallicRoughnessTexture).then(e=>{e.format=three.RGBFormat,n.roughnessMap=e,n.metalnessMap=e,this.disposeSet.add(e)})),r.doubleSided===!0&&(n.side=three.DoubleSide);let s=r.alphaMode||ALPHA_MODES.OPAQUE;if(n.alphaMode=`OPAQUE`,s===ALPHA_MODES.BLEND?(n.alphaMode=`BLEND`,n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,s===ALPHA_MODES.MASK&&(n.alphaMode=`MASK`,n.alphaTest=r.alphaCutoff===void 0?.5:r.alphaCutoff)),r.normalTexture!==void 0&&(t.push(this.createMaterialTexture(r.normalTexture).then(e=>{this.disposeSet.add(e),n.normalMap=e})),n.normalScale=new three.Vector2(1,1),r.normalTexture.scale!==void 0)){let e=r.normalTexture.scale;n.normalScale.set(e,e)}r.occlusionTexture!==void 0&&(t.push(this.createMaterialTexture(r.occlusionTexture).then(e=>{e.format=three.RGBFormat,n.aoMap=e,this.disposeSet.add(e)})),r.occlusionTexture.strength!==void 0&&(n.aoMapIntensity=r.occlusionTexture.strength)),r.emissiveFactor!==void 0&&(n.emissive=new three.Color().fromArray(r.emissiveFactor)),r.emissiveTexture!==void 0&&t.push(this.createMaterialTexture(r.emissiveTexture).then(e=>{e.format=three.RGBFormat,n.emissiveMap=e,this.disposeSet.add(e)}))}return this.disposeSet.add(n),Promise.all(t).then(()=>n)}loadMaterialAsLineBasicMaterial(e){let t=[],n=new three.LineBasicMaterial;if(n.color=new three.Color(1,1,1),n.opacity=1,e.material!==void 0){let t=this.json.materials[e.material];t.name&&(n.name=t.name);let r=t.pbrMetallicRoughness||{};if(Array.isArray(r.baseColorFactor)){let e=r.baseColorFactor;n.color.fromArray(e),n.opacity=e[3]}t.doubleSided===!0&&(n.side=three.DoubleSide);let o=t.alphaMode||ALPHA_MODES.OPAQUE;o===ALPHA_MODES.BLEND?(n.transparent=!0,n.depthWrite=!1):(n.transparent=!1,o===ALPHA_MODES.MASK&&(n.alphaTest=t.alphaCutoff===void 0?.5:t.alphaCutoff))}return this.disposeSet.add(n),Promise.all(t).then(()=>n)}loadTexture(e){let t=`texture:`+e,n=this.cache.get(t);if(n)return n;let r=null;for(let t of values(this.extensions))if(r=t.loadTexture(e,this),r)break;if(!r){let t=this.json.textures[e];r=this.loadImage(t.source).then(e=>{let n=new three.Texture(e);n.needsUpdate=!0,n.flipY=!1,t.name&&(n.name=t.name);let r=(this.json.samplers||{})[t.sampler]||{};return n.magFilter=WEBGL_FILTERS[r.magFilter]||three.LinearFilter,n.minFilter=WEBGL_FILTERS[r.minFilter]||three.LinearMipmapLinearFilter,n.wrapS=WEBGL_WRAPPINGS[r.wrapS]||three.RepeatWrapping,n.wrapT=WEBGL_WRAPPINGS[r.wrapT]||three.RepeatWrapping,n.onUpdate=function(){e.close()},n})}return r=r.then(e=>(this.disposeSet.add(e),e)),this.cache.set(t,r),r}normalizeSkinWeights(e){let t=e.geometry,n=t.attributes.skinWeight,r=1;if(n.array instanceof Uint8Array?r=255:n.array instanceof Uint16Array?r=65535:n.array instanceof Uint32Array&&(r=4294967295),r>1){let e=n.count,o=n.itemSize,s=n.normalized,c=new three.BufferAttribute(new Float32Array(e*o),o,s);for(let t=0;t<e;t++)c.setX(t,n.getX(t)/r),c.setY(t,n.getY(t)/r),c.setZ(t,n.getZ(t)/r),c.setW(t,n.getW(t)/r);t.attributes.skinWeight=c}n.normalized||e.normalizeSkinWeights()}assignFinalMaterial(e){let t=e.geometry,n=[].concat(e.material),r=t.attributes.tangent!==void 0,o=t.attributes.color!==void 0,s=t.attributes.normal===void 0,c=e instanceof three.SkinnedMesh,l=Object.keys(t.morphAttributes).length>0,u=l&&t.morphAttributes.normal!==void 0;n=n.map(e=>{if(r||o||s||c||l||u){let t=`cloned-material:`+e.uuid+`:`;r&&(t+=`vertex-tangents:`),o&&(t+=`vertex-colors:`),s&&(t+=`flat-shading:`),c&&(t+=`skinning:`),l&&(t+=`morph-targets:`),u&&(t+=`morph-normals:`);let n=this.cache.get(t);n||(n=e.clone(),r&&(n.vertexTangents=!0),o&&(n.vertexColors=!0),s&&(n.flatShading=!0),c&&(n.skinning=!0),l&&(n.morphTargets=!0),u&&(n.morphNormals=!0),r&&(n.normalScale&&(n.normalScale.y*=-1),n.clearcoatNormalScale&&(n.clearcoatNormalScale.y*=-1)),this.cache.set(t,n)),e=n}return e}),Array.isArray(e.material)?e.material=n:e.material=n[0]}loadNodeAttachments(e){let t=[];for(let n of values(this.extensions)){let r=n.loadNodeAttachments(e,this);r&&t.push(r)}return t}loadNode(e){let t=`node:`+e,n=this.cache.get(t);if(n)return n;let r=this.json.nodes[e],o=[];r.mesh!==void 0&&o.push(this.loadMesh(r.mesh).then(e=>{if(r.weights!==void 0){let t=r.weights;e.traverse(e=>{if(e instanceof three.Mesh||e instanceof three.Line||e instanceof three.Points)for(let n=0,r=t.length;n<r;n++)e.morphTargetInfluences[n]=t[n]})}return e})),r.camera!==void 0&&o.push(this.loadCamera(r.camera));let s=this.loadNodeAttachments(e);for(let e of s)o.push(e);let c=Promise.all(o).then(e=>{let t;if(t=r.isBone===!0?new three.Bone:e.length>1?new three.Group:e.length===1?e[0]:new three.Object3D,t!==e[0])for(let n=0,r=e.length;n<r;n++)t.add(e[n]);if(r.name&&(t.userData.name=r.name,t.name=three.PropertyBinding.sanitizeNodeName(r.name)),r.matrix!==void 0){let e=new three.Matrix4;e.fromArray(r.matrix),t.applyMatrix4(e)}else r.translation!==void 0&&t.position.fromArray(r.translation),r.rotation!==void 0&&t.quaternion.fromArray(r.rotation),r.scale!==void 0&&t.scale.fromArray(r.scale);return c=c.then(e=>Promise.all(values(this.extensions).map(t=>t.extendNode(e,r,this))).then(()=>e)),t});return this.cache.set(t,c),c}loadScene(e){let t=this.json.scenes[e],n=new three.Group;t.name&&(n.name=t.name);let r=t.nodes||[],o=[];for(let e=0,t=r.length;e<t;e++)o.push(this.buildNodeHierarchy(r[e],n));return Promise.all(o).then(()=>n)}createMaterialTexture(e){return this.loadTexture(e.index).then(t=>{t instanceof three.CompressedTexture||(t.minFilter=three.LinearFilter,t.magFilter=three.LinearFilter,t.generateMipmaps=!1);for(let n of values(this.extensions)){let r=n.extendTexture(t,e,this);r&&(t=r)}return this.textureSet.add(t),this.disposeSet.add(t),t})}addGeometryPrimitiveAttributes(e,t){let n=t.attributes,r=[];for(let t in n){let o=ATTRIBUTES[t]||t.toLowerCase();o in e.attributes||r.push(this.loadAccessor(n[t]).then(t=>{t&&e.setAttribute(o,t)}))}t.indices!==void 0&&!e.index&&r.push(this.loadAccessor(t.indices).then(t=>{t&&e.setIndex(t)}));let o=new three.Box3;if(n.POSITION!==void 0){let e=this.json.accessors[n.POSITION],t=e.min,r=e.max;if(t!==void 0&&r!==void 0){if(o.set(new three.Vector3(t[0],t[1],t[2]),new three.Vector3(r[0],r[1],r[2])),e.normalized){let t=getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[e.componentType]);o.min.multiplyScalar(t),o.max.multiplyScalar(t)}}else console.warn(`glTF: Missing min/max properties for accessor POSITION.`)}let s=t.targets;if(s!==void 0){let e=new three.Vector3,t=new three.Vector3;for(let n=0,r=s.length;n<r;n++){let r=s[n];if(r.POSITION!==void 0){let n=this.json.accessors[r.POSITION],o=n.min,s=n.max;if(o!==void 0&&s!==void 0){if(t.setX(Math.max(Math.abs(o[0]),Math.abs(s[0]))),t.setY(Math.max(Math.abs(o[1]),Math.abs(s[1]))),t.setZ(Math.max(Math.abs(o[2]),Math.abs(s[2]))),n.normalized){let e=getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn(`glTF: Missing min/max properties for accessor POSITION.`)}}o.expandByVector(e)}e.boundingBox=o;let c=new three.Sphere;return o.getCenter(c.center),c.radius=o.min.distanceTo(o.max)/2,e.boundingSphere=c,Promise.all(r).then(()=>{let n=!1;if(t.material!==void 0&&this.json.materials[t.material].occlusionTexture&&(n=!0),(n||this.options.copyUV2)&&e.attributes.uv&&!e.attributes.uv2&&e.setAttribute(`uv2`,e.attributes.uv),t.targets){let n=!1,r=!1;for(let e=0,o=t.targets.length;e<o;e++){let o=t.targets[e];if(o.POSITION!==void 0&&(n=!0),o.NORMAL!==void 0&&(r=!0),n&&r)break}if(!n&&!r)return e;let o=[];e.morphTargetsRelative=!0;for(let s=0,c=t.targets.length;s<c;s++){let c=t.targets[s];n?o.push(this.loadAccessor(c.POSITION).then(t=>{t&&(e.morphAttributes.position=e.morphAttributes.position||[],e.morphAttributes.position[s]=t)})):e.attributes.position&&(e.morphAttributes.position=e.morphAttributes.position||[],e.morphAttributes.position[s]=e.attributes.position),r?o.push(this.loadAccessor(c.NORMAL).then(t=>{t&&(e.morphAttributes.normal=e.morphAttributes.normal||[],e.morphAttributes.normal[s]=t)})):e.attributes.normal&&(e.morphAttributes.normal=e.morphAttributes.normal||[],e.morphAttributes.normal[s]=e.attributes.normal)}return Promise.all(o).then(()=>e)}else return e})}buildNodeHierarchy(e,t){let n=this.json.nodes[e];return this.loadNode(e).then(e=>{if(n.skin===void 0)return e;let t;return this.loadSkin(n.skin).then(e=>{t=e;let n=[];for(let e=0,r=t.joints.length;e<r;e++)n.push(this.loadNode(t.joints[e]));return Promise.all(n)}).then(n=>(e.traverse(e=>{if(!(e instanceof three.SkinnedMesh))return;let r=[],o=[];for(let e=0,s=n.length;e<s;e++){let s=n[e];if(s instanceof three.Bone){r.push(s);let n=new three.Matrix4;t.inverseBindMatrices!==void 0&&n.fromArray(t.inverseBindMatrices.array,e*16),o.push(n)}else console.warn(`glTF: Joint "%s" could not be found.`,t.joints[e])}let s=new three.Skeleton(r,o);e.bind(s,e.matrixWorld)}),e))}).then(e=>{t.add(e);let r=[];if(n.children){let t=n.children;for(let n=0,o=t.length;n<o;n++){let o=t[n];r.push(this.buildNodeHierarchy(o,e))}}return Promise.all(r).then(()=>e)})}resolveResouce(e){return/^[a-z]{0,8}\:/i.test(e)?e:pathJoin(this.options.resourcePath,appendSearch(e,this.options.search))}toGeometryTrianglesDrawMode(e,t){let n=e.getIndex();if(n===null){let t=[],r=e.getAttribute(`position`);if(r!==void 0){for(let e=0;e<r.count;e++)t.push(e);e.setIndex(t),n=e.getIndex()}}if(n===null)return console.error(`glTF: Undefined position attribute. Processing not possible.`),e;let r=n.count-2,o=[];if(t===three.TriangleFanDrawMode)for(let e=1;e<=r;e++)o.push(n.getX(0)),o.push(n.getX(e)),o.push(n.getX(e+1));else for(let e=0;e<r;e++)e%2==0?(o.push(n.getX(e)),o.push(n.getX(e+1)),o.push(n.getX(e+2))):(o.push(n.getX(e+2)),o.push(n.getX(e+1)),o.push(n.getX(e)));o.length/3!==r&&console.error(`glTF: Unable to generate correct amount of triangles.`);let s=e.clone();return s.setIndex(o),this.disposeSet.add(s),s}};function getNormalizedComponentScale(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw Error(`glTF: Unsupported normalized accessor component type.`)}}var _havePatchedPropertyBindings=!1,findNodeFn=null;function _ensurePropertyBindingPatch(){if(_havePatchedPropertyBindings)return;_havePatchedPropertyBindings=!0;let e=findNodeFn||(findNodeFn=three.PropertyBinding.findNode);three.PropertyBinding.findNode=function(t,n){if(!n)return e(t,n);if(n.startsWith(`.materials.`)){let e=n.substring(11).substring(n.indexOf(`.`)),r=e.indexOf(`.`),o=r<0?e:e.substring(0,r),s=r<0?null:e.slice(r+1),c=null;return t.traverse(e=>{if(c!==null||e.type!==`Mesh`&&e.type!==`SkinnedMesh`)return;let t=[].concat(e.material);for(let e of t)e&&(e.uuid===o||e.name===o)&&(c=e,c!==null&&s&&(c=c[s]))}),c}else if(n.startsWith(`.nodes.`)||n.startsWith(`.lights.`)||n.startsWith(`.cameras.`)){let r=n.split(`.`),o;for(let e=1;e<r.length;e++){let n=r[e];if(n.length==36)o=t.getObjectByProperty(`uuid`,n);else if(o&&o[n]){let e=Number.parseInt(n),t=n;e>=0&&(t=e),o=o[t]}else{let e=t.getObjectByName(n);e&&(o=e)}}if(!o){let o=e(t,r[2]);return o||console.warn(`KHR_animation_pointer: Property binding not found`,n,t,t.name,r),o}return o}let r=e(t,n);return r||(console.error(`THREE.PropertyBinding: Trying to update node for track: `+n+` but it wasn't found.`),r=new three.Object3D,r.name=n,r.visible=!1,t.add(r)),r=e(t,n),r}}_ensurePropertyBindingPatch();var BaseExtension=class{markDefs(e){}prepare(e){}emitResult(e,t){}createPrimitiveKey(e,t){}extendTexture(e,t,n){return null}loadBuffer(e,t){return null}loadBufferView(e,t){return null}loadImage(e,t){return null}loadTexture(e,t){return null}loadGeometry(e,t){return null}loadMaterial(e,t){return null}loadMeshPrimitive(e,t,n){return null}extendMaterial(e,t,n){return Promise.resolve()}loadMesh(e,t){return null}extendNode(e,t,n){return Promise.resolve()}loadNodeAttachments(e,t){return null}loadCamera(e,t){return null}loadAnimation(e,t){return null}},EXTENSION_NAME$14=`KHR_binary_glTF`,KHR_binary_glTF=class e extends BaseExtension{static getMagic(e){return decodeText(new Uint8Array(e.slice(0,4)))}constructor(){super(),this.header={magic:``,version:0,length:0},this.content=``,this.body=null}loadGlbBinary(t){let n=new DataView(t,0,e.HEADER_LENGTH);if(this.header={magic:e.getMagic(t),version:n.getUint32(4,!0),length:n.getUint32(8,!0)},this.header.magic!==e.HEADER_MAGIC)throw Error(`glTF:KHR_binary_glTF: Unsupported.`);if(this.header.version<2)throw Error(`glTF:KHR_binary_glTF: Legacy binary file detected.`);let r=new DataView(t,e.HEADER_LENGTH),o=0,s=null,c=null;for(;o<r.byteLength;){let n=r.getUint32(o,!0);if(o+=4,n===0)continue;let l=r.getUint32(o,!0);if(o+=4,l===e.CHUNK_TYPES.JSON)s=decodeText(new Uint8Array(t,e.HEADER_LENGTH+o,n));else if(l===e.CHUNK_TYPES.BIN){let r=e.HEADER_LENGTH+o;c=t.slice(r,r+n)}o+=n}if(s===null)throw Error(`glTF:${EXTENSION_NAME$14}: JSON content not found.`);this.content=s,this.body=c}loadBuffer(e,t){return t.json.buffers[e].uri===void 0&&e===0&&this.body?Promise.resolve(this.body):null}clear(){this.body=null,this.content=``}};KHR_binary_glTF.HEADER_MAGIC=`glTF`,KHR_binary_glTF.HEADER_LENGTH=12,KHR_binary_glTF.CHUNK_TYPES={JSON:1313821514,BIN:5130562};var defaultDecoderPath=`https://vr-public.realsee-cdn.cn/release/static/image/release/five/resource/draco/1.5.6/`,defaultAttributeIDs={position:`POSITION`,normal:`NORMAL`,color:`COLOR`,uv:`TEX_COORD`},defaultAttributeTypes={position:`Float32Array`,normal:`Float32Array`,color:`Float32Array`,uv:`Float32Array`},Draco=class{constructor(){this.decoderPath=defaultDecoderPath,this.decoderConfig={},this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL=``}setDecoderPath(e){this.decoderPath=e}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}decodeDracoFile(e,t,n,r){let o={attributeIDs:n||defaultAttributeIDs,attributeTypes:r||defaultAttributeTypes,useUniqueIDs:!!n};this.decodeGeometry(e,o).then(t)}decodeGeometry(e,t={attributeIDs:defaultAttributeIDs,attributeTypes:defaultAttributeTypes,useUniqueIDs:!1}){for(let e in t.attributeTypes){let n=t.attributeTypes[e];n.BYTES_PER_ELEMENT!==void 0&&(t.attributeTypes[e]=n.name)}let n,r=this.workerNextTaskID++,o=e.byteLength,s=this._getWorker(r,o).then(o=>(n=o,new Promise((o,s)=>{n._callbacks[r]={resolve:o,reject:s},n.postMessage({type:`decode`,id:r,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return s.catch(()=>!0).then(()=>{n&&r&&this._releaseTask(n,r)}),s}_createGeometry(e){let t=new three.BufferGeometry;e.index&&t.setIndex(new three.BufferAttribute(e.index.array,1));for(let n=0;n<e.attributes.length;n++){let r=e.attributes[n],o=r.name,s=r.array,c=r.itemSize,l=!(s instanceof Float32Array||s instanceof Float64Array);t.setAttribute(o,new three.BufferAttribute(s,c,l))}return t}_initDecoder(){if(this.decoderPending)return this.decoderPending;if(typeof WebAssembly!=`object`||this.decoderConfig.type===`js`)this.decoderPending=internalFetcher.ajax(this.decoderPath+`draco_decoder.js`,{responseType:`text`}).then(e=>e.body).then(e=>{let t=[`/* draco decoder */`,e,``,`/* worker */`,DRACOWorker].join(`
|
|
365
365
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([t]))});else{let e=internalFetcher.ajax(this.decoderPath+`draco_wasm_wrapper.js`,{responseType:`text`}).then(e=>e.body),t=internalFetcher.ajax(this.decoderPath+`draco_decoder.wasm`,{responseType:`arraybuffer`}).then(e=>e.body);this.decoderPending=Promise.all([e,t]).then(([e,t])=>{this.decoderConfig.wasmBinary=t;let n=[`/* draco decoder */`,e,``,`/* worker */`,DRACOWorker].join(`
|
|
366
366
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([n]))})}return this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:`init`,decoderConfig:this.decoderConfig}),e.onmessage=t=>{let n=t.data;switch(n.type){case`decode`:e._callbacks[n.id].resolve(n);break;case`error`:e._callbacks[n.id].reject(n);break;default:console.error(`DRACO: Unexpected message, "`+n.type+`"`)}},this.workerPool.push(e)}else this.workerPool.sort((e,t)=>e._taskLoad>t._taskLoad?-1:1);let n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this}},draco=new Draco,DRACOWorker=`
|
|
367
367
|
let decoderConfig;
|
|
@@ -558,7 +558,7 @@ self.onmessage = function(event) {
|
|
|
558
558
|
}
|
|
559
559
|
|
|
560
560
|
}
|
|
561
|
-
`,EXTENSION_NAME$
|
|
561
|
+
`,EXTENSION_NAME$13=`KHR_draco_mesh_compression`,KHR_draco_mesh_compression=class extends BaseExtension{loadGeometry(e,t){return e.extensions&&e.extensions[EXTENSION_NAME$13]?this.decodePrimitive(e,t).then(n=>t.addGeometryPrimitiveAttributes(n,e)):null}decodePrimitive(e,t){let n=t.json,r=e.extensions[EXTENSION_NAME$13].bufferView,o=e.extensions[EXTENSION_NAME$13].attributes,s={},c={},l={};for(let e in o){let t=ATTRIBUTES[e]||e.toLowerCase();s[t]=o[e]}for(let t in e.attributes){let r=ATTRIBUTES[t]||t.toLowerCase();if(o[t]!==void 0){let o=n.accessors[e.attributes[t]];l[r]=WEBGL_COMPONENT_TYPES[o.componentType],c[r]=o.normalized===!0}}return t.loadBufferView(r).then(e=>new Promise(t=>{draco.decodeDracoFile(e,e=>{for(let t in e.attributes){let n=e.attributes[t],r=c[t];r!==void 0&&(n.normalized=r)}t(e)},s,l)}))}},WorkerPool=class{constructor(e,t){this.disposed=!1,this.pool=t,this.workerCreator=e,this.queue=[],this.workers=[],this.workerResolvers=[],this.workerStatus=0}setWorkerCreator(e){this.workerCreator=e}initWorker(e){if(!this.workerCreator)throw Error(`workerCreator is not defined`);if(!this.workers[e]){let t=this.workerCreator(e);t.addEventListener(`message`,this.onMessage.bind(this,e)),this.workers[e]=t}}getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}onMessage(e,t){let n=this.workerResolvers[e];if(t.data&&`$$error`in t.data?n==null||n.reject(t.data.$$error):n==null||n.resolve(t.data),this.workerResolvers[e]=void 0,this.queue.length){let{resolve:t,reject:n,input:r,transfer:o}=this.queue.shift();this.workerResolvers[e]={resolve:t,reject:n},this.workers[e].postMessage(r,o)}else this.workerStatus^=1<<e}postMessage(e,t=[]){return new Promise((n,r)=>{if(this.disposed){r(Error(`disposed`));return}let o=this.getIdleWorker();o===-1?this.queue.push({resolve:n,reject:r,input:e,transfer:t}):(this.initWorker(o),this.workerStatus|=1<<o,this.workerResolvers[o]={resolve:n,reject:r},this.workers[o].postMessage(e,t))})}dispose(){this.disposed=!0,this.workers.forEach(e=>{e.terminate()}),this.workers.length=0,this.workerResolvers.forEach(e=>{e==null||e.reject(Error(`disposed`))}),this.workerResolvers.length=0,this.queue.forEach(e=>{e.reject(Error(`disposed`))}),this.queue.length=0,this.workerStatus=0}},defaultTranscoderPath=`https://vr-public.realsee-cdn.cn/release/static/image/release/five/resource/basis/1.16/`,KTX2TransferSRGB=2,KTX2_ALPHA_PREMULTIPLIED=1,KTX2=class{constructor(){this.transcoderPath=defaultTranscoderPath,this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new WorkerPool(null,4),this.workerSourceURL=``,this.workerConfig=null}setTranscoderPath(e){this.transcoderPath=e}detectSupport(e){if(!this.workerConfig){let t=console.warn;console.warn=()=>{},this.workerConfig={astcSupported:!!e.extensions.get(`WEBGL_compressed_texture_astc`),etc1Supported:!!e.extensions.get(`WEBGL_compressed_texture_etc1`),etc2Supported:!!e.extensions.get(`WEBGL_compressed_texture_etc`),dxtSupported:!!e.extensions.get(`WEBGL_compressed_texture_s3tc`),bptcSupported:!!e.extensions.get(`EXT_texture_compression_bptc`),pvrtcSupported:!!e.extensions.get(`WEBGL_compressed_texture_pvrtc`)||!!e.extensions.get(`WEBKIT_WEBGL_compressed_texture_pvrtc`)},console.warn=t}return this}init(){if(!this.transcoderPending){let e=internalFetcher.ajax(this.transcoderPath+`basis_transcoder.js`,{responseType:`text`}).then(e=>e.body),t=internalFetcher.ajax(this.transcoderPath+`basis_transcoder.wasm`,{responseType:`arraybuffer`}).then(e=>e.body);this.transcoderPending=Promise.all([e,t]).then(([e,t])=>{let n=[`/* constants */`,`let _EngineFormat = `+JSON.stringify(EngineFormat),`let _TranscoderFormat = `+JSON.stringify(TranscoderFormat),`let _BasisFormat = `+JSON.stringify(BasisFormat),`/* basis_transcoder.js */`,e,`/* worker */`,BasisWorker].join(`
|
|
562
562
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([n])),this.transcoderBinary=t,this.workerPool.setWorkerCreator(()=>{let e=new Worker(this.workerSourceURL),t=this.transcoderBinary.slice(0);return e.postMessage({type:`init`,config:this.workerConfig,transcoderBinary:t},[t]),e})})}return this.transcoderPending}parse(e){return this._createTexture([e])}_createTextureFrom(e){let{mipmaps:t,width:n,height:r,format:o,type:s,error:c,dfdTransferFn:l,dfdFlags:u}=e;if(s===`error`)return Promise.reject(c);let d=new three.CompressedTexture(t,n,r,o,three.UnsignedByteType);return d.minFilter=t.length===1?three.LinearFilter:three.LinearMipmapLinearFilter,d.magFilter=three.LinearFilter,d.generateMipmaps=!1,d.needsUpdate=!0,d.encoding=l===KTX2TransferSRGB?three.sRGBEncoding:three.LinearEncoding,d.premultiplyAlpha=!!(u&KTX2_ALPHA_PREMULTIPLIED),Promise.resolve(d)}_createTexture(e){return this.init().then(()=>this.workerPool.postMessage({type:`transcode`,buffers:e},e)).then(e=>this._createTextureFrom(e))}dispose(){return URL.revokeObjectURL(this.workerSourceURL),this.workerPool.dispose(),this}},ktx2=new KTX2,BasisFormat={ETC1S:0,UASTC_4x4:1},TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},EngineFormat={RGBAFormat:three.RGBAFormat,RGBA_ASTC_4x4_Format:three.RGBA_ASTC_4x4_Format,RGBA_BPTC_Format:three.RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:three.RGBA_ETC2_EAC_Format,RGBA_PVRTC_4BPPV1_Format:three.RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT5_Format:three.RGBA_S3TC_DXT5_Format,RGB_ETC1_Format:three.RGB_ETC1_Format,RGB_ETC2_Format:three.RGB_ETC2_Format,RGB_PVRTC_4BPPV1_Format:three.RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format:three.RGB_S3TC_DXT1_Format},BasisWorker=`
|
|
563
563
|
|
|
564
564
|
let config;
|
|
@@ -827,7 +827,7 @@ self.onmessage = function(event) {
|
|
|
827
827
|
return ( value & ( value - 1 ) ) === 0 && value !== 0;
|
|
828
828
|
|
|
829
829
|
}
|
|
830
|
-
`,EXTENSION_NAME$11=`KHR_texture_basisu`,KHR_texture_basisu=class extends BaseExtension{loadTexture(e,t){let n=t.json.textures[e];if(!n.extensions||!n.extensions[EXTENSION_NAME$11])return null;let r=n.extensions[EXTENSION_NAME$11],o=t.json.images[r.source],s=null;if(o.bufferView!==void 0)s=t.loadBufferView(o.bufferView).then(e=>ktx2.parse(e));else if(o.uri)s=t.options.fetcher.ajax(t.resolveResouce(o.uri),{responseType:`arraybuffer`}).then(e=>ktx2.parse(e.body));else throw Error(`glTF: Invalid image defs.`);let c=(t.json.samplers||{})[n.sampler]||{};return s=s.then(e=>(e.magFilter=three.LinearFilter,e.minFilter=three.LinearFilter,e.wrapS=WEBGL_WRAPPINGS[c.wrapS]||three.RepeatWrapping,e.wrapT=WEBGL_WRAPPINGS[c.wrapT]||three.RepeatWrapping,e)),s}},EXTENSION_NAME$10=`KHR_texture_transform`,KHR_texture_transform=class extends BaseExtension{extendTexture(e,t,n){let r=t.extensions===void 0?void 0:t.extensions[EXTENSION_NAME$10];return r?(r.texCoord!==void 0&&console.warn(`glTF: Custom UV sets in "`+EXTENSION_NAME$10+`" extension not yet supported.`),r.offset===void 0&&r.rotation===void 0&&r.scale===void 0?e:(e=e.clone(),e.needsUpdate=!0,r.offset!==void 0&&e.offset.fromArray(r.offset),r.rotation!==void 0&&(e.rotation=r.rotation),r.scale!==void 0&&e.repeat.fromArray(r.scale),e)):null}},KHR_mesh_quantization=class extends BaseExtension{},EXTENSION_NAME$9=`KHR_materials_unlit`,KHR_materials_unlit=class extends BaseExtension{extendMaterial(e,t,n){var r;return t.material!==void 0&&e instanceof PBMMeshMaterial&&((r=n.json.materials[t.material].extensions)==null?{}:r)[EXTENSION_NAME$9]&&(e.shaderType=`basic`),Promise.all([]).then(noop)}},EXTENSION_NAME$8=`KHR_node_visibility`,KHR_node_visibility=class extends BaseExtension{extendNode(e,t,n){var r;let o=[],s=(r=t.extensions)==null?{}:r;if(s[EXTENSION_NAME$8]){let t=s[EXTENSION_NAME$8];typeof t.visible==`boolean`&&(e.visible=t.visible)}return Promise.all(o).then(noop)}},KHR_animation_pointer=class extends BaseExtension{},EXTENSION_NAME$7=`KHR_materials_clearcoat`,KHR_materials_clearcoat=class extends BaseExtension{extendMaterial(e,t,n){var r;let o=[];if(t.material!==void 0&&(e instanceof PBMMeshMaterial||e instanceof three.MeshPhysicalMaterial)){let s=(r=n.json.materials[t.material].extensions)==null?{}:r;if(s[EXTENSION_NAME$7]){let t=s[EXTENSION_NAME$7];if(t.clearcoatFactor!==void 0&&(e.clearcoat=t.clearcoatFactor),t.clearcoatTexture!==void 0&&o.push(n.createMaterialTexture(t.clearcoatTexture).then(t=>{t.format=three.RGBFormat,e.clearcoatMap=t,n.disposeSet.add(t)})),t.clearcoatRoughnessFactor!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughnessFactor),t.clearcoatRoughnessTexture!==void 0&&o.push(n.createMaterialTexture(t.clearcoatRoughnessTexture).then(t=>{t.format=three.RGBFormat,e.clearcoatRoughnessMap=t,n.disposeSet.add(t)})),t.clearcoatNormalTexture!==void 0&&(o.push(n.createMaterialTexture(t.clearcoatNormalTexture).then(t=>{t.format=three.RGBFormat,e.clearcoatNormalMap=t,n.disposeSet.add(t)})),t.clearcoatNormalTexture.scale!==void 0)){let n=t.clearcoatNormalTexture.scale;e.clearcoatNormalScale=new three.Vector2(n,n)}}}return Promise.all(o).then(noop)}},EXTENSION_NAME$6=`KHR_materials_sheen`,KHR_materials_sheen=class extends BaseExtension{extendMaterial(e,t,n){var r;let o=[];if(t.material!==void 0&&(e instanceof PBMMeshMaterial||e instanceof three.MeshPhysicalMaterial)){let o=(r=n.json.materials[t.material].extensions)==null?{}:r;if(o[EXTENSION_NAME$6]){let t=o[EXTENSION_NAME$6];if(t.sheenColorFactor!==void 0){let n=t.sheenColorFactor;e.sheen=new three.Color().setRGB(n[0],n[1],n[2])}t.sheenRoughnessFactor!==void 0&&console.warn(`glTF: ${EXTENSION_NAME$6} sheenRoughnessFactor unsupported`),t.sheenColorTexture!==void 0&&console.warn(`glTF: ${EXTENSION_NAME$6} sheenColorTexture unsupported`),t.sheenRoughnessTexture!==void 0&&console.warn(`glTF: ${EXTENSION_NAME$6} sheenRoughnessTexture unsupported`)}}return Promise.all(o).then(noop)}},EXTENSION_NAME$5=`KHR_materials_transmission`,KHR_materials_transmission=class extends BaseExtension{extendMaterial(e,t,n){var r;let o=[];if(t.material!==void 0&&(e instanceof PBMMeshMaterial||e instanceof three.MeshPhysicalMaterial)){let o=(r=n.json.materials[t.material].extensions)==null?{}:r;if(o[EXTENSION_NAME$5]){let t=o.KHR_materials_transmission;t.transmissionFactor!==void 0&&(e.transparency=t.transmissionFactor,e.transparency>0&&(e.transparent=!0)),t.transmissionTexture!==void 0&&console.warn(`glTF: ${EXTENSION_NAME$5} transmissionTexture unsupported`)}}return Promise.all(o).then(noop)}},EXTENSION_NAME$4=`KHR_materials_emissive_strength`,KHR_materials_emissive_strength=class extends BaseExtension{extendMaterial(e,t,n){var r;let o=[];if(t.material!==void 0&&(e instanceof PBMMeshMaterial||e instanceof three.MeshStandardMaterial)){let o=(r=n.json.materials[t.material].extensions)==null?{}:r;if(o[EXTENSION_NAME$4]){let t=o[EXTENSION_NAME$4];t.emissiveStrength!==void 0&&(e.emissiveIntensity=t.emissiveStrength)}}return Promise.all(o).then(noop)}},meshoptDecoder=(function(){"use strict";var e=`b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:78Yqdbk:qzezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhlaicefhodnadTmbalc;WFbGglcjdalcjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxdndndndnalc9WGgmTmbcbhPcehsawcjdfhzaohHinaraH9Rax6midnaraHaxfgo9RcK6mbczhlinalgic9Wfglawcj;cbffhOdndndndndnaHalco4fRbbalci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOaoRblaoRbbgAco4glalciSgCE86bbawcj;cbfaifglcGfaoclfaCfgORbbaAcl4ciGgCaCciSgCE86bbalcVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbalc7faOaCfgORbbaAciGgAaAciSgAE86bbalctfaOaAfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkaOaoRbwaoRbbgAcl4glalcsSgCE86bbawcj;cbfaifglcGfaocwfaCfgORbbaAcsGgAaAcsSgAE86bbalcVfaOaAfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekaOao8Pbb83bbaOcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaiczfhlarao9RcL0mekkaiam6miaoTmidnakTmbawaPfRbbhOawcj;cbfhlazhiakhHinaialRbbgAce4cbaAceG9R7aOfgO86bbaiadfhialcefhlaHcufgHmbkkazcefhzaPcefgPad6hsaohHaPad9hmexvkkcbhoasceGmdxikaoaxad2fhPdnakTmbcbhmcehsawcjdfhCinarao9Rax6miaoTmdaoaxfhoawamfRbbhOawcj;cbfhlaChiakhHinaialRbbgAce4cbaAceG9R7aOfgO86bbaiadfhialcefhlaHcufgHmbkaCcefhCamcefgmad6hsamad9hmbkaPhoxikcbhlcehsinarao9Rax6mdaoTmeaoaxfhoalcefglad6hsadal9hmbkaPhoxdkcbhoasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekcbc99arao9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;xzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj;8ifcjjj98G::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb`,t=`b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;a9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;d8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgAclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;tzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbadczfhdaeclfgeav6mbkkdnaval9pmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb`,n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),r=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!=`object`)return{supported:!1};var o=WebAssembly.validate(n)?t:e,s,c=WebAssembly.instantiate(l(o),{}).then(function(e){s=e.instance,s.exports.__wasm_call_ctors()});function l(e){for(var t=new Uint8Array(e.length),n=0;n<e.length;++n){var o=e.charCodeAt(n);t[n]=o>96?o-97:o>64?o-39:o+4}for(var s=0,n=0;n<e.length;++n)t[s++]=t[n]<60?r[t[n]]:(t[n]-60)*64+t[++n];return t.buffer.slice(0,s)}function u(e,t,n,r,o,c){var l=s.exports.sbrk,u=n+3&-4,d=l(u*r),f=l(o.length),p=new Uint8Array(s.exports.memory.buffer);p.set(o,f);var m=e(d,n,r,f,o.length);if(m==0&&c&&c(d,u,r),t.set(p.subarray(d,d+n*r)),l(d-l(0)),m!=0)throw Error(`Malformed buffer data: `+m)}var d={NONE:``,OCTAHEDRAL:`meshopt_decodeFilterOct`,QUATERNION:`meshopt_decodeFilterQuat`,EXPONENTIAL:`meshopt_decodeFilterExp`},f={ATTRIBUTES:`meshopt_decodeVertexBuffer`,TRIANGLES:`meshopt_decodeIndexBuffer`,INDICES:`meshopt_decodeIndexSequence`},p=[],m=0;function h(e){var t={object:new Worker(e),pending:0,requests:{}};return t.object.onmessage=function(e){var n=e.data;t.pending-=n.count,t.requests[n.id][n.action](n.value),delete t.requests[n.id]},t}function g(e){for(var t=`var instance; var ready = WebAssembly.instantiate(new Uint8Array([`+new Uint8Array(l(o))+`]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;`+u.toString()+v.toString(),n=new Blob([t],{type:`text/javascript`}),r=URL.createObjectURL(n),s=0;s<e;++s)p[s]=h(r);URL.revokeObjectURL(r)}function _(e,t,n,r,o){for(var s=p[0],c=1;c<p.length;++c)p[c].pending<s.pending&&(s=p[c]);return new Promise(function(c,l){var u=new Uint8Array(n),d=m++;s.pending+=e,s.requests[d]={resolve:c,reject:l},s.object.postMessage({id:d,count:e,size:t,source:u,mode:r,filter:o},[u.buffer])})}function v(e){c.then(function(){var t=e.data;try{var n=new Uint8Array(t.count*t.size);u(s.exports[t.mode],n,t.count,t.size,t.source,s.exports[t.filter]),self.postMessage({id:t.id,count:t.count,action:`resolve`,value:n},[n.buffer])}catch(e){self.postMessage({id:t.id,count:t.count,action:`reject`,value:e})}})}return{ready:c,supported:!0,useWorkers:function(e){g(e)},decodeVertexBuffer:function(e,t,n,r,o){u(s.exports.meshopt_decodeVertexBuffer,e,t,n,r,s.exports[d[o]])},decodeIndexBuffer:function(e,t,n,r){u(s.exports.meshopt_decodeIndexBuffer,e,t,n,r)},decodeIndexSequence:function(e,t,n,r){u(s.exports.meshopt_decodeIndexSequence,e,t,n,r)},decodeGltfBuffer:function(e,t,n,r,o,c){u(s.exports[f[o]],e,t,n,r,s.exports[d[c]])},decodeGltfBufferAsync:function(e,t,n,r,o){return p.length>0?_(e,t,n,f[r],d[o]):c.then(function(){var c=new Uint8Array(e*t);return u(s.exports[f[r]],c,e,t,n,s.exports[d[o]]),c})}}})(),EXTENSION_NAME$3=`EXT_meshopt_compression`,EXT_meshopt_compression=class extends BaseExtension{loadBufferView(e,t){let n=t.json,r=n.bufferViews[e];if(r.extensions&&r.extensions[EXTENSION_NAME$3]){let e=r.extensions[EXTENSION_NAME$3],o=t.loadBuffer(e.buffer);if(!meshoptDecoder.supported){if(n.extensionsRequired&&n.extensionsRequired.indexOf(EXTENSION_NAME$3)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return Promise.all([o,meshoptDecoder.ready]).then(([t])=>{let n=e.byteOffset||0,r=e.byteLength||0,o=e.count,s=e.byteStride,c=new ArrayBuffer(o*s),l=new Uint8Array(t,n,r);return meshoptDecoder.decodeGltfBuffer(new Uint8Array(c),o,s,l,e.mode,e.filter),c})}else return null}},EXTENSION_NAME$2=`EXT_texture_webp`,EXT_texture_webp=class extends BaseExtension{constructor(){super(...arguments),this.supportsWep=!1}prepare(e){return imageSupport().then(e=>{this.supportsWep=e.webp})}loadTexture(e,t){let n=t.json.textures[e];if(!n.extensions||!n.extensions[EXTENSION_NAME$2]||!this.supportsWep)return null;let r=n.extensions[EXTENSION_NAME$2];return t.loadImage(r.source).then(e=>{let r=new three.Texture(e);r.needsUpdate=!0,r.flipY=!1,n.name&&(r.name=n.name);let o=(t.json.samplers||{})[n.sampler]||{};return r.magFilter=WEBGL_FILTERS[o.magFilter]||three.LinearFilter,r.minFilter=WEBGL_FILTERS[o.minFilter]||three.LinearMipmapLinearFilter,r.wrapS=WEBGL_WRAPPINGS[o.wrapS]||three.RepeatWrapping,r.wrapT=WEBGL_WRAPPINGS[o.wrapT]||three.RepeatWrapping,r.onUpdate=function(){e.close()},r})}},EXTENSION_NAME$1=`CESIUM_RTC`,CESIUM_RTC=class extends BaseExtension{emitResult(e,t){if(t.json.extensions[EXTENSION_NAME$1]&&t.json.extensions[EXTENSION_NAME$1].center){let n=t.json.extensions[EXTENSION_NAME$1].center;e.CESIUM_RTC={center:new three.Vector3().fromArray(n)}}}},EXTENSION_NAME=`REALSEE_materials_lightmap`,REALSEE_materials_lightmap=class extends BaseExtension{extendMaterial(e,t,n){let r=[];if(n.json.materials&&t.material!==void 0){let o=n.json.materials[t.material].extensions[EXTENSION_NAME];o&&(o.lightMapTexture!==void 0&&r.push(n.createMaterialTexture(o.lightMapTexture).then(t=>{e.lightMap=t})),o.lightMapIntensity!==void 0&&(e.lightMapIntensity=o.lightMapIntensity))}return Promise.all(r).then(()=>{})}};function __awaiter(e,t,n,r){function o(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,s){function c(e){try{u(r.next(e))}catch(e){s(e)}}function l(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){e.done?n(e.value):o(e.value).then(c,l)}u((r=r.apply(e,t||[])).next())})}var f32buffer=new Float32Array(1),u32buffer=new Uint32Array(f32buffer.buffer),supportsFloat16Array=typeof Float16Array<`u`,f16buffer=supportsFloat16Array?new Float16Array(1):null,u16buffer=supportsFloat16Array?new Uint16Array(f16buffer.buffer):new Uint16Array(1);function fromHalf(e){if(supportsFloat16Array&&f16buffer)return u16buffer[0]=e,f16buffer[0];let t=e>>15&1,n=e>>10&31,r=e&1023,o;if(n===0)if(r===0)o=t<<31;else{let e=r,n=-14;for(;!(e&1024);)e<<=1,n--;e&=1023;let s=n+127,c=e<<13;o=t<<31|s<<23|c}else if(n===31)o=r===0?t<<31|2139095040:t<<31|2143289344;else{let e=n-15+127,s=r<<13;o=t<<31|e<<23|s}return u32buffer[0]=o,f32buffer[0]}var GunzipReader=class{constructor({fileBytes:e}){this.fileBytes=e,this.chunks=[],this.totalBytes=0;let t=new DecompressionStream(`gzip`);this.reader=new Blob([e]).stream().pipeThrough(t).getReader()}read(e){return __awaiter(this,void 0,void 0,function*(){for(;this.totalBytes<e;){let{value:e,done:t}=yield this.reader.read();if(t)break;this.chunks.push(e),this.totalBytes+=e.length}if(this.totalBytes<e)throw Error(`Unexpected EOF: needed ${e}, got ${this.totalBytes}`);let t=new Uint8Array(this.totalBytes),n=0;for(let e of this.chunks)t.set(e,n),n+=e.length;let r=t.subarray(0,e);return this.chunks=[t.subarray(e)],this.totalBytes-=e,r})}},SH_C0=.28209479177387814,SpzReader=class{constructor({fileBytes:e}){this.version=-1,this.numSplats=0,this.shDegree=0,this.fractionalBits=0,this.flags=0,this.flagAntiAlias=!1,this.reserved=0,this.headerParsed=!1,this.parsed=!1,this.fileBytes=e instanceof ArrayBuffer?new Uint8Array(e):e,this.reader=new GunzipReader({fileBytes:this.fileBytes})}parseHeader(){return __awaiter(this,void 0,void 0,function*(){if(this.headerParsed)throw Error(`SPZ file header already parsed`);let e=new DataView((yield this.reader.read(16)).buffer);if(e.getUint32(0,!0)!==1347635022)throw Error(`Invalid SPZ file`);if(this.version=e.getUint32(4,!0),this.version<1||this.version>3)throw Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=e.getUint32(8,!0),this.shDegree=e.getUint8(12),this.fractionalBits=e.getUint8(13),this.flags=e.getUint8(14),this.flagAntiAlias=(this.flags&1)!=0,this.reserved=e.getUint8(15),this.headerParsed=!0,this.parsed=!1})}parseSplats(e,t,n,r,o,s){return __awaiter(this,void 0,void 0,function*(){if(!this.headerParsed)throw Error(`SPZ file header must be parsed first`);if(this.parsed)throw Error(`SPZ file already parsed`);if(this.parsed=!0,this.version===1){let t=yield this.reader.read(this.numSplats*3*2),n=new Uint16Array(t.buffer);for(let t=0;t<this.numSplats;t++){let r=t*3,o=fromHalf(n[r]),s=fromHalf(n[r+1]),c=fromHalf(n[r+2]);e==null||e(t,o,s,c)}}else if(this.version===2||this.version===3){let t=1<<this.fractionalBits,n=yield this.reader.read(this.numSplats*3*3);for(let r=0;r<this.numSplats;r++){let o=r*9,s=((n[o+2]<<24|n[o+1]<<16|n[o]<<8)>>8)/t,c=((n[o+5]<<24|n[o+4]<<16|n[o+3]<<8)>>8)/t,l=((n[o+8]<<24|n[o+7]<<16|n[o+6]<<8)>>8)/t;e==null||e(r,s,c,l)}}{let e=yield this.reader.read(this.numSplats);for(let n=0;n<this.numSplats;n++)t==null||t(n,e[n]/255)}{let e=yield this.reader.read(this.numSplats*3),t=SH_C0/.15;for(let r=0;r<this.numSplats;r++){let o=r*3,s=(e[o]/255-.5)*t+.5,c=(e[o+1]/255-.5)*t+.5,l=(e[o+2]/255-.5)*t+.5;n==null||n(r,s,c,l)}}{let e=yield this.reader.read(this.numSplats*3);for(let t=0;t<this.numSplats;t++){let n=t*3,o=Math.exp(e[n]/16-10),s=Math.exp(e[n+1]/16-10),c=Math.exp(e[n+2]/16-10);r==null||r(t,o,s,c)}}if(this.version===3){let e=1/Math.sqrt(2),t=yield this.reader.read(this.numSplats*4);for(let n=0;n<this.numSplats;n++){let r=n*4,s=[0,0,0,0],c=[t[r],t[r+1],t[r+2],t[r+3]],l=c[0]+(c[1]<<8)+(c[2]<<16)+(c[3]<<24),u=511,d=l>>>30,f=l,p=0;for(let t=3;t>=0;--t)if(t!==d){let n=f&511,r=f>>>9&1;f>>>=10,s[t]=n/511*e,s[t]=r===0?s[t]:-s[t],p+=s[t]*s[t]}let m=1-p;s[d]=Math.sqrt(Math.max(m,0)),o==null||o(n,s[0],s[1],s[2],s[3])}}else{let e=yield this.reader.read(this.numSplats*3);for(let t=0;t<this.numSplats;t++){let n=t*3,r=e[n]/127.5-1,s=e[n+1]/127.5-1,c=e[n+2]/127.5-1,l=Math.sqrt(Math.max(0,1-r*r-s*s-c*c));o==null||o(t,r,s,c,l)}}if(s&&this.shDegree>=1){let e={1:3,2:8,3:15}[this.shDegree]||0,t=yield this.reader.read(this.numSplats*e*3),n=new Float32Array(9),r=this.shDegree>=2?new Float32Array(15):void 0,o=this.shDegree>=3?new Float32Array(21):void 0,c=0;for(let e=0;e<this.numSplats;e++){for(let e=0;e<9;++e)n[e]=(t[c+e]-128)/128;if(c+=9,r){for(let e=0;e<15;++e)r[e]=(t[c+e]-128)/128;c+=15}if(o){for(let e=0;e<21;++e)o[e]=(t[c+e]-128)/128;c+=21}s==null||s(e,new Float32Array(n),r?new Float32Array(r):void 0,o?new Float32Array(o):void 0)}}})}};function parseSpz(e){return __awaiter(this,void 0,void 0,function*(){let t=new SpzReader({fileBytes:e});yield t.parseHeader();let n=t.numSplats,r=new Float32Array(n*3),o=new Uint8Array(n*4),s=new Float32Array(n*3),c=new Float32Array(n*4),l,u,d;return t.shDegree>=1&&(l=new Float32Array(n*9)),t.shDegree>=2&&(u=new Float32Array(n*15)),t.shDegree>=3&&(d=new Float32Array(n*21)),yield t.parseSplats((e,t,n,o)=>{r[e*3]=t,r[e*3+1]=n,r[e*3+2]=o},(e,t)=>{o[e*4+3]=Math.round(t*255)},(e,t,n,r)=>{o[e*4]=Math.round(Math.max(0,Math.min(1,t))*255),o[e*4+1]=Math.round(Math.max(0,Math.min(1,n))*255),o[e*4+2]=Math.round(Math.max(0,Math.min(1,r))*255)},(e,t,n,r)=>{s[e*3]=t,s[e*3+1]=n,s[e*3+2]=r},(e,t,n,r,o)=>{c[e*4]=o,c[e*4+1]=t,c[e*4+2]=n,c[e*4+3]=r},(e,t,n,r)=>{l&&t&&l.set(t,e*9),u&&n&&u.set(n,e*15),d&&r&&d.set(r,e*21)}),new PBMGaussianSplattingObject({numPoints:n,positions:r,colors:o,scales:s,rotations:c,sh1:l,sh2:u,sh3:d,shDegree:t.shDegree})})}function loadSpz(e,t={}){var n,r,o,s;let c=(n=t.modelUpAxis)==null?`Y`:n,l=(r=t.upAxis)==null?`Z`:r,u=(o=t.fetcher)==null?internalFetcher:o,d=(s=t.onDownloadProgress)==null?noop:s,f=0;return Promise.resolve().then(()=>u.ajax(e,{responseType:`arraybuffer`},void 0,void 0,d)).then(e=>(f=e.body.byteLength,e.body)).then(e=>parseSpz(new Uint8Array(e))).then(t=>(c===`Z`&&(t.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),t.updateMatrix(),t.updateMatrixWorld(!0),t.transformChanged=!0),{type:`spz`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(t),scene:t,textures:[],animations:[],dispose:()=>t.dispose()}))}var ROTATE_X_MATRIX=new three.Matrix4().fromArray([1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1]),ROTATE_X_MATRIX_INVERSE=new three.Matrix4().getInverse(ROTATE_X_MATRIX),KHR_gaussian_splatting_compression_spz=class extends BaseExtension{constructor(){super(...arguments),this.name=`KHR_gaussian_splatting_compression_spz`,this.parentName=`KHR_gaussian_splatting`}loadMesh(e,t){let n=t.json.meshes[e].primitives;return n.length===0?null:(n.length===1||console.warn(`KHR_gaussian_splatting_compression_spz: multiple primitives are not supported`),this.loadSpz(n[0],t))}loadSpz(e,t){return __awaiter(this,void 0,void 0,function*(){let n=e.extensions[this.parentName].bufferView;return t.loadBufferView(n).then(e=>parseSpz(new Uint8Array(e))).then(e=>(e.applyMatrix4(ROTATE_X_MATRIX_INVERSE),e.updateMatrix(),e.updateMatrixWorld(!0),e.transformChanged=!0,e))})}},EXTENSIONS={KHR_binary_glTF,KHR_draco_mesh_compression,KHR_texture_basisu,KHR_texture_transform,KHR_mesh_quantization,KHR_materials_unlit,KHR_node_visibility,KHR_animation_pointer,KHR_materials_clearcoat,KHR_materials_sheen,KHR_materials_transmission,KHR_materials_emissive_strength,EXT_meshopt_compression,EXT_texture_webp,CESIUM_RTC,REALSEE_materials_lightmap,KHR_gaussian_splatting_compression_spz};function parseGltf(e,t){var n,r,o;let s={},c,l;if(typeof e==`string`)l=e;else if(EXTENSIONS.KHR_binary_glTF.getMagic(e)===EXTENSIONS.KHR_binary_glTF.HEADER_MAGIC){c=new EXTENSIONS.KHR_binary_glTF;try{c.loadGlbBinary(e)}catch(e){return Promise.reject(e)}s.KHR_binary_glTF=c,l=c.content}else l=decodeText(new Uint8Array(e));let u=JSON.parse(l);if(t.jsonModify&&(u=t.jsonModify(u)),u.asset===void 0||Number(u.asset.version[0])<2)return Promise.reject(Error(`glTF: Unsupported asset. glTF versions >=2.0 are supported.`));if(u.extensionsUsed){let e=u.extensionsRequired||[];for(var d=0;d<u.extensionsUsed.length;d++){let t=u.extensionsUsed[d];s[t]||(EXTENSIONS[t]?s[t]=new EXTENSIONS[t]:e.indexOf(t)>=0&&console.warn(`glTF: Unknown extension "`+t+`".`))}}return new Parser(u,s,{copyUV2:(n=t.copyUV2)==null?!1:n,resourcePath:(r=t.resourcePath)==null?``:r,search:(o=t.search)==null?``:o,fetcher:t.fetcher}).parse().then(e=>(c&&c.clear(),e))}function loadB3dm(e,t={}){var n,r,o,s;let c=(n=t.modelUpAxis)==null?`Y`:n,l=(r=t.upAxis)==null?`Z`:r,u=(o=t.fetcher)==null?internalFetcher:o,d=(s=t.onDownloadProgress)==null?noop:s,f={uri:e,gltfUpAxis:c};return Promise.resolve().then(()=>u.ajax(e,{responseType:`arraybuffer`},void 0,void 0,d).then(e=>e.body)).then(e=>Promise.resolve(0).then(t=>parseHeader$1(f,e,t)).then(t=>parseTable(f,e,t)).then(t=>parseGlTFArrayBuffer(f,e,t))).then(()=>{var n;return parseGltf(f.gltfArrayBuffer,{copyUV2:!1,resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,jsonModify(e){var n,r;if(t.light===!1){let t=`KHR_materials_unlit`;if(e.extensionsUsed=(n=e.extensionsUsed)==null?[]:n,e.extensionsUsed.indexOf(t)===-1&&e.extensionsUsed.push(t),e.materials)for(let n of e.materials)n.extensions=(r=n.extensions)==null?{}:r,n.extensions[t]={}}return e},fetcher:u}).then(e=>{let t=new three.Matrix4;c===`Y`&&t.premultiply(ROTATE_X_MATRIX$1);let n;if(f.rtcCenter?n=new three.Vector3().fromArray(f.rtcCenter):e.CESIUM_RTC&&(n=new three.Vector3().copy(e.CESIUM_RTC.center)),n){let e=new three.Matrix4().setPosition(n);t.premultiply(e)}return l===`Y`&&t.premultiply(ROTATE_X_MATRIX_INVERSE$1),e.scene.applyMatrix4(t),f.featureTableBinary=void 0,f.batchTableBinary=void 0,f.gltfArrayBuffer=void 0,{type:`b3dm`,modelUpAxis:c,upAxis:`Z`,uri:f.uri,byteLength:f.byteLength,memoryUsage:getMemoryUsage(e.scene),scene:e.scene,textures:e.textures,animations:[],rtcCenter:n,dispose:()=>e.dispose()}})})}var jsContent$3="(function(){function e(e){onmessage=t=>{Promise.resolve(t.data).then(t=>e(t)).then(({output:e,transfer:t})=>postMessage(e,t)).catch(e=>postMessage({$$error:e}))}}var t;(function(e){e[e.BYTE=5120]=`BYTE`,e[e.UNSIGNED_BYTE=5121]=`UNSIGNED_BYTE`,e[e.SHORT=5122]=`SHORT`,e[e.UNSIGNED_SHORT=5123]=`UNSIGNED_SHORT`,e[e.INT=5124]=`INT`,e[e.UNSIGNED_INT=5125]=`UNSIGNED_INT`,e[e.FLOAT=5126]=`FLOAT`,e[e.DOUBLE=5130]=`DOUBLE`})(t||={});let n={[t.DOUBLE]:Float64Array,[t.FLOAT]:Float32Array,[t.UNSIGNED_SHORT]:Uint16Array,[t.UNSIGNED_INT]:Uint32Array,[t.UNSIGNED_BYTE]:Uint8Array,[t.BYTE]:Int8Array,[t.SHORT]:Int16Array,[t.INT]:Int32Array},r={DOUBLE:t.DOUBLE,FLOAT:t.FLOAT,UNSIGNED_SHORT:t.UNSIGNED_SHORT,UNSIGNED_INT:t.UNSIGNED_INT,UNSIGNED_BYTE:t.UNSIGNED_BYTE,BYTE:t.BYTE,SHORT:t.SHORT,INT:t.INT};function i(e){let t=n[e];if(!t)throw Error(`Failed to convert GL type`);return t}function a(e){return i(e).BYTES_PER_ELEMENT}function o(e,t,n=0,r){let o=i(e);return n%a(e)===0?new o(t,n,r??(t.byteLength-n)/a(e)):new o(r?t.slice(n,n+r*a(e)):t.slice(n))}function s(e){let t=r[e];if(!t)throw Error(`Failed to convert GL type`);return t}var c=class{constructor(e,n){this.featuresLength=0,this.cachedTypedArrays={},this.json=e,this.buffer=n;let r=this.getGlobalProperty(`POINTS_LENGTH`,t.UNSIGNED_INT,1);r&&r.length&&(this.featuresLength=r[0])}getExtension(e){return this.json.extensions&&this.json.extensions[e]}hasProperty(e){return!!this.json[e]}getGlobalProperty(e,t,n){let r=this.json[e];return typeof r==`number`?new(i(t))([r]):Array.isArray(r)?new(i(t))(r):r&&Number.isFinite(r.byteOffset)?this.getTypedArrayFromBinary(e,t,n,1,r.byteOffset):null}getPropertyArray(e,t,n){let r=this.json[e];return r&&Number.isFinite(r.byteOffset)?(`componentType`in r&&(t=s(r.componentType)),this.getTypedArrayFromBinary(e,t,n,this.featuresLength,r.byteOffset)):this.getTypedArrayFromArray(e,t,r)}getProperty(e,t,n,r,i){if(!this.json[e])return null;let a=this.getPropertyArray(e,t,n);if(n===1)return i[0]=a[r],i;for(let e=0;e<n;++e)i[e]=a[n*r+e];return i}getTypedArrayFromBinary(e,t,n,r,i){let a=this.cachedTypedArrays,s=a[e];return s||(s=o(t,this.buffer.buffer,this.buffer.byteOffset+i,r*n),a[e]=s),s}getTypedArrayFromArray(e,t,n){let r=this.cachedTypedArrays,i=r[e];return i||(i=o(t,n),r[e]=i),i}};e(e=>Promise.resolve(e).then(e=>{let t=new c(e.featureTableJson,e.featureTableBinary),n=u(t),r=d(t),i=p(t),a=[];return n&&a.push(n.array.buffer),r&&a.push(r.array.buffer),i&&a.push(i.array.buffer),{output:{position:n,color:r,normal:i},transfer:a}}));let l=65535;function u(e){if(e.hasProperty(`POSITION`))return{array:e.getPropertyArray(`POSITION`,t.FLOAT,3),itemSize:3,normalized:!1};if(e.hasProperty(`POSITION_QUANTIZED`)){let n=e.getPropertyArray(`POSITION_QUANTIZED`,t.UNSIGNED_SHORT,3),r=e.getGlobalProperty(`QUANTIZED_VOLUME_SCALE`,t.FLOAT,3),i=e.getGlobalProperty(`QUANTIZED_VOLUME_OFFSET`,t.FLOAT,3);if(!r||!i)throw Error(`QUANTIZED_VOLUME_SCALE or QUANTIZED_VOLUME_OFFSET never found.`);let a=new Float32Array(n.length),o=n.length/3,s=r[0]/l,c=r[1]/l,u=r[2]/l,d=i[0],f=i[1],p=i[2];for(let e=0,t;e<o;e++)t=e*3,a[t]=n[t]*s+d,a[++t]=n[t]*c+f,a[++t]=n[t]*u+p;return{array:a,itemSize:3,normalized:!1}}return null}function d(e){if(e.hasProperty(`RGB`)){let n=e.getPropertyArray(`RGB`,t.UNSIGNED_BYTE,3),r=n.length/3,i=new Uint8Array(r*4);for(let e=0,t,a;e<r;e++)a=e*4,t=e*3,i[a]=n[t],i[++a]=n[++t],i[++a]=n[++t];return{array:i,itemSize:4,normalized:!0}}else if(e.hasProperty(`RGBA`))return{array:e.getPropertyArray(`RGBA`,t.UNSIGNED_BYTE,4),itemSize:4,normalized:!0};else if(e.hasProperty(`RGB565`)){let n=e.getPropertyArray(`RGB565`,t.UNSIGNED_SHORT,1),r=n.length,i=new Uint8Array(r*4);for(let e=0,t,a;e<r;e++)a=n[e],t=e*4,i[t]=(a>>11&31)<<3,i[++t]=(a>>5&63)<<2,i[++t]=(a&31)<<3;return{array:i,itemSize:4,normalized:!0}}return null}let f=2/255;function p(e){if(e.hasProperty(`NORMAL`)){let n=e.getPropertyArray(`NORMAL`,t.FLOAT,3),r=n.length/3,i=new Int8Array(r*4);for(let e=0,t,a;e<r;e++)a=e*4,t=e*3,i[a]=n[t]*127,i[++a]=n[++t]*127,i[++a]=n[++t]*127;return{array:i,itemSize:4,normalized:!0}}else if(e.hasProperty(`NORMAL_OCT16P`)){let n=e.getPropertyArray(`NORMAL_OCT16P`,t.UNSIGNED_BYTE,2),r=n.length/2,i=new Int8Array(r*4);for(let e=0,t,a,o,s,c,l,u;e<r;e++)t=e*2,a=n[t]*f-1,o=n[++t]*f-1,c=a<0?-a:a,l=o<0?-o:o,s=1-(c+l),s<0&&(a=(1-l)*(a<0?-1:1),o=(1-c)*(o<0?-1:1)),u=Math.sqrt(a*a+o*o+s*s),t=e*4,i[t]=a/u*127,i[++t]=o/u*127,i[++t]=s/u*127;return{array:i,itemSize:4,normalized:!0}}return null}})();",blob$3=typeof self<`u`&&self.Blob&&new Blob([`(self.URL || self.webkitURL).revokeObjectURL(self.location.href);`,jsContent$3],{type:`text/javascript;charset=utf-8`});function WorkerWrapper$3(e){let t;try{if(t=blob$3&&(self.URL||self.webkitURL).createObjectURL(blob$3),!t)throw``;let n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener(`error`,()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker(`data:text/javascript;charset=utf-8,`+encodeURIComponent(jsContent$3),{name:e==null?void 0:e.name})}}var attributeWorkerPool=new WorkerPool(()=>new WorkerWrapper$3,2);function parsePointCloud(e,t,n){let r=new FeatureTable(e.featureTableJson,e.featureTableBinary);return Promise.resolve().then(()=>{let e=r.getExtension(`3DTILES_draco_point_compression`);return e?parseDraco(e,r):attributeWorkerPool.postMessage({featureTableBinary:r.buffer,featureTableJson:r.json},[r.buffer.buffer])}).then(t=>(e.attributes=t,n))}function parseDraco(e,t){return __awaiter(this,void 0,void 0,function*(){let n=e.properties||{},r=e.byteOffset,o=e.byteLength;if(!n||!Number.isFinite(r)||!o)throw Error(`Draco properties, byteOffset, and byteLength must be defined`);let s=t.buffer.slice(r,r+o),c=e.properties;return draco.decodeGeometry(s.buffer,{attributeIDs:c,attributeTypes:{POSITION:`Float32Array`,NORMAL:`Float32Array`,RGB:`Uint8Array`,RGBA:`Uint8Array`},useUniqueIDs:!0}).then(e=>{let t=e.getAttribute(`POSITION`),n=e.getAttribute(`RGB`),r=e.getAttribute(`RGBA`),o=e.getAttribute(`NORMAL`),s;if(r)s=r;else if(n){let e=n.count,t=n.array,r=new Uint8Array(e*4);for(let n=0,o,s;n<e;n++)s=n*4,o=n*3,r[s]=t[o],r[++s]=t[++o],r[++s]=t[++o];s=new three.BufferAttribute(r,4,n.normalized)}return{position:t?{array:t.array,itemSize:t.itemSize,normalized:t.normalized}:null,color:s?{array:s.array,itemSize:s.itemSize,normalized:s.normalized}:null,normal:o?{array:o.array,itemSize:o.itemSize,normalized:o.normalized}:null}})})}function loadPnts(e,t={}){var n,r,o;let s=(n=t.upAxis)==null?`Z`:n,c=(r=t.fetcher)==null?internalFetcher:r,l=(o=t.onDownloadProgress)==null?noop:o,u={uri:e};return Promise.resolve().then(()=>c.ajax(e,{responseType:`arraybuffer`},void 0,void 0,l).then(e=>e.body)).then(e=>Promise.resolve(0).then(t=>parseHeader$1(u,e,t)).then(t=>parseTable(u,e,t)).then(t=>parsePointCloud(u,e,t))).then(()=>{var e;return createPoints(u.attributes,{computeBoundingBox:(e=t.computeBoundingBox)==null?!0:e})}).then(e=>{let t=new three.Matrix4,n;if(u.rtcCenter&&(n=new three.Vector3().fromArray(u.rtcCenter)),n){let e=new three.Matrix4().setPosition(n);t.premultiply(e)}return s===`Y`&&t.premultiply(ROTATE_X_MATRIX_INVERSE$1),e.object.applyMatrix4(t),u.gltfArrayBuffer=void 0,u.featureTableBinary=void 0,u.batchTableBinary=void 0,{type:`pnts`,modelUpAxis:`Z`,upAxis:s,uri:u.uri,byteLength:u.byteLength,memoryUsage:getMemoryUsage(e.object),scene:e.object,textures:[],animations:[],rtcCenter:n,dispose:()=>e.dispose()}})}function createPoints(e,t){let n=new Set,r=new three.BufferGeometry;n.add(r);let o=new PBMPointCloudMaterial;n.add(o),e.position&&r.setAttribute(`position`,new three.BufferAttribute(e.position.array,e.position.itemSize,e.position.normalized)),e.color&&r.setAttribute(`color`,new three.BufferAttribute(e.color.array,e.color.itemSize,e.color.normalized)),e.normal?r.setAttribute(`normal`,new three.BufferAttribute(e.normal.array,e.normal.itemSize,e.normal.normalized)):o.flatShading=!0,t.computeBoundingBox&&r.computeBoundingBox();let s=new PBMPointCloud(r,o);return s.matrix.compose(s.position,s.quaternion,s.scale),s.matrixAutoUpdate=!1,s.frustumCulled=!1,Promise.resolve({object:s,dispose:()=>{n.forEach(e=>{e.dispose()}),n.clear()}})}function loadGltf(e,t={}){var n,r,o,s,c;let l=(n=t.modelUpAxis)==null?`Y`:n,u=(r=t.upAxis)==null?`Z`:r,d=(o=t.fetcher)==null?internalFetcher:o,f=(s=t.onDownloadProgress)==null?noop:s,p=(c=t.jsonModify)==null?noop:c,m=0;return Promise.resolve().then(()=>d.ajax(e,{responseType:`arraybuffer`},void 0,void 0,f).then(e=>(m=e.body.byteLength,e.body))).then(n=>{var r;return parseGltf(n,{copyUV2:!1,resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(r=e.split(`?`)[1])==null?``:r,jsonModify(e){var n,r,o;if(t.light===!1){let t=`KHR_materials_unlit`;if(e.extensionsUsed=(n=e.extensionsUsed)==null?[]:n,e.extensionsUsed.indexOf(t)===-1&&e.extensionsUsed.push(t),e.materials)for(let n of e.materials)n.extensions=(r=n.extensions)==null?{}:r,n.extensions[t]={}}return(o=p(e))==null?e:o},fetcher:d})}).then(t=>{var n;let r=new three.Matrix4;if(l===`Y`&&r.premultiply(ROTATE_X_MATRIX$1),t.CESIUM_RTC){let e=new three.Matrix4().setPosition(t.CESIUM_RTC.center);r.premultiply(e)}return u===`Y`&&r.premultiply(ROTATE_X_MATRIX_INVERSE$1),t.scene.applyMatrix4(r),{type:`gltf`,modelUpAxis:l,upAxis:u,uri:e,byteLength:m,memoryUsage:getMemoryUsage(t.scene),scene:t.scene,textures:t.textures,animations:t.animations,rtcCenter:(n=t.CESIUM_RTC)==null?void 0:n.center,dispose:()=>t.dispose()}})}var scratchColor=new three.Color;function loadPly(e,t={}){var n,r,o,s;let c=(n=t.modelUpAxis)==null?`Z`:n,l=(r=t.upAxis)==null?`Z`:r,u=(o=t.fetcher)==null?internalFetcher:o,d=(s=t.onDownloadProgress)==null?noop:s,f=0;return Promise.resolve().then(()=>u.ajax(e,{responseType:`arraybuffer`},void 0,void 0,d).then(e=>(f=e.body.byteLength,e.body))).then(e=>{var n,r;return parsePly(e,{propertyNameMapping:(n=t.propertyNameMapping)==null?{}:n,customPropertyMapping:(r=t.customPropertyMapping)==null?{}:r})}).then(({geometry:n})=>{switch(t.type){case`geometry`:{let t=n;return c===`Y`&&t.applyMatrix4(ROTATE_X_MATRIX$1),l===`Y`&&t.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`ply`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getGeometryMemoryUsed(t),scene:t,textures:[],animations:[],dispose:()=>{n.dispose()}}}case`line`:{let t=`color`in n.attributes,r=new three.LineBasicMaterial({vertexColors:t}),o=new three.Line(n,r);return o.computeLineDistances(),c===`Y`&&o.applyMatrix4(ROTATE_X_MATRIX$1),l===`Y`&&o.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`ply`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(o),scene:o,textures:[],animations:[],dispose:()=>{n.dispose(),r.dispose()}}}case`pbmMesh`:{let r=new PBMMeshMaterial(t.light?`phong`:`basic`);r.vertexColors=`color`in n.attributes;let o=new three.Mesh(n,r);return c===`Y`&&o.applyMatrix4(ROTATE_X_MATRIX$1),l===`Y`&&o.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`ply`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(o),scene:o,textures:[],animations:[],dispose:()=>{n.dispose(),r.dispose()}}}case`pbmPointCloud`:{let t=new PBMPointCloudMaterial,r=new PBMPointCloud(n,t);return c===`Y`&&r.applyMatrix4(ROTATE_X_MATRIX$1),l===`Y`&&r.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`ply`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(r),scene:r,textures:[],animations:[],dispose:()=>{n.dispose(),t.dispose()}}}default:break}throw Error(`Invalid Type: ${t.type}`)})}function parsePly(e,t){let n=new Uint8Array(e),{headerText:r,headerLength:o}=extractHeaderText(n),s=parseHeader(r,o,t);return s.format===`ascii`?{header:s,geometry:parseASCII(new TextDecoder().decode(n),s,t)}:{header:s,geometry:parseBinary(e,s,t)}}function makePlyElementProperty(e,t){let n={name:``,type:e[0]};return n.type===`list`?(n.name=e[3],n.countType=e[1],n.itemType=e[2]):n.name=e[1],n.name in t.propertyNameMapping&&(n.name=t.propertyNameMapping[n.name]),n}function parseHeader(e,t=0,n){let r=/^ply([\s\S]*)end_header(\r\n|\r|\n)/,o=``,s=r.exec(e);s!==null&&(o=s[1]);let c={format:``,version:``,comments:[],elements:[],headerLength:t,objInfo:``},l=o.split(/\r\n|\r|\n/),u=null;for(let e=0;e<l.length;e++){let t=l[e];if(t=t.trim(),t===``)continue;let r=t.split(/\s+/),o=r.shift();switch(t=r.join(` `),o){case`format`:c.format=r[0],c.version=r[1];break;case`comment`:c.comments.push(t);break;case`element`:u&&c.elements.push(u),u={name:r[0],count:parseInt(r[1]),properties:[]};break;case`property`:u&&u.properties.push(makePlyElementProperty(r,n));break;case`obj_info`:c.objInfo=t;break;default:console.log(`unhandled`,o,r)}}return u&&c.elements.push(u),c}function parseASCIINumber(e,t){switch(t){case`char`:case`uchar`:case`short`:case`ushort`:case`int`:case`uint`:case`int8`:case`uint8`:case`int16`:case`uint16`:case`int32`:case`uint32`:return parseInt(e);case`float`:case`double`:case`float32`:case`float64`:return parseFloat(e);default:throw Error(`unspport type: `+t)}}function parseASCIIElement(e,t){let n={};for(let r=0;r<e.length;r++){if(t.empty())return null;if(e[r].type===`list`){let o=[],s=parseASCIINumber(t.next(),e[r].countType);for(let n=0;n<s;n++){if(t.empty())return null;o.push(parseASCIINumber(t.next(),e[r].itemType))}n[e[r].name]=o}else n[e[r].name]=parseASCIINumber(t.next(),e[r].type)}return n}function createBuffer(e){let t={indices:[],vertices:[],normals:[],uvs:[],faceVertexUvs:[],colors:[],faceVertexColors:[]};for(let n of Object.keys(e.customPropertyMapping))t[n]=[];return t}function mapElementAttributes(e){let t=e.map(e=>e.name);function n(e){for(let n=0,r=e.length;n<r;n++){let r=e[n];if(t.includes(r))return r}return null}return{attrX:n([`x`,`px`,`posx`])||`x`,attrY:n([`y`,`py`,`posy`])||`y`,attrZ:n([`z`,`pz`,`posz`])||`z`,attrNX:n([`nx`,`normalx`]),attrNY:n([`ny`,`normaly`]),attrNZ:n([`nz`,`normalz`]),attrS:n([`s`,`u`,`texture_u`,`tx`]),attrT:n([`t`,`v`,`texture_v`,`ty`]),attrR:n([`red`,`diffuse_red`,`r`,`diffuse_r`]),attrG:n([`green`,`diffuse_green`,`g`,`diffuse_g`]),attrB:n([`blue`,`diffuse_blue`,`b`,`diffuse_b`])}}function parseASCII(e,t,n){let r=createBuffer(n),o=/end_header\s+(\S[\s\S]*\S|\S)\s*$/,s,c=null;s=(c=o.exec(e))===null?[]:c[1].split(/\s+/);let l=new ArrayStream(s);loop:for(let e=0;e<t.elements.length;e++){let o=t.elements[e],s=mapElementAttributes(o.properties);for(let e=0;e<o.count;e++){let e=parseASCIIElement(o.properties,l);if(!e)break loop;handleElement(r,o.name,e,s,n)}}return postProcess(r,n)}function postProcess(e,t){let n=new three.BufferGeometry;e.indices.length>0&&n.setIndex(e.indices),n.setAttribute(`position`,new three.Float32BufferAttribute(e.vertices,3)),e.normals.length>0&&n.setAttribute(`normal`,new three.Float32BufferAttribute(e.normals,3)),e.uvs.length>0&&n.setAttribute(`uv`,new three.Float32BufferAttribute(e.uvs,2)),e.colors.length>0&&n.setAttribute(`color`,new three.Float32BufferAttribute(e.colors,3)),(e.faceVertexUvs.length>0||e.faceVertexColors.length>0)&&(n=n.toNonIndexed(),e.faceVertexUvs.length>0&&n.setAttribute(`uv`,new three.Float32BufferAttribute(e.faceVertexUvs,2)),e.faceVertexColors.length>0&&n.setAttribute(`color`,new three.Float32BufferAttribute(e.faceVertexColors,3)));for(let r of Object.keys(t.customPropertyMapping))if(e[r].length>0){let{itemType:o,itemNames:s,normalized:c}=t.customPropertyMapping[r],l=s.length,u;switch(o){case`float32`:u=new three.Float32BufferAttribute(e[r],l,c);break;case`uint32`:u=new three.Uint32BufferAttribute(e[r],l,c);break;case`int32`:u=new three.Int32BufferAttribute(e[r],l,c);break;case`uint16`:u=new three.Uint16BufferAttribute(e[r],l,c);break;case`int16`:u=new three.Int16BufferAttribute(e[r],l,c);break;case`uint8`:u=new three.Uint8BufferAttribute(e[r],l,c);break;case`int8`:u=new three.Int8BufferAttribute(e[r],l,c);break;default:u=new three.Float32BufferAttribute(e[r],l,c);break}n.setAttribute(r,u)}return n.computeBoundingSphere(),n}function handleElement(e,t,n,r,o){if(t===`vertex`){r.attrX!==null&&r.attrY!==null&&r.attrZ!==null&&e.vertices.push(n[r.attrX],n[r.attrY],n[r.attrZ]),r.attrNX!==null&&r.attrNY!==null&&r.attrNZ!==null&&e.normals.push(n[r.attrNX],n[r.attrNY],n[r.attrNZ]),r.attrS!==null&&r.attrT!==null&&e.uvs.push(n[r.attrS],n[r.attrT]),r.attrR!==null&&r.attrG!==null&&r.attrB!==null&&(scratchColor.setRGB(n[r.attrR]/255,n[r.attrG]/255,n[r.attrB]/255),e.colors.push(scratchColor.r,scratchColor.g,scratchColor.b));for(let t of Object.keys(o.customPropertyMapping))for(let r of o.customPropertyMapping[t].itemNames)e[t].push(n[r])}else if(t===`face`){let t=n.vertex_indices||n.vertex_index,o=n.texcoord;t.length===3?(e.indices.push(t[0],t[1],t[2]),o&&o.length===6&&(e.faceVertexUvs.push(o[0],o[1]),e.faceVertexUvs.push(o[2],o[3]),e.faceVertexUvs.push(o[4],o[5]))):t.length===4&&(e.indices.push(t[0],t[1],t[3]),e.indices.push(t[1],t[2],t[3])),r.attrR!==null&&r.attrG!==null&&r.attrB!==null&&(scratchColor.setRGB(n[r.attrR]/255,n[r.attrG]/255,n[r.attrB]/255),e.faceVertexColors.push(scratchColor.r,scratchColor.g,scratchColor.b),e.faceVertexColors.push(scratchColor.r,scratchColor.g,scratchColor.b),e.faceVertexColors.push(scratchColor.r,scratchColor.g,scratchColor.b))}}function binaryReadElement(e,t){let n={},r=0;for(let o=0;o<t.length;o++){let s=t[o],c=s.valueReader;if(s.type===`list`){let t=[],o=s.countReader.read(e+r);r+=s.countReader.size;for(let n=0;n<o;n++)t.push(c.read(e+r)),r+=c.size;n[s.name]=t}else n[s.name]=c.read(e+r),r+=c.size}return[n,r]}function setPropertyBinaryReaders(e,t,n){function r(e,t,n){switch(t){case`int8`:case`char`:return{read:t=>e.getInt8(t),size:1};case`uint8`:case`uchar`:return{read:t=>e.getUint8(t),size:1};case`int16`:case`short`:return{read:t=>e.getInt16(t,n),size:2};case`uint16`:case`ushort`:return{read:t=>e.getUint16(t,n),size:2};case`int32`:case`int`:return{read:t=>e.getInt32(t,n),size:4};case`uint32`:case`uint`:return{read:t=>e.getUint32(t,n),size:4};case`float32`:case`float`:return{read:t=>e.getFloat32(t,n),size:4};case`float64`:case`double`:return{read:t=>e.getFloat64(t,n),size:8};default:throw Error(`not support type: `+t)}}for(let o=0,s=e.length;o<s;o++){let s=e[o];s.type===`list`?(s.countReader=r(t,s.countType,n),s.valueReader=r(t,s.itemType,n)):s.valueReader=r(t,s.type,n)}}function parseBinary(e,t,n){let r=createBuffer(n),o=t.format===`binary_little_endian`,s=new DataView(e,t.headerLength),c,l=0;for(let e=0;e<t.elements.length;e++){let u=t.elements[e],d=u.properties,f=mapElementAttributes(d);setPropertyBinaryReaders(d,s,o);for(let e=0;e<u.count;e++){c=binaryReadElement(l,d),l+=c[1];let e=c[0];handleElement(r,u.name,e,f,n)}}return postProcess(r,n)}function extractHeaderText(e){let t=0,n=!0,r=``,o=[],s=new TextDecoder().decode(e.subarray(0,5)),c=/^ply\r\n/.test(s);do{let s=String.fromCharCode(e[t++]);s!==`
|
|
830
|
+
`,EXTENSION_NAME$12=`KHR_texture_basisu`,KHR_texture_basisu=class extends BaseExtension{loadTexture(e,t){let n=t.json.textures[e];if(!n.extensions||!n.extensions[EXTENSION_NAME$12])return null;let r=n.extensions[EXTENSION_NAME$12],o=t.json.images[r.source],s=null;if(o.bufferView!==void 0)s=t.loadBufferView(o.bufferView).then(e=>ktx2.parse(e));else if(o.uri)s=t.options.fetcher.ajax(t.resolveResouce(o.uri),{responseType:`arraybuffer`}).then(e=>ktx2.parse(e.body));else throw Error(`glTF: Invalid image defs.`);let c=(t.json.samplers||{})[n.sampler]||{};return s=s.then(e=>(e.magFilter=three.LinearFilter,e.minFilter=three.LinearFilter,e.wrapS=WEBGL_WRAPPINGS[c.wrapS]||three.RepeatWrapping,e.wrapT=WEBGL_WRAPPINGS[c.wrapT]||three.RepeatWrapping,e)),s}},EXTENSION_NAME$11=`KHR_texture_transform`,KHR_texture_transform=class extends BaseExtension{extendTexture(e,t,n){let r=t.extensions===void 0?void 0:t.extensions[EXTENSION_NAME$11];return r?(r.texCoord!==void 0&&console.warn(`glTF: Custom UV sets in "`+EXTENSION_NAME$11+`" extension not yet supported.`),r.offset===void 0&&r.rotation===void 0&&r.scale===void 0?e:(e=e.clone(),e.needsUpdate=!0,r.offset!==void 0&&e.offset.fromArray(r.offset),r.rotation!==void 0&&(e.rotation=r.rotation),r.scale!==void 0&&e.repeat.fromArray(r.scale),e)):null}},KHR_mesh_quantization=class extends BaseExtension{},EXTENSION_NAME$10=`KHR_materials_unlit`,KHR_materials_unlit=class extends BaseExtension{extendMaterial(e,t,n){var r;return t.material!==void 0&&e instanceof PBMMeshMaterial&&((r=n.json.materials[t.material].extensions)==null?{}:r)[EXTENSION_NAME$10]&&(e.shaderType=`basic`),Promise.all([]).then(noop)}},EXTENSION_NAME$9=`KHR_node_visibility`,KHR_node_visibility=class extends BaseExtension{extendNode(e,t,n){var r;let o=[],s=(r=t.extensions)==null?{}:r;if(s[EXTENSION_NAME$9]){let t=s[EXTENSION_NAME$9];typeof t.visible==`boolean`&&(e.visible=t.visible)}return Promise.all(o).then(noop)}},KHR_animation_pointer=class extends BaseExtension{},EXTENSION_NAME$8=`KHR_materials_clearcoat`,KHR_materials_clearcoat=class extends BaseExtension{extendMaterial(e,t,n){var r;let o=[];if(t.material!==void 0&&(e instanceof PBMMeshMaterial||e instanceof three.MeshPhysicalMaterial)){let s=(r=n.json.materials[t.material].extensions)==null?{}:r;if(s[EXTENSION_NAME$8]){let t=s[EXTENSION_NAME$8];if(t.clearcoatFactor!==void 0&&(e.clearcoat=t.clearcoatFactor),t.clearcoatTexture!==void 0&&o.push(n.createMaterialTexture(t.clearcoatTexture).then(t=>{t.format=three.RGBFormat,e.clearcoatMap=t,n.disposeSet.add(t)})),t.clearcoatRoughnessFactor!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughnessFactor),t.clearcoatRoughnessTexture!==void 0&&o.push(n.createMaterialTexture(t.clearcoatRoughnessTexture).then(t=>{t.format=three.RGBFormat,e.clearcoatRoughnessMap=t,n.disposeSet.add(t)})),t.clearcoatNormalTexture!==void 0&&(o.push(n.createMaterialTexture(t.clearcoatNormalTexture).then(t=>{t.format=three.RGBFormat,e.clearcoatNormalMap=t,n.disposeSet.add(t)})),t.clearcoatNormalTexture.scale!==void 0)){let n=t.clearcoatNormalTexture.scale;e.clearcoatNormalScale=new three.Vector2(n,n)}}}return Promise.all(o).then(noop)}},EXTENSION_NAME$7=`KHR_materials_sheen`,KHR_materials_sheen=class extends BaseExtension{extendMaterial(e,t,n){var r;let o=[];if(t.material!==void 0&&(e instanceof PBMMeshMaterial||e instanceof three.MeshPhysicalMaterial)){let o=(r=n.json.materials[t.material].extensions)==null?{}:r;if(o[EXTENSION_NAME$7]){let t=o[EXTENSION_NAME$7];if(t.sheenColorFactor!==void 0){let n=t.sheenColorFactor;e.sheen=new three.Color().setRGB(n[0],n[1],n[2])}t.sheenRoughnessFactor!==void 0&&console.warn(`glTF: ${EXTENSION_NAME$7} sheenRoughnessFactor unsupported`),t.sheenColorTexture!==void 0&&console.warn(`glTF: ${EXTENSION_NAME$7} sheenColorTexture unsupported`),t.sheenRoughnessTexture!==void 0&&console.warn(`glTF: ${EXTENSION_NAME$7} sheenRoughnessTexture unsupported`)}}return Promise.all(o).then(noop)}},EXTENSION_NAME$6=`KHR_materials_transmission`,KHR_materials_transmission=class extends BaseExtension{extendMaterial(e,t,n){var r;let o=[];if(t.material!==void 0&&(e instanceof PBMMeshMaterial||e instanceof three.MeshPhysicalMaterial)){let o=(r=n.json.materials[t.material].extensions)==null?{}:r;if(o[EXTENSION_NAME$6]){let t=o.KHR_materials_transmission;t.transmissionFactor!==void 0&&(e.transparency=t.transmissionFactor,e.transparency>0&&(e.transparent=!0)),t.transmissionTexture!==void 0&&console.warn(`glTF: ${EXTENSION_NAME$6} transmissionTexture unsupported`)}}return Promise.all(o).then(noop)}},EXTENSION_NAME$5=`KHR_materials_emissive_strength`,KHR_materials_emissive_strength=class extends BaseExtension{extendMaterial(e,t,n){var r;let o=[];if(t.material!==void 0&&(e instanceof PBMMeshMaterial||e instanceof three.MeshStandardMaterial)){let o=(r=n.json.materials[t.material].extensions)==null?{}:r;if(o[EXTENSION_NAME$5]){let t=o[EXTENSION_NAME$5];t.emissiveStrength!==void 0&&(e.emissiveIntensity=t.emissiveStrength)}}return Promise.all(o).then(noop)}},meshoptDecoder=(function(){"use strict";var e=`b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:78Yqdbk:qzezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhlaicefhodnadTmbalc;WFbGglcjdalcjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxdndndndnalc9WGgmTmbcbhPcehsawcjdfhzaohHinaraH9Rax6midnaraHaxfgo9RcK6mbczhlinalgic9Wfglawcj;cbffhOdndndndndnaHalco4fRbbalci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOaoRblaoRbbgAco4glalciSgCE86bbawcj;cbfaifglcGfaoclfaCfgORbbaAcl4ciGgCaCciSgCE86bbalcVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbalc7faOaCfgORbbaAciGgAaAciSgAE86bbalctfaOaAfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkaOaoRbwaoRbbgAcl4glalcsSgCE86bbawcj;cbfaifglcGfaocwfaCfgORbbaAcsGgAaAcsSgAE86bbalcVfaOaAfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekaOao8Pbb83bbaOcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaiczfhlarao9RcL0mekkaiam6miaoTmidnakTmbawaPfRbbhOawcj;cbfhlazhiakhHinaialRbbgAce4cbaAceG9R7aOfgO86bbaiadfhialcefhlaHcufgHmbkkazcefhzaPcefgPad6hsaohHaPad9hmexvkkcbhoasceGmdxikaoaxad2fhPdnakTmbcbhmcehsawcjdfhCinarao9Rax6miaoTmdaoaxfhoawamfRbbhOawcj;cbfhlaChiakhHinaialRbbgAce4cbaAceG9R7aOfgO86bbaiadfhialcefhlaHcufgHmbkaCcefhCamcefgmad6hsamad9hmbkaPhoxikcbhlcehsinarao9Rax6mdaoTmeaoaxfhoalcefglad6hsadal9hmbkaPhoxdkcbhoasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekcbc99arao9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;xzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj;8ifcjjj98G::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb`,t=`b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;a9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;d8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgAclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;tzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbadczfhdaeclfgeav6mbkkdnaval9pmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb`,n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),r=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!=`object`)return{supported:!1};var o=WebAssembly.validate(n)?t:e,s,c=WebAssembly.instantiate(l(o),{}).then(function(e){s=e.instance,s.exports.__wasm_call_ctors()});function l(e){for(var t=new Uint8Array(e.length),n=0;n<e.length;++n){var o=e.charCodeAt(n);t[n]=o>96?o-97:o>64?o-39:o+4}for(var s=0,n=0;n<e.length;++n)t[s++]=t[n]<60?r[t[n]]:(t[n]-60)*64+t[++n];return t.buffer.slice(0,s)}function u(e,t,n,r,o,c){var l=s.exports.sbrk,u=n+3&-4,d=l(u*r),f=l(o.length),p=new Uint8Array(s.exports.memory.buffer);p.set(o,f);var m=e(d,n,r,f,o.length);if(m==0&&c&&c(d,u,r),t.set(p.subarray(d,d+n*r)),l(d-l(0)),m!=0)throw Error(`Malformed buffer data: `+m)}var d={NONE:``,OCTAHEDRAL:`meshopt_decodeFilterOct`,QUATERNION:`meshopt_decodeFilterQuat`,EXPONENTIAL:`meshopt_decodeFilterExp`},f={ATTRIBUTES:`meshopt_decodeVertexBuffer`,TRIANGLES:`meshopt_decodeIndexBuffer`,INDICES:`meshopt_decodeIndexSequence`},p=[],m=0;function h(e){var t={object:new Worker(e),pending:0,requests:{}};return t.object.onmessage=function(e){var n=e.data;t.pending-=n.count,t.requests[n.id][n.action](n.value),delete t.requests[n.id]},t}function g(e){for(var t=`var instance; var ready = WebAssembly.instantiate(new Uint8Array([`+new Uint8Array(l(o))+`]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;`+u.toString()+v.toString(),n=new Blob([t],{type:`text/javascript`}),r=URL.createObjectURL(n),s=0;s<e;++s)p[s]=h(r);URL.revokeObjectURL(r)}function _(e,t,n,r,o){for(var s=p[0],c=1;c<p.length;++c)p[c].pending<s.pending&&(s=p[c]);return new Promise(function(c,l){var u=new Uint8Array(n),d=m++;s.pending+=e,s.requests[d]={resolve:c,reject:l},s.object.postMessage({id:d,count:e,size:t,source:u,mode:r,filter:o},[u.buffer])})}function v(e){c.then(function(){var t=e.data;try{var n=new Uint8Array(t.count*t.size);u(s.exports[t.mode],n,t.count,t.size,t.source,s.exports[t.filter]),self.postMessage({id:t.id,count:t.count,action:`resolve`,value:n},[n.buffer])}catch(e){self.postMessage({id:t.id,count:t.count,action:`reject`,value:e})}})}return{ready:c,supported:!0,useWorkers:function(e){g(e)},decodeVertexBuffer:function(e,t,n,r,o){u(s.exports.meshopt_decodeVertexBuffer,e,t,n,r,s.exports[d[o]])},decodeIndexBuffer:function(e,t,n,r){u(s.exports.meshopt_decodeIndexBuffer,e,t,n,r)},decodeIndexSequence:function(e,t,n,r){u(s.exports.meshopt_decodeIndexSequence,e,t,n,r)},decodeGltfBuffer:function(e,t,n,r,o,c){u(s.exports[f[o]],e,t,n,r,s.exports[d[c]])},decodeGltfBufferAsync:function(e,t,n,r,o){return p.length>0?_(e,t,n,f[r],d[o]):c.then(function(){var c=new Uint8Array(e*t);return u(s.exports[f[r]],c,e,t,n,s.exports[d[o]]),c})}}})(),EXTENSION_NAME$4=`EXT_meshopt_compression`,EXT_meshopt_compression=class extends BaseExtension{loadBufferView(e,t){let n=t.json,r=n.bufferViews[e];if(r.extensions&&r.extensions[EXTENSION_NAME$4]){let e=r.extensions[EXTENSION_NAME$4],o=t.loadBuffer(e.buffer);if(!meshoptDecoder.supported){if(n.extensionsRequired&&n.extensionsRequired.indexOf(EXTENSION_NAME$4)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return Promise.all([o,meshoptDecoder.ready]).then(([t])=>{let n=e.byteOffset||0,r=e.byteLength||0,o=e.count,s=e.byteStride,c=new ArrayBuffer(o*s),l=new Uint8Array(t,n,r);return meshoptDecoder.decodeGltfBuffer(new Uint8Array(c),o,s,l,e.mode,e.filter),c})}else return null}},EXTENSION_NAME$3=`EXT_texture_webp`,EXT_texture_webp=class extends BaseExtension{constructor(){super(...arguments),this.supportsWep=!1}prepare(e){return imageSupport().then(e=>{this.supportsWep=e.webp})}loadTexture(e,t){let n=t.json.textures[e];if(!n.extensions||!n.extensions[EXTENSION_NAME$3]||!this.supportsWep)return null;let r=n.extensions[EXTENSION_NAME$3];return t.loadImage(r.source).then(e=>{let r=new three.Texture(e);r.needsUpdate=!0,r.flipY=!1,n.name&&(r.name=n.name);let o=(t.json.samplers||{})[n.sampler]||{};return r.magFilter=WEBGL_FILTERS[o.magFilter]||three.LinearFilter,r.minFilter=WEBGL_FILTERS[o.minFilter]||three.LinearMipmapLinearFilter,r.wrapS=WEBGL_WRAPPINGS[o.wrapS]||three.RepeatWrapping,r.wrapT=WEBGL_WRAPPINGS[o.wrapT]||three.RepeatWrapping,r.onUpdate=function(){e.close()},r})}},EXTENSION_NAME$2=`CESIUM_RTC`,CESIUM_RTC=class extends BaseExtension{emitResult(e,t){if(t.json.extensions[EXTENSION_NAME$2]&&t.json.extensions[EXTENSION_NAME$2].center){let n=t.json.extensions[EXTENSION_NAME$2].center;e.CESIUM_RTC={center:new three.Vector3().fromArray(n)}}}},EXTENSION_NAME$1=`REALSEE_materials_lightmap`,REALSEE_materials_lightmap=class extends BaseExtension{extendMaterial(e,t,n){let r=[];if(n.json.materials&&t.material!==void 0){let o=n.json.materials[t.material].extensions[EXTENSION_NAME$1];o&&(o.lightMapTexture!==void 0&&r.push(n.createMaterialTexture(o.lightMapTexture).then(t=>{e.lightMap=t})),o.lightMapIntensity!==void 0&&(e.lightMapIntensity=o.lightMapIntensity))}return Promise.all(r).then(()=>{})}};function __awaiter(e,t,n,r){function o(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||(n=Promise))(function(n,s){function c(e){try{u(r.next(e))}catch(e){s(e)}}function l(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){e.done?n(e.value):o(e.value).then(c,l)}u((r=r.apply(e,t||[])).next())})}var EXTENSION_NAME=`KHR_gaussian_splatting`,KHR_gaussian_splatting=class extends BaseExtension{loadMeshPrimitive(e,t,n){let r=t.extensions[EXTENSION_NAME];return r?this.loadGaussianSplating(r,n):null}loadGaussianSplating(e,t){return __awaiter(this,void 0,void 0,function*(){if(e.compression.extension===`KHR_gaussian_splatting_compression_spz`){let n=t.extensions.KHR_gaussian_splatting_compression_spz;if(n)return n.load(e.bufferView,t)}return Promise.resolve(new three.Points)})}},f32buffer=new Float32Array(1),u32buffer=new Uint32Array(f32buffer.buffer),supportsFloat16Array=typeof Float16Array<`u`,f16buffer=supportsFloat16Array?new Float16Array(1):null,u16buffer=supportsFloat16Array?new Uint16Array(f16buffer.buffer):new Uint16Array(1);function fromHalf(e){if(supportsFloat16Array&&f16buffer)return u16buffer[0]=e,f16buffer[0];let t=e>>15&1,n=e>>10&31,r=e&1023,o;if(n===0)if(r===0)o=t<<31;else{let e=r,n=-14;for(;!(e&1024);)e<<=1,n--;e&=1023;let s=n+127,c=e<<13;o=t<<31|s<<23|c}else if(n===31)o=r===0?t<<31|2139095040:t<<31|2143289344;else{let e=n-15+127,s=r<<13;o=t<<31|e<<23|s}return u32buffer[0]=o,f32buffer[0]}var GunzipReader=class{constructor({fileBytes:e}){this.fileBytes=e,this.chunks=[],this.totalBytes=0;let t=new DecompressionStream(`gzip`);this.reader=new Blob([e]).stream().pipeThrough(t).getReader()}read(e){return __awaiter(this,void 0,void 0,function*(){for(;this.totalBytes<e;){let{value:e,done:t}=yield this.reader.read();if(t)break;this.chunks.push(e),this.totalBytes+=e.length}if(this.totalBytes<e)throw Error(`Unexpected EOF: needed ${e}, got ${this.totalBytes}`);let t=new Uint8Array(this.totalBytes),n=0;for(let e of this.chunks)t.set(e,n),n+=e.length;let r=t.subarray(0,e);return this.chunks=[t.subarray(e)],this.totalBytes-=e,r})}},SH_C0=.28209479177387814,SpzReader=class{constructor({fileBytes:e}){this.version=-1,this.numSplats=0,this.shDegree=0,this.fractionalBits=0,this.flags=0,this.flagAntiAlias=!1,this.reserved=0,this.headerParsed=!1,this.parsed=!1,this.fileBytes=e instanceof ArrayBuffer?new Uint8Array(e):e,this.reader=new GunzipReader({fileBytes:this.fileBytes})}parseHeader(){return __awaiter(this,void 0,void 0,function*(){if(this.headerParsed)throw Error(`SPZ file header already parsed`);let e=new DataView((yield this.reader.read(16)).buffer);if(e.getUint32(0,!0)!==1347635022)throw Error(`Invalid SPZ file`);if(this.version=e.getUint32(4,!0),this.version<1||this.version>3)throw Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=e.getUint32(8,!0),this.shDegree=e.getUint8(12),this.fractionalBits=e.getUint8(13),this.flags=e.getUint8(14),this.flagAntiAlias=(this.flags&1)!=0,this.reserved=e.getUint8(15),this.headerParsed=!0,this.parsed=!1})}parseSplats(e,t,n,r,o,s){return __awaiter(this,void 0,void 0,function*(){if(!this.headerParsed)throw Error(`SPZ file header must be parsed first`);if(this.parsed)throw Error(`SPZ file already parsed`);if(this.parsed=!0,this.version===1){let t=yield this.reader.read(this.numSplats*3*2),n=new Uint16Array(t.buffer);for(let t=0;t<this.numSplats;t++){let r=t*3,o=fromHalf(n[r]),s=fromHalf(n[r+1]),c=fromHalf(n[r+2]);e==null||e(t,o,s,c)}}else if(this.version===2||this.version===3){let t=1<<this.fractionalBits,n=yield this.reader.read(this.numSplats*3*3);for(let r=0;r<this.numSplats;r++){let o=r*9,s=((n[o+2]<<24|n[o+1]<<16|n[o]<<8)>>8)/t,c=((n[o+5]<<24|n[o+4]<<16|n[o+3]<<8)>>8)/t,l=((n[o+8]<<24|n[o+7]<<16|n[o+6]<<8)>>8)/t;e==null||e(r,s,c,l)}}{let e=yield this.reader.read(this.numSplats);for(let n=0;n<this.numSplats;n++)t==null||t(n,e[n]/255)}{let e=yield this.reader.read(this.numSplats*3),t=SH_C0/.15;for(let r=0;r<this.numSplats;r++){let o=r*3,s=(e[o]/255-.5)*t+.5,c=(e[o+1]/255-.5)*t+.5,l=(e[o+2]/255-.5)*t+.5;n==null||n(r,s,c,l)}}{let e=yield this.reader.read(this.numSplats*3);for(let t=0;t<this.numSplats;t++){let n=t*3,o=Math.exp(e[n]/16-10),s=Math.exp(e[n+1]/16-10),c=Math.exp(e[n+2]/16-10);r==null||r(t,o,s,c)}}if(this.version===3){let e=1/Math.sqrt(2),t=yield this.reader.read(this.numSplats*4);for(let n=0;n<this.numSplats;n++){let r=n*4,s=[0,0,0,0],c=[t[r],t[r+1],t[r+2],t[r+3]],l=c[0]+(c[1]<<8)+(c[2]<<16)+(c[3]<<24),u=511,d=l>>>30,f=l,p=0;for(let t=3;t>=0;--t)if(t!==d){let n=f&511,r=f>>>9&1;f>>>=10,s[t]=n/511*e,s[t]=r===0?s[t]:-s[t],p+=s[t]*s[t]}let m=1-p;s[d]=Math.sqrt(Math.max(m,0)),o==null||o(n,s[0],s[1],s[2],s[3])}}else{let e=yield this.reader.read(this.numSplats*3);for(let t=0;t<this.numSplats;t++){let n=t*3,r=e[n]/127.5-1,s=e[n+1]/127.5-1,c=e[n+2]/127.5-1,l=Math.sqrt(Math.max(0,1-r*r-s*s-c*c));o==null||o(t,r,s,c,l)}}if(s&&this.shDegree>=1){let e={1:3,2:8,3:15}[this.shDegree]||0,t=yield this.reader.read(this.numSplats*e*3),n=new Float32Array(9),r=this.shDegree>=2?new Float32Array(15):void 0,o=this.shDegree>=3?new Float32Array(21):void 0,c=0;for(let e=0;e<this.numSplats;e++){for(let e=0;e<9;++e)n[e]=(t[c+e]-128)/128;if(c+=9,r){for(let e=0;e<15;++e)r[e]=(t[c+e]-128)/128;c+=15}if(o){for(let e=0;e<21;++e)o[e]=(t[c+e]-128)/128;c+=21}s==null||s(e,new Float32Array(n),r?new Float32Array(r):void 0,o?new Float32Array(o):void 0)}}})}};function parseSpz(e){return __awaiter(this,void 0,void 0,function*(){let t=new SpzReader({fileBytes:e});yield t.parseHeader();let n=t.numSplats,r=new Float32Array(n*3),o=new Uint8Array(n*4),s=new Float32Array(n*3),c=new Float32Array(n*4),l,u,d;return t.shDegree>=1&&(l=new Float32Array(n*9)),t.shDegree>=2&&(u=new Float32Array(n*15)),t.shDegree>=3&&(d=new Float32Array(n*21)),yield t.parseSplats((e,t,n,o)=>{r[e*3]=t,r[e*3+1]=n,r[e*3+2]=o},(e,t)=>{o[e*4+3]=Math.round(t*255)},(e,t,n,r)=>{o[e*4]=Math.round(Math.max(0,Math.min(1,t))*255),o[e*4+1]=Math.round(Math.max(0,Math.min(1,n))*255),o[e*4+2]=Math.round(Math.max(0,Math.min(1,r))*255)},(e,t,n,r)=>{s[e*3]=t,s[e*3+1]=n,s[e*3+2]=r},(e,t,n,r,o)=>{c[e*4]=o,c[e*4+1]=t,c[e*4+2]=n,c[e*4+3]=r},(e,t,n,r)=>{l&&t&&l.set(t,e*9),u&&n&&u.set(n,e*15),d&&r&&d.set(r,e*21)}),new PBMGaussianSplattingObject({numPoints:n,positions:r,colors:o,scales:s,rotations:c,sh1:l,sh2:u,sh3:d,shDegree:t.shDegree})})}function loadSpz(e,t={}){var n,r,o,s;let c=(n=t.modelUpAxis)==null?`Y`:n,l=(r=t.upAxis)==null?`Z`:r,u=(o=t.fetcher)==null?internalFetcher:o,d=(s=t.onDownloadProgress)==null?noop:s,f=0;return Promise.resolve().then(()=>u.ajax(e,{responseType:`arraybuffer`},void 0,void 0,d)).then(e=>(f=e.body.byteLength,e.body)).then(e=>parseSpz(new Uint8Array(e))).then(t=>(c===`Z`&&(t.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),t.updateMatrix(),t.updateMatrixWorld(!0),t.transformChanged=!0),{type:`spz`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(t),scene:t,textures:[],animations:[],dispose:()=>t.dispose()}))}var ROTATE_X_MATRIX=new three.Matrix4().fromArray([1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1]),ROTATE_X_MATRIX_INVERSE=new three.Matrix4().getInverse(ROTATE_X_MATRIX),KHR_gaussian_splatting_compression_spz=class extends BaseExtension{load(e,t){return __awaiter(this,void 0,void 0,function*(){return t.loadBufferView(e).then(e=>this.loadSpz(new Uint8Array(e)))})}loadSpz(e){return __awaiter(this,void 0,void 0,function*(){return Promise.resolve().then(()=>parseSpz(e)).then(e=>(e.applyMatrix4(ROTATE_X_MATRIX_INVERSE),e.updateMatrix(),e.updateMatrixWorld(!0),e.transformChanged=!0,e))})}},EXTENSIONS={KHR_binary_glTF,KHR_draco_mesh_compression,KHR_texture_basisu,KHR_texture_transform,KHR_mesh_quantization,KHR_materials_unlit,KHR_node_visibility,KHR_animation_pointer,KHR_materials_clearcoat,KHR_materials_sheen,KHR_materials_transmission,KHR_materials_emissive_strength,EXT_meshopt_compression,EXT_texture_webp,CESIUM_RTC,REALSEE_materials_lightmap,KHR_gaussian_splatting,KHR_gaussian_splatting_compression_spz};function parseGltf(e,t){var n,r,o;let s={},c,l;if(typeof e==`string`)l=e;else if(EXTENSIONS.KHR_binary_glTF.getMagic(e)===EXTENSIONS.KHR_binary_glTF.HEADER_MAGIC){c=new EXTENSIONS.KHR_binary_glTF;try{c.loadGlbBinary(e)}catch(e){return Promise.reject(e)}s.KHR_binary_glTF=c,l=c.content}else l=decodeText(new Uint8Array(e));let u=JSON.parse(l);if(t.jsonModify&&(u=t.jsonModify(u)),u.asset===void 0||Number(u.asset.version[0])<2)return Promise.reject(Error(`glTF: Unsupported asset. glTF versions >=2.0 are supported.`));if(u.extensionsUsed){let e=u.extensionsRequired||[];for(var d=0;d<u.extensionsUsed.length;d++){let t=u.extensionsUsed[d];s[t]||(EXTENSIONS[t]?s[t]=new EXTENSIONS[t]:e.indexOf(t)>=0&&console.warn(`glTF: Unknown extension "`+t+`".`))}}return new Parser(u,s,{copyUV2:(n=t.copyUV2)==null?!1:n,resourcePath:(r=t.resourcePath)==null?``:r,search:(o=t.search)==null?``:o,fetcher:t.fetcher}).parse().then(e=>(c&&c.clear(),e))}function loadB3dm(e,t={}){var n,r,o,s;let c=(n=t.modelUpAxis)==null?`Y`:n,l=(r=t.upAxis)==null?`Z`:r,u=(o=t.fetcher)==null?internalFetcher:o,d=(s=t.onDownloadProgress)==null?noop:s,f={uri:e,gltfUpAxis:c};return Promise.resolve().then(()=>u.ajax(e,{responseType:`arraybuffer`},void 0,void 0,d).then(e=>e.body)).then(e=>Promise.resolve(0).then(t=>parseHeader$1(f,e,t)).then(t=>parseTable(f,e,t)).then(t=>parseGlTFArrayBuffer(f,e,t))).then(()=>{var n;return parseGltf(f.gltfArrayBuffer,{copyUV2:!1,resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,jsonModify(e){var n,r;if(t.light===!1){let t=`KHR_materials_unlit`;if(e.extensionsUsed=(n=e.extensionsUsed)==null?[]:n,e.extensionsUsed.indexOf(t)===-1&&e.extensionsUsed.push(t),e.materials)for(let n of e.materials)n.extensions=(r=n.extensions)==null?{}:r,n.extensions[t]={}}return e},fetcher:u}).then(e=>{let t=new three.Matrix4;c===`Y`&&t.premultiply(ROTATE_X_MATRIX$1);let n;if(f.rtcCenter?n=new three.Vector3().fromArray(f.rtcCenter):e.CESIUM_RTC&&(n=new three.Vector3().copy(e.CESIUM_RTC.center)),n){let e=new three.Matrix4().setPosition(n);t.premultiply(e)}return l===`Y`&&t.premultiply(ROTATE_X_MATRIX_INVERSE$1),e.scene.applyMatrix4(t),f.featureTableBinary=void 0,f.batchTableBinary=void 0,f.gltfArrayBuffer=void 0,{type:`b3dm`,modelUpAxis:c,upAxis:`Z`,uri:f.uri,byteLength:f.byteLength,memoryUsage:getMemoryUsage(e.scene),scene:e.scene,textures:e.textures,animations:[],rtcCenter:n,dispose:()=>e.dispose()}})})}var jsContent$3="(function(){function e(e){onmessage=t=>{Promise.resolve(t.data).then(t=>e(t)).then(({output:e,transfer:t})=>postMessage(e,t)).catch(e=>postMessage({$$error:e}))}}var t;(function(e){e[e.BYTE=5120]=`BYTE`,e[e.UNSIGNED_BYTE=5121]=`UNSIGNED_BYTE`,e[e.SHORT=5122]=`SHORT`,e[e.UNSIGNED_SHORT=5123]=`UNSIGNED_SHORT`,e[e.INT=5124]=`INT`,e[e.UNSIGNED_INT=5125]=`UNSIGNED_INT`,e[e.FLOAT=5126]=`FLOAT`,e[e.DOUBLE=5130]=`DOUBLE`})(t||={});let n={[t.DOUBLE]:Float64Array,[t.FLOAT]:Float32Array,[t.UNSIGNED_SHORT]:Uint16Array,[t.UNSIGNED_INT]:Uint32Array,[t.UNSIGNED_BYTE]:Uint8Array,[t.BYTE]:Int8Array,[t.SHORT]:Int16Array,[t.INT]:Int32Array},r={DOUBLE:t.DOUBLE,FLOAT:t.FLOAT,UNSIGNED_SHORT:t.UNSIGNED_SHORT,UNSIGNED_INT:t.UNSIGNED_INT,UNSIGNED_BYTE:t.UNSIGNED_BYTE,BYTE:t.BYTE,SHORT:t.SHORT,INT:t.INT};function i(e){let t=n[e];if(!t)throw Error(`Failed to convert GL type`);return t}function a(e){return i(e).BYTES_PER_ELEMENT}function o(e,t,n=0,r){let o=i(e);return n%a(e)===0?new o(t,n,r??(t.byteLength-n)/a(e)):new o(r?t.slice(n,n+r*a(e)):t.slice(n))}function s(e){let t=r[e];if(!t)throw Error(`Failed to convert GL type`);return t}var c=class{constructor(e,n){this.featuresLength=0,this.cachedTypedArrays={},this.json=e,this.buffer=n;let r=this.getGlobalProperty(`POINTS_LENGTH`,t.UNSIGNED_INT,1);r&&r.length&&(this.featuresLength=r[0])}getExtension(e){return this.json.extensions&&this.json.extensions[e]}hasProperty(e){return!!this.json[e]}getGlobalProperty(e,t,n){let r=this.json[e];return typeof r==`number`?new(i(t))([r]):Array.isArray(r)?new(i(t))(r):r&&Number.isFinite(r.byteOffset)?this.getTypedArrayFromBinary(e,t,n,1,r.byteOffset):null}getPropertyArray(e,t,n){let r=this.json[e];return r&&Number.isFinite(r.byteOffset)?(`componentType`in r&&(t=s(r.componentType)),this.getTypedArrayFromBinary(e,t,n,this.featuresLength,r.byteOffset)):this.getTypedArrayFromArray(e,t,r)}getProperty(e,t,n,r,i){if(!this.json[e])return null;let a=this.getPropertyArray(e,t,n);if(n===1)return i[0]=a[r],i;for(let e=0;e<n;++e)i[e]=a[n*r+e];return i}getTypedArrayFromBinary(e,t,n,r,i){let a=this.cachedTypedArrays,s=a[e];return s||(s=o(t,this.buffer.buffer,this.buffer.byteOffset+i,r*n),a[e]=s),s}getTypedArrayFromArray(e,t,n){let r=this.cachedTypedArrays,i=r[e];return i||(i=o(t,n),r[e]=i),i}};e(e=>Promise.resolve(e).then(e=>{let t=new c(e.featureTableJson,e.featureTableBinary),n=u(t),r=d(t),i=p(t),a=[];return n&&a.push(n.array.buffer),r&&a.push(r.array.buffer),i&&a.push(i.array.buffer),{output:{position:n,color:r,normal:i},transfer:a}}));let l=65535;function u(e){if(e.hasProperty(`POSITION`))return{array:e.getPropertyArray(`POSITION`,t.FLOAT,3),itemSize:3,normalized:!1};if(e.hasProperty(`POSITION_QUANTIZED`)){let n=e.getPropertyArray(`POSITION_QUANTIZED`,t.UNSIGNED_SHORT,3),r=e.getGlobalProperty(`QUANTIZED_VOLUME_SCALE`,t.FLOAT,3),i=e.getGlobalProperty(`QUANTIZED_VOLUME_OFFSET`,t.FLOAT,3);if(!r||!i)throw Error(`QUANTIZED_VOLUME_SCALE or QUANTIZED_VOLUME_OFFSET never found.`);let a=new Float32Array(n.length),o=n.length/3,s=r[0]/l,c=r[1]/l,u=r[2]/l,d=i[0],f=i[1],p=i[2];for(let e=0,t;e<o;e++)t=e*3,a[t]=n[t]*s+d,a[++t]=n[t]*c+f,a[++t]=n[t]*u+p;return{array:a,itemSize:3,normalized:!1}}return null}function d(e){if(e.hasProperty(`RGB`)){let n=e.getPropertyArray(`RGB`,t.UNSIGNED_BYTE,3),r=n.length/3,i=new Uint8Array(r*4);for(let e=0,t,a;e<r;e++)a=e*4,t=e*3,i[a]=n[t],i[++a]=n[++t],i[++a]=n[++t];return{array:i,itemSize:4,normalized:!0}}else if(e.hasProperty(`RGBA`))return{array:e.getPropertyArray(`RGBA`,t.UNSIGNED_BYTE,4),itemSize:4,normalized:!0};else if(e.hasProperty(`RGB565`)){let n=e.getPropertyArray(`RGB565`,t.UNSIGNED_SHORT,1),r=n.length,i=new Uint8Array(r*4);for(let e=0,t,a;e<r;e++)a=n[e],t=e*4,i[t]=(a>>11&31)<<3,i[++t]=(a>>5&63)<<2,i[++t]=(a&31)<<3;return{array:i,itemSize:4,normalized:!0}}return null}let f=2/255;function p(e){if(e.hasProperty(`NORMAL`)){let n=e.getPropertyArray(`NORMAL`,t.FLOAT,3),r=n.length/3,i=new Int8Array(r*4);for(let e=0,t,a;e<r;e++)a=e*4,t=e*3,i[a]=n[t]*127,i[++a]=n[++t]*127,i[++a]=n[++t]*127;return{array:i,itemSize:4,normalized:!0}}else if(e.hasProperty(`NORMAL_OCT16P`)){let n=e.getPropertyArray(`NORMAL_OCT16P`,t.UNSIGNED_BYTE,2),r=n.length/2,i=new Int8Array(r*4);for(let e=0,t,a,o,s,c,l,u;e<r;e++)t=e*2,a=n[t]*f-1,o=n[++t]*f-1,c=a<0?-a:a,l=o<0?-o:o,s=1-(c+l),s<0&&(a=(1-l)*(a<0?-1:1),o=(1-c)*(o<0?-1:1)),u=Math.sqrt(a*a+o*o+s*s),t=e*4,i[t]=a/u*127,i[++t]=o/u*127,i[++t]=s/u*127;return{array:i,itemSize:4,normalized:!0}}return null}})();",blob$3=typeof self<`u`&&self.Blob&&new Blob([`(self.URL || self.webkitURL).revokeObjectURL(self.location.href);`,jsContent$3],{type:`text/javascript;charset=utf-8`});function WorkerWrapper$3(e){let t;try{if(t=blob$3&&(self.URL||self.webkitURL).createObjectURL(blob$3),!t)throw``;let n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener(`error`,()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker(`data:text/javascript;charset=utf-8,`+encodeURIComponent(jsContent$3),{name:e==null?void 0:e.name})}}var attributeWorkerPool=new WorkerPool(()=>new WorkerWrapper$3,2);function parsePointCloud(e,t,n){let r=new FeatureTable(e.featureTableJson,e.featureTableBinary);return Promise.resolve().then(()=>{let e=r.getExtension(`3DTILES_draco_point_compression`);return e?parseDraco(e,r):attributeWorkerPool.postMessage({featureTableBinary:r.buffer,featureTableJson:r.json},[r.buffer.buffer])}).then(t=>(e.attributes=t,n))}function parseDraco(e,t){return __awaiter(this,void 0,void 0,function*(){let n=e.properties||{},r=e.byteOffset,o=e.byteLength;if(!n||!Number.isFinite(r)||!o)throw Error(`Draco properties, byteOffset, and byteLength must be defined`);let s=t.buffer.slice(r,r+o),c=e.properties;return draco.decodeGeometry(s.buffer,{attributeIDs:c,attributeTypes:{POSITION:`Float32Array`,NORMAL:`Float32Array`,RGB:`Uint8Array`,RGBA:`Uint8Array`},useUniqueIDs:!0}).then(e=>{let t=e.getAttribute(`POSITION`),n=e.getAttribute(`RGB`),r=e.getAttribute(`RGBA`),o=e.getAttribute(`NORMAL`),s;if(r)s=r;else if(n){let e=n.count,t=n.array,r=new Uint8Array(e*4);for(let n=0,o,s;n<e;n++)s=n*4,o=n*3,r[s]=t[o],r[++s]=t[++o],r[++s]=t[++o];s=new three.BufferAttribute(r,4,n.normalized)}return{position:t?{array:t.array,itemSize:t.itemSize,normalized:t.normalized}:null,color:s?{array:s.array,itemSize:s.itemSize,normalized:s.normalized}:null,normal:o?{array:o.array,itemSize:o.itemSize,normalized:o.normalized}:null}})})}function loadPnts(e,t={}){var n,r,o;let s=(n=t.upAxis)==null?`Z`:n,c=(r=t.fetcher)==null?internalFetcher:r,l=(o=t.onDownloadProgress)==null?noop:o,u={uri:e};return Promise.resolve().then(()=>c.ajax(e,{responseType:`arraybuffer`},void 0,void 0,l).then(e=>e.body)).then(e=>Promise.resolve(0).then(t=>parseHeader$1(u,e,t)).then(t=>parseTable(u,e,t)).then(t=>parsePointCloud(u,e,t))).then(()=>{var e;return createPoints(u.attributes,{computeBoundingBox:(e=t.computeBoundingBox)==null?!0:e})}).then(e=>{let t=new three.Matrix4,n;if(u.rtcCenter&&(n=new three.Vector3().fromArray(u.rtcCenter)),n){let e=new three.Matrix4().setPosition(n);t.premultiply(e)}return s===`Y`&&t.premultiply(ROTATE_X_MATRIX_INVERSE$1),e.object.applyMatrix4(t),u.gltfArrayBuffer=void 0,u.featureTableBinary=void 0,u.batchTableBinary=void 0,{type:`pnts`,modelUpAxis:`Z`,upAxis:s,uri:u.uri,byteLength:u.byteLength,memoryUsage:getMemoryUsage(e.object),scene:e.object,textures:[],animations:[],rtcCenter:n,dispose:()=>e.dispose()}})}function createPoints(e,t){let n=new Set,r=new three.BufferGeometry;n.add(r);let o=new PBMPointCloudMaterial;n.add(o),e.position&&r.setAttribute(`position`,new three.BufferAttribute(e.position.array,e.position.itemSize,e.position.normalized)),e.color&&r.setAttribute(`color`,new three.BufferAttribute(e.color.array,e.color.itemSize,e.color.normalized)),e.normal?r.setAttribute(`normal`,new three.BufferAttribute(e.normal.array,e.normal.itemSize,e.normal.normalized)):o.flatShading=!0,t.computeBoundingBox&&r.computeBoundingBox();let s=new PBMPointCloud(r,o);return s.matrix.compose(s.position,s.quaternion,s.scale),s.matrixAutoUpdate=!1,s.frustumCulled=!1,Promise.resolve({object:s,dispose:()=>{n.forEach(e=>{e.dispose()}),n.clear()}})}function loadGltf(e,t={}){var n,r,o,s,c;let l=(n=t.modelUpAxis)==null?`Y`:n,u=(r=t.upAxis)==null?`Z`:r,d=(o=t.fetcher)==null?internalFetcher:o,f=(s=t.onDownloadProgress)==null?noop:s,p=(c=t.jsonModify)==null?noop:c,m=0;return Promise.resolve().then(()=>d.ajax(e,{responseType:`arraybuffer`},void 0,void 0,f).then(e=>(m=e.body.byteLength,e.body))).then(n=>{var r;return parseGltf(n,{copyUV2:!1,resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(r=e.split(`?`)[1])==null?``:r,jsonModify(e){var n,r,o;if(t.light===!1){let t=`KHR_materials_unlit`;if(e.extensionsUsed=(n=e.extensionsUsed)==null?[]:n,e.extensionsUsed.indexOf(t)===-1&&e.extensionsUsed.push(t),e.materials)for(let n of e.materials)n.extensions=(r=n.extensions)==null?{}:r,n.extensions[t]={}}return(o=p(e))==null?e:o},fetcher:d})}).then(t=>{var n;let r=new three.Matrix4;if(l===`Y`&&r.premultiply(ROTATE_X_MATRIX$1),t.CESIUM_RTC){let e=new three.Matrix4().setPosition(t.CESIUM_RTC.center);r.premultiply(e)}return u===`Y`&&r.premultiply(ROTATE_X_MATRIX_INVERSE$1),t.scene.applyMatrix4(r),{type:`gltf`,modelUpAxis:l,upAxis:u,uri:e,byteLength:m,memoryUsage:getMemoryUsage(t.scene),scene:t.scene,textures:t.textures,animations:t.animations,rtcCenter:(n=t.CESIUM_RTC)==null?void 0:n.center,dispose:()=>t.dispose()}})}var scratchColor=new three.Color;function loadPly(e,t={}){var n,r,o,s;let c=(n=t.modelUpAxis)==null?`Z`:n,l=(r=t.upAxis)==null?`Z`:r,u=(o=t.fetcher)==null?internalFetcher:o,d=(s=t.onDownloadProgress)==null?noop:s,f=0;return Promise.resolve().then(()=>u.ajax(e,{responseType:`arraybuffer`},void 0,void 0,d).then(e=>(f=e.body.byteLength,e.body))).then(e=>{var n,r;return parsePly(e,{propertyNameMapping:(n=t.propertyNameMapping)==null?{}:n,customPropertyMapping:(r=t.customPropertyMapping)==null?{}:r})}).then(({geometry:n})=>{switch(t.type){case`geometry`:{let t=n;return c===`Y`&&t.applyMatrix4(ROTATE_X_MATRIX$1),l===`Y`&&t.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`ply`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getGeometryMemoryUsed(t),scene:t,textures:[],animations:[],dispose:()=>{n.dispose()}}}case`line`:{let t=`color`in n.attributes,r=new three.LineBasicMaterial({vertexColors:t}),o=new three.Line(n,r);return o.computeLineDistances(),c===`Y`&&o.applyMatrix4(ROTATE_X_MATRIX$1),l===`Y`&&o.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`ply`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(o),scene:o,textures:[],animations:[],dispose:()=>{n.dispose(),r.dispose()}}}case`pbmMesh`:{let r=new PBMMeshMaterial(t.light?`phong`:`basic`);r.vertexColors=`color`in n.attributes;let o=new three.Mesh(n,r);return c===`Y`&&o.applyMatrix4(ROTATE_X_MATRIX$1),l===`Y`&&o.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`ply`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(o),scene:o,textures:[],animations:[],dispose:()=>{n.dispose(),r.dispose()}}}case`pbmPointCloud`:{let t=new PBMPointCloudMaterial,r=new PBMPointCloud(n,t);return c===`Y`&&r.applyMatrix4(ROTATE_X_MATRIX$1),l===`Y`&&r.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`ply`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(r),scene:r,textures:[],animations:[],dispose:()=>{n.dispose(),t.dispose()}}}default:break}throw Error(`Invalid Type: ${t.type}`)})}function parsePly(e,t){let n=new Uint8Array(e),{headerText:r,headerLength:o}=extractHeaderText(n),s=parseHeader(r,o,t);return s.format===`ascii`?{header:s,geometry:parseASCII(new TextDecoder().decode(n),s,t)}:{header:s,geometry:parseBinary(e,s,t)}}function makePlyElementProperty(e,t){let n={name:``,type:e[0]};return n.type===`list`?(n.name=e[3],n.countType=e[1],n.itemType=e[2]):n.name=e[1],n.name in t.propertyNameMapping&&(n.name=t.propertyNameMapping[n.name]),n}function parseHeader(e,t=0,n){let r=/^ply([\s\S]*)end_header(\r\n|\r|\n)/,o=``,s=r.exec(e);s!==null&&(o=s[1]);let c={format:``,version:``,comments:[],elements:[],headerLength:t,objInfo:``},l=o.split(/\r\n|\r|\n/),u=null;for(let e=0;e<l.length;e++){let t=l[e];if(t=t.trim(),t===``)continue;let r=t.split(/\s+/),o=r.shift();switch(t=r.join(` `),o){case`format`:c.format=r[0],c.version=r[1];break;case`comment`:c.comments.push(t);break;case`element`:u&&c.elements.push(u),u={name:r[0],count:parseInt(r[1]),properties:[]};break;case`property`:u&&u.properties.push(makePlyElementProperty(r,n));break;case`obj_info`:c.objInfo=t;break;default:console.log(`unhandled`,o,r)}}return u&&c.elements.push(u),c}function parseASCIINumber(e,t){switch(t){case`char`:case`uchar`:case`short`:case`ushort`:case`int`:case`uint`:case`int8`:case`uint8`:case`int16`:case`uint16`:case`int32`:case`uint32`:return parseInt(e);case`float`:case`double`:case`float32`:case`float64`:return parseFloat(e);default:throw Error(`unspport type: `+t)}}function parseASCIIElement(e,t){let n={};for(let r=0;r<e.length;r++){if(t.empty())return null;if(e[r].type===`list`){let o=[],s=parseASCIINumber(t.next(),e[r].countType);for(let n=0;n<s;n++){if(t.empty())return null;o.push(parseASCIINumber(t.next(),e[r].itemType))}n[e[r].name]=o}else n[e[r].name]=parseASCIINumber(t.next(),e[r].type)}return n}function createBuffer(e){let t={indices:[],vertices:[],normals:[],uvs:[],faceVertexUvs:[],colors:[],faceVertexColors:[]};for(let n of Object.keys(e.customPropertyMapping))t[n]=[];return t}function mapElementAttributes(e){let t=e.map(e=>e.name);function n(e){for(let n=0,r=e.length;n<r;n++){let r=e[n];if(t.includes(r))return r}return null}return{attrX:n([`x`,`px`,`posx`])||`x`,attrY:n([`y`,`py`,`posy`])||`y`,attrZ:n([`z`,`pz`,`posz`])||`z`,attrNX:n([`nx`,`normalx`]),attrNY:n([`ny`,`normaly`]),attrNZ:n([`nz`,`normalz`]),attrS:n([`s`,`u`,`texture_u`,`tx`]),attrT:n([`t`,`v`,`texture_v`,`ty`]),attrR:n([`red`,`diffuse_red`,`r`,`diffuse_r`]),attrG:n([`green`,`diffuse_green`,`g`,`diffuse_g`]),attrB:n([`blue`,`diffuse_blue`,`b`,`diffuse_b`])}}function parseASCII(e,t,n){let r=createBuffer(n),o=/end_header\s+(\S[\s\S]*\S|\S)\s*$/,s,c=null;s=(c=o.exec(e))===null?[]:c[1].split(/\s+/);let l=new ArrayStream(s);loop:for(let e=0;e<t.elements.length;e++){let o=t.elements[e],s=mapElementAttributes(o.properties);for(let e=0;e<o.count;e++){let e=parseASCIIElement(o.properties,l);if(!e)break loop;handleElement(r,o.name,e,s,n)}}return postProcess(r,n)}function postProcess(e,t){let n=new three.BufferGeometry;e.indices.length>0&&n.setIndex(e.indices),n.setAttribute(`position`,new three.Float32BufferAttribute(e.vertices,3)),e.normals.length>0&&n.setAttribute(`normal`,new three.Float32BufferAttribute(e.normals,3)),e.uvs.length>0&&n.setAttribute(`uv`,new three.Float32BufferAttribute(e.uvs,2)),e.colors.length>0&&n.setAttribute(`color`,new three.Float32BufferAttribute(e.colors,3)),(e.faceVertexUvs.length>0||e.faceVertexColors.length>0)&&(n=n.toNonIndexed(),e.faceVertexUvs.length>0&&n.setAttribute(`uv`,new three.Float32BufferAttribute(e.faceVertexUvs,2)),e.faceVertexColors.length>0&&n.setAttribute(`color`,new three.Float32BufferAttribute(e.faceVertexColors,3)));for(let r of Object.keys(t.customPropertyMapping))if(e[r].length>0){let{itemType:o,itemNames:s,normalized:c}=t.customPropertyMapping[r],l=s.length,u;switch(o){case`float32`:u=new three.Float32BufferAttribute(e[r],l,c);break;case`uint32`:u=new three.Uint32BufferAttribute(e[r],l,c);break;case`int32`:u=new three.Int32BufferAttribute(e[r],l,c);break;case`uint16`:u=new three.Uint16BufferAttribute(e[r],l,c);break;case`int16`:u=new three.Int16BufferAttribute(e[r],l,c);break;case`uint8`:u=new three.Uint8BufferAttribute(e[r],l,c);break;case`int8`:u=new three.Int8BufferAttribute(e[r],l,c);break;default:u=new three.Float32BufferAttribute(e[r],l,c);break}n.setAttribute(r,u)}return n.computeBoundingSphere(),n}function handleElement(e,t,n,r,o){if(t===`vertex`){r.attrX!==null&&r.attrY!==null&&r.attrZ!==null&&e.vertices.push(n[r.attrX],n[r.attrY],n[r.attrZ]),r.attrNX!==null&&r.attrNY!==null&&r.attrNZ!==null&&e.normals.push(n[r.attrNX],n[r.attrNY],n[r.attrNZ]),r.attrS!==null&&r.attrT!==null&&e.uvs.push(n[r.attrS],n[r.attrT]),r.attrR!==null&&r.attrG!==null&&r.attrB!==null&&(scratchColor.setRGB(n[r.attrR]/255,n[r.attrG]/255,n[r.attrB]/255),e.colors.push(scratchColor.r,scratchColor.g,scratchColor.b));for(let t of Object.keys(o.customPropertyMapping))for(let r of o.customPropertyMapping[t].itemNames)e[t].push(n[r])}else if(t===`face`){let t=n.vertex_indices||n.vertex_index,o=n.texcoord;t.length===3?(e.indices.push(t[0],t[1],t[2]),o&&o.length===6&&(e.faceVertexUvs.push(o[0],o[1]),e.faceVertexUvs.push(o[2],o[3]),e.faceVertexUvs.push(o[4],o[5]))):t.length===4&&(e.indices.push(t[0],t[1],t[3]),e.indices.push(t[1],t[2],t[3])),r.attrR!==null&&r.attrG!==null&&r.attrB!==null&&(scratchColor.setRGB(n[r.attrR]/255,n[r.attrG]/255,n[r.attrB]/255),e.faceVertexColors.push(scratchColor.r,scratchColor.g,scratchColor.b),e.faceVertexColors.push(scratchColor.r,scratchColor.g,scratchColor.b),e.faceVertexColors.push(scratchColor.r,scratchColor.g,scratchColor.b))}}function binaryReadElement(e,t){let n={},r=0;for(let o=0;o<t.length;o++){let s=t[o],c=s.valueReader;if(s.type===`list`){let t=[],o=s.countReader.read(e+r);r+=s.countReader.size;for(let n=0;n<o;n++)t.push(c.read(e+r)),r+=c.size;n[s.name]=t}else n[s.name]=c.read(e+r),r+=c.size}return[n,r]}function setPropertyBinaryReaders(e,t,n){function r(e,t,n){switch(t){case`int8`:case`char`:return{read:t=>e.getInt8(t),size:1};case`uint8`:case`uchar`:return{read:t=>e.getUint8(t),size:1};case`int16`:case`short`:return{read:t=>e.getInt16(t,n),size:2};case`uint16`:case`ushort`:return{read:t=>e.getUint16(t,n),size:2};case`int32`:case`int`:return{read:t=>e.getInt32(t,n),size:4};case`uint32`:case`uint`:return{read:t=>e.getUint32(t,n),size:4};case`float32`:case`float`:return{read:t=>e.getFloat32(t,n),size:4};case`float64`:case`double`:return{read:t=>e.getFloat64(t,n),size:8};default:throw Error(`not support type: `+t)}}for(let o=0,s=e.length;o<s;o++){let s=e[o];s.type===`list`?(s.countReader=r(t,s.countType,n),s.valueReader=r(t,s.itemType,n)):s.valueReader=r(t,s.type,n)}}function parseBinary(e,t,n){let r=createBuffer(n),o=t.format===`binary_little_endian`,s=new DataView(e,t.headerLength),c,l=0;for(let e=0;e<t.elements.length;e++){let u=t.elements[e],d=u.properties,f=mapElementAttributes(d);setPropertyBinaryReaders(d,s,o);for(let e=0;e<u.count;e++){c=binaryReadElement(l,d),l+=c[1];let e=c[0];handleElement(r,u.name,e,f,n)}}return postProcess(r,n)}function extractHeaderText(e){let t=0,n=!0,r=``,o=[],s=new TextDecoder().decode(e.subarray(0,5)),c=/^ply\r\n/.test(s);do{let s=String.fromCharCode(e[t++]);s!==`
|
|
831
831
|
`&&s!==`\r`?r+=s:(r===`end_header`&&(n=!1),r!==``&&(o.push(r),r=``))}while(n&&t<e.length);return c===!0&&t++,{headerText:o.join(`\r`)+`\r`,headerLength:t}}var ArrayStream=class{constructor(e){this.arr=e,this.i=0}empty(){return this.i>=this.arr.length}next(){return this.arr[this.i++]}},u8=Uint8Array,u16=Uint16Array,i32=Int32Array,fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(e,t){for(var n=new u16(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var o=new i32(n[30]),r=1;r<30;++r)for(var s=n[r];s<n[r+1];++s)o[s]=s-n[r]<<5|r;return{b:n,r:o}},_a$3=freb(fleb,2),fl=_a$3.b,revfl=_a$3.r;fl[28]=258,revfl[258]=28;for(var _b=freb(fdeb,0),fd=_b.b,revfd=_b.r,rev=new u16(32768),i=0;i<32768;++i){var x=(i&43690)>>1|(i&21845)<<1;x=(x&52428)>>2|(x&13107)<<2,x=(x&61680)>>4|(x&3855)<<4,rev[i]=((x&65280)>>8|(x&255)<<8)>>1}for(var hMap=(function(e,t,n){for(var r=e.length,o=0,s=new u16(t);o<r;++o)e[o]&&++s[e[o]-1];var c=new u16(t);for(o=1;o<t;++o)c[o]=c[o-1]+s[o-1]<<1;var l;if(n){l=new u16(1<<t);var u=15-t;for(o=0;o<r;++o)if(e[o])for(var d=o<<4|e[o],f=t-e[o],p=c[e[o]-1]++<<f,m=p|(1<<f)-1;p<=m;++p)l[rev[p]>>u]=d}else for(l=new u16(r),o=0;o<r;++o)e[o]&&(l[o]=rev[c[e[o]-1]++]>>15-e[o]);return l}),flt=new u8(288),i=0;i<144;++i)flt[i]=8;for(var i=144;i<256;++i)flt[i]=9;for(var i=256;i<280;++i)flt[i]=7;for(var i=280;i<288;++i)flt[i]=8;for(var fdt=new u8(32),i=0;i<32;++i)fdt[i]=5;var flm=hMap(flt,9,0),flrm=hMap(flt,9,1),fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1),max=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},bits=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},bits16=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},shft=function(e){return(e+7)/8|0},slc=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new u8(e.subarray(t,n))},ec=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],err=function(e,t,n){var r=Error(t||ec[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,err),!n)throw r;return r},inflt=function(e,t,n,r){var o=e.length,s=r?r.length:0;if(!o||t.f&&!t.l)return n||new u8(0);var c=!n,l=c||t.i!=2,u=t.i;c&&(n=new u8(o*3));var d=function(e){var t=n.length;if(e>t){var r=new u8(Math.max(t*2,e));r.set(n),n=r}},f=t.f||0,p=t.p||0,m=t.b||0,h=t.l,g=t.d,_=t.m,v=t.n,y=o*8;do{if(!h){f=bits(e,p,1);var b=bits(e,p+1,3);if(p+=3,!b){var S=shft(p)+4,C=e[S-4]|e[S-3]<<8,w=S+C;if(w>o){u&&err(0);break}l&&d(m+C),n.set(e.subarray(S,w),m),t.b=m+=C,t.p=p=w*8,t.f=f;continue}else if(b==1)h=flrm,g=fdrm,_=9,v=5;else if(b==2){var T=bits(e,p,31)+257,E=bits(e,p+10,15)+4,D=T+bits(e,p+5,31)+1;p+=14;for(var O=new u8(D),k=new u8(19),A=0;A<E;++A)k[clim[A]]=bits(e,p+A*3,7);p+=E*3;for(var j=max(k),M=(1<<j)-1,N=hMap(k,j,1),A=0;A<D;){var P=N[bits(e,p,M)];p+=P&15;var S=P>>4;if(S<16)O[A++]=S;else{var F=0,I=0;for(S==16?(I=3+bits(e,p,3),p+=2,F=O[A-1]):S==17?(I=3+bits(e,p,7),p+=3):S==18&&(I=11+bits(e,p,127),p+=7);I--;)O[A++]=F}}var L=O.subarray(0,T),R=O.subarray(T);_=max(L),v=max(R),h=hMap(L,_,1),g=hMap(R,v,1)}else err(1);if(p>y){u&&err(0);break}}l&&d(m+131072);for(var z=(1<<_)-1,B=(1<<v)-1,V=p;;V=p){var F=h[bits16(e,p)&z],H=F>>4;if(p+=F&15,p>y){u&&err(0);break}if(F||err(2),H<256)n[m++]=H;else if(H==256){V=p,h=null;break}else{var ee=H-254;if(H>264){var A=H-257,te=fleb[A];ee=bits(e,p,(1<<te)-1)+fl[A],p+=te}var U=g[bits16(e,p)&B],W=U>>4;U||err(3),p+=U&15;var R=fd[W];if(W>3){var te=fdeb[W];R+=bits16(e,p)&(1<<te)-1,p+=te}if(p>y){u&&err(0);break}l&&d(m+131072);var G=m+ee;if(m<R){var K=s-R,ne=Math.min(R,G);for(K+m<0&&err(3);m<ne;++m)n[m]=r[K+m]}for(;m<G;++m)n[m]=n[m-R]}}t.l=h,t.p=V,t.b=m,t.f=f,h&&(f=1,t.m=_,t.d=g,t.n=v)}while(!f);return m!=n.length&&c?slc(n,0,m):n.subarray(0,m)},et=new u8(0),b2=function(e,t){return e[t]|e[t+1]<<8},b4=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},b8=function(e,t){return b4(e,t)+b4(e,t+4)*4294967296},zls=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)&&err(6,`invalid zlib data`),(e[1]>>5&1)==+!t&&err(6,`invalid zlib data: `+(e[1]&32?`need`:`unexpected`)+` dictionary`),(e[1]>>3&4)+2};function inflateSync(e,t){return inflt(e,{i:2},t&&t.out,t&&t.dictionary)}function unzlibSync(e,t){return inflt(e.subarray(zls(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}var td=typeof TextDecoder<`u`&&new TextDecoder,tds=0;try{td.decode(et,{stream:!0})}catch(e){}var dutf8=function(e){for(var t=``,n=0;;){var r=e[n++],o=(r>127)+(r>223)+(r>239);if(n+o>e.length)return{s:t,r:slc(e,n-1)};o?o==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):o&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};function strFromU8(e,t){if(t){for(var n=``,r=0;r<e.length;r+=16384)n+=String.fromCharCode.apply(null,e.subarray(r,r+16384));return n}else if(td)return td.decode(e);else{var o=dutf8(e),s=o.s,n=o.r;return n.length&&err(8),s}}var slzh=function(e,t){return t+30+b2(e,t+26)+b2(e,t+28)},zh=function(e,t,n){var r=b2(e,t+28),o=strFromU8(e.subarray(t+46,t+46+r),!(b2(e,t+8)&2048)),s=t+46+r,c=b4(e,t+20),l=n&&c==4294967295?z64e(e,s):[c,b4(e,t+24),b4(e,t+42)],u=l[0],d=l[1],f=l[2];return[b2(e,t+10),u,d,o,s+b2(e,t+30)+b2(e,t+32),f]},z64e=function(e,t){for(;b2(e,t)!=1;t+=4+b2(e,t+2));return[b8(e,t+12),b8(e,t+4),b8(e,t+20)]};function unzipSync(e,t){for(var n={},r=e.length-22;b4(e,r)!=101010256;--r)(!r||e.length-r>65558)&&err(13);var o=b2(e,r+8);if(!o)return{};var s=b4(e,r+16),c=s==4294967295||o==65535;if(c){var l=b4(e,r-12);c=b4(e,l)==101075792,c&&(o=b4(e,l+32),s=b4(e,l+48))}for(var u=t&&t.filter,d=0;d<o;++d){var f=zh(e,s,c),p=f[0],m=f[1],h=f[2],g=f[3],_=f[4],v=f[5],y=slzh(e,v);s=_,(!u||u({name:g,size:m,originalSize:h,compression:p}))&&(p?p==8?n[g]=inflateSync(e.subarray(y,y+m),{out:new u8(h)}):err(14,`unknown compression type `+p):n[g]=slc(e,y,y+m))}return n}function loadFbx(e,t={}){var n,r,o;let s=(n=t.upAxis)==null?`Z`:n,c=(r=t.fetcher)==null?internalFetcher:r,l=(o=t.onDownloadProgress)==null?noop:o,u=0;return Promise.resolve().then(()=>c.ajax(e,{responseType:`arraybuffer`},void 0,void 0,l).then(e=>(u=e.body.byteLength,e.body))).then(n=>{var r;return parse$2(n,{light:t.light,resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(r=e.split(`?`)[1])==null?``:r,fetcher:c})}).then(t=>{let n=t.scene,r=t.unitScale/100,o=new three.Matrix4;if(o.makeScale(r,r,r),t.upAxis===`X`)throw Error(`Cannot load fbx x upAxis`);return t.upAxis===`Y`&&o.premultiply(ROTATE_X_MATRIX$1),s===`Y`&&o.premultiply(ROTATE_X_MATRIX_INVERSE$1),n.applyMatrix4(o),{type:`fbx`,modelUpAxis:t.upAxis,upAxis:s,uri:e,byteLength:u,memoryUsage:getMemoryUsage(n),scene:n,textures:t.textures,animations:t.animations,dispose:()=>t.dispose()}})}function parse$2(e,t){let n;if(isFbxFormatBinary(e))n=new BinaryParser().parse(e);else{let t=convertArrayBufferToString(e);if(!isFbxFormatASCII(t))throw Error(`THREE.FBXLoader: Unknown format.`);if(getFbxVersion(t)<7e3)throw Error(`THREE.FBXLoader: FBX version not supported, FileVersion: `+getFbxVersion(t));n=new TextParser().parse(t)}return new FBXTreeParser(t).parse(n)}var FBXTreeParser=class{constructor(e){var t,n,r;this.light=(t=e.light)==null?!0:t,this.resourcePath=(n=e.resourcePath)==null?``:n,this.search=(r=e.search)==null?``:r,this.fetcher=e.fetcher}parse(e){var t,n,r,o,s,c;let l=this.parseConnections(e),u=Object.assign(new three.Group,{animations:[]}),d=[],f=this.parseImages(e),p=this.parseTextures(e,f,l,d),m=this.parseMaterials(e,p,l),h=this.parseDeformers(e,l),g=new GeometryParser().parse(e,h,l);this.parseScene(e,h,g,m,l,u);let _=(n=(t=e.GlobalSettings.UpAxis)==null?void 0:t.value)==null?1:n,v=(o=(r=e.GlobalSettings.FrontAxis)==null?void 0:r.value)==null?2:o,y=(c=(s=e.GlobalSettings.UnitScaleFactor)==null?void 0:s.value)==null?1:c,b;if(e.GlobalSettings.AmbientColor){let t=e.GlobalSettings.AmbientColor.value,n=t[0],r=t[1],o=t[2];if(n!==0||r!==0||o!==0){let e=new three.Color().setRGB(n,r,o);b=new three.AmbientLight(e,1)}}return Promise.all(d).then(e=>{var t;return{scene:u,textures:e,ambientLight:b,upAxis:[`X`,`Y`,`Z`][_],frontAxis:[`X`,`Y`,`Z`][v],unitScale:y,animations:(t=u.animations)==null?[]:t,dispose:()=>{e.forEach(e=>e.dispose()),m.forEach(e=>e.dispose()),g.forEach(e=>e.dispose())}}})}parseConnections(e){let t=new Map;return`Connections`in e&&e.Connections.connections.forEach(function(e){let n=e[0],r=e[1],o=e[2];t.has(n)||t.set(n,{parents:[],children:[]});let s={ID:r,relationship:o};t.get(n).parents.push(s),t.has(r)||t.set(r,{parents:[],children:[]});let c={ID:n,relationship:o};t.get(r).children.push(c)}),t}parseImages(e){let t={},n={};if(`Video`in e.Objects){let r=e.Objects.Video;for(let e in r){let o=r[e],s=parseInt(e);if(t[s]=o.RelativeFilename||o.Filename,`Content`in o){let t=o.Content instanceof ArrayBuffer&&o.Content.byteLength>0,s=typeof o.Content==`string`&&o.Content!==``;if(t||s){let t=this.parseImage(r[e]);n[o.RelativeFilename||o.Filename]=t}}}}for(let e in t){let r=t[e];n[r]===void 0?t[e]=t[e].split(`\\`).pop():t[e]=n[r]}return t}parseImage(e){let t=e.Content,n=e.RelativeFilename||e.Filename,r=n.slice(n.lastIndexOf(`.`)+1).toLowerCase(),o;switch(r){case`bmp`:o=`image/bmp`;break;case`jpg`:case`jpeg`:o=`image/jpeg`;break;case`png`:o=`image/png`;break;case`tif`:o=`image/tiff`;break;case`tga`:o=`image/tga`;break;default:return}if(typeof t==`string`)return`data:`+o+`;base64,`+t;{let e=new Uint8Array(t);return window.URL.createObjectURL(new Blob([e],{type:o}))}}parseTextures(e,t,n,r){let o=new Map;if(`Texture`in e.Objects){let s=e.Objects.Texture;for(let e in s){let c=this.parseTexture(s[e],t,n,r);o.set(parseInt(e),c)}}return o}parseTexture(e,t,n,r){let o=this.loadTexture(e,t,n,r);o.ID=e.id,o.name=e.attrName;let s=e.WrapModeU,c=e.WrapModeV,l=s===void 0?0:s.value,u=c===void 0?0:c.value;if(o.wrapS=l===0?three.RepeatWrapping:three.ClampToEdgeWrapping,o.wrapT=u===0?three.RepeatWrapping:three.ClampToEdgeWrapping,e.Scaling){let t=e.Scaling.value;o.repeat.x=t[0],o.repeat.y=t[1]}if(e.Translation){let t=e.Translation.value;o.offset.x=t[0],o.offset.y=t[1]}return o}loadTexture(e,t,n,r){let o=n.get(e.id).children,s=``;o!==void 0&&o.length>0&&t[o[0].ID]!==void 0&&(s=t[o[0].ID]),s=pathJoin(this.resourcePath,appendSearch(s,this.search));let c=Object.assign(new three.Texture,{ID:0}),l;l=canUseNativeImageBitmap()?this.fetcher.ajax(s,{responseType:`blob`}).then(e=>{let t=e.body;return createImageBitmapLike(t)}):this.fetcher.loadImage(s,{},void 0,void 0,void 0,createImageBitmapLikeImage()).then(e=>e.body);let u=l.then(e=>(c.image=e,c.needsUpdate=!0,c)).catch(e=>(console.warn(e),c));return r.push(u),c}parseMaterials(e,t,n){let r=new Map;if(`Material`in e.Objects){let o=e.Objects.Material;for(let s in o){let c=this.parseMaterial(e,o[s],t,n);c!==null&&r.set(parseInt(s),c)}}return r}parseMaterial(e,t,n,r){let o=t.id,s=t.attrName,c=t.ShadingModel;if(typeof c==`object`&&(c=c.value),c=c.toLowerCase(),!r.has(o))return null;let l=new PBMMeshMaterial(this.light?`phong`:`basic`);l.name=s,t.BumpFactor&&(l.bumpScale=t.BumpFactor.value),t.Diffuse?l.color=new three.Color().fromArray(t.Diffuse.value):t.DiffuseColor&&(t.DiffuseColor.type===`Color`||t.DiffuseColor.type===`ColorRGB`)&&(l.color=new three.Color().fromArray(t.DiffuseColor.value)),t.DisplacementFactor&&(l.displacementScale=t.DisplacementFactor.value),t.Emissive?l.emissive=new three.Color().fromArray(t.Emissive.value):t.EmissiveColor&&(t.EmissiveColor.type===`Color`||t.EmissiveColor.type===`ColorRGB`)&&(l.emissive=new three.Color().fromArray(t.EmissiveColor.value)),t.EmissiveFactor&&(l.emissiveIntensity=parseFloat(t.EmissiveFactor.value));let u=1-(t.TransparencyFactor?parseFloat(t.TransparencyFactor.value):0);(u===1||u===0)&&(u=t.Opacity?parseFloat(t.Opacity.value):null,u===null&&(u=1-(t.TransparentColor?parseFloat(t.TransparentColor.value[0]):0))),l.opacity=u,l.opacity<1&&(l.transparent=!0),t.ReflectionFactor&&(l.reflectivity=t.ReflectionFactor.value),t.Shininess&&(l.shininess=t.Shininess.value),t.Specular?l.specular=new three.Color().fromArray(t.Specular.value):t.SpecularColor&&t.SpecularColor.type===`Color`&&(l.specular=new three.Color().fromArray(t.SpecularColor.value));let d=this;return r.get(o).children.forEach(function(t){let o=t.relationship;switch(o){case`Bump`:l.bumpMap=d.getTexture(e,n,t.ID,r);break;case`Maya|TEX_ao_map`:l.aoMap=d.getTexture(e,n,t.ID,r);break;case`DiffuseColor`:case`Maya|TEX_color_map`:l.map=d.getTexture(e,n,t.ID,r),l.map!==void 0&&(l.map.encoding=three.sRGBEncoding);break;case`DisplacementColor`:l.displacementMap=d.getTexture(e,n,t.ID,r);break;case`EmissiveColor`:l.emissiveMap=d.getTexture(e,n,t.ID,r),l.emissiveMap!==void 0&&(l.emissiveMap.encoding=three.sRGBEncoding);break;case`NormalMap`:case`Maya|TEX_normal_map`:l.normalMap=d.getTexture(e,n,t.ID,r);break;case`ReflectionColor`:l.envMap=d.getTexture(e,n,t.ID,r),l.envMap!==void 0&&(l.envMap.mapping=three.EquirectangularReflectionMapping,l.envMap.encoding=three.sRGBEncoding);break;case`SpecularColor`:l.specularMap=d.getTexture(e,n,t.ID,r),l.specularMap!==void 0&&(l.specularMap.encoding=three.sRGBEncoding);break;case`TransparentColor`:case`TransparencyFactor`:l.alphaMap=d.getTexture(e,n,t.ID,r),l.transparent=!0;break;default:console.warn(`THREE.FBXLoader: %s map is not supported in three.js, skipping texture.`,o);break}}),l}getTexture(e,t,n,r){return e.Objects.LayeredTexture&&n in e.Objects.LayeredTexture&&(console.warn(`THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.`),n=r.get(n).children[0].ID),t.get(n)}parseDeformers(e,t){let n={},r={};if(`Deformer`in e.Objects){let o=e.Objects.Deformer;for(let e in o){let s=o[e],c=t.get(parseInt(e));if(s.attrType===`Skin`){let t=this.parseSkeleton(c,o);t.ID=e,c.parents.length>1&&console.warn(`THREE.FBXLoader: skeleton attached to more than one geometry is not supported.`),t.geometryID=c.parents[0].ID,n[e]=t}else if(s.attrType===`BlendShape`){let n={id:e};n.rawTargets=this.parseMorphTargets(c,o,t),n.id=e,c.parents.length>1&&console.warn(`THREE.FBXLoader: morph target attached to more than one geometry is not supported.`),r[e]=n}}}return{skeletons:n,morphTargets:r}}parseSkeleton(e,t){let n=[];return e.children.forEach(function(e){let r=t[e.ID];if(r.attrType!==`Cluster`)return;let o={ID:e.ID,indices:[],weights:[],transformLink:new three.Matrix4().fromArray(r.TransformLink.a)};r.Indexes&&(o.indices=r.Indexes.a,o.weights=r.Weights.a),n.push(o)}),{ID:``,geometryID:0,rawBones:n,bones:[]}}parseMorphTargets(e,t,n){let r=[];for(let o=0;o<e.children.length;o++){let s=e.children[o],c=t[s.ID],l={name:c.attrName,initialWeight:c.DeformPercent,id:c.id,fullWeights:c.FullWeights.a,geoID:0};if(c.attrType!==`BlendShapeChannel`)return;l.geoID=n.get(parseInt(s.ID)).children.filter(function(e){return e.relationship===void 0})[0].ID,r.push(l)}return r}parseScene(e,t,n,r,o,s){let c=this.parseModels(e,t.skeletons,n,r,o),l=e.Objects.Model,u=this;c.forEach(function(t){let n=l[t.ID];u.setLookAtProperties(e,t,n,o,s),o.get(t.ID).parents.forEach(function(e){let n=c.get(e.ID);n!==void 0&&n.add(t)}),t.parent===null&&s.add(t)}),this.bindSkeleton(e,t.skeletons,n,c,o),s.traverse(function(e){if(e.userData.transformData){e.parent&&(e.userData.transformData.parentMatrix=e.parent.matrix,e.userData.transformData.parentMatrixWorld=e.parent.matrixWorld);let t=generateTransform(e.userData.transformData);e.applyMatrix4(t),e.updateWorldMatrix(!0,!0)}});let d=new AnimationParser().parse(e,o,s);s.children.length===1&&s.children[0]instanceof three.Group&&(s=s.children[0]),s.animations=d}parseModels(e,t,n,r,o){let s=new Map,c=e.Objects.Model;for(let l in c){let u=parseInt(l),d=c[l],f=o.get(u),p=this.buildSkeleton(f,t,u,d.attrName);if(!p){switch(d.attrType){case`Camera`:p=this.createCamera(e,f);break;case`Light`:p=this.createLight(e,f);break;case`Mesh`:p=this.createMesh(f,n,r);break;case`NurbsCurve`:case`LimbNode`:case`Root`:p=new three.Bone;break;default:p=new three.Group;break}p.name=d.attrName?three.PropertyBinding.sanitizeNodeName(d.attrName):``,p.userData.originalName=d.attrName,p.ID=u}this.getTransformData(p,d),s.set(u,p)}return s}buildSkeleton(e,t,n,r){let o=null;return e.parents.forEach(function(e){for(let s in t){let c=t[s];c.rawBones.forEach(function(t,s){if(t.ID===e.ID){let e=o;o=new three.Bone,o.matrixWorld.copy(t.transformLink),o.name=r?three.PropertyBinding.sanitizeNodeName(r):``,o.userData.originalName=r,o.ID=n,c.bones[s]=o,e!==null&&o.add(e)}})}}),o}createCamera(e,t){let n,r;if(t.children.forEach(function(t){let n=e.Objects.NodeAttribute[t.ID];n!==void 0&&(r=n)}),r===void 0)n=new three.Object3D;else{let e=0;r.CameraProjectionType!==void 0&&r.CameraProjectionType.value===1&&(e=1);let t=1;r.NearPlane!==void 0&&(t=r.NearPlane.value/1e3);let o=1e3;r.FarPlane!==void 0&&(o=r.FarPlane.value/1e3);let s=window.innerWidth,c=window.innerHeight;r.AspectWidth!==void 0&&r.AspectHeight!==void 0&&(s=r.AspectWidth.value,c=r.AspectHeight.value);let l=s/c,u=45;r.FieldOfView!==void 0&&(u=r.FieldOfView.value);let d=r.FocalLength?r.FocalLength.value:null;switch(e){case 0:n=new three.PerspectiveCamera(u,l,t,o),d!==null&&n.setFocalLength(d);break;case 1:console.warn(`THREE.FBXLoader: Orthographic cameras not supported yet.`),n=new three.Object3D;break;default:console.warn(`THREE.FBXLoader: Unknown camera type `+e+`.`),n=new three.Object3D;break}}return n}createLight(e,t){let n,r;if(t.children.forEach(function(t){let n=e.Objects.NodeAttribute[t.ID];n!==void 0&&(r=n)}),r===void 0)n=new three.Object3D;else{let e;e=r.LightType===void 0?0:r.LightType.value;let t=new three.Color(16777215);r.Color!==void 0&&(t=new three.Color().fromArray(r.Color.value));let o=r.Intensity===void 0?1:r.Intensity.value/100;r.CastLightOnObject!==void 0&&r.CastLightOnObject.value===0&&(o=0);let s=0;r.FarAttenuationEnd!==void 0&&(s=r.EnableFarAttenuation!==void 0&&r.EnableFarAttenuation.value===0?0:r.FarAttenuationEnd.value);let c=1;switch(e){case 0:n=new three.PointLight(t,o,s,1);break;case 1:n=new three.DirectionalLight(t,o);break;case 2:let e=Math.PI/3;r.InnerAngle!==void 0&&(e=three.MathUtils.degToRad(r.InnerAngle.value));let c=0;r.OuterAngle!==void 0&&(c=three.MathUtils.degToRad(r.OuterAngle.value),c=Math.max(c,1)),n=new three.SpotLight(t,o,s,e,c,1);break;default:console.warn(`THREE.FBXLoader: Unknown light type `+r.LightType.value+`, defaulting to a PointLight.`),n=new three.PointLight(t,o);break}r.CastShadows!==void 0&&r.CastShadows.value===1&&(n.castShadow=!0)}return n}createMesh(e,t,n){let r,o=null,s=[];if(e.children.forEach(function(e){t.has(e.ID)&&(o=t.get(e.ID)),n.has(e.ID)&&s.push(n.get(e.ID))}),s.length===0){let e=new PBMMeshMaterial(this.light?`phong`:`basic`);e.color=new three.Color(13421772),s.push(e)}return`color`in o.attributes&&s.forEach(function(e){e.vertexColors=!0}),(!o.groups||o.groups.length===0)&&o.addGroup(0,o.index?o.index.count:o.attributes.position.count,0),o.FBX_Deformer?(s.forEach(function(e){e.skinning=!0}),r=new PBMSkinnedMesh(o,s),r.normalizeSkinWeights()):r=new PBMMesh(o,s),r}createCurve(e,t){let n=e.children.reduce(function(e,n){return t.has(n.ID)&&(e=t.get(n.ID)),e},null),r=new three.LineBasicMaterial({name:``,color:3342591,linewidth:1});return new three.Line(n,r)}getTransformData(e,t){let n={};t.InheritType&&(n.inheritType=parseInt(t.InheritType.value)),t.RotationOrder?n.eulerOrder=getEulerOrder(t.RotationOrder.value):n.eulerOrder=getEulerOrder(0),t.Lcl_Translation&&(n.translation=t.Lcl_Translation.value),t.PreRotation&&(n.preRotation=t.PreRotation.value),t.Lcl_Rotation&&(n.rotation=t.Lcl_Rotation.value),t.PostRotation&&(n.postRotation=t.PostRotation.value),t.Lcl_Scaling&&(n.scale=t.Lcl_Scaling.value),t.ScalingOffset&&(n.scalingOffset=t.ScalingOffset.value),t.ScalingPivot&&(n.scalingPivot=t.ScalingPivot.value),t.RotationOffset&&(n.rotationOffset=t.RotationOffset.value),t.RotationPivot&&(n.rotationPivot=t.RotationPivot.value),e.userData.transformData=n}setLookAtProperties(e,t,n,r,o){`LookAtProperty`in n&&r.get(t.ID).children.forEach(function(n){if(n.relationship===`LookAtProperty`){let r=e.Objects.Model[n.ID];if(r.Lcl_Translation){let e=r.Lcl_Translation.value;`target`in t&&t.target instanceof three.Object3D?(t.target.position.fromArray(e),o.add(t.target)):t.lookAt(new three.Vector3().fromArray(e))}}})}bindSkeleton(e,t,n,r,o){let s=this.parsePoseNodes(e);for(let e in t){let c=t[e];o.get(parseInt(c.ID)).parents.forEach(function(e){if(n.has(e.ID)){let t=e.ID;o.get(t).parents.forEach(function(e){if(r.has(e.ID)){let t=r.get(e.ID);t instanceof three.SkinnedMesh&&t.bind(new three.Skeleton(c.bones),s[e.ID])}})}})}}parsePoseNodes(e){let t={};if(e.Objects.Pose){let n=e.Objects.Pose;for(let e in n)if(n[e].attrType===`BindPose`&&n[e].NbPoseNodes>0){let r=n[e].PoseNode;Array.isArray(r)?r.forEach(function(e){t[e.Node]=new three.Matrix4().fromArray(e.Matrix.a)}):t[r.Node]=new three.Matrix4().fromArray(r.Matrix.a)}}return t}},GeometryParser=class{constructor(){this.negativeMaterialIndices=!1}parse(e,t,n){let r=new Map;if(`Geometry`in e.Objects){let o=e.Objects.Geometry;for(let s in o){let c=n.get(parseInt(s)),l=this.parseGeometry(e,c,o[s],t);r.set(parseInt(s),l)}}return this.negativeMaterialIndices===!0&&console.warn(`THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected.`),r}parseGeometry(e,t,n,r){switch(n.attrType){case`Mesh`:return this.parseMeshGeometry(e,t,n,r);case`NurbsCurve`:return this.parseNurbsGeometry(n)}}parseMeshGeometry(e,t,n,r){let o=r.skeletons,s=[],c=t.parents.map(function(t){return e.Objects.Model[t.ID]});if(c.length===0)return;let l=t.children.reduce(function(e,t){return o[t.ID]!==void 0&&(e=o[t.ID]),e},null);t.children.forEach(function(e){r.morphTargets[e.ID]!==void 0&&s.push(r.morphTargets[e.ID])});let u=c[0],d={};u.RotationOrder&&(d.eulerOrder=getEulerOrder(u.RotationOrder.value)),u.InheritType&&(d.inheritType=parseInt(u.InheritType.value)),u.GeometricTranslation&&(d.translation=u.GeometricTranslation.value),u.GeometricRotation&&(d.rotation=u.GeometricRotation.value),u.GeometricScaling&&(d.scale=u.GeometricScaling.value);let f=generateTransform(d);return this.genGeometry(e,n,l,s,f)}genGeometry(e,t,n,r,o){let s=new three.BufferGeometry;t.attrName&&(s.name=t.attrName);let c=this.parseGeoNode(t,n),l=this.genBuffers(c),u=new three.Float32BufferAttribute(l.vertex,3);if(u.applyMatrix4(o),s.setAttribute(`position`,u),l.colors.length>0&&s.setAttribute(`color`,new three.Float32BufferAttribute(l.colors,3)),n&&(s.setAttribute(`skinIndex`,new three.Uint16BufferAttribute(l.weightsIndices,4)),s.setAttribute(`skinWeight`,new three.Float32BufferAttribute(l.vertexWeights,4)),s.FBX_Deformer=n),l.normal.length>0){let e=new three.Matrix3().getNormalMatrix(o),t=new three.Float32BufferAttribute(l.normal,3);t.applyNormalMatrix(e),s.setAttribute(`normal`,t)}if(l.uvs.forEach(function(e,t){let n=t===0?`uv`:`uv${t+1}`;s.setAttribute(n,new three.Float32BufferAttribute(l.uvs[t],2))}),c.material&&c.material.mappingType!==`AllSame`){let e=l.materialIndex[0],t=0;if(l.materialIndex.forEach(function(n,r){n!==e&&(s.addGroup(t,r-t,e),e=n,t=r)}),s.groups.length>0){let t=s.groups[s.groups.length-1],n=t.start+t.count;n!==l.materialIndex.length&&s.addGroup(n,l.materialIndex.length-n,e)}s.groups.length===0&&s.addGroup(0,l.materialIndex.length,l.materialIndex[0])}return this.addMorphTargets(e,s,t,r,o),s}parseGeoNode(e,t){let n={};if(n.vertexPositions=e.Vertices===void 0?[]:e.Vertices.a,n.vertexIndices=e.PolygonVertexIndex===void 0?[]:e.PolygonVertexIndex.a,e.LayerElementColor&&(n.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(n.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(n.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){n.uv=[];let t=0;for(;e.LayerElementUV[t];)e.LayerElementUV[t].UV&&n.uv.push(this.parseUVs(e.LayerElementUV[t])),t++}return n.weightTable={},t!==null&&(n.skeleton=t,t.rawBones.forEach(function(e,t){e.indices.forEach(function(r,o){n.weightTable[r]===void 0&&(n.weightTable[r]=[]),n.weightTable[r].push({id:t,weight:e.weights[o]})})})),n}genBuffers(e){let t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]},n=0,r=0,o=!1,s=[],c=[],l=[],u=[],d=[],f=[],p=this;return e.vertexIndices.forEach(function(m,h){let g=0,_=!1;m<0&&(m^=-1,_=!0);let v=[],y=[];if(s.push(m*3,m*3+1,m*3+2),e.color){let t=getData(h,n,m,e.color);l.push(t[0],t[1],t[2])}if(e.skeleton){if(e.weightTable[m]!==void 0&&e.weightTable[m].forEach(function(e){y.push(e.weight),v.push(e.id)}),y.length>4){o||(console.warn(`THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.`),o=!0);let e=[0,0,0,0],t=[0,0,0,0];y.forEach(function(n,r){let o=n,s=v[r];t.forEach(function(t,n,r){if(o>t){r[n]=o,o=t;let c=e[n];e[n]=s,s=c}})}),v=e,y=t}for(;y.length<4;)y.push(0),v.push(0);for(let e=0;e<4;++e)d.push(y[e]),f.push(v[e])}if(e.normal){let t=getData(h,n,m,e.normal);c.push(t[0],t[1],t[2])}e.material&&e.material.mappingType!==`AllSame`&&(g=getData(h,n,m,e.material)[0],g<0&&(p.negativeMaterialIndices=!0,g=0)),e.uv&&e.uv.forEach(function(e,t){let r=getData(h,n,m,e);u[t]===void 0&&(u[t]=[]),u[t].push(r[0]),u[t].push(r[1])}),r++,_&&(p.genFace(t,e,s,g,c,l,u,d,f,r),n++,r=0,s=[],c=[],l=[],u=[],d=[],f=[])}),t}getNormalNewell(e){let t=new three.Vector3(0,0,0);for(let n=0;n<e.length;n++){let r=e[n],o=e[(n+1)%e.length];t.x+=(r.y-o.y)*(r.z+o.z),t.y+=(r.z-o.z)*(r.x+o.x),t.z+=(r.x-o.x)*(r.y+o.y)}return t.normalize(),t}getNormalTangentAndBitangent(e){let t=this.getNormalNewell(e),n=(Math.abs(t.z)>.5?new three.Vector3(0,1,0):new three.Vector3(0,0,1)).cross(t).normalize();return{normal:t,tangent:n,bitangent:t.clone().cross(n).normalize()}}flattenVertex(e,t,n){return new three.Vector2(e.dot(t),e.dot(n))}genFace(e,t,n,r,o,s,c,l,u,d){let f;if(d>3){let e=[],r=t.baseVertexPositions||t.vertexPositions;for(let t=0;t<n.length;t+=3)e.push(new three.Vector3(r[n[t]],r[n[t+1]],r[n[t+2]]));let{tangent:o,bitangent:s}=this.getNormalTangentAndBitangent(e),c=[];for(let t of e)c.push(this.flattenVertex(t,o,s));f=three.ShapeUtils.triangulateShape(c,[])}else f=[[0,1,2]];for(let[d,p,m]of f)e.vertex.push(t.vertexPositions[n[d*3]]),e.vertex.push(t.vertexPositions[n[d*3+1]]),e.vertex.push(t.vertexPositions[n[d*3+2]]),e.vertex.push(t.vertexPositions[n[p*3]]),e.vertex.push(t.vertexPositions[n[p*3+1]]),e.vertex.push(t.vertexPositions[n[p*3+2]]),e.vertex.push(t.vertexPositions[n[m*3]]),e.vertex.push(t.vertexPositions[n[m*3+1]]),e.vertex.push(t.vertexPositions[n[m*3+2]]),t.skeleton&&(e.vertexWeights.push(l[d*4]),e.vertexWeights.push(l[d*4+1]),e.vertexWeights.push(l[d*4+2]),e.vertexWeights.push(l[d*4+3]),e.vertexWeights.push(l[p*4]),e.vertexWeights.push(l[p*4+1]),e.vertexWeights.push(l[p*4+2]),e.vertexWeights.push(l[p*4+3]),e.vertexWeights.push(l[m*4]),e.vertexWeights.push(l[m*4+1]),e.vertexWeights.push(l[m*4+2]),e.vertexWeights.push(l[m*4+3]),e.weightsIndices.push(u[d*4]),e.weightsIndices.push(u[d*4+1]),e.weightsIndices.push(u[d*4+2]),e.weightsIndices.push(u[d*4+3]),e.weightsIndices.push(u[p*4]),e.weightsIndices.push(u[p*4+1]),e.weightsIndices.push(u[p*4+2]),e.weightsIndices.push(u[p*4+3]),e.weightsIndices.push(u[m*4]),e.weightsIndices.push(u[m*4+1]),e.weightsIndices.push(u[m*4+2]),e.weightsIndices.push(u[m*4+3])),t.color&&(e.colors.push(s[d*3]),e.colors.push(s[d*3+1]),e.colors.push(s[d*3+2]),e.colors.push(s[p*3]),e.colors.push(s[p*3+1]),e.colors.push(s[p*3+2]),e.colors.push(s[m*3]),e.colors.push(s[m*3+1]),e.colors.push(s[m*3+2])),t.material&&t.material.mappingType!==`AllSame`&&(e.materialIndex.push(r),e.materialIndex.push(r),e.materialIndex.push(r)),t.normal&&(e.normal.push(o[d*3]),e.normal.push(o[d*3+1]),e.normal.push(o[d*3+2]),e.normal.push(o[p*3]),e.normal.push(o[p*3+1]),e.normal.push(o[p*3+2]),e.normal.push(o[m*3]),e.normal.push(o[m*3+1]),e.normal.push(o[m*3+2])),t.uv&&t.uv.forEach(function(t,n){e.uvs[n]===void 0&&(e.uvs[n]=[]),e.uvs[n].push(c[n][d*2]),e.uvs[n].push(c[n][d*2+1]),e.uvs[n].push(c[n][p*2]),e.uvs[n].push(c[n][p*2+1]),e.uvs[n].push(c[n][m*2]),e.uvs[n].push(c[n][m*2+1])})}addMorphTargets(e,t,n,r,o){if(r.length===0)return;t.morphTargetsRelative=!0,t.morphAttributes.position=[];let s=this;r.forEach(function(r){r.rawTargets.forEach(function(r){let c=e.Objects.Geometry[r.geoID];c!==void 0&&s.genMorphGeometry(t,n,c,o,r.name)})})}genMorphGeometry(e,t,n,r,o){let s=t.Vertices===void 0?[]:t.Vertices.a,c=t.PolygonVertexIndex===void 0?[]:t.PolygonVertexIndex.a,l=n.Vertices===void 0?[]:n.Vertices.a,u=n.Indexes?n.Indexes.a:[],d=e.attributes.position.count*3,f=new Float32Array(d);for(let e=0;e<u.length;e++){let t=u[e]*3;f[t]=l[e*3],f[t+1]=l[e*3+1],f[t+2]=l[e*3+2]}let p={vertexIndices:c,vertexPositions:f,baseVertexPositions:s},m=this.genBuffers(p),h=new three.Float32BufferAttribute(m.vertex,3);h.name=o||n.attrName,h.applyMatrix4(r),e.morphAttributes.position.push(h)}parseNormals(e){let t=e.MappingInformationType,n=e.ReferenceInformationType,r=e.Normals.a,o=[];return n===`IndexToDirect`&&(e.NormalIndex?o=e.NormalIndex.a:e.NormalsIndex&&(o=e.NormalsIndex.a)),{dataSize:3,buffer:r,indices:o,mappingType:t,referenceType:n}}parseUVs(e){let t=e.MappingInformationType,n=e.ReferenceInformationType,r=e.UV.a,o=[];return n===`IndexToDirect`&&(o=e.UVIndex.a),{dataSize:2,buffer:r,indices:o,mappingType:t,referenceType:n}}parseVertexColors(e){let t=e.MappingInformationType,n=e.ReferenceInformationType,r=e.Colors.a,o=[];n===`IndexToDirect`&&(o=e.ColorIndex.a);for(let e=0,t=new three.Color;e<r.length;e+=4)t.fromArray(r,e),t.toArray(r,e);return{dataSize:4,buffer:r,indices:o,mappingType:t,referenceType:n}}parseMaterialIndices(e){let t=e.MappingInformationType,n=e.ReferenceInformationType;if(t===`NoMappingInformation`)return{dataSize:1,buffer:[0],indices:[0],mappingType:`AllSame`,referenceType:n};let r=e.Materials.a,o=[];for(let e=0;e<r.length;++e)o.push(e);return{dataSize:1,buffer:r,indices:o,mappingType:t,referenceType:n}}parseNurbsGeometry(e){let t=parseInt(e.Order);if(isNaN(t))return console.error(`THREE.FBXLoader: Invalid Order %s given for geometry ID: %s`,e.Order,e.id),new three.BufferGeometry;let n=t-1,r=e.KnotVector.a,o=[],s=e.Points.a;for(let e=0,t=s.length;e<t;e+=4)o.push(new three.Vector4().fromArray(s,e));let c,l;if(e.Form===`Closed`)o.push(o[0]);else if(e.Form===`Periodic`){c=n,l=r.length-1-c;for(let e=0;e<n;++e)o.push(o[e])}let u=new NURBSCurve(n,r,o,c,l).getPoints(o.length*12);return new three.BufferGeometry().setFromPoints(u)}},AnimationParser=class{parse(e,t,n){let r=[],o=this.parseClips(e,t,n);if(o!==void 0)for(let e in o){let t=o[e],s=this.addClip(t,n);r.push(s)}return r}parseClips(e,t,n){if(e.Objects.AnimationCurve===void 0)return;let r=this.parseAnimationCurveNodes(e);this.parseAnimationCurves(e,r,t);let o=this.parseAnimationLayers(e,r,t,n);return this.parseAnimStacks(e,o,t)}parseAnimationCurveNodes(e){let t=e.Objects.AnimationCurveNode,n=new Map;for(let e in t){let r=t[e];if(r.attrName.match(/S|R|T|DeformPercent/)!==null){let e={id:r.id,attr:r.attrName,curves:{}};n.set(e.id,e)}}return n}parseAnimationCurves(e,t,n){let r=e.Objects.AnimationCurve;for(let e in r){let o={id:r[e].id,times:r[e].KeyTime.a.map(convertFBXTimeToSeconds),values:r[e].KeyValueFloat.a},s=n.get(o.id);if(s!==void 0){let e=s.parents[0].ID,n=s.parents[0].relationship,r=t.get(e);r&&(n.match(/X/)?r.curves.x=o:n.match(/Y/)?r.curves.y=o:n.match(/Z/)?r.curves.z=o:n.match(/DeformPercent/)&&t.has(e)&&(r.curves.morph=o))}}}parseAnimationLayers(e,t,n,r){let o=e.Objects.AnimationLayer,s=new Map;for(let c in o){let o=[],l=n.get(parseInt(c));l!==void 0&&(l.children.forEach((s,c)=>{if(t.has(s.ID)){let l=t.get(s.ID);if(l.curves.x!==void 0||l.curves.y!==void 0||l.curves.z!==void 0){if(o[c]===void 0){let t=n.get(s.ID).parents.filter(function(e){return e.relationship!==void 0})[0].ID;if(t!==void 0){let n=e.Objects.Model[t.toString()];if(n===void 0){console.warn(`THREE.FBXLoader: Encountered a unused curve.`,s);return}let l={modelName:n.attrName?three.PropertyBinding.sanitizeNodeName(n.attrName):``,ID:n.id,initialPosition:[0,0,0],initialRotation:[0,0,0],initialScale:[1,1,1],transform:new three.Matrix4,eulerOrder:``,preRotation:[0,0,0],postRotation:[0,0,0]};r.traverse(function(e){e.ID===n.id&&(l.transform=e.matrix,e.userData.transformData&&(l.eulerOrder=e.userData.transformData.eulerOrder))}),l.transform||(l.transform=new three.Matrix4),n.PreRotation&&(l.preRotation=n.PreRotation.value),n.PostRotation&&(l.postRotation=n.PostRotation.value),o[c]=l}}o[c]&&(o[c][l.attr]=l)}else if(l.curves.morph!==void 0){if(o[c]===void 0){let t=n.get(s.ID).parents.filter(function(e){return e.relationship!==void 0})[0].ID,r=n.get(t).parents[0].ID,l=n.get(r).parents[0].ID,u=n.get(l).parents[0].ID,d=e.Objects.Model[u];o[c]={modelName:d.attrName?three.PropertyBinding.sanitizeNodeName(d.attrName):``,morphName:e.Objects.Deformer[t].attrName}}o[c][l.attr]=l}}}),s.set(parseInt(c),o))}return s}parseAnimStacks(e,t,n){let r=e.Objects.AnimationStack,o={};for(let e in r){let s=n.get(parseInt(e)).children;s.length>1&&console.warn(`THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.`);let c=t.get(s[0].ID);o[e]={name:r[e].attrName,layer:c}}return o}addClip(e,t){let n=[],r=this;return e.layer.forEach(function(e){n=n.concat(r.generateTracks(e,t))}),new three.AnimationClip(e.name,-1,n)}generateTracks(e,t){let n=[],r=new three.Vector3,o=new three.Vector3;e.transform&&e.transform.decompose(r,new three.Quaternion,o);let s=r.toArray(),c=o.toArray();if(e.T!==void 0&&Object.keys(e.T.curves).length>0){let t=this.generateVectorTrack(e.modelName,e.T.curves,s,`position`);t!==void 0&&n.push(t)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){let t=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);t!==void 0&&n.push(t)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){let t=this.generateVectorTrack(e.modelName,e.S.curves,c,`scale`);t!==void 0&&n.push(t)}if(e.DeformPercent!==void 0){let r=this.generateMorphTrack(e,t);r!==void 0&&n.push(r)}return n}generateVectorTrack(e,t,n,r){let o=this.getTimesForAllAxes(t),s=this.getKeyframeTrackValues(o,t,n);return new three.VectorKeyframeTrack(e+`.`+r,o,s)}generateRotationTrack(e,t,n,r,o){let s,c;if(t.x!==void 0&&t.y!==void 0&&t.z!==void 0){let e=this.interpolateRotations(t.x,t.y,t.z,o);s=e[0],c=e[1]}let l=getEulerOrder(0),u=new three.Quaternion,d=new three.Quaternion;n!==void 0&&(n=n.map(three.MathUtils.degToRad),n.push(l),u.setFromEuler(new three.Euler().fromArray(n))),r!==void 0&&(r=r.map(three.MathUtils.degToRad),r.push(l),d.setFromEuler(new three.Euler().fromArray(r)),d.inverse());let f=new three.Quaternion,p=new three.Euler,m=[];if(!c||!s)return new three.QuaternionKeyframeTrack(e+`.quaternion`,[0],[0]);for(let e=0;e<c.length;e+=3)p.set(c[e],c[e+1],c[e+2],o),f.setFromEuler(p),f.premultiply(u),f.multiply(d),e>2&&new three.Quaternion().fromArray(m,(e-3)/3*4).dot(f)<0&&f.set(-f.x,-f.y,-f.z,-f.w),f.toArray(m,e/3*4);return new three.QuaternionKeyframeTrack(e+`.quaternion`,s,m)}generateMorphTrack(e,t){let n=e.DeformPercent.curves.morph,r=n.values.map(function(e){return e/100}),o=t.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new three.NumberKeyframeTrack(e.modelName+`.morphTargetInfluences[`+o+`]`,n.times,r)}getTimesForAllAxes(e){let t=[];if(e.x!==void 0&&(t=t.concat(e.x.times)),e.y!==void 0&&(t=t.concat(e.y.times)),e.z!==void 0&&(t=t.concat(e.z.times)),t=t.sort(function(e,t){return e-t}),t.length>1){let e=1,n=t[0];for(let r=1;r<t.length;r++){let o=t[r];o!==n&&(t[e]=o,n=o,e++)}t=t.slice(0,e)}return t}getKeyframeTrackValues(e,t,n){let r=n,o=[],s=-1,c=-1,l=-1;return e.forEach(function(e){if(t.x&&(s=t.x.times.indexOf(e)),t.y&&(c=t.y.times.indexOf(e)),t.z&&(l=t.z.times.indexOf(e)),s!==-1){let e=t.x.values[s];o.push(e),r[0]=e}else o.push(r[0]);if(c!==-1){let e=t.y.values[c];o.push(e),r[1]=e}else o.push(r[1]);if(l!==-1){let e=t.z.values[l];o.push(e),r[2]=e}else o.push(r[2])}),o}interpolateRotations(e,t,n,r){let o=[],s=[];o.push(e.times[0]),s.push(three.MathUtils.degToRad(e.values[0])),s.push(three.MathUtils.degToRad(t.values[0])),s.push(three.MathUtils.degToRad(n.values[0]));for(let c=1;c<e.values.length;c++){let l=[e.values[c-1],t.values[c-1],n.values[c-1]];if(isNaN(l[0])||isNaN(l[1])||isNaN(l[2]))continue;let u=l.map(three.MathUtils.degToRad),d=[e.values[c],t.values[c],n.values[c]];if(isNaN(d[0])||isNaN(d[1])||isNaN(d[2]))continue;d.map(three.MathUtils.degToRad);let f=[d[0]-l[0],d[1]-l[1],d[2]-l[2]],p=[Math.abs(f[0]),Math.abs(f[1]),Math.abs(f[2])];if(p[0]>=180||p[1]>=180||p[2]>=180){let t=Math.max(...p)/180,n=new three.Euler(u[0],u[1],u[2],r),l=new three.Euler(u[0],u[1],u[2],r),d=new three.Quaternion().setFromEuler(n),f=new three.Quaternion().setFromEuler(l);d.dot(f)&&f.set(-f.x,-f.y,-f.z,-f.w);let m=e.times[c-1],h=e.times[c]-m,g=new three.Quaternion,_=new three.Euler;for(let e=0;e<1;e+=1/t)g.copy(d.clone().slerp(f.clone(),e)),o.push(m+e*h),_.setFromQuaternion(g,r),s.push(_.x),s.push(_.y),s.push(_.z)}else o.push(e.times[c]),s.push(three.MathUtils.degToRad(e.values[c])),s.push(three.MathUtils.degToRad(t.values[c])),s.push(three.MathUtils.degToRad(n.values[c]))}return[o,s]}},TextParser=class{constructor(){this.allNodes=new FBXTree,this.nodeStack=[],this.currentIndent=0,this.currentPropName=``}getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),--this.currentIndent}setCurrentProp(e,t){this.currentProp=e,this.currentPropName=t}parse(e){this.currentIndent=0,this.allNodes=new FBXTree,this.nodeStack=[],this.currentProp=[],this.currentPropName=``;let t=this,n=e.split(/[\r\n]+/);return n.forEach(function(e,r){let o=e.match(/^[\s\t]*;/),s=e.match(/^[\s\t]*$/);if(o||s)return;let c=e.match(`^\\t{`+t.currentIndent+`}(\\w+):(.*){`),l=e.match(`^\\t{`+t.currentIndent+`}(\\w+):[\\s\\t\\r\\n](.*)`),u=e.match(`^\\t{`+(t.currentIndent-1)+`}}`);c?t.parseNodeBegin(e,c):l?t.parseNodeProperty(e,l,n[++r]):u?t.popStack():e.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(e)}),this.allNodes}parseNodeBegin(e,t){let n=t[1].trim().replace(/^"/,``).replace(/"$/,``),r=t[2].split(`,`).map(function(e){return e.trim().replace(/^"/,``).replace(/"$/,``)}),o={name:n},s=this.parseNodeAttr(r),c=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(n,o):n in c?(n===`PoseNode`?c.PoseNode.push(o):c[n].id!==void 0&&(c[n]={},c[n][c[n].id]=c[n]),s.id!==``&&(c[n][s.id]=o)):typeof s.id==`number`?(c[n]={},c[n][s.id]=o):n!==`Properties70`&&(n===`PoseNode`?c[n]=[o]:c[n]=o),typeof s.id==`number`&&(o.id=s.id),s.name!==``&&(o.attrName=s.name),s.type!==``&&(o.attrType=s.type),this.pushStack(o)}parseNodeAttr(e){let t=e[0];e[0]!==``&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));let n=``,r=``;return e.length>1&&(n=e[1].replace(/^(\w+)::/,``),r=e[2]),{id:t,name:n,type:r}}parseNodeProperty(e,t,n){let r=t[1].replace(/^"/,``).replace(/"$/,``).trim(),o=t[2].replace(/^"/,``).replace(/"$/,``).trim();r===`Content`&&o===`,`&&(o=n.replace(/"/g,``).replace(/,$/,``).trim());let s=this.getCurrentNode();if(s.name===`Properties70`){this.parseNodeSpecialProperty(e,r,o);return}if(r===`C`){let e=o.split(`,`).slice(1),t=parseInt(e[0]),n=parseInt(e[1]),c=o.split(`,`).slice(3);c=c.map(function(e){return e.trim().replace(/^"/,``)}),r=`connections`,o=[t,n],append(o,c),s[r]===void 0&&(s[r]=[])}r===`Node`&&(s.id=o),r in s&&Array.isArray(s[r])?s[r].push(o):r===`a`?s.a=o:s[r]=o,this.setCurrentProp(s,r),r===`a`&&o.slice(-1)!==`,`&&(s.a=parseNumberArray(o))}parseNodePropertyContinued(e){let t=this.getCurrentNode();t.a+=e,e.slice(-1)!==`,`&&(t.a=parseNumberArray(t.a))}parseNodeSpecialProperty(e,t,n){let r=n.split(`",`).map(function(e){return e.trim().replace(/^\"/,``).replace(/\s/,`_`)}),o=r[0],s=r[1],c=r[2],l=r[3],u=r[4];switch(s){case`int`:case`enum`:case`bool`:case`ULongLong`:case`double`:case`Number`:case`FieldOfView`:u=parseFloat(u);break;case`Color`:case`ColorRGB`:case`Vector3D`:case`Lcl_Translation`:case`Lcl_Rotation`:case`Lcl_Scaling`:u=parseNumberArray(u);break}this.getPrevNode()[o]={type:s,type2:c,flag:l,value:u},this.setCurrentProp(this.getPrevNode(),o)}},BinaryParser=class{parse(e){let t=new BinaryReader(e);t.skip(23);let n=t.getUint32();if(n<6400)throw Error(`THREE.FBXLoader: FBX version not supported, FileVersion: `+n);let r=new FBXTree;for(;!this.endOfContent(t);){let e=this.parseNode(t,n);e!==null&&r.add(e.name,e)}return r}endOfContent(e){return e.size()%16==0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,t){let n={},r=t>=7500?e.getUint64():e.getUint32(),o=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();let s=e.getUint8(),c=e.getString(s);if(r===0)return null;let l=[];for(let t=0;t<o;t++)l.push(this.parseProperty(e));let u=l.length>0?l[0]:``,d=l.length>1?l[1]:``,f=l.length>2?l[2]:``;for(n.singleProperty=o===1&&e.getOffset()===r;r>e.getOffset();){let r=this.parseNode(e,t);r!==null&&this.parseSubNode(c,n,r)}return n.propertyList=l,typeof u==`number`&&(n.id=u),d!==``&&(n.attrName=d),f!==``&&(n.attrType=f),c!==``&&(n.name=c),n}parseSubNode(e,t,n){if(n.singleProperty===!0){let e=n.propertyList[0];Array.isArray(e)?(t[n.name]=n,n.a=e):t[n.name]=e}else if(e===`Connections`&&n.name===`C`){let e=[];n.propertyList.forEach(function(t,n){n!==0&&e.push(t)}),t.connections===void 0&&(t.connections=[]),t.connections.push(e)}else if(n.name===`Properties70`)Object.keys(n).forEach(function(e){t[e]=n[e]});else if(e===`Properties70`&&n.name===`P`){let e=n.propertyList[0],r=n.propertyList[1],o=n.propertyList[2],s=n.propertyList[3],c;e.indexOf(`Lcl `)===0&&(e=e.replace(`Lcl `,`Lcl_`)),r.indexOf(`Lcl `)===0&&(r=r.replace(`Lcl `,`Lcl_`)),c=r===`Color`||r===`ColorRGB`||r===`Vector`||r===`Vector3D`||r.indexOf(`Lcl_`)===0?[n.propertyList[4],n.propertyList[5],n.propertyList[6]]:n.propertyList[4],t[e]={type:r,type2:o,flag:s,value:c}}else t[n.name]===void 0?typeof n.id==`number`?(t[n.name]={},t[n.name][n.id]=n):t[n.name]=n:n.name===`PoseNode`?(Array.isArray(t[n.name])||(t[n.name]=[t[n.name]]),t[n.name].push(n)):t[n.name][n.id]===void 0&&(t[n.name][n.id]=n)}parseProperty(e){let t=e.getString(1),n;switch(t){case`C`:return e.getBoolean();case`D`:return e.getFloat64();case`F`:return e.getFloat32();case`I`:return e.getInt32();case`L`:return e.getInt64();case`R`:return n=e.getUint32(),e.getArrayBuffer(n);case`S`:return n=e.getUint32(),e.getString(n);case`Y`:return e.getInt16();case`b`:case`c`:case`d`:case`f`:case`i`:case`l`:let r=e.getUint32(),o=e.getUint32(),s=e.getUint32();if(o===0)switch(t){case`b`:case`c`:return e.getBooleanArray(r);case`d`:return e.getFloat64Array(r);case`f`:return e.getFloat32Array(r);case`i`:return e.getInt32Array(r);case`l`:return e.getInt64Array(r)}let c=new BinaryReader(unzlibSync(new Uint8Array(e.getArrayBuffer(s))).buffer);switch(t){case`b`:case`c`:return c.getBooleanArray(r);case`d`:return c.getFloat64Array(r);case`f`:return c.getFloat32Array(r);case`i`:return c.getInt32Array(r);case`l`:return c.getInt64Array(r)}break;default:throw Error(`THREE.FBXLoader: Unknown property type `+t)}}},BinaryReader=class{constructor(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=t===void 0?!0:t,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)==1}getBooleanArray(e){let t=[];for(let n=0;n<e;n++)t.push(this.getBoolean());return t}getUint8(){let e=this.dv.getUint8(this.offset);return this.offset+=1,e}getInt16(){let e=this.dv.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}getInt32(){let e=this.dv.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}getInt32Array(e){let t=[];for(let n=0;n<e;n++)t.push(this.getInt32());return t}getUint32(){let e=this.dv.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}getInt64(){let e,t;return this.littleEndian?(e=this.getUint32(),t=this.getUint32()):(t=this.getUint32(),e=this.getUint32()),t&2147483648?(t=~t&4294967295,e=~e&4294967295,e===4294967295&&(t=t+1&4294967295),e=e+1&4294967295,-(t*4294967296+e)):t*4294967296+e}getInt64Array(e){let t=[];for(let n=0;n<e;n++)t.push(this.getInt64());return t}getUint64(){let e,t;return this.littleEndian?(e=this.getUint32(),t=this.getUint32()):(t=this.getUint32(),e=this.getUint32()),t*4294967296+e}getFloat32(){let e=this.dv.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}getFloat32Array(e){let t=[];for(let n=0;n<e;n++)t.push(this.getFloat32());return t}getFloat64(){let e=this.dv.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}getFloat64Array(e){let t=[];for(let n=0;n<e;n++)t.push(this.getFloat64());return t}getArrayBuffer(e){let t=this.dv.buffer.slice(this.offset,this.offset+e);return this.offset+=e,t}getString(e){let t=this.offset,n=new Uint8Array(this.dv.buffer,t,e);this.skip(e);let r=n.indexOf(0);return r>=0&&(n=new Uint8Array(this.dv.buffer,t,r)),this._textDecoder.decode(n)}},FBXTree=class{constructor(){this.Connections={connections:[]},this.Objects={Model:{},NodeAttribute:{},Geometry:{}},this.GlobalSettings={}}add(e,t){this[e]=t}};function isFbxFormatBinary(e){return e.byteLength>=21&&convertArrayBufferToString(e,0,21)===`Kaydara FBX Binary \0`}function isFbxFormatASCII(e){let t=[`K`,`a`,`y`,`d`,`a`,`r`,`a`,`\\`,`F`,`B`,`X`,`\\`,`B`,`i`,`n`,`a`,`r`,`y`,`\\`,`\\`],n=0;function r(t){let r=e[t-1];return e=e.slice(n+t),n++,r}for(let e=0;e<t.length;++e)if(r(1)===t[e])return!1;return!0}function getFbxVersion(e){let t=e.match(/FBXVersion: (\d+)/);if(t)return parseInt(t[1]);throw Error(`THREE.FBXLoader: Cannot find the version number for the file given.`)}function convertFBXTimeToSeconds(e){return e/46186158e3}var dataArray=[];function getData(e,t,n,r){let o;switch(r.mappingType){case`ByPolygonVertex`:o=e;break;case`ByPolygon`:o=t;break;case`ByVertice`:o=n;break;case`AllSame`:o=r.indices[0];break;default:console.warn(`THREE.FBXLoader: unknown attribute mapping type `+r.mappingType),o=0}r.referenceType===`IndexToDirect`&&(o=r.indices[o]);let s=o*r.dataSize,c=s+r.dataSize;return slice(dataArray,r.buffer,s,c)}var tempEuler=new three.Euler,tempVec=new three.Vector3;function generateTransform(e){let t=new three.Matrix4,n=new three.Matrix4,r=new three.Matrix4,o=new three.Matrix4,s=new three.Matrix4,c=new three.Matrix4,l=new three.Matrix4,u=new three.Matrix4,d=new three.Matrix4,f=new three.Matrix4,p=new three.Matrix4,m=new three.Matrix4,h=e.inheritType?e.inheritType:0;e.translation&&t.setPosition(tempVec.fromArray(e.translation));let g=getEulerOrder(0);if(e.preRotation){let t=e.preRotation.map(three.MathUtils.degToRad);t.push(g),n.makeRotationFromEuler(tempEuler.fromArray(t))}if(e.rotation){let t=e.rotation.map(three.MathUtils.degToRad);t.push(e.eulerOrder||g),r.makeRotationFromEuler(tempEuler.fromArray(t))}if(e.postRotation){let t=e.postRotation.map(three.MathUtils.degToRad);t.push(g),o.makeRotationFromEuler(tempEuler.fromArray(t)),o.copy(new three.Matrix4().getInverse(o))}e.scale&&s.scale(tempVec.fromArray(e.scale)),e.scalingOffset&&l.setPosition(tempVec.fromArray(e.scalingOffset)),e.scalingPivot&&c.setPosition(tempVec.fromArray(e.scalingPivot)),e.rotationOffset&&u.setPosition(tempVec.fromArray(e.rotationOffset)),e.rotationPivot&&d.setPosition(tempVec.fromArray(e.rotationPivot)),e.parentMatrixWorld&&(p.copy(e.parentMatrix),f.copy(e.parentMatrixWorld));let _=n.clone().multiply(r).multiply(o),v=new three.Matrix4;v.extractRotation(f);let y=new three.Matrix4;y.copyPosition(f);let b=new three.Matrix4().getInverse(y).multiply(f),S=new three.Matrix4().getInverse(v).multiply(b),C=s,w=new three.Matrix4;if(h===0)w.copy(v).multiply(_).multiply(S).multiply(C);else if(h===1)w.copy(v).multiply(S).multiply(_).multiply(C);else{let e=new three.Matrix4().scale(new three.Vector3().setFromMatrixScale(p)),t=new three.Matrix4().getInverse(e),n=S.clone().multiply(t);w.copy(v).multiply(_).multiply(n).multiply(C)}let T=new three.Matrix4().getInverse(d),E=new three.Matrix4().getInverse(c),D=t.clone().multiply(u).multiply(d).multiply(n).multiply(r).multiply(o).multiply(T).multiply(l).multiply(c).multiply(s).multiply(E),O=new three.Matrix4().copyPosition(D),k=f.clone().multiply(O);return m.copyPosition(k),D=m.clone().multiply(w),D.premultiply(new three.Matrix4().getInverse(f)),D}function getEulerOrder(e){e=e||0;let t=[`ZYX`,`YZX`,`XZY`,`ZXY`,`YXZ`,`XYZ`];return e===6?(console.warn(`THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.`),t[0]):t[e]}function parseNumberArray(e){return e.split(`,`).map(function(e){return parseFloat(e)})}function convertArrayBufferToString(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=e.byteLength),new TextDecoder().decode(new Uint8Array(e,t,n))}function append(e,t){for(let n=0,r=e.length,o=t.length;n<o;n++,r++)e[r]=t[n]}function slice(e,t,n,r){for(let o=n,s=0;o<r;o++,s++)e[s]=t[o];return e}var NURBSCurve=class extends three.Curve{constructor(e,t,n,r,o){super();let s=t?t.length-1:0,c=n?n.length:0;this.degree=e,this.knots=t,this.controlPoints=[],this.startKnot=r||0,this.endKnot=o||s;for(let e=0;e<c;++e){let t=n[e];this.controlPoints[e]=new three.Vector4(t.x,t.y,t.z,t.w)}}getPoint(e,t=new three.Vector3){let n=t,r=this.knots[this.startKnot]+e*(this.knots[this.endKnot]-this.knots[this.startKnot]),o=calcBSplinePoint(this.degree,this.knots,this.controlPoints,r);return o.w!==1&&o.divideScalar(o.w),n.set(o.x,o.y,o.z)}getTangent(e,t=new three.Vector3){let n=t,r=this.knots[0]+e*(this.knots[this.knots.length-1]-this.knots[0]),o=calcNURBSDerivatives(this.degree,this.knots,this.controlPoints,r,1);return n.copy(o[1]).normalize(),n}toJSON(){let e=super.toJSON();return e.degree=this.degree,e.knots=[...this.knots],e.controlPoints=this.controlPoints.map(e=>e.toArray()),e.startKnot=this.startKnot,e.endKnot=this.endKnot,e}fromJSON(e){return super.fromJSON(e),this.degree=e.degree,this.knots=[...e.knots],this.controlPoints=e.controlPoints.map(e=>new three.Vector4(e[0],e[1],e[2],e[3])),this.startKnot=e.startKnot,this.endKnot=e.endKnot,this}};function findSpan(e,t,n){let r=n.length-e-1;if(t>=n[r])return r-1;if(t<=n[e])return e;let o=e,s=r,c=Math.floor((o+s)/2);for(;t<n[c]||t>=n[c+1];)t<n[c]?s=c:o=c,c=Math.floor((o+s)/2);return c}function calcBasisFunctions(e,t,n,r){let o=[],s=[],c=[];o[0]=1;for(let l=1;l<=n;++l){s[l]=t-r[e+1-l],c[l]=r[e+l]-t;let n=0;for(let e=0;e<l;++e){let t=c[e+1],r=s[l-e],u=o[e]/(t+r);o[e]=n+t*u,n=r*u}o[l]=n}return o}function calcBSplinePoint(e,t,n,r){let o=findSpan(e,r,t),s=calcBasisFunctions(o,r,e,t),c=new three.Vector4(0,0,0,0);for(let t=0;t<=e;++t){let r=n[o-e+t],l=s[t],u=r.w*l;c.x+=r.x*u,c.y+=r.y*u,c.z+=r.z*u,c.w+=r.w*l}return c}function calcBasisFunctionDerivatives(e,t,n,r,o){let s=[];for(let e=0;e<=n;++e)s[e]=0;let c=[];for(let e=0;e<=r;++e)c[e]=s.slice(0);let l=[];for(let e=0;e<=n;++e)l[e]=s.slice(0);l[0][0]=1;let u=s.slice(0),d=s.slice(0);for(let r=1;r<=n;++r){u[r]=t-o[e+1-r],d[r]=o[e+r]-t;let n=0;for(let e=0;e<r;++e){let t=d[e+1],o=u[r-e];l[r][e]=t+o;let s=l[e][r-1]/l[r][e];l[e][r]=n+t*s,n=o*s}l[r][r]=n}for(let e=0;e<=n;++e)c[0][e]=l[e][n];for(let e=0;e<=n;++e){let t=0,o=1,u=[];for(let e=0;e<=n;++e)u[e]=s.slice(0);u[0][0]=1;for(let s=1;s<=r;++s){let r=0,d=e-s,f=n-s;e>=s&&(u[o][0]=u[t][0]/l[f+1][d],r=u[o][0]*l[d][f]);let p=d>=-1?1:-d,m=e-1<=f?s-1:n-e;for(let e=p;e<=m;++e)u[o][e]=(u[t][e]-u[t][e-1])/l[f+1][d+e],r+=u[o][e]*l[d+e][f];e<=f&&(u[o][s]=-u[t][s-1]/l[f+1][e],r+=u[o][s]*l[e][f]),c[s][e]=r;let h=t;t=o,o=h}}let f=n;for(let e=1;e<=r;++e){for(let t=0;t<=n;++t)c[e][t]*=f;f*=n-e}return c}function calcBSplineDerivatives(e,t,n,r,o){let s=o<e?o:e,c=[],l=findSpan(e,r,t),u=calcBasisFunctionDerivatives(l,r,e,s,t),d=[];for(let e=0;e<n.length;++e){let t=n[e].clone(),r=t.w;t.x*=r,t.y*=r,t.z*=r,d[e]=t}for(let t=0;t<=s;++t){let n=d[l-e].clone().multiplyScalar(u[t][0]);for(let r=1;r<=e;++r)n.add(d[l-e+r].clone().multiplyScalar(u[t][r]));c[t]=n}for(let e=s+1;e<=o+1;++e)c[e]=new three.Vector4(0,0,0);return c}function calcKoverI(e,t){let n=1;for(let t=2;t<=e;++t)n*=t;let r=1;for(let e=2;e<=t;++e)r*=e;for(let n=2;n<=e-t;++n)r*=n;return n/r}function calcRationalCurveDerivatives(e){let t=e.length,n=[],r=[];for(let o=0;o<t;++o){let t=e[o];n[o]=new three.Vector3(t.x,t.y,t.z),r[o]=t.w}let o=[];for(let e=0;e<t;++e){let t=n[e].clone();for(let n=1;n<=e;++n)t.sub(o[e-n].clone().multiplyScalar(calcKoverI(e,n)*r[n]));o[e]=t.divideScalar(r[0])}return o}function calcNURBSDerivatives(e,t,n,r,o){return calcRationalCurveDerivatives(calcBSplineDerivatives(e,t,n,r,o))}var _vector=new three.Vector3;function getPointArray(e,t){switch(t){case`D`:return new Float64Array(e);case`F`:return new Float32Array(e);case`L`:return new Int32Array(e);case`I`:return new Int16Array(e);default:return new Uint8Array(e)}}function loadX3p(e,t={}){var n,r,o;let s=(n=t.upAxis)==null?`Z`:n,c=(r=t.fetcher)==null?internalFetcher:r,l=(o=t.onDownloadProgress)==null?noop:o,u={byteLength:0};return Promise.resolve().then(()=>c.ajax(e,{responseType:`arraybuffer`},void 0,void 0,l)).then(n=>{var r,o;return u.byteLength=n.body.byteLength,parse$1(new Uint8Array(n.body),{light:(r=t.light)==null?!0:r,color:t.color,resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(o=e.split(`?`)[1])==null?``:o,fetcher:c})}).then(t=>{let n=new three.Group;return n.name=e,n.add(t.object),s===`Y`&&n.applyMatrix4(ROTATE_X_MATRIX_INVERSE$1),{type:`x3p`,modelUpAxis:`Z`,upAxis:s,uri:e,byteLength:u.byteLength,memoryUsage:getMemoryUsage(n),scene:n,textures:[],animations:[],dispose:()=>t.dispose()}})}function parse$1(e,t){var n,r,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,S,C,w,T,E,D,O,k,A,j,M,N,P,F,I,L,R,z,B,V,H,ee,te,U,W,G,K,ne,re,ie,ae,oe,q,se,ce,le,ue;let J=unzipSync(e),de=``,fe=null;for(let e of Object.keys(J))/(^|\/)main\.xml$/i.test(e)&&(fe=J[e],de=e.slice(0,e.lastIndexOf(`/`)+1));if(!fe)throw Error(`X3p: main.xml not found.`);if(typeof DOMParser>`u`)throw Error(`X3p: DOMParser not found.`);let pe=(n=t.color)==null?new three.Color(10066329):n,me=new DOMParser,he=decodeText(fe),ge=me.parseFromString(he,`text/xml`),Y=ge.querySelector(`Record1 Axes`),_e={x:{type:(s=(o=(r=Y==null?void 0:Y.querySelector(`CX AxisType`))==null?void 0:r.textContent)==null?void 0:o.toUpperCase())==null?`I`:s,dataType:(u=(l=(c=Y==null?void 0:Y.querySelector(`CX DataType`))==null?void 0:c.textContent)==null?void 0:l.toUpperCase())==null?`D`:u,increment:Number((f=(d=Y==null?void 0:Y.querySelector(`CX Increment`))==null?void 0:d.textContent)==null?`1`:f),offset:Number((m=(p=Y==null?void 0:Y.querySelector(`CX Offset`))==null?void 0:p.textContent)==null?`0`:m)},y:{type:(_=(g=(h=Y==null?void 0:Y.querySelector(`CY AxisType`))==null?void 0:h.textContent)==null?void 0:g.toUpperCase())==null?`I`:_,dataType:(b=(y=(v=Y==null?void 0:Y.querySelector(`CY DataType`))==null?void 0:v.textContent)==null?void 0:y.toUpperCase())==null?`D`:b,increment:Number((C=(S=Y==null?void 0:Y.querySelector(`CY Increment`))==null?void 0:S.textContent)==null?`1`:C),offset:Number((T=(w=Y==null?void 0:Y.querySelector(`CY Offset`))==null?void 0:w.textContent)==null?`0`:T)},z:{type:(O=(D=(E=Y==null?void 0:Y.querySelector(`CZ AxisType`))==null?void 0:E.textContent)==null?void 0:D.toUpperCase())==null?`A`:O,dataType:(j=(A=(k=Y==null?void 0:Y.querySelector(`CZ DataType`))==null?void 0:k.textContent)==null?void 0:A.toUpperCase())==null?`D`:j,increment:Number((N=(M=Y==null?void 0:Y.querySelector(`CZ Increment`))==null?void 0:M.textContent)==null?`1`:N),offset:Number((F=(P=Y==null?void 0:Y.querySelector(`CZ Offset`))==null?void 0:P.textContent)==null?`0`:F)}},ve=null,X=ge.querySelector(`Record1 Axes Rotation`);X&&(ve=new three.Matrix3,ve.set(Number((L=(I=X.querySelector(`r11`))==null?void 0:I.textContent)==null?0:L),Number((z=(R=X.querySelector(`r12`))==null?void 0:R.textContent)==null?0:z),Number((V=(B=X.querySelector(`r13`))==null?void 0:B.textContent)==null?0:V),Number((ee=(H=X.querySelector(`r21`))==null?void 0:H.textContent)==null?0:ee),Number((U=(te=X.querySelector(`r22`))==null?void 0:te.textContent)==null?0:U),Number((G=(W=X.querySelector(`r23`))==null?void 0:W.textContent)==null?0:G),Number((ne=(K=X.querySelector(`r31`))==null?void 0:K.textContent)==null?0:ne),Number((ie=(re=X.querySelector(`r32`))==null?void 0:re.textContent)==null?0:ie),Number((oe=(ae=X.querySelector(`r33`))==null?void 0:ae.textContent)==null?0:oe)));let ye=(q=ge.querySelector(`Record3 DataLink PointDataLink`))==null?void 0:q.textContent;if(typeof ye!=`string`)throw Error(`X3p: PointDataLink not found.`);ye=pathJoin(de,ye);let be=J[ye];if(!be)throw Error(`X3p: ${be} not found.`);let xe=getPointArray(be.buffer,_e.z.dataType),Se=Number((ce=(se=ge.querySelector(`Record3 MatrixDimension SizeX`))==null?void 0:se.textContent)==null?`0`:ce),Ce=Number((ue=(le=ge.querySelector(`Record3 MatrixDimension SizeY`))==null?void 0:le.textContent)==null?`0`:ue),we=Math.floor(Se-1),Te=Math.floor(Ce-1),Ee=we+1,De=Te+1,Oe=new Float32Array(Ee*De*3),ke=new Float32Array(Ee*De*2),Ae=new Uint32Array(we*Te*6),je=new three.Box3;for(let e=0;e<De;e++){let t=e*_e.y.increment+_e.y.offset;for(let n=0;n<Ee;n++){let r=e*Ee+n,o=n*_e.x.increment+_e.x.offset,s=xe[r],c=!isNaN(s),l=c?s:NaN;_vector.set(o,-t,l),ve&&_vector.applyMatrix3(ve),c&&je.expandByPoint(_vector),Oe[r*3+0]=_vector.x,Oe[r*3+1]=_vector.y,Oe[r*3+2]=_vector.z,ke[r*2+0]=n/we,ke[r*2+1]=1-e/Te}}for(let e=0;e<Te;e++)for(let t=0;t<we;t++){let n=t+Ee*e,r=t+Ee*(e+1),o=t+1+Ee*(e+1),s=t+1+Ee*e,c=(e*we+t)*6;Ae[c+0]=n,Ae[c+1]=r,Ae[c+2]=s,Ae[c+3]=r,Ae[c+4]=o,Ae[c+5]=s}let Z=new three.BufferGeometry;Z.setAttribute(`position`,new three.BufferAttribute(Oe,3)),Z.setAttribute(`uv`,new three.BufferAttribute(ke,2)),Z.setIndex(new three.BufferAttribute(Ae,1)),(!Z.groups||Z.groups.length===0)&&Z.addGroup(0,Z.index?Z.index.count:Z.attributes.position.count,0),Z.boundingBox=je;let Me=new PBMMeshMaterial(t.light?`phong`:`basic`);return Me.flatShading=!0,Me.color.copy(pe),{object:new PBMMesh(Z,[Me]),dispose:()=>{Z.dispose(),Me.dispose()}}}function parseSplatData(e){let t=32,n=e.length/32;if(e.length%32!=0)throw Error(`Invalid splat file: data length ${e.length} is not a multiple of 32`);let r=new Float32Array(3*n),o=new Float32Array(4*n),s=new Float32Array(3*n),c=new Uint8Array(4*n),l=new Float32Array(e.buffer),u=new Uint8Array(e.buffer);for(let e=0;e<n;e++)r[3*e+0]=l[8*e+0],r[3*e+1]=l[8*e+1],r[3*e+2]=l[8*e+2],s[3*e+0]=l[8*e+3+0],s[3*e+1]=l[8*e+3+1],s[3*e+2]=l[8*e+3+2],c[4*e+0]=u[32*e+24+0],c[4*e+1]=u[32*e+24+1],c[4*e+2]=u[32*e+24+2],c[4*e+3]=u[32*e+24+3],o[4*e+0]=(u[32*e+28+0]-128)/128,o[4*e+1]=(u[32*e+28+1]-128)/128,o[4*e+2]=(u[32*e+28+2]-128)/128,o[4*e+3]=(u[32*e+28+3]-128)/128;return{numPoints:n,positions:r,scales:s,rotations:o,colors:c}}function loadSplat(e,t={}){var n,r,o,s;let c=(n=t.modelUpAxis)==null?`Y`:n,l=(r=t.upAxis)==null?`Z`:r,u=(o=t.fetcher)==null?internalFetcher:o,d=(s=t.onDownloadProgress)==null?noop:s,f=0;return Promise.resolve().then(()=>u.ajax(e,{responseType:`arraybuffer`},void 0,void 0,d)).then(e=>(f=e.body.byteLength,e.body)).then(e=>parseSplatData(new Uint8Array(e))).then(t=>{let n=new PBMGaussianSplattingObject({positions:t.positions,scales:t.scales,rotations:t.rotations,colors:t.colors,numPoints:t.numPoints});return c===`Y`&&n.applyMatrix4(ROTATE_X_MATRIX$1),{type:`splat`,modelUpAxis:c,upAxis:l,uri:e,byteLength:f,memoryUsage:getMemoryUsage(n),scene:n,textures:[],animations:[],dispose:()=>n.dispose()}})}var VolumePlaneIntersect;(function(e){e[e.Outside=-1]=`Outside`,e[e.Intersecting=0]=`Intersecting`,e[e.Inside=1]=`Inside`})(VolumePlaneIntersect||(VolumePlaneIntersect={}));var EPSILON$2=1e-6,identityMatrix4$1=new three.Matrix4().identity(),scratchVector=new three.Vector3,scratchMatrix4$5=new three.Matrix4,scratchXAxis=new three.Vector3,scratchYAxis=new three.Vector3,scratchZAxis=new three.Vector3,scratchSize=new three.Vector3,scratchBox3$1=new three.Box3,scratchSphere$2=new three.Sphere,scratchMatrix4Inverse$1=new three.Matrix4,scratchRay$1=new three.Ray,scratchObject3D=new three.Object3D,scratchFrustum=new three.Frustum;function quaternionFromMatrix3(e,t){let n=e.elements;return t.setFromRotationMatrix(scratchMatrix4$5.set(n[0],n[3],n[6],0,n[1],n[4],n[7],0,n[2],n[5],n[8],0,0,0,0,1)),t}var CullingVolume=class e{static get MASK_OUTSIDE(){return 4294967295}static get MASK_INSIDE(){return 0}static get MASK_INDETERMINATE(){return 2147483647}constructor(e=[]){this.planes=e}setFromFrustum(e){return this.planes=e.planes.map(e=>e.clone()),this}setFromCamera(e){return scratchMatrix4$5.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),scratchFrustum.setFromProjectionMatrix(scratchMatrix4$5),this.setFromFrustum(scratchFrustum),this}applyMatrix4(e){for(let t of this.planes)t.applyMatrix4(e)}copy(e){return this.planes=e.planes.map(e=>e.clone()),this}clone(){return new e().copy(this)}computeVisibility(e){let t=VolumePlaneIntersect.Inside;for(let n of this.planes)switch(e.intersectPlane(n)){case VolumePlaneIntersect.Outside:return VolumePlaneIntersect.Outside;case VolumePlaneIntersect.Intersecting:t=VolumePlaneIntersect.Intersecting;break;default:}return t}computeVisibilityWithPlaneMask(t,n){if(n===e.MASK_OUTSIDE||n===e.MASK_INSIDE)return n;let r=e.MASK_INSIDE,o=Math.min(32,this.planes.length);for(let s=0;s<o;++s){let o=1<<s;if((n&o)===0)continue;let c=this.planes[s],l=t.intersectPlane(c);if(l===VolumePlaneIntersect.Outside)return e.MASK_OUTSIDE;l===VolumePlaneIntersect.Intersecting&&(r|=o)}return r}},BoxBoundingVolume=class e{constructor(){this.type=`box`,this.center=new three.Vector3,this.halfSize=new three.Vector3,this.rotation=new three.Matrix3}fromJson({box:e}){this.center.set(e[0],e[1],e[2]);let t=e[3],n=e[4],r=e[5],o=e[6],s=e[7],c=e[8],l=e[9],u=e[10],d=e[11],f=Math.max(Math.sqrt(t*t+n*n+r*r),.001),p=Math.max(Math.sqrt(o*o+s*s+c*c),.001),m=Math.max(Math.sqrt(l*l+u*u+d*d),.001);this.halfSize.set(f,p,m);let h=this.halfSize.toArray().reduce((e,t)=>e+t,0);return(isNaN(h)||h<=0)&&this.halfSize.setScalar(EPSILON$2),this.rotation.fromArray([t/f,n/f,r/f,o/p,s/p,c/p,l/m,u/m,d/m]),isNaN(this.rotation.toArray().reduce((e,t)=>e+t,0))&&this.rotation.identity(),this}toJson(){return this.rotation.extractBasis(scratchXAxis,scratchYAxis,scratchZAxis),{box:[...this.center.toArray(),...scratchXAxis.multiplyScalar(this.halfSize.x).toArray(),...scratchYAxis.multiplyScalar(this.halfSize.y).toArray(),...scratchZAxis.multiplyScalar(this.halfSize.z).toArray()]}}copy(e){return this.center.copy(e.center),this.halfSize.copy(e.halfSize),this.rotation.copy(e.rotation),this}clone(){return new e().copy(this)}applyMatrix4(e){return e.equals(identityMatrix4$1)?this:(scratchObject3D.position.copy(this.center),quaternionFromMatrix3(this.rotation,scratchObject3D.quaternion),scratchObject3D.scale.copy(this.halfSize),scratchObject3D.matrix.compose(scratchObject3D.position,scratchObject3D.quaternion,scratchObject3D.scale),scratchObject3D.matrix.premultiply(e),scratchObject3D.matrix.decompose(scratchObject3D.position,scratchObject3D.quaternion,scratchObject3D.scale),this.center.copy(scratchObject3D.position),this.rotation.setFromMatrix4(scratchMatrix4$5.makeRotationFromQuaternion(scratchObject3D.quaternion)),this.halfSize.copy(scratchObject3D.scale),this)}getCenter(e){return e.copy(this.center)}distanceSquaredToPoint(e){let t=this.rotation.elements,n=e.x-this.center.x,r=e.y-this.center.y,o=e.z-this.center.z,s=0,c;return c=n*t[0]+r*t[1]+o*t[2],c<0&&(c=-c),c-=this.halfSize.x,c>0&&(s+=c*c),c=n*t[3]+r*t[4]+o*t[5],c<0&&(c=-c),c-=this.halfSize.y,c>0&&(s+=c*c),c=n*t[6]+r*t[7]+o*t[8],c<0&&(c=-c),c-=this.halfSize.z,c>0&&(s+=c*c),s}distanceToPoint(e){return Math.sqrt(this.distanceSquaredToPoint(e))}distanceToPlane(e){let t=e.projectPoint(this.center,new three.Vector3);return this.distanceToPoint(t)}getBoundingBox(e){return e.makeEmpty(),this.rotation.extractBasis(scratchXAxis,scratchYAxis,scratchZAxis),scratchXAxis.setLength(this.halfSize.x),scratchYAxis.setLength(this.halfSize.y),scratchZAxis.setLength(this.halfSize.z),e.expandByPoint(scratchVector.copy(this.center).add(scratchXAxis)),e.expandByPoint(scratchVector.copy(this.center).sub(scratchXAxis)),e.expandByPoint(scratchVector.copy(this.center).add(scratchYAxis)),e.expandByPoint(scratchVector.copy(this.center).sub(scratchYAxis)),e.expandByPoint(scratchVector.copy(this.center).add(scratchZAxis)),e.expandByPoint(scratchVector.copy(this.center).sub(scratchZAxis)),e}toGeometry(){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 Float32Array(24);scratchVector.set(this.halfSize.x,this.halfSize.y,this.halfSize.z).applyMatrix3(this.rotation).add(this.center).toArray(t,0),scratchVector.set(-this.halfSize.x,this.halfSize.y,this.halfSize.z).applyMatrix3(this.rotation).add(this.center).toArray(t,3),scratchVector.set(-this.halfSize.x,-this.halfSize.y,this.halfSize.z).applyMatrix3(this.rotation).add(this.center).toArray(t,6),scratchVector.set(this.halfSize.x,-this.halfSize.y,this.halfSize.z).applyMatrix3(this.rotation).add(this.center).toArray(t,9),scratchVector.set(this.halfSize.x,this.halfSize.y,-this.halfSize.z).applyMatrix3(this.rotation).add(this.center).toArray(t,12),scratchVector.set(-this.halfSize.x,this.halfSize.y,-this.halfSize.z).applyMatrix3(this.rotation).add(this.center).toArray(t,15),scratchVector.set(-this.halfSize.x,-this.halfSize.y,-this.halfSize.z).applyMatrix3(this.rotation).add(this.center).toArray(t,18),scratchVector.set(this.halfSize.x,-this.halfSize.y,-this.halfSize.z).applyMatrix3(this.rotation).add(this.center).toArray(t,21);let n=new three.BufferGeometry;return n.setIndex(new three.BufferAttribute(e,1)),n.setAttribute(`position`,new three.BufferAttribute(t,3)),n.computeBoundingBox(),n.computeBoundingSphere(),n}intersectPlane(e){let t=this.center,n=e.normal,r=this.rotation.elements,o=this.halfSize,s=n.x,c=n.y,l=n.z,u=Math.abs(s*r[0]*o.x+c*r[1]*o.x+l*r[2]*o.x)+Math.abs(s*r[3]*o.y+c*r[4]*o.y+l*r[5]*o.y)+Math.abs(s*r[6]*o.z+c*r[7]*o.z+l*r[8]*o.z),d=n.dot(t)+e.constant;return d<=-u?VolumePlaneIntersect.Outside:d>=u?VolumePlaneIntersect.Inside:VolumePlaneIntersect.Intersecting}intersectRay(e,t=0,n){if(scratchSize.copy(this.halfSize).multiplyScalar(2),scratchBox3$1.setFromCenterAndSize(scratchVector.set(0,0,0),scratchSize),scratchBox3$1.expandByScalar(t),this.rotation.extractBasis(scratchXAxis,scratchYAxis,scratchZAxis),scratchMatrix4$5.makeBasis(scratchXAxis,scratchYAxis,scratchZAxis),scratchMatrix4$5.setPosition(this.center),scratchMatrix4Inverse$1.getInverse(scratchMatrix4$5),scratchRay$1.copy(e).applyMatrix4(scratchMatrix4Inverse$1),scratchBox3$1.containsPoint(scratchRay$1.origin))return!0;let r=scratchRay$1.intersectBox(scratchBox3$1,scratchVector);return r?n===void 0?!0:(n+=t,r.distanceToSquared(scratchRay$1.origin)<=n*n):!1}},SphereBoundingVolume=class e{constructor(){this.type=`sphere`,this.center=new three.Vector3,this.radius=-1}fromJson({sphere:e}){return this.center.set(e[0],e[1],e[2]),this.radius=Math.max(e[3],EPSILON$2),this}toJson(){return{sphere:[...this.center.toArray(),this.radius]}}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}clone(){return new e().copy(this)}getBoundingBox(e){return e.setFromCenterAndSize(this.center,scratchSize.set(1,1,1).multiplyScalar(this.radius*2)),e}toGeometry(){let e=32,t=new Float32Array(384);for(let e=0;e<=32;e++){let n=0;n=e/32*Math.PI*2,t[e*6+0]=this.center.x+Math.cos(n)*this.radius,t[e*6+1]=this.center.y+Math.sin(n)*this.radius,t[e*6+2]=this.center.z+0,n=(e+1)/32*Math.PI*2,t[e*6+3]=this.center.x+Math.cos(n)*this.radius,t[e*6+4]=this.center.y+Math.sin(n)*this.radius,t[e*6+5]=this.center.z+0}for(let e=32;e<=64;e++){let n=0;n=e/32*Math.PI*2,t[e*6+0]=this.center.x+Math.cos(n)*this.radius,t[e*6+1]=this.center.y+0,t[e*6+2]=this.center.z+Math.sin(n)*this.radius,n=(e+1)/32*Math.PI*2,t[e*6+3]=this.center.x+Math.cos(n)*this.radius,t[e*6+4]=this.center.y+0,t[e*6+5]=this.center.z+Math.sin(n)*this.radius}let n=new three.BufferGeometry;return n.setAttribute(`position`,new three.BufferAttribute(t,3)),n.computeBoundingBox(),n.computeBoundingSphere(),n}applyMatrix4(e){return e.equals(identityMatrix4$1)?this:(this.center.applyMatrix4(e),this.radius*=e.getMaxScaleOnAxis(),this)}getCenter(e){return e.copy(this.center)}distanceSquaredToPoint(e){let t=this.distanceToPoint(e);return t*t}distanceToPoint(e){let t=this.center.distanceTo(e)-this.radius;return t<=0?0:t}distanceToPlane(e){let t=Math.abs(e.distanceToPoint(this.center));return Math.max(0,t-this.radius)}intersectPlane(e){let t=this.center,n=this.radius,r=e.normal.dot(t)+e.constant;return r<-n?VolumePlaneIntersect.Outside:r<n?VolumePlaneIntersect.Intersecting:VolumePlaneIntersect.Inside}intersectRay(e,t=0,n){if(scratchSphere$2.set(this.center,this.radius+t),scratchSphere$2.containsPoint(e.origin))return!0;let r=e.intersectSphere(scratchSphere$2,scratchVector);return r?n===void 0?!0:(n+=t,e.origin.distanceToSquared(r)<=n*n):!1}},RegionBoundingVolume=class e{constructor(){throw this.type=`regin`,this.west=0,this.south=0,this.east=0,this.north=0,this.minHeight=0,this.maxHeight=0,Error(`Region bounding volume not supported.`)}fromJson({region:e}){return this.west=e[0],this.south=e[1],this.east=e[2],this.north=e[3],this.minHeight=e[4],this.maxHeight=e[5],this}toJson(){return{region:[this.west,this.south,this.east,this.north,this.minHeight,this.maxHeight]}}copy(e){return this.west=e.west,this.south=e.south,this.east=e.east,this.north=e.north,this.minHeight=e.minHeight,this.maxHeight=e.maxHeight,this}clone(){return new e().copy(this)}getBoundingBox(e){throw Error(`not implemented`)}toGeometry(){throw Error(`not implemented`)}applyMatrix4(e){throw Error(`not implemented`)}getCenter(e){throw Error(`not implemented`)}distanceToPoint(e){throw Error(`not implemented`)}distanceSquaredToPoint(e){throw Error(`not implemented`)}distanceToPlane(e){throw Error(`not implemented`)}intersectPlane(e){throw Error(`not implemented`)}intersectRay(e,t=0,n){throw Error(`not implemented`)}};function isBoundingVolume(e){return e instanceof BoxBoundingVolume||e instanceof SphereBoundingVolume||e instanceof RegionBoundingVolume}function makeBoundingVolume(e){if(isBoundingVolume(e))return e;if(`box`in e)return new BoxBoundingVolume().fromJson(e);if(`sphere`in e)return new SphereBoundingVolume().fromJson(e);if(`region`in e)return new RegionBoundingVolume().fromJson(e);throw Error(`BoundingVolume ${JSON.stringify(e)} never suppored.`)}var debugMaterials=[4821759,8191922,16637280,16739958,5822969,376977,16747077,9259235,14514687].map(e=>new three.LineBasicMaterial({color:e,depthWrite:!1,depthTest:!0,transparent:!0,opacity:.5})),debugBoxGeometry=(()=>{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 Float32Array(24);scratchVector.set(1,1,1).toArray(t,0),scratchVector.set(-1,1,1).toArray(t,3),scratchVector.set(-1,-1,1).toArray(t,6),scratchVector.set(1,-1,1).toArray(t,9),scratchVector.set(1,1,-1).toArray(t,12),scratchVector.set(-1,1,-1).toArray(t,15),scratchVector.set(-1,-1,-1).toArray(t,18),scratchVector.set(1,-1,-1).toArray(t,21);let n=new three.BufferGeometry;return n.setIndex(new three.BufferAttribute(e,1)),n.setAttribute(`position`,new three.BufferAttribute(t,3)),n.computeBoundingBox(),n.computeBoundingSphere(),n})(),debugSphereGeometry=(()=>{let e=32,t=new Float32Array(384);for(let e=0;e<=32;e++){let n=0;n=e/32*Math.PI*2,t[e*6+0]=Math.cos(n),t[e*6+1]=Math.sin(n),t[e*6+2]=0,n=(e+1)/32*Math.PI*2,t[e*6+3]=Math.cos(n),t[e*6+4]=Math.sin(n),t[e*6+5]=0}for(let e=32;e<=64;e++){let n=0;n=e/32*Math.PI*2,t[e*6+0]=Math.cos(n),t[e*6+1]=0,t[e*6+2]=Math.sin(n),n=(e+1)/32*Math.PI*2,t[e*6+3]=Math.cos(n),t[e*6+4]=0,t[e*6+5]=Math.sin(n)}let n=new three.BufferGeometry;return n.setAttribute(`position`,new three.BufferAttribute(t,3)),n.computeBoundingBox(),n.computeBoundingSphere(),n})();function createDebugBoundingMesh(e,t=0){if(e instanceof BoxBoundingVolume){let n=new three.LineSegments(debugBoxGeometry,debugMaterials[Math.min(t,debugMaterials.length-1)]);return n.position.copy(e.center),quaternionFromMatrix3(e.rotation,n.quaternion),n.scale.set(e.halfSize.x,e.halfSize.y,e.halfSize.z),n.matrix.compose(n.position,n.quaternion,n.scale),n}else if(e instanceof SphereBoundingVolume){let n=new three.LineSegments(debugSphereGeometry,debugMaterials[Math.min(t,debugMaterials.length-1)]);return n.position.copy(e.center),n.scale.set(e.radius,e.radius,e.radius),n.matrix.compose(n.position,n.quaternion,n.scale),n}return null}var scratchVector3$10=new three.Vector3,scratchPlane=new three.Plane,scratchSphereBoundingVolume$1=new SphereBoundingVolume,scratchBoxBoundingVolume$1=new BoxBoundingVolume,Tile=class e{constructor(t,n,r,o){var s,c,l,u;this.parent=null,this.contentParent=null,this.floor=0,this.id=t,this.state={visible:!1,frameNumber:0,selectedFrameNumber:0,requestedFrameNumber:0,touchedFrameNumber:0,distanceToCamera:0,centerZDepth:0,centerScreenY:0,screenSpaceError:0,visibilityPlaneMask:0,inRequestVolume:!1,shouldRefine:!1,stackLength:0,finalResolution:!0,selectionDepth:0,shouldSelect:!1,lastSelect:!1,ancestorWithContent:null,ancestorWithContentAvailable:null},this.parent=o==null?null:o,this.contentParent=o?o.hasRenderContent?o:o.contentParent:null,this.level=this.parent?this.parent.level+1:0,this.tileset=r,this.refine=(s=n.refine)==null?this.parent?this.parent.refine:`REPLACE`:s,this.transform=new three.Matrix4,n.transform&&this.transform.fromArray(n.transform),this.parent&&this.transform.premultiply(this.parent.transform),typeof n.geometricError==`number`?this.geometricError=n.geometricError*this.transform.getMaxScaleOnAxis():this.geometricError=(l=(c=this.parent)==null?void 0:c.geometricError)==null?0:l,n.content&&n.content.uri?(this.content={uri:n.content.uri,loadState:`UNLOADED`,loadProgress:0,loadStateUpdateTime:now(),loadfailRetryDelay:0,byteLength:0,memoryUsage:0},n.content.group!==void 0&&(this.content.group=n.content.group),/\.json$/.test(this.content.uri)?this.type=`TILESET`:this.type=`SCENEGRAPH`):(this.content=null,this.type=`EMPTY`),this.levelOfContent=this.parent?this.parent.levelOfContent:-1,this.type===`SCENEGRAPH`&&(this.levelOfContent+=1),n.boundingVolume&&(this.boundingVolume=makeBoundingVolume(n.boundingVolume).applyMatrix4(this.transform)),n.viewerRequestVolume&&(this.viewerRequestVolume=makeBoundingVolume(n.viewerRequestVolume).applyMatrix4(this.transform)),this.extras=(u=n.extras)==null?{}:u,typeof this.extras.floor!=`number`&&o&&typeof o.extras.floor==`number`&&(this.extras.floor=o.extras.floor),typeof this.extras.floor==`number`&&(this.floor=this.extras.floor,this.tileset.floorLength=Math.max(this.tileset.floorLength,this.floor+1)),n.children?this.children=n.children.map((t,n)=>new e(`${this.id}.${n}`,t,r,this)):this.children=[]}traverse(e){e(this);for(let t of this.children)t.traverse(e)}updateState(e){this.state.frameNumber=e.frameNumber;let t=this.tileset.transform;if(this.boundingVolume){let n;n=this.boundingVolume instanceof BoxBoundingVolume?scratchBoxBoundingVolume$1.copy(this.boundingVolume):this.boundingVolume instanceof SphereBoundingVolume?scratchSphereBoundingVolume$1.copy(this.boundingVolume):this.boundingVolume.clone(),n.applyMatrix4(t),e.camera.type===`OrthographicCamera`?(scratchPlane.setFromNormalAndCoplanarPoint(e.camera.direction,e.camera.position),this.state.distanceToCamera=n.distanceToPlane(scratchPlane)):this.state.distanceToCamera=n.distanceToPoint(e.camera.position);let r=n.getCenter(scratchVector3$10).sub(e.camera.position);this.state.centerZDepth=e.camera.direction.dot(r),this.state.centerScreenY=e.camera.up.dot(r);let o=this.parent?this.parent.state.visibilityPlaneMask:CullingVolume.MASK_INDETERMINATE;this.state.visibilityPlaneMask=e.cullingVolume.computeVisibilityWithPlaneMask(n,o),this.state.visible=this.state.visibilityPlaneMask!==CullingVolume.MASK_OUTSIDE,e.cameraCulling||(this.state.visible=!0)}else this.state.distanceToCamera=0,this.state.centerZDepth=0,this.state.visibilityPlaneMask=CullingVolume.MASK_INDETERMINATE,this.state.visible=!0;if((this.levelOfContent<=e.minLevelOfDetail||this.geometricError>=e.maxGeometricError)&&(this.state.visible=!0),this.viewerRequestVolume){let n;n=this.viewerRequestVolume instanceof BoxBoundingVolume?scratchBoxBoundingVolume$1.copy(this.viewerRequestVolume):this.viewerRequestVolume instanceof SphereBoundingVolume?scratchSphereBoundingVolume$1.copy(this.viewerRequestVolume):this.viewerRequestVolume.clone(),n.applyMatrix4(t),this.state.inRequestVolume=n.distanceSquaredToPoint(e.camera.position)<=0}else this.state.inRequestVolume=!0;this.state.screenSpaceError=this.getScreenSpaceError(e,this.state.distanceToCamera,!1)}get selected(){return this.state.selectedFrameNumber===this.tileset.frameNumber}get hasChildren(){return this.children.length>0}get siblingIndex(){var e,t;return(t=(e=this.parent)==null?void 0:e.children.indexOf(this))==null?0:t}get hasTilesetContent(){return this.children.length>0&&this.type===`TILESET`}get hasRenderContent(){return this.type===`SCENEGRAPH`}get contentAvailable(){var e;return this.hasRenderContent&&((e=this.content)==null?void 0:e.loadState)===`READY`}get hasUnloadedContent(){var e;return((e=this.content)==null?void 0:e.loadState)===`UNLOADED`}get hasEmptyContent(){return this.type===`EMPTY`}get contentReady(){var e;return((e=this.content)==null?void 0:e.loadState)===`READY`||this.hasEmptyContent}get contentByteLength(){return this.content?this.content.byteLength:0}get contentMemoryUsage(){return this.content?this.content.memoryUsage:0}getScreenSpaceError(e,t,n){let r=this.tileset.transform.getMaxScaleOnAxis(),o=this.parent?this.parent.geometricError:this.tileset.geometricError,s=r*(n?o:this.geometricError);if(s===0)return 0;let c=e.height,l=e.sseDenominator;return e.camera.type===`OrthographicCamera`?s/(1/(e.camera.projectionMatrix.elements[5]/2)/c*.9):s/(Math.max(t,.001)*l/c)}getPriority(e){let t=this.refine===`ADD`||e.skipLevelOfDetail;if(t&&!this.state.visible||e.frameNumber-this.state.touchedFrameNumber>=1)return-1;let n=this.parent,r=n&&(!t||this.state.screenSpaceError===0)?n.state.screenSpaceError:this.state.screenSpaceError,o=this.tileset.root?this.tileset.root.state.screenSpaceError:0;return Math.max(o-r,0)}},defaultIterator=e=>Number(e);function arrayMin(e,t=defaultIterator,n=!1){let r,o=1/0;for(let n of e){let e=t(n);e<=o&&(r=n,o=e)}return isFinite(o)||(o=0),n?[r,o]:r}function arrayEqual(e,t,n=(e,t)=>e===t){let r=e.length;if(r!==t.length)return!1;for(let o=0;o<r;o++)if(n(e[o],t[o])===!1)return!1;return!0}var arrayUniqueSet=new Set;function arrayUnique(e){arrayUniqueSet.clear();let t=[],n=e.length;for(let r=0;r<n;r++){let n=e[r];arrayUniqueSet.has(n)||(t.push(n),arrayUniqueSet.add(n))}return arrayUniqueSet.clear(),t}var arrayMinCallback=e=>e.distance,intersectDistanceSortCallback=(e,t)=>e.distance-t.distance;function sortIntersects(e,t=!0,n=!1){if(n&&e.length>1){let t=arrayMin(e,arrayMinCallback);t?(e[0]=t,e.length=1):e.length=0}return t&&e.length>1&&e.sort(intersectDistanceSortCallback),e}var BVHObject=class{constructor(e,t){this.position=e,this.indices=t}getPositionCount(){var e,t;let n=this.indices,r=this.position;return n?n.array.length/((e=n.stride)==null?1:e):r.array.length/((t=r.stride)==null?3:t)}getPositionByIndex(e,t){var n,r,o,s;let c=this.indices,l=this.position,u=e;if(c){let t=c.array,o=(n=c.stride)==null?1:n,s=(r=c.offset)==null?0:r;u=t[e*o+s]}let d=l.array,f=(o=l.stride)==null?3:o,p=(s=l.offset)==null?0:s;return u=u*f+p,t.x=d[u],t.y=d[u+1],t.z=d[u+2],t}createTree(e,t,n){throw Error(`not implemented`)}trianglesInSphere(e,t){throw Error(`not implemented`)}intersectRay(e,t,n=0,r=!1,o){throw Error(`not implemented`)}},BVHNode=class{constructor(e,t,n,r,o){this.id=e,this.extents=t,this.startIndex=n,this.endIndex=r,this.deepth=o}},BYTES_PER_NODE=36;function packBVHNode(e,t){let n=new ArrayBuffer(t*36),r=new Float32Array(n),o=new Uint32Array(n),s=new Uint16Array(n),c=[e],l,u;for(;l=c.pop();)u=l.id*36/4,r[u]=l.extents[0],r[u+1]=l.extents[1],r[u+2]=l.extents[2],r[u+3]=l.extents[3],r[u+4]=l.extents[4],r[u+5]=l.extents[5],o[u+6]=l.startIndex,o[u+7]=l.endIndex,u=l.id*36/2,l.node0&&(s[u+16]=l.node0.id,c.push(l.node0)),l.node1&&(s[u+17]=l.node1.id,c.push(l.node1));return n}function intersectNodeBox(e,t,n,r=0){let o=n.min.x-r,s=n.min.y-r,c=n.min.z-r,l=n.max.x+r,u=n.max.y+r,d=n.max.z+r,f=0,p=0,m=0,h=0,g=0,_=0;return t.x>=0?(f=(o-e.x)*t.x,p=(l-e.x)*t.x):(f=(l-e.x)*t.x,p=(o-e.x)*t.x),t.y>=0?(m=(s-e.y)*t.y,h=(u-e.y)*t.y):(m=(u-e.y)*t.y,h=(s-e.y)*t.y),f>h||m>p||((m>f||f!==f)&&(f=m),(h<p||p!==p)&&(p=h),t.z>=0?(g=(c-e.z)*t.z,_=(d-e.z)*t.z):(g=(d-e.z)*t.z,_=(c-e.z)*t.z),f>_||g>p)||((g>f||f!==f)&&(f=g),(_<p||p!==p)&&(p=_),p<0)?null:f>=0?f:0}var BVHVector3=class e{constructor(e,t,n){this.x=e,this.y=t,this.z=n}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}set(e,t,n){return this.x=e,this.y=t,this.z=n,this}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}cross(e){let t=this.x,n=this.y,r=this.z;return this.x=n*e.z-r*e.y,this.y=r*e.x-t*e.z,this.z=t*e.y-n*e.x,this}crossVectors(e,t){let n=e.x,r=e.y,o=e.z,s=t.x,c=t.y,l=t.z;return this.x=r*l-o*c,this.y=o*s-n*l,this.z=n*c-r*s,this}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}clone(){return new e(this.x,this.y,this.z)}},BVHIntersect=class{constructor(e,t,n,r,o){this.pointA=e,this.pointB=t,this.pointC=n,this.index=r,this.intersectionPoint=o}},BVHBox3=class{constructor(e,t){this.min=e,this.max=t}},EPSILON$1=1e-6,scratchVector3$9=new BVHVector3(0,0,0),scratchVector3A=new BVHVector3(0,0,0),scratchVector3B=new BVHVector3(0,0,0),scratchVector3C=new BVHVector3(0,0,0),BVHMesh=class extends BVHObject{createTree(e,t,n){t=Math.min(t,16);let r=this.getPositionCount()/3,o=r>65535?new Uint32Array(r):new Uint16Array(r),s=new Float32Array(r*6),c=[],l=0,u=-1;if(n)for(let e=0;e<r;e+=1){let t=e*3,n=e*6,r,c,l,u,d,f,p;o[e]=e,this.getPositionByIndex(t,scratchVector3A),this.getPositionByIndex(t+1,scratchVector3B),this.getPositionByIndex(t+2,scratchVector3C),r=u=scratchVector3A.x,p=scratchVector3B.x,p<r&&(r=p),p>u&&(u=p),p=scratchVector3C.x,p<r&&(r=p),p>u&&(u=p),c=d=scratchVector3A.y,p=scratchVector3B.y,p<c&&(c=p),p>d&&(d=p),p=scratchVector3C.y,p<c&&(c=p),p>d&&(d=p),l=f=scratchVector3A.z,p=scratchVector3B.z,p<l&&(l=p),p>f&&(f=p),p=scratchVector3C.z,p<l&&(l=p),p>f&&(f=p),s[n]=r,s[n+1]=c,s[n+2]=l,s[n+3]=u,s[n+4]=d,s[n+5]=f}else{let e=1/0,t=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0;for(let n=0;n<r;n+=1){let r=n*3,f=n*6,p,m,h,g,_,v,y;o[n]=n,this.getPositionByIndex(r,scratchVector3A),this.getPositionByIndex(r+1,scratchVector3B),this.getPositionByIndex(r+2,scratchVector3C),p=g=scratchVector3A.x,y=scratchVector3B.x,y<p&&(p=y),y>g&&(g=y),y=scratchVector3C.x,y<p&&(p=y),y>g&&(g=y),m=_=scratchVector3A.y,y=scratchVector3B.y,y<m&&(m=y),y>_&&(_=y),y=scratchVector3C.y,y<m&&(m=y),y>_&&(_=y),h=v=scratchVector3A.z,y=scratchVector3B.z,y<h&&(h=y),y>v&&(v=y),y=scratchVector3C.z,y<h&&(h=y),y>v&&(v=y),s[f]=p,s[f+1]=m,s[f+2]=h,s[f+3]=g,s[f+4]=_,s[f+5]=v,p<e&&(e=p),g>l&&(l=g),m<t&&(t=m),_>u&&(u=_),h<c&&(c=h),v>d&&(d=v)}n=[e,t,c,l,u,d]}let d=new BVHNode(++u,n,0,r,0);c[l++]=d;let f=[],p=[0,1,2],m=function(e,t){return f[t]-f[e]};function h(n){let r=n.startIndex,d=n.endIndex,h=n.extents;f[0]=h[3]-h[0],f[1]=h[4]-h[1],f[2]=h[5]-h[2],p.sort(m);for(let f=0;f<3;f++){let m=p[f],g=h[m]+h[m+3],_=r,v=d-1,y=-1,b;for(;_<=v;)y===-1?(b=o[_],s[b*6+m]+s[b*6+m+3]<g?_++:y=b):(b=o[v],s[b*6+m]+s[b*6+m+3]>=g?v--:(o[_]=b,o[v]=y,y=-1,_++,v--));if(_>r&&_<d){let f=new BVHNode(++u,calcExtents(o,s,r,_,EPSILON$1),r,_,n.deepth+1);f.deepth<t&&f.endIndex-f.startIndex>e&&(c[l++]=f);let p=new BVHNode(++u,calcExtents(o,s,_,d,EPSILON$1),_,d,n.deepth+1);p.deepth<t&&p.endIndex-p.startIndex>e&&(c[l++]=p),n.node0=f,n.node1=p,n.startIndex=0,n.endIndex=0;break}}}for(;l;)h(c[--l]);return this.offsetArray=o,this.rootNodePacked=packBVHNode(d,u+1),c.length=0,this}trianglesInSphere(e,t){let n=this.offsetArray,r=this.rootNodePacked,o=new Float32Array(r),s=new Uint32Array(r),c=new Uint16Array(r),l=[0],u=[],d;for(;(d=l.pop())!==void 0;){let r=d*36/4,f=clamp(e.x,o[r],o[r+3])-e.x,p=clamp(e.y,o[r+1],o[r+4])-e.y,m=clamp(e.z,o[r+2],o[r+5])-e.z;if(f*f+p*p+m*m<=t*t){let e=s[r+6],t=s[r+7];for(let r=e;r<t;r++){let e=n[r];u.push(e)}let o=d*36/2,f=c[o+16],p=c[o+17];f&&l.push(f),p&&l.push(p)}}let f=u.length,p=new Float32Array(f*9);for(let e=0;e<f;e++){let t=u[e]*3;this.getPositionByIndex(t,scratchVector3$9),p[e*9]=scratchVector3$9.x,p[e*9+1]=scratchVector3$9.y,p[e*9+2]=scratchVector3$9.z,this.getPositionByIndex(t+1,scratchVector3$9),p[e*9+3]=scratchVector3$9.x,p[e*9+4]=scratchVector3$9.y,p[e*9+5]=scratchVector3$9.z,this.getPositionByIndex(t+2,scratchVector3$9),p[e*9+6]=scratchVector3$9.x,p[e*9+7]=scratchVector3$9.y,p[e*9+8]=scratchVector3$9.z}return p}intersectRay(e,t,n=0,r=!1,o){let s=[],c=this.offsetArray,l=this.rootNodePacked,u=new Float32Array(l),d=new Uint32Array(l),f=new Uint16Array(l),p=new BVHVector3(1/t.x,1/t.y,1/t.z),m=[0],h,g=1/0,_=new BVHBox3(new BVHVector3(0,0,0),new BVHVector3(0,0,0)),v=new BVHVector3(0,0,0),y=new BVHVector3(0,0,0),b=new BVHVector3(0,0,0);for(;(h=m.pop())!==void 0;){let l=h*36/4;_.min.x=u[l],_.min.y=u[l+1],_.min.z=u[l+2],_.max.x=u[l+3],_.max.y=u[l+4],_.max.z=u[l+5];let S=intersectNodeBox(e,p,_,n);if(S===null||r&&S>g)continue;let C=e.x,w=e.y,T=e.z,E=t.x,D=t.y,O=t.z,k=d[l+6],A=d[l+7];for(let e=k;e<A;e++){let t=c[e],n=t*3;this.getPositionByIndex(n,v);let l=v.x,u=v.y,d=v.z;this.getPositionByIndex(n+1,y);let f=y.x,p=y.y,m=y.z;this.getPositionByIndex(n+2,b);let h=b.x,_=b.y,S=b.z,k=f-l,A=p-u,j=m-d,M=h-l,N=_-u,P=S-d,F=A*P-j*N,I=j*M-k*P,L=k*N-A*M,R=E*F+D*I+O*L,z;if(R>0)z=1;else if(R<0)z=-1,R=-R;else continue;let B=C-l,V=w-u,H=T-d,ee=z*(E*(V*P-H*N)+D*(H*M-B*P)+O*(B*N-V*M));if(ee<0)continue;let te=z*(E*(A*H-j*V)+D*(j*B-k*H)+O*(k*V-A*B));if(te<0||ee+te>R)continue;let U=-z*(B*F+V*I+H*L);if(U<0)continue;let W=U/R,G=new BVHIntersect(v,y,b,t,new BVHVector3(C+E*W,w+D*W,T+O*W));(!o||o(G))&&(r?W<g&&(g=W,s.length>0&&(s.length=0),s.push(G)):s.push(G))}let j=h*36/2,M=f[j+16],N=f[j+17];M&&m.push(M),N&&m.push(N)}return s}};function clamp(e,t,n){return e<t?t:e>n?n:e}function calcExtents(e,t,n,r,o){if(n>=r)return[0,0,0,0,0,0];let s=1/0,c=1/0,l=1/0,u=-1/0,d=-1/0,f=-1/0;for(let o=n;o<r;o++){let n=e[o]*6,r=t[n];r<s&&(s=r),r=t[n+1],r<c&&(c=r),r=t[n+2],r<l&&(l=r),r=t[n+3],r>u&&(u=r),r=t[n+4],r>d&&(d=r),r=t[n+5],r>f&&(f=r)}return[s-o,c-o,l-o,u+o,d+o,f+o]}(function(){let e=new BVHVector3(0,0,0),t=new BVHVector3(0,0,0),n=new BVHVector3(0,0,0),r=new BVHVector3(0,0,0);return function(o,s,c,l,u){t.subVectors(s,o),n.subVectors(c,o),r.crossVectors(t,n);let d=u.dot(r),f;if(d>0)f=1;else if(d<0)f=-1,d=-d;else return null;e.subVectors(l,o);let p=f*u.dot(n.crossVectors(e,n));if(p<0)return null;let m=f*u.dot(t.cross(e));if(m<0||p+m>d)return null;let h=-f*e.dot(r);if(h<0)return null;let g=h/d;return new BVHVector3(0,0,0).copy(u).multiplyScalar(g).add(l)}})();var EPSILON=1e-6,ORDER_AXISES=[`x`,`y`,`z`],scratchVector3$8=new BVHVector3(0,0,0),BVHPoints=class extends BVHObject{createTree(e,t,n){t=Math.min(t,16);let r=this.getPositionByIndex.bind(this),o=this.getPositionCount(),s=o>65535?new Uint32Array(o):new Uint16Array(o),c=[],l=0,u=-1;if(n)for(let e=0;e<o;e+=1)s[e]=e;else{r(0,scratchVector3$8);let e=scratchVector3$8.x,t=scratchVector3$8.y,c=scratchVector3$8.z,l=e,u=t,d=c;for(let n=0;n<o;n+=1){s[n]=n,r(n,scratchVector3$8);let o=scratchVector3$8.x,f=scratchVector3$8.y,p=scratchVector3$8.z;o<e?e=o:o>l&&(l=o),f<t?t=f:f>u&&(u=f),p<c?c=p:p>d&&(d=p)}n=[e,t,c,l,u,d]}let d=new BVHNode(++u,n,0,o,0);c[l++]=d;let f=[],p=[0,1,2],m=function(e,t){return f[t]-f[e]};function h(n){let o=n.startIndex,d=n.endIndex,h=n.extents;f[0]=h[3]-h[0],f[1]=h[4]-h[1],f[2]=h[5]-h[2];let g=p.sort(m)[0],_=ORDER_AXISES[g],v=(h[g]+h[g+3])/2,y=o,b=d-1,S=-1,C;for(;y<=b;)S===-1?(C=s[y],r(C,scratchVector3$8),scratchVector3$8[_]<v?y++:S=C):(C=s[b],r(C,scratchVector3$8),scratchVector3$8[_]>=v?b--:(s[y]=C,s[b]=S,S=-1,y++,b--));if(y>o){let r=h.slice();r[g+3]=v+EPSILON;let s=new BVHNode(++u,r,o,y,n.deepth+1);s.deepth<t&&s.endIndex-s.startIndex>e&&(c[l++]=s),n.node0=s}if(d>y){let r=h.slice();r[g]=v-EPSILON;let o=new BVHNode(++u,r,y,d,n.deepth+1);o.deepth<t&&o.endIndex-o.startIndex>e&&(c[l++]=o),n.node1=o}n.startIndex=0,n.endIndex=0}for(;l;)h(c[--l]);return this.offsetArray=s,this.rootNodePacked=packBVHNode(d,u+1),c.length=0,this}intersectRay(e,t,n=0,r=!1,o){let s=[],c=this.offsetArray,l=this.rootNodePacked,u=new Float32Array(l),d=new Uint32Array(l),f=new Uint16Array(l),p=n*n,m=new BVHVector3(1/t.x,1/t.y,1/t.z),h=[0],g,_=1/0,v=new BVHBox3(new BVHVector3(0,0,0),new BVHVector3(0,0,0)),y=new BVHVector3(0,0,0);for(;(g=h.pop())!==void 0;){let l=g*36/4;v.min.x=u[l],v.min.y=u[l+1],v.min.z=u[l+2],v.max.x=u[l+3],v.max.y=u[l+4],v.max.z=u[l+5];let b=intersectNodeBox(e,m,v,n);if(b===null||r&&b>_)continue;let S=d[l+6],C=d[l+7];for(let n=S;n<C;n++){let l=c[n];this.getPositionByIndex(l,y);let u=y.x,d=y.y,f=y.z,m=e.x,h=e.y,g=e.z,v=t.x,b=t.y,S=t.z,C=v*(u-m)+b*(d-h)+S*(f-g);if(C>0?(m+=v*C,h+=b*C,g+=S*C):C<0&&(C=0),v=u-m,b=d-h,S=f-g,v*v+b*b+S*S<=p){let e=new BVHIntersect(y,y,y,l,new BVHVector3(m,h,g));(!o||o(e))&&(r?C<_&&(_=C,s.length>0&&(s.length=0),s.push(e)):s.push(e))}}let w=g*36/2,T=f[w+16],E=f[w+17];T&&h.push(T),E&&h.push(E)}return s}},jsContent$2="(function(){var e=class{constructor(e,t){this.position=e,this.indices=t}getPositionCount(){let e=this.indices,t=this.position;return e?e.array.length/(e.stride??1):t.array.length/(t.stride??3)}getPositionByIndex(e,t){let n=this.indices,r=this.position,i=e;if(n){let t=n.array,r=n.stride??1,a=n.offset??0;i=t[e*r+a]}let a=r.array,o=r.stride??3,s=r.offset??0;return i=i*o+s,t.x=a[i],t.y=a[i+1],t.z=a[i+2],t}createTree(e,t,n){throw Error(`not implemented`)}trianglesInSphere(e,t){throw Error(`not implemented`)}intersectRay(e,t,n=0,r=!1,i){throw Error(`not implemented`)}},t=class{constructor(e,t,n,r,i){this.id=e,this.extents=t,this.startIndex=n,this.endIndex=r,this.deepth=i}};function n(e,t){let n=new ArrayBuffer(t*36),r=new Float32Array(n),i=new Uint32Array(n),a=new Uint16Array(n),o=[e],s,c;for(;s=o.pop();)c=s.id*36/4,r[c]=s.extents[0],r[c+1]=s.extents[1],r[c+2]=s.extents[2],r[c+3]=s.extents[3],r[c+4]=s.extents[4],r[c+5]=s.extents[5],i[c+6]=s.startIndex,i[c+7]=s.endIndex,c=s.id*36/2,s.node0&&(a[c+16]=s.node0.id,o.push(s.node0)),s.node1&&(a[c+17]=s.node1.id,o.push(s.node1));return n}function r(e,t,n,r=0){let i=n.min.x-r,a=n.min.y-r,o=n.min.z-r,s=n.max.x+r,c=n.max.y+r,l=n.max.z+r,u=0,d=0,f=0,p=0,m=0,h=0;return t.x>=0?(u=(i-e.x)*t.x,d=(s-e.x)*t.x):(u=(s-e.x)*t.x,d=(i-e.x)*t.x),t.y>=0?(f=(a-e.y)*t.y,p=(c-e.y)*t.y):(f=(c-e.y)*t.y,p=(a-e.y)*t.y),u>p||f>d||((f>u||u!==u)&&(u=f),(p<d||d!==d)&&(d=p),t.z>=0?(m=(o-e.z)*t.z,h=(l-e.z)*t.z):(m=(l-e.z)*t.z,h=(o-e.z)*t.z),u>h||m>d)||((m>u||u!==u)&&(u=m),(h<d||d!==d)&&(d=h),d<0)?null:u>=0?u:0}var i=class e{constructor(e,t,n){this.x=e,this.y=t,this.z=n}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}set(e,t,n){return this.x=e,this.y=t,this.z=n,this}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}cross(e){let t=this.x,n=this.y,r=this.z;return this.x=n*e.z-r*e.y,this.y=r*e.x-t*e.z,this.z=t*e.y-n*e.x,this}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}clone(){return new e(this.x,this.y,this.z)}},a=class{constructor(e,t,n,r,i){this.pointA=e,this.pointB=t,this.pointC=n,this.index=r,this.intersectionPoint=i}},o=class{constructor(e,t){this.min=e,this.max=t}};let s=1e-6,c=new i(0,0,0),l=new i(0,0,0),u=new i(0,0,0),d=new i(0,0,0);var f=class extends e{createTree(e,r,i){r=Math.min(r,16);let a=this.getPositionCount()/3,o=a>65535?new Uint32Array(a):new Uint16Array(a),c=new Float32Array(a*6),f=[],p=0,h=-1;if(i)for(let e=0;e<a;e+=1){let t=e*3,n=e*6,r,i,a,s,f,p,m;o[e]=e,this.getPositionByIndex(t,l),this.getPositionByIndex(t+1,u),this.getPositionByIndex(t+2,d),r=s=l.x,m=u.x,m<r&&(r=m),m>s&&(s=m),m=d.x,m<r&&(r=m),m>s&&(s=m),i=f=l.y,m=u.y,m<i&&(i=m),m>f&&(f=m),m=d.y,m<i&&(i=m),m>f&&(f=m),a=p=l.z,m=u.z,m<a&&(a=m),m>p&&(p=m),m=d.z,m<a&&(a=m),m>p&&(p=m),c[n]=r,c[n+1]=i,c[n+2]=a,c[n+3]=s,c[n+4]=f,c[n+5]=p}else{let e=1/0,t=1/0,n=1/0,r=-1/0,s=-1/0,f=-1/0;for(let i=0;i<a;i+=1){let a=i*3,p=i*6,m,h,g,_,v,y,b;o[i]=i,this.getPositionByIndex(a,l),this.getPositionByIndex(a+1,u),this.getPositionByIndex(a+2,d),m=_=l.x,b=u.x,b<m&&(m=b),b>_&&(_=b),b=d.x,b<m&&(m=b),b>_&&(_=b),h=v=l.y,b=u.y,b<h&&(h=b),b>v&&(v=b),b=d.y,b<h&&(h=b),b>v&&(v=b),g=y=l.z,b=u.z,b<g&&(g=b),b>y&&(y=b),b=d.z,b<g&&(g=b),b>y&&(y=b),c[p]=m,c[p+1]=h,c[p+2]=g,c[p+3]=_,c[p+4]=v,c[p+5]=y,m<e&&(e=m),_>r&&(r=_),h<t&&(t=h),v>s&&(s=v),g<n&&(n=g),y>f&&(f=y)}i=[e,t,n,r,s,f]}let g=new t(++h,i,0,a,0);f[p++]=g;let _=[],v=[0,1,2],y=function(e,t){return _[t]-_[e]};function b(n){let i=n.startIndex,a=n.endIndex,l=n.extents;_[0]=l[3]-l[0],_[1]=l[4]-l[1],_[2]=l[5]-l[2],v.sort(y);for(let u=0;u<3;u++){let d=v[u],g=l[d]+l[d+3],_=i,y=a-1,b=-1,x;for(;_<=y;)b===-1?(x=o[_],c[x*6+d]+c[x*6+d+3]<g?_++:b=x):(x=o[y],c[x*6+d]+c[x*6+d+3]>=g?y--:(o[_]=x,o[y]=b,b=-1,_++,y--));if(_>i&&_<a){let l=new t(++h,m(o,c,i,_,s),i,_,n.deepth+1);l.deepth<r&&l.endIndex-l.startIndex>e&&(f[p++]=l);let u=new t(++h,m(o,c,_,a,s),_,a,n.deepth+1);u.deepth<r&&u.endIndex-u.startIndex>e&&(f[p++]=u),n.node0=l,n.node1=u,n.startIndex=0,n.endIndex=0;break}}}for(;p;)b(f[--p]);return this.offsetArray=o,this.rootNodePacked=n(g,h+1),f.length=0,this}trianglesInSphere(e,t){let n=this.offsetArray,r=this.rootNodePacked,i=new Float32Array(r),a=new Uint32Array(r),o=new Uint16Array(r),s=[0],l=[],u;for(;(u=s.pop())!==void 0;){let r=u*36/4,c=p(e.x,i[r],i[r+3])-e.x,d=p(e.y,i[r+1],i[r+4])-e.y,f=p(e.z,i[r+2],i[r+5])-e.z;if(c*c+d*d+f*f<=t*t){let e=a[r+6],t=a[r+7];for(let r=e;r<t;r++){let e=n[r];l.push(e)}let i=u*36/2,c=o[i+16],d=o[i+17];c&&s.push(c),d&&s.push(d)}}let d=l.length,f=new Float32Array(d*9);for(let e=0;e<d;e++){let t=l[e]*3;this.getPositionByIndex(t,c),f[e*9]=c.x,f[e*9+1]=c.y,f[e*9+2]=c.z,this.getPositionByIndex(t+1,c),f[e*9+3]=c.x,f[e*9+4]=c.y,f[e*9+5]=c.z,this.getPositionByIndex(t+2,c),f[e*9+6]=c.x,f[e*9+7]=c.y,f[e*9+8]=c.z}return f}intersectRay(e,t,n=0,s=!1,c){let l=[],u=this.offsetArray,d=this.rootNodePacked,f=new Float32Array(d),p=new Uint32Array(d),m=new Uint16Array(d),h=new i(1/t.x,1/t.y,1/t.z),g=[0],_,v=1/0,y=new o(new i(0,0,0),new i(0,0,0)),b=new i(0,0,0),x=new i(0,0,0),S=new i(0,0,0);for(;(_=g.pop())!==void 0;){let o=_*36/4;y.min.x=f[o],y.min.y=f[o+1],y.min.z=f[o+2],y.max.x=f[o+3],y.max.y=f[o+4],y.max.z=f[o+5];let d=r(e,h,y,n);if(d===null||s&&d>v)continue;let C=e.x,w=e.y,T=e.z,E=t.x,D=t.y,O=t.z,k=p[o+6],A=p[o+7];for(let e=k;e<A;e++){let t=u[e],n=t*3;this.getPositionByIndex(n,b);let r=b.x,o=b.y,d=b.z;this.getPositionByIndex(n+1,x);let f=x.x,p=x.y,m=x.z;this.getPositionByIndex(n+2,S);let h=S.x,g=S.y,_=S.z,y=f-r,k=p-o,A=m-d,j=h-r,M=g-o,N=_-d,P=k*N-A*M,F=A*j-y*N,I=y*M-k*j,L=E*P+D*F+O*I,R;if(L>0)R=1;else if(L<0)R=-1,L=-L;else continue;let z=C-r,B=w-o,V=T-d,H=R*(E*(B*N-V*M)+D*(V*j-z*N)+O*(z*M-B*j));if(H<0)continue;let U=R*(E*(k*V-A*B)+D*(A*z-y*V)+O*(y*B-k*z));if(U<0||H+U>L)continue;let W=-R*(z*P+B*F+V*I);if(W<0)continue;let G=W/L,K=new a(b,x,S,t,new i(C+E*G,w+D*G,T+O*G));(!c||c(K))&&(s?G<v&&(v=G,l.length>0&&(l.length=0),l.push(K)):l.push(K))}let j=_*36/2,M=m[j+16],N=m[j+17];M&&g.push(M),N&&g.push(N)}return l}};function p(e,t,n){return e<t?t:e>n?n:e}function m(e,t,n,r,i){if(n>=r)return[0,0,0,0,0,0];let a=1/0,o=1/0,s=1/0,c=-1/0,l=-1/0,u=-1/0;for(let i=n;i<r;i++){let n=e[i]*6,r=t[n];r<a&&(a=r),r=t[n+1],r<o&&(o=r),r=t[n+2],r<s&&(s=r),r=t[n+3],r>c&&(c=r),r=t[n+4],r>l&&(l=r),r=t[n+5],r>u&&(u=r)}return[a-i,o-i,s-i,c+i,l+i,u+i]}(function(){let e=new i(0,0,0),t=new i(0,0,0),n=new i(0,0,0),r=new i(0,0,0);return function(a,o,s,c,l){t.subVectors(o,a),n.subVectors(s,a),r.crossVectors(t,n);let u=l.dot(r),d;if(u>0)d=1;else if(u<0)d=-1,u=-u;else return null;e.subVectors(c,a);let f=d*l.dot(n.crossVectors(e,n));if(f<0)return null;let p=d*l.dot(t.cross(e));if(p<0||f+p>u)return null;let m=-d*e.dot(r);if(m<0)return null;let h=m/u;return new i(0,0,0).copy(l).multiplyScalar(h).add(c)}})();let h=1e-6,g=[`x`,`y`,`z`],_=new i(0,0,0);var v=class extends e{createTree(e,r,i){r=Math.min(r,16);let a=this.getPositionByIndex.bind(this),o=this.getPositionCount(),s=o>65535?new Uint32Array(o):new Uint16Array(o),c=[],l=0,u=-1;if(i)for(let e=0;e<o;e+=1)s[e]=e;else{a(0,_);let e=_.x,t=_.y,n=_.z,r=e,c=t,l=n;for(let i=0;i<o;i+=1){s[i]=i,a(i,_);let o=_.x,u=_.y,d=_.z;o<e?e=o:o>r&&(r=o),u<t?t=u:u>c&&(c=u),d<n?n=d:d>l&&(l=d)}i=[e,t,n,r,c,l]}let d=new t(++u,i,0,o,0);c[l++]=d;let f=[],p=[0,1,2],m=function(e,t){return f[t]-f[e]};function v(n){let i=n.startIndex,o=n.endIndex,d=n.extents;f[0]=d[3]-d[0],f[1]=d[4]-d[1],f[2]=d[5]-d[2];let v=p.sort(m)[0],y=g[v],b=(d[v]+d[v+3])/2,x=i,S=o-1,C=-1,w;for(;x<=S;)C===-1?(w=s[x],a(w,_),_[y]<b?x++:C=w):(w=s[S],a(w,_),_[y]>=b?S--:(s[x]=w,s[S]=C,C=-1,x++,S--));if(x>i){let a=d.slice();a[v+3]=b+h;let o=new t(++u,a,i,x,n.deepth+1);o.deepth<r&&o.endIndex-o.startIndex>e&&(c[l++]=o),n.node0=o}if(o>x){let i=d.slice();i[v]=b-h;let a=new t(++u,i,x,o,n.deepth+1);a.deepth<r&&a.endIndex-a.startIndex>e&&(c[l++]=a),n.node1=a}n.startIndex=0,n.endIndex=0}for(;l;)v(c[--l]);return this.offsetArray=s,this.rootNodePacked=n(d,u+1),c.length=0,this}intersectRay(e,t,n=0,s=!1,c){let l=[],u=this.offsetArray,d=this.rootNodePacked,f=new Float32Array(d),p=new Uint32Array(d),m=new Uint16Array(d),h=n*n,g=new i(1/t.x,1/t.y,1/t.z),_=[0],v,y=1/0,b=new o(new i(0,0,0),new i(0,0,0)),x=new i(0,0,0);for(;(v=_.pop())!==void 0;){let o=v*36/4;b.min.x=f[o],b.min.y=f[o+1],b.min.z=f[o+2],b.max.x=f[o+3],b.max.y=f[o+4],b.max.z=f[o+5];let d=r(e,g,b,n);if(d===null||s&&d>y)continue;let S=p[o+6],C=p[o+7];for(let n=S;n<C;n++){let r=u[n];this.getPositionByIndex(r,x);let o=x.x,d=x.y,f=x.z,p=e.x,m=e.y,g=e.z,_=t.x,v=t.y,b=t.z,S=_*(o-p)+v*(d-m)+b*(f-g);if(S>0?(p+=_*S,m+=v*S,g+=b*S):S<0&&(S=0),_=o-p,v=d-m,b=f-g,_*_+v*v+b*b<=h){let e=new a(x,x,x,r,new i(p,m,g));(!c||c(e))&&(s?S<y&&(y=S,l.length>0&&(l.length=0),l.push(e)):l.push(e))}}let w=v*36/2,T=m[w+16],E=m[w+17];T&&_.push(T),E&&_.push(E)}return l}};function y(e){onmessage=t=>{Promise.resolve(t.data).then(t=>e(t)).then(({output:e,transfer:t})=>postMessage(e,t)).catch(e=>postMessage({$$error:e}))}}y(e=>Promise.resolve(e).then(e=>{let t=[],n=new Set;for(let r of e){let e;if(r.type===`mesh`)e=new f(r.attributes.position,r.indices);else if(r.type===`points`)e=new v(r.attributes.position,r.indices);else throw Error(`Invalid Type`);e.createTree(r.maxItemPerNode,r.maxTreeDepth,r.extents);let i={type:r.type,attributes:r.attributes,indices:r.indices,offsetArray:e.offsetArray,rootNodePacked:e.rootNodePacked};t.push(i);let a;for(let e in i.attributes){let t=i.attributes[e];t&&t.buffer instanceof ArrayBuffer&&n.add(t.buffer)}a=i.indices,a&&a.buffer instanceof ArrayBuffer&&n.add(a.buffer),a=i.offsetArray,a&&a.buffer instanceof ArrayBuffer&&n.add(a.buffer),n.add(i.rootNodePacked)}return{output:t,transfer:Array.from(n)}}))})();",blob$2=typeof self<`u`&&self.Blob&&new Blob([`(self.URL || self.webkitURL).revokeObjectURL(self.location.href);`,jsContent$2],{type:`text/javascript;charset=utf-8`});function WorkerWrapper$2(e){let t;try{if(t=blob$2&&(self.URL||self.webkitURL).createObjectURL(blob$2),!t)throw``;let n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener(`error`,()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker(`data:text/javascript;charset=utf-8,`+encodeURIComponent(jsContent$2),{name:e==null?void 0:e.name})}}var bvhWorkerPool=new WorkerPool(()=>new WorkerWrapper$2,4),defaultHitFilter=()=>!0,scratchRay=new three.Ray,scratchNormalMatrix=new three.Matrix3,scratchInverseMatrix=new three.Matrix4,scratchIntersectionFaceA=new three.Vector3,scratchIntersectionFaceB=new three.Vector3,scratchIntersectionFaceC=new three.Vector3,intersectsMap=new WeakMap;function raycastMesh(e,t,n,r){var o,s;let c=e.matrixWorld;scratchInverseMatrix.getInverse(c),scratchRay.copy(n.ray).applyMatrix4(scratchInverseMatrix);let l=(o=n.hitFilter)==null?defaultHitFilter:o,u=(s=n.firstHitOnly)==null?!1:s,d=e.geometry,f=e.material,p=d.groups,m=d.index,h=t.intersectRay(scratchRay.origin,scratchRay.direction,0,u,t=>{var r;let o=t.index,s=o*3,u;if(Array.isArray(f)){if(p){for(let e of p)if(s>=e.start&&s-e.start<e.count){u=f[(r=e.materialIndex)==null?0:r];break}}}else u=f;if(!u)return!1;let d=t.intersectionPoint,h=new three.Vector3(d.x,d.y,d.z).applyMatrix4(c),g=n.ray.origin.distanceTo(h);if(g<n.near||g>n.far)return!1;let _=t.pointA,v=t.pointB,y=t.pointC,b=three.Triangle.getNormal(scratchIntersectionFaceA.set(_.x,_.y,_.z).applyMatrix4(c),scratchIntersectionFaceB.set(v.x,v.y,v.z).applyMatrix4(c),scratchIntersectionFaceC.set(y.x,y.y,y.z).applyMatrix4(c),new three.Vector3),S=n.ray.direction.dot(b);if(u.side===three.FrontSide&&S>=0||u.side===three.BackSide&&S<=0)return!1;let C={distance:g,object:e,face:new three.Face3(m?m.array[s]:s,m?m.array[s+1]:s+1,m?m.array[s+2]:s+2,b),point:h,distanceToRay:0,faceIndex:o};return intersectsMap.set(t,C),l(C)}),g=h.length;for(let e=0;e<g;e++){let t=intersectsMap.get(h[e]);t&&r.push(t)}h.length=0}function raycastPoints(e,t,n,r){var o,s,c,l;let u=e.matrixWorld;scratchNormalMatrix.getNormalMatrix(u),scratchInverseMatrix.getInverse(u),scratchRay.copy(n.ray).applyMatrix4(scratchInverseMatrix);let d=((s=(o=n.params.Points)==null?void 0:o.threshold)==null?1:s)*scratchInverseMatrix.getMaxScaleOnAxis(),f=(c=n.hitFilter)==null?defaultHitFilter:c,p=(l=n.firstHitOnly)==null?!1:l,m=e.geometry,h=m.index,g=m.getAttribute(`normal`),_=g instanceof three.BufferAttribute,v=t.intersectRay(scratchRay.origin,scratchRay.direction,d,p,t=>{let r=t.intersectionPoint,o=new three.Vector3(r.x,r.y,r.z).applyMatrix4(u),s=n.ray.origin.distanceTo(o);if(s<n.near||s>n.far)return!1;let c=t.pointA,l=scratchIntersectionFaceA.set(c.x,c.y,c.z).applyMatrix4(u),d=o.distanceTo(l);if(d/s>.07)return!1;let p=t.index,v=h?h.array[p]:p,y;if(_){let e=new three.Vector3().fromBufferAttribute(g,v).applyNormalMatrix(scratchNormalMatrix);y=new three.Face3(v,v,v,e)}else{let e=m.getAttribute(`scale`),t=m.getAttribute(`rotation`);if(e instanceof three.BufferAttribute&&t instanceof three.BufferAttribute){let r=new three.Vector3().fromBufferAttribute(e,v).toArray(),o=new three.Vector4().fromBufferAttribute(t,v).toArray(),s=new three.Quaternion(o[1],o[2],o[3],o[0]),[{axis:c}]=[{axis:`x`,scale:r[0]},{axis:`y`,scale:r[1]},{axis:`z`,scale:r[2]}].sort((e,t)=>e.scale-t.scale),l=new three.Vector3(0,0,0);l[c]=1,l.applyQuaternion(s).applyNormalMatrix(scratchNormalMatrix),n.ray.direction.dot(l)>0&&l.negate(),y=new three.Face3(v,v,v,l)}}let b={distance:s,object:e,face:y,point:o,distanceToRay:d,index:p};return intersectsMap.set(t,b),f(b)}),y=v.length;for(let e=0;e<y;e++){let t=intersectsMap.get(v[e]);t&&r.push(t)}v.length=0}var BVH_MESH_PROP=`__bvh_mesh__`,originMeshRaycast=three.Mesh.prototype.raycast;function overrideMeshRaycast(e,t){let n=getBvhTreeForMesh(this);n?raycastMesh(this,n,e,t):originMeshRaycast.call(this,e,t)}function getBvhTreeForMesh(e){let t=e[BVH_MESH_PROP];return t instanceof BVHMesh,t}function bindBvhTreeForMesh(e,t){Object.assign(e,{[BVH_MESH_PROP]:t,raycast:overrideMeshRaycast})}var BVH_POINTS_PROP=`__bvh_points__`,originPointsRaycast=three.Points.prototype.raycast;function overridePointsRaycast(e,t){let n=getBvhTreeForPoints(this);n?raycastPoints(this,n,e,t):originPointsRaycast.call(this,e,t)}function getBvhTreeForPoints(e){let t=e[BVH_POINTS_PROP];return t instanceof BVHPoints,t}function bindBvhTreeForPoints(e,t){Object.assign(e,{[BVH_POINTS_PROP]:t,raycast:overridePointsRaycast})}function generateBvhTree(e,t=!0,n=100,r=10){let o=[];return e.traverse(e=>{(e instanceof three.Mesh||e instanceof three.Points)&&e.geometry instanceof three.BufferGeometry&&o.push(e)}),t?Promise.resolve().then(()=>{let e=[],t=new Set,s=null;for(let c=0;c<o.length;c++){let l=o[c],u=l.geometry;if(!(u instanceof three.BufferGeometry))continue;let d;if(l instanceof three.Mesh?d=`mesh`:l instanceof three.Points&&(d=`points`),!d)continue;let f=u.boundingBox,p=f?[f.min.x,f.min.y,f.min.z,f.max.x,f.max.y,f.max.z]:void 0,m={};for(let e in u.attributes){let n=u.attributes[e];n instanceof three.InterleavedBufferAttribute?(m[e]={array:n.data.array,stride:n.data.stride,offset:n.offset},s=n.data.array,s&&s.buffer instanceof ArrayBuffer&&t.add(s.buffer)):(m[e]={array:n.array},s=n.array,s&&s.buffer instanceof ArrayBuffer&&t.add(s.buffer))}let h,g=u.getIndex();g&&(g instanceof three.InterleavedBufferAttribute?(h={array:g.data.array,stride:g.data.stride,offset:g.offset},s=g.data.array,s&&s.buffer instanceof ArrayBuffer&&t.add(s.buffer)):(h={array:g.array},s=g.array,s&&s.buffer instanceof ArrayBuffer&&t.add(s.buffer)));let _={type:d,attributes:m,indices:h,maxItemPerNode:n,maxTreeDepth:r,extents:p};e.push(_)}return bvhWorkerPool.postMessage(e,Array.from(t))}).then(t=>{for(let e=0;e<o.length;e++){let n=o[e],r=n.geometry,s=t[e];if(!(r instanceof three.BufferGeometry))continue;for(let e in s.attributes){let t=s.attributes[e].array,n=r.attributes[e];n instanceof three.InterleavedBufferAttribute?n.data.array=t:n.array=t}let c=r.getIndex();if(c&&s.indices){let e=s.indices.array;c instanceof three.InterleavedBufferAttribute?c.data.array=e:c.array=e}if(n instanceof three.Mesh){let e=new BVHMesh(s.attributes.position,s.indices);e.offsetArray=s.offsetArray,e.rootNodePacked=s.rootNodePacked,bindBvhTreeForMesh(n,e)}else if(n instanceof three.Points){let e=new BVHPoints(s.attributes.position,s.indices);e.offsetArray=s.offsetArray,e.rootNodePacked=s.rootNodePacked,bindBvhTreeForPoints(n,e)}}return e}):Promise.resolve().then(()=>{for(let e of o)if(e instanceof three.Mesh){let t=e.geometry,o=t.boundingBox,s=o?[o.min.x,o.min.y,o.min.z,o.max.x,o.max.y,o.max.z]:void 0;if(t instanceof three.BufferGeometry){let o,c,l=t.attributes.position;o=l instanceof three.InterleavedBufferAttribute?{array:l.data.array,stride:l.data.stride,offset:l.offset}:{array:l.array};let u=t.getIndex();u&&(c=u instanceof three.InterleavedBufferAttribute?{array:u.data.array,stride:u.data.stride,offset:u.offset}:{array:u.array});let d=new BVHMesh(o,c);d.createTree(n,r,s),bindBvhTreeForMesh(e,d)}}else if(e instanceof three.Points){let t=e.geometry,o=t.boundingBox,s=o?[o.min.x,o.min.y,o.min.z,o.max.x,o.max.y,o.max.z]:void 0;if(t instanceof three.BufferGeometry){let o,c,l=t.attributes.position;o=l instanceof three.InterleavedBufferAttribute?{array:l.data.array,stride:l.data.stride,offset:l.offset}:{array:l.array};let u=t.getIndex();u&&(c=u instanceof three.InterleavedBufferAttribute?{array:u.data.array,stride:u.data.stride,offset:u.offset}:{array:u.array});let d=new BVHPoints(o,c);d.createTree(n,r,s),bindBvhTreeForPoints(e,d)}}return e})}function mixNumber(e,t,n){return e+(t-e)*n}function value(e,t,n,r){let o=(t*n+2*e)/Math.pow(n,3),s=-(2*t*n+3*e)/Math.pow(n,2),c=t,l=e;return o*Math.pow(r,3)+s*Math.pow(r,2)+c*r+l}function velocity(e,t,n,r){let o=(t*n+2*e)/Math.pow(n,3),s=-(2*t*n+3*e)/Math.pow(n,2),c=t;return 3*o*Math.pow(r,2)+2*s*r+c}function mixCircle(e,t,n,r){let o=r[1]-r[0];return e=circleValue(e,r),t=circleValue(t,r),t-e>o/2?mixNumber(e+o,t,n):e-t>o/2?mixNumber(e-o,t,n):mixNumber(e,t,n)}function circleValue(e,t){let n=t[1]-t[0];return e<t[0]?circleValue(e+n,t):e>=t[1]?circleValue(e-n,t):e}function mixValue(e,t,n,r){return r?mixCircle(e,t,n,r):mixNumber(e,t,n)}function toNumber(e){let t=Number(e);return isNaN(t)||!isFinite(t)?0:t}var Motion=class{constructor(e){this.config={},this.progress=1,this.ended=!0,this.value={},this.startTime=now(),this.startVelocity=0,this.duration=0,this.keyframes=[];for(let t in e){let n=e[t];typeof n==`object`?(this.value[t]=toNumber(n.value),this.config[t]={circle:n.circle}):(this.value[t]=toNumber(n),this.config[t]={circle:!1})}this.keyframes=[{progress:0,value:Object.assign({},this.value)},{progress:1,value:Object.assign({},this.value)}]}getProgress(e){let t=e-this.startTime;return t<0?0:t>=this.duration?1:1-value(1,this.startVelocity,this.duration,t)}getValue(e){for(let t=1;t<this.keyframes.length;t++)if(this.keyframes[t].progress>e){let n=this.keyframes[t-1],r=this.keyframes[t],o={};for(let t in this.config){let s=(e-n.progress)/(r.progress-n.progress);o[t]=mixValue(n.value[t],r.value[t],s,this.config[t].circle)}return o}return Object.assign({},this.keyframes[this.keyframes.length-1].value)}getProgressVelocity(e){let t=e-this.startTime;return t>=this.duration?0:velocity(1,this.startVelocity,this.duration,t)}update(e){return this.ended?!0:(this.progress=Math.min(1,Math.max(0,this.progress,this.getProgress(e))),this.value=this.getValue(this.progress),this.ended=this.progress>=1,this.ended&&this.callbacks&&(this.callbacks[0](),this.callbacks=void 0),this.ended)}getKeyFrameSegment(e){let t=this.getProgress(e);for(let e=1;e<this.keyframes.length;e++)if(this.keyframes[e].progress>t)return[this.keyframes[e-1],this.keyframes[e]];return[this.keyframes[this.keyframes.length-2],this.keyframes[this.keyframes.length-1]]}getTargetKeyframe(){return this.keyframes[this.keyframes.length-1]}set(e,t,n=0,r){var o;isNaN(t)&&(t=0),isNaN(n)&&(n=0),r=r==null?now():r;let s=this.getProgress(r),c=this.getValue(s),l={};for(let t in this.config)l[t]=(o=e[t])==null?c[t]:o;let u=[{progress:0,value:c},{progress:1,value:l}];return this.setKeyframes(u,t,n,r)}setKeyframes(e,t,n=0,r){if(e.length<2)throw Error(`keyframes invalid.`);return isNaN(t)&&(t=0),isNaN(n)&&(n=0),this.callbacks&&(this.callbacks[1](Error(`motion aborted.`)),this.callbacks=void 0),new Promise((o,s)=>{r=r==null?now():r,this.progress=0,this.ended=!1,this.startTime=r,this.startVelocity=n,this.keyframes=e,this.duration=t,t===0?(this.progress=1,this.value=Object.assign({},e[e.length-1].value)):this.value=Object.assign({},e[0].value),this.callbacks=[o,s]})}dispose(){this.callbacks&&(this.callbacks[1](Error(`motion dispose.`)),this.callbacks=void 0)}},PI$1=Math.PI,c1=1.70158,c2=c1*1.525,c3=c1+1,c4=2*PI$1/3,c5=2*PI$1/4.5,linear=function(e){return e},easeInCubic=function(e){return e*e*e},easeInQuart=function(e){return e*e*e*e},APPEAR_ANIMATION_DURATION=500,parameterValueVersionMap$1=new WeakMap,scratchIntersectPoint=new three.Vector3,scratchClippingBoxMatrixInverse=new three.Matrix4,TileNode=class e extends three.Object3D{constructor(e,t,n,r=noop){super(),this.name=e,this.materials=[],this.pbmObjects=[],this.contentObject=t,this.animations=n,this.appearMotion=new Motion({appear:0}),this.disposers=[r],this.add(t),t.traverse(e=>{if(e instanceof three.Mesh||e instanceof three.Points){let t=e.material;if(Array.isArray(t))for(let e=0;e<t.length;e++)this.materials.push(t[e]);else this.materials.push(t)}(e instanceof PBMMesh||e instanceof PBMSkinnedMesh||e instanceof PBMPointCloud||e instanceof PBMGaussianSplattingObject)&&this.pbmObjects.push(e)})}generateBvhTree(){return generateBvhTree(this,!0,200,20)}intersectRaycaster(e,t){let n=t==null?[]:t,r=e.hitFilter;e.hitFilter=t=>{if(t.object instanceof PBMPointCloud&&t.object.material.pointBack===`HIDDEN`&&t.face&&t.face.normal.angleTo(e.ray.direction)<Math.PI/2)return!1;let n=0,o=-1;if((t.object instanceof PBMMesh||t.object instanceof PBMSkinnedMesh||t.object instanceof PBMPointCloud)&&t.face){let e=Array.isArray(t.object.material)?t.object.material[t.face.materialIndex]:t.object.material;if(e){n=e.floorIndex,o=e.shownFloorIndex;for(let r of e.clippers)if(!(typeof r.floorIndex==`number`&&r.floorIndex!==n)&&(scratchClippingBoxMatrixInverse.getInverse(r.clippingBoxMatrix),scratchIntersectPoint.copy(t.point).applyMatrix4(scratchClippingBoxMatrixInverse),Math.abs(scratchIntersectPoint.x)<.5&&Math.abs(scratchIntersectPoint.y)<.5&&Math.abs(scratchIntersectPoint.z)<.5))return!1}}let s=o;return e.floorIndex===void 0?e.floor!==void 0&&(s=e.floor===null?-1:e.floor):s=e.floorIndex,s>=0&&n!==s?!1:(Object.assign(t,{floorIndex:n,floor:n}),r?r.call(e,t):!0)};let o=this.children.slice(),s;for(;s=o.pop();)if(s.visible){s.raycast(e,n);for(let e=0,t=s.children.length;e<t;e++)o.push(s.children[e])}return e.hitFilter=r,sortIntersects(n,e.sortByDistance,e.firstHitOnly),n}update(e,t,n,r,o,s){let c=!1;if(r.visible&&o.state.selectedFrameNumber===o.tileset.frameNumber){let e=1;this.appearMotion.getTargetKeyframe().value.appear!==1&&this.appearMotion.set({appear:1},APPEAR_ANIMATION_DURATION).catch(noop)}else{let e=0;this.appearMotion.getTargetKeyframe().value.appear!==0&&this.appearMotion.set({appear:0},0).catch(noop)}this.appearMotion.ended!==!0&&this.appearMotion.update(t.time);for(let l of this.pbmObjects)l instanceof PBMMesh||l instanceof PBMSkinnedMesh?updatePBMMesh(l,this.appearMotion,e,t,n,o,s)===!0&&(c=!0):l instanceof PBMPointCloud?updatePBMPointCloud(l,this.appearMotion,e,t,n,o,s)===!0&&(c=!0):l instanceof PBMGaussianSplattingObject&&updatePBMGSObject(l,this.appearMotion,e,t,n,r,o,s)===!0&&(c=!0);return c}dispose(){for(let e of this.disposers)e();this.disposers.length=0,this.pbmObjects.length=0}clone(){return new e(this.name,this.contentObject.clone(),this.animations)}};function updatePBMMesh(e,t,n,r,o,s,c){var l,u;let d=!1;if(parameterValueVersionMap$1.get(e)!==c.versionNumber){parameterValueVersionMap$1.set(e,c.versionNumber),d=!0,e.castShadow=c.castShadow,e.receiveShadow=c.receiveShadow;let t=e.material;for(let e of t)e.customShaders=c.customShaders,e.pano0=c.pano0,e.pano1=c.pano1,e.pano0Depth=c.pano0Depth,e.pano1Depth=c.pano1Depth,e.panoFilter=(u=(l=c.panoFilter)==null?void 0:l.toValue())==null?null:u,e.refinedScreen=c.refinedScreen,e.modelAlpha=c.modelAlpha,e.progress=c.progress,e.transition=c.transition,e.opacity=c.opacity,e.floorStyle=c.floorStyle,e.constantColor=c.constantColor,e.shownFloorIndex=c.shownFloorIndex,e.clippers=c.clippers,e.brightness=c.brightness,e.useHQWeight=c.useHQWeight,e.useHQDepth=c.useHQDepth,e.colorSaturation=c.colorSaturation,e.colorBrightness=c.colorBrightness,e.gradientTexture=c.gradientTexture,e.vertexMarks=c.vertexMarks,e.modelBoundingMax.copy(c.boundingBox.max),e.modelBoundingMin.copy(c.boundingBox.min),e.shaderType===`none`?(e.transparent=!0,e.blending=three.NormalBlending,e.blendDst=three.OneMinusSrcAlphaFactor,e.blendEquation=three.AddEquation,e.blendSrcAlpha=null,e.blendDstAlpha=null,e.blendEquationAlpha=null,e.depthWrite=!1,e.depthTest=!0):(e.transparent=e.alphaMode===`BLEND`,e.blending=three.NormalBlending,e.blendDst=three.OneMinusSrcAlphaFactor,e.blendEquation=three.AddEquation,e.blendSrcAlpha=null,e.blendDstAlpha=null,e.blendEquationAlpha=null,e.depthWrite=!0,e.depthTest=!0,c.useAddBlend&&(e.depthWrite=!1,e.depthTest=!1,e.blending=three.AdditiveBlending),e.shownFloorIndex>-1&&e.shownFloorIndex!==e.floorIndex&&(e.transparent=!0),e.opacity<1&&(e.transparent=!0),e.alphaMap&&(e.transparent=!0),e.brightness<1&&(e.transparent=!0),e.modelAlpha<=0&&(e.transparent=!1),e.depthWrite=!e.transparent,c.useAddBlend&&(e.depthWrite=!1,e.depthTest=!1,e.blending=three.AdditiveBlending))}return d}function updatePBMPointCloud(e,t,n,r,o,s,c){var l,u;let d=!1;if(c.pointAppearAnimation===!0&&s.refine===`ADD`&&s.tileset.rootMeta.pntsOrder===`RANDOM`){let n=e.geometry,r=s.tileset.currentMaxScreenSpaceError,o=s.state.screenSpaceError,c=(u=(l=s.parent)==null?void 0:l.state.screenSpaceError)==null?o:u,f=1;c!==o&&(f=(c-r)/(c-o)),f=clamp$1(f,0,1),f=easeInCubic(f);let p=n.index?n.index.count:n.attributes.position?n.attributes.position.count:1/0,m=Math.floor(p*f*t.value.appear);n.drawRange.count!==m&&(n.setDrawRange(0,m),d=!0)}if(parameterValueVersionMap$1.get(e)!==c.versionNumber){parameterValueVersionMap$1.set(e,c.versionNumber),d=!0,e.castShadow=c.castShadow,e.receiveShadow=c.receiveShadow;let t=[e.material];for(let e of t)e.customShaders=c.customShaders,e.pointScale=c.pointScale,e.pointMinPixel=c.pointMinPixel,e.pointMaxPixel=c.pointMaxPixel,e.pointSize=c.pointSize,e.pointShape=c.pointShape,e.pointBack=c.pointBack,e.modelAlpha=c.modelAlpha,e.opacity=c.opacity,e.floorStyle=c.floorStyle,e.constantColor=c.constantColor,e.shownFloorIndex=c.shownFloorIndex,e.clippers=c.clippers,e.brightness=c.brightness,e.useHQWeight=c.useHQWeight,e.useHQDepth=c.useHQDepth,e.colorSaturation=c.colorSaturation,e.colorBrightness=c.colorBrightness,e.outlineGain=c.outlineGain,e.distanceGain=c.distanceGain,e.gradientTexture=c.gradientTexture,e.transparent=!1,e.blending=three.NormalBlending,e.blendDst=three.OneMinusSrcAlphaFactor,e.blendEquation=three.AddEquation,e.blendSrcAlpha=null,e.blendDstAlpha=null,e.blendEquationAlpha=null,e.colorWrite=!0,e.depthWrite=!0,e.depthTest=!0,e.modelBoundingMax.copy(c.boundingBox.max),e.modelBoundingMin.copy(c.boundingBox.min),e.shownFloorIndex>-1&&(e.transparent=e.shownFloorIndex!==e.floorIndex),e.modelAlpha<1&&(e.transparent=!0),e.opacity<1&&(e.transparent=!0),e.brightness<1&&(e.transparent=!0),c.useAddBlend&&(e.depthWrite=!1,e.depthTest=!1,e.blending=three.AdditiveBlending),e.useHQWeight&&(e.depthWrite=!1,e.blending=three.CustomBlending,e.blendSrc=three.SrcAlphaFactor,e.blendSrcAlpha=three.SrcAlphaFactor,e.blendDst=three.OneFactor,e.blendDstAlpha=three.OneFactor),e.useHQDepth&&(e.colorWrite=!1)}return d}function updatePBMGSObject(e,t,n,r,o,s,c,l){let u=!1,d=s.uuid;return e.gsViewLayerKey!==d&&(e.gsViewLayerKey=d,u=!0),e.gsClippers!==l.clippers&&(e.gsClippers=l.clippers,u=!0),e.updateMatrix(),e.updateMatrixWorld(),e.usedSHDegree=l.gaussianSplattingSHDegree,e.lastMatrixWorld?e.transformChanged=!e.lastMatrixWorld.equals(e.matrixWorld):(e.lastMatrixWorld=new three.Matrix4,e.transformChanged=!0,u=!0),e.lastMatrixWorld.copy(e.matrixWorld),e.transformChanged&&(u=!0),u}var Trajectory=class{constructor(e,t,n){this.id=e,this.name=t.name,this.visible=!1,this.tileset=n,this.transform=new three.Matrix4,t.transform&&this.transform.fromArray(t.transform),this.transform.premultiply(this.tileset.root.transform),this.content={uri:t.file,byteLength:0,memoryUsage:0,loadState:`UNLOADED`,loadProgress:0,loadStateUpdateTime:now(),loadfailRetryDelay:0,data:void 0}}},TrajectoryNode=class e extends three.Object3D{constructor(e,t,n=noop){super(),this.name=e,this.contentObject=t,this.name=e,this.add(t),this.disposers=[n]}update(e,t,n,r,o,s){let c=this.contentObject.material[2];return c.uniforms.dashOffset.value=(c.uniforms.dashOffset.value-.003)%(c.uniforms.dashSize.value.x+c.uniforms.dashSize.value.y),!0}dispose(){for(let e of this.disposers)e();this.disposers.length=0}clone(){return new e(this.name,this.contentObject.clone())}},priorityCache=new Map;function getPriority(e,t,n){if(n&&n.has(t))return n.get(t);let r=t.refine===`ADD`||e.skipLevelOfDetail,o=t.parent,s=o&&(!r||t.state.screenSpaceError===0)?o.state.screenSpaceError:t.state.screenSpaceError,c=t.tileset.root?t.tileset.root.state.screenSpaceError:0,l=Math.max(c-s,0);return n&&n.set(t,l),l}var TileRequestScheduler=class{constructor(e,t){this.tileset=e,this.options=t,this.activeRequests=0,this.requestQueue=[]}reset(){for(let e of this.requestQueue)this.options.onTileSkip&&(e.tile.content&&this.tileset.options.tileUnloader(e.tile),this.options.onTileSkip(e.tile));this.requestQueue.length=0}update(e,t,n){let r=n.time,o=this.requestQueue,s=new Set(e);for(let e=0;e<o.length;e++){let t=o[e];if(s.has(t.tile)){s.delete(t.tile);continue}t.status===`WAITING`&&(o.splice(e,1),e--,this.options.onTileSkip&&this.options.onTileSkip(t.tile))}s.size>0&&(s.forEach(e=>{o.push({tile:e,status:`WAITING`,time:r,error:null})}),s.clear());let c=n.maxRequests;for(let e=0;e<o.length&&c>0;e++){let t=o[e];if(t.status===`DONE`)t.error===null?(c--,t.tile.content&&(t.tile.content.loadState=`READY`),this.options.onTileLoad&&this.options.onTileLoad(t.tile)):this.options.onTileError&&this.options.onTileError(t.tile,t.error),o.splice(e,1),e--;else if(t.status===`PENDING`&&r-t.time<1e3)break}switch(priorityCache.clear(),t){case`SCREEN_SPACE_ERROR`:o.sort((e,t)=>e.tile.state.requestedFrameNumber===t.tile.state.requestedFrameNumber?e.tile.state.requestedFrameNumber===n.frameNumber?getPriority(n,e.tile,priorityCache)-getPriority(n,t.tile,priorityCache):e.tile.level===t.tile.level?e.tile.state.distanceToCamera-t.tile.state.distanceToCamera:e.tile.level-t.tile.level:t.tile.state.requestedFrameNumber-e.tile.state.requestedFrameNumber);break;case`SCREEN_VERTICAL`:o.sort((e,t)=>e.tile.state.requestedFrameNumber===t.tile.state.requestedFrameNumber?e.tile.state.requestedFrameNumber===n.frameNumber?e.tile.state.centerScreenY===t.tile.state.centerScreenY?e.tile.state.centerZDepth===t.tile.state.centerZDepth?e.tile.level===t.tile.level?e.tile.state.distanceToCamera-t.tile.state.distanceToCamera:e.tile.level-t.tile.level:e.tile.state.centerZDepth-t.tile.state.centerZDepth:e.tile.state.centerScreenY-t.tile.state.centerScreenY:e.tile.level===t.tile.level?e.tile.state.distanceToCamera-t.tile.state.distanceToCamera:e.tile.level-t.tile.level:t.tile.state.requestedFrameNumber-e.tile.state.requestedFrameNumber);break;case`SCREEN_LEVEL_VERTICAL`:o.sort((e,t)=>e.tile.state.requestedFrameNumber===t.tile.state.requestedFrameNumber?e.tile.state.requestedFrameNumber===n.frameNumber?e.tile.level===t.tile.level?e.tile.state.centerScreenY===t.tile.state.centerScreenY?e.tile.state.centerZDepth===t.tile.state.centerZDepth?e.tile.state.distanceToCamera-t.tile.state.distanceToCamera:e.tile.state.centerZDepth-t.tile.state.centerZDepth:e.tile.state.centerScreenY-t.tile.state.centerScreenY:e.tile.level-t.tile.level:e.tile.level===t.tile.level?e.tile.state.distanceToCamera-t.tile.state.distanceToCamera:e.tile.level-t.tile.level:t.tile.state.requestedFrameNumber-e.tile.state.requestedFrameNumber);break;default:break}if(c=Math.max(n.maxRequests-this.activeRequests,0),!n.skipLevelOfDetail){let e=0,t=o.length;for(let r=0;r<t;r++){let t=o[r].tile;if(t.hasTilesetContent||t.contentParent===null||t.contentParent.state.selectedFrameNumber===n.frameNumber){let t=o.splice(r,1);o.splice(e++,0,...t)}}}for(let e=0;e<o.length&&c>0;e++){let t=o[e];t.status===`WAITING`&&(c--,t.status=`PENDING`,t.time=r,this.activeRequests++,this.tileset.options.tileLoader(t.tile).catch(e=>{t.error=e}).then(()=>{t.status=`DONE`,t.tile.content&&t.tile.content.loadState===`READY`&&(t.tile.content.loadState=`LOADING`),this.activeRequests--}))}}},CacheNode=class{constructor(e,t,n){this.item=e,this.previous=t,this.next=n}},CacheNodeList=class{constructor(){this.head=null,this.tail=null,this._length=0}get length(){return this._length}add(e){let t=new CacheNode(e,this.tail,null);return this.tail?(this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),this._length++,t}remove(e){e.previous&&e.next?(e.previous.next=e.next,e.next.previous=e.previous):e.previous?(e.previous.next=null,this.tail=e.previous):e.next?(e.next.previous=null,this.head=e.next):(this.head=null,this.tail=null),e.next=null,e.previous=null,this._length--}splice(e,t){e!==t&&(this.remove(t),this.insert(e,t))}insert(e,t){let n=e.next;e.next=t,this.tail===e?this.tail=t:n.previous=t,t.next=n,t.previous=e,this._length++}toArray(){let e=[],t=this.head;for(;t;)e.push(t),t=t.next;return e}},TileCache=class{constructor(e={}){this.options=e,this.cacheNodeMap=new WeakMap,this.list=new CacheNodeList,this.sentinel=this.list.add(`sentinel`)}reset(){this.list.tail&&this.list.splice(this.list.tail,this.sentinel)}touchTile(e){let t=this.cacheNodeMap.get(e);t&&this.list.splice(this.sentinel,t)}loadTile(e){if(!this.cacheNodeMap.has(e)){let t=this.list.add(e);this.cacheNodeMap.set(e,t),this.options.onTileLoad&&this.options.onTileLoad(e)}}unloadTile(e){let t=this.cacheNodeMap.get(e);t&&(this.list.remove(t),this.cacheNodeMap.delete(e),this.options.onTileUnload&&this.options.onTileUnload(e))}unloadTiles(e){let t=this.list.head;for(;t!==this.sentinel&&e();){let e=t.item;t=t.next,this.unloadTile(e)}}toArray(){let e=[];for(let t of this.list.toArray())t.item!==`sentinel`&&e.push(t.item);return e}},ManagedArray=class{constructor(){this.map=new Map,this.array=[],this._length=0}get length(){return this._length}get(e){return this.array[e]}set(e,t){e>=this.length&&(this._length=e+1),this.map.has(this.array[e])&&this.map.delete(this.array[e]),this.array[e]=t,this.map.set(t,e)}delete(e){let t=this.map.get(e);t!==void 0&&t>=0&&(this.array.splice(t,1),this.map.delete(e),this._length--)}push(e){if(!this.map.has(e)){let t=this._length++;this.array[t]=e,this.map.set(e,t)}}pop(){let e=this.array[--this._length];return this.map.delete(e),this.array[this._length]=void 0,e}reset(){this.array=[],this.map=new Map,this._length=0}find(e){return this.map.has(e)}peek(){return this.array[this._length-1]}},TilesetBaseTraverser=class{constructor(e){this.tileset=e,this._canSelectTile=!0,this._loadAllTilesTraversalStack=new ManagedArray}traverse(e,t,n=[]){this.reset()}reset(){this._loadAllTilesTraversalStack.reset(),this.tileset.hasMixedContent=!1,this.tileset.needsRefinedTiles.clear(),this.tileset.requestedTiles.length=0,this.tileset.selectedTiles.length=0}updateTile(e,t){this.updateTileVisibility(e,t),e.state.shouldSelect=!1,e.state.finalResolution=!0}selectTile(e,t){this._canSelectTile&&e.contentAvailable&&e.state.selectedFrameNumber<t.frameNumber&&(e.state.selectedFrameNumber=t.frameNumber,this.tileset.selectedTiles.push(e),this.tileset.needsRefinedTiles.add(e))}loadTile(e,t){this._canSelectTile&&(e.state.requestedFrameNumber<t.frameNumber&&(e.state.requestedFrameNumber=t.frameNumber,e.content&&(e.content.loadState===`FAILED`&&t.time-e.content.loadStateUpdateTime>e.content.loadfailRetryDelay&&(e.content.loadState=`UNLOADED`,e.content.loadProgress=0,e.content.loadStateUpdateTime=t.time),e.content.loadState===`UNLOADED`&&this.tileset.requestedTiles.push(e))),this.tileset.needsRefinedTiles.add(e))}touchTile(e,t){this._canSelectTile&&(this.tileset.cache.touchTile(e),e.state.touchedFrameNumber=t.frameNumber)}canTraverse(e,t){return!e.state.inRequestVolume||e.hasRenderContent&&(e.levelOfContent>=t.maxLevelOfDetail||e.levelOfContent>=0&&e.geometricError<=t.minGeometricError)||e.children.length===0?!1:e.levelOfContent<t.minLevelOfDetail||e.geometricError>=t.maxGeometricError||e.hasTilesetContent?!0:e.state.screenSpaceError>this.tileset.currentMaxScreenSpaceError}updateTileVisibility(e,t){if(e.updateState(t),!e.state.visible||!e.state.inRequestVolume)return;let n=e.children.length>0;if(e.hasTilesetContent&&n){let n=e.children[0];this.updateTileVisibility(n,t),e.state.visible=n.state.visible;return}if(this.meetsScreenSpaceErrorEarly(e,t)){e.state.visible=!1;return}if(e.refine===`REPLACE`&&n&&!this.anyChildrenVisible(e,t)){e.state.visible=!1;return}}anyChildrenVisible(e,t){let n=!1,r=e.children;for(let e of r)e.updateState(t),n=n||e.state.visible;return n}meetsScreenSpaceErrorEarly(e,t){let{parent:n}=e;return!n||n.refine!==`ADD`||n.levelOfContent<t.minLevelOfDetail||n.geometricError>t.maxGeometricError?!1:n.levelOfContent>t.maxLevelOfDetail||n.levelOfContent>=0&&n.geometricError<t.minGeometricError?!0:e.getScreenSpaceError(t,e.state.distanceToCamera,!0)<this.tileset.currentMaxScreenSpaceError}sortTilesByDistanceToCamera(e){e.sort((e,t)=>t.state.distanceToCamera===0&&e.state.distanceToCamera===0?t.state.centerZDepth-e.state.centerZDepth:t.state.distanceToCamera-e.state.distanceToCamera)}},TilesetNormalTraverser=class extends TilesetBaseTraverser{constructor(e){super(e),this._traversalStack=new ManagedArray,this._emptyTraversalStack=new ManagedArray}traverse(e,t,n=[]){super.traverse(e,t,n);for(let t of n)this._traversalStack.reset(),this._emptyTraversalStack.reset(),t.camera.refine&&(this._canSelectTile=t.camera.visible,this.updateTile(e,t),this.executeTraversal(e,t));this._traversalStack.reset(),this._emptyTraversalStack.reset(),t.camera.refine&&(this._canSelectTile=t.camera.visible,this.updateTile(e,t),this.executeTraversal(e,t))}reset(){super.reset(),this._traversalStack.reset(),this._emptyTraversalStack.reset()}executeTraversal(e,t){let n=this._traversalStack;for(e.state.visible&&e.state.inRequestVolume&&n.push(e);n.length>0;){let e=n.pop(),r=e.parent,o=!r||r.state.shouldRefine,s=!1;this.canTraverse(e,t)&&(s=this.updateAndPushChildren(e,t,n)&&o);let c=!s&&o;e.hasRenderContent?e.refine===`ADD`?(this.loadTile(e,t),this.selectDesiredTile(e,t)):e.refine===`REPLACE`&&(this.loadTile(e,t),c&&this.selectDesiredTile(e,t)):(this.loadTile(e,t),c&&this.selectDesiredTile(e,t)),this.touchTile(e,t),e.state.shouldRefine=s}}updateAndPushChildren(e,t,n){let r=e.children;for(let e of r)this.updateTile(e,t);this.sortTilesByDistanceToCamera(r);let o=e.refine===`REPLACE`&&e.hasRenderContent,s=!1,c=!0;for(let e of r)if(e.levelOfContent<=t.minLevelOfDetail||e.geometricError>=t.maxGeometricError||e.state.visible&&e.state.inRequestVolume?(n.find(e)&&n.delete(e),n.push(e),s===!1&&(s=!0)):(o||t.loadSiblings)&&(this.loadTile(e,t),this.touchTile(e,t)),o){let n;n=e.state.inRequestVolume?e.hasRenderContent?e.contentAvailable:this.executeEmptyTraversal(e,t):!1,c=c&&n}return s||(c=!1),c}selectDesiredTile(e,t){e.contentAvailable&&super.selectTile(e,t)}executeEmptyTraversal(e,t){let n=!0,r=this._emptyTraversalStack;for(r.push(e);r.length>0&&n;){let e=r.pop(),o=!e.hasRenderContent&&this.canTraverse(e,t);if(!o&&!e.contentAvailable&&(n=!1),this.updateTile(e,t),e.state.visible||(this.loadTile(e,t),this.touchTile(e,t)),o){let t=e.children;for(let e of t)r.find(e)&&r.delete(e),r.push(e)}}return n}},TilesetSkipTraverser=class extends TilesetBaseTraverser{constructor(e){super(e),this.baseScreenSpaceError=1024,this.skipScreenSpaceErrorFactor=16,this.skipLevels=1,this._traversalStack=new ManagedArray,this._descendantTraversalStack=new ManagedArray,this._selectionTraversalStack=new ManagedArray,this._selectionTraversalancestorStack=new ManagedArray}traverse(e,t,n=[]){super.traverse(e,t,n);for(let t of n)this._traversalStack.reset(),t.camera.refine&&(this._canSelectTile=t.camera.visible,this.updateTile(e,t),this.executeTraversal(e,t),this.traverseAndSelect(e,t));this.tileset.hasMixedContent=!1,this._traversalStack.reset(),this._descendantTraversalStack.reset(),this._selectionTraversalStack.reset(),this._selectionTraversalancestorStack.reset(),t.camera.refine&&(this._canSelectTile=t.camera.visible,this.updateTile(e,t),this.executeTraversal(e,t),this.traverseAndSelect(e,t))}reset(){super.reset(),this._traversalStack.reset(),this._descendantTraversalStack.reset(),this._selectionTraversalStack.reset(),this._selectionTraversalancestorStack.reset()}executeTraversal(e,t){let n=this._traversalStack;for(e.state.visible&&e.state.inRequestVolume&&n.push(e);n.length>0;){let e=n.pop();this.updateTileAncestorContentLinks(e,t);let r=e.parent,o=!r||r.state.shouldRefine,s=!1;this.canTraverse(e,t)&&(s=this.updateAndPushChildren(e,t,n)&&o);let c=!s&&o;e.hasRenderContent?e.refine===`ADD`?(this.loadTile(e,t),this.selectDesiredTile(e,t)):e.refine===`REPLACE`&&(this.inBaseTraversal(e,this.baseScreenSpaceError)?(this.loadTile(e,t),c&&this.selectDesiredTile(e,t)):c?(this.loadTile(e,t),this.selectDesiredTile(e,t)):this.reachedSkippingThreshold(e)&&this.loadTile(e,t)):(this.loadTile(e,t),c&&this.selectDesiredTile(e,t)),this.touchTile(e,t),e.state.shouldRefine=s}}updateAndPushChildren(e,t,n){let r=e.children;for(let e of r)this.updateTile(e,t);this.sortTilesByDistanceToCamera(r);let o=!1;for(let e of r)e.levelOfContent<=t.minLevelOfDetail||e.geometricError>=t.maxGeometricError||e.state.visible&&e.state.inRequestVolume?(n.push(e),o===!1&&(o=!0)):t.loadSiblings&&(this.loadTile(e,t),this.touchTile(e,t));return o}selectDesiredTile(e,t){let n=e.contentAvailable?e:e.state.ancestorWithContentAvailable;n&&(n.state.shouldSelect=!0),e.contentAvailable||this.selectDescendants(e,t)}selectDescendants(e,t){let n=this._descendantTraversalStack;for(n.push(e);n.length>0;){let e=n.pop().children;for(let r of e)r.state.visible&&(r.contentAvailable?(this.updateTile(r,t),this.touchTile(r,t),this.selectTile(r,t)):n.push(r))}}reachedSkippingThreshold(e){let t=e.state.ancestorWithContent;return t!==null&&e.state.screenSpaceError<t.state.screenSpaceError/this.skipScreenSpaceErrorFactor&&e.levelOfContent>t.levelOfContent+this.skipLevels}updateTileAncestorContentLinks(e,t){e.state.ancestorWithContent=null,e.state.ancestorWithContentAvailable=null;let{parent:n}=e;if(!n)return;let r=!(n.hasRenderContent&&n.hasUnloadedContent)||n.state.requestedFrameNumber===t.frameNumber;e.state.ancestorWithContent=r?n:n.state.ancestorWithContent,e.state.ancestorWithContentAvailable=n.contentAvailable?n:n.state.ancestorWithContentAvailable}inBaseTraversal(e,t){return e.state.ancestorWithContent?e.parent&&e.state.screenSpaceError===0?e.parent.state.screenSpaceError>t:e.state.screenSpaceError>t:!0}traverseAndSelect(e,t){let n=this._selectionTraversalStack,r=this._selectionTraversalancestorStack,o;for(n.push(e);n.length>0||r.length>0;){if(r.length>0){let e=r.peek();if(e.state.stackLength===n.length){r.pop(),e!==o&&(e.state.finalResolution=!1),this.selectTile(e,t);continue}}let e=n.pop();if(!e)continue;let s=this.canTraverse(e,t);if(e.state.shouldSelect)if(e.refine===`ADD`)this.selectTile(e,t);else{if(e.state.selectionDepth=r.length,e.state.selectionDepth>0&&(e.tileset.hasMixedContent=!0),o=e,!s){this.selectTile(e,t);continue}r.push(e),e.state.stackLength=n.length}if(s)for(let t of e.children)t.state.visible&&n.push(t)}}},TilesetMostDetailTraverser=class extends TilesetBaseTraverser{constructor(e){super(e),this._traversalStack=new ManagedArray}canTraverse(e,t){return!(!e.state.inRequestVolume||e.levelOfContent>=t.maxLevelOfDetail||e.levelOfContent>=0&&e.geometricError<=t.minGeometricError||e.children.length===0)}traverse(e,t,n){super.traverse(e,t,[]),this._traversalStack.reset(),e.updateState(t);for(let t of n)this._traversalStack.reset(),t.camera.refine&&(this._canSelectTile=t.camera.visible,e.updateState(t),this.executeTraversal(e,t));this._traversalStack.reset(),t.camera.refine&&(this._canSelectTile=t.camera.visible,e.updateState(t),this.executeTraversal(e,t))}reset(){super.reset(),this._traversalStack.reset()}executeTraversal(e,t){let n=this._traversalStack;for(n.push(e);n.length>0;){let e=n.pop(),r=e.refine===`ADD`,o=e.refine===`REPLACE`,s=this.canTraverse(e,t);s&&this.updateAndPushChildren(e,t,n),(r||o&&!s)&&(this.loadTile(e,t),this.touchTile(e,t),this.selectDesiredTile(e,t))}}updateAndPushChildren(e,t,n){let{children:r}=e;for(let e=0;e<r.length;++e){let o=r[e];o.updateState(t),o.state.visible&&n.push(o)}}selectDesiredTile(e,t){e.contentAvailable&&super.selectTile(e,t)}},Tileset=class{constructor(e,t){var n,r,o,s,c,l,u;if(this.id=e.tilesetUrl,this.transform=new three.Matrix4,this.hasMixedContent=!1,this.frameNumber=0,this.asset={version:e.asset.version,tilesetVersion:e.asset.tilesetVersion||``,gltfUpAxis:(n=e.asset.gltfUpAxis)==null?`Y`:n,overview:e.asset.overview,trajectories:(o=(r=e.asset.trajectories)==null?void 0:r.list)==null?[]:o,extras:e.asset.extras},this.rootMeta=(s=e.rootMeta)==null?{}:s,this.pointLength=(c=this.rootMeta.numTotalPoints)==null?1/0:c,this.floorLength=(l=this.rootMeta.numFloors)==null?1:l,this.properties=(u=e.properties)==null?{}:u,this.options=t,this.requestedTiles=[],this.selectedTiles=[],this.unloadTiles=[],this.needsRefinedTiles=new Set,this.selectedTrajectories=[],this.normalTraverser=new TilesetNormalTraverser(this),this.skipTraverser=new TilesetSkipTraverser(this),this.mostDetailTraverser=new TilesetMostDetailTraverser(this),this.cache=new TileCache({onTileLoad:e=>{this.cacheMemoryUsageInBytes+=e.contentMemoryUsage},onTileUnload:e=>{this.cacheMemoryUsageInBytes-=e.contentMemoryUsage,this.unloadTiles.push(e)}}),this.requestScheduler=new TileRequestScheduler(this,{onTileSkip:e=>{},onTileLoad:e=>{var t;(t=e.content)!=null&&t.data&&(this.loadedTiles.add(e),this.cache.loadTile(e)),this.options.onTileLoad(e)},onTileError:(e,t)=>{this.options.onTileError(e,t)}}),this.loadedTiles=new Set,this.cacheMemoryUsageInBytes=0,this.currentMaxScreenSpaceError=NaN,this.root=new Tile(`${this.id}#tile:0`,e.root,this),this.geometricError=e.geometricError,this.trajectories=[],this.asset.trajectories)for(let e=0;e<this.asset.trajectories.length;e++){let t=new Trajectory(`${this.id}#trajectory:${e}`,this.asset.trajectories[e],this);this.trajectories.push(t)}}adjustScreenSpaceError(e){if((isNaN(this.currentMaxScreenSpaceError)||!isFinite(this.currentMaxScreenSpaceError))&&(this.currentMaxScreenSpaceError=e.maxScreenSpaceError),e.memoryAdjustedScreenSpaceError){let t=0,n=0,r=0;if(this.needsRefinedTiles.forEach(e=>{e.content&&(n++,t+=e.content.memoryUsage,e.content.loadState===`READY`&&r++)}),r<2||n<2)this.currentMaxScreenSpaceError=e.maxScreenSpaceError;else{let o=1024*1024,s=t/r*n,c=e.maxMemoryUsage*o,l=c-clamp$1(c*.1,8*o,64*o),u=this.currentMaxScreenSpaceError;if(s<l){let e=.5*(1-s/l);u-=e}else s>c&&(u+=.3);u=clamp$1(u,1,e.maxScreenSpaceError),Math.abs(u-this.currentMaxScreenSpaceError)>=.1&&(this.currentMaxScreenSpaceError=u)}}else this.currentMaxScreenSpaceError=e.maxScreenSpaceError}getTraverser(e){return e.mostDetail?this.mostDetailTraverser:e.skipLevelOfDetail?this.skipTraverser:this.normalTraverser}reset(){this.cache.reset(),this.skipTraverser.reset(),this.normalTraverser.reset(),this.mostDetailTraverser.reset(),this.requestScheduler.reset();let e=[this.root],t;for(;t=e.pop();){for(let n=0,r=t.children.length;n<r;n++)e.push(t.children[n]);this.cache.unloadTile(t)}for(;this.unloadTiles.length;){let e=this.unloadTiles.pop();e&&(this.loadedTiles.delete(e),this.cacheMemoryUsageInBytes-=e.contentMemoryUsage,this.options.tileUnloader(e).catch(()=>{}).then(()=>{this.options.onTileUnload&&this.options.onTileUnload(e)}))}for(this.loadedTiles.clear();this.trajectories.length;){let e=this.trajectories.pop();e&&this.options.trajectoryUnloader(e).catch(()=>{}).then(()=>{this.options.onTrajectoryUnload&&this.options.onTrajectoryUnload(e)})}}update(e,t=[]){var n;for(this.frameNumber=e.frameNumber,this.adjustScreenSpaceError(e),this.cache.reset(),this.getTraverser(e).traverse(this.root,e,t),this.cache.unloadTiles(()=>this.cacheMemoryUsageInBytes>e.maxMemoryUsage*1024*1024),this.requestScheduler.update(this.requestedTiles,e.requestOrder,e);this.unloadTiles.length;){let e=this.unloadTiles.pop();e&&(this.loadedTiles.delete(e),this.options.tileUnloader(e).catch(()=>{}).then(()=>{this.options.onTileUnload&&this.options.onTileUnload(e)}))}this.selectedTrajectories.length=0;for(let t of this.trajectories)t.visible===!0&&t.content.loadState===`READY`&&(n=t.content.data)!=null&&n.object?this.selectedTrajectories.push(t):t.visible===!0&&(t.content.loadState===`FAILED`&&e.time-t.content.loadStateUpdateTime>t.content.loadfailRetryDelay&&(t.content.loadState=`UNLOADED`,t.content.loadStateUpdateTime=e.time),t.content.loadState===`UNLOADED`&&this.options.trajectoryLoader(t).then(()=>{this.options.onTrajectoryLoad(t)}).catch(e=>{this.options.onTrajectoryError(t,e)}))}};function normalizeTileHeader(e,t){var n;if(e.content){let r=(n=e.content.uri)==null?e.content.url:n;typeof r==`string`&&!isAbsoluteURL(r)&&(e.content.uri=normalizeURL(pathJoin(t,r)))}if(e.transform){let t=!1;for(let n=0;n<16;n++){let r=e.transform[n];if(typeof r!=`number`||isNaN(r)||!isFinite(r)){t=!0;break}}if(e.transform[15]===0&&(t=!0),t)throw Error(`Invalid Tile Transform: `+JSON.stringify(e.transform))}if(e.children)for(let n of e.children)normalizeTileHeader(n,t);return e}function normalizeTilesetHeader(e,t){e.tilesetUrl=t;let n=/^blob\:/.test(t)?``:t.slice(0,t.lastIndexOf(`/`)+1);if(e.asset||(e.asset={}),e.rootMeta||(e.rootMeta={}),e.rootMeta.taskParameters||(e.rootMeta.taskParameters={}),e.asset.overview){let t=e.asset.overview;isAbsoluteURL(t.imageFile)||(t.imageFile=normalizeURL(pathJoin(n,t.imageFile))),isAbsoluteURL(t.worldFile)||(t.worldFile=normalizeURL(pathJoin(n,t.worldFile)))}if(e.asset.trajectories)for(let t=0;t<e.asset.trajectories.list.length;t++){let r=e.asset.trajectories.list[t];r.file=normalizeURL(pathJoin(n,r.file))}return normalizeTileHeader(e.root,n),e}function delay(e){return new Promise(t=>setTimeout(t,e))}var AsyncTaskQueue=class{constructor(e){this.queue=[],this.concurrency=e,this.dequeuing=0}add(e,t=1e3){let n,r,o=new Promise((e,t)=>{n=e,r=t});return this.queue.unshift(()=>{let o=Promise.resolve().then(e);o.then(n,r);let s=delay(t);return Promise.race([o,s]).then(noop,noop)}),this.dequeue(),o}dequeue(){for(;this.dequeuing<this.concurrency&&this.queue.length>0;){let e=this.queue.pop();this.dequeuing++,e().catch(noop).then(()=>{this.dequeuing--,this.dequeue()})}}},initTextureQueue=new AsyncTaskQueue(1),skipImageSize=256;function canInit(e){return typeof e.image==`object`&&e.image.width>0&&e.image.height>0}function initTexture(e,t){if(!canInit(e))return Promise.resolve(e);if(e.image.width<skipImageSize&&e.image.width<skipImageSize)return t.initTexture(e),Promise.resolve(e);let n=!1,r=()=>{n=!0,e.removeEventListener(`dispose`,r)};return e.addEventListener(`dispose`,r),initTextureQueue.add(()=>new Promise(o=>{AnimationFrameLoop.shared.add(()=>{canInit(e)&&n===!1&&t.initTexture(e),e.removeEventListener(`dispose`,r),o(e)},!0)}))}function initTextures(e,t){return Promise.all(e.map(e=>initTexture(e,t)))}var _object_pattern=/^[og]\s*(.+)?/,_material_library_pattern=/^mtllib /,_material_use_pattern=/^usemtl /,_map_use_pattern=/^usemap /,_face_vertex_data_separator_pattern=/\s+/,_color=new three.Color,ObjState=class{constructor(){this.objects=[],this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.materials={},this.materialLibraries=[],this.startObject(``,!1)}startObject(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}let n=this.object&&typeof this.object.currentMaterial==`function`?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize==`function`&&this.object._finalize(!0),this.object={name:e||``,fromDeclaration:t!==!1,geometry:{vertices:[],hasNormal:!0,normals:[],hasColor:!0,colors:[],hasUV:!0,uvs:[],index:[],indexMap:{}},materials:[],smooth:!0,startMaterial:function(e,t){var n,r;let o=this._finalize(!1);o&&(o.inherited||((n=o.groupCount)==null?0:n)<=0)&&this.materials.splice((r=o.index)==null?0:r,1);let s={index:this.materials.length,name:e||``,mtllib:Array.isArray(t)&&t.length>0?t[t.length-1]:``,smooth:o===void 0?this.smooth:o.smooth,groupStart:o===void 0?0:o.groupEnd,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(e){let t={index:typeof e==`number`?e:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1,clone(){return this}};return t.clone=this.clone.bind(t),t}};return this.materials.push(s),s},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(e){var t,n;let r=this.currentMaterial();if(r&&r.groupEnd===-1&&(r.groupEnd=this.geometry.index.length,r.groupCount=r.groupEnd-((t=r.groupStart)==null?0:t),r.inherited=!1),e&&this.materials.length>1)for(let e=this.materials.length-1;e>=0;e--)((n=this.materials[e].groupCount)==null?0:n)<=0&&this.materials.splice(e,1);return e&&this.materials.length===0&&this.materials.push({name:``,smooth:this.smooth}),r}},n&&n.name&&typeof n.clone==`function`){let e=n.clone(0);e.inherited=!0,this.object.materials.push(e)}this.objects.push(this.object)}finalize(){this.object&&typeof this.object._finalize==`function`&&this.object._finalize(!0)}parseVertexIndex(e,t){let n=parseInt(e,10);return(n>=0?n-1:n+t/3)*3}parseNormalIndex(e,t){let n=parseInt(e,10);return(n>=0?n-1:n+t/3)*3}parseUVIndex(e,t){let n=parseInt(e,10);return(n>=0?n-1:n+t/2)*2}addFace(e,t,n,r,o,s,c,l,u){let d=this.object.geometry,f=this.vertices.length,p=this.normals.length,m=this.uvs.length,h=this.parseVertexIndex(e,f),g=this.parseVertexIndex(t,f),_=this.parseVertexIndex(n,f),v=c===void 0?void 0:this.parseNormalIndex(c,p),y=l===void 0?void 0:this.parseNormalIndex(l,p),b=u===void 0?void 0:this.parseNormalIndex(u,p),S=r===void 0?void 0:this.parseUVIndex(r,m),C=o===void 0?void 0:this.parseUVIndex(o,m),w=s===void 0?void 0:this.parseUVIndex(s,m);(d.hasNormal===!0&&v===void 0||y===void 0||b===void 0)&&(d.hasNormal=!1),(d.hasUV===!0&&S===void 0||C===void 0||w===void 0)&&(d.hasUV=!1);let T=[h,S,v].join(`:`),E=d.indexMap[T];E===void 0&&(E=d.vertices.length/3,d.indexMap[T]=E,d.vertices.push(this.vertices[h+0],this.vertices[h+1],this.vertices[h+2]),d.hasColor&&(this.colors[h]===void 0?d.hasColor=!1:d.colors.push(this.colors[h+0],this.colors[h+1],this.colors[h+2])),d.hasNormal&&d.normals.push(this.normals[h+0],this.normals[h+1],this.normals[h+2]),d.hasUV&&d.uvs.push(this.uvs[S+0],this.uvs[S+1])),d.index.push(E);let D=[g,C,y].join(`:`),O=d.indexMap[D];O===void 0&&(O=d.vertices.length/3,d.indexMap[D]=O,d.vertices.push(this.vertices[g+0],this.vertices[g+1],this.vertices[g+2]),d.hasColor&&(this.colors[g]===void 0?d.hasColor=!1:d.colors.push(this.colors[g+0],this.colors[g+1],this.colors[g+2])),d.hasNormal&&d.normals.push(this.normals[g+0],this.normals[g+1],this.normals[g+2]),d.hasUV&&d.uvs.push(this.uvs[C+0],this.uvs[C+1])),d.index.push(O);let k=[_,w,b].join(`:`),A=d.indexMap[k];A===void 0&&(A=d.vertices.length/3,d.indexMap[k]=A,d.vertices.push(this.vertices[_+0],this.vertices[_+1],this.vertices[_+2]),d.hasColor&&(this.colors[_]===void 0?d.hasColor=!1:d.colors.push(this.colors[_+0],this.colors[_+1],this.colors[_+2])),d.hasNormal&&d.normals.push(this.normals[_+0],this.normals[_+1],this.normals[_+2]),d.hasUV&&d.uvs.push(this.uvs[w+0],this.uvs[w+1])),d.index.push(A)}};function parseObj(e){let t=new ObjState;e.indexOf(`\r
|
|
832
832
|
`)!==-1&&(e=e.replace(/\r\n/g,`
|
|
833
833
|
`)),e.indexOf(`\\
|
|
@@ -1467,7 +1467,7 @@ void main() {
|
|
|
1467
1467
|
|
|
1468
1468
|
gl_FragColor = vec4(gl_FragColor.rgb, gl_FragColor.a * opacity);
|
|
1469
1469
|
}
|
|
1470
|
-
`,PanoCircleMeshCustom=class extends three.Object3D{constructor(e={}){var t,n,r,o,s,c,l;super();let u=(t=e.color)==null?16777215:t,d=(n=e.scale)==null?1:n,f=e.map,p=(r=e.mapAlpha)==null?1:r,m=(o=e.mapUseColor)==null?!1:o,h=(s=e.mapUseReverse)==null?!1:s,g=(c=e.borderWidth)==null?.1:c,_=(l=e.borderColor)==null?16777215:l;this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Motion({progress:0}),this.tapMotion=new Motion({scale:1,opacity:1}),this.loadingOpacityMotion=new Motion({opacity:0}),this.progressMotion=new Motion({progress:0}),this.progressOpacityMotion=new Motion({opacity:0}),this.opacityMotion=new Motion({opacity:0}),this.disableMotion=new Motion({progress:0}),this.panoMesh=new three.Mesh(sharedGeometry2,new three.ShaderMaterial({blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0,vertexShader:vertexShader$1,fragmentShader:fragmentShader$1,defines:{USE_COLOR:m,USE_MAP:f!==void 0,USE_BORDER:g>0,USE_REVERSE:h},uniforms:{baseColor:{value:new three.Color(u)},circleScale:{value:1},circleOpacity:{value:1},loadingAngle:{value:0},loadingOpacity:{value:0},progress:{value:0},progressOpacity:{value:0},expand0:{value:0},expand1:{value:0},expandOpacity:{value:0},opacity:{value:0},tapScale:{value:1},tapOpacity:{value:1},disable:{value:0},map:{value:f},mapAlpha:{value:p},borderWidth:{value:g},borderColor:{value:new three.Color(_)}}})),this.renderOrder=-2,this.panoMesh.renderOrder=-2,this.panoMesh.position.y=.004,this.panoMesh.scale.set(d,1,d),this.add(this.panoMesh),this.currentStartTime=now(),this.needsRender=!0}setProgress(e){this.setDisabled(!1),this.setLoading(!1),this.progress!==e&&(e=clamp$1(e,0,1),this.tapMotion.ended&&(this.progress===0&&this.progressOpacityMotion.set({opacity:1},500).catch(noop),e===0?this.progressOpacityMotion.set({opacity:0},500).catch(noop).then(()=>{this.progressMotion.set({progress:0},0).catch(noop)}):this.progressMotion.set({progress:clamp$1(e*1.2,0,1)},100).catch(noop)),this.progress=e)}setOpacity(e){this.opacity!==e&&(this.opacity=e=clamp$1(e,0,1),this.opacityMotion.set({opacity:e},200).catch(noop))}setCurrent(e){this.current!==e&&(this.currentMotion.set({progress:e?1:0},2e3).catch(noop),this.current=e,this.current===!0&&(this.currentStartTime=now()))}setLoading(e){this.loading!==e&&(this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.loadingOpacityMotion.set({opacity:e?1:0},500).catch(noop))}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({progress:e?1:0},500).catch(noop))}tap(){return this.tapMotion.ended?(this.progressOpacityMotion.set({opacity:0},0).catch(noop),this.progressMotion.set({progress:0},0).catch(noop),this.tapMotion.setKeyframes([{progress:0,value:{scale:1,opacity:1}},{progress:.3,value:{scale:.85,opacity:.5}},{progress:.8,value:{scale:1.05,opacity:.6}},{progress:1,value:{scale:1,opacity:1}}],600).then(()=>{this.progressOpacityMotion.set({opacity:this.progress>0?1:0},300).catch(noop),this.progressMotion.set({progress:this.progress},120).catch(noop)}).catch(noop)):Promise.resolve()}updateTime(e,t){if(!this.progressMotion.ended){this.progressMotion.update(e);let t=this.progressMotion.value.progress;this.panoMesh.material.uniforms.progress.value=t,this.needsRender=!0}if(!this.progressOpacityMotion.ended){this.progressOpacityMotion.update(e);let t=this.progressOpacityMotion.value.opacity;this.panoMesh.material.uniforms.progressOpacity.value=t,this.needsRender=!0}if(!this.opacityMotion.ended){this.opacityMotion.update(e);let t=this.opacityMotion.value.opacity;this.panoMesh.material.uniforms.opacity.value=t,this.needsRender=!0}if(this.visible=this.opacityMotion.value.opacity!==0,(!this.loadingOpacityMotion.ended||this.loadingOpacityMotion.value.opacity>0)&&(this.loadingOpacityMotion.update(e),this.panoMesh.material.uniforms.loadingOpacity.value=this.loadingOpacityMotion.value.opacity,this.panoMesh.material.uniforms.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0),this.tapMotion.ended||(this.tapMotion.update(e),this.panoMesh.material.uniforms.tapOpacity.value=this.tapMotion.value.opacity,this.panoMesh.material.uniforms.tapScale.value=this.tapMotion.value.scale,this.needsRender=!0),this.panoMesh.material.uniforms.circleOpacity.value=Math.max(.6,1-Math.max(this.loadingOpacityMotion.value.opacity,this.progressOpacityMotion.value.opacity)),this.current||!this.currentMotion.ended){this.currentMotion.update(e),this.panoMesh.material.uniforms.expandOpacity.value=this.currentMotion.value.progress;{let t=(e-this.currentStartTime-1500)/2e3;if(t%5<2){let e=t%1;this.panoMesh.material.uniforms.expand0.value=easeOut(e)*this.currentMotion.value.progress,this.needsRender=!0}}{let t=(e-this.currentStartTime-1e3)/2e3;if(t%5<2){let e=t%1;this.panoMesh.material.uniforms.expand1.value=easeOut(e)*this.currentMotion.value.progress,this.needsRender=!0}}}if(!this.disableMotion.ended){let{progress:t}=this.disableMotion.value;this.disableMotion.update(e),this.panoMesh.material.uniforms.disable.value=t,this.needsRender=!0}}dispose(){this.tapMotion.dispose(),this.progressMotion.dispose(),this.progressOpacityMotion.dispose(),this.opacityMotion.dispose(),this.currentMotion.dispose(),this.panoMesh.material.dispose()}};function isSimilarValue(e,t,n){let r=Math.abs(e-t);return r<.001||n!==void 0&&Math.abs(n-r)<.001}function notSimilarValue(e,t,n){return!isSimilarValue(e,t,n)}function isSimilarVector3(e,t){return e.distanceTo(t)<.001}function notSimilarVector3(e,t){return!isSimilarVector3(e,t)}function isPromise(e){return!!e&&(typeof e==`object`||typeof e==`function`)&&typeof e.then==`function`}var _a$2,userAgent=typeof navigator<`u`?((_a$2=navigator==null?void 0:navigator.userAgent)==null?``:_a$2).toLowerCase():`node`,canWebGL=(()=>{try{let e=document.createElement(`canvas`);return!!(window.WebGLRenderingContext&&(e.getContext(`webgl`)||e.getContext(`experimental-webgl`)))}catch(e){return!1}})(),canPushState=typeof history<`u`&&`pushState`in history&&`replaceState`in history&&`state`in history,isMobile=/android/i.test(userAgent)||/webos/i.test(userAgent)||/ipad|iphone|ipod/i.test(userAgent)||/iemobile/i.test(userAgent)||/opera mini/i.test(userAgent)||/blackberry/i.test(userAgent)||/windows phone/i.test(userAgent);function createEvent(e,t){let n=!1,r={type:e,timeStamp:now(),get defaultPrevented(){return n},preventDefault(){n=!0}};for(let e of Object.keys(t))e in r||(r[e]=t[e]);return r}function requestDeviceOrientationPermission(){return typeof location>`u`||location.protocol!==`https:`?Promise.reject(Error(`Request DeviceOrientation Permission denied.`)):typeof DeviceOrientationEvent<`u`&&typeof DeviceOrientationEvent.requestPermission==`function`?DeviceOrientationEvent.requestPermission().then(e=>{if(e==`granted`)return Promise.resolve();{let e=Error(`Request DeviceOrientation Permission denied.`);return Promise.reject(e)}}):Promise.resolve()}function requestXRSessionPermission(){if(`xr`in navigator)return navigator.xr.isSessionSupported(`immersive-vr`).then(e=>e?Promise.resolve():Promise.reject()).then(()=>navigator.xr.requestSession(`immersive-vr`,{optionalFeatures:[`local-floor`]}).then(e=>Promise.resolve(e)));{let e=Error(`Request XR Permission denied.`);return Promise.reject(e)}}function assignState(e,t){e.mode=t.mode,e.workCode=t.workCode,e.panoIndex=t.panoIndex,e.longitude=t.longitude,e.latitude=t.latitude,e.fov=t.fov,e.offset.copy(t.offset),e.distance=t.distance}function stateEqual(e,t){return e.workCode===t.workCode&&e.mode===t.mode&&e.panoIndex===t.panoIndex&&isSimilarValue(e.longitude,t.longitude,Math.PI*2)&&isSimilarValue(e.latitude,t.latitude)&&isSimilarValue(e.fov,t.fov)&&isSimilarVector3(e.offset,t.offset)&&isSimilarValue(e.distance,t.distance)}function assignPose(e,t){e.longitude=t.longitude,e.latitude=t.latitude,e.fov=t.fov,e.distance=t.distance,e.offset.copy(t.offset)}function clonePose(e){return{longitude:e.longitude,latitude:e.latitude,fov:e.fov,offset:e.offset.clone(),distance:e.distance}}function isThirdPersonMode(e){switch(e){case`Floorplan`:return!0;case`Mapview`:return!0;default:return!1}}function isFristPersonMode(e){switch(e){case`Panorama`:return!0;case`VRPanorama`:return!0;case`XRPanorama`:return!0;case`Model`:return!0;default:return!1}}function isEmptyObject(e){for(let t in e)return!1;return!0}var ShaderMaterial=class extends three.ShaderMaterial{constructor(e){super(e),this.uniforms===void 0&&(this.uniforms={}),this.defines===void 0&&(this.defines={})}getUniform(e){return this.uniforms[e].value}setUniform(e,t){setUniform(this.uniforms[e],t)}},equirectangularFsQuad=new FullScreenQuad(new ShaderMaterial({vertexShader:`
|
|
1470
|
+
`,PanoCircleMeshCustom=class extends three.Object3D{constructor(e={}){var t,n,r,o,s,c,l;super();let u=(t=e.color)==null?16777215:t,d=(n=e.scale)==null?1:n,f=e.map,p=(r=e.mapAlpha)==null?1:r,m=(o=e.mapUseColor)==null?!1:o,h=(s=e.mapUseReverse)==null?!1:s,g=(c=e.borderWidth)==null?.1:c,_=(l=e.borderColor)==null?16777215:l;this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Motion({progress:0}),this.tapMotion=new Motion({scale:1,opacity:1}),this.loadingOpacityMotion=new Motion({opacity:0}),this.progressMotion=new Motion({progress:0}),this.progressOpacityMotion=new Motion({opacity:0}),this.opacityMotion=new Motion({opacity:0}),this.disableMotion=new Motion({progress:0}),this.panoMesh=new three.Mesh(sharedGeometry2,new three.ShaderMaterial({blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0,vertexShader:vertexShader$1,fragmentShader:fragmentShader$1,defines:{USE_COLOR:m,USE_MAP:f!==void 0,USE_BORDER:g>0,USE_REVERSE:h},uniforms:{baseColor:{value:new three.Color(u)},circleScale:{value:1},circleOpacity:{value:1},loadingAngle:{value:0},loadingOpacity:{value:0},progress:{value:0},progressOpacity:{value:0},expand0:{value:0},expand1:{value:0},expandOpacity:{value:0},opacity:{value:0},tapScale:{value:1},tapOpacity:{value:1},disable:{value:0},map:{value:f},mapAlpha:{value:p},borderWidth:{value:g},borderColor:{value:new three.Color(_)}}})),this.renderOrder=-2,this.panoMesh.renderOrder=-2,this.panoMesh.position.y=.004,this.panoMesh.scale.set(d,1,d),this.add(this.panoMesh),this.currentStartTime=now(),this.needsRender=!0}setProgress(e){this.setDisabled(!1),this.setLoading(!1),this.progress!==e&&(e=clamp$1(e,0,1),this.tapMotion.ended&&(this.progress===0&&this.progressOpacityMotion.set({opacity:1},500).catch(noop),e===0?this.progressOpacityMotion.set({opacity:0},500).catch(noop).then(()=>{this.progressMotion.set({progress:0},0).catch(noop)}):this.progressMotion.set({progress:clamp$1(e*1.2,0,1)},100).catch(noop)),this.progress=e)}setOpacity(e){this.opacity!==e&&(this.opacity=e=clamp$1(e,0,1),this.opacityMotion.set({opacity:e},200).catch(noop))}setCurrent(e){this.current!==e&&(this.currentMotion.set({progress:e?1:0},2e3).catch(noop),this.current=e,this.current===!0&&(this.currentStartTime=now()))}setLoading(e){this.loading!==e&&(this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.loadingOpacityMotion.set({opacity:e?1:0},500).catch(noop))}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({progress:e?1:0},500).catch(noop))}tap(){return this.tapMotion.ended?(this.progressOpacityMotion.set({opacity:0},0).catch(noop),this.progressMotion.set({progress:0},0).catch(noop),this.tapMotion.setKeyframes([{progress:0,value:{scale:1,opacity:1}},{progress:.3,value:{scale:.85,opacity:.5}},{progress:.8,value:{scale:1.05,opacity:.6}},{progress:1,value:{scale:1,opacity:1}}],600).then(()=>{this.progressOpacityMotion.set({opacity:this.progress>0?1:0},300).catch(noop),this.progressMotion.set({progress:this.progress},120).catch(noop)}).catch(noop)):Promise.resolve()}updateTime(e,t){if(!this.progressMotion.ended){this.progressMotion.update(e);let t=this.progressMotion.value.progress;this.panoMesh.material.uniforms.progress.value=t,this.needsRender=!0}if(!this.progressOpacityMotion.ended){this.progressOpacityMotion.update(e);let t=this.progressOpacityMotion.value.opacity;this.panoMesh.material.uniforms.progressOpacity.value=t,this.needsRender=!0}if(!this.opacityMotion.ended){this.opacityMotion.update(e);let t=this.opacityMotion.value.opacity;this.panoMesh.material.uniforms.opacity.value=t,this.needsRender=!0}if(this.visible=this.opacityMotion.value.opacity!==0,(!this.loadingOpacityMotion.ended||this.loadingOpacityMotion.value.opacity>0)&&(this.loadingOpacityMotion.update(e),this.panoMesh.material.uniforms.loadingOpacity.value=this.loadingOpacityMotion.value.opacity,this.panoMesh.material.uniforms.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0),this.tapMotion.ended||(this.tapMotion.update(e),this.panoMesh.material.uniforms.tapOpacity.value=this.tapMotion.value.opacity,this.panoMesh.material.uniforms.tapScale.value=this.tapMotion.value.scale,this.needsRender=!0),this.panoMesh.material.uniforms.circleOpacity.value=Math.max(.6,1-Math.max(this.loadingOpacityMotion.value.opacity,this.progressOpacityMotion.value.opacity)),this.current||!this.currentMotion.ended){this.currentMotion.update(e),this.panoMesh.material.uniforms.expandOpacity.value=this.currentMotion.value.progress;{let t=(e-this.currentStartTime-1500)/2e3;if(t%5<2){let e=t%1;this.panoMesh.material.uniforms.expand0.value=easeOut(e)*this.currentMotion.value.progress,this.needsRender=!0}}{let t=(e-this.currentStartTime-1e3)/2e3;if(t%5<2){let e=t%1;this.panoMesh.material.uniforms.expand1.value=easeOut(e)*this.currentMotion.value.progress,this.needsRender=!0}}}if(!this.disableMotion.ended){let{progress:t}=this.disableMotion.value;this.disableMotion.update(e),this.panoMesh.material.uniforms.disable.value=t,this.needsRender=!0}}dispose(){this.tapMotion.dispose(),this.progressMotion.dispose(),this.progressOpacityMotion.dispose(),this.opacityMotion.dispose(),this.currentMotion.dispose(),this.panoMesh.material.dispose()}};function isSimilarValue(e,t,n){let r=Math.abs(e-t);return r<.001||n!==void 0&&Math.abs(n-r)<.001}function notSimilarValue(e,t,n){return!isSimilarValue(e,t,n)}function isSimilarVector3(e,t){return e.distanceTo(t)<.001}function notSimilarVector3(e,t){return!isSimilarVector3(e,t)}function isPromise(e){return!!e&&(typeof e==`object`||typeof e==`function`)&&typeof e.then==`function`}var _a$2,userAgent=typeof navigator<`u`?((_a$2=navigator==null?void 0:navigator.userAgent)==null?``:_a$2).toLowerCase():`node`,canWebGL=(()=>{try{let e=document.createElement(`canvas`);return!!(window.WebGLRenderingContext&&(e.getContext(`webgl`)||e.getContext(`experimental-webgl`)))}catch(e){return!1}})(),canPushState=typeof history<`u`&&`pushState`in history&&`replaceState`in history&&`state`in history,isMobile=/android/i.test(userAgent)||/webos/i.test(userAgent)||/ipad|iphone|ipod/i.test(userAgent)||/iemobile/i.test(userAgent)||/opera mini/i.test(userAgent)||/blackberry/i.test(userAgent)||/windows phone/i.test(userAgent);function createEvent(e,t){let n=!1,r={type:e,timeStamp:now(),get defaultPrevented(){return n},preventDefault(){n=!0}};for(let e of Object.keys(t))e in r||(r[e]=t[e]);return r}var extendableEventPromisesMap=new WeakMap;function createExtendableEvent(e,t){let n=createEvent(e,Object.assign(Object.assign({},t),{waitUntil(e){let t=extendableEventPromisesMap.get(n);t&&t.push(e)}}));return extendableEventPromisesMap.set(n,[]),n}function waitForExtendableEvent(e){var t;return Promise.all((t=extendableEventPromisesMap.get(e))==null?[]:t).then(noop)}function requestDeviceOrientationPermission(){return typeof location>`u`||location.protocol!==`https:`?Promise.reject(Error(`Request DeviceOrientation Permission denied.`)):typeof DeviceOrientationEvent<`u`&&typeof DeviceOrientationEvent.requestPermission==`function`?DeviceOrientationEvent.requestPermission().then(e=>{if(e==`granted`)return Promise.resolve();{let e=Error(`Request DeviceOrientation Permission denied.`);return Promise.reject(e)}}):Promise.resolve()}function requestXRSessionPermission(){if(`xr`in navigator)return navigator.xr.isSessionSupported(`immersive-vr`).then(e=>e?Promise.resolve():Promise.reject()).then(()=>navigator.xr.requestSession(`immersive-vr`,{optionalFeatures:[`local-floor`]}).then(e=>Promise.resolve(e)));{let e=Error(`Request XR Permission denied.`);return Promise.reject(e)}}function assignState(e,t){e.mode=t.mode,e.workCode=t.workCode,e.panoIndex=t.panoIndex,e.longitude=t.longitude,e.latitude=t.latitude,e.fov=t.fov,e.offset.copy(t.offset),e.distance=t.distance}function stateEqual(e,t){return e.workCode===t.workCode&&e.mode===t.mode&&e.panoIndex===t.panoIndex&&isSimilarValue(e.longitude,t.longitude,Math.PI*2)&&isSimilarValue(e.latitude,t.latitude)&&isSimilarValue(e.fov,t.fov)&&isSimilarVector3(e.offset,t.offset)&&isSimilarValue(e.distance,t.distance)}function assignPose(e,t){e.longitude=t.longitude,e.latitude=t.latitude,e.fov=t.fov,e.distance=t.distance,e.offset.copy(t.offset)}function clonePose(e){return{longitude:e.longitude,latitude:e.latitude,fov:e.fov,offset:e.offset.clone(),distance:e.distance}}function isThirdPersonMode(e){switch(e){case`Floorplan`:return!0;case`Mapview`:return!0;default:return!1}}function isFristPersonMode(e){switch(e){case`Panorama`:return!0;case`VRPanorama`:return!0;case`XRPanorama`:return!0;case`Model`:return!0;default:return!1}}function isEmptyObject(e){for(let t in e)return!1;return!0}var ShaderMaterial=class extends three.ShaderMaterial{constructor(e){super(e),this.uniforms===void 0&&(this.uniforms={}),this.defines===void 0&&(this.defines={})}getUniform(e){return this.uniforms[e].value}setUniform(e,t){setUniform(this.uniforms[e],t)}},equirectangularFsQuad=new FullScreenQuad(new ShaderMaterial({vertexShader:`
|
|
1471
1471
|
varying vec2 vUv;
|
|
1472
1472
|
void main() {
|
|
1473
1473
|
vUv = uv;
|
|
@@ -1529,7 +1529,7 @@ void main() {
|
|
|
1529
1529
|
|
|
1530
1530
|
gl_FragColor = vec4(gl_FragColor.rgb, gl_FragColor.a * outside * inside);
|
|
1531
1531
|
}
|
|
1532
|
-
`,side:three.DoubleSide,blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0}),IntersectMesh=class extends three.Object3D{constructor(){super(),this.ringMesh=new three.Mesh(sharedGeometry$2,sharedMaterial),this.ringMesh.position.z=.01,this.ringMesh.renderOrder=9999999999,this.add(this.ringMesh)}dispose(){this.remove(this.ringMesh)}},scratchObserverBox$2=new three.Box3,scratchVector3$4=new three.Vector3,defaultFloorplanControllerCustomInitArgs={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultFov:80,maxFov:120,minFov:20,maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,intersectMeshCreator:()=>new IntersectMesh},FloorplanController=class e extends BaseController{static distanceFromModel(e,t,n){let r=e.boundingBox,o=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);o=isNaN(o)||!isFinite(o)?1:o;let s=o/2/Math.tan(Math.PI*t/360);return n<1&&(s/=n),isNaN(s)||!isFinite(s)?o:s}static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{defaultLongitude:(n=t.defaultLongitude)==null?defaultFloorplanControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultFloorplanControllerCustomInitArgs.defaultLatitude:r,defaultFov:(o=t.defaultFov)==null?defaultFloorplanControllerCustomInitArgs.defaultFov:o,maxFov:(s=t.maxFov)==null?defaultFloorplanControllerCustomInitArgs.maxFov:s,minFov:(c=t.minFov)==null?defaultFloorplanControllerCustomInitArgs.minFov:c,maxLatitude:(l=t.maxLatitude)==null?defaultFloorplanControllerCustomInitArgs.maxLatitude:l,minLatitude:(u=t.minLatitude)==null?defaultFloorplanControllerCustomInitArgs.minLatitude:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultFloorplanControllerCustomInitArgs.intersectMeshCreator:d})}static initAnimationEndState(t){var n,r,o,s,c,l,u;let d=this.parseArgs(t),{state:f,currentState:p}=t.initial,m=typeof f.panoIndex==`number`?{workCode:(o=(n=f.workCode)==null?(r=d.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:f.panoIndex}:{workCode:p.workCode,panoIndex:p.panoIndex},h=(s=f.fov)==null?d.defaultFov:s,g=(c=f.longitude)==null?isThirdPersonMode(p.mode)?p.longitude:d.defaultLongitude:c,_=clamp$1(typeof d.minLatitude==`function`?d.minLatitude(h):d.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof d.maxLatitude==`function`?d.maxLatitude(h):d.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((l=f.latitude)==null?p.mode===`Floorplan`?p.latitude:d.defaultLatitude:l,_,v),b=f.offset?f.offset.clone():t.modelScene.boundingBox.getCenter(new three.Vector3),S=(u=f.distance)==null?e.distanceFromModel(d.modelScene,d.defaultFov,d.camera.aspect):u;return Object.assign(Object.assign({},m),{mode:`Floorplan`,longitude:g,latitude:y,fov:h,offset:b,distance:S})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Floorplan`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue(`modelAlpha`)}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new TextureLoader,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(e,t,n,r){var o;return this.works=e,this.updateCamera(t,(o=n.duration)==null?0:o,r),!0}updateModel(t){super.updateModel(t);let n=t.boundingBox.getCenter(new three.Vector3),r=e.distanceFromModel(t,this.defaultFov,this.camera.aspect);this.updateCamera({offset:n,distance:r},0,!0)}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},o={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended||(this.locationMotion.update(e),o.distance=this.locationMotion.value.distance,o.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),o.longitude=this.cameraMotion.value.longitude,o.latitude=this.cameraMotion.value.latitude,o.fov=this.cameraMotion.value.fov),isEmptyObject(r)||this.modelScene.parameter.set(r),isEmptyObject(o)||this.setCamera(o),this.intersectMesh&&this.intersectMesh.parent){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new three.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l=pick(c,[`longitude`,`latitude`,`fov`]),u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.perspToOrthoMotion.set({perspToOrtho:0},o).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}updateRenderSize(e){this.needsRender=!0}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(scratchObserverBox$2.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),scratchObserverBox$2.containsPoint(e.ray.origin)||e.ray.intersectsBox(scratchObserverBox$2)))for(let e of t.observers)n.push(e)}let[r,o]=arrayMin(n,e=>scratchVector3$4.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&o<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new three.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.998,s.longitude+=o.longitude,s.latitude+=o.latitude;let c=formatRad$1(this.cameraMotion.value.longitude+s.longitude),l=this.cameraMotion.value.fov,u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(l):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(l):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:c,latitude:f,fov:this.cameraMotion.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),m=!(o.longitude>1e-4||o.longitude<-1e-4||o.latitude>1e-4||o.latitude<-1e-4),h=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:p}));if(this.emit(`gesture.fire`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:c,latitude:f},0).catch(noop),m?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=this.relativeClientPosition(e.center),s=1,c=this.camera.pose.latitude;Math.abs(c)>Math.PI/6&&(s=c<0?o.y<0?-1:1:o.y>0?-1:1),r.x*=s;let l=this.coordinatesForOffset(r),u=formatRad$1(this.cameraMotion.value.longitude+l.longitude),d=this.camera.pose.fov,f=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(d):this.minLatitude,-Math.PI/2,Math.PI/2),p=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(d):this.maxLatitude,-Math.PI/2,Math.PI/2),m=clamp$1(this.cameraMotion.value.latitude+l.latitude,f,p);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(m=this.cameraMotion.value.latitude);let h=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:u,latitude:m,fov:d,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.state=h,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(!(e.isFinal&&t.defaultPrevented)&&(this.cameraMotion.set({longitude:h.longitude,latitude:h.latitude},0).catch(noop),e.isFinal)){let t=e.velocityX*s,n=e.velocityY;this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.panState=void 0,this.pinchState=void 0),n===void 0)return;let r=clamp$1(n/e.scale,this.minFov,this.maxFov),o=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),s=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(this.cameraMotion.value.latitude,o,s);e.state.fov=r,e.state.latitude=c,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r,latitude:c},0).catch(noop),this.onPanGesture(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState)return;if(this.emit(`gesture.mousemove`,e),e.defaultPrevented){this.hideIntersectMesh();return}let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let{minFov:t,maxFov:n}=this,r=clamp$1(this.camera.fov-e.center.delta,t,n),o=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),s=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(this.cameraMotion.value.latitude,o,s);e.state.fov=r,e.state.latitude=c,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:r,latitude:c},0).catch(noop)}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},o=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new three.Vector3,distance:0});if(e.state=o,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:o,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=createUuid(),s=panoStringify({panoIndex:r.panoIndex,workCode:r.work.workCode}),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},l=this.imageOptions.transform,u=Object.assign({key:`pano.${s}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),d=`pano:`+jsonHash([c,u,l]),f=this.modelScene.parameter,p;f.pano0&&f.pano0.map.name===d?p=f.pano0:f.pano1&&f.pano1.map.name===d&&(p=f.pano1),p?(f.pano0&&f.pano0.map!==p.map&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==p.map&&f.pano1.map!==((t=f.pano0)==null?void 0:t.map)&&f.pano1.map.dispose(),f.set({pano0:p,pano1:p}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))):this.textureLoader.loadCubeTexture(c,{imageURL:{transform:l,options:u},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer).then(t=>{var c,l;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=d;let p=Array.isArray(u.image)?u.image[0]:u.image,m=(c=p==null?void 0:p.width)==null?2048:c,h=r.images.histogram;h||(h=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,u,!0,sharedHistogramRgbaData).data),r.images.histogram=h);let g={panoId:s,map:u,mapSize:m,mapHistogram:new three.Vector4().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1};f.pano0&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==((l=f.pano0)==null?void 0:l.map)&&f.pano1.map.dispose(),f.set({pano0:g,pano1:g}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))}).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=this.minFov-t<t-this.defaultFov?this.minFov:this.defaultFov;e.state.fov=n,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:n},360).catch(noop),this.hideIntersectMesh())}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}},defaultTopviewControllerCustomInitArgs=Object.assign(Object.assign({},omit(defaultFloorplanControllerCustomInitArgs,[`defaultLongitude`,`defaultLatitude`,`maxLatitude`,`minLatitude`])),{defaultLongitude:0,defaultLatitude:Math.PI/2}),TopviewController=class e extends FloorplanController{static parseArgs(t){var n,r;if(t instanceof e)return t;let o=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,defaultLongitude:(n=t.defaultLongitude)==null?defaultTopviewControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultTopviewControllerCustomInitArgs.defaultLatitude:r});return super.parseArgs(o)}static initAnimationEndState(e){var t,n;let r=this.parseArgs(e),o=super.initAnimationEndState(Object.assign(Object.assign({},r),{initial:Object.assign(Object.assign({},r.initial),{state:Object.assign(Object.assign({},r.initial.state),{longitude:(t=r.initial.state.longitude)==null?r.defaultLongitude:t,latitude:(n=r.initial.state.latitude)==null?r.defaultLatitude:n})})}));return Object.assign(Object.assign({},o),{mode:`Topview`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Topview`}updateConfiguration(e){return super.updateConfiguration(Object.assign({},e))}updateModel(e){this.needsRender=!0;let t=this.modelScene.boundingBox.getCenter(new three.Vector3);this.locationMotion.set({x:t.x,y:t.y,z:t.z,distance:FloorplanController.distanceFromModel(this.modelScene,this.defaultFov,this.camera.aspect)},0).catch(noop),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.y,z:t.value.offset.z}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={longitude:c.longitude,latitude:c.latitude,fov:c.fov},u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.perspToOrthoMotion.set({perspToOrtho:1},o).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}requestMomentumMovement(){this.inMomentumMovement=null}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),s=this.locationMotion.value.distance;s*=Math.tan(this.cameraMotion.value.fov/2*Math.PI/180);let c=this.renderer.getSize(new three.Vector2),l=2*r.x*s/c.y,u=2*r.y*s/c.y,d=new three.Vector3;d.setFromMatrixColumn(this.camera.matrix,0),d.multiplyScalar(-l),o.add(d),d.setFromMatrixColumn(this.camera.matrix,1),d.multiplyScalar(u),o.add(d);let f=this.modelScene.boundingBox.getCenter(new three.Vector3),p=this.modelScene.boundingBox.getSize(new three.Vector3),m=Math.max(p.x,p.y,p.z)/2;if(o.clamp(f.clone().sub(new three.Vector3().setScalar(m)),f.clone().add(new three.Vector3().setScalar(m))),e.state=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:0,latitude:Math.PI/2,fov:this.cameraMotion.value.fov,offset:o,distance:this.locationMotion.value.distance}),this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}e.isFinal&&t.defaultPrevented||this.locationMotion.set({x:o.x,y:o.y,z:o.z},0).catch(noop)}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let r=clamp$1(n/e.scale,this.minFov,this.maxFov);e.state.fov=r,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r},0).catch(noop),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let t=clamp$1(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov);e.state.fov=t,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:t},0).catch(noop)}},defaultPanoramaLikeControllerCustomInitArgs={defaultLatitude:0,defaultFov:90,maxFov:120,minFov:20,maxLatitude:e=>Math.PI/2-e/2/180*Math.PI,minLatitude:e=>-Math.PI/2+e/2/180*Math.PI,moveSpeed:3.6,intersectMeshCreator:()=>new IntersectMesh,aerialObserverMinHeight:5},PanoramaLikeController=class e extends BaseController{static parseArgs(t){var n,r,o,s,c,l,u,d,f;if(t instanceof e)return t;let p=super.parseArgs(t);return Object.assign(Object.assign({},p),{defaultLatitude:(n=t.defaultLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.defaultLatitude:n,defaultFov:(r=t.defaultFov)==null?defaultPanoramaLikeControllerCustomInitArgs.defaultFov:r,maxFov:(o=t.maxFov)==null?defaultPanoramaLikeControllerCustomInitArgs.maxFov:o,minFov:(s=t.minFov)==null?defaultPanoramaLikeControllerCustomInitArgs.minFov:s,maxLatitude:(c=t.maxLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.maxLatitude:c,minLatitude:(l=t.minLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.minLatitude:l,moveSpeed:(u=t.moveSpeed)==null?defaultPanoramaLikeControllerCustomInitArgs.moveSpeed:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultPanoramaLikeControllerCustomInitArgs.intersectMeshCreator:d,aerialObserverMinHeight:(f=t.aerialObserverMinHeight)==null?defaultPanoramaLikeControllerCustomInitArgs.aerialObserverMinHeight:f})}static initAnimationEndState(e){var t,n,r,o,s,c;let l=this.parseArgs(e),u=l.works,{state:d,currentState:f}=e.initial,p=typeof d.panoIndex==`number`?{workCode:(r=(t=d.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=u.getObserver(p),h=clamp$1((o=d.fov)==null?isFristPersonMode(f.mode)?f.fov:l.defaultFov:o,l.minFov,l.maxFov),g=(s=d.longitude)==null?f.longitude:s,_=clamp$1(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((c=d.latitude)==null?isFristPersonMode(f.mode)?f.latitude:l.defaultLatitude:c,_,v),b=new three.Vector3;return m&&b.copy(m.position).applyMatrix4(m.work.transform),{workCode:p.workCode,panoIndex:p.panoIndex,mode:`PanoramaLike`,longitude:g,latitude:y,fov:h,offset:b,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`PanoramaLike`,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.moveSpeed=n.moveSpeed,this.intersectMeshCreator=n.intersectMeshCreator,this.aerialObserverMinHeight=n.aerialObserverMinHeight,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.moveSpeed!==void 0&&this.moveSpeed!==e.moveSpeed&&(this.moveSpeed=e.moveSpeed),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return e.aerialObserverMinHeight!==void 0&&this.aerialObserverMinHeight!==e.aerialObserverMinHeight&&(this.aerialObserverMinHeight=e.aerialObserverMinHeight),!0}destroy(){super.destroy(),this.intersectMesh&&(this.helper.remove(this.intersectMesh),this.intersectMesh.dispose()),this.panState=void 0}isReady(){return this.panState||this.pinchState?!1:super.isReady()}calculateMovingDuration(e,t){switch(typeof e){case`function`:return e(t,this.moveSpeed);case`number`:return e;case`string`:return Number(e);default:return clamp$1(t,2,5)/this.moveSpeed*1e3}}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}coordinatesForOffset(e){let t=this.cameraMotion.value.fov,n=this.camera.aspect,r=this.renderer.getSize(new three.Vector2);return{longitude:2*e.x/(r.x*this.viewport.width)*t/95*n,latitude:-2*e.y/(r.y*this.viewport.height)*t/95}}cameraBounce(){let{longitude:e,latitude:t,fov:n}=this.cameraMotion.value,r=[{progress:0,value:{longitude:e,latitude:t,fov:n}},{progress:.5,value:{longitude:e,latitude:t,fov:n*.98}},{progress:1,value:{longitude:e,latitude:t,fov:n}}];this.cameraMotion.setKeyframes(r,500).catch(noop)}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.99,s.longitude+=o.longitude,s.latitude+=o.latitude;let c=this.cameraMotion.value.fov,l=formatRad$1(this.cameraMotion.value.longitude+s.longitude),u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:l,latitude:f,fov:c,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),m=!(o.longitude>1e-4||o.longitude<-1e-4||o.latitude>1e-4||o.latitude<-1e-4),h=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:p}));if(this.emit(`gesture.fire`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:l,latitude:f},0).catch(noop),m?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=this.coordinatesForOffset(r),s=formatRad$1(this.cameraMotion.value.longitude+o.longitude),c=this.cameraMotion.value.fov,l=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),u=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(this.cameraMotion.value.latitude+o.latitude,l,u);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(d=this.cameraMotion.value.latitude);let f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:d,fov:c,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});if(e.state=f,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(e.isFinal&&t.defaultPrevented)return;let p={longitude:f.longitude,latitude:f.latitude,fov:f.fov};if(this.cameraMotion.set(p,0).catch(noop),e.isFinal){let t=e.velocityX,n=e.velocityY*.6;Math.abs(n)>.5&&Math.abs(t)<.5&&(t=0),this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov,r=e.scale;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let o=clamp$1(n/r,this.minFov,this.maxFov),s=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),l=clamp$1(this.cameraMotion.value.latitude,s,c);e.state.fov=o,e.state.latitude=l,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:o,latitude:l},0).catch(noop),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=clamp$1(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov),n=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(t):this.minLatitude,-Math.PI/2,Math.PI/2),r=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(t):this.maxLatitude,-Math.PI/2,Math.PI/2),o=clamp$1(this.cameraMotion.value.latitude,n,r);e.state.fov=t,e.state.latitude=o,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:t,latitude:o},0).catch(noop),this.onMouseMove(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent){this.hideIntersectMesh();return}r.floorIndex=-1;let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=2,r=this.works.getObserver(this.currentPano);if(r){let e=r.images.tiles;e&&e.length&&(n=Math.max(...e.map(e=>e.level)))}let o=Math.max(40-n*5,this.minFov,5),s=o-t<t-this.defaultFov?o:this.defaultFov;e.state.fov=s,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:s},360).catch(noop),this.hideIntersectMesh())}},blankVideo=`data:video/mp4;base64,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`,result;function canplayVideo(){return result||(result=new Promise(e=>{let t,n=document.createElement(`video`);n.muted=!0,n.src=blankVideo,n.addEventListener(`timeupdate`,function r(){n.removeEventListener(`timeupdate`,r,!1),clearTimeout(t);let o=document.createElement(`canvas`);o.width=o.height=1;let s=o.getContext(`2d`);if(!s){e(!1);return}s.drawImage(n,0,0,1,1);let{data:c}=s.getImageData(0,0,1,1);c[3]>10?e(!0):e(!1)},!1),n.addEventListener(`canplay`,function e(){n.removeEventListener(`canplay`,e,!1),n.play()},!1),t=window.setTimeout(()=>e(!1),1e3)}))}var FACE_ORDER=[`right`,`left`,`up`,`down`,`front`,`back`];function getBox(e,t,n,r){let o=new three.Box3;switch(e){case`up`:o.min.y=.5,o.max.y=.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.z=-n+.5-r,o.max.z=-n+.5;break;case`down`:o.min.y=-.5,o.max.y=-.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.z=n-.5,o.max.z=n-.5+r;break;case`left`:o.min.x=-.5,o.max.x=-.5,o.min.z=-t+.5-r,o.max.z=-t+.5,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`right`:o.min.x=.5,o.max.x=.5,o.min.z=t-.5,o.max.z=t-.5+r,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`front`:o.min.z=-.5,o.max.z=-.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`back`:o.min.z=.5,o.max.z=.5,o.min.x=-t+.5-r,o.max.x=-t+.5,o.min.y=-n+.5-r,o.max.y=-n+.5;break;default:break}return o.applyMatrix4(new three.Matrix4().makeRotationY(Math.PI))}var createChildren=(e,t)=>{if(e.level>=t)return;let n=e.level+1,r=e.size/2,o=[new three.Vector2(e.position.x,e.position.y),new three.Vector2(e.position.x+r,e.position.y),new three.Vector2(e.position.x,e.position.y+r),new three.Vector2(e.position.x+r,e.position.y+r)];for(let s of o){let o={face:e.face,level:n,size:r,position:s,box:getBox(e.face,s.x,s.y,r),parent:e,children:[]};e.children.push(o),createChildren(o,t)}};function createTileCubeNode(e,t){let n={level:0,face:e,position:new three.Vector2(0,0),size:1,box:getBox(e,0,0,1),parent:null,children:[]};return createChildren(n,t),n}function createTileCubeTree(e){return{children:FACE_ORDER.map(t=>createTileCubeNode(t,e)),maxLevel:e}}function traverseTileCubeNode(e,t){for(let n of e.children)t(n)!==!1&&traverseTileCubeNode(n,t)}var _a$1,scratchSortVector3=new three.Vector3,scratchCameraQuaternion=new three.Quaternion,scratchCameraMatrix=new three.Matrix4,scratchCameraProjectMatrix=new three.Matrix4,scratchFrustumMatrix=new three.Matrix4,scratchFrustumMatrixInverse=new three.Matrix4,scratchFrustumProjectMatrix=new three.Matrix4,scratchSceneQuaternionInverse=new three.Quaternion,scratchSceneMatrixInverse=new three.Matrix4,clearColor$1=new three.Color(0,0,0),clearAlpha=0,scratchPrevClearColor$1=new three.Color,clippingPlanes=[],SQRT1_2=(_a$1=Math.SQRT1_2)==null?Math.sqrt(2):_a$1,TILE_QUATERNION={up:new three.Quaternion(SQRT1_2,0,0,SQRT1_2),down:new three.Quaternion(-SQRT1_2,0,0,SQRT1_2),left:new three.Quaternion(0,SQRT1_2,0,SQRT1_2),right:new three.Quaternion(0,-SQRT1_2,0,SQRT1_2),front:new three.Quaternion(0,0,0,1),back:new three.Quaternion(0,1,0,0)},tileGeometry=(()=>{let e=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),t=new Float32Array([0,0,1,0,0,1,1,1]),n=new Uint32Array([0,1,2,1,3,2]),r=new three.BufferGeometry;return r.setAttribute(`position`,new three.BufferAttribute(e,3)),r.setAttribute(`uv`,new three.BufferAttribute(t,2)),r.setIndex(new three.BufferAttribute(n,1)),r.computeBoundingBox(),r})(),TILE_MATERIAL_VERTEX_SHADER=`
|
|
1532
|
+
`,side:three.DoubleSide,blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0}),IntersectMesh=class extends three.Object3D{constructor(){super(),this.ringMesh=new three.Mesh(sharedGeometry$2,sharedMaterial),this.ringMesh.position.z=.01,this.ringMesh.renderOrder=9999999999,this.add(this.ringMesh)}dispose(){this.remove(this.ringMesh)}};function toError(e){if(e instanceof Error)return e;let t=typeof e;return Error(t&&t===`object`?JSON.stringify(e):e)}var scratchObserverBox$2=new three.Box3,scratchVector3$4=new three.Vector3,defaultFloorplanControllerCustomInitArgs={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultFov:80,maxFov:120,minFov:20,maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,intersectMeshCreator:()=>new IntersectMesh},FloorplanController=class e extends BaseController{static distanceFromModel(e,t,n){let r=e.boundingBox,o=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);o=isNaN(o)||!isFinite(o)?1:o;let s=o/2/Math.tan(Math.PI*t/360);return n<1&&(s/=n),isNaN(s)||!isFinite(s)?o:s}static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{defaultLongitude:(n=t.defaultLongitude)==null?defaultFloorplanControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultFloorplanControllerCustomInitArgs.defaultLatitude:r,defaultFov:(o=t.defaultFov)==null?defaultFloorplanControllerCustomInitArgs.defaultFov:o,maxFov:(s=t.maxFov)==null?defaultFloorplanControllerCustomInitArgs.maxFov:s,minFov:(c=t.minFov)==null?defaultFloorplanControllerCustomInitArgs.minFov:c,maxLatitude:(l=t.maxLatitude)==null?defaultFloorplanControllerCustomInitArgs.maxLatitude:l,minLatitude:(u=t.minLatitude)==null?defaultFloorplanControllerCustomInitArgs.minLatitude:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultFloorplanControllerCustomInitArgs.intersectMeshCreator:d})}static initAnimationEndState(t){var n,r,o,s,c,l,u;let d=this.parseArgs(t),{state:f,currentState:p}=t.initial,m=typeof f.panoIndex==`number`?{workCode:(o=(n=f.workCode)==null?(r=d.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:f.panoIndex}:{workCode:p.workCode,panoIndex:p.panoIndex},h=(s=f.fov)==null?d.defaultFov:s,g=(c=f.longitude)==null?isThirdPersonMode(p.mode)?p.longitude:d.defaultLongitude:c,_=clamp$1(typeof d.minLatitude==`function`?d.minLatitude(h):d.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof d.maxLatitude==`function`?d.maxLatitude(h):d.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((l=f.latitude)==null?p.mode===`Floorplan`?p.latitude:d.defaultLatitude:l,_,v),b=f.offset?f.offset.clone():t.modelScene.boundingBox.getCenter(new three.Vector3),S=(u=f.distance)==null?e.distanceFromModel(d.modelScene,d.defaultFov,d.camera.aspect):u;return Object.assign(Object.assign({},m),{mode:`Floorplan`,longitude:g,latitude:y,fov:h,offset:b,distance:S})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Floorplan`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue(`modelAlpha`)}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new TextureLoader,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(e,t,n,r){var o;return this.works=e,this.updateCamera(t,(o=n.duration)==null?0:o,r),!0}updateModel(t){super.updateModel(t);let n=t.boundingBox.getCenter(new three.Vector3),r=e.distanceFromModel(t,this.defaultFov,this.camera.aspect);this.updateCamera({offset:n,distance:r},0,!0)}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},o={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended||(this.locationMotion.update(e),o.distance=this.locationMotion.value.distance,o.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),o.longitude=this.cameraMotion.value.longitude,o.latitude=this.cameraMotion.value.latitude,o.fov=this.cameraMotion.value.fov),isEmptyObject(r)||this.modelScene.parameter.set(r),isEmptyObject(o)||this.setCamera(o),this.intersectMesh&&this.intersectMesh.parent){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new three.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l=pick(c,[`longitude`,`latitude`,`fov`]),u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.perspToOrthoMotion.set({perspToOrtho:0},o).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}updateRenderSize(e){this.needsRender=!0}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(scratchObserverBox$2.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),scratchObserverBox$2.containsPoint(e.ray.origin)||e.ray.intersectsBox(scratchObserverBox$2)))for(let e of t.observers)n.push(e)}let[r,o]=arrayMin(n,e=>scratchVector3$4.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&o<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new three.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.998,s.longitude+=o.longitude,s.latitude+=o.latitude;let c=formatRad$1(this.cameraMotion.value.longitude+s.longitude),l=this.cameraMotion.value.fov,u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(l):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(l):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:c,latitude:f,fov:this.cameraMotion.value.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),m=!(o.longitude>1e-4||o.longitude<-1e-4||o.latitude>1e-4||o.latitude<-1e-4),h=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:p}));if(this.emit(`gesture.fire`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:c,latitude:f},0).catch(noop),m?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=this.relativeClientPosition(e.center),s=1,c=this.camera.pose.latitude;Math.abs(c)>Math.PI/6&&(s=c<0?o.y<0?-1:1:o.y>0?-1:1),r.x*=s;let l=this.coordinatesForOffset(r),u=formatRad$1(this.cameraMotion.value.longitude+l.longitude),d=this.camera.pose.fov,f=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(d):this.minLatitude,-Math.PI/2,Math.PI/2),p=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(d):this.maxLatitude,-Math.PI/2,Math.PI/2),m=clamp$1(this.cameraMotion.value.latitude+l.latitude,f,p);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(m=this.cameraMotion.value.latitude);let h=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:u,latitude:m,fov:d,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.state=h,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(!(e.isFinal&&t.defaultPrevented)&&(this.cameraMotion.set({longitude:h.longitude,latitude:h.latitude},0).catch(noop),e.isFinal)){let t=e.velocityX*s,n=e.velocityY;this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.panState=void 0,this.pinchState=void 0),n===void 0)return;let r=clamp$1(n/e.scale,this.minFov,this.maxFov),o=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),s=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(this.cameraMotion.value.latitude,o,s);e.state.fov=r,e.state.latitude=c,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r,latitude:c},0).catch(noop),this.onPanGesture(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState)return;if(this.emit(`gesture.mousemove`,e),e.defaultPrevented){this.hideIntersectMesh();return}let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let{minFov:t,maxFov:n}=this,r=clamp$1(this.camera.fov-e.center.delta,t,n),o=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(r):this.minLatitude,-Math.PI/2,Math.PI/2),s=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(r):this.maxLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(this.cameraMotion.value.latitude,o,s);e.state.fov=r,e.state.latitude=c,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:r,latitude:c},0).catch(noop)}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},o=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new three.Vector3,distance:0});if(e.state=o,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,pano:{panoIndex:o.panoIndex,workCode:o.workCode},state:o,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=createUuid(),s={panoIndex:r.panoIndex,workCode:r.work.workCode},c=panoStringify(s),l={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},u=this.imageOptions.transform,d=Object.assign({key:`pano.${c}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),f=`pano:`+jsonHash([l,d,u]),p=this.modelScene.parameter,m;if(p.pano0&&p.pano0.map.name===f?m=p.pano0:p.pano1&&p.pano1.map.name===f&&(m=p.pano1),m)p.pano0&&p.pano0.map!==m.map&&p.pano0.map.dispose(),p.pano1&&p.pano1.map!==m.map&&p.pano1.map!==((t=p.pano0)==null?void 0:t.map)&&p.pano1.map.dispose(),p.set({pano0:m,pano1:m}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,pano:{panoIndex:o.panoIndex,workCode:o.workCode},progress:0,state:o,options:n,error:null}));else{let t=createExtendableEvent(`pano.prepare`,{prevPano:this.currentPano,pano:s});this.emit(`pano.prepare`,t),Promise.all([Promise.resolve().then(()=>{this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:s}))}).then(()=>this.textureLoader.loadCubeTexture(l,{imageURL:{transform:u,options:d},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer)).catch(e=>{let t=toError(e);return this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:s})),this.emit(`error`,t),t}),Promise.resolve().then(()=>waitForExtendableEvent(t)).catch(e=>{let t=toError(e);return this.emit(`error`,t),t})]).then(([t,s])=>{var l,u;if(!(t instanceof Error)&&!(s instanceof Error)){let{body:s}=t;if(this.destroyed||this.pendingTextureId!==e){s.dispose();return}this.pendingTextureId=null,s.name=f;let d=Array.isArray(s.image)?s.image[0]:s.image,m=(l=d==null?void 0:d.width)==null?2048:l,h=r.images.histogram;h||(h=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),r.images.histogram=h);let g={panoId:c,map:s,mapSize:m,mapHistogram:new three.Vector4().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1};p.pano0&&p.pano0.map.dispose(),p.pano1&&p.pano1.map!==((u=p.pano0)==null?void 0:u.map)&&p.pano1.map.dispose(),p.set({pano0:g,pano1:g}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,pano:{panoIndex:o.panoIndex,workCode:o.workCode},progress:0,state:o,options:n,error:null}))}else{let n=null;if(t instanceof Error?n||(n=t):t.body.dispose(),s instanceof Error&&(n||(n=s)),this.destroyed||this.pendingTextureId!==e)return;this.pendingTextureId=null,this.emit(`error`,n)}})}}}}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=this.minFov-t<t-this.defaultFov?this.minFov:this.defaultFov;e.state.fov=n,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:n},360).catch(noop),this.hideIntersectMesh())}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}},defaultTopviewControllerCustomInitArgs=Object.assign(Object.assign({},omit(defaultFloorplanControllerCustomInitArgs,[`defaultLongitude`,`defaultLatitude`,`maxLatitude`,`minLatitude`])),{defaultLongitude:0,defaultLatitude:Math.PI/2}),TopviewController=class e extends FloorplanController{static parseArgs(t){var n,r;if(t instanceof e)return t;let o=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2,defaultLongitude:(n=t.defaultLongitude)==null?defaultTopviewControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultTopviewControllerCustomInitArgs.defaultLatitude:r});return super.parseArgs(o)}static initAnimationEndState(e){var t,n;let r=this.parseArgs(e),o=super.initAnimationEndState(Object.assign(Object.assign({},r),{initial:Object.assign(Object.assign({},r.initial),{state:Object.assign(Object.assign({},r.initial.state),{longitude:(t=r.initial.state.longitude)==null?r.defaultLongitude:t,latitude:(n=r.initial.state.latitude)==null?r.defaultLatitude:n})})}));return Object.assign(Object.assign({},o),{mode:`Topview`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Topview`}updateConfiguration(e){return super.updateConfiguration(Object.assign({},e))}updateModel(e){this.needsRender=!0;let t=this.modelScene.boundingBox.getCenter(new three.Vector3);this.locationMotion.set({x:t.x,y:t.y,z:t.z,distance:FloorplanController.distanceFromModel(this.modelScene,this.defaultFov,this.camera.aspect)},0).catch(noop),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.y,z:t.value.offset.z}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={longitude:c.longitude,latitude:c.latitude,fov:c.fov},u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.perspToOrthoMotion.set({perspToOrtho:1},o).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}requestMomentumMovement(){this.inMomentumMovement=null}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),s=this.locationMotion.value.distance;s*=Math.tan(this.cameraMotion.value.fov/2*Math.PI/180);let c=this.renderer.getSize(new three.Vector2),l=2*r.x*s/c.y,u=2*r.y*s/c.y,d=new three.Vector3;d.setFromMatrixColumn(this.camera.matrix,0),d.multiplyScalar(-l),o.add(d),d.setFromMatrixColumn(this.camera.matrix,1),d.multiplyScalar(u),o.add(d);let f=this.modelScene.boundingBox.getCenter(new three.Vector3),p=this.modelScene.boundingBox.getSize(new three.Vector3),m=Math.max(p.x,p.y,p.z)/2;if(o.clamp(f.clone().sub(new three.Vector3().setScalar(m)),f.clone().add(new three.Vector3().setScalar(m))),e.state=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:0,latitude:Math.PI/2,fov:this.cameraMotion.value.fov,offset:o,distance:this.locationMotion.value.distance}),this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}e.isFinal&&t.defaultPrevented||this.locationMotion.set({x:o.x,y:o.y,z:o.z},0).catch(noop)}onPinchGesture(e){var t;if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let r=clamp$1(n/e.scale,this.minFov,this.maxFov);e.state.fov=r,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:r},0).catch(noop),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement();let t=clamp$1(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov);e.state.fov=t,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&this.cameraMotion.set({fov:t},0).catch(noop)}},defaultPanoramaLikeControllerCustomInitArgs={defaultLatitude:0,defaultFov:90,maxFov:120,minFov:20,maxLatitude:e=>Math.PI/2-e/2/180*Math.PI,minLatitude:e=>-Math.PI/2+e/2/180*Math.PI,moveSpeed:3.6,intersectMeshCreator:()=>new IntersectMesh,aerialObserverMinHeight:5},PanoramaLikeController=class e extends BaseController{static parseArgs(t){var n,r,o,s,c,l,u,d,f;if(t instanceof e)return t;let p=super.parseArgs(t);return Object.assign(Object.assign({},p),{defaultLatitude:(n=t.defaultLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.defaultLatitude:n,defaultFov:(r=t.defaultFov)==null?defaultPanoramaLikeControllerCustomInitArgs.defaultFov:r,maxFov:(o=t.maxFov)==null?defaultPanoramaLikeControllerCustomInitArgs.maxFov:o,minFov:(s=t.minFov)==null?defaultPanoramaLikeControllerCustomInitArgs.minFov:s,maxLatitude:(c=t.maxLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.maxLatitude:c,minLatitude:(l=t.minLatitude)==null?defaultPanoramaLikeControllerCustomInitArgs.minLatitude:l,moveSpeed:(u=t.moveSpeed)==null?defaultPanoramaLikeControllerCustomInitArgs.moveSpeed:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultPanoramaLikeControllerCustomInitArgs.intersectMeshCreator:d,aerialObserverMinHeight:(f=t.aerialObserverMinHeight)==null?defaultPanoramaLikeControllerCustomInitArgs.aerialObserverMinHeight:f})}static initAnimationEndState(e){var t,n,r,o,s,c;let l=this.parseArgs(e),u=l.works,{state:d,currentState:f}=e.initial,p=typeof d.panoIndex==`number`?{workCode:(r=(t=d.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=u.getObserver(p),h=clamp$1((o=d.fov)==null?isFristPersonMode(f.mode)?f.fov:l.defaultFov:o,l.minFov,l.maxFov),g=(s=d.longitude)==null?f.longitude:s,_=clamp$1(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((c=d.latitude)==null?isFristPersonMode(f.mode)?f.latitude:l.defaultLatitude:c,_,v),b=new three.Vector3;return m&&b.copy(m.position).applyMatrix4(m.work.transform),{workCode:p.workCode,panoIndex:p.panoIndex,mode:`PanoramaLike`,longitude:g,latitude:y,fov:h,offset:b,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`PanoramaLike`,this.defaultLatitude=n.defaultLatitude,this.defaultFov=n.defaultFov,this.maxFov=n.maxFov,this.minFov=n.minFov,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.moveSpeed=n.moveSpeed,this.intersectMeshCreator=n.intersectMeshCreator,this.aerialObserverMinHeight=n.aerialObserverMinHeight,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.defaultFov!==void 0&&this.defaultFov!==e.defaultFov&&(this.defaultFov=e.defaultFov),e.maxFov!==void 0&&this.maxFov!==e.maxFov&&(this.maxFov=e.maxFov),e.minFov!==void 0&&this.minFov!==e.minFov&&(this.minFov=e.minFov),e.moveSpeed!==void 0&&this.moveSpeed!==e.moveSpeed&&(this.moveSpeed=e.moveSpeed),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return e.aerialObserverMinHeight!==void 0&&this.aerialObserverMinHeight!==e.aerialObserverMinHeight&&(this.aerialObserverMinHeight=e.aerialObserverMinHeight),!0}destroy(){super.destroy(),this.intersectMesh&&(this.helper.remove(this.intersectMesh),this.intersectMesh.dispose()),this.panState=void 0}isReady(){return this.panState||this.pinchState?!1:super.isReady()}calculateMovingDuration(e,t){switch(typeof e){case`function`:return e(t,this.moveSpeed);case`number`:return e;case`string`:return Number(e);default:return clamp$1(t,2,5)/this.moveSpeed*1e3}}hideIntersectMesh(){this.intersectMesh.visible=!1,this.needsRender=!0}coordinatesForOffset(e){let t=this.cameraMotion.value.fov,n=this.camera.aspect,r=this.renderer.getSize(new three.Vector2);return{longitude:2*e.x/(r.x*this.viewport.width)*t/95*n,latitude:-2*e.y/(r.y*this.viewport.height)*t/95}}cameraBounce(){let{longitude:e,latitude:t,fov:n}=this.cameraMotion.value,r=[{progress:0,value:{longitude:e,latitude:t,fov:n}},{progress:.5,value:{longitude:e,latitude:t,fov:n*.98}},{progress:1,value:{longitude:e,latitude:t,fov:n}}];this.cameraMotion.setKeyframes(r,500).catch(noop)}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.99,s.longitude+=o.longitude,s.latitude+=o.latitude;let c=this.cameraMotion.value.fov,l=formatRad$1(this.cameraMotion.value.longitude+s.longitude),u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:l,latitude:f,fov:c,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance}),m=!(o.longitude>1e-4||o.longitude<-1e-4||o.latitude>1e-4||o.latitude<-1e-4),h=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:p}));if(this.emit(`gesture.fire`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:l,latitude:f},0).catch(noop),m?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=this.panState,n=e.pointers.length;if(e.isFinal?this.panState=void 0:this.panState={pointerLength:n,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},t===void 0||t.pointerLength!==n){this.emit(`gesture.pan`,e);return}let r={x:e.center.x-t.x,y:e.center.y-t.y},o=this.coordinatesForOffset(r),s=formatRad$1(this.cameraMotion.value.longitude+o.longitude),c=this.cameraMotion.value.fov,l=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),u=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(this.cameraMotion.value.latitude+o.latitude,l,u);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(d=this.cameraMotion.value.latitude);let f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:d,fov:c,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});if(e.state=f,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(e.isFinal&&t.defaultPrevented)return;let p={longitude:f.longitude,latitude:f.latitude,fov:f.fov};if(this.cameraMotion.set(p,0).catch(noop),e.isFinal){let t=e.velocityX,n=e.velocityY*.6;Math.abs(n)>.5&&Math.abs(t)<.5&&(t=0),this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,this.coordinatesForOffset({x:t,y:n}),0)}}onPinchGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=(t=this.pinchState)==null?void 0:t.fov,r=e.scale;if(e.isFirst){this.pinchState={x:e.center.x,y:e.center.y,fov:this.cameraMotion.value.fov};return}if(e.isFinal&&(this.pinchState=void 0),n===void 0)return;let o=clamp$1(n/r,this.minFov,this.maxFov),s=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),c=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),l=clamp$1(this.cameraMotion.value.latitude,s,c);e.state.fov=o,e.state.latitude=l,this.emit(`gesture.pinch`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:o,latitude:l},0).catch(noop),e.type=`gesture.pan`,this.onPanGesture(e))}onMouseWheel(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=clamp$1(this.cameraMotion.value.fov-e.center.delta,this.minFov,this.maxFov),n=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(t):this.minLatitude,-Math.PI/2,Math.PI/2),r=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(t):this.maxLatitude,-Math.PI/2,Math.PI/2),o=clamp$1(this.cameraMotion.value.latitude,n,r);e.state.fov=t,e.state.latitude=o,this.emit(`gesture.mousewheel`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:t,latitude:o},0).catch(noop),this.onMouseMove(e))}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent){this.hideIntersectMesh();return}r.floorIndex=-1;let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onDblTapGesture(e){this.userAction=e.userAction,this.stopMomentumMovement();let t=this.cameraMotion.value.fov,n=2,r=this.works.getObserver(this.currentPano);if(r){let e=r.images.tiles;e&&e.length&&(n=Math.max(...e.map(e=>e.level)))}let o=Math.max(40-n*5,this.minFov,5),s=o-t<t-this.defaultFov?o:this.defaultFov;e.state.fov=s,this.emit(`gesture.dbltap`,e),!e.defaultPrevented&&(this.cameraMotion.set({fov:s},360).catch(noop),this.hideIntersectMesh())}},blankVideo=`data:video/mp4;base64,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`,result;function canplayVideo(){return result||(result=new Promise(e=>{let t,n=document.createElement(`video`);n.muted=!0,n.src=blankVideo,n.addEventListener(`timeupdate`,function r(){n.removeEventListener(`timeupdate`,r,!1),clearTimeout(t);let o=document.createElement(`canvas`);o.width=o.height=1;let s=o.getContext(`2d`);if(!s){e(!1);return}s.drawImage(n,0,0,1,1);let{data:c}=s.getImageData(0,0,1,1);c[3]>10?e(!0):e(!1)},!1),n.addEventListener(`canplay`,function e(){n.removeEventListener(`canplay`,e,!1),n.play()},!1),t=window.setTimeout(()=>e(!1),1e3)}))}var FACE_ORDER=[`right`,`left`,`up`,`down`,`front`,`back`];function getBox(e,t,n,r){let o=new three.Box3;switch(e){case`up`:o.min.y=.5,o.max.y=.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.z=-n+.5-r,o.max.z=-n+.5;break;case`down`:o.min.y=-.5,o.max.y=-.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.z=n-.5,o.max.z=n-.5+r;break;case`left`:o.min.x=-.5,o.max.x=-.5,o.min.z=-t+.5-r,o.max.z=-t+.5,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`right`:o.min.x=.5,o.max.x=.5,o.min.z=t-.5,o.max.z=t-.5+r,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`front`:o.min.z=-.5,o.max.z=-.5,o.min.x=t-.5,o.max.x=t-.5+r,o.min.y=-n+.5-r,o.max.y=-n+.5;break;case`back`:o.min.z=.5,o.max.z=.5,o.min.x=-t+.5-r,o.max.x=-t+.5,o.min.y=-n+.5-r,o.max.y=-n+.5;break;default:break}return o.applyMatrix4(new three.Matrix4().makeRotationY(Math.PI))}var createChildren=(e,t)=>{if(e.level>=t)return;let n=e.level+1,r=e.size/2,o=[new three.Vector2(e.position.x,e.position.y),new three.Vector2(e.position.x+r,e.position.y),new three.Vector2(e.position.x,e.position.y+r),new three.Vector2(e.position.x+r,e.position.y+r)];for(let s of o){let o={face:e.face,level:n,size:r,position:s,box:getBox(e.face,s.x,s.y,r),parent:e,children:[]};e.children.push(o),createChildren(o,t)}};function createTileCubeNode(e,t){let n={level:0,face:e,position:new three.Vector2(0,0),size:1,box:getBox(e,0,0,1),parent:null,children:[]};return createChildren(n,t),n}function createTileCubeTree(e){return{children:FACE_ORDER.map(t=>createTileCubeNode(t,e)),maxLevel:e}}function traverseTileCubeNode(e,t){for(let n of e.children)t(n)!==!1&&traverseTileCubeNode(n,t)}var _a$1,scratchSortVector3=new three.Vector3,scratchCameraQuaternion=new three.Quaternion,scratchCameraMatrix=new three.Matrix4,scratchCameraProjectMatrix=new three.Matrix4,scratchFrustumMatrix=new three.Matrix4,scratchFrustumMatrixInverse=new three.Matrix4,scratchFrustumProjectMatrix=new three.Matrix4,scratchSceneQuaternionInverse=new three.Quaternion,scratchSceneMatrixInverse=new three.Matrix4,clearColor$1=new three.Color(0,0,0),clearAlpha=0,scratchPrevClearColor$1=new three.Color,clippingPlanes=[],SQRT1_2=(_a$1=Math.SQRT1_2)==null?Math.sqrt(2):_a$1,TILE_QUATERNION={up:new three.Quaternion(SQRT1_2,0,0,SQRT1_2),down:new three.Quaternion(-SQRT1_2,0,0,SQRT1_2),left:new three.Quaternion(0,SQRT1_2,0,SQRT1_2),right:new three.Quaternion(0,-SQRT1_2,0,SQRT1_2),front:new three.Quaternion(0,0,0,1),back:new three.Quaternion(0,1,0,0)},tileGeometry=(()=>{let e=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),t=new Float32Array([0,0,1,0,0,1,1,1]),n=new Uint32Array([0,1,2,1,3,2]),r=new three.BufferGeometry;return r.setAttribute(`position`,new three.BufferAttribute(e,3)),r.setAttribute(`uv`,new three.BufferAttribute(t,2)),r.setIndex(new three.BufferAttribute(n,1)),r.computeBoundingBox(),r})(),TILE_MATERIAL_VERTEX_SHADER=`
|
|
1533
1533
|
varying vec2 vUV;
|
|
1534
1534
|
void main() {
|
|
1535
1535
|
vUV = uv;
|
|
@@ -1676,7 +1676,7 @@ void main() {
|
|
|
1676
1676
|
float cameraDepth = length(cameraVertex);
|
|
1677
1677
|
gl_FragColor = packDepthToRGBA(clamp(cameraDepth / maxDepth, 0.0, 1.0));
|
|
1678
1678
|
}
|
|
1679
|
-
`,uniforms:{maxDepth:new three.Uniform(0)}});function renderDepthCube(e,t,n,r=1e3){depthMaterial.uniforms.maxDepth.value=r,scratchPrevClearColor.copy(e.getClearColor());let o=e.getClearAlpha(),s=t.overrideMaterial;t.overrideMaterial=depthMaterial,e.setClearColor(clearColor,0),n.update(e,t),e.setClearColor(scratchPrevClearColor,o),t.overrideMaterial=s}var defaultEffectEase=linear,scratchRaycaster$1=new three.Raycaster,scratchVector3$3=new three.Vector3,adjustPanoCircleMeshVectors=[new three.Vector3(0,0,0).multiplyScalar(.1),new three.Vector3(1,0,0).multiplyScalar(.1),new three.Vector3(-.5,0,-Math.sqrt(3)/2).multiplyScalar(.1),new three.Vector3(-.5,0,Math.sqrt(3)/2).multiplyScalar(.1)],defaultPanoramaControllerCustomInitArgs=Object.assign(Object.assign({},defaultPanoramaLikeControllerCustomInitArgs),{maxAccessibleDistance:5,panoTapTriggerRadius:.5,panoCircleMeshCreator:(e,t)=>e.position.distanceTo(e.standingPosition)>t.aerialObserverMinHeight?new PanoCircleMeshSolid:new PanoCircleMesh,adjustPanoCircleMeshPositionBasedOnModel:!1,tileLevelForFov:((e,t)=>{var n;let r=e=>e/180*Math.PI,o=(n=Math.log2)==null?(e=>Math.log(e)*Math.LOG2E):n,s=t.height/2/Math.tan(r(e/2))*Math.tan(r(45))*2,c=Math.max(o(s/512),0);return c<2.3&&c>.1&&(c=1),c=c%1>.75?Math.ceil(c):Math.floor(c),c}),tileAppearDuration:.5,tileMaxRequest:3,flyEffectUseDepthBuffer:!1}),PanoramaController=class e extends PanoramaLikeController{static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{maxAccessibleDistance:(n=t.maxAccessibleDistance)==null?defaultPanoramaControllerCustomInitArgs.maxAccessibleDistance:n,panoTapTriggerRadius:(r=t.panoTapTriggerRadius)==null?defaultPanoramaControllerCustomInitArgs.panoTapTriggerRadius:r,panoCircleMeshCreator:(o=t.panoCircleMeshCreator)==null?defaultPanoramaControllerCustomInitArgs.panoCircleMeshCreator:o,adjustPanoCircleMeshPositionBasedOnModel:(s=t.adjustPanoCircleMeshPositionBasedOnModel)==null?defaultPanoramaControllerCustomInitArgs.adjustPanoCircleMeshPositionBasedOnModel:s,tileLevelForFov:(c=t.tileLevelForFov)==null?defaultPanoramaControllerCustomInitArgs.tileLevelForFov:c,tileAppearDuration:(l=t.tileAppearDuration)==null?defaultPanoramaControllerCustomInitArgs.tileAppearDuration:l,tileMaxRequest:(u=t.tileMaxRequest)==null?defaultPanoramaControllerCustomInitArgs.tileMaxRequest:u,flyEffectUseDepthBuffer:(d=t.flyEffectUseDepthBuffer)==null?defaultPanoramaControllerCustomInitArgs.flyEffectUseDepthBuffer:d})}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`Panorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Panorama`,this.initAnimationed=!1,this.maxAccessibleDistance=n.maxAccessibleDistance,this.panoTapTriggerRadius=n.panoTapTriggerRadius,this.panoCircleMeshCreator=n.panoCircleMeshCreator,this.adjustPanoCircleMeshPositionBasedOnModel=n.adjustPanoCircleMeshPositionBasedOnModel,this.tileLevelForFov=n.tileLevelForFov,this.tileAppearDuration=n.tileAppearDuration,this.tileMaxRequest=n.tileMaxRequest,this.flyEffectUseDepthBuffer=n.flyEffectUseDepthBuffer,this.adjustPanoCircleMeshPositionFix=new Map;let r=this.modelScene.parameter.resolveValue(`pano0`),o=this.modelScene.parameter.resolveValue(`pano1`);r&&(o==null?void 0:o.map)!==r.map&&(this.modelScene.parameter.set({pano0:o}),r.map.dispose());let s=new Set;r&&s.add(r),o&&s.add(o),this.panoMeshes=new Map,this.locationMotion=new Motion({count:0,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue(`modelAlpha`)}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),panoPicture:this.modelScene.parameter.resolveValue(`pano1`),position:this.camera.pose.offset.clone(),effect:`fly`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.panoPictureObserverMap=new WeakMap,this.textureLoader=new TextureLoader,this.tiling=new Tiling({fiveId:this.fiveId}),this.panoVideo=new PanoVideo,this.scene.add(this.panoVideo.object),this.accessibleObserverFloorCheckCount=0}get tileLevel(){return this.tiling.level}updateConfiguration(e){return super.updateConfiguration(e)===!1?!1:(e.maxAccessibleDistance!==void 0&&this.maxAccessibleDistance!==e.maxAccessibleDistance&&(this.maxAccessibleDistance=e.maxAccessibleDistance),e.panoTapTriggerRadius!==void 0&&this.panoTapTriggerRadius!==e.panoTapTriggerRadius&&(this.panoTapTriggerRadius=e.panoTapTriggerRadius),e.panoCircleMeshCreator!==void 0&&this.panoCircleMeshCreator!==e.panoCircleMeshCreator&&(this.panoCircleMeshCreator=e.panoCircleMeshCreator,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear())),e.tileLevelForFov!==void 0&&this.tileLevelForFov!==e.tileLevelForFov&&(this.tileLevelForFov=e.tileLevelForFov),e.tileMaxRequest!==void 0&&this.tileMaxRequest!==e.tileMaxRequest&&(this.tileMaxRequest=e.tileMaxRequest),e.flyEffectUseDepthBuffer!==void 0&&this.flyEffectUseDepthBuffer!==e.flyEffectUseDepthBuffer&&(this.flyEffectUseDepthBuffer=e.flyEffectUseDepthBuffer),e.adjustPanoCircleMeshPositionBasedOnModel!==void 0&&this.adjustPanoCircleMeshPositionBasedOnModel!==e.adjustPanoCircleMeshPositionBasedOnModel&&(this.adjustPanoCircleMeshPositionBasedOnModel=e.adjustPanoCircleMeshPositionBasedOnModel,this.adjustPanoCircleMeshPositionBasedOnModel||this.adjustPanoCircleMeshPositionFix.clear()),!0)}destroy(){super.destroy(),this.tiling.dispose(),this.modelScene.parameter.set({refinedScreen:null,pano0Depth:null,pano1Depth:null}),this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0),this.locationMotion.dispose(),this.pendingTextureTask=void 0,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear());let e=this.videoTexture.image;e.pause(),e.oncanplay=noop,e.ontimeupdate=noop,this.scene.remove(this.panoVideo.object),this.panoVideo.setMaterial(null),this.panoVideo.dispose();let t=this.modelScene.parameter.resolveValue(`pano0`),n=this.modelScene.parameter.resolveValue(`pano1`);for(let e of Object.keys(this.panoResources)){let r=this.panoResources[e];if(r.panoPicture){let e=r.panoPicture.map;e&&e!==(t==null?void 0:t.map)&&e!==(n==null?void 0:n.map)&&(e.dispose(),r.panoPicture=null)}delete this.panoResources[e]}}isReady(){return this.locationMotion.ended===!0?super.isReady():!1}isTileReady(){let e=this.tiling.pedding<=0;return this.initAnimationed&&e}updateWork(t,n,r,o){this.userAction=o,this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));return(s.workCode!==this.currentPano.workCode||s.panoIndex!==this.currentPano.panoIndex||s.longitude!==this.cameraMotion.value.longitude||s.latitude!==this.cameraMotion.value.latitude||s.fov!==this.cameraMotion.value.fov)&&(this.initAnimationed=!1,this.moveToPano({workCode:s.workCode,panoIndex:s.panoIndex},{effect:r.effect,duration:r.duration,longitude:s.longitude,latitude:s.latitude,fov:s.fov,moveEndCallback:()=>{this.initAnimationed=!0},moveCancelCallback:()=>{this.initAnimationed=!0}},o)),!0}updateModel(e){this.modelScene=e,this.hideIntersectMesh()}updateTime(e,t,...n){var r,o,s,c,l,u;if(this.destroyed)return;let d={},f={},p=this.camera.getDirection(new three.Vector3),m=this.locationMotion.keyframes[0],h=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[g,_]=this.locationMotion.getKeyFrameSegment(e),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(_),b=this.panoResourceFromLocationMotionKeyframe(m),S=this.panoResourceFromLocationMotionKeyframe(h),C=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),f.longitude=this.cameraMotion.value.longitude,f.latitude=this.cameraMotion.value.latitude,f.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),d.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-_.value.count+1,n=new three.Vector3().copy(v.position),s=new three.Vector3().copy(y.position);if(d.progress=y.effectEasing(t),t>=.01&&t<=.99&&(d.progress=clamp$1(y.effectEasing(t),.01,.99)),y.panoPicture&&(t<1?v.panoPicture&&(d.pano0=v.panoPicture):d.pano0=y.panoPicture,d.pano1=y.panoPicture),y.effect===`montage`?d.transition=`BLACK`:y.effect===`spread`?d.transition=`SPREAD`:d.transition=`FADE`,y.effect===`zoomin`||y.effect===`zoomout`?d.progress=Math.pow(t,3):y.effect===`model`&&this.camera.pose.distance<.01&&(d.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&y.effect!==`fly`&&y.effect!==`model`){if(d.pano0&&v.panoPicture){let e={panoId:d.pano0.panoId,map:d.pano0.map,mapHistogram:d.pano0.mapHistogram,mapSize:d.pano0.mapSize,zoom:d.pano0.zoom,matrix:v.panoPicture.matrix.clone().premultiply(v.fixCameraTransform).setPosition(y.position)},t=this.panoPictureObserverMap.get(d.pano0);t&&this.panoPictureObserverMap.set(e,t),d.pano0=e}n.copy(s),C=!0}f.distance=this.locationMotion.value.distance,f.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=d.pano0)==null?void 0:r.map)||e===((o=d.pano1)==null?void 0:o.map))continue;e.dispose(),t.panoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(y.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(b.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(S.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),f),options:{},progress:this.locationMotion.progress,error:null}))}isEmptyObject(d)===!1&&this.modelScene.parameter.set(d),isEmptyObject(f)===!1&&this.setCamera(f);let w=this.works.getObserver(this.currentPano),T=this.locationMotion.ended?this.getForwardObserverOrNot(this.camera):null,E=this.works.getObserver(v.panoId),D=this.works.getObserver(y.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&w){let e=[],t=w.work.observers;for(let n of w.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(w.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(w.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster$1.ray.origin.copy(s),scratchRaycaster$1.ray.origin.add(scratchVector3$3.copy(t).setY(e)),scratchRaycaster$1.ray.direction.set(0,-1,0),scratchRaycaster$1.firstHitOnly=!0,scratchRaycaster$1.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster$1);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let O=new Map;if(E)for(let e of E.accessibleNodes){let t=E.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});O.set(e,t)}}if(D)for(let e of D.accessibleNodes){let t=D.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});O.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{O.get(t)?O.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),O.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),O.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3$3.set(t.x,t.y,t.z),scratchVector3$3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(p.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||C)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(w){let n=w.work.observers,[,r]=arrayMin(w.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:w.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,3,1/0);let o=w.accessibleNodes.concat(w.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:w.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&T!==null&&panoStringify({panoIndex:T.panoIndex,workCode:T.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===D&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue(`modelAlpha`)>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(s=this.modelScene.parameter.progress)==null?1:s,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,l;if(o&&(l=this.works.getObserver(o.panoId),l||(l=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!l||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize),s=e+1,u=new three.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),d=Math.floor(this.tileLevelForFov(this.camera.fov,u)),f=d>e?d:0;this.tiling.setObserver(l);let p={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:s,level:f},m=this.tiling.update(p),h={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((c=this.modelScene.parameter.progress)==null?0:c)-.5)*2)},g=this.modelScene.parameter.refinedScreen;(m||h.pano!==(g==null?void 0:g.pano)||h.opacity!==(g==null?void 0:g.opacity))&&this.modelScene.parameter.set(`refinedScreen`,h)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),w&&w.images.video&&(this.needsRender=!0),this.intersectMesh&&this.intersectMesh.parent&&w&&w.position.y-w.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=y.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((l=this.modelScene.parameter.pano0Depth)==null?void 0:l.panoId)!==t.panoId||((u=this.modelScene.parameter.pano1Depth)==null?void 0:u.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1],n=this.panoResourceFromLocationMotionKeyframe(t),r=this.works.getObserver(n.panoId);return{workCode:r?r.work.workCode:this.currentPano.workCode,panoIndex:r?r.panoIndex:this.currentPano.panoIndex,mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:r?r.position.clone().applyMatrix4(r.work.transform):this.camera.position.clone(),distance:this.locationMotion.value.distance}}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fly`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoId ${JSON.stringify(e)}`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),h={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},g=`pano:`+jsonHash([h,m,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===g)return;{let e=this.pendingTextureTask.panoId;(o=this.panoMeshes.get(e))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:{panoIndex:u.panoIndex,workCode:u.work.workCode}}))}}let _=`move-to-pano-`+l;this.pending.add(_);let v=this.modelScene.parameter,y;if(v.pano0&&v.pano0.map.name===g?y=v.pano0:v.pano1&&v.pano1.map.name===g&&(y=v.pano1),y){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,panoPicture:{panoId:y.panoId,map:y.map,mapHistogram:y.mapHistogram,mapSize:y.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};n.panoPicture&&this.panoPictureObserverMap.set(n.panoPicture,u),this.pendingTextureTask=void 0,AnimationFrameLoop.shared.add(()=>{this.pending.delete(_),this.doMoveToPano(e,n,t)},!0,1);return}this.pendingTextureTask={panoId:l,hash:g,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=g;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=u.images.histogram;f||(f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),u.images.histogram=f);let p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,panoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};p.panoPicture&&this.panoPictureObserverMap.set(p.panoPicture,u),this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`error`,n),t.moveCancelCallback&&t.moveCancelCallback()}};let b=this.panoMeshes.get(l);b&&b.tap&&b.tap(),this.textureLoader.loadCubeTexture(h,{imageURL:{transform:p,options:m},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e})),((n=this.pendingTextureTask)==null?void 0:n.hash)===g&&((r=this.panoMeshes.get(l))==null||r.setProgress(t))},this.renderer).then(t=>{var n,r;this.pending.delete(_),((n=this.pendingTextureTask)==null?void 0:n.hash)===g?(this.pendingTextureTask.onLoad(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).catch(t=>{var n,r;this.pending.delete(_),((n=this.pendingTextureTask)==null?void 0:n.hash)===g&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)),this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{duration:n,effect:r,userAction:o}=this.initial;this.userAction=o;let s=e.initAnimationEndState(this),c={workCode:s.workCode,panoIndex:s.panoIndex},l={modelAlpha:0},u={perspToOrtho:0},d=!1;this.moveToPano(c,{longitude:s.longitude,latitude:s.latitude,fov:s.fov,effect:r,duration:n,moveStartCallback:e=>{d=!0,this.perspToOrthoMotion.set(u,n).catch(noop),this.modelAlphaMotion.setKeyframes([{progress:0,value:Object.assign({},this.modelAlphaMotion.value)},{progress:.6,value:Object.assign({},this.modelAlphaMotion.value)},{progress:1,value:l}],n).catch(noop),this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()},moveCancelCallback:()=>{let e=Object.assign(Object.assign(Object.assign({},c),{mode:this.mode}),clonePose(this.camera.pose));d===!1&&this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction})),this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()}},o)})}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}locationMotionKeyframesLength(e){let t=0;for(let n=1;n<e.length;n++){let r=this.panoResourceFromLocationMotionKeyframe(e[n-1]).position,o=this.panoResourceFromLocationMotionKeyframe(e[n]).position,s=r.distanceTo(o)*(e[n].value.count-e[n-1].value.count);t+=s}return t}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m,h;let g=now(),_=createUuid();this.panoResources[_]=t;let v=1,y,b,S;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(g),o=this.locationMotion.value,s=((r=this.panoResourceFromLocationMotionKeyframe(n))==null?this.camera:r).position,c=t.position;y=Math.max(s.distanceTo(c),1),b=[{key:n.key,progress:0,value:Object.assign(Object.assign({},o),{count:0})},{key:_,progress:1,value:{distance:0,count:1}}],S=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(g),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;y=u+Math.max(s.distanceTo(c),1),b=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/y,value:n.value},{key:_,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(b);S=d===0||d===0?0:this.locationMotion.getProgressVelocity(g)*d/f}let C=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?y:0),w={longitude:n.longitude,latitude:n.latitude,fov:n.fov},T=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(o=w.longitude)==null?this.camera.pose.longitude:o,latitude:(s=w.latitude)==null?this.camera.pose.latitude:s,fov:(c=w.fov)==null?this.camera.pose.fov:c,offset:t.position.clone(),distance:this.camera.pose.distance}),E=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:E,progress:0,state:T,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(T),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(w,C).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(l=w.longitude)==null?this.cameraMotion.value.longitude:l,latitude:(u=w.latitude)==null?this.cameraMotion.value.latitude:u}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),c=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(d=w.fov)==null?this.cameraMotion.value.fov:d,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let y=clamp$1(_*v,1,170);for(let e=0;e<b.length-1;e++){let t=b[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(c),e.panoPicture&&(e.panoPicture.zoom=Math.tan(y/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(f=w.longitude)==null?this.cameraMotion.value.longitude:f,latitude:(p=w.latitude)==null?this.cameraMotion.value.latitude:p,fov:y}},{progress:1,value:{longitude:(m=w.longitude)==null?this.cameraMotion.value.longitude:m,latitude:(h=w.latitude)==null?this.cameraMotion.value.latitude:h,fov:_}}],C).catch(noop)}this.locationMotion.setKeyframes(b,C,S).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:E,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(e);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),n.oncanplay=noop,n.ontimeupdate=noop,canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}else{let e=this.videoTexture.image;e.removeAttribute(`uuid`),e.oncanplay=noop,e.ontimeupdate=noop}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:E,progress:0,state:T,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}getForwardObserverOrNot(e,t){let n=this.works.getObserver(this.currentPano);if(!n)return null;let r=t==null?new three.Raycaster(e.position.clone(),e.getWorldDirection(new three.Vector3)):t;r.params.Points={threshold:.1},r.firstHitOnly=!0,r.floorIndex=-1;let o=n.standingPosition.clone().applyMatrix4(n.work.transform);if(n.position.clone().applyMatrix4(n.work.transform).distanceTo(r.ray.origin)>1){let e=new three.Raycaster(r.ray.origin,new three.Vector3(0,-1,0));e.firstHitOnly=r.firstHitOnly,e.floorIndex=r.floorIndex;let[t]=this.modelScene.intersectRaycaster(e);t&&t.distance<=2?o.copy(t.point):o.copy(r.ray.origin).add(new three.Vector3(0,-1.5,0))}let[s]=this.modelScene.intersectRaycaster(r),c=(s?s.point:r.ray.origin.clone().add(r.ray.direction.clone().normalize().multiplyScalar(3))).clone().sub(o).normalize();if(c.length()===0)return null;let l=n.work.observers,u=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=l[t];if(!r)return!1;let o=r.standingPosition.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(o.z)>1||Math.abs(o.x)>1||Math.abs(o.y)>1?!1:r.loadable||r.active}),d=new Map,f=u.slice().sort((e,t)=>{let n=l[e],r=d.get(n);r===void 0&&(r=scratchVector3$3.copy(n.standingPosition).applyMatrix4(n.work.transform).distanceTo(o),d.set(n,r));let s=l[t],c=d.get(s);return c===void 0&&(c=scratchVector3$3.copy(s.standingPosition).applyMatrix4(s.work.transform).distanceTo(o),d.set(s,c)),r-c});d.clear();for(let e of[Math.PI/8,Math.PI/6,Math.PI/4,Math.PI/3])for(let t of f){let n=l[t];if(n){let t=scratchVector3$3.copy(n.standingPosition).applyMatrix4(n.work.transform).sub(o);if(t&&t.length()!==0&&c.angleTo(t)<e)return n}}let p=null;if(t){let n=t.ray.intersectBox(this.modelScene.boundingBox,scratchVector3$3);n&&(n.project(e),Math.abs(n.z)<=1&&(p=n.clone()))}else p=new three.Vector3(0,0,0);if(p){let t=.4,r=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=l[t];if(!r)return!1;let o=r.position.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(o.z)>1||Math.abs(o.x)>1||Math.abs(o.y)>1?!1:r.loadable||r.active}),o=new Map,s=r.slice().sort((t,n)=>{let r=l[t],s=o.get(r);s===void 0&&(s=scratchVector3$3.copy(r.position).applyMatrix4(r.work.transform).distanceTo(e.position),o.set(r,s));let c=l[n],u=o.get(c);return u===void 0&&(u=scratchVector3$3.copy(c.position).applyMatrix4(c.work.transform).distanceTo(e.position),o.set(c,u)),s-u});o.clear();for(let t of s){let n=l[t];if(n){let t=scratchVector3$3.copy(n.position).applyMatrix4(n.work.transform);if(t.project(e),Math.abs(t.z)>1)continue;if(Math.pow(p.x-t.x,2)+Math.pow(p.y-t.y,2)<Math.pow(.4,2))return n}}}return null}onTapGesture(e){var t;if(this.userAction=e.userAction,this.stopMomentumMovement(),!this.initAnimationed)return;let n=e.center.raycaster;n.floorIndex=-1;let r=this.camera.getDirection(new three.Vector3).setY(0),o=null,s=this.works.getObserver(this.currentPano);if(!s)return;let c=s.work.observers,l=s.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&s.work.workCode===this.currentPano.workCode)return!1;let t=c[e];return!t||scratchVector3$3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[u]=this.modelScene.intersectRaycaster(n);if(u){let[e,n]=arrayMin(l,e=>{let t=c[e];return t?scratchVector3$3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(u.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(o=(t=c[e])==null?null:t)}if(o||(o=this.getForwardObserverOrNot(this.camera,n)),o&&o.panoId===panoStringify(this.currentPano)&&(o=null),o&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===o.panoId){o=null;break}}if(!o)this.emit(`gesture.tap`,e),e.defaultPrevented||this.locationMotion.ended===!0&&this.cameraBounce();else{let t={},n=Math.PI/6,c=Math.PI/12,l=o.position.clone().applyMatrix4(o.work.transform).setY(0).sub(s.position.clone().applyMatrix4(o.work.transform).setY(0)).normalize(),u=[],d=[],f=[],p=o.work.observers;for(let e of o.accessibleNodes){if(o.panoIndex===e||e===this.currentPano.panoIndex&&o.work.workCode===this.currentPano.workCode)continue;let t=p[e];if(!t)continue;let r=t.position.clone().applyMatrix4(t.work.transform).sub(o.position.clone().applyMatrix4(o.work.transform)).setY(0).normalize();l.angleTo(r)<n&&f.push(r)}let[m]=(f.length>0?f:[...u,...d]).slice().sort((e,t)=>e.angleTo(l)-t.angleTo(l));if(m&&m.angleTo(r)>c&&(t.longitude=Math.atan2(-m.x,-m.z)),this.cameraMotion.value.latitude<-Math.PI/4){let n=e.state.fov;t.latitude=clamp$1(0,clamp$1(typeof this.minLatitude==`function`?this.minLatitude(n):this.minLatitude,-Math.PI/2,Math.PI/2),clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(n):this.maxLatitude,-Math.PI/2,Math.PI/2))}let h=Object.assign({},e.state);if(h.workCode=o.work.workCode,h.panoIndex=o.panoIndex,t.longitude!==void 0&&(h.longitude=t.longitude),t.latitude!==void 0&&(h.latitude=t.latitude),t.fov!==void 0&&(h.fov=t.fov),h.distance=0,h.offset=o.position.clone(),e.state=h,this.emit(`gesture.tap`,e),!e.defaultPrevented){if(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:h,userAction:e.userAction,options:t,progress:0,error:null})),o&&!o.active){let e=panoStringify({panoIndex:o.panoIndex,workCode:o.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}o&&o.active&&this.emit(`pano.request`,createEvent(`pano.request`,{userAction:e.userAction,prevPano:this.currentPano,progress:0,state:h,options:t,error:null}))}}}},DEG_TO_RAD=Math.PI/180,RAD_TO_DEG=180/Math.PI,MIN_TIMESTEP=.001,MAX_TIMESTEP=1,isIOS=(()=>{let e=typeof navigator<`u`&&/iPad|iPhone|iPod/.test(navigator.platform);return()=>e})(),isSafari=(()=>{let e=typeof navigator<`u`&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return()=>e})(),isFirefoxAndroid=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`Firefox`)!==-1&&navigator.userAgent.indexOf(`Android`)!==-1;return()=>e})(),getChromeVersion=(()=>{let e=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9]+)/):null,t=e?parseInt(e[1],10):null;return()=>t})(),isChromeWithoutDeviceMotion=(()=>{let e=!1;if(getChromeVersion()===65){let t=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/):null;if(t){let[n,r,o,s]=t[1].split(`.`);e=parseInt(o,10)===3325&&parseInt(s,10)<148}}return()=>e})(),isSafariWithoutDeviceMotion=(()=>{let e=isIOS()&&isSafari()&&typeof navigator<`u`&&navigator.userAgent.indexOf(`13_4`)!==-1;return()=>e})(),isR7=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`R7 Build`)!==-1;return()=>e})();function isLandscapeMode(){let e=typeof window<`u`&&(window.orientation==90||window.orientation==-90);return isR7()?!e:e}function isTimestampDeltaValid(e){return!(isNaN(e)||e<=MIN_TIMESTEP||e>MAX_TIMESTEP)}function getQuaternionAngle(e){return e.w>1?0:2*Math.acos(e.w)}var warnOnce=(()=>{let e={};return(t,n)=>{e[t]===void 0&&(console.warn(`cardboard: `+n),e[t]=!0)}})();function getOriginFromUrl(e){let t,n=e.indexOf(`://`);t=n===-1?0:n+3;let r=e.indexOf(`/`,t);return r===-1&&(r=e.length),e.substring(0,r)}function isInsideCrossOriginIFrame(){if(typeof window>`u`||typeof document>`u`)return!1;let e=window.self!==window.top,t=getOriginFromUrl(document.referrer),n=getOriginFromUrl(window.location.href);return e&&t!==n}var updateEyeViewMatrices=(()=>{function e(e,t,n){let r=t?t[0]:0,o=t?t[1]:0,s=t?t[2]:0,c=t?t[3]:1,l=r+r,u=o+o,d=s+s,f=r*l,p=r*u,m=r*d,h=o*u,g=o*d,_=s*d,v=c*l,y=c*u,b=c*d;return e[0]=1-(h+_),e[1]=p+b,e[2]=m-y,e[3]=0,e[4]=p-b,e[5]=1-(f+_),e[6]=g+v,e[7]=0,e[8]=m+y,e[9]=g-v,e[10]=1-(f+h),e[11]=0,e[12]=n?n[0]:0,e[13]=n?n[1]:0,e[14]=n?n[2]:0,e[15]=1,e}function t(e,t,n){let r=n[0],o=n[1],s=n[2],c,l,u,d,f,p,m,h,g,_,v,y;return t===e?(e[12]=t[0]*r+t[4]*o+t[8]*s+t[12],e[13]=t[1]*r+t[5]*o+t[9]*s+t[13],e[14]=t[2]*r+t[6]*o+t[10]*s+t[14],e[15]=t[3]*r+t[7]*o+t[11]*s+t[15]):(c=t[0],l=t[1],u=t[2],d=t[3],f=t[4],p=t[5],m=t[6],h=t[7],g=t[8],_=t[9],v=t[10],y=t[11],e[0]=c,e[1]=l,e[2]=u,e[3]=d,e[4]=f,e[5]=p,e[6]=m,e[7]=h,e[8]=g,e[9]=_,e[10]=v,e[11]=y,e[12]=c*r+f*o+g*s+t[12],e[13]=l*r+p*o+_*s+t[13],e[14]=u*r+m*o+v*s+t[14],e[15]=d*r+h*o+y*s+t[15]),e}function n(e,t){let n=t[0],r=t[1],o=t[2],s=t[3],c=t[4],l=t[5],u=t[6],d=t[7],f=t[8],p=t[9],m=t[10],h=t[11],g=t[12],_=t[13],v=t[14],y=t[15],b=n*l-r*c,S=n*u-o*c,C=n*d-s*c,w=r*u-o*l,T=r*d-s*l,E=o*d-s*u,D=f*_-p*g,O=f*v-m*g,k=f*y-h*g,A=p*v-m*_,j=p*y-h*_,M=m*y-h*v,N=b*M-S*j+C*A+w*k-T*O+E*D;return N?(N=1/N,e[0]=(l*M-u*j+d*A)*N,e[1]=(o*j-r*M-s*A)*N,e[2]=(_*E-v*T+y*w)*N,e[3]=(m*T-p*E-h*w)*N,e[4]=(u*k-c*M-d*O)*N,e[5]=(n*M-o*k+s*O)*N,e[6]=(v*C-g*E-y*S)*N,e[7]=(f*E-m*C+h*S)*N,e[8]=(c*j-l*k+d*D)*N,e[9]=(r*k-n*j-s*D)*N,e[10]=(g*T-_*C+y*b)*N,e[11]=(p*C-f*T-h*b)*N,e[12]=(l*O-c*A-u*D)*N,e[13]=(n*A-r*O+o*D)*N,e[14]=(_*S-g*w-v*b)*N,e[15]=(f*w-p*S+m*b)*N,e):null}return(r,o,s)=>{e(r,o),s&&t(r,r,s),n(r,r)}})(),SensorSample=class{constructor(e=new three.Vector3,t=0){this.sample=e,this.timestampS=t}set(e,t){this.sample=e,this.timestampS=t}copy(e){this.set(e.sample,e.timestampS)}},ComplementaryFilter=class{constructor(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new SensorSample,this.currentGyroMeasurement=new SensorSample,this.previousGyroMeasurement=new SensorSample,isIOS()?this.filterQ=new three.Quaternion(-1,0,0,1):this.filterQ=new three.Quaternion(1,0,0,1),this.previousFilterQ=new three.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new three.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new three.Vector3,this.measuredGravity=new three.Vector3,this.gyroIntegralQ=new three.Quaternion}addAccelMeasurement(e,t){this.currentAccelMeasurement.set(e,t)}addGyroMeasurement(e,t){this.currentGyroMeasurement.set(e,t),isTimestampDeltaValid(t-this.previousGyroMeasurement.timestampS)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)}getOrientation(){return this.filterQ}run_(){if(!this.isOrientationInitialized){this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),this.isOrientationInitialized=!0;return}let e=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,t=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,e);this.gyroIntegralQ.multiply(t),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(t);let n=new three.Quaternion;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();let r=new three.Quaternion;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log(`Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)`,RAD_TO_DEG*getQuaternionAngle(r),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));let o=new three.Quaternion;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)}accelToQuaternion_(e){let t=new three.Vector3;t.copy(e),t.normalize();let n=new three.Quaternion;return n.setFromUnitVectors(new three.Vector3(0,0,-1),t),n.inverse(),n}gyroToQuaternionDelta_(e,t){let n=new three.Quaternion,r=new three.Vector3;return r.copy(e),r.normalize(),n.setFromAxisAngle(r,e.length()*t),n}},PosePredictor=class{constructor(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new three.Quaternion,this.previousTimestampS=null,this.deltaQ=new three.Quaternion,this.outQ=new three.Quaternion}getPrediction(e,t,n){if(!this.previousTimestampS)return this.previousQ.copy(e),this.previousTimestampS=n,e;let r=new three.Vector3;r.copy(t),r.normalize();let o=t.length();if(o<DEG_TO_RAD*20)return this.isDebug&&console.log(`Moving slowly, at %s deg/s: no prediction`,(RAD_TO_DEG*o).toFixed(1)),this.outQ.copy(e),this.previousQ.copy(e),this.outQ;let s=o*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(r,s),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(e),this.previousTimestampS=n,this.outQ}},Distortion=class{constructor(e){this.coefficients=e}distortInverse(e){let t=0,n=1,r=e-this.distort(t);for(;Math.abs(n-t)>1e-4;){let o=e-this.distort(n),s=n-o*((n-t)/(o-r));t=n,n=s,r=o}return n}distort(e){let t=e*e,n=0;for(let e=0;e<this.coefficients.length;e++)n=t*(n+this.coefficients[e]);return(n+1)*e}},Pose=class{constructor(){this.angularAcceleration=null,this.angularVelocity=null,this.linearAcceleration=null,this.linearVelocity=null,this.orientation=null,this.position=null}},FieldOfView=class{constructor(){this.leftDegrees=0,this.rightDegrees=0,this.upDegrees=0,this.downDegrees=0}},Sensor=class{constructor(e,t,n,r){this.viewer={id:`CardboardV1`,label:`Cardboard I/O 2014`,fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]},this.device={widthMeters:.11,heightMeters:.062,bevelMeters:.004},this.depthNear=.01,this.depthFar=1e4,this.yawOnly=n,this.accelerometer=new three.Vector3,this.gyroscope=new three.Vector3,this.filter=new ComplementaryFilter(e,r),this.posePredictor=new PosePredictor(t,r),this.isFirefoxAndroid=isFirefoxAndroid(),this.isIOS=isIOS();let o=getChromeVersion();this.isDeviceMotionInRadians=!this.isIOS&&o!==null&&o<66,this.isWithoutDeviceMotion=isChromeWithoutDeviceMotion()||isSafariWithoutDeviceMotion(),this.filterToWorldQ=new three.Quaternion,isIOS()?this.filterToWorldQ.setFromAxisAngle(new three.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new three.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new three.Quaternion,this.worldToScreenQ=new three.Quaternion,this.originalPoseAdjustQ=new three.Quaternion;let s=typeof window<`u`?-window.orientation*Math.PI/180:0;this.originalPoseAdjustQ.setFromAxisAngle(new three.Vector3(0,0,1),s),this.setScreenTransform_(),isLandscapeMode()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new three.Quaternion,this.orientationOut_=new Float32Array(4),this.previousTimestampS=Date.now()}getPosition(){return null}getOrientation(){let e;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ){this.deviceOrientationFixQ=this.deviceOrientationFixQ||(function(){let e=new three.Quaternion().setFromAxisAngle(new three.Vector3(0,0,-1),0),t=new three.Quaternion;return typeof window<`u`&&window.orientation===-90?t.setFromAxisAngle(new three.Vector3(0,1,0),Math.PI/-2):t.setFromAxisAngle(new three.Vector3(0,1,0),Math.PI/2),e.multiply(t)})(),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||(function(){let e=new three.Quaternion;return e.setFromAxisAngle(new three.Vector3(1,0,0),-Math.PI/2),e})(),e=this._deviceOrientationQ;let t=new three.Quaternion;return t.copy(e),t.multiply(this.deviceOrientationFilterToWorldQ),t.multiply(this.resetQ),t.multiply(this.worldToScreenQ),t.multiplyQuaternions(this.deviceOrientationFixQ,t),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}else{let t=this.filter.getOrientation();e=this.posePredictor.getPrediction(t,this.gyroscope,this.previousTimestampS)}let t=new three.Quaternion;return t.copy(this.filterToWorldQ),t.multiply(this.resetQ),t.multiply(e),t.multiply(this.worldToScreenQ),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}getPose(){let e=new Pose;return e.orientation=this.getOrientation(),e}resetPose(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),isLandscapeMode()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)}getFrameData(e){let t=this.getOrientation(),n=this.getEyeOffset(),r=this.getEyeProjectionMatrix();return e.pose.angularAcceleration=null,e.pose.angularVelocity=null,e.pose.linearAcceleration=null,e.pose.linearVelocity=null,e.pose.orientation=t,e.pose.position=null,e.timestamp=this.previousTimestampS,e.leftProjectionMatrix.set(r.left),e.rightProjectionMatrix.set(r.right),updateEyeViewMatrices(e.leftViewMatrix,t,n.left),updateEyeViewMatrices(e.rightViewMatrix,t,n.right),e}start(){if(typeof window>`u`)return()=>{};let e=this.onDeviceMotion_.bind(this),t=this.onOrientationChange_.bind(this),n=this.onMessage_.bind(this),r=this.onDeviceOrientation_.bind(this);return isIOS()&&isInsideCrossOriginIFrame()&&window.addEventListener(`message`,n),window.addEventListener(`orientationchange`,t),this.isWithoutDeviceMotion?window.addEventListener(`deviceorientation`,r):window.addEventListener(`devicemotion`,e),()=>{window.removeEventListener(`devicemotion`,e),window.removeEventListener(`deviceorientation`,t),window.removeEventListener(`orientationchange`,t),window.removeEventListener(`message`,n)}}getEyeOffset(){return{left:[-this.viewer.interLensDistance*.5,0,0],right:[this.viewer.interLensDistance*.5,0,0]}}getEyeProjectionMatrix(){let e=this.getEyeFieldOfView(),t=this.depthNear,n=this.depthFar,r={left:[],right:[]};{let o=e.left.upDegrees*DEG_TO_RAD,s=e.left.downDegrees*DEG_TO_RAD,c=e.left.leftDegrees*DEG_TO_RAD,l=e.left.rightDegrees*DEG_TO_RAD,u=2/(c+l),d=2/(o+s);r.left[0]=u,r.left[1]=0,r.left[2]=0,r.left[3]=0,r.left[4]=0,r.left[5]=d,r.left[6]=0,r.left[7]=0,r.left[8]=-((c-l)*u*.5),r.left[9]=(o-s)*d*.5,r.left[10]=n/(t-n),r.left[11]=-1,r.left[12]=0,r.left[13]=0,r.left[14]=n*t/(t-n),r.left[15]=0}{let o=e.right.upDegrees*DEG_TO_RAD,s=e.right.downDegrees*DEG_TO_RAD,c=e.right.leftDegrees*DEG_TO_RAD,l=e.right.rightDegrees*DEG_TO_RAD,u=2/(c+l),d=2/(o+s);r.right[0]=u,r.right[1]=0,r.right[2]=0,r.right[3]=0,r.right[4]=0,r.right[5]=d,r.right[6]=0,r.right[7]=0,r.right[8]=-((c-l)*u*.5),r.right[9]=(o-s)*d*.5,r.right[10]=n/(t-n),r.right[11]=-1,r.right[12]=0,r.right[13]=0,r.right[14]=n*t/(t-n),r.right[15]=0}return r}getEyeFieldOfView(){let e=this.viewer,t=this.device,n=new Distortion(e.distortionCoefficients),r=e.screenLensDistance,o=(t.widthMeters-e.interLensDistance)/2,s=e.interLensDistance/2,c=e.baselineLensDistance-t.bevelMeters,l=t.heightMeters-c,u=RAD_TO_DEG*Math.atan(n.distort(o/r)),d=RAD_TO_DEG*Math.atan(n.distort(s/r)),f=RAD_TO_DEG*Math.atan(n.distort(c/r)),p=RAD_TO_DEG*Math.atan(n.distort(l/r)),m=new FieldOfView,h=new FieldOfView;return m.leftDegrees=Math.min(u,e.fov),m.rightDegrees=Math.min(d,e.fov),m.downDegrees=Math.min(f,e.fov),m.upDegrees=Math.min(p,e.fov),h.leftDegrees=m.rightDegrees,h.rightDegrees=m.leftDegrees,h.upDegrees=m.upDegrees,h.downDegrees=m.downDegrees,{left:m,right:h}}onDeviceOrientation_(e){this._deviceOrientationQ=this._deviceOrientationQ||new three.Quaternion;let{alpha:t,beta:n,gamma:r}=e;t=(t||0)*Math.PI/180,n=(n||0)*Math.PI/180,r=(r||0)*Math.PI/180,this._deviceOrientationQ.setFromEuler(new three.Euler(t,n,-r,`YXZ`))}onDeviceMotion_(e){this.updateDeviceMotion_(e)}updateDeviceMotion_(e){let t=e.accelerationIncludingGravity,n=e.rotationRate,r=e.timeStamp/1e3,o=r-this.previousTimestampS;if(o<0){warnOnce(`fusion-pose-sensor:invalid:non-monotonic`,`Invalid timestamps detected: non-monotonic timestamp from devicemotion`),this.previousTimestampS=r;return}else if(o<=MIN_TIMESTEP||o>MAX_TIMESTEP){warnOnce(`fusion-pose-sensor:invalid:outside-threshold`,`Invalid timestamps detected: Timestamp from devicemotion outside expected range.`),this.previousTimestampS=r;return}t&&(this.accelerometer.set(-t.x,-t.y,-t.z),n&&(isR7()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,r)),this.filter.addAccelMeasurement(this.accelerometer,r)),this.previousTimestampS=r}onOrientationChange_(){this.setScreenTransform_()}onMessage_(e){let t=e.data;!t||!t.type||t.type.toLowerCase()===`devicemotion`&&this.updateDeviceMotion_(t.deviceMotionEvent)}setScreenTransform_(){switch(this.worldToScreenQ.set(0,0,0,1),typeof window<`u`?window.orientation:0){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new three.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new three.Vector3(0,0,1),Math.PI/2);break;case 180:break}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()}},defaultLeftBounds=[0,0,.5,1],defaultRightBounds=[.5,0,.5,1],Cardboard=class{constructor(e){this.renderer=e,this.sensor=new Sensor(.98,.04,!1,!1),this.scale=1,this.cameraL=new three.PerspectiveCamera,this.cameraR=new three.PerspectiveCamera;let t=this.sensor.start();this.dispose=()=>{let e=this.renderer.getSize(new three.Vector2);this.renderer.setScissor(0,0,e.width,e.height),this.renderer.setViewport(0,0,e.width,e.height),this.renderer.setScissorTest(!1),t()}}render(e,t){let n=this.renderer.getSize(new three.Vector2);if(n.width>n.height){var r=e.autoUpdate;r&&(e.updateMatrixWorld(),e.autoUpdate=!1);let o={x:Math.round(n.width*defaultLeftBounds[0]),y:Math.round(n.height*defaultLeftBounds[1]),width:Math.round(n.width*defaultLeftBounds[2]),height:Math.round(n.height*defaultLeftBounds[3])},s={x:Math.round(n.width*defaultRightBounds[0]),y:Math.round(n.height*defaultRightBounds[1]),width:Math.round(n.width*defaultRightBounds[2]),height:Math.round(n.height*defaultRightBounds[3])};this.renderer.setScissorTest(!0),this.renderer.autoClear&&this.renderer.clear(),t.parent===null&&t.updateMatrixWorld(),t.matrixWorld.decompose(this.cameraL.position,this.cameraL.quaternion,this.cameraL.scale),t.matrixWorld.decompose(this.cameraR.position,this.cameraR.quaternion,this.cameraR.scale);let c=this.sensor.getEyeOffset();this.cameraL.translateOnAxis(new three.Vector3().fromArray(c.left),this.scale),this.cameraR.translateOnAxis(new three.Vector3().fromArray(c.right),this.scale);let l=this.sensor.getEyeProjectionMatrix();this.cameraL.projectionMatrix.elements=l.left.slice(),this.cameraR.projectionMatrix.elements=l.right.slice(),this.renderer.setViewport(o.x,o.y,o.width,o.height),this.renderer.setScissor(o.x,o.y,o.width,o.height),this.renderer.render(e,this.cameraL),this.renderer.setViewport(s.x,s.y,s.width,s.height),this.renderer.setScissor(s.x,s.y,s.width,s.height),this.renderer.render(e,this.cameraR),this.renderer.setViewport(0,0,n.width,n.height),this.renderer.setScissor(0,0,n.width,n.height),this.renderer.setScissorTest(!1),r&&(e.autoUpdate=!0)}else this.renderer.render(e,t)}dispose(){}},cardboard_png_data_url_default=`data:image/png;base64,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`,phone_png_data_url_default=`data:image/png;base64,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`,_a,LOCALE={zh:{TITLE:`眼镜模式`,HIT:`请将手机横屏放入 VR 眼镜中`},en:{TITLE:`GLASSES MODE`,HIT:`Please put the mobile phone horizontally into the VR glasses.`},ja:{TITLE:`メガネモード`,HIT:`携帯電話をVRメガネに水平に入れてください。`}},TEXT=typeof navigator<`u`?(_a=LOCALE[navigator.language.split(`-`)[0]])==null?LOCALE.zh:_a:LOCALE.zh,CONTENTS=`
|
|
1679
|
+
`,uniforms:{maxDepth:new three.Uniform(0)}});function renderDepthCube(e,t,n,r=1e3){depthMaterial.uniforms.maxDepth.value=r,scratchPrevClearColor.copy(e.getClearColor());let o=e.getClearAlpha(),s=t.overrideMaterial;t.overrideMaterial=depthMaterial,e.setClearColor(clearColor,0),n.update(e,t),e.setClearColor(scratchPrevClearColor,o),t.overrideMaterial=s}var defaultEffectEase=linear,scratchRaycaster$1=new three.Raycaster,scratchVector3$3=new three.Vector3,adjustPanoCircleMeshVectors=[new three.Vector3(0,0,0).multiplyScalar(.1),new three.Vector3(1,0,0).multiplyScalar(.1),new three.Vector3(-.5,0,-Math.sqrt(3)/2).multiplyScalar(.1),new three.Vector3(-.5,0,Math.sqrt(3)/2).multiplyScalar(.1)],defaultPanoramaControllerCustomInitArgs=Object.assign(Object.assign({},defaultPanoramaLikeControllerCustomInitArgs),{maxAccessibleDistance:5,panoTapTriggerRadius:.5,panoCircleMeshCreator:(e,t)=>e.position.distanceTo(e.standingPosition)>t.aerialObserverMinHeight?new PanoCircleMeshSolid:new PanoCircleMesh,adjustPanoCircleMeshPositionBasedOnModel:!1,tileLevelForFov:((e,t)=>{var n;let r=e=>e/180*Math.PI,o=(n=Math.log2)==null?(e=>Math.log(e)*Math.LOG2E):n,s=t.height/2/Math.tan(r(e/2))*Math.tan(r(45))*2,c=Math.max(o(s/512),0);return c<2.3&&c>.1&&(c=1),c=c%1>.75?Math.ceil(c):Math.floor(c),c}),tileAppearDuration:.5,tileMaxRequest:3,flyEffectUseDepthBuffer:!1}),PanoramaController=class e extends PanoramaLikeController{static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{maxAccessibleDistance:(n=t.maxAccessibleDistance)==null?defaultPanoramaControllerCustomInitArgs.maxAccessibleDistance:n,panoTapTriggerRadius:(r=t.panoTapTriggerRadius)==null?defaultPanoramaControllerCustomInitArgs.panoTapTriggerRadius:r,panoCircleMeshCreator:(o=t.panoCircleMeshCreator)==null?defaultPanoramaControllerCustomInitArgs.panoCircleMeshCreator:o,adjustPanoCircleMeshPositionBasedOnModel:(s=t.adjustPanoCircleMeshPositionBasedOnModel)==null?defaultPanoramaControllerCustomInitArgs.adjustPanoCircleMeshPositionBasedOnModel:s,tileLevelForFov:(c=t.tileLevelForFov)==null?defaultPanoramaControllerCustomInitArgs.tileLevelForFov:c,tileAppearDuration:(l=t.tileAppearDuration)==null?defaultPanoramaControllerCustomInitArgs.tileAppearDuration:l,tileMaxRequest:(u=t.tileMaxRequest)==null?defaultPanoramaControllerCustomInitArgs.tileMaxRequest:u,flyEffectUseDepthBuffer:(d=t.flyEffectUseDepthBuffer)==null?defaultPanoramaControllerCustomInitArgs.flyEffectUseDepthBuffer:d})}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`Panorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Panorama`,this.initAnimationed=!1,this.maxAccessibleDistance=n.maxAccessibleDistance,this.panoTapTriggerRadius=n.panoTapTriggerRadius,this.panoCircleMeshCreator=n.panoCircleMeshCreator,this.adjustPanoCircleMeshPositionBasedOnModel=n.adjustPanoCircleMeshPositionBasedOnModel,this.tileLevelForFov=n.tileLevelForFov,this.tileAppearDuration=n.tileAppearDuration,this.tileMaxRequest=n.tileMaxRequest,this.flyEffectUseDepthBuffer=n.flyEffectUseDepthBuffer,this.adjustPanoCircleMeshPositionFix=new Map;let r=this.modelScene.parameter.resolveValue(`pano0`),o=this.modelScene.parameter.resolveValue(`pano1`);r&&(o==null?void 0:o.map)!==r.map&&(this.modelScene.parameter.set({pano0:o}),r.map.dispose());let s=new Set;r&&s.add(r),o&&s.add(o),this.panoMeshes=new Map,this.locationMotion=new Motion({count:0,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue(`modelAlpha`)}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),panoPicture:this.modelScene.parameter.resolveValue(`pano1`),position:this.camera.pose.offset.clone(),effect:`fly`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.panoPictureObserverMap=new WeakMap,this.textureLoader=new TextureLoader,this.tiling=new Tiling({fiveId:this.fiveId}),this.panoVideo=new PanoVideo,this.scene.add(this.panoVideo.object),this.accessibleObserverFloorCheckCount=0}get tileLevel(){return this.tiling.level}updateConfiguration(e){return super.updateConfiguration(e)===!1?!1:(e.maxAccessibleDistance!==void 0&&this.maxAccessibleDistance!==e.maxAccessibleDistance&&(this.maxAccessibleDistance=e.maxAccessibleDistance),e.panoTapTriggerRadius!==void 0&&this.panoTapTriggerRadius!==e.panoTapTriggerRadius&&(this.panoTapTriggerRadius=e.panoTapTriggerRadius),e.panoCircleMeshCreator!==void 0&&this.panoCircleMeshCreator!==e.panoCircleMeshCreator&&(this.panoCircleMeshCreator=e.panoCircleMeshCreator,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear())),e.tileLevelForFov!==void 0&&this.tileLevelForFov!==e.tileLevelForFov&&(this.tileLevelForFov=e.tileLevelForFov),e.tileMaxRequest!==void 0&&this.tileMaxRequest!==e.tileMaxRequest&&(this.tileMaxRequest=e.tileMaxRequest),e.flyEffectUseDepthBuffer!==void 0&&this.flyEffectUseDepthBuffer!==e.flyEffectUseDepthBuffer&&(this.flyEffectUseDepthBuffer=e.flyEffectUseDepthBuffer),e.adjustPanoCircleMeshPositionBasedOnModel!==void 0&&this.adjustPanoCircleMeshPositionBasedOnModel!==e.adjustPanoCircleMeshPositionBasedOnModel&&(this.adjustPanoCircleMeshPositionBasedOnModel=e.adjustPanoCircleMeshPositionBasedOnModel,this.adjustPanoCircleMeshPositionBasedOnModel||this.adjustPanoCircleMeshPositionFix.clear()),!0)}destroy(){super.destroy(),this.tiling.dispose(),this.modelScene.parameter.set({refinedScreen:null,pano0Depth:null,pano1Depth:null}),this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0),this.locationMotion.dispose(),this.pendingPanoTask=void 0,this.panoMeshes&&(this.panoMeshes.forEach(e=>{this.helper.remove(e),e.dispose()}),this.panoMeshes.clear());let e=this.videoTexture.image;e.pause(),e.oncanplay=noop,e.ontimeupdate=noop,this.scene.remove(this.panoVideo.object),this.panoVideo.setMaterial(null),this.panoVideo.dispose();let t=this.modelScene.parameter.resolveValue(`pano0`),n=this.modelScene.parameter.resolveValue(`pano1`);for(let e of Object.keys(this.panoResources)){let r=this.panoResources[e];if(r.panoPicture){let e=r.panoPicture.map;e&&e!==(t==null?void 0:t.map)&&e!==(n==null?void 0:n.map)&&(e.dispose(),r.panoPicture=null)}delete this.panoResources[e]}}isReady(){return this.locationMotion.ended===!0?super.isReady():!1}isTileReady(){let e=this.tiling.pedding<=0;return this.initAnimationed&&e}updateWork(t,n,r,o){this.userAction=o,this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));return(s.workCode!==this.currentPano.workCode||s.panoIndex!==this.currentPano.panoIndex||s.longitude!==this.cameraMotion.value.longitude||s.latitude!==this.cameraMotion.value.latitude||s.fov!==this.cameraMotion.value.fov)&&(this.initAnimationed=!1,this.moveToPano({workCode:s.workCode,panoIndex:s.panoIndex},{effect:r.effect,duration:r.duration,longitude:s.longitude,latitude:s.latitude,fov:s.fov,moveEndCallback:()=>{this.initAnimationed=!0},moveCancelCallback:()=>{this.initAnimationed=!0}},o)),!0}updateModel(e){this.modelScene=e,this.hideIntersectMesh()}updateTime(e,t,...n){var r,o,s,c,l,u;if(this.destroyed)return;let d={},f={},p=this.camera.getDirection(new three.Vector3),m=this.locationMotion.keyframes[0],h=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[g,_]=this.locationMotion.getKeyFrameSegment(e),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(_),b=this.panoResourceFromLocationMotionKeyframe(m),S=this.panoResourceFromLocationMotionKeyframe(h),C=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),f.longitude=this.cameraMotion.value.longitude,f.latitude=this.cameraMotion.value.latitude,f.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),d.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-_.value.count+1,n=new three.Vector3().copy(v.position),s=new three.Vector3().copy(y.position);if(d.progress=y.effectEasing(t),t>=.01&&t<=.99&&(d.progress=clamp$1(y.effectEasing(t),.01,.99)),y.panoPicture&&(t<1?v.panoPicture&&(d.pano0=v.panoPicture):d.pano0=y.panoPicture,d.pano1=y.panoPicture),y.effect===`montage`?d.transition=`BLACK`:y.effect===`spread`?d.transition=`SPREAD`:d.transition=`FADE`,y.effect===`zoomin`||y.effect===`zoomout`?d.progress=Math.pow(t,3):y.effect===`model`&&this.camera.pose.distance<.01&&(d.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&y.effect!==`fly`&&y.effect!==`model`){if(d.pano0&&v.panoPicture){let e={panoId:d.pano0.panoId,map:d.pano0.map,mapHistogram:d.pano0.mapHistogram,mapSize:d.pano0.mapSize,zoom:d.pano0.zoom,matrix:v.panoPicture.matrix.clone().premultiply(v.fixCameraTransform).setPosition(y.position)},t=this.panoPictureObserverMap.get(d.pano0);t&&this.panoPictureObserverMap.set(e,t),d.pano0=e}n.copy(s),C=!0}f.distance=this.locationMotion.value.distance,f.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=d.pano0)==null?void 0:r.map)||e===((o=d.pano1)==null?void 0:o.map))continue;e.dispose(),t.panoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(y.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(b.panoId),pano:panoParse(S.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(S.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),f),options:{},progress:this.locationMotion.progress,error:null}))}isEmptyObject(d)===!1&&this.modelScene.parameter.set(d),isEmptyObject(f)===!1&&this.setCamera(f);let w=this.works.getObserver(this.currentPano),T=this.locationMotion.ended?this.getForwardObserverOrNot(this.camera):null,E=this.works.getObserver(v.panoId),D=this.works.getObserver(y.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&w){let e=[],t=w.work.observers;for(let n of w.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(w.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(w.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster$1.ray.origin.copy(s),scratchRaycaster$1.ray.origin.add(scratchVector3$3.copy(t).setY(e)),scratchRaycaster$1.ray.direction.set(0,-1,0),scratchRaycaster$1.firstHitOnly=!0,scratchRaycaster$1.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster$1);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let O=new Map;if(E)for(let e of E.accessibleNodes){let t=E.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});O.set(e,t)}}if(D)for(let e of D.accessibleNodes){let t=D.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});O.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{O.get(t)?O.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),O.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),O.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3$3.set(t.x,t.y,t.z),scratchVector3$3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(p.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||C)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(w){let n=w.work.observers,[,r]=arrayMin(w.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:w.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,3,1/0);let o=w.accessibleNodes.concat(w.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:w.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&T!==null&&panoStringify({panoIndex:T.panoIndex,workCode:T.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===D&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue(`modelAlpha`)>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(s=this.modelScene.parameter.progress)==null?1:s,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,l;if(o&&(l=this.works.getObserver(o.panoId),l||(l=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!l||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize),s=e+1,u=new three.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),d=Math.floor(this.tileLevelForFov(this.camera.fov,u)),f=d>e?d:0;this.tiling.setObserver(l);let p={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:s,level:f},m=this.tiling.update(p),h={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((c=this.modelScene.parameter.progress)==null?0:c)-.5)*2)},g=this.modelScene.parameter.refinedScreen;(m||h.pano!==(g==null?void 0:g.pano)||h.opacity!==(g==null?void 0:g.opacity))&&this.modelScene.parameter.set(`refinedScreen`,h)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),w&&w.images.video&&(this.needsRender=!0),this.intersectMesh&&this.intersectMesh.parent&&w&&w.position.y-w.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=y.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((l=this.modelScene.parameter.pano0Depth)==null?void 0:l.panoId)!==t.panoId||((u=this.modelScene.parameter.pano1Depth)==null?void 0:u.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1],n=this.panoResourceFromLocationMotionKeyframe(t),r=this.works.getObserver(n.panoId);return{workCode:r?r.work.workCode:this.currentPano.workCode,panoIndex:r?r.panoIndex:this.currentPano.panoIndex,mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:r?r.position.clone().applyMatrix4(r.work.transform):this.camera.position.clone(),distance:this.locationMotion.value.distance}}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fly`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoId ${JSON.stringify(e)}`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),h={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},g=`pano:`+jsonHash([h,m,p]);if(this.pendingPanoTask){if(this.pendingPanoTask.hash===g)return;{let e=this.pendingPanoTask.panoId;(o=this.panoMeshes.get(e))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:{panoIndex:u.panoIndex,workCode:u.work.workCode}}))}}let _=`move-to-pano-`+l;this.pending.add(_);let v=this.modelScene.parameter,y;if(v.pano0&&v.pano0.map.name===g?y=v.pano0:v.pano1&&v.pano1.map.name===g&&(y=v.pano1),y){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,panoPicture:{panoId:y.panoId,map:y.map,mapHistogram:y.mapHistogram,mapSize:y.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};n.panoPicture&&this.panoPictureObserverMap.set(n.panoPicture,u),this.pendingPanoTask=void 0,AnimationFrameLoop.shared.add(()=>{this.pending.delete(_),this.doMoveToPano(e,n,t)},!0,1);return}let b=this.panoMeshes.get(l);b&&b.tap&&b.tap(),this.pendingPanoTask={panoId:l,hash:g,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=g;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=u.images.histogram;f||(f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),u.images.histogram=f);let p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,panoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};p.panoPicture&&this.panoPictureObserverMap.set(p.panoPicture,u),this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,pano:{panoIndex:r.panoIndex,workCode:r.workCode},progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,pano:{panoIndex:r.panoIndex,workCode:r.workCode},progress:0,state:r})),this.emit(`error`,n),t.moveCancelCallback&&t.moveCancelCallback()}};let S=createExtendableEvent(`pano.prepare`,{prevPano:this.currentPano,pano:e});this.emit(`pano.prepare`,S),Promise.all([Promise.resolve().then(()=>{this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}).then(()=>this.textureLoader.loadCubeTexture(h,{imageURL:{transform:p,options:m},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e})),((n=this.pendingPanoTask)==null?void 0:n.hash)===g&&((r=this.panoMeshes.get(l))==null||r.setProgress(t))},this.renderer)).catch(t=>{let n=toError(t);return this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:n,progress:0,meta:null,pano:e})),this.emit(`error`,n),n}),Promise.resolve().then(()=>waitForExtendableEvent(S)).catch(e=>{let t=toError(e);return this.emit(`error`,t),t})]).then(([t,n])=>{var r,o,s,c;if(!(t instanceof Error)&&!(n instanceof Error))this.pending.delete(_),((r=this.pendingPanoTask)==null?void 0:r.hash)===g?(this.pendingPanoTask.onLoad(t),this.pendingPanoTask=void 0,(o=this.panoMeshes.get(l))==null||o.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}));else{let e=null;t instanceof Error?e||(e=t):t.body.dispose(),n instanceof Error&&(e||(e=n)),this.pending.delete(_),((s=this.pendingPanoTask)==null?void 0:s.hash)===g&&(this.pendingPanoTask.onError(e),this.pendingPanoTask=void 0,(c=this.panoMeshes.get(l))==null||c.setProgress(0))}})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{duration:n,effect:r,userAction:o}=this.initial;this.userAction=o;let s=e.initAnimationEndState(this),c={workCode:s.workCode,panoIndex:s.panoIndex},l={modelAlpha:0},u={perspToOrtho:0},d=!1;this.moveToPano(c,{longitude:s.longitude,latitude:s.latitude,fov:s.fov,effect:r,duration:n,moveStartCallback:e=>{d=!0,this.perspToOrthoMotion.set(u,n).catch(noop),this.modelAlphaMotion.setKeyframes([{progress:0,value:Object.assign({},this.modelAlphaMotion.value)},{progress:.6,value:Object.assign({},this.modelAlphaMotion.value)},{progress:1,value:l}],n).catch(noop),this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()},moveCancelCallback:()=>{let e=Object.assign(Object.assign(Object.assign({},c),{mode:this.mode}),clonePose(this.camera.pose));d===!1&&this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction})),this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),this.initAnimationed=!0,t()}},o)})}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}locationMotionKeyframesLength(e){let t=0;for(let n=1;n<e.length;n++){let r=this.panoResourceFromLocationMotionKeyframe(e[n-1]).position,o=this.panoResourceFromLocationMotionKeyframe(e[n]).position,s=r.distanceTo(o)*(e[n].value.count-e[n-1].value.count);t+=s}return t}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m,h;let g=now(),_=createUuid();this.panoResources[_]=t;let v=1,y,b,S;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(g),o=this.locationMotion.value,s=((r=this.panoResourceFromLocationMotionKeyframe(n))==null?this.camera:r).position,c=t.position;y=Math.max(s.distanceTo(c),1),b=[{key:n.key,progress:0,value:Object.assign(Object.assign({},o),{count:0})},{key:_,progress:1,value:{distance:0,count:1}}],S=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(g),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;y=u+Math.max(s.distanceTo(c),1),b=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/y,value:n.value},{key:_,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(b);S=d===0||d===0?0:this.locationMotion.getProgressVelocity(g)*d/f}let C=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?y:0),w={longitude:n.longitude,latitude:n.latitude,fov:n.fov},T=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(o=w.longitude)==null?this.camera.pose.longitude:o,latitude:(s=w.latitude)==null?this.camera.pose.latitude:s,fov:(c=w.fov)==null?this.camera.pose.fov:c,offset:t.position.clone(),distance:this.camera.pose.distance}),E=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:E,pano:{panoIndex:T.panoIndex,workCode:T.workCode},progress:0,state:T,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(T),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(w,C).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(l=w.longitude)==null?this.cameraMotion.value.longitude:l,latitude:(u=w.latitude)==null?this.cameraMotion.value.latitude:u}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),c=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(d=w.fov)==null?this.cameraMotion.value.fov:d,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let y=clamp$1(_*v,1,170);for(let e=0;e<b.length-1;e++){let t=b[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(c),e.panoPicture&&(e.panoPicture.zoom=Math.tan(y/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(f=w.longitude)==null?this.cameraMotion.value.longitude:f,latitude:(p=w.latitude)==null?this.cameraMotion.value.latitude:p,fov:y}},{progress:1,value:{longitude:(m=w.longitude)==null?this.cameraMotion.value.longitude:m,latitude:(h=w.latitude)==null?this.cameraMotion.value.latitude:h,fov:_}}],C).catch(noop)}this.locationMotion.setKeyframes(b,C,S).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:E,pano:{panoIndex:t.panoIndex,workCode:t.workCode},progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(e);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),n.oncanplay=noop,n.ontimeupdate=noop,canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}else{let e=this.videoTexture.image;e.removeAttribute(`uuid`),e.oncanplay=noop,e.ontimeupdate=noop}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:E,pano:{panoIndex:T.panoIndex,workCode:T.workCode},progress:0,state:T,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}getForwardObserverOrNot(e,t){let n=this.works.getObserver(this.currentPano);if(!n)return null;let r=t==null?new three.Raycaster(e.position.clone(),e.getWorldDirection(new three.Vector3)):t;r.params.Points={threshold:.1},r.firstHitOnly=!0,r.floorIndex=-1;let o=n.standingPosition.clone().applyMatrix4(n.work.transform);if(n.position.clone().applyMatrix4(n.work.transform).distanceTo(r.ray.origin)>1){let e=new three.Raycaster(r.ray.origin,new three.Vector3(0,-1,0));e.firstHitOnly=r.firstHitOnly,e.floorIndex=r.floorIndex;let[t]=this.modelScene.intersectRaycaster(e);t&&t.distance<=2?o.copy(t.point):o.copy(r.ray.origin).add(new three.Vector3(0,-1.5,0))}let[s]=this.modelScene.intersectRaycaster(r),c=(s?s.point:r.ray.origin.clone().add(r.ray.direction.clone().normalize().multiplyScalar(3))).clone().sub(o).normalize();if(c.length()===0)return null;let l=n.work.observers,u=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=l[t];if(!r)return!1;let o=r.standingPosition.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(o.z)>1||Math.abs(o.x)>1||Math.abs(o.y)>1?!1:r.loadable||r.active}),d=new Map,f=u.slice().sort((e,t)=>{let n=l[e],r=d.get(n);r===void 0&&(r=scratchVector3$3.copy(n.standingPosition).applyMatrix4(n.work.transform).distanceTo(o),d.set(n,r));let s=l[t],c=d.get(s);return c===void 0&&(c=scratchVector3$3.copy(s.standingPosition).applyMatrix4(s.work.transform).distanceTo(o),d.set(s,c)),r-c});d.clear();for(let e of[Math.PI/8,Math.PI/6,Math.PI/4,Math.PI/3])for(let t of f){let n=l[t];if(n){let t=scratchVector3$3.copy(n.standingPosition).applyMatrix4(n.work.transform).sub(o);if(t&&t.length()!==0&&c.angleTo(t)<e)return n}}let p=null;if(t){let n=t.ray.intersectBox(this.modelScene.boundingBox,scratchVector3$3);n&&(n.project(e),Math.abs(n.z)<=1&&(p=n.clone()))}else p=new three.Vector3(0,0,0);if(p){let t=.4,r=n.accessibleNodes.filter(t=>{if(t===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let r=l[t];if(!r)return!1;let o=r.position.clone().applyMatrix4(r.work.transform).project(e);return Math.abs(o.z)>1||Math.abs(o.x)>1||Math.abs(o.y)>1?!1:r.loadable||r.active}),o=new Map,s=r.slice().sort((t,n)=>{let r=l[t],s=o.get(r);s===void 0&&(s=scratchVector3$3.copy(r.position).applyMatrix4(r.work.transform).distanceTo(e.position),o.set(r,s));let c=l[n],u=o.get(c);return u===void 0&&(u=scratchVector3$3.copy(c.position).applyMatrix4(c.work.transform).distanceTo(e.position),o.set(c,u)),s-u});o.clear();for(let t of s){let n=l[t];if(n){let t=scratchVector3$3.copy(n.position).applyMatrix4(n.work.transform);if(t.project(e),Math.abs(t.z)>1)continue;if(Math.pow(p.x-t.x,2)+Math.pow(p.y-t.y,2)<Math.pow(.4,2))return n}}}return null}onTapGesture(e){var t;if(this.userAction=e.userAction,this.stopMomentumMovement(),!this.initAnimationed)return;let n=e.center.raycaster;n.floorIndex=-1;let r=this.camera.getDirection(new three.Vector3).setY(0),o=null,s=this.works.getObserver(this.currentPano);if(!s)return;let c=s.work.observers,l=s.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&s.work.workCode===this.currentPano.workCode)return!1;let t=c[e];return!t||scratchVector3$3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[u]=this.modelScene.intersectRaycaster(n);if(u){let[e,n]=arrayMin(l,e=>{let t=c[e];return t?scratchVector3$3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(u.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(o=(t=c[e])==null?null:t)}if(o||(o=this.getForwardObserverOrNot(this.camera,n)),o&&o.panoId===panoStringify(this.currentPano)&&(o=null),o&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===o.panoId){o=null;break}}if(!o)this.emit(`gesture.tap`,e),e.defaultPrevented||this.locationMotion.ended===!0&&this.cameraBounce();else{let t={},n=Math.PI/6,c=Math.PI/12,l=o.position.clone().applyMatrix4(o.work.transform).setY(0).sub(s.position.clone().applyMatrix4(o.work.transform).setY(0)).normalize(),u=[],d=[],f=[],p=o.work.observers;for(let e of o.accessibleNodes){if(o.panoIndex===e||e===this.currentPano.panoIndex&&o.work.workCode===this.currentPano.workCode)continue;let t=p[e];if(!t)continue;let r=t.position.clone().applyMatrix4(t.work.transform).sub(o.position.clone().applyMatrix4(o.work.transform)).setY(0).normalize();l.angleTo(r)<n&&f.push(r)}let[m]=(f.length>0?f:[...u,...d]).slice().sort((e,t)=>e.angleTo(l)-t.angleTo(l));if(m&&m.angleTo(r)>c&&(t.longitude=Math.atan2(-m.x,-m.z)),this.cameraMotion.value.latitude<-Math.PI/4){let n=e.state.fov;t.latitude=clamp$1(0,clamp$1(typeof this.minLatitude==`function`?this.minLatitude(n):this.minLatitude,-Math.PI/2,Math.PI/2),clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(n):this.maxLatitude,-Math.PI/2,Math.PI/2))}let h=Object.assign({},e.state);if(h.workCode=o.work.workCode,h.panoIndex=o.panoIndex,t.longitude!==void 0&&(h.longitude=t.longitude),t.latitude!==void 0&&(h.latitude=t.latitude),t.fov!==void 0&&(h.fov=t.fov),h.distance=0,h.offset=o.position.clone(),e.state=h,this.emit(`gesture.tap`,e),!e.defaultPrevented){if(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,pano:{panoIndex:h.panoIndex,workCode:h.workCode},state:h,userAction:e.userAction,options:t,progress:0,error:null})),o&&!o.active){let e=panoStringify({panoIndex:o.panoIndex,workCode:o.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}o&&o.active&&this.emit(`pano.request`,createEvent(`pano.request`,{userAction:e.userAction,prevPano:this.currentPano,pano:{panoIndex:h.panoIndex,workCode:h.workCode},progress:0,state:h,options:t,error:null}))}}}},DEG_TO_RAD=Math.PI/180,RAD_TO_DEG=180/Math.PI,MIN_TIMESTEP=.001,MAX_TIMESTEP=1,isIOS=(()=>{let e=typeof navigator<`u`&&/iPad|iPhone|iPod/.test(navigator.platform);return()=>e})(),isSafari=(()=>{let e=typeof navigator<`u`&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return()=>e})(),isFirefoxAndroid=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`Firefox`)!==-1&&navigator.userAgent.indexOf(`Android`)!==-1;return()=>e})(),getChromeVersion=(()=>{let e=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9]+)/):null,t=e?parseInt(e[1],10):null;return()=>t})(),isChromeWithoutDeviceMotion=(()=>{let e=!1;if(getChromeVersion()===65){let t=typeof navigator<`u`?navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/):null;if(t){let[n,r,o,s]=t[1].split(`.`);e=parseInt(o,10)===3325&&parseInt(s,10)<148}}return()=>e})(),isSafariWithoutDeviceMotion=(()=>{let e=isIOS()&&isSafari()&&typeof navigator<`u`&&navigator.userAgent.indexOf(`13_4`)!==-1;return()=>e})(),isR7=(()=>{let e=typeof navigator<`u`&&navigator.userAgent.indexOf(`R7 Build`)!==-1;return()=>e})();function isLandscapeMode(){let e=typeof window<`u`&&(window.orientation==90||window.orientation==-90);return isR7()?!e:e}function isTimestampDeltaValid(e){return!(isNaN(e)||e<=MIN_TIMESTEP||e>MAX_TIMESTEP)}function getQuaternionAngle(e){return e.w>1?0:2*Math.acos(e.w)}var warnOnce=(()=>{let e={};return(t,n)=>{e[t]===void 0&&(console.warn(`cardboard: `+n),e[t]=!0)}})();function getOriginFromUrl(e){let t,n=e.indexOf(`://`);t=n===-1?0:n+3;let r=e.indexOf(`/`,t);return r===-1&&(r=e.length),e.substring(0,r)}function isInsideCrossOriginIFrame(){if(typeof window>`u`||typeof document>`u`)return!1;let e=window.self!==window.top,t=getOriginFromUrl(document.referrer),n=getOriginFromUrl(window.location.href);return e&&t!==n}var updateEyeViewMatrices=(()=>{function e(e,t,n){let r=t?t[0]:0,o=t?t[1]:0,s=t?t[2]:0,c=t?t[3]:1,l=r+r,u=o+o,d=s+s,f=r*l,p=r*u,m=r*d,h=o*u,g=o*d,_=s*d,v=c*l,y=c*u,b=c*d;return e[0]=1-(h+_),e[1]=p+b,e[2]=m-y,e[3]=0,e[4]=p-b,e[5]=1-(f+_),e[6]=g+v,e[7]=0,e[8]=m+y,e[9]=g-v,e[10]=1-(f+h),e[11]=0,e[12]=n?n[0]:0,e[13]=n?n[1]:0,e[14]=n?n[2]:0,e[15]=1,e}function t(e,t,n){let r=n[0],o=n[1],s=n[2],c,l,u,d,f,p,m,h,g,_,v,y;return t===e?(e[12]=t[0]*r+t[4]*o+t[8]*s+t[12],e[13]=t[1]*r+t[5]*o+t[9]*s+t[13],e[14]=t[2]*r+t[6]*o+t[10]*s+t[14],e[15]=t[3]*r+t[7]*o+t[11]*s+t[15]):(c=t[0],l=t[1],u=t[2],d=t[3],f=t[4],p=t[5],m=t[6],h=t[7],g=t[8],_=t[9],v=t[10],y=t[11],e[0]=c,e[1]=l,e[2]=u,e[3]=d,e[4]=f,e[5]=p,e[6]=m,e[7]=h,e[8]=g,e[9]=_,e[10]=v,e[11]=y,e[12]=c*r+f*o+g*s+t[12],e[13]=l*r+p*o+_*s+t[13],e[14]=u*r+m*o+v*s+t[14],e[15]=d*r+h*o+y*s+t[15]),e}function n(e,t){let n=t[0],r=t[1],o=t[2],s=t[3],c=t[4],l=t[5],u=t[6],d=t[7],f=t[8],p=t[9],m=t[10],h=t[11],g=t[12],_=t[13],v=t[14],y=t[15],b=n*l-r*c,S=n*u-o*c,C=n*d-s*c,w=r*u-o*l,T=r*d-s*l,E=o*d-s*u,D=f*_-p*g,O=f*v-m*g,k=f*y-h*g,A=p*v-m*_,j=p*y-h*_,M=m*y-h*v,N=b*M-S*j+C*A+w*k-T*O+E*D;return N?(N=1/N,e[0]=(l*M-u*j+d*A)*N,e[1]=(o*j-r*M-s*A)*N,e[2]=(_*E-v*T+y*w)*N,e[3]=(m*T-p*E-h*w)*N,e[4]=(u*k-c*M-d*O)*N,e[5]=(n*M-o*k+s*O)*N,e[6]=(v*C-g*E-y*S)*N,e[7]=(f*E-m*C+h*S)*N,e[8]=(c*j-l*k+d*D)*N,e[9]=(r*k-n*j-s*D)*N,e[10]=(g*T-_*C+y*b)*N,e[11]=(p*C-f*T-h*b)*N,e[12]=(l*O-c*A-u*D)*N,e[13]=(n*A-r*O+o*D)*N,e[14]=(_*S-g*w-v*b)*N,e[15]=(f*w-p*S+m*b)*N,e):null}return(r,o,s)=>{e(r,o),s&&t(r,r,s),n(r,r)}})(),SensorSample=class{constructor(e=new three.Vector3,t=0){this.sample=e,this.timestampS=t}set(e,t){this.sample=e,this.timestampS=t}copy(e){this.set(e.sample,e.timestampS)}},ComplementaryFilter=class{constructor(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new SensorSample,this.currentGyroMeasurement=new SensorSample,this.previousGyroMeasurement=new SensorSample,isIOS()?this.filterQ=new three.Quaternion(-1,0,0,1):this.filterQ=new three.Quaternion(1,0,0,1),this.previousFilterQ=new three.Quaternion,this.previousFilterQ.copy(this.filterQ),this.accelQ=new three.Quaternion,this.isOrientationInitialized=!1,this.estimatedGravity=new three.Vector3,this.measuredGravity=new three.Vector3,this.gyroIntegralQ=new three.Quaternion}addAccelMeasurement(e,t){this.currentAccelMeasurement.set(e,t)}addGyroMeasurement(e,t){this.currentGyroMeasurement.set(e,t),isTimestampDeltaValid(t-this.previousGyroMeasurement.timestampS)&&this.run_(),this.previousGyroMeasurement.copy(this.currentGyroMeasurement)}getOrientation(){return this.filterQ}run_(){if(!this.isOrientationInitialized){this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample),this.previousFilterQ.copy(this.accelQ),this.isOrientationInitialized=!0;return}let e=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS,t=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,e);this.gyroIntegralQ.multiply(t),this.filterQ.copy(this.previousFilterQ),this.filterQ.multiply(t);let n=new three.Quaternion;n.copy(this.filterQ),n.inverse(),this.estimatedGravity.set(0,0,-1),this.estimatedGravity.applyQuaternion(n),this.estimatedGravity.normalize(),this.measuredGravity.copy(this.currentAccelMeasurement.sample),this.measuredGravity.normalize();let r=new three.Quaternion;r.setFromUnitVectors(this.estimatedGravity,this.measuredGravity),r.inverse(),this.isDebug&&console.log(`Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)`,RAD_TO_DEG*getQuaternionAngle(r),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1));let o=new three.Quaternion;o.copy(this.filterQ),o.multiply(r),this.filterQ.slerp(o,1-this.kFilter),this.previousFilterQ.copy(this.filterQ)}accelToQuaternion_(e){let t=new three.Vector3;t.copy(e),t.normalize();let n=new three.Quaternion;return n.setFromUnitVectors(new three.Vector3(0,0,-1),t),n.inverse(),n}gyroToQuaternionDelta_(e,t){let n=new three.Quaternion,r=new three.Vector3;return r.copy(e),r.normalize(),n.setFromAxisAngle(r,e.length()*t),n}},PosePredictor=class{constructor(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new three.Quaternion,this.previousTimestampS=null,this.deltaQ=new three.Quaternion,this.outQ=new three.Quaternion}getPrediction(e,t,n){if(!this.previousTimestampS)return this.previousQ.copy(e),this.previousTimestampS=n,e;let r=new three.Vector3;r.copy(t),r.normalize();let o=t.length();if(o<DEG_TO_RAD*20)return this.isDebug&&console.log(`Moving slowly, at %s deg/s: no prediction`,(RAD_TO_DEG*o).toFixed(1)),this.outQ.copy(e),this.previousQ.copy(e),this.outQ;let s=o*this.predictionTimeS;return this.deltaQ.setFromAxisAngle(r,s),this.outQ.copy(this.previousQ),this.outQ.multiply(this.deltaQ),this.previousQ.copy(e),this.previousTimestampS=n,this.outQ}},Distortion=class{constructor(e){this.coefficients=e}distortInverse(e){let t=0,n=1,r=e-this.distort(t);for(;Math.abs(n-t)>1e-4;){let o=e-this.distort(n),s=n-o*((n-t)/(o-r));t=n,n=s,r=o}return n}distort(e){let t=e*e,n=0;for(let e=0;e<this.coefficients.length;e++)n=t*(n+this.coefficients[e]);return(n+1)*e}},Pose=class{constructor(){this.angularAcceleration=null,this.angularVelocity=null,this.linearAcceleration=null,this.linearVelocity=null,this.orientation=null,this.position=null}},FieldOfView=class{constructor(){this.leftDegrees=0,this.rightDegrees=0,this.upDegrees=0,this.downDegrees=0}},Sensor=class{constructor(e,t,n,r){this.viewer={id:`CardboardV1`,label:`Cardboard I/O 2014`,fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]},this.device={widthMeters:.11,heightMeters:.062,bevelMeters:.004},this.depthNear=.01,this.depthFar=1e4,this.yawOnly=n,this.accelerometer=new three.Vector3,this.gyroscope=new three.Vector3,this.filter=new ComplementaryFilter(e,r),this.posePredictor=new PosePredictor(t,r),this.isFirefoxAndroid=isFirefoxAndroid(),this.isIOS=isIOS();let o=getChromeVersion();this.isDeviceMotionInRadians=!this.isIOS&&o!==null&&o<66,this.isWithoutDeviceMotion=isChromeWithoutDeviceMotion()||isSafariWithoutDeviceMotion(),this.filterToWorldQ=new three.Quaternion,isIOS()?this.filterToWorldQ.setFromAxisAngle(new three.Vector3(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new three.Vector3(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new three.Quaternion,this.worldToScreenQ=new three.Quaternion,this.originalPoseAdjustQ=new three.Quaternion;let s=typeof window<`u`?-window.orientation*Math.PI/180:0;this.originalPoseAdjustQ.setFromAxisAngle(new three.Vector3(0,0,1),s),this.setScreenTransform_(),isLandscapeMode()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new three.Quaternion,this.orientationOut_=new Float32Array(4),this.previousTimestampS=Date.now()}getPosition(){return null}getOrientation(){let e;if(this.isWithoutDeviceMotion&&this._deviceOrientationQ){this.deviceOrientationFixQ=this.deviceOrientationFixQ||(function(){let e=new three.Quaternion().setFromAxisAngle(new three.Vector3(0,0,-1),0),t=new three.Quaternion;return typeof window<`u`&&window.orientation===-90?t.setFromAxisAngle(new three.Vector3(0,1,0),Math.PI/-2):t.setFromAxisAngle(new three.Vector3(0,1,0),Math.PI/2),e.multiply(t)})(),this.deviceOrientationFilterToWorldQ=this.deviceOrientationFilterToWorldQ||(function(){let e=new three.Quaternion;return e.setFromAxisAngle(new three.Vector3(1,0,0),-Math.PI/2),e})(),e=this._deviceOrientationQ;let t=new three.Quaternion;return t.copy(e),t.multiply(this.deviceOrientationFilterToWorldQ),t.multiply(this.resetQ),t.multiply(this.worldToScreenQ),t.multiplyQuaternions(this.deviceOrientationFixQ,t),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}else{let t=this.filter.getOrientation();e=this.posePredictor.getPrediction(t,this.gyroscope,this.previousTimestampS)}let t=new three.Quaternion;return t.copy(this.filterToWorldQ),t.multiply(this.resetQ),t.multiply(e),t.multiply(this.worldToScreenQ),this.yawOnly&&(t.x=0,t.z=0,t.normalize()),this.orientationOut_[0]=t.x,this.orientationOut_[1]=t.y,this.orientationOut_[2]=t.z,this.orientationOut_[3]=t.w,this.orientationOut_}getPose(){let e=new Pose;return e.orientation=this.getOrientation(),e}resetPose(){this.resetQ.copy(this.filter.getOrientation()),this.resetQ.x=0,this.resetQ.y=0,this.resetQ.z*=-1,this.resetQ.normalize(),isLandscapeMode()&&this.resetQ.multiply(this.inverseWorldToScreenQ),this.resetQ.multiply(this.originalPoseAdjustQ)}getFrameData(e){let t=this.getOrientation(),n=this.getEyeOffset(),r=this.getEyeProjectionMatrix();return e.pose.angularAcceleration=null,e.pose.angularVelocity=null,e.pose.linearAcceleration=null,e.pose.linearVelocity=null,e.pose.orientation=t,e.pose.position=null,e.timestamp=this.previousTimestampS,e.leftProjectionMatrix.set(r.left),e.rightProjectionMatrix.set(r.right),updateEyeViewMatrices(e.leftViewMatrix,t,n.left),updateEyeViewMatrices(e.rightViewMatrix,t,n.right),e}start(){if(typeof window>`u`)return()=>{};let e=this.onDeviceMotion_.bind(this),t=this.onOrientationChange_.bind(this),n=this.onMessage_.bind(this),r=this.onDeviceOrientation_.bind(this);return isIOS()&&isInsideCrossOriginIFrame()&&window.addEventListener(`message`,n),window.addEventListener(`orientationchange`,t),this.isWithoutDeviceMotion?window.addEventListener(`deviceorientation`,r):window.addEventListener(`devicemotion`,e),()=>{window.removeEventListener(`devicemotion`,e),window.removeEventListener(`deviceorientation`,t),window.removeEventListener(`orientationchange`,t),window.removeEventListener(`message`,n)}}getEyeOffset(){return{left:[-this.viewer.interLensDistance*.5,0,0],right:[this.viewer.interLensDistance*.5,0,0]}}getEyeProjectionMatrix(){let e=this.getEyeFieldOfView(),t=this.depthNear,n=this.depthFar,r={left:[],right:[]};{let o=e.left.upDegrees*DEG_TO_RAD,s=e.left.downDegrees*DEG_TO_RAD,c=e.left.leftDegrees*DEG_TO_RAD,l=e.left.rightDegrees*DEG_TO_RAD,u=2/(c+l),d=2/(o+s);r.left[0]=u,r.left[1]=0,r.left[2]=0,r.left[3]=0,r.left[4]=0,r.left[5]=d,r.left[6]=0,r.left[7]=0,r.left[8]=-((c-l)*u*.5),r.left[9]=(o-s)*d*.5,r.left[10]=n/(t-n),r.left[11]=-1,r.left[12]=0,r.left[13]=0,r.left[14]=n*t/(t-n),r.left[15]=0}{let o=e.right.upDegrees*DEG_TO_RAD,s=e.right.downDegrees*DEG_TO_RAD,c=e.right.leftDegrees*DEG_TO_RAD,l=e.right.rightDegrees*DEG_TO_RAD,u=2/(c+l),d=2/(o+s);r.right[0]=u,r.right[1]=0,r.right[2]=0,r.right[3]=0,r.right[4]=0,r.right[5]=d,r.right[6]=0,r.right[7]=0,r.right[8]=-((c-l)*u*.5),r.right[9]=(o-s)*d*.5,r.right[10]=n/(t-n),r.right[11]=-1,r.right[12]=0,r.right[13]=0,r.right[14]=n*t/(t-n),r.right[15]=0}return r}getEyeFieldOfView(){let e=this.viewer,t=this.device,n=new Distortion(e.distortionCoefficients),r=e.screenLensDistance,o=(t.widthMeters-e.interLensDistance)/2,s=e.interLensDistance/2,c=e.baselineLensDistance-t.bevelMeters,l=t.heightMeters-c,u=RAD_TO_DEG*Math.atan(n.distort(o/r)),d=RAD_TO_DEG*Math.atan(n.distort(s/r)),f=RAD_TO_DEG*Math.atan(n.distort(c/r)),p=RAD_TO_DEG*Math.atan(n.distort(l/r)),m=new FieldOfView,h=new FieldOfView;return m.leftDegrees=Math.min(u,e.fov),m.rightDegrees=Math.min(d,e.fov),m.downDegrees=Math.min(f,e.fov),m.upDegrees=Math.min(p,e.fov),h.leftDegrees=m.rightDegrees,h.rightDegrees=m.leftDegrees,h.upDegrees=m.upDegrees,h.downDegrees=m.downDegrees,{left:m,right:h}}onDeviceOrientation_(e){this._deviceOrientationQ=this._deviceOrientationQ||new three.Quaternion;let{alpha:t,beta:n,gamma:r}=e;t=(t||0)*Math.PI/180,n=(n||0)*Math.PI/180,r=(r||0)*Math.PI/180,this._deviceOrientationQ.setFromEuler(new three.Euler(t,n,-r,`YXZ`))}onDeviceMotion_(e){this.updateDeviceMotion_(e)}updateDeviceMotion_(e){let t=e.accelerationIncludingGravity,n=e.rotationRate,r=e.timeStamp/1e3,o=r-this.previousTimestampS;if(o<0){warnOnce(`fusion-pose-sensor:invalid:non-monotonic`,`Invalid timestamps detected: non-monotonic timestamp from devicemotion`),this.previousTimestampS=r;return}else if(o<=MIN_TIMESTEP||o>MAX_TIMESTEP){warnOnce(`fusion-pose-sensor:invalid:outside-threshold`,`Invalid timestamps detected: Timestamp from devicemotion outside expected range.`),this.previousTimestampS=r;return}t&&(this.accelerometer.set(-t.x,-t.y,-t.z),n&&(isR7()?this.gyroscope.set(-n.beta,n.alpha,n.gamma):this.gyroscope.set(n.alpha,n.beta,n.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,r)),this.filter.addAccelMeasurement(this.accelerometer,r)),this.previousTimestampS=r}onOrientationChange_(){this.setScreenTransform_()}onMessage_(e){let t=e.data;!t||!t.type||t.type.toLowerCase()===`devicemotion`&&this.updateDeviceMotion_(t.deviceMotionEvent)}setScreenTransform_(){switch(this.worldToScreenQ.set(0,0,0,1),typeof window<`u`?window.orientation:0){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new three.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new three.Vector3(0,0,1),Math.PI/2);break;case 180:break}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()}},defaultLeftBounds=[0,0,.5,1],defaultRightBounds=[.5,0,.5,1],Cardboard=class{constructor(e){this.renderer=e,this.sensor=new Sensor(.98,.04,!1,!1),this.scale=1,this.cameraL=new three.PerspectiveCamera,this.cameraR=new three.PerspectiveCamera;let t=this.sensor.start();this.dispose=()=>{let e=this.renderer.getSize(new three.Vector2);this.renderer.setScissor(0,0,e.width,e.height),this.renderer.setViewport(0,0,e.width,e.height),this.renderer.setScissorTest(!1),t()}}render(e,t){let n=this.renderer.getSize(new three.Vector2);if(n.width>n.height){var r=e.autoUpdate;r&&(e.updateMatrixWorld(),e.autoUpdate=!1);let o={x:Math.round(n.width*defaultLeftBounds[0]),y:Math.round(n.height*defaultLeftBounds[1]),width:Math.round(n.width*defaultLeftBounds[2]),height:Math.round(n.height*defaultLeftBounds[3])},s={x:Math.round(n.width*defaultRightBounds[0]),y:Math.round(n.height*defaultRightBounds[1]),width:Math.round(n.width*defaultRightBounds[2]),height:Math.round(n.height*defaultRightBounds[3])};this.renderer.setScissorTest(!0),this.renderer.autoClear&&this.renderer.clear(),t.parent===null&&t.updateMatrixWorld(),t.matrixWorld.decompose(this.cameraL.position,this.cameraL.quaternion,this.cameraL.scale),t.matrixWorld.decompose(this.cameraR.position,this.cameraR.quaternion,this.cameraR.scale);let c=this.sensor.getEyeOffset();this.cameraL.translateOnAxis(new three.Vector3().fromArray(c.left),this.scale),this.cameraR.translateOnAxis(new three.Vector3().fromArray(c.right),this.scale);let l=this.sensor.getEyeProjectionMatrix();this.cameraL.projectionMatrix.elements=l.left.slice(),this.cameraR.projectionMatrix.elements=l.right.slice(),this.renderer.setViewport(o.x,o.y,o.width,o.height),this.renderer.setScissor(o.x,o.y,o.width,o.height),this.renderer.render(e,this.cameraL),this.renderer.setViewport(s.x,s.y,s.width,s.height),this.renderer.setScissor(s.x,s.y,s.width,s.height),this.renderer.render(e,this.cameraR),this.renderer.setViewport(0,0,n.width,n.height),this.renderer.setScissor(0,0,n.width,n.height),this.renderer.setScissorTest(!1),r&&(e.autoUpdate=!0)}else this.renderer.render(e,t)}dispose(){}},cardboard_png_data_url_default=`data:image/png;base64,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`,phone_png_data_url_default=`data:image/png;base64,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`,_a,LOCALE={zh:{TITLE:`眼镜模式`,HIT:`请将手机横屏放入 VR 眼镜中`},en:{TITLE:`GLASSES MODE`,HIT:`Please put the mobile phone horizontally into the VR glasses.`},ja:{TITLE:`メガネモード`,HIT:`携帯電話をVRメガネに水平に入れてください。`}},TEXT=typeof navigator<`u`?(_a=LOCALE[navigator.language.split(`-`)[0]])==null?LOCALE.zh:_a:LOCALE.zh,CONTENTS=`
|
|
1680
1680
|
<style>
|
|
1681
1681
|
.$id {
|
|
1682
1682
|
all: initial;
|
|
@@ -2037,7 +2037,7 @@ void main() {
|
|
|
2037
2037
|
|
|
2038
2038
|
gl_FragColor = vec4(gl_FragColor.rgb, gl_FragColor.a * opacity * outside * inside);
|
|
2039
2039
|
}
|
|
2040
|
-
`,PanoSphereMesh=class extends three.Object3D{constructor(){super(),this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Motion({ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}),this.opacityMotion=new Motion({opacity:0}),this.loadingMotion=new Motion({opacity:0}),this.disableMotion=new Motion({opacity:0});let e={blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0};this.hitTestMesh=new three.Mesh(sharedGeometry,new three.MeshBasicMaterial(Object.assign(Object.assign({},e),{color:0,opacity:0}))),this.hitTestMesh.scale.set(1.5,1.5,1.5),this.ringMesh=new three.Mesh(sharedGeometry,new three.ShaderMaterial(Object.assign(Object.assign({},e),{vertexShader:ringVertexShader,fragmentShader:ringFragmentShader,uniforms:{opacity:{value:0}}}))),this.panoMesh=new three.Mesh(sharedGeometry,new three.ShaderMaterial(Object.assign(Object.assign({},e),{vertexShader,fragmentShader,uniforms:{circleScale:{value:1.1},circleFade:{value:0},circleOpacity:{value:.5},loadingAngle:{value:0},loadingOpacity:{value:0},opacity:{value:0},disable:{value:0}}}))),this.add(this.hitTestMesh),this.add(this.ringMesh),this.add(this.panoMesh),this.renderOrder=1e4,this.needsRender=!0}setProgress(e){this.progress=e,this.setLoading(e>0)}setOpacity(e){this.opacity!==e&&(this.opacity=e=clamp$1(e,0,1),this.opacityMotion.set({opacity:e},30).catch(noop))}setCurrent(e){if(this.current!==e){if(e)this.currentMotion.setKeyframes([{progress:0,value:{ringScale:2,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.05,value:{ringScale:1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.15,value:{ringScale:1.2,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.25,value:{ringScale:1.1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.8,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1}},{progress:.9,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:.92,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:1,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1.1}}],1500).catch(noop);else{let e=[{progress:0,value:Object.assign({},this.currentMotion.value)},{progress:1,value:{ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}}];this.currentMotion.setKeyframes(e,200).catch(noop)}this.current=e}}setLoading(e){this.loading!==e&&(e?this.loadingMotion.setKeyframes([{progress:0,value:{opacity:0}},{progress:.3,value:{opacity:0}},{progress:1,value:{opacity:.8}}],500).catch(noop):this.loadingMotion.set({opacity:0},0).catch(noop),this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.needsRender=!0)}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({opacity:e?1:0},300).catch(noop),this.needsRender=!0)}tap(){return Promise.resolve()}updateTime(e,t){this.opacityMotion.update(e),this.currentMotion.update(e),this.loadingMotion.update(e);let n=this.opacityMotion.value.opacity;this.visible=n!==0;let{ringScale:r,ringOpacity:o,circleFade:s,circleOpacity:c,circleScale:l}=this.currentMotion.value;this.ringMesh.scale.set(r,1,r),this.ringMesh.material.uniforms.opacity.value=o*n,this.panoMesh.material.uniforms.opacity.value=n,this.panoMesh.material.uniforms.circleOpacity.value=c,this.panoMesh.material.uniforms.circleScale.value=l,this.panoMesh.material.uniforms.circleFade.value=s,this.panoMesh.material.uniforms.loadingOpacity.value=this.loadingMotion.value.opacity,this.panoMesh.material.uniforms.disable.value=this.disableMotion.value.opacity,this.panoMesh.material.uniforms.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0}dispose(){this.hitTestMesh.material.dispose(),this.ringMesh.material.dispose(),this.panoMesh.material.dispose()}},ACTIVE_TO_CURRENT_DELAY=1500,defaultVRPanoramaControllerCustomInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`])),VRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`VRPanorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`VRPanorama`,this.cardboard=new Cardboard(this.renderer);let r=createHelper();this.helperElement=r;let o=new Hammer(r);this.element.parentNode&&(this.element.parentNode.insertBefore(r,this.element),this.updateHelperElementSize(),o.on(`tap`,()=>this.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{})))),this.destroyHelper=()=>{o.destroy(),r.parentNode&&r.parentNode.removeChild(r),this.helperElement=void 0}}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}destroy(){super.destroy(),this.cardboard.dispose(),this.destroyHelper()}isReady(){return!1}updateRenderSize(){this.needsRender=!0}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u;if(this.destroyed)return;this.updateHelperElementSize(),this.userAction=!0,this.needsRender=!0;let d={},f={},p=this.locationMotion.keyframes[0],m=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[h,g]=this.locationMotion.getKeyFrameSegment(e),_=this.panoResourceFromLocationMotionKeyframe(h),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(p),b=this.panoResourceFromLocationMotionKeyframe(m),S=!1;if(this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),d.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-g.value.count+1,n=new three.Vector3().copy(_.position),s=new three.Vector3().copy(v.position);if(d.progress=t,t>=.01&&t<=.99&&(d.progress=clamp$1(v.effectEasing(t),.01,.99)),v.panoPicture&&(t<1?_.panoPicture&&(d.pano0=_.panoPicture):d.pano0=v.panoPicture,d.pano1=v.panoPicture),v.effect===`montage`?d.transition=`BLACK`:v.effect===`spread`?d.transition=`SPREAD`:d.transition=`FADE`,v.effect===`zoomin`||v.effect===`zoomout`?d.progress=Math.pow(t,3):v.effect===`model`&&this.camera.pose.distance<.01&&(d.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&v.effect!==`fly`){if(d.pano0&&_.panoPicture){let e={panoId:d.pano0.panoId,map:d.pano0.map,mapHistogram:d.pano0.mapHistogram,mapSize:d.pano0.mapSize,zoom:d.pano0.zoom,matrix:_.panoPicture.matrix.clone().setPosition(v.position)},t=this.panoPictureObserverMap.get(d.pano0);t&&this.panoPictureObserverMap.set(e,t),d.pano0=e}n.copy(s),S=!0}f.distance=this.locationMotion.value.distance,f.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=d.pano0)==null?void 0:r.map)||e===((o=d.pano1)==null?void 0:o.map))continue;e.dispose(),t.panoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}this.currentPano=panoParse(v.panoId),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(y.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(b.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),f),options:{},progress:this.locationMotion.progress,error:null}))}isEmptyObject(d)===!1&&this.modelScene.parameter.set(d),f.offset&&this.camera.position.copy(f.offset);let C=this.camera.pose.longitude,w=this.camera.pose.latitude;this.camera.quaternion.fromArray(this.cardboard.sensor.getOrientation()),this.camera.computePose(),(C!==this.camera.pose.longitude||w!==this.camera.pose.latitude)&&(this.cameraMotion.set(pick(this.camera.pose,[`longitude`,`latitude`]),0).catch(noop),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:!0,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}))),this.works.getObserver(this.currentPano);let T=this.works.getObserver(_.panoId),E=this.works.getObserver(v.panoId),D=new Map;if(T)for(let e of T.accessibleNodes){let t=T.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});D.set(e,t)}}if(E)for(let e of E.accessibleNodes){let t=E.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});D.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{let n=D.get(t);n?(e.position.copy(n.position).applyMatrix4(n.work.transform),D.delete(t)):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),D.forEach((e,t)=>{let n=new PanoSphereMesh;n.position.copy(e.position).applyMatrix4(e.work.transform),e.position.distanceTo(e.standingPosition)>this.aerialObserverMinHeight?n.scale.setScalar(15):n.scale.setScalar(1),this.panoMeshes.set(t,n),this.helper.add(n),D.delete(t)}),this.camera.pose.distance>.1||S?this.panoMeshes.forEach((n,r)=>{n.setOpacity(0),n.updateTime&&n.updateTime(e,t),n.visible=!1}):this.panoMeshes.forEach((e,t)=>{let n=panoParse(t),r=this.works.getObserver(n);if(!r)return;if(!r.loadable&&!r.active){e.setOpacity(0);return}let o=e.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);o<.05?e.setOpacity(0):e.setOpacity(clamp$1(1.5/o,0,1)),panoEqual(this.currentPano,n)&&e.setOpacity(0),e.lookAt(this.camera.position)}),this.locationMotion.ended){let n=this.intersect(e);this.panoMeshes.forEach((r,o)=>{r.setCurrent(r===n),r.updateTime&&r.updateTime(e,t)})}{let e=(s=this.modelScene.parameter.progress)==null?1:s,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,l;if(o&&(l=this.works.getObserver(o.panoId),l||(l=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!l||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize),s=e+1,u=new three.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),d=Math.floor(this.tileLevelForFov(this.camera.fov,u)),f=d>e?d:0;this.tiling.setObserver(l);let p={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:s,level:f},m=this.tiling.update(p),h={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((c=this.modelScene.parameter.progress)==null?0:c)-.5)*2)},g=this.modelScene.parameter.refinedScreen;(m||h.pano!==(g==null?void 0:g.pano)||h.opacity!==(g==null?void 0:g.opacity))&&this.modelScene.parameter.set(`refinedScreen`,h)}}this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e);{let e=v.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((l=this.modelScene.parameter.pano0Depth)==null?void 0:l.panoId)!==t.panoId||((u=this.modelScene.parameter.pano1Depth)==null?void 0:u.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.cardboard.render(this.scene,this.camera),!0}setCamera(e={}){}destroyHelper(){}updateHelperElementSize(){if(!this.helperElement)return;let e=new three.Vector2(this.element.offsetWidth,this.element.offsetHeight),t=e.x*this.viewport.left,n=e.y*(1-this.viewport.bottom-this.viewport.height),r=e.x*this.viewport.width,o=e.y*this.viewport.height;this.helperElement.style.marginLeft!==t+`px`&&(this.helperElement.style.marginLeft=t+`px`),this.helperElement.style.marginTop!==n+`px`&&(this.helperElement.style.marginTop=n+`px`),this.helperElement.style.width!==r+`px`&&(this.helperElement.style.width=r+`px`),this.helperElement.style.height!==o+`px`&&(this.helperElement.style.height=o+`px`)}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0;return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>ACTIVE_TO_CURRENT_DELAY){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&this.moveToPano(panoParse(t),{},!0),this.activePanoMesh=void 0,this.activeTime=void 0,e}let r=this.camera.getDirection(new three.Vector3),o=new three.Raycaster(this.camera.position,r);o.params.Points={threshold:.1},o.firstHitOnly=!0,o.floorIndex=-1;let s,c=[],l=this.works.getObserver(this.currentPano),u=l?l.accessibleNodes.map(e=>panoStringify({panoIndex:e,workCode:l.work.workCode})):[];for(let e of u){let r=this.panoMeshes.get(e);if(r){let[e]=o.intersectObject((t=r.hitTestMesh)==null?r:t,!0);if(e){let t=(n=l==null?void 0:l.floorIndex)==null?0:n;c.push({panoMesh:r,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[d]=c.sort((e,t)=>e.intersection.distance-t.intersection.distance);d?(s=d.intersection,this.activePanoMesh!==d.panoMesh&&(this.activePanoMesh=d.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(d.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),s||(s=this.modelScene.intersectRaycaster(o)[0]);let f=createEvent(`intersect.update`,{raycaster:o,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,f),f.defaultPrevented){this.hideIntersectMesh();return}if(s&&s.face){let e=s.face.normal,t=new three.Quaternion;t.setFromUnitVectors(new three.Vector3(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=s.point.clone();this.intersectMesh.position.copy(n),d?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return d==null?void 0:d.panoMesh}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}},HUMAN_EYE_POSITION=new three.Vector3(0,1.6,0),scratchObserverBox$1=new three.Box3,scratchVector3$2=new three.Vector3,defaultModelControllerCustomInitArgs=Object.assign({},defaultPanoramaLikeControllerCustomInitArgs),ModelController=class e extends PanoramaLikeController{static parseArgs(t){return t instanceof e?t:super.parseArgs(t)}static initAnimationEndState(e){var t,n,r,o,s,c;let l=this.parseArgs(e),u=l.works,{state:d,currentState:f}=e.initial,p=typeof d.panoIndex==`number`?{workCode:(r=(t=d.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=u.getObserver(p),h=clamp$1((o=d.fov)==null?!m||isFristPersonMode(f.mode)?f.fov:l.defaultFov:o,l.minFov,l.maxFov),g=(s=d.longitude)==null?f.longitude:s,_=clamp$1(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((c=d.latitude)==null?!m||isFristPersonMode(f.mode)?f.latitude:l.defaultLatitude:c,_,v),b=new three.Vector3;if(l.initial.state.offset)b.copy(l.initial.state.offset);else if(m)b.copy(m.position).applyMatrix4(m.work.transform);else{let e=coordinatesToVector(f).setLength(f.distance);b.copy(l.initial.currentState.offset).sub(e)}return{workCode:p.workCode,panoIndex:p.panoIndex,mode:`Model`,longitude:g,latitude:y,fov:h,offset:b,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Model`,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue(`modelAlpha`)}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x})}updateConfiguration(e){return super.updateConfiguration(e)}destroy(){super.destroy(),this.locationMotion.dispose()}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,o){this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));return(s.workCode!==this.currentPano.workCode||s.panoIndex!==this.currentPano.panoIndex||s.longitude!==this.cameraMotion.value.longitude||s.latitude!==this.cameraMotion.value.latitude||s.fov!==this.cameraMotion.value.fov)&&this.moveToPosition(s.offset,{duration:0,longitude:s.longitude,latitude:s.latitude,fov:s.fov},o),!0}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return r.distance=0,e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:0,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},o={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),!this.locationMotion.ended){this.locationMotion.update(e),o.distance=this.locationMotion.value.distance,o.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z);let t=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),n=[];for(let e of this.works){let r=this.modelScene.models.find(t=>t.work===e);if(!(!r||r.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(t)))for(let t of e.observers)n.push(t)}let r=arrayMin(n,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t));this.currentPano=r?{workCode:r.work.workCode,panoIndex:r.panoIndex}:{workCode:``,panoIndex:0}}this.cameraMotion.ended||(this.cameraMotion.update(e),o.longitude=this.cameraMotion.value.longitude,o.latitude=this.cameraMotion.value.latitude,o.fov=this.cameraMotion.value.fov),isEmptyObject(r)||this.modelScene.parameter.set(r),isEmptyObject(o)||this.setCamera(o);let s=this.works.getObserver(this.currentPano);if(this.intersectMesh&&this.intersectMesh.parent&&s&&s.position.y-s.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={modelAlpha:1},u={perspToOrtho:0},d={longitude:c.longitude,latitude:c.latitude,fov:c.fov,duration:o,moveStartCallback:e=>{this.perspToOrthoMotion.set(u,o).catch(noop),this.modelAlphaMotion.set(l,o).catch(noop),this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),t()},moveCancelCallback:()=>{let e=this.currentPano,n=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:n,userAction:this.userAction})),t()}};this.moveToPosition(c.offset,d,s)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new three.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}moveToPano(e,t={},n){let r=this.works.getObserver(e);if(r){let e=new three.Vector3().copy(r.position).applyMatrix4(r.work.transform);this.moveToPosition(e,t,n)}}moveToPosition(e,t={},n){var r,o,s;this.userAction=n,this.stopMomentumMovement();let c=now(),l=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),u=l.distanceTo(e),d=this.locationMotion.getProgressVelocity(c),f=0;for(let e=1;e<this.locationMotion.keyframes.length;e++){let{x:t,y:n,z:r}=this.locationMotion.keyframes[e-1].value,{x:o,y:s,z:c}=this.locationMotion.keyframes[e].value;f+=Math.sqrt(Math.pow(o-t,2)+Math.pow(s-n,2)+Math.pow(c-r,2))}let p=u===0?0:d*f/u,m=this.calculateMovingDuration(t.duration,u),h={x:e.x,y:e.y,z:e.z,distance:0},g={longitude:t.longitude,latitude:t.latitude,fov:t.fov},_=[];for(let e of this.works){let t=this.modelScene.models.find(t=>t.work===e);if(!(!t||t.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(l)))for(let t of e.observers)_.push(t)}let v=arrayMin(_,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(l)),y=v?{workCode:v.work.workCode,panoIndex:v.panoIndex}:{workCode:``,panoIndex:0},b=Object.assign(Object.assign({},y),{mode:this.mode,longitude:(r=g.longitude)==null?this.camera.pose.longitude:r,latitude:(o=g.latitude)==null?this.camera.pose.latitude:o,fov:(s=g.fov)==null?this.camera.pose.fov:s,offset:e.clone(),distance:0}),S=this.currentPano;this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:t,prevPano:S,progress:0,state:b,userAction:this.userAction,error:null})),t.moveStartCallback&&t.moveStartCallback(b),this.cameraMotion.set(g,m).catch(noop),this.locationMotion.set(h,m,p).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let e=Object.assign(Object.assign(Object.assign({},y),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:t,prevPano:S,progress:0,state:e,userAction:this.userAction,error:null})),t.moveEndCallback&&t.moveEndCallback(e)},()=>{t.moveCancelCallback&&t.moveCancelCallback(),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:t,prevPano:S,progress:0,state:b,userAction:this.userAction,error:null}))})}onTapGesture(e){let t=e.center.raycaster;this.stopMomentumMovement();let[n]=this.modelScene.intersectRaycaster(t);if(n&&n.face){let e=n.face.normal,t=n.point;if(new three.Vector3(0,1,0).angleTo(e)>Math.PI/3){let r=new three.Raycaster;r.firstHitOnly=!0;let o=e.clone().setLength(.3).add(t);r.set(o,new three.Vector3(0,-1,0)),n=this.modelScene.intersectRaycaster(r)[0]}}if(n){let t=new three.Vector3().copy(n.point).add(HUMAN_EYE_POSITION),r=[];for(let e of this.works){let n=this.modelScene.models.find(t=>t.work===e);if(!(!n||n.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(t)))for(let t of e.observers)r.push(t)}let[o,s]=arrayMin(r,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t),!0);o&&s<5&&(t.y=scratchVector3$2.copy(o.position).applyMatrix4(o.work.transform).y),e.state.offset.copy(t),e.state.distance=0,this.emit(`gesture.tap`,e),e.defaultPrevented||this.moveToPosition(t,{},!0)}else this.emit(`gesture.tap`,e),e.defaultPrevented||this.cameraBounce()}},scratchObserverBox=new three.Box3,scratchVector3$1=new three.Vector3,minDistance=.5,PANGESTURE_FORWARD_ANGLE=Math.PI/7,defaultMapviewControllerCustomInitArgs={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultDistance:150,maxLatitude:Math.PI/2,minLatitude:0,cameraType:`auto`,cameraFence:null,intersectMeshCreator:()=>new IntersectMesh},MapviewController=class e extends BaseController{static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{defaultLongitude:(n=t.defaultLongitude)==null?defaultMapviewControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultMapviewControllerCustomInitArgs.defaultLatitude:r,defaultDistance:(o=t.defaultDistance)==null?defaultMapviewControllerCustomInitArgs.defaultDistance:o,maxLatitude:(s=t.maxLatitude)==null?defaultMapviewControllerCustomInitArgs.maxLatitude:s,minLatitude:(c=t.minLatitude)==null?defaultMapviewControllerCustomInitArgs.minLatitude:c,cameraType:(l=t.cameraType)==null?defaultMapviewControllerCustomInitArgs.cameraType:l,cameraFence:(u=t.cameraFence)==null?defaultMapviewControllerCustomInitArgs.cameraFence:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultMapviewControllerCustomInitArgs.intersectMeshCreator:d})}static distanceFromModel(e,t,n){let r=e.boundingBox,o=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);o=isNaN(o)||!isFinite(o)?1:o;let s=o/2/Math.tan(Math.PI*t/360);return n<1&&(s/=n),isNaN(s)||!isFinite(s)?o:s}static initAnimationEndState(t){var n,r,o,s,c,l,u;let d=this.parseArgs(t),f=d.works,p=d.modelScene,{state:m,currentState:h}=t.initial,g=typeof m.panoIndex==`number`?{workCode:(o=(n=m.workCode)==null?(r=d.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:m.panoIndex}:{workCode:h.workCode,panoIndex:h.panoIndex},_=(s=m.fov)==null?60:s,v=clamp$1(typeof d.minLatitude==`function`?d.minLatitude(_):d.minLatitude,-Math.PI/2,Math.PI/2),y=clamp$1(typeof d.maxLatitude==`function`?d.maxLatitude(_):d.maxLatitude,-Math.PI/2,Math.PI/2),b=clamp$1((c=m.latitude)==null?isThirdPersonMode(h.mode)?h.latitude:d.defaultLatitude:c,v,y),S=e.distanceFromModel(d.modelScene,_,d.camera.aspect),C=new three.Vector3,w=(l=m.distance)==null?Math.min(d.defaultDistance,S):l,T=(u=m.longitude)==null?isThirdPersonMode(h.mode)?h.longitude:d.defaultLongitude:u;if(m.offset)C.copy(m.offset);else{let e=f.getObserver(g);d.defaultDistance<S&&e?(C.copy(e.position).applyMatrix4(e.work.transform),m.longitude===void 0&&(T=h.longitude)):(p.boundingBox.getCenter(C),w=S)}return Object.assign(Object.assign({},g),{mode:`Mapview`,longitude:T,latitude:b,fov:_,offset:C,distance:w})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Mapview`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultDistance=n.defaultDistance,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.cameraType=n.cameraType,this.cameraFence=n.cameraFence,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue(`modelAlpha`)}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new TextureLoader,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultDistance!==void 0&&this.defaultDistance!==e.defaultDistance&&(this.defaultDistance=e.defaultDistance),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.cameraType!==void 0&&this.cameraType!==e.cameraType&&(this.cameraType=e.cameraType),this.cameraFence instanceof three.Box3&&e.cameraFence instanceof three.Box3||this.cameraFence instanceof three.Sphere&&e.cameraFence instanceof three.Sphere?this.cameraFence.equals(e.cameraFence)||(this.cameraFence=e.cameraFence):e.cameraFence!==void 0&&(this.cameraFence=e.cameraFence),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,o){this.userAction=o,this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));this.currentPano={workCode:s.workCode,panoIndex:s.panoIndex};let c={longitude:s.longitude,latitude:s.latitude,fov:s.fov},l={x:s.offset.x,y:s.offset.y,z:s.offset.z,distance:s.distance};return(c.longitude!==this.cameraMotion.value.longitude||c.latitude!==this.cameraMotion.value.latitude||c.fov!==this.cameraMotion.value.fov)&&this.cameraMotion.set(c,r.duration).catch(noop),(l.x!==this.locationMotion.value.x||l.y!==this.locationMotion.value.y||l.z!==this.locationMotion.value.z||l.distance!==this.locationMotion.value.distance)&&this.locationMotion.set(l,r.duration).catch(noop),!0}updateModel(e){super.updateModel(e),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t){if(this.destroyed)return;let n={},r={};if(this.locationMotion.ended||(this.locationMotion.update(e),r.distance=this.locationMotion.value.distance,r.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),n.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),n.progress=1,n.pano0=n.pano1=t}let o=0;if(this.cameraType===`auto`?o=Math.abs(Math.PI/2-this.cameraMotion.value.latitude)<.02||Math.abs(-Math.PI/2-this.cameraMotion.value.latitude)<.02?1:0:this.cameraType===`perspective`?o=0:this.cameraType===`orthographic`&&(o=1),this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho!==o&&this.perspToOrthoMotion.set({perspToOrtho:o},500).catch(noop),this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),isEmptyObject(n)||this.modelScene.parameter.set(n),isEmptyObject(r)||this.setCamera(r),this.cameraFence&&!this.panState&&!this.pinchState&&!this.mouseWheelState&&!this.inMomentumMovement&&this.locationMotion.ended&&this.perspToOrthoMotion.ended&&this.cameraMotion.ended){let e=coordinatesToVector(this.camera.pose,new three.Vector3),t=new three.Vector3().copy(this.camera.pose.offset).sub(e.clone().multiplyScalar(this.camera.pose.distance));if(this.cameraFence.distanceToPoint(t)>.01){let e=this.cameraFence.clampPoint(t,new three.Vector3),n=this.camera.pose.offset.clone().add(e).sub(t),r=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:n,distance:this.camera.pose.distance});this.fixFinalState(r),this.locationMotion.set({x:r.offset.x,y:r.offset.y,z:r.offset.z,distance:r.distance},300).catch(noop)}}if(this.intersectMesh&&this.intersectMesh.parent){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,distance:t.value.distance,offset:new three.Vector3(t.value.x,t.value.y,t.value.z)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={longitude:c.longitude,latitude:c.latitude,fov:c.fov},u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.perspToOrthoMotion.set({perspToOrtho:0},o).catch(noop),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(scratchObserverBox.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),scratchObserverBox.containsPoint(e.ray.origin)||e.ray.intersectsBox(scratchObserverBox)))for(let e of t.observers)n.push(e)}let[r,o]=arrayMin(n,e=>scratchVector3$1.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&o<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new three.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0,x:0,y:0,z:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.998,o.x*=.99,o.y*=.99,o.z*=.99,s.longitude+=o.longitude,s.latitude+=o.latitude,s.x+=o.x,s.y+=o.y,s.z+=o.z;let c=this.cameraMotion.value.fov,l=formatRad$1(this.cameraMotion.value.longitude+s.longitude),u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=new three.Vector3(this.locationMotion.value.x+s.x,this.locationMotion.value.y+s.y,this.locationMotion.value.z+s.z),m=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:l,latitude:f,offset:p,fov:c,distance:this.locationMotion.value.distance}),h=e.state.offset.clone().sub(coordinatesToVector(e.state).setLength(m.distance)),g=!(Math.abs(o.longitude)>1e-4||Math.abs(o.latitude)>1e-4||Math.abs(o.x)>1e-4||Math.abs(o.y)>1e-4||Math.abs(o.z)>1e-4);(this.cameraFence?this.cameraFence.containsPoint(h):!0)===!1&&(g=!0);let _=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:g,state:m}));if(this.emit(`gesture.fire`,_),this.inMomentumMovement.event=_,this.emit(`gesture.momentum`,_),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:l,latitude:f},0).catch(noop),this.locationMotion.set({x:m.offset.x,y:m.offset.y,z:m.offset.z,distance:m.distance},0).catch(noop),g?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}fixFinalState(e){if(this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho===1)return;let t=coordinatesToVector(e,new three.Vector3),n=new three.Vector3().copy(e.offset).sub(t.clone().setLength(e.distance)),r=new three.Raycaster(n,t);r.params.Points={threshold:.1},r.firstHitOnly=!0,r.hitFilter=e=>e.distance>minDistance+r.near,r.near=this.camera.near,r.far=this.camera.far;let o;if(o=this.modelScene.intersectRaycaster(r)[0],o&&o.distance<this.camera.near&&(o=void 0),!o){let e=new three.Plane(new three.Vector3(0,1,0),-this.modelScene.boundingBox.min.y),t=r.ray.intersectPlane(e,new three.Vector3);if(t){let e=t.distanceTo(r.ray.origin);e<1e3&&e>=r.near&&(o={distance:e,floorIndex:0,floor:0,point:t,object:this.scene,face:null})}}if(!o){let r=Math.max(e.distance,3);o={distance:r,floorIndex:0,floor:0,point:n.clone().add(t.clone().setLength(r)),object:this.scene,face:null}}o.distance>=this.camera.near&¬SimilarValue(e.distance,o.distance)&&(e.distance=o.distance,e.offset=o.point)}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.pointers.length,n=this.panState,r=0,o=!1;e.pointerType===`mouse`&&(r=e.center.buttons,o=e.center.shiftKey),n&&r===0&&n.buttons!==0&&(r=n.buttons);let s=n==null?void 0:n.target;if(!s){let t=this.relativeClientPosition(e.center),n=this.createRaycasterFromCamera(t,this.camera);s=new three.Vector3().copy(n.ray.direction).multiplyScalar(3).add(n.ray.origin);let[r]=this.modelScene.intersectRaycaster(n);if(!r&&n.ray.direction.y<-.3){let e=new three.Plane(new three.Vector3(0,1,0),0),t=n.ray.intersectPlane(e,new three.Vector3);if(t){let e=t.distanceTo(n.ray.origin);e<1e4&&e>=n.near&&(r={distance:e,floorIndex:0,floor:0,point:t,object:this.scene})}}if(r)s.copy(r.point);else{let e=new three.Vector3().copy(this.camera.pose.offset).sub(this.camera.position).normalize(),t=new three.Plane().setFromNormalAndCoplanarPoint(e,this.camera.pose.offset);n.ray.intersectPlane(t,s)}}if(e.isFinal?this.panState=void 0:this.panState={target:s,buttons:r,pointerLength:t,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},n===void 0||n.pointerLength!==t){this.emit(`gesture.pan`,e);return}if(t>1||r===2||o){let t={x:e.center.x-n.x,y:e.center.y-n.y},r=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),o=coordinatesToVector(this.cameraMotion.value).setLength(this.locationMotion.value.distance).add(r),s=new three.Vector3().copy(o).sub(n.target).length();s*=Math.tan(this.camera.pose.fov/2*Math.PI/180);let c=this.renderer.getSize(new three.Vector2),l=2*t.x*s/c.y,u=2*t.y*s/c.y,d=new three.Vector3;d.setFromMatrixColumn(this.camera.matrix,0),d.multiplyScalar(-l),r.add(d),this.camera.pose.latitude<PANGESTURE_FORWARD_ANGLE?d.setFromMatrixColumn(this.camera.matrix,1):(d.setFromMatrixColumn(this.camera.matrix,0),d.crossVectors(this.camera.up,d)),d.multiplyScalar(u),r.add(d);let f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:r,distance:this.camera.pose.distance});if(e.state=f,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(e.isFinal&&n.defaultPrevented)return;if(this.locationMotion.set({x:f.offset.x,y:f.offset.y,z:f.offset.z},0).catch(noop),e.isFinal&&(this.fixFinalState(f),Object.assign(e,{__fixFinalState:!0}),this.locationMotion.set({distance:f.distance,x:f.offset.x,y:f.offset.y,z:f.offset.z},0).catch(noop)),e.isFinal){let t=this.renderer.getSize(new three.Vector2),n=2*e.velocityX*s/t.y,r=2*e.velocityY*s/t.y,o=new three.Vector3,c=new three.Vector3;o.setFromMatrixColumn(this.camera.matrix,0),o.multiplyScalar(-n),c.add(o),this.camera.pose.latitude<PANGESTURE_FORWARD_ANGLE?o.setFromMatrixColumn(this.camera.matrix,1):(o.setFromMatrixColumn(this.camera.matrix,0),o.crossVectors(this.camera.up,o)),o.multiplyScalar(r),c.add(o),this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,{longitude:0,latitude:0,x:c.x,y:c.y,z:c.z},0)}}else{let t={x:e.center.x-n.x,y:e.center.y-n.y},r=this.coordinatesForOffset(t),o=formatRad$1(this.cameraMotion.value.longitude+r.longitude),s=this.camera.pose.fov,c=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(s):this.minLatitude,-Math.PI/2,Math.PI/2),l=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(s):this.maxLatitude,-Math.PI/2,Math.PI/2),u=clamp$1(this.cameraMotion.value.latitude+r.latitude,c,l);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(u=this.cameraMotion.value.latitude);let d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:o,latitude:u,fov:s,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.isFinal&&Object.assign(e,{__fixFinalState:!0}),e.state=d,this.emit(`gesture.pan`,e),e.defaultPrevented||e.isFinal&&n.defaultPrevented)return;if(e.isFinal?this.locationMotion.set({distance:d.distance,x:d.offset.x,y:d.offset.y,z:d.offset.z},0).catch(noop):this.cameraMotion.set({longitude:d.longitude,latitude:d.latitude},0).catch(noop),e.isFinal){let t=e.velocityX,n=e.velocityY;this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,Object.assign(Object.assign({},this.coordinatesForOffset({x:t,y:n})),{x:0,y:0,z:0}),0)}}}onPinchGesture(t){var n;if(!this.initAnimationIsReady)return;this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let r=(n=this.pinchState)==null?void 0:n.distance;if(t.isFirst){this.pinchState={x:t.center.x,y:t.center.y,scale:1,distance:this.locationMotion.value.distance};return}if(r===void 0)return;let o=this.modelScene.boundingBox.getCenter(new three.Vector3),s=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),c=clamp$1(r/t.scale,minDistance,1/0),l=t.state.offset.clone().sub(coordinatesToVector(t.state).setLength(c)),u=this.modelScene.boundingBox.containsPoint(l),d;if(!u&&this.pinchState&&this.pinchState.scale>t.scale&&o.distanceTo(l)>s?d=t.state.distance:(d=c,this.pinchState&&(this.pinchState.scale=t.scale)),t.state.distance=d,this.emit(`gesture.pinch`,t),!t.defaultPrevented&&(this.locationMotion.set({distance:t.state.distance},0).catch(noop),t.pointerType!==`mouse`&&(t.type=`gesture.pan`,this.onPanGesture(t)),t.isFinal)){if(!(`__fixFinalState`in t)){let e=t.state;this.fixFinalState(t.state);let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(noop)}this.panState=void 0,this.pinchState=void 0}}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||this.pinchState||this.mouseWheelState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(t){if(this.initAnimationIsReady)if(this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh(),t.isFinal){let e=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov,offset:new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),distance:this.locationMotion.value.distance});if(this.fixFinalState(e),this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(noop)}else{let n=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),r=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),o=coordinatesToVector(this.cameraMotion.value,new three.Vector3).negate(),s=new three.Ray(r,o).intersectBox(this.modelScene.boundingBox,new three.Vector3);s&&(n+=s.distanceTo(r));let c=Math.max(this.locationMotion.value.distance-this.camera.near,0),l=t.center.delta/10*Math.max(c/5,.1);if(c<=n||l>0)if(this.locationMotion.value.distance-l>=minDistance){let e=this.locationMotion.value.distance-l;t.state.distance=e}else{let e=coordinatesToVector(this.cameraMotion.value);e.setLength(l),t.state.offset.add(e)}if(this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;this.locationMotion.set({distance:t.state.distance,x:t.state.offset.x,y:t.state.offset.y,z:t.state.offset.z},0).catch(noop)}}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},o=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new three.Vector3,distance:0});if(e.state=o,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:o,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=createUuid(),s=panoStringify({panoIndex:r.panoIndex,workCode:r.work.workCode}),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},l=this.imageOptions.transform,u=Object.assign({key:`pano.${s}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),d=`pano:`+jsonHash([c,u,l]),f=this.modelScene.parameter,p;f.pano0&&f.pano0.map.name===d?p=f.pano0:f.pano1&&f.pano1.map.name===d&&(p=f.pano1),p?(f.pano0&&f.pano0.map!==p.map&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==p.map&&f.pano1.map!==((t=f.pano0)==null?void 0:t.map)&&f.pano1.map.dispose(),f.set({pano0:p,pano1:p}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))):this.textureLoader.loadCubeTexture(c,{imageURL:{transform:l,options:u},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer).then(t=>{var c,l;let{body:u}=t;if(this.destroyed||this.pendingTextureId!==e){u.dispose();return}this.pendingTextureId=null,u.name=d;let p=Array.isArray(u.image)?u.image[0]:u.image,m=(c=p==null?void 0:p.width)==null?2048:c,h=r.images.histogram;h||(h=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,u,!0,sharedHistogramRgbaData).data),r.images.histogram=h);let g={panoId:s,map:u,mapSize:m,mapHistogram:new three.Vector4().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1};f.pano0&&f.pano0.map.dispose(),f.pano1&&f.pano1.map!==((l=f.pano0)==null?void 0:l.map)&&f.pano1.map.dispose(),f.set({pano0:g,pano1:g}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:o,options:n,error:null}))}).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}onDblTapGesture(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.state,n=e.center.raycaster,r=n.ray.origin.clone().add(n.ray.direction.clone().setLength(3)),o=1,s=3,c=1,[l]=this.modelScene.intersectRaycaster(n);if(l&&(r=l.point.clone(),c=l.distance>4/2?1:3),e.state.distance=c,e.state.offset=r,this.emit(`gesture.dbltap`,e),e.defaultPrevented)return;let u={x:t.offset.x,y:t.offset.y,z:t.offset.z,distance:t.distance};this.locationMotion.set(u,360).catch(noop),this.hideIntersectMesh()}hideIntersectMesh(){this.intersectMesh.visible===!0&&(this.intersectMesh.visible=!1,this.needsRender=!0)}};function isNil(e){return e==null}var _moveEvent={type:`move`},XRController=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null,this._axes=[0,0]}getHandSpace(){return this._hand===null&&(this._hand=new three.Group,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new three.Group,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new three.Vector3,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new three.Vector3),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new three.Group,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new three.Vector3,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new three.Vector3),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}disconnect(e){return this.dispatchEvent({type:`disconnected`,data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}getAxes(){return this._axes}update(e,t,n){let r=null,o=null,s=null,c=this._targetRay,l=this._grip,u=this._hand;if(e&&e.gamepad&&e.gamepad.axes&&(this._axes=[e.gamepad.axes[2],e.gamepad.axes[3]]),e&&t.session.visibilityState!==`visible-blurred`)if(c!==null&&(r=t.getPose(e.targetRaySpace,n),r!==null&&(c.matrix.fromArray(r.transform.matrix),c.matrix.decompose(c.position,c.rotation,c.scale),r.linearVelocity?(c.hasLinearVelocity=!0,c.linearVelocity.copy(r.linearVelocity)):c.hasLinearVelocity=!1,r.angularVelocity?(c.hasAngularVelocity=!0,c.angularVelocity.copy(r.angularVelocity)):c.hasAngularVelocity=!1,this.dispatchEvent(_moveEvent))),u&&e.hand){s=!0;for(let r of e.hand.values()){let e=t.getJointPose(r,n);if(u.joints[r.jointName]===void 0){let e=new three.Group;e.matrixAutoUpdate=!1,e.visible=!1,u.joints[r.jointName]=e,u.add(e)}let o=u.joints[r.jointName];e!==null&&(o.matrix.fromArray(e.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.jointRadius=e.radius),o.visible=e!==null}let r=u.joints[`index-finger-tip`],o=u.joints[`thumb-tip`],c=r.position.distanceTo(o.position),l=.02,d=.005;u.inputState.pinching&&c>l+d?(u.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!u.inputState.pinching&&c<=l-d&&(u.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(o=t.getPose(e.gripSpace,n),o!==null&&(l.matrix.fromArray(o.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),o.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(o.linearVelocity)):l.hasLinearVelocity=!1,o.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(o.angularVelocity)):l.hasAngularVelocity=!1));return c!==null&&(c.visible=r!==null),l!==null&&(l.visible=o!==null),u!==null&&(u.visible=s!==null),this}},framebufferScaleFactor=1,isAppleVisionPro=()=>{try{let e=/Macintosh/i.test(navigator.userAgent),t=navigator.maxTouchPoints===5;return e&&t}catch(e){return console.error(`Error determining if the device is an Apple Vision Pro: `,e),!1}},isOculus=()=>{try{return/Oculus/i.test(navigator.userAgent)}catch(e){return console.error(`Error determining if the device is an Oculus: `,e),!1}},XRManager=class{constructor(e,t,n){var r,o,s,c,l;this.isPanorama=(r=n==null?void 0:n.isPanorama)==null?!0:r,navigator.userAgent.toLowerCase();let u;u=isAppleVisionPro()?`VP`:isOculus()?`Oculus`:`Pico`,this.machineType=(o=n==null?void 0:n.machineType)==null?u:o,this.renderer=e,this.gl=t,this.enabled=!1,this.session=null,this.referenceSpaceType=(s=n==null?void 0:n.referenceSpaceType)==null?`local-floor`:s,this.referenceSpace=null,this.onSessionStartCallback=(c=n==null?void 0:n.onSessionStart)==null?noop:c,this.onSessionEndCallback=(l=n==null?void 0:n.onSessionEnd)==null?noop:l,this.controllers=[new XRController,new XRController],this.inputSourcesMap=new Map,this.cameraVR=new three.ArrayCamera,this.cameraL=new three.PerspectiveCamera,this.cameraR=new three.PerspectiveCamera,this.cameraVR.cameras.push(this.cameraL,this.cameraR),this.cameraL.viewport=new three.Vector4,this.cameraR.viewport=new three.Vector4,this.cameraL.layers.enable(1),this.cameraR.layers.enable(2),this.cameraVR.layers.enable(1),this.cameraVR.layers.enable(2),this.isPresenting=!1,this.currentDepthNear=null,this.currentDepthFar=null,this.cameraLPos=new three.Vector3,this.cameraRPos=new three.Vector3}getController(e){let t=this.controllers[e];return t||console.warn(`no controller find`),t.getTargetRaySpace()}getRightController(){if(!this.session||!this.session.inputSources)return null;let e;if(this.session.inputSources.forEach((t,n)=>{t.handedness===`right`&&(e=n)}),e===void 0)return console.warn(`no inputSource for right hand`),null;let t=this.controllers[e];return t?t.getTargetRaySpace():(console.warn(`right controller not find`),null)}getLeftController(){if(!this.session||!this.session.inputSources)return null;let e;if(this.session.inputSources.forEach((t,n)=>{t.handedness===`left`&&(e=n)}),e===void 0)return console.warn(`no inputSource for left hand`),null;let t=this.controllers[e];return t?t.getTargetRaySpace():(console.warn(`left controller not find`),null)}getControllerGrip(e){let t=this.controllers[e];return t||console.warn(`no controller find`),t.getGripSpace()}getCameras(){return{cameraL:this.cameraL,cameraR:this.cameraR,cameraVR:this.cameraVR}}updateCamera(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.getInverse(e.matrixWorld)}setProjectionFromUnion(e,t,n){this.cameraLPos.setFromMatrixPosition(t.matrixWorld),this.cameraRPos.setFromMatrixPosition(n.matrixWorld);var r=this.cameraLPos.distanceTo(this.cameraRPos),o=t.projectionMatrix.elements,s=n.projectionMatrix.elements,c=o[14]/(o[10]-1),l=o[14]/(o[10]+1),u=(o[9]+1)/o[5],d=(o[9]-1)/o[5],f=(o[8]-1)/o[0],p=(s[8]+1)/s[0],m=c*f,h=c*p,g=r/(-f+p),_=g*-f;t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(_),e.translateZ(g),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.getInverse(e.matrixWorld);var v=c+g,y=l+g,b=m-_,S=h+(r-_),C=u*l/y*v,w=d*l/y*v;e.projectionMatrix.makePerspective(b,S,C,w,v,y)}getCamera(e){this.cameraVR.near=this.cameraR.near=this.cameraL.near=e.near,this.cameraVR.far=this.cameraR.far=this.cameraL.far=e.far,this.session&&(this.currentDepthNear!==this.cameraVR.near||this.currentDepthFar!==this.cameraVR.far)&&(this.session.updateRenderState({depthNear:this.cameraVR.near,depthFar:this.cameraVR.far}),this.currentDepthNear=this.cameraVR.near,this.currentDepthFar=this.cameraVR.far);let t=e.parent,n=this.cameraVR.cameras;this.updateCamera(this.cameraVR,t);for(let e=0;e<n.length;e++)this.updateCamera(n[e],t);e.matrixWorld.copy(this.cameraVR.matrixWorld);let r=e.children;for(let e=0,t=r.length;e<t;e++)r[e].updateMatrixWorld(!0);return n.length===2?this.setProjectionFromUnion(this.cameraVR,this.cameraL,this.cameraR):this.cameraVR.projectionMatrix.copy(this.cameraL.projectionMatrix),this.cameraVR}updateInputSources(e){if(!this.session){console.warn(`session is lose!`);return}let t=this.session.inputSources;for(let e=0;e<this.controllers.length;e++)this.inputSourcesMap.set(t[e],this.controllers[e]);for(let t=0;t<e.removed.length;t++){let n=e.removed[t],r=this.inputSourcesMap.get(n);r&&(r.dispatchEvent({type:`disconnected`,data:n}),this.inputSourcesMap.delete(n))}for(let t=0;t<e.added.length;t++){let n=e.added[t],r=this.inputSourcesMap.get(n);r&&r.dispatchEvent({type:`connected`,data:n})}}onSessionEvent(e){let t=this.inputSourcesMap.get(e.inputSource);t&&t.dispatchEvent({type:e.type})}onSessionEnd(){this.inputSourcesMap.forEach(function(e,t){e.disconnect(t)}),this.inputSourcesMap.clear(),this.isPresenting=!1,this.session=null,AnimationFrameLoop.shared.setContext(null),this.onSessionEndCallback()}onRequestReferenceSpace(e){this.referenceSpace=e,this.isPresenting=!0,this.session&&this.onSessionStartCallback(this.session)}setSession(e){if(this.session=e,this.session){this.session.addEventListener(`select`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`selectstart`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`selectend`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeeze`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeezestart`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeezeend`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`end`,e=>{this.onSessionEnd()});let e=this.gl.getContextAttributes();this.gl.makeXRCompatible().then(()=>{let t={antialias:e==null?void 0:e.antialias,alpha:e==null?void 0:e.alpha,depth:e==null?void 0:e.depth,stencil:e==null?void 0:e.stencil,framebufferScaleFactor};if(!this.session){console.error(`session is lose while set session!`);return}switch(this.machineType){case`Pico`:case`VP`:this.session.updateRenderState({baseLayer:new XRWebGLLayer(this.session,this.gl,t)});break;case`Oculus`:this.session.updateRenderState({baseLayer:new XRWebGLLayer(this.session,this.gl,t)});break;default:this.machineType;break}this.session.requestReferenceSpace(this.referenceSpaceType).then(e=>{this.onRequestReferenceSpace(e)}),this.session.addEventListener(`inputsourceschange`,e=>{this.updateInputSources(e)})})}}},LineSegmentsGeometry=class extends three.InstancedBufferGeometry{constructor(){super(),this.type=`LineSegmentsGeometry`,this.setIndex([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]),this.setAttribute(`position`,new three.Float32BufferAttribute([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],3)),this.setAttribute(`uv`,new three.Float32BufferAttribute([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],2))}applyMatrix4(e){let t=this.attributes.instanceStart,n=this.attributes.instanceEnd;return t!==void 0&&(t.applyMatrix4(e),n.applyMatrix4(e),t.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let t;t=e instanceof Float32Array?e:Array.isArray(e)?new Float32Array(e):new Float32Array;let n=new three.InstancedInterleavedBuffer(t,6,1);return this.setAttribute(`instanceStart`,new three.InterleavedBufferAttribute(n,3,0)),this.setAttribute(`instanceEnd`,new three.InterleavedBufferAttribute(n,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e){let t;t=e instanceof Float32Array?e:Array.isArray(e)?new Float32Array(e):new Float32Array;let n=new three.InstancedInterleavedBuffer(t,6,1);return this.setAttribute(`instanceColorStart`,new three.InterleavedBufferAttribute(n,3,0)),this.setAttribute(`instanceColorEnd`,new three.InterleavedBufferAttribute(n,3,3)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new three.WireframeGeometry(e.geometry)),this}fromLineSegments(e){var t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new three.Box3);let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=new three.Box3;this.boundingBox.setFromBufferAttribute(e),n.setFromBufferAttribute(t),this.boundingBox.union(n)}}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new three.Sphere),this.boundingBox===null&&this.computeBoundingBox();let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=this.boundingSphere.center;this.boundingBox.getCenter(n);let r=0,o=new three.Vector3;for(let s=0,c=e.count;s<c;s++)o.fromBufferAttribute(e,s),r=Math.max(r,n.distanceToSquared(o)),o.fromBufferAttribute(t,s),r=Math.max(r,n.distanceToSquared(o));this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error(`THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.`,this)}}toJSON(){}};Object.assign(LineSegmentsGeometry.prototype,{isLineSegmentsGeometry:!0});var lineShader={uniforms:three.UniformsUtils.merge([three.UniformsLib.common,three.UniformsLib.fog,{linewidth:{value:1},resolution:{value:new three.Vector2(1,1)},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1},opacity:{value:1}}]),vertexShader:`
|
|
2040
|
+
`,PanoSphereMesh=class extends three.Object3D{constructor(){super(),this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new Motion({ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}),this.opacityMotion=new Motion({opacity:0}),this.loadingMotion=new Motion({opacity:0}),this.disableMotion=new Motion({opacity:0});let e={blending:three.CustomBlending,blendSrc:three.SrcAlphaFactor,blendDst:three.OneMinusSrcAlphaFactor,blendSrcAlpha:three.OneFactor,blendDstAlpha:three.OneMinusSrcAlphaFactor,depthWrite:!1,transparent:!0};this.hitTestMesh=new three.Mesh(sharedGeometry,new three.MeshBasicMaterial(Object.assign(Object.assign({},e),{color:0,opacity:0}))),this.hitTestMesh.scale.set(1.5,1.5,1.5),this.ringMesh=new three.Mesh(sharedGeometry,new three.ShaderMaterial(Object.assign(Object.assign({},e),{vertexShader:ringVertexShader,fragmentShader:ringFragmentShader,uniforms:{opacity:{value:0}}}))),this.panoMesh=new three.Mesh(sharedGeometry,new three.ShaderMaterial(Object.assign(Object.assign({},e),{vertexShader,fragmentShader,uniforms:{circleScale:{value:1.1},circleFade:{value:0},circleOpacity:{value:.5},loadingAngle:{value:0},loadingOpacity:{value:0},opacity:{value:0},disable:{value:0}}}))),this.add(this.hitTestMesh),this.add(this.ringMesh),this.add(this.panoMesh),this.renderOrder=1e4,this.needsRender=!0}setProgress(e){this.progress=e,this.setLoading(e>0)}setOpacity(e){this.opacity!==e&&(this.opacity=e=clamp$1(e,0,1),this.opacityMotion.set({opacity:e},30).catch(noop))}setCurrent(e){if(this.current!==e){if(e)this.currentMotion.setKeyframes([{progress:0,value:{ringScale:2,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.05,value:{ringScale:1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.15,value:{ringScale:1.2,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.25,value:{ringScale:1.1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.8,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1}},{progress:.9,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:.92,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:1,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1.1}}],1500).catch(noop);else{let e=[{progress:0,value:Object.assign({},this.currentMotion.value)},{progress:1,value:{ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}}];this.currentMotion.setKeyframes(e,200).catch(noop)}this.current=e}}setLoading(e){this.loading!==e&&(e?this.loadingMotion.setKeyframes([{progress:0,value:{opacity:0}},{progress:.3,value:{opacity:0}},{progress:1,value:{opacity:.8}}],500).catch(noop):this.loadingMotion.set({opacity:0},0).catch(noop),this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.needsRender=!0)}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({opacity:e?1:0},300).catch(noop),this.needsRender=!0)}tap(){return Promise.resolve()}updateTime(e,t){this.opacityMotion.update(e),this.currentMotion.update(e),this.loadingMotion.update(e);let n=this.opacityMotion.value.opacity;this.visible=n!==0;let{ringScale:r,ringOpacity:o,circleFade:s,circleOpacity:c,circleScale:l}=this.currentMotion.value;this.ringMesh.scale.set(r,1,r),this.ringMesh.material.uniforms.opacity.value=o*n,this.panoMesh.material.uniforms.opacity.value=n,this.panoMesh.material.uniforms.circleOpacity.value=c,this.panoMesh.material.uniforms.circleScale.value=l,this.panoMesh.material.uniforms.circleFade.value=s,this.panoMesh.material.uniforms.loadingOpacity.value=this.loadingMotion.value.opacity,this.panoMesh.material.uniforms.disable.value=this.disableMotion.value.opacity,this.panoMesh.material.uniforms.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0}dispose(){this.hitTestMesh.material.dispose(),this.ringMesh.material.dispose(),this.panoMesh.material.dispose()}},ACTIVE_TO_CURRENT_DELAY=1500,defaultVRPanoramaControllerCustomInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`])),VRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`VRPanorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`VRPanorama`,this.cardboard=new Cardboard(this.renderer);let r=createHelper();this.helperElement=r;let o=new Hammer(r);this.element.parentNode&&(this.element.parentNode.insertBefore(r,this.element),this.updateHelperElementSize(),o.on(`tap`,()=>this.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{})))),this.destroyHelper=()=>{o.destroy(),r.parentNode&&r.parentNode.removeChild(r),this.helperElement=void 0}}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}destroy(){super.destroy(),this.cardboard.dispose(),this.destroyHelper()}isReady(){return!1}updateRenderSize(){this.needsRender=!0}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u;if(this.destroyed)return;this.updateHelperElementSize(),this.userAction=!0,this.needsRender=!0;let d={},f={},p=this.locationMotion.keyframes[0],m=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[h,g]=this.locationMotion.getKeyFrameSegment(e),_=this.panoResourceFromLocationMotionKeyframe(h),v=this.panoResourceFromLocationMotionKeyframe(g),y=this.panoResourceFromLocationMotionKeyframe(p),b=this.panoResourceFromLocationMotionKeyframe(m),S=!1;if(this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),d.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-g.value.count+1,n=new three.Vector3().copy(_.position),s=new three.Vector3().copy(v.position);if(d.progress=t,t>=.01&&t<=.99&&(d.progress=clamp$1(v.effectEasing(t),.01,.99)),v.panoPicture&&(t<1?_.panoPicture&&(d.pano0=_.panoPicture):d.pano0=v.panoPicture,d.pano1=v.panoPicture),v.effect===`montage`?d.transition=`BLACK`:v.effect===`spread`?d.transition=`SPREAD`:d.transition=`FADE`,v.effect===`zoomin`||v.effect===`zoomout`?d.progress=Math.pow(t,3):v.effect===`model`&&this.camera.pose.distance<.01&&(d.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&v.effect!==`fly`){if(d.pano0&&_.panoPicture){let e={panoId:d.pano0.panoId,map:d.pano0.map,mapHistogram:d.pano0.mapHistogram,mapSize:d.pano0.mapSize,zoom:d.pano0.zoom,matrix:_.panoPicture.matrix.clone().setPosition(v.position)},t=this.panoPictureObserverMap.get(d.pano0);t&&this.panoPictureObserverMap.set(e,t),d.pano0=e}n.copy(s),S=!0}f.distance=this.locationMotion.value.distance,f.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=d.pano0)==null?void 0:r.map)||e===((o=d.pano1)==null?void 0:o.map))continue;e.dispose(),t.panoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}this.currentPano=panoParse(v.panoId),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(y.panoId),pano:panoParse(b.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(b.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),f),options:{},progress:this.locationMotion.progress,error:null}))}isEmptyObject(d)===!1&&this.modelScene.parameter.set(d),f.offset&&this.camera.position.copy(f.offset);let C=this.camera.pose.longitude,w=this.camera.pose.latitude;this.camera.quaternion.fromArray(this.cardboard.sensor.getOrientation()),this.camera.computePose(),(C!==this.camera.pose.longitude||w!==this.camera.pose.latitude)&&(this.cameraMotion.set(pick(this.camera.pose,[`longitude`,`latitude`]),0).catch(noop),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:!0,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}))),this.works.getObserver(this.currentPano);let T=this.works.getObserver(_.panoId),E=this.works.getObserver(v.panoId),D=new Map;if(T)for(let e of T.accessibleNodes){let t=T.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});D.set(e,t)}}if(E)for(let e of E.accessibleNodes){let t=E.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});D.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{let n=D.get(t);n?(e.position.copy(n.position).applyMatrix4(n.work.transform),D.delete(t)):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),D.forEach((e,t)=>{let n=new PanoSphereMesh;n.position.copy(e.position).applyMatrix4(e.work.transform),e.position.distanceTo(e.standingPosition)>this.aerialObserverMinHeight?n.scale.setScalar(15):n.scale.setScalar(1),this.panoMeshes.set(t,n),this.helper.add(n),D.delete(t)}),this.camera.pose.distance>.1||S?this.panoMeshes.forEach((n,r)=>{n.setOpacity(0),n.updateTime&&n.updateTime(e,t),n.visible=!1}):this.panoMeshes.forEach((e,t)=>{let n=panoParse(t),r=this.works.getObserver(n);if(!r)return;if(!r.loadable&&!r.active){e.setOpacity(0);return}let o=e.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);o<.05?e.setOpacity(0):e.setOpacity(clamp$1(1.5/o,0,1)),panoEqual(this.currentPano,n)&&e.setOpacity(0),e.lookAt(this.camera.position)}),this.locationMotion.ended){let n=this.intersect(e);this.panoMeshes.forEach((r,o)=>{r.setCurrent(r===n),r.updateTime&&r.updateTime(e,t)})}{let e=(s=this.modelScene.parameter.progress)==null?1:s,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,l;if(o&&(l=this.works.getObserver(o.panoId),l||(l=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!l||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize),s=e+1,u=new three.Vector2().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),d=Math.floor(this.tileLevelForFov(this.camera.fov,u)),f=d>e?d:0;this.tiling.setObserver(l);let p={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:s,level:f},m=this.tiling.update(p),h={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((c=this.modelScene.parameter.progress)==null?0:c)-.5)*2)},g=this.modelScene.parameter.refinedScreen;(m||h.pano!==(g==null?void 0:g.pano)||h.opacity!==(g==null?void 0:g.opacity))&&this.modelScene.parameter.set(`refinedScreen`,h)}}this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e);{let e=v.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((l=this.modelScene.parameter.pano0Depth)==null?void 0:l.panoId)!==t.panoId||((u=this.modelScene.parameter.pano1Depth)==null?void 0:u.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.cardboard.render(this.scene,this.camera),!0}setCamera(e={}){}destroyHelper(){}updateHelperElementSize(){if(!this.helperElement)return;let e=new three.Vector2(this.element.offsetWidth,this.element.offsetHeight),t=e.x*this.viewport.left,n=e.y*(1-this.viewport.bottom-this.viewport.height),r=e.x*this.viewport.width,o=e.y*this.viewport.height;this.helperElement.style.marginLeft!==t+`px`&&(this.helperElement.style.marginLeft=t+`px`),this.helperElement.style.marginTop!==n+`px`&&(this.helperElement.style.marginTop=n+`px`),this.helperElement.style.width!==r+`px`&&(this.helperElement.style.width=r+`px`),this.helperElement.style.height!==o+`px`&&(this.helperElement.style.height=o+`px`)}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0;return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>ACTIVE_TO_CURRENT_DELAY){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&this.moveToPano(panoParse(t),{},!0),this.activePanoMesh=void 0,this.activeTime=void 0,e}let r=this.camera.getDirection(new three.Vector3),o=new three.Raycaster(this.camera.position,r);o.params.Points={threshold:.1},o.firstHitOnly=!0,o.floorIndex=-1;let s,c=[],l=this.works.getObserver(this.currentPano),u=l?l.accessibleNodes.map(e=>panoStringify({panoIndex:e,workCode:l.work.workCode})):[];for(let e of u){let r=this.panoMeshes.get(e);if(r){let[e]=o.intersectObject((t=r.hitTestMesh)==null?r:t,!0);if(e){let t=(n=l==null?void 0:l.floorIndex)==null?0:n;c.push({panoMesh:r,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[d]=c.sort((e,t)=>e.intersection.distance-t.intersection.distance);d?(s=d.intersection,this.activePanoMesh!==d.panoMesh&&(this.activePanoMesh=d.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(d.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),s||(s=this.modelScene.intersectRaycaster(o)[0]);let f=createEvent(`intersect.update`,{raycaster:o,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,f),f.defaultPrevented){this.hideIntersectMesh();return}if(s&&s.face){let e=s.face.normal,t=new three.Quaternion;t.setFromUnitVectors(new three.Vector3(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=s.point.clone();this.intersectMesh.position.copy(n),d?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return d==null?void 0:d.panoMesh}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}},HUMAN_EYE_POSITION=new three.Vector3(0,1.6,0),scratchObserverBox$1=new three.Box3,scratchVector3$2=new three.Vector3,defaultModelControllerCustomInitArgs=Object.assign({},defaultPanoramaLikeControllerCustomInitArgs),ModelController=class e extends PanoramaLikeController{static parseArgs(t){return t instanceof e?t:super.parseArgs(t)}static initAnimationEndState(e){var t,n,r,o,s,c;let l=this.parseArgs(e),u=l.works,{state:d,currentState:f}=e.initial,p=typeof d.panoIndex==`number`?{workCode:(r=(t=d.workCode)==null?(n=l.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:d.panoIndex}:{workCode:f.workCode,panoIndex:f.panoIndex},m=u.getObserver(p),h=clamp$1((o=d.fov)==null?!m||isFristPersonMode(f.mode)?f.fov:l.defaultFov:o,l.minFov,l.maxFov),g=(s=d.longitude)==null?f.longitude:s,_=clamp$1(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),v=clamp$1(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),y=clamp$1((c=d.latitude)==null?!m||isFristPersonMode(f.mode)?f.latitude:l.defaultLatitude:c,_,v),b=new three.Vector3;if(l.initial.state.offset)b.copy(l.initial.state.offset);else if(m)b.copy(m.position).applyMatrix4(m.work.transform);else{let e=coordinatesToVector(f).setLength(f.distance);b.copy(l.initial.currentState.offset).sub(e)}return{workCode:p.workCode,panoIndex:p.panoIndex,mode:`Model`,longitude:g,latitude:y,fov:h,offset:b,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Model`,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue(`modelAlpha`)}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x})}updateConfiguration(e){return super.updateConfiguration(e)}destroy(){super.destroy(),this.locationMotion.dispose()}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,o){this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));return(s.workCode!==this.currentPano.workCode||s.panoIndex!==this.currentPano.panoIndex||s.longitude!==this.cameraMotion.value.longitude||s.latitude!==this.cameraMotion.value.latitude||s.fov!==this.cameraMotion.value.fov)&&this.moveToPosition(s.offset,{duration:0,longitude:s.longitude,latitude:s.latitude,fov:s.fov},o),!0}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return r.distance=0,e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:0,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},o={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),!this.locationMotion.ended){this.locationMotion.update(e),o.distance=this.locationMotion.value.distance,o.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z);let t=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),n=[];for(let e of this.works){let r=this.modelScene.models.find(t=>t.work===e);if(!(!r||r.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(t)))for(let t of e.observers)n.push(t)}let r=arrayMin(n,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t));this.currentPano=r?{workCode:r.work.workCode,panoIndex:r.panoIndex}:{workCode:``,panoIndex:0}}this.cameraMotion.ended||(this.cameraMotion.update(e),o.longitude=this.cameraMotion.value.longitude,o.latitude=this.cameraMotion.value.latitude,o.fov=this.cameraMotion.value.fov),isEmptyObject(r)||this.modelScene.parameter.set(r),isEmptyObject(o)||this.setCamera(o);let s=this.works.getObserver(this.currentPano);if(this.intersectMesh&&this.intersectMesh.parent&&s&&s.position.y-s.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={modelAlpha:1},u={perspToOrtho:0},d={longitude:c.longitude,latitude:c.latitude,fov:c.fov,duration:o,moveStartCallback:e=>{this.perspToOrthoMotion.set(u,o).catch(noop),this.modelAlphaMotion.set(l,o).catch(noop),this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:e,userAction:this.userAction})),t()},moveCancelCallback:()=>{let e=this.currentPano,n=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:n,userAction:this.userAction})),t()}};this.moveToPosition(c.offset,d,s)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new three.Vector3(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}moveToPano(e,t={},n){let r=this.works.getObserver(e);if(r){let e=new three.Vector3().copy(r.position).applyMatrix4(r.work.transform);this.moveToPosition(e,t,n)}}moveToPosition(e,t={},n){var r,o,s;this.userAction=n,this.stopMomentumMovement();let c=now(),l=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),u=l.distanceTo(e),d=this.locationMotion.getProgressVelocity(c),f=0;for(let e=1;e<this.locationMotion.keyframes.length;e++){let{x:t,y:n,z:r}=this.locationMotion.keyframes[e-1].value,{x:o,y:s,z:c}=this.locationMotion.keyframes[e].value;f+=Math.sqrt(Math.pow(o-t,2)+Math.pow(s-n,2)+Math.pow(c-r,2))}let p=u===0?0:d*f/u,m=this.calculateMovingDuration(t.duration,u),h={x:e.x,y:e.y,z:e.z,distance:0},g={longitude:t.longitude,latitude:t.latitude,fov:t.fov},_=[];for(let e of this.works){let t=this.modelScene.models.find(t=>t.work===e);if(!(!t||t.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(l)))for(let t of e.observers)_.push(t)}let v=arrayMin(_,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(l)),y=v?{workCode:v.work.workCode,panoIndex:v.panoIndex}:{workCode:``,panoIndex:0},b=Object.assign(Object.assign({},y),{mode:this.mode,longitude:(r=g.longitude)==null?this.camera.pose.longitude:r,latitude:(o=g.latitude)==null?this.camera.pose.latitude:o,fov:(s=g.fov)==null?this.camera.pose.fov:s,offset:e.clone(),distance:0}),S=this.currentPano;this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:t,prevPano:S,pano:{panoIndex:b.panoIndex,workCode:b.workCode},progress:0,state:b,userAction:this.userAction,error:null})),t.moveStartCallback&&t.moveStartCallback(b),this.cameraMotion.set(g,m).catch(noop),this.locationMotion.set(h,m,p).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let e=Object.assign(Object.assign(Object.assign({},y),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:t,prevPano:S,pano:{panoIndex:e.panoIndex,workCode:e.workCode},progress:0,state:e,userAction:this.userAction,error:null})),t.moveEndCallback&&t.moveEndCallback(e)},()=>{t.moveCancelCallback&&t.moveCancelCallback(),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:t,prevPano:S,pano:{panoIndex:b.panoIndex,workCode:b.workCode},progress:0,state:b,userAction:this.userAction,error:null}))})}onTapGesture(e){let t=e.center.raycaster;this.stopMomentumMovement();let[n]=this.modelScene.intersectRaycaster(t);if(n&&n.face){let e=n.face.normal,t=n.point;if(new three.Vector3(0,1,0).angleTo(e)>Math.PI/3){let r=new three.Raycaster;r.firstHitOnly=!0;let o=e.clone().setLength(.3).add(t);r.set(o,new three.Vector3(0,-1,0)),n=this.modelScene.intersectRaycaster(r)[0]}}if(n){let t=new three.Vector3().copy(n.point).add(HUMAN_EYE_POSITION),r=[];for(let e of this.works){let n=this.modelScene.models.find(t=>t.work===e);if(!(!n||n.visible===!1)&&!(e.observers.length<=0)&&(scratchObserverBox$1.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),scratchObserverBox$1.containsPoint(t)))for(let t of e.observers)r.push(t)}let[o,s]=arrayMin(r,e=>scratchVector3$2.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t),!0);o&&s<5&&(t.y=scratchVector3$2.copy(o.position).applyMatrix4(o.work.transform).y),e.state.offset.copy(t),e.state.distance=0,this.emit(`gesture.tap`,e),e.defaultPrevented||this.moveToPosition(t,{},!0)}else this.emit(`gesture.tap`,e),e.defaultPrevented||this.cameraBounce()}},scratchObserverBox=new three.Box3,scratchVector3$1=new three.Vector3,minDistance=.5,PANGESTURE_FORWARD_ANGLE=Math.PI/7,defaultMapviewControllerCustomInitArgs={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultDistance:150,maxLatitude:Math.PI/2,minLatitude:0,cameraType:`auto`,cameraFence:null,intersectMeshCreator:()=>new IntersectMesh},MapviewController=class e extends BaseController{static parseArgs(t){var n,r,o,s,c,l,u,d;if(t instanceof e)return t;let f=super.parseArgs(t);return Object.assign(Object.assign({},f),{defaultLongitude:(n=t.defaultLongitude)==null?defaultMapviewControllerCustomInitArgs.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?defaultMapviewControllerCustomInitArgs.defaultLatitude:r,defaultDistance:(o=t.defaultDistance)==null?defaultMapviewControllerCustomInitArgs.defaultDistance:o,maxLatitude:(s=t.maxLatitude)==null?defaultMapviewControllerCustomInitArgs.maxLatitude:s,minLatitude:(c=t.minLatitude)==null?defaultMapviewControllerCustomInitArgs.minLatitude:c,cameraType:(l=t.cameraType)==null?defaultMapviewControllerCustomInitArgs.cameraType:l,cameraFence:(u=t.cameraFence)==null?defaultMapviewControllerCustomInitArgs.cameraFence:u,intersectMeshCreator:(d=t.intersectMeshCreator)==null?defaultMapviewControllerCustomInitArgs.intersectMeshCreator:d})}static distanceFromModel(e,t,n){let r=e.boundingBox,o=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);o=isNaN(o)||!isFinite(o)?1:o;let s=o/2/Math.tan(Math.PI*t/360);return n<1&&(s/=n),isNaN(s)||!isFinite(s)?o:s}static initAnimationEndState(t){var n,r,o,s,c,l,u;let d=this.parseArgs(t),f=d.works,p=d.modelScene,{state:m,currentState:h}=t.initial,g=typeof m.panoIndex==`number`?{workCode:(o=(n=m.workCode)==null?(r=d.works[0])==null?void 0:r.workCode:n)==null?``:o,panoIndex:m.panoIndex}:{workCode:h.workCode,panoIndex:h.panoIndex},_=(s=m.fov)==null?60:s,v=clamp$1(typeof d.minLatitude==`function`?d.minLatitude(_):d.minLatitude,-Math.PI/2,Math.PI/2),y=clamp$1(typeof d.maxLatitude==`function`?d.maxLatitude(_):d.maxLatitude,-Math.PI/2,Math.PI/2),b=clamp$1((c=m.latitude)==null?isThirdPersonMode(h.mode)?h.latitude:d.defaultLatitude:c,v,y),S=e.distanceFromModel(d.modelScene,_,d.camera.aspect),C=new three.Vector3,w=(l=m.distance)==null?Math.min(d.defaultDistance,S):l,T=(u=m.longitude)==null?isThirdPersonMode(h.mode)?h.longitude:d.defaultLongitude:u;if(m.offset)C.copy(m.offset);else{let e=f.getObserver(g);d.defaultDistance<S&&e?(C.copy(e.position).applyMatrix4(e.work.transform),m.longitude===void 0&&(T=h.longitude)):(p.boundingBox.getCenter(C),w=S)}return Object.assign(Object.assign({},g),{mode:`Mapview`,longitude:T,latitude:b,fov:_,offset:C,distance:w})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Mapview`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultDistance=n.defaultDistance,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.cameraType=n.cameraType,this.cameraFence=n.cameraFence,this.locationMotion=new Motion({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new Motion({modelAlpha:this.modelScene.parameter.resolveValue(`modelAlpha`)}),this.perspToOrthoMotion=new Motion({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new TextureLoader,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultDistance!==void 0&&this.defaultDistance!==e.defaultDistance&&(this.defaultDistance=e.defaultDistance),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.cameraType!==void 0&&this.cameraType!==e.cameraType&&(this.cameraType=e.cameraType),this.cameraFence instanceof three.Box3&&e.cameraFence instanceof three.Box3||this.cameraFence instanceof three.Sphere&&e.cameraFence instanceof three.Sphere?this.cameraFence.equals(e.cameraFence)||(this.cameraFence=e.cameraFence):e.cameraFence!==void 0&&(this.cameraFence=e.cameraFence),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,o){this.userAction=o,this.works=t;let s=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:o}}));this.currentPano={workCode:s.workCode,panoIndex:s.panoIndex};let c={longitude:s.longitude,latitude:s.latitude,fov:s.fov},l={x:s.offset.x,y:s.offset.y,z:s.offset.z,distance:s.distance};return(c.longitude!==this.cameraMotion.value.longitude||c.latitude!==this.cameraMotion.value.latitude||c.fov!==this.cameraMotion.value.fov)&&this.cameraMotion.set(c,r.duration).catch(noop),(l.x!==this.locationMotion.value.x||l.y!==this.locationMotion.value.y||l.z!==this.locationMotion.value.z||l.distance!==this.locationMotion.value.distance)&&this.locationMotion.set(l,r.duration).catch(noop),!0}updateModel(e){super.updateModel(e),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},o={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(o.longitude=e.longitude),e.latitude!==void 0&&(o.latitude=e.latitude),e.fov!==void 0&&(o.fov=e.fov),this.locationMotion.set(r,t).catch(noop),this.cameraMotion.set(o,t).catch(noop)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],o=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),o.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(noop),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t){if(this.destroyed)return;let n={},r={};if(this.locationMotion.ended||(this.locationMotion.update(e),r.distance=this.locationMotion.value.distance,r.offset=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),n.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),n.progress=1,n.pano0=n.pano1=t}let o=0;if(this.cameraType===`auto`?o=Math.abs(Math.PI/2-this.cameraMotion.value.latitude)<.02||Math.abs(-Math.PI/2-this.cameraMotion.value.latitude)<.02?1:0:this.cameraType===`perspective`?o=0:this.cameraType===`orthographic`&&(o=1),this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho!==o&&this.perspToOrthoMotion.set({perspToOrtho:o},500).catch(noop),this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),isEmptyObject(n)||this.modelScene.parameter.set(n),isEmptyObject(r)||this.setCamera(r),this.cameraFence&&!this.panState&&!this.pinchState&&!this.mouseWheelState&&!this.inMomentumMovement&&this.locationMotion.ended&&this.perspToOrthoMotion.ended&&this.cameraMotion.ended){let e=coordinatesToVector(this.camera.pose,new three.Vector3),t=new three.Vector3().copy(this.camera.pose.offset).sub(e.clone().multiplyScalar(this.camera.pose.distance));if(this.cameraFence.distanceToPoint(t)>.01){let e=this.cameraFence.clampPoint(t,new three.Vector3),n=this.camera.pose.offset.clone().add(e).sub(t),r=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:n,distance:this.camera.pose.distance});this.fixFinalState(r),this.locationMotion.set({x:r.offset.x,y:r.offset.y,z:r.offset.z,distance:r.distance},300).catch(noop)}}if(this.intersectMesh&&this.intersectMesh.parent){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(now())[1],t=this.locationMotion.getKeyFrameSegment(now())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,distance:t.value.distance,offset:new three.Vector3(t.value.x,t.value.y,t.value.z)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:o,userAction:s}=this.initial;this.userAction=s;let c=e.initAnimationEndState(this),l={longitude:c.longitude,latitude:c.latitude,fov:c.fov},u={x:c.offset.x,y:c.offset.y,z:c.offset.z,distance:c.distance};this.emit(`initAnimation.start`,createEvent(`initAnimation.start`,{state:c,userAction:this.userAction})),this.perspToOrthoMotion.set({perspToOrtho:0},o).catch(noop),this.modelAlphaMotion.set({modelAlpha:1},o/3).catch(noop),this.cameraMotion.set(l,o).catch(noop),this.locationMotion.set(u,o).then(()=>{this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:c,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`initAnimation.end`,createEvent(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(scratchObserverBox.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),scratchObserverBox.containsPoint(e.ray.origin)||e.ray.intersectsBox(scratchObserverBox)))for(let e of t.observers)n.push(e)}let[r,o]=arrayMin(n,e=>scratchVector3$1.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&o<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new three.Vector2);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let o=Object.assign({},n),s={longitude:0,latitude:0,x:0,y:0,z:0};for(let e=0;e<r;e++)o.longitude*=.996,o.latitude*=.996*.998,o.x*=.99,o.y*=.99,o.z*=.99,s.longitude+=o.longitude,s.latitude+=o.latitude,s.x+=o.x,s.y+=o.y,s.z+=o.z;let c=this.cameraMotion.value.fov,l=formatRad$1(this.cameraMotion.value.longitude+s.longitude),u=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(c):this.minLatitude,-Math.PI/2,Math.PI/2),d=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(c):this.maxLatitude,-Math.PI/2,Math.PI/2),f=clamp$1(this.cameraMotion.value.latitude+s.latitude,u,d),p=new three.Vector3(this.locationMotion.value.x+s.x,this.locationMotion.value.y+s.y,this.locationMotion.value.z+s.z),m=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:l,latitude:f,offset:p,fov:c,distance:this.locationMotion.value.distance}),h=e.state.offset.clone().sub(coordinatesToVector(e.state).setLength(m.distance)),g=!(Math.abs(o.longitude)>1e-4||Math.abs(o.latitude)>1e-4||Math.abs(o.x)>1e-4||Math.abs(o.y)>1e-4||Math.abs(o.z)>1e-4);(this.cameraFence?this.cameraFence.containsPoint(h):!0)===!1&&(g=!0);let _=createEvent(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:g,state:m}));if(this.emit(`gesture.fire`,_),this.inMomentumMovement.event=_,this.emit(`gesture.momentum`,_),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:l,latitude:f},0).catch(noop),this.locationMotion.set({x:m.offset.x,y:m.offset.y,z:m.offset.z,distance:m.distance},0).catch(noop),g?this.inMomentumMovement=null:AnimationFrameLoop.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,o,n)},!0))}fixFinalState(e){if(this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho===1)return;let t=coordinatesToVector(e,new three.Vector3),n=new three.Vector3().copy(e.offset).sub(t.clone().setLength(e.distance)),r=new three.Raycaster(n,t);r.params.Points={threshold:.1},r.firstHitOnly=!0,r.hitFilter=e=>e.distance>minDistance+r.near,r.near=this.camera.near,r.far=this.camera.far;let o;if(o=this.modelScene.intersectRaycaster(r)[0],o&&o.distance<this.camera.near&&(o=void 0),!o){let e=new three.Plane(new three.Vector3(0,1,0),-this.modelScene.boundingBox.min.y),t=r.ray.intersectPlane(e,new three.Vector3);if(t){let e=t.distanceTo(r.ray.origin);e<1e3&&e>=r.near&&(o={distance:e,floorIndex:0,floor:0,point:t,object:this.scene,face:null})}}if(!o){let r=Math.max(e.distance,3);o={distance:r,floorIndex:0,floor:0,point:n.clone().add(t.clone().setLength(r)),object:this.scene,face:null}}o.distance>=this.camera.near&¬SimilarValue(e.distance,o.distance)&&(e.distance=o.distance,e.offset=o.point)}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.pointers.length,n=this.panState,r=0,o=!1;e.pointerType===`mouse`&&(r=e.center.buttons,o=e.center.shiftKey),n&&r===0&&n.buttons!==0&&(r=n.buttons);let s=n==null?void 0:n.target;if(!s){let t=this.relativeClientPosition(e.center),n=this.createRaycasterFromCamera(t,this.camera);s=new three.Vector3().copy(n.ray.direction).multiplyScalar(3).add(n.ray.origin);let[r]=this.modelScene.intersectRaycaster(n);if(!r&&n.ray.direction.y<-.3){let e=new three.Plane(new three.Vector3(0,1,0),0),t=n.ray.intersectPlane(e,new three.Vector3);if(t){let e=t.distanceTo(n.ray.origin);e<1e4&&e>=n.near&&(r={distance:e,floorIndex:0,floor:0,point:t,object:this.scene})}}if(r)s.copy(r.point);else{let e=new three.Vector3().copy(this.camera.pose.offset).sub(this.camera.position).normalize(),t=new three.Plane().setFromNormalAndCoplanarPoint(e,this.camera.pose.offset);n.ray.intersectPlane(t,s)}}if(e.isFinal?this.panState=void 0:this.panState={target:s,buttons:r,pointerLength:t,defaultPrevented:e.defaultPrevented,x:e.center.x,y:e.center.y},n===void 0||n.pointerLength!==t){this.emit(`gesture.pan`,e);return}if(t>1||r===2||o){let t={x:e.center.x-n.x,y:e.center.y-n.y},r=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),o=coordinatesToVector(this.cameraMotion.value).setLength(this.locationMotion.value.distance).add(r),s=new three.Vector3().copy(o).sub(n.target).length();s*=Math.tan(this.camera.pose.fov/2*Math.PI/180);let c=this.renderer.getSize(new three.Vector2),l=2*t.x*s/c.y,u=2*t.y*s/c.y,d=new three.Vector3;d.setFromMatrixColumn(this.camera.matrix,0),d.multiplyScalar(-l),r.add(d),this.camera.pose.latitude<PANGESTURE_FORWARD_ANGLE?d.setFromMatrixColumn(this.camera.matrix,1):(d.setFromMatrixColumn(this.camera.matrix,0),d.crossVectors(this.camera.up,d)),d.multiplyScalar(u),r.add(d);let f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:r,distance:this.camera.pose.distance});if(e.state=f,this.emit(`gesture.pan`,e),e.defaultPrevented){this.panState&&(this.panState.defaultPrevented=e.defaultPrevented);return}if(e.isFinal&&n.defaultPrevented)return;if(this.locationMotion.set({x:f.offset.x,y:f.offset.y,z:f.offset.z},0).catch(noop),e.isFinal&&(this.fixFinalState(f),Object.assign(e,{__fixFinalState:!0}),this.locationMotion.set({distance:f.distance,x:f.offset.x,y:f.offset.y,z:f.offset.z},0).catch(noop)),e.isFinal){let t=this.renderer.getSize(new three.Vector2),n=2*e.velocityX*s/t.y,r=2*e.velocityY*s/t.y,o=new three.Vector3,c=new three.Vector3;o.setFromMatrixColumn(this.camera.matrix,0),o.multiplyScalar(-n),c.add(o),this.camera.pose.latitude<PANGESTURE_FORWARD_ANGLE?o.setFromMatrixColumn(this.camera.matrix,1):(o.setFromMatrixColumn(this.camera.matrix,0),o.crossVectors(this.camera.up,o)),o.multiplyScalar(r),c.add(o),this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,{longitude:0,latitude:0,x:c.x,y:c.y,z:c.z},0)}}else{let t={x:e.center.x-n.x,y:e.center.y-n.y},r=this.coordinatesForOffset(t),o=formatRad$1(this.cameraMotion.value.longitude+r.longitude),s=this.camera.pose.fov,c=clamp$1(typeof this.minLatitude==`function`?this.minLatitude(s):this.minLatitude,-Math.PI/2,Math.PI/2),l=clamp$1(typeof this.maxLatitude==`function`?this.maxLatitude(s):this.maxLatitude,-Math.PI/2,Math.PI/2),u=clamp$1(this.cameraMotion.value.latitude+r.latitude,c,l);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(u=this.cameraMotion.value.latitude);let d=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:o,latitude:u,fov:s,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.isFinal&&Object.assign(e,{__fixFinalState:!0}),e.state=d,this.emit(`gesture.pan`,e),e.defaultPrevented||e.isFinal&&n.defaultPrevented)return;if(e.isFinal?this.locationMotion.set({distance:d.distance,x:d.offset.x,y:d.offset.y,z:d.offset.z},0).catch(noop):this.cameraMotion.set({longitude:d.longitude,latitude:d.latitude},0).catch(noop),e.isFinal){let t=e.velocityX,n=e.velocityY;this.inMomentumMovement={uuid:createUuid()},this.requestMomentumMovement(e,!0,Object.assign(Object.assign({},this.coordinatesForOffset({x:t,y:n})),{x:0,y:0,z:0}),0)}}}onPinchGesture(t){var n;if(!this.initAnimationIsReady)return;this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let r=(n=this.pinchState)==null?void 0:n.distance;if(t.isFirst){this.pinchState={x:t.center.x,y:t.center.y,scale:1,distance:this.locationMotion.value.distance};return}if(r===void 0)return;let o=this.modelScene.boundingBox.getCenter(new three.Vector3),s=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),c=clamp$1(r/t.scale,minDistance,1/0),l=t.state.offset.clone().sub(coordinatesToVector(t.state).setLength(c)),u=this.modelScene.boundingBox.containsPoint(l),d;if(!u&&this.pinchState&&this.pinchState.scale>t.scale&&o.distanceTo(l)>s?d=t.state.distance:(d=c,this.pinchState&&(this.pinchState.scale=t.scale)),t.state.distance=d,this.emit(`gesture.pinch`,t),!t.defaultPrevented&&(this.locationMotion.set({distance:t.state.distance},0).catch(noop),t.pointerType!==`mouse`&&(t.type=`gesture.pan`,this.onPanGesture(t)),t.isFinal)){if(!(`__fixFinalState`in t)){let e=t.state;this.fixFinalState(t.state);let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(noop)}this.panState=void 0,this.pinchState=void 0}}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||this.pinchState||this.mouseWheelState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[o]=this.modelScene.intersectRaycaster(r),s=createEvent(`intersect.update`,{raycaster:r,intersection:o==null?null:o,object:this.intersectMesh});if(this.emit(`intersect.update`,s),s.defaultPrevented){this.hideIntersectMesh();return}if(o){let e=(n=(t=o.face)==null?void 0:t.normal)==null?new three.Vector3().copy(r.ray.direction).multiplyScalar(-1):n,s=e.clone(),c=o.point.clone();this.intersectMesh.position.copy(c);let l=c.clone().add(s);if(this.intersectMesh.lookAt(l),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(c);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(t){if(this.initAnimationIsReady)if(this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh(),t.isFinal){let e=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov,offset:new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),distance:this.locationMotion.value.distance});if(this.fixFinalState(e),this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(noop)}else{let n=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),r=new three.Vector3(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),o=coordinatesToVector(this.cameraMotion.value,new three.Vector3).negate(),s=new three.Ray(r,o).intersectBox(this.modelScene.boundingBox,new three.Vector3);s&&(n+=s.distanceTo(r));let c=Math.max(this.locationMotion.value.distance-this.camera.near,0),l=t.center.delta/10*Math.max(c/5,.1);if(c<=n||l>0)if(this.locationMotion.value.distance-l>=minDistance){let e=this.locationMotion.value.distance-l;t.state.distance=e}else{let e=coordinatesToVector(this.cameraMotion.value);e.setLength(l),t.state.offset.add(e)}if(this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;this.locationMotion.set({distance:t.state.distance,x:t.state.offset.x,y:t.state.offset.y,z:t.state.offset.z},0).catch(noop)}}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},o=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new three.Vector3,distance:0});if(e.state=o,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,pano:{panoIndex:o.panoIndex,workCode:o.workCode},state:o,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=createUuid(),s={panoIndex:r.panoIndex,workCode:r.work.workCode},c=panoStringify(s),l={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},u=this.imageOptions.transform,d=Object.assign({key:`pano.${c}`},pick(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),f=`pano:`+jsonHash([l,d,u]),p=this.modelScene.parameter,m;if(p.pano0&&p.pano0.map.name===f?m=p.pano0:p.pano1&&p.pano1.map.name===f&&(m=p.pano1),m)p.pano0&&p.pano0.map!==m.map&&p.pano0.map.dispose(),p.pano1&&p.pano1.map!==m.map&&p.pano1.map!==((t=p.pano0)==null?void 0:t.map)&&p.pano1.map.dispose(),p.set({pano0:m,pano1:m}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,pano:{panoIndex:o.panoIndex,workCode:o.workCode},progress:0,state:o,options:n,error:null}));else{let t=createExtendableEvent(`pano.prepare`,{prevPano:this.currentPano,pano:s});this.emit(`pano.prepare`,t),Promise.all([Promise.resolve().then(()=>{this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:s}))}).then(()=>this.textureLoader.loadCubeTexture(l,{imageURL:{transform:u,options:d},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer)).catch(e=>{let t=toError(e);return this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:s})),this.emit(`error`,t),t}),Promise.resolve().then(()=>waitForExtendableEvent(t)).catch(e=>{let t=toError(e);return this.emit(`error`,t),t})]).then(([t,s])=>{var l,u;if(!(t instanceof Error)&&!(s instanceof Error)){let{body:s}=t;if(this.destroyed||this.pendingTextureId!==e){s.dispose();return}this.pendingTextureId=null,s.name=f;let d=Array.isArray(s.image)?s.image[0]:s.image,m=(l=d==null?void 0:d.width)==null?2048:l,h=r.images.histogram;h||(h=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),r.images.histogram=h);let g={panoId:c,map:s,mapSize:m,mapHistogram:new three.Vector4().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1};p.pano0&&p.pano0.map.dispose(),p.pano1&&p.pano1.map!==((u=p.pano0)==null?void 0:u.map)&&p.pano1.map.dispose(),p.set({pano0:g,pano1:g}),this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,pano:{panoIndex:o.panoIndex,workCode:o.workCode},progress:0,state:o,options:n,error:null}))}else{let n=null;if(t instanceof Error?n||(n=t):t.body.dispose(),s instanceof Error&&(n||(n=s)),this.destroyed||this.pendingTextureId!==e)return;this.pendingTextureId=null,this.emit(`error`,n)}})}}}}onDblTapGesture(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.state,n=e.center.raycaster,r=n.ray.origin.clone().add(n.ray.direction.clone().setLength(3)),o=1,s=3,c=1,[l]=this.modelScene.intersectRaycaster(n);if(l&&(r=l.point.clone(),c=l.distance>4/2?1:3),e.state.distance=c,e.state.offset=r,this.emit(`gesture.dbltap`,e),e.defaultPrevented)return;let u={x:t.offset.x,y:t.offset.y,z:t.offset.z,distance:t.distance};this.locationMotion.set(u,360).catch(noop),this.hideIntersectMesh()}hideIntersectMesh(){this.intersectMesh.visible===!0&&(this.intersectMesh.visible=!1,this.needsRender=!0)}};function isNil(e){return e==null}var _moveEvent={type:`move`},XRController=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null,this._axes=[0,0]}getHandSpace(){return this._hand===null&&(this._hand=new three.Group,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new three.Group,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new three.Vector3,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new three.Vector3),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new three.Group,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new three.Vector3,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new three.Vector3),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}disconnect(e){return this.dispatchEvent({type:`disconnected`,data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}getAxes(){return this._axes}update(e,t,n){let r=null,o=null,s=null,c=this._targetRay,l=this._grip,u=this._hand;if(e&&e.gamepad&&e.gamepad.axes&&(this._axes=[e.gamepad.axes[2],e.gamepad.axes[3]]),e&&t.session.visibilityState!==`visible-blurred`)if(c!==null&&(r=t.getPose(e.targetRaySpace,n),r!==null&&(c.matrix.fromArray(r.transform.matrix),c.matrix.decompose(c.position,c.rotation,c.scale),r.linearVelocity?(c.hasLinearVelocity=!0,c.linearVelocity.copy(r.linearVelocity)):c.hasLinearVelocity=!1,r.angularVelocity?(c.hasAngularVelocity=!0,c.angularVelocity.copy(r.angularVelocity)):c.hasAngularVelocity=!1,this.dispatchEvent(_moveEvent))),u&&e.hand){s=!0;for(let r of e.hand.values()){let e=t.getJointPose(r,n);if(u.joints[r.jointName]===void 0){let e=new three.Group;e.matrixAutoUpdate=!1,e.visible=!1,u.joints[r.jointName]=e,u.add(e)}let o=u.joints[r.jointName];e!==null&&(o.matrix.fromArray(e.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.jointRadius=e.radius),o.visible=e!==null}let r=u.joints[`index-finger-tip`],o=u.joints[`thumb-tip`],c=r.position.distanceTo(o.position),l=.02,d=.005;u.inputState.pinching&&c>l+d?(u.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!u.inputState.pinching&&c<=l-d&&(u.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(o=t.getPose(e.gripSpace,n),o!==null&&(l.matrix.fromArray(o.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),o.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(o.linearVelocity)):l.hasLinearVelocity=!1,o.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(o.angularVelocity)):l.hasAngularVelocity=!1));return c!==null&&(c.visible=r!==null),l!==null&&(l.visible=o!==null),u!==null&&(u.visible=s!==null),this}},framebufferScaleFactor=1,isAppleVisionPro=()=>{try{let e=/Macintosh/i.test(navigator.userAgent),t=navigator.maxTouchPoints===5;return e&&t}catch(e){return console.error(`Error determining if the device is an Apple Vision Pro: `,e),!1}},isOculus=()=>{try{return/Oculus/i.test(navigator.userAgent)}catch(e){return console.error(`Error determining if the device is an Oculus: `,e),!1}},XRManager=class{constructor(e,t,n){var r,o,s,c,l;this.isPanorama=(r=n==null?void 0:n.isPanorama)==null?!0:r,navigator.userAgent.toLowerCase();let u;u=isAppleVisionPro()?`VP`:isOculus()?`Oculus`:`Pico`,this.machineType=(o=n==null?void 0:n.machineType)==null?u:o,this.renderer=e,this.gl=t,this.enabled=!1,this.session=null,this.referenceSpaceType=(s=n==null?void 0:n.referenceSpaceType)==null?`local-floor`:s,this.referenceSpace=null,this.onSessionStartCallback=(c=n==null?void 0:n.onSessionStart)==null?noop:c,this.onSessionEndCallback=(l=n==null?void 0:n.onSessionEnd)==null?noop:l,this.controllers=[new XRController,new XRController],this.inputSourcesMap=new Map,this.cameraVR=new three.ArrayCamera,this.cameraL=new three.PerspectiveCamera,this.cameraR=new three.PerspectiveCamera,this.cameraVR.cameras.push(this.cameraL,this.cameraR),this.cameraL.viewport=new three.Vector4,this.cameraR.viewport=new three.Vector4,this.cameraL.layers.enable(1),this.cameraR.layers.enable(2),this.cameraVR.layers.enable(1),this.cameraVR.layers.enable(2),this.isPresenting=!1,this.currentDepthNear=null,this.currentDepthFar=null,this.cameraLPos=new three.Vector3,this.cameraRPos=new three.Vector3}getController(e){let t=this.controllers[e];return t||console.warn(`no controller find`),t.getTargetRaySpace()}getRightController(){if(!this.session||!this.session.inputSources)return null;let e;if(this.session.inputSources.forEach((t,n)=>{t.handedness===`right`&&(e=n)}),e===void 0)return console.warn(`no inputSource for right hand`),null;let t=this.controllers[e];return t?t.getTargetRaySpace():(console.warn(`right controller not find`),null)}getLeftController(){if(!this.session||!this.session.inputSources)return null;let e;if(this.session.inputSources.forEach((t,n)=>{t.handedness===`left`&&(e=n)}),e===void 0)return console.warn(`no inputSource for left hand`),null;let t=this.controllers[e];return t?t.getTargetRaySpace():(console.warn(`left controller not find`),null)}getControllerGrip(e){let t=this.controllers[e];return t||console.warn(`no controller find`),t.getGripSpace()}getCameras(){return{cameraL:this.cameraL,cameraR:this.cameraR,cameraVR:this.cameraVR}}updateCamera(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.getInverse(e.matrixWorld)}setProjectionFromUnion(e,t,n){this.cameraLPos.setFromMatrixPosition(t.matrixWorld),this.cameraRPos.setFromMatrixPosition(n.matrixWorld);var r=this.cameraLPos.distanceTo(this.cameraRPos),o=t.projectionMatrix.elements,s=n.projectionMatrix.elements,c=o[14]/(o[10]-1),l=o[14]/(o[10]+1),u=(o[9]+1)/o[5],d=(o[9]-1)/o[5],f=(o[8]-1)/o[0],p=(s[8]+1)/s[0],m=c*f,h=c*p,g=r/(-f+p),_=g*-f;t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(_),e.translateZ(g),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.getInverse(e.matrixWorld);var v=c+g,y=l+g,b=m-_,S=h+(r-_),C=u*l/y*v,w=d*l/y*v;e.projectionMatrix.makePerspective(b,S,C,w,v,y)}getCamera(e){this.cameraVR.near=this.cameraR.near=this.cameraL.near=e.near,this.cameraVR.far=this.cameraR.far=this.cameraL.far=e.far,this.session&&(this.currentDepthNear!==this.cameraVR.near||this.currentDepthFar!==this.cameraVR.far)&&(this.session.updateRenderState({depthNear:this.cameraVR.near,depthFar:this.cameraVR.far}),this.currentDepthNear=this.cameraVR.near,this.currentDepthFar=this.cameraVR.far);let t=e.parent,n=this.cameraVR.cameras;this.updateCamera(this.cameraVR,t);for(let e=0;e<n.length;e++)this.updateCamera(n[e],t);e.matrixWorld.copy(this.cameraVR.matrixWorld);let r=e.children;for(let e=0,t=r.length;e<t;e++)r[e].updateMatrixWorld(!0);return n.length===2?this.setProjectionFromUnion(this.cameraVR,this.cameraL,this.cameraR):this.cameraVR.projectionMatrix.copy(this.cameraL.projectionMatrix),this.cameraVR}updateInputSources(e){if(!this.session){console.warn(`session is lose!`);return}let t=this.session.inputSources;for(let e=0;e<this.controllers.length;e++)this.inputSourcesMap.set(t[e],this.controllers[e]);for(let t=0;t<e.removed.length;t++){let n=e.removed[t],r=this.inputSourcesMap.get(n);r&&(r.dispatchEvent({type:`disconnected`,data:n}),this.inputSourcesMap.delete(n))}for(let t=0;t<e.added.length;t++){let n=e.added[t],r=this.inputSourcesMap.get(n);r&&r.dispatchEvent({type:`connected`,data:n})}}onSessionEvent(e){let t=this.inputSourcesMap.get(e.inputSource);t&&t.dispatchEvent({type:e.type})}onSessionEnd(){this.inputSourcesMap.forEach(function(e,t){e.disconnect(t)}),this.inputSourcesMap.clear(),this.isPresenting=!1,this.session=null,AnimationFrameLoop.shared.setContext(null),this.onSessionEndCallback()}onRequestReferenceSpace(e){this.referenceSpace=e,this.isPresenting=!0,this.session&&this.onSessionStartCallback(this.session)}setSession(e){if(this.session=e,this.session){this.session.addEventListener(`select`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`selectstart`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`selectend`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeeze`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeezestart`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`squeezeend`,e=>{this.onSessionEvent(e)}),this.session.addEventListener(`end`,e=>{this.onSessionEnd()});let e=this.gl.getContextAttributes();this.gl.makeXRCompatible().then(()=>{let t={antialias:e==null?void 0:e.antialias,alpha:e==null?void 0:e.alpha,depth:e==null?void 0:e.depth,stencil:e==null?void 0:e.stencil,framebufferScaleFactor};if(!this.session){console.error(`session is lose while set session!`);return}switch(this.machineType){case`Pico`:case`VP`:this.session.updateRenderState({baseLayer:new XRWebGLLayer(this.session,this.gl,t)});break;case`Oculus`:this.session.updateRenderState({baseLayer:new XRWebGLLayer(this.session,this.gl,t)});break;default:this.machineType;break}this.session.requestReferenceSpace(this.referenceSpaceType).then(e=>{this.onRequestReferenceSpace(e)}),this.session.addEventListener(`inputsourceschange`,e=>{this.updateInputSources(e)})})}}},LineSegmentsGeometry=class extends three.InstancedBufferGeometry{constructor(){super(),this.type=`LineSegmentsGeometry`,this.setIndex([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]),this.setAttribute(`position`,new three.Float32BufferAttribute([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],3)),this.setAttribute(`uv`,new three.Float32BufferAttribute([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],2))}applyMatrix4(e){let t=this.attributes.instanceStart,n=this.attributes.instanceEnd;return t!==void 0&&(t.applyMatrix4(e),n.applyMatrix4(e),t.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let t;t=e instanceof Float32Array?e:Array.isArray(e)?new Float32Array(e):new Float32Array;let n=new three.InstancedInterleavedBuffer(t,6,1);return this.setAttribute(`instanceStart`,new three.InterleavedBufferAttribute(n,3,0)),this.setAttribute(`instanceEnd`,new three.InterleavedBufferAttribute(n,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e){let t;t=e instanceof Float32Array?e:Array.isArray(e)?new Float32Array(e):new Float32Array;let n=new three.InstancedInterleavedBuffer(t,6,1);return this.setAttribute(`instanceColorStart`,new three.InterleavedBufferAttribute(n,3,0)),this.setAttribute(`instanceColorEnd`,new three.InterleavedBufferAttribute(n,3,3)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new three.WireframeGeometry(e.geometry)),this}fromLineSegments(e){var t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new three.Box3);let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=new three.Box3;this.boundingBox.setFromBufferAttribute(e),n.setFromBufferAttribute(t),this.boundingBox.union(n)}}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new three.Sphere),this.boundingBox===null&&this.computeBoundingBox();let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=this.boundingSphere.center;this.boundingBox.getCenter(n);let r=0,o=new three.Vector3;for(let s=0,c=e.count;s<c;s++)o.fromBufferAttribute(e,s),r=Math.max(r,n.distanceToSquared(o)),o.fromBufferAttribute(t,s),r=Math.max(r,n.distanceToSquared(o));this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error(`THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.`,this)}}toJSON(){}};Object.assign(LineSegmentsGeometry.prototype,{isLineSegmentsGeometry:!0});var lineShader={uniforms:three.UniformsUtils.merge([three.UniformsLib.common,three.UniformsLib.fog,{linewidth:{value:1},resolution:{value:new three.Vector2(1,1)},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1},opacity:{value:1}}]),vertexShader:`
|
|
2041
2041
|
#include <common>
|
|
2042
2042
|
#include <color_pars_vertex>
|
|
2043
2043
|
#include <fog_pars_vertex>
|
|
@@ -2236,7 +2236,7 @@ void main() {
|
|
|
2236
2236
|
#include <premultiplied_alpha_fragment>
|
|
2237
2237
|
|
|
2238
2238
|
}
|
|
2239
|
-
`},LineMaterial=class extends three.ShaderMaterial{constructor(e){super({uniforms:three.UniformsUtils.clone(lineShader.uniforms),vertexShader:lineShader.vertexShader,fragmentShader:lineShader.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(LineMaterial.prototype,{isLineMaterial:!0});var LineSegments2=class extends three.Mesh{constructor(e,t){super(),this.type=`LineSegments2`,this.geometry=e===void 0?new LineSegmentsGeometry:e,this.material=t===void 0?new LineMaterial({color:Math.random()*16777215}):t}computeLineDistances(){let e=this.geometry,t=e.attributes.instanceStart,n=e.attributes.instanceEnd,r=new Float32Array(2*t.count),o=new three.Vector3,s=new three.Vector3;for(var c=0,l=0,u=t.count;c<u;c++,l+=2)o.fromBufferAttribute(t,c),s.fromBufferAttribute(n,c),r[l]=l===0?0:r[l-1],r[l+1]=r[l]+o.distanceTo(s);let d=new three.InstancedInterleavedBuffer(r,2,1);return e.setAttribute(`instanceDistanceStart`,new three.InterleavedBufferAttribute(d,1,0)),e.setAttribute(`instanceDistanceEnd`,new three.InterleavedBufferAttribute(d,1,1)),this}raycast(e,t){e.camera===null&&console.error(`LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.`);let n=e.ray,r=e.camera,o=r.projectionMatrix,s=this.geometry,c=this.material,l=c.resolution,u=c.linewidth,d=s.attributes.instanceStart,f=s.attributes.instanceEnd,p=new three.Vector4,m=new three.Vector4,h=new three.Vector4,g=new three.Vector3,_=new three.Matrix4,v=new three.Line3,y=new three.Vector3;n.at(1,h),h.w=1,h.applyMatrix4(r.matrixWorldInverse),h.applyMatrix4(o),h.multiplyScalar(1/h.w),h.x*=l.x/2,h.y*=l.y/2,h.z=0,g.copy(h);let b=this.matrixWorld;_.multiplyMatrices(r.matrixWorldInverse,b);for(var S=0,C=d.count;S<C;S++){p.fromBufferAttribute(d,S),m.fromBufferAttribute(f,S),p.w=1,m.w=1,p.applyMatrix4(_),m.applyMatrix4(_),p.applyMatrix4(o),m.applyMatrix4(o),p.multiplyScalar(1/p.w),m.multiplyScalar(1/m.w);var w=p.z<-1&&m.z<-1,T=p.z>1&&m.z>1;if(w||T)continue;p.x*=l.x/2,p.y*=l.y/2,m.x*=l.x/2,m.y*=l.y/2,v.start.copy(p),v.start.z=0,v.end.copy(m),v.end.z=0;let e=v.closestPointToPointParameter(g,!0);v.at(e,y);let r=three.MathUtils.lerp(p.z,m.z,e),s=r>=-1&&r<=1;var E=g.distanceTo(y)<u*.5;if(s&&E){v.start.fromBufferAttribute(d,S),v.end.fromBufferAttribute(f,S),v.start.applyMatrix4(b),v.end.applyMatrix4(b);var D=new three.Vector3,O=new three.Vector3;n.distanceSqToSegment(v.start,v.end,O,D),t.push({point:O,pointOnLine:D,distance:n.origin.distanceTo(O),object:this,faceIndex:S})}}}};Object.assign(LineSegments2.prototype,{isLineSegments2:!0});var Line2=class extends LineSegments2{constructor(e,t){super(e,t),this.type=`Line2`}};Object.assign(Line2.prototype,{isLine2:!0});var LineGeometry=class extends LineSegmentsGeometry{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 t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}copy(){return this}};Object.assign(LineGeometry.prototype,{isLineGeometry:!0});var circleImageURL=`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==`,DEFAULT_COLOR=14467195,POINT_SIZE=8,DEFAULT_LINEWIDTH=2,DEFAULT_DASHSCALE=20,sharedCircleTexture=null,FiveLine=class extends three.Object3D{static get version(){return`6.8.0-alpha.24`}constructor(e=new three.Vector3,t=new three.Vector3){super(),this.type=`FiveLine`,this.needsRender=!0,this.line=new Line2(new LineGeometry,new LineMaterial({color:DEFAULT_COLOR,linewidth:DEFAULT_LINEWIDTH,dashScale:DEFAULT_DASHSCALE,dashed:!1}));let n=new three.BufferGeometry,r=new three.PointsMaterial({color:DEFAULT_COLOR,size:POINT_SIZE,map:sharedCircleTexture||(sharedCircleTexture=new three.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 three.Points(n,r),this.points.renderOrder=11,this.points.frustumCulled=!1,this.setPoints(e,t),this.add(this.line,this.points)}setPoints(e,t){let n=[].concat(e.toArray(),t.toArray());this.points.geometry.setAttribute(`position`,new three.BufferAttribute(new Float32Array(n),3)),this.line.geometry.setPositions(n),this.line.computeLineDistances(),this.needsRender=!0}getPoints(){let e=this.points.geometry.attributes.position.array;return[new three.Vector3(e[0],e[1],e[2]),new three.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(FiveLine.prototype,{isFiveLine:!0});var Constants={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function fetchJsonFile(e){return __awaiter(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function fetchProfilesList(e){return __awaiter(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield fetchJsonFile(`${e}/profilesList.json`)})}function fetchProfile(e,t){return __awaiter(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let o=yield fetchProfilesList(t),s;if(e.profiles.some(e=>{let n=o[e];return n&&(s={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!s}),!s){if(!n)throw Error(`No matching profile name found`);let e=o[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);s={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let c=yield fetchJsonFile(s.profilePath),l;if(r){let t;if(t=c.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${s.profileId}`);t.assetPath&&(l=s.profilePath.replace(`profile.json`,t.assetPath))}return{profile:c,assetPath:l}})}var defaultComponentValues={xAxis:0,yAxis:0,button:0,state:Constants.ComponentState.DEFAULT};function normalizeAxes(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let o=Math.atan2(t,e);n=Math.cos(o),r=Math.sin(o)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var VisualResponse=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===Constants.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(defaultComponentValues)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:o,normalizedYAxis:s}=normalizeAxes(e,t);switch(this.componentProperty){case Constants.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?o:.5;break;case Constants.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?s:.5;break;case Constants.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case Constants.ComponentProperty.STATE:this.valueNodeProperty===Constants.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=this.states.includes(r)?1:0;break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},Component=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new VisualResponse(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:Constants.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=Constants.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=Constants.ComponentState.PRESSED:(t.touched||this.values.button>Constants.ButtonTouchThreshold)&&(this.values.state=Constants.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},MotionController=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new Component(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},DEFAULT_PROFILES_PATH=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,DEFAULT_PROFILE=`generic-trigger`,XRControllerModel=class extends three.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof three.Mesh&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:o,valueNodeProperty:s}=e;t&&(s===Constants.VisualResponseProperty.VISIBILITY?t.visible=o:s===Constants.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,o),t.position.lerpVectors(n.position,r.position,o)))})}))}};function findNodes(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:o}=e;if(n===Constants.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new three.Mesh(new three.SphereGeometry(.001),new three.MeshBasicMaterial({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(o).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:o,valueNodeProperty:s}=e;if(s===Constants.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(o),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${o} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function addAssetSceneToControllerModel(e,t){findNodes(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof three.Mesh&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var XRControllerModelFactory=class{constructor(e=null){this.gltfLoader=e,this.path=DEFAULT_PROFILES_PATH,this._assetCache={}}createControllerModel(e){let t=new XRControllerModel,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||fetchProfile(r,this.path,DEFAULT_PROFILE).then(({profile:e,assetPath:o})=>{t.motionController=new MotionController(r,e,o);let s=this._assetCache[t.motionController.assetUrl];if(s)n=s.scene.clone(),addAssetSceneToControllerModel(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),addAssetSceneToControllerModel(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},defaultXRPanoramaControllerInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`]));function mapPanoResource(e,t){if(!t)return e;let n=e.match(/\d+_[a-z].png/);return e.substring(0,n.index)+t+`/`+e.substring(n.index)}var CONTROLLER_EVNET_DELTA_TIME=300,scratchRaycaster=new three.Raycaster,scratchVector3=new three.Vector3,XRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(e){super(e),this.xrManager=new XRManager(this.renderer,this.renderer.getContext(),{onSessionStart:e=>{this.emit(`xr.session.start`,createEvent(`xr.session.start`,{session:e,machineType:this.xrManager.machineType}))},onSessionEnd:()=>{this.emit(`xr.session.end`,createEvent(`xr.session.end`,{session:null,machineType:this.xrManager.machineType}))}}),this.xrControllerRay={left:new three.Raycaster,right:new three.Raycaster},this.xrControllerRay.left.params.Points={threshold:.1},this.xrControllerRay.left.firstHitOnly=!0,this.xrControllerRay.left.floorIndex=-1,this.xrControllerRay.right.params.Points={threshold:.1},this.xrControllerRay.right.firstHitOnly=!0,this.xrControllerRay.right.floorIndex=-1,this.gazeRay=null,this.pointerLines={left:new FiveLine,right:new FiveLine},this.pointerLines.left.visible=!1,this.pointerLines.right.visible=!0,this.pointerLines.left.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.left.points.material.depthTest=!1,this.pointerLines.right.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.right.points.material.depthTest=!1,this.controllerWrappers=[new three.Group,new three.Group];let t=this.xrManager.getController(0);this.controllerWrappers[0].add(t);let n=this.xrManager.getController(1);this.controllerWrappers[1].add(n);let r=new XRControllerModelFactory;r.gltfLoader={load(e,t){internalFetcher.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return parseGltf(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:internalFetcher})}).then(e=>t(e))}},(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`)&&this.scene.add(this.pointerLines.left,this.pointerLines.right,this.controllerWrappers[0],this.controllerWrappers[1]),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),leftPanoPicture:null,position:this.camera.pose.offset.clone(),effect:`fade`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.parallaxCameraMatrixs=[];let o=AnimationFrameLoop.shared.getContext();if(!o){console.error(`获取session失败,请退出重试`);return}this.on(`xr.session.end`,()=>{this.scene.remove(this.pointerLines.left,this.pointerLines.right)}),this.xrManager.setSession(o),this.on(`xr.session.start`,()=>{let e=this.xrManager.getControllerGrip(0);e.add(r.createControllerModel(e)),this.controllerWrappers[0].add(e);let t=this.xrManager.getControllerGrip(1);t.add(r.createControllerModel(t)),this.controllerWrappers[1].add(t)}),this.xrHandleState={LeftAxesUp:{touchStartTime:0,touchStart:!1},LeftAxesDown:{touchStartTime:0,touchStart:!1},LeftAxesLeft:{touchStartTime:0,touchStart:!1},LeftAxesRight:{touchStartTime:0,touchStart:!1},LeftTrigger:{touchStartTime:0,touchStart:!1},LeftPinch:{touchStartTime:0,touchStart:!1},RightAxesUp:{touchStartTime:0,touchStart:!1},RightAxesDown:{touchStartTime:0,touchStart:!1},RightAxesLeft:{touchStartTime:0,touchStart:!1},RightAxesRight:{touchStartTime:0,touchStart:!1},RightTrigger:{touchStartTime:0,touchStart:!1},RightPinch:{touchStartTime:0,touchStart:!1},Y:{touchStartTime:0,touchStart:!1},X:{touchStartTime:0,touchStart:!1},A:{touchStartTime:0,touchStart:!1},B:{touchStartTime:0,touchStart:!1}},this.xrManager.machineType===`VP`&&this.initHandEvent()}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fade`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoIndex`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=(e,t)=>mapPanoResource(applyImageURLOptions(e,p,t)),h=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`])),g={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},_=`pano:`+jsonHash([g,h,p]);if(this.pendingTextureTask){if(this.pendingTextureTask.hash===_)return;{let t=this.pendingTextureTask.panoId;(o=this.panoMeshes.get(t))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:e}))}}let v=this.modelScene.parameter.resolveValue(`pano0`),y=this.modelScene.parameter.resolveValue(`pano1`),b;if((v==null?void 0:v.map.name)===_?b=v:(y==null?void 0:y.map.name)===_&&(b=y),b){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,leftPanoPicture:{panoId:b.panoId,map:b.map,mapHistogram:b.mapHistogram,mapSize:b.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,n,t);return}let S=`move-to-pano-`+l;this.pending.add(S),this.pendingTextureTask={panoId:l,hash:_,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=_;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,leftPanoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone(),zoom:1},position:u.position.clone(),fixCameraTransform:new three.Matrix4};this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:null,userAction:this.userAction,options:t,prevPano:this.currentPano,progress:0,state:r})),t.moveCancelCallback&&t.moveCancelCallback()}};let C=this.panoMeshes.get(l);C&&C.tap&&C.tap(),this.textureLoader.loadCubeTexture(g,{imageURL:{transform:m,options:h},format:three.RGBFormat,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&((r=this.panoMeshes.get(l))==null||r.setProgress(t)),this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e}))},this.renderer).then(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_?(this.pendingTextureTask.onLoad(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}))}).then(()=>new Promise(e=>{AnimationFrameLoop.shared.add(()=>e(),!0)})).catch(t=>{var n,r;this.pending.delete(S),((n=this.pendingTextureTask)==null?void 0:n.hash)===_&&(this.pendingTextureTask.onError(t),this.pendingTextureTask=void 0,(r=this.panoMeshes.get(l))==null||r.setProgress(0)),this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:t,progress:0,meta:null,pano:e})),this.emit(`error`,t)}),this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m;let h=now(),g=createUuid();this.panoResources[g]=t;let _=1,v,y,b;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(n).position,s=t.position;v=Math.max(o.distanceTo(s),1),y=[{key:n.key,progress:0,value:Object.assign(Object.assign({},r),{count:0})},{key:g,progress:1,value:{distance:0,count:1}}],b=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;v=u+Math.max(s.distanceTo(c),1),y=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/v,value:n.value},{key:g,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(y);b=this.locationMotion.getProgressVelocity(h)*d/f}let S=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?v:0),C={longitude:n.longitude,latitude:n.latitude,fov:n.fov},w=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(r=C.longitude)==null?this.camera.pose.longitude:r,latitude:(o=C.latitude)==null?this.camera.pose.latitude:o,fov:(s=C.fov)==null?this.camera.pose.fov:s,offset:t.position.clone(),distance:0}),T=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(w),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(C,S).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(c=C.longitude)==null?this.cameraMotion.value.longitude:c,latitude:(l=C.latitude)==null?this.cameraMotion.value.latitude:l}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),h=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(u=C.fov)==null?this.cameraMotion.value.fov:u,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let b=_*v;for(let e=0;e<y.length-1;e++){let t=y[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(h),e.leftPanoPicture&&(e.leftPanoPicture.zoom=Math.tan(b/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(d=C.longitude)==null?this.cameraMotion.value.longitude:d,latitude:(f=C.latitude)==null?this.cameraMotion.value.latitude:f,fov:b}},{progress:1,value:{longitude:(p=C.longitude)==null?this.cameraMotion.value.longitude:p,latitude:(m=C.latitude)==null?this.cameraMotion.value.latitude:m,fov:_}}],S).catch(noop)}this.locationMotion.setKeyframes(y,S,b).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:0});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:T,progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(this.currentPano);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:T,progress:0,state:w,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}checkSelectedPano(e){var t;this.stopMomentumMovement(),this.camera.getDirection(new three.Vector3).setY(0);let n=null,r=this.works.getObserver(this.currentPano);if(!r)return null;let o=r.work.observers,s=r.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&r.work.workCode===this.currentPano.workCode)return!1;let t=o[e];return!t||scratchVector3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[c]=this.modelScene.intersectRaycaster(e);if(c){let[e,r]=arrayMin(s,e=>{let t=o[e];return t?scratchVector3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(c.point):1/0},!0);typeof e==`number`&&r<this.panoTapTriggerRadius&&(n=(t=o[e])==null?null:t)}if(isNil(n)){let t=this.getForwardObserverOrNot(this.xrManager.cameraVR,e);t&&(n=t)}for(let e of this.locationMotion.keyframes){let t=this.panoResourceFromLocationMotionKeyframe(e);if(!(e.progress<this.locationMotion.progress)&&n){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode});if(t.panoId===e){n=null;break}}}if(isNil(n))return this.locationMotion.ended===!0&&this.cameraBounce(),null;if(!n.active){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}let l={workCode:n.work.workCode,panoIndex:n.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:n?n.position.clone():new three.Vector3};return this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,state:l,userAction:!0,options:{},progress:0,error:null})),n&&n.active?(this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:l,options:{},error:null})),{workCode:n.work.workCode,panoIndex:n.panoIndex}):null}destroy(){super.destroy()}isReady(){return!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u,d,f,p;this.userAction=!0;let m={},h={},g=this.camera.getDirection(new three.Vector3),_=this.locationMotion.keyframes[0],v=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[y,b]=this.locationMotion.getKeyFrameSegment(e),S=this.panoResourceFromLocationMotionKeyframe(y),C=this.panoResourceFromLocationMotionKeyframe(b),w=this.panoResourceFromLocationMotionKeyframe(_),T=this.panoResourceFromLocationMotionKeyframe(v),E=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),h.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),m.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-b.value.count+1,n=new three.Vector3().copy(S.position),s=new three.Vector3().copy(C.position);if(m.progress=t,t>=.01&&t<=.99&&(m.progress=clamp$1(C.effectEasing(t),.01,.99)),C.leftPanoPicture&&(t<1?S.leftPanoPicture&&(m.pano0=S.leftPanoPicture):m.pano0=C.leftPanoPicture,m.pano1=C.leftPanoPicture),C.effect===`montage`?m.transition=`BLACK`:C.effect===`spread`?m.transition=`SPREAD`:m.transition=`FADE`,C.effect===`zoomin`||C.effect===`zoomout`?m.progress=Math.pow(t,3):C.effect===`model`&&this.camera.pose.distance<.01&&(m.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&C.effect!==`fly`){if(m.pano0&&S.leftPanoPicture){let e={panoId:m.pano0.panoId,map:m.pano0.map,mapHistogram:m.pano0.mapHistogram,mapSize:m.pano0.mapSize,zoom:m.pano0.zoom,matrix:S.leftPanoPicture.matrix.clone().setPosition(C.position)},t=this.panoPictureObserverMap.get(m.pano0);t&&this.panoPictureObserverMap.set(e,t),m.pano0=e}n.copy(s),E=!0}h.distance=this.locationMotion.value.distance,h.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.leftPanoPicture){let e=t.leftPanoPicture.map;if(e){if(e===((r=m.pano0)==null?void 0:r.map)||e===((o=m.pano1)==null?void 0:o.map))continue;e.dispose(),t.leftPanoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(C.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(w.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(T.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),h),options:{},progress:this.locationMotion.progress,error:null}))}this.camera.setFromPose(h),this.xrManager.cameraVR.projectionMatrix.copy(this.camera.projectionMatrix),this.xrManager.cameraVR.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),this.xrManager.cameraVR.matrix.copy(this.camera.matrix),this.xrManager.cameraVR.position.copy(this.camera.position),this.xrManager.cameraVR.quaternion.copy(this.camera.quaternion),this.xrManager.cameraVR.scale.copy(this.camera.scale),this.xrManager.cameraVR.matrixAutoUpdate=!1,this.xrManager.cameraVR.matrixWorld.copy(this.camera.matrixWorld);let[D,O]=n,k=new three.Vector3(0,0,0),A=new three.Vector2().copy(this.camera.resolution);if(O&&this.xrManager.session&&this.xrManager.referenceSpace&&this.xrManager.session.renderState.baseLayer){let n=this.xrManager.cameraVR,r=this.xrManager.referenceSpace,o=this.xrManager.session.renderState.baseLayer,u=O.getViewerPose(r),d=(s=u==null?void 0:u.views)==null?[]:s;for(let e=0;e<d.length;e++){let t=d[e],r=n.cameras[e],s=o.getViewport(t);s&&(r.projectionMatrix.fromArray(t.projectionMatrix),r.projectionMatrixInverse.getInverse(r.projectionMatrix),r.matrix.fromArray(t.transform.matrix),r.matrix.setPosition(this.camera.position),r.matrix.decompose(r.position,r.quaternion,r.scale),r.matrixWorld.copy(r.matrix),r.matrixWorldInverse.getInverse(r.matrixWorld),r.matrixAutoUpdate=!1,k.copy(r.position),r.viewport.set(s.x,s.y,s.width,s.height),A.set(s.width,s.height))}if(this.xrManager.setProjectionFromUnion(this.xrManager.cameraVR,this.xrManager.cameraL,this.xrManager.cameraR),this.camera.quaternion.copy(this.xrManager.cameraVR.quaternion),this.camera.scale.copy(this.xrManager.cameraVR.scale),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose((c=h.distance)==null?this.camera.pose.distance:c),this.xrManager.session.inputSources){for(let e=0;e<this.xrManager.session.inputSources.length;e++)if(this.xrManager.session.inputSources[e]&&this.xrManager.session.inputSources[e].targetRayMode===`transient-pointer`){let t=O.getPose(this.xrManager.session.inputSources[e].targetRaySpace,r);if(t){let e=t.transform.orientation,n=new three.Quaternion(e.x,e.y,e.z,e.w),r=new three.Vector3(0,0,-1).applyQuaternion(n);this.gazeRay=new three.Raycaster(this.camera.position,r)}}}if(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`){let n=this.xrManager.session.inputSources;for(let e=0;e<n.length;e++){let t=this.xrManager.controllers[e],o=n[e];if(!o)continue;t&&t.update(o,O,r);let s=this.xrManager.getController(e),c=new three.Vector3(0,1.2,0),u=s.position.clone().add(k).sub(c);o.handedness===`left`?this.xrControllerRay.left.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)):o.handedness===`right`&&this.xrControllerRay.right.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)),this.controllerWrappers[e].position.copy(new three.Vector3(0,0,0).add(k).sub(c));let d=this.modelScene.intersectRaycaster(this.xrControllerRay.right);if(d.length===0){let e=this.works.getResolvedObserver(this.currentPano);d=this.xrControllerRay.right.intersectObject(this.modelScene.boundingMesh,!0).map(t=>{var n;let r=(n=e==null?void 0:e.floorIndex)==null?0:n;return Object.assign({floorIndex:r,floor:r},t)})}if(d.length>=1&&d[0].face)if(o.handedness===`right`){let e=this.xrControllerRay.right.intersectObject(this.xrCustomObjectsScene,!0),t=d[0].face.normal,n=t.clone(),r=d[0].point.clone();this.intersectMesh.position.copy(r);let o=r.clone().add(n);if(this.intersectMesh.lookAt(o),Math.abs(t.y)>.99){let e=this.camera.position.clone().sub(r);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0,e.length>0?(this.pointerLines.right.setPoints(u,e[0].point),this.pointerLines.right.points.visible=!0,this.intersectMesh.visible=!1):(this.pointerLines.right.points.visible=!1,this.pointerLines.right.setPoints(u,d[0].point));let s=d[0],c=createEvent(`intersect.update`,{raycaster:(l=this.xrControllerRay.right)==null?null:l,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,c),c.defaultPrevented){this.hideIntersectMesh();return}}else this.pointerLines.left.setPoints(u,d[0].point)}this.updateControllerHelper(n,e,t)}}else O||console.error(`xrFrame丢失,请重试`),this.xrManager.session||console.error(`session丢失,请重试`),this.xrManager.session&&!this.xrManager.session.renderState.baseLayer&&console.error(`no layer found`);isEmptyObject(m)===!1&&this.modelScene.parameter.set(m),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}));let j=this.works.getResolvedObserver(this.currentPano),M=this.locationMotion.ended?this.getForwardObserverOrNot(this.xrManager.cameraVR):null,N=this.works.getObserver(S.panoId),P=this.works.getObserver(C.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&j){let e=[],t=j.work.observers;for(let n of j.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(j.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(j.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster.ray.origin.copy(s),scratchRaycaster.ray.origin.add(scratchVector3.copy(t).setY(e)),scratchRaycaster.ray.direction.set(0,-1,0),scratchRaycaster.firstHitOnly=!0,scratchRaycaster.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let F=new Map;if(N)for(let e of N.accessibleNodes){let t=N.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(P)for(let e of P.accessibleNodes){let t=P.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{F.get(t)?F.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),F.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),F.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3.set(t.x,t.y,t.z),scratchVector3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(g.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||E)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(j){let n=j.work.observers,[,r]=arrayMin(j.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:j.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,2.5,1/0);let o=j.accessibleNodes.concat(j.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:j.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&M!==null&&panoStringify({panoIndex:M.panoIndex,workCode:M.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===P&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue(`modelAlpha`)>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(u=this.modelScene.parameter.progress)==null?1:u,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,s;if(o&&(s=this.works.getObserver(o.panoId),s||(s=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize)+1,c=4;this.tiling.setObserver(s);let l={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:e,level:4},u=this.tiling.update(l),f={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((d=this.modelScene.parameter.progress)==null?0:d)-.5)*2)},p=this.modelScene.parameter.refinedScreen;(u||f.pano!==(p==null?void 0:p.pano)||f.opacity!==(p==null?void 0:p.opacity))&&this.modelScene.parameter.set(`refinedScreen`,f)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),this.intersectMesh&&this.intersectMesh.parent&&j&&j.position.y-j.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=C.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((f=this.modelScene.parameter.pano0Depth)==null?void 0:f.panoId)!==t.panoId||((p=this.modelScene.parameter.pano1Depth)==null?void 0:p.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){if(this.xrManager.session&&this.xrManager.session.renderState.baseLayer){let e=this.xrManager.session.renderState.baseLayer;return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.renderer.setFramebuffer(e.framebuffer),this.renderer.render(this.scene,this.xrManager.cameraVR),this.renderer.setFramebuffer(null),!0}return!1}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}updateControllerHelper(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(!e||e.length===0)return;let s={buttons:{X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1}};for(let c=0;c<e.length;c++){let l=e[c].handedness,u=e[c].gamepad;switch(l){case`left`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`LeftAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`LeftAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`LeftAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`LeftAxesDown`,t)),u!=null&&u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`X`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`Y`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`LeftTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`LeftPinch`,t));let e={raycaster:r,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n};s.buttons.X=u.buttons&&u.buttons[4]?u.buttons[4].pressed:!1,s.buttons.Y=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.LeftTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.LeftPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1,s.left=e;break;case`right`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`RightAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`RightAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`RightAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`RightAxesDown`,t)),u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`A`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`B`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`RightTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`RightPinch`,t)),s.right={raycaster:o,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n},s.buttons.A=u.buttons&&u.buttons[4]?u==null?void 0:u.buttons[4].pressed:!1,s.buttons.B=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.RightTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.RightPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1;break;default:break}}this.emit(`xr.controller.update`,createEvent(`xr.controller.update`,s))}emitHandleEvent(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(e)this.xrHandleState[t].touchStart===!1?(this.xrHandleState[t].touchStartTime=n,this.xrHandleState[t].touchStart=!0,this.emit(`xr.gesture.buttonDown`,createEvent(`xr.gesture.buttonDown`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!1,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}))):n-this.xrHandleState[t].touchStartTime>CONTROLLER_EVNET_DELTA_TIME&&this.emit(`xr.gesture.press`,createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}));else if(this.xrHandleState[t].touchStart===!0){if(this.emit(`xr.gesture.buttonUp`,createEvent(`xr.gesture.buttonUp`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}})),n-this.xrHandleState[t].touchStartTime<=CONTROLLER_EVNET_DELTA_TIME){let e=createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}});!this.emit(`xr.gesture.tap`,e)&&!e.defaultPrevented&&t===`RightTrigger`&&this.checkSelectedPano(this.xrControllerRay.right)}this.xrHandleState[t].touchStart=!1,this.xrHandleState[t].touchStartTime=0}}initHandEvent(){if(!this.xrManager.session)throw Error(`初始化失败`);this.xrManager.session.addEventListener(`select`,e=>{this.gazeRay&&this.checkSelectedPano(this.gazeRay)})}},Controllers={Floorplan:FloorplanController,Topview:TopviewController,Panorama:PanoramaController,VRPanorama:VRPanoramaController,Model:ModelController,Mapview:MapviewController,XRPanorama:XRPanoramaController},controllersDefaultInitArgs={Floorplan:defaultFloorplanControllerCustomInitArgs,Topview:defaultTopviewControllerCustomInitArgs,Panorama:defaultPanoramaControllerCustomInitArgs,VRPanorama:defaultVRPanoramaControllerCustomInitArgs,Model:defaultModelControllerCustomInitArgs,Mapview:defaultMapviewControllerCustomInitArgs,XRPanorama:defaultXRPanoramaControllerInitArgs},PROXY_CONTROLLER_EVENT_NAMES=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.fire,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function initLegacyEvent(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=coordinatesToVector(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function generateDefaultVideoElement(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}function initLights(){let e=new three.Group;e.name=`internalLights`;{let t=new three.DirectionalLight(16777215,.1);t.name=`direction0`,t.position.copy(new three.Vector3(0,1,0)),e.add(t)}{let t=new three.DirectionalLight(16777215,.1);t.name=`direction1`,t.position.copy(new three.Vector3(-1,-1,-1)),e.add(t)}{let t=new three.DirectionalLight(16777215,.3);t.name=`direction2`,t.position.copy(new three.Vector3(1,1,1)),e.add(t)}{let t=new three.AmbientLight(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function parseKeyValue(e){var t,n;let r={},o=e.split(/(\;|\,)/);for(let e of o){let o=e.split(`=`),s=(t=o[0])==null?void 0:t.trim(),c=(n=o[1])==null?void 0:n.trim();s&&c&&(r[s]=c)}return r}function getViewportScale(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=parseKeyValue((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}var realsee_png_data_url_default=`data:image/png;base64,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`,imageSize=[351,63],imageOffset=[20,20],vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),uvs=new Float32Array([0,0,1,0,0,1,1,1]),index=new Uint8Array([0,1,2,1,3,2]),geometry=new three.BufferGeometry;geometry.setAttribute(`position`,new three.BufferAttribute(vertices,3)),geometry.setAttribute(`uv`,new three.BufferAttribute(uvs,2)),geometry.setIndex(new three.BufferAttribute(index,1));var material=new three.MeshBasicMaterial({transparent:!0,depthTest:!1,depthWrite:!1,stencilWrite:!1,fog:!1}),mesh=new three.Mesh(geometry,material);mesh.matrixAutoUpdate=!1;var scene=new three.Scene;scene.add(mesh),scene.matrixAutoUpdate=!1;var camera=new three.OrthographicCamera(-.5,.5,.5,-.5,.1,1);camera.position.set(0,0,.5),camera.lookAt(0,0,0),camera.updateMatrixWorld(!0),camera.matrixAutoUpdate=!1;var prevViewport=new three.Vector4,prevScissor=new three.Vector4;function renderPoweredByRealsee(e){if(material.map){let t=e.getViewport(prevViewport),n=e.getScissor(prevScissor),r=e.getScissorTest(),o=e.autoClear,s=n.x+imageOffset[0]/3,c=n.y+imageOffset[1]/3,l=imageSize[0]/3,u=imageSize[1]/3;e.setViewport(s,c,l,u),e.setScissor(s,c,l,u),e.setScissorTest(!0),e.autoClear=!1,e.render(scene,camera),e.setViewport(t),e.setScissor(n),e.setScissorTest(r),e.autoClear=o}else{let e=new three.Texture,t=new Image;t.onload=()=>{e.image=t,e.wrapS=three.ClampToEdgeWrapping,e.wrapT=three.ClampToEdgeWrapping,e.minFilter=three.LinearFilter,e.needsUpdate=!0,e.generateMipmaps=!1,material.needsUpdate=!0,t.onload=noop},t.src=realsee_png_data_url_default,material.map=e}}var jsContent$1=`(function(){function e(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}async function t(e={}){var t,n=e,r=!1,i=!0,a=self.location.href;if(r||i)try{new URL(\`.\`,a).href}catch{}console.log.bind(console),console.error.bind(console);var o=!1;function s(e){for(var t=0,n=e.length,r=new Uint8Array(n),i;t<n;++t)i=e.charCodeAt(t),r[t]=~i>>8&i;return r}var c,l,u=!1;function d(){var e=M.buffer;new Int8Array(e),new Int16Array(e),n.HEAPU8=l=new Uint8Array(e),new Uint16Array(e),new Int32Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=new Float32Array(e),new Float64Array(e),new BigInt64Array(e),new BigUint64Array(e)}function f(){if(n.preRun)for(typeof n.preRun==\`function\`&&(n.preRun=[n.preRun]);n.preRun.length;)T(n.preRun.shift());x(w)}function p(){u=!0,I.c()}function m(){if(n.postRun)for(typeof n.postRun==\`function\`&&(n.postRun=[n.postRun]);n.postRun.length;)C(n.postRun.shift());x(S)}var h;function g(){return s(\`\\0asm\\0\\0\\0&\\\`\\\`}}\\\`}\\\`\\0\\\`\\v\\0\\\`\\0\\0\\x07aa\\0\\0\\b\\x07\\0\\0\\x07\\bA\\v\\x07b\\0c\\0\\x07d\\0e\\0f\\0\\f
|
|
2239
|
+
`},LineMaterial=class extends three.ShaderMaterial{constructor(e){super({uniforms:three.UniformsUtils.clone(lineShader.uniforms),vertexShader:lineShader.vertexShader,fragmentShader:lineShader.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(LineMaterial.prototype,{isLineMaterial:!0});var LineSegments2=class extends three.Mesh{constructor(e,t){super(),this.type=`LineSegments2`,this.geometry=e===void 0?new LineSegmentsGeometry:e,this.material=t===void 0?new LineMaterial({color:Math.random()*16777215}):t}computeLineDistances(){let e=this.geometry,t=e.attributes.instanceStart,n=e.attributes.instanceEnd,r=new Float32Array(2*t.count),o=new three.Vector3,s=new three.Vector3;for(var c=0,l=0,u=t.count;c<u;c++,l+=2)o.fromBufferAttribute(t,c),s.fromBufferAttribute(n,c),r[l]=l===0?0:r[l-1],r[l+1]=r[l]+o.distanceTo(s);let d=new three.InstancedInterleavedBuffer(r,2,1);return e.setAttribute(`instanceDistanceStart`,new three.InterleavedBufferAttribute(d,1,0)),e.setAttribute(`instanceDistanceEnd`,new three.InterleavedBufferAttribute(d,1,1)),this}raycast(e,t){e.camera===null&&console.error(`LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.`);let n=e.ray,r=e.camera,o=r.projectionMatrix,s=this.geometry,c=this.material,l=c.resolution,u=c.linewidth,d=s.attributes.instanceStart,f=s.attributes.instanceEnd,p=new three.Vector4,m=new three.Vector4,h=new three.Vector4,g=new three.Vector3,_=new three.Matrix4,v=new three.Line3,y=new three.Vector3;n.at(1,h),h.w=1,h.applyMatrix4(r.matrixWorldInverse),h.applyMatrix4(o),h.multiplyScalar(1/h.w),h.x*=l.x/2,h.y*=l.y/2,h.z=0,g.copy(h);let b=this.matrixWorld;_.multiplyMatrices(r.matrixWorldInverse,b);for(var S=0,C=d.count;S<C;S++){p.fromBufferAttribute(d,S),m.fromBufferAttribute(f,S),p.w=1,m.w=1,p.applyMatrix4(_),m.applyMatrix4(_),p.applyMatrix4(o),m.applyMatrix4(o),p.multiplyScalar(1/p.w),m.multiplyScalar(1/m.w);var w=p.z<-1&&m.z<-1,T=p.z>1&&m.z>1;if(w||T)continue;p.x*=l.x/2,p.y*=l.y/2,m.x*=l.x/2,m.y*=l.y/2,v.start.copy(p),v.start.z=0,v.end.copy(m),v.end.z=0;let e=v.closestPointToPointParameter(g,!0);v.at(e,y);let r=three.MathUtils.lerp(p.z,m.z,e),s=r>=-1&&r<=1;var E=g.distanceTo(y)<u*.5;if(s&&E){v.start.fromBufferAttribute(d,S),v.end.fromBufferAttribute(f,S),v.start.applyMatrix4(b),v.end.applyMatrix4(b);var D=new three.Vector3,O=new three.Vector3;n.distanceSqToSegment(v.start,v.end,O,D),t.push({point:O,pointOnLine:D,distance:n.origin.distanceTo(O),object:this,faceIndex:S})}}}};Object.assign(LineSegments2.prototype,{isLineSegments2:!0});var Line2=class extends LineSegments2{constructor(e,t){super(e,t),this.type=`Line2`}};Object.assign(Line2.prototype,{isLine2:!0});var LineGeometry=class extends LineSegmentsGeometry{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 t=e.geometry;if(t instanceof three.Geometry){let e=new three.BufferGeometry().fromGeometry(t);this.setPositions(e.attributes.position.array)}else t instanceof three.BufferGeometry&&this.setPositions(t.attributes.position.array);return this}copy(){return this}};Object.assign(LineGeometry.prototype,{isLineGeometry:!0});var circleImageURL=`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==`,DEFAULT_COLOR=14467195,POINT_SIZE=8,DEFAULT_LINEWIDTH=2,DEFAULT_DASHSCALE=20,sharedCircleTexture=null,FiveLine=class extends three.Object3D{static get version(){return`6.8.0-alpha.26`}constructor(e=new three.Vector3,t=new three.Vector3){super(),this.type=`FiveLine`,this.needsRender=!0,this.line=new Line2(new LineGeometry,new LineMaterial({color:DEFAULT_COLOR,linewidth:DEFAULT_LINEWIDTH,dashScale:DEFAULT_DASHSCALE,dashed:!1}));let n=new three.BufferGeometry,r=new three.PointsMaterial({color:DEFAULT_COLOR,size:POINT_SIZE,map:sharedCircleTexture||(sharedCircleTexture=new three.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 three.Points(n,r),this.points.renderOrder=11,this.points.frustumCulled=!1,this.setPoints(e,t),this.add(this.line,this.points)}setPoints(e,t){let n=[].concat(e.toArray(),t.toArray());this.points.geometry.setAttribute(`position`,new three.BufferAttribute(new Float32Array(n),3)),this.line.geometry.setPositions(n),this.line.computeLineDistances(),this.needsRender=!0}getPoints(){let e=this.points.geometry.attributes.position.array;return[new three.Vector3(e[0],e[1],e[2]),new three.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(FiveLine.prototype,{isFiveLine:!0});var Constants={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function fetchJsonFile(e){return __awaiter(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function fetchProfilesList(e){return __awaiter(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield fetchJsonFile(`${e}/profilesList.json`)})}function fetchProfile(e,t){return __awaiter(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let o=yield fetchProfilesList(t),s;if(e.profiles.some(e=>{let n=o[e];return n&&(s={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!s}),!s){if(!n)throw Error(`No matching profile name found`);let e=o[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);s={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let c=yield fetchJsonFile(s.profilePath),l;if(r){let t;if(t=c.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${s.profileId}`);t.assetPath&&(l=s.profilePath.replace(`profile.json`,t.assetPath))}return{profile:c,assetPath:l}})}var defaultComponentValues={xAxis:0,yAxis:0,button:0,state:Constants.ComponentState.DEFAULT};function normalizeAxes(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let o=Math.atan2(t,e);n=Math.cos(o),r=Math.sin(o)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var VisualResponse=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===Constants.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(defaultComponentValues)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:o,normalizedYAxis:s}=normalizeAxes(e,t);switch(this.componentProperty){case Constants.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?o:.5;break;case Constants.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?s:.5;break;case Constants.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case Constants.ComponentProperty.STATE:this.valueNodeProperty===Constants.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=this.states.includes(r)?1:0;break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},Component=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new VisualResponse(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:Constants.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=Constants.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=Constants.ComponentState.PRESSED:(t.touched||this.values.button>Constants.ButtonTouchThreshold)&&(this.values.state=Constants.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Constants.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Constants.AxisTouchThreshold&&(this.values.state=Constants.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},MotionController=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new Component(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},DEFAULT_PROFILES_PATH=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,DEFAULT_PROFILE=`generic-trigger`,XRControllerModel=class extends three.Object3D{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof three.Mesh&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:o,valueNodeProperty:s}=e;t&&(s===Constants.VisualResponseProperty.VISIBILITY?t.visible=o:s===Constants.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,o),t.position.lerpVectors(n.position,r.position,o)))})}))}};function findNodes(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:o}=e;if(n===Constants.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new three.Mesh(new three.SphereGeometry(.001),new three.MeshBasicMaterial({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(o).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:o,valueNodeProperty:s}=e;if(s===Constants.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(o),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${o} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function addAssetSceneToControllerModel(e,t){findNodes(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof three.Mesh&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var XRControllerModelFactory=class{constructor(e=null){this.gltfLoader=e,this.path=DEFAULT_PROFILES_PATH,this._assetCache={}}createControllerModel(e){let t=new XRControllerModel,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||fetchProfile(r,this.path,DEFAULT_PROFILE).then(({profile:e,assetPath:o})=>{t.motionController=new MotionController(r,e,o);let s=this._assetCache[t.motionController.assetUrl];if(s)n=s.scene.clone(),addAssetSceneToControllerModel(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),addAssetSceneToControllerModel(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},defaultXRPanoramaControllerInitArgs=Object.assign({},omit(defaultPanoramaControllerCustomInitArgs,[`maxLatitude`,`minLatitude`]));function mapPanoResource(e,t){if(!t)return e;let n=e.match(/\d+_[a-z].png/);return e.substring(0,n.index)+t+`/`+e.substring(n.index)}var CONTROLLER_EVNET_DELTA_TIME=300,scratchRaycaster=new three.Raycaster,scratchVector3=new three.Vector3,XRPanoramaController=class e extends PanoramaController{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(e){super(e),this.xrManager=new XRManager(this.renderer,this.renderer.getContext(),{onSessionStart:e=>{this.emit(`xr.session.start`,createEvent(`xr.session.start`,{session:e,machineType:this.xrManager.machineType}))},onSessionEnd:()=>{this.emit(`xr.session.end`,createEvent(`xr.session.end`,{session:null,machineType:this.xrManager.machineType}))}}),this.xrControllerRay={left:new three.Raycaster,right:new three.Raycaster},this.xrControllerRay.left.params.Points={threshold:.1},this.xrControllerRay.left.firstHitOnly=!0,this.xrControllerRay.left.floorIndex=-1,this.xrControllerRay.right.params.Points={threshold:.1},this.xrControllerRay.right.firstHitOnly=!0,this.xrControllerRay.right.floorIndex=-1,this.gazeRay=null,this.pointerLines={left:new FiveLine,right:new FiveLine},this.pointerLines.left.visible=!1,this.pointerLines.right.visible=!0,this.pointerLines.left.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.left.points.material.depthTest=!1,this.pointerLines.right.setMaterial({color:new three.Vector3(1,1,1)}),this.pointerLines.right.points.material.depthTest=!1,this.controllerWrappers=[new three.Group,new three.Group];let t=this.xrManager.getController(0);this.controllerWrappers[0].add(t);let n=this.xrManager.getController(1);this.controllerWrappers[1].add(n);let r=new XRControllerModelFactory;r.gltfLoader={load(e,t){internalFetcher.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return parseGltf(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:internalFetcher})}).then(e=>t(e))}},(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`)&&this.scene.add(this.pointerLines.left,this.pointerLines.right,this.controllerWrappers[0],this.controllerWrappers[1]),this.panoResources={},this.panoResources[this.locationMotion.keyframes[0].key=this.locationMotion.keyframes[1].key=createUuid()]={panoId:panoStringify(this.currentPano),leftPanoPicture:null,position:this.camera.pose.offset.clone(),effect:`fade`,effectEasing:defaultEffectEase,fixCameraTransform:new three.Matrix4},this.parallaxCameraMatrixs=[];let o=AnimationFrameLoop.shared.getContext();if(!o){console.error(`获取session失败,请退出重试`);return}this.on(`xr.session.end`,()=>{this.scene.remove(this.pointerLines.left,this.pointerLines.right)}),this.xrManager.setSession(o),this.on(`xr.session.start`,()=>{let e=this.xrManager.getControllerGrip(0);e.add(r.createControllerModel(e)),this.controllerWrappers[0].add(e);let t=this.xrManager.getControllerGrip(1);t.add(r.createControllerModel(t)),this.controllerWrappers[1].add(t)}),this.xrHandleState={LeftAxesUp:{touchStartTime:0,touchStart:!1},LeftAxesDown:{touchStartTime:0,touchStart:!1},LeftAxesLeft:{touchStartTime:0,touchStart:!1},LeftAxesRight:{touchStartTime:0,touchStart:!1},LeftTrigger:{touchStartTime:0,touchStart:!1},LeftPinch:{touchStartTime:0,touchStart:!1},RightAxesUp:{touchStartTime:0,touchStart:!1},RightAxesDown:{touchStartTime:0,touchStart:!1},RightAxesLeft:{touchStartTime:0,touchStart:!1},RightAxesRight:{touchStartTime:0,touchStart:!1},RightTrigger:{touchStartTime:0,touchStart:!1},RightPinch:{touchStartTime:0,touchStart:!1},Y:{touchStartTime:0,touchStart:!1},X:{touchStartTime:0,touchStart:!1},A:{touchStartTime:0,touchStart:!1},B:{touchStartTime:0,touchStart:!1}},this.xrManager.machineType===`VP`&&this.initHandEvent()}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}moveToPano(e,t,n){var r,o,s;let c=(r=t.effect)==null?`fade`:r;this.userAction=n,this.stopMomentumMovement();let l=panoStringify(e),u=this.works.getObserver(e);if(!u)throw Error(`Invalid PanoIndex`);let d=getImageSizeFromURL(u.images.up),f=this.imageOptions.size;f===void 0&&u&&d&&(f=Number(d)),f===void 0&&(f=2048);let p=this.imageOptions.transform,m=(e,t)=>mapPanoResource(applyImageURLOptions(e,p,t)),h=Object.assign({key:`pano.${l}`},pick(this.imageOptions,[`format`,`size`,`quality`])),g={right:u.images.work.getURL(u.images.right),left:u.images.work.getURL(u.images.left),up:u.images.work.getURL(u.images.up),down:u.images.work.getURL(u.images.down),front:u.images.work.getURL(u.images.front),back:u.images.work.getURL(u.images.back)},_=`pano:`+jsonHash([g,h,p]);if(this.pendingPanoTask){if(this.pendingPanoTask.hash===_)return;{let t=this.pendingPanoTask.panoId;(o=this.panoMeshes.get(t))==null||o.setProgress(0),this.emit(`pano.texture.abort`,createEvent(`pano.texture.abort`,{error:null,progress:0,meta:null,pano:e}))}}let v=`move-to-pano-`+l;this.pending.add(v);let y=this.modelScene.parameter,b;if(y.pano0&&y.pano0.map.name===_?b=y.pano0:y.pano1&&y.pano1.map.name===_&&(b=y.pano1),b){let n={panoId:l,effect:c,effectEasing:(s=t.effectEasing)==null?defaultEffectEase:s,leftPanoPicture:{panoId:b.panoId,map:b.map,mapHistogram:b.mapHistogram,mapSize:b.mapSize,matrix:u.matrix.clone().premultiply(u.work.transform),zoom:1},position:u.position.clone().applyMatrix4(u.work.transform),fixCameraTransform:new three.Matrix4};n.leftPanoPicture&&this.panoPictureObserverMap.set(n.leftPanoPicture,u),this.pendingPanoTask=void 0,AnimationFrameLoop.shared.add(()=>{this.pending.delete(v),this.doMoveToPano(e,n,t)},!0,1);return}let S=this.panoMeshes.get(l);S&&S.tap&&S.tap(),this.pendingPanoTask={panoId:l,hash:_,onLoad:n=>{var r,o;let s=n.body;if(this.destroyed)s.dispose();else{s.name=_;let n=Array.isArray(s.image)?s.image[0]:s.image,d=(r=n==null?void 0:n.width)==null?2048:r,f=new Histogram().formPixels(getRgbaDataFromCubeTexture(this.renderer,s,!0,sharedHistogramRgbaData).data),p={panoId:l,effect:c,effectEasing:(o=t.effectEasing)==null?defaultEffectEase:o,leftPanoPicture:{panoId:l,map:s,mapSize:d,mapHistogram:new three.Vector4().fromArray(f.toArray()),matrix:u.matrix.clone(),zoom:1},position:u.position.clone(),fixCameraTransform:new three.Matrix4};p.leftPanoPicture&&this.panoPictureObserverMap.set(p.leftPanoPicture,u),this.doMoveToPano(e,p,t)}},onError:n=>{let r=Object.assign(Object.assign(Object.assign({},e),{mode:this.mode}),clonePose(this.camera.pose));this.emit(`pano.error`,createEvent(`pano.error`,{error:n,userAction:this.userAction,options:t,prevPano:this.currentPano,pano:{panoIndex:r.panoIndex,workCode:r.workCode},progress:0,state:r})),this.emit(`pano.cancel`,createEvent(`pano.cancel`,{error:null,userAction:this.userAction,options:t,prevPano:this.currentPano,pano:{panoIndex:r.panoIndex,workCode:r.workCode},progress:0,state:r})),this.emit(`error`,n),t.moveCancelCallback&&t.moveCancelCallback()}};let C=createExtendableEvent(`pano.prepare`,{prevPano:this.currentPano,pano:e});this.emit(`pano.prepare`,C),Promise.all([Promise.resolve().then(()=>{this.emit(`pano.texture.load`,createEvent(`pano.texture.load`,{error:null,progress:0,meta:null,pano:e}))}).then(()=>this.textureLoader.loadCubeTexture(g,{imageURL:{transform:m,options:h},format:three.RGBFormat,viaAjax:!0,fetcher:getFetcher(this.fiveId,u.work)},void 0,void 0,t=>{var n,r;this.emit(`pano.texture.progress`,createEvent(`pano.texture.progress`,{error:null,progress:t,meta:null,pano:e})),((n=this.pendingPanoTask)==null?void 0:n.hash)===_&&((r=this.panoMeshes.get(l))==null||r.setProgress(t))},this.renderer)).catch(t=>{let n=toError(t);return this.emit(`pano.texture.error`,createEvent(`pano.texture.error`,{error:n,progress:0,meta:null,pano:e})),this.emit(`error`,n),n}),Promise.resolve().then(()=>waitForExtendableEvent(C)).catch(e=>{let t=toError(e);return this.emit(`error`,t),t})]).then(([t,n])=>{var r,o,s,c;if(!(t instanceof Error)&&!(n instanceof Error))this.pending.delete(v),((r=this.pendingPanoTask)==null?void 0:r.hash)===_?(this.pendingPanoTask.onLoad(t),this.pendingPanoTask=void 0,(o=this.panoMeshes.get(l))==null||o.setProgress(0)):t.body.dispose(),this.emit(`pano.texture.success`,createEvent(`pano.texture.success`,{error:null,progress:1,meta:t.meta,pano:e}));else{let e=null;t instanceof Error?e||(e=t):t.body.dispose(),n instanceof Error&&(e||(e=n)),this.pending.delete(v),((s=this.pendingPanoTask)==null?void 0:s.hash)===_&&(this.pendingPanoTask.onError(e),this.pendingPanoTask=void 0,(c=this.panoMeshes.get(l))==null||c.setProgress(0))}})}doMoveToPano(e,t,n={}){var r,o,s,c,l,u,d,f,p,m;let h=now(),g=createUuid();this.panoResources[g]=t;let _=1,v,y,b;if(this.locationMotion.ended){let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(n).position,s=t.position;v=Math.max(o.distanceTo(s),1),y=[{key:n.key,progress:0,value:Object.assign(Object.assign({},r),{count:0})},{key:g,progress:1,value:{distance:0,count:1}}],b=0}else{let[e,n]=this.locationMotion.getKeyFrameSegment(h),r=this.locationMotion.value,o=this.panoResourceFromLocationMotionKeyframe(e).position,s=this.panoResourceFromLocationMotionKeyframe(n).position,c=t.position,l=n.value.count-r.count,u=Math.max(o.distanceTo(s),1)*l;v=u+Math.max(s.distanceTo(c),1),y=[{key:e.key,progress:0,value:Object.assign({},r)},{key:n.key,progress:u/v,value:n.value},{key:g,progress:1,value:{count:n.value.count+1,distance:0}}];let d=this.locationMotionKeyframesLength(this.locationMotion.keyframes),f=this.locationMotionKeyframesLength(y);b=this.locationMotion.getProgressVelocity(h)*d/f}let S=t.effect===`instant`?0:this.calculateMovingDuration(n.duration,t.effect===`fly`||t.effect===`model`?v:0),C={longitude:n.longitude,latitude:n.latitude,fov:n.fov},w=Object.assign(Object.assign({},e),{mode:this.mode,longitude:(r=C.longitude)==null?this.camera.pose.longitude:r,latitude:(o=C.latitude)==null?this.camera.pose.latitude:o,fov:(s=C.fov)==null?this.camera.pose.fov:s,offset:t.position.clone(),distance:0}),T=this.currentPano;if(this.emit(`pano.moveTo`,createEvent(`pano.moveTo`,{options:n,prevPano:T,pano:{panoIndex:w.panoIndex,workCode:w.workCode},progress:0,state:w,userAction:this.userAction,error:null})),n.moveStartCallback&&n.moveStartCallback(w),this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement&&this.videoTexture.image.getAttribute(`src`)&&(this.videoTexture.image.pause(),this.videoTexture.image.removeAttribute(`uuid`),this.videoTexture.image.removeAttribute(`src`),this.videoTexture.image.oncanplay=noop,this.videoTexture.needsUpdate=!0),this.panoVideo.setMaterial(null),t.effect===`fly`||t.effect===`model`)this.cameraMotion.set(C,S).catch(noop);else{let e=coordinatesToVector({longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude}),n=coordinatesToVector({longitude:(c=C.longitude)==null?this.cameraMotion.value.longitude:c,latitude:(l=C.latitude)==null?this.cameraMotion.value.latitude:l}),r=new three.Object3D;r.lookAt(e);let o=new three.Matrix4().makeRotationFromQuaternion(r.quaternion);r.lookAt(n);let s=new three.Matrix4().makeRotationFromQuaternion(r.quaternion),h=new three.Matrix4().getInverse(o).premultiply(s),g=this.cameraMotion.value.fov,_=(u=C.fov)==null?this.cameraMotion.value.fov:u,v=1;t.effect===`zoomin`?v=1.5:t.effect===`zoomout`&&(v=.4);let b=_*v;for(let e=0;e<y.length-1;e++){let t=y[e].key;if(t){let e=this.panoResources[t];e&&(e.fixCameraTransform.copy(h),e.leftPanoPicture&&(e.leftPanoPicture.zoom=Math.tan(b/2/180*Math.PI)/Math.tan(g/2/180*Math.PI)))}}this.cameraMotion.setKeyframes([{progress:0,value:{longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov}},{progress:0,value:{longitude:(d=C.longitude)==null?this.cameraMotion.value.longitude:d,latitude:(f=C.latitude)==null?this.cameraMotion.value.latitude:f,fov:b}},{progress:1,value:{longitude:(p=C.longitude)==null?this.cameraMotion.value.longitude:p,latitude:(m=C.latitude)==null?this.cameraMotion.value.latitude:m,fov:_}}],S).catch(noop)}this.locationMotion.setKeyframes(y,S,b).then(()=>{for(let e of this.modelScene.children)e instanceof Model&&e.show();let t=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:0});this.emit(`pano.arrived`,createEvent(`pano.arrived`,{options:n,prevPano:T,pano:{panoIndex:t.panoIndex,workCode:t.workCode},progress:1,state:t,userAction:this.userAction,error:null})),n.moveEndCallback&&n.moveEndCallback(t);let r=this.works.getObserver(this.currentPano);if(r&&r.images.video&&this.videoTexture&&this.videoTexture.image instanceof HTMLVideoElement){let e={map:this.videoTexture,size:r.images.video.size.clone(),matrix:r.images.video.matrix.clone(),panoMatrix:r.matrix.clone().premultiply(r.work.transform),alpha:1},t=createUuid(),n=this.videoTexture.image;n.setAttribute(`uuid`,t),canplayVideo().then(o=>{o&&r.images.video&&n.getAttribute(`uuid`)===t&&(n.oncanplay=()=>{n.oncanplay=noop,n.play()},n.ontimeupdate=()=>{n.currentTime>.5&&(n.ontimeupdate=noop,this.panoVideo.setMaterial(e))},n.src=r.images.video.source)}).catch((()=>{n.removeAttribute(`uuid`)}))}},()=>{this.emit(`pano.cancel`,createEvent(`pano.cancel`,{options:n,prevPano:T,pano:{panoIndex:w.panoIndex,workCode:w.workCode},progress:0,state:w,userAction:this.userAction,error:null})),n.moveCancelCallback&&n.moveCancelCallback()})}checkSelectedPano(e){var t;this.stopMomentumMovement(),this.camera.getDirection(new three.Vector3).setY(0);let n=null,r=this.works.getObserver(this.currentPano);if(!r)return null;let o=r.work.observers,s=r.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&r.work.workCode===this.currentPano.workCode)return!1;let t=o[e];return!t||scratchVector3.copy(t.position).applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),[c]=this.modelScene.intersectRaycaster(e);if(c){let[e,r]=arrayMin(s,e=>{let t=o[e];return t?scratchVector3.copy(t.standingPosition).applyMatrix4(t.work.transform).distanceTo(c.point):1/0},!0);typeof e==`number`&&r<this.panoTapTriggerRadius&&(n=(t=o[e])==null?null:t)}if(isNil(n)){let t=this.getForwardObserverOrNot(this.xrManager.cameraVR,e);t&&(n=t)}for(let e of this.locationMotion.keyframes){let t=this.panoResourceFromLocationMotionKeyframe(e);if(!(e.progress<this.locationMotion.progress)&&n){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode});if(t.panoId===e){n=null;break}}}if(isNil(n))return this.locationMotion.ended===!0&&this.cameraBounce(),null;if(!n.active){let e=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),t=this.panoMeshes.get(e);t&&(t.setDisabled(!1),t.setLoading(!0))}let l={workCode:n.work.workCode,panoIndex:n.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:n?n.position.clone():new three.Vector3};return this.emit(`pano.select`,createEvent(`pano.select`,{prevPano:this.currentPano,pano:{panoIndex:l.panoIndex,workCode:l.workCode},state:l,userAction:!0,options:{},progress:0,error:null})),n&&n.active?(this.emit(`pano.request`,createEvent(`pano.request`,{userAction:!0,prevPano:this.currentPano,pano:{panoIndex:l.panoIndex,workCode:l.workCode},progress:0,state:l,options:{},error:null})),{workCode:n.work.workCode,panoIndex:n.panoIndex}):null}destroy(){super.destroy()}isReady(){return!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,o,s,c,l,u,d,f,p;this.userAction=!0;let m={},h={},g=this.camera.getDirection(new three.Vector3),_=this.locationMotion.keyframes[0],v=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[y,b]=this.locationMotion.getKeyFrameSegment(e),S=this.panoResourceFromLocationMotionKeyframe(y),C=this.panoResourceFromLocationMotionKeyframe(b),w=this.panoResourceFromLocationMotionKeyframe(_),T=this.panoResourceFromLocationMotionKeyframe(v),E=!1;if(this.cameraMotion.ended===!1&&(this.cameraMotion.update(e),h.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),m.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(clamp$1(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-b.value.count+1,n=new three.Vector3().copy(S.position),s=new three.Vector3().copy(C.position);if(m.progress=t,t>=.01&&t<=.99&&(m.progress=clamp$1(C.effectEasing(t),.01,.99)),C.leftPanoPicture&&(t<1?S.leftPanoPicture&&(m.pano0=S.leftPanoPicture):m.pano0=C.leftPanoPicture,m.pano1=C.leftPanoPicture),C.effect===`montage`?m.transition=`BLACK`:C.effect===`spread`?m.transition=`SPREAD`:m.transition=`FADE`,C.effect===`zoomin`||C.effect===`zoomout`?m.progress=Math.pow(t,3):C.effect===`model`&&this.camera.pose.distance<.01&&(m.modelAlpha=1-Math.pow(clamp$1(Math.abs(t-.5)*2,0,1),4)),t<1&&C.effect!==`fly`){if(m.pano0&&S.leftPanoPicture){let e={panoId:m.pano0.panoId,map:m.pano0.map,mapHistogram:m.pano0.mapHistogram,mapSize:m.pano0.mapSize,zoom:m.pano0.zoom,matrix:S.leftPanoPicture.matrix.clone().setPosition(C.position)},t=this.panoPictureObserverMap.get(m.pano0);t&&this.panoPictureObserverMap.set(e,t),m.pano0=e}n.copy(s),E=!0}h.distance=this.locationMotion.value.distance,h.offset=new three.Vector3(n.x+(s.x-n.x)*t,n.y+(s.y-n.y)*t,n.z+(s.z-n.z)*t);let c=[],l=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(c.push(t),n>this.locationMotion.progress&&l.push(t))}for(let e of Object.keys(this.panoResources)){if(l.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.leftPanoPicture){let e=t.leftPanoPicture.map;if(e){if(e===((r=m.pano0)==null?void 0:r.map)||e===((o=m.pano1)==null?void 0:o.map))continue;e.dispose(),t.leftPanoPicture=null}}c.indexOf(e)>=0||delete this.panoResources[e]}let u=panoParse(C.panoId);u!==this.currentPano&&(this.currentPano=u,this.accessibleObserverFloorCheckCount=0),this.emit(`pano.moving`,createEvent(`pano.moving`,{userAction:this.userAction,prevPano:panoParse(w.panoId),pano:panoParse(T.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},panoParse(T.panoId)),{mode:this.mode}),clonePose(this.camera.pose)),h),options:{},progress:this.locationMotion.progress,error:null}))}this.camera.setFromPose(h),this.xrManager.cameraVR.projectionMatrix.copy(this.camera.projectionMatrix),this.xrManager.cameraVR.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),this.xrManager.cameraVR.matrix.copy(this.camera.matrix),this.xrManager.cameraVR.position.copy(this.camera.position),this.xrManager.cameraVR.quaternion.copy(this.camera.quaternion),this.xrManager.cameraVR.scale.copy(this.camera.scale),this.xrManager.cameraVR.matrixAutoUpdate=!1,this.xrManager.cameraVR.matrixWorld.copy(this.camera.matrixWorld);let[D,O]=n,k=new three.Vector3(0,0,0),A=new three.Vector2().copy(this.camera.resolution);if(O&&this.xrManager.session&&this.xrManager.referenceSpace&&this.xrManager.session.renderState.baseLayer){let n=this.xrManager.cameraVR,r=this.xrManager.referenceSpace,o=this.xrManager.session.renderState.baseLayer,u=O.getViewerPose(r),d=(s=u==null?void 0:u.views)==null?[]:s;for(let e=0;e<d.length;e++){let t=d[e],r=n.cameras[e],s=o.getViewport(t);s&&(r.projectionMatrix.fromArray(t.projectionMatrix),r.projectionMatrixInverse.getInverse(r.projectionMatrix),r.matrix.fromArray(t.transform.matrix),r.matrix.setPosition(this.camera.position),r.matrix.decompose(r.position,r.quaternion,r.scale),r.matrixWorld.copy(r.matrix),r.matrixWorldInverse.getInverse(r.matrixWorld),r.matrixAutoUpdate=!1,k.copy(r.position),r.viewport.set(s.x,s.y,s.width,s.height),A.set(s.width,s.height))}if(this.xrManager.setProjectionFromUnion(this.xrManager.cameraVR,this.xrManager.cameraL,this.xrManager.cameraR),this.camera.quaternion.copy(this.xrManager.cameraVR.quaternion),this.camera.scale.copy(this.xrManager.cameraVR.scale),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose((c=h.distance)==null?this.camera.pose.distance:c),this.xrManager.session.inputSources){for(let e=0;e<this.xrManager.session.inputSources.length;e++)if(this.xrManager.session.inputSources[e]&&this.xrManager.session.inputSources[e].targetRayMode===`transient-pointer`){let t=O.getPose(this.xrManager.session.inputSources[e].targetRaySpace,r);if(t){let e=t.transform.orientation,n=new three.Quaternion(e.x,e.y,e.z,e.w),r=new three.Vector3(0,0,-1).applyQuaternion(n);this.gazeRay=new three.Raycaster(this.camera.position,r)}}}if(this.xrManager.machineType===`Oculus`||this.xrManager.machineType===`Pico`){let n=this.xrManager.session.inputSources;for(let e=0;e<n.length;e++){let t=this.xrManager.controllers[e],o=n[e];if(!o)continue;t&&t.update(o,O,r);let s=this.xrManager.getController(e),c=new three.Vector3(0,1.2,0),u=s.position.clone().add(k).sub(c);o.handedness===`left`?this.xrControllerRay.left.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)):o.handedness===`right`&&this.xrControllerRay.right.set(u,new three.Vector3(0,0,-1).applyEuler(s.rotation)),this.controllerWrappers[e].position.copy(new three.Vector3(0,0,0).add(k).sub(c));let d=this.modelScene.intersectRaycaster(this.xrControllerRay.right);if(d.length===0){let e=this.works.getResolvedObserver(this.currentPano);d=this.xrControllerRay.right.intersectObject(this.modelScene.boundingMesh,!0).map(t=>{var n;let r=(n=e==null?void 0:e.floorIndex)==null?0:n;return Object.assign({floorIndex:r,floor:r},t)})}if(d.length>=1&&d[0].face)if(o.handedness===`right`){let e=this.xrControllerRay.right.intersectObject(this.xrCustomObjectsScene,!0),t=d[0].face.normal,n=t.clone(),r=d[0].point.clone();this.intersectMesh.position.copy(r);let o=r.clone().add(n);if(this.intersectMesh.lookAt(o),Math.abs(t.y)>.99){let e=this.camera.position.clone().sub(r);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0,e.length>0?(this.pointerLines.right.setPoints(u,e[0].point),this.pointerLines.right.points.visible=!0,this.intersectMesh.visible=!1):(this.pointerLines.right.points.visible=!1,this.pointerLines.right.setPoints(u,d[0].point));let s=d[0],c=createEvent(`intersect.update`,{raycaster:(l=this.xrControllerRay.right)==null?null:l,intersection:s==null?null:s,object:this.intersectMesh});if(this.emit(`intersect.update`,c),c.defaultPrevented){this.hideIntersectMesh();return}}else this.pointerLines.left.setPoints(u,d[0].point)}this.updateControllerHelper(n,e,t)}}else O||console.error(`xrFrame丢失,请重试`),this.xrManager.session||console.error(`session丢失,请重试`),this.xrManager.session&&!this.xrManager.session.renderState.baseLayer&&console.error(`no layer found`);isEmptyObject(m)===!1&&this.modelScene.parameter.set(m),this.emit(`camera.update`,createEvent(`camera.update`,{userAction:this.userAction,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),clonePose(this.camera.pose))}));let j=this.works.getResolvedObserver(this.currentPano),M=this.locationMotion.ended?this.getForwardObserverOrNot(this.xrManager.cameraVR):null,N=this.works.getObserver(S.panoId),P=this.works.getObserver(C.panoId);if(this.adjustPanoCircleMeshPositionBasedOnModel&&this.helper.visible&&j){let e=[],t=j.work.observers;for(let n of j.accessibleNodes){let r=t[n];r&&e.push(r)}let n=new Map;if(e.sort((e,t)=>{let r=n.get(e);r===void 0&&(r=e.standingPosition.distanceTo(j.standingPosition),n.set(e,r));let o=n.get(e);return o===void 0&&(o=t.standingPosition.distanceTo(j.standingPosition),n.set(t,o)),r-o}),e.length){this.accessibleObserverFloorCheckCount%=e.length;let t=e[this.accessibleObserverFloorCheckCount],n=this.modelScene.models.find(e=>e.work===(t==null?void 0:t.work));if(t&&n&&n.visible){let e=.3,r=.05,o=.005,s=t.standingPosition.clone().applyMatrix4(t.work.transform),c=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode}),l=adjustPanoCircleMeshVectors.map(t=>{scratchRaycaster.ray.origin.copy(s),scratchRaycaster.ray.origin.add(scratchVector3.copy(t).setY(e)),scratchRaycaster.ray.direction.set(0,-1,0),scratchRaycaster.firstHitOnly=!0,scratchRaycaster.floorIndex=-1;let[r]=n.intersectRaycaster(scratchRaycaster);return r&&r.distance-o<=e?new three.Vector3().copy(s).setY(r.point.y+o):s});l.sort((e,t)=>t.y-e.y);let u=l[Math.floor(l.length/2)],[d]=l.filter(e=>e.distanceTo(u)<=.05);if(d){let e=new three.Vector4(s.x,s.y,s.z,d.y-s.y),t=this.adjustPanoCircleMeshPositionFix.get(c);t&&!e.equals(t)&&(this.needsRender=!0),this.adjustPanoCircleMeshPositionFix.set(c,e)}}this.accessibleObserverFloorCheckCount++}}let F=new Map;if(N)for(let e of N.accessibleNodes){let t=N.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(P)for(let e of P.accessibleNodes){let t=P.work.observers[e];if(t){let e=panoStringify({panoIndex:t.panoIndex,workCode:t.work.workCode});F.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{F.get(t)?F.delete(t):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),F.forEach((e,t)=>{let n=this.panoCircleMeshCreator(e,{aerialObserverMinHeight:this.aerialObserverMinHeight});this.panoMeshes.set(t,n),this.helper.add(n),F.delete(t)}),this.panoMeshes.forEach((e,t)=>{let n=this.works.getObserver(t);if(n){let r=n.position.distanceTo(n.standingPosition)>this.aerialObserverMinHeight;if(r)e.position.copy(n.position).applyMatrix4(n.work.transform),e.scale.setScalar(18);else{e.position.copy(n.standingPosition).applyMatrix4(n.work.transform);let t=this.adjustPanoCircleMeshPositionFix.get(n.panoId);t&&(scratchVector3.set(t.x,t.y,t.z),scratchVector3.equals(e.position)&&(e.position.y+=t.w)),e.scale.setScalar(1.2)}let o=this.camera.position.clone().setY(e.position.y),s=new three.Vector3().copy(e.position).sub(o).normalize();if(t===panoStringify(this.currentPano)){let t=clamp$1((.5-o.distanceTo(e.position))/.5,0,1);s.multiplyScalar(1-t).add(g.clone().multiplyScalar(t))}if(s.length()>0){let t=r?-Math.PI/2:0,n=Math.atan2(s.x,s.z);e.quaternion.setFromEuler(new three.Euler(t,n,0,`YXZ`))}}else e.visible=!1}),this.camera.pose.distance>.1||E)this.panoMeshes.forEach(n=>{n.setOpacity(0),n.setCurrent(!1),n.updateTime&&n.updateTime(e,t),n.visible=!1});else if(j){let n=j.work.observers,[,r]=arrayMin(j.accessibleNodes,e=>{let t=n[e];return!t||!t.active?1/0:j.standingPosition.distanceTo(t.standingPosition)},!0);r=clamp$1(r,2.5,1/0);let o=j.accessibleNodes.concat(j.panoIndex).map(e=>panoStringify({panoIndex:e,workCode:j.work.workCode}));this.panoMeshes.forEach((n,s)=>{let c=this.works.getObserver(s),l=!1,u=1;if(o.indexOf(s)===-1)l=!1,u=0;else if(!c)l=!1,u=0;else if(!c.loadable&&!c.active)l=!1,u=0;else{let e=n.position.clone().project(this.camera);l=Math.abs(e.x)<1&&Math.abs(e.y)<1&&Math.abs(e.z)<1&&!n.loading&&n.progress===0&&M!==null&&panoStringify({panoIndex:M.panoIndex,workCode:M.work.workCode})===s;let t=n.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);u=t<.01?0:clamp$1(r/t,.1,.85)}c&&c===P&&c.position.distanceTo(c.standingPosition)>this.aerialObserverMinHeight&&n.position.distanceTo(this.camera.position)<35&&(u=0),this.modelScene.parameter.resolveValue(`modelAlpha`)>0&&(u=0),n.setCurrent(l),n.setOpacity(u),n.updateTime&&n.updateTime(e,t)})}{let e=(u=this.modelScene.parameter.progress)==null?1:u,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,o=t===0?n:r,s;if(o&&(s=this.works.getObserver(o.panoId),s||(s=this.panoPictureObserverMap.get(o))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(canUseNativeImageBitmap()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!o||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:null,panoMatrix:new three.Matrix4,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=getImageSizeLevel(o.mapSize)+1,c=4;this.tiling.setObserver(s);let l={renderer:this.renderer,resolution:A,pixelRatio:1,time:this.camera.time,cameraMatrix:this.xrManager.cameraVR.matrixWorld,cameraProjectionMatrix:this.xrManager.cameraVR.projectionMatrix,panoMap:o.map,panoMatrix:o.matrix,panoZoom:o.zoom,minLevel:e,level:4},u=this.tiling.update(l),f={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:easeInQuart(Math.abs(((d=this.modelScene.parameter.progress)==null?0:d)-.5)*2)},p=this.modelScene.parameter.refinedScreen;(u||f.pano!==(p==null?void 0:p.pano)||f.opacity!==(p==null?void 0:p.opacity))&&this.modelScene.parameter.set(`refinedScreen`,f)}}if(this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e),this.intersectMesh&&this.intersectMesh.parent&&j&&j.position.y-j.standingPosition.y>10){let e=clamp$1(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1);{let e=C.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((f=this.modelScene.parameter.pano0Depth)==null?void 0:f.panoId)!==t.panoId||((p=this.modelScene.parameter.pano1Depth)==null?void 0:p.panoId)!==n.panoId){let e=500,r=512;this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new three.WebGLCubeRenderTarget(512,{minFilter:three.NearestFilter,magFilter:three.NearestFilter,generateMipmaps:!1});let o=new three.CubeCamera(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);o.matrix.copy(t.matrix),o.matrixWorld.copy(o.matrix),o.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,o,500);let s=new three.CubeCamera(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);s.matrix.copy(n.matrix),s.matrixWorld.copy(s.matrix),s.matrixAutoUpdate=!1,renderDepthCube(this.renderer,this.modelScene,s,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){if(this.xrManager.session&&this.xrManager.session.renderState.baseLayer){let e=this.xrManager.session.renderState.baseLayer;return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.renderer.setFramebuffer(e.framebuffer),this.renderer.render(this.scene,this.xrManager.cameraVR),this.renderer.setFramebuffer(null),!0}return!1}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}panoResourceFromLocationMotionKeyframe(e){return this.panoResources[e.key]}updateControllerHelper(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(!e||e.length===0)return;let s={buttons:{X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1}};for(let c=0;c<e.length;c++){let l=e[c].handedness,u=e[c].gamepad;switch(l){case`left`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`LeftAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`LeftAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`LeftAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`LeftAxesDown`,t)),u!=null&&u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`X`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`Y`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`LeftTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`LeftPinch`,t));let e={raycaster:r,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n};s.buttons.X=u.buttons&&u.buttons[4]?u.buttons[4].pressed:!1,s.buttons.Y=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.LeftTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.LeftPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1,s.left=e;break;case`right`:u.axes&&(this.emitHandleEvent(u.axes[2]===-1,`RightAxesLeft`,t),this.emitHandleEvent(u.axes[2]===1,`RightAxesRight`,t),this.emitHandleEvent(u.axes[3]===-1,`RightAxesUp`,t),this.emitHandleEvent(u.axes[3]===1,`RightAxesDown`,t)),u.buttons&&(u.buttons[4]&&this.emitHandleEvent(u.buttons[4].pressed,`A`,t),u.buttons[5]&&this.emitHandleEvent(u.buttons[5].pressed,`B`,t),u.buttons[0]&&this.emitHandleEvent(u.buttons[0].pressed,`RightTrigger`,t),u.buttons[1]&&this.emitHandleEvent(u.buttons[1].pressed,`RightPinch`,t)),s.right={raycaster:o,axes:{up:u.axes&&u.axes[3]<0?Math.abs(u.axes[3]):0,down:u.axes&&u.axes[3]<0?0:Math.abs(u.axes[3]),left:u.axes&&u.axes[2]<0?Math.abs(u.axes[2]):0,right:u.axes&&u.axes[2]<0?0:Math.abs(u.axes[2])},deltaTime:n},s.buttons.A=u.buttons&&u.buttons[4]?u==null?void 0:u.buttons[4].pressed:!1,s.buttons.B=u.buttons&&u.buttons[5]?u==null?void 0:u.buttons[5].pressed:!1,s.buttons.RightTrigger=u.buttons&&u.buttons[0]?u==null?void 0:u.buttons[0].pressed:!1,s.buttons.RightPinch=u.buttons&&u.buttons[1]?u==null?void 0:u.buttons[1].pressed:!1;break;default:break}}this.emit(`xr.controller.update`,createEvent(`xr.controller.update`,s))}emitHandleEvent(e,t,n){let r=this.xrControllerRay.left,o=this.xrControllerRay.right;if(e)this.xrHandleState[t].touchStart===!1?(this.xrHandleState[t].touchStartTime=n,this.xrHandleState[t].touchStart=!0,this.emit(`xr.gesture.buttonDown`,createEvent(`xr.gesture.buttonDown`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!1,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}))):n-this.xrHandleState[t].touchStartTime>CONTROLLER_EVNET_DELTA_TIME&&this.emit(`xr.gesture.press`,createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!0,controllers:{raycaster:{leftRay:r,rightRay:o}}}));else if(this.xrHandleState[t].touchStart===!0){if(this.emit(`xr.gesture.buttonUp`,createEvent(`xr.gesture.buttonUp`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}})),n-this.xrHandleState[t].touchStartTime<=CONTROLLER_EVNET_DELTA_TIME){let e=createEvent(`xr.gesture.tap`,{session:this.xrManager.session,machineType:this.xrManager.machineType,buttons:t,isFinal:!0,isFirst:!1,controllers:{raycaster:{leftRay:r,rightRay:o}}});!this.emit(`xr.gesture.tap`,e)&&!e.defaultPrevented&&t===`RightTrigger`&&this.checkSelectedPano(this.xrControllerRay.right)}this.xrHandleState[t].touchStart=!1,this.xrHandleState[t].touchStartTime=0}}initHandEvent(){if(!this.xrManager.session)throw Error(`初始化失败`);this.xrManager.session.addEventListener(`select`,e=>{this.gazeRay&&this.checkSelectedPano(this.gazeRay)})}},Controllers={Floorplan:FloorplanController,Topview:TopviewController,Panorama:PanoramaController,VRPanorama:VRPanoramaController,Model:ModelController,Mapview:MapviewController,XRPanorama:XRPanoramaController},controllersDefaultInitArgs={Floorplan:defaultFloorplanControllerCustomInitArgs,Topview:defaultTopviewControllerCustomInitArgs,Panorama:defaultPanoramaControllerCustomInitArgs,VRPanorama:defaultVRPanoramaControllerCustomInitArgs,Model:defaultModelControllerCustomInitArgs,Mapview:defaultMapviewControllerCustomInitArgs,XRPanorama:defaultXRPanoramaControllerInitArgs},PROXY_CONTROLLER_EVENT_NAMES=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.fire,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.prepare,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function initLegacyEvent(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=coordinatesToVector(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function generateDefaultVideoElement(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}function initLights(){let e=new three.Group;e.name=`internalLights`;{let t=new three.DirectionalLight(16777215,.1);t.name=`direction0`,t.position.copy(new three.Vector3(0,1,0)),e.add(t)}{let t=new three.DirectionalLight(16777215,.1);t.name=`direction1`,t.position.copy(new three.Vector3(-1,-1,-1)),e.add(t)}{let t=new three.DirectionalLight(16777215,.3);t.name=`direction2`,t.position.copy(new three.Vector3(1,1,1)),e.add(t)}{let t=new three.AmbientLight(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function parseKeyValue(e){var t,n;let r={},o=e.split(/(\;|\,)/);for(let e of o){let o=e.split(`=`),s=(t=o[0])==null?void 0:t.trim(),c=(n=o[1])==null?void 0:n.trim();s&&c&&(r[s]=c)}return r}function getViewportScale(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=parseKeyValue((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}var realsee_png_data_url_default=`data:image/png;base64,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`,imageSize=[351,63],imageOffset=[20,20],vertices=new Float32Array([-.5,-.5,0,.5,-.5,0,-.5,.5,0,.5,.5,0]),uvs=new Float32Array([0,0,1,0,0,1,1,1]),index=new Uint8Array([0,1,2,1,3,2]),geometry=new three.BufferGeometry;geometry.setAttribute(`position`,new three.BufferAttribute(vertices,3)),geometry.setAttribute(`uv`,new three.BufferAttribute(uvs,2)),geometry.setIndex(new three.BufferAttribute(index,1));var material=new three.MeshBasicMaterial({transparent:!0,depthTest:!1,depthWrite:!1,stencilWrite:!1,fog:!1}),mesh=new three.Mesh(geometry,material);mesh.matrixAutoUpdate=!1;var scene=new three.Scene;scene.add(mesh),scene.matrixAutoUpdate=!1;var camera=new three.OrthographicCamera(-.5,.5,.5,-.5,.1,1);camera.position.set(0,0,.5),camera.lookAt(0,0,0),camera.updateMatrixWorld(!0),camera.matrixAutoUpdate=!1;var prevViewport=new three.Vector4,prevScissor=new three.Vector4;function renderPoweredByRealsee(e){if(material.map){let t=e.getViewport(prevViewport),n=e.getScissor(prevScissor),r=e.getScissorTest(),o=e.autoClear,s=n.x+imageOffset[0]/3,c=n.y+imageOffset[1]/3,l=imageSize[0]/3,u=imageSize[1]/3;e.setViewport(s,c,l,u),e.setScissor(s,c,l,u),e.setScissorTest(!0),e.autoClear=!1,e.render(scene,camera),e.setViewport(t),e.setScissor(n),e.setScissorTest(r),e.autoClear=o}else{let e=new three.Texture,t=new Image;t.onload=()=>{e.image=t,e.wrapS=three.ClampToEdgeWrapping,e.wrapT=three.ClampToEdgeWrapping,e.minFilter=three.LinearFilter,e.needsUpdate=!0,e.generateMipmaps=!1,material.needsUpdate=!0,t.onload=noop},t.src=realsee_png_data_url_default,material.map=e}}var jsContent$1=`(function(){function e(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}async function t(e={}){var t,n=e,r=!1,i=!0,a=self.location.href;if(r||i)try{new URL(\`.\`,a).href}catch{}console.log.bind(console),console.error.bind(console);var o=!1;function s(e){for(var t=0,n=e.length,r=new Uint8Array(n),i;t<n;++t)i=e.charCodeAt(t),r[t]=~i>>8&i;return r}var c,l,u=!1;function d(){var e=M.buffer;new Int8Array(e),new Int16Array(e),n.HEAPU8=l=new Uint8Array(e),new Uint16Array(e),new Int32Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=new Float32Array(e),new Float64Array(e),new BigInt64Array(e),new BigUint64Array(e)}function f(){if(n.preRun)for(typeof n.preRun==\`function\`&&(n.preRun=[n.preRun]);n.preRun.length;)T(n.preRun.shift());x(w)}function p(){u=!0,I.c()}function m(){if(n.postRun)for(typeof n.postRun==\`function\`&&(n.postRun=[n.postRun]);n.postRun.length;)C(n.postRun.shift());x(S)}var h;function g(){return s(\`\\0asm\\0\\0\\0&\\\`\\\`}}\\\`}\\\`\\0\\\`\\v\\0\\\`\\0\\0\\x07aa\\0\\0\\b\\x07\\0\\0\\x07\\bA\\v\\x07b\\0c\\0\\x07d\\0e\\0f\\0\\f
|
|
2240
2240
|
@\\x07T~@A\\b(\\0" \\0B\\x07|Bøÿÿÿ|"BÿÿÿÿX@ §"\\0?\\0AtM\\r \\0\\0\\r\\vA\\bA06\\0A\\vA\\b \\x006\\0 \\v\\0 \\0 Atr\\vr \\0¼"Aÿÿÿq!@ AvAÿq"E\\r\\0 Að\\0M@ ArAñ\\0 kv!\\f\\v AK@Aø!A\\0!\\f\\v A
|
|
2241
2241
|
tA\\x07k!\\v AvAqr A\\rvr\\vß\\v\\b@ \\0E\\r\\0 \\0A\\bk" \\0Ak(\\0"Axq"\\0j!@ Aq\\r\\0 AqE\\r (\\0"k"A\\b(\\0I\\r \\0 j!\\0@@@A\\b(\\0 G@ (\\f! AÿM@ (\\b"G\\rA\\bA\\b(\\0A~ Avwq6\\0\\f\\v (!\\x07 G@ (\\b" 6\\f 6\\b\\f\\v (" Aj ("E\\r Aj\\v!@ ! "Aj! ("\\r\\0 Aj! ("\\r\\0\\v A\\x006\\0\\f\\v ("AqAG\\rA\\b \\x006\\0 A~q6 \\0Ar6 \\x006\\0\\v 6\\f 6\\b\\f\\vA\\0!\\v \\x07E\\r\\0@ ("At"(¸
|
|
2242
2242
|
F@ A¸
|
|
@@ -2289,7 +2289,7 @@ Aj$\0 \0\v¡\v\v }#\0A\xA0k"\v$\0 \vA0jA\0A$ü\v\0@ G@ Al"\fAjAt"
|
|
|
2289
2289
|
j 8\0
|
|
2290
2290
|
j 8\0
|
|
2291
2291
|
j 8\0 \v \f* \v*8 \f*\0 \v*0 \f*\f \v*48\0 \v \f* \v*8 \f* \v*0 \f* \v*48 \v \f* \v*8 \f*\b \v*0 \f* \v*48\b \v \f* \v*D \f*\0 \v*< \f*\f \v*@8\f \v \f* \v*D \f* \v*< \f* \v*@8 \v \f* \v*D \f*\b \v*< \f* \v*@8 \v \f* \v*P \f*\0 \v*H \f*\f \v*L8 \v \f* \v*P \f* \v*H \f* \v*L8 \v \f* \v*P \f*\b \v*H \f* \v*L8 \v* ! \v*\b! \v*! \r \v*" \v*\0" \v*\f"\x1B \x1BC\0\0@ \v*" \v*" \x1B \v*"C\0\0@6 \r \x1B C\0\0@ C\0\0@6 \r C\0\0@ C\0\0@6 Aj!\f\v\v \vA\xA0j$\0\v\0\v\v \0A\b\v`)}function y(e){return e}function b(e,t){var n,r=y(e);return n=new WebAssembly.Module(r),[new WebAssembly.Instance(n,t),n]}function S(){return{a:L}}function C(){var e;function t(e,t){return z=e.exports,I(z),p(),z}var r=S();return n.instantiateWasm?new Promise((e,o)=>{n.instantiateWasm(r,(n,r)=>{e(t(n,r))})}):(_!=null||(_=v()),t(b(_,r)[0]))}for(var w=e=>{for(;e.length>0;)e.shift()(n)},T=[],E=e=>T.push(e),D=[],O=e=>D.push(e),k=()=>2147483648,A=(e,t)=>Math.ceil(e/t)*t,j=e=>{var t=(e-F.buffer.byteLength+65535)/65536|0;try{return F.grow(t),p(),1}catch(e){}},M=e=>{var t=d.length;e>>>=0;var n=k();if(e>n)return!1;for(var r=1;r<=4;r*=2){var o=t*(1+.2/r);if(o=Math.min(o,e+100663296),j(Math.min(n,A(Math.max(e,o),65536))))return!0}return!1},N=new Uint8Array(123),P=25;P>=0;--P)N[48+P]=52+P,N[65+P]=P,N[97+P]=26+P;if(N[43]=62,N[47]=63,n.noExitRuntime&&n.noExitRuntime,n.print&&n.print,n.printErr&&n.printErr,n.wasmBinary&&n.wasmBinary,n.arguments&&n.arguments,n.thisProgram&&n.thisProgram,n.preInit)for(typeof n.preInit==`function`&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();var F;function I(e){n._pack=e.d,n._malloc=e.e,n._free=e.f,F=e.b,e.__indirect_function_table}var L={a:M};function R(){m();function e(){var e;n.calledRun=!0,!c&&(h(),u==null||u(n),(e=n.onRuntimeInitialized)==null||e.call(n),g())}n.setStatus?(n.setStatus(`Running...`),setTimeout(()=>{setTimeout(()=>n.setStatus(``),1),e()},1)):e()}var z=C();return R(),t=f?n:new Promise((e,t)=>{u=e}),t}),_createDataModule.apply(this,arguments)}var wasmModulePromise=null;function getWasmModule(){return wasmModulePromise||(wasmModulePromise=createDataModule()),wasmModulePromise}var RenderData=class{static warmupWasm(){getWasmModule()}constructor(e,t=0){this.dataChanged=!1,this.transformsChanged=!1,this.maxShDegree=0,this.initialBuildComplete=!1,this.pendingInitialBuildCount=0,this.disposed=!1,this.resolveReadyPromise=null,this.objectsInOrder=[],this.generation=t,this.readyPromise=new Promise(e=>{this.resolveReadyPromise=e});let n=0,r=0;this.splatIndices=new Map,this.offsets=new Map,this.layerKeys=[],this.layerKeyToIndex=new Map,this.objectLayerIndices=new Map;let o=new Map;e.forEach(e=>{this.splatIndices.set(e,r),this.offsets.set(e,n),o.set(n,e);let t=e.gsViewLayerKey||e.uuid,s=this.layerKeyToIndex.get(t);s===void 0&&(s=this.layerKeys.length,this.layerKeys.push(t),this.layerKeyToIndex.set(t,s)),this.objectLayerIndices.set(e,s),n+=e.numPoints,r++,this.objectsInOrder.push(e)}),this.numPoints=n,this.pendingInitialBuildCount=e.length,this.initialBuildComplete=this.pendingInitialBuildCount===0,this.width=2048,this.height=Math.ceil(2*this.numPoints/this.width),this.data=new Uint32Array(this.width*this.height*4),this.transformsWidth=5,this.transformsHeight=o.size,this.transforms=new Float32Array(this.transformsWidth*this.transformsHeight*4),this.transformIndicesWidth=1024,this.transformIndicesHeight=Math.ceil(this.numPoints/this.transformIndicesWidth),this.transformIndices=new Uint32Array(this.transformIndicesWidth*this.transformIndicesHeight),this.layerIndicesWidth=1024,this.layerIndicesHeight=Math.ceil(this.numPoints/this.layerIndicesWidth),this.layerIndices=new Uint32Array(this.layerIndicesWidth*this.layerIndicesHeight),this.positions=new Float32Array(this.numPoints*3),this.rotations=new Float32Array(this.numPoints*4),this.scales=new Float32Array(this.numPoints*3);let s=0;e.forEach(e=>{e.maxSHDegree>s&&(s=e.maxSHDegree)}),this.maxShDegree=s,s>=1&&(this.sh1=new Float32Array(this.numPoints*9)),s>=2&&(this.sh2=new Float32Array(this.numPoints*15)),s>=3&&(this.sh3=new Float32Array(this.numPoints*21)),e.forEach(e=>{let t=this.offsets.get(e);e.sh1&&this.sh1&&this.sh1.set(e.sh1,t*9),e.sh2&&this.sh2&&this.sh2.set(e.sh2,t*15),e.sh3&&this.sh3&&this.sh3.set(e.sh3,t*21)}),this.worker=new WorkerWrapper$1,this.worker.onmessage=e=>{if(!this.disposed&&e.data.response){let t=e.data.response,n=o.get(t.offset);if(!n)return;this.updateTransform(n);let r=this.splatIndices.get(n),s=this.objectLayerIndices.get(n);for(let e=0;e<n.numPoints;e++)this.transformIndices[t.offset+e]=r,this.layerIndices[t.offset+e]=s;this.data.set(t.data,t.offset*8),n.reattach(t.positions,t.rotations,t.scales,t.colors,t.selection),this.positions.set(t.worldPositions,t.offset*3),this.rotations.set(t.worldRotations,t.offset*4),this.scales.set(t.worldScales,t.offset*3),n.selectedChanged=!1,this.dataChanged=!0}},getWasmModule().then(e=>{if(this.disposed){this.completeInitialBuild();return}this.splatIndices.forEach((t,n)=>{this.disposed||this.buildImmediate(e,n)})}).catch(e=>{console.warn(`RenderData wasm load failed:`,e),this.completeInitialBuild()}),this.pendingInitialBuildCount===0&&this.completeInitialBuild()}updateTransform(e){let t=this.splatIndices.get(e);this.transforms.set(e.matrixWorld.elements,t*20),this.transforms[t*20+16]=e.selected?1:0,e.transformChanged=!1,e.selectedChanged=!1,this.transformsChanged=!0}getObjectsInOrder(){return this.objectsInOrder}canIncrementalAppend(e){if(this.disposed||e.length<=this.objectsInOrder.length)return!1;for(let t=0;t<this.objectsInOrder.length;t++)if(e[t]!==this.objectsInOrder[t])return!1;return!0}appendObjects(e){return __awaiter(this,void 0,void 0,function*(){if(this.disposed)return!1;if(e.length===0)return!0;let t=yield getWasmModule();if(this.disposed)return!1;let n=this.numPoints,r=this.objectsInOrder.length,o=n+e.reduce((e,t)=>e+t.numPoints,0),s=r+e.length;this.numPoints=o,this.height=Math.ceil(2*this.numPoints/this.width),this.data=this.expandUint32Array(this.data,this.width*this.height*4),this.transformsHeight=s,this.transforms=this.expandFloat32Array(this.transforms,this.transformsWidth*this.transformsHeight*4),this.transformIndicesHeight=Math.ceil(this.numPoints/this.transformIndicesWidth),this.transformIndices=this.expandUint32Array(this.transformIndices,this.transformIndicesWidth*this.transformIndicesHeight),this.layerIndicesHeight=Math.ceil(this.numPoints/this.layerIndicesWidth),this.layerIndices=this.expandUint32Array(this.layerIndices,this.layerIndicesWidth*this.layerIndicesHeight),this.positions=this.expandFloat32Array(this.positions,this.numPoints*3),this.rotations=this.expandFloat32Array(this.rotations,this.numPoints*4),this.scales=this.expandFloat32Array(this.scales,this.numPoints*3);let c=e.reduce((e,t)=>Math.max(e,t.maxSHDegree),this.maxShDegree);c>this.maxShDegree&&(this.maxShDegree=c),this.maxShDegree>=1&&(this.sh1=this.expandFloat32Array(this.sh1,this.numPoints*9)),this.maxShDegree>=2&&(this.sh2=this.expandFloat32Array(this.sh2,this.numPoints*15)),this.maxShDegree>=3&&(this.sh3=this.expandFloat32Array(this.sh3,this.numPoints*21));let l=n,u=r;return e.forEach(e=>{this.splatIndices.set(e,u),this.offsets.set(e,l),this.objectsInOrder.push(e);let t=e.gsViewLayerKey||e.uuid,n=this.layerKeyToIndex.get(t);n===void 0&&(n=this.layerKeys.length,this.layerKeys.push(t),this.layerKeyToIndex.set(t,n)),this.objectLayerIndices.set(e,n),e.sh1&&this.sh1&&this.sh1.set(e.sh1,l*9),e.sh2&&this.sh2&&this.sh2.set(e.sh2,l*15),e.sh3&&this.sh3&&this.sh3.set(e.sh3,l*21),l+=e.numPoints,u++}),e.forEach(e=>{this.buildImmediate(t,e)}),!0})}buildImmediate(e,t){if(this.disposed)return;this.updateTransform(t);let n=e._malloc(3*t.numPoints*4),r=e._malloc(4*t.numPoints*4),o=e._malloc(3*t.numPoints*4),s=e._malloc(4*t.numPoints),c=e._malloc(t.numPoints),l=e._malloc(8*t.numPoints*4),u=e._malloc(3*t.numPoints*4),d=e._malloc(4*t.numPoints*4),f=e._malloc(3*t.numPoints*4);e.HEAPF32.set(t.positions,n/4),e.HEAPF32.set(t.rotations,r/4),e.HEAPF32.set(t.scales,o/4),e.HEAPU8.set(t.colors,s),e.HEAPU8.set(t.selection,c),e._pack(t.selected,t.numPoints,n,r,o,s,c,l,u,d,f);let p=new Uint32Array(e.HEAPU32.buffer,l,t.numPoints*8),m=new Float32Array(e.HEAPF32.buffer,u,t.numPoints*3),h=new Float32Array(e.HEAPF32.buffer,d,t.numPoints*4),g=new Float32Array(e.HEAPF32.buffer,f,t.numPoints*3),_=this.splatIndices.get(t),v=this.offsets.get(t),y=this.objectLayerIndices.get(t);for(let e=0;e<t.numPoints;e++)this.transformIndices[v+e]=_,this.layerIndices[v+e]=y;this.data.set(p,v*8),this.positions.set(m,v*3),this.rotations.set(h,v*4),this.scales.set(g,v*3),e._free(n),e._free(r),e._free(o),e._free(s),e._free(c),e._free(l),e._free(u),e._free(d),e._free(f),this.dataChanged=!0,this.pendingInitialBuildCount=Math.max(0,this.pendingInitialBuildCount-1),this.pendingInitialBuildCount===0&&this.completeInitialBuild()}expandFloat32Array(e,t){if(!e)return new Float32Array(t);if(e.length>=t)return e;let n=new Float32Array(t);return n.set(e.subarray(0,e.length)),n}expandUint32Array(e,t){if(!e)return new Uint32Array(t);if(e.length>=t)return e;let n=new Uint32Array(t);return n.set(e.subarray(0,e.length)),n}getSplat(e){let t=null;return this.offsets.forEach((n,r)=>{if(e>=n)t=r;else return}),t}getLocalIndex(e,t){return t-this.offsets.get(e)}dispose(){this.disposed||(this.disposed=!0,this.worker.terminate(),this.completeInitialBuild())}completeInitialBuild(){this.initialBuildComplete||(this.initialBuildComplete=!0),this.resolveReadyPromise&&(this.resolveReadyPromise(),this.resolveReadyPromise=null)}},jsContent=`(function(){function e(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}async function t(e={}){var t,n=e,r=!1,i=!0,a=self.location.href;if(r||i)try{new URL(\`.\`,a).href}catch{}console.log.bind(console),console.error.bind(console);var o=!1;function s(e){for(var t=0,n=e.length,r=new Uint8Array(n),i;t<n;++t)i=e.charCodeAt(t),r[t]=~i>>8&i;return r}var c,l,u=!1;function d(){var e=M.buffer;new Int8Array(e),new Int16Array(e),n.HEAPU8=l=new Uint8Array(e),new Uint16Array(e),new Int32Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=new Float32Array(e),new Float64Array(e),new BigInt64Array(e),new BigUint64Array(e)}function f(){if(n.preRun)for(typeof n.preRun==\`function\`&&(n.preRun=[n.preRun]);n.preRun.length;)T(n.preRun.shift());x(w)}function p(){u=!0,I.c()}function m(){if(n.postRun)for(typeof n.postRun==\`function\`&&(n.postRun=[n.postRun]);n.postRun.length;)C(n.postRun.shift());x(S)}var h;function g(){return s(\`\\0asm\\0\\0\\0\\\`\\\`\\0\\\` \\0\\\`\\0\\0\\x07aa\\0\\0\\0\\0\\x07\\bA\\v\\x07b\\0c\\0d\\0e\\0f\\0\\f
|
|
2292
|
-
|
|
2292
|
+
9T~@A\\b(\\0" \\0B\\x07|Bøÿÿÿ|"BÿÿÿÿX@ §"\\0?\\0AtM\\r \\0\\0\\r\\vA\\bA06\\0A\\vA\\b \\x006\\0 \\vß\\v\\b@ \\0E\\r\\0 \\0A\\bk" \\0Ak(\\0"Axq"\\0j!@ Aq\\r\\0 AqE\\r (\\0"k"A\\b(\\0I\\r \\0 j!\\0@@@A\\b(\\0 G@ (\\f! AÿM@ (\\b"G\\rA\\bA\\b(\\0A~ Avwq6\\0\\f\\v (!\\x07 G@ (\\b" 6\\f 6\\b\\f\\v (" Aj ("E\\r Aj\\v!@ ! "Aj! ("\\r\\0 Aj! ("\\r\\0\\v A\\x006\\0\\f\\v ("AqAG\\rA\\b \\x006\\0 A~q6 \\0Ar6 \\x006\\0\\v 6\\f 6\\b\\f\\vA\\0!\\v \\x07E\\r\\0@ ("At"(¸
|
|
2293
2293
|
F@ A¸
|
|
2294
2294
|
j 6\\0 \\rA\\bA\\b(\\0A~ wq6\\0\\f\\v@ \\x07(F@ \\x07 6\\f\\v \\x07 6\\v E\\r\\v \\x076 ("@ 6 6\\v ("E\\r\\0 6 6\\v O\\r\\0 ("AqE\\r\\0@@@@ AqE@A\\xA0\\b(\\0 F@A\\xA0\\b 6\\0A\\bA\\b(\\0 \\0j"\\x006\\0 \\0Ar6 A\\b(\\0G\\rA\\bA\\x006\\0A\\bA\\x006\\0\\vA\\b(\\0"\\x07 F@A\\b 6\\0A\\bA\\b(\\0 \\0j"\\x006\\0 \\0Ar6 \\0 j \\x006\\0\\v Axq \\0j!\\0 (\\f! AÿM@ (\\b" F@A\\bA\\b(\\0A~ Avwq6\\0\\f\\v 6\\f 6\\b\\f\\v (!\\b G@ (\\b" 6\\f 6\\b\\f\\v (" Aj ("E\\r Aj\\v!@ ! "Aj! ("\\r\\0 Aj! ("\\r\\0\\v A\\x006\\0\\f\\v A~q6 \\0Ar6 \\0 j \\x006\\0\\f\\vA\\0!\\v \\bE\\r\\0@ ("At"(¸
|
|
2295
2295
|
F@ A¸
|
|
@@ -2310,16 +2310,19 @@ j \\x006\\0 \\0\\rA\\b \\x07A~ wq"\\x076\\0\\f\\v@ \\b(F@ \\b \\x00
|
|
|
2310
2310
|
j!@@ \\x07A \\0t"qE@A\\b \\x07r6\\0 6\\0 6\\f\\v A \\0AvkA\\0 \\0AG\\x1Bt!\\0 (\\0!@ "(Axq F\\r \\0Av! \\0At!\\0 Aqj"\\x07("\\r\\0\\v \\x07 6 6\\v 6\\f 6\\b\\f\\v (\\b"\\0 6\\f 6\\b A\\x006 6\\f \\x006\\b\\v A\\bj!\\0\\f\\v@ E\\r\\0@ ("At"(¸
|
|
2311
2311
|
F@ A¸
|
|
2312
2312
|
j \\x006\\0 \\0\\rA\\b \\vA~ wq6\\0\\f\\v@ (F@ \\x006\\f\\v \\x006\\v \\0E\\r\\v \\0 6 ("@ \\0 6 \\x006\\v ("E\\r\\0 \\0 6 \\x006\\v@ AM@ j"\\0Ar6 \\0 j"\\0 \\0(Ar6\\f\\v Ar6 j" Ar6 j 6\\0 \\b@ \\bAxqA°\\bj!\\0A\\b(\\0!A \\bAvt"\\x07 qE@A\\b \\x07r6\\0 \\0\\f\\v \\0(\\b\\v! \\0 6\\b 6\\f \\x006\\f 6\\b\\vA\\b 6\\0A\\b 6\\0\\v A\\bj!\\0\\v
|
|
2313
|
-
Aj$\\0 \\0\\v
|
|
2314
|
-
}
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
A
|
|
2322
|
-
A
|
|
2323
|
-
Ak
|
|
2324
|
-
\\f\\v\\v\\v\\0\\v\\v \\0A\\b\\v\`)}function _(e){return e}function v(e,t){var n,r=_(e);return n=new WebAssembly.Module(r),[new WebAssembly.Instance(n,t),n]}function y(){return{a:P}}function b(){function e(e,t){return I=e.exports,N(I),d(),I}var t=y();return n.instantiateWasm?new Promise((r,i)=>{n.instantiateWasm(t,(t,n)=>{r(e(t,n))})}):(h??=g(),e(v(h,t)[0]))}for(var x=e=>{for(;e.length>0;)e.shift()(n)},S=[],C=e=>S.push(e),w=[],T=e=>w.push(e),E=()=>2147483648,D=(e,t)=>Math.ceil(e/t)*t,O=e=>{var t=(e-M.buffer.byteLength+65535)/65536|0;try{return M.grow(t),d(),1}catch{}},k=e=>{var t=l.length;e>>>=0;var n=E();if(e>n)return!1;for(var r=1;r<=4;r*=2){var i=t*(1+.2/r);if(i=Math.min(i,e+100663296),O(Math.min(n,D(Math.max(e,i),65536))))return!0}return!1},A=new Uint8Array(123),j=25;j>=0;--j)A[48+j]=52+j,A[65+j]=j,A[97+j]=26+j;if(A[43]=62,A[47]=63,n.noExitRuntime&&n.noExitRuntime,n.print&&n.print,n.printErr&&n.printErr,n.wasmBinary&&n.wasmBinary,n.arguments&&n.arguments,n.thisProgram&&n.thisProgram,n.preInit)for(typeof n.preInit==\`function\`&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();var M;function N(e){n._sort=e.d,n._malloc=e.e,n._free=e.f,M=e.b,e.__indirect_function_table}var P={a:k};function F(){f();function e(){n.calledRun=!0,!o&&(p(),c?.(n),n.onRuntimeInitialized?.(),m())}n.setStatus?(n.setStatus(\`Running...\`),setTimeout(()=>{setTimeout(()=>n.setStatus(\`\`),1),e()},1)):e()}var I=b();return F(),t=u?n:new Promise((e,t)=>{c=e}),t}let n;function r(){return e(this,void 0,void 0,function*(){n=yield t()})}let i,a,o,s,c,l,u,d,f,p=0,m=0,h=[],g=!0,_=!1,v=!1,y=!1,b=()=>e(void 0,void 0,void 0,function*(){if(_){v=!0;return}_=!0,v=!1,n||(yield r());let e=2**Math.ceil(Math.log2(i.vertexCount));p<e&&(p>0&&(n._free(a),n._free(s),n._free(c),n._free(l),n._free(u),n._free(d),n._free(f)),p=e,a=n._malloc(64),s=n._malloc(p*4),c=n._malloc(3*p*4),l=n._malloc(p*4),u=n._malloc(p*4),d=n._malloc(p*4),f=n._malloc(p*4)),m<i.transforms.length&&(m>0&&n._free(o),m=i.transforms.length,o=n._malloc(m*4)),_=!1,v&&(v=!1,yield b())}),x=()=>{if(_||v||!n)return;_=!0,n.HEAPF32.set(i.positions,c/4),n.HEAPF32.set(i.transforms,o/4),n.HEAPU32.set(i.transformIndices,s/4),n.HEAPF32.set(new Float32Array(h),a/4),n._sort(a,o,s,i.vertexCount,c,l,u,d,f);let e=new Uint32Array(n.HEAPU32.buffer,u,i.vertexCount),t=new Uint32Array(e.slice().buffer);self.postMessage({depthIndex:t,generation:i.generation},[t.buffer]),_=!1,g=!1},S=()=>{y||(y=!0,g&&x(),setTimeout(()=>{y=!1,S()}))};self.onmessage=e=>new Promise(t=>{if(e.data.warmup){r().finally(()=>t(!0));return}e.data.sortData&&(i={positions:new Float32Array(e.data.sortData.positions),transforms:new Float32Array(e.data.sortData.transforms),transformIndices:new Uint32Array(e.data.sortData.transformIndices),vertexCount:e.data.sortData.vertexCount,generation:e.data.sortData.generation??0},g=!0,b()),e.data.viewProj?(e.data.viewProj.every(e=>h.includes(e))===!1&&(h=e.data.viewProj,g=!0),S(),t(!0)):t(!0)})})();`,blob=typeof self<`u`&&self.Blob&&new Blob([`(self.URL || self.webkitURL).revokeObjectURL(self.location.href);`,jsContent],{type:`text/javascript;charset=utf-8`});function WorkerWrapper(e){let t;try{if(t=blob&&(self.URL||self.webkitURL).createObjectURL(blob),!t)throw``;let n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener(`error`,()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker(`data:text/javascript;charset=utf-8,`+encodeURIComponent(jsContent),{name:e==null?void 0:e.name})}}var vertex_default=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("}rpvv|{-uvtu}-sy|nH}rpvv|{-uvtu}-v{Hnvor-sy|n-}ynV{qr\x07H{vs|z-uvtu}-nz}yr?Q-lr\x07rH{vs|z-uvtu}-nz}yr?Q-ln{s|zH{vs|z-uvtu}-nz}yr?Q-ln{s|zV{qvprH{vs|z-uvtu}-nz}yr?Q-lyn\brV{qvprH{vs|z-uvtu}-nz}yr?Q-luar\x07rH{vs|z-rp?-luar\x07r`v rH{vs|z-v{-lzn\x07`uQrtrrH0vs-[bZlT`lPYV]]R_`-K-=----{vs|z-rp?-lyn\brPyv}}r_n{trh[bZlT`lYNfR_`jH----{vs|z-znA-lpyv}}rZnvprV{rrh[bZlT`lPYV]]R_`jH0r{qvs{vs|z-rp?-r|yv|{Hn\bv{t-rpA-P|y|Hn\bv{t-rp?-]|vv|{Hn\bv{t-rp?-bH<<参考Tnvn{`}yn@qp|{-sy|n-\0E-J-\05E;=6H<<原版的固定xr{ry`v r,不要轻易调整这个数p|{-sy|n-xr{ry?Q`v r-J-=;@Hp|{-sy|n-zn\x07`prr{`}npr`}yn`v r-J-?=AE;=H<<固定的u相关系数p|{-sy|n-`UlP>-J-=;AEEC=?B>>F=?F>FFHp|{-sy|n-`UlP?l=-J->;=F?BAEAHp|{-sy|n-`UlP?l>-J-:>;=F?BAEAHp|{-sy|n-`UlP?l?-J-=;@>B@F>CHp|{-sy|n-`UlP?l@-J-:>;=F?BAEAHp|{-sy|n-`UlP?lA-J-=;BAC?DA?Hrp?-tr`UQnnbc5v{-}ynVq\x079-v{-p|z}|{r{\\ssr9-rp?-r\x07r`v r6-\n----v{-uP|z}|{r{P|{-J-=H----vs-5lzn\x07`uQrtrr-KJ->6-uP|z}|{r{P|{-8J-FH----vs-5lzn\x07`uQrtrr-KJ-?6-uP|z}|{r{P|{-8J->BH----vs-5lzn\x07`uQrtrr-KJ-@6-uP|z}|{r{P|{-8J-?>H--------v{-}nqqrqP|z}|{r{P|{-J-uP|z}|{r{P|{H----vs-5}nqqrqP|z}|{r{P|{-2-A-.J-=6-\n--------}nqqrqP|z}|{r{P|{-J-55}nqqrqP|z}|{r{P|{-<-A6-8->6-7-AH----\f--------sy|n-yv{rnP|z}|{r{V{qr\x07-J-sy|n5}ynVq\x07-7-}nqqrqP|z}|{r{P|{-8-p|z}|{r{\\ssr6H----sy|n-r\x07ryV{qr\x07-J-yv{rnP|z}|{r{V{qr\x07-<-A;=H------sy|n-q-J-r\x07ryV{qr\x07-<-r\x07r`v r;\x07H----sy|n-\b-J-sy||5q6-<-r\x07r`v r;\bH----sy|n-\x07-J-snp5q6H----r{-rp?5\x079-\b6H\f|vq-znv{-56-\n----v{-}ynV{qr\x07b-J-v{5}ynV{qr\x07-8-=;B6H----v{-}ynV{qr\x07V-J-v{5}ynV{qr\x07b6H----rpA-pr{-J-r\x07rySrpu5lr\x07r9-vrp?55}ynV{qr\x07b-3-=\x07@ss6-II->9-}ynV{qr\x07b-KK->=69-=6H--------v{-n{s|zV{qr\x07-J-r\x07rySrpu5ln{s|zV{qvpr9-vrp?5}ynV{qr\x07b-3-=\x07@ss9-}ynV{qr\x07b-KK->=69-=6;\x07H----znA-n{s|z-J-znA5--------r\x07rySrpu5ln{s|z9-vrp?5=9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5>9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5?9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5@9-n{s|zV{qr\x0769-=6----6H----znA-n{s|zZ|qrycvrZnv\x07-J-vrZnv\x07-7-n{s|zH----rp@-}ynPr{r-J-v{Ova|Sy|n5pr{;\x07\b 6H----rpA-|yqPr{r-J-n{s|z-7-rpA5}ynPr{r9->;=6H----0vs-[bZlT`lPYV]]R_`-K-=----v{-yn\brV{qr\x07-J-v{5r\x07rySrpu5lyn\brV{qvpr9-vrp?5}ynV{qr\x07b-3-=\x07@ss9-}ynV{qr\x07b-KK->=69-=6;\x076H----vs-5yn\brV{qr\x07-KJ-=-33-yn\brV{qr\x07-I-[bZlT`lYNfR_`6-\n--------rp?-pyv}_n{tr-J-lyn\brPyv}}r_n{trhyn\brV{qr\x07jH--------v{-pyv}`n-J-v{5pyv}_n{tr;\x07-8-=;B6H--------v{-pyv}P|{-J-v{5pyv}_n{tr;\b-8-=;B6H--------v{-pyv}R{q-J-pyv}`n-8-pyv}P|{H--------s|-5v{-v-J-=H-v-I-[bZlT`lPYV]]R_`H-v886-\n----------------vs-5v-I-pyv}`n-\v\v-v-KJ-pyv}R{q6-\n--------------------p|{v{rH----------------\f----------------rpA-pyv}}r]|vv|{-J-lpyv}}rZnvprV{rrhvj-7-|yqPr{rH----------------o||y-pyv}}rq-J-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH----------------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH----------------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH----------------vs-5pyv}}rq6-\n--------------------tyl]|vv|{-J-rpA5=;=9-=;=9-?;=9->;=6H--------------------r{H----------------\f--------\f----\f----0r{qvs----rpA-vrPr{r-J-n{s|zZ|qrycvrZnv\x07-7-rpA5}ynPr{r9->;=6H----rpA-pyv}Pr{r-J-}|wrpv|{Znv\x07-7-vrPr{rH----<<剔除超出视锥体的}yn----sy|n-pyv}-J->;?-7-pyv}Pr{r;H----vs-5pyv}Pr{r; -I-:pyv}Pr{r;-\v\v-pyv}Pr{r; -K-pyv}Pr{r;-\v\v---------pyv}Pr{r;\x07-I-:pyv}-\v\v-pyv}Pr{r;\x07-K-pyv}-\v\v---------pyv}Pr{r;\b-I-:pyv}-\v\v-pyv}Pr{r;\b-K-pyv}6-\n--------tyl]|vv|{-J-rpA5=;=9-=;=9-?;=9->;=6H--------r{H----\f----rp@-{qpPr{r-J-pyv}Pr{r;\x07\b -<-pyv}Pr{r;H----rp?-s|pny-J-rp?5--------}|wrpv|{Znv\x07h=jh=j-7-r|yv|{;\x07-7-=;B9--------}|wrpv|{Znv\x07h>jh>j-7-r|yv|{;\b-7-=;B----6H--------]|vv|{-J-}|vv|{;\x07\bH----<<-读取协方差数据(使用-unys?\x07>C-打包)----rpA-p|-J-r\x07rySrpu5lr\x07r9-vrp?555}ynV{qr\x07b-3-=\x07@ss6-II->6-\v->9-}ynV{qr\x07b-KK->=69-=6H----rp?->-J-{}npxUnys?\x07>C5p|;\x076H-----rp?-?-J-{}npxUnys?\x07>C5p|;\b6H------rp?-@-J-{}npxUnys?\x07>C5p|; 6H----------sy|n-Z>>-J->;\x07-<-A;=H----sy|n-Z>?-J->;\b-<-A;=H----sy|n-Z>@-J-?;\x07-<-A;=H----sy|n-Z??-J-?;\b-<-A;=H----sy|n-Z?@-J-@;\x07-<-A;=H----sy|n-Z@@-J-@;\b-<-A;=H--------zn@-cx-J-zn@5--------Z>>9-Z>?9-Z>@9--------Z>?9-Z??9-Z?@9----------Z>@9-Z?@9-Z@@-------6H----<<-判断是否是正交模式:透视时-}|wrpv|{Znv\x07h@jh@j-J-=,正交时-J->----o||y-v\\u|tn}uvp-J-}|wrpv|{Znv\x07h@jh@j-K-=;DH----sy|n-n{vznv|{]|tr-J--}|wrpv|{Znv\x07h@jh@jH----zn@-WH----vs-5v\\u|tn}uvp6-\n--------<<-正交模式的雅可比矩阵--------W-J-n{}|r5zn@5------------s|pny;\x079-=;=9-=;=9------------=;=9-s|pny;\b9-=;=9------------=;=9-=;=9-=;=--------66H----\f-ryr-\n--------<<-透视模式的雅可比矩阵--------sy|n--J->;=-<-5vrPr{r; -7-vrPr{r; 6H--------W-J-zn@5------------s|pny;\x07-<-vrPr{r; 9-=;=9-:5s|pny;\x07-7-vrPr{r;\x076-7-9------------=;=9-s|pny;\b-<-vrPr{r; 9-:5s|pny;\b-7-vrPr{r;\b6-7-9------------=;=9-=;=9-=;=--------6H----\f----zn@-d-J-n{}|r5zn@5n{s|zZ|qrycvrZnv\x0766H----zn@-a-J-d-7-WH----<<-将-@Q-协方差矩阵变换为-?Q-协方差矩阵----zn@-p|?Qz-J-n{}|r5a6-7-cx-7-aH----p|?Qzh=jh=j-8J-xr{ry?Q`v rH----p|?Qzh>jh>j-8J-xr{ry?Q`v rH----rp@-p|?Q-J-rp@5p|?Qzh=jh=j9-p|?Qzh=jh>j9-p|?Qzh>jh>j6H----sy|n-n-J-p|?Q;\x07H----sy|n-q-J-p|?Q; H----sy|n-o-J-p|?Q;\bH----sy|n-Q-J-n-7-q-:-o-7-oH----sy|n-npr-J-n-8-qH----sy|n-npr\\r?-J-=;B-7-nprH----sy|n-rz?-J-\05zn\x075=;>9-npr\\r?-7-npr\\r?-:-Q66H----sy|n-rvtr{cnyr>-J-npr\\r?-8-rz?H----sy|n-rvtr{cnyr?-J-npr\\r?-:-rz?H----vs-5rvtr{cnyr?-IJ-=;=6-\n--------r{H----\f----rp?-rvtr{crp|>-J-{|znyv r5rp?5o9-rvtr{cnyr>-:-n66H----rp?-rvtr{crp|?-J-rp?5rvtr{crp|>;\b9-:rvtr{crp|>;\x076H----rp?-onvcrp|>-J-rvtr{crp|>--7-zv{5\0E-7-\05rvtr{cnyr>69-zn\x07`prr{`}npr`}yn`v r6H----rp?-onvcrp|?-J-rvtr{crp|?--7-zv{5\0E-7-\05rvtr{cnyr?69-zn\x07`prr{`}npr`}yn`v r6H----rp?-onvcvr}|-J-rp?5>;=-<-r|yv|{;\x079->;=-<-r|yv|{;\b6H----rp?-{qp\\ssr-J-rp?5]|vv|{;\x07-7-onvcrp|>-8-]|vv|{;\b-7-onvcrp|?6-7---------------------onvcvr}|-7-?;=H----rpA-\0nq]|-J-rpA5{qpPr{r;\x07\b-8-{qp\\ssr9-{qpPr{r; 9->;=6H----tyl]|vv|{-J-\0nq]|H----<<-读取颜色----rpA-p|y|-J-rpA5--------5p|;6-3-=\x07ss9--------5p|;-KK-E6-3-=\x07ss9--------5p|;-KK->C6-3-=\x07ss9--------5p|;-KK-?A6-3-=\x07ss----6-<-?BB;=H----<<应用球谐光照,目前只兼容=>?----vs-5lzn\x07`uQrtrr-KJ->6-\n--------rp@-pnzrn]|V{\\owrp-J-rp@5v{rr5n{s|z6-7-rpA5pnzrn]|vv|{9->;=66H--------rp@-|owrpcvrQv-J-{|znyv r5}ynPr{r-:-pnzrn]|V{\\owrp6H----------------rpA-u=>?@-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-=9-luar\x07r`v r66H----------rpA-uABCD-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-A9-luar\x07r`v r66H----------rpA-uEF>=>>-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-E9-luar\x07r`v r66H-----------------rp@-u>-J-u=>?@;toH-----------------------------------rp@-u?-J-rp@5u=>?@;n9-uABCD;t6H---------------------rp@-u@-J-rp@5uABCD;on9-uEF>=>>;6H-----------------------------sy|n-\x07-J-|owrpcvrQv;\x07H--------sy|n-\b-J-|owrpcvrQv;\bH--------sy|n- -J-|owrpcvrQv; H--------rp@-uP|y|-J-u>-7-5:=;AEEC=?B-7-\b6-8-u?-7-5=;AEEC=?B-7- 6-8-u@-7-5:=;AEEC=?B-7-\x076H--------p|y|;to-8J-uP|y|H----------------vs-5lzn\x07`uQrtrr-KJ-?6-\n----------------------rpA-u>?>@>A>B-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9->?9-luar\x07r`v r66H------------rpA-u>C>D>E>F-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9->C9-luar\x07r`v r66H-------------rpA-u?=?>???@-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-?=9-luar\x07r`v r66H-------------------------rp@-uA-J-uEF>=>>;tonH------------------------------------rp@-uB-J-u>?>@>A>B;toH----------------------------------rp@-uC-J-rp@5u>?>@>A>B;n9-u>C>D>E>F;t6H---------------rp@-uD-J-rp@5u>C>D>E>F;on9-u?=?>???@;6H---------------rp@-uElqrt?-J-u?=?>???@;tonH-----------------------------------------sy|n-\x07\x07-J-\x07-7-\x07H------------sy|n-\b\b-J-\b-7-\bH------------sy|n- -J- -7- H------------sy|n-\x07\b-J-\x07-7-\bH------------sy|n-\b -J-\b-7- H------------sy|n-\x07 -J-\x07-7- H------------------------p|y|;to-8J----------------5`UlP?l=-7-\x07\b6-7-uA-8----------------5`UlP?l>-7-\b 6-7-uB-8----------------5`UlP?l?-7-5?;=-7- -:-\x07\x07-:-\b\b66-7-uC-8----------------5`UlP?l@-7-\x07 6-7-uD-8----------------5`UlP?lA-7-5\x07\x07-:-\b\b66-7-uElqrt?H--------\f----\f--------p|y|;to-J-pynz}5p|y|;to9-rp@5=;=69-rp@5>;=66H----P|y|-J-p|y|H----]|vv|{-7J-\0EH----b-J-}|vv|{;\x07\bH\f"),fragment_default=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(`}rpvv|{-uvtu}-sy|nH0v{pyqr-Ip|zz|{Kn\bv{t-rpA-P|y|Hn\bv{t-rp?-]|vv|{Hn\bv{t-rp?-bH|vq-znv{-56-
|
|
2325
|
-
----<<-计算从-}yn-中心到当前片段的平方距离----<<-由于-]|vv|{-已经按-\05E6-缩放,平方结果会被缩放-E-倍----<<-如果平方结果大于-E,说明在椭圆外,距离均值超过-\05E6-个标准差----sy|n-N-J-q|5]|vv|{9-]|vv|{6H----vs-5N-K-E;=6-qvpnqH--------rp@-p|y|-J-P|y|;toH--------<<-由于渲染的-}yn-按-\05E6-缩放,高斯公式中的逆协方差矩阵部分变成单位矩阵----<<-因此只剩下-5e-:-zrn{6-7-5e-:-zrn{6,而-zrn{-为零,所以是-e-7-e,即-N----sy|n-|}npv\b-J-r\x07}5:=;B-7-N6-7-P|y|;nH--------tylSntP|y|-J-rpA5p|y|;to9-|}npv\b6H\f`),PBMGaussianSplattingRenderMesh=class extends three.Mesh{constructor(){super(),this.renderData=null,this.needsRender=!1,this.sortWorker=null,this.depthIndex=new Uint32Array,this.splatIndexCapacity=0,this.activeSlot=null,this.pendingSlot=null,this.rebuildGeneration=0,this.forceClipperUniformRefresh=!1,this.incrementalUpdateInFlight=!1,this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.usedSHDegree=0,this.onBeforeRender=(e,t,n)=>{let r=n,o=this.collectObjects(t);if(o.length===0){this.geometry.instanceCount=0;return}let s=0;o.forEach(e=>{e.usedSHDegree>s&&(s=e.usedSHDegree)}),this.setMaxShDegree(s),this.isSceneNeedsRebuild(o)&&(this.tryStartIncrementalUpdate(o)||(this.startPendingRebuild(o),this.gsSceneState.lastClipperHash=``));let c=o.filter(e=>e.transformChanged);c.length>0&&(this.syncTransformsForSlot(this.activeSlot,c),this.syncTransformsForSlot(this.pendingSlot,c),c.forEach(e=>{e.transformChanged=!1,e.selectedChanged=!1})),this.activeSlot&&this.updateSlotTextures(this.activeSlot),this.pendingSlot&&this.updateSlotTextures(this.pendingSlot);let l=new three.Matrix4().multiplyMatrices(r.perspectiveProjectionMatrix,r.matrixWorldInverse).elements;this.pendingSlot&&this.pendingSlot.renderData.initialBuildComplete&&this.pendingSlot.awaitingFirstSort?this.requestSort(this.pendingSlot,l):this.activeSlot&&this.requestSort(this.activeSlot,l);let u=this.getClipperHash(o);if((this.forceClipperUniformRefresh||u!==this.gsSceneState.lastClipperHash)&&(this.updateClipperUniforms(o),this.gsSceneState.lastClipperHash=u,this.forceClipperUniformRefresh=!1,this.needsRender=!0),this.activeSlot){let e=Math.min(this.usedSHDegree,this.activeSlot.renderData.maxShDegree);this.material.uniforms.u_maxShDegree.value=e,e>0&&!this.activeSlot.textures.shTexture?this.createSHTexture(this.activeSlot):e===0&&this.activeSlot.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture,this.renderData=this.activeSlot.renderData}else this.pendingSlot||(this.bindSlotTextures(null),this.material.uniforms.u_maxShDegree.value=0,this.geometry.instanceCount=0);this.material.uniforms.resolution.value.set(r.resolution.x,r.resolution.y)};let e=this.createGeometry(),t=this.createMaterial();this.geometry=e,this.material=t,this.frustumCulled=!1,this.renderOrder=-99999999999,this.gsSceneState={lastObjectsHash:``,lastClipperHash:``},this.sortWorker=new WorkerWrapper,this.sortWorker.postMessage({warmup:!0}),RenderData.warmupWasm(),this.sortWorker.onmessage=e=>{if(e.data.depthIndex){let t=e.data.generation;if(this.pendingSlot&&t===this.pendingSlot.generation){this.pendingSlot.awaitingFirstSort=!1,this.swapPendingToActive(e.data.depthIndex);return}this.activeSlot&&t===this.activeSlot.generation&&(this.activeSlot.awaitingFirstSort=!1,this.applyDepthIndex(e.data.depthIndex))}}}ensureSplatIndexCapacity(e){let t=this.geometry.getAttribute(`splatIndex`);if(e<=this.splatIndexCapacity)return t;let n=this.getExpandedCapacity(e),r=t.array,o=new Float32Array(n);o.set(r.subarray(0,Math.min(r.length,n)));let s=new three.InstancedBufferAttribute(o,1,!1,1);return s.setUsage(three.DynamicDrawUsage),this.geometry.setAttribute(`splatIndex`,s),this.splatIndexCapacity=n,this.geometry._maxInstanceCount=n,s}getExpandedCapacity(e){let t=Math.max(this.splatIndexCapacity,1);for(;t<e;)t*=2;return t}createGeometry(){let e=new three.InstancedBufferGeometry,t=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]);e.setAttribute(`position`,new three.BufferAttribute(t,3));let n=new Uint16Array([0,1,2,0,2,3]);e.setIndex(new three.BufferAttribute(n,1)),this.splatIndexCapacity=1;let r=new Float32Array(this.splatIndexCapacity);for(let e=0;e<r.length;e++)r[e]=e;let o=new three.InstancedBufferAttribute(r,1,!1,1);return o.setUsage(three.DynamicDrawUsage),e.setAttribute(`splatIndex`,o),e._maxInstanceCount=this.splatIndexCapacity,e.instanceCount=0,e}createMaterial(){return new three.ShaderMaterial({vertexShader:vertex_default,fragmentShader:fragment_default,defines:{NUM_GS_LAYERS:0,NUM_GS_CLIPPERS:0},uniforms:{u_texture:{value:null},u_transforms:{value:null},u_transformIndices:{value:null},u_layerIndices:{value:null},u_numGsLayers:{value:0},u_numGsClippers:{value:0},u_layerClipperRanges:{value:[]},u_clipperMatricesInverse:{value:[]},u_shTexture:{value:null},u_shTextureSize:{value:new three.Vector2},u_maxShDegree:{value:0},resolution:{value:new three.Vector2}},side:three.DoubleSide,transparent:!0,blending:three.NormalBlending,depthTest:!0,depthWrite:!1})}createDefaultLayerClipperRanges(e){return Array.from({length:e},()=>new three.Vector2(-1,0))}createDefaultClipperMatrices(e){return Array.from({length:e},()=>new three.Matrix4)}createTextures(e){let t=new three.DataTexture(e.data,e.width,e.height,three.RGBAIntegerFormat,three.UnsignedIntType);t.internalFormat=`RGBA32UI`,t.minFilter=three.NearestFilter,t.magFilter=three.NearestFilter,t.needsUpdate=!0;let n=new three.DataTexture(e.transforms,e.transformsWidth,e.transformsHeight,three.RGBAFormat,three.FloatType);n.internalFormat=`RGBA32F`,n.minFilter=three.NearestFilter,n.magFilter=three.NearestFilter,n.needsUpdate=!0;let r=new three.DataTexture(e.transformIndices,e.transformIndicesWidth,e.transformIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);r.internalFormat=`R32UI`,r.minFilter=three.NearestFilter,r.magFilter=three.NearestFilter,r.needsUpdate=!0;let o=new three.DataTexture(e.layerIndices,e.layerIndicesWidth,e.layerIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);return o.internalFormat=`R32UI`,o.minFilter=three.NearestFilter,o.magFilter=three.NearestFilter,o.needsUpdate=!0,{dataTexture:t,transformsTexture:n,transformIndicesTexture:r,layerIndicesTexture:o,shTexture:null}}createSHTexture(e){let{renderData:t,textures:n}=e;n.shTexture&&(n.shTexture.dispose(),n.shTexture=null);let r=Math.min(this.usedSHDegree,t.maxShDegree),o=0;if(r>=1&&(o+=9),r>=2&&(o+=15),r>=3&&(o+=21),o===0)return;let s=4,c=o;c%4!=0&&(c=Math.ceil(c/4)*4);let l=t.numPoints*c/4,u=2048,d=Math.ceil(l/u),f=new Float32Array(u*d*4);for(let e=0;e<t.numPoints;e++){let n=c/4*e,o=0;if(t.sh1&&r>=1)for(let r=0;r<9;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh1[e*9+r],o++}if(t.sh2&&r>=2)for(let r=0;r<15;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh2[e*15+r],o++}if(t.sh3&&r>=3)for(let r=0;r<21;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh3[e*21+r],o++}}n.shTexture=new three.DataTexture(f,u,d,three.RGBAFormat,three.FloatType),n.shTexture.internalFormat=`RGBA32F`,n.shTexture.minFilter=three.NearestFilter,n.shTexture.magFilter=three.NearestFilter,n.shTexture.needsUpdate=!0,this.material.uniforms.u_shTextureSize.value.set(u,d),this.material.uniforms.u_maxShDegree.value=r}setMaxShDegree(e){var t,n;if(e<0||e>2){console.warn(`现在只支持012三种阶数,你输入的是${e}`);return}let r=this.usedSHDegree;this.usedSHDegree=e,r!==e&&((t=this.activeSlot)!=null&&t.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),(n=this.pendingSlot)!=null&&n.textures.shTexture&&(this.pendingSlot.textures.shTexture.dispose(),this.pendingSlot.textures.shTexture=null),this.material.uniforms.u_maxShDegree.value=e,e===0?this.material.uniforms.u_shTexture.value=null:this.activeSlot&&this.activeSlot.renderData.maxShDegree>0&&(this.createSHTexture(this.activeSlot),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture))}bindSlotTextures(e){if(!e){this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.material.uniforms.u_texture.value=null,this.material.uniforms.u_transforms.value=null,this.material.uniforms.u_transformIndices.value=null,this.material.uniforms.u_layerIndices.value=null,this.material.uniforms.u_shTexture.value=null;return}this.dataTexture=e.textures.dataTexture,this.transformsTexture=e.textures.transformsTexture,this.transformIndicesTexture=e.textures.transformIndicesTexture,this.layerIndicesTexture=e.textures.layerIndicesTexture,this.shTexture=e.textures.shTexture,this.material.uniforms.u_texture.value=this.dataTexture,this.material.uniforms.u_transforms.value=this.transformsTexture,this.material.uniforms.u_transformIndices.value=this.transformIndicesTexture,this.material.uniforms.u_layerIndices.value=this.layerIndicesTexture,this.material.uniforms.u_shTexture.value=this.shTexture}disposeSlot(e){e&&(e.renderData.dispose(),this.disposeTextures(e.textures))}disposeTextures(e){e.dataTexture.dispose(),e.transformsTexture.dispose(),e.transformIndicesTexture.dispose(),e.layerIndicesTexture.dispose(),e.shTexture&&(e.shTexture.dispose(),e.shTexture=null)}applyDepthIndex(e){this.depthIndex=e;let t=this.depthIndex.length,n=this.ensureSplatIndexCapacity(t);n.array.set(this.depthIndex,0),n.count=this.depthIndex.length,n.updateRange.offset=0,n.updateRange.count=t,n.needsUpdate=!0,this.geometry.instanceCount=this.depthIndex.length,this.needsRender=!0}swapPendingToActive(e){if(!this.pendingSlot)return;let t=this.activeSlot;this.activeSlot=this.pendingSlot,this.pendingSlot=null,this.renderData=this.activeSlot.renderData,this.ensureSplatIndexCapacity(this.activeSlot.renderData.numPoints),this.bindSlotTextures(this.activeSlot),this.activeSlot.sortDataUploaded=!0,this.forceClipperUniformRefresh=!0,this.applyDepthIndex(e),t&&this.disposeSlot(t)}createSlot(e){let t={generation:e.generation,renderData:e,textures:this.createTextures(e),awaitingFirstSort:!0,sortDataUploaded:!1};return this.usedSHDegree>0&&e.maxShDegree>0&&this.createSHTexture(t),t}updateSlotTextures(e){e.renderData.dataChanged&&(e.textures.dataTexture.needsUpdate=!0,e.renderData.dataChanged=!1),e.renderData.transformsChanged&&(e.textures.transformsTexture.needsUpdate=!0,e.textures.transformIndicesTexture.needsUpdate=!0,e.renderData.transformsChanged=!1)}postSortData(e){var t;let n=new Float32Array(e.renderData.positions.slice().buffer),r=new Float32Array(e.renderData.transforms.slice().buffer),o=new Uint32Array(e.renderData.transformIndices.slice().buffer);(t=this.sortWorker)==null||t.postMessage({sortData:{positions:n,transforms:r,transformIndices:o,vertexCount:e.renderData.numPoints,generation:e.generation}},[n.buffer,r.buffer,o.buffer]),e.sortDataUploaded=!0}requestSort(e,t){var n;e.renderData.initialBuildComplete&&((e.renderData.dataChanged||e.renderData.transformsChanged||!e.sortDataUploaded)&&this.postSortData(e),(n=this.sortWorker)==null||n.postMessage({viewProj:t}))}syncTransformsForSlot(e,t){e&&t.forEach(t=>{e.renderData.splatIndices.has(t)&&e.renderData.updateTransform(t)})}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t.sort((e,t)=>{let n=e.uuid+e.gsViewLayerKey,r=t.uuid+t.gsViewLayerKey;return n<r?-1:n>r?1:0}),t}isSceneNeedsRebuild(e){let t=e.map(e=>`${e.uuid}:${e.gsViewLayerKey}`).join(`|`),n=t!==this.gsSceneState.lastObjectsHash;return this.gsSceneState.lastObjectsHash=t,n}getClipperHash(e){return e.map(e=>{let t=e.gsClippers.map(e=>{var t;return`${(t=e.floorIndex)==null?-1:t}:${e.clippingBoxMatrix.elements.join(`,`)}`}).join(`;`);return`${e.gsViewLayerKey}:${t}`}).join(`|`)}updateClipperCounts(e,t){let n=Math.max(0,e|0),r=Math.max(0,t|0),o=this.material.defines;(o.NUM_GS_LAYERS!==n||o.NUM_GS_CLIPPERS!==r)&&(o.NUM_GS_LAYERS=n,o.NUM_GS_CLIPPERS=r,this.material.needsUpdate=!0),this.material.uniforms.u_numGsLayers.value=e,this.material.uniforms.u_numGsClippers.value=t}updateClipperUniforms(e){var t,n,r,o;let s=(n=(t=this.activeSlot)==null?void 0:t.renderData)==null?null:n;if(!s){this.material.uniforms.u_layerClipperRanges.value=[],this.material.uniforms.u_clipperMatricesInverse.value=[],this.updateClipperCounts(0,0);return}let c=new Map;for(let t of e)c.has(t.gsViewLayerKey)||c.set(t.gsViewLayerKey,t.gsClippers);let l=s.layerKeys.length,u=0;for(let e of s.layerKeys)u+=((r=c.get(e))==null?[]:r).length;let d=this.createDefaultLayerClipperRanges(l),f=this.createDefaultClipperMatrices(u),p=0;for(let e of s.layerKeys){let t=s.layerKeyToIndex.get(e);if(t===void 0)continue;let n=(o=c.get(e))==null?[]:o,r=p,l=0;for(let e of n)f[p].getInverse(e.clippingBoxMatrix),p++,l++;l>0&&d[t].set(r,l)}this.material.uniforms.u_layerClipperRanges.value=d,this.material.uniforms.u_clipperMatricesInverse.value=f,this.updateClipperCounts(l,p)}startPendingRebuild(e){this.pendingSlot&&(this.disposeSlot(this.pendingSlot),this.pendingSlot=null),this.rebuildGeneration+=1;let t=new RenderData(e,this.rebuildGeneration);this.pendingSlot=this.createSlot(t)}tryStartIncrementalUpdate(e){if(!this.activeSlot||this.pendingSlot||this.incrementalUpdateInFlight)return!1;let t=this.activeSlot.renderData.getObjectsInOrder();if(!this.activeSlot.renderData.canIncrementalAppend(e))return!1;let n=e.slice(t.length);if(n.length===0)return!1;this.incrementalUpdateInFlight=!0;let r=this.activeSlot;return r.renderData.appendObjects(n).then(e=>{if(!e||this.activeSlot!==r||r.renderData.disposed)return;let t=r.textures;r.textures=this.createTextures(r.renderData),this.usedSHDegree>0&&r.renderData.maxShDegree>0&&this.createSHTexture(r),this.bindSlotTextures(r),this.ensureSplatIndexCapacity(r.renderData.numPoints),r.sortDataUploaded=!1,r.awaitingFirstSort=!0,this.disposeTextures(t),this.forceClipperUniformRefresh=!0,this.gsSceneState.lastClipperHash=``,this.needsRender=!0}).catch(e=>{console.warn(`Incremental append failed, fallback to rebuild:`,e)}).finally(()=>{this.incrementalUpdateInFlight=!1}),!0}dispose(){this.disposeSlot(this.pendingSlot),this.pendingSlot=null,this.disposeSlot(this.activeSlot),this.activeSlot=null,this.renderData=null,this.sortWorker&&this.sortWorker.terminate(),this.bindSlotTextures(null),this.geometry.dispose(),this.material.dispose()}},PBMGaussianSplattingTestMesh=class extends three.Mesh{constructor(){super(),this.onBeforeRender=(e,t,n)=>{this.collectObjects(t).length>0&&console.warn(`未开启webgl2, 3dgs仅支持在开启webgl2模式后使用`)}}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t}},DEFAULT_MODE_CHANGE_DURATION=1e3,DEFAULT_CAMERA_FOV=90,DEFAULT_REQUEST_PROXY=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),scratchSphere=new three.Sphere,scratchBox3=new three.Box3,scratchViewport=new three.Vector4,scratchScissor=new three.Vector4,scratchClearColor=new three.Color,scratchRenderSize=new three.Vector2,worksMap=new WeakMap,emptyWorks=createWorks([parseWork(null)]),Five_Instances={},Five=class e extends Subscribe{static get version(){return`6.8.0-alpha.24`}static get dracoPath(){return draco.decoderPath}static set dracoPath(e){draco.setDecoderPath(e)}static get ktx2Path(){return ktx2.transcoderPath}static set ktx2Path(e){ktx2.setTranscoderPath(e)}static get useNativeImageBitmap(){return canUseNativeImageBitmap()}static set useNativeImageBitmap(e){useNativeImageBitmap(e)}constructor(e={}){var t,n,r,o,s,c,l,u,d,f,p;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=createUuid(),Five_Instances[this.fiveId]=this,this.currentUpdateArgs={time:now(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!1,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(o=e.poweredByRealsee)==null?!0:o,this.backgroundColor=new three.Color((s=e.backgroundColor)==null?1579548:s),this.backgroundAlpha=(c=e.backgroundAlpha)==null?1:c,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:now()},this.modeChangeDuration=(l=e.modeChangeDuration)==null?DEFAULT_MODE_CHANGE_DURATION:l,this.enableWheel=(u=e.enableWheel)==null?!0:u,typeof window<`u`)if(`renderer`in e)e.renderer instanceof InternalWebGLRenderer&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new InternalWebGLRenderer({preserveDrawingBuffer:e.preserveDrawingBuffer,antialias:e.antialias,webgl2:e.webgl2,logarithmicDepthBuffer:e.logarithmicDepthBuffer,precision:e.precision,powerPreference:e.powerPreference});let t=getViewportScale();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new three.WebGLRenderTarget(1,1,{encoding:(f=(d=this.renderer)==null?void 0:d.outputEncoding)==null?three.sRGBEncoding:f,generateMipmaps:!1}),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new Camera(DEFAULT_CAMERA_FOV),this.scene=new Scene,this.xrCustomObjectsScene=new three.Scene,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.loadWorkTask=Promise.resolve(),this.requestProxy=(p=e.requestProxy)==null?DEFAULT_REQUEST_PROXY:p,this.networkSubscribe=new NetworkSubscribe,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var o;this.emit(`network.resource`,createEvent(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(o=this.analysis)==null||o.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new three.Group,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),worksMap.set(this,emptyWorks),this.modelScene=new ModelScene({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[m]=this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0});defineProperty(m,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new three.VideoTexture(e.videoInstance||generateDefaultVideoElement());let h=initLights();this.scene.add(h),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=AnimationFrameLoop.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let g=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{}))},_=()=>{this.needsRender=!0};if(typeof document<`u`&&document.addEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,_,!1),this.removeEventListeners=()=>{typeof document<`u`&&document.removeEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,_,!1)},this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}initLegacyEvent(this),this.fiveRenderer=new FiveRenderer,this.adaptiveLuminancePass=new AdaptiveLuminancePass,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new EyeDomeLightingPass(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),e.webgl2?(this.pbmGaussianSplattingRenderMesh=new PBMGaussianSplattingRenderMesh,this.scene.add(this.pbmGaussianSplattingRenderMesh)):this.scene.add(new PBMGaussianSplattingTestMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}get panoId(){return panoStringify(this.pano)}dispose(){var e;if(this.destroyed===!0)return;delete Five_Instances[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),this.scene.dispose(),this.xrCustomObjectsScene.dispose(),worksMap.set(this,emptyWorks),this.renderer&&this.renderer.render(new three.Scene,new three.Camera),this.fiveRenderer.dispose(),this.renderer instanceof InternalWebGLRenderer&&(this.renderer.forceContextLoss&&this.renderer.forceContextLoss(),this.renderer.dispose())}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,createEvent(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,omitUndefinedFields(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,omitUndefinedFields(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,omitUndefinedFields(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,omitUndefinedFields(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,omitUndefinedFields(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,omitUndefinedFields(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof InternalWebGLRenderer)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,o;if(!this.renderer)return;let s=this.renderer.domElement.parentNode,{width:c=(n=s==null?void 0:s.offsetWidth)==null?512:n,height:l=(r=s==null?void 0:s.offsetHeight)==null?512:r}=e;if(c=Math.max(1,c),l=Math.max(1,l),!t){let e=getViewportScale(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(o=e===1?n:1)==null?1:o,t>1){let e=Math.max(c,l)*t,n=Math.min(this.renderer.capabilities.maxTextureSize,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(c,l),this.needsRender=!0;let u=now(),d=u-this.currentUpdateArgs.time,f=this.currentUpdateArgs.args;this.updateTime(u,d,...f)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return worksMap.get(this)||emptyWorks}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let o=this.loadWorkTask.then(()=>isPromise(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=o.catch(e=>{this.throwError(e)}),o}load_(t,n,r,o=!0){var s,c,l,u,d,f,p,m,h,g;let _={};typeof r==`number`?_.duration=r:typeof r==`object`&&Object.assign(_,r),this.works===emptyWorks&&(_.duration===void 0&&(_.duration=0),_.effect===void 0&&(_.effect=`instant`));let v={};Object.assign(v,_.model),!v[`3d-tiles`]&&_[`3d-tiles`]&&(v[`3d-tiles`]=_[`3d-tiles`]),!v.textureOptions&&_.textureOptions&&(v.textureOptions=_.textureOptions),!v.textureOptions&&this.textureOptions&&(v.textureOptions=this.textureOptions);let y=[];if(Array.isArray(t))for(let e of t)e instanceof Work?y.push(e):typeof e!=`string`&&`work`in e?y.push(parseWork(e.work,e)):y.push(parseWork(e));else t instanceof Work?y.push(t):y.push(parseWork(t));_.mode===`add`&&(y=[].concat(this.works,y));let b;try{b=createWorks(y)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of b)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===emptyWorks&&(n=`initial`);let S=this.currentMode,C=b.initial,w=C.work.observers[0],T=w?{workCode:w.work.workCode,panoIndex:w.panoIndex}:{workCode:C.work.workCode,panoIndex:0},E=(s=C.mode)==null?w?`Panorama`:`Mapview`:s,D={};if(n===`inherit`){let e=this.getCurrentState(),[t]=b.filter(t=>t.workCode===e.workCode);if(t)T={workCode:e.workCode,panoIndex:e.panoIndex},E=e.mode,D={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:S};let e=(l=(c=b[0])==null?void 0:c.observers)==null?void 0:l[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof b.initial.panoIndex==`number`?(n.workCode=b.initial.work.workCode,n.panoIndex=b.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===S&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof C.panoIndex==`number`&&(T={workCode:C.work.workCode,panoIndex:C.panoIndex}),C.mode&&(E=C.mode),D={longitude:C.longitude,latitude:C.latitude,fov:C.fov,distance:C.distance,offset:(u=C.offset)==null?void 0:u.clone()}),typeof n==`object`){if(E=(d=n.mode)==null?S:d,typeof n.panoIndex==`number`){let e=b.getObserver({workCode:(p=(f=n.workCode)==null?C.work.workCode:f)==null?``:p,panoIndex:n.panoIndex});e&&(T={workCode:e.work.workCode,panoIndex:e.panoIndex})}D={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new three.Vector3().copy(n.offset):void 0}}let O=(m=_.duration)==null?this.modeChangeDuration:m;(E===`Floorplan`||E===`Topview`||E===`Mapview`)&&S===E&&(O=0);let k=`fly`;(E===`Panorama`||E===`VRPanorama`||E===`XRPanorama`)&&S===E&&(k=(h=_.effect)==null?`fade`:h),this.emit(`works.request`,createEvent(`works.request`,{input:t,works:b,userAction:o}));let A=(e,t,r)=>{let s=this.getCurrentState(),c=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(c=this.getCurrentState()),this.pano=t;let l=Object.assign(Object.assign({initial:{state:c,currentState:s,duration:O,effect:k,userAction:o}},this.commonParams()),this.controllerInits[e]),u=Controllers[c.mode].initAnimationEndState(l);if(this.controller&&S===e)this.controller.updateWork(b,u,{effect:k,duration:O},o)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,l));else{if(this.controller)this.controller.destroy();else{let t=Controllers[e].initAnimationEndState(l);this.camera.setFromPose(t),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))}this.controller=this.applyController(e,l);let t=createEvent(`mode.change`,{prevMode:S,mode:e,state:u,userAction:o});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};worksMap.set(this,b);let j=Promise.resolve();if(E===e.Mode.Floorplan||E===e.Mode.Topview||E===e.Mode.Mapview||E===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(D),assignPose(this.state,this.camera.pose));let e=this.modelScene.setModels(b,v);j=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,A(E,T,D),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))})}else{A(E,T,D);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===b&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(b,v);j=Promise.all(r.map(e=>e.initReady)).then(noop),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((g=_.duration)==null?this.modeChangeDuration:g)+1e3)}return this.emit(`works.load`,createEvent(`works.load`,{input:t,userAction:o,works:b})),j.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,createEvent(`works.ready`,{input:t,userAction:o,works:b})),(e=this.analysis)==null||e.work(b)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),worksMap.set(this,emptyWorks),this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:DEFAULT_CAMERA_FOV,longitude:0,latitude:0,offset:new three.Vector3(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,o=!0,s=!1){return new Promise((c,l)=>{var u,d,f,p;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let m=0;this.controller&&(m=typeof r==`number`?r:(u=r==null?void 0:r.duration)==null?this.modeChangeDuration:u);let h=`fly`;this.controller&&typeof r==`object`&&r.effect&&(h=r.effect);let g=typeof n.panoIndex==`number`?{workCode:(p=(d=n.workCode)==null?(f=this.work)==null?void 0:f.workCode:d)==null?``:p,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),l(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(g)){let e=Error(`PanoId ${panoStringify(g)} not existed.`);this.throwError(e),l(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(m=0);let _=this.controller,v=this.currentMode,y=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&s===!1&&v===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!panoEqual(this.pano,g)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(g,Object.assign({duration:m},n),o):this.controller.updateCamera(n,m,o).catch(noop):(panoEqual(this.pano,g)||(this.pano=g),this.controller.updateCamera(n,m,o).catch(noop));else{let e=Object.assign(Object.assign({},n),g),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:m,effect:h,userAction:o}},this.commonParams()),this.controllerInits[t]),s=Controllers[t].initAnimationEndState(r),c=createEvent(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});if(this.emit(`mode.change.request`,c),!c.defaultPrevented){_&&_.destroy(),this.controller=this.applyController(t,r);let e=createEvent(`mode.change`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});this.emit(`mode.change`,e)}}c()},b=AnimationFrameLoop.shared.getContext();b&&(typeof XRSession<`u`&&b instanceof XRSession&&b.end(),AnimationFrameLoop.shared.setContext(null)),t===e.Mode.VRPanorama?(this.requestFullscreen(),requestDeviceOrientationPermission().then(()=>y()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),l(t)})):t===e.Mode.XRPanorama?requestXRSessionPermission().then(e=>{AnimationFrameLoop.shared.setContext(e),s=!0,y()}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),l(t)}):y()})}getPixels(e,t,n,r,o,s,c){if(!this.renderer)throw Error(`renderer is not initialized.`);let l=now(),u=this.renderer.getPixelRatio(),d=this.renderer.getRenderTarget(),f=this.getSize(new three.Vector2),p=0,m=0,h=1,g=1,_,v,y,b,S;typeof e==`number`?(p=e,typeof t==`number`&&(m=t),typeof n==`number`&&(h=n),typeof r==`number`&&(g=r),_=o,v=s,S=c):(p=e.x,m=e.y,h=e.width,g=e.height,_=e.pixelRatio,v=e.flipY,y=e.helperVisible,b=e.skipPanorama,S=e.buffer),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h),g=Math.floor(g),_=Math.floor(_==null?u:_),v=v==null?!1:v;let C=this.helperVisible,w=this.modelScene.parameter.modelAlpha;this.helperVisible=y==null?this.helperVisible:y,b&&(this.controller instanceof Controllers.Panorama||this.controller instanceof Controllers.VRPanorama||this.controller instanceof Controllers.XRPanorama)&&b===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let T=this.getPixelsRenderTarget;T.setSize(h*_,g*_),this.renderer.setRenderTarget(T),this.camera.pixelRatio=_,this.camera.resolution.set(h,g),this.camera.setViewOffset(f.width,f.height,p,f.height-m-g,h,g),this.camera.aspect=f.width/f.height,this.camera.updateTime(l),this.scene.update(this.renderer,this.camera);let E=this.renderer.autoClear,D=this.renderer.autoClearColor,O=this.renderer.autoClearDepth,k=this.renderer.autoClearStencil,A=scratchClearColor.copy(this.renderer.getClearColor()),j=this.renderer.getClearAlpha(),M=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let N=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:N,this.renderer.render(this.scene,this.camera),this.scene.background=N,this.renderer.autoClear=E,this.renderer.autoClearColor=D,this.renderer.autoClearDepth=O,this.renderer.autoClearStencil=k,this.renderer.setClearColor(A,j),this.renderer.setScissorTest(M),this.helperVisible=C,w===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,w),this.renderer.setRenderTarget(d),this.camera.clearViewOffset(),this.camera.pixelRatio=u,this.camera.resolution.copy(f),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(l),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let P=h*_,F=g*_,I=P*F,L=I*4;if(S){if(S.length!==L)throw Error(`buffer length is not equals pixels ${L}`)}else S=new Uint8Array(L);if(this.renderer.readRenderTargetPixels(T,0,0,h*_,g*_,S),v){let e=I/2;for(let t=0,n=0,r=0,o=0;n<e;n++)for(o=(F-Math.floor(n/P)-1)*P+n%P,r=0;r<4;r++)t=S[n*4+r],S[n*4+r]=S[o*4+r],S[o*4+r]=t}return S}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,o=t.autoClearColor,s=t.autoClearDepth,c=t.autoClearStencil,l=scratchClearColor.copy(t.getClearColor()),u=t.getClearAlpha(),d=t.getViewport(scratchViewport),f=t.getScissor(scratchScissor),p=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let m=t.getSize(scratchRenderSize),h=Math.floor(m.x*this.viewport.left),g=Math.floor(m.y*this.viewport.bottom),_=Math.floor(m.x*this.viewport.width),v=Math.floor(m.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(h,g,_,v),t.setScissor(h,g,_,v);let y=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(y);let b=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:b;let S=!0;if(this.controller&&this.controller.render()&&(S=!1),S){let e=this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender);this.poweredByRealsee&&e&&renderPoweredByRealsee(t)}this.scene.background=b,t.autoClear=r,t.autoClearColor=o,t.autoClearDepth=s,t.autoClearStencil=c,t.setClearColor(l,u),t.setViewport(d),t.setScissor(f),t.setScissorTest(p),t.setRenderTarget(n),e&&AnimationFrameLoop.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&ktx2.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),AnimationFrameLoop.shared.add(()=>{this.emit(`models.load`,createEvent(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&AnimationFrameLoop.shared.add(()=>{this.emit(`models.refined`,createEvent(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){scratchBox3.makeEmpty(),scratchBox3.expandByObject(this.modelScene.boundingMesh);let t=scratchBox3.getBoundingSphere(scratchSphere),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius),n=clamp$1(n,800);let r=n/1e4;r=clamp$1(r,.03,.1),this.camera.near!==r&&(this.camera.near=r),this.camera.far!==n&&(this.camera.far=n),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0)return;let r=createEvent(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let o=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,createEvent(`render`,{needsRender:o})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof InternalWebGLRenderer&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:o,renderer:s}=this;if(!o)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!s)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let c=this.works.getObserver(t);if(!c)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let l={workCode:c.work.workCode,panoIndex:c.panoIndex};return`moveToPano`in o&&typeof o.moveToPano==`function`?o.moveToPano(l,n,r):c&&(this.pano=l,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=noop){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],o=now();return Promise.all(r.map(e=>{let t=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},pick(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),o=n.work.getURL(n.images[e]),s=this.imageOptions.transform?this.imageOptions.transform(o,r):imageURL(o,r);return getFetcher(this.fiveId,n.work).preload(s)})).then(()=>{let e=now()-o;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new three.Raycaster(t,n.clone().normalize());r.params.Points={threshold:.1};let[o]=this.modelScene.intersectRaycaster(r);if(o&&o.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new three.Vector2),o=r.x*this.viewport.width,s=r.y*this.viewport.height,c=r.x*this.viewport.left+(n.x+1)/2*o,l=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*s;return new three.Vector2(c,l)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,o,s,c,l,u,d,f,p,m;e=pick(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof three.Vector3)&&(e.offset=new three.Vector3(e.offset.x,e.offset.y,e.offset.z));let h;if(typeof e.panoIndex==`number`)if(e.workCode)h={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(o=(r=this.work)==null?void 0:r.workCode)==null?``:o,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),h={workCode:t,panoIndex:e.panoIndex}}let g=(s=e.mode)==null?this.state.mode:s,_,v,y,b,S;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==g){if(g===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}let t={workCode:h==null?void 0:h.workCode,panoIndex:h==null?void 0:h.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof three.Vector3&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[g]),r=Controllers[g].initAnimationEndState(n);_=r.longitude,v=r.latitude,y=r.fov,b=r.offset,S=r.distance}else _=(c=e.longitude)==null?this.state.longitude:c,v=(l=e.latitude)==null?this.state.latitude:l,y=(u=e.fov)==null?this.state.fov:u,b=(d=e.offset)==null?this.state.offset:d,S=(f=e.distance)==null?this.state.distance:f;let C={workCode:(h==null?this.pano:h).workCode,panoIndex:(h==null?this.pano:h).panoIndex,mode:g,longitude:_,latitude:v,fov:y,offset:b,distance:S};this.emit(`state.set`,createEvent(`state.set`,{userAction:n,state:C})),stateEqual(this.state,C)||(this.controller&&C.mode===`VRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`VRPanorama`)):this.controller&&C.mode===`XRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`XRPanorama`)):(assignState(this.state,C),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===C.mode&&(this.syncingState=this.syncState(now(),0,t),this.syncingState&&((p=this.controller)==null||p.updateTime(now(),0),this.syncingState=!1)),this.emit(`state.change`,createEvent(`state.change`,{userAction:n,state:this.state})),(m=this.analysis)==null||m.state(this.works,this.state)))}syncState(t,n,r=!1){let o=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof Controllers.Model){if(notSimilarVector3(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!panoEqual(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof Controllers.Floorplan||this.controller instanceof Controllers.Topview||this.controller instanceof Controllers.Mapview){let e=1,t=.2,n=.2,o=Math.PI/45,s=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),c=Math.abs(this.camera.pose.distance-this.state.distance),l=c>n*15?c/15:.2,u=r?this.state.distance:stepNumber(this.camera.pose.distance,this.state.distance,l),d=this.camera.pose.offset.distanceTo(this.state.offset),f=d>n*15?d/15:n,p=r?new three.Vector3().copy(this.state.offset):stepVector(this.camera.pose.offset,this.state.offset,f),{longitude:m,latitude:h}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},o);if(notSimilarValue(s,this.camera.pose.fov)||notSimilarVector3(p,this.camera.pose.offset)||notSimilarValue(u,this.camera.pose.distance)||notSimilarValue(m,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(h,this.camera.pose.latitude)){let e={x:p.x,y:p.y,z:p.z},t={fov:s};return Object.assign(e,{distance:u}),Object.assign(t,{longitude:m,latitude:h}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(noop),this.controller.locationMotion.set(e,0).catch(noop),!0}}else{let e=1,t=Math.PI/45,n=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),{longitude:o,latitude:s}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t),c=this.state.distance,l=new three.Vector3().copy(this.state.offset);if(notSimilarValue(c,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),notSimilarVector3(l,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),notSimilarValue(o,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(s,this.camera.pose.latitude)||notSimilarValue(n,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:o,latitude:s,fov:n},0).catch(noop),!0}if(this.stateSynced=!0,o===!1&&this.emit(`state.synced`,createEvent(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof Controllers.Panorama&&t.tile===!0&&!this.controller.isTileReady()?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>this.model.initReady).then(noop)}requestFullscreen(){var e;if(!isMobile)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{AnimationFrameLoop.shared.add(()=>{this.emit(`model.load`,createEvent(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,createEvent(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,createEvent(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},o=t=>{this.emit(`models.tileLoad`,createEvent(`model.tileLoad`,{work:e.work,model:e,tile:t.tile}))},s=t=>{this.emit(`models.tileUnload`,createEvent(`model.tileUnload`,{work:e.work,model:e,tile:t.tile}))},c=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,o),e.removeEventListener(`tileUnload`,s),e.removeEventListener(`dispose`,c)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,o),e.addEventListener(`tileUnload`,s),e.addEventListener(`dispose`,c),this.emit(`model.request`,createEvent(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,o=new Fetcher({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=verifyURL(e,r);return t instanceof Error?Promise.reject(t):t})}});registerFetcher(this.fiveId,e,o)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=Controllers[t];this.currentMode=t;let o=new r(n);for(let e of PROXY_CONTROLLER_EVENT_NAMES)o.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=Controllers[t].initAnimationEndState(n),r=n.initial.userAction;stateEqual(this.state,e)||(assignState(this.state,e),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return o.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),o.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),o.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),o.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),o.on(`error`,e=>this.throwError(e)),o}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:o}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:o}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new three.Object3D;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new three.Vector3(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().inverse();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableHQ(){return this.fiveRenderer.renderMode===`point-cloud-high-quality`}set enableHQ(e){this.fiveRenderer.renderMode=e?`point-cloud-high-quality`:`default`,this.needsRender=!0}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableIOSEDR(){return!1}set enableIOSEDR(e){}get enablePostProcessing(){return!0}set enablePostProcessing(e){}get modelSceneNeedsRender(){return this.modelScene.needsRender}set modelSceneNeedsRender(e){this.modelScene.needsRender=e}};Five.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:three,constructor:Five,instances:Five_Instances}});var XRButton=class{static createButton(e){let t=document.createElement(`button`);function n(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=`calc(50% - 50px)`,t.style.width=`100px`,t.textContent=`ENTER VR`,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){e&&e()}}function r(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function o(){r(),t.textContent=`VR NOT SUPPORTED`}function s(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,s(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?n():o()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,s(e),e}}};exports.AdaptiveLuminancePass=AdaptiveLuminancePass,exports.AnimationFrameLoop=AnimationFrameLoop,exports.BoundingMesh=BoundingMesh,exports.Camera=Camera,exports.CustomShader=PBMCustomShader,exports.PBMCustomShader=PBMCustomShader,exports.EffectComposer=EffectComposer,exports.EyeDomeLightingPass=EyeDomeLightingPass,exports.Fetcher=Fetcher,exports.Five=Five,exports.FivePass=FivePass,exports.FiveRenderer=FiveRenderer,exports.FullScreenQuad=FullScreenQuad,exports.Histogram=Histogram,exports.InternalWebGLRenderer=InternalWebGLRenderer,exports.Model=Model,exports.ModelScene=ModelScene,exports.Motion=Motion,exports.NetworkSubscribe=NetworkSubscribe,exports.PBMContainer=PBMContainer,exports.PBMGSObject=PBMGaussianSplattingObject,exports.PBMGroup=PBMGroup,exports.PBMMesh=PBMMesh,exports.PBMMeshMaterial=PBMMeshMaterial,exports.PBMPanoFilter=PBMPanoFilter,exports.PBMPointCloud=PBMPointCloud,exports.PBMPointCloudMaterial=PBMPointCloudMaterial,exports.PBMSkinnedMesh=PBMSkinnedMesh,exports.PBMUpdateable=PBMUpdateable,exports.PROXY_CONTROLLER_EVENT_NAMES=PROXY_CONTROLLER_EVENT_NAMES,exports.PanoCircleMesh=PanoCircleMesh,exports.PanoCircleMeshCustom=PanoCircleMeshCustom,exports.PanoCircleMeshSolid=PanoCircleMeshSolid,exports.Parameter=Parameter,exports.Scene=Scene,exports.Subscribe=Subscribe,exports.TextureLoader=TextureLoader,exports.Tile=Tile,exports.Tile3D=Tile3D,exports.Tile3DModel=Tile3D,exports.TileCache=TileCache,exports.TileNode=TileNode,exports.TileRequestScheduler=TileRequestScheduler,exports.Tileset=Tileset,exports.Trajectory=Trajectory,exports.TrajectoryNode=TrajectoryNode,exports.Work=Work,exports.WorkResolvedObserver=WorkResolvedObserver,exports.XRButton=XRButton,exports.controllersDefaultInitArgs=controllersDefaultInitArgs,exports.coordinatesToVector=coordinatesToVector,exports.createDebugBoundingMesh=createDebugBoundingMesh,exports.createWorks=createWorks,exports.defaultImageURLTransform=imageURL,exports.draco=draco,exports.getViewportScale=getViewportScale,exports.headingToLongitude=headingToLongitude,exports.imageSupport=imageSupport,exports.isBoundingVolume=isBoundingVolume,exports.isPanoId=isPanoId,exports.ktx2=ktx2,exports.loadAt3d=loadAt3d,exports.loadB3dm=loadB3dm,exports.loadDome=loadDome,exports.loadDomez=loadDomez,exports.loadFbx=loadFbx,exports.loadGltf=loadGltf,exports.loadPbm=loadPbm,exports.loadPly=loadPly,exports.loadPnts=loadPnts,exports.loadSplat=loadSplat,exports.loadSpz=loadSpz,exports.loadX3p=loadX3p,exports.longitudeToHeading=longitudeToHeading,exports.makeBoundingVolume=makeBoundingVolume,exports.panoEqual=panoEqual,exports.panoParse=panoParse,exports.panoStringify=panoStringify,exports.parseWork=parseWork,exports.vectorToCoordinates=vectorToCoordinates,exports.workToJson=workToJson});
|
|
2313
|
+
Aj$\\0 \\0\\v§
|
|
2314
|
+
}#\\0A\\bk"\\f$\\0A! @ \\rFE@ \\rA\\flj"
|
|
2315
|
+
*\\0!
|
|
2316
|
+
*\\b!
|
|
2317
|
+
*! \\rAt"j(\\0"
|
|
2318
|
+
G@
|
|
2319
|
+
AÐ\\0lj" *< \\0*8" *8 \\0*(" *0 \\0*\\b" \\0*" *4! *, *( * *$! * * * *! *\\f *\\b *\\0 * !
|
|
2320
|
+
! \\v j ¼"
|
|
2321
|
+
AAx
|
|
2322
|
+
A\\0H\\x1Bs6\\0 \\rAj!\\r\\f\\v\\v@ \\vFE@ \\vAtj \\v6\\0 \\vAj!\\v\\f\\v\\v !\\0A\\0!@ \\0! AF@@ \\0 F\\r\\0 At"\\0E\\r\\0 \\0ü
|
|
2323
|
+
\\0\\0\\v \\fA\\bj$\\0\\vA\\0!\\0 \\bA\\0A\\bü\\v\\0 At!@ \\0 F@ \\fA\\x006ü\\x07Aþ!\\v@A\\0!\\0 \\vA\\0HE@ \\f \\vAt"\\0j \\b \\0Aj"\\0j(\\0 \\0 \\fj(\\0j6\\0 \\vAk!\\v\\f\\v\\v@ \\0 FE@ \\f \\0Atj(\\0" Atj(\\0 vAÿqAtj"
|
|
2324
|
+
|
|
2325
|
+
(\\0"
|
|
2326
|
+
Aj6\\0 \\x07
|
|
2327
|
+
Atj 6\\0 \\0Aj!\\0\\f\\v\\v Aj! \\x07!\\0 !\\x07\\f \\b \\0Atj(\\0Atj(\\0 vAÿqAtj" (\\0Aj6\\0 \\0Aj!\\0\\f\\v\\0\\v\\0\\v\\0\\v\\0\\v\\v \\0A\\b\\v\`)}function _(e){return e}function v(e,t){var n,r=_(e);return n=new WebAssembly.Module(r),[new WebAssembly.Instance(n,t),n]}function y(){return{a:P}}function b(){function e(e,t){return I=e.exports,N(I),d(),I}var t=y();return n.instantiateWasm?new Promise((r,i)=>{n.instantiateWasm(t,(t,n)=>{r(e(t,n))})}):(h??=g(),e(v(h,t)[0]))}for(var x=e=>{for(;e.length>0;)e.shift()(n)},S=[],C=e=>S.push(e),w=[],T=e=>w.push(e),E=()=>2147483648,D=(e,t)=>Math.ceil(e/t)*t,O=e=>{var t=(e-M.buffer.byteLength+65535)/65536|0;try{return M.grow(t),d(),1}catch{}},k=e=>{var t=l.length;e>>>=0;var n=E();if(e>n)return!1;for(var r=1;r<=4;r*=2){var i=t*(1+.2/r);if(i=Math.min(i,e+100663296),O(Math.min(n,D(Math.max(e,i),65536))))return!0}return!1},A=new Uint8Array(123),j=25;j>=0;--j)A[48+j]=52+j,A[65+j]=j,A[97+j]=26+j;if(A[43]=62,A[47]=63,n.noExitRuntime&&n.noExitRuntime,n.print&&n.print,n.printErr&&n.printErr,n.wasmBinary&&n.wasmBinary,n.arguments&&n.arguments,n.thisProgram&&n.thisProgram,n.preInit)for(typeof n.preInit==\`function\`&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();var M;function N(e){n._sort=e.d,n._malloc=e.e,n._free=e.f,M=e.b,e.__indirect_function_table}var P={a:k};function F(){f();function e(){n.calledRun=!0,!o&&(p(),c?.(n),n.onRuntimeInitialized?.(),m())}n.setStatus?(n.setStatus(\`Running...\`),setTimeout(()=>{setTimeout(()=>n.setStatus(\`\`),1),e()},1)):e()}var I=b();return F(),t=u?n:new Promise((e,t)=>{c=e}),t}let n;function r(){return e(this,void 0,void 0,function*(){n=yield t()})}let i,a,o,s,c,l,u,d,f,p=0,m=0,h=[],g=!0,_=!1,v=!1,y=!1,b=()=>e(void 0,void 0,void 0,function*(){if(_){v=!0;return}_=!0,v=!1,n||(yield r());let e=2**Math.ceil(Math.log2(i.vertexCount));p<e&&(p>0&&(n._free(a),n._free(s),n._free(c),n._free(l),n._free(u),n._free(d),n._free(f)),p=e,a=n._malloc(64),s=n._malloc(p*4),c=n._malloc(3*p*4),l=n._malloc(p*4),u=n._malloc(p*4),d=n._malloc(p*4),f=n._malloc(p*4)),m<i.transforms.length&&(m>0&&n._free(o),m=i.transforms.length,o=n._malloc(m*4)),_=!1,v&&(v=!1,yield b())}),x=()=>{if(_||v||!n)return;_=!0,n.HEAPF32.set(i.positions,c/4),n.HEAPF32.set(i.transforms,o/4),n.HEAPU32.set(i.transformIndices,s/4),n.HEAPF32.set(new Float32Array(h),a/4),n._sort(a,o,s,i.vertexCount,c,l,u,d,f);let e=new Uint32Array(n.HEAPU32.buffer,u,i.vertexCount),t=new Uint32Array(e.slice().buffer);self.postMessage({depthIndex:t,generation:i.generation},[t.buffer]),_=!1,g=!1},S=()=>{y||(y=!0,g&&x(),setTimeout(()=>{y=!1,S()}))};self.onmessage=e=>new Promise(t=>{if(e.data.warmup){r().finally(()=>t(!0));return}e.data.sortData&&(i={positions:new Float32Array(e.data.sortData.positions),transforms:new Float32Array(e.data.sortData.transforms),transformIndices:new Uint32Array(e.data.sortData.transformIndices),vertexCount:e.data.sortData.vertexCount,generation:e.data.sortData.generation??0},g=!0,b()),e.data.viewProj?(e.data.viewProj.every(e=>h.includes(e))===!1&&(h=e.data.viewProj,g=!0),S(),t(!0)):t(!0)})})();`,blob=typeof self<`u`&&self.Blob&&new Blob([`(self.URL || self.webkitURL).revokeObjectURL(self.location.href);`,jsContent],{type:`text/javascript;charset=utf-8`});function WorkerWrapper(e){let t;try{if(t=blob&&(self.URL||self.webkitURL).createObjectURL(blob),!t)throw``;let n=new Worker(t,{name:e==null?void 0:e.name});return n.addEventListener(`error`,()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch(t){return new Worker(`data:text/javascript;charset=utf-8,`+encodeURIComponent(jsContent),{name:e==null?void 0:e.name})}}var vertex_default=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}("}rpvv|{-uvtu}-sy|nH}rpvv|{-uvtu}-v{Hnvor-sy|n-}ynV{qr\x07H{vs|z-uvtu}-nz}yr?Q-lr\x07rH{vs|z-uvtu}-nz}yr?Q-ln{s|zH{vs|z-uvtu}-nz}yr?Q-ln{s|zV{qvprH{vs|z-uvtu}-nz}yr?Q-lyn\brV{qvprH{vs|z-uvtu}-nz}yr?Q-luar\x07rH{vs|z-rp?-luar\x07r`v rH{vs|z-v{-lzn\x07`uQrtrrH0vs-[bZlT`lPYV]]R_`-K-=----{vs|z-rp?-lyn\brPyv}}r_n{trh[bZlT`lYNfR_`jH----{vs|z-znA-lpyv}}rZnvprV{rrh[bZlT`lPYV]]R_`jH0r{qvs{vs|z-rp?-r|yv|{H{vs|z-o||y-lnttrtnv|{R{noyrqH{vs|z-sy|n-lnttrtnv|{]|trH-------<<-整个动画的归一化进度-h=9->j{vs|z-sy|n-lnttrtnv|{]|v{Qnv|{H--<<-每个点的固定聚合时长(归一化到总时长,可调试){vs|z-rp@-lnttrtnv|{O|{qZv{H{vs|z-rp@-lnttrtnv|{O|{qZn\x07Hn\bv{t-rpA-P|y|Hn\bv{t-rp?-]|vv|{Hn\bv{t-rp?-bH<<参考Tnvn{`}yn@qp|{-sy|n-\0E-J-\05E;=6H<<原版的固定xr{ry`v r,不要轻易调整这个数p|{-sy|n-xr{ry?Q`v r-J-=;@Hp|{-sy|n-zn\x07`prr{`}npr`}yn`v r-J-?=AE;=H<<固定的u相关系数p|{-sy|n-`UlP>-J-=;AEEC=?B>>F=?F>FFHp|{-sy|n-`UlP?l=-J->;=F?BAEAHp|{-sy|n-`UlP?l>-J-:>;=F?BAEAHp|{-sy|n-`UlP?l?-J-=;@>B@F>CHp|{-sy|n-`UlP?l@-J-:>;=F?BAEAHp|{-sy|n-`UlP?lA-J-=;BAC?DA?Hrp?-tr`UQnnbc5v{-}ynVq\x079-v{-p|z}|{r{\\ssr9-rp?-r\x07r`v r6-\n----v{-uP|z}|{r{P|{-J-=H----vs-5lzn\x07`uQrtrr-KJ->6-uP|z}|{r{P|{-8J-FH----vs-5lzn\x07`uQrtrr-KJ-?6-uP|z}|{r{P|{-8J->BH----vs-5lzn\x07`uQrtrr-KJ-@6-uP|z}|{r{P|{-8J-?>H--------v{-}nqqrqP|z}|{r{P|{-J-uP|z}|{r{P|{H----vs-5}nqqrqP|z}|{r{P|{-2-A-.J-=6-\n--------}nqqrqP|z}|{r{P|{-J-55}nqqrqP|z}|{r{P|{-<-A6-8->6-7-AH----\f--------sy|n-yv{rnP|z}|{r{V{qr\x07-J-sy|n5}ynVq\x07-7-}nqqrqP|z}|{r{P|{-8-p|z}|{r{\\ssr6H----sy|n-r\x07ryV{qr\x07-J-yv{rnP|z}|{r{V{qr\x07-<-A;=H------sy|n-q-J-r\x07ryV{qr\x07-<-r\x07r`v r;\x07H----sy|n-\b-J-sy||5q6-<-r\x07r`v r;\bH----sy|n-\x07-J-snp5q6H----r{-rp?5\x079-\b6H\f|vq-znv{-56-\n----v{-}ynV{qr\x07b-J-v{5}ynV{qr\x07-8-=;B6H----v{-}ynV{qr\x07V-J-v{5}ynV{qr\x07b6H----rpA-pr{-J-r\x07rySrpu5lr\x07r9-vrp?55}ynV{qr\x07b-3-=\x07@ss6-II->9-}ynV{qr\x07b-KK->=69-=6H--------v{-n{s|zV{qr\x07-J-r\x07rySrpu5ln{s|zV{qvpr9-vrp?5}ynV{qr\x07b-3-=\x07@ss9-}ynV{qr\x07b-KK->=69-=6;\x07H----znA-n{s|z-J-znA5--------r\x07rySrpu5ln{s|z9-vrp?5=9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5>9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5?9-n{s|zV{qr\x0769-=69--------r\x07rySrpu5ln{s|z9-vrp?5@9-n{s|zV{qr\x0769-=6----6H----znA-n{s|zZ|qrycvrZnv\x07-J-vrZnv\x07-7-n{s|zH----rp@-}ynPr{r-J-v{Ova|Sy|n5pr{;\x07\b 6H----rpA-|yqPr{r-J-n{s|z-7-rpA5}ynPr{r9->;=6H----<<-JJJ-聚合特效-JJJ----sy|n-y|pny]|tr-J-lnttrtnv|{]|trH----sy|n-pnyr]|tr-J-=;=H----o||y-v{O|{qS|Nttrtnv|{-J-snyrH----vs-5lnttrtnv|{R{noyrq-33-lnttrtnv|{]|tr-I->;=6-\n--------o||y-v{O|{q-J-|yqPr{r;\x07-KJ-lnttrtnv|{O|{qZv{;\x07---------------------33-|yqPr{r;\x07-IJ-lnttrtnv|{O|{qZn\x07;\x07---------------------33-|yqPr{r; -KJ-lnttrtnv|{O|{qZv{; ---------------------33-|yqPr{r; -IJ-lnttrtnv|{O|{qZn\x07; H--------vs-5v{O|{q6-\n------------v{O|{qS|Nttrtnv|{-J-rH------------<<-归一化高度-h=9>j,>J最高,=J最低------------sy|n-urvtu_n{tr-J-lnttrtnv|{O|{qZn\x07;\b-:-lnttrtnv|{O|{qZv{;\bH------------sy|n-{|znyv rqUrvtu-J-urvtu_n{tr-K-=;==>----------------L-pynz}55|yqPr{r;\b-:-lnttrtnv|{O|{qZv{;\b6-<-urvtu_n{tr9-=;=9->;=6----------------G-=;BH------------<<-lnttrtnv|{]|v{Qnv|{G-每个点的固定聚合时长(归一化,占总时长的比例)------------<<-最高处5{|znyv rqUrvtuJ>6G-navzrJ=9-r{qavzrJ}|v{Q------------<<-最低处5{|znyv rqUrvtuJ=6G-navzrJ>:}|v{Q9-r{qavzrJ>------------<<-保证最底部的点在总动画结束时刚好聚合完毕------------sy|n-}|v{Q-J-pynz}5lnttrtnv|{]|v{Qnv|{9-=;=>9->;=6H------------sy|n-navzr-J-5>;=-:-{|znyv rqUrvtu6-7-5>;=-:-}|v{Q6H------------y|pny]|tr-J-pynz}55lnttrtnv|{]|tr-:-navzr6-<-}|v{Q9-=;=9->;=6H------------<<-聚合|ssr曲线:先加速后减速(rnr:v{:|)------------sy|n-|ssr]|tr-J-z||ur}5=;=9->;=9-y|pny]|tr6H------------<<-pnyr曲线:缓慢加速,加速度越来越大(rnr:v{-三次方)------------pnyr]|tr-J-y|pny]|tr-7-y|pny]|tr-7-y|pny]|tr-H------------rp@-nttrtnv|{Pr{r-J-5lnttrtnv|{O|{qZv{-8-lnttrtnv|{O|{qZn\x076-<-?;=H------------rp@-qv-J-|yqPr{r;\x07\b -:-nttrtnv|{Pr{rH------------sy|n-qv-J-yr{tu5qv6H------------<<-基于-}ynPr{r-的伪随机距离-8-v{<p|-螺旋方向------------sy|n-n{q`rrq-J-q|5}ynPr{r9-rp@5>?;FEFE9-DE;?@@9-AB;>CA66H------------sy|n-n{qQv-J-snp5v{5n{q`rrq6-7-A@DBE;BAB@6H------------sy|n-n{tyr-J-n{q`rrq-7->=;=H------------rp@-pnrQv-J-{|znyv r5rp@5----------------p|5n{tyr69----------------zv\x075:=;D9-=;>9-snp5v{5n{q`rrq-7->;D6-7-A@DBE;BAB@669----------------v{5n{tyr6------------66H------------sy|n-r\x07}y|v|{Snp|-J-5>;=-:-|ssr]|tr6-7-5>;=-8->;=-7-n{qQv6H------------rp@-|ssr-J-pnrQv-7-qv-7-r\x07}y|v|{Snp|H------------|yqPr{r;\x07\b -8J-|ssrH------------}ynPr{r-J-5v{rr5n{s|z6-7-|yqPr{r6;\x07\b H--------\f----\f----0vs-[bZlT`lPYV]]R_`-K-=----v{-yn\brV{qr\x07-J-v{5r\x07rySrpu5lyn\brV{qvpr9-vrp?5}ynV{qr\x07b-3-=\x07@ss9-}ynV{qr\x07b-KK->=69-=6;\x076H----vs-5yn\brV{qr\x07-KJ-=-33-yn\brV{qr\x07-I-[bZlT`lYNfR_`6-\n--------rp?-pyv}_n{tr-J-lyn\brPyv}}r_n{trhyn\brV{qr\x07jH--------v{-pyv}`n-J-v{5pyv}_n{tr;\x07-8-=;B6H--------v{-pyv}P|{-J-v{5pyv}_n{tr;\b-8-=;B6H--------v{-pyv}R{q-J-pyv}`n-8-pyv}P|{H--------s|-5v{-v-J-=H-v-I-[bZlT`lPYV]]R_`H-v886-\n----------------vs-5v-I-pyv}`n-\v\v-v-KJ-pyv}R{q6-\n--------------------p|{v{rH----------------\f----------------rpA-pyv}}r]|vv|{-J-lpyv}}rZnvprV{rrhvj-7-|yqPr{rH----------------o||y-pyv}}rq-J-pyv}}r]|vv|{;\x07-K-:=;B-33-pyv}}r]|vv|{;\x07-I-=;BH----------------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{;\b-K-:=;B-33-pyv}}r]|vv|{;\b-I-=;BH----------------pyv}}rq-J-pyv}}rq-33-pyv}}r]|vv|{; -K-:=;B-33-pyv}}r]|vv|{; -I-=;BH----------------vs-5pyv}}rq6-\n--------------------tyl]|vv|{-J-rpA5=;=9-=;=9-?;=9->;=6H--------------------r{H----------------\f--------\f----\f----0r{qvs----rpA-vrPr{r-J-n{s|zZ|qrycvrZnv\x07-7-rpA5}ynPr{r9->;=6H----rpA-pyv}Pr{r-J-}|wrpv|{Znv\x07-7-vrPr{rH----<<剔除超出视锥体的}yn----sy|n-pyv}-J->;?-7-pyv}Pr{r;H----vs-5pyv}Pr{r; -I-:pyv}Pr{r;-\v\v-pyv}Pr{r; -K-pyv}Pr{r;-\v\v---------pyv}Pr{r;\x07-I-:pyv}-\v\v-pyv}Pr{r;\x07-K-pyv}-\v\v---------pyv}Pr{r;\b-I-:pyv}-\v\v-pyv}Pr{r;\b-K-pyv}6-\n--------tyl]|vv|{-J-rpA5=;=9-=;=9-?;=9->;=6H--------r{H----\f----rp@-{qpPr{r-J-pyv}Pr{r;\x07\b -<-pyv}Pr{r;H----rp?-s|pny-J-rp?5--------}|wrpv|{Znv\x07h=jh=j-7-r|yv|{;\x07-7-=;B9--------}|wrpv|{Znv\x07h>jh>j-7-r|yv|{;\b-7-=;B----6H--------]|vv|{-J-}|vv|{;\x07\bH----<<-读取协方差数据(使用-unys?\x07>C-打包)----rpA-p|-J-r\x07rySrpu5lr\x07r9-vrp?555}ynV{qr\x07b-3-=\x07@ss6-II->6-\v->9-}ynV{qr\x07b-KK->=69-=6H----rp?->-J-{}npxUnys?\x07>C5p|;\x076H-----rp?-?-J-{}npxUnys?\x07>C5p|;\b6H------rp?-@-J-{}npxUnys?\x07>C5p|; 6H----------sy|n-Z>>-J->;\x07-<-A;=H----sy|n-Z>?-J->;\b-<-A;=H----sy|n-Z>@-J-?;\x07-<-A;=H----sy|n-Z??-J-?;\b-<-A;=H----sy|n-Z?@-J-@;\x07-<-A;=H----sy|n-Z@@-J-@;\b-<-A;=H--------zn@-cx-J-zn@5--------Z>>9-Z>?9-Z>@9--------Z>?9-Z??9-Z?@9----------Z>@9-Z?@9-Z@@-------6H----<<-判断是否是正交模式:透视时-}|wrpv|{Znv\x07h@jh@j-J-=,正交时-J->----o||y-v\\u|tn}uvp-J-}|wrpv|{Znv\x07h@jh@j-K-=;DH----sy|n-n{vznv|{]|tr-J--}|wrpv|{Znv\x07h@jh@jH----zn@-WH----vs-5v\\u|tn}uvp6-\n--------<<-正交模式的雅可比矩阵--------W-J-n{}|r5zn@5------------s|pny;\x079-=;=9-=;=9------------=;=9-s|pny;\b9-=;=9------------=;=9-=;=9-=;=--------66H----\f-ryr-\n--------<<-透视模式的雅可比矩阵--------sy|n--J->;=-<-5vrPr{r; -7-vrPr{r; 6H--------W-J-zn@5------------s|pny;\x07-<-vrPr{r; 9-=;=9-:5s|pny;\x07-7-vrPr{r;\x076-7-9------------=;=9-s|pny;\b-<-vrPr{r; 9-:5s|pny;\b-7-vrPr{r;\b6-7-9------------=;=9-=;=9-=;=--------6H----\f----zn@-d-J-n{}|r5zn@5n{s|zZ|qrycvrZnv\x0766H----zn@-a-J-d-7-WH----<<-将-@Q-协方差矩阵变换为-?Q-协方差矩阵----zn@-p|?Qz-J-n{}|r5a6-7-cx-7-aH----p|?Qzh=jh=j-8J-xr{ry?Q`v rH----p|?Qzh>jh>j-8J-xr{ry?Q`v rH----rp@-p|?Q-J-rp@5p|?Qzh=jh=j9-p|?Qzh=jh>j9-p|?Qzh>jh>j6H----sy|n-n-J-p|?Q;\x07H----sy|n-q-J-p|?Q; H----sy|n-o-J-p|?Q;\bH----sy|n-Q-J-n-7-q-:-o-7-oH----sy|n-npr-J-n-8-qH----sy|n-npr\\r?-J-=;B-7-nprH----sy|n-rz?-J-\05zn\x075=;>9-npr\\r?-7-npr\\r?-:-Q66H----sy|n-rvtr{cnyr>-J-npr\\r?-8-rz?H----sy|n-rvtr{cnyr?-J-npr\\r?-:-rz?H----vs-5rvtr{cnyr?-IJ-=;=6-\n--------r{H----\f----rp?-rvtr{crp|>-J-{|znyv r5rp?5o9-rvtr{cnyr>-:-n66H----rp?-rvtr{crp|?-J-rp?5rvtr{crp|>;\b9-:rvtr{crp|>;\x076H----rp?-onvcrp|>-J-rvtr{crp|>--7-zv{5\0E-7-\05rvtr{cnyr>69-zn\x07`prr{`}npr`}yn`v r6H----rp?-onvcrp|?-J-rvtr{crp|?--7-zv{5\0E-7-\05rvtr{cnyr?69-zn\x07`prr{`}npr`}yn`v r6H----rp?-onvcvr}|-J-rp?5>;=-<-r|yv|{;\x079->;=-<-r|yv|{;\b6H----rp?-{qp\\ssr-J-rp?5]|vv|{;\x07-7-onvcrp|>-8-]|vv|{;\b-7-onvcrp|?6-7---------------------onvcvr}|-7-?;=H----<<-JJJ-点云→@QT`-过渡-JJJ----vs-5lnttrtnv|{R{noyrq6-\n--------sy|n-sv{ny`pnyr]|tr-J-v{O|{qS|Nttrtnv|{-L-pnyr]|tr-G-5lnttrtnv|{]|tr-7-lnttrtnv|{]|tr-7-lnttrtnv|{]|tr6H--------{qp\\ssr-7J-zv\x075=;>9->;=9-sv{ny`pnyr]|tr6H----\f----rpA-\0nq]|-J-rpA5{qpPr{r;\x07\b-8-{qp\\ssr9-{qpPr{r; 9->;=6H----tyl]|vv|{-J-\0nq]|H----<<-读取颜色----rpA-p|y|-J-rpA5--------5p|;6-3-=\x07ss9--------5p|;-KK-E6-3-=\x07ss9--------5p|;-KK->C6-3-=\x07ss9--------5p|;-KK-?A6-3-=\x07ss----6-<-?BB;=H----<<应用球谐光照,目前只兼容=>?----vs-5lzn\x07`uQrtrr-KJ->6-\n--------rp@-pnzrn]|V{\\owrp-J-rp@5v{rr5n{s|z6-7-rpA5pnzrn]|vv|{9->;=66H--------rp@-|owrpcvrQv-J-{|znyv r5}ynPr{r-:-pnzrn]|V{\\owrp6H----------------rpA-u=>?@-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-=9-luar\x07r`v r66H----------rpA-uABCD-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-A9-luar\x07r`v r66H----------rpA-uEF>=>>-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-E9-luar\x07r`v r66H-----------------rp@-u>-J-u=>?@;toH-----------------------------------rp@-u?-J-rp@5u=>?@;n9-uABCD;t6H---------------------rp@-u@-J-rp@5uABCD;on9-uEF>=>>;6H-----------------------------sy|n-\x07-J-|owrpcvrQv;\x07H--------sy|n-\b-J-|owrpcvrQv;\bH--------sy|n- -J-|owrpcvrQv; H--------rp@-uP|y|-J-u>-7-5:=;AEEC=?B-7-\b6-8-u?-7-5=;AEEC=?B-7- 6-8-u@-7-5:=;AEEC=?B-7-\x076H--------p|y|;to-8J-uP|y|H----------------vs-5lzn\x07`uQrtrr-KJ-?6-\n----------------------rpA-u>?>@>A>B-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9->?9-luar\x07r`v r66H------------rpA-u>C>D>E>F-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9->C9-luar\x07r`v r66H-------------rpA-u?=?>???@-J-r\x07r5luar\x07r9-tr`UQnnbc5}ynV{qr\x07V9-?=9-luar\x07r`v r66H-------------------------rp@-uA-J-uEF>=>>;tonH------------------------------------rp@-uB-J-u>?>@>A>B;toH----------------------------------rp@-uC-J-rp@5u>?>@>A>B;n9-u>C>D>E>F;t6H---------------rp@-uD-J-rp@5u>C>D>E>F;on9-u?=?>???@;6H---------------rp@-uElqrt?-J-u?=?>???@;tonH-----------------------------------------sy|n-\x07\x07-J-\x07-7-\x07H------------sy|n-\b\b-J-\b-7-\bH------------sy|n- -J- -7- H------------sy|n-\x07\b-J-\x07-7-\bH------------sy|n-\b -J-\b-7- H------------sy|n-\x07 -J-\x07-7- H------------------------p|y|;to-8J----------------5`UlP?l=-7-\x07\b6-7-uA-8----------------5`UlP?l>-7-\b 6-7-uB-8----------------5`UlP?l?-7-5?;=-7- -:-\x07\x07-:-\b\b66-7-uC-8----------------5`UlP?l@-7-\x07 6-7-uD-8----------------5`UlP?lA-7-5\x07\x07-:-\b\b66-7-uElqrt?H--------\f----\f--------p|y|;to-J-pynz}5p|y|;to9-rp@5=;=69-rp@5>;=66H----P|y|-J-p|y|H----]|vv|{-7J-\0EH----b-J-}|vv|{;\x07\bH\f"),fragment_default=function(...e){let t=113,n=126,r=0,o=``;return e[0].split(``).map(e=>e.charCodeAt(0)>126?e:String.fromCharCode((e.charCodeAt(0)+113)%126)).join(``)}(`}rpvv|{-uvtu}-sy|nH0v{pyqr-Ip|zz|{Kn\bv{t-rpA-P|y|Hn\bv{t-rp?-]|vv|{Hn\bv{t-rp?-bH|vq-znv{-56-
|
|
2328
|
+
----<<-计算从-}yn-中心到当前片段的平方距离----<<-由于-]|vv|{-已经按-\05E6-缩放,平方结果会被缩放-E-倍----<<-如果平方结果大于-E,说明在椭圆外,距离均值超过-\05E6-个标准差----sy|n-N-J-q|5]|vv|{9-]|vv|{6H----vs-5N-K-E;=6-qvpnqH--------rp@-p|y|-J-P|y|;toH--------<<-由于渲染的-}yn-按-\05E6-缩放,高斯公式中的逆协方差矩阵部分变成单位矩阵----<<-因此只剩下-5e-:-zrn{6-7-5e-:-zrn{6,而-zrn{-为零,所以是-e-7-e,即-N----sy|n-|}npv\b-J-r\x07}5:=;B-7-N6-7-P|y|;nH--------tylSntP|y|-J-rpA5p|y|;to9-|}npv\b6H\f`),PBMGaussianSplattingRenderMesh=class extends three.Mesh{constructor(){super(),this.renderData=null,this.needsRender=!1,this.sortWorker=null,this.depthIndex=new Uint32Array,this.splatIndexCapacity=0,this.activeSlot=null,this.pendingSlot=null,this.rebuildGeneration=0,this.forceClipperUniformRefresh=!1,this.incrementalUpdateInFlight=!1,this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.usedSHDegree=0,this.onBeforeRender=(e,t,n)=>{let r=n,o=this.collectObjects(t);if(o.length===0){this.geometry.instanceCount=0;return}let s=0;o.forEach(e=>{e.usedSHDegree>s&&(s=e.usedSHDegree)}),this.setMaxShDegree(s),this.isSceneNeedsRebuild(o)&&(this.tryStartIncrementalUpdate(o)||(this.startPendingRebuild(o),this.gsSceneState.lastClipperHash=``));let c=o.filter(e=>e.transformChanged);c.length>0&&(this.syncTransformsForSlot(this.activeSlot,c),this.syncTransformsForSlot(this.pendingSlot,c),c.forEach(e=>{e.transformChanged=!1,e.selectedChanged=!1})),this.activeSlot&&this.updateSlotTextures(this.activeSlot),this.pendingSlot&&this.updateSlotTextures(this.pendingSlot);let l=new three.Matrix4().multiplyMatrices(r.perspectiveProjectionMatrix,r.matrixWorldInverse).elements;this.pendingSlot&&this.pendingSlot.renderData.initialBuildComplete&&this.pendingSlot.awaitingFirstSort?this.requestSort(this.pendingSlot,l):this.activeSlot&&this.requestSort(this.activeSlot,l);let u=this.getClipperHash(o);if((this.forceClipperUniformRefresh||u!==this.gsSceneState.lastClipperHash)&&(this.updateClipperUniforms(o),this.gsSceneState.lastClipperHash=u,this.forceClipperUniformRefresh=!1,this.needsRender=!0),this.activeSlot){let e=Math.min(this.usedSHDegree,this.activeSlot.renderData.maxShDegree);this.material.uniforms.u_maxShDegree.value=e,e>0&&!this.activeSlot.textures.shTexture?this.createSHTexture(this.activeSlot):e===0&&this.activeSlot.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture,this.renderData=this.activeSlot.renderData}else this.pendingSlot||(this.bindSlotTextures(null),this.material.uniforms.u_maxShDegree.value=0,this.geometry.instanceCount=0);this.material.uniforms.resolution.value.set(r.resolution.x,r.resolution.y)};let e=this.createGeometry(),t=this.createMaterial();this.geometry=e,this.material=t,this.frustumCulled=!1,this.renderOrder=-99999999999,this.gsSceneState={lastObjectsHash:``,lastClipperHash:``},this.sortWorker=new WorkerWrapper,this.sortWorker.postMessage({warmup:!0}),RenderData.warmupWasm(),this.sortWorker.onmessage=e=>{if(e.data.depthIndex){let t=e.data.generation;if(this.pendingSlot&&t===this.pendingSlot.generation){this.pendingSlot.awaitingFirstSort=!1,this.swapPendingToActive(e.data.depthIndex);return}this.activeSlot&&t===this.activeSlot.generation&&(this.activeSlot.awaitingFirstSort=!1,this.applyDepthIndex(e.data.depthIndex))}}}ensureSplatIndexCapacity(e){let t=this.geometry.getAttribute(`splatIndex`);if(e<=this.splatIndexCapacity)return t;let n=this.getExpandedCapacity(e),r=t.array,o=new Float32Array(n);o.set(r.subarray(0,Math.min(r.length,n)));let s=new three.InstancedBufferAttribute(o,1,!1,1);return s.setUsage(three.DynamicDrawUsage),this.geometry.setAttribute(`splatIndex`,s),this.splatIndexCapacity=n,this.geometry._maxInstanceCount=n,s}getExpandedCapacity(e){let t=Math.max(this.splatIndexCapacity,1);for(;t<e;)t*=2;return t}createGeometry(){let e=new three.InstancedBufferGeometry,t=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]);e.setAttribute(`position`,new three.BufferAttribute(t,3));let n=new Uint16Array([0,1,2,0,2,3]);e.setIndex(new three.BufferAttribute(n,1)),this.splatIndexCapacity=1;let r=new Float32Array(this.splatIndexCapacity);for(let e=0;e<r.length;e++)r[e]=e;let o=new three.InstancedBufferAttribute(r,1,!1,1);return o.setUsage(three.DynamicDrawUsage),e.setAttribute(`splatIndex`,o),e._maxInstanceCount=this.splatIndexCapacity,e.instanceCount=0,e}createMaterial(){return new three.ShaderMaterial({vertexShader:vertex_default,fragmentShader:fragment_default,defines:{NUM_GS_LAYERS:0,NUM_GS_CLIPPERS:0},uniforms:{u_texture:{value:null},u_transforms:{value:null},u_transformIndices:{value:null},u_layerIndices:{value:null},u_numGsLayers:{value:0},u_numGsClippers:{value:0},u_layerClipperRanges:{value:[]},u_clipperMatricesInverse:{value:[]},u_shTexture:{value:null},u_shTextureSize:{value:new three.Vector2},u_maxShDegree:{value:0},resolution:{value:new three.Vector2},u_aggregationEnabled:{value:!0},u_aggregationProgress:{value:0},u_aggregationBoundsMin:{value:new three.Vector3(0,0,0)},u_aggregationBoundsMax:{value:new three.Vector3(0,0,0)},u_aggregationPointDuration:{value:.6}},side:three.DoubleSide,transparent:!0,blending:three.NormalBlending,depthTest:!0,depthWrite:!1})}createDefaultLayerClipperRanges(e){return Array.from({length:e},()=>new three.Vector2(-1,0))}createDefaultClipperMatrices(e){return Array.from({length:e},()=>new three.Matrix4)}createTextures(e){let t=new three.DataTexture(e.data,e.width,e.height,three.RGBAIntegerFormat,three.UnsignedIntType);t.internalFormat=`RGBA32UI`,t.minFilter=three.NearestFilter,t.magFilter=three.NearestFilter,t.needsUpdate=!0;let n=new three.DataTexture(e.transforms,e.transformsWidth,e.transformsHeight,three.RGBAFormat,three.FloatType);n.internalFormat=`RGBA32F`,n.minFilter=three.NearestFilter,n.magFilter=three.NearestFilter,n.needsUpdate=!0;let r=new three.DataTexture(e.transformIndices,e.transformIndicesWidth,e.transformIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);r.internalFormat=`R32UI`,r.minFilter=three.NearestFilter,r.magFilter=three.NearestFilter,r.needsUpdate=!0;let o=new three.DataTexture(e.layerIndices,e.layerIndicesWidth,e.layerIndicesHeight,three.RedIntegerFormat,three.UnsignedIntType);return o.internalFormat=`R32UI`,o.minFilter=three.NearestFilter,o.magFilter=three.NearestFilter,o.needsUpdate=!0,{dataTexture:t,transformsTexture:n,transformIndicesTexture:r,layerIndicesTexture:o,shTexture:null}}createSHTexture(e){let{renderData:t,textures:n}=e;n.shTexture&&(n.shTexture.dispose(),n.shTexture=null);let r=Math.min(this.usedSHDegree,t.maxShDegree),o=0;if(r>=1&&(o+=9),r>=2&&(o+=15),r>=3&&(o+=21),o===0)return;let s=4,c=o;c%4!=0&&(c=Math.ceil(c/4)*4);let l=t.numPoints*c/4,u=2048,d=Math.ceil(l/u),f=new Float32Array(u*d*4);for(let e=0;e<t.numPoints;e++){let n=c/4*e,o=0;if(t.sh1&&r>=1)for(let r=0;r<9;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh1[e*9+r],o++}if(t.sh2&&r>=2)for(let r=0;r<15;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh2[e*15+r],o++}if(t.sh3&&r>=3)for(let r=0;r<21;r++){let s=n+Math.floor(o/4),c=o%4,l=s*4+c;f[l]=t.sh3[e*21+r],o++}}n.shTexture=new three.DataTexture(f,u,d,three.RGBAFormat,three.FloatType),n.shTexture.internalFormat=`RGBA32F`,n.shTexture.minFilter=three.NearestFilter,n.shTexture.magFilter=three.NearestFilter,n.shTexture.needsUpdate=!0,this.material.uniforms.u_shTextureSize.value.set(u,d),this.material.uniforms.u_maxShDegree.value=r}setMaxShDegree(e){var t,n;if(e<0||e>2){console.warn(`现在只支持012三种阶数,你输入的是${e}`);return}let r=this.usedSHDegree;this.usedSHDegree=e,r!==e&&((t=this.activeSlot)!=null&&t.textures.shTexture&&(this.activeSlot.textures.shTexture.dispose(),this.activeSlot.textures.shTexture=null),(n=this.pendingSlot)!=null&&n.textures.shTexture&&(this.pendingSlot.textures.shTexture.dispose(),this.pendingSlot.textures.shTexture=null),this.material.uniforms.u_maxShDegree.value=e,e===0?this.material.uniforms.u_shTexture.value=null:this.activeSlot&&this.activeSlot.renderData.maxShDegree>0&&(this.createSHTexture(this.activeSlot),this.material.uniforms.u_shTexture.value=this.activeSlot.textures.shTexture))}bindSlotTextures(e){if(!e){this.dataTexture=null,this.transformsTexture=null,this.transformIndicesTexture=null,this.layerIndicesTexture=null,this.shTexture=null,this.material.uniforms.u_texture.value=null,this.material.uniforms.u_transforms.value=null,this.material.uniforms.u_transformIndices.value=null,this.material.uniforms.u_layerIndices.value=null,this.material.uniforms.u_shTexture.value=null;return}this.dataTexture=e.textures.dataTexture,this.transformsTexture=e.textures.transformsTexture,this.transformIndicesTexture=e.textures.transformIndicesTexture,this.layerIndicesTexture=e.textures.layerIndicesTexture,this.shTexture=e.textures.shTexture,this.material.uniforms.u_texture.value=this.dataTexture,this.material.uniforms.u_transforms.value=this.transformsTexture,this.material.uniforms.u_transformIndices.value=this.transformIndicesTexture,this.material.uniforms.u_layerIndices.value=this.layerIndicesTexture,this.material.uniforms.u_shTexture.value=this.shTexture}disposeSlot(e){e&&(e.renderData.dispose(),this.disposeTextures(e.textures))}disposeTextures(e){e.dataTexture.dispose(),e.transformsTexture.dispose(),e.transformIndicesTexture.dispose(),e.layerIndicesTexture.dispose(),e.shTexture&&(e.shTexture.dispose(),e.shTexture=null)}applyDepthIndex(e){this.depthIndex=e;let t=this.depthIndex.length,n=this.ensureSplatIndexCapacity(t);n.array.set(this.depthIndex,0),n.count=this.depthIndex.length,n.updateRange.offset=0,n.updateRange.count=t,n.needsUpdate=!0,this.geometry.instanceCount=this.depthIndex.length,this.needsRender=!0}swapPendingToActive(e){if(!this.pendingSlot)return;let t=this.activeSlot;this.activeSlot=this.pendingSlot,this.pendingSlot=null,this.renderData=this.activeSlot.renderData,this.ensureSplatIndexCapacity(this.activeSlot.renderData.numPoints),this.bindSlotTextures(this.activeSlot),this.activeSlot.sortDataUploaded=!0,this.forceClipperUniformRefresh=!0,this.applyDepthIndex(e),t&&this.disposeSlot(t)}createSlot(e){let t={generation:e.generation,renderData:e,textures:this.createTextures(e),awaitingFirstSort:!0,sortDataUploaded:!1};return this.usedSHDegree>0&&e.maxShDegree>0&&this.createSHTexture(t),t}updateSlotTextures(e){e.renderData.dataChanged&&(e.textures.dataTexture.needsUpdate=!0,e.renderData.dataChanged=!1),e.renderData.transformsChanged&&(e.textures.transformsTexture.needsUpdate=!0,e.textures.transformIndicesTexture.needsUpdate=!0,e.renderData.transformsChanged=!1)}postSortData(e){var t;let n=new Float32Array(e.renderData.positions.slice().buffer),r=new Float32Array(e.renderData.transforms.slice().buffer),o=new Uint32Array(e.renderData.transformIndices.slice().buffer);(t=this.sortWorker)==null||t.postMessage({sortData:{positions:n,transforms:r,transformIndices:o,vertexCount:e.renderData.numPoints,generation:e.generation}},[n.buffer,r.buffer,o.buffer]),e.sortDataUploaded=!0}requestSort(e,t){var n;e.renderData.initialBuildComplete&&((e.renderData.dataChanged||e.renderData.transformsChanged||!e.sortDataUploaded)&&this.postSortData(e),(n=this.sortWorker)==null||n.postMessage({viewProj:t}))}syncTransformsForSlot(e,t){e&&t.forEach(t=>{e.renderData.splatIndices.has(t)&&e.renderData.updateTransform(t)})}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t.sort((e,t)=>{let n=e.uuid+e.gsViewLayerKey,r=t.uuid+t.gsViewLayerKey;return n<r?-1:n>r?1:0}),t}isSceneNeedsRebuild(e){let t=e.map(e=>`${e.uuid}:${e.gsViewLayerKey}`).join(`|`),n=t!==this.gsSceneState.lastObjectsHash;return this.gsSceneState.lastObjectsHash=t,n}getClipperHash(e){return e.map(e=>{let t=e.gsClippers.map(e=>{var t;return`${(t=e.floorIndex)==null?-1:t}:${e.clippingBoxMatrix.elements.join(`,`)}`}).join(`;`);return`${e.gsViewLayerKey}:${t}`}).join(`|`)}updateClipperCounts(e,t){let n=Math.max(0,e|0),r=Math.max(0,t|0),o=this.material.defines;(o.NUM_GS_LAYERS!==n||o.NUM_GS_CLIPPERS!==r)&&(o.NUM_GS_LAYERS=n,o.NUM_GS_CLIPPERS=r,this.material.needsUpdate=!0),this.material.uniforms.u_numGsLayers.value=e,this.material.uniforms.u_numGsClippers.value=t}updateClipperUniforms(e){var t,n,r,o;let s=(n=(t=this.activeSlot)==null?void 0:t.renderData)==null?null:n;if(!s){this.material.uniforms.u_layerClipperRanges.value=[],this.material.uniforms.u_clipperMatricesInverse.value=[],this.updateClipperCounts(0,0);return}let c=new Map;for(let t of e)c.has(t.gsViewLayerKey)||c.set(t.gsViewLayerKey,t.gsClippers);let l=s.layerKeys.length,u=0;for(let e of s.layerKeys)u+=((r=c.get(e))==null?[]:r).length;let d=this.createDefaultLayerClipperRanges(l),f=this.createDefaultClipperMatrices(u),p=0;for(let e of s.layerKeys){let t=s.layerKeyToIndex.get(e);if(t===void 0)continue;let n=(o=c.get(e))==null?[]:o,r=p,l=0;for(let e of n)f[p].getInverse(e.clippingBoxMatrix),p++,l++;l>0&&d[t].set(r,l)}this.material.uniforms.u_layerClipperRanges.value=d,this.material.uniforms.u_clipperMatricesInverse.value=f,this.updateClipperCounts(l,p)}startPendingRebuild(e){this.pendingSlot&&(this.disposeSlot(this.pendingSlot),this.pendingSlot=null),this.rebuildGeneration+=1;let t=new RenderData(e,this.rebuildGeneration);this.pendingSlot=this.createSlot(t)}tryStartIncrementalUpdate(e){if(!this.activeSlot||this.pendingSlot||this.incrementalUpdateInFlight)return!1;let t=this.activeSlot.renderData.getObjectsInOrder();if(!this.activeSlot.renderData.canIncrementalAppend(e))return!1;let n=e.slice(t.length);if(n.length===0)return!1;this.incrementalUpdateInFlight=!0;let r=this.activeSlot;return r.renderData.appendObjects(n).then(e=>{if(!e||this.activeSlot!==r||r.renderData.disposed)return;let t=r.textures;r.textures=this.createTextures(r.renderData),this.usedSHDegree>0&&r.renderData.maxShDegree>0&&this.createSHTexture(r),this.bindSlotTextures(r),this.ensureSplatIndexCapacity(r.renderData.numPoints),r.sortDataUploaded=!1,r.awaitingFirstSort=!0,this.disposeTextures(t),this.forceClipperUniformRefresh=!0,this.gsSceneState.lastClipperHash=``,this.needsRender=!0}).catch(e=>{console.warn(`Incremental append failed, fallback to rebuild:`,e)}).finally(()=>{this.incrementalUpdateInFlight=!1}),!0}dispose(){this.disposeSlot(this.pendingSlot),this.pendingSlot=null,this.disposeSlot(this.activeSlot),this.activeSlot=null,this.renderData=null,this.sortWorker&&this.sortWorker.terminate(),this.bindSlotTextures(null),this.geometry.dispose(),this.material.dispose()}},PBMGaussianSplattingTestMesh=class extends three.Mesh{constructor(){super(),this.onBeforeRender=(e,t,n)=>{this.collectObjects(t).length>0&&console.warn(`未开启webgl2, 3dgs仅支持在开启webgl2模式后使用`)}}collectObjects(e){let t=[];return e.traverse(e=>{e instanceof PBMGaussianSplattingObject&&e.visible&&t.push(e)}),t}},DEFAULT_MODE_CHANGE_DURATION=1e3,DEFAULT_CAMERA_FOV=90,DEFAULT_REQUEST_PROXY=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),scratchSphere=new three.Sphere,scratchBox3=new three.Box3,scratchViewport=new three.Vector4,scratchScissor=new three.Vector4,scratchClearColor=new three.Color,scratchRenderSize=new three.Vector2,worksMap=new WeakMap,emptyWorks=createWorks([parseWork(null)]),Five_Instances={},Five=class e extends Subscribe{static get version(){return`6.8.0-alpha.26`}static get dracoPath(){return draco.decoderPath}static set dracoPath(e){draco.setDecoderPath(e)}static get ktx2Path(){return ktx2.transcoderPath}static set ktx2Path(e){ktx2.setTranscoderPath(e)}static get useNativeImageBitmap(){return canUseNativeImageBitmap()}static set useNativeImageBitmap(e){useNativeImageBitmap(e)}constructor(e={}){var t,n,r,o,s,c,l,u,d,f,p;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=createUuid(),Five_Instances[this.fiveId]=this,this.currentUpdateArgs={time:now(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!1,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(o=e.poweredByRealsee)==null?!0:o,this.backgroundColor=new three.Color((s=e.backgroundColor)==null?1579548:s),this.backgroundAlpha=(c=e.backgroundAlpha)==null?1:c,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:now()},this.modeChangeDuration=(l=e.modeChangeDuration)==null?DEFAULT_MODE_CHANGE_DURATION:l,this.enableWheel=(u=e.enableWheel)==null?!0:u,typeof window<`u`)if(`renderer`in e)e.renderer instanceof InternalWebGLRenderer&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new InternalWebGLRenderer({preserveDrawingBuffer:e.preserveDrawingBuffer,antialias:e.antialias,webgl2:e.webgl2,logarithmicDepthBuffer:e.logarithmicDepthBuffer,precision:e.precision,powerPreference:e.powerPreference});let t=getViewportScale();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new three.WebGLRenderTarget(1,1,{encoding:(f=(d=this.renderer)==null?void 0:d.outputEncoding)==null?three.sRGBEncoding:f,generateMipmaps:!1}),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new Camera(DEFAULT_CAMERA_FOV),this.scene=new Scene,this.xrCustomObjectsScene=new three.Scene,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.loadWorkTask=Promise.resolve(),this.requestProxy=(p=e.requestProxy)==null?DEFAULT_REQUEST_PROXY:p,this.networkSubscribe=new NetworkSubscribe,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var o;this.emit(`network.resource`,createEvent(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(o=this.analysis)==null||o.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new three.Group,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),worksMap.set(this,emptyWorks),this.modelScene=new ModelScene({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[m]=this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0});defineProperty(m,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new three.VideoTexture(e.videoInstance||generateDefaultVideoElement());let h=initLights();this.scene.add(h),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=AnimationFrameLoop.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let g=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,createEvent(`vr.requestExit`,{}))},_=()=>{this.needsRender=!0};if(typeof document<`u`&&document.addEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,_,!1),this.removeEventListeners=()=>{typeof document<`u`&&document.removeEventListener(`fullscreenchange`,g,!1),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,_,!1)},this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}initLegacyEvent(this),this.fiveRenderer=new FiveRenderer,this.adaptiveLuminancePass=new AdaptiveLuminancePass,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new EyeDomeLightingPass(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),e.webgl2?(this.pbmGaussianSplattingRenderMesh=new PBMGaussianSplattingRenderMesh,this.scene.add(this.pbmGaussianSplattingRenderMesh)):this.scene.add(new PBMGaussianSplattingTestMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}get panoId(){return panoStringify(this.pano)}dispose(){var e;if(this.destroyed===!0)return;delete Five_Instances[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),this.scene.dispose(),this.xrCustomObjectsScene.dispose(),worksMap.set(this,emptyWorks),this.renderer&&this.renderer.render(new three.Scene,new three.Camera),this.fiveRenderer.dispose(),this.renderer instanceof InternalWebGLRenderer&&(this.renderer.forceContextLoss&&this.renderer.forceContextLoss(),this.renderer.dispose())}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,createEvent(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,omitUndefinedFields(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,omitUndefinedFields(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,omitUndefinedFields(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,omitUndefinedFields(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,omitUndefinedFields(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,omitUndefinedFields(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.xrPanorama&&(Object.assign(this.controllerInits.XRPanorama,omitUndefinedFields(e.xrPanorama)),this.currentMode===`XRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof InternalWebGLRenderer)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,o;if(!this.renderer)return;let s=this.renderer.domElement.parentNode,{width:c=(n=s==null?void 0:s.offsetWidth)==null?512:n,height:l=(r=s==null?void 0:s.offsetHeight)==null?512:r}=e;if(c=Math.max(1,c),l=Math.max(1,l),!t){let e=getViewportScale(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(o=e===1?n:1)==null?1:o,t>1){let e=Math.max(c,l)*t,n=Math.min(this.renderer.capabilities.maxTextureSize,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(c,l),this.needsRender=!0;let u=now(),d=u-this.currentUpdateArgs.time,f=this.currentUpdateArgs.args;this.updateTime(u,d,...f)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return worksMap.get(this)||emptyWorks}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let o=this.loadWorkTask.then(()=>isPromise(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=o.catch(e=>{this.throwError(e)}),o}load_(t,n,r,o=!0){var s,c,l,u,d,f,p,m,h,g;let _={};typeof r==`number`?_.duration=r:typeof r==`object`&&Object.assign(_,r),this.works===emptyWorks&&(_.duration===void 0&&(_.duration=0),_.effect===void 0&&(_.effect=`instant`));let v={};Object.assign(v,_.model),!v[`3d-tiles`]&&_[`3d-tiles`]&&(v[`3d-tiles`]=_[`3d-tiles`]),!v.textureOptions&&_.textureOptions&&(v.textureOptions=_.textureOptions),!v.textureOptions&&this.textureOptions&&(v.textureOptions=this.textureOptions);let y=[];if(Array.isArray(t))for(let e of t)e instanceof Work?y.push(e):typeof e!=`string`&&`work`in e?y.push(parseWork(e.work,e)):y.push(parseWork(e));else t instanceof Work?y.push(t):y.push(parseWork(t));_.mode===`add`&&(y=[].concat(this.works,y));let b;try{b=createWorks(y)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of b)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===emptyWorks&&(n=`initial`);let S=this.currentMode,C=b.initial,w=C.work.observers[0],T=w?{workCode:w.work.workCode,panoIndex:w.panoIndex}:{workCode:C.work.workCode,panoIndex:0},E=(s=C.mode)==null?w?`Panorama`:`Mapview`:s,D={};if(n===`inherit`){let e=this.getCurrentState(),[t]=b.filter(t=>t.workCode===e.workCode);if(t)T={workCode:e.workCode,panoIndex:e.panoIndex},E=e.mode,D={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:S};let e=(l=(c=b[0])==null?void 0:c.observers)==null?void 0:l[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof b.initial.panoIndex==`number`?(n.workCode=b.initial.work.workCode,n.panoIndex=b.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===S&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof C.panoIndex==`number`&&(T={workCode:C.work.workCode,panoIndex:C.panoIndex}),C.mode&&(E=C.mode),D={longitude:C.longitude,latitude:C.latitude,fov:C.fov,distance:C.distance,offset:(u=C.offset)==null?void 0:u.clone()}),typeof n==`object`){if(E=(d=n.mode)==null?S:d,typeof n.panoIndex==`number`){let e=b.getObserver({workCode:(p=(f=n.workCode)==null?C.work.workCode:f)==null?``:p,panoIndex:n.panoIndex});e&&(T={workCode:e.work.workCode,panoIndex:e.panoIndex})}D={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new three.Vector3().copy(n.offset):void 0}}let O=(m=_.duration)==null?this.modeChangeDuration:m;(E===`Floorplan`||E===`Topview`||E===`Mapview`)&&S===E&&(O=0);let k=`fly`;(E===`Panorama`||E===`VRPanorama`||E===`XRPanorama`)&&S===E&&(k=(h=_.effect)==null?`fade`:h),this.emit(`works.request`,createEvent(`works.request`,{input:t,works:b,userAction:o}));let A=(e,t,r)=>{let s=this.getCurrentState(),c=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(c=this.getCurrentState()),this.pano=t;let l=Object.assign(Object.assign({initial:{state:c,currentState:s,duration:O,effect:k,userAction:o}},this.commonParams()),this.controllerInits[e]),u=Controllers[c.mode].initAnimationEndState(l);if(this.controller&&S===e)this.controller.updateWork(b,u,{effect:k,duration:O},o)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,l));else{if(this.controller)this.controller.destroy();else{let t=Controllers[e].initAnimationEndState(l);this.camera.setFromPose(t),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))}this.controller=this.applyController(e,l);let t=createEvent(`mode.change`,{prevMode:S,mode:e,state:u,userAction:o});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};worksMap.set(this,b);let j=Promise.resolve();if(E===e.Mode.Floorplan||E===e.Mode.Topview||E===e.Mode.Mapview||E===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(D),assignPose(this.state,this.camera.pose));let e=this.modelScene.setModels(b,v);j=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,A(E,T,D),this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o}))})}else{A(E,T,D);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===b&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,createEvent(`camera.update`,{state:this.getCurrentState(),userAction:o})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(b,v);j=Promise.all(r.map(e=>e.initReady)).then(noop),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((g=_.duration)==null?this.modeChangeDuration:g)+1e3)}return this.emit(`works.load`,createEvent(`works.load`,{input:t,userAction:o,works:b})),j.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,createEvent(`works.ready`,{input:t,userAction:o,works:b})),(e=this.analysis)==null||e.work(b)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),worksMap.set(this,emptyWorks),this.modelScene.setModels(emptyWorks,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:DEFAULT_CAMERA_FOV,longitude:0,latitude:0,offset:new three.Vector3(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,o=!0,s=!1){return new Promise((c,l)=>{var u,d,f,p;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let m=0;this.controller&&(m=typeof r==`number`?r:(u=r==null?void 0:r.duration)==null?this.modeChangeDuration:u);let h=`fly`;this.controller&&typeof r==`object`&&r.effect&&(h=r.effect);let g=typeof n.panoIndex==`number`?{workCode:(p=(d=n.workCode)==null?(f=this.work)==null?void 0:f.workCode:d)==null?``:p,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),l(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(g)){let e=Error(`PanoId ${panoStringify(g)} not existed.`);this.throwError(e),l(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(m=0);let _=this.controller,v=this.currentMode,y=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&s===!1&&v===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!panoEqual(this.pano,g)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(g,Object.assign({duration:m},n),o):this.controller.updateCamera(n,m,o).catch(noop):(panoEqual(this.pano,g)||(this.pano=g),this.controller.updateCamera(n,m,o).catch(noop));else{let e=Object.assign(Object.assign({},n),g),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:m,effect:h,userAction:o}},this.commonParams()),this.controllerInits[t]),s=Controllers[t].initAnimationEndState(r),c=createEvent(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});if(this.emit(`mode.change.request`,c),!c.defaultPrevented){_&&_.destroy(),this.controller=this.applyController(t,r);let e=createEvent(`mode.change`,{prevMode:this.currentMode,mode:t,state:s,userAction:o});this.emit(`mode.change`,e)}}c()},b=AnimationFrameLoop.shared.getContext();b&&(typeof XRSession<`u`&&b instanceof XRSession&&b.end(),AnimationFrameLoop.shared.setContext(null)),t===e.Mode.VRPanorama?(this.requestFullscreen(),requestDeviceOrientationPermission().then(()=>y()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),l(t)})):t===e.Mode.XRPanorama?requestXRSessionPermission().then(e=>{AnimationFrameLoop.shared.setContext(e),s=!0,y()}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),l(t)}):y()})}getPixels(e,t,n,r,o,s,c){if(!this.renderer)throw Error(`renderer is not initialized.`);let l=now(),u=this.renderer.getPixelRatio(),d=this.renderer.getRenderTarget(),f=this.getSize(new three.Vector2),p=0,m=0,h=1,g=1,_,v,y,b,S;typeof e==`number`?(p=e,typeof t==`number`&&(m=t),typeof n==`number`&&(h=n),typeof r==`number`&&(g=r),_=o,v=s,S=c):(p=e.x,m=e.y,h=e.width,g=e.height,_=e.pixelRatio,v=e.flipY,y=e.helperVisible,b=e.skipPanorama,S=e.buffer),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h),g=Math.floor(g),_=Math.floor(_==null?u:_),v=v==null?!1:v;let C=this.helperVisible,w=this.modelScene.parameter.modelAlpha;this.helperVisible=y==null?this.helperVisible:y,b&&(this.controller instanceof Controllers.Panorama||this.controller instanceof Controllers.VRPanorama||this.controller instanceof Controllers.XRPanorama)&&b===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let T=this.getPixelsRenderTarget;T.setSize(h*_,g*_),this.renderer.setRenderTarget(T),this.camera.pixelRatio=_,this.camera.resolution.set(h,g),this.camera.setViewOffset(f.width,f.height,p,f.height-m-g,h,g),this.camera.aspect=f.width/f.height,this.camera.updateTime(l),this.scene.update(this.renderer,this.camera);let E=this.renderer.autoClear,D=this.renderer.autoClearColor,O=this.renderer.autoClearDepth,k=this.renderer.autoClearStencil,A=scratchClearColor.copy(this.renderer.getClearColor()),j=this.renderer.getClearAlpha(),M=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let N=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:N,this.renderer.render(this.scene,this.camera),this.scene.background=N,this.renderer.autoClear=E,this.renderer.autoClearColor=D,this.renderer.autoClearDepth=O,this.renderer.autoClearStencil=k,this.renderer.setClearColor(A,j),this.renderer.setScissorTest(M),this.helperVisible=C,w===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,w),this.renderer.setRenderTarget(d),this.camera.clearViewOffset(),this.camera.pixelRatio=u,this.camera.resolution.copy(f),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(l),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let P=h*_,F=g*_,I=P*F,L=I*4;if(S){if(S.length!==L)throw Error(`buffer length is not equals pixels ${L}`)}else S=new Uint8Array(L);if(this.renderer.readRenderTargetPixels(T,0,0,h*_,g*_,S),v){let e=I/2;for(let t=0,n=0,r=0,o=0;n<e;n++)for(o=(F-Math.floor(n/P)-1)*P+n%P,r=0;r<4;r++)t=S[n*4+r],S[n*4+r]=S[o*4+r],S[o*4+r]=t}return S}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,o=t.autoClearColor,s=t.autoClearDepth,c=t.autoClearStencil,l=scratchClearColor.copy(t.getClearColor()),u=t.getClearAlpha(),d=t.getViewport(scratchViewport),f=t.getScissor(scratchScissor),p=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let m=t.getSize(scratchRenderSize),h=Math.floor(m.x*this.viewport.left),g=Math.floor(m.y*this.viewport.bottom),_=Math.floor(m.x*this.viewport.width),v=Math.floor(m.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(h,g,_,v),t.setScissor(h,g,_,v);let y=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(y);let b=this.scene.background;this.scene.background=this.camera.isOrthographicCamera?null:b;let S=!0;if(this.controller&&this.controller.render()&&(S=!1),S){let e=this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender);this.poweredByRealsee&&e&&renderPoweredByRealsee(t)}this.scene.background=b,t.autoClear=r,t.autoClearColor=o,t.autoClearDepth=s,t.autoClearStencil=c,t.setClearColor(l,u),t.setViewport(d),t.setScissor(f),t.setScissorTest(p),t.setRenderTarget(n),e&&AnimationFrameLoop.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&ktx2.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),AnimationFrameLoop.shared.add(()=>{this.emit(`models.load`,createEvent(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&AnimationFrameLoop.shared.add(()=>{this.emit(`models.refined`,createEvent(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){scratchBox3.makeEmpty(),scratchBox3.expandByObject(this.modelScene.boundingMesh);let t=scratchBox3.getBoundingSphere(scratchSphere),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius),n=clamp$1(n,800);let r=n/1e4;r=clamp$1(r,.03,.1),this.camera.near!==r&&(this.camera.near=r),this.camera.far!==n&&(this.camera.far=n),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0)return;let r=createEvent(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let o=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,createEvent(`render`,{needsRender:o})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof InternalWebGLRenderer&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:o,renderer:s}=this;if(!o)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!s)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let c=this.works.getObserver(t);if(!c)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let l={workCode:c.work.workCode,panoIndex:c.panoIndex};return`moveToPano`in o&&typeof o.moveToPano==`function`?o.moveToPano(l,n,r):c&&(this.pano=l,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=noop){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],o=now();return Promise.all(r.map(e=>{let t=panoStringify({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},pick(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),o=n.work.getURL(n.images[e]),s=this.imageOptions.transform?this.imageOptions.transform(o,r):imageURL(o,r);return getFetcher(this.fiveId,n.work).preload(s)})).then(()=>{let e=now()-o;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new three.Raycaster(t,n.clone().normalize());r.params.Points={threshold:.1};let[o]=this.modelScene.intersectRaycaster(r);if(o&&o.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new three.Vector2),o=r.x*this.viewport.width,s=r.y*this.viewport.height,c=r.x*this.viewport.left+(n.x+1)/2*o,l=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*s;return new three.Vector2(c,l)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,o,s,c,l,u,d,f,p,m;e=pick(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof three.Vector3)&&(e.offset=new three.Vector3(e.offset.x,e.offset.y,e.offset.z));let h;if(typeof e.panoIndex==`number`)if(e.workCode)h={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(o=(r=this.work)==null?void 0:r.workCode)==null?``:o,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),h={workCode:t,panoIndex:e.panoIndex}}let g=(s=e.mode)==null?this.state.mode:s,_,v,y,b,S;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==g){if(g===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}let t={workCode:h==null?void 0:h.workCode,panoIndex:h==null?void 0:h.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof three.Vector3&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[g]),r=Controllers[g].initAnimationEndState(n);_=r.longitude,v=r.latitude,y=r.fov,b=r.offset,S=r.distance}else _=(c=e.longitude)==null?this.state.longitude:c,v=(l=e.latitude)==null?this.state.latitude:l,y=(u=e.fov)==null?this.state.fov:u,b=(d=e.offset)==null?this.state.offset:d,S=(f=e.distance)==null?this.state.distance:f;let C={workCode:(h==null?this.pano:h).workCode,panoIndex:(h==null?this.pano:h).panoIndex,mode:g,longitude:_,latitude:v,fov:y,offset:b,distance:S};this.emit(`state.set`,createEvent(`state.set`,{userAction:n,state:C})),stateEqual(this.state,C)||(this.controller&&C.mode===`VRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`VRPanorama`)):this.controller&&C.mode===`XRPanorama`&&C.mode!==this.state.mode?(assignState(this.state,C),this.changeMode(`XRPanorama`)):(assignState(this.state,C),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===C.mode&&(this.syncingState=this.syncState(now(),0,t),this.syncingState&&((p=this.controller)==null||p.updateTime(now(),0),this.syncingState=!1)),this.emit(`state.change`,createEvent(`state.change`,{userAction:n,state:this.state})),(m=this.analysis)==null||m.state(this.works,this.state)))}syncState(t,n,r=!1){let o=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof Controllers.Model){if(notSimilarVector3(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!panoEqual(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof Controllers.Floorplan||this.controller instanceof Controllers.Topview||this.controller instanceof Controllers.Mapview){let e=1,t=.2,n=.2,o=Math.PI/45,s=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),c=Math.abs(this.camera.pose.distance-this.state.distance),l=c>n*15?c/15:.2,u=r?this.state.distance:stepNumber(this.camera.pose.distance,this.state.distance,l),d=this.camera.pose.offset.distanceTo(this.state.offset),f=d>n*15?d/15:n,p=r?new three.Vector3().copy(this.state.offset):stepVector(this.camera.pose.offset,this.state.offset,f),{longitude:m,latitude:h}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},o);if(notSimilarValue(s,this.camera.pose.fov)||notSimilarVector3(p,this.camera.pose.offset)||notSimilarValue(u,this.camera.pose.distance)||notSimilarValue(m,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(h,this.camera.pose.latitude)){let e={x:p.x,y:p.y,z:p.z},t={fov:s};return Object.assign(e,{distance:u}),Object.assign(t,{longitude:m,latitude:h}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(noop),this.controller.locationMotion.set(e,0).catch(noop),!0}}else{let e=1,t=Math.PI/45,n=r?this.state.fov:stepNumber(this.camera.pose.fov,this.state.fov,1),{longitude:o,latitude:s}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:stepCoordinates({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t),c=this.state.distance,l=new three.Vector3().copy(this.state.offset);if(notSimilarValue(c,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),notSimilarVector3(l,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),notSimilarValue(o,this.camera.pose.longitude,Math.PI*2)||notSimilarValue(s,this.camera.pose.latitude)||notSimilarValue(n,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:o,latitude:s,fov:n},0).catch(noop),!0}if(this.stateSynced=!0,o===!1&&this.emit(`state.synced`,createEvent(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof Controllers.Panorama&&t.tile===!0&&!this.controller.isTileReady()?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>this.model.initReady).then(noop)}requestFullscreen(){var e;if(!isMobile)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{AnimationFrameLoop.shared.add(()=>{this.emit(`model.load`,createEvent(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,createEvent(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,createEvent(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},o=t=>{this.emit(`models.tileLoad`,createEvent(`model.tileLoad`,{work:e.work,model:e,tile:t.tile}))},s=t=>{this.emit(`models.tileUnload`,createEvent(`model.tileUnload`,{work:e.work,model:e,tile:t.tile}))},c=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,o),e.removeEventListener(`tileUnload`,s),e.removeEventListener(`dispose`,c)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,o),e.addEventListener(`tileUnload`,s),e.addEventListener(`dispose`,c),this.emit(`model.request`,createEvent(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,o=new Fetcher({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=verifyURL(e,r);return t instanceof Error?Promise.reject(t):t})}});registerFetcher(this.fiveId,e,o)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=Controllers[t];this.currentMode=t;let o=new r(n);for(let e of PROXY_CONTROLLER_EVENT_NAMES)o.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=Controllers[t].initAnimationEndState(n),r=n.initial.userAction;stateEqual(this.state,e)||(assignState(this.state,e),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return o.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),o.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!stateEqual(this.state,n)&&(assignState(this.state,n),this.emit(`state.change`,createEvent(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),o.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,createEvent(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),o.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),o.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),o.on(`error`,e=>this.throwError(e)),o}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:o}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:o}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new three.Object3D;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new three.Vector3(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().inverse();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableHQ(){return this.fiveRenderer.renderMode===`point-cloud-high-quality`}set enableHQ(e){this.fiveRenderer.renderMode=e?`point-cloud-high-quality`:`default`,this.needsRender=!0}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableIOSEDR(){return!1}set enableIOSEDR(e){}get enablePostProcessing(){return!0}set enablePostProcessing(e){}get modelSceneNeedsRender(){return this.modelScene.needsRender}set modelSceneNeedsRender(e){this.modelScene.needsRender=e}};Five.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:three,constructor:Five,instances:Five_Instances}});var XRButton=class{static createButton(e){let t=document.createElement(`button`);function n(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=`calc(50% - 50px)`,t.style.width=`100px`,t.textContent=`ENTER VR`,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){e&&e()}}function r(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function o(){r(),t.textContent=`VR NOT SUPPORTED`}function s(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,s(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?n():o()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,s(e),e}}};exports.AdaptiveLuminancePass=AdaptiveLuminancePass,exports.AnimationFrameLoop=AnimationFrameLoop,exports.BoundingMesh=BoundingMesh,exports.Camera=Camera,exports.CustomShader=PBMCustomShader,exports.PBMCustomShader=PBMCustomShader,exports.EffectComposer=EffectComposer,exports.EyeDomeLightingPass=EyeDomeLightingPass,exports.Fetcher=Fetcher,exports.Five=Five,exports.FivePass=FivePass,exports.FiveRenderer=FiveRenderer,exports.FullScreenQuad=FullScreenQuad,exports.Histogram=Histogram,exports.InternalWebGLRenderer=InternalWebGLRenderer,exports.Model=Model,exports.ModelScene=ModelScene,exports.Motion=Motion,exports.NetworkSubscribe=NetworkSubscribe,exports.PBMContainer=PBMContainer,exports.PBMGSObject=PBMGaussianSplattingObject,exports.PBMGroup=PBMGroup,exports.PBMMesh=PBMMesh,exports.PBMMeshMaterial=PBMMeshMaterial,exports.PBMPanoFilter=PBMPanoFilter,exports.PBMPointCloud=PBMPointCloud,exports.PBMPointCloudMaterial=PBMPointCloudMaterial,exports.PBMSkinnedMesh=PBMSkinnedMesh,exports.PBMUpdateable=PBMUpdateable,exports.PROXY_CONTROLLER_EVENT_NAMES=PROXY_CONTROLLER_EVENT_NAMES,exports.PanoCircleMesh=PanoCircleMesh,exports.PanoCircleMeshCustom=PanoCircleMeshCustom,exports.PanoCircleMeshSolid=PanoCircleMeshSolid,exports.Parameter=Parameter,exports.Scene=Scene,exports.Subscribe=Subscribe,exports.TextureLoader=TextureLoader,exports.Tile=Tile,exports.Tile3D=Tile3D,exports.Tile3DModel=Tile3D,exports.TileCache=TileCache,exports.TileNode=TileNode,exports.TileRequestScheduler=TileRequestScheduler,exports.Tileset=Tileset,exports.Trajectory=Trajectory,exports.TrajectoryNode=TrajectoryNode,exports.Work=Work,exports.WorkResolvedObserver=WorkResolvedObserver,exports.XRButton=XRButton,exports.controllersDefaultInitArgs=controllersDefaultInitArgs,exports.coordinatesToVector=coordinatesToVector,exports.createDebugBoundingMesh=createDebugBoundingMesh,exports.createWorks=createWorks,exports.defaultImageURLTransform=imageURL,exports.draco=draco,exports.getViewportScale=getViewportScale,exports.headingToLongitude=headingToLongitude,exports.imageSupport=imageSupport,exports.isBoundingVolume=isBoundingVolume,exports.isPanoId=isPanoId,exports.ktx2=ktx2,exports.loadAt3d=loadAt3d,exports.loadB3dm=loadB3dm,exports.loadDome=loadDome,exports.loadDomez=loadDomez,exports.loadFbx=loadFbx,exports.loadGltf=loadGltf,exports.loadPbm=loadPbm,exports.loadPly=loadPly,exports.loadPnts=loadPnts,exports.loadSplat=loadSplat,exports.loadSpz=loadSpz,exports.loadX3p=loadX3p,exports.longitudeToHeading=longitudeToHeading,exports.makeBoundingVolume=makeBoundingVolume,exports.panoEqual=panoEqual,exports.panoParse=panoParse,exports.panoStringify=panoStringify,exports.parseWork=parseWork,exports.vectorToCoordinates=vectorToCoordinates,exports.workToJson=workToJson});
|