@itwin/core-frontend 4.0.0-dev.70 → 4.0.0-dev.73

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 (162) hide show
  1. package/CHANGELOG.md +74 -37
  2. package/lib/cjs/BingLocation.d.ts.map +1 -1
  3. package/lib/cjs/BingLocation.js +4 -5
  4. package/lib/cjs/BingLocation.js.map +1 -1
  5. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  6. package/lib/cjs/NativeApp.d.ts.map +1 -1
  7. package/lib/cjs/NativeApp.js +0 -3
  8. package/lib/cjs/NativeApp.js.map +1 -1
  9. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +1 -2
  10. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
  11. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +6 -20
  12. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  13. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +1 -1
  14. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -1
  15. package/lib/cjs/RealityDataSourceContextShareImpl.js +2 -11
  16. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  17. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +4 -2
  18. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  19. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +4 -12
  20. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  21. package/lib/cjs/extension/providers/RemoteExtensionProvider.d.ts.map +1 -1
  22. package/lib/cjs/extension/providers/RemoteExtensionProvider.js +1 -8
  23. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  24. package/lib/cjs/render/primitives/PointCloudPrimitive.d.ts +1 -1
  25. package/lib/cjs/render/primitives/PointCloudPrimitive.d.ts.map +1 -1
  26. package/lib/cjs/render/primitives/PointCloudPrimitive.js.map +1 -1
  27. package/lib/cjs/render/webgl/AttributeBuffers.d.ts +1 -1
  28. package/lib/cjs/render/webgl/AttributeBuffers.d.ts.map +1 -1
  29. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  30. package/lib/cjs/render/webgl/PointCloud.js +1 -1
  31. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  32. package/lib/cjs/request/Request.d.ts +17 -143
  33. package/lib/cjs/request/Request.d.ts.map +1 -1
  34. package/lib/cjs/request/Request.js +46 -303
  35. package/lib/cjs/request/Request.js.map +1 -1
  36. package/lib/cjs/tile/PntsReader.d.ts +5 -1
  37. package/lib/cjs/tile/PntsReader.d.ts.map +1 -1
  38. package/lib/cjs/tile/PntsReader.js +28 -25
  39. package/lib/cjs/tile/PntsReader.js.map +1 -1
  40. package/lib/cjs/tile/RealityTile.d.ts +12 -5
  41. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  42. package/lib/cjs/tile/RealityTile.js +149 -57
  43. package/lib/cjs/tile/RealityTile.js.map +1 -1
  44. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  45. package/lib/cjs/tile/RealityTileLoader.js +14 -3
  46. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  47. package/lib/cjs/tile/RealityTileTree.d.ts +1 -3
  48. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  49. package/lib/cjs/tile/RealityTileTree.js +8 -21
  50. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  51. package/lib/cjs/tile/TileUsageMarker.d.ts +4 -0
  52. package/lib/cjs/tile/TileUsageMarker.d.ts.map +1 -1
  53. package/lib/cjs/tile/TileUsageMarker.js +9 -1
  54. package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
  55. package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
  56. package/lib/cjs/tile/map/ArcGISTileMap.js +1 -5
  57. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  58. package/lib/cjs/tile/map/BingElevation.d.ts.map +1 -1
  59. package/lib/cjs/tile/map/BingElevation.js +6 -16
  60. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  61. package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
  62. package/lib/cjs/tile/map/CesiumTerrainProvider.js +12 -18
  63. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  64. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  65. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -3
  66. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  67. package/lib/cjs/tile/map/MapLayerSources.js +1 -1
  68. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  69. package/lib/cjs/tile/map/MapTile.d.ts +3 -1
  70. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  71. package/lib/cjs/tile/map/MapTile.js +4 -0
  72. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  73. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  74. package/lib/cjs/tile/map/WmsCapabilities.js +3 -6
  75. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  76. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  77. package/lib/cjs/tile/map/WmtsCapabilities.js +3 -6
  78. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  79. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  80. package/lib/cjs/tools/ViewTool.js +0 -3
  81. package/lib/cjs/tools/ViewTool.js.map +1 -1
  82. package/lib/esm/BingLocation.d.ts.map +1 -1
  83. package/lib/esm/BingLocation.js +4 -5
  84. package/lib/esm/BingLocation.js.map +1 -1
  85. package/lib/esm/BriefcaseConnection.js.map +1 -1
  86. package/lib/esm/NativeApp.d.ts.map +1 -1
  87. package/lib/esm/NativeApp.js +0 -3
  88. package/lib/esm/NativeApp.js.map +1 -1
  89. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +1 -2
  90. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
  91. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +6 -20
  92. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  93. package/lib/esm/RealityDataSourceContextShareImpl.d.ts +1 -1
  94. package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -1
  95. package/lib/esm/RealityDataSourceContextShareImpl.js +2 -11
  96. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  97. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +4 -2
  98. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  99. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +4 -12
  100. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  101. package/lib/esm/extension/providers/RemoteExtensionProvider.d.ts.map +1 -1
  102. package/lib/esm/extension/providers/RemoteExtensionProvider.js +1 -8
  103. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  104. package/lib/esm/render/primitives/PointCloudPrimitive.d.ts +1 -1
  105. package/lib/esm/render/primitives/PointCloudPrimitive.d.ts.map +1 -1
  106. package/lib/esm/render/primitives/PointCloudPrimitive.js.map +1 -1
  107. package/lib/esm/render/webgl/AttributeBuffers.d.ts +1 -1
  108. package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
  109. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  110. package/lib/esm/render/webgl/PointCloud.js +1 -1
  111. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  112. package/lib/esm/request/Request.d.ts +17 -143
  113. package/lib/esm/request/Request.d.ts.map +1 -1
  114. package/lib/esm/request/Request.js +42 -275
  115. package/lib/esm/request/Request.js.map +1 -1
  116. package/lib/esm/tile/PntsReader.d.ts +5 -1
  117. package/lib/esm/tile/PntsReader.d.ts.map +1 -1
  118. package/lib/esm/tile/PntsReader.js +29 -26
  119. package/lib/esm/tile/PntsReader.js.map +1 -1
  120. package/lib/esm/tile/RealityTile.d.ts +12 -5
  121. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  122. package/lib/esm/tile/RealityTile.js +149 -57
  123. package/lib/esm/tile/RealityTile.js.map +1 -1
  124. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  125. package/lib/esm/tile/RealityTileLoader.js +14 -3
  126. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  127. package/lib/esm/tile/RealityTileTree.d.ts +1 -3
  128. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  129. package/lib/esm/tile/RealityTileTree.js +11 -24
  130. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  131. package/lib/esm/tile/TileUsageMarker.d.ts +4 -0
  132. package/lib/esm/tile/TileUsageMarker.d.ts.map +1 -1
  133. package/lib/esm/tile/TileUsageMarker.js +9 -1
  134. package/lib/esm/tile/TileUsageMarker.js.map +1 -1
  135. package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
  136. package/lib/esm/tile/map/ArcGISTileMap.js +1 -5
  137. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  138. package/lib/esm/tile/map/BingElevation.d.ts.map +1 -1
  139. package/lib/esm/tile/map/BingElevation.js +6 -16
  140. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  141. package/lib/esm/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
  142. package/lib/esm/tile/map/CesiumTerrainProvider.js +12 -18
  143. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  144. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  145. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -3
  146. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  147. package/lib/esm/tile/map/MapLayerSources.js +2 -2
  148. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  149. package/lib/esm/tile/map/MapTile.d.ts +3 -1
  150. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  151. package/lib/esm/tile/map/MapTile.js +4 -0
  152. package/lib/esm/tile/map/MapTile.js.map +1 -1
  153. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  154. package/lib/esm/tile/map/WmsCapabilities.js +3 -6
  155. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  156. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  157. package/lib/esm/tile/map/WmtsCapabilities.js +3 -6
  158. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  159. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  160. package/lib/esm/tools/ViewTool.js +0 -3
  161. package/lib/esm/tools/ViewTool.js.map +1 -1
  162. package/package.json +21 -27
@@ -1 +1 @@
1
- {"version":3,"file":"PntsReader.js","sourceRoot":"","sources":["../../../src/tile/PntsReader.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/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64String, Logger, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Point3d, Range3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { BatchType, ElementAlignedBox3d, Feature, FeatureTable, PackedFeatureTable, PntsHeader, QParams3d, QPoint3d, Quantization } from \"@itwin/core-common\";\r\nimport { FrontendLoggerCategory } from \"../FrontendLoggerCategory\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\n\r\n/** Schema for the [3DTILES_draco_point_compression](https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_draco_point_compression) extension. */\r\ninterface DracoPointCloud {\r\n byteLength: number;\r\n byteOffset: number;\r\n /** Each specifies the Id of a compressed attribute. */\r\n properties: {\r\n POSITION?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGBA?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n NORMAL?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_ID?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n /** This is not in the spec but is present in sample data in Cesium's git repository. */\r\n COLOR_0?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n };\r\n}\r\n\r\ninterface PointCloudProps {\r\n params: QParams3d;\r\n points: Uint16Array;\r\n colors?: Uint8Array;\r\n}\r\n\r\ninterface BinaryBodyReference {\r\n byteOffset: number;\r\n}\r\n\r\n/** [3D tiles specification section 10.3](https://docs.opengeospatial.org/cs/18-053r2/18-053r2.html#199).\r\n * [JSON schema](https://github.com/CesiumGS/3d-tiles/blob/main/specification/schema/pnts.featureTable.schema.json).\r\n */\r\ninterface CommonPntsProps {\r\n POINTS_LENGTH: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RTC_CENTER?: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n CONSTANT_RGBA?: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGBA?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB565?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n extensions?: {\r\n \"3DTILES_draco_point_compression\"?: DracoPointCloud; // eslint-disable-line @typescript-eslint/naming-convention\r\n };\r\n\r\n // The following are currently ignored.\r\n NORMAL?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n NORMAL_OCT16P?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_ID?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_LENGTH?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n}\r\n\r\ntype QuantizedPntsProps = CommonPntsProps & {\r\n POSITION_QUANTIZED: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_OFFSET: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_SCALE: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n POSITION?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n};\r\n\r\ntype UnquantizedPntsProps = CommonPntsProps & {\r\n POSITION: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n POSITION_QUANTIZED?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_OFFSET?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_SCALE?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n};\r\n\r\ntype PntsProps = QuantizedPntsProps | UnquantizedPntsProps;\r\n\r\nfunction readPntsColors(stream: ByteStream, dataOffset: number, pnts: PntsProps): Uint8Array | undefined {\r\n const nPts = pnts.POINTS_LENGTH;\r\n const nComponents = 3 * nPts;\r\n if (pnts.RGB)\r\n return new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGB.byteOffset, nComponents);\r\n\r\n if (pnts.RGBA) {\r\n // ###TODO support point cloud transparency.\r\n const rgb = new Uint8Array(nComponents);\r\n const rgba = new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGBA.byteOffset, nComponents);\r\n for (let i = 0; i < nComponents; i += 4) {\r\n rgb[i + 0] = rgba[i + 0];\r\n rgb[i + 1] = rgba[i + 1];\r\n rgb[i + 2] = rgba[i + 2];\r\n }\r\n\r\n return rgb;\r\n } else if (pnts.RGB565) {\r\n // Each color is 16 bits: 5 red, 6 green, 5 blue.\r\n const crgb = new Uint16Array(stream.arrayBuffer, dataOffset + pnts.RGB565.byteOffset, nPts);\r\n const rgb = new Uint8Array(nComponents);\r\n for (let i = 0; i < nPts; i++) {\r\n const c = crgb[i];\r\n rgb[i + 0] = (c >> 11) & 0x1f;\r\n rgb[i + 1] = (c >> 5) & 0x3f;\r\n rgb[i + 2] = c & 0x1f;\r\n }\r\n\r\n return rgb;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction readPnts(stream: ByteStream, dataOffset: number, pnts: PntsProps): PointCloudProps | undefined {\r\n const nPts = pnts.POINTS_LENGTH;\r\n let params: QParams3d;\r\n let points: Uint16Array;\r\n\r\n if (pnts.POSITION_QUANTIZED) {\r\n const qpos = pnts.POSITION_QUANTIZED;\r\n const offset = pnts.QUANTIZED_VOLUME_OFFSET;\r\n const scale = pnts.QUANTIZED_VOLUME_SCALE;\r\n\r\n const qOrigin = new Point3d(offset[0], offset[1], offset[2]);\r\n const qScale = new Point3d(Quantization.computeScale(scale[0]), Quantization.computeScale(scale[1]), Quantization.computeScale(scale[2]));\r\n\r\n params = QParams3d.fromOriginAndScale(qOrigin, qScale);\r\n points = new Uint16Array(stream.arrayBuffer, dataOffset + qpos.byteOffset, 3 * nPts);\r\n } else {\r\n const nCoords = nPts * 3;\r\n const fpts = new Float32Array(stream.arrayBuffer, dataOffset + pnts.POSITION.byteOffset, 3 * nPts);\r\n const range = Range3d.createNull();\r\n for (let i = 0; i < nCoords; i += 3)\r\n range.extendXYZ(fpts[i], fpts[i + 1], fpts[i + 2]);\r\n\r\n params = QParams3d.fromRange(range);\r\n const qpt = new QPoint3d();\r\n const fpt = new Point3d();\r\n points = new Uint16Array(3 * nPts);\r\n for (let i = 0; i < nCoords; i += 3) {\r\n fpt.set(fpts[i], fpts[i + 1], fpts[i + 2]);\r\n qpt.init(fpt, params);\r\n points[i] = qpt.x;\r\n points[i + 1] = qpt.y;\r\n points[i + 2] = qpt.z;\r\n }\r\n }\r\n\r\n const colors = readPntsColors(stream, dataOffset, pnts);\r\n return { params, points, colors };\r\n}\r\n\r\nasync function decodeDracoPointCloud(buf: Uint8Array): Promise<PointCloudProps | undefined> {\r\n try {\r\n const dracoLoader = (await import(\"@loaders.gl/draco\")).DracoLoader;\r\n const mesh = await dracoLoader.parse(buf, { });\r\n if (mesh.topology !== \"point-list\")\r\n return undefined;\r\n\r\n const pos = mesh.attributes.POSITION?.value;\r\n if (!pos || (pos.length % 3) !== 0)\r\n return undefined;\r\n\r\n let colors = mesh.attributes.RGB?.value ?? mesh.attributes.COLOR_0?.value;\r\n if (!colors) {\r\n // ###TODO support point cloud transparency.\r\n const rgba = mesh.attributes.RGBA?.value;\r\n if (rgba && (rgba.length % 4) === 0) {\r\n // We currently don't support alpha channel for point clouds - strip it.\r\n colors = new Uint8Array(3 * rgba.length / 4);\r\n let j = 0;\r\n for (let i = 0; i < rgba.length; i += 4) {\r\n colors[j++] = rgba[i];\r\n colors[j++] = rgba[i + 1];\r\n colors[j++] = rgba[i + 2];\r\n }\r\n }\r\n }\r\n\r\n let posRange: Range3d;\r\n const bbox = mesh.header?.boundingBox;\r\n if (bbox) {\r\n posRange = Range3d.createXYZXYZ(bbox[0][0], bbox[0][1], bbox[0][2], bbox[1][0], bbox[1][1], bbox[1][2]);\r\n } else {\r\n posRange = Range3d.createNull();\r\n for (let i = 0; i < pos.length; i += 3)\r\n posRange.extendXYZ(pos[i], pos[i + 1], pos[i + 2]);\r\n }\r\n\r\n const params = QParams3d.fromRange(posRange);\r\n const pt = Point3d.createZero();\r\n const qpt = QPoint3d.create(pt, params);\r\n const points = new Uint16Array(pos.length);\r\n for (let i = 0; i < pos.length; i += 3) {\r\n pt.set(pos[i], pos[i + 1], pos[i + 2]);\r\n qpt.init(pt, params);\r\n points[i] = qpt.x;\r\n points[i + 1] = qpt.y;\r\n points[i + 2] = qpt.z;\r\n }\r\n\r\n return { points, params, colors: colors instanceof Uint8Array ? colors : undefined };\r\n } catch (err) {\r\n Logger.logWarning(FrontendLoggerCategory.Render, \"Failed to decode draco-encoded point cloud\");\r\n Logger.logException(FrontendLoggerCategory.Render, err);\r\n return undefined;\r\n }\r\n}\r\n\r\n/** Deserialize a point cloud tile and return it as a RenderGraphic.\r\n * @internal\r\n */\r\nexport async function readPointCloudTileContent(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, _is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem): Promise<RenderGraphic | undefined> {\r\n const header = new PntsHeader(stream);\r\n if (!header.isValid)\r\n return undefined;\r\n\r\n const featureTableJsonOffset = stream.curPos;\r\n const featureStrData = stream.nextBytes(header.featureTableJsonLength);\r\n const featureStr = utf8ToString(featureStrData);\r\n const featureValue = JSON.parse(featureStr as string) as PntsProps;\r\n\r\n if (undefined === featureValue)\r\n return undefined;\r\n\r\n let props: PointCloudProps | undefined;\r\n const dataOffset = featureTableJsonOffset + header.featureTableJsonLength;\r\n const draco = featureValue.extensions ? featureValue.extensions[\"3DTILES_draco_point_compression\"] : undefined;\r\n if (draco) {\r\n try {\r\n const buf = new Uint8Array(stream.arrayBuffer, dataOffset + draco.byteOffset, draco.byteLength);\r\n props = await decodeDracoPointCloud(buf);\r\n } catch (_) {\r\n //\r\n }\r\n } else {\r\n props = readPnts(stream, dataOffset, featureValue);\r\n }\r\n\r\n if (!props)\r\n return undefined;\r\n\r\n if (featureValue.RTC_CENTER)\r\n props.params = QParams3d.fromOriginAndScale(props.params.origin.plus(Vector3d.fromJSON(featureValue.RTC_CENTER)), props.params.scale);\r\n\r\n if (!props.colors) {\r\n // ###TODO we really should support uniform color instead of allocating an RGB value per point...\r\n props.colors = new Uint8Array(3 * featureValue.POINTS_LENGTH);\r\n const rgba = featureValue.CONSTANT_RGBA;\r\n if (rgba) {\r\n // ###TODO support point cloud transparency.\r\n for (let i = 0; i < featureValue.POINTS_LENGTH * 3; i += 3) {\r\n props.colors[i] = rgba[0];\r\n props.colors[i + 1] = rgba[1];\r\n props.colors[i + 2] = rgba[2];\r\n }\r\n } else {\r\n // Default to white.\r\n props.colors.fill(0xff, 0, props.colors.length);\r\n }\r\n }\r\n\r\n const featureTable = new FeatureTable(1, modelId, BatchType.Primary);\r\n const features = new Mesh.Features(featureTable);\r\n features.add(new Feature(modelId), 1);\r\n const voxelSize = props.params.rangeDiagonal.maxAbs() / 256;\r\n\r\n let renderGraphic = system.createPointCloud({\r\n positions: props.points,\r\n qparams: props.params,\r\n colors: props.colors,\r\n features: features.toFeatureIndex(),\r\n voxelSize,\r\n colorFormat: \"rgb\",\r\n }, iModel);\r\n\r\n renderGraphic = system.createBatch(renderGraphic!, PackedFeatureTable.pack(featureTable), range);\r\n return renderGraphic;\r\n}\r\n"]}
1
+ {"version":3,"file":"PntsReader.js","sourceRoot":"","sources":["../../../src/tile/PntsReader.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/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64String, Logger, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport { BatchType, ElementAlignedBox3d, Feature, FeatureTable, PackedFeatureTable, PntsHeader, QParams3d, QPoint3d, Quantization } from \"@itwin/core-common\";\r\nimport { FrontendLoggerCategory } from \"../FrontendLoggerCategory\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\n\r\n/** Schema for the [3DTILES_draco_point_compression](https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_draco_point_compression) extension. */\r\ninterface DracoPointCloud {\r\n byteLength: number;\r\n byteOffset: number;\r\n /** Each specifies the Id of a compressed attribute. */\r\n properties: {\r\n POSITION?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGBA?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n NORMAL?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_ID?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n /** This is not in the spec but is present in sample data in Cesium's git repository. */\r\n COLOR_0?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n };\r\n}\r\n\r\ninterface PointCloudProps {\r\n params: QParams3d;\r\n points: Uint16Array | Float32Array;\r\n colors?: Uint8Array;\r\n}\r\n\r\ninterface BinaryBodyReference {\r\n byteOffset: number;\r\n}\r\n\r\n/** [3D tiles specification section 10.3](https://docs.opengeospatial.org/cs/18-053r2/18-053r2.html#199).\r\n * [JSON schema](https://github.com/CesiumGS/3d-tiles/blob/main/specification/schema/pnts.featureTable.schema.json).\r\n */\r\ninterface CommonPntsProps {\r\n POINTS_LENGTH: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RTC_CENTER?: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n CONSTANT_RGBA?: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGBA?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB565?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n extensions?: {\r\n \"3DTILES_draco_point_compression\"?: DracoPointCloud; // eslint-disable-line @typescript-eslint/naming-convention\r\n };\r\n\r\n // The following are currently ignored.\r\n NORMAL?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n NORMAL_OCT16P?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_ID?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_LENGTH?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n}\r\n\r\ntype QuantizedPntsProps = CommonPntsProps & {\r\n POSITION_QUANTIZED: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_OFFSET: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_SCALE: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n POSITION?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n};\r\n\r\ntype UnquantizedPntsProps = CommonPntsProps & {\r\n POSITION: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n POSITION_QUANTIZED?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_OFFSET?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_SCALE?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n};\r\n\r\ntype PntsProps = QuantizedPntsProps | UnquantizedPntsProps;\r\n\r\nfunction readPntsColors(stream: ByteStream, dataOffset: number, pnts: PntsProps): Uint8Array | undefined {\r\n const nPts = pnts.POINTS_LENGTH;\r\n const nComponents = 3 * nPts;\r\n if (pnts.RGB)\r\n return new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGB.byteOffset, nComponents);\r\n\r\n if (pnts.RGBA) {\r\n // ###TODO support point cloud transparency.\r\n const rgb = new Uint8Array(nComponents);\r\n const rgba = new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGBA.byteOffset, nComponents);\r\n for (let i = 0; i < nComponents; i += 4) {\r\n rgb[i + 0] = rgba[i + 0];\r\n rgb[i + 1] = rgba[i + 1];\r\n rgb[i + 2] = rgba[i + 2];\r\n }\r\n\r\n return rgb;\r\n } else if (pnts.RGB565) {\r\n // Each color is 16 bits: 5 red, 6 green, 5 blue.\r\n const crgb = new Uint16Array(stream.arrayBuffer, dataOffset + pnts.RGB565.byteOffset, nPts);\r\n const rgb = new Uint8Array(nComponents);\r\n for (let i = 0; i < nPts; i++) {\r\n const c = crgb[i];\r\n rgb[i + 0] = (c >> 11) & 0x1f;\r\n rgb[i + 1] = (c >> 5) & 0x3f;\r\n rgb[i + 2] = c & 0x1f;\r\n }\r\n\r\n return rgb;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction readPnts(stream: ByteStream, dataOffset: number, pnts: PntsProps): PointCloudProps | undefined {\r\n const nPts = pnts.POINTS_LENGTH;\r\n let params: QParams3d;\r\n let points: Uint16Array | Float32Array;\r\n\r\n if (pnts.POSITION_QUANTIZED) {\r\n const qpos = pnts.POSITION_QUANTIZED;\r\n const offset = pnts.QUANTIZED_VOLUME_OFFSET;\r\n const scale = pnts.QUANTIZED_VOLUME_SCALE;\r\n\r\n const qOrigin = new Point3d(offset[0], offset[1], offset[2]);\r\n const qScale = new Point3d(Quantization.computeScale(scale[0]), Quantization.computeScale(scale[1]), Quantization.computeScale(scale[2]));\r\n\r\n params = QParams3d.fromOriginAndScale(qOrigin, qScale);\r\n points = new Uint16Array(stream.arrayBuffer, dataOffset + qpos.byteOffset, 3 * nPts);\r\n } else {\r\n const qOrigin = new Point3d(0, 0, 0);\r\n const qScale = new Point3d(1, 1, 1);\r\n params = QParams3d.fromOriginAndScale(qOrigin, qScale);\r\n points = new Float32Array(stream.arrayBuffer, dataOffset + pnts.POSITION.byteOffset, 3 * nPts);\r\n }\r\n\r\n const colors = readPntsColors(stream, dataOffset, pnts);\r\n return { params, points, colors };\r\n}\r\n\r\nasync function decodeDracoPointCloud(buf: Uint8Array): Promise<PointCloudProps | undefined> {\r\n try {\r\n const dracoLoader = (await import(\"@loaders.gl/draco\")).DracoLoader;\r\n const mesh = await dracoLoader.parse(buf, {});\r\n if (mesh.topology !== \"point-list\")\r\n return undefined;\r\n\r\n const pos = mesh.attributes.POSITION?.value;\r\n if (!pos || (pos.length % 3) !== 0)\r\n return undefined;\r\n\r\n let colors = mesh.attributes.RGB?.value ?? mesh.attributes.COLOR_0?.value;\r\n if (!colors) {\r\n // ###TODO support point cloud transparency.\r\n const rgba = mesh.attributes.RGBA?.value;\r\n if (rgba && (rgba.length % 4) === 0) {\r\n // We currently don't support alpha channel for point clouds - strip it.\r\n colors = new Uint8Array(3 * rgba.length / 4);\r\n let j = 0;\r\n for (let i = 0; i < rgba.length; i += 4) {\r\n colors[j++] = rgba[i];\r\n colors[j++] = rgba[i + 1];\r\n colors[j++] = rgba[i + 2];\r\n }\r\n }\r\n }\r\n\r\n let posRange: Range3d;\r\n const bbox = mesh.header?.boundingBox;\r\n if (bbox) {\r\n posRange = Range3d.createXYZXYZ(bbox[0][0], bbox[0][1], bbox[0][2], bbox[1][0], bbox[1][1], bbox[1][2]);\r\n } else {\r\n posRange = Range3d.createNull();\r\n for (let i = 0; i < pos.length; i += 3)\r\n posRange.extendXYZ(pos[i], pos[i + 1], pos[i + 2]);\r\n }\r\n\r\n const params = QParams3d.fromRange(posRange);\r\n const pt = Point3d.createZero();\r\n const qpt = QPoint3d.create(pt, params);\r\n const points = new Uint16Array(pos.length);\r\n for (let i = 0; i < pos.length; i += 3) {\r\n pt.set(pos[i], pos[i + 1], pos[i + 2]);\r\n qpt.init(pt, params);\r\n points[i] = qpt.x;\r\n points[i + 1] = qpt.y;\r\n points[i + 2] = qpt.z;\r\n }\r\n\r\n return { points, params, colors: colors instanceof Uint8Array ? colors : undefined };\r\n } catch (err) {\r\n Logger.logWarning(FrontendLoggerCategory.Render, \"Failed to decode draco-encoded point cloud\");\r\n Logger.logException(FrontendLoggerCategory.Render, err);\r\n return undefined;\r\n }\r\n}\r\n\r\n/** Deserialize a point cloud tile and return it as a RenderGraphic.\r\n * @internal\r\n */\r\nexport async function readPointCloudTileContent(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, _is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem): Promise<{ graphic: RenderGraphic | undefined, rtcCenter: Point3d | undefined }> {\r\n let graphic;\r\n let rtcCenter;\r\n const header = new PntsHeader(stream);\r\n if (!header.isValid)\r\n return { graphic, rtcCenter };\r\n\r\n const featureTableJsonOffset = stream.curPos;\r\n const featureStrData = stream.nextBytes(header.featureTableJsonLength);\r\n const featureStr = utf8ToString(featureStrData);\r\n const featureValue = JSON.parse(featureStr as string) as PntsProps;\r\n\r\n if (undefined === featureValue)\r\n return { graphic, rtcCenter };\r\n\r\n let props: PointCloudProps | undefined;\r\n const dataOffset = featureTableJsonOffset + header.featureTableJsonLength;\r\n const draco = featureValue.extensions ? featureValue.extensions[\"3DTILES_draco_point_compression\"] : undefined;\r\n if (draco) {\r\n try {\r\n const buf = new Uint8Array(stream.arrayBuffer, dataOffset + draco.byteOffset, draco.byteLength);\r\n props = await decodeDracoPointCloud(buf);\r\n } catch (_) {\r\n //\r\n }\r\n } else {\r\n props = readPnts(stream, dataOffset, featureValue);\r\n }\r\n\r\n if (!props)\r\n return { graphic, rtcCenter };\r\n\r\n let batchRange = range;\r\n if (featureValue.RTC_CENTER) {\r\n rtcCenter = Point3d.fromJSON(featureValue.RTC_CENTER);\r\n batchRange = range.clone();\r\n batchRange.low.minus(rtcCenter, batchRange.low);\r\n batchRange.high.minus(rtcCenter, batchRange.high);\r\n }\r\n\r\n if (!props.colors) {\r\n // ###TODO we really should support uniform color instead of allocating an RGB value per point...\r\n props.colors = new Uint8Array(3 * featureValue.POINTS_LENGTH);\r\n const rgba = featureValue.CONSTANT_RGBA;\r\n if (rgba) {\r\n // ###TODO support point cloud transparency.\r\n for (let i = 0; i < featureValue.POINTS_LENGTH * 3; i += 3) {\r\n props.colors[i] = rgba[0];\r\n props.colors[i + 1] = rgba[1];\r\n props.colors[i + 2] = rgba[2];\r\n }\r\n } else {\r\n // Default to white.\r\n props.colors.fill(0xff, 0, props.colors.length);\r\n }\r\n }\r\n\r\n const featureTable = new FeatureTable(1, modelId, BatchType.Primary);\r\n const features = new Mesh.Features(featureTable);\r\n features.add(new Feature(modelId), 1);\r\n let params = props.params;\r\n if (props.points instanceof Float32Array) {\r\n // we don't have a true range for unquantized points, so calc one here for voxelSize\r\n const rng = Range3d.createNull();\r\n for (let i = 0; i < props.points.length; i += 3)\r\n rng.extendXYZ(props.points[i], props.points[i + 1], props.points[i + 2]);\r\n params = QParams3d.fromRange(rng);\r\n }\r\n const voxelSize = params.rangeDiagonal.maxAbs() / 256;\r\n\r\n graphic = system.createPointCloud({\r\n positions: props.points,\r\n qparams: props.params,\r\n colors: props.colors,\r\n features: features.toFeatureIndex(),\r\n voxelSize,\r\n colorFormat: \"rgb\",\r\n }, iModel);\r\n\r\n graphic = system.createBatch(graphic!, PackedFeatureTable.pack(featureTable), batchRange);\r\n return { graphic, rtcCenter };\r\n}\r\n"]}
@@ -103,7 +103,7 @@ export declare class RealityTile extends Tile {
103
103
  /** @internal */
104
104
  preloadRealityTilesAtDepth(depth: number, context: TraversalSelectionContext, args: TileDrawArgs): void;
105
105
  /** @internal */
106
- protected selectRealityChildren(context: TraversalSelectionContext, args: TileDrawArgs, traversalDetails: TraversalDetails): void;
106
+ preloadProtectedTiles(args: TileDrawArgs, context: TraversalSelectionContext): boolean;
107
107
  /** @internal */
108
108
  addBoundingGraphic(builder: GraphicBuilder, color: ColorDef): void;
109
109
  /** @internal */
@@ -113,15 +113,22 @@ export declare class RealityTile extends Tile {
113
113
  /** @internal */
114
114
  protected getLoadedRealityChildren(args: TileDrawArgs): boolean;
115
115
  /** @internal */
116
- forceSelectRealityTile(): boolean;
116
+ protected forceSelectRealityTile(): boolean;
117
+ /** @internal */
118
+ protected minimumVisibleFactor(): number;
117
119
  /** @internal */
118
120
  selectRealityTiles(context: TraversalSelectionContext, args: TileDrawArgs, traversalDetails: TraversalDetails): void;
119
121
  /** @internal */
120
- purgeContents(olderThan: BeTimePoint): void;
122
+ protected selectRealityChildrenAsFallback(context: TraversalSelectionContext, args: TileDrawArgs, traversalDetails: TraversalDetails): void;
121
123
  /** @internal */
122
- computeVisibilityFactor(args: TileDrawArgs): number;
124
+ protected selectRealityChildren(context: TraversalSelectionContext, args: TileDrawArgs, traversalDetails: TraversalDetails): void;
125
+ /** @internal */
126
+ purgeContents(olderThan: BeTimePoint, useProtectedTiles: boolean): void;
127
+ private getTilesToPurge;
128
+ private getTilesToPurgeWithoutProtection;
129
+ private removeFirstDisplayableChildrenFromSet;
123
130
  /** @internal */
124
- preloadTilesInFrustum(args: TileDrawArgs, context: TraversalSelectionContext, preloadSizeModifier: number): void;
131
+ computeVisibilityFactor(args: TileDrawArgs): number;
125
132
  /** @internal */
126
133
  protected get _anyChildNotFound(): boolean;
127
134
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTile.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealityTile.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTile.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ class RealityTile extends internal_1.Tile {
28
28
  super(props, tree);
29
29
  this._everDisplayed = false;
30
30
  this.transformToRoot = props.transformToRoot;
31
- this.additiveRefinement = (undefined === props.additiveRefinement) ? this.realityParent?.additiveRefinement : props.additiveRefinement;
31
+ this.additiveRefinement = props.additiveRefinement ?? this.realityParent?.additiveRefinement;
32
32
  this.noContentButTerminateOnSelection = props.noContentButTerminateOnSelection;
33
33
  this.rangeCorners = props.rangeCorners;
34
34
  this.region = props.region;
@@ -143,21 +143,31 @@ class RealityTile extends internal_1.Tile {
143
143
  child.preloadRealityTilesAtDepth(depth, context, args);
144
144
  }
145
145
  }
146
+ // Preload tiles that are protected:
147
+ // * used tiles (where "used" may mean: selected/preloaded for display or content requested);
148
+ // * parents and siblings of other protected tiles.
146
149
  /** @internal */
147
- selectRealityChildren(context, args, traversalDetails) {
148
- const childrenLoadStatus = this.loadChildren(); // NB: asynchronous
149
- if (internal_1.TileTreeLoadStatus.Loading === childrenLoadStatus) {
150
- args.markChildrenLoading();
151
- traversalDetails.childrenLoading = true;
152
- return;
150
+ preloadProtectedTiles(args, context) {
151
+ const children = this.realityChildren;
152
+ let hasProtectedChildren = false;
153
+ if (children && !this.additiveRefinement) {
154
+ for (const child of children) {
155
+ hasProtectedChildren = child.preloadProtectedTiles(args, context) || hasProtectedChildren;
156
+ }
153
157
  }
154
- if (undefined !== this.realityChildren) {
155
- const traversalChildren = this.realityRoot.getTraversalChildren(this.depth);
156
- traversalChildren.initialize();
157
- for (let i = 0; i < this.children.length; i++)
158
- this.realityChildren[i].selectRealityTiles(context, args, traversalChildren.getChildDetail(i));
159
- traversalChildren.combine(traversalDetails);
158
+ if (children && hasProtectedChildren) {
159
+ for (const child of children) {
160
+ if (child.isDisplayable && !child.isLoaded)
161
+ context.preload(child, args);
162
+ }
163
+ return true; // Parents of protected tiles are protected
160
164
  }
165
+ // Special case of the root tile
166
+ if (this === this.realityRoot.rootTile) {
167
+ context.preload(this, args);
168
+ return true;
169
+ }
170
+ return context.selected.find((tile) => tile === this) !== undefined;
161
171
  }
162
172
  /** @internal */
163
173
  addBoundingGraphic(builder, color) {
@@ -194,55 +204,157 @@ class RealityTile extends internal_1.Tile {
194
204
  if (child.isReady && child.computeVisibilityFactor(args) > 0) {
195
205
  scratchLoadedChildren.push(child);
196
206
  }
197
- else if (!child.getLoadedRealityChildren(args))
207
+ else if (!child.getLoadedRealityChildren(args)) {
198
208
  return false;
209
+ }
199
210
  }
200
211
  return true;
201
212
  }
202
213
  /** @internal */
203
214
  forceSelectRealityTile() { return false; }
204
215
  /** @internal */
216
+ minimumVisibleFactor() {
217
+ if (this.additiveRefinement)
218
+ return 0.25;
219
+ else
220
+ return 0;
221
+ }
222
+ /** @internal */
205
223
  selectRealityTiles(context, args, traversalDetails) {
206
224
  const visibility = this.computeVisibilityFactor(args);
207
- if (visibility < 0)
225
+ const isNotVisible = visibility < 0;
226
+ if (isNotVisible)
208
227
  return;
228
+ // Force loading if loader requires this tile. (cesium terrain visibility).
209
229
  if (this.realityRoot.loader.forceTileLoad(this) && !this.isReady) {
210
- context.selectOrQueue(this, args, traversalDetails); // Force loading if loader requires this tile. (cesium terrain visibility).
230
+ context.selectOrQueue(this, args, traversalDetails);
211
231
  return;
212
232
  }
233
+ // Force to return early without selecting
213
234
  if (visibility >= 1 && this.noContentButTerminateOnSelection)
214
235
  return;
215
- if (this.isDisplayable && (visibility >= 1 || this._anyChildNotFound || this.forceSelectRealityTile() || context.selectionCountExceeded)) {
216
- if (!this.isOccluded(args.viewingSpace)) {
217
- context.selectOrQueue(this, args, traversalDetails);
218
- if (!this.isReady) { // This tile is visible but not loaded - Use higher resolution children if present
219
- if (this.getLoadedRealityChildren(args))
220
- context.select(scratchLoadedChildren, args);
221
- scratchLoadedChildren.length = 0;
222
- }
223
- }
236
+ const shouldSelectThisTile = visibility >= 1 || this._anyChildNotFound || this.forceSelectRealityTile() || context.selectionCountExceeded;
237
+ if (shouldSelectThisTile && this.isDisplayable) { // Select this tile
238
+ // Return early if tile is totally occluded
239
+ if (this.isOccluded(args.viewingSpace))
240
+ return;
241
+ // Attempt to select this tile. If not ready, queue it
242
+ context.selectOrQueue(this, args, traversalDetails);
243
+ // This tile is visible but not loaded - Use higher resolution children if present
244
+ if (!this.isReady)
245
+ this.selectRealityChildrenAsFallback(context, args, traversalDetails);
224
246
  }
225
- else {
247
+ else { // Select children instead of this tile
248
+ // With additive refinement it is necessary to display this tile along with any displayed children
226
249
  if (this.additiveRefinement && this.isDisplayable && !this.useAdditiveRefinementStepchildren())
227
- context.selectOrQueue(this, args, traversalDetails); // With additive refinement it is necessary to display this tile along with any displayed children.
250
+ context.selectOrQueue(this, args, traversalDetails);
228
251
  this.selectRealityChildren(context, args, traversalDetails);
229
- if (this.isReady && (traversalDetails.childrenLoading || 0 !== traversalDetails.queuedChildren.length)) {
230
- const minimumVisibleFactor = .25; // If the tile has not yet been displayed in this viewport -- display only if it is within 25% of visible. Avoid overly tiles popping into view unexpectedly (terrain)
231
- if (visibility > minimumVisibleFactor || this._everDisplayed)
252
+ // Children are not ready: use this tile to avoid leaving a hole
253
+ traversalDetails.shouldSelectParent = traversalDetails.shouldSelectParent || traversalDetails.queuedChildren.length !== 0;
254
+ if (traversalDetails.shouldSelectParent) {
255
+ // If the tile has not yet been displayed in this viewport -- display only if it is visible enough. Avoid overly tiles popping into view unexpectedly (terrain)
256
+ if (visibility > this.minimumVisibleFactor() || this._everDisplayed) {
232
257
  context.selectOrQueue(this, args, traversalDetails);
258
+ }
233
259
  }
234
260
  }
235
261
  }
262
+ // Attempt to select the children of a tile in case they could be displayed while this tile is loading. This does not take into account visibility.
236
263
  /** @internal */
237
- purgeContents(olderThan) {
238
- // Discard contents of tiles that have not been "used" recently, where "used" may mean: selected/preloaded for display or content requested.
264
+ selectRealityChildrenAsFallback(context, args, traversalDetails) {
265
+ const childrenReady = this.getLoadedRealityChildren(args);
266
+ if (childrenReady) {
267
+ context.select(scratchLoadedChildren, args);
268
+ traversalDetails.shouldSelectParent = false;
269
+ }
270
+ scratchLoadedChildren.length = 0;
271
+ }
272
+ // Recurse through children to select them normally
273
+ /** @internal */
274
+ selectRealityChildren(context, args, traversalDetails) {
275
+ // Load children if not yet requested
276
+ const childrenLoadStatus = this.loadChildren(); // NB: asynchronous
277
+ // Children are not ready yet
278
+ if (childrenLoadStatus === internal_1.TileTreeLoadStatus.Loading) {
279
+ args.markChildrenLoading();
280
+ traversalDetails.shouldSelectParent = true;
281
+ return;
282
+ }
283
+ if (this.realityChildren !== undefined) {
284
+ // Attempt to select the children
285
+ const traversalChildren = this.realityRoot.getTraversalChildren(this.depth);
286
+ traversalChildren.initialize();
287
+ for (let i = 0; i < this.children.length; i++)
288
+ this.realityChildren[i].selectRealityTiles(context, args, traversalChildren.getChildDetail(i));
289
+ traversalChildren.combine(traversalDetails);
290
+ }
291
+ }
292
+ /** @internal */
293
+ purgeContents(olderThan, useProtectedTiles) {
294
+ const tilesToPurge = new Set();
295
+ // Get the list of tiles to purge
296
+ if (useProtectedTiles && !this.additiveRefinement)
297
+ this.getTilesToPurge(olderThan, tilesToPurge);
298
+ else
299
+ this.getTilesToPurgeWithoutProtection(olderThan, tilesToPurge);
300
+ // Discard contents of tiles that have been marked.
239
301
  // Note we do not discard the child Tile objects themselves.
240
- if (this.usageMarker.isExpired(olderThan))
241
- this.disposeContents();
302
+ for (const tile of tilesToPurge)
303
+ tile.disposeContents();
304
+ }
305
+ // Populate a set with tiles that should be disposed. Prevent some tiles to be disposed to avoid holes when moving.
306
+ // Return true if the current tile is "protected".
307
+ getTilesToPurge(olderThan, tilesToPurge) {
308
+ const children = this.realityChildren;
309
+ // Protected tiles cannot be purged. They are:
310
+ // * used tiles (where "used" may mean: selected/preloaded for display or content requested);
311
+ // * parents and siblings of other protected tiles.
312
+ let hasProtectedChildren = false;
313
+ if (children) {
314
+ for (const child of children) {
315
+ hasProtectedChildren = child.getTilesToPurge(olderThan, tilesToPurge) || hasProtectedChildren;
316
+ }
317
+ if (hasProtectedChildren) {
318
+ // Siblings of protected tiles are protected too. We need to remove them from it
319
+ for (const child of children) {
320
+ // Because the current tile can be invisible, relying on its children to display geometry,
321
+ // we have to recurse in order to remove the first children that has geometry, otherwise,
322
+ // some holes might appear
323
+ child.removeFirstDisplayableChildrenFromSet(tilesToPurge);
324
+ }
325
+ return true; // Parents of protected tiles are protected
326
+ }
327
+ }
328
+ const isInUse = this.usageMarker.getIsTileInUse();
329
+ if (!isInUse && this.usageMarker.isTimestampExpired(olderThan)) {
330
+ tilesToPurge.add(this);
331
+ }
332
+ return isInUse;
333
+ }
334
+ // Populate a set with tiles that should be disposed. Does not prevent some tiles to be disposed to avoid holes when moving.
335
+ // This method is simpler and more fitting for devices that has a bigger memory constraint, such as mobiles.
336
+ // However, it causes the apparition of holes by letting important tiles to be purged.
337
+ getTilesToPurgeWithoutProtection(olderThan, tilesToPurge) {
242
338
  const children = this.realityChildren;
243
- if (children)
244
- for (const child of children)
245
- child.purgeContents(olderThan);
339
+ if (children) {
340
+ for (const child of children) {
341
+ child.getTilesToPurgeWithoutProtection(olderThan, tilesToPurge);
342
+ }
343
+ }
344
+ if (this.usageMarker.isExpired(olderThan))
345
+ tilesToPurge.add(this);
346
+ }
347
+ removeFirstDisplayableChildrenFromSet(set) {
348
+ if (set.size === 0)
349
+ return;
350
+ if (this.isDisplayable) {
351
+ set.delete(this);
352
+ return;
353
+ }
354
+ if (this.realityChildren !== undefined) {
355
+ for (const child of this.realityChildren)
356
+ child.removeFirstDisplayableChildrenFromSet(set);
357
+ }
246
358
  }
247
359
  /** @internal */
248
360
  computeVisibilityFactor(args) {
@@ -269,26 +381,6 @@ class RealityTile extends internal_1.Tile {
269
381
  return this.maximumSize / args.getPixelSize(this);
270
382
  }
271
383
  /** @internal */
272
- preloadTilesInFrustum(args, context, preloadSizeModifier) {
273
- const visibility = this.computeVisibilityFactor(args);
274
- if (visibility < 0)
275
- return;
276
- if (visibility * preloadSizeModifier > 1) {
277
- if (this.isDisplayable)
278
- context.preload(this, args);
279
- }
280
- else {
281
- const childrenLoadStatus = this.loadChildren(); // NB: asynchronous
282
- if (internal_1.TileTreeLoadStatus.Loading === childrenLoadStatus) {
283
- args.markChildrenLoading();
284
- }
285
- else if (undefined !== this.realityChildren) {
286
- for (const child of this.realityChildren)
287
- child.preloadTilesInFrustum(args, context, preloadSizeModifier);
288
- }
289
- }
290
- }
291
- /** @internal */
292
384
  get _anyChildNotFound() {
293
385
  if (undefined !== this.children)
294
386
  for (const child of this.children)