@soonspacejs/plugin-tiles 2.13.12 → 2.13.14
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/dist/index.esm.js +6467 -1
- package/dist/index.esm.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/urlExtension.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/LRUCache.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/PriorityQueue.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/constants.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/tiles/traverseFunctions.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/throttle.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/tiles/TilesRendererBase.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/loaders/LoaderBase.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/arrayToString.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/FeatureTable.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/BatchTableHierarchyExtension.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/BatchTable.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/readMagicBytes.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/loaders/B3DMLoaderBase.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/loaders/I3DMLoaderBase.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/loaders/PNTSLoaderBase.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/loaders/CMPTLoaderBase.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/loaders/B3DMLoader.js","../../../../node_modules/3d-tiles-renderer/src/core/renderer/utilities/rgb565torgb.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/loaders/decodeOctNormal.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/loaders/PNTSLoader.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/math/GeoUtils.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/math/Ellipsoid.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/math/GeoConstants.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/loaders/I3DMLoader.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/loaders/CMPTLoader.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/tiles/TilesGroup.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/tiles/raycastTraverse.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/math/OBB.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/math/EllipsoidRegion.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/math/TileBoundingVolume.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/math/ExtendedFrustum.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/tiles/utilities.js","../../../../node_modules/3d-tiles-renderer/src/three/renderer/tiles/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\tif ( ! url ) {\n\n\t\treturn null;\n\n\t}\n\n\tconst filename = url\n\t\t.replace( /[a-z]+:\\/\\/[^/]+/i, '' ) \t// remove origin\n\t\t.replace( /\\?.*$/i, '' ) \t\t\t\t// remove query\n\t\t.replace( /.*\\//g, '' ); \t\t\t\t// remove path\n\n\tconst lastPeriod = filename.lastIndexOf( '.' );\n\tif ( lastPeriod === - 1 ) {\n\n\t\treturn null;\n\n\t}\n\n\treturn filename.substring( lastPeriod + 1 ) || null;\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.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\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 ) || 0;\n\n\t}\n\n\tsetMemoryUsage( item, bytes ) {\n\n\t\tconst { bytesMap, itemSet } = this;\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\t\tbytesMap.set( item, bytes );\n\t\tthis.cachedBytes += bytes;\n\n\t}\n\n\tadd( item, removeCb ) {\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\titemList.push( item );\n\t\tusedSet.add( item );\n\t\titemSet.set( item, Date.now() );\n\t\tcallbacks.set( item, removeCb );\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\tmarkUsed( item ) {\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\tthis.usedSet.delete( item );\n\n\t}\n\n\tmarkAllUnused() {\n\n\t\tthis.usedSet.clear();\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\tcancelAnimationFrame( this.unloadingHandle );\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} );\n\n\t\t}\n\n\t}\n\n}\n\nexport { LRUCache };\n","class PriorityQueue {\n\n\t// returns whether tasks are queued or actively running\n\tget running() {\n\n\t\treturn this.items.length !== 0 || this.currJobs !== 0;\n\n\t}\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 = null;\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.scheduled = false;\n\t\t\tthis.tryRunJobs();\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\tif ( priorityCallback !== null ) {\n\n\t\t\titems.sort( priorityCallback );\n\n\t\t}\n\n\t}\n\n\thas( item ) {\n\n\t\treturn this.callbacks.has( item );\n\n\t}\n\n\tadd( item, callback ) {\n\n\t\tconst data = {\n\t\t\tcallback,\n\t\t\treject: null,\n\t\t\tresolve: null,\n\t\t\tpromise: null,\n\t\t};\n\n\t\tdata.promise = new Promise( ( resolve, reject ) => {\n\n\t\t\tconst items = this.items;\n\t\t\tconst callbacks = this.callbacks;\n\n\t\t\tdata.resolve = resolve;\n\t\t\tdata.reject = reject;\n\n\t\t\titems.unshift( item );\n\t\t\tcallbacks.set( item, data );\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\treturn data.promise;\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\t// reject the promise to ensure there are no dangling promises - add a\n\t\t\t// catch here to handle the case where the promise was never used anywhere\n\t\t\t// else.\n\t\t\tconst info = callbacks.get( item );\n\t\t\tinfo.promise.catch( () => {} );\n\t\t\tinfo.reject( new Error( 'PriorityQueue: Item removed.' ) );\n\n\t\t\titems.splice( index, 1 );\n\t\t\tcallbacks.delete( item );\n\n\t\t}\n\n\t}\n\n\tremoveByFilter( filter ) {\n\n\t\tconst { items } = this;\n\t\tfor ( let i = 0; i < items.length; i ++ ) {\n\n\t\t\tconst item = items[ i ];\n\t\t\tif ( filter( item ) ) {\n\n\t\t\t\tthis.remove( item );\n\n\t\t\t}\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 iterated = 0;\n\n\t\tconst completedCallback = () => {\n\n\t\t\tthis.currJobs --;\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\twhile ( maxJobs > this.currJobs && items.length > 0 && iterated < maxJobs ) {\n\n\t\t\tthis.currJobs ++;\n\t\t\titerated ++;\n\t\t\tconst item = items.pop();\n\t\t\tconst { callback, resolve, reject } = callbacks.get( item );\n\t\t\tcallbacks.delete( item );\n\n\t\t\tlet result;\n\t\t\ttry {\n\n\t\t\t\tresult = callback( item );\n\n\t\t\t} catch ( err ) {\n\n\t\t\t\treject( err );\n\t\t\t\tcompletedCallback();\n\n\t\t\t}\n\n\t\t\tif ( result instanceof Promise ) {\n\n\t\t\t\tresult\n\t\t\t\t\t.then( resolve )\n\t\t\t\t\t.catch( reject )\n\t\t\t\t\t.finally( completedCallback );\n\n\t\t\t} else {\n\n\t\t\t\tresolve( result );\n\t\t\t\tcompletedCallback();\n\n\t\t\t}\n\n\t\t}\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","import { LOADED, FAILED } from '../constants.js';\n\nconst viewErrorTarget = {\n\tinView: false,\n\terror: Infinity,\n\tdistanceFromCamera: Infinity,\n};\n\n// flag guiding the behavior of the traversal to load the siblings at the root of the\n// tile set or not. The spec seems to indicate \"true\" when using REPLACE define but\n// Cesium's behavior is \"false\".\n// See CesiumGS/3d-tiles#776\nconst LOAD_ROOT_SIBLINGS = true;\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\nfunction areChildrenProcessed( tile ) {\n\n\treturn tile.__childrenProcessed === tile.children.length;\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.__allChildrenLoaded = false;\n\n\t\t// update tile frustum and error state\n\t\trenderer.calculateTileViewError( tile, viewErrorTarget );\n\t\ttile.__inFrustum = viewErrorTarget.inView;\n\t\ttile.__error = viewErrorTarget.error;\n\t\ttile.__distanceFromCamera = viewErrorTarget.distanceFromCamera;\n\n\t}\n\n}\n\n// Recursively mark tiles used down to the next layer, skipping external tile sets\nfunction recursivelyMarkUsed( tile, renderer ) {\n\n\trenderer.ensureChildrenArePreprocessed( tile );\n\n\tresetFrameState( tile, renderer );\n\tmarkUsed( tile, renderer );\n\n\t// don't traverse if the children have not been processed, yet but tile set content\n\t// should be considered to be \"replaced\" by the loaded children so await that here.\n\tif ( tile.__hasUnrenderableContent && areChildrenProcessed( tile ) ) {\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// exit the recursion if the tile hasn't been used this frame\n\tif ( isUsedThisFrame( tile, renderer.frameCount ) ) {\n\n\t\t// queue this tile to download content\n\t\tif ( tile.__hasContent ) {\n\n\t\t\trenderer.queueTileForDownload( tile );\n\n\t\t}\n\n\t\tif ( areChildrenProcessed( tile ) ) {\n\n\t\t\t// queue any used child tiles\n\t\t\tconst children = tile.children;\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\trecursivelyLoadNextRenderableTiles( children[ i ], renderer );\n\n\t\t\t}\n\n\t\t}\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.markTileUsed( 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 - if an external tile set is encountered,\n\t// though, then continue to refine.\n\tif ( tile.__error <= renderer.errorTarget && ! tile.__hasUnrenderableContent ) {\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\t// Early out if the children haven't been processed, yet\n\tif ( ! areChildrenProcessed( tile ) ) {\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\t// Otherwise this can cause load oscillation as parents are traversed and loaded and then determined\n\t// to not be used because children aren't visible. See #1165.\n\t// if ( 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// \tconsole.log('FAILED')\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' && ( tile.__depth !== 0 || LOAD_ROOT_SIBLINGS ) ) {\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 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\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.__hasContent ||\n\t\t\t\t\t( c.__hasRenderableContent && isDownloadFinished( c.__loadingState ) ) ||\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.__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\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 ( 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 isAdditiveRefine = tile.refine === 'ADD';\n\n\t// TODO: the \"meetsSSE\" field can be removed when the \"errorThreshold\" field has been removed\n\n\t// Don't wait for all children tiles to load if this tile set has empty tiles at the root in order\n\t// to match Cesium's behavior\n\tconst allChildrenLoaded = tile.__allChildrenLoaded || ( tile.__depth === 0 && ! LOAD_ROOT_SIBLINGS );\n\n\t// If we've met the SSE requirements and we can load content then fire a fetch.\n\tif ( hasContent && ( meetsSSE || isAdditiveRefine ) ) {\n\n\t\trenderer.queueTileForDownload( tile );\n\n\t}\n\n\t// By this time only tiles that meet the screen space error requirements will be traversed. Only mark this\n\t// as visible if it's been loaded and not all children have loaded yet or it's an additive tile, meaning it needs\n\t// to display in addition to the children.\n\n\t// Skip the tile entirely if there's no content to load\n\tif ( meetsSSE && loadedContent && ! allChildrenLoaded || loadedContent && isAdditiveRefine ) {\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 ( ! isAdditiveRefine && 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.invokeOnePlugin( plugin => plugin.setTileActive && plugin.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","// function that rate limits the amount of time a function can be called to once\n// per frame, initially queuing a new call for the next frame.\nexport function throttle( callback ) {\n\n\tlet handle = null;\n\treturn () => {\n\n\t\tif ( handle === null ) {\n\n\t\t\thandle = requestAnimationFrame( () => {\n\n\t\t\t\thandle = null;\n\t\t\t\tcallback();\n\n\t\t\t} );\n\n\t\t}\n\n\t};\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';\nimport { throttle } from '../utilities/throttle.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\tconst aPriority = a.priority || 0;\n\tconst bPriority = b.priority || 0;\n\n\tif ( aPriority !== bPriority ) {\n\n\t\t// lower priority value sorts first\n\t\treturn aPriority > bPriority ? 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} else if ( a.__depthFromRenderedParent !== b.__depthFromRenderedParent ) {\n\n\t\treturn a.__depthFromRenderedParent > b.__depthFromRenderedParent ? - 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\tconst aPriority = a.priority || 0;\n\tconst bPriority = b.priority || 0;\n\n\tif ( aPriority !== bPriority ) {\n\n\t\t// lower priority value sorts first\n\t\treturn aPriority > bPriority ? 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.__depthFromRenderedParent !== b.__depthFromRenderedParent ) {\n\n\t\t// dispose of deeper tiles first so parents are not disposed before children\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.__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\tget loadProgress() {\n\n\t\tconst { stats, isLoading } = this;\n\t\tconst loading = stats.downloading + stats.parsing;\n\t\tconst total = stats.inCacheSinceLoad + ( isLoading ? 1 : 0 );\n\t\treturn total === 0 ? 1.0 : 1.0 - loading / total;\n\n\t}\n\n\tget errorThreshold() {\n\n\t\treturn this._errorThreshold;\n\n\t}\n\n\tset errorThreshold( v ) {\n\n\t\tconsole.warn( 'TilesRenderer: The \"errorThreshold\" option has been deprecated.' );\n\t\tthis._errorThreshold = v;\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\t\tthis.cachedSinceLoadComplete = new Set();\n\t\tthis.isLoading = false;\n\n\t\tconst lruCache = new LRUCache();\n\t\tlruCache.unloadPriorityCallback = lruPriorityCallback;\n\n\t\tconst downloadQueue = new PriorityQueue();\n\t\tdownloadQueue.maxJobs = 25;\n\t\tdownloadQueue.priorityCallback = priorityCallback;\n\n\t\tconst parseQueue = new PriorityQueue();\n\t\tparseQueue.maxJobs = 5;\n\t\tparseQueue.priorityCallback = priorityCallback;\n\n\t\tconst processNodeQueue = new PriorityQueue();\n\t\tprocessNodeQueue.maxJobs = 25;\n\n\t\tthis.processedTiles = new WeakSet();\n\t\tthis.visibleTiles = new Set();\n\t\tthis.activeTiles = new Set();\n\t\tthis.usedSet = new Set();\n\t\tthis.lruCache = lruCache;\n\t\tthis.downloadQueue = downloadQueue;\n\t\tthis.parseQueue = parseQueue;\n\t\tthis.processNodeQueue = processNodeQueue;\n\t\tthis.stats = {\n\t\t\tinCacheSinceLoad: 0,\n\t\t\tinCache: 0,\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// callbacks\n\t\tthis._dispatchNeedsUpdateEvent = throttle( () => {\n\n\t\t\tthis.dispatchEvent( { type: 'needs-update' } );\n\n\t\t} );\n\n\t\t// options\n\t\tthis.errorTarget = 16.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 = plugins.length;\n\t\tfor ( let i = 0; i < plugins.length; i ++ ) {\n\n\t\t\tconst otherPriority = plugins[ i ].priority || 0;\n\t\t\tif ( otherPriority > priority ) {\n\n\t\t\t\tinsertionPoint = i;\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, ensureFullyProcessed = true ) {\n\n\t\tif ( ! this.root ) return;\n\n\t\ttraverseSet( this.root, ( tile, ...args ) => {\n\n\t\t\tif ( ensureFullyProcessed ) {\n\n\t\t\t\tthis.ensureChildrenArePreprocessed( tile, true );\n\n\t\t\t}\n\n\t\t\treturn beforecb ? beforecb( tile, ...args ) : false;\n\n\t\t}, aftercb );\n\n\t}\n\n\tqueueTileForDownload( tile ) {\n\n\t\tif ( tile.__loadingState !== UNLOADED || this.lruCache.isFull() ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.queuedTiles.push( tile );\n\n\t}\n\n\tmarkTileUsed( tile ) {\n\n\t\t// save the tile in a separate \"used set\" so we can mark it as unused\n\t\t// before the next tile set traversal\n\t\tthis.usedSet.add( tile );\n\t\tthis.lruCache.markUsed( tile );\n\n\t}\n\n\t// Public API\n\tupdate() {\n\n\t\tconst { lruCache, usedSet, stats, root, downloadQueue, parseQueue, processNodeQueue } = this;\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( root => {\n\n\t\t\t\t\tlet processedUrl = this.rootURL;\n\t\t\t\t\tif ( processedUrl !== null ) {\n\n\t\t\t\t\t\tthis.invokeAllPlugins( plugin => processedUrl = plugin.preprocessURL ? plugin.preprocessURL( processedUrl, null ) : processedUrl );\n\n\t\t\t\t\t}\n\t\t\t\t\tthis.rootLoadingState = LOADED;\n\t\t\t\t\tthis.rootTileSet = root;\n\t\t\t\t\tthis.dispatchEvent( { type: 'needs-update' } );\n\t\t\t\t\tthis.dispatchEvent( { type: 'load-content' } );\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'load-tile-set',\n\t\t\t\t\t\ttileSet: root,\n\t\t\t\t\t\turl: processedUrl,\n\t\t\t\t\t} );\n\n\t\t\t\t} )\n\t\t\t\t.catch( error => {\n\n\t\t\t\t\tthis.rootLoadingState = FAILED;\n\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\tthis.rootTileSet = null;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'load-error',\n\t\t\t\t\t\ttile: null,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\turl: this.rootURL,\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tif ( ! root ) {\n\n\t\t\treturn;\n\n\t\t}\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\tusedSet.forEach( tile => lruCache.markUnused( tile ) );\n\t\tusedSet.clear();\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\t// if all tasks have finished and we've been marked as actively loading then fire the completion event\n\t\tconst runningTasks = downloadQueue.running || parseQueue.running || processNodeQueue.running;\n\t\tif ( runningTasks === false && this.isLoading === true ) {\n\n\t\t\tthis.cachedSinceLoadComplete.clear();\n\t\t\tstats.inCacheSinceLoad = 0;\n\n\t\t\tthis.dispatchEvent( { type: 'tiles-load-end' } );\n\t\t\tthis.isLoading = false;\n\n\t\t}\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}, null, false );\n\n\t\tstats.failed = 0;\n\n\t}\n\n\tdispose() {\n\n\t\t// dispose of all the plugins\n\t\tconst plugins = [ ...this.plugins ];\n\t\tplugins.forEach( plugin => {\n\n\t\t\tthis.unregisterPlugin( plugin );\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}, null, false );\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\tcalculateBytesUsed( scene, tile ) {\n\n\t\treturn 0;\n\n\t}\n\n\tdispatchEvent( e ) {\n\n\t\t// event to be overriden for dispatching via an event system\n\n\t}\n\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.invokeOnePlugin( plugin => plugin.setTileActive && plugin.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\tthis.processedTiles.add( tile );\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// tracker for determining if all the children have been asynchronously\n\t\t// processed and are ready to be traversed\n\t\ttile.__childrenProcessed = 0;\n\t\tif ( parentTile ) {\n\n\t\t\tparentTile.__childrenProcessed ++;\n\n\t\t}\n\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.__allChildrenLoaded = false;\n\n\t\ttile.__wasSetActive = false;\n\t\ttile.__active = false;\n\n\t\ttile.__loadingState = UNLOADED;\n\n\t\tif ( parentTile === null ) {\n\n\t\t\ttile.__depth = 0;\n\t\t\ttile.__depthFromRenderedParent = ( tile.__hasRenderableContent ? 1 : 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, active ) {\n\n\t\tactive ? this.activeTiles.add( tile ) : this.activeTiles.delete( tile );\n\n\t}\n\n\tsetTileVisible( tile, visible ) {\n\n\t\tvisible ? this.visibleTiles.add( tile ) : this.visibleTiles.delete( tile );\n\n\t}\n\n\tcalculateTileViewError( tile, target ) {\n\n\t\t// retrieve whether the tile is visible, screen space error, and distance to camera\n\t\t// set \"inView\", \"error\", \"distance\"\n\n\t}\n\n\tensureChildrenArePreprocessed( tile, immediate = false ) {\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\t// the child has already been processed\n\t\t\t\tbreak;\n\n\t\t\t} else if ( immediate ) {\n\n\t\t\t\t// process the node immediately and make sure we don't double process it\n\t\t\t\tthis.processNodeQueue.remove( child );\n\t\t\t\tthis.preprocessNode( child, tile.__basePath, tile );\n\n\t\t\t} else {\n\n\t\t\t\t// queue the node for processing if it hasn't been already\n\t\t\t\tif ( ! this.processNodeQueue.has( child ) ) {\n\n\t\t\t\t\tthis.processNodeQueue.add( child, child => {\n\n\t\t\t\t\t\tthis.preprocessNode( child, tile.__basePath, tile );\n\t\t\t\t\t\tthis._dispatchNeedsUpdateEvent();\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}\n\n\t// Private Functions\n\t// returns the total bytes used for by the given tile as reported by all plugins\n\tgetBytesUsed( tile ) {\n\n\t\tlet bytes = 0;\n\t\tthis.invokeAllPlugins( plugin => {\n\n\t\t\tif ( plugin.calculateBytesUsed ) {\n\n\t\t\t\tbytes += plugin.calculateBytesUsed( tile, tile.cached.scene ) || 0;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn bytes;\n\n\t}\n\n\t// force a recalculation of the tile or all tiles if no tile is provided\n\trecalculateBytesUsed( tile = null ) {\n\n\t\tconst { lruCache, processedTiles } = this;\n\t\tif ( tile === null ) {\n\n\t\t\tlruCache.itemSet.forEach( item => {\n\n\t\t\t\tif ( processedTiles.has( item ) ) {\n\n\t\t\t\t\tlruCache.setMemoryUsage( item, this.getBytesUsed( item ) );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\tlruCache.setMemoryUsage( tile, this.getBytesUsed( tile ) );\n\n\t\t}\n\n\t}\n\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 the last file path path-segment from the URL including the trailing slash\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 instanceof Response ) ) {\n\n\t\t\t\t\treturn res;\n\n\t\t\t\t} else if ( 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( root => {\n\n\t\t\t\tthis.preprocessTileSet( root, processedUrl );\n\t\t\t\treturn root;\n\n\t\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 externalTileset = null;\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\n\t\t// track an abort controller and pass-through the below conditions if aborted\n\t\tconst controller = new AbortController();\n\t\tconst signal = controller.signal;\n\t\tconst addedSuccessfully = lruCache.add( tile, t => {\n\n\t\t\t// Stop the load if it's started\n\t\t\tcontroller.abort();\n\n\t\t\t// Clear out all tile content\n\t\t\tif ( isExternalTileSet ) {\n\n\t\t\t\tt.children.length = 0;\n\t\t\t\tt.__childrenProcessed = 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\tstats.inCache --;\n\t\t\tif ( this.cachedSinceLoadComplete.has( tile ) ) {\n\n\t\t\t\tthis.cachedSinceLoadComplete.delete( tile );\n\t\t\t\tstats.inCacheSinceLoad --;\n\n\t\t\t}\n\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\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// check if this is the beginning of a new set of tiles to load and dispatch and event\n\t\tif ( ! this.isLoading ) {\n\n\t\t\tthis.isLoading = true;\n\t\t\tthis.dispatchEvent( { type: 'tiles-load-start' } );\n\n\t\t}\n\n\t\tlruCache.setMemoryUsage( tile, this.getBytesUsed( tile ) );\n\t\tthis.cachedSinceLoadComplete.add( tile );\n\t\tstats.inCacheSinceLoad ++;\n\t\tstats.inCache ++;\n\t\tstats.downloading ++;\n\t\ttile.__loadingState = LOADING;\n\n\t\t// queue the download and parse\n\t\treturn downloadQueue.add( tile, downloadTile => {\n\n\t\t\tif ( signal.aborted ) {\n\n\t\t\t\treturn Promise.resolve();\n\n\t\t\t}\n\n\t\t\tconst res = this.invokeOnePlugin( plugin => plugin.fetchData && plugin.fetchData( uri, { ...this.fetchOptions, signal } ) );\n\t\t\tthis.dispatchEvent( { type: 'tile-download-start', tile } );\n\t\t\treturn res;\n\n\t\t} )\n\t\t\t.then( res => {\n\n\t\t\t\tif ( signal.aborted ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( res instanceof Response ) ) {\n\n\t\t\t\t\treturn res;\n\n\t\t\t\t} else if ( 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 ( signal.aborted ) {\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.__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 ( signal.aborted ) {\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\texternalTileset = content;\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, signal ) );\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 ( signal.aborted ) {\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\tconst bytesUsed = this.getBytesUsed( tile );\n\t\t\t\tif ( lruCache.getMemoryUsage( tile ) === 0 && bytesUsed > 0 && lruCache.isFull() ) {\n\n\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// be loaded again later from the disk cache if needed.\n\t\t\t\t\tlruCache.remove( tile );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\t// update memory\n\t\t\t\tlruCache.setMemoryUsage( tile, bytesUsed );\n\n\t\t\t\t// dispatch an event indicating that this model has completed and that a new\n\t\t\t\t// call to \"update\" is needed.\n\t\t\t\tthis.dispatchEvent( { type: 'needs-update' } );\n\t\t\t\tthis.dispatchEvent( { type: 'load-content' } );\n\t\t\t\tif ( isExternalTileSet ) {\n\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'load-tile-set',\n\t\t\t\t\t\ttileSet: externalTileset,\n\t\t\t\t\t\turl: uri,\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\t\t\t\tif ( tile.cached.scene ) {\n\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'load-model',\n\t\t\t\t\t\tscene: tile.cached.scene,\n\t\t\t\t\t\ttile,\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( error => {\n\n\t\t\t\t// if it has been unloaded then the tile has been disposed\n\t\t\t\tif ( signal.aborted ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( error.name !== 'AbortError' ) {\n\n\t\t\t\t\tparseQueue.remove( tile );\n\t\t\t\t\tdownloadQueue.remove( tile );\n\n\t\t\t\t\tif ( tile.__loadingState === PARSING ) {\n\n\t\t\t\t\t\tstats.parsing --;\n\n\t\t\t\t\t} else if ( tile.__loadingState === LOADING ) {\n\n\t\t\t\t\t\tstats.downloading --;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstats.failed ++;\n\n\t\t\t\t\tconsole.error( `TilesRenderer : Failed to load tile at url \"${ tile.content.uri }\".` );\n\t\t\t\t\tconsole.error( error );\n\t\t\t\t\ttile.__loadingState = FAILED;\n\t\t\t\t\tlruCache.setLoaded( tile, true );\n\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'load-error',\n\t\t\t\t\t\ttile,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\turl: uri,\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlruCache.remove( tile );\n\n\t\t\t\t}\n\n\t\t\t} );\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","export class LoaderBase {\n\n\tconstructor() {\n\n\t\tthis.fetchOptions = {};\n\t\tthis.workingPath = '';\n\n\t}\n\n\tload( ...args ) {\n\n\t\tconsole.warn( 'Loader: \"load\" function has been deprecated in favor of \"loadAsync\".' );\n\t\treturn this.loadAsync( ...args );\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","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 function readMagicBytes( bufferOrDataView ) {\n\n\tif ( bufferOrDataView === null || bufferOrDataView.byteLength < 4 ) {\n\n\t\treturn '';\n\n\t}\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","// 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","// 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","// 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 { B3DMLoaderBase } from '../../../core/renderer/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', 1, 'FLOAT', 'VEC3' );\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","// 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 { Vector2, MathUtils, Vector3 } from 'three';\n\nconst f = new Vector2();\n\n/**\n * Decode an octahedron-encoded normal (as a pair of 8-bit unsigned numbers) into a Vector3.\n *\n * Resources:\n * - https://stackoverflow.com/a/74745666/2704779\n * - https://knarkowicz.wordpress.com/2014/04/16/octahedron-normal-vector-encoding/\n * @param {number} x The unsigned 8-bit X coordinate on the projected octahedron.\n * @param {number} y The unsigned 8-bit Y coordinate on the projected octahedron.\n * @param {Vector3} [target] The target vector.\n */\nexport function decodeOctNormal( x, y, target = new Vector3() ) {\n\n\tf.set( x, y ).divideScalar( 256 ).multiplyScalar( 2 ).subScalar( 1 );\n\n\ttarget.set( f.x, f.y, 1 - Math.abs( f.x ) - Math.abs( f.y ) );\n\n\tconst t = MathUtils.clamp( - target.z, 0, 1 );\n\n\tif ( target.x >= 0 ) {\n\n\t\ttarget.setX( target.x - t );\n\n\t} else {\n\n\t\ttarget.setX( target.x + t );\n\n\t}\n\n\tif ( target.y >= 0 ) {\n\n\t\ttarget.setY( target.y - t );\n\n\t} else {\n\n\t\ttarget.setY( target.y + t );\n\n\t}\n\n\ttarget.normalize();\n\n\treturn target;\n\n}\n","import { PNTSLoaderBase } from '../../../core/renderer/loaders/PNTSLoaderBase.js';\nimport {\n\tPoints,\n\tPointsMaterial,\n\tBufferGeometry,\n\tBufferAttribute,\n\tDefaultLoadingManager,\n\tVector3,\n\tColor,\n} from 'three';\nimport { rgb565torgb } from '../../../core/renderer/utilities/rgb565torgb.js';\nimport { decodeOctNormal } from './decodeOctNormal.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 NORMAL = featureTable.getData( 'NORMAL', POINTS_LENGTH, 'FLOAT', 'VEC3' );\n\t\t\t\tconst NORMAL_OCT16P = featureTable.getData( 'NORMAL', POINTS_LENGTH, 'UNSIGNED_BYTE', 'VEC2' );\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 ( NORMAL !== null ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( NORMAL, 3, false ) );\n\n\t\t\t\t} else if ( NORMAL_OCT16P !== null ) {\n\n\t\t\t\t\tconst decodedNormals = new Float32Array( POINTS_LENGTH * 3 );\n\n\t\t\t\t\tconst n = new Vector3();\n\n\t\t\t\t\tfor ( let i = 0; i < POINTS_LENGTH; i ++ ) {\n\n\t\t\t\t\t\tconst x = NORMAL_OCT16P[ i * 2 ];\n\t\t\t\t\t\tconst y = NORMAL_OCT16P[ i * 2 + 1 ];\n\n\t\t\t\t\t\tconst normal = decodeOctNormal( x, y, n );\n\n\t\t\t\t\t\tdecodedNormals[ i * 3 ] = normal.x;\n\t\t\t\t\t\tdecodedNormals[ i * 3 + 1 ] = normal.y;\n\t\t\t\t\t\tdecodedNormals[ i * 3 + 2 ] = normal.z;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( decodedNormals, 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\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', 1, 'FLOAT', 'VEC3' );\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","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 _matrix = new Matrix4();\nconst _matrix2 = new Matrix4();\nconst _matrix3 = 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.name = '';\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, Y pointing north, X pointing east\n\tgetEastNorthUpFrame( lat, lon, height, target ) {\n\n\t\tif ( height.isMatrix4 ) {\n\n\t\t\ttarget = height;\n\t\t\theight = 0;\n\n\t\t\tconsole.warn( 'Ellipsoid: The signature for \"getEastNorthUpFrame\" has changed.' );\n\n\t\t}\n\n\t\tthis.getEastNorthUpAxes( lat, lon, _vecX, _vecY, _vecZ );\n\t\tthis.getCartographicToPosition( lat, lon, height, _pos );\n\t\treturn target.makeBasis( _vecX, _vecY, _vecZ ).setPosition( _pos );\n\n\t}\n\n\t// returns a frame with z indicating altitude and az, el, roll rotation within that frame\n\t// - azimuth: measured off of true north, increasing towards \"east\" (z-axis)\n\t// - elevation: measured off of the horizon, increasing towards sky (x-axis)\n\t// - roll: rotation around northern axis (y-axis)\n\tgetOrientedEastNorthUpFrame( lat, lon, height, az, el, roll, target ) {\n\n\t\treturn this.getObjectFrame( lat, lon, height, az, el, roll, target, ENU_FRAME );\n\n\t}\n\n\t// returns a frame similar to the ENU frame but rotated to match three.js object and camera conventions\n\t// OBJECT_FRAME: oriented such that \"+Y\" is up and \"+Z\" is forward.\n\t// CAMERA_FRAME: oriented such that \"+Y\" is up and \"-Z\" is forward.\n\tgetObjectFrame( lat, lon, height, az, el, roll, target, frame = OBJECT_FRAME ) {\n\n\t\tthis.getEastNorthUpFrame( lat, lon, height, _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\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\tgetCartographicFromObjectFrame( matrix, target, frame = OBJECT_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( matrix );\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( matrix );\n\n\t\t} else {\n\n\t\t\t_matrix2.copy( matrix );\n\n\t\t}\n\n\t\t// get the cartographic position of the frame\n\t\t_pos.setFromMatrixPosition( _matrix2 );\n\t\tthis.getPositionToCartographic( _pos, target );\n\n\t\t// get the relative rotation\n\t\tthis.getEastNorthUpFrame( target.lat, target.lon, 0, _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\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\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\tconsole.warn( 'Ellipsoid: \"getAzElRollFromRotationMatrix\" is deprecated. Use \"getCartographicFromObjectFrame\", instead.' );\n\t\tthis.getCartographicToPosition( lat, lon, 0, _pos );\n\t\t_matrix3.copy( rotationMatrix ).setPosition( _pos );\n\n\t\tthis.getCartographicFromObjectFrame( _matrix3, target, frame );\n\t\tdelete target.height;\n\t\tdelete target.lat;\n\t\tdelete target.lon;\n\n\t\treturn target;\n\n\n\t}\n\n\tgetRotationMatrixFromAzElRoll( lat, lon, az, el, roll, target, frame = ENU_FRAME ) {\n\n\t\tconsole.warn( 'Ellipsoid: \"getRotationMatrixFromAzElRoll\" function has been deprecated. Use \"getObjectFrame\", instead.' );\n\n\t\tthis.getObjectFrame( lat, lon, 0, az, el, roll, target, frame );\n\t\ttarget.setPosition( 0, 0, 0 );\n\t\treturn target;\n\n\t}\n\n\tgetFrame( lat, lon, az, el, roll, height, target, frame = ENU_FRAME ) {\n\n\t\tconsole.warn( 'Ellipsoid: \"getFrame\" function has been deprecated. Use \"getObjectFrame\", instead.' );\n\t\treturn this.getObjectFrame( lat, lon, height, az, el, roll, target, frame );\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/renderer/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/renderer/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/renderer/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 } from '../../../core/renderer/constants.js';\nimport { Ellipsoid } from './Ellipsoid.js';\n\nexport const WGS84_ELLIPSOID = new Ellipsoid( WGS84_RADIUS, WGS84_RADIUS, WGS84_HEIGHT );\nWGS84_ELLIPSOID.name = 'WGS84 Earth';\n","import { I3DMLoaderBase } from '../../../core/renderer/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', 1, 'FLOAT', 'VEC3' );\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","import { Group, DefaultLoadingManager, Matrix4 } from 'three';\nimport { CMPTLoaderBase } from '../../../core/renderer/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","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.isTilesGroup = true;\n\t\tthis.name = 'TilesRenderer.TilesGroup';\n\t\tthis.tilesRenderer = tilesRenderer;\n\t\tthis.matrixWorldInverse = new Matrix4();\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\t\t\t\tthis.matrixWorldInverse.copy( tempMat ).invert();\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\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tif ( this.parent && updateParents ) {\n\n\t\t\tthis.parent.updateWorldMatrix( updateParents, false );\n\n\t\t}\n\n\t\t// run the normal update function to ensure children and inverse matrices are in sync\n\t\tthis.updateMatrixWorld( true );\n\n\t}\n\n}\n","import { Ray, Vector3 } from 'three';\n\n// In three.js r165 and higher raycast traversal can be ended early\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\tconst didRaycast = renderer.invokeOnePlugin( plugin => plugin.raycastTile && plugin.raycastTile( tile, scene, raycaster, intersects ) );\n\tif ( ! didRaycast ) {\n\n\t\traycaster.intersectObject( scene, true, intersects );\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\nfunction isTileInitialized( tile ) {\n\n\treturn '__used' in tile;\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\n\t// get the ray in the local group frame\n\tif ( localRay === null ) {\n\n\t\tlocalRay = _localRay;\n\t\tlocalRay.copy( raycaster.ray ).applyMatrix4( group.matrixWorldInverse );\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 ( ! isTileInitialized( child ) || ! 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\t// if the tile has not been asynchronously initialized then there's no point in\n\t// traversing the tiles to check intersections.\n\tif ( ! isTileInitialized( tile ) ) {\n\n\t\treturn;\n\n\t}\n\n\tconst { group, activeTiles } = renderer;\n\tconst { boundingVolume } = tile.cached;\n\n\t// get the ray in the local group frame\n\tif ( localRay === null ) {\n\n\t\tlocalRay = _localRay;\n\t\tlocalRay.copy( raycaster.ray ).applyMatrix4( group.matrixWorldInverse );\n\n\t}\n\n\t// exit early if the tile isn't used or the bounding volume is not intersected\n\tif ( ! tile.__used || ! boundingVolume.intersectsRay( localRay ) ) {\n\n\t\treturn;\n\n\t}\n\n\t// only intersect the tile geometry if it's active\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\tcopy( source ) {\n\n\t\tthis.box.copy( source.box );\n\t\tthis.transform.copy( source.transform );\n\t\tthis.update();\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\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\tintersectsSphere( sphere ) {\n\n\t\tthis.clampPoint( sphere.center, _norm );\n\t\treturn _norm.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsFrustum( frustum ) {\n\n\t\treturn this._intersectsPlaneShape( frustum.planes, frustum.points );\n\n\t}\n\n\tintersectsOBB( obb ) {\n\n\t\treturn this._intersectsPlaneShape( obb.planes, obb.points );\n\n\t}\n\n\t// takes a series of 6 planes that define and enclosed shape and the 8 points that lie at the corners\n\t// of that shape to determine whether the OBB is intersected with.\n\t_intersectsPlaneShape( otherPlanes, otherPoints ) {\n\n\t\tconst thisPoints = this.points;\n\t\tconst thisPlanes = this.planes;\n\n\t\t// based on three.js' Box3 \"intersects frustum\" function\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = otherPlanes[ i ];\n\t\t\tlet maxDistance = - Infinity;\n\t\t\tfor ( let j = 0; j < 8; j ++ ) {\n\n\t\t\t\tconst v = thisPoints[ 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\t// this check is not performed by three.js' AABB logic but helps prevent a lot incorrect intersection reports\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = thisPlanes[ i ];\n\t\t\tlet maxDistance = - Infinity;\n\t\t\tfor ( let j = 0; j < 8; j ++ ) {\n\n\t\t\t\tconst v = otherPoints[ 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 { 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 { 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\tintersectsSphere( otherSphere ) {\n\n\t\tconst obb = this.obb || this.regionObb;\n\t\tconst sphere = this.sphere;\n\t\tif ( sphere && ! sphere.intersectsSphere( otherSphere ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tif ( obb && ! obb.intersectsSphere( otherSphere ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn Boolean( sphere || obb );\n\n\t}\n\n\tintersectsOBB( otherObb ) {\n\n\t\tconst obb = this.obb || this.regionObb;\n\t\tconst sphere = this.sphere;\n\t\tif ( sphere && ! otherObb.intersectsSphere( sphere ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tif ( obb && ! obb.intersectsOBB( otherObb ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\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\t\treturn this;\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\nexport function safeTextureGetByteLength( tex ) {\n\n\t// NOTE: This is for backwards compatibility and should be removed later\n\t// deprecated: remove in next major release\n\tconst { TextureUtils } = THREE;\n\tif ( ! TextureUtils || ! tex ) {\n\n\t\treturn 0;\n\n\t}\n\n\n\tconst { format, type, image } = tex;\n\tconst { width, height } = image;\n\n\tlet bytes = TextureUtils.getByteLength( width, height, format, type );\n\tbytes *= tex.generateMipmaps ? 4 / 3 : 1;\n\n\treturn bytes;\n\n\n}\n\n// Returns the estimated number of bytes used by the object\nexport function estimateBytesUsed( object ) {\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\ttotalBytes += safeTextureGetByteLength( value );\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 '../../../core/renderer/tiles/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 { TilesGroup } from './TilesGroup.js';\nimport {\n\tMatrix4,\n\tVector3,\n\tVector2,\n\tEuler,\n\tLoadingManager,\n\tEventDispatcher,\n\tGroup,\n} from 'three';\nimport { raycastTraverse, raycastTraverseFirstHit } from './raycastTraverse.js';\nimport { readMagicBytes } from '../../../core/renderer/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';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.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 INITIAL_FRUSTUM_CULLED = Symbol( 'INITIAL_FRUSTUM_CULLED' );\nconst tempMat = new Matrix4();\nconst tempVector = new Vector3();\nconst tempVector2 = new Vector2();\nconst viewErrorTarget = {\n\tinView: false,\n\terror: Infinity,\n};\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\tget optimizeRaycast() {\n\n\t\treturn this._optimizeRaycast;\n\n\t}\n\n\tset optimizeRaycast( v ) {\n\n\t\tconsole.warn( 'TilesRenderer: The \"optimizeRaycast\" option has been deprecated.' );\n\t\tthis._optimizeRaycast = v;\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._optimizeRaycast = true;\n\t\tthis._upRotationMatrix = new Matrix4();\n\t\tthis._bytesUsed = new WeakMap();\n\n\t\t// flag indicating whether frustum culling should be disabled\n\t\tthis._autoDisableRendererCulling = true;\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}\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\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 && 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}, null, false );\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.getSize( tempVector2 );\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\tloadRootTileSet( ...args ) {\n\n\t\treturn super.loadRootTileSet( ...args )\n\t\t\t.then( root => {\n\n\t\t\t\t// cache the gltf tile set rotation matrix\n\t\t\t\tconst { asset, extensions = {} } = root;\n\t\t\t\tconst upAxis = asset && 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\t// update the ellipsoid based on the extension\n\t\t\t\tif ( '3DTILES_ellipsoid' in extensions ) {\n\n\t\t\t\t\tconst ext = extensions[ '3DTILES_ellipsoid' ];\n\t\t\t\t\tconst { ellipsoid } = this;\n\t\t\t\t\tellipsoid.name = ext.body;\n\t\t\t\t\tif ( ext.radii ) {\n\n\t\t\t\t\t\tellipsoid.radius.set( ...ext.radii );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tellipsoid.radius.set( 1, 1, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn root;\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\tif ( needsUpdate === null ) {\n\n\t\t\t\t\tneedsUpdate = res;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tneedsUpdate = Boolean( needsUpdate || res );\n\n\t\t\t\t}\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\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\ttempVector.setFromMatrixScale( group.matrixWorldInverse );\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( group.matrixWorldInverse );\n\n\t\t}\n\n\t\tsuper.update();\n\n\t\tthis.dispatchEvent( { type: 'update-after' } );\n\n\t\t// check for cameras _after_ base update so we can enable pre-loading the root tile set\n\t\tif ( cameras.length === 0 && this.root ) {\n\n\t\t\tlet found = false;\n\t\t\tthis.invokeAllPlugins( plugin => found = found || Boolean( plugin !== this && plugin.calculateTileViewError ) );\n\t\t\tif ( found === false ) {\n\n\t\t\t\tconsole.warn( 'TilesRenderer: no cameras defined. Cannot update 3d tiles.' );\n\n\t\t\t}\n\n\t\t}\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\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 parseTile( buffer, tile, extension, uri, abortSignal ) {\n\n\t\tconst cached = tile.cached;\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\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 = manager.getHandler( 'path.gltf' ) || manager.getHandler( 'path.glb' ) || new GLTFLoader( manager );\n\t\t\t\tloader.setWithCredentials( fetchOptions.credentials === 'include' );\n\t\t\t\tloader.setRequestHeader( fetchOptions.headers || {} );\n\t\t\t\tif ( fetchOptions.credentials === 'include' && fetchOptions.mode === 'cors' ) {\n\n\t\t\t\t\tloader.setCrossOrigin( 'use-credentials' );\n\n\t\t\t\t}\n\n\t\t\t\t// assume any pre-registered loader has paths configured as the user desires, but if we're making\n\t\t\t\t// a new loader, use the working path during parse to support relative uris on other hosts\n\t\t\t\tlet resourcePath = loader.resourcePath || loader.path || workingPath;\n\t\t\t\tif ( ! /[\\\\/]$/.test( resourcePath ) && resourcePath.length ) {\n\n\t\t\t\t\tresourcePath += '/';\n\n\t\t\t\t}\n\n\t\t\t\tpromise = loader.parseAsync( buffer, resourcePath ).then( result => {\n\n\t\t\t\t\t// glTF files are not guaranteed to include a scene object\n\t\t\t\t\tresult.scene = result.scene || new Group();\n\n\t\t\t\t\t// apply the local up-axis correction rotation\n\t\t\t\t\t// GLTFLoader seems to never set a transformation on the root scene object so\n\t\t\t\t\t// any transformations applied to it can be assumed to be applied after load\n\t\t\t\t\t// (such as applying RTC_CENTER) meaning they should happen _after_ the z-up\n\t\t\t\t\t// rotation fix which is why \"multiply\" happens here.\n\t\t\t\t\tconst { scene } = result;\n\t\t\t\t\tscene.updateMatrix();\n\t\t\t\t\tscene.matrix\n\t\t\t\t\t\t.multiply( upRotationMatrix )\n\t\t\t\t\t\t.decompose( scene.position, scene.quaternion, scene.scale );\n\n\t\t\t\t\treturn result;\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tdefault: {\n\n\t\t\t\tpromise = this.invokeOnePlugin( plugin => plugin.parseToMesh && plugin.parseToMesh( buffer, tile, extension, uri, abortSignal ) );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// wait for the tile to load\n\t\tconst result = await promise;\n\t\tif ( result === null ) {\n\n\t\t\tthrow new Error( `TilesRenderer: Content type \"${ fileType }\" not supported.` );\n\n\t\t}\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// ensure the matrix is up to date in case the scene has a transform applied\n\t\tscene.updateMatrix();\n\t\tscene.matrix.premultiply( cachedTransform );\n\t\tscene.matrix.decompose( scene.position, scene.quaternion, scene.scale );\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// frustum culling\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\t// collect all original geometries, materials, etc to be disposed of later\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\t// exit early if a new request has already started\n\t\tif ( abortSignal.aborted ) {\n\n\t\t\t// dispose of any image bitmaps that have been opened.\n\t\t\t// TODO: share this code with the \"disposeTile\" code below, possibly allow for the tiles\n\t\t\t// renderer base to trigger a disposal of unneeded data\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\treturn;\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\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}\n\n\tsetTileVisible( tile, visible ) {\n\n\t\tconst scene = tile.cached.scene;\n\t\tconst group = this.group;\n\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} else {\n\n\t\t\tif ( scene ) {\n\n\t\t\t\tgroup.remove( scene );\n\n\t\t\t}\n\n\t\t}\n\n\t\tsuper.setTileVisible( tile, visible );\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\tcalculateBytesUsed( tile, scene ) {\n\n\t\tconst bytesUsed = this._bytesUsed;\n\t\tif ( ! bytesUsed.has( tile ) && scene ) {\n\n\t\t\tbytesUsed.set( tile, estimateBytesUsed( scene ) );\n\n\t\t}\n\n\t\treturn bytesUsed.get( tile ) ?? null;\n\n\t}\n\n\tcalculateTileViewError( tile, target ) {\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 inView = false;\n\t\tlet inViewError = - Infinity;\n\t\tlet inViewDistance = Infinity;\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// calculate the camera error\n\t\t\tconst info = cameraInfo[ i ];\n\t\t\tlet error;\n\t\t\tlet distance;\n\t\t\tif ( info.isOrthographic ) {\n\n\t\t\t\tconst pixelSize = info.pixelSize;\n\t\t\t\terror = tile.geometricError / pixelSize;\n\t\t\t\tdistance = Infinity;\n\n\t\t\t} else {\n\n\t\t\t\t// avoid dividing 0 by 0 which can result in NaN. If the distance to the tile is\n\t\t\t\t// 0 then the error should be infinity.\n\t\t\t\tconst sseDenominator = info.sseDenominator;\n\t\t\t\tdistance = boundingVolume.distanceToPoint( info.position );\n\t\t\t\terror = distance === 0 ? Infinity : tile.geometricError / ( distance * sseDenominator );\n\n\t\t\t}\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\tinView = true;\n\t\t\t\tinViewError = Math.max( inViewError, error );\n\t\t\t\tinViewDistance = Math.min( inViewDistance, distance );\n\n\t\t\t}\n\n\t\t\tmaxError = Math.max( maxError, error );\n\t\t\tminDistance = Math.min( minDistance, distance );\n\n\t\t}\n\n\t\t// check the plugin visibility\n\t\tthis.invokeAllPlugins( plugin => {\n\n\t\t\tif ( plugin !== this && plugin.calculateTileViewError ) {\n\n\t\t\t\tplugin.calculateTileViewError( tile, viewErrorTarget );\n\t\t\t\tif ( viewErrorTarget.inView ) {\n\n\t\t\t\t\tinView = true;\n\t\t\t\t\tinViewError = Math.max( inViewError, viewErrorTarget.error );\n\n\t\t\t\t}\n\n\t\t\t\tmaxError = Math.max( maxError, viewErrorTarget.error );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// If the tiles are out of view then use the global distance and error calculated\n\t\tif ( inView ) {\n\n\t\t\ttarget.inView = true;\n\t\t\ttarget.error = inViewError;\n\t\t\ttarget.distanceFromCamera = inViewDistance;\n\n\t\t} else {\n\n\t\t\ttarget.inView = false;\n\t\t\ttarget.error = maxError;\n\t\t\ttarget.distanceFromCamera = minDistance;\n\n\t\t}\n\n\t}\n\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\tconsole.warn( 'TilesRenderer: setLatLonToYUp is deprecated. Use the ReorientationPlugin, instead.' );\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, 0, 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\tdispose() {\n\n\t\tsuper.dispose();\n\t\tthis.group.removeFromParent();\n\n\t}\n\n}\n","import SoonSpace from 'soonspacejs'\n/**\n * BasisU Texture Extension (patch)\n * mimeType: image/ktx2\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n constructor ( parser ) {\n\n this.parser = parser\n this.name = 'KHR_texture_basisu_patch'\n\n }\n\n loadTexture ( textureIndex ) {\n\n const parser = this.parser\n const json = parser.json\n\n const textureDef = json.textures[ textureIndex ]\n const sourceIndex = textureDef.source\n const sourceDef = json.images[ sourceIndex ]\n\n if ( !sourceDef || sourceDef.mimeType !== 'image/ktx2' ) {\n\n return null\n \n }\n\n const loader = parser.options.ktx2Loader\n\n if ( !loader ) {\n\n throw new Error( `${SoonSpace.utils.consoleSspTitle}请使用 setModelKtx2DecoderPath 设置 ktx2 解压库路径` )\n\n }\n\n return parser.loadTextureImage( textureIndex, sourceIndex, loader )\n\n }\n\n}\n\nexport { GLTFTextureBasisUExtension, }","import SoonSpace from 'soonspacejs'\nimport { TilesRenderer, LRUCache, PriorityQueue, } from '3d-tiles-renderer'\nimport { GLTFLoader, } from 'three/examples/jsm/loaders/GLTFLoader.js'\nimport { GLTFTextureBasisUExtension, } from './KHR_texture_basisu'\n\nclass TilesPlugin {\n\n tilesMap = new Map<string, TilesRenderer>()\n\n needsUpdate = true\n cameraTransitionStart = false\n\n private _tilesCamera = this.ssp.viewport.camera\n\n private lruCache: LRUCache | null = null\n private parseQueue: PriorityQueue | null = null\n private downloadQueue: PriorityQueue | null = null\n\n constructor ( readonly ssp: SoonSpace ) {\n\n const { controls, viewport, } = ssp\n\n controls.addEventListener( 'transitionstart', () => {\n\n this.cameraTransitionStart = true\n viewport.state.useFreq = 1\n \n } )\n\n controls.addEventListener( 'rest', () => {\n\n this.cameraTransitionStart = false\n this.needsUpdate = true\n viewport.state.useFreq = 60\n \n } )\n \n ssp.signals.beforeRender.add( () => {\n\n if ( this.needsUpdate ) {\n\n this.needsUpdate = false\n\n ssp.viewport.camera.updateMatrixWorld()\n \n this.tilesMap.forEach( ( tiles ) => {\n \n tiles.group.updateMatrixWorld()\n tiles.update()\n \n } )\n \n }\n \n } )\n\n ssp.signals.cameraObjectChange.add( () => {\n\n this.tilesMap.forEach( ( tiles ) => {\n\n // delete prev camera\n tiles.deleteCamera( this._tilesCamera )\n tiles.setCamera( ssp.viewport.camera )\n tiles.setResolutionFromRenderer( ssp.viewport.camera, ssp.viewport.renderer )\n\n } )\n\n this._tilesCamera = ssp.viewport.camera\n \n } )\n \n }\n\n async loadTiles ( url: string ): Promise<TilesRenderer | undefined> {\n\n if ( this.tilesMap.has( url ) ) {\n\n SoonSpace.utils.warn( `${url} already loaded` )\n\n return \n \n }\n\n const { ssp, ssp: { viewport, }, } = this\n\n const tiles = new TilesRenderer( url ) as any\n\n // share caches\n if ( this.lruCache === null ) this.lruCache = tiles.lruCache\n else tiles.lruCache = this.lruCache\n if ( this.parseQueue === null ) this.parseQueue = tiles.parseQueue\n else tiles.parseQueue = this.parseQueue\n if ( this.downloadQueue === null ) this.downloadQueue = tiles.downloadQueue\n else tiles.downloadQueue = this.downloadQueue\n\n const gltfLoader = new GLTFLoader( tiles.manager )\n\n // patch\n gltfLoader.register( ( parser ) => new GLTFTextureBasisUExtension( parser ) )\n \n // 需要先设置 ssp.setModelDracoDecoderPath, ssp.setModelKtx2DecoderPath\n // @ts-ignore\n const { dracoLoader, ktx2Loader, meshoptDecoder, } = ssp.manager.store.modelManager.gltfLoader\n\n if ( dracoLoader ) gltfLoader.setDRACOLoader( dracoLoader )\n if ( ktx2Loader ) gltfLoader.setKTX2Loader( ktx2Loader )\n if ( meshoptDecoder ) gltfLoader.setMeshoptDecoder( meshoptDecoder )\n\n tiles.manager.addHandler( /\\.gltf$/, gltfLoader )\n\n // 存储 tiles\n this.tilesMap.set( url, tiles )\n\n tiles.setCamera( this._tilesCamera )\n tiles.setResolutionFromRenderer( this._tilesCamera, viewport.renderer )\n\n tiles.lruCache.maxSize = 600\n tiles.lruCache.minSize = 300\n tiles.lruCache.unloadPercent = 0.8\n\n ssp.addObject( tiles.group )\n\n const tilesRender = () => {\n\n if ( !this.cameraTransitionStart ) {\n\n this.needsUpdate = true\n ssp.render()\n \n }\n \n }\n\n // render on-demand\n tiles.onLoadModel = () => tilesRender()\n tiles.onDisposeModel = ( _scene: any, tile: any ) => {\n\n // close ImageBitMap\n if ( tile.cached.textures ) {\n\n const { textures, } = tile.cached\n\n for ( let i = 0, l = textures.length; i < l; i++ ) {\n\n const texture = textures[ i ]\n\n /**\n * @fix mipmaps memory leak\n */\n if ( texture.mipmaps.length > 0 ) {\n \n texture.mipmaps.length = 0\n \n }\n\n if ( texture.image instanceof ImageBitmap ) {\n\n texture.image.close()\n \n }\n \n }\n \n }\n \n }\n\n return new Promise( resolve => {\n\n tiles.onLoadTileSet = () => {\n\n tilesRender()\n\n // 等待 root 加载完 resolve\n resolve( tiles )\n \n }\n \n } )\n\n }\n\n removeTiles ( url: string ): boolean {\n\n const tiles = this.tilesMap.get( url )\n\n if ( tiles ) {\n\n tiles.dispose()\n\n this.tilesMap.delete( url )\n\n this.ssp.removeObject( tiles.group )\n\n return true\n \n }\n\n return false\n \n }\n\n}\n\nexport default TilesPlugin"],"names":["viewErrorTarget","_norm","_vec","_euler","_vecX","_vecY","_vecZ","_ray","tempMat","_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]}
|