@itwin/core-frontend 4.5.0-dev.2 → 4.5.0-dev.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/CheckpointConnection.d.ts +7 -7
  4. package/lib/cjs/CheckpointConnection.d.ts.map +1 -1
  5. package/lib/cjs/CheckpointConnection.js +31 -23
  6. package/lib/cjs/CheckpointConnection.js.map +1 -1
  7. package/lib/cjs/IModelApp.js +1 -1
  8. package/lib/cjs/IModelApp.js.map +1 -1
  9. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +1 -1
  10. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  11. package/lib/cjs/core-frontend.d.ts +1 -0
  12. package/lib/cjs/core-frontend.d.ts.map +1 -1
  13. package/lib/cjs/core-frontend.js +1 -0
  14. package/lib/cjs/core-frontend.js.map +1 -1
  15. package/lib/cjs/request/utils.d.ts +5 -0
  16. package/lib/cjs/request/utils.d.ts.map +1 -1
  17. package/lib/cjs/request/utils.js +11 -1
  18. package/lib/cjs/request/utils.js.map +1 -1
  19. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  20. package/lib/cjs/tile/GltfReader.js +10 -4
  21. package/lib/cjs/tile/GltfReader.js.map +1 -1
  22. package/lib/cjs/tile/TileAdmin.d.ts +3 -1
  23. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  24. package/lib/cjs/tile/TileAdmin.js +5 -4
  25. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  26. package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts +1 -1
  27. package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
  28. package/lib/cjs/tile/map/CesiumTerrainProvider.js +8 -4
  29. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  30. package/lib/cjs/tile/map/MapTileTree.d.ts +1 -0
  31. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  32. package/lib/cjs/tile/map/MapTileTree.js +25 -11
  33. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  34. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  35. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +16 -0
  36. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  37. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +2 -0
  38. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  39. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  40. package/lib/esm/CheckpointConnection.d.ts +7 -7
  41. package/lib/esm/CheckpointConnection.d.ts.map +1 -1
  42. package/lib/esm/CheckpointConnection.js +31 -23
  43. package/lib/esm/CheckpointConnection.js.map +1 -1
  44. package/lib/esm/IModelApp.js +1 -1
  45. package/lib/esm/IModelApp.js.map +1 -1
  46. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +1 -1
  47. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  48. package/lib/esm/core-frontend.d.ts +1 -0
  49. package/lib/esm/core-frontend.d.ts.map +1 -1
  50. package/lib/esm/core-frontend.js +1 -0
  51. package/lib/esm/core-frontend.js.map +1 -1
  52. package/lib/esm/request/utils.d.ts +5 -0
  53. package/lib/esm/request/utils.d.ts.map +1 -1
  54. package/lib/esm/request/utils.js +9 -0
  55. package/lib/esm/request/utils.js.map +1 -1
  56. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  57. package/lib/esm/tile/GltfReader.js +10 -4
  58. package/lib/esm/tile/GltfReader.js.map +1 -1
  59. package/lib/esm/tile/TileAdmin.d.ts +3 -1
  60. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  61. package/lib/esm/tile/TileAdmin.js +5 -4
  62. package/lib/esm/tile/TileAdmin.js.map +1 -1
  63. package/lib/esm/tile/map/CesiumTerrainProvider.d.ts +1 -1
  64. package/lib/esm/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
  65. package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -5
  66. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  67. package/lib/esm/tile/map/MapTileTree.d.ts +1 -0
  68. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  69. package/lib/esm/tile/map/MapTileTree.js +25 -11
  70. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  71. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  72. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +17 -1
  73. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  74. package/lib/esm/tile/map/TerrainMeshProvider.d.ts +2 -0
  75. package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  76. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  77. package/lib/public/locales/en/iModelJs.json +2 -1
  78. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  79. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  80. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"CesiumTerrainProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/CesiumTerrainProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { assert, BeDuration, BeTimePoint, ByteStream, JsonUtils, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Range1d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { nextPoint3d64FromByteStream, OctEncodedNormal, QPoint2d } from \"@itwin/core-common\";\r\nimport { MessageSeverity } from \"@itwin/appui-abstract\";\r\nimport { request, RequestOptions } from \"../../request/Request\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { RealityMeshParams, RealityMeshParamsBuilder } from \"../../render/RealityMeshParams\";\r\nimport {\r\n GeographicTilingScheme, MapTile, MapTilingScheme, QuadId, ReadMeshArgs, RequestMeshDataArgs, TerrainMeshProvider,\r\n TerrainMeshProviderOptions, Tile, TileAvailability,\r\n} from \"../internal\";\r\n\r\n/** @internal */\r\nenum QuantizedMeshExtensionIds {\r\n OctEncodedNormals = 1,\r\n WaterMask = 2,\r\n Metadata = 4,\r\n}\r\n\r\n/** Return the URL for a Cesium ION asset from its asset ID and request Key.\r\n * @public\r\n */\r\nexport function getCesiumAssetUrl(osmAssetId: number, requestKey: string): string {\r\n return `$CesiumIonAsset=${osmAssetId}:${requestKey}`;\r\n}\r\n/** @internal */\r\nexport function getCesiumOSMBuildingsUrl(): string | undefined {\r\n const key = IModelApp.tileAdmin.cesiumIonKey;\r\n if (undefined === key)\r\n return undefined;\r\n\r\n const osmBuildingAssetId = 96188;\r\n return getCesiumAssetUrl(osmBuildingAssetId, key);\r\n}\r\n\r\n/** @internal */\r\nexport async function getCesiumAccessTokenAndEndpointUrl(assetId = 1, requestKey?: string): Promise<{ token?: string, url?: string }> {\r\n\r\n if (undefined === requestKey) {\r\n requestKey = IModelApp.tileAdmin.cesiumIonKey;\r\n if (undefined === requestKey)\r\n return {};\r\n }\r\n\r\n const requestTemplate = `https://api.cesium.com/v1/assets/${assetId}/endpoint?access_token={CesiumRequestToken}`;\r\n const apiUrl: string = requestTemplate.replace(\"{CesiumRequestToken}\", requestKey);\r\n\r\n try {\r\n const apiResponse = await request(apiUrl, \"json\");\r\n if (undefined === apiResponse || undefined === apiResponse.url) {\r\n assert(false);\r\n return {};\r\n }\r\n return { token: apiResponse.accessToken, url: apiResponse.url };\r\n } catch (error) {\r\n assert(false);\r\n return {};\r\n }\r\n}\r\n\r\nlet notifiedTerrainError = false;\r\n\r\n// Notify - once per session - of failure to obtain Cesium terrain provider.\r\nfunction notifyTerrainError(detailedDescription?: string): void {\r\n if (notifiedTerrainError)\r\n return;\r\n\r\n notifiedTerrainError = true;\r\n IModelApp.notifications.displayMessage(MessageSeverity.Information, IModelApp.localization.getLocalizedString(`iModelJs:BackgroundMap.CannotObtainTerrain`), detailedDescription);\r\n}\r\n\r\n/** @internal */\r\nexport async function getCesiumTerrainProvider(opts: TerrainMeshProviderOptions): Promise<TerrainMeshProvider | undefined> {\r\n const accessTokenAndEndpointUrl = await getCesiumAccessTokenAndEndpointUrl();\r\n if (!accessTokenAndEndpointUrl.token || !accessTokenAndEndpointUrl.url) {\r\n notifyTerrainError(IModelApp.localization.getLocalizedString(`iModelJs:BackgroundMap.MissingCesiumToken`));\r\n return undefined;\r\n }\r\n\r\n let layers;\r\n try {\r\n const layerRequestOptions: RequestOptions = { headers: { authorization: `Bearer ${accessTokenAndEndpointUrl.token}` } };\r\n const layerUrl = `${accessTokenAndEndpointUrl.url}layer.json`;\r\n layers = await request(layerUrl, \"json\", layerRequestOptions);\r\n } catch (error) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n if (undefined === layers || undefined === layers.tiles || undefined === layers.version) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n const tilingScheme = new GeographicTilingScheme();\r\n let tileAvailability;\r\n if (undefined !== layers.available) {\r\n const availableTiles = layers.available;\r\n tileAvailability = new TileAvailability(tilingScheme, availableTiles.length);\r\n for (let level = 0; level < layers.available.length; level++) {\r\n const rangesAtLevel = availableTiles[level];\r\n for (const range of rangesAtLevel) {\r\n tileAvailability.addAvailableTileRange(level, range.startX, range.startY, range.endX, range.endY);\r\n }\r\n }\r\n }\r\n\r\n let tileUrlTemplate = accessTokenAndEndpointUrl.url + layers.tiles[0].replace(\"{version}\", layers.version);\r\n if (opts.wantNormals)\r\n tileUrlTemplate = tileUrlTemplate.replace(\"?\", \"?extensions=octvertexnormals-watermask-metadata&\");\r\n\r\n const maxDepth = JsonUtils.asInt(layers.maxzoom, 19);\r\n\r\n // TBD -- When we have an API extract the heights for the project from the terrain tiles - for use temporary Bing elevation.\r\n return new CesiumTerrainProvider(opts, accessTokenAndEndpointUrl.token, tileUrlTemplate, maxDepth, tilingScheme, tileAvailability, layers.metadataAvailability);\r\n}\r\n\r\nfunction zigZagDecode(value: number) {\r\n return (value >> 1) ^ (-(value & 1));\r\n}\r\n\r\n/**\r\n * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place.\r\n *\r\n * @see {@link https://github.com/AnalyticalGraphicsInc/quantized-mesh|quantized-mesh-1.0 terrain format}\r\n */\r\nfunction zigZagDeltaDecode(uBuffer: Uint16Array, vBuffer: Uint16Array, heightBuffer: Uint16Array) {\r\n const count = uBuffer.length;\r\n let u = 0;\r\n let v = 0;\r\n let height = 0;\r\n\r\n for (let i = 0; i < count; ++i) {\r\n u += zigZagDecode(uBuffer[i]);\r\n v += zigZagDecode(vBuffer[i]);\r\n\r\n uBuffer[i] = u;\r\n vBuffer[i] = v;\r\n\r\n height += zigZagDecode(heightBuffer[i]);\r\n heightBuffer[i] = height;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass CesiumTerrainProvider extends TerrainMeshProvider {\r\n private _accessToken: string;\r\n private readonly _tileUrlTemplate: string;\r\n private readonly _maxDepth: number;\r\n private readonly _wantSkirts: boolean;\r\n private readonly _tilingScheme: MapTilingScheme;\r\n private readonly _tileAvailability?: TileAvailability;\r\n private readonly _metaDataAvailableLevel?: number;\r\n private readonly _exaggeration: number;\r\n\r\n private static _scratchQPoint2d = QPoint2d.fromScalars(0, 0);\r\n private static _scratchPoint2d = Point2d.createZero();\r\n private static _scratchPoint = Point3d.createZero();\r\n private static _scratchNormal = Vector3d.createZero();\r\n private static _scratchHeightRange = Range1d.createNull();\r\n private static _tokenTimeoutInterval = BeDuration.fromSeconds(60 * 30); // Request a new access token every 30 minutes...\r\n private _tokenTimeOut: BeTimePoint;\r\n\r\n public override forceTileLoad(tile: Tile): boolean {\r\n // Force loading of the metadata availability tiles as these are required for determining the availability of descendants.\r\n const mapTile = tile as MapTile;\r\n return undefined !== this._metaDataAvailableLevel && mapTile.quadId.level === this._metaDataAvailableLevel && !mapTile.everLoaded;\r\n }\r\n\r\n constructor(opts: TerrainMeshProviderOptions, accessToken: string, tileUrlTemplate: string, maxDepth: number, tilingScheme: MapTilingScheme,\r\n tileAvailability: TileAvailability | undefined, metaDataAvailableLevel: number | undefined) {\r\n super();\r\n this._wantSkirts = opts.wantSkirts;\r\n this._exaggeration = opts.exaggeration;\r\n\r\n this._accessToken = accessToken;\r\n this._tileUrlTemplate = tileUrlTemplate;\r\n this._maxDepth = maxDepth;\r\n this._tilingScheme = tilingScheme;\r\n this._tileAvailability = tileAvailability;\r\n this._metaDataAvailableLevel = metaDataAvailableLevel;\r\n\r\n this._tokenTimeOut = BeTimePoint.now().plus(CesiumTerrainProvider._tokenTimeoutInterval);\r\n }\r\n\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (cards.dataset.cesiumIonLogoCard)\r\n return;\r\n\r\n cards.dataset.cesiumIonLogoCard = \"true\";\r\n const card = IModelApp.makeLogoCard({ iconSrc: `${IModelApp.publicPath}images/cesium-ion.svg`, heading: \"Cesium Ion\", notice: IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.CesiumWorldTerrainAttribution\") });\r\n cards.appendChild(card);\r\n }\r\n\r\n public get maxDepth(): number { return this._maxDepth; }\r\n public get tilingScheme(): MapTilingScheme { return this._tilingScheme; }\r\n\r\n public override isTileAvailable(quadId: QuadId) {\r\n if (quadId.level > this.maxDepth)\r\n return false;\r\n\r\n return this._tileAvailability ? this._tileAvailability.isTileAvailable(quadId.level, quadId.column, quadId.row) : true;\r\n }\r\n\r\n public override async requestMeshData(args: RequestMeshDataArgs): Promise<Uint8Array | undefined> {\r\n const tile = args.tile;\r\n const quadId = tile.quadId;\r\n const tileUrl = this.constructUrl(quadId.row, quadId.column, quadId.level);\r\n const requestOptions: RequestOptions = {\r\n headers: {\r\n authorization: `Bearer ${this._accessToken}`,\r\n accept: \"application/vnd.quantized-mesh;\" /* extensions=octvertexnormals, */ + \"application/octet-stream;q=0.9,*/*;q=0.01\",\r\n },\r\n };\r\n\r\n try {\r\n const response = await request(tileUrl, \"arraybuffer\", requestOptions);\r\n return new Uint8Array(response);\r\n } catch (_) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async readMesh(args: ReadMeshArgs): Promise<RealityMeshParams | undefined> {\r\n // ###TODO why does he update the access token when reading the mesh instead of when requesting it?\r\n // This function only returns undefined if it fails to acquire token - but it doesn't need the token...\r\n if (BeTimePoint.now().milliseconds > this._tokenTimeOut.milliseconds) {\r\n const accessTokenAndEndpointUrl = await getCesiumAccessTokenAndEndpointUrl();\r\n if (!accessTokenAndEndpointUrl.token || args.isCanceled())\r\n return undefined;\r\n\r\n this._accessToken = accessTokenAndEndpointUrl.token;\r\n this._tokenTimeOut = BeTimePoint.now().plus(CesiumTerrainProvider._tokenTimeoutInterval);\r\n }\r\n\r\n const { data, tile } = args;\r\n assert(data instanceof Uint8Array);\r\n assert(tile instanceof MapTile);\r\n\r\n const blob = data;\r\n const streamBuffer = ByteStream.fromUint8Array(blob);\r\n const center = nextPoint3d64FromByteStream(streamBuffer);\r\n const quadId = QuadId.createFromContentId(tile.contentId);\r\n const skirtHeight = this.getLevelMaximumGeometricError(quadId.level + 1) * 10.0; // Add 1 to level to restore height calculation to before the quadId level was from root. (4326 unification)\r\n const minHeight = this._exaggeration * streamBuffer.readFloat32();\r\n const maxHeight = this._exaggeration * streamBuffer.readFloat32();\r\n const boundCenter = nextPoint3d64FromByteStream(streamBuffer);\r\n const boundRadius = streamBuffer.readFloat64();\r\n const horizonOcclusion = nextPoint3d64FromByteStream(streamBuffer);\r\n const terrainTile = tile;\r\n\r\n terrainTile.adjustHeights(minHeight, maxHeight);\r\n\r\n if (undefined === center || undefined === boundCenter || undefined === boundRadius || undefined === horizonOcclusion) { }\r\n const pointCount = streamBuffer.readUint32();\r\n const encodedVertexBuffer = new Uint16Array(blob.buffer, streamBuffer.curPos, pointCount * 3);\r\n streamBuffer.advance(pointCount * 6);\r\n\r\n const uBuffer = encodedVertexBuffer.subarray(0, pointCount);\r\n const vBuffer = encodedVertexBuffer.subarray(pointCount, 2 * pointCount);\r\n const heightBuffer = encodedVertexBuffer.subarray(pointCount * 2, 3 * pointCount);\r\n\r\n zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\r\n\r\n // ###TODO: This alleges to handle 32-bit indices, but RealityMeshParams uses a Uint16Array to store indices...\r\n const typedArray = pointCount > 0xffff ? Uint32Array : Uint16Array;\r\n const bytesPerIndex = typedArray.BYTES_PER_ELEMENT;\r\n const triangleElements = 3;\r\n\r\n // skip over any additional padding that was added for 2/4 byte alignment\r\n if (streamBuffer.curPos % bytesPerIndex !== 0)\r\n streamBuffer.advance(bytesPerIndex - (streamBuffer.curPos % bytesPerIndex));\r\n\r\n const triangleCount = streamBuffer.readUint32();\r\n const indexCount = triangleCount * triangleElements;\r\n\r\n const getIndexArray = (numIndices: number) => {\r\n const indexArray = new typedArray(streamBuffer.arrayBuffer, streamBuffer.curPos, numIndices);\r\n streamBuffer.advance(numIndices * bytesPerIndex);\r\n return indexArray;\r\n };\r\n\r\n const indices = getIndexArray(indexCount);\r\n\r\n // High water mark decoding based on decompressIndices_ in webgl-loader's loader.js.\r\n // https://code.google.com/p/webgl-loader/source/browse/trunk/samples/loader.js?r=99#55\r\n // Copyright 2012 Google Inc., Apache 2.0 license.\r\n let highest = 0;\r\n const length = indices.length;\r\n for (let i = 0; i < length; ++i) {\r\n const code = indices[i];\r\n indices[i] = highest - code;\r\n if (code === 0) {\r\n ++highest;\r\n }\r\n }\r\n\r\n CesiumTerrainProvider._scratchHeightRange.low = minHeight - skirtHeight;\r\n CesiumTerrainProvider._scratchHeightRange.high = maxHeight;\r\n const projection = terrainTile.getProjection(CesiumTerrainProvider._scratchHeightRange);\r\n const uvScale = 1.0 / 32767.0;\r\n const heightScale = uvScale * (maxHeight - minHeight);\r\n\r\n const westCount = streamBuffer.readUint32(),\r\n westIndices = getIndexArray(westCount),\r\n southCount = streamBuffer.readUint32(),\r\n southIndices = getIndexArray(southCount),\r\n eastCount = streamBuffer.readUint32(),\r\n eastIndices = getIndexArray(eastCount),\r\n northCount = streamBuffer.readUint32(),\r\n northIndices = getIndexArray(northCount);\r\n\r\n // Extensions...\r\n let encodedNormalsBuffer;\r\n while (streamBuffer.curPos < streamBuffer.length) {\r\n const extensionId = streamBuffer.readUint8();\r\n const extensionLength = streamBuffer.readUint32();\r\n switch (extensionId) {\r\n case QuantizedMeshExtensionIds.OctEncodedNormals:\r\n assert(pointCount * 2 === extensionLength);\r\n encodedNormalsBuffer = new Uint8Array(streamBuffer.arrayBuffer, streamBuffer.curPos, extensionLength);\r\n streamBuffer.advance(extensionLength);\r\n break;\r\n\r\n case QuantizedMeshExtensionIds.Metadata:\r\n const stringLength = streamBuffer.readUint32();\r\n if (stringLength > 0) {\r\n const strData = streamBuffer.nextBytes(stringLength);\r\n const str = utf8ToString(strData);\r\n if (undefined !== str) {\r\n const metaData = JSON.parse(str);\r\n if (undefined !== metaData.available && undefined !== this._tileAvailability) {\r\n const availableTiles = metaData.available;\r\n for (let offset = 0; offset < availableTiles.length; ++offset) {\r\n const availableLevel = tile.depth + offset; // Our depth is includes root (1 + cesium Depth)\r\n const rangesAtLevel = availableTiles[offset];\r\n\r\n for (const range of rangesAtLevel)\r\n this._tileAvailability.addAvailableTileRange(availableLevel, range.startX, range.startY, range.endX, range.endY);\r\n }\r\n }\r\n }\r\n }\r\n\r\n break;\r\n default:\r\n streamBuffer.advance(extensionLength);\r\n break;\r\n }\r\n }\r\n\r\n let initialIndexCapacity = indexCount;\r\n let initialVertexCapacity = pointCount;\r\n if (this._wantSkirts) {\r\n initialIndexCapacity += 6 * (Math.max(0, northCount - 1) + Math.max(0, southCount - 1) + Math.max(0, eastCount - 1) + Math.max(0, westCount - 1));\r\n initialVertexCapacity += (northCount + southCount + eastCount + westCount);\r\n }\r\n\r\n const wantNormals = undefined !== encodedNormalsBuffer;\r\n const builder = new RealityMeshParamsBuilder({\r\n positionRange: projection.localRange,\r\n initialIndexCapacity,\r\n initialVertexCapacity,\r\n wantNormals,\r\n });\r\n\r\n for (let i = 0; i < indexCount; i += 3)\r\n builder.addTriangle(indices[i], indices[i + 1], indices[i + 2]);\r\n\r\n const position = new Point3d();\r\n const uv = new QPoint2d();\r\n const normal = new Vector3d();\r\n const worldToEcef = tile.iModel.getEcefTransform().matrix;\r\n for (let i = 0; i < pointCount; i++) {\r\n const u = uBuffer[i];\r\n const v = vBuffer[i];\r\n projection.getPoint(uvScale * u, uvScale * v, minHeight + heightBuffer[i] * heightScale, position);\r\n uv.setFromScalars(u * 2, v * 2);\r\n let oen;\r\n if (encodedNormalsBuffer) {\r\n const normalIndex = i * 2;\r\n OctEncodedNormal.decodeValue(encodedNormalsBuffer[normalIndex + 1] << 8 | encodedNormalsBuffer[normalIndex], normal);\r\n worldToEcef.multiplyTransposeVector(normal, normal);\r\n oen = OctEncodedNormal.encode(normal);\r\n }\r\n\r\n builder.addVertex(position, uv, oen);\r\n }\r\n\r\n if (!this._wantSkirts)\r\n return builder.finish();\r\n\r\n westIndices.sort((a, b) => vBuffer[a] - vBuffer[b]);\r\n eastIndices.sort((a, b) => vBuffer[a] - vBuffer[b]);\r\n northIndices.sort((a, b) => uBuffer[a] - uBuffer[b]);\r\n southIndices.sort((a, b) => uBuffer[a] - uBuffer[b]);\r\n\r\n const generateSkirts = (indexes: Uint16Array | Uint32Array) => {\r\n const quv = new QPoint2d();\r\n const param = new Point2d();\r\n for (let i = 0; i < indexes.length; i++) {\r\n const index = indexes[i];\r\n const uvIndex = index * 2;\r\n const height = minHeight + heightBuffer[index] * heightScale;\r\n\r\n quv.setFromScalars(builder.uvs.buffer.at(uvIndex), builder.uvs.buffer.at(uvIndex + 1));\r\n builder.uvs.params.unquantize(quv.x, quv.y, param);\r\n\r\n const oen = wantNormals && builder.normals ? builder.normals.at(index) : undefined;\r\n builder.addVertex(projection.getPoint(param.x, param.y, height - skirtHeight), quv, oen);\r\n\r\n if (i !== 0) {\r\n const nextPointIndex = builder.positions.length;\r\n builder.addTriangle(index, indexes[i - 1], nextPointIndex - 2);\r\n builder.addTriangle(index, nextPointIndex - 2, nextPointIndex - 1);\r\n }\r\n }\r\n };\r\n\r\n generateSkirts(westIndices);\r\n generateSkirts(eastIndices);\r\n generateSkirts(southIndices);\r\n generateSkirts(northIndices);\r\n\r\n return builder.finish();\r\n }\r\n\r\n public constructUrl(row: number, column: number, zoomLevel: number): string {\r\n return this._tileUrlTemplate.replace(\"{z}\", zoomLevel.toString()).replace(\"{x}\", column.toString()).replace(\"{y}\", row.toString());\r\n }\r\n\r\n /**\r\n * Specifies the quality of terrain created from heightmaps. A value of 1.0 will\r\n * ensure that adjacent heightmap vertices are separated by no more than\r\n * screen pixels and will probably go very slowly.\r\n * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the\r\n * screen pixels between adjacent heightmap vertices and thus rendering more quickly.\r\n * @type {Number}\r\n */\r\n public readonly heightmapTerrainQuality = 0.25;\r\n\r\n /**\r\n * Determines an appropriate geometric error estimate when the geometry comes from a heightmap.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached.\r\n * @param {Number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile.\r\n * @param {Number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero.\r\n * @returns {Number} An estimated geometric error.\r\n */\r\n public getEstimatedLevelZeroGeometricErrorForAHeightmap(ellipsoidMaximumRadius = 6378137, tileImageWidth = 65, numberOfTilesAtLevelZero = 2) {\r\n return ellipsoidMaximumRadius * 2 * Math.PI * this.heightmapTerrainQuality / (tileImageWidth * numberOfTilesAtLevelZero);\r\n }\r\n\r\n public getLevelMaximumGeometricError(level: number) {\r\n return this.getEstimatedLevelZeroGeometricErrorForAHeightmap() / (1 << level);\r\n }\r\n\r\n public getHeightRange(parentRange: Range1d, quadId: QuadId): Range1d {\r\n const heightRange = quadId.level <= 6 ? ApproximateTerrainHeights.instance.getTileHeightRange(quadId) : undefined;\r\n\r\n return undefined === heightRange ? parentRange : heightRange;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CesiumTerrainProvider.js","sourceRoot":"","sources":["../../../../src/tile/map/CesiumTerrainProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { assert, BeDuration, BeTimePoint, ByteStream, JsonUtils, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Range1d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { CesiumTerrainAssetId, nextPoint3d64FromByteStream, OctEncodedNormal, QPoint2d } from \"@itwin/core-common\";\r\nimport { MessageSeverity } from \"@itwin/appui-abstract\";\r\nimport { request, RequestOptions } from \"../../request/Request\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { RealityMeshParams, RealityMeshParamsBuilder } from \"../../render/RealityMeshParams\";\r\nimport {\r\n GeographicTilingScheme, MapTile, MapTilingScheme, QuadId, ReadMeshArgs, RequestMeshDataArgs, TerrainMeshProvider,\r\n TerrainMeshProviderOptions, Tile, TileAvailability,\r\n} from \"../internal\";\r\n\r\n/** @internal */\r\nenum QuantizedMeshExtensionIds {\r\n OctEncodedNormals = 1,\r\n WaterMask = 2,\r\n Metadata = 4,\r\n}\r\n\r\n/** Return the URL for a Cesium ION asset from its asset ID and request Key.\r\n * @public\r\n */\r\nexport function getCesiumAssetUrl(osmAssetId: number, requestKey: string): string {\r\n return `$CesiumIonAsset=${osmAssetId}:${requestKey}`;\r\n}\r\n/** @internal */\r\nexport function getCesiumOSMBuildingsUrl(): string | undefined {\r\n const key = IModelApp.tileAdmin.cesiumIonKey;\r\n if (undefined === key)\r\n return undefined;\r\n\r\n const osmBuildingAssetId = 96188;\r\n return getCesiumAssetUrl(osmBuildingAssetId, key);\r\n}\r\n\r\n/** @internal */\r\nexport async function getCesiumAccessTokenAndEndpointUrl(assetId: string, requestKey?: string): Promise<{ token?: string, url?: string }> {\r\n if (undefined === requestKey) {\r\n requestKey = IModelApp.tileAdmin.cesiumIonKey;\r\n if (undefined === requestKey)\r\n return {};\r\n }\r\n\r\n const requestTemplate = `https://api.cesium.com/v1/assets/${assetId}/endpoint?access_token={CesiumRequestToken}`;\r\n const apiUrl: string = requestTemplate.replace(\"{CesiumRequestToken}\", requestKey);\r\n\r\n try {\r\n const apiResponse = await request(apiUrl, \"json\");\r\n if (undefined === apiResponse || undefined === apiResponse.url) {\r\n assert(false);\r\n return {};\r\n }\r\n return { token: apiResponse.accessToken, url: apiResponse.url };\r\n } catch (error) {\r\n assert(false);\r\n return {};\r\n }\r\n}\r\n\r\nlet notifiedTerrainError = false;\r\n\r\n// Notify - once per session - of failure to obtain Cesium terrain provider.\r\nfunction notifyTerrainError(detailedDescription?: string): void {\r\n if (notifiedTerrainError)\r\n return;\r\n\r\n notifiedTerrainError = true;\r\n IModelApp.notifications.displayMessage(MessageSeverity.Information, IModelApp.localization.getLocalizedString(`iModelJs:BackgroundMap.CannotObtainTerrain`), detailedDescription);\r\n}\r\n\r\n/** @internal */\r\nexport async function getCesiumTerrainProvider(opts: TerrainMeshProviderOptions): Promise<TerrainMeshProvider | undefined> {\r\n const accessTokenAndEndpointUrl = await getCesiumAccessTokenAndEndpointUrl(opts.dataSource || CesiumTerrainAssetId.Default);\r\n if (!accessTokenAndEndpointUrl.token || !accessTokenAndEndpointUrl.url) {\r\n notifyTerrainError(IModelApp.localization.getLocalizedString(`iModelJs:BackgroundMap.MissingCesiumToken`));\r\n return undefined;\r\n }\r\n\r\n let layers;\r\n try {\r\n const layerRequestOptions: RequestOptions = { headers: { authorization: `Bearer ${accessTokenAndEndpointUrl.token}` } };\r\n const layerUrl = `${accessTokenAndEndpointUrl.url}layer.json`;\r\n layers = await request(layerUrl, \"json\", layerRequestOptions);\r\n } catch (error) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n if (undefined === layers || undefined === layers.tiles || undefined === layers.version) {\r\n notifyTerrainError();\r\n return undefined;\r\n }\r\n\r\n const tilingScheme = new GeographicTilingScheme();\r\n let tileAvailability;\r\n if (undefined !== layers.available) {\r\n const availableTiles = layers.available;\r\n tileAvailability = new TileAvailability(tilingScheme, availableTiles.length);\r\n for (let level = 0; level < layers.available.length; level++) {\r\n const rangesAtLevel = availableTiles[level];\r\n for (const range of rangesAtLevel) {\r\n tileAvailability.addAvailableTileRange(level, range.startX, range.startY, range.endX, range.endY);\r\n }\r\n }\r\n }\r\n\r\n let tileUrlTemplate = accessTokenAndEndpointUrl.url + layers.tiles[0].replace(\"{version}\", layers.version);\r\n if (opts.wantNormals)\r\n tileUrlTemplate = tileUrlTemplate.replace(\"?\", \"?extensions=octvertexnormals-watermask-metadata&\");\r\n\r\n const maxDepth = JsonUtils.asInt(layers.maxzoom, 19);\r\n\r\n // TBD -- When we have an API extract the heights for the project from the terrain tiles - for use temporary Bing elevation.\r\n return new CesiumTerrainProvider(opts, accessTokenAndEndpointUrl.token, tileUrlTemplate, maxDepth, tilingScheme, tileAvailability, layers.metadataAvailability);\r\n}\r\n\r\nfunction zigZagDecode(value: number) {\r\n return (value >> 1) ^ (-(value & 1));\r\n}\r\n\r\n/**\r\n * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place.\r\n *\r\n * @see {@link https://github.com/AnalyticalGraphicsInc/quantized-mesh|quantized-mesh-1.0 terrain format}\r\n */\r\nfunction zigZagDeltaDecode(uBuffer: Uint16Array, vBuffer: Uint16Array, heightBuffer: Uint16Array) {\r\n const count = uBuffer.length;\r\n let u = 0;\r\n let v = 0;\r\n let height = 0;\r\n\r\n for (let i = 0; i < count; ++i) {\r\n u += zigZagDecode(uBuffer[i]);\r\n v += zigZagDecode(vBuffer[i]);\r\n\r\n uBuffer[i] = u;\r\n vBuffer[i] = v;\r\n\r\n height += zigZagDecode(heightBuffer[i]);\r\n heightBuffer[i] = height;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass CesiumTerrainProvider extends TerrainMeshProvider {\r\n private _accessToken: string;\r\n private readonly _tileUrlTemplate: string;\r\n private readonly _maxDepth: number;\r\n private readonly _wantSkirts: boolean;\r\n private readonly _tilingScheme: MapTilingScheme;\r\n private readonly _tileAvailability?: TileAvailability;\r\n private readonly _metaDataAvailableLevel?: number;\r\n private readonly _exaggeration: number;\r\n private readonly _assetId: string;\r\n\r\n private static _scratchQPoint2d = QPoint2d.fromScalars(0, 0);\r\n private static _scratchPoint2d = Point2d.createZero();\r\n private static _scratchPoint = Point3d.createZero();\r\n private static _scratchNormal = Vector3d.createZero();\r\n private static _scratchHeightRange = Range1d.createNull();\r\n private static _tokenTimeoutInterval = BeDuration.fromSeconds(60 * 30); // Request a new access token every 30 minutes...\r\n private _tokenTimeOut: BeTimePoint;\r\n\r\n public override forceTileLoad(tile: Tile): boolean {\r\n // Force loading of the metadata availability tiles as these are required for determining the availability of descendants.\r\n const mapTile = tile as MapTile;\r\n return undefined !== this._metaDataAvailableLevel && mapTile.quadId.level === this._metaDataAvailableLevel && !mapTile.everLoaded;\r\n }\r\n\r\n constructor(opts: TerrainMeshProviderOptions, accessToken: string, tileUrlTemplate: string, maxDepth: number, tilingScheme: MapTilingScheme,\r\n tileAvailability: TileAvailability | undefined, metaDataAvailableLevel: number | undefined) {\r\n super();\r\n this._wantSkirts = opts.wantSkirts;\r\n this._exaggeration = opts.exaggeration;\r\n\r\n this._accessToken = accessToken;\r\n this._tileUrlTemplate = tileUrlTemplate;\r\n this._maxDepth = maxDepth;\r\n this._tilingScheme = tilingScheme;\r\n this._tileAvailability = tileAvailability;\r\n this._metaDataAvailableLevel = metaDataAvailableLevel;\r\n this._assetId = opts.dataSource || CesiumTerrainAssetId.Default;\r\n\r\n this._tokenTimeOut = BeTimePoint.now().plus(CesiumTerrainProvider._tokenTimeoutInterval);\r\n }\r\n\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (cards.dataset.cesiumIonLogoCard)\r\n return;\r\n\r\n cards.dataset.cesiumIonLogoCard = \"true\";\r\n let notice = IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.CesiumWorldTerrainAttribution\");\r\n if (this._assetId === CesiumTerrainAssetId.Bathymetry)\r\n notice = `${notice}\\n${IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.CesiumBathymetryAttribution\")}`;\r\n\r\n const card = IModelApp.makeLogoCard({ iconSrc: `${IModelApp.publicPath}images/cesium-ion.svg`, heading: \"Cesium Ion\", notice });\r\n cards.appendChild(card);\r\n }\r\n\r\n public get maxDepth(): number { return this._maxDepth; }\r\n public get tilingScheme(): MapTilingScheme { return this._tilingScheme; }\r\n\r\n public override isTileAvailable(quadId: QuadId) {\r\n if (quadId.level > this.maxDepth)\r\n return false;\r\n\r\n return this._tileAvailability ? this._tileAvailability.isTileAvailable(quadId.level, quadId.column, quadId.row) : true;\r\n }\r\n\r\n public override async requestMeshData(args: RequestMeshDataArgs): Promise<Uint8Array | undefined> {\r\n const tile = args.tile;\r\n const quadId = tile.quadId;\r\n const tileUrl = this.constructUrl(quadId.row, quadId.column, quadId.level);\r\n const requestOptions: RequestOptions = {\r\n headers: {\r\n authorization: `Bearer ${this._accessToken}`,\r\n accept: \"application/vnd.quantized-mesh;\" /* extensions=octvertexnormals, */ + \"application/octet-stream;q=0.9,*/*;q=0.01\",\r\n },\r\n };\r\n\r\n try {\r\n const response = await request(tileUrl, \"arraybuffer\", requestOptions);\r\n return new Uint8Array(response);\r\n } catch (_) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public override async readMesh(args: ReadMeshArgs): Promise<RealityMeshParams | undefined> {\r\n // ###TODO why does he update the access token when reading the mesh instead of when requesting it?\r\n // This function only returns undefined if it fails to acquire token - but it doesn't need the token...\r\n if (BeTimePoint.now().milliseconds > this._tokenTimeOut.milliseconds) {\r\n const accessTokenAndEndpointUrl = await getCesiumAccessTokenAndEndpointUrl(this._assetId);\r\n if (!accessTokenAndEndpointUrl.token || args.isCanceled())\r\n return undefined;\r\n\r\n this._accessToken = accessTokenAndEndpointUrl.token;\r\n this._tokenTimeOut = BeTimePoint.now().plus(CesiumTerrainProvider._tokenTimeoutInterval);\r\n }\r\n\r\n const { data, tile } = args;\r\n assert(data instanceof Uint8Array);\r\n assert(tile instanceof MapTile);\r\n\r\n const blob = data;\r\n const streamBuffer = ByteStream.fromUint8Array(blob);\r\n const center = nextPoint3d64FromByteStream(streamBuffer);\r\n const quadId = QuadId.createFromContentId(tile.contentId);\r\n const skirtHeight = this.getLevelMaximumGeometricError(quadId.level + 1) * 10.0; // Add 1 to level to restore height calculation to before the quadId level was from root. (4326 unification)\r\n const minHeight = this._exaggeration * streamBuffer.readFloat32();\r\n const maxHeight = this._exaggeration * streamBuffer.readFloat32();\r\n const boundCenter = nextPoint3d64FromByteStream(streamBuffer);\r\n const boundRadius = streamBuffer.readFloat64();\r\n const horizonOcclusion = nextPoint3d64FromByteStream(streamBuffer);\r\n const terrainTile = tile;\r\n\r\n terrainTile.adjustHeights(minHeight, maxHeight);\r\n\r\n if (undefined === center || undefined === boundCenter || undefined === boundRadius || undefined === horizonOcclusion) { }\r\n const pointCount = streamBuffer.readUint32();\r\n const encodedVertexBuffer = new Uint16Array(blob.buffer, streamBuffer.curPos, pointCount * 3);\r\n streamBuffer.advance(pointCount * 6);\r\n\r\n const uBuffer = encodedVertexBuffer.subarray(0, pointCount);\r\n const vBuffer = encodedVertexBuffer.subarray(pointCount, 2 * pointCount);\r\n const heightBuffer = encodedVertexBuffer.subarray(pointCount * 2, 3 * pointCount);\r\n\r\n zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\r\n\r\n // ###TODO: This alleges to handle 32-bit indices, but RealityMeshParams uses a Uint16Array to store indices...\r\n const typedArray = pointCount > 0xffff ? Uint32Array : Uint16Array;\r\n const bytesPerIndex = typedArray.BYTES_PER_ELEMENT;\r\n const triangleElements = 3;\r\n\r\n // skip over any additional padding that was added for 2/4 byte alignment\r\n if (streamBuffer.curPos % bytesPerIndex !== 0)\r\n streamBuffer.advance(bytesPerIndex - (streamBuffer.curPos % bytesPerIndex));\r\n\r\n const triangleCount = streamBuffer.readUint32();\r\n const indexCount = triangleCount * triangleElements;\r\n\r\n const getIndexArray = (numIndices: number) => {\r\n const indexArray = new typedArray(streamBuffer.arrayBuffer, streamBuffer.curPos, numIndices);\r\n streamBuffer.advance(numIndices * bytesPerIndex);\r\n return indexArray;\r\n };\r\n\r\n const indices = getIndexArray(indexCount);\r\n\r\n // High water mark decoding based on decompressIndices_ in webgl-loader's loader.js.\r\n // https://code.google.com/p/webgl-loader/source/browse/trunk/samples/loader.js?r=99#55\r\n // Copyright 2012 Google Inc., Apache 2.0 license.\r\n let highest = 0;\r\n const length = indices.length;\r\n for (let i = 0; i < length; ++i) {\r\n const code = indices[i];\r\n indices[i] = highest - code;\r\n if (code === 0) {\r\n ++highest;\r\n }\r\n }\r\n\r\n CesiumTerrainProvider._scratchHeightRange.low = minHeight - skirtHeight;\r\n CesiumTerrainProvider._scratchHeightRange.high = maxHeight;\r\n const projection = terrainTile.getProjection(CesiumTerrainProvider._scratchHeightRange);\r\n const uvScale = 1.0 / 32767.0;\r\n const heightScale = uvScale * (maxHeight - minHeight);\r\n\r\n const westCount = streamBuffer.readUint32(),\r\n westIndices = getIndexArray(westCount),\r\n southCount = streamBuffer.readUint32(),\r\n southIndices = getIndexArray(southCount),\r\n eastCount = streamBuffer.readUint32(),\r\n eastIndices = getIndexArray(eastCount),\r\n northCount = streamBuffer.readUint32(),\r\n northIndices = getIndexArray(northCount);\r\n\r\n // Extensions...\r\n let encodedNormalsBuffer;\r\n while (streamBuffer.curPos < streamBuffer.length) {\r\n const extensionId = streamBuffer.readUint8();\r\n const extensionLength = streamBuffer.readUint32();\r\n switch (extensionId) {\r\n case QuantizedMeshExtensionIds.OctEncodedNormals:\r\n assert(pointCount * 2 === extensionLength);\r\n encodedNormalsBuffer = new Uint8Array(streamBuffer.arrayBuffer, streamBuffer.curPos, extensionLength);\r\n streamBuffer.advance(extensionLength);\r\n break;\r\n\r\n case QuantizedMeshExtensionIds.Metadata:\r\n const stringLength = streamBuffer.readUint32();\r\n if (stringLength > 0) {\r\n const strData = streamBuffer.nextBytes(stringLength);\r\n const str = utf8ToString(strData);\r\n if (undefined !== str) {\r\n const metaData = JSON.parse(str);\r\n if (undefined !== metaData.available && undefined !== this._tileAvailability) {\r\n const availableTiles = metaData.available;\r\n for (let offset = 0; offset < availableTiles.length; ++offset) {\r\n const availableLevel = tile.depth + offset; // Our depth is includes root (1 + cesium Depth)\r\n const rangesAtLevel = availableTiles[offset];\r\n\r\n for (const range of rangesAtLevel)\r\n this._tileAvailability.addAvailableTileRange(availableLevel, range.startX, range.startY, range.endX, range.endY);\r\n }\r\n }\r\n }\r\n }\r\n\r\n break;\r\n default:\r\n streamBuffer.advance(extensionLength);\r\n break;\r\n }\r\n }\r\n\r\n let initialIndexCapacity = indexCount;\r\n let initialVertexCapacity = pointCount;\r\n if (this._wantSkirts) {\r\n initialIndexCapacity += 6 * (Math.max(0, northCount - 1) + Math.max(0, southCount - 1) + Math.max(0, eastCount - 1) + Math.max(0, westCount - 1));\r\n initialVertexCapacity += (northCount + southCount + eastCount + westCount);\r\n }\r\n\r\n const wantNormals = undefined !== encodedNormalsBuffer;\r\n const builder = new RealityMeshParamsBuilder({\r\n positionRange: projection.localRange,\r\n initialIndexCapacity,\r\n initialVertexCapacity,\r\n wantNormals,\r\n });\r\n\r\n for (let i = 0; i < indexCount; i += 3)\r\n builder.addTriangle(indices[i], indices[i + 1], indices[i + 2]);\r\n\r\n const position = new Point3d();\r\n const uv = new QPoint2d();\r\n const normal = new Vector3d();\r\n const worldToEcef = tile.iModel.getEcefTransform().matrix;\r\n for (let i = 0; i < pointCount; i++) {\r\n const u = uBuffer[i];\r\n const v = vBuffer[i];\r\n projection.getPoint(uvScale * u, uvScale * v, minHeight + heightBuffer[i] * heightScale, position);\r\n uv.setFromScalars(u * 2, v * 2);\r\n let oen;\r\n if (encodedNormalsBuffer) {\r\n const normalIndex = i * 2;\r\n OctEncodedNormal.decodeValue(encodedNormalsBuffer[normalIndex + 1] << 8 | encodedNormalsBuffer[normalIndex], normal);\r\n worldToEcef.multiplyTransposeVector(normal, normal);\r\n oen = OctEncodedNormal.encode(normal);\r\n }\r\n\r\n builder.addVertex(position, uv, oen);\r\n }\r\n\r\n if (!this._wantSkirts)\r\n return builder.finish();\r\n\r\n westIndices.sort((a, b) => vBuffer[a] - vBuffer[b]);\r\n eastIndices.sort((a, b) => vBuffer[a] - vBuffer[b]);\r\n northIndices.sort((a, b) => uBuffer[a] - uBuffer[b]);\r\n southIndices.sort((a, b) => uBuffer[a] - uBuffer[b]);\r\n\r\n const generateSkirts = (indexes: Uint16Array | Uint32Array) => {\r\n const quv = new QPoint2d();\r\n const param = new Point2d();\r\n for (let i = 0; i < indexes.length; i++) {\r\n const index = indexes[i];\r\n const uvIndex = index * 2;\r\n const height = minHeight + heightBuffer[index] * heightScale;\r\n\r\n quv.setFromScalars(builder.uvs.buffer.at(uvIndex), builder.uvs.buffer.at(uvIndex + 1));\r\n builder.uvs.params.unquantize(quv.x, quv.y, param);\r\n\r\n const oen = wantNormals && builder.normals ? builder.normals.at(index) : undefined;\r\n builder.addVertex(projection.getPoint(param.x, param.y, height - skirtHeight), quv, oen);\r\n\r\n if (i !== 0) {\r\n const nextPointIndex = builder.positions.length;\r\n builder.addTriangle(index, indexes[i - 1], nextPointIndex - 2);\r\n builder.addTriangle(index, nextPointIndex - 2, nextPointIndex - 1);\r\n }\r\n }\r\n };\r\n\r\n generateSkirts(westIndices);\r\n generateSkirts(eastIndices);\r\n generateSkirts(southIndices);\r\n generateSkirts(northIndices);\r\n\r\n return builder.finish();\r\n }\r\n\r\n public constructUrl(row: number, column: number, zoomLevel: number): string {\r\n return this._tileUrlTemplate.replace(\"{z}\", zoomLevel.toString()).replace(\"{x}\", column.toString()).replace(\"{y}\", row.toString());\r\n }\r\n\r\n /**\r\n * Specifies the quality of terrain created from heightmaps. A value of 1.0 will\r\n * ensure that adjacent heightmap vertices are separated by no more than\r\n * screen pixels and will probably go very slowly.\r\n * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the\r\n * screen pixels between adjacent heightmap vertices and thus rendering more quickly.\r\n * @type {Number}\r\n */\r\n public readonly heightmapTerrainQuality = 0.25;\r\n\r\n /**\r\n * Determines an appropriate geometric error estimate when the geometry comes from a heightmap.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached.\r\n * @param {Number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile.\r\n * @param {Number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero.\r\n * @returns {Number} An estimated geometric error.\r\n */\r\n public getEstimatedLevelZeroGeometricErrorForAHeightmap(ellipsoidMaximumRadius = 6378137, tileImageWidth = 65, numberOfTilesAtLevelZero = 2) {\r\n return ellipsoidMaximumRadius * 2 * Math.PI * this.heightmapTerrainQuality / (tileImageWidth * numberOfTilesAtLevelZero);\r\n }\r\n\r\n public getLevelMaximumGeometricError(level: number) {\r\n return this.getEstimatedLevelZeroGeometricErrorForAHeightmap() / (1 << level);\r\n }\r\n\r\n public getHeightRange(parentRange: Range1d, quadId: QuadId): Range1d {\r\n const heightRange = quadId.level <= 6 ? ApproximateTerrainHeights.instance.getTileHeightRange(quadId) : undefined;\r\n\r\n return undefined === heightRange ? parentRange : heightRange;\r\n }\r\n}\r\n"]}
@@ -188,6 +188,7 @@ interface MapTreeId {
188
188
  tileUserId: number;
189
189
  applyTerrain: boolean;
190
190
  terrainProviderName: string;
191
+ terrainDataSource: string;
191
192
  terrainHeightOrigin: number;
192
193
  terrainHeightOriginMode: number;
193
194
  terrainExaggeration: number;
@@ -1 +1 @@
1
- {"version":3,"file":"MapTileTree.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapTileTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MapTileTree.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapTileTree.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAqI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpL,OAAO,EACL,qBAAqB,EAAE,iBAAiB,EAAgB,QAAQ,EAAqC,SAAS,EAAE,gBAAgB,EACjI,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACwB,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAC9G,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAgC,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAC+E,oBAAoB,EAA4B,yBAAyB,EAClI,4BAA4B,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,aAAa,EAAE,yBAAyB,EAAE,OAAO,EAC5O,aAAa,EAAE,eAAe,EAAE,8BAA8B,EAAmB,MAAM,EACvF,WAAW,EAAuB,eAAe,EAAE,qBAAqB,EAA8B,IAAI,EAAE,YAAY,EAAoB,UAAU,EAAE,QAAQ,EAC5I,aAAa,EAAE,iBAAiB,EACrD,MAAM,aAAa,CAAC;AAOrB;;GAEG;AACH,UAAU,mBAAmB;IAC3B,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;WACW;AACX,oBAAY,+BAA+B;IACzC,8DAA8D;IAC9D,OAAO,IAAI;IAEX,kFAAkF;IAClF,OAAO,IAAA;IAEP,kFAAkF;IAClF,MAAM,IAAA;IAEN,6HAA6H;IAC7H,OAAO,IAAA;CACR;AAED;;;EAGE;AACF,MAAM,WAAW,wBAAwB;IACvC,0DAA0D;IAC1D,WAAW,EAAE,OAAO,CAAC;IAErB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,oDAAoD;IACpD,QAAQ,EAAE,gBAAgB,CAAC;IAE3B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED;;;;;;;;GAQG;AAEH,qBAAa,WAAY,SAAQ,eAAe;IAC9C,gBAAgB;IACT,QAAQ,EAAE,SAAS,CAAC;IAC3B,gBAAgB;IACT,gBAAgB,EAAE,MAAM,CAAC;IAChC,gBAAgB;IACT,cAAc,EAAE,MAAM,CAAC;IAC9B,gBAAgB;IACT,kBAAkB,EAAE,eAAe,CAAC;IAC3C,gBAAgB;IAChB,OAAO,CAAC,qBAAqB,CAAY;IACzC,gBAAgB;IACT,cAAc,EAAE,SAAS,CAAC;IACjC,gBAAgB;IACT,iBAAiB,EAAE,SAAS,CAAC;IACpC,gBAAgB;IACT,iBAAiB,EAAE,SAAS,CAAC;IACpC,sEAAsE;IACtE,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,gBAAgB;IACT,WAAW,EAAE,OAAO,CAAC;IAC5B,gBAAgB;IAChB,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,gBAAgB;IACT,cAAc,EAAE,OAAO,CAAC;IAC/B,gBAAgB;IACT,SAAS,EAAE,OAAO,CAAC;IAC1B,gBAAgB;IACT,mBAAmB,EAAE,MAAM,CAAC;IACnC,gBAAgB;IACT,SAAS,CAAC,EAAE,QAAQ,CAAC;IAC5B,gBAAgB;IACT,eAAe,EAAE,OAAO,CAAC;IAChC,gBAAgB;IACT,cAAc,EAAE,OAAO,CAAC;IAC/B,gBAAgB;IACT,eAAe,CAAC,EAAE,OAAO,CAAC;IACjC,gBAAgB;IACT,iBAAiB,EAAE,mBAAmB,EAAE,CAAM;IACrD,OAAO,CAAC,cAAc,CAA2C;IACjE,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,eAAe,CAAiC;IACxD,gBAAgB;IACT,gBAAgB,sCAA6C;IAEpE,gBAAgB;gBACJ,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAC9G,kBAAkB,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO;IA+C3E,gBAAgB;IAChB,IAAoB,2BAA2B,YAI9C;IAED;;OAEG;IACI,mBAAmB,CAAC,aAAa,EAAE,MAAM;IAIhD;;OAEG;IACI,qBAAqB;IAQ5B,gBAAgB;IACT,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI1D;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO;IAQrH,gBAAgB;IACT,aAAa,CAAC,YAAY,EAAE,8BAA8B,EAAE,OAAO,EAAE,YAAY;IAMxF,gBAAgB;cACG,yBAAyB,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE;IAU7F,gBAAgB;IACT,+BAA+B;IAOtC,gBAAgB;IAChB,IAAoB,aAAa,YAEhC;IAED,gBAAgB;IAChB,IAAoB,QAAQ,WAK3B;IAED,gBAAgB;IACT,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAmBjM,gBAAgB;IACT,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO;IAInL,gBAAgB;IACT,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAI9G,gBAAgB;IACT,WAAW;IAIlB;;OAEG;IACH,OAAc,oBAAoB,SAAK;IACvC,gBAAgB;IAChB,OAAc,oBAAoB,SAAK;IACvC,gBAAgB;IAChB,OAAc,mBAAmB,SAAK;IACtC,gBAAgB;IAChB,IAAW,SAAS,kBAA2C;IAE/D,gBAAgB;IACA,mBAAmB,CAAC,YAAY,EAAE,YAAY;IAK9D,gBAAgB;IACT,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAWjD,gBAAgB;IACA,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAWxD,gBAAgB;IACT,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,KAAK,EAAE,GAAG,SAAS;IAiBvE,gBAAgB;IACT,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAInD,OAAO,CAAC,kCAAkC;IAoB1C,OAAO,CAAC,6BAA6B;IAYrC,gBAAgB;IACT,0BAA0B,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS;IAiB7F;;;OAGG;IACU,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhE,OAAO,CAAC,MAAM,CAAC,aAAa,CAA6B;IAEzD;;;OAGG;IACI,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI;IA4C/H;;;OAGG;IACa,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE;IA6EhF,gBAAgB;IACT,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAS1D,gBAAgB;IACT,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAI1D,gBAAgB;IACT,aAAa,CAAC,aAAa,EAAE,UAAU;IAK9C,gBAAgB;IACT,oBAAoB,CAAC,aAAa,EAAE,UAAU,GAAG,MAAM;CAK/D;AAED,UAAU,SAAS;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAmJD,gBAAgB;AAChB,KAAK,2BAA2B,GAAG,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAE7E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;IAavD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,cAAc;IAGf,SAAS,EAAE,OAAO;IACzB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,uBAAuB,CAAC;IAlBlC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,UAAU,CAAC,CAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsD;IAClF,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,eAAe,CAAC,CAAsB;gBAG5C,QAAQ,EAAE,qBAAqB,EACvB,kBAAkB,EAAE,iBAAiB,GAAG,SAAS,EACjD,cAAc,EAAE,gBAAgB,EAAE,EAC1C,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EACX,SAAS,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,EACjB,uBAAuB,CAAC,yCAA6B;IA8BxD,uBAAuB,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IAO5E,IAAoB,QAAQ,YAAmB;IAC/C,IAAW,SAAS,IAAI,QAAQ,GAAG,SAAS,CAA4B;IACxE,IAAoB,sBAAsB,IAAI,MAAM,CAAiD;cAElF,4BAA4B,IAAI,yBAAyB,GAAG,SAAS;IAYxF,wEAAwE;IACxD,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IACpD,IAAW,QAAQ,IAAI,qBAAqB,CAA2B;IACvE,IAAW,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,EAGlD;IACM,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB;IA0BhE,IAAW,aAAa,IAAI,gBAAgB,EAAE,CAE7C;IAEM,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,EAAE;IAalD,WAAW;IAMlB,IAAoB,YAAY,YAE/B;IAED,cAAuB,kBAAkB,IAAI,OAAO,CAOnD;IACD,IAAW,cAAc,YAExB;IAED,IAAW,SAAS,IAAI,aAAa,CAuCpC;IACM,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAMnF;;KAEC;IACM,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,+BAA+B;IAc/E,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO;IA8CvD,+IAA+I;IAC/H,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IA4BvC,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS;cAS5D,oBAAoB,CAAC,KAAK,EAAE,QAAQ;cAIpC,qBAAqB,CAAC,KAAK,EAAE,QAAQ;IAIxC,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAU7D,2BAA2B,CAAC,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,GAAG,4BAA4B,EAAE;IAarH,qBAAqB,CAAC,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,GAAG,wBAAwB,EAAE;YAYpG,qBAAqB;IAmDb,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IAkCrE,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,EAAE,GAAG,SAAS,CAAC;IA0BpI,kCAAkC;IAClB,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,GAAG,IAAI;CAahF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,oBAiBtE"}
@@ -496,13 +496,16 @@ class MapTreeSupplier {
496
496
  // Terrain-only settings.
497
497
  cmp = (0, core_bentley_1.compareStrings)(lhs.terrainProviderName, rhs.terrainProviderName);
498
498
  if (0 === cmp) {
499
- cmp = (0, core_bentley_1.compareNumbers)(lhs.terrainHeightOrigin, rhs.terrainHeightOrigin);
499
+ cmp = (0, core_bentley_1.compareStringsOrUndefined)(lhs.terrainDataSource, rhs.terrainDataSource);
500
500
  if (0 === cmp) {
501
- cmp = (0, core_bentley_1.compareNumbers)(lhs.terrainHeightOriginMode, rhs.terrainHeightOriginMode);
501
+ cmp = (0, core_bentley_1.compareNumbers)(lhs.terrainHeightOrigin, rhs.terrainHeightOrigin);
502
502
  if (0 === cmp) {
503
- cmp = (0, core_bentley_1.compareNumbers)(lhs.terrainExaggeration, rhs.terrainExaggeration);
504
- if (0 === cmp)
505
- cmp = (0, core_bentley_1.compareBooleansOrUndefined)(lhs.produceGeometry, rhs.produceGeometry);
503
+ cmp = (0, core_bentley_1.compareNumbers)(lhs.terrainHeightOriginMode, rhs.terrainHeightOriginMode);
504
+ if (0 === cmp) {
505
+ cmp = (0, core_bentley_1.compareNumbers)(lhs.terrainExaggeration, rhs.terrainExaggeration);
506
+ if (0 === cmp)
507
+ cmp = (0, core_bentley_1.compareBooleansOrUndefined)(lhs.produceGeometry, rhs.produceGeometry);
508
+ }
506
509
  }
507
510
  }
508
511
  }
@@ -545,6 +548,7 @@ class MapTreeSupplier {
545
548
  wantSkirts: id.wantSkirts,
546
549
  exaggeration: id.terrainExaggeration,
547
550
  wantNormals: id.wantNormals,
551
+ dataSource: id.terrainDataSource,
548
552
  };
549
553
  if (id.applyTerrain) {
550
554
  await ApproximateTerrainHeights_1.ApproximateTerrainHeights.instance.initialize();
@@ -703,6 +707,7 @@ class MapTileTreeReference extends internal_1.TileTreeReference {
703
707
  tileUserId: this._tileUserId,
704
708
  applyTerrain: this.settings.applyTerrain && !this._isDrape,
705
709
  terrainProviderName: this.settings.terrainSettings.providerName,
710
+ terrainDataSource: this.settings.terrainSettings.dataSource,
706
711
  terrainHeightOrigin: this.settings.terrainSettings.heightOrigin,
707
712
  terrainHeightOriginMode: this.settings.terrainSettings.heightOriginMode,
708
713
  terrainExaggeration: this.settings.terrainSettings.exaggeration,
@@ -751,12 +756,15 @@ class MapTileTreeReference extends internal_1.TileTreeReference {
751
756
  return MapTileTreeScaleRangeVisibility.Unknown;
752
757
  }
753
758
  initializeLayers(context) {
759
+ let hasLoadedTileTree = false;
754
760
  const tree = this.treeOwner.load();
755
- if (undefined === tree)
756
- return false; // Not loaded yet.
761
+ if (undefined === tree) {
762
+ return hasLoadedTileTree; // Not loaded yet.
763
+ }
757
764
  tree.layerImageryTrees.length = 0;
758
- if (0 === this._layerTrees.length)
765
+ if (0 === this._layerTrees.length) {
759
766
  return !this.isOverlay;
767
+ }
760
768
  let treeIndex = this._layerTrees.length - 1;
761
769
  // Start displaying at the highest completely opaque layer...
762
770
  for (; treeIndex >= 1; treeIndex--) {
@@ -771,8 +779,14 @@ class MapTileTreeReference extends internal_1.TileTreeReference {
771
779
  if (layerTreeRef && internal_1.TileTreeLoadStatus.NotFound !== layerTreeRef.treeOwner.loadStatus
772
780
  && !layerTreeRef.layerSettings.allSubLayersInvisible) {
773
781
  const layerTree = layerTreeRef.treeOwner.load();
774
- if (undefined === layerTree)
775
- return false; // Not loaded yet.
782
+ if (layerTree !== undefined) {
783
+ hasLoadedTileTree = true;
784
+ }
785
+ else {
786
+ // Let's continue, there might be loaded tile tree in the list
787
+ continue;
788
+ }
789
+ // Add loaded TileTree
776
790
  const baseImageryLayer = this._baseImageryLayerIncluded && (treeIndex === 0);
777
791
  if (layerTree instanceof internal_1.ImageryMapTileTree) {
778
792
  tree.addImageryLayer(layerTree, layerTreeRef.layerSettings, treeIndex, baseImageryLayer);
@@ -781,7 +795,7 @@ class MapTileTreeReference extends internal_1.TileTreeReference {
781
795
  tree.addModelLayer(layerTreeRef, context);
782
796
  }
783
797
  }
784
- return true;
798
+ return hasLoadedTileTree;
785
799
  }
786
800
  /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.drawScene]] on the referenced TileTree, if it is loaded. */
787
801
  addToScene(context) {