@soonspacejs/plugin-tiles 2.13.6 → 2.13.7
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/README.md +3 -3
- package/dist/index.esm.js +6111 -1
- package/dist/index.esm.js.map +1 -0
- package/package.json +3 -3
- package/dist/index.d.ts +0 -16
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/urlExtension.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/LRUCache.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/PriorityQueue.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/base/constants.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/base/traverseFunctions.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/base/TilesRendererBase.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/arrayToString.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/FeatureTable.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/BatchTableHierarchyExtension.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/BatchTable.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/base/loaders/LoaderBase.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/readMagicBytes.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/base/loaders/B3DMLoaderBase.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/loaders/B3DMLoader.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/base/loaders/PNTSLoaderBase.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/utilities/rgb565torgb.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/loaders/PNTSLoader.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/base/loaders/I3DMLoaderBase.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/math/GeoUtils.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/math/Ellipsoid.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/math/GeoConstants.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/loaders/I3DMLoader.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/base/loaders/CMPTLoaderBase.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/loaders/CMPTLoader.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/plugins/three/gltf/GLTFCesiumRTCExtension.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/math/EllipsoidRegion.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/loaders/gltf/GLTFCesiumRTCExtension.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/loaders/GLTFExtensionLoader.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/TilesGroup.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/raycastTraverse.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/math/OBB.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/math/TileBoundingVolume.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/math/ExtendedFrustum.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/utilities.js","../../../../node_modules/.pnpm/3d-tiles-renderer@0.3.46_@t_8ae74e5b98d5709779ec2da75f25aeab/node_modules/3d-tiles-renderer/src/three/TilesRenderer.js","../src/KHR_texture_basisu.js","../src/index.ts"],"sourcesContent":["/**\n * Returns the file extension of the path component of a URL\n * @param {string} url\n * @returns {string} null if no extension found\n */\nexport function getUrlExtension( url ) {\n\n\tlet parsedUrl;\n\ttry {\n\n\t\tparsedUrl = new URL( url, 'http://fakehost.com/' );\n\n\t} catch ( _ ) {\n\n\t\t// Ignore invalid URLs\n\t\treturn null;\n\n\t}\n\n\tconst filename = parsedUrl.pathname.split( '/' ).pop();\n\tconst dotIndex = filename.lastIndexOf( '.' );\n\tif ( dotIndex === - 1 || dotIndex === filename.length - 1 ) {\n\n\t\t// Has no extension or has trailing . character\n\t\treturn null;\n\n\t}\n\n\tconst extension = filename.substring( dotIndex + 1 );\n\treturn extension;\n\n}\n","const GIGABYTE_BYTES = 2 ** 30;\n\nclass LRUCache {\n\n\tget unloadPriorityCallback() {\n\n\t\treturn this._unloadPriorityCallback;\n\n\t}\n\n\tset unloadPriorityCallback( cb ) {\n\n\t\tif ( cb.length === 1 ) {\n\n\t\t\tconsole.warn( 'LRUCache: \"unloadPriorityCallback\" function has been changed to take two arguments.' );\n\t\t\tthis._unloadPriorityCallback = ( a, b ) => {\n\n\t\t\t\tconst valA = cb( a );\n\t\t\t\tconst valB = cb( b );\n\n\t\t\t\tif ( valA < valB ) return - 1;\n\t\t\t\tif ( valA > valB ) return 1;\n\t\t\t\treturn 0;\n\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tthis._unloadPriorityCallback = cb;\n\n\t\t}\n\n\t}\n\n\tconstructor() {\n\n\t\t// options\n\t\tthis.minSize = 6000;\n\t\tthis.maxSize = 8000;\n\t\tthis.minBytesSize = 0.3 * GIGABYTE_BYTES;\n\t\tthis.maxBytesSize = 0.4 * GIGABYTE_BYTES;\n\t\tthis.unloadPercent = 0.05;\n\t\tthis.autoMarkUnused = true;\n\n\t\t// \"itemSet\" doubles as both the list of the full set of items currently\n\t\t// stored in the cache (keys) as well as a map to the time the item was last\n\t\t// used so it can be sorted appropriately.\n\t\tthis.itemSet = new Map();\n\t\tthis.itemList = [];\n\t\tthis.usedSet = new Set();\n\t\tthis.callbacks = new Map();\n\t\tthis.markUnusedQueued = false;\n\t\tthis.unloadingHandle = - 1;\n\t\tthis.cachedBytes = 0;\n\t\tthis.bytesMap = new Map();\n\t\tthis.loadedSet = new Set();\n\n\t\tthis._unloadPriorityCallback = null;\n\t\tthis.computeMemoryUsageCallback = () => null;\n\n\t\tconst itemSet = this.itemSet;\n\t\tthis.defaultPriorityCallback = item => itemSet.get( item );\n\n\t}\n\n\t// Returns whether or not the cache has reached the maximum size\n\tisFull() {\n\n\t\treturn this.itemSet.size >= this.maxSize || this.cachedBytes >= this.maxBytesSize;\n\n\t}\n\n\tgetMemoryUsage( item ) {\n\n\t\treturn this.bytesMap.get( item ) ?? null;\n\n\t}\n\n\tadd( item, removeCb ) {\n\n\t\tif ( this.markUnusedQueued ) {\n\n\t\t\tthis.markAllUnused();\n\n\t\t}\n\n\t\tconst itemSet = this.itemSet;\n\t\tif ( itemSet.has( item ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tif ( this.isFull() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst usedSet = this.usedSet;\n\t\tconst itemList = this.itemList;\n\t\tconst callbacks = this.callbacks;\n\t\tconst bytesMap = this.bytesMap;\n\t\titemList.push( item );\n\t\tusedSet.add( item );\n\t\titemSet.set( item, Date.now() );\n\t\tcallbacks.set( item, removeCb );\n\n\t\t// computeMemoryUsageCallback can return \"null\" if memory usage is not known, yet\n\t\tconst bytes = this.computeMemoryUsageCallback( item );\n\t\tthis.cachedBytes += bytes || 0;\n\t\tbytesMap.set( item, bytes );\n\n\t\treturn true;\n\n\t}\n\n\thas( item ) {\n\n\t\treturn this.itemSet.has( item );\n\n\t}\n\n\tremove( item ) {\n\n\t\tconst usedSet = this.usedSet;\n\t\tconst itemSet = this.itemSet;\n\t\tconst itemList = this.itemList;\n\t\tconst bytesMap = this.bytesMap;\n\t\tconst callbacks = this.callbacks;\n\t\tconst loadedSet = this.loadedSet;\n\n\t\tif ( itemSet.has( item ) ) {\n\n\t\t\tthis.cachedBytes -= bytesMap.get( item ) || 0;\n\t\t\tbytesMap.delete( item );\n\n\t\t\tcallbacks.get( item )( item );\n\n\t\t\tconst index = itemList.indexOf( item );\n\t\t\titemList.splice( index, 1 );\n\t\t\tusedSet.delete( item );\n\t\t\titemSet.delete( item );\n\t\t\tcallbacks.delete( item );\n\t\t\tloadedSet.delete( item );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t// Marks whether tiles in the cache have been completely loaded or not. Tiles that have not been completely\n\t// loaded are subject to being disposed early if the cache is full above its max size limits, even if they\n\t// are marked as used.\n\tsetLoaded( item, value ) {\n\n\t\tconst { itemSet, loadedSet } = this;\n\t\tif ( itemSet.has( item ) ) {\n\n\t\t\tif ( value === true ) {\n\n\t\t\t\tloadedSet.add( item );\n\n\t\t\t} else {\n\n\t\t\t\tloadedSet.delete( item );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMemoryUsage( item ) {\n\n\t\tconst itemSet = this.itemSet;\n\t\tconst bytesMap = this.bytesMap;\n\t\tif ( ! itemSet.has( item ) ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.cachedBytes -= bytesMap.get( item ) || 0;\n\n\t\tconst bytes = this.computeMemoryUsageCallback( item );\n\t\tbytesMap.set( item, bytes );\n\t\tthis.cachedBytes += bytes;\n\n\t}\n\n\tmarkUsed( item ) {\n\n\t\tif ( this.markUnusedQueued ) {\n\n\t\t\tthis.markAllUnused();\n\n\t\t}\n\n\t\tconst itemSet = this.itemSet;\n\t\tconst usedSet = this.usedSet;\n\t\tif ( itemSet.has( item ) && ! usedSet.has( item ) ) {\n\n\t\t\titemSet.set( item, Date.now() );\n\t\t\tusedSet.add( item );\n\n\t\t}\n\n\t}\n\n\tmarkUnused( item ) {\n\n\t\tconst usedSet = this.usedSet;\n\t\tif ( usedSet.has( item ) ) {\n\n\t\t\tusedSet.delete( item );\n\n\t\t}\n\n\t}\n\n\tmarkAllUnused() {\n\n\t\tthis.usedSet.clear();\n\t\tthis.markUnusedQueued = false;\n\t\tif ( this.unloadingHandle !== - 1 ) {\n\n\t\t\tcancelAnimationFrame( this.unloadingHandle );\n\t\t\tthis.unloadingHandle = - 1;\n\n\t\t}\n\n\t}\n\n\t// TODO: this should be renamed because it's not necessarily unloading all unused content\n\t// Maybe call it \"cleanup\" or \"unloadToMinSize\"\n\tunloadUnusedContent() {\n\n\t\tconst {\n\t\t\tunloadPercent,\n\t\t\tminSize,\n\t\t\tmaxSize,\n\t\t\titemList,\n\t\t\titemSet,\n\t\t\tusedSet,\n\t\t\tloadedSet,\n\t\t\tcallbacks,\n\t\t\tbytesMap,\n\t\t\tminBytesSize,\n\t\t\tmaxBytesSize,\n\t\t} = this;\n\n\t\tconst unused = itemList.length - usedSet.size;\n\t\tconst unloaded = itemList.length - loadedSet.size;\n\t\tconst excessNodes = Math.max( Math.min( itemList.length - minSize, unused ), 0 );\n\t\tconst excessBytes = this.cachedBytes - minBytesSize;\n\t\tconst unloadPriorityCallback = this.unloadPriorityCallback || this.defaultPriorityCallback;\n\t\tlet needsRerun = false;\n\n\t\tconst hasNodesToUnload = excessNodes > 0 && unused > 0 || unloaded && itemList.length > maxSize;\n\t\tconst hasBytesToUnload = unused && this.cachedBytes > minBytesSize || unloaded && this.cachedBytes > maxBytesSize;\n\t\tif ( hasBytesToUnload || hasNodesToUnload ) {\n\n\t\t\t// used items should be at the end of the array, \"unloaded\" items in the middle of the array\n\t\t\titemList.sort( ( a, b ) => {\n\n\t\t\t\tconst usedA = usedSet.has( a );\n\t\t\t\tconst usedB = usedSet.has( b );\n\t\t\t\tif ( usedA === usedB ) {\n\n\t\t\t\t\tconst loadedA = loadedSet.has( a );\n\t\t\t\t\tconst loadedB = loadedSet.has( b );\n\t\t\t\t\tif ( loadedA === loadedB ) {\n\n\t\t\t\t\t\t// Use the sort function otherwise\n\t\t\t\t\t\t// higher priority should be further to the left\n\t\t\t\t\t\treturn - unloadPriorityCallback( a, b );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\treturn loadedA ? 1 : - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// If one is used and the other is not move the used one towards the end of the array\n\t\t\t\t\treturn usedA ? 1 : - 1;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// address corner cases where the minSize might be zero or smaller than maxSize - minSize,\n\t\t\t// which would result in a very small or no items being unloaded.\n\t\t\tconst maxUnload = Math.max( minSize * unloadPercent, excessNodes * unloadPercent );\n\t\t\tconst nodesToUnload = Math.ceil( Math.min( maxUnload, unused, excessNodes ) );\n\t\t\tconst maxBytesUnload = Math.max( unloadPercent * excessBytes, unloadPercent * minBytesSize );\n\t\t\tconst bytesToUnload = Math.min( maxBytesUnload, excessBytes );\n\n\t\t\tlet removedNodes = 0;\n\t\t\tlet removedBytes = 0;\n\n\t\t\t// evict up to the max node or bytes size, keeping one more item over the max bytes limit\n\t\t\t// so the \"full\" function behaves correctly.\n\t\t\twhile (\n\t\t\t\tthis.cachedBytes - removedBytes > maxBytesSize ||\n\t\t\t\titemList.length - removedNodes > maxSize\n\t\t\t) {\n\n\t\t\t\tconst item = itemList[ removedNodes ];\n\t\t\t\tconst bytes = bytesMap.get( item ) || 0;\n\t\t\t\tif (\n\t\t\t\t\tusedSet.has( item ) && loadedSet.has( item ) ||\n\t\t\t\t\tthis.cachedBytes - removedBytes - bytes < maxBytesSize &&\n\t\t\t\t\titemList.length - removedNodes <= maxSize\n\t\t\t\t) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tremovedBytes += bytes;\n\t\t\t\tremovedNodes ++;\n\n\t\t\t}\n\n\t\t\t// evict up to the min node or bytes size, keeping one more item over the min bytes limit\n\t\t\t// so we're meeting it\n\t\t\twhile (\n\t\t\t\tremovedBytes < bytesToUnload ||\n\t\t\t\tremovedNodes < nodesToUnload\n\t\t\t) {\n\n\t\t\t\tconst item = itemList[ removedNodes ];\n\t\t\t\tconst bytes = bytesMap.get( item ) || 0;\n\t\t\t\tif (\n\t\t\t\t\tusedSet.has( item ) ||\n\t\t\t\t\tthis.cachedBytes - removedBytes - bytes < minBytesSize &&\n\t\t\t\t\tremovedNodes >= nodesToUnload\n\t\t\t\t) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tremovedBytes += bytes;\n\t\t\t\tremovedNodes ++;\n\n\t\t\t}\n\n\t\t\t// remove the nodes\n\t\t\titemList.splice( 0, removedNodes ).forEach( item => {\n\n\t\t\t\tthis.cachedBytes -= bytesMap.get( item ) || 0;\n\n\t\t\t\tcallbacks.get( item )( item );\n\t\t\t\tbytesMap.delete( item );\n\t\t\t\titemSet.delete( item );\n\t\t\t\tcallbacks.delete( item );\n\t\t\t\tloadedSet.delete( item );\n\t\t\t\tusedSet.delete( item );\n\n\t\t\t} );\n\n\t\t\t// if we didn't remove enough nodes or we still have excess bytes and there are nodes to removed\n\t\t\t// then we want to fire another round of unloading\n\t\t\tneedsRerun = removedNodes < excessNodes || removedBytes < excessBytes && removedNodes < unused;\n\t\t\tneedsRerun = needsRerun && removedNodes > 0;\n\n\t\t}\n\n\t\tif ( needsRerun ) {\n\n\t\t\tthis.unloadingHandle = requestAnimationFrame( () => this.scheduleUnload() );\n\n\t\t}\n\n\t}\n\n\tscheduleUnload() {\n\n\t\tif ( ! this.scheduled ) {\n\n\t\t\tthis.scheduled = true;\n\t\t\tqueueMicrotask( () => {\n\n\t\t\t\tthis.scheduled = false;\n\t\t\t\tthis.unloadUnusedContent();\n\n\t\t\t\tif ( this.autoMarkUnused ) {\n\n\t\t\t\t\tthis.markUnusedQueued = true;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nexport { LRUCache };\n","class PriorityQueue {\n\n\tconstructor() {\n\n\t\t// options\n\t\tthis.maxJobs = 6;\n\n\t\tthis.items = [];\n\t\tthis.callbacks = new Map();\n\t\tthis.currJobs = 0;\n\t\tthis.scheduled = false;\n\t\tthis.autoUpdate = true;\n\n\t\tthis.priorityCallback = () => {\n\n\t\t\tthrow new Error( 'PriorityQueue: PriorityCallback function not defined.' );\n\n\t\t};\n\n\t\t// Customizable scheduling callback. Default using requestAnimationFrame()\n\t\tthis.schedulingCallback = func => {\n\n\t\t\trequestAnimationFrame( func );\n\n\t\t};\n\n\t\tthis._runjobs = () => {\n\n\t\t\tthis.tryRunJobs();\n\t\t\tthis.scheduled = false;\n\n\t\t};\n\n\t}\n\n\tsort() {\n\n\t\tconst priorityCallback = this.priorityCallback;\n\t\tconst items = this.items;\n\t\titems.sort( priorityCallback );\n\n\t}\n\n\tadd( item, callback ) {\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tconst prCallback = ( ...args ) => callback( ...args ).then( resolve ).catch( reject );\n\t\t\tconst items = this.items;\n\t\t\tconst callbacks = this.callbacks;\n\n\t\t\titems.push( item );\n\t\t\tcallbacks.set( item, prCallback );\n\n\t\t\tif ( this.autoUpdate ) {\n\n\t\t\t\tthis.scheduleJobRun();\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tremove( item ) {\n\n\t\tconst items = this.items;\n\t\tconst callbacks = this.callbacks;\n\n\t\tconst index = items.indexOf( item );\n\t\tif ( index !== - 1 ) {\n\n\t\t\titems.splice( index, 1 );\n\t\t\tcallbacks.delete( item );\n\n\t\t}\n\n\t}\n\n\ttryRunJobs() {\n\n\t\tthis.sort();\n\n\t\tconst items = this.items;\n\t\tconst callbacks = this.callbacks;\n\t\tconst maxJobs = this.maxJobs;\n\t\tlet currJobs = this.currJobs;\n\t\twhile ( maxJobs > currJobs && items.length > 0 ) {\n\n\t\t\tcurrJobs ++;\n\t\t\tconst item = items.pop();\n\t\t\tconst callback = callbacks.get( item );\n\t\t\tcallbacks.delete( item );\n\t\t\tcallback( item )\n\t\t\t\t.then( () => {\n\n\t\t\t\t\tthis.currJobs --;\n\n\t\t\t\t\tif ( this.autoUpdate ) {\n\n\t\t\t\t\t\tthis.scheduleJobRun();\n\n\t\t\t\t\t}\n\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\n\t\t\t\t\tthis.currJobs --;\n\n\t\t\t\t\tif ( this.autoUpdate ) {\n\n\t\t\t\t\t\tthis.scheduleJobRun();\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t}\n\t\tthis.currJobs = currJobs;\n\n\t}\n\n\tscheduleJobRun() {\n\n\t\tif ( ! this.scheduled ) {\n\n\t\t\tthis.schedulingCallback( this._runjobs );\n\n\t\t\tthis.scheduled = true;\n\n\t\t}\n\n\t}\n\n}\n\nexport { PriorityQueue };\n","// FAILED is negative so lru cache priority sorting will unload it first\nexport const FAILED = - 1;\nexport const UNLOADED = 0;\nexport const LOADING = 1;\nexport const PARSING = 2;\nexport const LOADED = 3;\n\n// https://en.wikipedia.org/wiki/World_Geodetic_System\n// https://en.wikipedia.org/wiki/Flattening\nexport const WGS84_RADIUS = 6378137;\nexport const WGS84_FLATTENING = 1 / 298.257223563;\nexport const WGS84_HEIGHT = - ( WGS84_FLATTENING * WGS84_RADIUS - WGS84_RADIUS );\n\n// https://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html\nexport const LUNAR_HEIGHT = 1736.0 * 1e3;\nexport const LUNAR_RADIUS = 1738.1 * 1e3;\n","import { LOADED, FAILED } from './constants.js';\n\nfunction isDownloadFinished( value ) {\n\n\treturn value === LOADED || value === FAILED;\n\n}\n\n// Checks whether this tile was last used on the given frame.\nfunction isUsedThisFrame( tile, frameCount ) {\n\n\treturn tile.__lastFrameVisited === frameCount && tile.__used;\n\n}\n\n// Resets the frame frame information for the given tile\nfunction resetFrameState( tile, renderer ) {\n\n\tif ( tile.__lastFrameVisited !== renderer.frameCount ) {\n\n\t\ttile.__lastFrameVisited = renderer.frameCount;\n\t\ttile.__used = false;\n\t\ttile.__inFrustum = false;\n\t\ttile.__isLeaf = false;\n\t\ttile.__visible = false;\n\t\ttile.__active = false;\n\t\ttile.__error = Infinity;\n\t\ttile.__distanceFromCamera = Infinity;\n\t\ttile.__childrenWereVisible = false;\n\t\ttile.__allChildrenLoaded = false;\n\n\t\t// update tile frustum and error state\n\t\ttile.__inFrustum = renderer.tileInView( tile );\n\t\trenderer.calculateError( tile );\n\n\t}\n\n}\n\n// Recursively mark tiles used down to the next tile with content\nfunction recursivelyMarkUsed( tile, renderer ) {\n\n\trenderer.ensureChildrenArePreprocessed( tile );\n\n\tresetFrameState( tile, renderer );\n\tmarkUsed( tile, renderer );\n\n\tif ( ! tile.__hasRenderableContent ) {\n\n\t\tconst children = tile.children;\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trecursivelyMarkUsed( children[ i ], renderer );\n\n\t\t}\n\n\t}\n\n}\n\n// Recursively traverses to the next tiles with unloaded renderable content to load them\nfunction recursivelyLoadNextRenderableTiles( tile, renderer ) {\n\n\trenderer.ensureChildrenArePreprocessed( tile );\n\n\t// Try to load any external tile set children if the external tile set has loaded.\n\tconst doTraverse =\n\t\tisUsedThisFrame( tile, renderer.frameCount ) &&\n\t\t! tile.__hasRenderableContent && (\n\t\t\t! tile.__hasContent ||\n\t\t\tisDownloadFinished( tile.__loadingState )\n\t\t);\n\n\tif ( doTraverse ) {\n\n\t\tconst children = tile.children;\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t// don't increment depth to rendered parent here because we should treat\n\t\t\t// the next layer of rendered children as just a single depth away for the\n\t\t\t// sake of sorting.\n\t\t\tconst child = children[ i ];\n\t\t\trecursivelyLoadNextRenderableTiles( child, renderer );\n\n\t\t}\n\n\t} else if ( isUsedThisFrame( tile, renderer.frameCount ) && ! renderer.lruCache.isFull() ) {\n\n\t\trenderer.queueTileForDownload( tile );\n\n\t}\n\n}\n\n// Mark a tile as being used by current view\nfunction markUsed( tile, renderer ) {\n\n\tif ( tile.__used ) {\n\n\t\treturn;\n\n\t}\n\n\ttile.__used = true;\n\trenderer.lruCache.markUsed( tile );\n\trenderer.stats.used ++;\n\n\tif ( tile.__inFrustum === true ) {\n\n\t\trenderer.stats.inFrustum ++;\n\n\t}\n\n}\n\n// Returns whether the tile can be traversed to the next layer of children by checking the tile metrics\nfunction canTraverse( tile, renderer ) {\n\n\t// If we've met the error requirements then don't load further\n\tif ( tile.__error <= renderer.errorTarget ) {\n\n\t\treturn false;\n\n\t}\n\n\t// Early out if we've reached the maximum allowed depth.\n\tif ( renderer.maxDepth > 0 && tile.__depth + 1 >= renderer.maxDepth ) {\n\n\t\treturn false;\n\n\t}\n\n\treturn true;\n\n}\n\n// Helper function for traversing a tile set. If `beforeCb` returns `true` then the\n// traversal will end early.\nexport function traverseSet( tile, beforeCb = null, afterCb = null ) {\n\n\tconst stack = [];\n\n\t// A stack-based, depth-first traversal, storing\n\t// triplets (tile, parent, depth) in the stack array.\n\n\tstack.push( tile );\n\tstack.push( null );\n\tstack.push( 0 );\n\n\twhile ( stack.length > 0 ) {\n\n\t\tconst depth = stack.pop();\n\t\tconst parent = stack.pop();\n\t\tconst tile = stack.pop();\n\n\t\tif ( beforeCb && beforeCb( tile, parent, depth ) ) {\n\n\t\t\tif ( afterCb ) {\n\n\t\t\t\tafterCb( tile, parent, depth );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst children = tile.children;\n\n\t\t// Children might be undefined if the tile has not been preprocessed yet\n\t\tif ( children ) {\n\n\t\t\tfor ( let i = children.length - 1; i >= 0; i -- ) {\n\n\t\t\t\tstack.push( children[ i ] );\n\t\t\t\tstack.push( tile );\n\t\t\t\tstack.push( depth + 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( afterCb ) {\n\n\t\t\tafterCb( tile, parent, depth );\n\n\t\t}\n\n\t}\n\n}\n\n// Determine which tiles are used by the renderer given the current camera configuration\nexport function markUsedTiles( tile, renderer ) {\n\n\t// determine frustum set is run first so we can ensure the preprocessing of all the necessary\n\t// child tiles has happened here.\n\trenderer.ensureChildrenArePreprocessed( tile );\n\n\tresetFrameState( tile, renderer );\n\n\tif ( ! tile.__inFrustum ) {\n\n\t\treturn;\n\n\t}\n\n\tif ( ! canTraverse( tile, renderer ) ) {\n\n\t\tmarkUsed( tile, renderer );\n\t\treturn;\n\n\t}\n\n\t// Traverse children and see if any children are in view.\n\tlet anyChildrenUsed = false;\n\tlet anyChildrenInFrustum = false;\n\tconst children = tile.children;\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tconst c = children[ i ];\n\t\tmarkUsedTiles( c, renderer );\n\t\tanyChildrenUsed = anyChildrenUsed || isUsedThisFrame( c, renderer.frameCount );\n\t\tanyChildrenInFrustum = anyChildrenInFrustum || c.__inFrustum;\n\n\t}\n\n\t// Disabled for now because this will cause otherwise unused children to be added to the lru cache\n\t// if none of the children are in the frustum then this tile shouldn't be displayed\n\tif ( tile.refine === 'REPLACE' && ! anyChildrenInFrustum && children.length !== 0 && ! tile.__hasUnrenderableContent ) {\n\n\t\t// TODO: we're not checking tiles with unrenderable content here since external tile sets might look like they're in the frustum,\n\t\t// load the children, then the children indicate that it's not visible, causing it to be unloaded. Then it will be loaded again.\n\t\t// The impact when including external tile set roots in the check is more significant but can't be used unless we keep external tile\n\t\t// sets around even when they're not needed. See issue #741.\n\n\t\t// TODO: what if we mark the tile as not in the frustum but we _do_ mark it as used? Then we can stop frustum traversal and at least\n\t\t// prevent tiles from rendering unless they're needed.\n\t\ttile.__inFrustum = false;\n\t\treturn;\n\n\t}\n\n\t// wait until after the above condition to mark the traversed tile as used or not\n\tmarkUsed( tile, renderer );\n\n\t// If this is a tile that needs children loaded to refine then recursively load child\n\t// tiles until error is met\n\tif ( anyChildrenUsed && tile.refine === 'REPLACE' ) {\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst c = children[ i ];\n\t\t\trecursivelyMarkUsed( c, renderer );\n\n\t\t}\n\n\t}\n\n}\n\n// Traverse and mark the tiles that are at the leaf nodes of the \"used\" tree.\nexport function markUsedSetLeaves( tile, renderer ) {\n\n\tconst frameCount = renderer.frameCount;\n\tif ( ! isUsedThisFrame( tile, frameCount ) ) {\n\n\t\treturn;\n\n\t}\n\n\t// This tile is a leaf if none of the children had been used.\n\tconst children = tile.children;\n\tlet anyChildrenUsed = false;\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tconst c = children[ i ];\n\t\tanyChildrenUsed = anyChildrenUsed || isUsedThisFrame( c, frameCount );\n\n\t}\n\n\tif ( ! anyChildrenUsed ) {\n\n\t\ttile.__isLeaf = true;\n\n\t} else {\n\n\t\tlet childrenWereVisible = false;\n\t\tlet allChildrenLoaded = true;\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst c = children[ i ];\n\t\t\tmarkUsedSetLeaves( c, renderer );\n\t\t\tchildrenWereVisible = childrenWereVisible || c.__wasSetVisible || c.__childrenWereVisible;\n\n\t\t\tif ( isUsedThisFrame( c, frameCount ) ) {\n\n\t\t\t\t// consider a child to be loaded if\n\t\t\t\t// - the children's children have been loaded\n\t\t\t\t// - the tile content has loaded\n\t\t\t\t// - the tile is completely empty - ie has no children and no content\n\t\t\t\t// - the child tile set has tried to load but failed\n\t\t\t\tconst childLoaded =\n\t\t\t\t\tc.__allChildrenLoaded ||\n\t\t\t\t\t( c.__hasRenderableContent && isDownloadFinished( c.__loadingState ) ) ||\n\t\t\t\t\t( ! c.__hasContent && c.children.length === 0 ) ||\n\t\t\t\t\t( c.__hasUnrenderableContent && c.__loadingState === FAILED );\n\t\t\t\tallChildrenLoaded = allChildrenLoaded && childLoaded;\n\n\t\t\t}\n\n\t\t}\n\n\t\ttile.__childrenWereVisible = childrenWereVisible;\n\t\ttile.__allChildrenLoaded = allChildrenLoaded;\n\n\t}\n\n}\n\n// TODO: revisit implementation\n// Skip past tiles we consider unrenderable because they are outside the error threshold.\nexport function markVisibleTiles( tile, renderer ) {\n\n\tconst stats = renderer.stats;\n\tif ( ! isUsedThisFrame( tile, renderer.frameCount ) ) {\n\n\t\treturn;\n\n\t}\n\n\t// Request the tile contents or mark it as visible if we've found a leaf.\n\tconst lruCache = renderer.lruCache;\n\tif ( tile.__isLeaf ) {\n\n\t\tif ( tile.__loadingState === LOADED ) {\n\n\t\t\tif ( tile.__inFrustum ) {\n\n\t\t\t\ttile.__visible = true;\n\t\t\t\tstats.visible ++;\n\n\t\t\t}\n\t\t\ttile.__active = true;\n\t\t\tstats.active ++;\n\n\t\t} else if ( ! lruCache.isFull() && tile.__hasContent ) {\n\n\t\t\trenderer.queueTileForDownload( tile );\n\n\t\t}\n\n\t\treturn;\n\n\t}\n\n\tconst children = tile.children;\n\tconst hasContent = tile.__hasContent;\n\tconst loadedContent = isDownloadFinished( tile.__loadingState ) && hasContent;\n\tconst errorRequirement = ( renderer.errorTarget + 1 ) * renderer.errorThreshold;\n\tconst meetsSSE = tile.__error <= errorRequirement;\n\tconst childrenWereVisible = tile.__childrenWereVisible;\n\n\t// NOTE: We can \"trickle\" root tiles in by enabling these lines.\n\t// Don't wait for all children tiles to load if this tile set has empty tiles at the root\n\t// const emptyRootTile = tile.__depthFromRenderedParent === 0;\n\t// const allChildrenLoaded = tile.__allChildrenLoaded || emptyRootTile;\n\n\t// If we've met the SSE requirements and we can load content then fire a fetch.\n\tconst allChildrenLoaded = tile.__allChildrenLoaded;\n\tconst includeTile = meetsSSE || tile.refine === 'ADD';\n\tif ( includeTile && ! loadedContent && ! lruCache.isFull() && hasContent ) {\n\n\t\trenderer.queueTileForDownload( tile );\n\n\t}\n\n\t// Only mark this tile as visible if it meets the screen space error requirements, has loaded content, not\n\t// all children have loaded yet, and if no children were visible last frame. We want to keep children visible\n\t// that _were_ visible to avoid a pop in level of detail as the camera moves around and parent / sibling tiles\n\t// load in.\n\n\t// Skip the tile entirely if there's no content to load\n\tif (\n\t\t( meetsSSE && ! allChildrenLoaded && ! childrenWereVisible && loadedContent )\n\t\t\t|| ( tile.refine === 'ADD' && loadedContent )\n\t) {\n\n\t\tif ( tile.__inFrustum ) {\n\n\t\t\ttile.__visible = true;\n\t\t\tstats.visible ++;\n\n\t\t}\n\t\ttile.__active = true;\n\t\tstats.active ++;\n\n\t}\n\n\t// If we're additive then don't stop the traversal here because it doesn't matter whether the children load in\n\t// at the same rate.\n\tif ( tile.refine === 'REPLACE' && meetsSSE && ! allChildrenLoaded ) {\n\n\t\t// load the child content if we've found that we've been loaded so we can move down to the next tile\n\t\t// layer when the data has loaded.\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst c = children[ i ];\n\t\t\tif ( isUsedThisFrame( c, renderer.frameCount ) ) {\n\n\t\t\t\trecursivelyLoadNextRenderableTiles( c, renderer );\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tmarkVisibleTiles( children[ i ], renderer );\n\n\t\t}\n\n\t}\n\n}\n\n// Final traverse to toggle tile visibility.\nexport function toggleTiles( tile, renderer ) {\n\n\tconst isUsed = isUsedThisFrame( tile, renderer.frameCount );\n\tif ( isUsed || tile.__usedLastFrame ) {\n\n\t\tlet setActive = false;\n\t\tlet setVisible = false;\n\t\tif ( isUsed ) {\n\n\t\t\t// enable visibility if active due to shadows\n\t\t\tsetActive = tile.__active;\n\t\t\tif ( renderer.displayActiveTiles ) {\n\n\t\t\t\tsetVisible = tile.__active || tile.__visible;\n\n\t\t\t} else {\n\n\t\t\t\tsetVisible = tile.__visible;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if the tile was used last frame but not this one then there's potential for the tile\n\t\t\t// to not have been visited during the traversal, meaning it hasn't been reset and has\n\t\t\t// stale values. This ensures the values are not stale.\n\t\t\tresetFrameState( tile, renderer );\n\n\t\t}\n\n\t\t// If the active or visible state changed then call the functions.\n\t\tif ( tile.__hasRenderableContent && tile.__loadingState === LOADED ) {\n\n\t\t\tif ( tile.__wasSetActive !== setActive ) {\n\n\t\t\t\trenderer.setTileActive( tile, setActive );\n\n\t\t\t}\n\n\t\t\tif ( tile.__wasSetVisible !== setVisible ) {\n\n\t\t\t\trenderer.invokeOnePlugin( plugin => plugin.setTileVisible && plugin.setTileVisible( tile, setVisible ) );\n\n\t\t\t}\n\n\t\t}\n\t\ttile.__wasSetActive = setActive;\n\t\ttile.__wasSetVisible = setVisible;\n\t\ttile.__usedLastFrame = isUsed;\n\n\t\tconst children = tile.children;\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst c = children[ i ];\n\t\t\ttoggleTiles( c, renderer );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Traverses the ancestry of the tile up to the root tile.\n */\nexport function traverseAncestors( tile, callback = null ) {\n\n\tlet current = tile;\n\n\twhile ( current ) {\n\n\t\tconst depth = current.__depth;\n\t\tconst parent = current.parent;\n\n\t\tif ( callback ) {\n\n\t\t\tcallback( current, parent, depth );\n\n\t\t}\n\n\t\tcurrent = parent;\n\n\t}\n\n\n}\n","import { getUrlExtension } from '../utilities/urlExtension.js';\nimport { LRUCache } from '../utilities/LRUCache.js';\nimport { PriorityQueue } from '../utilities/PriorityQueue.js';\nimport { markUsedTiles, toggleTiles, markVisibleTiles, markUsedSetLeaves, traverseSet } from './traverseFunctions.js';\nimport { UNLOADED, LOADING, PARSING, LOADED, FAILED } from './constants.js';\n\nconst PLUGIN_REGISTERED = Symbol( 'PLUGIN_REGISTERED' );\n\n// priority queue sort function that takes two tiles to compare. Returning 1 means\n// \"tile a\" is loaded first.\nconst priorityCallback = ( a, b ) => {\n\n\tif ( a.__depthFromRenderedParent !== b.__depthFromRenderedParent ) {\n\n\t\t// load shallower tiles first using \"depth from rendered parent\" to help\n\t\t// even out depth disparities caused by non-content parent tiles\n\t\treturn a.__depthFromRenderedParent > b.__depthFromRenderedParent ? - 1 : 1;\n\n\t} else if ( a.__inFrustum !== b.__inFrustum ) {\n\n\t\t// load tiles that are in the frustum at the current depth\n\t\treturn a.__inFrustum ? 1 : - 1;\n\n\t} else if ( a.__used !== b.__used ) {\n\n\t\t// load tiles that have been used\n\t\treturn a.__used ? 1 : - 1;\n\n\t} else if ( a.__error !== b.__error ) {\n\n\t\t// load the tile with the higher error\n\t\treturn a.__error > b.__error ? 1 : - 1;\n\n\t} else if ( a.__distanceFromCamera !== b.__distanceFromCamera ) {\n\n\t\t// and finally visible tiles which have equal error (ex: if geometricError === 0)\n\t\t// should prioritize based on distance.\n\t\treturn a.__distanceFromCamera > b.__distanceFromCamera ? - 1 : 1;\n\n\t}\n\n\treturn 0;\n\n};\n\n// lru cache unload callback that takes two tiles to compare. Returning 1 means \"tile a\"\n// is unloaded first.\nconst lruPriorityCallback = ( a, b ) => {\n\n\tif ( a.__depthFromRenderedParent !== b.__depthFromRenderedParent ) {\n\n\t\t// dispose of deeper tiles first\n\t\treturn a.__depthFromRenderedParent > b.__depthFromRenderedParent ? 1 : - 1;\n\n\t} else if ( a.__loadingState !== b.__loadingState ) {\n\n\t\t// dispose of tiles that are earlier along in the loading process first\n\t\treturn a.__loadingState > b.__loadingState ? - 1 : 1;\n\n\t} else if ( a.__lastFrameVisited !== b.__lastFrameVisited ) {\n\n\t\t// dispose of least recent tiles first\n\t\treturn a.__lastFrameVisited > b.__lastFrameVisited ? - 1 : 1;\n\n\t} else if ( a.__hasUnrenderableContent !== b.__hasUnrenderableContent ) {\n\n\t\t// dispose of external tile sets last\n\t\treturn a.__hasUnrenderableContent ? - 1 : 1;\n\n\t} else if ( a.__error !== b.__error ) {\n\n\t\t// unload the tile with lower error\n\t\treturn a.__error > b.__error ? - 1 : 1;\n\n\t}\n\n\treturn 0;\n\n};\n\nexport class TilesRendererBase {\n\n\tget root() {\n\n\t\tconst tileSet = this.rootTileSet;\n\t\treturn tileSet ? tileSet.root : null;\n\n\t}\n\n\tset loadSiblings( v ) {\n\n\t\tconsole.warn( 'TilesRenderer: \"loadSiblings\" option has been removed.' );\n\n\t}\n\n\tset stopAtEmptyTiles( v ) {\n\n\t\tconsole.warn( 'TilesRenderer: \"stopAtEmptyTiles\" option has been removed.' );\n\n\t}\n\n\tset preprocessURL( v ) {\n\n\t\tconsole.warn( 'TilesRendererBase: The \"preprocessURL\" callback has been deprecated. Use a plugin, instead.' );\n\t\tthis._preprocessURL = v;\n\n\t}\n\n\tget preprocessURL() {\n\n\t\treturn this._preprocessURL;\n\n\t}\n\n\tconstructor( url = null ) {\n\n\t\t// state\n\t\tthis.rootLoadingState = UNLOADED;\n\t\tthis.rootTileSet = null;\n\t\tthis.rootURL = url;\n\t\tthis.fetchOptions = {};\n\t\tthis.plugins = [];\n\t\tthis.queuedTiles = [];\n\n\t\tthis._preprocessURL = null;\n\n\t\tconst lruCache = new LRUCache();\n\t\tlruCache.unloadPriorityCallback = lruPriorityCallback;\n\n\t\tconst downloadQueue = new PriorityQueue();\n\t\tdownloadQueue.maxJobs = 10;\n\t\tdownloadQueue.priorityCallback = priorityCallback;\n\n\t\tconst parseQueue = new PriorityQueue();\n\t\tparseQueue.maxJobs = 1;\n\t\tparseQueue.priorityCallback = priorityCallback;\n\n\t\tthis.lruCache = lruCache;\n\t\tthis.downloadQueue = downloadQueue;\n\t\tthis.parseQueue = parseQueue;\n\t\tthis.stats = {\n\t\t\tparsing: 0,\n\t\t\tdownloading: 0,\n\t\t\tfailed: 0,\n\t\t\tinFrustum: 0,\n\t\t\tused: 0,\n\t\t\tactive: 0,\n\t\t\tvisible: 0,\n\t\t};\n\t\tthis.frameCount = 0;\n\n\t\t// options\n\t\tthis.errorTarget = 6.0;\n\t\tthis.errorThreshold = Infinity;\n\t\tthis.displayActiveTiles = false;\n\t\tthis.maxDepth = Infinity;\n\n\t}\n\n\t// Plugins\n\tregisterPlugin( plugin ) {\n\n\t\tif ( plugin[ PLUGIN_REGISTERED ] === true ) {\n\n\t\t\tthrow new Error( 'TilesRendererBase: A plugin can only be registered to a single tile set' );\n\n\t\t}\n\n\t\t// insert the plugin based on the priority registered on the plugin\n\t\tconst plugins = this.plugins;\n\t\tconst priority = plugin.priority || 0;\n\t\tlet insertionPoint = 0;\n\t\tfor ( let i = 0; i < plugins.length; i ++ ) {\n\n\t\t\tinsertionPoint = i;\n\n\t\t\tconst otherPriority = plugins[ i ].priority || 0;\n\t\t\tif ( otherPriority > priority ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tplugins.splice( insertionPoint, 0, plugin );\n\t\tplugin[ PLUGIN_REGISTERED ] = true;\n\t\tif ( plugin.init ) {\n\n\t\t\tplugin.init( this );\n\n\t\t}\n\n\t}\n\n\tunregisterPlugin( plugin ) {\n\n\t\tconst plugins = this.plugins;\n\t\tif ( typeof plugin === 'string' ) {\n\n\t\t\tplugin = this.getPluginByName( name );\n\n\t\t}\n\n\t\tif ( plugins.includes( plugin ) ) {\n\n\t\t\tconst index = plugins.indexOf( plugin );\n\t\t\tplugins.splice( index, 1 );\n\t\t\tif ( plugin.dispose ) {\n\n\t\t\t\tplugin.dispose();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tgetPluginByName( name ) {\n\n\t\treturn this.plugins.find( p => p.name === name ) || null;\n\n\t}\n\n\ttraverse( beforecb, aftercb ) {\n\n\t\tif ( ! this.root ) return;\n\n\t\ttraverseSet( this.root, ( tile, ...args ) => {\n\n\t\t\tthis.ensureChildrenArePreprocessed( tile );\n\t\t\treturn beforecb ? beforecb( tile, ...args ) : false;\n\n\t\t}, aftercb );\n\n\t}\n\n\tqueueTileForDownload( tile ) {\n\n\t\tthis.queuedTiles.push( tile );\n\n\t}\n\n\t// Public API\n\tupdate() {\n\n\t\tconst stats = this.stats;\n\t\tconst lruCache = this.lruCache;\n\t\tif ( this.rootLoadingState === UNLOADED ) {\n\n\t\t\tthis.rootLoadingState = LOADING;\n\t\t\tthis.invokeOnePlugin( plugin => plugin.loadRootTileSet && plugin.loadRootTileSet() )\n\t\t\t\t.then( () => this.rootLoadingState = LOADED )\n\t\t\t\t.catch( () => this.rootLoadingState = FAILED );\n\n\t\t}\n\n\t\tif ( ! this.root ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst root = this.root;\n\n\t\tstats.inFrustum = 0;\n\t\tstats.used = 0;\n\t\tstats.active = 0;\n\t\tstats.visible = 0;\n\t\tthis.frameCount ++;\n\n\t\tmarkUsedTiles( root, this );\n\t\tmarkUsedSetLeaves( root, this );\n\t\tmarkVisibleTiles( root, this );\n\t\ttoggleTiles( root, this );\n\n\t\t// TODO: This will only sort for one tile set. We may want to store this queue on the\n\t\t// LRUCache so multiple tile sets can use it at once\n\t\t// start the downloads of the tiles as needed\n\t\tconst queuedTiles = this.queuedTiles;\n\t\tqueuedTiles.sort( lruCache.unloadPriorityCallback );\n\t\tfor ( let i = 0, l = queuedTiles.length; i < l && ! lruCache.isFull(); i ++ ) {\n\n\t\t\tthis.requestTileContents( queuedTiles[ i ] );\n\n\t\t}\n\n\t\tqueuedTiles.length = 0;\n\n\t\t// start the downloads\n\t\tlruCache.scheduleUnload();\n\n\t}\n\n\tresetFailedTiles() {\n\n\t\t// reset the root tile if it's finished but never loaded\n\t\tif ( this.rootLoadingState === FAILED ) {\n\n\t\t\tthis.rootLoadingState = UNLOADED;\n\n\t\t}\n\n\t\tconst stats = this.stats;\n\t\tif ( stats.failed === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.traverse( tile => {\n\n\t\t\tif ( tile.__loadingState === FAILED ) {\n\n\t\t\t\ttile.__loadingState = UNLOADED;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tstats.failed = 0;\n\n\t}\n\n\tdispose() {\n\n\t\t// dispose of all the plugins\n\t\tthis.invokeAllPlugins( plugin => {\n\n\t\t\tplugin !== this && plugin.dispose && plugin.dispose();\n\n\t\t} );\n\n\t\tconst lruCache = this.lruCache;\n\n\t\t// Make sure we've collected all children before disposing of the internal tilesets to avoid\n\t\t// dangling children that we inadvertantly skip when deleting the nested tileset.\n\t\tconst toRemove = [];\n\t\tthis.traverse( t => {\n\n\t\t\ttoRemove.push( t );\n\t\t\treturn false;\n\n\t\t} );\n\t\tfor ( let i = 0, l = toRemove.length; i < l; i ++ ) {\n\n\t\t\tlruCache.remove( toRemove[ i ] );\n\n\t\t}\n\n\t\tthis.stats = {\n\t\t\tparsing: 0,\n\t\t\tdownloading: 0,\n\t\t\tfailed: 0,\n\t\t\tinFrustum: 0,\n\t\t\tused: 0,\n\t\t\tactive: 0,\n\t\t\tvisible: 0,\n\t\t};\n\t\tthis.frameCount = 0;\n\n\t}\n\n\t// Overrideable\n\tfetchData( url, options ) {\n\n\t\treturn fetch( url, options );\n\n\t}\n\n\tparseTile( buffer, tile, extension ) {\n\n\t\treturn null;\n\n\t}\n\n\tdisposeTile( tile ) {\n\n\t\t// TODO: are these necessary? Are we disposing tiles when they are currently visible?\n\t\tif ( tile.__visible ) {\n\n\t\t\tthis.invokeOnePlugin( plugin => plugin.setTileVisible && plugin.setTileVisible( tile, false ) );\n\t\t\ttile.__visible = false;\n\n\t\t}\n\n\t\tif ( tile.__active ) {\n\n\t\t\tthis.setTileActive( tile, false );\n\t\t\ttile.__active = false;\n\n\t\t}\n\n\t}\n\n\tpreprocessNode( tile, tileSetDir, parentTile = null ) {\n\n\t\tif ( tile.content ) {\n\n\t\t\t// Fix old file formats\n\t\t\tif ( ! ( 'uri' in tile.content ) && 'url' in tile.content ) {\n\n\t\t\t\ttile.content.uri = tile.content.url;\n\t\t\t\tdelete tile.content.url;\n\n\t\t\t}\n\n\t\t\t// NOTE: fix for some cases where tilesets provide the bounding volume\n\t\t\t// but volumes are not present.\n\t\t\tif (\n\t\t\t\ttile.content.boundingVolume &&\n\t\t\t\t! (\n\t\t\t\t\t'box' in tile.content.boundingVolume ||\n\t\t\t\t\t'sphere' in tile.content.boundingVolume ||\n\t\t\t\t\t'region' in tile.content.boundingVolume\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tdelete tile.content.boundingVolume;\n\n\t\t\t}\n\n\t\t}\n\n\t\ttile.parent = parentTile;\n\t\ttile.children = tile.children || [];\n\n\t\tif ( tile.content?.uri ) {\n\n\t\t\t// \"content\" should only indicate loadable meshes, not external tile sets\n\t\t\tconst extension = getUrlExtension( tile.content.uri );\n\n\t\t\ttile.__hasContent = true;\n\t\t\ttile.__hasUnrenderableContent = Boolean( extension && /json$/.test( extension ) );\n\t\t\ttile.__hasRenderableContent = ! tile.__hasUnrenderableContent;\n\n\t\t} else {\n\n\t\t\ttile.__hasContent = false;\n\t\t\ttile.__hasUnrenderableContent = false;\n\t\t\ttile.__hasRenderableContent = false;\n\n\t\t}\n\n\t\t// Expected to be set during calculateError()\n\t\ttile.__distanceFromCamera = Infinity;\n\t\ttile.__error = Infinity;\n\n\t\ttile.__inFrustum = false;\n\t\ttile.__isLeaf = false;\n\n\t\ttile.__usedLastFrame = false;\n\t\ttile.__used = false;\n\n\t\ttile.__wasSetVisible = false;\n\t\ttile.__visible = false;\n\t\ttile.__childrenWereVisible = false;\n\t\ttile.__allChildrenLoaded = false;\n\n\t\ttile.__wasSetActive = false;\n\t\ttile.__active = false;\n\n\t\ttile.__loadingState = UNLOADED;\n\t\ttile.__loadIndex = 0;\n\n\t\ttile.__loadAbort = null;\n\n\t\tif ( parentTile === null ) {\n\n\t\t\ttile.__depth = 0;\n\t\t\ttile.__depthFromRenderedParent = 0;\n\t\t\ttile.refine = tile.refine || 'REPLACE';\n\n\t\t} else {\n\n\t\t\t// increment the \"depth from parent\" when we encounter a new tile with content\n\t\t\ttile.__depth = parentTile.__depth + 1;\n\t\t\ttile.__depthFromRenderedParent = parentTile.__depthFromRenderedParent + ( tile.__hasRenderableContent ? 1 : 0 );\n\n\t\t\ttile.refine = tile.refine || parentTile.refine;\n\n\t\t}\n\n\t\ttile.__basePath = tileSetDir;\n\n\t\ttile.__lastFrameVisited = - 1;\n\n\t\tthis.invokeAllPlugins( plugin => {\n\n\t\t\tplugin !== this && plugin.preprocessNode && plugin.preprocessNode( tile, tileSetDir, parentTile );\n\n\t\t} );\n\n\t}\n\n\tsetTileActive( tile, state ) {\n\n\t}\n\n\tsetTileVisible( tile, state ) {\n\n\t}\n\n\tcalculateError( tile ) {\n\n\t\treturn 0;\n\n\t}\n\n\ttileInView( tile ) {\n\n\t\treturn true;\n\n\t}\n\n\tensureChildrenArePreprocessed( tile ) {\n\n\t\tconst children = tile.children;\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\t\t\tif ( '__depth' in child ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.preprocessNode( child, tile.__basePath, tile );\n\n\t\t}\n\n\t}\n\n\t// Private Functions\n\tpreprocessTileSet( json, url, parent = null ) {\n\n\t\tconst version = json.asset.version;\n\t\tconst [ major, minor ] = version.split( '.' ).map( v => parseInt( v ) );\n\t\tconsole.assert(\n\t\t\tmajor <= 1,\n\t\t\t'TilesRenderer: asset.version is expected to be a 1.x or a compatible version.',\n\t\t);\n\n\t\tif ( major === 1 && minor > 0 ) {\n\n\t\t\tconsole.warn( 'TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.' );\n\n\t\t}\n\n\t\t// remove trailing slash and last path-segment from the URL\n\t\tlet basePath = url.replace( /\\/[^/]*\\/?$/, '' );\n\t\tbasePath = new URL( basePath, window.location.href ).toString();\n\t\tthis.preprocessNode( json.root, basePath, parent );\n\n\t}\n\n\tloadRootTileSet() {\n\n\t\t// transform the url\n\t\tlet processedUrl = this.rootURL;\n\t\tthis.invokeAllPlugins( plugin => processedUrl = plugin.preprocessURL ? plugin.preprocessURL( processedUrl, null ) : processedUrl );\n\n\t\t// load the tile set root\n\t\tconst pr = this\n\t\t\t.invokeOnePlugin( plugin => plugin.fetchData && plugin.fetchData( processedUrl, this.fetchOptions ) )\n\t\t\t.then( res => {\n\n\t\t\t\tif ( res.ok ) {\n\n\t\t\t\t\treturn res.json();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( `TilesRenderer: Failed to load tileset \"${ processedUrl }\" with status ${ res.status } : ${ res.statusText }` );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( json => {\n\n\t\t\t\tthis.preprocessTileSet( json, processedUrl );\n\t\t\t\tthis.rootTileSet = json;\n\n\t\t\t} );\n\n\t\tpr.catch( err => {\n\n\t\t\tconsole.error( err );\n\t\t\tthis.rootTileSet = null;\n\n\t\t} );\n\n\t\treturn pr;\n\n\t}\n\n\trequestTileContents( tile ) {\n\n\t\t// If the tile is already being loaded then don't\n\t\t// start it again.\n\t\tif ( tile.__loadingState !== UNLOADED ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet isExternalTileSet = false;\n\t\tlet uri = new URL( tile.content.uri, tile.__basePath + '/' ).toString();\n\t\tthis.invokeAllPlugins( plugin => uri = plugin.preprocessURL ? plugin.preprocessURL( uri, tile ) : uri );\n\n\t\tconst stats = this.stats;\n\t\tconst lruCache = this.lruCache;\n\t\tconst downloadQueue = this.downloadQueue;\n\t\tconst parseQueue = this.parseQueue;\n\t\tconst extension = getUrlExtension( uri );\n\t\tconst addedSuccessfully = lruCache.add( tile, t => {\n\n\t\t\t// Stop the load if it's started\n\t\t\tif ( t.__loadingState === LOADING ) {\n\n\t\t\t\tt.__loadAbort.abort();\n\t\t\t\tt.__loadAbort = null;\n\n\t\t\t} else if ( isExternalTileSet ) {\n\n\t\t\t\tt.children.length = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.invokeAllPlugins( plugin => {\n\n\t\t\t\t\tplugin.disposeTile && plugin.disposeTile( t );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t// Decrement stats\n\t\t\tif ( t.__loadingState === LOADING ) {\n\n\t\t\t\tstats.downloading --;\n\n\t\t\t} else if ( t.__loadingState === PARSING ) {\n\n\t\t\t\tstats.parsing --;\n\n\t\t\t}\n\n\t\t\tt.__loadingState = UNLOADED;\n\t\t\tt.__loadIndex ++;\n\n\t\t\tparseQueue.remove( t );\n\t\t\tdownloadQueue.remove( t );\n\n\t\t} );\n\n\t\t// if we couldn't add the tile to the lru cache because it's full then skip\n\t\tif ( ! addedSuccessfully ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Track a new load index so we avoid the condition where this load is stopped and\n\t\t// another begins soon after so we don't parse twice.\n\t\ttile.__loadIndex ++;\n\t\tconst loadIndex = tile.__loadIndex;\n\t\tconst controller = new AbortController();\n\t\tconst signal = controller.signal;\n\n\t\tstats.downloading ++;\n\t\ttile.__loadAbort = controller;\n\t\ttile.__loadingState = LOADING;\n\n\t\tconst errorCallback = e => {\n\n\t\t\t// if it has been unloaded then the tile has been disposed\n\t\t\tif ( tile.__loadIndex !== loadIndex ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( e.name !== 'AbortError' ) {\n\n\t\t\t\tparseQueue.remove( tile );\n\t\t\t\tdownloadQueue.remove( tile );\n\n\t\t\t\tif ( tile.__loadingState === PARSING ) {\n\n\t\t\t\t\tstats.parsing --;\n\n\t\t\t\t} else if ( tile.__loadingState === LOADING ) {\n\n\t\t\t\t\tstats.downloading --;\n\n\t\t\t\t}\n\n\t\t\t\tstats.failed ++;\n\n\t\t\t\tconsole.error( `TilesRenderer : Failed to load tile at url \"${ tile.content.uri }\".` );\n\t\t\t\tconsole.error( e );\n\t\t\t\ttile.__loadingState = FAILED;\n\t\t\t\tlruCache.setLoaded( tile, true );\n\n\t\t\t} else {\n\n\t\t\t\tlruCache.remove( tile );\n\n\t\t\t}\n\n\t\t};\n\n\t\t// queue the download and parse\n\t\treturn downloadQueue.add( tile, downloadTile => {\n\n\t\t\tif ( downloadTile.__loadIndex !== loadIndex ) {\n\n\t\t\t\treturn Promise.resolve();\n\n\t\t\t}\n\n\t\t\treturn this.invokeOnePlugin( plugin => plugin.fetchData && plugin.fetchData( uri, { ...this.fetchOptions, signal } ) );\n\n\t\t} )\n\t\t\t.then( res => {\n\n\t\t\t\tif ( tile.__loadIndex !== loadIndex ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( res.ok ) {\n\n\t\t\t\t\treturn extension === 'json' ? res.json() : res.arrayBuffer();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( `Failed to load model with error code ${res.status}` );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( content => {\n\n\t\t\t\t// if it has been unloaded then the tile has been disposed\n\t\t\t\tif ( tile.__loadIndex !== loadIndex ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tstats.downloading --;\n\t\t\t\tstats.parsing ++;\n\t\t\t\ttile.__loadAbort = null;\n\t\t\t\ttile.__loadingState = PARSING;\n\n\t\t\t\treturn parseQueue.add( tile, parseTile => {\n\n\t\t\t\t\t// if it has been unloaded then the tile has been disposed\n\t\t\t\t\tif ( parseTile.__loadIndex !== loadIndex ) {\n\n\t\t\t\t\t\treturn Promise.resolve();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( extension === 'json' && content.root ) {\n\n\t\t\t\t\t\tthis.preprocessTileSet( content, uri, tile );\n\t\t\t\t\t\ttile.children.push( content.root );\n\t\t\t\t\t\tisExternalTileSet = true;\n\t\t\t\t\t\treturn Promise.resolve();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\treturn this.invokeOnePlugin( plugin => plugin.parseTile && plugin.parseTile( content, parseTile, extension, uri ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( () => {\n\n\t\t\t\t// if it has been unloaded then the tile has been disposed\n\t\t\t\tif ( tile.__loadIndex !== loadIndex ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tstats.parsing --;\n\t\t\t\ttile.__loadingState = LOADED;\n\t\t\t\tlruCache.setLoaded( tile, true );\n\n\t\t\t\t// If the memory of the item hasn't been registered yet then that means the memory usage hasn't\n\t\t\t\t// been accounted for by the cache yet so we need to check if it fits or if we should remove it.\n\t\t\t\tif ( lruCache.getMemoryUsage( tile ) === null ) {\n\n\t\t\t\t\tif ( lruCache.isFull() && lruCache.computeMemoryUsageCallback( tile ) > 0 ) {\n\n\t\t\t\t\t\t// And if the cache is full due to newly loaded memory then lets discard this tile - it will\n\t\t\t\t\t\t// be loaded again later from the disk cache if needed.\n\t\t\t\t\t\tlruCache.remove( tile );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Otherwise update the item to the latest known value\n\t\t\t\t\t\tlruCache.updateMemoryUsage( tile );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( errorCallback );\n\n\t}\n\n\tgetAttributions( target = [] ) {\n\n\t\tthis.invokeAllPlugins( plugin => plugin !== this && plugin.getAttributions && plugin.getAttributions( target ) );\n\t\treturn target;\n\n\t}\n\n\tinvokeOnePlugin( func ) {\n\n\t\tconst plugins = [ ...this.plugins, this ];\n\t\tfor ( let i = 0; i < plugins.length; i ++ ) {\n\n\t\t\tconst result = func( plugins[ i ] );\n\t\t\tif ( result ) {\n\n\t\t\t\treturn result;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tinvokeAllPlugins( func ) {\n\n\t\tconst plugins = [ ...this.plugins, this ];\n\t\tconst pending = [];\n\t\tfor ( let i = 0; i < plugins.length; i ++ ) {\n\n\t\t\tconst result = func( plugins[ i ] );\n\t\t\tif ( result ) {\n\n\t\t\t\tpending.push( result );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn pending.length === 0 ? null : Promise.all( pending );\n\n\t}\n\n}\n","const utf8decoder = new TextDecoder();\n\nexport function arrayToString( array ) {\n\n\treturn utf8decoder.decode( array );\n\n}\n","import { arrayToString } from './arrayToString.js';\n\nexport function parseBinArray( buffer, arrayStart, count, type, componentType, propertyName ) {\n\n\tlet stride;\n\tswitch ( type ) {\n\n\t\tcase 'SCALAR':\n\t\t\tstride = 1;\n\t\t\tbreak;\n\n\t\tcase 'VEC2':\n\t\t\tstride = 2;\n\t\t\tbreak;\n\n\t\tcase 'VEC3':\n\t\t\tstride = 3;\n\t\t\tbreak;\n\n\t\tcase 'VEC4':\n\t\t\tstride = 4;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( `FeatureTable : Feature type not provided for \"${ propertyName }\".` );\n\n\t}\n\n\tlet data;\n\tconst arrayLength = count * stride;\n\n\tswitch ( componentType ) {\n\n\t\tcase 'BYTE':\n\t\t\tdata = new Int8Array( buffer, arrayStart, arrayLength );\n\t\t\tbreak;\n\n\t\tcase 'UNSIGNED_BYTE':\n\t\t\tdata = new Uint8Array( buffer, arrayStart, arrayLength );\n\t\t\tbreak;\n\n\t\tcase 'SHORT':\n\t\t\tdata = new Int16Array( buffer, arrayStart, arrayLength );\n\t\t\tbreak;\n\n\t\tcase 'UNSIGNED_SHORT':\n\t\t\tdata = new Uint16Array( buffer, arrayStart, arrayLength );\n\t\t\tbreak;\n\n\t\tcase 'INT':\n\t\t\tdata = new Int32Array( buffer, arrayStart, arrayLength );\n\t\t\tbreak;\n\n\t\tcase 'UNSIGNED_INT':\n\t\t\tdata = new Uint32Array( buffer, arrayStart, arrayLength );\n\t\t\tbreak;\n\n\t\tcase 'FLOAT':\n\t\t\tdata = new Float32Array( buffer, arrayStart, arrayLength );\n\t\t\tbreak;\n\n\t\tcase 'DOUBLE':\n\t\t\tdata = new Float64Array( buffer, arrayStart, arrayLength );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( `FeatureTable : Feature component type not provided for \"${ propertyName }\".` );\n\n\t}\n\n\treturn data;\n\n}\n\nexport class FeatureTable {\n\n\tconstructor( buffer, start, headerLength, binLength ) {\n\n\t\tthis.buffer = buffer;\n\t\tthis.binOffset = start + headerLength;\n\t\tthis.binLength = binLength;\n\n\t\tlet header = null;\n\t\tif ( headerLength !== 0 ) {\n\n\t\t\tconst headerData = new Uint8Array( buffer, start, headerLength );\n\t\t\theader = JSON.parse( arrayToString( headerData ) );\n\n\t\t} else {\n\n\t\t\theader = {};\n\n\t\t}\n\t\tthis.header = header;\n\n\t}\n\n\tgetKeys() {\n\n\t\treturn Object.keys( this.header );\n\n\t}\n\n\tgetData( key, count, defaultComponentType = null, defaultType = null ) {\n\n\t\tconst header = this.header;\n\n\t\tif ( ! ( key in header ) ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst feature = header[ key ];\n\t\tif ( ! ( feature instanceof Object ) ) {\n\n\t\t\treturn feature;\n\n\t\t} else if ( Array.isArray( feature ) ) {\n\n\t\t\treturn feature;\n\n\t\t} else {\n\n\t\t\tconst { buffer, binOffset, binLength } = this;\n\t\t\tconst byteOffset = feature.byteOffset || 0;\n\t\t\tconst featureType = feature.type || defaultType;\n\t\t\tconst featureComponentType = feature.componentType || defaultComponentType;\n\n\t\t\tif ( 'type' in feature && defaultType && feature.type !== defaultType ) {\n\n\t\t\t\tthrow new Error( 'FeatureTable: Specified type does not match expected type.' );\n\n\t\t\t}\n\n\t\t\tconst arrayStart = binOffset + byteOffset;\n\t\t\tconst data = parseBinArray( buffer, arrayStart, count, featureType, featureComponentType, key );\n\n\t\t\tconst dataEnd = arrayStart + data.byteLength;\n\t\t\tif ( dataEnd > binOffset + binLength ) {\n\n\t\t\t\tthrow new Error( 'FeatureTable: Feature data read outside binary body length.' );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t}\n\n\tgetBuffer( byteOffset, byteLength ) {\n\n\t\tconst { buffer, binOffset } = this;\n\t\treturn buffer.slice( binOffset + byteOffset, binOffset + byteOffset + byteLength );\n\n\t}\n\n}\n","import { parseBinArray } from './FeatureTable.js';\n\nexport class BatchTableHierarchyExtension {\n\n\tconstructor( batchTable ) {\n\n\t\tthis.batchTable = batchTable;\n\n\t\tconst extensionHeader = batchTable.header.extensions[ '3DTILES_batch_table_hierarchy' ];\n\n\t\tthis.classes = extensionHeader.classes;\n\t\tfor ( const classDef of this.classes ) {\n\n\t\t\tconst instances = classDef.instances;\n\t\t\tfor ( const property in instances ) {\n\n\t\t\t\tclassDef.instances[ property ] = this._parseProperty( instances[ property ], classDef.length, property );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.instancesLength = extensionHeader.instancesLength;\n\n\t\tthis.classIds = this._parseProperty( extensionHeader.classIds, this.instancesLength, 'classIds' );\n\n\t\tif ( extensionHeader.parentCounts ) {\n\n\t\t\tthis.parentCounts = this._parseProperty( extensionHeader.parentCounts, this.instancesLength, 'parentCounts' );\n\n\t\t} else {\n\n\t\t\tthis.parentCounts = new Array( this.instancesLength ).fill( 1 );\n\n\t\t}\n\n\t\tif ( extensionHeader.parentIds ) {\n\n\t\t\tconst parentIdsLength = this.parentCounts.reduce( ( a, b ) => a + b, 0 );\n\t\t\tthis.parentIds = this._parseProperty( extensionHeader.parentIds, parentIdsLength, 'parentIds' );\n\n\t\t} else {\n\n\t\t\tthis.parentIds = null;\n\n\t\t}\n\n\t\tthis.instancesIds = [];\n\t\tconst classCounter = {};\n\t\tfor ( const classId of this.classIds ) {\n\n\t\t\tclassCounter[ classId ] = classCounter[ classId ] ?? 0;\n\t\t\tthis.instancesIds.push( classCounter[ classId ] );\n\t\t\tclassCounter[ classId ] ++;\n\n\t\t}\n\n\t}\n\n\t_parseProperty( property, propertyLength, propertyName ) {\n\n\t\tif ( Array.isArray( property ) ) {\n\n\t\t\treturn property;\n\n\t\t} else {\n\n\t\t\tconst { buffer, binOffset } = this.batchTable;\n\n\t\t\tconst byteOffset = property.byteOffset;\n\t\t\tconst componentType = property.componentType || 'UNSIGNED_SHORT';\n\n\t\t\tconst arrayStart = binOffset + byteOffset;\n\n\t\t\treturn parseBinArray( buffer, arrayStart, propertyLength, 'SCALAR', componentType, propertyName );\n\n\t\t}\n\n\t}\n\n\tgetDataFromId( id, target = {} ) {\n\n\t\t// Get properties inherited from parents\n\n\t\tconst parentCount = this.parentCounts[ id ];\n\n\t\tif ( this.parentIds && parentCount > 0 ) {\n\n\t\t\tlet parentIdsOffset = 0;\n\t\t\tfor ( let i = 0; i < id; i ++ ) {\n\n\t\t\t\tparentIdsOffset += this.parentCounts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < parentCount; i ++ ) {\n\n\t\t\t\tconst parentId = this.parentIds[ parentIdsOffset + i ];\n\t\t\t\tif ( parentId !== id ) {\n\n\t\t\t\t\tthis.getDataFromId( parentId, target );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Get properties proper to this instance\n\n\t\tconst classId = this.classIds[ id ];\n\t\tconst instances = this.classes[ classId ].instances;\n\t\tconst className = this.classes[ classId ].name;\n\t\tconst instanceId = this.instancesIds[ id ];\n\n\t\tfor ( const key in instances ) {\n\n\t\t\ttarget[ className ] = target[ className ] || {};\n\t\t\ttarget[ className ][ key ] = instances[ key ][ instanceId ];\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n}\n","import { BatchTableHierarchyExtension } from './BatchTableHierarchyExtension.js';\nimport { FeatureTable } from './FeatureTable.js';\n\nexport class BatchTable extends FeatureTable {\n\n\tget batchSize() {\n\n\t\tconsole.warn( 'BatchTable.batchSize has been deprecated and replaced with BatchTable.count.' );\n\t\treturn this.count;\n\n\t}\n\n\tconstructor( buffer, count, start, headerLength, binLength ) {\n\n\t\tsuper( buffer, start, headerLength, binLength );\n\t\tthis.count = count;\n\n\t\tthis.extensions = {};\n\t\tconst extensions = this.header.extensions;\n\t\tif ( extensions ) {\n\n\t\t\tif ( extensions[ '3DTILES_batch_table_hierarchy' ] ) {\n\n\t\t\t\tthis.extensions[ '3DTILES_batch_table_hierarchy' ] = new BatchTableHierarchyExtension( this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetData( key, componentType = null, type = null ) {\n\n\t\tconsole.warn( 'BatchTable: BatchTable.getData is deprecated. Use BatchTable.getDataFromId to get all' +\n\t\t\t'properties for an id or BatchTable.getPropertyArray for getting an array of value for a property.' );\n\t\treturn super.getData( key, this.count, componentType, type );\n\n\t}\n\n\tgetDataFromId( id, target = {} ) {\n\n\t\tif ( id < 0 || id >= this.count ) {\n\n\t\t\tthrow new Error( `BatchTable: id value \"${ id }\" out of bounds for \"${ this.count }\" features number.` );\n\n\t\t}\n\n\t\tfor ( const key of this.getKeys() ) {\n\n\t\t\tif ( key !== 'extensions' ) {\n\n\t\t\t\ttarget[ key ] = super.getData( key, this.count )[ id ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const extensionName in this.extensions ) {\n\n\t\t\tconst extension = this.extensions[ extensionName ];\n\n\t\t\tif ( extension.getDataFromId instanceof Function ) {\n\n\t\t\t\ttarget[ extensionName ] = target[ extensionName ] || {};\n\t\t\t\textension.getDataFromId( id, target[ extensionName ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetPropertyArray( key ) {\n\n\t\treturn super.getData( key, this.count );\n\n\t}\n\n\n}\n","export class LoaderBase {\n\n\tconstructor() {\n\n\t\tthis.fetchOptions = {};\n\t\tthis.workingPath = '';\n\n\t}\n\n\tload( url ) {\n\n\t\tconsole.warn( 'Loader: \"load\" function has been deprecated in favor of \"loadAsync\".' );\n\t\treturn this.loadAsync( url );\n\n\t}\n\n\tloadAsync( url ) {\n\n\t\treturn fetch( url, this.fetchOptions )\n\t\t\t.then( res => {\n\n\t\t\t\tif ( ! res.ok ) {\n\n\t\t\t\t\tthrow new Error( `Failed to load file \"${ url }\" with status ${ res.status } : ${ res.statusText }` );\n\n\t\t\t\t}\n\t\t\t\treturn res.arrayBuffer();\n\n\t\t\t} )\n\t\t\t.then( buffer => {\n\n\t\t\t\tif ( this.workingPath === '' ) {\n\n\t\t\t\t\tthis.workingPath = this.workingPathForURL( url );\n\n\t\t\t\t}\n\n\t\t\t\treturn this.parse( buffer );\n\n\t\t\t} );\n\n\t}\n\n\tresolveExternalURL( url ) {\n\n\t\tif ( /^[^\\\\/]/.test( url ) && ! /^http/.test( url ) ) {\n\n\t\t\treturn this.workingPath + '/' + url;\n\n\t\t} else {\n\n\t\t\treturn url;\n\n\t\t}\n\n\t}\n\n\tworkingPathForURL( url ) {\n\n\t\tconst splits = url.split( /[\\\\/]/g );\n\t\tsplits.pop();\n\t\tconst workingPath = splits.join( '/' );\n\t\treturn workingPath + '/';\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tthrow new Error( 'LoaderBase: Parse not implemented.' );\n\n\t}\n\n}\n","export function readMagicBytes( bufferOrDataView ) {\n\n\tlet view;\n\tif ( bufferOrDataView instanceof DataView ) {\n\n\t\tview = bufferOrDataView;\n\n\t} else {\n\n\t\tview = new DataView( bufferOrDataView );\n\n\t}\n\n\tif ( String.fromCharCode( view.getUint8( 0 ) ) === '{' ) {\n\n\t\treturn null;\n\n\t}\n\n\tlet magicBytes = '';\n\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\tmagicBytes += String.fromCharCode( view.getUint8( i ) );\n\n\t}\n\n\treturn magicBytes;\n\n}\n","// B3DM File Format\n// https://github.com/CesiumGS/3d-tiles/blob/master/specification/TileFormats/Batched3DModel/README.md\n\nimport { BatchTable } from '../../utilities/BatchTable.js';\nimport { FeatureTable } from '../../utilities/FeatureTable.js';\nimport { LoaderBase } from './LoaderBase.js';\nimport { readMagicBytes } from '../../utilities/readMagicBytes.js';\n\nexport class B3DMLoaderBase extends LoaderBase {\n\n\tparse( buffer ) {\n\n\t\t// TODO: this should be able to take a uint8array with an offset and length\n\t\tconst dataView = new DataView( buffer );\n\n\t\t// 28-byte header\n\n\t\t// 4 bytes\n\t\tconst magic = readMagicBytes( dataView );\n\n\t\tconsole.assert( magic === 'b3dm' );\n\n\t\t// 4 bytes\n\t\tconst version = dataView.getUint32( 4, true );\n\n\t\tconsole.assert( version === 1 );\n\n\t\t// 4 bytes\n\t\tconst byteLength = dataView.getUint32( 8, true );\n\n\t\tconsole.assert( byteLength === buffer.byteLength );\n\n\t\t// 4 bytes\n\t\tconst featureTableJSONByteLength = dataView.getUint32( 12, true );\n\n\t\t// 4 bytes\n\t\tconst featureTableBinaryByteLength = dataView.getUint32( 16, true );\n\n\t\t// 4 bytes\n\t\tconst batchTableJSONByteLength = dataView.getUint32( 20, true );\n\n\t\t// 4 bytes\n\t\tconst batchTableBinaryByteLength = dataView.getUint32( 24, true );\n\n\t\t// Feature Table\n\t\tconst featureTableStart = 28;\n\t\tconst featureTableBuffer = buffer.slice(\n\t\t\tfeatureTableStart,\n\t\t\tfeatureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength,\n\t\t);\n\t\tconst featureTable = new FeatureTable(\n\t\t\tfeatureTableBuffer,\n\t\t\t0,\n\t\t\tfeatureTableJSONByteLength,\n\t\t\tfeatureTableBinaryByteLength,\n\t\t);\n\n\t\t// Batch Table\n\t\tconst batchTableStart = featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength;\n\t\tconst batchTableBuffer = buffer.slice(\n\t\t\tbatchTableStart,\n\t\t\tbatchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength,\n\t\t);\n\t\tconst batchTable = new BatchTable(\n\t\t\tbatchTableBuffer,\n\t\t\tfeatureTable.getData( 'BATCH_LENGTH' ),\n\t\t\t0,\n\t\t\tbatchTableJSONByteLength,\n\t\t\tbatchTableBinaryByteLength,\n\t\t);\n\n\t\tconst glbStart = batchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength;\n\t\tconst glbBytes = new Uint8Array( buffer, glbStart, byteLength - glbStart );\n\n\t\treturn {\n\t\t\tversion,\n\t\t\tfeatureTable,\n\t\t\tbatchTable,\n\t\t\tglbBytes,\n\t\t};\n\n\t}\n\n}\n\n","import { B3DMLoaderBase } from '../../base/loaders/B3DMLoaderBase.js';\nimport { DefaultLoadingManager, Matrix4 } from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\n\nexport class B3DMLoader extends B3DMLoaderBase {\n\n\tconstructor( manager = DefaultLoadingManager ) {\n\n\t\tsuper();\n\t\tthis.manager = manager;\n\t\tthis.adjustmentTransform = new Matrix4();\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst b3dm = super.parse( buffer );\n\t\tconst gltfBuffer = b3dm.glbBytes.slice().buffer;\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tconst manager = this.manager;\n\t\t\tconst fetchOptions = this.fetchOptions;\n\t\t\tconst loader = manager.getHandler( 'path.gltf' ) || new GLTFLoader( manager );\n\n\t\t\tif ( fetchOptions.credentials === 'include' && fetchOptions.mode === 'cors' ) {\n\n\t\t\t\tloader.setCrossOrigin( 'use-credentials' );\n\n\t\t\t}\n\n\t\t\tif ( 'credentials' in fetchOptions ) {\n\n\t\t\t\tloader.setWithCredentials( fetchOptions.credentials === 'include' );\n\n\t\t\t}\n\n\t\t\tif ( fetchOptions.headers ) {\n\n\t\t\t\tloader.setRequestHeader( fetchOptions.headers );\n\n\t\t\t}\n\n\t\t\t// GLTFLoader assumes the working path ends in a slash\n\t\t\tlet workingPath = this.workingPath;\n\t\t\tif ( ! /[\\\\/]$/.test( workingPath ) && workingPath.length ) {\n\n\t\t\t\tworkingPath += '/';\n\n\t\t\t}\n\n\t\t\tconst adjustmentTransform = this.adjustmentTransform;\n\n\t\t\tloader.parse( gltfBuffer, workingPath, model => {\n\n\t\t\t\tconst { batchTable, featureTable } = b3dm;\n\t\t\t\tconst { scene } = model;\n\n\t\t\t\tconst rtcCenter = featureTable.getData( 'RTC_CENTER' );\n\t\t\t\tif ( rtcCenter ) {\n\n\t\t\t\t\tscene.position.x += rtcCenter[ 0 ];\n\t\t\t\t\tscene.position.y += rtcCenter[ 1 ];\n\t\t\t\t\tscene.position.z += rtcCenter[ 2 ];\n\n\t\t\t\t}\n\n\t\t\t\tmodel.scene.updateMatrix();\n\t\t\t\tmodel.scene.matrix.multiply( adjustmentTransform );\n\t\t\t\tmodel.scene.matrix.decompose( model.scene.position, model.scene.quaternion, model.scene.scale );\n\n\t\t\t\tmodel.batchTable = batchTable;\n\t\t\t\tmodel.featureTable = featureTable;\n\n\t\t\t\tscene.batchTable = batchTable;\n\t\t\t\tscene.featureTable = featureTable;\n\n\t\t\t\tresolve( model );\n\n\t\t\t}, reject );\n\n\t\t} );\n\n\t}\n\n}\n","// PNTS File Format\n// https://github.com/CesiumGS/3d-tiles/blob/master/specification/TileFormats/PointCloud/README.md\n\nimport { BatchTable } from '../../utilities/BatchTable.js';\nimport { FeatureTable } from '../../utilities/FeatureTable.js';\nimport { readMagicBytes } from '../../utilities/readMagicBytes.js';\nimport { LoaderBase } from './LoaderBase.js';\n\nexport class PNTSLoaderBase extends LoaderBase {\n\n\tparse( buffer ) {\n\n\t\tconst dataView = new DataView( buffer );\n\n\t\t// 28-byte header\n\n\t\t// 4 bytes\n\t\tconst magic = readMagicBytes( dataView );\n\n\t\tconsole.assert( magic === 'pnts' );\n\n\t\t// 4 bytes\n\t\tconst version = dataView.getUint32( 4, true );\n\n\t\tconsole.assert( version === 1 );\n\n\t\t// 4 bytes\n\t\tconst byteLength = dataView.getUint32( 8, true );\n\n\t\tconsole.assert( byteLength === buffer.byteLength );\n\n\t\t// 4 bytes\n\t\tconst featureTableJSONByteLength = dataView.getUint32( 12, true );\n\n\t\t// 4 bytes\n\t\tconst featureTableBinaryByteLength = dataView.getUint32( 16, true );\n\n\t\t// 4 bytes\n\t\tconst batchTableJSONByteLength = dataView.getUint32( 20, true );\n\n\t\t// 4 bytes\n\t\tconst batchTableBinaryByteLength = dataView.getUint32( 24, true );\n\n\t\t// Feature Table\n\t\tconst featureTableStart = 28;\n\t\tconst featureTableBuffer = buffer.slice(\n\t\t\tfeatureTableStart,\n\t\t\tfeatureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength,\n\t\t);\n\t\tconst featureTable = new FeatureTable(\n\t\t\tfeatureTableBuffer,\n\t\t\t0,\n\t\t\tfeatureTableJSONByteLength,\n\t\t\tfeatureTableBinaryByteLength,\n\t\t);\n\n\t\t// Batch Table\n\t\tconst batchTableStart = featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength;\n\t\tconst batchTableBuffer = buffer.slice(\n\t\t\tbatchTableStart,\n\t\t\tbatchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength,\n\t\t);\n\t\tconst batchTable = new BatchTable(\n\t\t\tbatchTableBuffer,\n\t\t\tfeatureTable.getData( 'BATCH_LENGTH' ) || featureTable.getData( 'POINTS_LENGTH' ),\n\t\t\t0,\n\t\t\tbatchTableJSONByteLength,\n\t\t\tbatchTableBinaryByteLength,\n\t\t);\n\n\t\treturn Promise.resolve( {\n\n\t\t\tversion,\n\t\t\tfeatureTable,\n\t\t\tbatchTable,\n\n\t\t} );\n\n\t}\n\n}\n\n","// The implementation of rgb565 to rgb888 is from\n// https://rgbcolorpicker.com/565\n\nexport function rgb565torgb( rgb565 ) {\n\n\t// Shift the red value to the right by 11 bits.\n\tconst red5 = rgb565 >> 11;\n\t// Shift the green value to the right by 5 bits and extract the lower 6 bits.\n\tconst green6 = ( rgb565 >> 5 ) & 0b111111;\n\t// Extract the lower 5 bits.\n\tconst blue5 = rgb565 & 0b11111;\n\n\t// Convert 5-bit red to 8-bit red.\n\tconst red8 = Math.round( ( red5 / 31 ) * 255 );\n\t// Convert 6-bit green to 8-bit green.\n\tconst green8 = Math.round( ( green6 / 63 ) * 255 );\n\t// Convert 5-bit blue to 8-bit blue.\n\tconst blue8 = Math.round( ( blue5 / 31 ) * 255 );\n\n\treturn [ red8, green8, blue8 ];\n\n}\n","import { PNTSLoaderBase } from '../../base/loaders/PNTSLoaderBase.js';\nimport {\n\tPoints,\n\tPointsMaterial,\n\tBufferGeometry,\n\tBufferAttribute,\n\tDefaultLoadingManager,\n\tVector3,\n\tColor,\n} from 'three';\nimport { rgb565torgb } from '../../utilities/rgb565torgb.js';\n\nconst DRACO_ATTRIBUTE_MAP = {\n\tRGB: 'color',\n\tPOSITION: 'position',\n};\n\nexport class PNTSLoader extends PNTSLoaderBase {\n\n\tconstructor( manager = DefaultLoadingManager ) {\n\n\t\tsuper();\n\t\tthis.manager = manager;\n\n\t}\n\n\tparse( buffer ) {\n\n\t\treturn super.parse( buffer ).then( async ( result ) => {\n\n\t\t\tconst { featureTable, batchTable } = result;\n\n\t\t\tconst material = new PointsMaterial();\n\t\t\tconst extensions = featureTable.header.extensions;\n\t\t\tconst translationOffset = new Vector3();\n\t\t\tlet geometry;\n\n\t\t\t// handle loading the draco data\n\t\t\tif ( extensions && extensions[ '3DTILES_draco_point_compression' ] ) {\n\n\t\t\t\tconst { byteOffset, byteLength, properties } = extensions[ '3DTILES_draco_point_compression' ];\n\t\t\t\tconst dracoLoader = this.manager.getHandler( 'draco.drc' );\n\t\t\t\tif ( dracoLoader == null ) {\n\n\t\t\t\t\tthrow new Error( 'PNTSLoader: dracoLoader not available.' );\n\n\t\t\t\t}\n\n\t\t\t\t// map PNTS keys to draco types\n\t\t\t\tconst attributeIDs = {};\n\t\t\t\tfor ( const key in properties ) {\n\n\t\t\t\t\tif ( key in DRACO_ATTRIBUTE_MAP && key in properties ) {\n\n\t\t\t\t\t\tconst mappedKey = DRACO_ATTRIBUTE_MAP[ key ];\n\t\t\t\t\t\tattributeIDs[ mappedKey ] = properties[ key ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// decode the geometry\n\t\t\t\tconst taskConfig = {\n\t\t\t\t\tattributeIDs,\n\t\t\t\t\tattributeTypes: {\n\t\t\t\t\t\tposition: 'Float32Array',\n\t\t\t\t\t\tcolor: 'Uint8Array',\n\t\t\t\t\t},\n\t\t\t\t\tuseUniqueIDs: true,\n\t\t\t\t};\n\n\t\t\t\tconst buffer = featureTable.getBuffer( byteOffset, byteLength );\n\t\t\t\tgeometry = await dracoLoader.decodeGeometry( buffer, taskConfig );\n\t\t\t\tif ( geometry.attributes.color ) {\n\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// handle non compressed case\n\t\t\t\tconst POINTS_LENGTH = featureTable.getData( 'POINTS_LENGTH' );\n\t\t\t\tconst POSITION = featureTable.getData( 'POSITION', POINTS_LENGTH, 'FLOAT', 'VEC3' );\n\t\t\t\tconst RGB = featureTable.getData( 'RGB', POINTS_LENGTH, 'UNSIGNED_BYTE', 'VEC3' );\n\t\t\t\tconst RGBA = featureTable.getData( 'RGBA', POINTS_LENGTH, 'UNSIGNED_BYTE', 'VEC4' );\n\t\t\t\tconst RGB565 = featureTable.getData( 'RGB565', POINTS_LENGTH, 'UNSIGNED_SHORT', 'SCALAR' );\n\t\t\t\tconst CONSTANT_RGBA = featureTable.getData( 'CONSTANT_RGBA', POINTS_LENGTH, 'UNSIGNED_BYTE', 'VEC4' );\n\t\t\t\tconst POSITION_QUANTIZED = featureTable.getData( 'POSITION_QUANTIZED', POINTS_LENGTH, 'UNSIGNED_SHORT', 'VEC3' );\n\t\t\t\tconst QUANTIZED_VOLUME_SCALE = featureTable.getData( 'QUANTIZED_VOLUME_SCALE', POINTS_LENGTH, 'FLOAT', 'VEC3' );\n\t\t\t\tconst QUANTIZED_VOLUME_OFFSET = featureTable.getData( 'QUANTIZED_VOLUME_OFFSET', POINTS_LENGTH, 'FLOAT', 'VEC3' );\n\n\t\t\t\tgeometry = new BufferGeometry();\n\n\t\t\t\tif ( POSITION_QUANTIZED ) {\n\n\t\t\t\t\tconst decodedPositions = new Float32Array( POINTS_LENGTH * 3 );\n\t\t\t\t\tfor ( let i = 0; i < POINTS_LENGTH; i ++ ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index = 3 * i + j;\n\t\t\t\t\t\t\tdecodedPositions[ index ] = ( POSITION_QUANTIZED[ index ] / 65535.0 ) * QUANTIZED_VOLUME_SCALE[ j ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\ttranslationOffset.x = QUANTIZED_VOLUME_OFFSET[ 0 ];\n\t\t\t\t\ttranslationOffset.y = QUANTIZED_VOLUME_OFFSET[ 1 ];\n\t\t\t\t\ttranslationOffset.z = QUANTIZED_VOLUME_OFFSET[ 2 ];\n\t\t\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( decodedPositions, 3, false ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( POSITION, 3, false ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( RGBA !== null ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( RGBA, 4, true ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\t\t\t\t\tmaterial.transparent = true;\n\t\t\t\t\tmaterial.depthWrite = false;\n\n\t\t\t\t} else if ( RGB !== null ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( RGB, 3, true ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t} else if ( RGB565 !== null ) {\n\n\t\t\t\t\tconst color = new Uint8Array( POINTS_LENGTH * 3 );\n\t\t\t\t\tfor ( let i = 0; i < POINTS_LENGTH; i ++ ) {\n\n\t\t\t\t\t\tconst rgbColor = rgb565torgb( RGB565[ i ] );\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index = 3 * i + j;\n\t\t\t\t\t\t\tcolor[ index ] = rgbColor[ j ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( color, 3, true ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t} else if ( CONSTANT_RGBA !== null ) {\n\n\t\t\t\t\tconst color = new Color( CONSTANT_RGBA[ 0 ], CONSTANT_RGBA[ 1 ], CONSTANT_RGBA[ 2 ] );\n\t\t\t\t\tmaterial.color = color;\n\t\t\t\t\tconst opacity = CONSTANT_RGBA[ 3 ] / 255;\n\t\t\t\t\tif ( opacity < 1 ) {\n\n\t\t\t\t\t\tmaterial.opacity = opacity;\n\t\t\t\t\t\tmaterial.transparent = true;\n\t\t\t\t\t\tmaterial.depthWrite = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t[\n\t\t\t\t'BATCH_LENGTH',\n\t\t\t\t'NORMAL',\n\t\t\t\t'NORMAL_OCT16P',\n\t\t\t].forEach( ( feature ) => {\n\n\t\t\t\tif ( feature in featureTable.header ) {\n\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`PNTSLoader: Unsupported FeatureTable feature \"${feature}\" detected.`\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tconst object = new Points( geometry, material );\n\t\t\tobject.position.copy( translationOffset );\n\t\t\tresult.scene = object;\n\t\t\tresult.scene.featureTable = featureTable;\n\t\t\tresult.scene.batchTable = batchTable;\n\n\t\t\tconst rtcCenter = featureTable.getData( 'RTC_CENTER' );\n\t\t\tif ( rtcCenter ) {\n\n\t\t\t\tresult.scene.position.x += rtcCenter[ 0 ];\n\t\t\t\tresult.scene.position.y += rtcCenter[ 1 ];\n\t\t\t\tresult.scene.position.z += rtcCenter[ 2 ];\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t} );\n\n\t}\n\n}\n","// I3DM File Format\n// https://github.com/CesiumGS/3d-tiles/blob/master/specification/TileFormats/Instanced3DModel/README.md\n\nimport { BatchTable } from '../../utilities/BatchTable.js';\nimport { FeatureTable } from '../../utilities/FeatureTable.js';\nimport { arrayToString } from '../../utilities/arrayToString.js';\nimport { LoaderBase } from './LoaderBase.js';\nimport { readMagicBytes } from '../../utilities/readMagicBytes.js';\n\nexport class I3DMLoaderBase extends LoaderBase {\n\n\tparse( buffer ) {\n\n\t\tconst dataView = new DataView( buffer );\n\n\t\t// 32-byte header\n\n\t\t// 4 bytes\n\t\tconst magic = readMagicBytes( dataView );\n\n\t\tconsole.assert( magic === 'i3dm' );\n\n\t\t// 4 bytes\n\t\tconst version = dataView.getUint32( 4, true );\n\n\t\tconsole.assert( version === 1 );\n\n\t\t// 4 bytes\n\t\tconst byteLength = dataView.getUint32( 8, true );\n\n\t\tconsole.assert( byteLength === buffer.byteLength );\n\n\t\t// 4 bytes\n\t\tconst featureTableJSONByteLength = dataView.getUint32( 12, true );\n\n\t\t// 4 bytes\n\t\tconst featureTableBinaryByteLength = dataView.getUint32( 16, true );\n\n\t\t// 4 bytes\n\t\tconst batchTableJSONByteLength = dataView.getUint32( 20, true );\n\n\t\t// 4 bytes\n\t\tconst batchTableBinaryByteLength = dataView.getUint32( 24, true );\n\n\t\t// 4 bytes\n\t\tconst gltfFormat = dataView.getUint32( 28, true );\n\n\t\t// Feature Table\n\t\tconst featureTableStart = 32;\n\t\tconst featureTableBuffer = buffer.slice(\n\t\t\tfeatureTableStart,\n\t\t\tfeatureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength,\n\t\t);\n\t\tconst featureTable = new FeatureTable(\n\t\t\tfeatureTableBuffer,\n\t\t\t0,\n\t\t\tfeatureTableJSONByteLength,\n\t\t\tfeatureTableBinaryByteLength,\n\t\t);\n\n\t\t// Batch Table\n\t\tconst batchTableStart = featureTableStart + featureTableJSONByteLength + featureTableBinaryByteLength;\n\t\tconst batchTableBuffer = buffer.slice(\n\t\t\tbatchTableStart,\n\t\t\tbatchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength,\n\t\t);\n\t\tconst batchTable = new BatchTable(\n\t\t\tbatchTableBuffer,\n\t\t\tfeatureTable.getData( 'INSTANCES_LENGTH' ),\n\t\t\t0,\n\t\t\tbatchTableJSONByteLength,\n\t\t\tbatchTableBinaryByteLength,\n\t\t);\n\n\t\tconst glbStart = batchTableStart + batchTableJSONByteLength + batchTableBinaryByteLength;\n\t\tconst bodyBytes = new Uint8Array( buffer, glbStart, byteLength - glbStart );\n\n\t\tlet glbBytes = null;\n\t\tlet promise = null;\n\t\tlet gltfWorkingPath = null;\n\t\tif ( gltfFormat ) {\n\n\t\t\tglbBytes = bodyBytes;\n\t\t\tpromise = Promise.resolve();\n\n\t\t} else {\n\n\t\t\tconst externalUri = this.resolveExternalURL( arrayToString( bodyBytes ) );\n\n\t\t\t//Store the gltf working path\n\t\t\tconst uriSplits = externalUri.split( /[\\\\/]/g );\n\t\t\turiSplits.pop();\n\t\t\tgltfWorkingPath = uriSplits.join( '/' );\n\n\t\t\tpromise = fetch( externalUri, this.fetchOptions )\n\t\t\t\t.then( res => {\n\n\t\t\t\t\tif ( ! res.ok ) {\n\n\t\t\t\t\t\tthrow new Error( `I3DMLoaderBase : Failed to load file \"${ externalUri }\" with status ${ res.status } : ${ res.statusText }` );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn res.arrayBuffer();\n\n\t\t\t\t} )\n\t\t\t\t.then( buffer => {\n\n\t\t\t\t\tglbBytes = new Uint8Array( buffer );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\treturn promise.then( () => {\n\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tfeatureTable,\n\t\t\t\tbatchTable,\n\t\t\t\tglbBytes,\n\t\t\t\tgltfWorkingPath\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n}\n\n","import { Spherical, Vector3, MathUtils } from 'three';\n\nconst _spherical = new Spherical();\nconst _vec = new Vector3();\nconst _geoResults = {};\n\n// Cesium / 3D tiles Spheroid:\n// - Up is Z at 90 degrees latitude\n// - 0, 0 latitude, longitude is X axis\n// Z\n// |\n// |\n// .----- Y\n// /\n// X\n\n\n// Three.js Spherical Coordinates\n// - Up is Y at 90 degrees latitude\n// - 0, 0 latitude, longitude is Z\n// Y\n// |\n// |\n// .----- X\n// /\n// Z\n\nexport function swapToGeoFrame( target ) {\n\n\tconst { x, y, z } = target;\n\ttarget.x = z;\n\ttarget.y = x;\n\ttarget.z = y;\n\n}\n\nexport function swapToThreeFrame( target ) {\n\n\tconst { x, y, z } = target;\n\ttarget.z = x;\n\ttarget.x = y;\n\ttarget.y = z;\n\n}\n\nexport function sphericalPhiToLatitude( phi ) {\n\n\treturn - ( phi - Math.PI / 2 );\n\n}\n\nexport function latitudeToSphericalPhi( latitude ) {\n\n\treturn - latitude + Math.PI / 2;\n\n}\n\nfunction correctGeoCoordWrap( lat, lon, target = {} ) {\n\n\t_spherical.theta = lon;\n\t_spherical.phi = latitudeToSphericalPhi( lat );\n\t_vec.setFromSpherical( _spherical );\n\n\t_spherical.setFromVector3( _vec );\n\ttarget.lat = sphericalPhiToLatitude( _spherical.phi );\n\ttarget.lon = _spherical.theta;\n\treturn target;\n\n}\n\nfunction toHoursMinutesSecondsString( value, pos = 'E', neg = 'W' ) {\n\n\tconst direction = value < 0 ? neg : pos;\n\tvalue = Math.abs( value );\n\n\tconst hours = ~ ~ value;\n\n\tconst minDec = ( value - hours ) * 60;\n\tconst minutes = ~ ~ minDec;\n\n\tconst secDec = ( minDec - minutes ) * 60;\n\tconst seconds = ~ ~ secDec;\n\n\treturn `${ hours }° ${ minutes }' ${ seconds }\" ${ direction }`;\n\n}\n\nexport function toLatLonString( lat, lon, decimalFormat = false ) {\n\n\tconst result = correctGeoCoordWrap( lat, lon, _geoResults );\n\tlet latString, lonString;\n\tif ( decimalFormat ) {\n\n\t\tlatString = `${ ( MathUtils.RAD2DEG * result.lat ).toFixed( 4 ) }°`;\n\t\tlonString = `${ ( MathUtils.RAD2DEG * result.lon ).toFixed( 4 ) }°`;\n\n\t} else {\n\n\t\tlatString = toHoursMinutesSecondsString( MathUtils.RAD2DEG * result.lat, 'N', 'S' );\n\t\tlonString = toHoursMinutesSecondsString( MathUtils.RAD2DEG * result.lon, 'E', 'W' );\n\n\t}\n\n\treturn `${ latString } ${ lonString }`;\n\n}\n","import { Vector3, Spherical, MathUtils, Ray, Matrix4, Sphere, Euler } from 'three';\nimport { swapToGeoFrame, latitudeToSphericalPhi } from './GeoUtils.js';\n\nconst _spherical = new Spherical();\nconst _norm = new Vector3();\nconst _vec = new Vector3();\nconst _vec2 = new Vector3();\nconst _vec3 = new Vector3();\nconst _matrix = new Matrix4();\nconst _matrix2 = new Matrix4();\nconst _sphere = new Sphere();\nconst _euler = new Euler();\n\nconst _vecX = new Vector3();\nconst _vecY = new Vector3();\nconst _vecZ = new Vector3();\nconst _pos = new Vector3();\n\nconst _ray = new Ray();\n\nconst EPSILON12 = 1e-12;\nconst CENTER_EPS = 0.1;\n\nexport const ENU_FRAME = 0;\nexport const CAMERA_FRAME = 1;\nexport const OBJECT_FRAME = 2;\n\nexport class Ellipsoid {\n\n\tconstructor( x = 1, y = 1, z = 1 ) {\n\n\t\tthis.radius = new Vector3( x, y, z );\n\n\t}\n\n\tintersectRay( ray, target ) {\n\n\t\t_matrix.makeScale( ...this.radius ).invert();\n\t\t_sphere.center.set( 0, 0, 0 );\n\t\t_sphere.radius = 1;\n\n\t\t_ray.copy( ray ).applyMatrix4( _matrix );\n\t\tif ( _ray.intersectSphere( _sphere, target ) ) {\n\n\t\t\t_matrix.makeScale( ...this.radius );\n\t\t\ttarget.applyMatrix4( _matrix );\n\t\t\treturn target;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t// returns a frame with Z indicating altitude\n\t// Y pointing north\n\t// X pointing east\n\tgetEastNorthUpFrame( lat, lon, target ) {\n\n\t\tthis.getEastNorthUpAxes( lat, lon, _vecX, _vecY, _vecZ, _pos );\n\t\treturn target.makeBasis( _vecX, _vecY, _vecZ ).setPosition( _pos );\n\n\t}\n\n\tgetEastNorthUpAxes( lat, lon, vecEast, vecNorth, vecUp, point = _pos ) {\n\n\t\tthis.getCartographicToPosition( lat, lon, 0, point );\n\t\tthis.getCartographicToNormal( lat, lon, vecUp );\t\t// up\n\t\tvecEast.set( - point.y, point.x, 0 ).normalize();\t\t// east\n\t\tvecNorth.crossVectors( vecUp, vecEast ).normalize();\t// north\n\n\t}\n\n\tgetNorthernTangent( lat, lon, target, westTarget = _vec3 ) {\n\n\t\tconsole.log( 'Ellipsoid: getNorthernTangent has been deprecated. Use getEastNorthUpAxes instead.' );\n\n\t\tthis.getEastNorthUpAxes( lat, lon, westTarget, target, _vecZ );\n\t\twestTarget.multiplyScalar( - 1 );\n\t\treturn target;\n\n\t}\n\n\t// azimuth: measured off of true north, increasing towards \"east\"\n\t// elevation: measured off of the horizon, increasing towards sky\n\t// roll: rotation around northern axis\n\tgetAzElRollFromRotationMatrix( lat, lon, rotationMatrix, target, frame = ENU_FRAME ) {\n\n\t\t// if working with a frame that is not the ENU_FRAME then multiply in the\n\t\t// offset for a camera or object so \"forward\" and \"up\" are oriented correct\n\t\tif ( frame === CAMERA_FRAME ) {\n\n\t\t\t_euler.set( - Math.PI / 2, 0, 0, 'XYZ' );\n\t\t\t_matrix2.makeRotationFromEuler( _euler ).premultiply( rotationMatrix );\n\n\t\t} else if ( frame === OBJECT_FRAME ) {\n\n\t\t\t_euler.set( - Math.PI / 2, 0, Math.PI, 'XYZ' );\n\t\t\t_matrix2.makeRotationFromEuler( _euler ).premultiply( rotationMatrix );\n\n\t\t} else {\n\n\t\t\t_matrix2.copy( rotationMatrix );\n\n\t\t}\n\n\t\tthis.getEastNorthUpFrame( lat, lon, _matrix ).invert();\n\t\t_matrix2.premultiply( _matrix );\n\t\t_euler.setFromRotationMatrix( _matrix2, 'ZXY' );\n\n\t\ttarget.azimuth = - _euler.z;\n\t\ttarget.elevation = _euler.x;\n\t\ttarget.roll = _euler.y;\n\t\treturn target;\n\n\t}\n\n\tgetRotationMatrixFromAzElRoll( lat, lon, az, el, roll, target, frame = ENU_FRAME ) {\n\n\t\tthis.getEastNorthUpFrame( lat, lon, _matrix );\n\t\t_euler.set( el, roll, - az, 'ZXY' );\n\n\t\ttarget\n\t\t\t.makeRotationFromEuler( _euler )\n\t\t\t.premultiply( _matrix )\n\t\t\t.setPosition( 0, 0, 0 );\n\n\t\t// Add in the orientation adjustment for objects and cameras so \"forward\" and \"up\" are oriented\n\t\t// correctly\n\t\tif ( frame === CAMERA_FRAME ) {\n\n\t\t\t_euler.set( Math.PI / 2, 0, 0, 'XYZ' );\n\t\t\t_matrix2.makeRotationFromEuler( _euler );\n\t\t\ttarget.multiply( _matrix2 );\n\n\t\t} else if ( frame === OBJECT_FRAME ) {\n\n\t\t\t_euler.set( - Math.PI / 2, 0, Math.PI, 'XYZ' );\n\t\t\t_matrix2.makeRotationFromEuler( _euler );\n\t\t\ttarget.multiply( _matrix2 );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetCartographicToPosition( lat, lon, height, target ) {\n\n\t\t// From Cesium function Ellipsoid.cartographicToCartesian\n\t\t// https://github.com/CesiumGS/cesium/blob/665ec32e813d5d6fe906ec3e87187f6c38ed5e49/packages/engine/Source/Core/Ellipsoid.js#L396\n\t\tthis.getCartographicToNormal( lat, lon, _norm );\n\n\t\tconst radius = this.radius;\n\t\t_vec.copy( _norm );\n\t\t_vec.x *= radius.x ** 2;\n\t\t_vec.y *= radius.y ** 2;\n\t\t_vec.z *= radius.z ** 2;\n\n\t\tconst gamma = Math.sqrt( _norm.dot( _vec ) );\n\t\t_vec.divideScalar( gamma );\n\n\t\treturn target.copy( _vec ).addScaledVector( _norm, height );\n\n\t}\n\n\tgetPositionToCartographic( pos, target ) {\n\n\t\t// From Cesium function Ellipsoid.cartesianToCartographic\n\t\t// https://github.com/CesiumGS/cesium/blob/665ec32e813d5d6fe906ec3e87187f6c38ed5e49/packages/engine/Source/Core/Ellipsoid.js#L463\n\t\tthis.getPositionToSurfacePoint( pos, _vec );\n\t\tthis.getPositionToNormal( pos, _norm );\n\n\t\tconst heightDelta = _vec2.subVectors( pos, _vec );\n\n\t\ttarget.lon = Math.atan2( _norm.y, _norm.x );\n\t\ttarget.lat = Math.asin( _norm.z );\n\t\ttarget.height = Math.sign( heightDelta.dot( pos ) ) * heightDelta.length();\n\t\treturn target;\n\n\t}\n\n\tgetCartographicToNormal( lat, lon, target ) {\n\n\t\t_spherical.set( 1, latitudeToSphericalPhi( lat ), lon );\n\t\ttarget.setFromSpherical( _spherical ).normalize();\n\n\t\t// swap frame from the three.js frame to the geo coord frame\n\t\tswapToGeoFrame( target );\n\t\treturn target;\n\n\t}\n\n\tgetPositionToNormal( pos, target ) {\n\n\t\tconst radius = this.radius;\n\t\ttarget.copy( pos );\n\t\ttarget.x /= radius.x ** 2;\n\t\ttarget.y /= radius.y ** 2;\n\t\ttarget.z /= radius.z ** 2;\n\t\ttarget.normalize();\n\n\t\treturn target;\n\n\t}\n\n\tgetPositionToSurfacePoint( pos, target ) {\n\n\t\t// From Cesium function Ellipsoid.scaleToGeodeticSurface\n\t\t// https://github.com/CesiumGS/cesium/blob/d11b746e5809ac115fcff65b7b0c6bdfe81dcf1c/packages/engine/Source/Core/scaleToGeodeticSurface.js#L25\n\t\tconst radius = this.radius;\n\t\tconst invRadiusSqX = 1 / ( radius.x ** 2 );\n\t\tconst invRadiusSqY = 1 / ( radius.y ** 2 );\n\t\tconst invRadiusSqZ = 1 / ( radius.z ** 2 );\n\n\t\tconst x2 = pos.x * pos.x * invRadiusSqX;\n\t\tconst y2 = pos.y * pos.y * invRadiusSqY;\n\t\tconst z2 = pos.z * pos.z * invRadiusSqZ;\n\n\t\t// Compute the squared ellipsoid norm.\n\t\tconst squaredNorm = x2 + y2 + z2;\n\t\tconst ratio = Math.sqrt( 1.0 / squaredNorm );\n\n\t\t// As an initial approximation, assume that the radial intersection is the projection point.\n\t\tconst intersection = _vec.copy( pos ).multiplyScalar( ratio );\n\t\tif ( squaredNorm < CENTER_EPS ) {\n\n\t\t\treturn ! isFinite( ratio ) ? null : target.copy( intersection );\n\n\t\t}\n\n\t\t// Use the gradient at the intersection point in place of the true unit normal.\n\t\t// The difference in magnitude will be absorbed in the multiplier.\n\t\tconst gradient = _vec2.set(\n\t\t\tintersection.x * invRadiusSqX * 2.0,\n\t\t\tintersection.y * invRadiusSqY * 2.0,\n\t\t\tintersection.z * invRadiusSqZ * 2.0\n\t\t);\n\n\t\t// Compute the initial guess at the normal vector multiplier, lambda.\n\t\tlet lambda = ( 1.0 - ratio ) * pos.length() / ( 0.5 * gradient.length() );\n\t\tlet correction = 0.0;\n\n\t\tlet func, denominator;\n\t\tlet xMultiplier, yMultiplier, zMultiplier;\n\t\tlet xMultiplier2, yMultiplier2, zMultiplier2;\n\t\tlet xMultiplier3, yMultiplier3, zMultiplier3;\n\n\t\tdo {\n\n\t\t\tlambda -= correction;\n\n\t\t\txMultiplier = 1.0 / ( 1.0 + lambda * invRadiusSqX );\n\t\t\tyMultiplier = 1.0 / ( 1.0 + lambda * invRadiusSqY );\n\t\t\tzMultiplier = 1.0 / ( 1.0 + lambda * invRadiusSqZ );\n\n\t\t\txMultiplier2 = xMultiplier * xMultiplier;\n\t\t\tyMultiplier2 = yMultiplier * yMultiplier;\n\t\t\tzMultiplier2 = zMultiplier * zMultiplier;\n\n\t\t\txMultiplier3 = xMultiplier2 * xMultiplier;\n\t\t\tyMultiplier3 = yMultiplier2 * yMultiplier;\n\t\t\tzMultiplier3 = zMultiplier2 * zMultiplier;\n\n\t\t\tfunc = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n\n\t\t\t// \"denominator\" here refers to the use of this expression in the velocity and acceleration\n\t\t\t// computations in the sections to follow.\n\t\t\tdenominator =\n\t\t\t\tx2 * xMultiplier3 * invRadiusSqX +\n\t\t\t\ty2 * yMultiplier3 * invRadiusSqY +\n\t\t\t\tz2 * zMultiplier3 * invRadiusSqZ;\n\n\t\t\tconst derivative = - 2.0 * denominator;\n\t\t\tcorrection = func / derivative;\n\n\t\t} while ( Math.abs( func ) > EPSILON12 );\n\n\t\treturn target.set(\n\t\t\tpos.x * xMultiplier,\n\t\t\tpos.y * yMultiplier,\n\t\t\tpos.z * zMultiplier\n\t\t);\n\n\t}\n\n\tcalculateHorizonDistance( latitude, elevation ) {\n\n\t\t// from https://aty.sdsu.edu/explain/atmos_refr/horizon.html\n\t\t// OG = sqrt ( 2 R h + h2 ) .\n\t\tconst effectiveRadius = this.calculateEffectiveRadius( latitude );\n\t\treturn Math.sqrt( 2 * effectiveRadius * elevation + elevation ** 2 );\n\n\t}\n\n\tcalculateEffectiveRadius( latitude ) {\n\n\t\t// This radius represents the distance from the center of the ellipsoid to the surface along the normal at the given latitude.\n\t\t// from https://en.wikipedia.org/wiki/Earth_radius#Prime_vertical\n\t\t// N = a / sqrt(1 - e^2 * sin^2(phi))\n\t\tconst semiMajorAxis = this.radius.x;\n\t\tconst semiMinorAxis = this.radius.z;\n\t\tconst eSquared = 1 - ( semiMinorAxis ** 2 / semiMajorAxis ** 2 );\n\t\tconst phi = latitude * MathUtils.DEG2RAD;\n\n\t\tconst sinPhiSquared = Math.sin( phi ) ** 2;\n\t\tconst N = semiMajorAxis / Math.sqrt( 1 - eSquared * sinPhiSquared );\n\t\treturn N;\n\n\t}\n\n\tgetPositionElevation( pos ) {\n\n\t\t// logic from \"getPositionToCartographic\"\n\t\tthis.getPositionToSurfacePoint( pos, _vec );\n\n\t\tconst heightDelta = _vec2.subVectors( pos, _vec );\n\t\treturn Math.sign( heightDelta.dot( pos ) ) * heightDelta.length();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.radius.copy( source.radius );\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n","import { WGS84_RADIUS, WGS84_HEIGHT, LUNAR_RADIUS, LUNAR_HEIGHT } from '../../base/constants.js';\nimport { Ellipsoid } from './Ellipsoid.js';\n\nexport const WGS84_ELLIPSOID = new Ellipsoid( WGS84_RADIUS, WGS84_RADIUS, WGS84_HEIGHT );\nexport const LUNAR_ELLIPSOID = new Ellipsoid( LUNAR_RADIUS, LUNAR_RADIUS, LUNAR_HEIGHT );\n","import { I3DMLoaderBase } from '../../base/loaders/I3DMLoaderBase.js';\nimport { DefaultLoadingManager, Matrix4, InstancedMesh, Vector3, Quaternion } from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { WGS84_ELLIPSOID } from '../math/GeoConstants.js';\n\nconst tempFwd = /* @__PURE__ */ new Vector3();\nconst tempUp = /* @__PURE__ */ new Vector3();\nconst tempRight = /* @__PURE__ */ new Vector3();\nconst tempPos = /* @__PURE__ */ new Vector3();\nconst tempQuat = /* @__PURE__ */ new Quaternion();\nconst tempSca = /* @__PURE__ */ new Vector3();\nconst tempMat = /* @__PURE__ */ new Matrix4();\nconst tempMat2 = /* @__PURE__ */ new Matrix4();\n\nconst tempGlobePos = /* @__PURE__ */ new Vector3();\nconst tempEnuFrame = /* @__PURE__ */ new Matrix4();\nconst tempLocalQuat = /* @__PURE__ */ new Quaternion();\nconst tempLatLon = {};\n\nexport class I3DMLoader extends I3DMLoaderBase {\n\n\tconstructor( manager = DefaultLoadingManager ) {\n\n\t\tsuper();\n\t\tthis.manager = manager;\n\t\tthis.adjustmentTransform = new Matrix4();\n\t\tthis.ellipsoid = WGS84_ELLIPSOID.clone();\n\n\t}\n\n\tresolveExternalURL( url ) {\n\n\t\treturn this.manager.resolveURL( super.resolveExternalURL( url ) );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\treturn super\n\t\t\t.parse( buffer )\n\t\t\t.then( i3dm => {\n\n\t\t\t\tconst { featureTable, batchTable } = i3dm;\n\t\t\t\tconst gltfBuffer = i3dm.glbBytes.slice().buffer;\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tconst fetchOptions = this.fetchOptions;\n\t\t\t\t\tconst manager = this.manager;\n\t\t\t\t\tconst loader = manager.getHandler( 'path.gltf' ) || new GLTFLoader( manager );\n\n\t\t\t\t\tif ( fetchOptions.credentials === 'include' && fetchOptions.mode === 'cors' ) {\n\n\t\t\t\t\t\tloader.setCrossOrigin( 'use-credentials' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'credentials' in fetchOptions ) {\n\n\t\t\t\t\t\tloader.setWithCredentials( fetchOptions.credentials === 'include' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( fetchOptions.headers ) {\n\n\t\t\t\t\t\tloader.setRequestHeader( fetchOptions.headers );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// GLTFLoader assumes the working path ends in a slash\n\t\t\t\t\tlet workingPath = i3dm.gltfWorkingPath ?? this.workingPath;\n\t\t\t\t\tif ( ! /[\\\\/]$/.test( workingPath ) ) {\n\n\t\t\t\t\t\tworkingPath += '/';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst adjustmentTransform = this.adjustmentTransform;\n\n\t\t\t\t\tloader.parse( gltfBuffer, workingPath, model => {\n\n\t\t\t\t\t\tconst INSTANCES_LENGTH = featureTable.getData( 'INSTANCES_LENGTH' );\n\t\t\t\t\t\tconst POSITION = featureTable.getData( 'POSITION', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );\n\t\t\t\t\t\tconst NORMAL_UP = featureTable.getData( 'NORMAL_UP', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );\n\t\t\t\t\t\tconst NORMAL_RIGHT = featureTable.getData( 'NORMAL_RIGHT', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );\n\t\t\t\t\t\tconst SCALE_NON_UNIFORM = featureTable.getData( 'SCALE_NON_UNIFORM', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );\n\t\t\t\t\t\tconst SCALE = featureTable.getData( 'SCALE', INSTANCES_LENGTH, 'FLOAT', 'SCALAR' );\n\t\t\t\t\t\tconst RTC_CENTER = featureTable.getData( 'RTC_CENTER' );\n\t\t\t\t\t\tconst EAST_NORTH_UP = featureTable.getData( 'EAST_NORTH_UP' );\n\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'QUANTIZED_VOLUME_OFFSET',\n\t\t\t\t\t\t\t'QUANTIZED_VOLUME_SCALE',\n\t\t\t\t\t\t\t'POSITION_QUANTIZED',\n\t\t\t\t\t\t\t'NORMAL_UP_OCT32P',\n\t\t\t\t\t\t\t'NORMAL_RIGHT_OCT32P',\n\t\t\t\t\t\t].forEach( feature => {\n\n\t\t\t\t\t\t\tif ( feature in featureTable.header ) {\n\n\t\t\t\t\t\t\t\tconsole.warn( `I3DMLoader: Unsupported FeatureTable feature \"${ feature }\" detected.` );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// get the average vector center so we can avoid floating point error due to lower\n\t\t\t\t\t\t// precision transformation calculations on the GPU\n\t\t\t\t\t\tconst averageVector = new Vector3();\n\t\t\t\t\t\tfor ( let i = 0; i < INSTANCES_LENGTH; i ++ ) {\n\n\t\t\t\t\t\t\taverageVector.x += POSITION[ i * 3 + 0 ] / INSTANCES_LENGTH;\n\t\t\t\t\t\t\taverageVector.y += POSITION[ i * 3 + 1 ] / INSTANCES_LENGTH;\n\t\t\t\t\t\t\taverageVector.z += POSITION[ i * 3 + 2 ] / INSTANCES_LENGTH;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find all the children and create associated instance meshes\n\t\t\t\t\t\tconst instances = [];\n\t\t\t\t\t\tconst meshes = [];\n\t\t\t\t\t\tmodel.scene.updateMatrixWorld();\n\n\t\t\t\t\t\tmodel.scene.traverse( child => {\n\n\t\t\t\t\t\t\tif ( child.isMesh ) {\n\n\t\t\t\t\t\t\t\tmeshes.push( child );\n\n\t\t\t\t\t\t\t\tconst { geometry, material } = child;\n\t\t\t\t\t\t\t\tconst instancedMesh = new InstancedMesh( geometry, material, INSTANCES_LENGTH );\n\t\t\t\t\t\t\t\tinstancedMesh.position.copy( averageVector );\n\n\t\t\t\t\t\t\t\tif ( RTC_CENTER ) {\n\n\t\t\t\t\t\t\t\t\tinstancedMesh.position.x += RTC_CENTER[ 0 ];\n\t\t\t\t\t\t\t\t\tinstancedMesh.position.y += RTC_CENTER[ 1 ];\n\t\t\t\t\t\t\t\t\tinstancedMesh.position.z += RTC_CENTER[ 2 ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tinstances.push( instancedMesh );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// generate positions for all instances\n\t\t\t\t\t\tfor ( let i = 0; i < INSTANCES_LENGTH; i ++ ) {\n\n\t\t\t\t\t\t\t// position\n\t\t\t\t\t\t\ttempPos.set(\n\t\t\t\t\t\t\t\tPOSITION[ i * 3 + 0 ] - averageVector.x,\n\t\t\t\t\t\t\t\tPOSITION[ i * 3 + 1 ] - averageVector.y,\n\t\t\t\t\t\t\t\tPOSITION[ i * 3 + 2 ] - averageVector.z,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rotation\n\t\t\t\t\t\t\ttempQuat.identity();\n\n\t\t\t\t\t\t\t// account for EAST_NORTH_UP per-instance below\n\n\t\t\t\t\t\t\tif ( NORMAL_UP ) {\n\n\t\t\t\t\t\t\t\ttempUp.set(\n\t\t\t\t\t\t\t\t\tNORMAL_UP[ i * 3 + 0 ],\n\t\t\t\t\t\t\t\t\tNORMAL_UP[ i * 3 + 1 ],\n\t\t\t\t\t\t\t\t\tNORMAL_UP[ i * 3 + 2 ],\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttempRight.set(\n\t\t\t\t\t\t\t\t\tNORMAL_RIGHT[ i * 3 + 0 ],\n\t\t\t\t\t\t\t\t\tNORMAL_RIGHT[ i * 3 + 1 ],\n\t\t\t\t\t\t\t\t\tNORMAL_RIGHT[ i * 3 + 2 ],\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttempFwd.crossVectors( tempRight, tempUp )\n\t\t\t\t\t\t\t\t\t.normalize();\n\n\t\t\t\t\t\t\t\ttempMat.makeBasis(\n\t\t\t\t\t\t\t\t\ttempRight,\n\t\t\t\t\t\t\t\t\ttempUp,\n\t\t\t\t\t\t\t\t\ttempFwd,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttempQuat.setFromRotationMatrix( tempMat );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// scale\n\t\t\t\t\t\t\ttempSca.set( 1, 1, 1 );\n\n\t\t\t\t\t\t\tif ( SCALE_NON_UNIFORM ) {\n\n\t\t\t\t\t\t\t\ttempSca.set(\n\t\t\t\t\t\t\t\t\tSCALE_NON_UNIFORM[ i * 3 + 0 ],\n\t\t\t\t\t\t\t\t\tSCALE_NON_UNIFORM[ i * 3 + 1 ],\n\t\t\t\t\t\t\t\t\tSCALE_NON_UNIFORM[ i * 3 + 2 ],\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( SCALE ) {\n\n\t\t\t\t\t\t\t\ttempSca.multiplyScalar( SCALE[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// multiple in the original meshes world transform\n\t\t\t\t\t\t\tfor ( let j = 0, l = instances.length; j < l; j ++ ) {\n\n\t\t\t\t\t\t\t\tconst instance = instances[ j ];\n\t\t\t\t\t\t\t\ttempLocalQuat.copy( tempQuat );\n\n\t\t\t\t\t\t\t\t// Handle east-north-up frame generation\n\t\t\t\t\t\t\t\tif ( EAST_NORTH_UP ) {\n\n\t\t\t\t\t\t\t\t\tinstance.updateMatrixWorld();\n\n\t\t\t\t\t\t\t\t\t// transform the instance position to global frame and get the rotation from the associated ENU frame.\n\t\t\t\t\t\t\t\t\ttempGlobePos.copy( tempPos ).applyMatrix4( instance.matrixWorld );\n\t\t\t\t\t\t\t\t\tthis.ellipsoid.getPositionToCartographic( tempGlobePos, tempLatLon );\n\t\t\t\t\t\t\t\t\tthis.ellipsoid.getEastNorthUpFrame( tempLatLon.lat, tempLatLon.lon, tempEnuFrame );\n\t\t\t\t\t\t\t\t\ttempLocalQuat.setFromRotationMatrix( tempEnuFrame );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttempMat.compose( tempPos, tempLocalQuat, tempSca ).multiply( adjustmentTransform );\n\n\t\t\t\t\t\t\t\tconst mesh = meshes[ j ];\n\t\t\t\t\t\t\t\ttempMat2.multiplyMatrices( tempMat, mesh.matrixWorld );\n\t\t\t\t\t\t\t\tinstance.setMatrixAt( i, tempMat2 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// replace all geometry with the instances\n\t\t\t\t\t\tmodel.scene.clear();\n\t\t\t\t\t\tmodel.scene.add( ...instances );\n\n\t\t\t\t\t\tmodel.batchTable = batchTable;\n\t\t\t\t\t\tmodel.featureTable = featureTable;\n\n\t\t\t\t\t\tmodel.scene.batchTable = batchTable;\n\t\t\t\t\t\tmodel.scene.featureTable = featureTable;\n\n\t\t\t\t\t\tresolve( model );\n\n\t\t\t\t\t}, reject );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t}\n\n}\n","// CMPT File Format\n// https://github.com/CesiumGS/3d-tiles/blob/master/specification/TileFormats/Composite/README.md\nimport { LoaderBase } from './LoaderBase.js';\nimport { readMagicBytes } from '../../utilities/readMagicBytes.js';\n\nexport class CMPTLoaderBase extends LoaderBase {\n\n\tparse( buffer ) {\n\n\t\tconst dataView = new DataView( buffer );\n\n\t\t// 16-byte header\n\n\t\t// 4 bytes\n\t\tconst magic = readMagicBytes( dataView );\n\n\t\tconsole.assert( magic === 'cmpt', 'CMPTLoader: The magic bytes equal \"cmpt\".' );\n\n\t\t// 4 bytes\n\t\tconst version = dataView.getUint32( 4, true );\n\n\t\tconsole.assert( version === 1, 'CMPTLoader: The version listed in the header is \"1\".' );\n\n\t\t// 4 bytes\n\t\tconst byteLength = dataView.getUint32( 8, true );\n\n\t\tconsole.assert( byteLength === buffer.byteLength, 'CMPTLoader: The contents buffer length listed in the header matches the file.' );\n\n\t\t// 4 bytes\n\t\tconst tilesLength = dataView.getUint32( 12, true );\n\n\t\tconst tiles = [];\n\t\tlet offset = 16;\n\t\tfor ( let i = 0; i < tilesLength; i ++ ) {\n\n\t\t\tconst tileView = new DataView( buffer, offset, 12 );\n\t\t\tconst tileMagic = readMagicBytes( tileView );\n\t\t\tconst tileVersion = tileView.getUint32( 4, true );\n\t\t\tconst byteLength = tileView.getUint32( 8, true );\n\n\t\t\tconst tileBuffer = new Uint8Array( buffer, offset, byteLength );\n\t\t\ttiles.push( {\n\n\t\t\t\ttype: tileMagic,\n\t\t\t\tbuffer: tileBuffer,\n\t\t\t\tversion: tileVersion,\n\n\t\t\t} );\n\t\t\toffset += byteLength;\n\n\t\t}\n\n\t\treturn {\n\t\t\tversion,\n\t\t\ttiles,\n\t\t};\n\n\t}\n\n}\n\n","import { Group, DefaultLoadingManager, Matrix4 } from 'three';\nimport { CMPTLoaderBase } from '../../base/loaders/CMPTLoaderBase.js';\nimport { B3DMLoader } from './B3DMLoader.js';\nimport { PNTSLoader } from './PNTSLoader.js';\nimport { I3DMLoader } from './I3DMLoader.js';\nimport { WGS84_ELLIPSOID } from '../math/GeoConstants.js';\n\nexport class CMPTLoader extends CMPTLoaderBase {\n\n\tconstructor( manager = DefaultLoadingManager ) {\n\n\t\tsuper();\n\t\tthis.manager = manager;\n\t\tthis.adjustmentTransform = new Matrix4();\n\t\tthis.ellipsoid = WGS84_ELLIPSOID.clone();\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst result = super.parse( buffer );\n\t\tconst { manager, ellipsoid, adjustmentTransform } = this;\n\t\tconst promises = [];\n\n\t\tfor ( const i in result.tiles ) {\n\n\t\t\tconst { type, buffer } = result.tiles[ i ];\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'b3dm': {\n\n\t\t\t\t\tconst slicedBuffer = buffer.slice();\n\t\t\t\t\tconst loader = new B3DMLoader( manager );\n\t\t\t\t\tloader.workingPath = this.workingPath;\n\t\t\t\t\tloader.fetchOptions = this.fetchOptions;\n\t\t\t\t\tloader.adjustmentTransform.copy( adjustmentTransform );\n\n\t\t\t\t\tconst promise = loader.parse( slicedBuffer.buffer );\n\t\t\t\t\tpromises.push( promise );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tcase 'pnts': {\n\n\t\t\t\t\tconst slicedBuffer = buffer.slice();\n\t\t\t\t\tconst loader = new PNTSLoader( manager );\n\t\t\t\t\tloader.workingPath = this.workingPath;\n\t\t\t\t\tloader.fetchOptions = this.fetchOptions;\n\n\t\t\t\t\tconst promise = loader.parse( slicedBuffer.buffer );\n\t\t\t\t\tpromises.push( promise );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tcase 'i3dm': {\n\n\t\t\t\t\tconst slicedBuffer = buffer.slice();\n\t\t\t\t\tconst loader = new I3DMLoader( manager );\n\t\t\t\t\tloader.workingPath = this.workingPath;\n\t\t\t\t\tloader.fetchOptions = this.fetchOptions;\n\n\t\t\t\t\tloader.ellipsoid.copy( ellipsoid );\n\t\t\t\t\tloader.adjustmentTransform.copy( adjustmentTransform );\n\n\t\t\t\t\tconst promise = loader.parse( slicedBuffer.buffer );\n\t\t\t\t\tpromises.push( promise );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( promises ).then( results => {\n\n\t\t\tconst group = new Group();\n\t\t\tresults.forEach( result => {\n\n\t\t\t\tgroup.add( result.scene );\n\n\t\t\t} );\n\n\t\t\treturn {\n\n\t\t\t\ttiles: results,\n\t\t\t\tscene: group,\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n}\n","export class GLTFCesiumRTCExtension {\n\n\tconstructor() {\n\n\t\tthis.name = 'CESIUM_RTC';\n\n\t}\n\n\tafterRoot( res ) {\n\n\t\tif ( res.parser.json.extensions && res.parser.json.extensions.CESIUM_RTC ) {\n\n\t\t\tconst { center } = res.parser.json.extensions.CESIUM_RTC;\n\n\t\t\tif ( center ) {\n\n\t\t\t\tres.scene.position.x += center[ 0 ];\n\t\t\t\tres.scene.position.y += center[ 1 ];\n\t\t\t\tres.scene.position.z += center[ 2 ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n","import { MathUtils, Matrix4 } from 'three';\nimport { Vector3 } from 'three';\nimport { Ellipsoid } from './Ellipsoid.js';\n\nconst PI = Math.PI;\nconst HALF_PI = PI / 2;\n\nconst _orthoX = new Vector3();\nconst _orthoY = new Vector3();\nconst _orthoZ = new Vector3();\nconst _invMatrix = new Matrix4();\n\nlet _poolIndex = 0;\nconst _pointsPool = [];\nfunction getVector( usePool = false ) {\n\n\tif ( ! usePool ) {\n\n\t\treturn new Vector3();\n\n\t}\n\n\tif ( ! _pointsPool[ _poolIndex ] ) {\n\n\t\t_pointsPool[ _poolIndex ] = new Vector3();\n\n\t}\n\n\t_poolIndex ++;\n\treturn _pointsPool[ _poolIndex - 1 ];\n\n}\n\nfunction resetPool() {\n\n\t_poolIndex = 0;\n\n}\n\nexport class EllipsoidRegion extends Ellipsoid {\n\n\tconstructor(\n\t\tx, y, z,\n\t\tlatStart = - HALF_PI, latEnd = HALF_PI,\n\t\tlonStart = 0, lonEnd = 2 * PI,\n\t\theightStart = 0, heightEnd = 0\n\t) {\n\n\t\tsuper( x, y, z );\n\t\tthis.latStart = latStart;\n\t\tthis.latEnd = latEnd;\n\t\tthis.lonStart = lonStart;\n\t\tthis.lonEnd = lonEnd;\n\t\tthis.heightStart = heightStart;\n\t\tthis.heightEnd = heightEnd;\n\n\t}\n\n\t_getPoints( usePool = false ) {\n\n\t\tconst {\n\t\t\tlatStart, latEnd,\n\t\t\tlonStart, lonEnd,\n\t\t\theightStart, heightEnd,\n\t\t} = this;\n\n\t\tconst midLat = MathUtils.mapLinear( 0.5, 0, 1, latStart, latEnd );\n\t\tconst midLon = MathUtils.mapLinear( 0.5, 0, 1, lonStart, lonEnd );\n\n\t\tconst lonOffset = Math.floor( lonStart / HALF_PI ) * HALF_PI;\n\t\tconst latlon = [\n\t\t\t[ - PI / 2, 0 ],\n\t\t\t[ PI / 2, 0 ],\n\t\t\t[ 0, lonOffset ],\n\t\t\t[ 0, lonOffset + PI / 2 ],\n\t\t\t[ 0, lonOffset + PI ],\n\t\t\t[ 0, lonOffset + 3 * PI / 2 ],\n\n\t\t\t[ latStart, lonEnd ],\n\t\t\t[ latEnd, lonEnd ],\n\t\t\t[ latStart, lonStart ],\n\t\t\t[ latEnd, lonStart ],\n\n\t\t\t[ 0, lonStart ],\n\t\t\t[ 0, lonEnd ],\n\n\t\t\t[ midLat, midLon ],\n\t\t\t[ latStart, midLon ],\n\t\t\t[ latEnd, midLon ],\n\t\t\t[ midLat, lonStart ],\n\t\t\t[ midLat, lonEnd ],\n\n\t\t];\n\n\t\tconst target = [];\n\t\tconst total = latlon.length;\n\n\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\tconst height = MathUtils.mapLinear( z, 0, 1, heightStart, heightEnd );\n\t\t\tfor ( let i = 0, l = total; i < l; i ++ ) {\n\n\t\t\t\tconst [ lat, lon ] = latlon[ i ];\n\t\t\t\tif ( lat >= latStart && lat <= latEnd && lon >= lonStart && lon <= lonEnd ) {\n\n\t\t\t\t\tconst v = getVector( usePool );\n\t\t\t\t\ttarget.push( v );\n\t\t\t\t\tthis.getCartographicToPosition( lat, lon, height, v );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( box, matrix ) {\n\n\t\tresetPool();\n\n\t\tconst {\n\t\t\tlatStart, latEnd,\n\t\t\tlonStart, lonEnd,\n\t\t} = this;\n\n\t\tconst latRange = latEnd - latStart;\n\t\tif ( latRange < PI / 2 ) {\n\n\t\t\t// get the midway point for the region\n\t\t\tconst midLat = MathUtils.mapLinear( 0.5, 0, 1, latStart, latEnd );\n\t\t\tconst midLon = MathUtils.mapLinear( 0.5, 0, 1, lonStart, lonEnd );\n\n\t\t\t// get the frame matrix for the box - works well for smaller regions\n\t\t\tthis.getCartographicToNormal( midLat, midLon, _orthoZ );\n\t\t\t_orthoY.set( 0, 0, 1 );\n\t\t\t_orthoX.crossVectors( _orthoY, _orthoZ );\n\t\t\t_orthoY.crossVectors( _orthoX, _orthoZ );\n\t\t\tmatrix.makeBasis( _orthoX, _orthoY, _orthoZ );\n\n\t\t} else {\n\n\t\t\t_orthoX.set( 1, 0, 0 );\n\t\t\t_orthoY.set( 0, 1, 0 );\n\t\t\t_orthoZ.set( 0, 0, 1 );\n\t\t\tmatrix.makeBasis( _orthoX, _orthoY, _orthoZ );\n\n\t\t}\n\n\t\t// transform the points into the local frame\n\t\t_invMatrix.copy( matrix ).invert();\n\n\t\tconst points = this._getPoints( true );\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tpoints[ i ].applyMatrix4( _invMatrix );\n\n\t\t}\n\n\t\t// init the box\n\t\tbox.makeEmpty();\n\t\tbox.setFromPoints( points );\n\n\t}\n\n\tgetBoundingSphere( sphere, center ) {\n\n\t\tresetPool();\n\n\t\tconst points = this._getPoints( true );\n\t\tsphere.makeEmpty();\n\t\tsphere.setFromPoints( points, center );\n\n\t}\n\n}\n","import { GLTFCesiumRTCExtension as GLTFCesiumRTCExtensionImpl } from '../../../plugins/index.js';\n\nexport class GLTFCesiumRTCExtension extends GLTFCesiumRTCExtensionImpl {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\t\tconsole.warn( 'GLTFCesiumRTCExtension: Plugins should now be imported from \"3d-tiles-renderer/plugins\" path.' );\n\n\t}\n\n}\n","import { DefaultLoadingManager } from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\nimport { LoaderBase } from '../../base/loaders/LoaderBase.js';\nimport { GLTFCesiumRTCExtension } from './gltf/GLTFCesiumRTCExtension.js';\n\nexport class GLTFExtensionLoader extends LoaderBase {\n\n\tconstructor( manager = DefaultLoadingManager ) {\n\n\t\tsuper();\n\t\tthis.manager = manager;\n\n\t}\n\n\tparse( buffer ) {\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tconst manager = this.manager;\n\t\t\tconst fetchOptions = this.fetchOptions;\n\t\t\tlet loader = manager.getHandler( 'path.gltf' ) || manager.getHandler( 'path.glb' );\n\n\t\t\tif ( ! loader ) {\n\n\t\t\t\tloader = new GLTFLoader( manager );\n\n\t\t\t\tloader.register( () => new GLTFCesiumRTCExtension() );\n\n\t\t\t}\n\n\t\t\tif ( fetchOptions.credentials === 'include' && fetchOptions.mode === 'cors' ) {\n\n\t\t\t\tloader.setCrossOrigin( 'use-credentials' );\n\n\t\t\t}\n\n\t\t\tif ( 'credentials' in fetchOptions ) {\n\n\t\t\t\tloader.setWithCredentials( fetchOptions.credentials === 'include' );\n\n\t\t\t}\n\n\t\t\tif ( fetchOptions.headers ) {\n\n\t\t\t\tloader.setRequestHeader( fetchOptions.headers );\n\n\t\t\t}\n\n\t\t\t// assume any pre-registered loader has paths configured as the user desires, but if we're making\n\t\t\t// a new loader, use the working path during parse to support relative uris on other hosts\n\t\t\tlet resourcePath = loader.resourcePath || loader.path || this.workingPath;\n\t\t\tif ( ! /[\\\\/]$/.test( resourcePath ) && resourcePath.length ) {\n\n\t\t\t\tresourcePath += '/';\n\n\t\t\t}\n\n\t\t\tloader.parse( buffer, resourcePath, model => {\n\n\t\t\t\tresolve( model );\n\n\t\t\t}, reject );\n\n\t\t} );\n\n\t}\n\n}\n","import { Group, Matrix4 } from 'three';\n\n// Specialization of \"Group\" that only updates world matrices of children if\n// the transform has changed since the last update and ignores the \"force\"\n// parameter under the assumption that the children tiles will not move.\nconst tempMat = new Matrix4();\nexport class TilesGroup extends Group {\n\n\tconstructor( tilesRenderer ) {\n\n\t\tsuper();\n\t\tthis.name = 'TilesRenderer.TilesGroup';\n\t\tthis.tilesRenderer = tilesRenderer;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\t// returning \"false\" ends raycast traversal\n\t\tif ( this.tilesRenderer.optimizeRaycast ) {\n\n\t\t\tthis.tilesRenderer.raycast( raycaster, intersects );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) {\n\n\t\t\tthis.updateMatrix();\n\n\t\t}\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\ttempMat.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\ttempMat.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\t// check if the matrix changed relative to what it was.\n\t\t\tconst elA = tempMat.elements;\n\t\t\tconst elB = this.matrixWorld.elements;\n\t\t\tlet isDifferent = false;\n\t\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\t\tconst itemA = elA[ i ];\n\t\t\t\tconst itemB = elB[ i ];\n\t\t\t\tconst diff = Math.abs( itemA - itemB );\n\n\t\t\t\tif ( diff > Number.EPSILON ) {\n\n\t\t\t\t\tisDifferent = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( isDifferent ) {\n\n\t\t\t\tthis.matrixWorld.copy( tempMat );\n\n\t\t\t\t// update children\n\t\t\t\t// the children will not have to change unless the parent group has updated\n\t\t\t\tconst children = this.children;\n\t\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\t\tchildren[ i ].updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n","import { Matrix4, Ray, Vector3, REVISION } from 'three';\n\n// In three.js r165 and higher raycast traversal can be ended early\nconst REVISION_LESS_165 = parseInt( REVISION ) < 165;\nconst _mat = new Matrix4();\nconst _localRay = new Ray();\nconst _vec = new Vector3();\nconst _hitArray = [];\n\nfunction distanceSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectTileScene( tile, raycaster, renderer, intersects ) {\n\n\tconst { scene } = tile.cached;\n\tif ( REVISION_LESS_165 ) {\n\n\t\t// Don't intersect the box3 helpers because those are used for debugging\n\t\tscene.traverse( c => {\n\n\t\t\t// We set the default raycast function to empty so three.js doesn't automatically cast against it\n\t\t\tObject.getPrototypeOf( c ).raycast.call( c, raycaster, intersects );\n\n\t\t} );\n\n\t} else {\n\n\t\tconst didRaycast = renderer.invokeOnePlugin( plugin => plugin.raycastTile && plugin.raycastTile( tile, scene, raycaster, intersects ) );\n\t\tif ( ! didRaycast ) {\n\n\t\t\traycaster.intersectObject( scene, true, intersects );\n\n\t\t}\n\n\t}\n\n}\n\nfunction intersectTileSceneFirstHist( tile, raycaster, renderer ) {\n\n\tintersectTileScene( tile, raycaster, renderer, _hitArray );\n\t_hitArray.sort( distanceSort );\n\n\tconst hit = _hitArray[ 0 ] || null;\n\t_hitArray.length = 0;\n\treturn hit;\n\n}\n\n// Returns the closest hit when traversing the tree\nexport function raycastTraverseFirstHit( renderer, tile, raycaster, localRay = null ) {\n\n\tconst { group, activeTiles } = renderer;\n\trenderer.ensureChildrenArePreprocessed( tile );\n\n\t// get the ray in the local group frame\n\tif ( localRay === null ) {\n\n\t\tlocalRay = _localRay;\n\t\t_mat.copy( group.matrixWorld ).invert();\n\t\tlocalRay.copy( raycaster.ray ).applyMatrix4( _mat );\n\n\t}\n\n\t// get a set of intersections so we intersect the nearest one first\n\tconst array = [];\n\tconst children = tile.children;\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\tconst child = children[ i ];\n\t\tif ( ! child.__used ) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\t// track the tile and hit distance for sorting\n\t\tconst boundingVolume = child.cached.boundingVolume;\n\t\tif ( boundingVolume.intersectRay( localRay, _vec ) !== null ) {\n\n\t\t\t_vec.applyMatrix4( group.matrixWorld );\n\t\t\tarray.push( {\n\t\t\t\tdistance: _vec.distanceToSquared( raycaster.ray.origin ),\n\t\t\t\ttile: child,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// sort them by ascending distance\n\tarray.sort( distanceSort );\n\n\t// If the root is active make sure we've checked it\n\tlet bestHit = null;\n\tlet bestHitDistSq = Infinity;\n\tif ( activeTiles.has( tile ) ) {\n\n\t\tconst hit = intersectTileSceneFirstHist( tile, raycaster, renderer );\n\t\tif ( hit ) {\n\n\t\t\tbestHit = hit;\n\t\t\tbestHitDistSq = hit.distance * hit.distance;\n\n\t\t}\n\n\t}\n\n\t// traverse until we find the best hit and early out if a tile bounds\n\t// couldn't possible include a best hit\n\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\tconst data = array[ i ];\n\t\tconst boundingVolumeDistSq = data.distance;\n\t\tconst tile = data.tile;\n\t\tif ( boundingVolumeDistSq > bestHitDistSq ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t\tconst hit = raycastTraverseFirstHit( renderer, tile, raycaster, localRay );\n\t\tif ( hit ) {\n\n\t\t\tconst hitDistSq = hit.distance * hit.distance;\n\t\t\tif ( hitDistSq < bestHitDistSq ) {\n\n\t\t\t\tbestHit = hit;\n\t\t\t\tbestHitDistSq = hitDistSq;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn bestHit;\n\n}\n\nexport function raycastTraverse( renderer, tile, raycaster, intersects, localRay = null ) {\n\n\tconst { group, activeTiles } = renderer;\n\tconst { boundingVolume } = tile.cached;\n\trenderer.ensureChildrenArePreprocessed( tile );\n\n\t// get the ray in the local group frame\n\tif ( localRay === null ) {\n\n\t\tlocalRay = _localRay;\n\t\t_mat.copy( group.matrixWorld ).invert();\n\t\tlocalRay.copy( raycaster.ray ).applyMatrix4( _mat );\n\n\t}\n\n\tif ( ! tile.__used || ! boundingVolume.intersectsRay( localRay ) ) {\n\n\t\treturn;\n\n\t}\n\n\tif ( activeTiles.has( tile ) ) {\n\n\t\tintersectTileScene( tile, raycaster, renderer, intersects );\n\n\t}\n\n\tconst children = tile.children;\n\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\traycastTraverse( renderer, children[ i ], raycaster, intersects, localRay );\n\n\t}\n\n}\n","import { Matrix4, Box3, Vector3, Plane, Ray } from 'three';\n\nconst _worldMin = new Vector3();\nconst _worldMax = new Vector3();\nconst _norm = new Vector3();\nconst _ray = new Ray();\n\nexport class OBB {\n\n\tconstructor( box = new Box3(), transform = new Matrix4() ) {\n\n\t\tthis.box = box.clone();\n\t\tthis.transform = transform.clone();\n\t\tthis.inverseTransform = new Matrix4();\n\t\tthis.points = new Array( 8 ).fill().map( () => new Vector3() );\n\t\tthis.planes = new Array( 6 ).fill().map( () => new Plane() );\n\n\t}\n\n\t/**\n\t * Clamps the given point within the bounds of this OBB\n\t * @param {Vector3} point\n\t * @param {Vector3} result\n\t * @returns {Vector3}\n\t */\n\tclampPoint( point, result ) {\n\n\t\treturn result.copy( point )\n\t\t\t.applyMatrix4( this.inverseTransform )\n\t\t\t.clamp( this.box.min, this.box.max )\n\t\t\t.applyMatrix4( this.transform );\n\n\t}\n\n\t/**\n\t * Returns the distance from any edge of this OBB to the specified point.\n\t * If the point lies inside of this box, the distance will be 0.\n\t * @param {Vector3} point\n\t * @returns {number}\n\t */\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _norm ).distanceTo( point );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\t_norm.copy( point ).applyMatrix4( this.inverseTransform );\n\t\treturn this.box.containsPoint( _norm );\n\n\t}\n\n\t// returns boolean indicating whether the ray has intersected the obb\n\tintersectsRay( ray ) {\n\n\t\t_ray.copy( ray ).applyMatrix4( this.inverseTransform );\n\t\treturn _ray.intersectsBox( this.box );\n\n\t}\n\n\t// Sets \"target\" equal to the intersection point.\n\t// Returns \"null\" if no intersection found.\n\tintersectRay( ray, target ) {\n\n\t\t_ray.copy( ray ).applyMatrix4( this.inverseTransform );\n\t\tif ( _ray.intersectBox( this.box, target ) ) {\n\n\t\t\ttarget.applyMatrix4( this.transform );\n\t\t\treturn target;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst { points, inverseTransform, transform, box } = this;\n\t\tinverseTransform.copy( transform ).invert();\n\n\t\tconst { min, max } = box;\n\t\tlet index = 0;\n\t\tfor ( let x = - 1; x <= 1; x += 2 ) {\n\n\t\t\tfor ( let y = - 1; y <= 1; y += 2 ) {\n\n\t\t\t\tfor ( let z = - 1; z <= 1; z += 2 ) {\n\n\t\t\t\t\tpoints[ index ].set(\n\t\t\t\t\t\tx < 0 ? min.x : max.x,\n\t\t\t\t\t\ty < 0 ? min.y : max.y,\n\t\t\t\t\t\tz < 0 ? min.z : max.z,\n\t\t\t\t\t).applyMatrix4( transform );\n\t\t\t\t\tindex ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.updatePlanes();\n\n\t}\n\n\tupdatePlanes() {\n\n\t\t_worldMin.copy( this.box.min ).applyMatrix4( this.transform );\n\t\t_worldMax.copy( this.box.max ).applyMatrix4( this.transform );\n\n\t\t_norm.set( 0, 0, 1 ).transformDirection( this.transform );\n\t\tthis.planes[ 0 ].setFromNormalAndCoplanarPoint( _norm, _worldMin );\n\t\tthis.planes[ 1 ].setFromNormalAndCoplanarPoint( _norm, _worldMax ).negate();\n\n\t\t_norm.set( 0, 1, 0 ).transformDirection( this.transform );\n\t\tthis.planes[ 2 ].setFromNormalAndCoplanarPoint( _norm, _worldMin );\n\t\tthis.planes[ 3 ].setFromNormalAndCoplanarPoint( _norm, _worldMax ).negate();\n\n\t\t_norm.set( 1, 0, 0 ).transformDirection( this.transform );\n\t\tthis.planes[ 4 ].setFromNormalAndCoplanarPoint( _norm, _worldMin );\n\t\tthis.planes[ 5 ].setFromNormalAndCoplanarPoint( _norm, _worldMax ).negate();\n\n\t}\n\n\t// based on three.js' Box3 \"intersects frustum\" function\n\tintersectsFrustum( frustum ) {\n\n\t\tconst { points } = this;\n\t\tconst { planes } = frustum;\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\t\t\tlet maxDistance = - Infinity;\n\t\t\tfor ( let j = 0; j < 8; j ++ ) {\n\n\t\t\t\tconst v = points[ j ];\n\t\t\t\tconst dist = plane.distanceToPoint( v );\n\t\t\t\tmaxDistance = maxDistance < dist ? dist : maxDistance;\n\n\t\t\t}\n\n\t\t\tif ( maxDistance < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// do the opposite check using the obb planes to avoid false positives\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = this.planes[ i ];\n\t\t\tlet maxDistance = - Infinity;\n\t\t\tfor ( let j = 0; j < 8; j ++ ) {\n\n\t\t\t\tconst v = frustum.points[ j ];\n\t\t\t\tconst dist = plane.distanceToPoint( v );\n\t\t\t\tmaxDistance = maxDistance < dist ? dist : maxDistance;\n\n\t\t\t}\n\n\t\t\tif ( maxDistance < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n}\n","import { Vector3, Sphere } from 'three';\nimport { OBB } from './OBB.js';\nimport { EllipsoidRegion } from './EllipsoidRegion.js';\n\nconst _vecX = new Vector3();\nconst _vecY = new Vector3();\nconst _vecZ = new Vector3();\nconst _sphereVec = new Vector3();\nconst _obbVec = new Vector3();\n\n// TODO: check region more precisely in all functions\nexport class TileBoundingVolume {\n\n\tconstructor() {\n\n\t\tthis.sphere = null;\n\t\tthis.obb = null;\n\t\tthis.region = null;\n\n\t\tthis.regionObb = null;\n\n\t}\n\n\tintersectsRay( ray ) {\n\n\t\tconst sphere = this.sphere;\n\t\tconst obb = this.obb || this.regionObb;\n\n\t\t// Early out if we don't hit this tile sphere\n\t\tif ( sphere && ! ray.intersectsSphere( sphere ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// Early out if we don't this this tile box\n\t\tif ( obb && ! obb.intersectsRay( ray ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectRay( ray, target = null ) {\n\n\t\tconst sphere = this.sphere;\n\t\tconst obb = this.obb || this.regionObb;\n\n\t\tlet sphereDistSq = - Infinity;\n\t\tlet obbDistSq = - Infinity;\n\n\t\tif ( sphere ) {\n\n\t\t\tif ( ray.intersectSphere( sphere, _sphereVec ) ) {\n\n\t\t\t\tsphereDistSq = sphere.containsPoint( ray.origin ) ? 0 : ray.origin.distanceToSquared( _sphereVec );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( obb ) {\n\n\t\t\tif ( obb.intersectRay( ray, _obbVec ) ) {\n\n\t\t\t\tobbDistSq = obb.containsPoint( ray.origin ) ? 0 : ray.origin.distanceToSquared( _obbVec );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// if we didn't hit anything then exit\n\t\tconst furthestDist = Math.max( sphereDistSq, obbDistSq );\n\t\tif ( furthestDist === - Infinity ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// get the furthest hit point if needed\n\t\tray.at( Math.sqrt( furthestDist ), target );\n\t\treturn target;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst sphere = this.sphere;\n\t\tconst obb = this.obb || this.regionObb;\n\n\t\tlet sphereDistance = - Infinity;\n\t\tlet obbDistance = - Infinity;\n\n\t\tif ( sphere ) {\n\n\t\t\t// Sphere#distanceToPoint is negative inside the sphere, whereas Box3#distanceToPoint is\n\t\t\t// zero inside the box. Clipping the distance to a minimum of zero ensures that both\n\t\t\t// types of bounding volume behave the same way.\n\t\t\tsphereDistance = Math.max( sphere.distanceToPoint( point ), 0 );\n\n\t\t}\n\n\t\tif ( obb ) {\n\n\t\t\tobbDistance = obb.distanceToPoint( point );\n\n\t\t}\n\n\t\t// return the further distance of the two volumes\n\t\treturn sphereDistance > obbDistance ? sphereDistance : obbDistance;\n\n\t}\n\n\tintersectsFrustum( frustum ) {\n\n\t\tconst obb = this.obb || this.regionObb;\n\t\tconst sphere = this.sphere;\n\t\tif ( sphere && ! frustum.intersectsSphere( sphere ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tif ( obb && ! obb.intersectsFrustum( frustum ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// if we don't have a sphere or obb then just say we did intersect\n\t\treturn Boolean( sphere || obb );\n\n\t}\n\n\tgetOBB( targetBox, targetMatrix ) {\n\n\t\tconst obb = this.obb || this.regionObb;\n\t\tif ( obb ) {\n\n\t\t\ttargetBox.copy( obb.box );\n\t\t\ttargetMatrix.copy( obb.transform );\n\n\t\t} else {\n\n\t\t\tthis.getAABB( targetBox );\n\t\t\ttargetMatrix.identity();\n\n\t\t}\n\n\t}\n\n\tgetAABB( target ) {\n\n\t\tif ( this.sphere ) {\n\n\t\t\tthis.sphere.getBoundingBox( target );\n\n\t\t} else {\n\n\t\t\tconst obb = this.obb || this.regionObb;\n\t\t\ttarget.copy( obb.box ).applyMatrix4( obb.transform );\n\n\t\t}\n\n\t}\n\n\tgetSphere( target ) {\n\n\t\tif ( this.sphere ) {\n\n\t\t\ttarget.copy( this.sphere );\n\n\t\t} else if ( this.region ) {\n\n\t\t\tthis.region.getBoundingSphere( target );\n\n\t\t} else {\n\n\t\t\tconst obb = this.obb || this.regionObb;\n\t\t\tobb.box.getBoundingSphere( target );\n\t\t\ttarget.applyMatrix4( obb.transform );\n\n\t\t}\n\n\t}\n\n\tsetObbData( data, transform ) {\n\n\t\tconst obb = new OBB();\n\n\t\t// get the extents of the bounds in each axis\n\t\t_vecX.set( data[ 3 ], data[ 4 ], data[ 5 ] );\n\t\t_vecY.set( data[ 6 ], data[ 7 ], data[ 8 ] );\n\t\t_vecZ.set( data[ 9 ], data[ 10 ], data[ 11 ] );\n\n\t\tconst scaleX = _vecX.length();\n\t\tconst scaleY = _vecY.length();\n\t\tconst scaleZ = _vecZ.length();\n\n\t\t_vecX.normalize();\n\t\t_vecY.normalize();\n\t\t_vecZ.normalize();\n\n\t\t// handle the case where the box has a dimension of 0 in one axis\n\t\tif ( scaleX === 0 ) {\n\n\t\t\t_vecX.crossVectors( _vecY, _vecZ );\n\n\t\t}\n\n\t\tif ( scaleY === 0 ) {\n\n\t\t\t_vecY.crossVectors( _vecX, _vecZ );\n\n\t\t}\n\n\t\tif ( scaleZ === 0 ) {\n\n\t\t\t_vecZ.crossVectors( _vecX, _vecY );\n\n\t\t}\n\n\t\t// create the oriented frame that the box exists in\n\t\tobb.transform\n\t\t\t.set(\n\t\t\t\t_vecX.x, _vecY.x, _vecZ.x, data[ 0 ],\n\t\t\t\t_vecX.y, _vecY.y, _vecZ.y, data[ 1 ],\n\t\t\t\t_vecX.z, _vecY.z, _vecZ.z, data[ 2 ],\n\t\t\t\t0, 0, 0, 1\n\t\t\t)\n\t\t\t.premultiply( transform );\n\n\t\t// scale the box by the extents\n\t\tobb.box.min.set( - scaleX, - scaleY, - scaleZ );\n\t\tobb.box.max.set( scaleX, scaleY, scaleZ );\n\t\tobb.update();\n\t\tthis.obb = obb;\n\n\t}\n\n\tsetSphereData( x, y, z, radius, transform ) {\n\n\t\tconst sphere = new Sphere();\n\t\tsphere.center.set( x, y, z );\n\t\tsphere.radius = radius;\n\t\tsphere.applyMatrix4( transform );\n\t\tthis.sphere = sphere;\n\n\t}\n\n\tsetRegionData( ellipsoid, west, south, east, north, minHeight, maxHeight ) {\n\n\t\tconst region = new EllipsoidRegion(\n\t\t\t...ellipsoid.radius,\n\t\t\tsouth, north,\n\t\t\twest, east,\n\t\t\tminHeight, maxHeight,\n\t\t);\n\n\t\tconst obb = new OBB();\n\t\tregion.getBoundingBox( obb.box, obb.transform );\n\t\tobb.update();\n\n\t\tthis.region = region;\n\t\tthis.regionObb = obb;\n\n\t}\n\n}\n","import { Frustum, Matrix3, Vector3 } from 'three';\n\nconst _mat3 = new Matrix3();\n\n// Solve a system of equations to find the point where the three planes intersect\nfunction findIntersectionPoint( plane1, plane2, plane3, target ) {\n\n\t// Create the matrix A using the normals of the planes as rows\n\tconst A = _mat3.set(\n\t\tplane1.normal.x, plane1.normal.y, plane1.normal.z,\n\t\tplane2.normal.x, plane2.normal.y, plane2.normal.z,\n\t\tplane3.normal.x, plane3.normal.y, plane3.normal.z\n\t);\n\n\t// Create the vector B using the constants of the planes\n\ttarget.set( - plane1.constant, - plane2.constant, - plane3.constant );\n\n\t// Solve for X by applying the inverse matrix to B\n\ttarget.applyMatrix3( A.invert() );\n\n\treturn target;\n\n}\n\nclass ExtendedFrustum extends Frustum {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis.points = Array( 8 ).fill().map( () => new Vector3() );\n\n\t}\n\n\tsetFromProjectionMatrix( m, coordinateSystem ) {\n\n\t\tsuper.setFromProjectionMatrix( m, coordinateSystem );\n\t\tthis.calculateFrustumPoints();\n\n\t}\n\n\tcalculateFrustumPoints() {\n\n\t\tconst { planes, points } = this;\n\t\tconst planeIntersections = [\n\t\t\t[ planes[ 0 ], planes[ 3 ], planes[ 4 ] ], // Near top left\n\t\t\t[ planes[ 1 ], planes[ 3 ], planes[ 4 ] ], // Near top right\n\t\t\t[ planes[ 0 ], planes[ 2 ], planes[ 4 ] ], // Near bottom left\n\t\t\t[ planes[ 1 ], planes[ 2 ], planes[ 4 ] ], // Near bottom right\n\t\t\t[ planes[ 0 ], planes[ 3 ], planes[ 5 ] ], // Far top left\n\t\t\t[ planes[ 1 ], planes[ 3 ], planes[ 5 ] ], // Far top right\n\t\t\t[ planes[ 0 ], planes[ 2 ], planes[ 5 ] ], // Far bottom left\n\t\t\t[ planes[ 1 ], planes[ 2 ], planes[ 5 ] ], // Far bottom right\n\t\t];\n\n\t\tplaneIntersections.forEach( ( planes, index ) => {\n\n\t\t\tfindIntersectionPoint( planes[ 0 ], planes[ 1 ], planes[ 2 ], points[ index ] );\n\n\t\t} );\n\n\t}\n\n}\n\nexport { ExtendedFrustum };\n","import { estimateBytesUsed as _estimateBytesUsed } from 'three/examples/jsm/utils/BufferGeometryUtils.js';\nimport * as THREE from 'three';\n\n// Returns the estimated number of bytes used by the object\nexport function estimateBytesUsed( object ) {\n\n\t// NOTE: This is for backwards compatibility and should be removed later\n\tconst { TextureUtils } = THREE;\n\tif ( ! TextureUtils ) {\n\n\t\treturn 0;\n\n\t}\n\n\tconst dedupeSet = new Set();\n\n\tlet totalBytes = 0;\n\tobject.traverse( c => {\n\n\t\t// get geometry bytes\n\t\tif ( c.geometry && ! dedupeSet.has( c.geometry ) ) {\n\n\t\t\ttotalBytes += _estimateBytesUsed( c.geometry );\n\t\t\tdedupeSet.add( c.geometry );\n\n\t\t}\n\n\t\t// get material bytes\n\t\tif ( c.material ) {\n\n\t\t\tconst material = c.material;\n\t\t\tfor ( const key in material ) {\n\n\t\t\t\tconst value = material[ key ];\n\t\t\t\tif ( value && value.isTexture && ! dedupeSet.has( value ) ) {\n\n\t\t\t\t\tconst { format, type, image } = value;\n\t\t\t\t\tconst { width, height } = image;\n\t\t\t\t\tconst bytes = TextureUtils.getByteLength( width, height, format, type );\n\t\t\t\t\ttotalBytes += value.generateMipmaps ? bytes * 4 / 3 : bytes;\n\n\t\t\t\t\tdedupeSet.add( value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\treturn totalBytes;\n\n}\n","import { TilesRendererBase } from '../base/TilesRendererBase.js';\nimport { B3DMLoader } from './loaders/B3DMLoader.js';\nimport { PNTSLoader } from './loaders/PNTSLoader.js';\nimport { I3DMLoader } from './loaders/I3DMLoader.js';\nimport { CMPTLoader } from './loaders/CMPTLoader.js';\nimport { GLTFExtensionLoader } from './loaders/GLTFExtensionLoader.js';\nimport { TilesGroup } from './TilesGroup.js';\nimport {\n\tMatrix4,\n\tVector3,\n\tVector2,\n\tEuler,\n\tLoadingManager,\n\tEventDispatcher,\n\tREVISION,\n} from 'three';\nimport { raycastTraverse, raycastTraverseFirstHit } from './raycastTraverse.js';\nimport { readMagicBytes } from '../utilities/readMagicBytes.js';\nimport { TileBoundingVolume } from './math/TileBoundingVolume.js';\nimport { ExtendedFrustum } from './math/ExtendedFrustum.js';\nimport { estimateBytesUsed } from './utilities.js';\nimport { WGS84_ELLIPSOID } from './math/GeoConstants.js';\n\nconst _mat = new Matrix4();\nconst _euler = new Euler();\n\n// In three.js r165 and higher raycast traversal can be ended early\nconst REVISION_LESS_165 = parseInt( REVISION ) < 165;\nconst INITIAL_FRUSTUM_CULLED = Symbol( 'INITIAL_FRUSTUM_CULLED' );\nconst tempMat = new Matrix4();\nconst tempMat2 = new Matrix4();\nconst tempVector = new Vector3();\nconst tempVector2 = new Vector2();\n\nconst X_AXIS = new Vector3( 1, 0, 0 );\nconst Y_AXIS = new Vector3( 0, 1, 0 );\n\nfunction updateFrustumCulled( object, toInitialValue ) {\n\n\tobject.traverse( c => {\n\n\t\tc.frustumCulled = c[ INITIAL_FRUSTUM_CULLED ] && toInitialValue;\n\n\t} );\n\n}\n\nexport class TilesRenderer extends TilesRendererBase {\n\n\tget autoDisableRendererCulling() {\n\n\t\treturn this._autoDisableRendererCulling;\n\n\t}\n\n\tset autoDisableRendererCulling( value ) {\n\n\t\tif ( this._autoDisableRendererCulling !== value ) {\n\n\t\t\tsuper._autoDisableRendererCulling = value;\n\t\t\tthis.forEachLoadedModel( ( scene ) => {\n\n\t\t\t\tupdateFrustumCulled( scene, ! value );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\t\tthis.group = new TilesGroup( this );\n\t\tthis.ellipsoid = WGS84_ELLIPSOID.clone();\n\t\tthis.cameras = [];\n\t\tthis.cameraMap = new Map();\n\t\tthis.cameraInfo = [];\n\t\tthis.activeTiles = new Set();\n\t\tthis.visibleTiles = new Set();\n\t\tthis.optimizeRaycast = true;\n\t\tthis._upRotationMatrix = new Matrix4();\n\n\t\tthis.lruCache.computeMemoryUsageCallback = tile => tile.cached.bytesUsed ?? null;\n\n\t\t// flag indicating whether frustum culling should be disabled\n\t\tthis._autoDisableRendererCulling = true;\n\n\t\t// flag indicating whether tiles are actively loading so events can be fired\n\t\tthis._loadingTiles = false;\n\n\t\tconst manager = new LoadingManager();\n\t\tmanager.setURLModifier( url => {\n\n\t\t\tif ( this.preprocessURL ) {\n\n\t\t\t\treturn this.preprocessURL( url );\n\n\t\t\t} else {\n\n\t\t\t\treturn url;\n\n\t\t\t}\n\n\t\t} );\n\t\tthis.manager = manager;\n\n\t\t// saved for event dispatcher functions\n\t\tthis._listeners = {};\n\n\t\tif ( REVISION_LESS_165 ) {\n\n\t\t\t// Setting up the override raycasting function to be used by\n\t\t\t// 3D objects created by this renderer\n\t\t\tconst tilesRenderer = this;\n\t\t\tthis._overridenRaycast = function ( raycaster, intersects ) {\n\n\t\t\t\tif ( ! tilesRenderer.optimizeRaycast ) {\n\n\t\t\t\t\tObject.getPrototypeOf( this ).raycast.call( this, raycaster, intersects );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\taddEventListener( ...args ) {\n\n\t\tEventDispatcher.prototype.addEventListener.call( this, ...args );\n\n\t}\n\n\thasEventListener( ...args ) {\n\n\t\tEventDispatcher.prototype.hasEventListener.call( this, ...args );\n\n\t}\n\n\tremoveEventListener( ...args ) {\n\n\t\tEventDispatcher.prototype.removeEventListener.call( this, ...args );\n\n\t}\n\n\tdispatchEvent( ...args ) {\n\n\t\tEventDispatcher.prototype.dispatchEvent.call( this, ...args );\n\n\t}\n\n\t/* Public API */\n\tgetBounds( ...args ) {\n\n\t\tconsole.warn( 'TilesRenderer: getBounds has been renamed to getBoundingBox.' );\n\t\treturn this.getBoundingBox( ...args );\n\n\t}\n\n\tgetOrientedBounds( ...args ) {\n\n\t\tconsole.warn( 'TilesRenderer: getOrientedBounds has been renamed to getOrientedBoundingBox.' );\n\t\treturn this.getOrientedBoundingBox( ...args );\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( ! this.root ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst boundingVolume = this.root.cached.boundingVolume;\n\t\tif ( boundingVolume ) {\n\n\t\t\tboundingVolume.getAABB( target );\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tgetOrientedBoundingBox( targetBox, targetMatrix ) {\n\n\t\tif ( ! this.root ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst boundingVolume = this.root.cached.boundingVolume;\n\t\tif ( boundingVolume ) {\n\n\t\t\tboundingVolume.getOBB( targetBox, targetMatrix );\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( ! this.root ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst boundingVolume = this.root.cached.boundingVolume;\n\t\tif ( boundingVolume ) {\n\n\t\t\tboundingVolume.getSphere( target );\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\tforEachLoadedModel( callback ) {\n\n\t\tthis.traverse( tile => {\n\n\t\t\tconst scene = tile.cached.scene;\n\t\t\tif ( scene ) {\n\n\t\t\t\tcallback( scene, tile );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( ! this.root ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( raycaster.firstHitOnly ) {\n\n\t\t\tconst hit = raycastTraverseFirstHit( this, this.root, raycaster );\n\t\t\tif ( hit ) {\n\n\t\t\t\tintersects.push( hit );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\traycastTraverse( this, this.root, raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\thasCamera( camera ) {\n\n\t\treturn this.cameraMap.has( camera );\n\n\t}\n\n\tsetCamera( camera ) {\n\n\t\tconst cameras = this.cameras;\n\t\tconst cameraMap = this.cameraMap;\n\t\tif ( ! cameraMap.has( camera ) ) {\n\n\t\t\tcameraMap.set( camera, new Vector2() );\n\t\t\tcameras.push( camera );\n\t\t\tthis.dispatchEvent( { type: 'add-camera', camera } );\n\n\t\t\treturn true;\n\n\t\t}\n\t\treturn false;\n\n\t}\n\n\tsetResolution( camera, xOrVec, y ) {\n\n\t\tconst cameraMap = this.cameraMap;\n\t\tif ( ! cameraMap.has( camera ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst width = xOrVec.isVector2 ? xOrVec.x : xOrVec;\n\t\tconst height = xOrVec.isVector2 ? xOrVec.y : y;\n\t\tconst cameraVec = cameraMap.get( camera );\n\n\t\tif ( cameraVec.width !== width || cameraVec.height !== height ) {\n\n\t\t\tcameraVec.set( width, height );\n\t\t\tthis.dispatchEvent( { type: 'camera-resolution-change' } );\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tsetResolutionFromRenderer( camera, renderer ) {\n\n\t\trenderer\n\t\t\t.getSize( tempVector2 )\n\t\t\t.multiplyScalar( renderer.getPixelRatio() );\n\n\t\treturn this.setResolution( camera, tempVector2.x, tempVector2.y );\n\n\t}\n\n\tdeleteCamera( camera ) {\n\n\t\tconst cameras = this.cameras;\n\t\tconst cameraMap = this.cameraMap;\n\t\tif ( cameraMap.has( camera ) ) {\n\n\t\t\tconst index = cameras.indexOf( camera );\n\t\t\tcameras.splice( index, 1 );\n\t\t\tcameraMap.delete( camera );\n\t\t\tthis.dispatchEvent( { type: 'delete-camera', camera } );\n\n\t\t\treturn true;\n\n\t\t}\n\t\treturn false;\n\n\t}\n\n\t/* Overriden */\n\tpreprocessTileSet( json, url, tile ) {\n\n\t\tsuper.preprocessTileSet( json, url, tile );\n\n\t\tqueueMicrotask( () => {\n\n\t\t\tthis.dispatchEvent( {\n\t\t\t\ttype: 'load-tile-set',\n\t\t\t\ttileSet: json,\n\t\t\t\turl,\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tloadRootTileSet( ...args ) {\n\n\t\treturn super.loadRootTileSet( ...args )\n\t\t\t.then( () => {\n\n\t\t\t\t// cache the gltf tile set rotation matrix\n\t\t\t\tconst upAxis = this.rootTileSet.asset && this.rootTileSet.asset.gltfUpAxis || 'y';\n\t\t\t\tswitch ( upAxis.toLowerCase() ) {\n\n\t\t\t\t\tcase 'x':\n\t\t\t\t\t\tthis._upRotationMatrix.makeRotationAxis( Y_AXIS, - Math.PI / 2 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'y':\n\t\t\t\t\t\tthis._upRotationMatrix.makeRotationAxis( X_AXIS, Math.PI / 2 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tthis.dispatchEvent( { type: 'load-content' } );\n\n\t\t\t} );\n\n\t}\n\n\tupdate() {\n\n\t\t// check if the plugins that can block the tile updates require it\n\t\tlet needsUpdate = null;\n\t\tthis.invokeAllPlugins( plugin => {\n\n\t\t\tif ( plugin.doTilesNeedUpdate ) {\n\n\t\t\t\tconst res = plugin.doTilesNeedUpdate();\n\t\t\t\tneedsUpdate = needsUpdate === null ? res : needsUpdate || res;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( needsUpdate === false ) {\n\n\t\t\tthis.dispatchEvent( { type: 'update-before' } );\n\t\t\tthis.dispatchEvent( { type: 'update-after' } );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// follow through with the update\n\t\tthis.dispatchEvent( { type: 'update-before' } );\n\n\t\tconst group = this.group;\n\t\tconst cameras = this.cameras;\n\t\tconst cameraMap = this.cameraMap;\n\t\tconst cameraInfo = this.cameraInfo;\n\n\t\tif ( cameras.length === 0 ) {\n\n\t\t\tconsole.warn( 'TilesRenderer: no cameras defined. Cannot update 3d tiles.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// automatically scale the array of cameraInfo to match the cameras\n\t\twhile ( cameraInfo.length > cameras.length ) {\n\n\t\t\tcameraInfo.pop();\n\n\t\t}\n\n\t\twhile ( cameraInfo.length < cameras.length ) {\n\n\t\t\tcameraInfo.push( {\n\n\t\t\t\tfrustum: new ExtendedFrustum(),\n\t\t\t\tisOrthographic: false,\n\t\t\t\tsseDenominator: - 1, // used if isOrthographic:false\n\t\t\t\tposition: new Vector3(),\n\t\t\t\tinvScale: - 1,\n\t\t\t\tpixelSize: 0, // used if isOrthographic:true\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// extract scale of group container\n\t\ttempMat2.copy( group.matrixWorld ).invert();\n\n\t\ttempVector.setFromMatrixScale( tempMat2 );\n\t\tif ( Math.abs( Math.max( tempVector.x - tempVector.y, tempVector.x - tempVector.z ) ) > 1e-6 ) {\n\n\t\t\tconsole.warn( 'ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.' );\n\n\t\t}\n\n\t\t// store the camera cameraInfo in the 3d tiles root frame\n\t\tfor ( let i = 0, l = cameraInfo.length; i < l; i ++ ) {\n\n\t\t\tconst camera = cameras[ i ];\n\t\t\tconst info = cameraInfo[ i ];\n\t\t\tconst frustum = info.frustum;\n\t\t\tconst position = info.position;\n\t\t\tconst resolution = cameraMap.get( camera );\n\n\t\t\tif ( resolution.width === 0 || resolution.height === 0 ) {\n\n\t\t\t\tconsole.warn( 'TilesRenderer: resolution for camera error calculation is not set.' );\n\n\t\t\t}\n\n\t\t\t// Read the calculated projection matrix directly to support custom Camera implementations\n\t\t\tconst projection = camera.projectionMatrix.elements;\n\n\t\t\t// The last element of the projection matrix is 1 for orthographic, 0 for perspective\n\t\t\tinfo.isOrthographic = projection[ 15 ] === 1;\n\n\t\t\tif ( info.isOrthographic ) {\n\n\t\t\t\t// See OrthographicCamera.updateProjectionMatrix and Matrix4.makeOrthographic:\n\t\t\t\t// the view width and height are used to populate matrix elements 0 and 5.\n\t\t\t\tconst w = 2 / projection[ 0 ];\n\t\t\t\tconst h = 2 / projection[ 5 ];\n\t\t\t\tinfo.pixelSize = Math.max( h / resolution.height, w / resolution.width );\n\n\t\t\t} else {\n\n\t\t\t\t// See PerspectiveCamera.updateProjectionMatrix and Matrix4.makePerspective:\n\t\t\t\t// the vertical FOV is used to populate matrix element 5.\n\t\t\t\tinfo.sseDenominator = ( 2 / projection[ 5 ] ) / resolution.height;\n\n\t\t\t}\n\n\t\t\t// get frustum in group root frame\n\t\t\ttempMat.copy( group.matrixWorld );\n\t\t\ttempMat.premultiply( camera.matrixWorldInverse );\n\t\t\ttempMat.premultiply( camera.projectionMatrix );\n\n\t\t\tfrustum.setFromProjectionMatrix( tempMat );\n\n\t\t\t// get transform position in group root frame\n\t\t\tposition.set( 0, 0, 0 );\n\t\t\tposition.applyMatrix4( camera.matrixWorld );\n\t\t\tposition.applyMatrix4( tempMat2 );\n\n\t\t}\n\n\t\tsuper.update();\n\n\t\tthis.dispatchEvent( { type: 'update-after' } );\n\n\t}\n\n\tpreprocessNode( tile, tileSetDir, parentTile = null ) {\n\n\t\tsuper.preprocessNode( tile, tileSetDir, parentTile );\n\n\t\tconst transform = new Matrix4();\n\t\tif ( tile.transform ) {\n\n\t\t\tconst transformArr = tile.transform;\n\t\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\t\ttransform.elements[ i ] = transformArr[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parentTile ) {\n\n\t\t\ttransform.premultiply( parentTile.cached.transform );\n\n\t\t}\n\n\t\tconst transformInverse = new Matrix4().copy( transform ).invert();\n\t\tconst boundingVolume = new TileBoundingVolume();\n\t\tif ( 'sphere' in tile.boundingVolume ) {\n\n\t\t\tboundingVolume.setSphereData( ...tile.boundingVolume.sphere, transform );\n\n\t\t}\n\n\t\tif ( 'box' in tile.boundingVolume ) {\n\n\t\t\tboundingVolume.setObbData( tile.boundingVolume.box, transform );\n\n\t\t}\n\n\t\tif ( 'region' in tile.boundingVolume ) {\n\n\t\t\tboundingVolume.setRegionData( this.ellipsoid, ...tile.boundingVolume.region );\n\n\t\t}\n\n\t\ttile.cached = {\n\n\t\t\t_loadIndex: 0,\n\t\t\ttransform,\n\t\t\ttransformInverse,\n\n\t\t\tactive: false,\n\n\t\t\tboundingVolume,\n\n\t\t\tmetadata: null,\n\t\t\tscene: null,\n\t\t\tgeometry: null,\n\t\t\tmaterials: null,\n\t\t\ttextures: null,\n\n\t\t};\n\n\t}\n\n\tasync requestTileContents( ...args ) {\n\n\t\tawait super.requestTileContents( ...args );\n\t\tthis.dispatchEvent( { type: 'load-content' } );\n\n\t}\n\n\tasync parseTile( buffer, tile, extension, uri ) {\n\n\t\tconst cached = tile.cached;\n\t\tcached._loadIndex ++;\n\n\t\tconst uriSplits = uri.split( /[\\\\/]/g );\n\t\turiSplits.pop();\n\t\tconst workingPath = uriSplits.join( '/' );\n\t\tconst fetchOptions = this.fetchOptions;\n\n\t\tconst manager = this.manager;\n\t\tconst loadIndex = cached._loadIndex;\n\t\tlet promise = null;\n\n\t\tconst cachedTransform = cached.transform;\n\t\tconst upRotationMatrix = this._upRotationMatrix;\n\t\tconst fileType = ( readMagicBytes( buffer ) || extension ).toLowerCase();\n\t\tswitch ( fileType ) {\n\n\t\t\tcase 'b3dm': {\n\n\t\t\t\tconst loader = new B3DMLoader( manager );\n\t\t\t\tloader.workingPath = workingPath;\n\t\t\t\tloader.fetchOptions = fetchOptions;\n\n\t\t\t\tloader.adjustmentTransform.copy( upRotationMatrix );\n\n\t\t\t\tpromise = loader.parse( buffer );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcase 'pnts': {\n\n\t\t\t\tconst loader = new PNTSLoader( manager );\n\t\t\t\tloader.workingPath = workingPath;\n\t\t\t\tloader.fetchOptions = fetchOptions;\n\t\t\t\tpromise = loader.parse( buffer );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcase 'i3dm': {\n\n\t\t\t\tconst loader = new I3DMLoader( manager );\n\t\t\t\tloader.workingPath = workingPath;\n\t\t\t\tloader.fetchOptions = fetchOptions;\n\n\t\t\t\tloader.adjustmentTransform.copy( upRotationMatrix );\n\t\t\t\tloader.ellipsoid.copy( this.ellipsoid );\n\n\t\t\t\tpromise = loader.parse( buffer );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcase 'cmpt': {\n\n\t\t\t\tconst loader = new CMPTLoader( manager );\n\t\t\t\tloader.workingPath = workingPath;\n\t\t\t\tloader.fetchOptions = fetchOptions;\n\n\t\t\t\tloader.adjustmentTransform.copy( upRotationMatrix );\n\t\t\t\tloader.ellipsoid.copy( this.ellipsoid );\n\n\t\t\t\tpromise = loader\n\t\t\t\t\t.parse( buffer )\n\t\t\t\t\t.then( res => res.scene\t);\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// 3DTILES_content_gltf\n\t\t\tcase 'gltf':\n\t\t\tcase 'glb': {\n\n\t\t\t\tconst loader = new GLTFExtensionLoader( manager );\n\t\t\t\tloader.workingPath = workingPath;\n\t\t\t\tloader.fetchOptions = fetchOptions;\n\t\t\t\tpromise = loader.parse( buffer );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( `TilesRenderer: Content type \"${ fileType }\" not supported.` );\n\t\t\t\tpromise = Promise.resolve( null );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// check if this is the beginning of a new set of tiles to load and dispatch and event\n\t\tconst stats = this.stats;\n\t\tif ( this._loadingTiles === false && stats.parsing + stats.downloading > 0 ) {\n\n\t\t\tthis.dispatchEvent( { type: 'tiles-load-start' } );\n\t\t\tthis._loadingTiles = true;\n\n\t\t}\n\n\t\t// wait for the tile to load\n\t\tconst result = await promise;\n\n\t\t// get the scene data\n\t\tlet scene;\n\t\tlet metadata;\n\t\tif ( result.isObject3D ) {\n\n\t\t\tscene = result;\n\t\t\tmetadata = null;\n\n\t\t} else {\n\n\t\t\tscene = result.scene;\n\t\t\tmetadata = result;\n\n\t\t}\n\n\t\t// wait for extra processing by plugins if needed\n\t\tawait this.invokeAllPlugins( plugin => {\n\n\t\t\treturn plugin.processTileModel && plugin.processTileModel( scene, tile );\n\n\t\t} );\n\n\t\t// exit early if a new request has already started\n\t\tif ( cached._loadIndex !== loadIndex ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// ensure the matrix is up to date in case the scene has a transform applied\n\t\tscene.updateMatrix();\n\n\t\t// apply the local up-axis correction rotation\n\t\t// GLTFLoader seems to never set a transformation on the root scene object so\n\t\t// any transformations applied to it can be assumed to be applied after load\n\t\t// (such as applying RTC_CENTER) meaning they should happen _after_ the z-up\n\t\t// rotation fix which is why \"multiply\" happens here.\n\t\tif ( fileType === 'glb' || fileType === 'gltf' ) {\n\n\t\t\tscene.matrix.multiply( upRotationMatrix );\n\n\t\t}\n\n\t\tscene.matrix.premultiply( cachedTransform );\n\t\tscene.matrix.decompose( scene.position, scene.quaternion, scene.scale );\n\t\tscene.traverse( c => {\n\n\t\t\tc[ INITIAL_FRUSTUM_CULLED ] = c.frustumCulled;\n\n\t\t} );\n\t\tupdateFrustumCulled( scene, ! this.autoDisableRendererCulling );\n\n\t\tif ( REVISION_LESS_165 ) {\n\n\t\t\t// We handle raycasting in a custom way so remove it from here\n\t\t\tscene.traverse( c => {\n\n\t\t\t\tc.raycast = this._overridenRaycast;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tconst materials = [];\n\t\tconst geometry = [];\n\t\tconst textures = [];\n\t\tscene.traverse( c => {\n\n\t\t\tif ( c.geometry ) {\n\n\t\t\t\tgeometry.push( c.geometry );\n\n\t\t\t}\n\n\t\t\tif ( c.material ) {\n\n\t\t\t\tconst material = c.material;\n\t\t\t\tmaterials.push( c.material );\n\n\t\t\t\tfor ( const key in material ) {\n\n\t\t\t\t\tconst value = material[ key ];\n\t\t\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\t\t\ttextures.push( value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcached.materials = materials;\n\t\tcached.geometry = geometry;\n\t\tcached.textures = textures;\n\t\tcached.scene = scene;\n\t\tcached.metadata = metadata;\n\t\tcached.bytesUsed = estimateBytesUsed( scene );\n\n\t\t// dispatch an event indicating that this model has completed\n\t\tthis.dispatchEvent( {\n\t\t\ttype: 'load-model',\n\t\t\tscene,\n\t\t\ttile,\n\t\t} );\n\n\t\t// dispatch an \"end\" event if all tiles have finished loading\n\t\tif ( this._loadingTiles === true && stats.parsing + stats.downloading === 1 ) {\n\n\t\t\tthis.dispatchEvent( { type: 'tiles-load-end' } );\n\t\t\tthis._loadingTiles = false;\n\n\t\t}\n\n\t}\n\n\tdisposeTile( tile ) {\n\n\t\tsuper.disposeTile( tile );\n\n\t\t// This could get called before the tile has finished downloading\n\t\tconst cached = tile.cached;\n\t\tif ( cached.scene ) {\n\n\t\t\tconst materials = cached.materials;\n\t\t\tconst geometry = cached.geometry;\n\t\t\tconst textures = cached.textures;\n\t\t\tconst parent = cached.scene.parent;\n\n\t\t\t// dispose of any textures required by the mesh features extension\n\t\t\t// TODO: these are being discarded here to remove the image bitmaps -\n\t\t\t// can this be handled in another way? Or more generically?\n\t\t\tcached.scene.traverse( child => {\n\n\t\t\t\tif ( child.userData.meshFeatures ) {\n\n\t\t\t\t\tchild.userData.meshFeatures.dispose();\n\n\t\t\t\t}\n\n\t\t\t\tif ( child.userData.structuralMetadata ) {\n\n\t\t\t\t\tchild.userData.structuralMetadata.dispose();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tfor ( let i = 0, l = geometry.length; i < l; i ++ ) {\n\n\t\t\t\tgeometry[ i ].dispose();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\t\tmaterials[ i ].dispose();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = textures.length; i < l; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tif ( texture.image instanceof ImageBitmap ) {\n\n\t\t\t\t\ttexture.image.close();\n\n\t\t\t\t}\n\n\t\t\t\ttexture.dispose();\n\n\t\t\t}\n\n\t\t\tif ( parent ) {\n\n\t\t\t\tparent.remove( cached.scene );\n\n\t\t\t}\n\n\t\t\tthis.dispatchEvent( {\n\t\t\t\ttype: 'dispose-model',\n\t\t\t\tscene: cached.scene,\n\t\t\t\ttile,\n\t\t\t} );\n\n\t\t\tcached.scene = null;\n\t\t\tcached.materials = null;\n\t\t\tcached.textures = null;\n\t\t\tcached.geometry = null;\n\t\t\tcached.metadata = null;\n\n\t\t}\n\n\t\tcached._loadIndex ++;\n\n\t}\n\n\tsetTileVisible( tile, visible ) {\n\n\t\tconst scene = tile.cached.scene;\n\t\tconst visibleTiles = this.visibleTiles;\n\t\tconst group = this.group;\n\n\t\t// TODO: move \"visibleTiles\" to TilesRendererBase\n\t\tif ( visible ) {\n\n\t\t\tif ( scene ) {\n\n\t\t\t\tgroup.add( scene );\n\t\t\t\tscene.updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\tvisibleTiles.add( tile );\n\n\t\t} else {\n\n\t\t\tif ( scene ) {\n\n\t\t\t\tgroup.remove( scene );\n\n\t\t\t}\n\n\t\t\tvisibleTiles.delete( tile );\n\n\t\t}\n\n\t\tthis.dispatchEvent( {\n\t\t\ttype: 'tile-visibility-change',\n\t\t\tscene,\n\t\t\ttile,\n\t\t\tvisible,\n\t\t} );\n\n\t}\n\n\tsetTileActive( tile, active ) {\n\n\t\tconst activeTiles = this.activeTiles;\n\t\tif ( active ) {\n\n\t\t\tactiveTiles.add( tile );\n\n\t\t} else {\n\n\t\t\tactiveTiles.delete( tile );\n\n\t\t}\n\n\t}\n\n\tcalculateError( tile ) {\n\n\t\tconst cached = tile.cached;\n\t\tconst cameras = this.cameras;\n\t\tconst cameraInfo = this.cameraInfo;\n\t\tconst boundingVolume = cached.boundingVolume;\n\n\t\tlet maxError = - Infinity;\n\t\tlet minDistance = Infinity;\n\n\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t// transform camera position into local frame of the tile bounding box\n\t\t\tconst info = cameraInfo[ i ];\n\t\t\tlet error;\n\t\t\tif ( info.isOrthographic ) {\n\n\t\t\t\tconst pixelSize = info.pixelSize;\n\t\t\t\terror = tile.geometricError / pixelSize;\n\n\t\t\t} else {\n\n\t\t\t\tconst distance = boundingVolume.distanceToPoint( info.position );\n\t\t\t\tconst sseDenominator = info.sseDenominator;\n\t\t\t\terror = tile.geometricError / ( distance * sseDenominator );\n\n\t\t\t\tminDistance = Math.min( minDistance, distance );\n\n\t\t\t}\n\n\t\t\tmaxError = Math.max( maxError, error );\n\n\t\t}\n\n\t\ttile.__distanceFromCamera = minDistance;\n\t\ttile.__error = maxError;\n\n\t}\n\n\ttileInView( tile ) {\n\n\t\tconst cached = tile.cached;\n\t\tconst boundingVolume = cached.boundingVolume;\n\t\tconst cameraInfo = this.cameraInfo;\n\t\tfor ( let i = 0, l = cameraInfo.length; i < l; i ++ ) {\n\n\t\t\t// Track which camera frustums this tile is in so we can use it\n\t\t\t// to ignore the error calculations for cameras that can't see it\n\t\t\tconst frustum = cameraInfo[ i ].frustum;\n\t\t\tif ( boundingVolume.intersectsFrustum( frustum ) ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t// TODO: deprecate this function and provide a plugin to help with this\n\t// adjust the rotation of the group such that Y is altitude, X is North, and Z is East\n\tsetLatLonToYUp( lat, lon ) {\n\n\t\tconst { ellipsoid, group } = this;\n\n\t\t_euler.set( Math.PI / 2, Math.PI / 2, 0 );\n\t\t_mat.makeRotationFromEuler( _euler );\n\n\t\tellipsoid.getEastNorthUpFrame( lat, lon, group.matrix )\n\t\t\t.multiply( _mat )\n\t\t\t.invert()\n\t\t\t.decompose(\n\t\t\t\tgroup.position,\n\t\t\t\tgroup.quaternion,\n\t\t\t\tgroup.scale,\n\t\t\t);\n\n\t\tgroup.updateMatrixWorld( true );\n\n\t}\n\n}\n\n\n[\n\t[ 'onLoadTileSet', 'load-tile-set' ],\n\t[ 'onLoadModel', 'load-model' ],\n\t[ 'onDisposeModel', 'dispose-model' ],\n\t[ 'onTileVisibilityChange', 'tile-visibility-change' ],\n].forEach( ( [ methodName, eventName ] ) => {\n\n\tconst cachedName = Symbol( methodName );\n\tObject.defineProperty(\n\t\tTilesRenderer.prototype,\n\t\tmethodName,\n\t\t{\n\t\t\tget() {\n\n\t\t\t\treturn this[ cachedName ] || null;\n\n\t\t\t},\n\n\t\t\tset( cb ) {\n\n\t\t\t\tconsole.warn( `TilesRenderer: \"${ methodName }\" has been deprecated in favor of the \"${ eventName }\" event.` );\n\n\t\t\t\tif ( this[ cachedName ] ) {\n\n\t\t\t\t\tthis.removeEventListener( eventName, this[ cachedName ] );\n\n\t\t\t\t}\n\n\t\t\t\tthis[ cachedName ] = cb;\n\t\t\t\tthis.addEventListener( eventName, cb );\n\n\t\t\t}\n\t\t}\n\t);\n\n} );\n","import SoonSpace from 'soonspacejs'\r\n/**\r\n * BasisU Texture Extension (patch)\r\n * mimeType: image/ktx2\r\n *\r\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\r\n */\r\nclass GLTFTextureBasisUExtension {\r\n\r\n constructor ( parser ) {\r\n\r\n this.parser = parser\r\n this.name = 'KHR_texture_basisu_patch'\r\n\r\n }\r\n\r\n loadTexture ( textureIndex ) {\r\n\r\n const parser = this.parser\r\n const json = parser.json\r\n\r\n const textureDef = json.textures[ textureIndex ]\r\n const sourceIndex = textureDef.source\r\n const sourceDef = json.images[ sourceIndex ]\r\n\r\n if ( !sourceDef || sourceDef.mimeType !== 'image/ktx2' ) {\r\n\r\n return null\r\n \r\n }\r\n\r\n const loader = parser.options.ktx2Loader\r\n\r\n if ( !loader ) {\r\n\r\n throw new Error( `${SoonSpace.utils.consoleSspTitle}请使用 setModelKtx2DecoderPath 设置 ktx2 解压库路径` )\r\n\r\n }\r\n\r\n return parser.loadTextureImage( textureIndex, sourceIndex, loader )\r\n\r\n }\r\n\r\n}\r\n\r\nexport { GLTFTextureBasisUExtension, }","import SoonSpace from 'soonspacejs'\r\nimport { TilesRenderer, GLTFCesiumRTCExtension, LRUCache, PriorityQueue, } from '3d-tiles-renderer'\r\nimport { GLTFLoader, } from 'three/examples/jsm/loaders/GLTFLoader.js'\r\nimport { GLTFTextureBasisUExtension, } from './KHR_texture_basisu'\r\n\r\nclass TilesPlugin {\r\n\r\n tilesMap = new Map<string, TilesRenderer>()\r\n\r\n needsUpdate = true\r\n cameraTransitionStart = false\r\n\r\n private _tilesCamera = this.ssp.viewport.camera\r\n\r\n private lruCache: LRUCache | null = null\r\n private parseQueue: PriorityQueue | null = null\r\n private downloadQueue: PriorityQueue | null = null\r\n\r\n constructor ( readonly ssp: SoonSpace ) {\r\n\r\n const { controls, viewport, } = ssp\r\n\r\n controls.addEventListener( 'transitionstart', () => {\r\n\r\n this.cameraTransitionStart = true\r\n viewport.state.useFreq = 1\r\n \r\n } )\r\n\r\n controls.addEventListener( 'rest', () => {\r\n\r\n this.cameraTransitionStart = false\r\n this.needsUpdate = true\r\n viewport.state.useFreq = 60\r\n \r\n } )\r\n \r\n ssp.signals.beforeRender.add( () => {\r\n\r\n if ( this.needsUpdate ) {\r\n\r\n this.needsUpdate = false\r\n\r\n ssp.viewport.camera.updateMatrixWorld()\r\n \r\n this.tilesMap.forEach( ( tiles ) => {\r\n \r\n tiles.group.updateMatrixWorld()\r\n tiles.update()\r\n \r\n } )\r\n \r\n }\r\n \r\n } )\r\n\r\n ssp.signals.cameraObjectChange.add( () => {\r\n\r\n this.tilesMap.forEach( ( tiles ) => {\r\n\r\n // delete prev camera\r\n tiles.deleteCamera( this._tilesCamera )\r\n tiles.setCamera( ssp.viewport.camera )\r\n tiles.setResolutionFromRenderer( ssp.viewport.camera, ssp.viewport.renderer )\r\n\r\n } )\r\n\r\n this._tilesCamera = ssp.viewport.camera\r\n \r\n } )\r\n \r\n }\r\n\r\n async loadTiles ( url: string ): Promise<TilesRenderer | undefined> {\r\n\r\n if ( this.tilesMap.has( url ) ) {\r\n\r\n SoonSpace.utils.warn( `${url} already loaded` )\r\n\r\n return \r\n \r\n }\r\n\r\n const { ssp, ssp: { viewport, }, } = this\r\n\r\n const tiles = new TilesRenderer( url ) as any\r\n\r\n // share caches\r\n if ( this.lruCache === null ) this.lruCache = tiles.lruCache\r\n else tiles.lruCache = this.lruCache\r\n if ( this.parseQueue === null ) this.parseQueue = tiles.parseQueue\r\n else tiles.parseQueue = this.parseQueue\r\n if ( this.downloadQueue === null ) this.downloadQueue = tiles.downloadQueue\r\n else tiles.downloadQueue = this.downloadQueue\r\n\r\n const gltfLoader = new GLTFLoader( tiles.manager )\r\n\r\n gltfLoader.register( () => new GLTFCesiumRTCExtension() )\r\n // patch\r\n gltfLoader.register( ( parser ) => new GLTFTextureBasisUExtension( parser ) )\r\n \r\n // 需要先设置 ssp.setModelDracoDecoderPath, ssp.setModelKtx2DecoderPath\r\n // @ts-ignore\r\n const { dracoLoader, ktx2Loader, meshoptDecoder, } = ssp.manager.store.modelManager.gltfLoader\r\n\r\n if ( dracoLoader ) gltfLoader.setDRACOLoader( dracoLoader )\r\n if ( ktx2Loader ) gltfLoader.setKTX2Loader( ktx2Loader )\r\n if ( meshoptDecoder ) gltfLoader.setMeshoptDecoder( meshoptDecoder )\r\n\r\n tiles.manager.addHandler( /\\.gltf$/, gltfLoader )\r\n\r\n // 存储 tiles\r\n this.tilesMap.set( url, tiles )\r\n\r\n tiles.setCamera( this._tilesCamera )\r\n tiles.setResolutionFromRenderer( this._tilesCamera, viewport.renderer )\r\n\r\n tiles.lruCache.maxSize = 600\r\n tiles.lruCache.minSize = 300\r\n tiles.lruCache.unloadPercent = 0.8\r\n\r\n ssp.addObject( tiles.group )\r\n\r\n const tilesRender = () => {\r\n\r\n if ( !this.cameraTransitionStart ) {\r\n\r\n this.needsUpdate = true\r\n ssp.render()\r\n \r\n }\r\n \r\n }\r\n\r\n // render on-demand\r\n tiles.onLoadModel = () => tilesRender()\r\n tiles.onDisposeModel = ( _scene: any, tile: any ) => {\r\n\r\n // close ImageBitMap\r\n if ( tile.cached.textures ) {\r\n\r\n const { textures, } = tile.cached\r\n\r\n for ( let i = 0, l = textures.length; i < l; i++ ) {\r\n\r\n const texture = textures[ i ]\r\n\r\n /**\r\n * @fix mipmaps memory leak\r\n */\r\n if ( texture.mipmaps.length > 0 ) {\r\n \r\n texture.mipmaps.length = 0\r\n \r\n }\r\n\r\n if ( texture.image instanceof ImageBitmap ) {\r\n\r\n texture.image.close()\r\n \r\n }\r\n \r\n }\r\n \r\n }\r\n \r\n }\r\n\r\n return new Promise( resolve => {\r\n\r\n tiles.onLoadTileSet = () => {\r\n\r\n tilesRender()\r\n\r\n // 等待 root 加载完 resolve\r\n resolve( tiles )\r\n \r\n }\r\n \r\n } )\r\n\r\n }\r\n\r\n removeTiles ( url: string ): boolean {\r\n\r\n const tiles = this.tilesMap.get( url )\r\n\r\n if ( tiles ) {\r\n\r\n tiles.dispose()\r\n\r\n this.tilesMap.delete( url )\r\n\r\n this.ssp.removeObject( tiles.group )\r\n\r\n return true\r\n \r\n }\r\n\r\n return false\r\n \r\n }\r\n\r\n}\r\n\r\nexport default TilesPlugin"],"names":["_norm","_vec","_euler","_vecX","_vecY","_vecZ","_ray","tempMat","tempMat2","GLTFCesiumRTCExtensionImpl","REVISION_LESS_165","_mat","_estimateBytesUsed"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34]}
|