@itwin/core-frontend 3.1.0-dev.8 → 3.1.2

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 (673) hide show
  1. package/CHANGELOG.md +217 -35
  2. package/lib/cjs/AccuSnap.js +2 -2
  3. package/lib/cjs/AccuSnap.js.map +1 -1
  4. package/lib/cjs/ApproximateTerrainHeights.d.ts +1 -1
  5. package/lib/cjs/ApproximateTerrainHeights.d.ts.map +1 -1
  6. package/lib/cjs/ApproximateTerrainHeights.js +22 -8
  7. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  8. package/lib/cjs/ApproximateTerrainHeightsProps.d.ts +12 -0
  9. package/lib/cjs/ApproximateTerrainHeightsProps.d.ts.map +1 -0
  10. package/lib/cjs/ApproximateTerrainHeightsProps.js +13 -0
  11. package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -0
  12. package/lib/cjs/CategorySelectorState.js +1 -1
  13. package/lib/cjs/CategorySelectorState.js.map +1 -1
  14. package/lib/cjs/DisplayStyleState.d.ts +4 -3
  15. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  16. package/lib/cjs/DisplayStyleState.js +32 -8
  17. package/lib/cjs/DisplayStyleState.js.map +1 -1
  18. package/lib/cjs/DrawingViewState.d.ts.map +1 -1
  19. package/lib/cjs/DrawingViewState.js +6 -5
  20. package/lib/cjs/DrawingViewState.js.map +1 -1
  21. package/lib/cjs/FrontendLoggerCategory.d.ts +3 -1
  22. package/lib/cjs/FrontendLoggerCategory.d.ts.map +1 -1
  23. package/lib/cjs/FrontendLoggerCategory.js +2 -0
  24. package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
  25. package/lib/cjs/IModelApp.d.ts +10 -4
  26. package/lib/cjs/IModelApp.d.ts.map +1 -1
  27. package/lib/cjs/IModelApp.js +26 -13
  28. package/lib/cjs/IModelApp.js.map +1 -1
  29. package/lib/cjs/IModelConnection.d.ts +3 -2
  30. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  31. package/lib/cjs/IModelConnection.js +6 -4
  32. package/lib/cjs/IModelConnection.js.map +1 -1
  33. package/lib/cjs/ImageUtil.d.ts.map +1 -1
  34. package/lib/cjs/ImageUtil.js +8 -14
  35. package/lib/cjs/ImageUtil.js.map +1 -1
  36. package/lib/cjs/LocalhostIpcApp.d.ts +2 -0
  37. package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
  38. package/lib/cjs/LocalhostIpcApp.js +10 -4
  39. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  40. package/lib/cjs/RealityDataSource.d.ts +60 -14
  41. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  42. package/lib/cjs/RealityDataSource.js +36 -235
  43. package/lib/cjs/RealityDataSource.js.map +1 -1
  44. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
  45. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
  46. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +166 -0
  47. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
  48. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +83 -0
  49. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -0
  50. package/lib/cjs/RealityDataSourceContextShareImpl.js +234 -0
  51. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -0
  52. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
  53. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
  54. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +135 -0
  55. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -0
  56. package/lib/cjs/SheetViewState.js +4 -0
  57. package/lib/cjs/SheetViewState.js.map +1 -1
  58. package/lib/cjs/ViewState.d.ts +8 -0
  59. package/lib/cjs/ViewState.d.ts.map +1 -1
  60. package/lib/cjs/ViewState.js +1 -1
  61. package/lib/cjs/ViewState.js.map +1 -1
  62. package/lib/cjs/Viewport.d.ts +30 -12
  63. package/lib/cjs/Viewport.d.ts.map +1 -1
  64. package/lib/cjs/Viewport.js +43 -1
  65. package/lib/cjs/Viewport.js.map +1 -1
  66. package/lib/cjs/core-frontend.d.ts +6 -4
  67. package/lib/cjs/core-frontend.d.ts.map +1 -1
  68. package/lib/cjs/core-frontend.js +6 -4
  69. package/lib/cjs/core-frontend.js.map +1 -1
  70. package/lib/cjs/extension/Extension.d.ts +48 -0
  71. package/lib/cjs/extension/Extension.d.ts.map +1 -0
  72. package/lib/cjs/extension/Extension.js +18 -0
  73. package/lib/cjs/extension/Extension.js.map +1 -0
  74. package/lib/cjs/extension/ExtensionAdmin.d.ts +64 -0
  75. package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -0
  76. package/lib/cjs/extension/ExtensionAdmin.js +106 -0
  77. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -0
  78. package/lib/cjs/extension/ExtensionHost.d.ts +23 -0
  79. package/lib/cjs/extension/ExtensionHost.d.ts.map +1 -0
  80. package/lib/cjs/extension/ExtensionHost.js +26 -0
  81. package/lib/cjs/extension/ExtensionHost.js.map +1 -0
  82. package/lib/cjs/extension/ExtensionImpl.d.ts +21 -0
  83. package/lib/cjs/extension/ExtensionImpl.d.ts.map +1 -0
  84. package/lib/cjs/extension/ExtensionImpl.js +45 -0
  85. package/lib/cjs/extension/ExtensionImpl.js.map +1 -0
  86. package/lib/cjs/extension/ExtensionLoader.d.ts +26 -0
  87. package/lib/cjs/extension/ExtensionLoader.d.ts.map +1 -0
  88. package/lib/cjs/extension/ExtensionLoader.js +10 -0
  89. package/lib/cjs/extension/ExtensionLoader.js.map +1 -0
  90. package/lib/cjs/extension/ExtensionRuntime.d.ts +5 -0
  91. package/lib/cjs/extension/ExtensionRuntime.d.ts.map +1 -0
  92. package/lib/cjs/extension/ExtensionRuntime.js +86 -0
  93. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -0
  94. package/lib/cjs/extension/extensions.d.ts +19 -0
  95. package/lib/cjs/extension/extensions.d.ts.map +1 -0
  96. package/lib/cjs/extension/extensions.js +36 -0
  97. package/lib/cjs/extension/extensions.js.map +1 -0
  98. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
  99. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  100. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +48 -44
  101. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  102. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +90 -80
  103. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  104. package/lib/cjs/quantity-formatting/QuantityFormatter.js +85 -45
  105. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  106. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
  107. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
  108. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js +32 -0
  109. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
  110. package/lib/cjs/quantity-formatting/UnitsData.d.ts +11 -0
  111. package/lib/cjs/quantity-formatting/UnitsData.d.ts.map +1 -0
  112. package/lib/cjs/quantity-formatting/UnitsData.js +59 -0
  113. package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -0
  114. package/lib/cjs/render/GraphicBranch.d.ts +2 -0
  115. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  116. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  117. package/lib/cjs/render/RenderPlanarClassifier.d.ts +1 -1
  118. package/lib/cjs/render/RenderPlanarClassifier.d.ts.map +1 -1
  119. package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
  120. package/lib/cjs/render/RenderSystem.d.ts +12 -7
  121. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  122. package/lib/cjs/render/RenderSystem.js +8 -5
  123. package/lib/cjs/render/RenderSystem.js.map +1 -1
  124. package/lib/cjs/render/RenderTarget.d.ts +4 -4
  125. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  126. package/lib/cjs/render/RenderTarget.js.map +1 -1
  127. package/lib/cjs/render/Scene.d.ts.map +1 -1
  128. package/lib/cjs/render/Scene.js.map +1 -1
  129. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
  130. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
  131. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
  132. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
  133. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  134. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  135. package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
  136. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/BranchState.js +5 -3
  138. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  139. package/lib/cjs/render/webgl/DrawCommand.js +1 -1
  140. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  141. package/lib/cjs/render/webgl/Graphic.d.ts +5 -3
  142. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/Graphic.js +7 -2
  144. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  145. package/lib/cjs/render/webgl/PlanarClassifier.d.ts +4 -1
  146. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  147. package/lib/cjs/render/webgl/PlanarClassifier.js +22 -9
  148. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  149. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts +2 -2
  150. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  151. package/lib/cjs/render/webgl/PlanarTextureProjection.js +5 -3
  152. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  153. package/lib/cjs/render/webgl/RealityMesh.d.ts +31 -11
  154. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  155. package/lib/cjs/render/webgl/RealityMesh.js +155 -52
  156. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  157. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  158. package/lib/cjs/render/webgl/RenderCommands.js +4 -0
  159. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  160. package/lib/cjs/render/webgl/SceneCompositor.d.ts +3 -0
  161. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  162. package/lib/cjs/render/webgl/SceneCompositor.js +45 -19
  163. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  164. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -0
  165. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  166. package/lib/cjs/render/webgl/ShaderProgram.js +1 -0
  167. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  168. package/lib/cjs/render/webgl/System.d.ts +10 -10
  169. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  170. package/lib/cjs/render/webgl/System.js +5 -5
  171. package/lib/cjs/render/webgl/System.js.map +1 -1
  172. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  173. package/lib/cjs/render/webgl/Target.js.map +1 -1
  174. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +1 -1
  175. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  176. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  177. package/lib/cjs/render/webgl/glsl/RealityMesh.js +102 -27
  178. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  179. package/lib/cjs/tile/ClassifierTileTree.d.ts +4 -2
  180. package/lib/cjs/tile/ClassifierTileTree.d.ts.map +1 -1
  181. package/lib/cjs/tile/ClassifierTileTree.js +31 -16
  182. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  183. package/lib/cjs/tile/GltfReader.d.ts +22 -3
  184. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  185. package/lib/cjs/tile/GltfReader.js +224 -40
  186. package/lib/cjs/tile/GltfReader.js.map +1 -1
  187. package/lib/cjs/tile/IModelTileRequestChannels.d.ts +3 -3
  188. package/lib/cjs/tile/IModelTileRequestChannels.d.ts.map +1 -1
  189. package/lib/cjs/tile/IModelTileRequestChannels.js +7 -11
  190. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  191. package/lib/cjs/tile/OPCFormatInterpreter.d.ts +22 -0
  192. package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -0
  193. package/lib/cjs/tile/OPCFormatInterpreter.js +92 -0
  194. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -0
  195. package/lib/cjs/tile/PntsReader.d.ts +1 -1
  196. package/lib/cjs/tile/PntsReader.d.ts.map +1 -1
  197. package/lib/cjs/tile/PntsReader.js +170 -36
  198. package/lib/cjs/tile/PntsReader.js.map +1 -1
  199. package/lib/cjs/tile/PrimaryTileTree.d.ts +18 -2
  200. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  201. package/lib/cjs/tile/PrimaryTileTree.js +53 -2
  202. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  203. package/lib/cjs/tile/RealityModelTileTree.d.ts +24 -3
  204. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  205. package/lib/cjs/tile/RealityModelTileTree.js +36 -11
  206. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  207. package/lib/cjs/tile/RealityTile.d.ts +16 -2
  208. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  209. package/lib/cjs/tile/RealityTile.js +32 -0
  210. package/lib/cjs/tile/RealityTile.js.map +1 -1
  211. package/lib/cjs/tile/RealityTileDrawArgs.d.ts +4 -1
  212. package/lib/cjs/tile/RealityTileDrawArgs.d.ts.map +1 -1
  213. package/lib/cjs/tile/RealityTileDrawArgs.js +3 -1
  214. package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
  215. package/lib/cjs/tile/RealityTileLoader.d.ts +7 -4
  216. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  217. package/lib/cjs/tile/RealityTileLoader.js +19 -5
  218. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  219. package/lib/cjs/tile/RealityTileTree.d.ts +4 -1
  220. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  221. package/lib/cjs/tile/RealityTileTree.js +11 -3
  222. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  223. package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
  224. package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
  225. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +179 -0
  226. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -0
  227. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  228. package/lib/cjs/tile/TileAdmin.js +0 -5
  229. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  230. package/lib/cjs/tile/TileDrawArgs.d.ts +2 -0
  231. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  232. package/lib/cjs/tile/TileDrawArgs.js +5 -0
  233. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  234. package/lib/cjs/tile/TileGeometryCollector.d.ts +80 -0
  235. package/lib/cjs/tile/TileGeometryCollector.d.ts.map +1 -0
  236. package/lib/cjs/tile/TileGeometryCollector.js +71 -0
  237. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -0
  238. package/lib/cjs/tile/TileRequestChannels.d.ts +0 -4
  239. package/lib/cjs/tile/TileRequestChannels.d.ts.map +1 -1
  240. package/lib/cjs/tile/TileRequestChannels.js +1 -6
  241. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  242. package/lib/cjs/tile/TileTree.d.ts +7 -1
  243. package/lib/cjs/tile/TileTree.d.ts.map +1 -1
  244. package/lib/cjs/tile/TileTree.js +7 -0
  245. package/lib/cjs/tile/TileTree.js.map +1 -1
  246. package/lib/cjs/tile/TileTreeReference.d.ts +26 -1
  247. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  248. package/lib/cjs/tile/TileTreeReference.js +40 -0
  249. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  250. package/lib/cjs/tile/internal.d.ts +4 -0
  251. package/lib/cjs/tile/internal.d.ts.map +1 -1
  252. package/lib/cjs/tile/internal.js +4 -0
  253. package/lib/cjs/tile/internal.js.map +1 -1
  254. package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -2
  255. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  256. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +5 -3
  257. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  258. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +45 -12
  259. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  260. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +2 -2
  261. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  262. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  263. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
  264. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  265. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  266. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +2 -2
  267. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  268. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +4 -3
  269. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  270. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
  271. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
  272. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  273. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -3
  274. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  275. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +13 -11
  276. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  277. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
  278. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  279. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  280. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -3
  281. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  282. package/lib/cjs/tile/map/ImageryTileTree.js +4 -3
  283. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  284. package/lib/cjs/tile/map/MapFeatureInfo.d.ts +26 -0
  285. package/lib/cjs/tile/map/MapFeatureInfo.d.ts.map +1 -0
  286. package/lib/cjs/tile/map/MapFeatureInfo.js +19 -0
  287. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -0
  288. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +4 -4
  289. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  290. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  291. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +3 -3
  292. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  293. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  294. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +5 -4
  295. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  296. package/lib/cjs/tile/map/MapLayerImageryProvider.js +5 -1
  297. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  298. package/lib/cjs/tile/map/MapLayerSources.d.ts +2 -2
  299. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  300. package/lib/cjs/tile/map/MapLayerSources.js +6 -4
  301. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  302. package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts +10 -2
  303. package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
  304. package/lib/cjs/tile/map/MapLayerTileTreeReference.js +26 -3
  305. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  306. package/lib/cjs/tile/map/MapTile.d.ts +12 -10
  307. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  308. package/lib/cjs/tile/map/MapTile.js +60 -39
  309. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  310. package/lib/cjs/tile/map/MapTileLoader.d.ts +2 -1
  311. package/lib/cjs/tile/map/MapTileLoader.d.ts.map +1 -1
  312. package/lib/cjs/tile/map/MapTileLoader.js +4 -1
  313. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  314. package/lib/cjs/tile/map/MapTileTree.d.ts +18 -8
  315. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  316. package/lib/cjs/tile/map/MapTileTree.js +150 -63
  317. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  318. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  319. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +1 -1
  320. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  321. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
  322. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  323. package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
  324. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  325. package/lib/cjs/tools/ToolAdmin.d.ts +2 -3
  326. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  327. package/lib/cjs/tools/ToolAdmin.js +7 -2
  328. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  329. package/lib/cjs/tools/ViewTool.d.ts +4 -4
  330. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  331. package/lib/cjs/tools/ViewTool.js +1 -1
  332. package/lib/cjs/tools/ViewTool.js.map +1 -1
  333. package/lib/esm/AccuSnap.js +2 -2
  334. package/lib/esm/AccuSnap.js.map +1 -1
  335. package/lib/esm/ApproximateTerrainHeights.d.ts +1 -1
  336. package/lib/esm/ApproximateTerrainHeights.d.ts.map +1 -1
  337. package/lib/esm/ApproximateTerrainHeights.js +3 -8
  338. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  339. package/lib/esm/ApproximateTerrainHeightsProps.d.ts +12 -0
  340. package/lib/esm/ApproximateTerrainHeightsProps.d.ts.map +1 -0
  341. package/lib/esm/ApproximateTerrainHeightsProps.js +10 -0
  342. package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -0
  343. package/lib/esm/CategorySelectorState.js +1 -1
  344. package/lib/esm/CategorySelectorState.js.map +1 -1
  345. package/lib/esm/DisplayStyleState.d.ts +4 -3
  346. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  347. package/lib/esm/DisplayStyleState.js +34 -10
  348. package/lib/esm/DisplayStyleState.js.map +1 -1
  349. package/lib/esm/DrawingViewState.d.ts.map +1 -1
  350. package/lib/esm/DrawingViewState.js +6 -5
  351. package/lib/esm/DrawingViewState.js.map +1 -1
  352. package/lib/esm/FrontendLoggerCategory.d.ts +3 -1
  353. package/lib/esm/FrontendLoggerCategory.d.ts.map +1 -1
  354. package/lib/esm/FrontendLoggerCategory.js +2 -0
  355. package/lib/esm/FrontendLoggerCategory.js.map +1 -1
  356. package/lib/esm/IModelApp.d.ts +10 -4
  357. package/lib/esm/IModelApp.d.ts.map +1 -1
  358. package/lib/esm/IModelApp.js +25 -12
  359. package/lib/esm/IModelApp.js.map +1 -1
  360. package/lib/esm/IModelConnection.d.ts +3 -2
  361. package/lib/esm/IModelConnection.d.ts.map +1 -1
  362. package/lib/esm/IModelConnection.js +7 -5
  363. package/lib/esm/IModelConnection.js.map +1 -1
  364. package/lib/esm/ImageUtil.d.ts.map +1 -1
  365. package/lib/esm/ImageUtil.js +8 -14
  366. package/lib/esm/ImageUtil.js.map +1 -1
  367. package/lib/esm/LocalhostIpcApp.d.ts +2 -0
  368. package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
  369. package/lib/esm/LocalhostIpcApp.js +10 -4
  370. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  371. package/lib/esm/RealityDataSource.d.ts +60 -14
  372. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  373. package/lib/esm/RealityDataSource.js +37 -237
  374. package/lib/esm/RealityDataSource.js.map +1 -1
  375. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
  376. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
  377. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +162 -0
  378. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
  379. package/lib/esm/RealityDataSourceContextShareImpl.d.ts +83 -0
  380. package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -0
  381. package/lib/esm/RealityDataSourceContextShareImpl.js +230 -0
  382. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -0
  383. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
  384. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
  385. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +131 -0
  386. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -0
  387. package/lib/esm/SheetViewState.js +4 -0
  388. package/lib/esm/SheetViewState.js.map +1 -1
  389. package/lib/esm/ViewState.d.ts +8 -0
  390. package/lib/esm/ViewState.d.ts.map +1 -1
  391. package/lib/esm/ViewState.js +1 -1
  392. package/lib/esm/ViewState.js.map +1 -1
  393. package/lib/esm/Viewport.d.ts +30 -12
  394. package/lib/esm/Viewport.d.ts.map +1 -1
  395. package/lib/esm/Viewport.js +43 -1
  396. package/lib/esm/Viewport.js.map +1 -1
  397. package/lib/esm/core-frontend.d.ts +6 -4
  398. package/lib/esm/core-frontend.d.ts.map +1 -1
  399. package/lib/esm/core-frontend.js +6 -4
  400. package/lib/esm/core-frontend.js.map +1 -1
  401. package/lib/esm/extension/Extension.d.ts +48 -0
  402. package/lib/esm/extension/Extension.d.ts.map +1 -0
  403. package/lib/esm/extension/Extension.js +15 -0
  404. package/lib/esm/extension/Extension.js.map +1 -0
  405. package/lib/esm/extension/ExtensionAdmin.d.ts +64 -0
  406. package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -0
  407. package/lib/esm/extension/ExtensionAdmin.js +102 -0
  408. package/lib/esm/extension/ExtensionAdmin.js.map +1 -0
  409. package/lib/esm/extension/ExtensionHost.d.ts +23 -0
  410. package/lib/esm/extension/ExtensionHost.d.ts.map +1 -0
  411. package/lib/esm/extension/ExtensionHost.js +22 -0
  412. package/lib/esm/extension/ExtensionHost.js.map +1 -0
  413. package/lib/esm/extension/ExtensionImpl.d.ts +21 -0
  414. package/lib/esm/extension/ExtensionImpl.d.ts.map +1 -0
  415. package/lib/esm/extension/ExtensionImpl.js +40 -0
  416. package/lib/esm/extension/ExtensionImpl.js.map +1 -0
  417. package/lib/esm/extension/ExtensionLoader.d.ts +26 -0
  418. package/lib/esm/extension/ExtensionLoader.d.ts.map +1 -0
  419. package/lib/esm/extension/ExtensionLoader.js +9 -0
  420. package/lib/esm/extension/ExtensionLoader.js.map +1 -0
  421. package/lib/esm/extension/ExtensionRuntime.d.ts +5 -0
  422. package/lib/esm/extension/ExtensionRuntime.d.ts.map +1 -0
  423. package/lib/esm/extension/ExtensionRuntime.js +84 -0
  424. package/lib/esm/extension/ExtensionRuntime.js.map +1 -0
  425. package/lib/esm/extension/extensions.d.ts +19 -0
  426. package/lib/esm/extension/extensions.d.ts.map +1 -0
  427. package/lib/esm/extension/extensions.js +24 -0
  428. package/lib/esm/extension/extensions.js.map +1 -0
  429. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
  430. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  431. package/lib/esm/quantity-formatting/BasicUnitsProvider.js +48 -44
  432. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  433. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +90 -80
  434. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  435. package/lib/esm/quantity-formatting/QuantityFormatter.js +85 -42
  436. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  437. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
  438. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
  439. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js +26 -0
  440. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
  441. package/lib/esm/quantity-formatting/UnitsData.d.ts +11 -0
  442. package/lib/esm/quantity-formatting/UnitsData.d.ts.map +1 -0
  443. package/lib/esm/quantity-formatting/UnitsData.js +56 -0
  444. package/lib/esm/quantity-formatting/UnitsData.js.map +1 -0
  445. package/lib/esm/render/GraphicBranch.d.ts +2 -0
  446. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  447. package/lib/esm/render/GraphicBranch.js.map +1 -1
  448. package/lib/esm/render/RenderPlanarClassifier.d.ts +1 -1
  449. package/lib/esm/render/RenderPlanarClassifier.d.ts.map +1 -1
  450. package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
  451. package/lib/esm/render/RenderSystem.d.ts +12 -7
  452. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  453. package/lib/esm/render/RenderSystem.js +6 -3
  454. package/lib/esm/render/RenderSystem.js.map +1 -1
  455. package/lib/esm/render/RenderTarget.d.ts +4 -4
  456. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  457. package/lib/esm/render/RenderTarget.js.map +1 -1
  458. package/lib/esm/render/Scene.d.ts.map +1 -1
  459. package/lib/esm/render/Scene.js.map +1 -1
  460. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
  461. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
  462. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
  463. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
  464. package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
  465. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  466. package/lib/esm/render/webgl/BranchState.d.ts +2 -0
  467. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  468. package/lib/esm/render/webgl/BranchState.js +5 -3
  469. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  470. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  471. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  472. package/lib/esm/render/webgl/Graphic.d.ts +5 -3
  473. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  474. package/lib/esm/render/webgl/Graphic.js +7 -2
  475. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  476. package/lib/esm/render/webgl/PlanarClassifier.d.ts +4 -1
  477. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  478. package/lib/esm/render/webgl/PlanarClassifier.js +22 -9
  479. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  480. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts +2 -2
  481. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  482. package/lib/esm/render/webgl/PlanarTextureProjection.js +5 -3
  483. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  484. package/lib/esm/render/webgl/RealityMesh.d.ts +31 -11
  485. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  486. package/lib/esm/render/webgl/RealityMesh.js +155 -52
  487. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  488. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  489. package/lib/esm/render/webgl/RenderCommands.js +4 -0
  490. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  491. package/lib/esm/render/webgl/SceneCompositor.d.ts +3 -0
  492. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  493. package/lib/esm/render/webgl/SceneCompositor.js +45 -19
  494. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  495. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -0
  496. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  497. package/lib/esm/render/webgl/ShaderProgram.js +1 -0
  498. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  499. package/lib/esm/render/webgl/System.d.ts +10 -10
  500. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  501. package/lib/esm/render/webgl/System.js +6 -6
  502. package/lib/esm/render/webgl/System.js.map +1 -1
  503. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  504. package/lib/esm/render/webgl/Target.js.map +1 -1
  505. package/lib/esm/render/webgl/glsl/PlanarClassification.js +1 -1
  506. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  507. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  508. package/lib/esm/render/webgl/glsl/RealityMesh.js +103 -28
  509. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  510. package/lib/esm/tile/ClassifierTileTree.d.ts +4 -2
  511. package/lib/esm/tile/ClassifierTileTree.d.ts.map +1 -1
  512. package/lib/esm/tile/ClassifierTileTree.js +32 -17
  513. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  514. package/lib/esm/tile/GltfReader.d.ts +22 -3
  515. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  516. package/lib/esm/tile/GltfReader.js +207 -42
  517. package/lib/esm/tile/GltfReader.js.map +1 -1
  518. package/lib/esm/tile/IModelTileRequestChannels.d.ts +3 -3
  519. package/lib/esm/tile/IModelTileRequestChannels.d.ts.map +1 -1
  520. package/lib/esm/tile/IModelTileRequestChannels.js +7 -11
  521. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  522. package/lib/esm/tile/OPCFormatInterpreter.d.ts +22 -0
  523. package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -0
  524. package/lib/esm/tile/OPCFormatInterpreter.js +88 -0
  525. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -0
  526. package/lib/esm/tile/PntsReader.d.ts +1 -1
  527. package/lib/esm/tile/PntsReader.d.ts.map +1 -1
  528. package/lib/esm/tile/PntsReader.js +154 -39
  529. package/lib/esm/tile/PntsReader.js.map +1 -1
  530. package/lib/esm/tile/PrimaryTileTree.d.ts +18 -2
  531. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  532. package/lib/esm/tile/PrimaryTileTree.js +51 -2
  533. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  534. package/lib/esm/tile/RealityModelTileTree.d.ts +24 -3
  535. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  536. package/lib/esm/tile/RealityModelTileTree.js +36 -12
  537. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  538. package/lib/esm/tile/RealityTile.d.ts +16 -2
  539. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  540. package/lib/esm/tile/RealityTile.js +32 -0
  541. package/lib/esm/tile/RealityTile.js.map +1 -1
  542. package/lib/esm/tile/RealityTileDrawArgs.d.ts +4 -1
  543. package/lib/esm/tile/RealityTileDrawArgs.d.ts.map +1 -1
  544. package/lib/esm/tile/RealityTileDrawArgs.js +3 -1
  545. package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
  546. package/lib/esm/tile/RealityTileLoader.d.ts +7 -4
  547. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  548. package/lib/esm/tile/RealityTileLoader.js +19 -5
  549. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  550. package/lib/esm/tile/RealityTileTree.d.ts +4 -1
  551. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  552. package/lib/esm/tile/RealityTileTree.js +13 -5
  553. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  554. package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
  555. package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
  556. package/lib/esm/tile/ThreeDTileFormatInterpreter.js +175 -0
  557. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -0
  558. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  559. package/lib/esm/tile/TileAdmin.js +0 -5
  560. package/lib/esm/tile/TileAdmin.js.map +1 -1
  561. package/lib/esm/tile/TileDrawArgs.d.ts +2 -0
  562. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  563. package/lib/esm/tile/TileDrawArgs.js +5 -0
  564. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  565. package/lib/esm/tile/TileGeometryCollector.d.ts +80 -0
  566. package/lib/esm/tile/TileGeometryCollector.d.ts.map +1 -0
  567. package/lib/esm/tile/TileGeometryCollector.js +67 -0
  568. package/lib/esm/tile/TileGeometryCollector.js.map +1 -0
  569. package/lib/esm/tile/TileRequestChannels.d.ts +0 -4
  570. package/lib/esm/tile/TileRequestChannels.d.ts.map +1 -1
  571. package/lib/esm/tile/TileRequestChannels.js +1 -6
  572. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  573. package/lib/esm/tile/TileTree.d.ts +7 -1
  574. package/lib/esm/tile/TileTree.d.ts.map +1 -1
  575. package/lib/esm/tile/TileTree.js +7 -0
  576. package/lib/esm/tile/TileTree.js.map +1 -1
  577. package/lib/esm/tile/TileTreeReference.d.ts +26 -1
  578. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  579. package/lib/esm/tile/TileTreeReference.js +42 -2
  580. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  581. package/lib/esm/tile/internal.d.ts +4 -0
  582. package/lib/esm/tile/internal.d.ts.map +1 -1
  583. package/lib/esm/tile/internal.js +4 -0
  584. package/lib/esm/tile/internal.js.map +1 -1
  585. package/lib/esm/tile/map/CesiumTerrainProvider.js +2 -2
  586. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  587. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +5 -3
  588. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  589. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -13
  590. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  591. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +2 -2
  592. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  593. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  594. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
  595. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  596. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  597. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +2 -2
  598. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  599. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +4 -3
  600. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  601. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
  602. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
  603. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  604. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -3
  605. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  606. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +13 -11
  607. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  608. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
  609. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  610. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  611. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -3
  612. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  613. package/lib/esm/tile/map/ImageryTileTree.js +4 -3
  614. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  615. package/lib/esm/tile/map/MapFeatureInfo.d.ts +26 -0
  616. package/lib/esm/tile/map/MapFeatureInfo.d.ts.map +1 -0
  617. package/lib/esm/tile/map/MapFeatureInfo.js +15 -0
  618. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -0
  619. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +4 -4
  620. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  621. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  622. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +3 -3
  623. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  624. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  625. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +5 -4
  626. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  627. package/lib/esm/tile/map/MapLayerImageryProvider.js +5 -1
  628. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  629. package/lib/esm/tile/map/MapLayerSources.d.ts +2 -2
  630. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  631. package/lib/esm/tile/map/MapLayerSources.js +6 -4
  632. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  633. package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts +10 -2
  634. package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
  635. package/lib/esm/tile/map/MapLayerTileTreeReference.js +25 -3
  636. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  637. package/lib/esm/tile/map/MapTile.d.ts +12 -10
  638. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  639. package/lib/esm/tile/map/MapTile.js +60 -39
  640. package/lib/esm/tile/map/MapTile.js.map +1 -1
  641. package/lib/esm/tile/map/MapTileLoader.d.ts +2 -1
  642. package/lib/esm/tile/map/MapTileLoader.d.ts.map +1 -1
  643. package/lib/esm/tile/map/MapTileLoader.js +4 -1
  644. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  645. package/lib/esm/tile/map/MapTileTree.d.ts +18 -8
  646. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  647. package/lib/esm/tile/map/MapTileTree.js +152 -65
  648. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  649. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  650. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +2 -2
  651. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  652. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
  653. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  654. package/lib/esm/tile/map/WmsCapabilities.js +11 -10
  655. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  656. package/lib/esm/tools/ToolAdmin.d.ts +2 -3
  657. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  658. package/lib/esm/tools/ToolAdmin.js +8 -3
  659. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  660. package/lib/esm/tools/ViewTool.d.ts +4 -4
  661. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  662. package/lib/esm/tools/ViewTool.js +1 -1
  663. package/lib/esm/tools/ViewTool.js.map +1 -1
  664. package/package.json +22 -20
  665. package/lib/cjs/tile/DracoDecoder.d.ts +0 -20
  666. package/lib/cjs/tile/DracoDecoder.d.ts.map +0 -1
  667. package/lib/cjs/tile/DracoDecoder.js +0 -169
  668. package/lib/cjs/tile/DracoDecoder.js.map +0 -1
  669. package/lib/esm/tile/DracoDecoder.d.ts +0 -20
  670. package/lib/esm/tile/DracoDecoder.d.ts.map +0 -1
  671. package/lib/esm/tile/DracoDecoder.js +0 -165
  672. package/lib/esm/tile/DracoDecoder.js.map +0 -1
  673. package/lib/public/assets/approximateTerrainHeights.json +0 -1
@@ -6,16 +6,16 @@ import { IModelTile, IModelTileContent, TileRequestChannel } from "./internal";
6
6
  * @internal
7
7
  */
8
8
  export declare class IModelTileRequestChannels {
9
- private _cloudStorage?;
9
+ private _cloudStorage;
10
10
  private readonly _contentCache?;
11
11
  readonly rpc: TileRequestChannel;
12
12
  constructor(args: {
13
13
  concurrency: number;
14
14
  usesHttp: boolean;
15
15
  cacheMetadata: boolean;
16
+ cacheConcurrency: number;
16
17
  });
17
- get cloudStorage(): TileRequestChannel | undefined;
18
- enableCloudStorageCache(concurrency: number): TileRequestChannel;
18
+ get cloudStorage(): TileRequestChannel;
19
19
  [Symbol.iterator](): Iterator<TileRequestChannel>;
20
20
  setRpcConcurrency(concurrency: number): void;
21
21
  getChannelForTile(tile: IModelTile): TileRequestChannel;
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTileRequestChannels.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAqB,kBAAkB,EAAY,MAAM,YAAY,CAAC;AAoI5G;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAC,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAiC;IAChE,SAAgB,GAAG,EAAE,kBAAkB,CAAC;gBAErB,IAAI,EAAE;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;KACxB;IAUD,IAAW,YAAY,IAAI,kBAAkB,GAAG,SAAS,CAExD;IAEM,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB;IAOhE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAWjD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB;IAI9D,0BAA0B;IACnB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS;CAGzE"}
1
+ {"version":3,"file":"IModelTileRequestChannels.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAqB,kBAAkB,EAAY,MAAM,YAAY,CAAC;AAoI5G;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAiC;IAChE,SAAgB,GAAG,EAAE,kBAAkB,CAAC;gBAErB,IAAI,EAAE;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAaD,IAAW,YAAY,IAAI,kBAAkB,CAE5C;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAWjD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB;IAI9D,0BAA0B;IACnB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS;CAGzE"}
@@ -126,23 +126,19 @@ class IModelTileMetadataCacheChannel extends internal_1.TileRequestChannel {
126
126
  */
127
127
  class IModelTileRequestChannels {
128
128
  constructor(args) {
129
+ var _a;
129
130
  const channelName = "itwinjs-tile-rpc";
130
131
  this.rpc = args.usesHttp ? new internal_1.TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);
131
- if (!args.cacheMetadata)
132
- return;
133
- this._contentCache = new IModelTileMetadataCacheChannel();
134
- this._contentCache.registerChannel(this.rpc);
132
+ if (args.cacheMetadata) {
133
+ this._contentCache = new IModelTileMetadataCacheChannel();
134
+ this._contentCache.registerChannel(this.rpc);
135
+ }
136
+ this._cloudStorage = new CloudStorageCacheChannel("itwinjs-cloud-cache", args.cacheConcurrency);
137
+ (_a = this._contentCache) === null || _a === void 0 ? void 0 : _a.registerChannel(this._cloudStorage);
135
138
  }
136
139
  get cloudStorage() {
137
140
  return this._cloudStorage;
138
141
  }
139
- enableCloudStorageCache(concurrency) {
140
- var _a;
141
- (0, core_bentley_1.assert)(undefined === this._cloudStorage);
142
- this._cloudStorage = new CloudStorageCacheChannel("itwinjs-cloud-cache", concurrency);
143
- (_a = this._contentCache) === null || _a === void 0 ? void 0 : _a.registerChannel(this._cloudStorage);
144
- return this._cloudStorage;
145
- }
146
142
  [Symbol.iterator]() {
147
143
  const channels = [this.rpc];
148
144
  if (this._cloudStorage)
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTileRequestChannels.js","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.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 { assert, compareStrings, SortedArray } from \"@itwin/core-bentley\";\r\nimport { TileTreeContentIds } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IpcApp } from \"../IpcApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { IModelTile, IModelTileContent, Tile, TileRequest, TileRequestChannel, TileTree } from \"./internal\";\r\n\r\n/** Handles requests to the cloud storage tile cache, if one is configured. If a tile's content is not found in the cache, subsequent requests for the same tile will\r\n * use the IModelTileChannel instead.\r\n */\r\nclass CloudStorageCacheChannel extends TileRequestChannel {\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n return IModelApp.tileAdmin.requestCachedTileContent(tile);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n request.tile.requestChannel = IModelApp.tileAdmin.channels.iModelChannels.rpc;\r\n ++this._statistics.totalCacheMisses;\r\n return true;\r\n }\r\n}\r\n\r\n/** For an [[IpcApp]], allows backend tile generation requests in progress to be canceled. */\r\nclass IModelTileChannel extends TileRequestChannel {\r\n private readonly _canceled = new Map<IModelConnection, Map<string, Set<string>>>();\r\n\r\n public override onActiveRequestCanceled(request: TileRequest): void {\r\n const tree = request.tile.tree;\r\n let entry = this._canceled.get(tree.iModel);\r\n if (!entry)\r\n this._canceled.set(tree.iModel, entry = new Map<string, Set<string>>());\r\n\r\n let ids = entry.get(tree.id);\r\n if (!ids)\r\n entry.set(tree.id, ids = new Set<string>());\r\n\r\n ids.add(request.tile.contentId);\r\n }\r\n\r\n public override processCancellations(): void {\r\n for (const [imodel, entries] of this._canceled) {\r\n const treeContentIds: TileTreeContentIds[] = [];\r\n for (const [treeId, tileIds] of entries) {\r\n const contentIds = Array.from(tileIds);\r\n treeContentIds.push({ treeId, contentIds });\r\n this._statistics.totalAbortedRequests += contentIds.length;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IpcApp.callIpcHost(\"cancelTileContentRequests\", imodel.getRpcProps(), treeContentIds);\r\n }\r\n\r\n this._canceled.clear();\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._canceled.delete(imodel);\r\n }\r\n}\r\n\r\ninterface CachedContent extends Omit<IModelTileContent, \"graphic\"> {\r\n contentId: string;\r\n hasGraphic: boolean;\r\n}\r\n\r\n/** If TileAdmin.Props.cacheTileMetadata is true, then this is the first channel through which we request content for an IModelTile.\r\n * It serves a niche purpose: a tile pre-generation agent that wants to ensure that every tile selected during interaction with the application\r\n * has its tile generated and cached in cloud storage. This agent might request thousands of tiles in sequence, causing a given tile to be discarded\r\n * and reloaded many times. To avoid pointlessly reloading tiles whose contents have already been generated, this channel caches the metadata for each tile;\r\n * on subsequent requests for the same tile, it produces the metadata and an empty RenderGraphic.\r\n */\r\nclass IModelTileMetadataCacheChannel extends TileRequestChannel {\r\n private readonly _cacheByIModel = new Map<IModelConnection, Map<TileTree, SortedArray<CachedContent>>>();\r\n\r\n public constructor() {\r\n super(\"itwinjs-imodel-metadata-cache\", 100);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n const channels = IModelApp.tileAdmin.channels.iModelChannels;\r\n request.tile.requestChannel = channels.cloudStorage ?? channels.rpc;\r\n return true;\r\n }\r\n\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n const content = this.getCachedContent(tile);\r\n return content ? { content } : undefined;\r\n }\r\n\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n const cached = this._cacheByIModel.get(tile.iModel)?.get(tile.tree)?.findEquivalent((x) => compareStrings(x.contentId, tile.contentId));\r\n if (!cached)\r\n return undefined;\r\n\r\n const content: IModelTileContent = {\r\n ...cached,\r\n graphic: cached.hasGraphic ? IModelApp.renderSystem.createGraphicList([]) : undefined,\r\n contentRange: cached.contentRange?.clone(),\r\n };\r\n\r\n return content;\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._cacheByIModel.delete(imodel);\r\n }\r\n\r\n public registerChannel(channel: TileRequestChannel): void {\r\n channel.contentCallback = (tile, content) => this.cache(tile, content);\r\n }\r\n\r\n private cache(tile: Tile, content: IModelTileContent): void {\r\n assert(tile instanceof IModelTile);\r\n let trees = this._cacheByIModel.get(tile.iModel);\r\n if (!trees)\r\n this._cacheByIModel.set(tile.iModel, trees = new Map<TileTree, SortedArray<CachedContent>>());\r\n\r\n let list = trees.get(tile.tree);\r\n if (!list)\r\n trees.set(tile.tree, list = new SortedArray<CachedContent>((lhs, rhs) => compareStrings(lhs.contentId, rhs.contentId)));\r\n\r\n assert(undefined === list.findEquivalent((x) => compareStrings(x.contentId, tile.contentId)));\r\n list.insert({\r\n contentId: tile.contentId,\r\n hasGraphic: undefined !== content.graphic,\r\n contentRange: content.contentRange?.clone(),\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n });\r\n }\r\n}\r\n\r\n/** TileRequestChannels used for requesting content for IModelTiles.\r\n * @internal\r\n */\r\nexport class IModelTileRequestChannels {\r\n private _cloudStorage?: TileRequestChannel;\r\n private readonly _contentCache?: IModelTileMetadataCacheChannel;\r\n public readonly rpc: TileRequestChannel;\r\n\r\n public constructor(args: {\r\n concurrency: number;\r\n usesHttp: boolean;\r\n cacheMetadata: boolean;\r\n }) {\r\n const channelName = \"itwinjs-tile-rpc\";\r\n this.rpc = args.usesHttp ? new TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);\r\n if (!args.cacheMetadata)\r\n return;\r\n\r\n this._contentCache = new IModelTileMetadataCacheChannel();\r\n this._contentCache.registerChannel(this.rpc);\r\n }\r\n\r\n public get cloudStorage(): TileRequestChannel | undefined {\r\n return this._cloudStorage;\r\n }\r\n\r\n public enableCloudStorageCache(concurrency: number): TileRequestChannel {\r\n assert(undefined === this._cloudStorage);\r\n this._cloudStorage = new CloudStorageCacheChannel(\"itwinjs-cloud-cache\", concurrency);\r\n this._contentCache?.registerChannel(this._cloudStorage);\r\n return this._cloudStorage;\r\n }\r\n\r\n public [Symbol.iterator](): Iterator<TileRequestChannel> {\r\n const channels = [this.rpc];\r\n if (this._cloudStorage)\r\n channels.push(this._cloudStorage);\r\n\r\n if (this._contentCache)\r\n channels.push(this._contentCache);\r\n\r\n return channels[Symbol.iterator]();\r\n }\r\n\r\n public setRpcConcurrency(concurrency: number): void {\r\n this.rpc.concurrency = concurrency;\r\n }\r\n\r\n public getChannelForTile(tile: IModelTile): TileRequestChannel {\r\n return tile.requestChannel || this._contentCache || this._cloudStorage || this.rpc;\r\n }\r\n\r\n /** Strictly for tests. */\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n return this._contentCache?.getCachedContent(tile);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"IModelTileRequestChannels.js","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.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 { assert, compareStrings, SortedArray } from \"@itwin/core-bentley\";\r\nimport { TileTreeContentIds } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IpcApp } from \"../IpcApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { IModelTile, IModelTileContent, Tile, TileRequest, TileRequestChannel, TileTree } from \"./internal\";\r\n\r\n/** Handles requests to the cloud storage tile cache, if one is configured. If a tile's content is not found in the cache, subsequent requests for the same tile will\r\n * use the IModelTileChannel instead.\r\n */\r\nclass CloudStorageCacheChannel extends TileRequestChannel {\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n return IModelApp.tileAdmin.requestCachedTileContent(tile);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n request.tile.requestChannel = IModelApp.tileAdmin.channels.iModelChannels.rpc;\r\n ++this._statistics.totalCacheMisses;\r\n return true;\r\n }\r\n}\r\n\r\n/** For an [[IpcApp]], allows backend tile generation requests in progress to be canceled. */\r\nclass IModelTileChannel extends TileRequestChannel {\r\n private readonly _canceled = new Map<IModelConnection, Map<string, Set<string>>>();\r\n\r\n public override onActiveRequestCanceled(request: TileRequest): void {\r\n const tree = request.tile.tree;\r\n let entry = this._canceled.get(tree.iModel);\r\n if (!entry)\r\n this._canceled.set(tree.iModel, entry = new Map<string, Set<string>>());\r\n\r\n let ids = entry.get(tree.id);\r\n if (!ids)\r\n entry.set(tree.id, ids = new Set<string>());\r\n\r\n ids.add(request.tile.contentId);\r\n }\r\n\r\n public override processCancellations(): void {\r\n for (const [imodel, entries] of this._canceled) {\r\n const treeContentIds: TileTreeContentIds[] = [];\r\n for (const [treeId, tileIds] of entries) {\r\n const contentIds = Array.from(tileIds);\r\n treeContentIds.push({ treeId, contentIds });\r\n this._statistics.totalAbortedRequests += contentIds.length;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IpcApp.callIpcHost(\"cancelTileContentRequests\", imodel.getRpcProps(), treeContentIds);\r\n }\r\n\r\n this._canceled.clear();\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._canceled.delete(imodel);\r\n }\r\n}\r\n\r\ninterface CachedContent extends Omit<IModelTileContent, \"graphic\"> {\r\n contentId: string;\r\n hasGraphic: boolean;\r\n}\r\n\r\n/** If TileAdmin.Props.cacheTileMetadata is true, then this is the first channel through which we request content for an IModelTile.\r\n * It serves a niche purpose: a tile pre-generation agent that wants to ensure that every tile selected during interaction with the application\r\n * has its tile generated and cached in cloud storage. This agent might request thousands of tiles in sequence, causing a given tile to be discarded\r\n * and reloaded many times. To avoid pointlessly reloading tiles whose contents have already been generated, this channel caches the metadata for each tile;\r\n * on subsequent requests for the same tile, it produces the metadata and an empty RenderGraphic.\r\n */\r\nclass IModelTileMetadataCacheChannel extends TileRequestChannel {\r\n private readonly _cacheByIModel = new Map<IModelConnection, Map<TileTree, SortedArray<CachedContent>>>();\r\n\r\n public constructor() {\r\n super(\"itwinjs-imodel-metadata-cache\", 100);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n const channels = IModelApp.tileAdmin.channels.iModelChannels;\r\n request.tile.requestChannel = channels.cloudStorage ?? channels.rpc;\r\n return true;\r\n }\r\n\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n const content = this.getCachedContent(tile);\r\n return content ? { content } : undefined;\r\n }\r\n\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n const cached = this._cacheByIModel.get(tile.iModel)?.get(tile.tree)?.findEquivalent((x) => compareStrings(x.contentId, tile.contentId));\r\n if (!cached)\r\n return undefined;\r\n\r\n const content: IModelTileContent = {\r\n ...cached,\r\n graphic: cached.hasGraphic ? IModelApp.renderSystem.createGraphicList([]) : undefined,\r\n contentRange: cached.contentRange?.clone(),\r\n };\r\n\r\n return content;\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._cacheByIModel.delete(imodel);\r\n }\r\n\r\n public registerChannel(channel: TileRequestChannel): void {\r\n channel.contentCallback = (tile, content) => this.cache(tile, content);\r\n }\r\n\r\n private cache(tile: Tile, content: IModelTileContent): void {\r\n assert(tile instanceof IModelTile);\r\n let trees = this._cacheByIModel.get(tile.iModel);\r\n if (!trees)\r\n this._cacheByIModel.set(tile.iModel, trees = new Map<TileTree, SortedArray<CachedContent>>());\r\n\r\n let list = trees.get(tile.tree);\r\n if (!list)\r\n trees.set(tile.tree, list = new SortedArray<CachedContent>((lhs, rhs) => compareStrings(lhs.contentId, rhs.contentId)));\r\n\r\n assert(undefined === list.findEquivalent((x) => compareStrings(x.contentId, tile.contentId)));\r\n list.insert({\r\n contentId: tile.contentId,\r\n hasGraphic: undefined !== content.graphic,\r\n contentRange: content.contentRange?.clone(),\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n });\r\n }\r\n}\r\n\r\n/** TileRequestChannels used for requesting content for IModelTiles.\r\n * @internal\r\n */\r\nexport class IModelTileRequestChannels {\r\n private _cloudStorage: TileRequestChannel;\r\n private readonly _contentCache?: IModelTileMetadataCacheChannel;\r\n public readonly rpc: TileRequestChannel;\r\n\r\n public constructor(args: {\r\n concurrency: number;\r\n usesHttp: boolean;\r\n cacheMetadata: boolean;\r\n cacheConcurrency: number;\r\n }) {\r\n const channelName = \"itwinjs-tile-rpc\";\r\n this.rpc = args.usesHttp ? new TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);\r\n\r\n if (args.cacheMetadata) {\r\n this._contentCache = new IModelTileMetadataCacheChannel();\r\n this._contentCache.registerChannel(this.rpc);\r\n }\r\n\r\n this._cloudStorage = new CloudStorageCacheChannel(\"itwinjs-cloud-cache\", args.cacheConcurrency);\r\n this._contentCache?.registerChannel(this._cloudStorage);\r\n }\r\n\r\n public get cloudStorage(): TileRequestChannel {\r\n return this._cloudStorage;\r\n }\r\n\r\n public [Symbol.iterator](): Iterator<TileRequestChannel> {\r\n const channels = [this.rpc];\r\n if (this._cloudStorage)\r\n channels.push(this._cloudStorage);\r\n\r\n if (this._contentCache)\r\n channels.push(this._contentCache);\r\n\r\n return channels[Symbol.iterator]();\r\n }\r\n\r\n public setRpcConcurrency(concurrency: number): void {\r\n this.rpc.concurrency = concurrency;\r\n }\r\n\r\n public getChannelForTile(tile: IModelTile): TileRequestChannel {\r\n return tile.requestChannel || this._contentCache || this._cloudStorage || this.rpc;\r\n }\r\n\r\n /** Strictly for tests. */\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n return this._contentCache?.getCachedContent(tile);\r\n }\r\n}\r\n"]}
@@ -0,0 +1,22 @@
1
+ import { PointCloudReader } from "@itwin/core-orbitgt";
2
+ import { SpatialLocationAndExtents } from "../RealityDataSource";
3
+ /**
4
+ * This class provide methods used to interpret Orbit Point Cloud (OPC) format
5
+ * @internal
6
+ */
7
+ export declare class OPCFormatInterpreter {
8
+ /** Gets an OPC file reader from a blobFileUrl
9
+ * @param blobFileURL the name of the file.
10
+ * @returns return a file reader open to read provided blob file
11
+ * @internal
12
+ */
13
+ static getFileReaderFromBlobFileURL(blobFileURL: string): Promise<PointCloudReader>;
14
+ /** Gets reality data spatial location and extents
15
+ * @param fileReader a file reader instance obtains from call to getFileReaderFromBlobFileURL
16
+ * @returns spatial location and volume of interest, in meters, centered around `spatial location`
17
+ * @throws [[RealityDataError]] if source is invalid or cannot be read
18
+ * @internal
19
+ */
20
+ static getSpatialLocationAndExtents(fileReader: PointCloudReader): Promise<SpatialLocationAndExtents>;
21
+ }
22
+ //# sourceMappingURL=OPCFormatInterpreter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OPCFormatInterpreter.d.ts","sourceRoot":"","sources":["../../../src/tile/OPCFormatInterpreter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAyF,gBAAgB,EAAS,MAAM,qBAAqB,CAAC;AAIrJ,OAAO,EAAoB,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAInF;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;;OAIG;WACiB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiBhG;;;;;OAKG;WACiB,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CA2CnH"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.OPCFormatInterpreter = void 0;
8
+ const core_common_1 = require("@itwin/core-common");
9
+ const core_geometry_1 = require("@itwin/core-geometry");
10
+ const core_orbitgt_1 = require("@itwin/core-orbitgt");
11
+ const FrontendLoggerCategory_1 = require("../FrontendLoggerCategory");
12
+ const DownloaderNode_1 = require("@itwin/core-orbitgt/lib/cjs/system/runtime/DownloaderNode");
13
+ const core_bentley_1 = require("@itwin/core-bentley");
14
+ const RealityDataSource_1 = require("../RealityDataSource");
15
+ const loggerCategory = FrontendLoggerCategory_1.FrontendLoggerCategory.RealityData;
16
+ /**
17
+ * This class provide methods used to interpret Orbit Point Cloud (OPC) format
18
+ * @internal
19
+ */
20
+ class OPCFormatInterpreter {
21
+ /** Gets an OPC file reader from a blobFileUrl
22
+ * @param blobFileURL the name of the file.
23
+ * @returns return a file reader open to read provided blob file
24
+ * @internal
25
+ */
26
+ static async getFileReaderFromBlobFileURL(blobFileURL) {
27
+ if (core_orbitgt_1.Downloader.INSTANCE == null)
28
+ core_orbitgt_1.Downloader.INSTANCE = new DownloaderNode_1.DownloaderNode();
29
+ if (core_orbitgt_1.CRSManager.ENGINE == null)
30
+ core_orbitgt_1.CRSManager.ENGINE = await core_orbitgt_1.OnlineEngine.create();
31
+ // let blobFileURL: string = rdUrl;
32
+ // if (accountName.length > 0) blobFileURL = UrlFS.getAzureBlobSasUrl(opcConfig.accountName, opcConfig.containerName, opcConfig.blobFileName, opcConfig.sasToken);
33
+ const urlFS = new core_orbitgt_1.UrlFS();
34
+ // wrap a caching layer (16 MB) around the blob file
35
+ const blobFileSize = await urlFS.getFileLength(blobFileURL);
36
+ core_bentley_1.Logger.logTrace(loggerCategory, `OPC File Size is ${blobFileSize}`);
37
+ const blobFile = new core_orbitgt_1.PageCachedFile(urlFS, blobFileURL, blobFileSize, 128 * 1024 /* pageSize */, 128 /* maxPageCount */);
38
+ const fileReader = await core_orbitgt_1.OPCReader.openFile(blobFile, blobFileURL, true /* lazyLoading */);
39
+ return fileReader;
40
+ }
41
+ /** Gets reality data spatial location and extents
42
+ * @param fileReader a file reader instance obtains from call to getFileReaderFromBlobFileURL
43
+ * @returns spatial location and volume of interest, in meters, centered around `spatial location`
44
+ * @throws [[RealityDataError]] if source is invalid or cannot be read
45
+ * @internal
46
+ */
47
+ static async getSpatialLocationAndExtents(fileReader) {
48
+ let worldRange = new core_geometry_1.Range3d();
49
+ let location;
50
+ let isGeolocated = true;
51
+ const bounds = fileReader.getFileBounds();
52
+ worldRange = core_geometry_1.Range3d.createXYZXYZ(bounds.getMinX(), bounds.getMinY(), bounds.getMinZ(), bounds.getMaxX(), bounds.getMaxY(), bounds.getMaxZ());
53
+ isGeolocated = false;
54
+ const fileCrs = fileReader.getFileCRS();
55
+ if (fileCrs) {
56
+ try {
57
+ await core_orbitgt_1.CRSManager.ENGINE.prepareForArea(fileCrs, bounds);
58
+ const wgs84ECEFCrs = "4978";
59
+ await core_orbitgt_1.CRSManager.ENGINE.prepareForArea(wgs84ECEFCrs, new core_orbitgt_1.OrbitGtBounds());
60
+ const ecefBounds = core_orbitgt_1.CRSManager.transformBounds(bounds, fileCrs, wgs84ECEFCrs);
61
+ const ecefRange = core_geometry_1.Range3d.createXYZXYZ(ecefBounds.getMinX(), ecefBounds.getMinY(), ecefBounds.getMinZ(), ecefBounds.getMaxX(), ecefBounds.getMaxY(), ecefBounds.getMaxZ());
62
+ const ecefCenter = ecefRange.localXYZToWorld(.5, .5, .5);
63
+ const cartoCenter = core_common_1.Cartographic.fromEcef(ecefCenter);
64
+ cartoCenter.height = 0;
65
+ const ecefLocation = core_common_1.EcefLocation.createFromCartographicOrigin(cartoCenter);
66
+ location = ecefLocation;
67
+ // this.iModelDb.setEcefLocation(ecefLocation);
68
+ const ecefToWorld = ecefLocation.getTransform().inverse();
69
+ worldRange = ecefToWorld.multiplyRange(ecefRange);
70
+ isGeolocated = true;
71
+ }
72
+ catch (e) {
73
+ core_bentley_1.Logger.logWarning(loggerCategory, `Error getSpatialLocationAndExtents - cannot interpret point cloud`);
74
+ const errorProps = core_bentley_1.BentleyError.getErrorProps(e);
75
+ const getMetaData = () => { return { errorProps }; };
76
+ const error = new RealityDataSource_1.RealityDataError(core_bentley_1.RealityDataStatus.InvalidData, "Invalid or unknown data", getMetaData);
77
+ throw error;
78
+ }
79
+ }
80
+ else {
81
+ // NoGCS case
82
+ isGeolocated = false;
83
+ const centerOfEarth = new core_common_1.EcefLocation({ origin: { x: 0.0, y: 0.0, z: 0.0 }, orientation: { yaw: 0.0, pitch: 0.0, roll: 0.0 } });
84
+ location = centerOfEarth;
85
+ core_bentley_1.Logger.logTrace(loggerCategory, "OPC RealityData NOT Geolocated", () => ({ ...location }));
86
+ }
87
+ const spatialLocation = { location, worldRange, isGeolocated };
88
+ return spatialLocation;
89
+ }
90
+ }
91
+ exports.OPCFormatInterpreter = OPCFormatInterpreter;
92
+ //# sourceMappingURL=OPCFormatInterpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OPCFormatInterpreter.js","sourceRoot":"","sources":["../../../src/tile/OPCFormatInterpreter.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,oDAAgE;AAChE,wDAA+C;AAC/C,sDAAqJ;AACrJ,sEAAmE;AACnE,8FAA2F;AAC3F,sDAA+F;AAC/F,4DAAmF;AAEnF,MAAM,cAAc,GAAW,+CAAsB,CAAC,WAAW,CAAC;AAElE;;;GAGG;AACH,MAAa,oBAAoB;IAC/B;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,WAAmB;QAClE,IAAI,yBAAU,CAAC,QAAQ,IAAI,IAAI;YAC7B,yBAAU,CAAC,QAAQ,GAAG,IAAI,+BAAc,EAAE,CAAC;QAC7C,IAAI,yBAAU,CAAC,MAAM,IAAI,IAAI;YAC3B,yBAAU,CAAC,MAAM,GAAG,MAAM,2BAAY,CAAC,MAAM,EAAE,CAAC;QAElD,mCAAmC;QACnC,kKAAkK;QAClK,MAAM,KAAK,GAAU,IAAI,oBAAK,EAAE,CAAC;QACjC,oDAAoD;QACpD,MAAM,YAAY,GAAU,MAAM,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACnE,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,YAAY,EAAE,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAmB,IAAI,6BAAc,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACzI,MAAM,UAAU,GAAqB,MAAM,wBAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAA,iBAAiB,CAAC,CAAC;QAC5G,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,UAA4B;QAC3E,IAAI,UAAU,GAAG,IAAI,uBAAO,EAAE,CAAC;QAC/B,IAAI,QAAqC,CAAC;QAC1C,IAAI,YAAY,GAAG,IAAI,CAAC;QAExB,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;QAC1C,UAAU,GAAG,uBAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9I,YAAY,GAAG,KAAK,CAAC;QACrB,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE;YACX,IAAI;gBACF,MAAM,yBAAU,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACxD,MAAM,YAAY,GAAG,MAAM,CAAC;gBAC5B,MAAM,yBAAU,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,4BAAa,EAAE,CAAC,CAAC;gBAE1E,MAAM,UAAU,GAAG,yBAAU,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;gBAC7E,MAAM,SAAS,GAAG,uBAAO,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC3K,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAC;gBAC1D,MAAM,WAAW,GAAG,0BAAY,CAAC,QAAQ,CAAC,UAAU,CAAE,CAAC;gBACvD,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBACvB,MAAM,YAAY,GAAG,0BAAY,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC;gBAC5E,QAAQ,GAAG,YAAY,CAAC;gBACxB,+CAA+C;gBAC/C,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,OAAO,EAAG,CAAC;gBAC3D,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAClD,YAAY,GAAG,IAAI,CAAC;aACrB;YAAC,OAAO,CAAC,EAAE;gBACV,qBAAM,CAAC,UAAU,CAAC,cAAc,EAAE,mEAAmE,CAAC,CAAC;gBACvG,MAAM,UAAU,GAAG,2BAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjD,MAAM,WAAW,GAAoB,GAAG,EAAE,GAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA,CAAC,CAAC;gBACpE,MAAM,KAAK,GAAG,IAAI,oCAAgB,CAAC,gCAAiB,CAAC,WAAW,EAAE,yBAAyB,EAAE,WAAW,CAAC,CAAC;gBAC1G,MAAM,KAAK,CAAC;aACb;SACF;aAAM;YACL,aAAa;YACb,YAAY,GAAG,KAAK,CAAC;YACrB,MAAM,aAAa,GAAG,IAAI,0BAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACjI,QAAQ,GAAG,aAAa,CAAC;YACzB,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,gCAAgC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;SAC5F;QACD,MAAM,eAAe,GAA8B,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;QAC1F,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AAxED,oDAwEC","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\nimport { Cartographic, EcefLocation } from \"@itwin/core-common\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { ALong, CRSManager, Downloader, OnlineEngine, OPCReader, OrbitGtBounds, PageCachedFile, PointCloudReader, UrlFS } from \"@itwin/core-orbitgt\";\r\nimport { FrontendLoggerCategory } from \"../FrontendLoggerCategory\";\r\nimport { DownloaderNode } from \"@itwin/core-orbitgt/lib/cjs/system/runtime/DownloaderNode\";\r\nimport { BentleyError, Logger, LoggingMetaData, RealityDataStatus } from \"@itwin/core-bentley\";\r\nimport { RealityDataError, SpatialLocationAndExtents } from \"../RealityDataSource\";\r\n\r\nconst loggerCategory: string = FrontendLoggerCategory.RealityData;\r\n\r\n/**\r\n * This class provide methods used to interpret Orbit Point Cloud (OPC) format\r\n * @internal\r\n */\r\nexport class OPCFormatInterpreter {\r\n /** Gets an OPC file reader from a blobFileUrl\r\n * @param blobFileURL the name of the file.\r\n * @returns return a file reader open to read provided blob file\r\n * @internal\r\n */\r\n public static async getFileReaderFromBlobFileURL(blobFileURL: string): Promise<PointCloudReader> {\r\n if (Downloader.INSTANCE == null)\r\n Downloader.INSTANCE = new DownloaderNode();\r\n if (CRSManager.ENGINE == null)\r\n CRSManager.ENGINE = await OnlineEngine.create();\r\n\r\n // let blobFileURL: string = rdUrl;\r\n // if (accountName.length > 0) blobFileURL = UrlFS.getAzureBlobSasUrl(opcConfig.accountName, opcConfig.containerName, opcConfig.blobFileName, opcConfig.sasToken);\r\n const urlFS: UrlFS = new UrlFS();\r\n // wrap a caching layer (16 MB) around the blob file\r\n const blobFileSize: ALong = await urlFS.getFileLength(blobFileURL);\r\n Logger.logTrace(loggerCategory, `OPC File Size is ${blobFileSize}`);\r\n const blobFile: PageCachedFile = new PageCachedFile(urlFS, blobFileURL, blobFileSize, 128 * 1024 /* pageSize */, 128 /* maxPageCount */);\r\n const fileReader: PointCloudReader = await OPCReader.openFile(blobFile, blobFileURL, true/* lazyLoading */);\r\n return fileReader;\r\n }\r\n\r\n /** Gets reality data spatial location and extents\r\n * @param fileReader a file reader instance obtains from call to getFileReaderFromBlobFileURL\r\n * @returns spatial location and volume of interest, in meters, centered around `spatial location`\r\n * @throws [[RealityDataError]] if source is invalid or cannot be read\r\n * @internal\r\n */\r\n public static async getSpatialLocationAndExtents(fileReader: PointCloudReader): Promise<SpatialLocationAndExtents> {\r\n let worldRange = new Range3d();\r\n let location: Cartographic | EcefLocation;\r\n let isGeolocated = true;\r\n\r\n const bounds = fileReader.getFileBounds();\r\n worldRange = Range3d.createXYZXYZ(bounds.getMinX(), bounds.getMinY(), bounds.getMinZ(), bounds.getMaxX(), bounds.getMaxY(), bounds.getMaxZ());\r\n isGeolocated = false;\r\n const fileCrs = fileReader.getFileCRS();\r\n if (fileCrs) {\r\n try {\r\n await CRSManager.ENGINE.prepareForArea(fileCrs, bounds);\r\n const wgs84ECEFCrs = \"4978\";\r\n await CRSManager.ENGINE.prepareForArea(wgs84ECEFCrs, new OrbitGtBounds());\r\n\r\n const ecefBounds = CRSManager.transformBounds(bounds, fileCrs, wgs84ECEFCrs);\r\n const ecefRange = Range3d.createXYZXYZ(ecefBounds.getMinX(), ecefBounds.getMinY(), ecefBounds.getMinZ(), ecefBounds.getMaxX(), ecefBounds.getMaxY(), ecefBounds.getMaxZ());\r\n const ecefCenter = ecefRange.localXYZToWorld(.5, .5, .5)!;\r\n const cartoCenter = Cartographic.fromEcef(ecefCenter)!;\r\n cartoCenter.height = 0;\r\n const ecefLocation = EcefLocation.createFromCartographicOrigin(cartoCenter);\r\n location = ecefLocation;\r\n // this.iModelDb.setEcefLocation(ecefLocation);\r\n const ecefToWorld = ecefLocation.getTransform().inverse()!;\r\n worldRange = ecefToWorld.multiplyRange(ecefRange);\r\n isGeolocated = true;\r\n } catch (e) {\r\n Logger.logWarning(loggerCategory, `Error getSpatialLocationAndExtents - cannot interpret point cloud`);\r\n const errorProps = BentleyError.getErrorProps(e);\r\n const getMetaData: LoggingMetaData = () => {return { errorProps };};\r\n const error = new RealityDataError(RealityDataStatus.InvalidData, \"Invalid or unknown data\", getMetaData);\r\n throw error;\r\n }\r\n } else {\r\n // NoGCS case\r\n isGeolocated = false;\r\n const centerOfEarth = new EcefLocation({ origin: { x: 0.0, y: 0.0, z: 0.0 }, orientation: { yaw: 0.0, pitch: 0.0, roll: 0.0 } });\r\n location = centerOfEarth;\r\n Logger.logTrace(loggerCategory, \"OPC RealityData NOT Geolocated\", () => ({ ...location }));\r\n }\r\n const spatialLocation: SpatialLocationAndExtents = { location, worldRange, isGeolocated };\r\n return spatialLocation;\r\n }\r\n}\r\n\r\n"]}
@@ -9,5 +9,5 @@ import { RenderSystem } from "../render/RenderSystem";
9
9
  /** Deserialize a point cloud tile and return it as a RenderGraphic.
10
10
  * @internal
11
11
  */
12
- export declare function readPointCloudTileContent(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, _is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem): RenderGraphic | undefined;
12
+ export declare function readPointCloudTileContent(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, _is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem): Promise<RenderGraphic | undefined>;
13
13
  //# sourceMappingURL=PntsReader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PntsReader.d.ts","sourceRoot":"","sources":["../../../src/tile/PntsReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,UAAU,EAAgB,MAAM,qBAAqB,CAAC;AAEnF,OAAO,EAAa,mBAAmB,EAAkF,MAAM,oBAAoB,CAAC;AACpJ,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,GAAG,aAAa,GAAG,SAAS,CAgExM"}
1
+ {"version":3,"file":"PntsReader.d.ts","sourceRoot":"","sources":["../../../src/tile/PntsReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAwB,MAAM,qBAAqB,CAAC;AAEnF,OAAO,EAAa,mBAAmB,EAA4F,MAAM,oBAAoB,CAAC;AAE9J,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAsMtD;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA0DvN"}
@@ -6,18 +6,155 @@
6
6
  /** @packageDocumentation
7
7
  * @module Tiles
8
8
  */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
9
28
  Object.defineProperty(exports, "__esModule", { value: true });
10
29
  exports.readPointCloudTileContent = void 0;
11
30
  const core_bentley_1 = require("@itwin/core-bentley");
12
31
  const core_geometry_1 = require("@itwin/core-geometry");
13
32
  const core_common_1 = require("@itwin/core-common");
33
+ const FrontendLoggerCategory_1 = require("../FrontendLoggerCategory");
14
34
  const MeshPrimitives_1 = require("../render/primitives/mesh/MeshPrimitives");
15
35
  const PointCloudPrimitive_1 = require("../render/primitives/PointCloudPrimitive");
36
+ function readPntsColors(stream, dataOffset, pnts) {
37
+ const nPts = pnts.POINTS_LENGTH;
38
+ const nComponents = 3 * nPts;
39
+ if (pnts.RGB)
40
+ return new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGB.byteOffset, nComponents);
41
+ if (pnts.RGBA) {
42
+ // ###TODO support point cloud transparency.
43
+ const rgb = new Uint8Array(nComponents);
44
+ const rgba = new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGBA.byteOffset, nComponents);
45
+ for (let i = 0; i < nComponents; i += 4) {
46
+ rgb[i + 0] = rgba[i + 0];
47
+ rgb[i + 1] = rgba[i + 1];
48
+ rgb[i + 2] = rgba[i + 2];
49
+ }
50
+ return rgb;
51
+ }
52
+ else if (pnts.RGB565) {
53
+ // Each color is 16 bits: 5 red, 6 green, 5 blue.
54
+ const crgb = new Uint16Array(stream.arrayBuffer, dataOffset + pnts.RGB565.byteOffset, nPts);
55
+ const rgb = new Uint8Array(nComponents);
56
+ for (let i = 0; i < nPts; i++) {
57
+ const c = crgb[i];
58
+ rgb[i + 0] = (c >> 11) & 0x1f;
59
+ rgb[i + 1] = (c >> 5) & 0x3f;
60
+ rgb[i + 2] = c & 0x1f;
61
+ }
62
+ return rgb;
63
+ }
64
+ return undefined;
65
+ }
66
+ function readPnts(stream, dataOffset, pnts) {
67
+ const nPts = pnts.POINTS_LENGTH;
68
+ let params;
69
+ let points;
70
+ if (pnts.POSITION_QUANTIZED) {
71
+ const qpos = pnts.POSITION_QUANTIZED;
72
+ const offset = pnts.QUANTIZED_VOLUME_OFFSET;
73
+ const scale = pnts.QUANTIZED_VOLUME_SCALE;
74
+ const qOrigin = new core_geometry_1.Point3d(offset[0], offset[1], offset[2]);
75
+ const qScale = new core_geometry_1.Point3d(core_common_1.Quantization.computeScale(scale[0]), core_common_1.Quantization.computeScale(scale[1]), core_common_1.Quantization.computeScale(scale[2]));
76
+ params = core_common_1.QParams3d.fromOriginAndScale(qOrigin, qScale);
77
+ points = new Uint16Array(stream.arrayBuffer, dataOffset + qpos.byteOffset, 3 * nPts);
78
+ }
79
+ else {
80
+ const nCoords = nPts * 3;
81
+ const fpts = new Float32Array(stream.arrayBuffer, dataOffset + pnts.POSITION.byteOffset, 3 * nPts);
82
+ const range = core_geometry_1.Range3d.createNull();
83
+ for (let i = 0; i < nCoords; i += 3)
84
+ range.extendXYZ(fpts[i], fpts[i + 1], fpts[i + 2]);
85
+ params = core_common_1.QParams3d.fromRange(range);
86
+ const qpt = new core_common_1.QPoint3d();
87
+ const fpt = new core_geometry_1.Point3d();
88
+ points = new Uint16Array(3 * nPts);
89
+ for (let i = 0; i < nCoords; i += 3) {
90
+ fpt.set(fpts[i], fpts[i + 1], fpts[i + 2]);
91
+ qpt.init(fpt, params);
92
+ points[i] = qpt.x;
93
+ points[i + 1] = qpt.y;
94
+ points[i + 2] = qpt.z;
95
+ }
96
+ }
97
+ const colors = readPntsColors(stream, dataOffset, pnts);
98
+ return { params, points, colors };
99
+ }
100
+ async function decodeDracoPointCloud(buf) {
101
+ var _a, _b, _c, _d, _e, _f;
102
+ try {
103
+ const dracoLoader = (await Promise.resolve().then(() => __importStar(require("@loaders.gl/draco")))).DracoLoader;
104
+ const mesh = await dracoLoader.parse(buf, {});
105
+ if (mesh.topology !== "point-list")
106
+ return undefined;
107
+ const pos = (_a = mesh.attributes.POSITION) === null || _a === void 0 ? void 0 : _a.value;
108
+ if (!pos || (pos.length % 3) !== 0)
109
+ return undefined;
110
+ let colors = (_c = (_b = mesh.attributes.RGB) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : (_d = mesh.attributes.COLOR_0) === null || _d === void 0 ? void 0 : _d.value;
111
+ if (!colors) {
112
+ // ###TODO support point cloud transparency.
113
+ const rgba = (_e = mesh.attributes.RGBA) === null || _e === void 0 ? void 0 : _e.value;
114
+ if (rgba && (rgba.length % 4) === 0) {
115
+ // We currently don't support alpha channel for point clouds - strip it.
116
+ colors = new Uint8Array(3 * rgba.length / 4);
117
+ let j = 0;
118
+ for (let i = 0; i < rgba.length; i += 4) {
119
+ colors[j++] = rgba[i];
120
+ colors[j++] = rgba[i + 1];
121
+ colors[j++] = rgba[i + 2];
122
+ }
123
+ }
124
+ }
125
+ let posRange;
126
+ const bbox = (_f = mesh.header) === null || _f === void 0 ? void 0 : _f.boundingBox;
127
+ if (bbox) {
128
+ posRange = core_geometry_1.Range3d.createXYZXYZ(bbox[0][0], bbox[0][1], bbox[0][2], bbox[1][0], bbox[1][1], bbox[1][2]);
129
+ }
130
+ else {
131
+ posRange = core_geometry_1.Range3d.createNull();
132
+ for (let i = 0; i < pos.length; i += 3)
133
+ posRange.extendXYZ(pos[i], pos[i + 1], pos[i + 2]);
134
+ }
135
+ const params = core_common_1.QParams3d.fromRange(posRange);
136
+ const pt = core_geometry_1.Point3d.createZero();
137
+ const qpt = core_common_1.QPoint3d.create(pt, params);
138
+ const points = new Uint16Array(pos.length);
139
+ for (let i = 0; i < pos.length; i += 3) {
140
+ pt.set(pos[i], pos[i + 1], pos[i + 2]);
141
+ qpt.init(pt, params);
142
+ points[i] = qpt.x;
143
+ points[i + 1] = qpt.y;
144
+ points[i + 2] = qpt.z;
145
+ }
146
+ return { points, params, colors: colors instanceof Uint8Array ? colors : undefined };
147
+ }
148
+ catch (err) {
149
+ core_bentley_1.Logger.logWarning(FrontendLoggerCategory_1.FrontendLoggerCategory.Render, "Failed to decode draco-encoded point cloud");
150
+ core_bentley_1.Logger.logException(FrontendLoggerCategory_1.FrontendLoggerCategory.Render, err);
151
+ return undefined;
152
+ }
153
+ }
16
154
  /** Deserialize a point cloud tile and return it as a RenderGraphic.
17
155
  * @internal
18
156
  */
19
- function readPointCloudTileContent(stream, iModel, modelId, _is3d, range, system) {
20
- var _a;
157
+ async function readPointCloudTileContent(stream, iModel, modelId, _is3d, range, system) {
21
158
  const header = new core_common_1.PntsHeader(stream);
22
159
  if (!header.isValid)
23
160
  return undefined;
@@ -27,50 +164,47 @@ function readPointCloudTileContent(stream, iModel, modelId, _is3d, range, system
27
164
  const featureValue = JSON.parse(featureStr);
28
165
  if (undefined === featureValue)
29
166
  return undefined;
30
- let qParams, qPoints;
31
- let colors;
32
- const dracoPointExtension = featureValue.extensions ? featureValue.extensions["3DTILES_draco_point_compression"] : undefined;
167
+ let props;
33
168
  const dataOffset = featureTableJsonOffset + header.featureTableJsonLength;
34
- if (dracoPointExtension && dracoPointExtension.byteLength !== undefined && dracoPointExtension.byteOffset !== undefined && ((_a = dracoPointExtension.properties) === null || _a === void 0 ? void 0 : _a.POSITION) !== undefined) {
35
- return undefined; // Defer Draco decompression until web workers implementation.
36
- /*
37
- const bufferData = new Uint8Array(stream.arrayBuffer, dataOffset + dracoPointExtension.byteOffset, dracoPointExtension.byteLength);
38
- const decoded = DracoDecoder.readDracoPointCloud(bufferData, dracoPointExtension.properties?.POSITION, dracoPointExtension.properties?.RGB);
39
- if (decoded) {
40
- qPoints = decoded.qPoints;
41
- qParams = decoded.qParams;
42
- colors = decoded.colors; */
169
+ const draco = featureValue.extensions ? featureValue.extensions["3DTILES_draco_point_compression"] : undefined;
170
+ if (draco) {
171
+ try {
172
+ const buf = new Uint8Array(stream.arrayBuffer, dataOffset + draco.byteOffset, draco.byteLength);
173
+ props = await decodeDracoPointCloud(buf);
174
+ }
175
+ catch (_) {
176
+ //
177
+ }
43
178
  }
44
179
  else {
45
- if (undefined === featureValue.POSITION_QUANTIZED ||
46
- undefined === featureValue.QUANTIZED_VOLUME_OFFSET ||
47
- undefined === featureValue.QUANTIZED_VOLUME_SCALE ||
48
- undefined === featureValue.POINTS_LENGTH ||
49
- undefined === featureValue.POSITION_QUANTIZED) {
50
- (0, core_bentley_1.assert)(false, "quantized point cloud points not found");
51
- return undefined;
52
- }
53
- const qOrigin = new core_geometry_1.Point3d(featureValue.QUANTIZED_VOLUME_OFFSET[0], featureValue.QUANTIZED_VOLUME_OFFSET[1], featureValue.QUANTIZED_VOLUME_OFFSET[2]);
54
- const qScale = new core_geometry_1.Point3d(core_common_1.Quantization.computeScale(featureValue.QUANTIZED_VOLUME_SCALE[0]), core_common_1.Quantization.computeScale(featureValue.QUANTIZED_VOLUME_SCALE[1]), core_common_1.Quantization.computeScale(featureValue.QUANTIZED_VOLUME_SCALE[2]));
55
- qParams = core_common_1.QParams3d.fromOriginAndScale(qOrigin, qScale);
56
- qPoints = new Uint16Array(stream.arrayBuffer, dataOffset + featureValue.POSITION_QUANTIZED.byteOffset, 3 * featureValue.POINTS_LENGTH);
57
- if (undefined !== featureValue.RGB)
58
- colors = new Uint8Array(stream.arrayBuffer, dataOffset + featureValue.RGB.byteOffset, 3 * featureValue.POINTS_LENGTH);
180
+ props = readPnts(stream, dataOffset, featureValue);
59
181
  }
60
- if (!qPoints || !qParams)
182
+ if (!props)
61
183
  return undefined;
62
184
  if (featureValue.RTC_CENTER)
63
- qParams = core_common_1.QParams3d.fromOriginAndScale(qParams.origin.plus(core_geometry_1.Vector3d.fromJSON(featureValue.RTC_CENTER)), qParams.scale);
64
- if (undefined === colors) {
65
- colors = new Uint8Array(3 * featureValue.POINTS_LENGTH);
66
- colors.fill(0xff, 0, colors.length); // TBD... Default color?
185
+ props.params = core_common_1.QParams3d.fromOriginAndScale(props.params.origin.plus(core_geometry_1.Vector3d.fromJSON(featureValue.RTC_CENTER)), props.params.scale);
186
+ if (!props.colors) {
187
+ // ###TODO we really should support uniform color instead of allocating an RGB value per point...
188
+ props.colors = new Uint8Array(3 * featureValue.POINTS_LENGTH);
189
+ const rgba = featureValue.CONSTANT_RGBA;
190
+ if (rgba) {
191
+ // ###TODO support point cloud transparency.
192
+ for (let i = 0; i < featureValue.POINTS_LENGTH * 3; i += 3) {
193
+ props.colors[i] = rgba[0];
194
+ props.colors[i + 1] = rgba[1];
195
+ props.colors[i + 2] = rgba[2];
196
+ }
197
+ }
198
+ else {
199
+ // Default to white.
200
+ props.colors.fill(0xff, 0, props.colors.length);
201
+ }
67
202
  }
68
- // ###TODO? Do we expect a batch table? not currently handled...
69
203
  const featureTable = new core_common_1.FeatureTable(1, modelId, core_common_1.BatchType.Primary);
70
204
  const features = new MeshPrimitives_1.Mesh.Features(featureTable);
71
205
  features.add(new core_common_1.Feature(modelId), 1);
72
- const voxelSize = qParams.rangeDiagonal.maxAbs() / 256;
73
- let renderGraphic = system.createPointCloud(new PointCloudPrimitive_1.PointCloudArgs(qPoints, qParams, colors, features, voxelSize), iModel);
206
+ const voxelSize = props.params.rangeDiagonal.maxAbs() / 256;
207
+ let renderGraphic = system.createPointCloud(new PointCloudPrimitive_1.PointCloudArgs(props.points, props.params, props.colors, features, voxelSize), iModel);
74
208
  renderGraphic = system.createBatch(renderGraphic, core_common_1.PackedFeatureTable.pack(featureTable), range);
75
209
  return renderGraphic;
76
210
  }
@@ -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 { assert, ByteStream, Id64String, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { BatchType, ElementAlignedBox3d, Feature, FeatureTable, PackedFeatureTable, PntsHeader, QParams3d, Quantization } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { PointCloudArgs } from \"../render/primitives/PointCloudPrimitive\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\n\r\n/** Deserialize a point cloud tile and return it as a RenderGraphic.\r\n * @internal\r\n */\r\nexport function readPointCloudTileContent(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, _is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem): RenderGraphic | undefined {\r\n const header = new PntsHeader(stream);\r\n\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);\r\n\r\n if (undefined === featureValue)\r\n return undefined;\r\n\r\n let qParams, qPoints;\r\n let colors: Uint8Array | undefined;\r\n const dracoPointExtension = featureValue.extensions ? featureValue.extensions[\"3DTILES_draco_point_compression\"] : undefined;\r\n const dataOffset = featureTableJsonOffset + header.featureTableJsonLength;\r\n if (dracoPointExtension && dracoPointExtension.byteLength !== undefined && dracoPointExtension.byteOffset !== undefined && dracoPointExtension.properties?.POSITION !== undefined) {\r\n return undefined; // Defer Draco decompression until web workers implementation.\r\n /*\r\n const bufferData = new Uint8Array(stream.arrayBuffer, dataOffset + dracoPointExtension.byteOffset, dracoPointExtension.byteLength);\r\n const decoded = DracoDecoder.readDracoPointCloud(bufferData, dracoPointExtension.properties?.POSITION, dracoPointExtension.properties?.RGB);\r\n if (decoded) {\r\n qPoints = decoded.qPoints;\r\n qParams = decoded.qParams;\r\n colors = decoded.colors; */\r\n } else {\r\n if (undefined === featureValue.POSITION_QUANTIZED ||\r\n undefined === featureValue.QUANTIZED_VOLUME_OFFSET ||\r\n undefined === featureValue.QUANTIZED_VOLUME_SCALE ||\r\n undefined === featureValue.POINTS_LENGTH ||\r\n undefined === featureValue.POSITION_QUANTIZED) {\r\n assert(false, \"quantized point cloud points not found\");\r\n return undefined;\r\n }\r\n\r\n const qOrigin = new Point3d(featureValue.QUANTIZED_VOLUME_OFFSET[0], featureValue.QUANTIZED_VOLUME_OFFSET[1], featureValue.QUANTIZED_VOLUME_OFFSET[2]);\r\n const qScale = new Point3d(Quantization.computeScale(featureValue.QUANTIZED_VOLUME_SCALE[0]), Quantization.computeScale(featureValue.QUANTIZED_VOLUME_SCALE[1]), Quantization.computeScale(featureValue.QUANTIZED_VOLUME_SCALE[2]));\r\n qParams = QParams3d.fromOriginAndScale(qOrigin, qScale);\r\n qPoints = new Uint16Array(stream.arrayBuffer, dataOffset + featureValue.POSITION_QUANTIZED.byteOffset, 3 * featureValue.POINTS_LENGTH);\r\n if (undefined !== featureValue.RGB)\r\n colors = new Uint8Array(stream.arrayBuffer, dataOffset + featureValue.RGB.byteOffset, 3 * featureValue.POINTS_LENGTH);\r\n }\r\n if (!qPoints || !qParams)\r\n return undefined;\r\n\r\n if (featureValue.RTC_CENTER)\r\n qParams = QParams3d.fromOriginAndScale(qParams.origin.plus(Vector3d.fromJSON(featureValue.RTC_CENTER)), qParams.scale);\r\n\r\n if (undefined === colors) {\r\n colors = new Uint8Array(3 * featureValue.POINTS_LENGTH);\r\n colors.fill(0xff, 0, colors.length); // TBD... Default color?\r\n }\r\n\r\n // ###TODO? Do we expect a batch table? not currently handled...\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 = qParams.rangeDiagonal.maxAbs() / 256;\r\n\r\n let renderGraphic = system.createPointCloud(new PointCloudArgs(qPoints, qParams, colors, features, voxelSize), iModel);\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, 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 { PointCloudArgs } from \"../render/primitives/PointCloudPrimitive\";\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(new PointCloudArgs(props.points, props.params, props.colors, features, voxelSize), iModel);\r\n renderGraphic = system.createBatch(renderGraphic!, PackedFeatureTable.pack(featureTable), range);\r\n return renderGraphic;\r\n}\r\n"]}