@itwin/core-frontend 3.1.0-dev.7 → 3.1.1

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 (755) hide show
  1. package/CHANGELOG.md +210 -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 +21 -9
  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/BriefcaseConnection.d.ts.map +1 -1
  13. package/lib/cjs/BriefcaseConnection.js +6 -5
  14. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  15. package/lib/cjs/CategorySelectorState.js +1 -1
  16. package/lib/cjs/CategorySelectorState.js.map +1 -1
  17. package/lib/cjs/DisplayStyleState.d.ts +4 -3
  18. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  19. package/lib/cjs/DisplayStyleState.js +32 -8
  20. package/lib/cjs/DisplayStyleState.js.map +1 -1
  21. package/lib/cjs/DrawingViewState.d.ts.map +1 -1
  22. package/lib/cjs/DrawingViewState.js +9 -8
  23. package/lib/cjs/DrawingViewState.js.map +1 -1
  24. package/lib/cjs/FrontendLoggerCategory.d.ts +3 -1
  25. package/lib/cjs/FrontendLoggerCategory.d.ts.map +1 -1
  26. package/lib/cjs/FrontendLoggerCategory.js +2 -0
  27. package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
  28. package/lib/cjs/IModelApp.d.ts +10 -4
  29. package/lib/cjs/IModelApp.d.ts.map +1 -1
  30. package/lib/cjs/IModelApp.js +26 -13
  31. package/lib/cjs/IModelApp.js.map +1 -1
  32. package/lib/cjs/IModelConnection.d.ts +3 -2
  33. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  34. package/lib/cjs/IModelConnection.js +6 -4
  35. package/lib/cjs/IModelConnection.js.map +1 -1
  36. package/lib/cjs/ImageUtil.d.ts.map +1 -1
  37. package/lib/cjs/ImageUtil.js +8 -14
  38. package/lib/cjs/ImageUtil.js.map +1 -1
  39. package/lib/cjs/LocalhostIpcApp.d.ts +2 -0
  40. package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
  41. package/lib/cjs/LocalhostIpcApp.js +10 -4
  42. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  43. package/lib/cjs/RealityDataSource.d.ts +60 -14
  44. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  45. package/lib/cjs/RealityDataSource.js +36 -235
  46. package/lib/cjs/RealityDataSource.js.map +1 -1
  47. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
  48. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
  49. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +166 -0
  50. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
  51. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +83 -0
  52. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -0
  53. package/lib/cjs/RealityDataSourceContextShareImpl.js +234 -0
  54. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -0
  55. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
  56. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
  57. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +135 -0
  58. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -0
  59. package/lib/cjs/SheetViewState.js +7 -3
  60. package/lib/cjs/SheetViewState.js.map +1 -1
  61. package/lib/cjs/ViewState.d.ts +8 -0
  62. package/lib/cjs/ViewState.d.ts.map +1 -1
  63. package/lib/cjs/ViewState.js +1 -1
  64. package/lib/cjs/ViewState.js.map +1 -1
  65. package/lib/cjs/Viewport.d.ts +35 -14
  66. package/lib/cjs/Viewport.d.ts.map +1 -1
  67. package/lib/cjs/Viewport.js +59 -10
  68. package/lib/cjs/Viewport.js.map +1 -1
  69. package/lib/cjs/core-frontend.d.ts +6 -4
  70. package/lib/cjs/core-frontend.d.ts.map +1 -1
  71. package/lib/cjs/core-frontend.js +6 -4
  72. package/lib/cjs/core-frontend.js.map +1 -1
  73. package/lib/cjs/extension/Extension.d.ts +48 -0
  74. package/lib/cjs/extension/Extension.d.ts.map +1 -0
  75. package/lib/cjs/extension/Extension.js +18 -0
  76. package/lib/cjs/extension/Extension.js.map +1 -0
  77. package/lib/cjs/extension/ExtensionAdmin.d.ts +64 -0
  78. package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -0
  79. package/lib/cjs/extension/ExtensionAdmin.js +106 -0
  80. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -0
  81. package/lib/cjs/extension/ExtensionHost.d.ts +23 -0
  82. package/lib/cjs/extension/ExtensionHost.d.ts.map +1 -0
  83. package/lib/cjs/extension/ExtensionHost.js +26 -0
  84. package/lib/cjs/extension/ExtensionHost.js.map +1 -0
  85. package/lib/cjs/extension/ExtensionImpl.d.ts +21 -0
  86. package/lib/cjs/extension/ExtensionImpl.d.ts.map +1 -0
  87. package/lib/cjs/extension/ExtensionImpl.js +45 -0
  88. package/lib/cjs/extension/ExtensionImpl.js.map +1 -0
  89. package/lib/cjs/extension/ExtensionLoader.d.ts +26 -0
  90. package/lib/cjs/extension/ExtensionLoader.d.ts.map +1 -0
  91. package/lib/cjs/extension/ExtensionLoader.js +10 -0
  92. package/lib/cjs/extension/ExtensionLoader.js.map +1 -0
  93. package/lib/cjs/extension/ExtensionRuntime.d.ts +5 -0
  94. package/lib/cjs/extension/ExtensionRuntime.d.ts.map +1 -0
  95. package/lib/cjs/extension/ExtensionRuntime.js +86 -0
  96. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -0
  97. package/lib/cjs/extension/extensions.d.ts +19 -0
  98. package/lib/cjs/extension/extensions.d.ts.map +1 -0
  99. package/lib/cjs/extension/extensions.js +36 -0
  100. package/lib/cjs/extension/extensions.js.map +1 -0
  101. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
  102. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  103. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +48 -44
  104. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  105. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +90 -80
  106. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  107. package/lib/cjs/quantity-formatting/QuantityFormatter.js +85 -45
  108. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  109. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
  110. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
  111. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js +32 -0
  112. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
  113. package/lib/cjs/quantity-formatting/UnitsData.d.ts +11 -0
  114. package/lib/cjs/quantity-formatting/UnitsData.d.ts.map +1 -0
  115. package/lib/cjs/quantity-formatting/UnitsData.js +59 -0
  116. package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -0
  117. package/lib/cjs/render/GraphicBranch.d.ts +2 -0
  118. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  119. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  120. package/lib/cjs/render/RenderPlanarClassifier.d.ts +1 -1
  121. package/lib/cjs/render/RenderPlanarClassifier.d.ts.map +1 -1
  122. package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
  123. package/lib/cjs/render/RenderSystem.d.ts +12 -7
  124. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  125. package/lib/cjs/render/RenderSystem.js +8 -5
  126. package/lib/cjs/render/RenderSystem.js.map +1 -1
  127. package/lib/cjs/render/RenderTarget.d.ts +4 -4
  128. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  129. package/lib/cjs/render/RenderTarget.js.map +1 -1
  130. package/lib/cjs/render/Scene.d.ts.map +1 -1
  131. package/lib/cjs/render/Scene.js.map +1 -1
  132. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
  133. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
  134. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
  135. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
  136. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  137. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  138. package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
  139. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  140. package/lib/cjs/render/webgl/BranchState.js +5 -3
  141. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  142. package/lib/cjs/render/webgl/DrawCommand.js +1 -1
  143. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  144. package/lib/cjs/render/webgl/Graphic.d.ts +5 -3
  145. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  146. package/lib/cjs/render/webgl/Graphic.js +7 -2
  147. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  148. package/lib/cjs/render/webgl/PlanarClassifier.d.ts +4 -1
  149. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  150. package/lib/cjs/render/webgl/PlanarClassifier.js +22 -9
  151. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  152. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts +2 -2
  153. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  154. package/lib/cjs/render/webgl/PlanarTextureProjection.js +5 -3
  155. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  156. package/lib/cjs/render/webgl/RealityMesh.d.ts +31 -11
  157. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  158. package/lib/cjs/render/webgl/RealityMesh.js +155 -52
  159. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  160. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  161. package/lib/cjs/render/webgl/RenderCommands.js +4 -0
  162. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  163. package/lib/cjs/render/webgl/SceneCompositor.d.ts +3 -0
  164. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  165. package/lib/cjs/render/webgl/SceneCompositor.js +45 -19
  166. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  167. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -0
  168. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  169. package/lib/cjs/render/webgl/ShaderProgram.js +1 -0
  170. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  171. package/lib/cjs/render/webgl/System.d.ts +9 -9
  172. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  173. package/lib/cjs/render/webgl/System.js +5 -5
  174. package/lib/cjs/render/webgl/System.js.map +1 -1
  175. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  176. package/lib/cjs/render/webgl/Target.js.map +1 -1
  177. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +1 -1
  178. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  179. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  180. package/lib/cjs/render/webgl/glsl/RealityMesh.js +102 -27
  181. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  182. package/lib/cjs/tile/ClassifierTileTree.d.ts +4 -2
  183. package/lib/cjs/tile/ClassifierTileTree.d.ts.map +1 -1
  184. package/lib/cjs/tile/ClassifierTileTree.js +31 -16
  185. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  186. package/lib/cjs/tile/DynamicIModelTile.d.ts.map +1 -1
  187. package/lib/cjs/tile/DynamicIModelTile.js +1 -1
  188. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  189. package/lib/cjs/tile/GltfReader.d.ts +22 -3
  190. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  191. package/lib/cjs/tile/GltfReader.js +224 -40
  192. package/lib/cjs/tile/GltfReader.js.map +1 -1
  193. package/lib/cjs/tile/IModelTileRequestChannels.d.ts +3 -3
  194. package/lib/cjs/tile/IModelTileRequestChannels.d.ts.map +1 -1
  195. package/lib/cjs/tile/IModelTileRequestChannels.js +7 -11
  196. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  197. package/lib/cjs/tile/LRUTileList.d.ts +29 -29
  198. package/lib/cjs/tile/LRUTileList.d.ts.map +1 -1
  199. package/lib/cjs/tile/LRUTileList.js +50 -50
  200. package/lib/cjs/tile/LRUTileList.js.map +1 -1
  201. package/lib/cjs/tile/OPCFormatInterpreter.d.ts +22 -0
  202. package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -0
  203. package/lib/cjs/tile/OPCFormatInterpreter.js +92 -0
  204. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -0
  205. package/lib/cjs/tile/OrbitGtTileTree.js +1 -1
  206. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  207. package/lib/cjs/tile/PntsReader.d.ts +1 -1
  208. package/lib/cjs/tile/PntsReader.d.ts.map +1 -1
  209. package/lib/cjs/tile/PntsReader.js +170 -36
  210. package/lib/cjs/tile/PntsReader.js.map +1 -1
  211. package/lib/cjs/tile/PrimaryTileTree.d.ts +18 -2
  212. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  213. package/lib/cjs/tile/PrimaryTileTree.js +53 -2
  214. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  215. package/lib/cjs/tile/RealityModelTileTree.d.ts +24 -3
  216. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  217. package/lib/cjs/tile/RealityModelTileTree.js +37 -12
  218. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  219. package/lib/cjs/tile/RealityTile.d.ts +17 -3
  220. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  221. package/lib/cjs/tile/RealityTile.js +34 -2
  222. package/lib/cjs/tile/RealityTile.js.map +1 -1
  223. package/lib/cjs/tile/RealityTileDrawArgs.d.ts +4 -1
  224. package/lib/cjs/tile/RealityTileDrawArgs.d.ts.map +1 -1
  225. package/lib/cjs/tile/RealityTileDrawArgs.js +3 -1
  226. package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
  227. package/lib/cjs/tile/RealityTileLoader.d.ts +8 -5
  228. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  229. package/lib/cjs/tile/RealityTileLoader.js +20 -6
  230. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  231. package/lib/cjs/tile/RealityTileTree.d.ts +4 -1
  232. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  233. package/lib/cjs/tile/RealityTileTree.js +12 -4
  234. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  235. package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
  236. package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
  237. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +179 -0
  238. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -0
  239. package/lib/cjs/tile/Tile.d.ts +5 -4
  240. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  241. package/lib/cjs/tile/Tile.js +3 -2
  242. package/lib/cjs/tile/Tile.js.map +1 -1
  243. package/lib/cjs/tile/TileAdmin.d.ts +43 -45
  244. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  245. package/lib/cjs/tile/TileAdmin.js +104 -104
  246. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  247. package/lib/cjs/tile/TileDrawArgs.d.ts +2 -0
  248. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  249. package/lib/cjs/tile/TileDrawArgs.js +5 -0
  250. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  251. package/lib/cjs/tile/TileGeometryCollector.d.ts +80 -0
  252. package/lib/cjs/tile/TileGeometryCollector.d.ts.map +1 -0
  253. package/lib/cjs/tile/TileGeometryCollector.js +71 -0
  254. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -0
  255. package/lib/cjs/tile/TileRequest.d.ts +12 -9
  256. package/lib/cjs/tile/TileRequest.d.ts.map +1 -1
  257. package/lib/cjs/tile/TileRequest.js +19 -11
  258. package/lib/cjs/tile/TileRequest.js.map +1 -1
  259. package/lib/cjs/tile/TileRequestChannel.js +3 -3
  260. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  261. package/lib/cjs/tile/TileRequestChannels.d.ts +0 -4
  262. package/lib/cjs/tile/TileRequestChannels.d.ts.map +1 -1
  263. package/lib/cjs/tile/TileRequestChannels.js +1 -6
  264. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  265. package/lib/cjs/tile/TileTree.d.ts +7 -1
  266. package/lib/cjs/tile/TileTree.d.ts.map +1 -1
  267. package/lib/cjs/tile/TileTree.js +8 -1
  268. package/lib/cjs/tile/TileTree.js.map +1 -1
  269. package/lib/cjs/tile/TileTreeReference.d.ts +27 -2
  270. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  271. package/lib/cjs/tile/TileTreeReference.js +41 -1
  272. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  273. package/lib/cjs/tile/TileUsageMarker.d.ts +9 -9
  274. package/lib/cjs/tile/TileUsageMarker.d.ts.map +1 -1
  275. package/lib/cjs/tile/TileUsageMarker.js +9 -9
  276. package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
  277. package/lib/cjs/tile/TileUser.d.ts +33 -0
  278. package/lib/cjs/tile/TileUser.d.ts.map +1 -0
  279. package/lib/cjs/tile/TileUser.js +28 -0
  280. package/lib/cjs/tile/TileUser.js.map +1 -0
  281. package/lib/cjs/tile/TileUserSet.d.ts +28 -0
  282. package/lib/cjs/tile/TileUserSet.d.ts.map +1 -0
  283. package/lib/cjs/tile/TileUserSet.js +123 -0
  284. package/lib/cjs/tile/TileUserSet.js.map +1 -0
  285. package/lib/cjs/tile/internal.d.ts +6 -0
  286. package/lib/cjs/tile/internal.d.ts.map +1 -1
  287. package/lib/cjs/tile/internal.js +6 -0
  288. package/lib/cjs/tile/internal.js.map +1 -1
  289. package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -2
  290. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  291. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +6 -5
  292. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  293. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -13
  294. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  295. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +3 -4
  296. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  297. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +1 -1
  298. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  299. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
  300. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  301. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
  302. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  303. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +3 -4
  304. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  305. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +5 -4
  306. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  307. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
  308. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
  309. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  310. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -3
  311. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  312. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +13 -11
  313. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  314. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
  315. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  316. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  317. package/lib/cjs/tile/map/ImageryTileTree.d.ts +4 -5
  318. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  319. package/lib/cjs/tile/map/ImageryTileTree.js +5 -4
  320. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  321. package/lib/cjs/tile/map/MapFeatureInfo.d.ts +26 -0
  322. package/lib/cjs/tile/map/MapFeatureInfo.d.ts.map +1 -0
  323. package/lib/cjs/tile/map/MapFeatureInfo.js +19 -0
  324. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -0
  325. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +4 -4
  326. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  327. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  328. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +3 -3
  329. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  330. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  331. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +5 -4
  332. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  333. package/lib/cjs/tile/map/MapLayerImageryProvider.js +5 -1
  334. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  335. package/lib/cjs/tile/map/MapLayerSources.d.ts +2 -2
  336. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  337. package/lib/cjs/tile/map/MapLayerSources.js +6 -4
  338. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  339. package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts +10 -2
  340. package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
  341. package/lib/cjs/tile/map/MapLayerTileTreeReference.js +26 -3
  342. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  343. package/lib/cjs/tile/map/MapTile.d.ts +12 -10
  344. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  345. package/lib/cjs/tile/map/MapTile.js +60 -39
  346. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  347. package/lib/cjs/tile/map/MapTileLoader.d.ts +2 -1
  348. package/lib/cjs/tile/map/MapTileLoader.d.ts.map +1 -1
  349. package/lib/cjs/tile/map/MapTileLoader.js +4 -1
  350. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  351. package/lib/cjs/tile/map/MapTileTree.d.ts +21 -11
  352. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  353. package/lib/cjs/tile/map/MapTileTree.js +154 -67
  354. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  355. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  356. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +1 -1
  357. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  358. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
  359. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  360. package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
  361. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  362. package/lib/cjs/tools/ToolAdmin.d.ts +2 -3
  363. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  364. package/lib/cjs/tools/ToolAdmin.js +7 -2
  365. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  366. package/lib/cjs/tools/ViewTool.d.ts +4 -4
  367. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  368. package/lib/cjs/tools/ViewTool.js +1 -1
  369. package/lib/cjs/tools/ViewTool.js.map +1 -1
  370. package/lib/esm/AccuSnap.js +2 -2
  371. package/lib/esm/AccuSnap.js.map +1 -1
  372. package/lib/esm/ApproximateTerrainHeights.d.ts +1 -1
  373. package/lib/esm/ApproximateTerrainHeights.d.ts.map +1 -1
  374. package/lib/esm/ApproximateTerrainHeights.js +2 -9
  375. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  376. package/lib/esm/ApproximateTerrainHeightsProps.d.ts +12 -0
  377. package/lib/esm/ApproximateTerrainHeightsProps.d.ts.map +1 -0
  378. package/lib/esm/ApproximateTerrainHeightsProps.js +10 -0
  379. package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -0
  380. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  381. package/lib/esm/BriefcaseConnection.js +6 -5
  382. package/lib/esm/BriefcaseConnection.js.map +1 -1
  383. package/lib/esm/CategorySelectorState.js +1 -1
  384. package/lib/esm/CategorySelectorState.js.map +1 -1
  385. package/lib/esm/DisplayStyleState.d.ts +4 -3
  386. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  387. package/lib/esm/DisplayStyleState.js +34 -10
  388. package/lib/esm/DisplayStyleState.js.map +1 -1
  389. package/lib/esm/DrawingViewState.d.ts.map +1 -1
  390. package/lib/esm/DrawingViewState.js +9 -8
  391. package/lib/esm/DrawingViewState.js.map +1 -1
  392. package/lib/esm/FrontendLoggerCategory.d.ts +3 -1
  393. package/lib/esm/FrontendLoggerCategory.d.ts.map +1 -1
  394. package/lib/esm/FrontendLoggerCategory.js +2 -0
  395. package/lib/esm/FrontendLoggerCategory.js.map +1 -1
  396. package/lib/esm/IModelApp.d.ts +10 -4
  397. package/lib/esm/IModelApp.d.ts.map +1 -1
  398. package/lib/esm/IModelApp.js +25 -12
  399. package/lib/esm/IModelApp.js.map +1 -1
  400. package/lib/esm/IModelConnection.d.ts +3 -2
  401. package/lib/esm/IModelConnection.d.ts.map +1 -1
  402. package/lib/esm/IModelConnection.js +7 -5
  403. package/lib/esm/IModelConnection.js.map +1 -1
  404. package/lib/esm/ImageUtil.d.ts.map +1 -1
  405. package/lib/esm/ImageUtil.js +8 -14
  406. package/lib/esm/ImageUtil.js.map +1 -1
  407. package/lib/esm/LocalhostIpcApp.d.ts +2 -0
  408. package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
  409. package/lib/esm/LocalhostIpcApp.js +10 -4
  410. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  411. package/lib/esm/RealityDataSource.d.ts +60 -14
  412. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  413. package/lib/esm/RealityDataSource.js +37 -237
  414. package/lib/esm/RealityDataSource.js.map +1 -1
  415. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
  416. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
  417. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +162 -0
  418. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
  419. package/lib/esm/RealityDataSourceContextShareImpl.d.ts +83 -0
  420. package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -0
  421. package/lib/esm/RealityDataSourceContextShareImpl.js +230 -0
  422. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -0
  423. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
  424. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
  425. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +131 -0
  426. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -0
  427. package/lib/esm/SheetViewState.js +7 -3
  428. package/lib/esm/SheetViewState.js.map +1 -1
  429. package/lib/esm/ViewState.d.ts +8 -0
  430. package/lib/esm/ViewState.d.ts.map +1 -1
  431. package/lib/esm/ViewState.js +1 -1
  432. package/lib/esm/ViewState.js.map +1 -1
  433. package/lib/esm/Viewport.d.ts +35 -14
  434. package/lib/esm/Viewport.d.ts.map +1 -1
  435. package/lib/esm/Viewport.js +60 -11
  436. package/lib/esm/Viewport.js.map +1 -1
  437. package/lib/esm/core-frontend.d.ts +6 -4
  438. package/lib/esm/core-frontend.d.ts.map +1 -1
  439. package/lib/esm/core-frontend.js +6 -4
  440. package/lib/esm/core-frontend.js.map +1 -1
  441. package/lib/esm/extension/Extension.d.ts +48 -0
  442. package/lib/esm/extension/Extension.d.ts.map +1 -0
  443. package/lib/esm/extension/Extension.js +15 -0
  444. package/lib/esm/extension/Extension.js.map +1 -0
  445. package/lib/esm/extension/ExtensionAdmin.d.ts +64 -0
  446. package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -0
  447. package/lib/esm/extension/ExtensionAdmin.js +102 -0
  448. package/lib/esm/extension/ExtensionAdmin.js.map +1 -0
  449. package/lib/esm/extension/ExtensionHost.d.ts +23 -0
  450. package/lib/esm/extension/ExtensionHost.d.ts.map +1 -0
  451. package/lib/esm/extension/ExtensionHost.js +22 -0
  452. package/lib/esm/extension/ExtensionHost.js.map +1 -0
  453. package/lib/esm/extension/ExtensionImpl.d.ts +21 -0
  454. package/lib/esm/extension/ExtensionImpl.d.ts.map +1 -0
  455. package/lib/esm/extension/ExtensionImpl.js +40 -0
  456. package/lib/esm/extension/ExtensionImpl.js.map +1 -0
  457. package/lib/esm/extension/ExtensionLoader.d.ts +26 -0
  458. package/lib/esm/extension/ExtensionLoader.d.ts.map +1 -0
  459. package/lib/esm/extension/ExtensionLoader.js +9 -0
  460. package/lib/esm/extension/ExtensionLoader.js.map +1 -0
  461. package/lib/esm/extension/ExtensionRuntime.d.ts +5 -0
  462. package/lib/esm/extension/ExtensionRuntime.d.ts.map +1 -0
  463. package/lib/esm/extension/ExtensionRuntime.js +84 -0
  464. package/lib/esm/extension/ExtensionRuntime.js.map +1 -0
  465. package/lib/esm/extension/extensions.d.ts +19 -0
  466. package/lib/esm/extension/extensions.d.ts.map +1 -0
  467. package/lib/esm/extension/extensions.js +24 -0
  468. package/lib/esm/extension/extensions.js.map +1 -0
  469. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
  470. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  471. package/lib/esm/quantity-formatting/BasicUnitsProvider.js +48 -44
  472. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  473. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +90 -80
  474. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  475. package/lib/esm/quantity-formatting/QuantityFormatter.js +85 -42
  476. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  477. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
  478. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
  479. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js +26 -0
  480. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
  481. package/lib/esm/quantity-formatting/UnitsData.d.ts +11 -0
  482. package/lib/esm/quantity-formatting/UnitsData.d.ts.map +1 -0
  483. package/lib/esm/quantity-formatting/UnitsData.js +56 -0
  484. package/lib/esm/quantity-formatting/UnitsData.js.map +1 -0
  485. package/lib/esm/render/GraphicBranch.d.ts +2 -0
  486. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  487. package/lib/esm/render/GraphicBranch.js.map +1 -1
  488. package/lib/esm/render/RenderPlanarClassifier.d.ts +1 -1
  489. package/lib/esm/render/RenderPlanarClassifier.d.ts.map +1 -1
  490. package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
  491. package/lib/esm/render/RenderSystem.d.ts +12 -7
  492. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  493. package/lib/esm/render/RenderSystem.js +6 -3
  494. package/lib/esm/render/RenderSystem.js.map +1 -1
  495. package/lib/esm/render/RenderTarget.d.ts +4 -4
  496. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  497. package/lib/esm/render/RenderTarget.js.map +1 -1
  498. package/lib/esm/render/Scene.d.ts.map +1 -1
  499. package/lib/esm/render/Scene.js.map +1 -1
  500. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
  501. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
  502. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
  503. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
  504. package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
  505. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  506. package/lib/esm/render/webgl/BranchState.d.ts +2 -0
  507. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  508. package/lib/esm/render/webgl/BranchState.js +5 -3
  509. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  510. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  511. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  512. package/lib/esm/render/webgl/Graphic.d.ts +5 -3
  513. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  514. package/lib/esm/render/webgl/Graphic.js +7 -2
  515. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  516. package/lib/esm/render/webgl/PlanarClassifier.d.ts +4 -1
  517. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  518. package/lib/esm/render/webgl/PlanarClassifier.js +22 -9
  519. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  520. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts +2 -2
  521. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  522. package/lib/esm/render/webgl/PlanarTextureProjection.js +5 -3
  523. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  524. package/lib/esm/render/webgl/RealityMesh.d.ts +31 -11
  525. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  526. package/lib/esm/render/webgl/RealityMesh.js +155 -52
  527. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  528. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  529. package/lib/esm/render/webgl/RenderCommands.js +4 -0
  530. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  531. package/lib/esm/render/webgl/SceneCompositor.d.ts +3 -0
  532. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  533. package/lib/esm/render/webgl/SceneCompositor.js +45 -19
  534. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  535. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -0
  536. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  537. package/lib/esm/render/webgl/ShaderProgram.js +1 -0
  538. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  539. package/lib/esm/render/webgl/System.d.ts +9 -9
  540. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  541. package/lib/esm/render/webgl/System.js +6 -6
  542. package/lib/esm/render/webgl/System.js.map +1 -1
  543. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  544. package/lib/esm/render/webgl/Target.js.map +1 -1
  545. package/lib/esm/render/webgl/glsl/PlanarClassification.js +1 -1
  546. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  547. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  548. package/lib/esm/render/webgl/glsl/RealityMesh.js +103 -28
  549. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  550. package/lib/esm/tile/ClassifierTileTree.d.ts +4 -2
  551. package/lib/esm/tile/ClassifierTileTree.d.ts.map +1 -1
  552. package/lib/esm/tile/ClassifierTileTree.js +32 -17
  553. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  554. package/lib/esm/tile/DynamicIModelTile.d.ts.map +1 -1
  555. package/lib/esm/tile/DynamicIModelTile.js +1 -1
  556. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  557. package/lib/esm/tile/GltfReader.d.ts +22 -3
  558. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  559. package/lib/esm/tile/GltfReader.js +207 -42
  560. package/lib/esm/tile/GltfReader.js.map +1 -1
  561. package/lib/esm/tile/IModelTileRequestChannels.d.ts +3 -3
  562. package/lib/esm/tile/IModelTileRequestChannels.d.ts.map +1 -1
  563. package/lib/esm/tile/IModelTileRequestChannels.js +7 -11
  564. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  565. package/lib/esm/tile/LRUTileList.d.ts +29 -29
  566. package/lib/esm/tile/LRUTileList.d.ts.map +1 -1
  567. package/lib/esm/tile/LRUTileList.js +47 -47
  568. package/lib/esm/tile/LRUTileList.js.map +1 -1
  569. package/lib/esm/tile/OPCFormatInterpreter.d.ts +22 -0
  570. package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -0
  571. package/lib/esm/tile/OPCFormatInterpreter.js +88 -0
  572. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -0
  573. package/lib/esm/tile/OrbitGtTileTree.js +1 -1
  574. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  575. package/lib/esm/tile/PntsReader.d.ts +1 -1
  576. package/lib/esm/tile/PntsReader.d.ts.map +1 -1
  577. package/lib/esm/tile/PntsReader.js +154 -39
  578. package/lib/esm/tile/PntsReader.js.map +1 -1
  579. package/lib/esm/tile/PrimaryTileTree.d.ts +18 -2
  580. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  581. package/lib/esm/tile/PrimaryTileTree.js +51 -2
  582. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  583. package/lib/esm/tile/RealityModelTileTree.d.ts +24 -3
  584. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  585. package/lib/esm/tile/RealityModelTileTree.js +37 -13
  586. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  587. package/lib/esm/tile/RealityTile.d.ts +17 -3
  588. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  589. package/lib/esm/tile/RealityTile.js +34 -2
  590. package/lib/esm/tile/RealityTile.js.map +1 -1
  591. package/lib/esm/tile/RealityTileDrawArgs.d.ts +4 -1
  592. package/lib/esm/tile/RealityTileDrawArgs.d.ts.map +1 -1
  593. package/lib/esm/tile/RealityTileDrawArgs.js +3 -1
  594. package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
  595. package/lib/esm/tile/RealityTileLoader.d.ts +8 -5
  596. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  597. package/lib/esm/tile/RealityTileLoader.js +20 -6
  598. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  599. package/lib/esm/tile/RealityTileTree.d.ts +4 -1
  600. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  601. package/lib/esm/tile/RealityTileTree.js +14 -6
  602. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  603. package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
  604. package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
  605. package/lib/esm/tile/ThreeDTileFormatInterpreter.js +175 -0
  606. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -0
  607. package/lib/esm/tile/Tile.d.ts +5 -4
  608. package/lib/esm/tile/Tile.d.ts.map +1 -1
  609. package/lib/esm/tile/Tile.js +3 -2
  610. package/lib/esm/tile/Tile.js.map +1 -1
  611. package/lib/esm/tile/TileAdmin.d.ts +43 -45
  612. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  613. package/lib/esm/tile/TileAdmin.js +105 -105
  614. package/lib/esm/tile/TileAdmin.js.map +1 -1
  615. package/lib/esm/tile/TileDrawArgs.d.ts +2 -0
  616. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  617. package/lib/esm/tile/TileDrawArgs.js +5 -0
  618. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  619. package/lib/esm/tile/TileGeometryCollector.d.ts +80 -0
  620. package/lib/esm/tile/TileGeometryCollector.d.ts.map +1 -0
  621. package/lib/esm/tile/TileGeometryCollector.js +67 -0
  622. package/lib/esm/tile/TileGeometryCollector.js.map +1 -0
  623. package/lib/esm/tile/TileRequest.d.ts +12 -9
  624. package/lib/esm/tile/TileRequest.d.ts.map +1 -1
  625. package/lib/esm/tile/TileRequest.js +19 -11
  626. package/lib/esm/tile/TileRequest.js.map +1 -1
  627. package/lib/esm/tile/TileRequestChannel.js +3 -3
  628. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  629. package/lib/esm/tile/TileRequestChannels.d.ts +0 -4
  630. package/lib/esm/tile/TileRequestChannels.d.ts.map +1 -1
  631. package/lib/esm/tile/TileRequestChannels.js +1 -6
  632. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  633. package/lib/esm/tile/TileTree.d.ts +7 -1
  634. package/lib/esm/tile/TileTree.d.ts.map +1 -1
  635. package/lib/esm/tile/TileTree.js +8 -1
  636. package/lib/esm/tile/TileTree.js.map +1 -1
  637. package/lib/esm/tile/TileTreeReference.d.ts +27 -2
  638. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  639. package/lib/esm/tile/TileTreeReference.js +43 -3
  640. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  641. package/lib/esm/tile/TileUsageMarker.d.ts +9 -9
  642. package/lib/esm/tile/TileUsageMarker.d.ts.map +1 -1
  643. package/lib/esm/tile/TileUsageMarker.js +9 -9
  644. package/lib/esm/tile/TileUsageMarker.js.map +1 -1
  645. package/lib/esm/tile/TileUser.d.ts +33 -0
  646. package/lib/esm/tile/TileUser.d.ts.map +1 -0
  647. package/lib/esm/tile/TileUser.js +25 -0
  648. package/lib/esm/tile/TileUser.js.map +1 -0
  649. package/lib/esm/tile/TileUserSet.d.ts +28 -0
  650. package/lib/esm/tile/TileUserSet.d.ts.map +1 -0
  651. package/lib/esm/tile/TileUserSet.js +118 -0
  652. package/lib/esm/tile/TileUserSet.js.map +1 -0
  653. package/lib/esm/tile/internal.d.ts +6 -0
  654. package/lib/esm/tile/internal.d.ts.map +1 -1
  655. package/lib/esm/tile/internal.js +6 -0
  656. package/lib/esm/tile/internal.js.map +1 -1
  657. package/lib/esm/tile/map/CesiumTerrainProvider.js +2 -2
  658. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  659. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +6 -5
  660. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  661. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +47 -14
  662. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  663. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +3 -4
  664. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  665. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +1 -1
  666. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  667. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
  668. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  669. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
  670. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  671. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +3 -4
  672. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  673. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +5 -4
  674. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  675. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
  676. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
  677. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  678. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -3
  679. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  680. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +13 -11
  681. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  682. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
  683. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  684. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  685. package/lib/esm/tile/map/ImageryTileTree.d.ts +4 -5
  686. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  687. package/lib/esm/tile/map/ImageryTileTree.js +5 -4
  688. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  689. package/lib/esm/tile/map/MapFeatureInfo.d.ts +26 -0
  690. package/lib/esm/tile/map/MapFeatureInfo.d.ts.map +1 -0
  691. package/lib/esm/tile/map/MapFeatureInfo.js +15 -0
  692. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -0
  693. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +4 -4
  694. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  695. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  696. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +3 -3
  697. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  698. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  699. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +5 -4
  700. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  701. package/lib/esm/tile/map/MapLayerImageryProvider.js +5 -1
  702. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  703. package/lib/esm/tile/map/MapLayerSources.d.ts +2 -2
  704. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  705. package/lib/esm/tile/map/MapLayerSources.js +6 -4
  706. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  707. package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts +10 -2
  708. package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
  709. package/lib/esm/tile/map/MapLayerTileTreeReference.js +25 -3
  710. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  711. package/lib/esm/tile/map/MapTile.d.ts +12 -10
  712. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  713. package/lib/esm/tile/map/MapTile.js +60 -39
  714. package/lib/esm/tile/map/MapTile.js.map +1 -1
  715. package/lib/esm/tile/map/MapTileLoader.d.ts +2 -1
  716. package/lib/esm/tile/map/MapTileLoader.d.ts.map +1 -1
  717. package/lib/esm/tile/map/MapTileLoader.js +4 -1
  718. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  719. package/lib/esm/tile/map/MapTileTree.d.ts +21 -11
  720. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  721. package/lib/esm/tile/map/MapTileTree.js +156 -69
  722. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  723. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  724. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +2 -2
  725. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  726. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
  727. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  728. package/lib/esm/tile/map/WmsCapabilities.js +11 -10
  729. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  730. package/lib/esm/tools/ToolAdmin.d.ts +2 -3
  731. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  732. package/lib/esm/tools/ToolAdmin.js +8 -3
  733. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  734. package/lib/esm/tools/ViewTool.d.ts +4 -4
  735. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  736. package/lib/esm/tools/ViewTool.js +1 -1
  737. package/lib/esm/tools/ViewTool.js.map +1 -1
  738. package/package.json +22 -20
  739. package/lib/cjs/ViewportSet.d.ts +0 -28
  740. package/lib/cjs/ViewportSet.d.ts.map +0 -1
  741. package/lib/cjs/ViewportSet.js +0 -126
  742. package/lib/cjs/ViewportSet.js.map +0 -1
  743. package/lib/cjs/tile/DracoDecoder.d.ts +0 -20
  744. package/lib/cjs/tile/DracoDecoder.d.ts.map +0 -1
  745. package/lib/cjs/tile/DracoDecoder.js +0 -169
  746. package/lib/cjs/tile/DracoDecoder.js.map +0 -1
  747. package/lib/esm/ViewportSet.d.ts +0 -28
  748. package/lib/esm/ViewportSet.d.ts.map +0 -1
  749. package/lib/esm/ViewportSet.js +0 -121
  750. package/lib/esm/ViewportSet.js.map +0 -1
  751. package/lib/esm/tile/DracoDecoder.d.ts +0 -20
  752. package/lib/esm/tile/DracoDecoder.d.ts.map +0 -1
  753. package/lib/esm/tile/DracoDecoder.js +0 -165
  754. package/lib/esm/tile/DracoDecoder.js.map +0 -1
  755. package/lib/public/assets/approximateTerrainHeights.json +0 -1
@@ -5,7 +5,7 @@
5
5
  /** @packageDocumentation
6
6
  * @module Utils
7
7
  */
8
- import { assert, compareBooleans, compareNumbers, compareStringsOrUndefined, CompressedId64Set, } from "@itwin/core-bentley";
8
+ import { assert, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStringsOrUndefined, CompressedId64Set, } from "@itwin/core-bentley";
9
9
  import { Cartographic, DefaultSupportedTypes, GeoCoordStatus, PlanarClipMaskPriority, RealityDataProvider, } from "@itwin/core-common";
10
10
  import { Angle, Constant, Ellipsoid, Matrix3d, Point3d, Range3d, Ray3d, Transform, Vector3d } from "@itwin/core-geometry";
11
11
  import { calculateEcefToDbTransformAtLocation } from "../BackgroundMapGeometry";
@@ -51,7 +51,8 @@ class RealityTreeSupplier {
51
51
  async createTileTree(treeId, iModel) {
52
52
  if (treeId.maskModelIds)
53
53
  await iModel.models.load(CompressedId64Set.decompressSet(treeId.maskModelIds));
54
- return RealityModelTileTree.createRealityModelTileTree(treeId.rdSourceKey, iModel, treeId.modelId, treeId.transform, treeId.deduplicateVertices);
54
+ const opts = { deduplicateVertices: treeId.deduplicateVertices, produceGeometry: treeId.produceGeometry };
55
+ return RealityModelTileTree.createRealityModelTileTree(treeId.rdSourceKey, iModel, treeId.modelId, treeId.transform, opts);
55
56
  }
56
57
  compareTileTreeIds(lhs, rhs) {
57
58
  let cmp = compareStringsOrUndefined(lhs.rdSourceKey.id, rhs.rdSourceKey.id);
@@ -69,6 +70,9 @@ class RealityTreeSupplier {
69
70
  if (0 !== cmp)
70
71
  return cmp;
71
72
  cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);
73
+ if (0 !== cmp)
74
+ return cmp;
75
+ cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);
72
76
  if (0 !== cmp)
73
77
  return cmp;
74
78
  cmp = compareTransforms(lhs.transform, rhs.transform);
@@ -303,11 +307,12 @@ async function expandSubTree(root, rdsource) {
303
307
  }
304
308
  /** @internal */
305
309
  class RealityModelTileLoader extends RealityTileLoader {
306
- constructor(tree, batchedIdMap, deduplicateVertices = false) {
307
- super();
310
+ constructor(tree, batchedIdMap, opts) {
311
+ var _a, _b;
312
+ super((_a = opts === null || opts === void 0 ? void 0 : opts.produceGeometry) !== null && _a !== void 0 ? _a : false);
308
313
  this.tree = tree;
309
314
  this._batchedIdMap = batchedIdMap;
310
- this._deduplicateVertices = deduplicateVertices;
315
+ this._deduplicateVertices = (_b = opts === null || opts === void 0 ? void 0 : opts.deduplicateVertices) !== null && _b !== void 0 ? _b : false;
311
316
  let clipVolume;
312
317
  if (RealityTileRegion.isGlobal(tree.tilesetJson.boundingVolume))
313
318
  clipVolume = false;
@@ -403,7 +408,6 @@ export class RealityModelTileTree extends RealityTileTree {
403
408
  super();
404
409
  this._name = undefined !== props.name ? props.name : "";
405
410
  this._modelId = props.modelId ? props.modelId : props.iModel.transientIds.next;
406
- this._source = props.source;
407
411
  let transform;
408
412
  if (undefined !== props.tilesetToDbTransform) {
409
413
  const tf = Transform.fromJSON(props.tilesetToDbTransform);
@@ -412,13 +416,14 @@ export class RealityModelTileTree extends RealityTileTree {
412
416
  this._transform = transform;
413
417
  }
414
418
  this._iModel = props.iModel;
419
+ this._source = props.source;
415
420
  if (props.planarClipMask)
416
421
  this._planarClipMask = PlanarClipMaskState.create(props.planarClipMask);
417
422
  if (undefined !== props.classifiers)
418
423
  this._classifier = createClassifierTileTreeReference(props.classifiers, this, props.iModel, props.source);
419
424
  }
420
425
  get modelId() { return this._modelId; }
421
- get classifiers() { return undefined !== this._classifier ? this._classifier.classifiers : undefined; }
426
+ // public get classifiers(): SpatialClassifiers | undefined { return undefined !== this._classifier ? this._classifier.classifiers : undefined; }
422
427
  get planarClipMask() { return this._planarClipMask; }
423
428
  set planarClipMask(planarClipMask) { this._planarClipMask = planarClipMask; }
424
429
  get planarClipMaskPriority() {
@@ -480,7 +485,7 @@ export class RealityModelTileTree extends RealityTileTree {
480
485
  }
481
486
  }
482
487
  RealityModelTileTree.Reference = Reference;
483
- async function createRealityModelTileTree(rdSourceKey, iModel, modelId, tilesetToDb, deduplicateVertices) {
488
+ async function createRealityModelTileTree(rdSourceKey, iModel, modelId, tilesetToDb, opts) {
484
489
  const rdSource = await RealityDataSource.fromKey(rdSourceKey, iModel.iTwinId);
485
490
  // If we can get a valid connection from sourceKey, returns the tile tree
486
491
  if (rdSource) {
@@ -489,7 +494,7 @@ export class RealityModelTileTree extends RealityTileTree {
489
494
  if (tileTreeId === undefined)
490
495
  return undefined;
491
496
  const props = await getTileTreeProps(rdSource, tilesetToDb, iModel);
492
- const loader = new RealityModelTileLoader(props, new BatchedTileIdMap(iModel), deduplicateVertices);
497
+ const loader = new RealityModelTileLoader(props, new BatchedTileIdMap(iModel), opts);
493
498
  const gcsConverterAvailable = await getGcsConverterAvailable(iModel);
494
499
  const params = new RealityModelTileTreeParams(tileTreeId, iModel, modelId, loader, gcsConverterAvailable, props.tilesetToEcef);
495
500
  return new RealityModelTileTree(params);
@@ -548,12 +553,18 @@ export class RealityModelTileTree extends RealityTileTree {
548
553
  /** Supplies a reality data [[TileTree]] from a URL. May be associated with a persistent [[GeometricModelState]], or attached at run-time via a [[ContextRealityModelState]].
549
554
  * @internal
550
555
  */
551
- class RealityTreeReference extends RealityModelTileTree.Reference {
556
+ export class RealityTreeReference extends RealityModelTileTree.Reference {
552
557
  constructor(props) {
558
+ var _a;
553
559
  super(props);
560
+ this._produceGeometry = props.produceGeometry;
554
561
  // Maybe we should throw if both props.rdSourceKey && props.url are undefined
555
- this._rdSourceKey = props.rdSourceKey ? props.rdSourceKey : props.url ? RealityDataSource.createKeyFromUrl(props.url, RealityDataProvider.ContextShare) :
556
- RealityDataSource.createKeyFromUrl("", RealityDataProvider.ContextShare);
562
+ if (props.rdSourceKey)
563
+ this._rdSourceKey = props.rdSourceKey;
564
+ else
565
+ this._rdSourceKey = RealityDataSource.createKeyFromUrl((_a = props.url) !== null && _a !== void 0 ? _a : "", RealityDataProvider.ContextShare);
566
+ if (this._produceGeometry)
567
+ this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);
557
568
  }
558
569
  get treeOwner() {
559
570
  const treeId = {
@@ -562,9 +573,22 @@ class RealityTreeReference extends RealityModelTileTree.Reference {
562
573
  modelId: this.modelId,
563
574
  maskModelIds: this.maskModelIds,
564
575
  deduplicateVertices: this._wantWiremesh,
576
+ produceGeometry: this._produceGeometry,
565
577
  };
566
578
  return realityTreeSupplier.getOwner(treeId, this._iModel);
567
579
  }
580
+ _createGeometryTreeReference() {
581
+ const ref = new RealityTreeReference({
582
+ iModel: this._iModel,
583
+ modelId: this.modelId,
584
+ source: this._source,
585
+ rdSourceKey: this._rdSourceKey,
586
+ name: this._name,
587
+ produceGeometry: true,
588
+ });
589
+ assert(undefined !== ref.collectTileGeometry);
590
+ return ref;
591
+ }
568
592
  get _wantWiremesh() {
569
593
  return this._source.viewFlags.wiremesh;
570
594
  }
@@ -639,7 +663,7 @@ class RealityTreeReference extends RealityModelTileTree.Reference {
639
663
  div.innerHTML = strings.join("<br>");
640
664
  return div;
641
665
  }
642
- addLogoCards(cards, _vp) {
666
+ addLogoCards(cards) {
643
667
  if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset) {
644
668
  cards.appendChild(IModelApp.makeLogoCard({ heading: "OpenStreetMap", notice: `&copy;<a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> ${IModelApp.localization.getLocalizedString("iModelJs:BackgroundMap:OpenStreetMapContributors")}` }));
645
669
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RealityModelTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityModelTileTree.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 Utils\r\n */\r\n\r\nimport {\r\n assert, compareBooleans, compareNumbers, compareStringsOrUndefined, CompressedId64Set, Id64String,\r\n} from \"@itwin/core-bentley\";\r\nimport {\r\n Cartographic, DefaultSupportedTypes, GeoCoordStatus, PlanarClipMaskPriority, PlanarClipMaskSettings,\r\n RealityDataProvider,\r\n RealityDataSourceKey,\r\n SpatialClassifiers, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport { Angle, Constant, Ellipsoid, Matrix3d, Point3d, Range3d, Ray3d, Transform, TransformProps, Vector3d, XYZ } from \"@itwin/core-geometry\";\r\nimport { calculateEcefToDbTransformAtLocation } from \"../BackgroundMapGeometry\";\r\nimport { DisplayStyleState } from \"../DisplayStyleState\";\r\nimport { HitDetail } from \"../HitDetail\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { PlanarClipMaskState } from \"../PlanarClipMaskState\";\r\nimport { RealityDataSource } from \"../RealityDataSource\";\r\nimport { RenderMemory } from \"../render/RenderMemory\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ScreenViewport } from \"../Viewport\";\r\nimport { ViewState } from \"../ViewState\";\r\nimport {\r\n BatchedTileIdMap, CesiumIonAssetProvider, createClassifierTileTreeReference, createDefaultViewFlagOverrides, DisclosedTileTreeSet, getGcsConverterAvailable, RealityTile, RealityTileLoader, RealityTileParams,\r\n RealityTileTree, RealityTileTreeParams, SpatialClassifierTileTreeReference, Tile, TileDrawArgs, TileLoadPriority, TileRequest, TileTree,\r\n TileTreeOwner, TileTreeReference, TileTreeSupplier,\r\n} from \"./internal\";\r\n\r\nfunction getUrl(content: any) {\r\n return content ? (content.url ? content.url : content.uri) : undefined;\r\n}\r\n\r\ninterface RealityTreeId {\r\n rdSourceKey: RealityDataSourceKey;\r\n transform?: Transform;\r\n modelId: Id64String;\r\n maskModelIds?: string;\r\n deduplicateVertices: boolean;\r\n toEcefTransform?: Transform;\r\n}\r\n\r\nfunction compareOrigins(lhs: XYZ, rhs: XYZ): number {\r\n let cmp = compareNumbers(lhs.x, rhs.x);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.y, rhs.y);\r\n if (0 === cmp)\r\n cmp = compareNumbers(lhs.z, rhs.z);\r\n }\r\n\r\n return cmp;\r\n}\r\n\r\nfunction compareMatrices(lhs: Matrix3d, rhs: Matrix3d): number {\r\n for (let i = 0; i < 9; i++) {\r\n const cmp = compareNumbers(lhs.coffs[i], rhs.coffs[i]);\r\n if (0 !== cmp)\r\n return cmp;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nfunction compareTransforms(lhs?: Transform, rhs?: Transform) {\r\n if (undefined === lhs)\r\n return undefined !== rhs ? -1 : 0;\r\n\r\n else if (undefined === rhs)\r\n return 1;\r\n\r\n const cmp = compareOrigins(lhs.origin, rhs.origin);\r\n return 0 !== cmp ? cmp : compareMatrices(lhs.matrix, rhs.matrix);\r\n}\r\n\r\nclass RealityTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public getOwner(treeId: RealityTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(treeId, this);\r\n }\r\n\r\n public async createTileTree(treeId: RealityTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n if (treeId.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(treeId.maskModelIds));\r\n\r\n return RealityModelTileTree.createRealityModelTileTree(treeId.rdSourceKey, iModel, treeId.modelId, treeId.transform, treeId.deduplicateVertices);\r\n }\r\n\r\n public compareTileTreeIds(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n let cmp = compareStringsOrUndefined(lhs.rdSourceKey.id, rhs.rdSourceKey.id);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.rdSourceKey.format, rhs.rdSourceKey.format);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.rdSourceKey.iTwinId, rhs.rdSourceKey.iTwinId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.modelId, rhs.modelId);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.deduplicateVertices, rhs.deduplicateVertices);\r\n }\r\n }\r\n }\r\n\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareTransforms(lhs.transform, rhs.transform);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n return compareTransforms(lhs.toEcefTransform, rhs.toEcefTransform);\r\n }\r\n}\r\n\r\nconst realityTreeSupplier = new RealityTreeSupplier();\r\n\r\n/** @internal */\r\nexport function createRealityTileTreeReference(props: RealityModelTileTree.ReferenceProps): RealityModelTileTree.Reference {\r\n return new RealityTreeReference(props);\r\n}\r\n\r\nconst zeroPoint = Point3d.createZero();\r\nconst earthEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\nconst scratchRay = Ray3d.createXAxis();\r\n\r\n/** @internal */\r\nexport class RealityTileRegion {\r\n constructor(values: { minLongitude: number, minLatitude: number, minHeight: number, maxLongitude: number, maxLatitude: number, maxHeight: number }) {\r\n this.minLongitude = values.minLongitude;\r\n this.minLatitude = values.minLatitude;\r\n this.minHeight = values.minHeight;\r\n this.maxLongitude = values.maxLongitude;\r\n this.maxLatitude = values.maxLatitude;\r\n this.maxHeight = values.maxHeight;\r\n }\r\n public minLongitude: number;\r\n public minLatitude: number;\r\n public minHeight: number;\r\n public maxLongitude: number;\r\n public maxLatitude: number;\r\n public maxHeight: number;\r\n\r\n public static create(region: number[]): RealityTileRegion {\r\n const minHeight = region[4];\r\n const maxHeight = region[5];\r\n const minLongitude = region[0];\r\n const maxLongitude = region[2];\r\n const minLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[1]);\r\n const maxLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[3]);\r\n return new RealityTileRegion({ minLongitude, minLatitude, minHeight, maxLongitude, maxLatitude, maxHeight });\r\n }\r\n\r\n public static isGlobal(boundingVolume: any) {\r\n return Array.isArray(boundingVolume?.region) && (boundingVolume.region[2] - boundingVolume.region[0]) > Angle.piRadians && (boundingVolume.region[3] - boundingVolume.region[1]) > Angle.piOver2Radians;\r\n }\r\n public getRange(): { range: Range3d, corners?: Point3d[] } {\r\n const maxAngle = Math.max(Math.abs(this.maxLatitude - this.minLatitude), Math.abs(this.maxLongitude - this.minLongitude));\r\n let corners;\r\n let range: Range3d;\r\n if (maxAngle < Math.PI / 8) {\r\n corners = new Array<Point3d>(8);\r\n const chordTolerance = (1 - Math.cos(maxAngle / 2)) * Constant.earthRadiusWGS84.polar;\r\n const addEllipsoidCorner = ((long: number, lat: number, index: number) => {\r\n const ray = earthEllipsoid.radiansToUnitNormalRay(long, lat, scratchRay)!;\r\n corners[index] = ray.fractionToPoint(this.minHeight - chordTolerance);\r\n corners[index + 4] = ray.fractionToPoint(this.maxHeight + chordTolerance);\r\n });\r\n addEllipsoidCorner(this.minLongitude, this.minLatitude, 0);\r\n addEllipsoidCorner(this.minLongitude, this.maxLatitude, 1);\r\n addEllipsoidCorner(this.maxLongitude, this.minLatitude, 2);\r\n addEllipsoidCorner(this.maxLongitude, this.maxLatitude, 3);\r\n range = Range3d.createArray(corners);\r\n } else {\r\n const minEq = Constant.earthRadiusWGS84.equator + this.minHeight, maxEq = Constant.earthRadiusWGS84.equator + this.maxHeight;\r\n const minEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, minEq, minEq, Constant.earthRadiusWGS84.polar + this.minHeight);\r\n const maxEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, maxEq, maxEq, Constant.earthRadiusWGS84.polar + this.maxHeight);\r\n range = minEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude);\r\n range.extendRange(maxEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude));\r\n }\r\n return { range, corners };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityModelTileUtils {\r\n public static rangeFromBoundingVolume(boundingVolume: any): { range: Range3d, corners?: Point3d[], region?: RealityTileRegion } | undefined {\r\n if (undefined === boundingVolume)\r\n return undefined;\r\n\r\n let corners: Point3d[] | undefined;\r\n let range: Range3d | undefined;\r\n if (undefined !== boundingVolume.box) {\r\n const box: number[] = boundingVolume.box;\r\n const center = Point3d.create(box[0], box[1], box[2]);\r\n const ux = Vector3d.create(box[3], box[4], box[5]);\r\n const uy = Vector3d.create(box[6], box[7], box[8]);\r\n const uz = Vector3d.create(box[9], box[10], box[11]);\r\n corners = new Array<Point3d>();\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < 2; k++) {\r\n for (let l = 0; l < 2; l++) {\r\n corners.push(center.plus3Scaled(ux, (j ? -1.0 : 1.0), uy, (k ? -1.0 : 1.0), uz, (l ? -1.0 : 1.0)));\r\n }\r\n }\r\n }\r\n range = Range3d.createArray(corners);\r\n } else if (Array.isArray(boundingVolume.sphere)) {\r\n const sphere: number[] = boundingVolume.sphere;\r\n const center = Point3d.create(sphere[0], sphere[1], sphere[2]);\r\n const radius = sphere[3];\r\n range = Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n } else if (Array.isArray(boundingVolume.region)) {\r\n const region = RealityTileRegion.create(boundingVolume.region);\r\n const regionRange = region.getRange();\r\n return { range: regionRange.range, corners: regionRange.corners, region };\r\n }\r\n return range ? { range, corners } : undefined;\r\n\r\n }\r\n public static maximumSizeFromGeometricTolerance(range: Range3d, geometricError: number): number {\r\n const minToleranceRatio = true === IModelApp.renderSystem.isMobile ? IModelApp.tileAdmin.mobileRealityTileMinToleranceRatio : 1.0; // Nominally the error on screen size of a tile. Increasing generally increases performance (fewer draw calls) at expense of higher load times.\r\n\r\n // NB: We increase the above minToleranceRatio on mobile devices in order to help avoid pruning too often based on the memory threshold for\r\n // pruning currently used by reality tile trees on mobile.\r\n\r\n return minToleranceRatio * range.diagonal().magnitude() / geometricError;\r\n }\r\n public static transformFromJson(jTrans: number[] | undefined): Transform {\r\n return (jTrans === undefined) ? Transform.createIdentity() : Transform.createOriginAndMatrix(Point3d.create(jTrans[12], jTrans[13], jTrans[14]), Matrix3d.createRowValues(jTrans[0], jTrans[4], jTrans[8], jTrans[1], jTrans[5], jTrans[9], jTrans[2], jTrans[6], jTrans[10]));\r\n }\r\n}\r\n\r\n/** @internal */\r\nenum SMTextureType {\r\n None = 0, // no textures\r\n Embedded = 1, // textures are available and stored in the nodes\r\n Streaming = 2, // textures need to be downloaded, Bing Maps, etc…\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileTreeProps {\r\n public location: Transform;\r\n public tilesetJson: any;\r\n public doDrapeBackgroundMap: boolean = false;\r\n public rdSource: RealityDataSource;\r\n public yAxisUp = false;\r\n public root: any;\r\n\r\n constructor(json: any, root: any, rdSource: RealityDataSource, tilesetToDbTransform: Transform, public readonly tilesetToEcef?: Transform) {\r\n this.tilesetJson = root;\r\n this.rdSource = rdSource;\r\n this.location = tilesetToDbTransform;\r\n this.doDrapeBackgroundMap = (json.root && json.root.SMMasterHeader && SMTextureType.Streaming === json.root.SMMasterHeader.IsTextured);\r\n if (json.asset.gltfUpAxis === undefined || json.asset.gltfUpAxis === \"y\" || json.asset.gltfUpAxis === \"Y\")\r\n this.yAxisUp = true;\r\n }\r\n}\r\n\r\nclass RealityModelTileTreeParams implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public iModel: IModelConnection;\r\n public is3d = true;\r\n public loader: RealityModelTileLoader;\r\n public rootTile: RealityTileParams;\r\n\r\n public get location() { return this.loader.tree.location; }\r\n public get yAxisUp() { return this.loader.tree.yAxisUp; }\r\n public get priority() { return this.loader.priority; }\r\n\r\n public constructor(tileTreeId: string, iModel: IModelConnection, modelId: Id64String, loader: RealityModelTileLoader, public readonly gcsConverterAvailable: boolean, public readonly rootToEcef: Transform | undefined) {\r\n this.loader = loader;\r\n this.id = tileTreeId;\r\n this.modelId = modelId;\r\n this.iModel = iModel;\r\n this.rootTile = new RealityModelTileProps(loader.tree.tilesetJson, undefined, \"\", undefined, undefined === loader.tree.tilesetJson.refine ? undefined : loader.tree.tilesetJson.refine === \"ADD\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileProps implements RealityTileParams {\r\n public readonly contentId: string;\r\n public readonly range: Range3d;\r\n public readonly contentRange?: Range3d;\r\n public readonly maximumSize: number;\r\n public readonly isLeaf: boolean;\r\n public readonly transformToRoot?: Transform;\r\n public readonly additiveRefinement?: boolean;\r\n public readonly parent?: RealityTile;\r\n public readonly noContentButTerminateOnSelection?: boolean;\r\n public readonly rangeCorners?: Point3d[];\r\n public readonly region?: RealityTileRegion;\r\n\r\n constructor(json: any, parent: RealityTile | undefined, thisId: string, transformToRoot?: Transform, additiveRefinement?: boolean) {\r\n this.contentId = thisId;\r\n this.parent = parent;\r\n const boundingVolume = RealityModelTileUtils.rangeFromBoundingVolume(json.boundingVolume);\r\n if (boundingVolume) {\r\n this.range = boundingVolume.range;\r\n this.rangeCorners = boundingVolume.corners;\r\n this.region = boundingVolume?.region;\r\n } else {\r\n this.range = Range3d.createNull();\r\n assert(false, \"Unbounded tile\");\r\n }\r\n this.isLeaf = !Array.isArray(json.children) || 0 === json.children.length;\r\n this.transformToRoot = transformToRoot;\r\n this.additiveRefinement = additiveRefinement;\r\n const hasContents = undefined !== getUrl(json.content);\r\n if (hasContents)\r\n this.contentRange = RealityModelTileUtils.rangeFromBoundingVolume(json.content.boundingVolume)?.range;\r\n else {\r\n // A node without content should probably be selectable even if not additive refinement - But restrict it to that case here\r\n // to avoid potential problems with existing reality models, but still avoid overselection in the OSM world building set.\r\n if (this.additiveRefinement || parent?.additiveRefinement)\r\n this.noContentButTerminateOnSelection = true;\r\n }\r\n\r\n this.maximumSize = (this.noContentButTerminateOnSelection || hasContents) ? RealityModelTileUtils.maximumSizeFromGeometricTolerance(Range3d.fromJSON(this.range), json.geometricError) : 0;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass FindChildResult {\r\n constructor(public id: string, public json: any, public transformToRoot?: Transform) { }\r\n}\r\n\r\n/** @internal */\r\nfunction assembleUrl(prefix: string, url: string): string {\r\n\r\n if (url.startsWith(\"./\")) {\r\n url = url.substring(2);\r\n } else {\r\n const prefixParts = prefix.split(\"/\");\r\n prefixParts.pop();\r\n while (url.startsWith(\"../\")) {\r\n prefixParts.pop();\r\n url = url.substring(3);\r\n }\r\n prefixParts.push(\"\");\r\n prefix = prefixParts.join(\"/\");\r\n }\r\n return prefix + url;\r\n}\r\n\r\n/** @internal */\r\nfunction addUrlPrefix(subTree: any, prefix: string) {\r\n if (undefined === subTree)\r\n return;\r\n\r\n if (undefined !== subTree.content) {\r\n if (undefined !== subTree.content.url)\r\n subTree.content.url = assembleUrl(prefix, subTree.content.url);\r\n else if (undefined !== subTree.content.uri)\r\n subTree.content.uri = assembleUrl(prefix, subTree.content.uri);\r\n }\r\n\r\n if (undefined !== subTree.children)\r\n for (const child of subTree.children)\r\n addUrlPrefix(child, prefix);\r\n}\r\n\r\n/** @internal */\r\nasync function expandSubTree(root: any, rdsource: RealityDataSource): Promise<any> {\r\n const childUrl = getUrl(root.content);\r\n if (undefined !== childUrl && childUrl.endsWith(\"json\")) { // A child may contain a subTree...\r\n const subTree = await rdsource.getTileJson(childUrl);\r\n const prefixIndex = childUrl.lastIndexOf(\"/\");\r\n if (prefixIndex > 0)\r\n addUrlPrefix(subTree.root, childUrl.substring(0, prefixIndex + 1));\r\n\r\n return subTree.root;\r\n } else {\r\n return root;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileLoader extends RealityTileLoader {\r\n public readonly tree: RealityModelTileTreeProps;\r\n private readonly _batchedIdMap?: BatchedTileIdMap;\r\n private _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _deduplicateVertices: boolean;\r\n\r\n public constructor(tree: RealityModelTileTreeProps, batchedIdMap?: BatchedTileIdMap, deduplicateVertices=false) {\r\n super();\r\n this.tree = tree;\r\n this._batchedIdMap = batchedIdMap;\r\n this._deduplicateVertices = deduplicateVertices;\r\n\r\n let clipVolume;\r\n if (RealityTileRegion.isGlobal(tree.tilesetJson.boundingVolume))\r\n clipVolume = false;\r\n this._viewFlagOverrides = createDefaultViewFlagOverrides({ lighting: true, clipVolume });\r\n\r\n // Display edges if they are present (Cesium outline extension) and enabled for view.\r\n this._viewFlagOverrides.visibleEdges = undefined;\r\n this._viewFlagOverrides.hiddenEdges = undefined;\r\n\r\n // Allow wiremesh display.\r\n this._viewFlagOverrides.wiremesh = undefined;\r\n }\r\n\r\n public get doDrapeBackgroundMap(): boolean { return this.tree.doDrapeBackgroundMap; }\r\n public override get wantDeduplicatedVertices() { return this._deduplicateVertices; }\r\n\r\n public get maxDepth(): number { return 32; } // Can be removed when element tile selector is working.\r\n public get minDepth(): number { return 0; }\r\n public get priority(): TileLoadPriority { return TileLoadPriority.Context; }\r\n public override getBatchIdMap(): BatchedTileIdMap | undefined { return this._batchedIdMap; }\r\n public get clipLowResolutionTiles(): boolean { return true; }\r\n public override get viewFlagOverrides(): ViewFlagOverrides { return this._viewFlagOverrides; }\r\n\r\n public async loadChildren(tile: RealityTile): Promise<Tile[] | undefined> {\r\n const props = await this.getChildrenProps(tile);\r\n if (undefined === props)\r\n return undefined;\r\n\r\n const children = [];\r\n for (const prop of props)\r\n children.push(tile.realityRoot.createTile(prop));\r\n\r\n return children;\r\n }\r\n\r\n public async getChildrenProps(parent: RealityTile): Promise<RealityTileParams[]> {\r\n const props: RealityModelTileProps[] = [];\r\n const thisId = parent.contentId;\r\n const prefix = thisId.length ? `${thisId}_` : \"\";\r\n const findResult = await this.findTileInJson(this.tree.tilesetJson, thisId, \"\", undefined);\r\n if (undefined !== findResult && Array.isArray(findResult.json.children)) {\r\n for (let i = 0; i < findResult.json.children.length; i++) {\r\n const childId = prefix + i;\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, childId, \"\", undefined);\r\n if (undefined !== foundChild)\r\n props.push(new RealityModelTileProps(foundChild.json, parent, foundChild.id, foundChild.transformToRoot, foundChild.json.refine === undefined ? undefined : foundChild.json.refine === \"ADD\"));\r\n }\r\n }\r\n return props;\r\n }\r\n\r\n public getRequestChannel(_tile: Tile) {\r\n // ###TODO: May want to extract the hostname from the URL.\r\n return IModelApp.tileAdmin.channels.getForHttp(\"itwinjs-reality-model\");\r\n }\r\n\r\n public async requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, tile.contentId, \"\");\r\n if (undefined === foundChild || undefined === foundChild.json.content || isCanceled())\r\n return undefined;\r\n\r\n return this.tree.rdSource.getTileContent(getUrl(foundChild.json.content));\r\n }\r\n\r\n private async findTileInJson(tilesetJson: any, id: string, parentId: string, transformToRoot?: Transform): Promise<FindChildResult | undefined> {\r\n if (id.length === 0)\r\n return new FindChildResult(id, tilesetJson, transformToRoot); // Root.\r\n\r\n const separatorIndex = id.indexOf(\"_\");\r\n const childId = (separatorIndex < 0) ? id : id.substring(0, separatorIndex);\r\n const childIndex = parseInt(childId, 10);\r\n\r\n if (isNaN(childIndex) || tilesetJson === undefined || tilesetJson.children === undefined || childIndex >= tilesetJson.children.length) {\r\n assert(false, \"scalable mesh child not found.\");\r\n return undefined;\r\n }\r\n\r\n const foundChild = tilesetJson.children[childIndex];\r\n const thisParentId = parentId.length ? (`${parentId}_${childId}`) : childId;\r\n if (foundChild.transform) {\r\n const thisTransform = RealityModelTileUtils.transformFromJson(foundChild.transform);\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(thisTransform) : thisTransform;\r\n }\r\n\r\n if (separatorIndex >= 0) {\r\n return this.findTileInJson(foundChild, id.substring(separatorIndex + 1), thisParentId, transformToRoot);\r\n }\r\n\r\n tilesetJson.children[childIndex] = await expandSubTree(foundChild, this.tree.rdSource);\r\n\r\n return new FindChildResult(thisParentId, tilesetJson.children[childIndex], transformToRoot);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type RealityModelSource = ViewState | DisplayStyleState;\r\n\r\n/** @internal */\r\nexport class RealityModelTileTree extends RealityTileTree {\r\n private readonly _isContentUnbounded: boolean;\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n\r\n this._isContentUnbounded = this.rootTile.contentRange.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n if (!this.isContentUnbounded && !this.rootTile.contentRange.isNull) {\r\n const worldContentRange = this.iModelTransform.multiplyRange(this.rootTile.contentRange);\r\n this.iModel.expandDisplayedExtents(worldContentRange);\r\n }\r\n }\r\n public override get isContentUnbounded() { return this._isContentUnbounded; }\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line no-redeclare\r\nexport namespace RealityModelTileTree {\r\n\r\n export interface ReferenceBaseProps {\r\n iModel: IModelConnection;\r\n source: RealityModelSource;\r\n rdSourceKey: RealityDataSourceKey;\r\n modelId?: Id64String;\r\n tilesetToDbTransform?: TransformProps;\r\n tilesetToEcefTransform?: TransformProps;\r\n name?: string;\r\n classifiers?: SpatialClassifiers;\r\n planarClipMask?: PlanarClipMaskSettings;\r\n }\r\n export interface ReferenceProps extends ReferenceBaseProps {\r\n url?: string;\r\n requestAuthorization?: string;\r\n }\r\n\r\n export abstract class Reference extends TileTreeReference {\r\n protected readonly _name: string;\r\n\r\n protected _transform?: Transform;\r\n protected _iModel: IModelConnection;\r\n private _modelId: Id64String;\r\n private _isGlobal?: boolean;\r\n protected readonly _source: RealityModelSource;\r\n protected _planarClipMask?: PlanarClipMaskState;\r\n protected _classifier?: SpatialClassifierTileTreeReference;\r\n protected _mapDrapeTree?: TileTreeReference;\r\n public get modelId() { return this._modelId; }\r\n public get classifiers(): SpatialClassifiers | undefined { return undefined !== this._classifier ? this._classifier.classifiers : undefined; }\r\n public get planarClipMask(): PlanarClipMaskState | undefined { return this._planarClipMask; }\r\n public set planarClipMask(planarClipMask: PlanarClipMaskState | undefined) { this._planarClipMask = planarClipMask; }\r\n public get planarClipMaskPriority(): number {\r\n if (this._planarClipMask?.settings.priority !== undefined)\r\n return this._planarClipMask.settings.priority;\r\n\r\n return this.isGlobal ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\r\n }\r\n\r\n protected get maskModelIds(): string | undefined {\r\n return this._planarClipMask?.settings.compressedModelIds;\r\n }\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceBaseProps) {\r\n super();\r\n this._name = undefined !== props.name ? props.name : \"\";\r\n this._modelId = props.modelId ? props.modelId : props.iModel.transientIds.next;\r\n this._source = props.source;\r\n let transform;\r\n if (undefined !== props.tilesetToDbTransform) {\r\n const tf = Transform.fromJSON(props.tilesetToDbTransform);\r\n if (!tf.isIdentity)\r\n transform = tf;\r\n\r\n this._transform = transform;\r\n }\r\n\r\n this._iModel = props.iModel;\r\n if (props.planarClipMask)\r\n this._planarClipMask = PlanarClipMaskState.create(props.planarClipMask);\r\n\r\n if (undefined !== props.classifiers)\r\n this._classifier = createClassifierTileTreeReference(props.classifiers, this, props.iModel, props.source);\r\n }\r\n\r\n public get planarClassifierTreeRef() { return this._classifier && this._classifier.activeClassifier && this._classifier.isPlanar ? this._classifier : undefined; }\r\n\r\n public override unionFitRange(union: Range3d): void {\r\n const contentRange = this.computeWorldContentRange();\r\n if (!contentRange.isNull && contentRange.diagonal().magnitude() < Constant.earthRadiusWGS84.equator)\r\n union.extendRange(contentRange);\r\n }\r\n public override get isGlobal() {\r\n if (undefined === this._isGlobal) {\r\n const range = this.computeWorldContentRange();\r\n if (!range.isNull)\r\n this._isGlobal = range.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n }\r\n return this._isGlobal === undefined ? false : this._isGlobal;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n // NB: The classifier must be added first, so we can find it when adding our own tiles.\r\n if (this._classifier && this._classifier.activeClassifier)\r\n this._classifier.addToScene(context);\r\n\r\n this.addPlanarClassifierOrMaskToScene(context);\r\n super.addToScene(context);\r\n }\r\n protected addPlanarClassifierOrMaskToScene(context: SceneContext) {\r\n // A planarClassifier is required if there is a classification tree OR planar masking is required.\r\n const classifierTree = this.planarClassifierTreeRef;\r\n const planarClipMask = this._planarClipMask ?? context.viewport.displayStyle.getPlanarClipMaskState(this.modelId);\r\n if (!classifierTree && !planarClipMask)\r\n return;\r\n\r\n if (classifierTree && !classifierTree.treeOwner.load())\r\n return;\r\n\r\n context.addPlanarClassifier(this.modelId, classifierTree, planarClipMask);\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._classifier)\r\n this._classifier.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._mapDrapeTree)\r\n this._mapDrapeTree.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n\r\n const tree = undefined !== this._classifier ? this._classifier.treeOwner.tileTree : undefined;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n }\r\n }\r\n\r\n export async function createRealityModelTileTree(rdSourceKey: RealityDataSourceKey, iModel: IModelConnection, modelId: Id64String, tilesetToDb: Transform | undefined, deduplicateVertices: boolean): Promise<TileTree | undefined> {\r\n const rdSource = await RealityDataSource.fromKey(rdSourceKey, iModel.iTwinId);\r\n // If we can get a valid connection from sourceKey, returns the tile tree\r\n if (rdSource) {\r\n // Serialize the reality data source key into a string to uniquely identify this tile tree\r\n const tileTreeId = rdSource.key.toString();\r\n if (tileTreeId === undefined)\r\n return undefined;\r\n const props = await getTileTreeProps(rdSource, tilesetToDb, iModel);\r\n const loader = new RealityModelTileLoader(props, new BatchedTileIdMap(iModel), deduplicateVertices);\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n const params = new RealityModelTileTreeParams(tileTreeId, iModel, modelId, loader, gcsConverterAvailable, props.tilesetToEcef);\r\n return new RealityModelTileTree(params);\r\n }\r\n return undefined;\r\n }\r\n\r\n async function getTileTreeProps(rdSource: RealityDataSource, tilesetToDbJson: any, iModel: IModelConnection): Promise<RealityModelTileTreeProps> {\r\n const json = await rdSource.getRootDocument(iModel.iTwinId);\r\n let rootTransform = iModel.ecefLocation ? iModel.getMapEcefToDb(0) : Transform.createIdentity();\r\n const geoConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter(\"WGS84\");\r\n if (geoConverter !== undefined) {\r\n let realityTileRange = RealityModelTileUtils.rangeFromBoundingVolume(json.root.boundingVolume)!.range;\r\n if (json.root.transform) {\r\n const realityToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n realityTileRange = realityToEcef.multiplyRange(realityTileRange);\r\n }\r\n\r\n if (iModel.ecefLocation) {\r\n // In initial publishing version the iModel ecef Transform was used to locate the reality model.\r\n // This would work well only for tilesets published from that iModel but for iModels the ecef transform is calculated\r\n // at the center of the project extents and the reality model location may differ greatly, and the curvature of the earth\r\n // could introduce significant errors.\r\n // The publishing was modified to calculate the ecef transform at the reality model range center and at the same time the \"iModelPublishVersion\"\r\n // member was added to the root object. In order to continue to locate reality models published from older versions at the\r\n // project extents center we look for Tileset version 0.0 and no root.iModelVersion.\r\n const ecefOrigin = realityTileRange.localXYZToWorld(.5, .5, .5)!;\r\n const dbOrigin = rootTransform.multiplyPoint3d(ecefOrigin);\r\n const realityOriginToProjectDistance = iModel.projectExtents.distanceToPoint(dbOrigin);\r\n const maxProjectDistance = 1E5; // Only use the project GCS projection if within 100KM of the project. Don't attempt to use GCS if global reality model or in another locale - Results will be unreliable.\r\n if (realityOriginToProjectDistance < maxProjectDistance && json.asset?.version !== \"0.0\" || undefined !== json.root?.iModelPublishVersion) {\r\n const cartographicOrigin = Cartographic.fromEcef(ecefOrigin);\r\n\r\n if (cartographicOrigin !== undefined) {\r\n const geoOrigin = Point3d.create(cartographicOrigin.longitudeDegrees, cartographicOrigin.latitudeDegrees, cartographicOrigin.height);\r\n const response = await geoConverter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);\r\n if (response.iModelCoords[0].s === GeoCoordStatus.Success) {\r\n const ecefToDb = await calculateEcefToDbTransformAtLocation(Point3d.fromJSON(response.iModelCoords[0].p), iModel);\r\n if (ecefToDb)\r\n rootTransform = ecefToDb;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let tilesetToEcef = Transform.createIdentity();\r\n\r\n if (json.root.transform) {\r\n tilesetToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n rootTransform = rootTransform.multiplyTransformTransform(tilesetToEcef);\r\n }\r\n\r\n if (undefined !== tilesetToDbJson)\r\n rootTransform = Transform.fromJSON(tilesetToDbJson).multiplyTransformTransform(rootTransform);\r\n\r\n const root = await expandSubTree(json.root, rdSource);\r\n return new RealityModelTileTreeProps(json, root, rdSource, rootTransform, tilesetToEcef);\r\n }\r\n}\r\n\r\n/** Supplies a reality data [[TileTree]] from a URL. May be associated with a persistent [[GeometricModelState]], or attached at run-time via a [[ContextRealityModelState]].\r\n * @internal\r\n */\r\nclass RealityTreeReference extends RealityModelTileTree.Reference {\r\n protected _rdSourceKey: RealityDataSourceKey;\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceProps) {\r\n super(props);\r\n\r\n // Maybe we should throw if both props.rdSourceKey && props.url are undefined\r\n this._rdSourceKey = props.rdSourceKey ? props.rdSourceKey : props.url ? RealityDataSource.createKeyFromUrl(props.url, RealityDataProvider.ContextShare) :\r\n RealityDataSource.createKeyFromUrl(\"\", RealityDataProvider.ContextShare);\r\n }\r\n public get treeOwner(): TileTreeOwner {\r\n const treeId: RealityTreeId = {\r\n rdSourceKey: this._rdSourceKey,\r\n transform: this._transform,\r\n modelId: this.modelId,\r\n maskModelIds: this.maskModelIds,\r\n deduplicateVertices: this._wantWiremesh,\r\n };\r\n\r\n return realityTreeSupplier.getOwner(treeId, this._iModel);\r\n }\r\n\r\n private get _wantWiremesh(): boolean {\r\n return this._source.viewFlags.wiremesh;\r\n }\r\n\r\n public override get castsShadows() {\r\n return true;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n return !this._mapDrapeTree || this._mapDrapeTree.isLoadingComplete;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n // For global reality models (OSM Building layer only) - offset the reality model by the BIM elevation bias. This would not be necessary\r\n // if iModels had their elevation set correctly but unfortunately many GCS erroneously report Sea (Geoid) elevation rather than\r\n // Geodetic.\r\n const tree = this.treeOwner.load();\r\n if (undefined === tree)\r\n return undefined;\r\n\r\n const drawArgs = super.createDrawArgs(context);\r\n if (drawArgs !== undefined && this._iModel.isGeoLocated && tree.isContentUnbounded) {\r\n const elevationBias = context.viewport.view.displayStyle.backgroundMapElevationBias;\r\n\r\n if (undefined !== elevationBias)\r\n drawArgs.location.origin.z -= elevationBias;\r\n }\r\n\r\n return drawArgs;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n const tree = this.treeOwner.tileTree as RealityTileTree;\r\n if (undefined !== tree && context.viewport.iModel.isGeoLocated && (tree.loader as RealityModelTileLoader).doDrapeBackgroundMap) {\r\n // NB: We save this off strictly so that discloseTileTrees() can find it...better option?\r\n this._mapDrapeTree = context.viewport.backgroundDrapeMap;\r\n context.addBackgroundDrapedModel(this, undefined);\r\n }\r\n\r\n super.addToScene(context);\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel)\r\n return undefined;\r\n\r\n const map = (tree as RealityTileTree).loader.getBatchIdMap();\r\n const batch = undefined !== map ? map.getBatchProperties(hit.sourceId) : undefined;\r\n if (undefined === batch && tree.modelId !== hit.sourceId)\r\n return undefined;\r\n\r\n const strings = [];\r\n\r\n const loader = (tree as RealityModelTileTree).loader;\r\n const type = (loader as RealityModelTileLoader).tree.rdSource.realityDataType;\r\n\r\n // If a type is specified, display it\r\n if (type !== undefined) {\r\n // Case insensitive\r\n switch (type.toUpperCase()) {\r\n case DefaultSupportedTypes.RealityMesh3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.RealityMesh3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Terrain3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Terrain3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Cesium3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Cesium3DTiles\"));\r\n break;\r\n }\r\n }\r\n\r\n if (this._name) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:TooltipInfo.Name\")} ${this._name}`);\r\n } else {\r\n const cesiumAsset = this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset ? CesiumIonAssetProvider.parseCesiumUrl(this._rdSourceKey.id) : undefined;\r\n strings.push(cesiumAsset ? `Cesium Asset: ${cesiumAsset.id}` : this._rdSourceKey.id);\r\n }\r\n\r\n if (batch !== undefined)\r\n for (const key of Object.keys(batch))\r\n if (-1 === key.indexOf(\"#\")) // Avoid internal cesium\r\n strings.push(`${key}: ${batch[key]}`);\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override addLogoCards(cards: HTMLTableElement, _vp: ScreenViewport): void {\r\n if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset) {\r\n cards.appendChild(IModelApp.makeLogoCard({ heading: \"OpenStreetMap\", notice: `&copy;<a href=\\\"https://www.openstreetmap.org/copyright\\\">OpenStreetMap</a> ${IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap:OpenStreetMapContributors\")}` }));\r\n }\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"RealityModelTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityModelTileTree.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 Utils\r\n */\r\n\r\nimport {\r\n assert, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStringsOrUndefined, CompressedId64Set, Id64String,\r\n} from \"@itwin/core-bentley\";\r\nimport {\r\n Cartographic, DefaultSupportedTypes, GeoCoordStatus, PlanarClipMaskPriority, PlanarClipMaskSettings,\r\n RealityDataProvider,\r\n RealityDataSourceKey,\r\n SpatialClassifiers, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport { Angle, Constant, Ellipsoid, Matrix3d, Point3d, Range3d, Ray3d, Transform, TransformProps, Vector3d, XYZ } from \"@itwin/core-geometry\";\r\nimport { calculateEcefToDbTransformAtLocation } from \"../BackgroundMapGeometry\";\r\nimport { DisplayStyleState } from \"../DisplayStyleState\";\r\nimport { HitDetail } from \"../HitDetail\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { PlanarClipMaskState } from \"../PlanarClipMaskState\";\r\nimport { RealityDataSource } from \"../RealityDataSource\";\r\nimport { RenderMemory } from \"../render/RenderMemory\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ViewState } from \"../ViewState\";\r\nimport {\r\n BatchedTileIdMap, CesiumIonAssetProvider, createClassifierTileTreeReference, createDefaultViewFlagOverrides, DisclosedTileTreeSet, GeometryTileTreeReference,\r\n getGcsConverterAvailable, RealityTile, RealityTileLoader, RealityTileParams, RealityTileTree, RealityTileTreeParams, SpatialClassifierTileTreeReference, Tile,\r\n TileDrawArgs, TileLoadPriority, TileRequest, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier,\r\n} from \"./internal\";\r\n\r\nfunction getUrl(content: any) {\r\n return content ? (content.url ? content.url : content.uri) : undefined;\r\n}\r\n\r\ninterface RealityTreeId {\r\n rdSourceKey: RealityDataSourceKey;\r\n transform?: Transform;\r\n modelId: Id64String;\r\n maskModelIds?: string;\r\n deduplicateVertices: boolean;\r\n produceGeometry?: boolean;\r\n toEcefTransform?: Transform;\r\n}\r\n\r\nfunction compareOrigins(lhs: XYZ, rhs: XYZ): number {\r\n let cmp = compareNumbers(lhs.x, rhs.x);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.y, rhs.y);\r\n if (0 === cmp)\r\n cmp = compareNumbers(lhs.z, rhs.z);\r\n }\r\n\r\n return cmp;\r\n}\r\n\r\nfunction compareMatrices(lhs: Matrix3d, rhs: Matrix3d): number {\r\n for (let i = 0; i < 9; i++) {\r\n const cmp = compareNumbers(lhs.coffs[i], rhs.coffs[i]);\r\n if (0 !== cmp)\r\n return cmp;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nfunction compareTransforms(lhs?: Transform, rhs?: Transform) {\r\n if (undefined === lhs)\r\n return undefined !== rhs ? -1 : 0;\r\n\r\n else if (undefined === rhs)\r\n return 1;\r\n\r\n const cmp = compareOrigins(lhs.origin, rhs.origin);\r\n return 0 !== cmp ? cmp : compareMatrices(lhs.matrix, rhs.matrix);\r\n}\r\n\r\nclass RealityTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public getOwner(treeId: RealityTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(treeId, this);\r\n }\r\n\r\n public async createTileTree(treeId: RealityTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n if (treeId.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(treeId.maskModelIds));\r\n\r\n const opts = { deduplicateVertices: treeId.deduplicateVertices, produceGeometry: treeId.produceGeometry };\r\n return RealityModelTileTree.createRealityModelTileTree(treeId.rdSourceKey, iModel, treeId.modelId, treeId.transform, opts);\r\n }\r\n\r\n public compareTileTreeIds(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n let cmp = compareStringsOrUndefined(lhs.rdSourceKey.id, rhs.rdSourceKey.id);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.rdSourceKey.format, rhs.rdSourceKey.format);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.rdSourceKey.iTwinId, rhs.rdSourceKey.iTwinId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.modelId, rhs.modelId);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.deduplicateVertices, rhs.deduplicateVertices);\r\n }\r\n }\r\n }\r\n\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareTransforms(lhs.transform, rhs.transform);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n return compareTransforms(lhs.toEcefTransform, rhs.toEcefTransform);\r\n }\r\n}\r\n\r\nconst realityTreeSupplier = new RealityTreeSupplier();\r\n\r\n/** @internal */\r\nexport function createRealityTileTreeReference(props: RealityModelTileTree.ReferenceProps): RealityModelTileTree.Reference {\r\n return new RealityTreeReference(props);\r\n}\r\n\r\nconst zeroPoint = Point3d.createZero();\r\nconst earthEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\nconst scratchRay = Ray3d.createXAxis();\r\n\r\n/** @internal */\r\nexport class RealityTileRegion {\r\n constructor(values: { minLongitude: number, minLatitude: number, minHeight: number, maxLongitude: number, maxLatitude: number, maxHeight: number }) {\r\n this.minLongitude = values.minLongitude;\r\n this.minLatitude = values.minLatitude;\r\n this.minHeight = values.minHeight;\r\n this.maxLongitude = values.maxLongitude;\r\n this.maxLatitude = values.maxLatitude;\r\n this.maxHeight = values.maxHeight;\r\n }\r\n public minLongitude: number;\r\n public minLatitude: number;\r\n public minHeight: number;\r\n public maxLongitude: number;\r\n public maxLatitude: number;\r\n public maxHeight: number;\r\n\r\n public static create(region: number[]): RealityTileRegion {\r\n const minHeight = region[4];\r\n const maxHeight = region[5];\r\n const minLongitude = region[0];\r\n const maxLongitude = region[2];\r\n const minLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[1]);\r\n const maxLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[3]);\r\n return new RealityTileRegion({ minLongitude, minLatitude, minHeight, maxLongitude, maxLatitude, maxHeight });\r\n }\r\n\r\n public static isGlobal(boundingVolume: any) {\r\n return Array.isArray(boundingVolume?.region) && (boundingVolume.region[2] - boundingVolume.region[0]) > Angle.piRadians && (boundingVolume.region[3] - boundingVolume.region[1]) > Angle.piOver2Radians;\r\n }\r\n public getRange(): { range: Range3d, corners?: Point3d[] } {\r\n const maxAngle = Math.max(Math.abs(this.maxLatitude - this.minLatitude), Math.abs(this.maxLongitude - this.minLongitude));\r\n let corners;\r\n let range: Range3d;\r\n if (maxAngle < Math.PI / 8) {\r\n corners = new Array<Point3d>(8);\r\n const chordTolerance = (1 - Math.cos(maxAngle / 2)) * Constant.earthRadiusWGS84.polar;\r\n const addEllipsoidCorner = ((long: number, lat: number, index: number) => {\r\n const ray = earthEllipsoid.radiansToUnitNormalRay(long, lat, scratchRay)!;\r\n corners[index] = ray.fractionToPoint(this.minHeight - chordTolerance);\r\n corners[index + 4] = ray.fractionToPoint(this.maxHeight + chordTolerance);\r\n });\r\n addEllipsoidCorner(this.minLongitude, this.minLatitude, 0);\r\n addEllipsoidCorner(this.minLongitude, this.maxLatitude, 1);\r\n addEllipsoidCorner(this.maxLongitude, this.minLatitude, 2);\r\n addEllipsoidCorner(this.maxLongitude, this.maxLatitude, 3);\r\n range = Range3d.createArray(corners);\r\n } else {\r\n const minEq = Constant.earthRadiusWGS84.equator + this.minHeight, maxEq = Constant.earthRadiusWGS84.equator + this.maxHeight;\r\n const minEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, minEq, minEq, Constant.earthRadiusWGS84.polar + this.minHeight);\r\n const maxEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, maxEq, maxEq, Constant.earthRadiusWGS84.polar + this.maxHeight);\r\n range = minEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude);\r\n range.extendRange(maxEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude));\r\n }\r\n return { range, corners };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityModelTileUtils {\r\n public static rangeFromBoundingVolume(boundingVolume: any): { range: Range3d, corners?: Point3d[], region?: RealityTileRegion } | undefined {\r\n if (undefined === boundingVolume)\r\n return undefined;\r\n\r\n let corners: Point3d[] | undefined;\r\n let range: Range3d | undefined;\r\n if (undefined !== boundingVolume.box) {\r\n const box: number[] = boundingVolume.box;\r\n const center = Point3d.create(box[0], box[1], box[2]);\r\n const ux = Vector3d.create(box[3], box[4], box[5]);\r\n const uy = Vector3d.create(box[6], box[7], box[8]);\r\n const uz = Vector3d.create(box[9], box[10], box[11]);\r\n corners = new Array<Point3d>();\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < 2; k++) {\r\n for (let l = 0; l < 2; l++) {\r\n corners.push(center.plus3Scaled(ux, (j ? -1.0 : 1.0), uy, (k ? -1.0 : 1.0), uz, (l ? -1.0 : 1.0)));\r\n }\r\n }\r\n }\r\n range = Range3d.createArray(corners);\r\n } else if (Array.isArray(boundingVolume.sphere)) {\r\n const sphere: number[] = boundingVolume.sphere;\r\n const center = Point3d.create(sphere[0], sphere[1], sphere[2]);\r\n const radius = sphere[3];\r\n range = Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n } else if (Array.isArray(boundingVolume.region)) {\r\n const region = RealityTileRegion.create(boundingVolume.region);\r\n const regionRange = region.getRange();\r\n return { range: regionRange.range, corners: regionRange.corners, region };\r\n }\r\n return range ? { range, corners } : undefined;\r\n\r\n }\r\n public static maximumSizeFromGeometricTolerance(range: Range3d, geometricError: number): number {\r\n const minToleranceRatio = true === IModelApp.renderSystem.isMobile ? IModelApp.tileAdmin.mobileRealityTileMinToleranceRatio : 1.0; // Nominally the error on screen size of a tile. Increasing generally increases performance (fewer draw calls) at expense of higher load times.\r\n\r\n // NB: We increase the above minToleranceRatio on mobile devices in order to help avoid pruning too often based on the memory threshold for\r\n // pruning currently used by reality tile trees on mobile.\r\n\r\n return minToleranceRatio * range.diagonal().magnitude() / geometricError;\r\n }\r\n public static transformFromJson(jTrans: number[] | undefined): Transform {\r\n return (jTrans === undefined) ? Transform.createIdentity() : Transform.createOriginAndMatrix(Point3d.create(jTrans[12], jTrans[13], jTrans[14]), Matrix3d.createRowValues(jTrans[0], jTrans[4], jTrans[8], jTrans[1], jTrans[5], jTrans[9], jTrans[2], jTrans[6], jTrans[10]));\r\n }\r\n}\r\n\r\n/** @internal */\r\nenum SMTextureType {\r\n None = 0, // no textures\r\n Embedded = 1, // textures are available and stored in the nodes\r\n Streaming = 2, // textures need to be downloaded, Bing Maps, etc…\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileTreeProps {\r\n public location: Transform;\r\n public tilesetJson: any;\r\n public doDrapeBackgroundMap: boolean = false;\r\n public rdSource: RealityDataSource;\r\n public yAxisUp = false;\r\n public root: any;\r\n\r\n constructor(json: any, root: any, rdSource: RealityDataSource, tilesetToDbTransform: Transform, public readonly tilesetToEcef?: Transform) {\r\n this.tilesetJson = root;\r\n this.rdSource = rdSource;\r\n this.location = tilesetToDbTransform;\r\n this.doDrapeBackgroundMap = (json.root && json.root.SMMasterHeader && SMTextureType.Streaming === json.root.SMMasterHeader.IsTextured);\r\n if (json.asset.gltfUpAxis === undefined || json.asset.gltfUpAxis === \"y\" || json.asset.gltfUpAxis === \"Y\")\r\n this.yAxisUp = true;\r\n }\r\n}\r\n\r\nclass RealityModelTileTreeParams implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public iModel: IModelConnection;\r\n public is3d = true;\r\n public loader: RealityModelTileLoader;\r\n public rootTile: RealityTileParams;\r\n\r\n public get location() { return this.loader.tree.location; }\r\n public get yAxisUp() { return this.loader.tree.yAxisUp; }\r\n public get priority() { return this.loader.priority; }\r\n\r\n public constructor(tileTreeId: string, iModel: IModelConnection, modelId: Id64String, loader: RealityModelTileLoader, public readonly gcsConverterAvailable: boolean, public readonly rootToEcef: Transform | undefined) {\r\n this.loader = loader;\r\n this.id = tileTreeId;\r\n this.modelId = modelId;\r\n this.iModel = iModel;\r\n this.rootTile = new RealityModelTileProps(loader.tree.tilesetJson, undefined, \"\", undefined, undefined === loader.tree.tilesetJson.refine ? undefined : loader.tree.tilesetJson.refine === \"ADD\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileProps implements RealityTileParams {\r\n public readonly contentId: string;\r\n public readonly range: Range3d;\r\n public readonly contentRange?: Range3d;\r\n public readonly maximumSize: number;\r\n public readonly isLeaf: boolean;\r\n public readonly transformToRoot?: Transform;\r\n public readonly additiveRefinement?: boolean;\r\n public readonly parent?: RealityTile;\r\n public readonly noContentButTerminateOnSelection?: boolean;\r\n public readonly rangeCorners?: Point3d[];\r\n public readonly region?: RealityTileRegion;\r\n\r\n constructor(json: any, parent: RealityTile | undefined, thisId: string, transformToRoot?: Transform, additiveRefinement?: boolean) {\r\n this.contentId = thisId;\r\n this.parent = parent;\r\n const boundingVolume = RealityModelTileUtils.rangeFromBoundingVolume(json.boundingVolume);\r\n if (boundingVolume) {\r\n this.range = boundingVolume.range;\r\n this.rangeCorners = boundingVolume.corners;\r\n this.region = boundingVolume?.region;\r\n } else {\r\n this.range = Range3d.createNull();\r\n assert(false, \"Unbounded tile\");\r\n }\r\n this.isLeaf = !Array.isArray(json.children) || 0 === json.children.length;\r\n this.transformToRoot = transformToRoot;\r\n this.additiveRefinement = additiveRefinement;\r\n const hasContents = undefined !== getUrl(json.content);\r\n if (hasContents)\r\n this.contentRange = RealityModelTileUtils.rangeFromBoundingVolume(json.content.boundingVolume)?.range;\r\n else {\r\n // A node without content should probably be selectable even if not additive refinement - But restrict it to that case here\r\n // to avoid potential problems with existing reality models, but still avoid overselection in the OSM world building set.\r\n if (this.additiveRefinement || parent?.additiveRefinement)\r\n this.noContentButTerminateOnSelection = true;\r\n }\r\n\r\n this.maximumSize = (this.noContentButTerminateOnSelection || hasContents) ? RealityModelTileUtils.maximumSizeFromGeometricTolerance(Range3d.fromJSON(this.range), json.geometricError) : 0;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass FindChildResult {\r\n constructor(public id: string, public json: any, public transformToRoot?: Transform) { }\r\n}\r\n\r\n/** @internal */\r\nfunction assembleUrl(prefix: string, url: string): string {\r\n\r\n if (url.startsWith(\"./\")) {\r\n url = url.substring(2);\r\n } else {\r\n const prefixParts = prefix.split(\"/\");\r\n prefixParts.pop();\r\n while (url.startsWith(\"../\")) {\r\n prefixParts.pop();\r\n url = url.substring(3);\r\n }\r\n prefixParts.push(\"\");\r\n prefix = prefixParts.join(\"/\");\r\n }\r\n return prefix + url;\r\n}\r\n\r\n/** @internal */\r\nfunction addUrlPrefix(subTree: any, prefix: string) {\r\n if (undefined === subTree)\r\n return;\r\n\r\n if (undefined !== subTree.content) {\r\n if (undefined !== subTree.content.url)\r\n subTree.content.url = assembleUrl(prefix, subTree.content.url);\r\n else if (undefined !== subTree.content.uri)\r\n subTree.content.uri = assembleUrl(prefix, subTree.content.uri);\r\n }\r\n\r\n if (undefined !== subTree.children)\r\n for (const child of subTree.children)\r\n addUrlPrefix(child, prefix);\r\n}\r\n\r\n/** @internal */\r\nasync function expandSubTree(root: any, rdsource: RealityDataSource): Promise<any> {\r\n const childUrl = getUrl(root.content);\r\n if (undefined !== childUrl && childUrl.endsWith(\"json\")) { // A child may contain a subTree...\r\n const subTree = await rdsource.getTileJson(childUrl);\r\n const prefixIndex = childUrl.lastIndexOf(\"/\");\r\n if (prefixIndex > 0)\r\n addUrlPrefix(subTree.root, childUrl.substring(0, prefixIndex + 1));\r\n\r\n return subTree.root;\r\n } else {\r\n return root;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileLoader extends RealityTileLoader {\r\n public readonly tree: RealityModelTileTreeProps;\r\n private readonly _batchedIdMap?: BatchedTileIdMap;\r\n private _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _deduplicateVertices: boolean;\r\n\r\n public constructor(tree: RealityModelTileTreeProps, batchedIdMap?: BatchedTileIdMap, opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean }) {\r\n super(opts?.produceGeometry ?? false);\r\n this.tree = tree;\r\n this._batchedIdMap = batchedIdMap;\r\n this._deduplicateVertices = opts?.deduplicateVertices ?? false;\r\n\r\n let clipVolume;\r\n if (RealityTileRegion.isGlobal(tree.tilesetJson.boundingVolume))\r\n clipVolume = false;\r\n this._viewFlagOverrides = createDefaultViewFlagOverrides({ lighting: true, clipVolume });\r\n\r\n // Display edges if they are present (Cesium outline extension) and enabled for view.\r\n this._viewFlagOverrides.visibleEdges = undefined;\r\n this._viewFlagOverrides.hiddenEdges = undefined;\r\n\r\n // Allow wiremesh display.\r\n this._viewFlagOverrides.wiremesh = undefined;\r\n }\r\n\r\n public get doDrapeBackgroundMap(): boolean { return this.tree.doDrapeBackgroundMap; }\r\n public override get wantDeduplicatedVertices() { return this._deduplicateVertices; }\r\n\r\n public get maxDepth(): number { return 32; } // Can be removed when element tile selector is working.\r\n public get minDepth(): number { return 0; }\r\n public get priority(): TileLoadPriority { return TileLoadPriority.Context; }\r\n public override getBatchIdMap(): BatchedTileIdMap | undefined { return this._batchedIdMap; }\r\n public get clipLowResolutionTiles(): boolean { return true; }\r\n public override get viewFlagOverrides(): ViewFlagOverrides { return this._viewFlagOverrides; }\r\n\r\n public async loadChildren(tile: RealityTile): Promise<Tile[] | undefined> {\r\n const props = await this.getChildrenProps(tile);\r\n if (undefined === props)\r\n return undefined;\r\n\r\n const children = [];\r\n for (const prop of props)\r\n children.push(tile.realityRoot.createTile(prop));\r\n\r\n return children;\r\n }\r\n\r\n public async getChildrenProps(parent: RealityTile): Promise<RealityTileParams[]> {\r\n const props: RealityModelTileProps[] = [];\r\n const thisId = parent.contentId;\r\n const prefix = thisId.length ? `${thisId}_` : \"\";\r\n const findResult = await this.findTileInJson(this.tree.tilesetJson, thisId, \"\", undefined);\r\n if (undefined !== findResult && Array.isArray(findResult.json.children)) {\r\n for (let i = 0; i < findResult.json.children.length; i++) {\r\n const childId = prefix + i;\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, childId, \"\", undefined);\r\n if (undefined !== foundChild)\r\n props.push(new RealityModelTileProps(foundChild.json, parent, foundChild.id, foundChild.transformToRoot, foundChild.json.refine === undefined ? undefined : foundChild.json.refine === \"ADD\"));\r\n }\r\n }\r\n return props;\r\n }\r\n\r\n public getRequestChannel(_tile: Tile) {\r\n // ###TODO: May want to extract the hostname from the URL.\r\n return IModelApp.tileAdmin.channels.getForHttp(\"itwinjs-reality-model\");\r\n }\r\n\r\n public async requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, tile.contentId, \"\");\r\n if (undefined === foundChild || undefined === foundChild.json.content || isCanceled())\r\n return undefined;\r\n\r\n return this.tree.rdSource.getTileContent(getUrl(foundChild.json.content));\r\n }\r\n\r\n private async findTileInJson(tilesetJson: any, id: string, parentId: string, transformToRoot?: Transform): Promise<FindChildResult | undefined> {\r\n if (id.length === 0)\r\n return new FindChildResult(id, tilesetJson, transformToRoot); // Root.\r\n\r\n const separatorIndex = id.indexOf(\"_\");\r\n const childId = (separatorIndex < 0) ? id : id.substring(0, separatorIndex);\r\n const childIndex = parseInt(childId, 10);\r\n\r\n if (isNaN(childIndex) || tilesetJson === undefined || tilesetJson.children === undefined || childIndex >= tilesetJson.children.length) {\r\n assert(false, \"scalable mesh child not found.\");\r\n return undefined;\r\n }\r\n\r\n const foundChild = tilesetJson.children[childIndex];\r\n const thisParentId = parentId.length ? (`${parentId}_${childId}`) : childId;\r\n if (foundChild.transform) {\r\n const thisTransform = RealityModelTileUtils.transformFromJson(foundChild.transform);\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(thisTransform) : thisTransform;\r\n }\r\n\r\n if (separatorIndex >= 0) {\r\n return this.findTileInJson(foundChild, id.substring(separatorIndex + 1), thisParentId, transformToRoot);\r\n }\r\n\r\n tilesetJson.children[childIndex] = await expandSubTree(foundChild, this.tree.rdSource);\r\n\r\n return new FindChildResult(thisParentId, tilesetJson.children[childIndex], transformToRoot);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type RealityModelSource = ViewState | DisplayStyleState;\r\n\r\n/** @internal */\r\nexport class RealityModelTileTree extends RealityTileTree {\r\n private readonly _isContentUnbounded: boolean;\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n\r\n this._isContentUnbounded = this.rootTile.contentRange.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n if (!this.isContentUnbounded && !this.rootTile.contentRange.isNull) {\r\n const worldContentRange = this.iModelTransform.multiplyRange(this.rootTile.contentRange);\r\n this.iModel.expandDisplayedExtents(worldContentRange);\r\n }\r\n }\r\n public override get isContentUnbounded() { return this._isContentUnbounded; }\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line no-redeclare\r\nexport namespace RealityModelTileTree {\r\n\r\n export interface ReferenceBaseProps {\r\n iModel: IModelConnection;\r\n source: RealityModelSource;\r\n rdSourceKey: RealityDataSourceKey;\r\n modelId?: Id64String;\r\n tilesetToDbTransform?: TransformProps;\r\n tilesetToEcefTransform?: TransformProps;\r\n name?: string;\r\n classifiers?: SpatialClassifiers;\r\n planarClipMask?: PlanarClipMaskSettings;\r\n }\r\n export interface ReferenceProps extends ReferenceBaseProps {\r\n url?: string;\r\n requestAuthorization?: string;\r\n produceGeometry?: boolean;\r\n }\r\n\r\n export abstract class Reference extends TileTreeReference {\r\n protected readonly _name: string;\r\n\r\n protected _transform?: Transform;\r\n protected _iModel: IModelConnection;\r\n private _modelId: Id64String;\r\n private _isGlobal?: boolean;\r\n protected readonly _source: RealityModelSource;\r\n protected _planarClipMask?: PlanarClipMaskState;\r\n protected _classifier?: SpatialClassifierTileTreeReference;\r\n protected _mapDrapeTree?: TileTreeReference;\r\n public get modelId() { return this._modelId; }\r\n // public get classifiers(): SpatialClassifiers | undefined { return undefined !== this._classifier ? this._classifier.classifiers : undefined; }\r\n public get planarClipMask(): PlanarClipMaskState | undefined { return this._planarClipMask; }\r\n public set planarClipMask(planarClipMask: PlanarClipMaskState | undefined) { this._planarClipMask = planarClipMask; }\r\n public get planarClipMaskPriority(): number {\r\n if (this._planarClipMask?.settings.priority !== undefined)\r\n return this._planarClipMask.settings.priority;\r\n\r\n return this.isGlobal ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\r\n }\r\n\r\n protected get maskModelIds(): string | undefined {\r\n return this._planarClipMask?.settings.compressedModelIds;\r\n }\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceBaseProps) {\r\n super();\r\n this._name = undefined !== props.name ? props.name : \"\";\r\n this._modelId = props.modelId ? props.modelId : props.iModel.transientIds.next;\r\n let transform;\r\n if (undefined !== props.tilesetToDbTransform) {\r\n const tf = Transform.fromJSON(props.tilesetToDbTransform);\r\n if (!tf.isIdentity)\r\n transform = tf;\r\n\r\n this._transform = transform;\r\n }\r\n\r\n this._iModel = props.iModel;\r\n this._source = props.source;\r\n if (props.planarClipMask)\r\n this._planarClipMask = PlanarClipMaskState.create(props.planarClipMask);\r\n\r\n if (undefined !== props.classifiers)\r\n this._classifier = createClassifierTileTreeReference(props.classifiers, this, props.iModel, props.source);\r\n }\r\n\r\n public get planarClassifierTreeRef() { return this._classifier && this._classifier.activeClassifier && this._classifier.isPlanar ? this._classifier : undefined; }\r\n\r\n public override unionFitRange(union: Range3d): void {\r\n const contentRange = this.computeWorldContentRange();\r\n if (!contentRange.isNull && contentRange.diagonal().magnitude() < Constant.earthRadiusWGS84.equator)\r\n union.extendRange(contentRange);\r\n }\r\n public override get isGlobal() {\r\n if (undefined === this._isGlobal) {\r\n const range = this.computeWorldContentRange();\r\n if (!range.isNull)\r\n this._isGlobal = range.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n }\r\n return this._isGlobal === undefined ? false : this._isGlobal;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n // NB: The classifier must be added first, so we can find it when adding our own tiles.\r\n if (this._classifier && this._classifier.activeClassifier)\r\n this._classifier.addToScene(context);\r\n\r\n this.addPlanarClassifierOrMaskToScene(context);\r\n super.addToScene(context);\r\n }\r\n protected addPlanarClassifierOrMaskToScene(context: SceneContext) {\r\n // A planarClassifier is required if there is a classification tree OR planar masking is required.\r\n const classifierTree = this.planarClassifierTreeRef;\r\n const planarClipMask = this._planarClipMask ?? context.viewport.displayStyle.getPlanarClipMaskState(this.modelId);\r\n if (!classifierTree && !planarClipMask)\r\n return;\r\n\r\n if (classifierTree && !classifierTree.treeOwner.load())\r\n return;\r\n\r\n context.addPlanarClassifier(this.modelId, classifierTree, planarClipMask);\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._classifier)\r\n this._classifier.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._mapDrapeTree)\r\n this._mapDrapeTree.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n\r\n const tree = undefined !== this._classifier ? this._classifier.treeOwner.tileTree : undefined;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n }\r\n }\r\n\r\n export async function createRealityModelTileTree(rdSourceKey: RealityDataSourceKey, iModel: IModelConnection, modelId: Id64String, tilesetToDb: Transform | undefined, opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean }): Promise<TileTree | undefined> {\r\n const rdSource = await RealityDataSource.fromKey(rdSourceKey, iModel.iTwinId);\r\n // If we can get a valid connection from sourceKey, returns the tile tree\r\n if (rdSource) {\r\n // Serialize the reality data source key into a string to uniquely identify this tile tree\r\n const tileTreeId = rdSource.key.toString();\r\n if (tileTreeId === undefined)\r\n return undefined;\r\n const props = await getTileTreeProps(rdSource, tilesetToDb, iModel);\r\n const loader = new RealityModelTileLoader(props, new BatchedTileIdMap(iModel), opts);\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n const params = new RealityModelTileTreeParams(tileTreeId, iModel, modelId, loader, gcsConverterAvailable, props.tilesetToEcef);\r\n return new RealityModelTileTree(params);\r\n }\r\n return undefined;\r\n }\r\n\r\n async function getTileTreeProps(rdSource: RealityDataSource, tilesetToDbJson: any, iModel: IModelConnection): Promise<RealityModelTileTreeProps> {\r\n const json = await rdSource.getRootDocument(iModel.iTwinId);\r\n let rootTransform = iModel.ecefLocation ? iModel.getMapEcefToDb(0) : Transform.createIdentity();\r\n const geoConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter(\"WGS84\");\r\n if (geoConverter !== undefined) {\r\n let realityTileRange = RealityModelTileUtils.rangeFromBoundingVolume(json.root.boundingVolume)!.range;\r\n if (json.root.transform) {\r\n const realityToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n realityTileRange = realityToEcef.multiplyRange(realityTileRange);\r\n }\r\n\r\n if (iModel.ecefLocation) {\r\n // In initial publishing version the iModel ecef Transform was used to locate the reality model.\r\n // This would work well only for tilesets published from that iModel but for iModels the ecef transform is calculated\r\n // at the center of the project extents and the reality model location may differ greatly, and the curvature of the earth\r\n // could introduce significant errors.\r\n // The publishing was modified to calculate the ecef transform at the reality model range center and at the same time the \"iModelPublishVersion\"\r\n // member was added to the root object. In order to continue to locate reality models published from older versions at the\r\n // project extents center we look for Tileset version 0.0 and no root.iModelVersion.\r\n const ecefOrigin = realityTileRange.localXYZToWorld(.5, .5, .5)!;\r\n const dbOrigin = rootTransform.multiplyPoint3d(ecefOrigin);\r\n const realityOriginToProjectDistance = iModel.projectExtents.distanceToPoint(dbOrigin);\r\n const maxProjectDistance = 1E5; // Only use the project GCS projection if within 100KM of the project. Don't attempt to use GCS if global reality model or in another locale - Results will be unreliable.\r\n if (realityOriginToProjectDistance < maxProjectDistance && json.asset?.version !== \"0.0\" || undefined !== json.root?.iModelPublishVersion) {\r\n const cartographicOrigin = Cartographic.fromEcef(ecefOrigin);\r\n\r\n if (cartographicOrigin !== undefined) {\r\n const geoOrigin = Point3d.create(cartographicOrigin.longitudeDegrees, cartographicOrigin.latitudeDegrees, cartographicOrigin.height);\r\n const response = await geoConverter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);\r\n if (response.iModelCoords[0].s === GeoCoordStatus.Success) {\r\n const ecefToDb = await calculateEcefToDbTransformAtLocation(Point3d.fromJSON(response.iModelCoords[0].p), iModel);\r\n if (ecefToDb)\r\n rootTransform = ecefToDb;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let tilesetToEcef = Transform.createIdentity();\r\n\r\n if (json.root.transform) {\r\n tilesetToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n rootTransform = rootTransform.multiplyTransformTransform(tilesetToEcef);\r\n }\r\n\r\n if (undefined !== tilesetToDbJson)\r\n rootTransform = Transform.fromJSON(tilesetToDbJson).multiplyTransformTransform(rootTransform);\r\n\r\n const root = await expandSubTree(json.root, rdSource);\r\n return new RealityModelTileTreeProps(json, root, rdSource, rootTransform, tilesetToEcef);\r\n }\r\n}\r\n\r\n/** Supplies a reality data [[TileTree]] from a URL. May be associated with a persistent [[GeometricModelState]], or attached at run-time via a [[ContextRealityModelState]].\r\n * @internal\r\n */\r\nexport class RealityTreeReference extends RealityModelTileTree.Reference {\r\n protected _rdSourceKey: RealityDataSourceKey;\r\n private readonly _produceGeometry?: boolean;\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceProps) {\r\n super(props);\r\n this._produceGeometry = props.produceGeometry;\r\n\r\n // Maybe we should throw if both props.rdSourceKey && props.url are undefined\r\n if (props.rdSourceKey)\r\n this._rdSourceKey = props.rdSourceKey;\r\n else\r\n this._rdSourceKey = RealityDataSource.createKeyFromUrl(props.url ?? \"\", RealityDataProvider.ContextShare);\r\n\r\n if (this._produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n const treeId: RealityTreeId = {\r\n rdSourceKey: this._rdSourceKey,\r\n transform: this._transform,\r\n modelId: this.modelId,\r\n maskModelIds: this.maskModelIds,\r\n deduplicateVertices: this._wantWiremesh,\r\n produceGeometry: this._produceGeometry,\r\n };\r\n\r\n return realityTreeSupplier.getOwner(treeId, this._iModel);\r\n }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference {\r\n const ref = new RealityTreeReference({\r\n iModel: this._iModel,\r\n modelId: this.modelId,\r\n source: this._source,\r\n rdSourceKey: this._rdSourceKey,\r\n name: this._name,\r\n produceGeometry: true,\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n private get _wantWiremesh(): boolean {\r\n return this._source.viewFlags.wiremesh;\r\n }\r\n\r\n public override get castsShadows() {\r\n return true;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n return !this._mapDrapeTree || this._mapDrapeTree.isLoadingComplete;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n // For global reality models (OSM Building layer only) - offset the reality model by the BIM elevation bias. This would not be necessary\r\n // if iModels had their elevation set correctly but unfortunately many GCS erroneously report Sea (Geoid) elevation rather than\r\n // Geodetic.\r\n const tree = this.treeOwner.load();\r\n if (undefined === tree)\r\n return undefined;\r\n\r\n const drawArgs = super.createDrawArgs(context);\r\n if (drawArgs !== undefined && this._iModel.isGeoLocated && tree.isContentUnbounded) {\r\n const elevationBias = context.viewport.view.displayStyle.backgroundMapElevationBias;\r\n\r\n if (undefined !== elevationBias)\r\n drawArgs.location.origin.z -= elevationBias;\r\n }\r\n\r\n return drawArgs;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n const tree = this.treeOwner.tileTree as RealityTileTree;\r\n if (undefined !== tree && context.viewport.iModel.isGeoLocated && (tree.loader as RealityModelTileLoader).doDrapeBackgroundMap) {\r\n // NB: We save this off strictly so that discloseTileTrees() can find it...better option?\r\n this._mapDrapeTree = context.viewport.backgroundDrapeMap;\r\n context.addBackgroundDrapedModel(this, undefined);\r\n }\r\n\r\n super.addToScene(context);\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel)\r\n return undefined;\r\n\r\n const map = (tree as RealityTileTree).loader.getBatchIdMap();\r\n const batch = undefined !== map ? map.getBatchProperties(hit.sourceId) : undefined;\r\n if (undefined === batch && tree.modelId !== hit.sourceId)\r\n return undefined;\r\n\r\n const strings = [];\r\n\r\n const loader = (tree as RealityModelTileTree).loader;\r\n const type = (loader as RealityModelTileLoader).tree.rdSource.realityDataType;\r\n\r\n // If a type is specified, display it\r\n if (type !== undefined) {\r\n // Case insensitive\r\n switch (type.toUpperCase()) {\r\n case DefaultSupportedTypes.RealityMesh3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.RealityMesh3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Terrain3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Terrain3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Cesium3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Cesium3DTiles\"));\r\n break;\r\n }\r\n }\r\n\r\n if (this._name) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:TooltipInfo.Name\")} ${this._name}`);\r\n } else {\r\n const cesiumAsset = this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset ? CesiumIonAssetProvider.parseCesiumUrl(this._rdSourceKey.id) : undefined;\r\n strings.push(cesiumAsset ? `Cesium Asset: ${cesiumAsset.id}` : this._rdSourceKey.id);\r\n }\r\n\r\n if (batch !== undefined)\r\n for (const key of Object.keys(batch))\r\n if (-1 === key.indexOf(\"#\")) // Avoid internal cesium\r\n strings.push(`${key}: ${batch[key]}`);\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset) {\r\n cards.appendChild(IModelApp.makeLogoCard({ heading: \"OpenStreetMap\", notice: `&copy;<a href=\\\"https://www.openstreetmap.org/copyright\\\">OpenStreetMap</a> ${IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap:OpenStreetMapContributors\")}` }));\r\n }\r\n }\r\n}\r\n\r\n"]}
@@ -2,14 +2,14 @@
2
2
  * @module Tiles
3
3
  */
4
4
  import { BeTimePoint } from "@itwin/core-bentley";
5
- import { ClipVector, Point3d, Transform } from "@itwin/core-geometry";
5
+ import { ClipVector, Point3d, Polyface, Transform } from "@itwin/core-geometry";
6
6
  import { ColorDef } from "@itwin/core-common";
7
7
  import { GraphicBuilder } from "../render/GraphicBuilder";
8
8
  import { RenderGraphic } from "../render/RenderGraphic";
9
9
  import { RenderSystem } from "../render/RenderSystem";
10
10
  import { ViewingSpace } from "../ViewingSpace";
11
11
  import { Viewport } from "../Viewport";
12
- import { RealityTileRegion, RealityTileTree, Tile, TileContent, TileDrawArgs, TileGraphicType, TileParams, TileRequest, TileRequestChannel, TraversalDetails, TraversalSelectionContext } from "./internal";
12
+ import { RealityTileRegion, RealityTileTree, Tile, TileContent, TileDrawArgs, TileGeometryCollector, TileGraphicType, TileParams, TileRequest, TileRequestChannel, TileUser, TraversalDetails, TraversalSelectionContext } from "./internal";
13
13
  /** @internal */
14
14
  export interface RealityTileParams extends TileParams {
15
15
  readonly transformToRoot?: Transform;
@@ -18,6 +18,16 @@ export interface RealityTileParams extends TileParams {
18
18
  readonly rangeCorners?: Point3d[];
19
19
  readonly region?: RealityTileRegion;
20
20
  }
21
+ /** The geometry representing the contents of a reality tile. Currently only polyfaces are returned
22
+ * @alpha
23
+ */
24
+ export interface RealityTileGeometry {
25
+ polyfaces?: Polyface[];
26
+ }
27
+ /** @internal */
28
+ export interface RealityTileContent extends TileContent {
29
+ geometry?: RealityTileGeometry;
30
+ }
21
31
  /**
22
32
  * A specialization of tiles that represent reality tiles. 3D Tilesets and maps use this class and have their own optimized traversal and lifetime management.
23
33
  * @internal
@@ -28,10 +38,12 @@ export declare class RealityTile extends Tile {
28
38
  readonly noContentButTerminateOnSelection?: boolean;
29
39
  readonly rangeCorners?: Point3d[];
30
40
  readonly region?: RealityTileRegion;
41
+ protected _geometry?: RealityTileGeometry;
31
42
  private _everDisplayed;
32
43
  protected _reprojectionTransform?: Transform;
33
44
  private _reprojectedGraphic?;
34
45
  constructor(props: RealityTileParams, tree: RealityTileTree);
46
+ setContent(content: RealityTileContent): void;
35
47
  get realityChildren(): RealityTile[] | undefined;
36
48
  get realityParent(): RealityTile;
37
49
  get realityRoot(): RealityTileTree;
@@ -39,6 +51,7 @@ export declare class RealityTile extends Tile {
39
51
  get maxDepth(): number;
40
52
  get isPointCloud(): boolean;
41
53
  get isLoaded(): boolean;
54
+ get geometry(): RealityTileGeometry | undefined;
42
55
  get isDisplayable(): boolean;
43
56
  markUsed(args: TileDrawArgs): void;
44
57
  markDisplayed(): void;
@@ -48,7 +61,7 @@ export declare class RealityTile extends Tile {
48
61
  private useAdditiveRefinementStepchildren;
49
62
  protected _loadChildren(resolve: (children: Tile[] | undefined) => void, reject: (error: Error) => void): void;
50
63
  readContent(data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent>;
51
- computeLoadPriority(viewports: Iterable<Viewport>): number;
64
+ computeLoadPriority(viewports: Iterable<Viewport>, users: Iterable<TileUser>): number;
52
65
  getContentClip(): ClipVector | undefined;
53
66
  selectSecondaryTiles(_args: TileDrawArgs, _context: TraversalSelectionContext): void;
54
67
  get loadableTile(): RealityTile;
@@ -70,5 +83,6 @@ export declare class RealityTile extends Tile {
70
83
  produceGraphics(): RenderGraphic | undefined;
71
84
  get unprojectedGraphic(): RenderGraphic | undefined;
72
85
  disposeContents(): void;
86
+ collectTileGeometry(collector: TileGeometryCollector): void;
73
87
  }
74
88
  //# sourceMappingURL=RealityTile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTile.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealityTile.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTile.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,10 @@ export class RealityTile extends Tile {
40
40
  if (undefined !== this._contentRange)
41
41
  this.transformToRoot.multiplyRange(this._contentRange, this._contentRange);
42
42
  }
43
+ setContent(content) {
44
+ super.setContent(content);
45
+ this._geometry = content.geometry;
46
+ }
43
47
  get realityChildren() { return this.children; }
44
48
  get realityParent() { return this.parent; }
45
49
  get realityRoot() { return this.tree; }
@@ -47,6 +51,7 @@ export class RealityTile extends Tile {
47
51
  get maxDepth() { return this.realityRoot.loader.maxDepth; }
48
52
  get isPointCloud() { return this.realityRoot.loader.containsPointClouds; }
49
53
  get isLoaded() { return this.loadStatus === TileLoadStatus.Ready; } // Reality tiles may depend on secondary tiles (maps) so can ge loaded but not ready.
54
+ get geometry() { return this._geometry; }
50
55
  get isDisplayable() {
51
56
  if (this.noContentButTerminateOnSelection)
52
57
  return false;
@@ -89,8 +94,8 @@ export class RealityTile extends Tile {
89
94
  async readContent(data, system, isCanceled) {
90
95
  return this.realityRoot.loader.loadTileContent(this, data, system, isCanceled);
91
96
  }
92
- computeLoadPriority(viewports) {
93
- return this.realityRoot.loader.computeTilePriority(this, viewports);
97
+ computeLoadPriority(viewports, users) {
98
+ return this.realityRoot.loader.computeTilePriority(this, viewports, users);
94
99
  }
95
100
  getContentClip() {
96
101
  return ClipVector.createCapture([ClipShape.createBlock(this.contentRange, ClipMaskXYZRangePlanes.All)]);
@@ -295,6 +300,33 @@ export class RealityTile extends Tile {
295
300
  super.disposeContents();
296
301
  this._reprojectedGraphic = dispose(this._reprojectedGraphic);
297
302
  }
303
+ collectTileGeometry(collector) {
304
+ var _a;
305
+ const status = collector.collectTile(this);
306
+ switch (status) {
307
+ case "reject":
308
+ return;
309
+ case "continue":
310
+ if (!this.isLeaf && !this._anyChildNotFound) {
311
+ const childrenLoadStatus = this.loadChildren();
312
+ if (TileTreeLoadStatus.Loading === childrenLoadStatus) {
313
+ collector.markLoading();
314
+ }
315
+ else if (undefined !== this.realityChildren && !this._anyChildNotFound) {
316
+ for (const child of this.realityChildren)
317
+ child.collectTileGeometry(collector);
318
+ }
319
+ break;
320
+ } // else fall through to "accept"
321
+ // eslint-disable-next-line no-fallthrough
322
+ case "accept":
323
+ if (!this.isReady)
324
+ collector.addMissingTile(this.loadableTile);
325
+ else if ((_a = this.geometry) === null || _a === void 0 ? void 0 : _a.polyfaces)
326
+ collector.polyfaces.push(...this.geometry.polyfaces);
327
+ break;
328
+ }
329
+ }
298
330
  }
299
331
  /** When additive refinement is used (as in the Cesium OSM tileset) it is not possible to accurately reproject very large, low level tiles
300
332
  * In this case we create additional "step" children (grandchildren etc. ) that will clipped portions display the their ancestor's additive geometry.