@itwin/core-frontend 4.0.0-dev.86 → 4.0.0-dev.87

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 (841) hide show
  1. package/lib/cjs/AccuDraw.js.map +1 -1
  2. package/lib/cjs/AccuSnap.js.map +1 -1
  3. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  4. package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -1
  5. package/lib/cjs/AuxCoordSys.js.map +1 -1
  6. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  7. package/lib/cjs/BingLocation.js.map +1 -1
  8. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  9. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  10. package/lib/cjs/CategorySelectorState.js.map +1 -1
  11. package/lib/cjs/ChangeFlags.js.map +1 -1
  12. package/lib/cjs/CheckpointConnection.js.map +1 -1
  13. package/lib/cjs/CoordSystem.js.map +1 -1
  14. package/lib/cjs/DecorationsCache.js.map +1 -1
  15. package/lib/cjs/DevTools.js.map +1 -1
  16. package/lib/cjs/DisplayStyleState.js.map +1 -1
  17. package/lib/cjs/DrawingViewState.js +5 -5
  18. package/lib/cjs/DrawingViewState.js.map +1 -1
  19. package/lib/cjs/ElementLocateManager.js.map +1 -1
  20. package/lib/cjs/EmphasizeElements.js.map +1 -1
  21. package/lib/cjs/EntityState.js.map +1 -1
  22. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  23. package/lib/cjs/FeatureOverrideProvider.js.map +1 -1
  24. package/lib/cjs/FlashSettings.js.map +1 -1
  25. package/lib/cjs/FrontendHubAccess.js.map +1 -1
  26. package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
  27. package/lib/cjs/Frustum2d.js.map +1 -1
  28. package/lib/cjs/FrustumAnimator.js.map +1 -1
  29. package/lib/cjs/FuzzySearch.js.map +1 -1
  30. package/lib/cjs/GeoServices.js.map +1 -1
  31. package/lib/cjs/GlobeAnimator.js.map +1 -1
  32. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  33. package/lib/cjs/HitDetail.js.map +1 -1
  34. package/lib/cjs/IModelApp.js.map +1 -1
  35. package/lib/cjs/IModelConnection.js +23 -23
  36. package/lib/cjs/IModelConnection.js.map +1 -1
  37. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  38. package/lib/cjs/IModeljs-css.js +133 -133
  39. package/lib/cjs/IModeljs-css.js.map +1 -1
  40. package/lib/cjs/ImageUtil.js.map +1 -1
  41. package/lib/cjs/IpcApp.js.map +1 -1
  42. package/lib/cjs/LinePlaneIntersect.js.map +1 -1
  43. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  44. package/lib/cjs/MarginPercent.js.map +1 -1
  45. package/lib/cjs/Marker.js.map +1 -1
  46. package/lib/cjs/ModelSelectorState.js.map +1 -1
  47. package/lib/cjs/NativeApp.js.map +1 -1
  48. package/lib/cjs/NativeAppLogger.js.map +1 -1
  49. package/lib/cjs/NoRenderApp.js.map +1 -1
  50. package/lib/cjs/NotificationManager.js.map +1 -1
  51. package/lib/cjs/PerModelCategoryVisibility.js.map +1 -1
  52. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  53. package/lib/cjs/RealityDataSource.js.map +1 -1
  54. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  55. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  56. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  57. package/lib/cjs/SelectionSet.js.map +1 -1
  58. package/lib/cjs/SheetViewState.js.map +1 -1
  59. package/lib/cjs/SpatialViewState.js.map +1 -1
  60. package/lib/cjs/Sprites.js.map +1 -1
  61. package/lib/cjs/StandardView.js.map +1 -1
  62. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  63. package/lib/cjs/TentativePoint.js.map +1 -1
  64. package/lib/cjs/Tiles.js.map +1 -1
  65. package/lib/cjs/UserPreferences.js.map +1 -1
  66. package/lib/cjs/ViewAnimation.js.map +1 -1
  67. package/lib/cjs/ViewContext.js.map +1 -1
  68. package/lib/cjs/ViewCreator2d.js.map +1 -1
  69. package/lib/cjs/ViewCreator3d.js.map +1 -1
  70. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  71. package/lib/cjs/ViewManager.js.map +1 -1
  72. package/lib/cjs/ViewPose.js.map +1 -1
  73. package/lib/cjs/ViewRect.js.map +1 -1
  74. package/lib/cjs/ViewState.js.map +1 -1
  75. package/lib/cjs/ViewStatus.js.map +1 -1
  76. package/lib/cjs/ViewingSpace.js.map +1 -1
  77. package/lib/cjs/Viewport.js.map +1 -1
  78. package/lib/cjs/ViewportSync.js.map +1 -1
  79. package/lib/cjs/WebWorkerManager.js.map +1 -1
  80. package/lib/cjs/core-frontend.js.map +1 -1
  81. package/lib/cjs/extension/Extension.js.map +1 -1
  82. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  83. package/lib/cjs/extension/ExtensionHost.js.map +1 -1
  84. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  85. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  86. package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
  87. package/lib/cjs/extension/providers/LocalExtensionProvider.js.map +1 -1
  88. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  89. package/lib/cjs/gltf/GltfModel.js.map +1 -1
  90. package/lib/cjs/gltf/GltfParser.js.map +1 -1
  91. package/lib/cjs/gltf/GltfSchema.js.map +1 -1
  92. package/lib/cjs/properties/AngleDescription.js.map +1 -1
  93. package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
  94. package/lib/cjs/properties/LengthDescription.js.map +1 -1
  95. package/lib/cjs/public/scripts/checkbrowser.js +24 -24
  96. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  97. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  98. package/lib/cjs/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  99. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  100. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  101. package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -1
  102. package/lib/cjs/render/CanvasDecoration.js.map +1 -1
  103. package/lib/cjs/render/Decorations.js.map +1 -1
  104. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  105. package/lib/cjs/render/FrameStats.js.map +1 -1
  106. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  107. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  108. package/lib/cjs/render/GraphicPrimitive.js.map +1 -1
  109. package/lib/cjs/render/InstancedGraphicParams.js.map +1 -1
  110. package/lib/cjs/render/MockRender.js.map +1 -1
  111. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  112. package/lib/cjs/render/Pixel.js.map +1 -1
  113. package/lib/cjs/render/RealityMeshGraphicParams.js.map +1 -1
  114. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  115. package/lib/cjs/render/RenderClipVolume.js.map +1 -1
  116. package/lib/cjs/render/RenderGraphic.js.map +1 -1
  117. package/lib/cjs/render/RenderMaterial.d.ts +8 -0
  118. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  119. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  120. package/lib/cjs/render/RenderMemory.js.map +1 -1
  121. package/lib/cjs/render/RenderPlan.js.map +1 -1
  122. package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
  123. package/lib/cjs/render/RenderSystem.js.map +1 -1
  124. package/lib/cjs/render/RenderTarget.js.map +1 -1
  125. package/lib/cjs/render/RenderTexture.js.map +1 -1
  126. package/lib/cjs/render/Scene.js.map +1 -1
  127. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  128. package/lib/cjs/render/UpsampleRealityMeshParams.js.map +1 -1
  129. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  130. package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
  131. package/lib/cjs/render/primitives/ColorMap.js.map +1 -1
  132. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  133. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  134. package/lib/cjs/render/primitives/PointCloudPrimitive.js.map +1 -1
  135. package/lib/cjs/render/primitives/PointStringParams.js.map +1 -1
  136. package/lib/cjs/render/primitives/Polyface.js.map +1 -1
  137. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  138. package/lib/cjs/render/primitives/Primitives.js.map +1 -1
  139. package/lib/cjs/render/primitives/Strokes.js.map +1 -1
  140. package/lib/cjs/render/primitives/SurfaceParams.js.map +1 -1
  141. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  142. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  143. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  144. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  145. package/lib/cjs/render/primitives/geometry/GeometryList.js.map +1 -1
  146. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  147. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  148. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  149. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  150. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  151. package/lib/cjs/render/webgl/AtmosphereUniforms.js.map +1 -1
  152. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  153. package/lib/cjs/render/webgl/AttributeMap.js.map +1 -1
  154. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  155. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  156. package/lib/cjs/render/webgl/BatchUniforms.js.map +1 -1
  157. package/lib/cjs/render/webgl/BranchStack.js.map +1 -1
  158. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  159. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  160. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  161. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  162. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  163. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  164. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  165. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  166. package/lib/cjs/render/webgl/Disposable.js.map +1 -1
  167. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  168. package/lib/cjs/render/webgl/EDL.js.map +1 -1
  169. package/lib/cjs/render/webgl/EdgeGeometry.js.map +1 -1
  170. package/lib/cjs/render/webgl/EdgeSettings.js.map +1 -1
  171. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  172. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  173. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  174. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  175. package/lib/cjs/render/webgl/GL.js.map +1 -1
  176. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  177. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  178. package/lib/cjs/render/webgl/HiliteUniforms.js.map +1 -1
  179. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  180. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  181. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  182. package/lib/cjs/render/webgl/Layer.js.map +1 -1
  183. package/lib/cjs/render/webgl/LayerCommands.js.map +1 -1
  184. package/lib/cjs/render/webgl/LightingUniforms.js.map +1 -1
  185. package/lib/cjs/render/webgl/LineCode.js.map +1 -1
  186. package/lib/cjs/render/webgl/Material.js.map +1 -1
  187. package/lib/cjs/render/webgl/Matrix.js.map +1 -1
  188. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  189. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  190. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  191. package/lib/cjs/render/webgl/PerformanceMetrics.js.map +1 -1
  192. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  193. package/lib/cjs/render/webgl/PlanarGrid.js.map +1 -1
  194. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  195. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  196. package/lib/cjs/render/webgl/PointString.js.map +1 -1
  197. package/lib/cjs/render/webgl/Polyline.js.map +1 -1
  198. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  199. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  200. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  201. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  202. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  203. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  204. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  205. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  206. package/lib/cjs/render/webgl/ScratchDrawParams.js.map +1 -1
  207. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  208. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  209. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  210. package/lib/cjs/render/webgl/ShadowUniforms.js.map +1 -1
  211. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  212. package/lib/cjs/render/webgl/StyleUniforms.js.map +1 -1
  213. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  214. package/lib/cjs/render/webgl/Sync.js.map +1 -1
  215. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  216. package/lib/cjs/render/webgl/System.js +2 -0
  217. package/lib/cjs/render/webgl/System.js.map +1 -1
  218. package/lib/cjs/render/webgl/Target.js.map +1 -1
  219. package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
  220. package/lib/cjs/render/webgl/TargetUniforms.js.map +1 -1
  221. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  222. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  223. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  224. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  225. package/lib/cjs/render/webgl/TextureDrape.js.map +1 -1
  226. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  227. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  228. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  229. package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
  230. package/lib/cjs/render/webgl/ViewRectUniforms.js.map +1 -1
  231. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  232. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +154 -154
  233. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  234. package/lib/cjs/render/webgl/glsl/Animation.js +83 -83
  235. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  236. package/lib/cjs/render/webgl/glsl/Atmosphere.js +266 -266
  237. package/lib/cjs/render/webgl/glsl/Atmosphere.js.map +1 -1
  238. package/lib/cjs/render/webgl/glsl/Blur.js +37 -37
  239. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  240. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +4 -4
  241. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  242. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +3 -3
  243. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  244. package/lib/cjs/render/webgl/glsl/Clipping.js +60 -60
  245. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  246. package/lib/cjs/render/webgl/glsl/Color.js +12 -12
  247. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  248. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +7 -7
  249. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  250. package/lib/cjs/render/webgl/glsl/CombineTextures.js +5 -5
  251. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  252. package/lib/cjs/render/webgl/glsl/Common.js +16 -16
  253. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  254. package/lib/cjs/render/webgl/glsl/Composite.js +71 -71
  255. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  256. package/lib/cjs/render/webgl/glsl/CopyColor.js +6 -6
  257. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  258. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +3 -3
  259. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  260. package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -4
  261. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  262. package/lib/cjs/render/webgl/glsl/Decode.js +65 -65
  263. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  264. package/lib/cjs/render/webgl/glsl/EDL.js +103 -103
  265. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  266. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +25 -25
  267. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  268. package/lib/cjs/render/webgl/glsl/Edge.js +146 -146
  269. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  270. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +232 -232
  271. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  272. package/lib/cjs/render/webgl/glsl/Fragment.js +41 -41
  273. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  274. package/lib/cjs/render/webgl/glsl/Instancing.js +21 -21
  275. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  276. package/lib/cjs/render/webgl/glsl/Lighting.js +92 -92
  277. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  278. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  279. package/lib/cjs/render/webgl/glsl/LookupTable.js +19 -19
  280. package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
  281. package/lib/cjs/render/webgl/glsl/Monochrome.js +13 -13
  282. package/lib/cjs/render/webgl/glsl/Monochrome.js.map +1 -1
  283. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +188 -188
  284. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  285. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +22 -22
  286. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  287. package/lib/cjs/render/webgl/glsl/PointCloud.js +28 -28
  288. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  289. package/lib/cjs/render/webgl/glsl/PointString.js +9 -9
  290. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  291. package/lib/cjs/render/webgl/glsl/Polyline.js +213 -213
  292. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  293. package/lib/cjs/render/webgl/glsl/RealityMesh.js +83 -83
  294. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  295. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  296. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  297. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  298. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  299. package/lib/cjs/render/webgl/glsl/SkySphere.js +49 -49
  300. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  301. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +51 -51
  302. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  303. package/lib/cjs/render/webgl/glsl/Surface.js +239 -239
  304. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  305. package/lib/cjs/render/webgl/glsl/Thematic.js +134 -134
  306. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  307. package/lib/cjs/render/webgl/glsl/Translucency.js +19 -19
  308. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  309. package/lib/cjs/render/webgl/glsl/Vertex.js +73 -73
  310. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  311. package/lib/cjs/render/webgl/glsl/Viewport.js +38 -38
  312. package/lib/cjs/render/webgl/glsl/Viewport.js.map +1 -1
  313. package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
  314. package/lib/cjs/render/webgl/glsl/Wiremesh.js +10 -10
  315. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  316. package/lib/cjs/render-primitives.js.map +1 -1
  317. package/lib/cjs/request/Request.js.map +1 -1
  318. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  319. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  320. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  321. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  322. package/lib/cjs/tile/ContextShareProvider.js.map +1 -1
  323. package/lib/cjs/tile/DisclosedTileTreeSet.js.map +1 -1
  324. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  325. package/lib/cjs/tile/GltfReader.js.map +1 -1
  326. package/lib/cjs/tile/GraphicsCollector.js.map +1 -1
  327. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  328. package/lib/cjs/tile/IModelTile.js.map +1 -1
  329. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  330. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  331. package/lib/cjs/tile/ImdlReader.d.ts +14 -0
  332. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  333. package/lib/cjs/tile/ImdlReader.js +23 -1
  334. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  335. package/lib/cjs/tile/LRUTileList.js.map +1 -1
  336. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
  337. package/lib/cjs/tile/PntsReader.js.map +1 -1
  338. package/lib/cjs/tile/RealityTile.js.map +1 -1
  339. package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
  340. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  341. package/lib/cjs/tile/RealityTileTree.js +1 -1
  342. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  343. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  344. package/lib/cjs/tile/Tile.js.map +1 -1
  345. package/lib/cjs/tile/TileAdmin.d.ts +1 -1
  346. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  347. package/lib/cjs/tile/TileAdmin.js +3 -1
  348. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  349. package/lib/cjs/tile/TileContent.js.map +1 -1
  350. package/lib/cjs/tile/TileDrawArgs.d.ts +4 -0
  351. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  352. package/lib/cjs/tile/TileDrawArgs.js +4 -0
  353. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  354. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -1
  355. package/lib/cjs/tile/TileParams.js.map +1 -1
  356. package/lib/cjs/tile/TileRequest.js.map +1 -1
  357. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  358. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  359. package/lib/cjs/tile/TileStorage.js.map +1 -1
  360. package/lib/cjs/tile/TileTree.js +1 -1
  361. package/lib/cjs/tile/TileTree.js.map +1 -1
  362. package/lib/cjs/tile/TileTreeOwner.js.map +1 -1
  363. package/lib/cjs/tile/TileTreeParams.js.map +1 -1
  364. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  365. package/lib/cjs/tile/TileTreeSupplier.js.map +1 -1
  366. package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
  367. package/lib/cjs/tile/TileUser.js.map +1 -1
  368. package/lib/cjs/tile/TileUserSet.js.map +1 -1
  369. package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
  370. package/lib/cjs/tile/ViewFlagOverrides.js.map +1 -1
  371. package/lib/cjs/tile/internal.js.map +1 -1
  372. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  373. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  374. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  375. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  376. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  377. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  378. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  379. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  380. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  381. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  382. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  383. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  384. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  385. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  386. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -1
  387. package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
  388. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  389. package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -2
  390. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  391. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  392. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  393. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  394. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  395. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  396. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  397. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  398. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  399. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  400. package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
  401. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  402. package/lib/cjs/tile/map/WmsUtilities.js.map +1 -1
  403. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  404. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  405. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  406. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  407. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  408. package/lib/cjs/tools/EventController.js.map +1 -1
  409. package/lib/cjs/tools/IdleTool.js.map +1 -1
  410. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  411. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  412. package/lib/cjs/tools/SelectTool.js.map +1 -1
  413. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  414. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  415. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  416. package/lib/cjs/tools/ViewTool.js.map +1 -1
  417. package/lib/cjs/webgl.js.map +1 -1
  418. package/lib/esm/AccuDraw.js.map +1 -1
  419. package/lib/esm/AccuSnap.js.map +1 -1
  420. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  421. package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -1
  422. package/lib/esm/AuxCoordSys.js.map +1 -1
  423. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  424. package/lib/esm/BingLocation.js.map +1 -1
  425. package/lib/esm/BriefcaseConnection.js.map +1 -1
  426. package/lib/esm/BriefcaseTxns.js.map +1 -1
  427. package/lib/esm/CategorySelectorState.js.map +1 -1
  428. package/lib/esm/ChangeFlags.js.map +1 -1
  429. package/lib/esm/CheckpointConnection.js.map +1 -1
  430. package/lib/esm/CoordSystem.js.map +1 -1
  431. package/lib/esm/DecorationsCache.js.map +1 -1
  432. package/lib/esm/DevTools.js.map +1 -1
  433. package/lib/esm/DisplayStyleState.js.map +1 -1
  434. package/lib/esm/DrawingViewState.js +5 -5
  435. package/lib/esm/DrawingViewState.js.map +1 -1
  436. package/lib/esm/ElementLocateManager.js.map +1 -1
  437. package/lib/esm/EmphasizeElements.js.map +1 -1
  438. package/lib/esm/EntityState.js.map +1 -1
  439. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  440. package/lib/esm/FeatureOverrideProvider.js.map +1 -1
  441. package/lib/esm/FlashSettings.js.map +1 -1
  442. package/lib/esm/FrontendHubAccess.js.map +1 -1
  443. package/lib/esm/FrontendLoggerCategory.js.map +1 -1
  444. package/lib/esm/Frustum2d.js.map +1 -1
  445. package/lib/esm/FrustumAnimator.js.map +1 -1
  446. package/lib/esm/FuzzySearch.js.map +1 -1
  447. package/lib/esm/GeoServices.js.map +1 -1
  448. package/lib/esm/GlobeAnimator.js.map +1 -1
  449. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  450. package/lib/esm/HitDetail.js.map +1 -1
  451. package/lib/esm/IModelApp.js.map +1 -1
  452. package/lib/esm/IModelConnection.js +23 -23
  453. package/lib/esm/IModelConnection.js.map +1 -1
  454. package/lib/esm/IModelRoutingContext.js.map +1 -1
  455. package/lib/esm/IModeljs-css.js +133 -133
  456. package/lib/esm/IModeljs-css.js.map +1 -1
  457. package/lib/esm/ImageUtil.js.map +1 -1
  458. package/lib/esm/IpcApp.js.map +1 -1
  459. package/lib/esm/LinePlaneIntersect.js.map +1 -1
  460. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  461. package/lib/esm/MarginPercent.js.map +1 -1
  462. package/lib/esm/Marker.js.map +1 -1
  463. package/lib/esm/ModelSelectorState.js.map +1 -1
  464. package/lib/esm/NativeApp.js.map +1 -1
  465. package/lib/esm/NativeAppLogger.js.map +1 -1
  466. package/lib/esm/NoRenderApp.js.map +1 -1
  467. package/lib/esm/NotificationManager.js.map +1 -1
  468. package/lib/esm/PerModelCategoryVisibility.js.map +1 -1
  469. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  470. package/lib/esm/RealityDataSource.js.map +1 -1
  471. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  472. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  473. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  474. package/lib/esm/SelectionSet.js.map +1 -1
  475. package/lib/esm/SheetViewState.js.map +1 -1
  476. package/lib/esm/SpatialViewState.js.map +1 -1
  477. package/lib/esm/Sprites.js.map +1 -1
  478. package/lib/esm/StandardView.js.map +1 -1
  479. package/lib/esm/SubCategoriesCache.js.map +1 -1
  480. package/lib/esm/TentativePoint.js.map +1 -1
  481. package/lib/esm/Tiles.js.map +1 -1
  482. package/lib/esm/UserPreferences.js.map +1 -1
  483. package/lib/esm/ViewAnimation.js.map +1 -1
  484. package/lib/esm/ViewContext.js.map +1 -1
  485. package/lib/esm/ViewCreator2d.js.map +1 -1
  486. package/lib/esm/ViewCreator3d.js.map +1 -1
  487. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  488. package/lib/esm/ViewManager.js.map +1 -1
  489. package/lib/esm/ViewPose.js.map +1 -1
  490. package/lib/esm/ViewRect.js.map +1 -1
  491. package/lib/esm/ViewState.js.map +1 -1
  492. package/lib/esm/ViewStatus.js.map +1 -1
  493. package/lib/esm/ViewingSpace.js.map +1 -1
  494. package/lib/esm/Viewport.js.map +1 -1
  495. package/lib/esm/ViewportSync.js.map +1 -1
  496. package/lib/esm/WebWorkerManager.js.map +1 -1
  497. package/lib/esm/core-frontend.js.map +1 -1
  498. package/lib/esm/extension/Extension.js.map +1 -1
  499. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  500. package/lib/esm/extension/ExtensionHost.js.map +1 -1
  501. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  502. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  503. package/lib/esm/extension/providers/ExtensionLoadScript.js.map +1 -1
  504. package/lib/esm/extension/providers/LocalExtensionProvider.js.map +1 -1
  505. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  506. package/lib/esm/gltf/GltfModel.js.map +1 -1
  507. package/lib/esm/gltf/GltfParser.js.map +1 -1
  508. package/lib/esm/gltf/GltfSchema.js.map +1 -1
  509. package/lib/esm/properties/AngleDescription.js.map +1 -1
  510. package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
  511. package/lib/esm/properties/LengthDescription.js.map +1 -1
  512. package/lib/esm/public/scripts/checkbrowser.js +24 -24
  513. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  514. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  515. package/lib/esm/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  516. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  517. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  518. package/lib/esm/quantity-formatting/UnitsData.js.map +1 -1
  519. package/lib/esm/render/CanvasDecoration.js.map +1 -1
  520. package/lib/esm/render/Decorations.js.map +1 -1
  521. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  522. package/lib/esm/render/FrameStats.js.map +1 -1
  523. package/lib/esm/render/GraphicBranch.js.map +1 -1
  524. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  525. package/lib/esm/render/GraphicPrimitive.js.map +1 -1
  526. package/lib/esm/render/InstancedGraphicParams.js.map +1 -1
  527. package/lib/esm/render/MockRender.js.map +1 -1
  528. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  529. package/lib/esm/render/Pixel.js.map +1 -1
  530. package/lib/esm/render/RealityMeshGraphicParams.js.map +1 -1
  531. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  532. package/lib/esm/render/RenderClipVolume.js.map +1 -1
  533. package/lib/esm/render/RenderGraphic.js.map +1 -1
  534. package/lib/esm/render/RenderMaterial.d.ts +8 -0
  535. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  536. package/lib/esm/render/RenderMaterial.js.map +1 -1
  537. package/lib/esm/render/RenderMemory.js.map +1 -1
  538. package/lib/esm/render/RenderPlan.js.map +1 -1
  539. package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
  540. package/lib/esm/render/RenderSystem.js.map +1 -1
  541. package/lib/esm/render/RenderTarget.js.map +1 -1
  542. package/lib/esm/render/RenderTexture.js.map +1 -1
  543. package/lib/esm/render/Scene.js.map +1 -1
  544. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  545. package/lib/esm/render/UpsampleRealityMeshParams.js.map +1 -1
  546. package/lib/esm/render/VisibleFeature.js.map +1 -1
  547. package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
  548. package/lib/esm/render/primitives/ColorMap.js.map +1 -1
  549. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  550. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  551. package/lib/esm/render/primitives/PointCloudPrimitive.js.map +1 -1
  552. package/lib/esm/render/primitives/PointStringParams.js.map +1 -1
  553. package/lib/esm/render/primitives/Polyface.js.map +1 -1
  554. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  555. package/lib/esm/render/primitives/Primitives.js.map +1 -1
  556. package/lib/esm/render/primitives/Strokes.js.map +1 -1
  557. package/lib/esm/render/primitives/SurfaceParams.js.map +1 -1
  558. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  559. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  560. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  561. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  562. package/lib/esm/render/primitives/geometry/GeometryList.js.map +1 -1
  563. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  564. package/lib/esm/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  565. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  566. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  567. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  568. package/lib/esm/render/webgl/AtmosphereUniforms.js.map +1 -1
  569. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  570. package/lib/esm/render/webgl/AttributeMap.js.map +1 -1
  571. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  572. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  573. package/lib/esm/render/webgl/BatchUniforms.js.map +1 -1
  574. package/lib/esm/render/webgl/BranchStack.js.map +1 -1
  575. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  576. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  577. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  578. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  579. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  580. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  581. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  582. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  583. package/lib/esm/render/webgl/Disposable.js.map +1 -1
  584. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  585. package/lib/esm/render/webgl/EDL.js.map +1 -1
  586. package/lib/esm/render/webgl/EdgeGeometry.js.map +1 -1
  587. package/lib/esm/render/webgl/EdgeSettings.js.map +1 -1
  588. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  589. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  590. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  591. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  592. package/lib/esm/render/webgl/GL.js.map +1 -1
  593. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  594. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  595. package/lib/esm/render/webgl/HiliteUniforms.js.map +1 -1
  596. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  597. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  598. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  599. package/lib/esm/render/webgl/Layer.js.map +1 -1
  600. package/lib/esm/render/webgl/LayerCommands.js.map +1 -1
  601. package/lib/esm/render/webgl/LightingUniforms.js.map +1 -1
  602. package/lib/esm/render/webgl/LineCode.js.map +1 -1
  603. package/lib/esm/render/webgl/Material.js.map +1 -1
  604. package/lib/esm/render/webgl/Matrix.js.map +1 -1
  605. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  606. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  607. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  608. package/lib/esm/render/webgl/PerformanceMetrics.js.map +1 -1
  609. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  610. package/lib/esm/render/webgl/PlanarGrid.js.map +1 -1
  611. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  612. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  613. package/lib/esm/render/webgl/PointString.js.map +1 -1
  614. package/lib/esm/render/webgl/Polyline.js.map +1 -1
  615. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  616. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  617. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  618. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  619. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  620. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  621. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  622. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  623. package/lib/esm/render/webgl/ScratchDrawParams.js.map +1 -1
  624. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  625. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  626. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  627. package/lib/esm/render/webgl/ShadowUniforms.js.map +1 -1
  628. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  629. package/lib/esm/render/webgl/StyleUniforms.js.map +1 -1
  630. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  631. package/lib/esm/render/webgl/Sync.js.map +1 -1
  632. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  633. package/lib/esm/render/webgl/System.js +2 -0
  634. package/lib/esm/render/webgl/System.js.map +1 -1
  635. package/lib/esm/render/webgl/Target.js.map +1 -1
  636. package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
  637. package/lib/esm/render/webgl/TargetUniforms.js.map +1 -1
  638. package/lib/esm/render/webgl/Technique.js.map +1 -1
  639. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  640. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  641. package/lib/esm/render/webgl/Texture.js.map +1 -1
  642. package/lib/esm/render/webgl/TextureDrape.js.map +1 -1
  643. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  644. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  645. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  646. package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
  647. package/lib/esm/render/webgl/ViewRectUniforms.js.map +1 -1
  648. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  649. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +154 -154
  650. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  651. package/lib/esm/render/webgl/glsl/Animation.js +83 -83
  652. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  653. package/lib/esm/render/webgl/glsl/Atmosphere.js +266 -266
  654. package/lib/esm/render/webgl/glsl/Atmosphere.js.map +1 -1
  655. package/lib/esm/render/webgl/glsl/Blur.js +37 -37
  656. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  657. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +4 -4
  658. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  659. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +3 -3
  660. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  661. package/lib/esm/render/webgl/glsl/Clipping.js +60 -60
  662. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  663. package/lib/esm/render/webgl/glsl/Color.js +12 -12
  664. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  665. package/lib/esm/render/webgl/glsl/Combine3Textures.js +7 -7
  666. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  667. package/lib/esm/render/webgl/glsl/CombineTextures.js +5 -5
  668. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  669. package/lib/esm/render/webgl/glsl/Common.js +16 -16
  670. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  671. package/lib/esm/render/webgl/glsl/Composite.js +71 -71
  672. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  673. package/lib/esm/render/webgl/glsl/CopyColor.js +6 -6
  674. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  675. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +3 -3
  676. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  677. package/lib/esm/render/webgl/glsl/CopyStencil.js +4 -4
  678. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  679. package/lib/esm/render/webgl/glsl/Decode.js +65 -65
  680. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  681. package/lib/esm/render/webgl/glsl/EDL.js +103 -103
  682. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  683. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +25 -25
  684. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  685. package/lib/esm/render/webgl/glsl/Edge.js +146 -146
  686. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  687. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +232 -232
  688. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  689. package/lib/esm/render/webgl/glsl/Fragment.js +41 -41
  690. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  691. package/lib/esm/render/webgl/glsl/Instancing.js +21 -21
  692. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  693. package/lib/esm/render/webgl/glsl/Lighting.js +92 -92
  694. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  695. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  696. package/lib/esm/render/webgl/glsl/LookupTable.js +19 -19
  697. package/lib/esm/render/webgl/glsl/LookupTable.js.map +1 -1
  698. package/lib/esm/render/webgl/glsl/Monochrome.js +13 -13
  699. package/lib/esm/render/webgl/glsl/Monochrome.js.map +1 -1
  700. package/lib/esm/render/webgl/glsl/PlanarClassification.js +188 -188
  701. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  702. package/lib/esm/render/webgl/glsl/PlanarGrid.js +22 -22
  703. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  704. package/lib/esm/render/webgl/glsl/PointCloud.js +28 -28
  705. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  706. package/lib/esm/render/webgl/glsl/PointString.js +9 -9
  707. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  708. package/lib/esm/render/webgl/glsl/Polyline.js +213 -213
  709. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  710. package/lib/esm/render/webgl/glsl/RealityMesh.js +83 -83
  711. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  712. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  713. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  714. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  715. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  716. package/lib/esm/render/webgl/glsl/SkySphere.js +49 -49
  717. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  718. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +51 -51
  719. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  720. package/lib/esm/render/webgl/glsl/Surface.js +239 -239
  721. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  722. package/lib/esm/render/webgl/glsl/Thematic.js +134 -134
  723. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  724. package/lib/esm/render/webgl/glsl/Translucency.js +19 -19
  725. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  726. package/lib/esm/render/webgl/glsl/Vertex.js +73 -73
  727. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  728. package/lib/esm/render/webgl/glsl/Viewport.js +38 -38
  729. package/lib/esm/render/webgl/glsl/Viewport.js.map +1 -1
  730. package/lib/esm/render/webgl/glsl/ViewportQuad.js.map +1 -1
  731. package/lib/esm/render/webgl/glsl/Wiremesh.js +10 -10
  732. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  733. package/lib/esm/render-primitives.js.map +1 -1
  734. package/lib/esm/request/Request.js.map +1 -1
  735. package/lib/esm/tile/B3dmReader.js.map +1 -1
  736. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  737. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  738. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  739. package/lib/esm/tile/ContextShareProvider.js.map +1 -1
  740. package/lib/esm/tile/DisclosedTileTreeSet.js.map +1 -1
  741. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  742. package/lib/esm/tile/GltfReader.js.map +1 -1
  743. package/lib/esm/tile/GraphicsCollector.js.map +1 -1
  744. package/lib/esm/tile/I3dmReader.js.map +1 -1
  745. package/lib/esm/tile/IModelTile.js.map +1 -1
  746. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  747. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  748. package/lib/esm/tile/ImdlReader.d.ts +14 -0
  749. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  750. package/lib/esm/tile/ImdlReader.js +24 -2
  751. package/lib/esm/tile/ImdlReader.js.map +1 -1
  752. package/lib/esm/tile/LRUTileList.js.map +1 -1
  753. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
  754. package/lib/esm/tile/PntsReader.js.map +1 -1
  755. package/lib/esm/tile/RealityTile.js.map +1 -1
  756. package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
  757. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  758. package/lib/esm/tile/RealityTileTree.js +1 -1
  759. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  760. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  761. package/lib/esm/tile/Tile.js.map +1 -1
  762. package/lib/esm/tile/TileAdmin.d.ts +1 -1
  763. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  764. package/lib/esm/tile/TileAdmin.js +3 -1
  765. package/lib/esm/tile/TileAdmin.js.map +1 -1
  766. package/lib/esm/tile/TileContent.js.map +1 -1
  767. package/lib/esm/tile/TileDrawArgs.d.ts +4 -0
  768. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  769. package/lib/esm/tile/TileDrawArgs.js +4 -0
  770. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  771. package/lib/esm/tile/TileGeometryCollector.js.map +1 -1
  772. package/lib/esm/tile/TileParams.js.map +1 -1
  773. package/lib/esm/tile/TileRequest.js.map +1 -1
  774. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  775. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  776. package/lib/esm/tile/TileStorage.js.map +1 -1
  777. package/lib/esm/tile/TileTree.js +1 -1
  778. package/lib/esm/tile/TileTree.js.map +1 -1
  779. package/lib/esm/tile/TileTreeOwner.js.map +1 -1
  780. package/lib/esm/tile/TileTreeParams.js.map +1 -1
  781. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  782. package/lib/esm/tile/TileTreeSupplier.js.map +1 -1
  783. package/lib/esm/tile/TileUsageMarker.js.map +1 -1
  784. package/lib/esm/tile/TileUser.js.map +1 -1
  785. package/lib/esm/tile/TileUserSet.js.map +1 -1
  786. package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
  787. package/lib/esm/tile/ViewFlagOverrides.js.map +1 -1
  788. package/lib/esm/tile/internal.js.map +1 -1
  789. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  790. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  791. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  792. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  793. package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  794. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  795. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  796. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  797. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  798. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  799. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  800. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  801. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  802. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  803. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -1
  804. package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
  805. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  806. package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -2
  807. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  808. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  809. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  810. package/lib/esm/tile/map/MapTile.js.map +1 -1
  811. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  812. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  813. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  814. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  815. package/lib/esm/tile/map/QuadId.js.map +1 -1
  816. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  817. package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
  818. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  819. package/lib/esm/tile/map/WmsUtilities.js.map +1 -1
  820. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  821. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  822. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  823. package/lib/esm/tools/EditManipulator.js.map +1 -1
  824. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  825. package/lib/esm/tools/EventController.js.map +1 -1
  826. package/lib/esm/tools/IdleTool.js.map +1 -1
  827. package/lib/esm/tools/MeasureTool.js.map +1 -1
  828. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  829. package/lib/esm/tools/SelectTool.js.map +1 -1
  830. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  831. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  832. package/lib/esm/tools/ToolSettings.js.map +1 -1
  833. package/lib/esm/tools/ViewTool.js.map +1 -1
  834. package/lib/esm/webgl.js.map +1 -1
  835. package/lib/public/assets/MapLayerSources.json +25 -25
  836. package/lib/public/images/cesium-ion.svg +92 -92
  837. package/lib/public/images/imodeljs-icon.svg +2 -2
  838. package/lib/public/locales/en/CoreTools.json +477 -477
  839. package/lib/public/locales/en/iModelJs.json +170 -170
  840. package/lib/public/scripts/checkbrowser.js +24 -24
  841. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"TileTreeReference.js","sourceRoot":"","sources":["../../../src/tile/TileTreeReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, BeTimePoint } from \"@itwin/core-bentley\";\r\nimport { Matrix4d, Range1d, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport { ElementAlignedBox3d, FeatureAppearanceProvider, FrustumPlanes, HiddenLine, PlanarClipMaskPriority, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { HitDetail } from \"../HitDetail\";\r\nimport { FeatureSymbology } from \"../render/FeatureSymbology\";\r\nimport { RenderClipVolume } from \"../render/RenderClipVolume\";\r\nimport { RenderMemory } from \"../render/RenderMemory\";\r\nimport { DecorateContext, SceneContext } from \"../ViewContext\";\r\nimport { ScreenViewport } from \"../Viewport\";\r\nimport {\r\n DisclosedTileTreeSet, GeometryTileTreeReference, MapLayerFeatureInfo, TileDrawArgs, TileGeometryCollector, TileTree, TileTreeLoadStatus, TileTreeOwner,\r\n} from \"./internal\";\r\n\r\n/** Describes the type of graphics produced by a [[TileTreeReference]].\r\n * @public\r\n * @extensions\r\n */\r\nexport enum TileGraphicType {\r\n /** Rendered behind all other geometry without depth. */\r\n BackgroundMap = 0,\r\n /** Rendered with normal scene graphics. */\r\n Scene = 1,\r\n /** Rendered in front of all other geometry. */\r\n Overlay = 2,\r\n}\r\n\r\n/** A reference to a [[TileTree]] suitable for drawing within a [[Viewport]]. The reference does not *own* its tile tree - it merely refers to it by\r\n * way of the tree's [[TileTreeOwner]].\r\n * The specific [[TileTree]] referenced by this object may change based on the current state of the Viewport in which it is drawn - for example,\r\n * as a result of changing the RenderMode, or animation settings, or classification settings, etc.\r\n * A reference to a TileTree is typically associated with a [[ViewState]], a [[DisplayStyleState]], or a [[Viewport]].\r\n * Multiple TileTreeReferences can refer to the same TileTree with different parameters and logic - for example, the same background map tiles can be displayed in two viewports with\r\n * differing levels of transparency.\r\n * @see [[TiledGraphicsProvider]] to supply custom [[TileTreeReference]]s to be drawn within a [[Viewport]].\r\n * @public\r\n * @extensions\r\n */\r\nexport abstract class TileTreeReference /* implements RenderMemory.Consumer */ {\r\n /** The owner of the currently-referenced [[TileTree]]. Do not store a direct reference to it, because it may change or become disposed at any time. */\r\n public abstract get treeOwner(): TileTreeOwner;\r\n\r\n /** Force a new tree owner / tile tree to be created for the current tile tree reference\r\n /* @internal */\r\n public resetTreeOwner() {}\r\n\r\n /** Disclose *all* TileTrees use by this reference. This may include things like map tiles used for draping on terrain.\r\n * Override this and call super if you have such auxiliary trees.\r\n * @note Any tree *NOT* disclosed becomes a candidate for *purging* (being unloaded from memory along with all of its tiles and graphics).\r\n */\r\n public discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n const tree = this.treeOwner.tileTree;\r\n if (undefined !== tree)\r\n trees.add(tree);\r\n }\r\n\r\n /** Adds this reference's graphics to the scene. By default this invokes [[draw]]. */\r\n public addToScene(context: SceneContext): void {\r\n const args = this.createDrawArgs(context);\r\n if (undefined !== args)\r\n this.draw(args);\r\n }\r\n\r\n /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.draw]] on the referenced TileTree, if it is loaded. */\r\n public draw(args: TileDrawArgs): void {\r\n args.tree.draw(args);\r\n }\r\n\r\n /** Optionally return a tooltip describing the hit. */\r\n public async getToolTip(_hit: HitDetail): Promise<HTMLElement | string | undefined> { return undefined; }\r\n\r\n /** Optionally return a MapLayerFeatureInfo object describing the hit.].\r\n * @alpha\r\n */\r\n public async getMapFeatureInfo(_hit: HitDetail): Promise<MapLayerFeatureInfo[] | undefined> { return undefined; }\r\n\r\n /** Optionally add any decorations specific to this reference. For example, map tile trees may add a logo image and/or copyright attributions.\r\n * @note This is currently only invoked for background maps and TiledGraphicsProviders - others have no decorations, but if they did implement this it would not be called.\r\n */\r\n public decorate(_context: DecorateContext): void { }\r\n\r\n /** Unions this reference's range with the supplied range to help compute a volume in world space for fitting a viewport to its contents.\r\n * Override this function if a reference's range should not be included in the fit range, or a range different from its tile tree's range should be used.\r\n */\r\n public unionFitRange(union: Range3d): void {\r\n const contentRange = this.computeWorldContentRange();\r\n if (!contentRange.isNull)\r\n union.extendRange(contentRange);\r\n }\r\n\r\n /** Record graphics memory consumed by this tile tree reference. */\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n const tree = this.treeOwner.tileTree;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n }\r\n\r\n /** Return true if the tile tree is fully loaded and ready to draw.\r\n * The default implementation returns true if the tile tree loading process completed (whether it resulted in success or failure).\r\n * @note Do *not* override this property - override [[_isLoadingComplete]] instead..\r\n * @public\r\n */\r\n public get isLoadingComplete(): boolean {\r\n switch (this.treeOwner.loadStatus) {\r\n case TileTreeLoadStatus.NotLoaded:\r\n case TileTreeLoadStatus.Loading:\r\n return false;\r\n case TileTreeLoadStatus.NotFound:\r\n return true; // we tried, and failed, to load.\r\n case TileTreeLoadStatus.Loaded:\r\n return this._isLoadingComplete;\r\n }\r\n }\r\n\r\n /** Override if additional asynchronous loading is required after the tile tree is successfully loaded, to indicate when that loading has completed.\r\n * @public\r\n */\r\n protected get _isLoadingComplete(): boolean {\r\n return true;\r\n }\r\n\r\n /** Create context for drawing the tile tree, if it is ready for drawing.\r\n * TileTreeReferences can override individual portions of the context, e.g. apply their own transform.\r\n * Returns undefined if, e.g., the tile tree is not yet loaded.\r\n */\r\n public createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const tree = this.treeOwner.load();\r\n if (undefined === tree)\r\n return undefined;\r\n\r\n return new TileDrawArgs({\r\n context,\r\n tree,\r\n now: BeTimePoint.now(),\r\n location: this.computeTransform(tree),\r\n viewFlagOverrides: this.getViewFlagOverrides(tree),\r\n clipVolume: this.getClipVolume(tree),\r\n parentsAndChildrenExclusive: tree.parentsAndChildrenExclusive,\r\n symbologyOverrides: this.getSymbologyOverrides(tree),\r\n appearanceProvider: this.getAppearanceProvider(tree),\r\n hiddenLineSettings: this.getHiddenLineSettings(tree),\r\n animationTransformNodeId: this.getAnimationTransformNodeId(tree),\r\n });\r\n }\r\n\r\n /** @internal */\r\n protected getAnimationTransformNodeId(_tree: TileTree): number | undefined {\r\n return undefined;\r\n }\r\n\r\n /** Supply transform from this tile tree reference's location to iModel coordinate space.\r\n * @returns undefined if the TileTree is not yet loaded.\r\n */\r\n public getLocation(): Transform | undefined {\r\n const tree = this.treeOwner.load();\r\n return undefined !== tree ? this.computeTransform(tree) : undefined;\r\n }\r\n\r\n /** Compute a transform from this tile tree reference's coordinate space to the [[IModelConnection]]'s coordinate space. */\r\n protected computeTransform(tree: TileTree): Transform {\r\n return tree.iModelTransform.clone();\r\n }\r\n\r\n /** Compute the range of this tile tree's contents in world coordinates.\r\n * @returns The content range in world coodinates, or a null range if the tile tree is not loaded or has a null content range.\r\n */\r\n public computeWorldContentRange(): ElementAlignedBox3d {\r\n const range = new Range3d();\r\n const tree = this.treeOwner.tileTree;\r\n if (undefined !== tree && !tree.rootTile.contentRange.isNull)\r\n this.computeTransform(tree).multiplyRange(tree.rootTile.contentRange, range);\r\n\r\n return range;\r\n }\r\n\r\n /** Return the clip volume applied to this reference's tile tree, if any. */\r\n protected getClipVolume(tree: TileTree): RenderClipVolume | undefined {\r\n return tree.clipVolume;\r\n }\r\n\r\n /** Supply overrides that should be applied to the [[ViewState]]'s [ViewFlags]($common) when drawing this tile tree reference. */\r\n protected getViewFlagOverrides(tree: TileTree): ViewFlagOverrides {\r\n return tree.viewFlagOverrides;\r\n }\r\n\r\n /** Return overrides that *replace* any defined for the view. */\r\n protected getSymbologyOverrides(_tree: TileTree): FeatureSymbology.Overrides | undefined {\r\n return undefined;\r\n }\r\n\r\n /** Return a provider that can supplement the view's symbology overrides. */\r\n protected getAppearanceProvider(_tree: TileTree): FeatureAppearanceProvider | undefined {\r\n return undefined;\r\n }\r\n\r\n /** Return hidden line settings to replace those defined for the view. */\r\n protected getHiddenLineSettings(_tree: TileTree): HiddenLine.Settings | undefined {\r\n return undefined;\r\n }\r\n\r\n /* Extend range to include transformed range of this tile tree.\r\n * @internal\r\n */\r\n public accumulateTransformedRange(range: Range3d, matrix: Matrix4d, frustumPlanes?: FrustumPlanes) {\r\n const tree = this.treeOwner.tileTree;\r\n if (undefined === tree)\r\n return;\r\n\r\n const location = this.computeTransform(tree);\r\n tree.accumulateTransformedRange(range, matrix, location, frustumPlanes);\r\n }\r\n\r\n /** @internal */\r\n public getTerrainHeight(_terrainHeights: Range1d): void { }\r\n\r\n /** Return whether the geometry exposed by this tile tree reference should cast shadows on other geometry. */\r\n public get castsShadows(): boolean {\r\n return true;\r\n }\r\n\r\n /** Return whether this reference has global coverage. Mapping data is global and some non-primary models such as the OSM building layer have global coverage */\r\n public get isGlobal(): boolean { return false; }\r\n\r\n /** Return the clip mask priority for this model - models will be clipped by any other viewed model with a higher proirity.\r\n * BIM models have highest prioirty and are never clipped.\r\n * @alpha\r\n */\r\n public get planarclipMaskPriority(): number { return PlanarClipMaskPriority.DesignModel; }\r\n\r\n /** Add attribution logo cards for the tile tree source logo cards to the viewport's logo div. */\r\n public addLogoCards(_cards: HTMLTableElement, _vp: ScreenViewport): void { }\r\n\r\n /** Create a tile tree reference equivalent to this one that also supplies an implementation of [[GeometryTileTreeReference.collectTileGeometry]].\r\n * Return `undefined` if geometry collection is not supported.\r\n * @see [[createGeometryTreeReference]].\r\n * @beta\r\n */\r\n protected _createGeometryTreeReference(): GeometryTileTreeReference | undefined {\r\n return undefined;\r\n }\r\n\r\n /** If defined, supplies the implementation of [[GeometryTileTreeReference.collectTileGeometry]].\r\n * @beta\r\n */\r\n public collectTileGeometry?: (collector: TileGeometryCollector) => void;\r\n\r\n /** A function that can be assigned to [[collectTileGeometry]] to enable geometry collection for references to tile trees that support geometry collection.\r\n * @beta\r\n */\r\n protected _collectTileGeometry(collector: TileGeometryCollector): void {\r\n const tree = this.treeOwner.load();\r\n switch (this.treeOwner.loadStatus) {\r\n case TileTreeLoadStatus.Loaded:\r\n assert(undefined !== tree);\r\n tree.collectTileGeometry(collector);\r\n break;\r\n case TileTreeLoadStatus.Loading:\r\n collector.markLoading();\r\n break;\r\n }\r\n }\r\n\r\n /** Obtain a tile tree reference equivalent to this one that also supplies an implementation of [[GeometryTileTreeReference.collectTileGeometry]], or\r\n * undefined if geometry collection is not supported.\r\n * Currently, only terrain and reality model tiles support geometry collection.\r\n * @note Do not override this method - override [[_createGeometryTreeReference]] instead.\r\n * @beta\r\n */\r\n public createGeometryTreeReference(): GeometryTileTreeReference | undefined {\r\n if (this.collectTileGeometry) {\r\n // Unclear why compiler doesn't detect that `this` satisfies the GeometryTileTreeReference interface...it must be looking only at the types, not this particular instance.\r\n return this as GeometryTileTreeReference;\r\n }\r\n\r\n return this._createGeometryTreeReference();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TileTreeReference.js","sourceRoot":"","sources":["../../../src/tile/TileTreeReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, BeTimePoint } from \"@itwin/core-bentley\";\nimport { Matrix4d, Range1d, Range3d, Transform } from \"@itwin/core-geometry\";\nimport { ElementAlignedBox3d, FeatureAppearanceProvider, FrustumPlanes, HiddenLine, PlanarClipMaskPriority, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { HitDetail } from \"../HitDetail\";\nimport { FeatureSymbology } from \"../render/FeatureSymbology\";\nimport { RenderClipVolume } from \"../render/RenderClipVolume\";\nimport { RenderMemory } from \"../render/RenderMemory\";\nimport { DecorateContext, SceneContext } from \"../ViewContext\";\nimport { ScreenViewport } from \"../Viewport\";\nimport {\n DisclosedTileTreeSet, GeometryTileTreeReference, MapLayerFeatureInfo, TileDrawArgs, TileGeometryCollector, TileTree, TileTreeLoadStatus, TileTreeOwner,\n} from \"./internal\";\n\n/** Describes the type of graphics produced by a [[TileTreeReference]].\n * @public\n * @extensions\n */\nexport enum TileGraphicType {\n /** Rendered behind all other geometry without depth. */\n BackgroundMap = 0,\n /** Rendered with normal scene graphics. */\n Scene = 1,\n /** Rendered in front of all other geometry. */\n Overlay = 2,\n}\n\n/** A reference to a [[TileTree]] suitable for drawing within a [[Viewport]]. The reference does not *own* its tile tree - it merely refers to it by\n * way of the tree's [[TileTreeOwner]].\n * The specific [[TileTree]] referenced by this object may change based on the current state of the Viewport in which it is drawn - for example,\n * as a result of changing the RenderMode, or animation settings, or classification settings, etc.\n * A reference to a TileTree is typically associated with a [[ViewState]], a [[DisplayStyleState]], or a [[Viewport]].\n * Multiple TileTreeReferences can refer to the same TileTree with different parameters and logic - for example, the same background map tiles can be displayed in two viewports with\n * differing levels of transparency.\n * @see [[TiledGraphicsProvider]] to supply custom [[TileTreeReference]]s to be drawn within a [[Viewport]].\n * @public\n * @extensions\n */\nexport abstract class TileTreeReference /* implements RenderMemory.Consumer */ {\n /** The owner of the currently-referenced [[TileTree]]. Do not store a direct reference to it, because it may change or become disposed at any time. */\n public abstract get treeOwner(): TileTreeOwner;\n\n /** Force a new tree owner / tile tree to be created for the current tile tree reference\n /* @internal */\n public resetTreeOwner() {}\n\n /** Disclose *all* TileTrees use by this reference. This may include things like map tiles used for draping on terrain.\n * Override this and call super if you have such auxiliary trees.\n * @note Any tree *NOT* disclosed becomes a candidate for *purging* (being unloaded from memory along with all of its tiles and graphics).\n */\n public discloseTileTrees(trees: DisclosedTileTreeSet): void {\n const tree = this.treeOwner.tileTree;\n if (undefined !== tree)\n trees.add(tree);\n }\n\n /** Adds this reference's graphics to the scene. By default this invokes [[draw]]. */\n public addToScene(context: SceneContext): void {\n const args = this.createDrawArgs(context);\n if (undefined !== args)\n this.draw(args);\n }\n\n /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.draw]] on the referenced TileTree, if it is loaded. */\n public draw(args: TileDrawArgs): void {\n args.tree.draw(args);\n }\n\n /** Optionally return a tooltip describing the hit. */\n public async getToolTip(_hit: HitDetail): Promise<HTMLElement | string | undefined> { return undefined; }\n\n /** Optionally return a MapLayerFeatureInfo object describing the hit.].\n * @alpha\n */\n public async getMapFeatureInfo(_hit: HitDetail): Promise<MapLayerFeatureInfo[] | undefined> { return undefined; }\n\n /** Optionally add any decorations specific to this reference. For example, map tile trees may add a logo image and/or copyright attributions.\n * @note This is currently only invoked for background maps and TiledGraphicsProviders - others have no decorations, but if they did implement this it would not be called.\n */\n public decorate(_context: DecorateContext): void { }\n\n /** Unions this reference's range with the supplied range to help compute a volume in world space for fitting a viewport to its contents.\n * Override this function if a reference's range should not be included in the fit range, or a range different from its tile tree's range should be used.\n */\n public unionFitRange(union: Range3d): void {\n const contentRange = this.computeWorldContentRange();\n if (!contentRange.isNull)\n union.extendRange(contentRange);\n }\n\n /** Record graphics memory consumed by this tile tree reference. */\n public collectStatistics(stats: RenderMemory.Statistics): void {\n const tree = this.treeOwner.tileTree;\n if (undefined !== tree)\n tree.collectStatistics(stats);\n }\n\n /** Return true if the tile tree is fully loaded and ready to draw.\n * The default implementation returns true if the tile tree loading process completed (whether it resulted in success or failure).\n * @note Do *not* override this property - override [[_isLoadingComplete]] instead..\n * @public\n */\n public get isLoadingComplete(): boolean {\n switch (this.treeOwner.loadStatus) {\n case TileTreeLoadStatus.NotLoaded:\n case TileTreeLoadStatus.Loading:\n return false;\n case TileTreeLoadStatus.NotFound:\n return true; // we tried, and failed, to load.\n case TileTreeLoadStatus.Loaded:\n return this._isLoadingComplete;\n }\n }\n\n /** Override if additional asynchronous loading is required after the tile tree is successfully loaded, to indicate when that loading has completed.\n * @public\n */\n protected get _isLoadingComplete(): boolean {\n return true;\n }\n\n /** Create context for drawing the tile tree, if it is ready for drawing.\n * TileTreeReferences can override individual portions of the context, e.g. apply their own transform.\n * Returns undefined if, e.g., the tile tree is not yet loaded.\n */\n public createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\n const tree = this.treeOwner.load();\n if (undefined === tree)\n return undefined;\n\n return new TileDrawArgs({\n context,\n tree,\n now: BeTimePoint.now(),\n location: this.computeTransform(tree),\n viewFlagOverrides: this.getViewFlagOverrides(tree),\n clipVolume: this.getClipVolume(tree),\n parentsAndChildrenExclusive: tree.parentsAndChildrenExclusive,\n symbologyOverrides: this.getSymbologyOverrides(tree),\n appearanceProvider: this.getAppearanceProvider(tree),\n hiddenLineSettings: this.getHiddenLineSettings(tree),\n animationTransformNodeId: this.getAnimationTransformNodeId(tree),\n });\n }\n\n /** @internal */\n protected getAnimationTransformNodeId(_tree: TileTree): number | undefined {\n return undefined;\n }\n\n /** Supply transform from this tile tree reference's location to iModel coordinate space.\n * @returns undefined if the TileTree is not yet loaded.\n */\n public getLocation(): Transform | undefined {\n const tree = this.treeOwner.load();\n return undefined !== tree ? this.computeTransform(tree) : undefined;\n }\n\n /** Compute a transform from this tile tree reference's coordinate space to the [[IModelConnection]]'s coordinate space. */\n protected computeTransform(tree: TileTree): Transform {\n return tree.iModelTransform.clone();\n }\n\n /** Compute the range of this tile tree's contents in world coordinates.\n * @returns The content range in world coodinates, or a null range if the tile tree is not loaded or has a null content range.\n */\n public computeWorldContentRange(): ElementAlignedBox3d {\n const range = new Range3d();\n const tree = this.treeOwner.tileTree;\n if (undefined !== tree && !tree.rootTile.contentRange.isNull)\n this.computeTransform(tree).multiplyRange(tree.rootTile.contentRange, range);\n\n return range;\n }\n\n /** Return the clip volume applied to this reference's tile tree, if any. */\n protected getClipVolume(tree: TileTree): RenderClipVolume | undefined {\n return tree.clipVolume;\n }\n\n /** Supply overrides that should be applied to the [[ViewState]]'s [ViewFlags]($common) when drawing this tile tree reference. */\n protected getViewFlagOverrides(tree: TileTree): ViewFlagOverrides {\n return tree.viewFlagOverrides;\n }\n\n /** Return overrides that *replace* any defined for the view. */\n protected getSymbologyOverrides(_tree: TileTree): FeatureSymbology.Overrides | undefined {\n return undefined;\n }\n\n /** Return a provider that can supplement the view's symbology overrides. */\n protected getAppearanceProvider(_tree: TileTree): FeatureAppearanceProvider | undefined {\n return undefined;\n }\n\n /** Return hidden line settings to replace those defined for the view. */\n protected getHiddenLineSettings(_tree: TileTree): HiddenLine.Settings | undefined {\n return undefined;\n }\n\n /* Extend range to include transformed range of this tile tree.\n * @internal\n */\n public accumulateTransformedRange(range: Range3d, matrix: Matrix4d, frustumPlanes?: FrustumPlanes) {\n const tree = this.treeOwner.tileTree;\n if (undefined === tree)\n return;\n\n const location = this.computeTransform(tree);\n tree.accumulateTransformedRange(range, matrix, location, frustumPlanes);\n }\n\n /** @internal */\n public getTerrainHeight(_terrainHeights: Range1d): void { }\n\n /** Return whether the geometry exposed by this tile tree reference should cast shadows on other geometry. */\n public get castsShadows(): boolean {\n return true;\n }\n\n /** Return whether this reference has global coverage. Mapping data is global and some non-primary models such as the OSM building layer have global coverage */\n public get isGlobal(): boolean { return false; }\n\n /** Return the clip mask priority for this model - models will be clipped by any other viewed model with a higher proirity.\n * BIM models have highest prioirty and are never clipped.\n * @alpha\n */\n public get planarclipMaskPriority(): number { return PlanarClipMaskPriority.DesignModel; }\n\n /** Add attribution logo cards for the tile tree source logo cards to the viewport's logo div. */\n public addLogoCards(_cards: HTMLTableElement, _vp: ScreenViewport): void { }\n\n /** Create a tile tree reference equivalent to this one that also supplies an implementation of [[GeometryTileTreeReference.collectTileGeometry]].\n * Return `undefined` if geometry collection is not supported.\n * @see [[createGeometryTreeReference]].\n * @beta\n */\n protected _createGeometryTreeReference(): GeometryTileTreeReference | undefined {\n return undefined;\n }\n\n /** If defined, supplies the implementation of [[GeometryTileTreeReference.collectTileGeometry]].\n * @beta\n */\n public collectTileGeometry?: (collector: TileGeometryCollector) => void;\n\n /** A function that can be assigned to [[collectTileGeometry]] to enable geometry collection for references to tile trees that support geometry collection.\n * @beta\n */\n protected _collectTileGeometry(collector: TileGeometryCollector): void {\n const tree = this.treeOwner.load();\n switch (this.treeOwner.loadStatus) {\n case TileTreeLoadStatus.Loaded:\n assert(undefined !== tree);\n tree.collectTileGeometry(collector);\n break;\n case TileTreeLoadStatus.Loading:\n collector.markLoading();\n break;\n }\n }\n\n /** Obtain a tile tree reference equivalent to this one that also supplies an implementation of [[GeometryTileTreeReference.collectTileGeometry]], or\n * undefined if geometry collection is not supported.\n * Currently, only terrain and reality model tiles support geometry collection.\n * @note Do not override this method - override [[_createGeometryTreeReference]] instead.\n * @beta\n */\n public createGeometryTreeReference(): GeometryTileTreeReference | undefined {\n if (this.collectTileGeometry) {\n // Unclear why compiler doesn't detect that `this` satisfies the GeometryTileTreeReference interface...it must be looking only at the types, not this particular instance.\n return this as GeometryTileTreeReference;\n }\n\n return this._createGeometryTreeReference();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TileTreeSupplier.js","sourceRoot":"","sources":["../../../src/tile/TileTreeSupplier.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { TileTree, TileTreeOwner } from \"./internal\";\r\n\r\n/** Interface adopted by an object which can supply a [[TileTree]] for rendering.\r\n * A supplier can supply any number of tile trees; the only requirement is that each tile tree has a unique identifier within the context of the supplier and a single IModelConnection.\r\n * The identifier can be any type, as only the supplier needs to be able to interpret it.\r\n * However, it is *essential* that the identifier is treated as immutable, because it is used as a lookup key in a sorted collection -\r\n * changes to its properties may affect comparison and therefore sorting order.\r\n * @see [[Tiles.getTileTreeOwner]] to obtain a tile tree from a supplier.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface TileTreeSupplier {\r\n /** Compare two tree Ids returning a negative number if `lhs` < rhs, a positive number if `lhs` > rhs, or 0 if the Ids are equivalent. */\r\n compareTileTreeIds(lhs: any, rhs: any): number;\r\n\r\n /** Produce the TileTree corresponding to the specified tree Id. The returned TileTree will be associated with its Id in a Map. */\r\n createTileTree(id: any, iModel: IModelConnection): Promise<TileTree | undefined>;\r\n\r\n /** `true` if this supplier is dependent upon the [[IModelConnection]]'s [EcefLocation]($common).\r\n * Typically this returns true for suppliers of tile trees for map tiles.\r\n * When the IModelConnection's ECEF location is modified (a relatively rare occurrence), all tile trees supplied by this supplier will be discarded, to be recreated using\r\n * the updated ECEF location whenever they are next requested.\r\n */\r\n readonly isEcefDependent?: true;\r\n\r\n /** Given the set of trees belonging to this supplier, add the modelIds associated with any trees that are animated by\r\n * the schedule script hosted by the specified RenderTimeline or DisplayStyle element.\r\n * @see [[Tiles.updateForScheduleScript]].\r\n * @internal\r\n */\r\n addModelsAnimatedByScript?: (modelIds: Set<Id64String>, scriptSourceId: Id64String, trees: Iterable<{ id: any, owner: TileTreeOwner }>) => void;\r\n\r\n /** Given the set of trees belonging to this supplier, add the modelIds associated with any trees representing spatial models.\r\n * @see [[Tiles.getSpatialModels]].\r\n * @internal\r\n */\r\n addSpatialModels?: (modelIds: Set<Id64String>, trees: Iterable<{ id: any, owner: TileTreeOwner }>) => void;\r\n}\r\n"]}
1
+ {"version":3,"file":"TileTreeSupplier.js","sourceRoot":"","sources":["../../../src/tile/TileTreeSupplier.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport { TileTree, TileTreeOwner } from \"./internal\";\n\n/** Interface adopted by an object which can supply a [[TileTree]] for rendering.\n * A supplier can supply any number of tile trees; the only requirement is that each tile tree has a unique identifier within the context of the supplier and a single IModelConnection.\n * The identifier can be any type, as only the supplier needs to be able to interpret it.\n * However, it is *essential* that the identifier is treated as immutable, because it is used as a lookup key in a sorted collection -\n * changes to its properties may affect comparison and therefore sorting order.\n * @see [[Tiles.getTileTreeOwner]] to obtain a tile tree from a supplier.\n * @public\n * @extensions\n */\nexport interface TileTreeSupplier {\n /** Compare two tree Ids returning a negative number if `lhs` < rhs, a positive number if `lhs` > rhs, or 0 if the Ids are equivalent. */\n compareTileTreeIds(lhs: any, rhs: any): number;\n\n /** Produce the TileTree corresponding to the specified tree Id. The returned TileTree will be associated with its Id in a Map. */\n createTileTree(id: any, iModel: IModelConnection): Promise<TileTree | undefined>;\n\n /** `true` if this supplier is dependent upon the [[IModelConnection]]'s [EcefLocation]($common).\n * Typically this returns true for suppliers of tile trees for map tiles.\n * When the IModelConnection's ECEF location is modified (a relatively rare occurrence), all tile trees supplied by this supplier will be discarded, to be recreated using\n * the updated ECEF location whenever they are next requested.\n */\n readonly isEcefDependent?: true;\n\n /** Given the set of trees belonging to this supplier, add the modelIds associated with any trees that are animated by\n * the schedule script hosted by the specified RenderTimeline or DisplayStyle element.\n * @see [[Tiles.updateForScheduleScript]].\n * @internal\n */\n addModelsAnimatedByScript?: (modelIds: Set<Id64String>, scriptSourceId: Id64String, trees: Iterable<{ id: any, owner: TileTreeOwner }>) => void;\n\n /** Given the set of trees belonging to this supplier, add the modelIds associated with any trees representing spatial models.\n * @see [[Tiles.getSpatialModels]].\n * @internal\n */\n addSpatialModels?: (modelIds: Set<Id64String>, trees: Iterable<{ id: any, owner: TileTreeOwner }>) => void;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TileUsageMarker.js","sourceRoot":"","sources":["../../../src/tile/TileUsageMarker.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAkD;AAClD,4CAAyC;AAGzC;;;;;;;;GAQG;AACH,MAAa,eAAe;IAG1B,+GAA+G;IAC/G;QAHQ,eAAU,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC;IAIvC,CAAC;IAED,sHAAsH;IAC/G,SAAS,CAAC,cAA2B;QAC1C,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC3E,CAAC;IAED,yEAAyE;IAClE,cAAc;QACnB,OAAO,qBAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,0GAA0G;IACnG,kBAAkB,CAAC,cAA2B;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IAED,oHAAoH;IAC7G,IAAI,CAAC,IAAc,EAAE,IAAiB;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,qBAAS,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AA3BD,0CA2BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { BeTimePoint } from \"@itwin/core-bentley\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { TileUser } from \"./internal\";\r\n\r\n/** A marker associated with a [[Tile]] to track usage of that tile by any number of [[TileUser]]s.\r\n * The marker tracks:\r\n * - the set of [[TileUser]]s by which the tile is in use for some purpose (displayed, preloaded, requested, selected for shadow map, etc); and\r\n * - the most recent time at which any tile user declared its use of the tile.\r\n * The marker is used to allow tiles to be discarded after they become disused by any tile user, via [[Tile.prune]].\r\n * @see [[Tile.usageMarker]].\r\n * @public\r\n * @extensions\r\n */\r\nexport class TileUsageMarker {\r\n private _timePoint = BeTimePoint.now();\r\n\r\n /** Constructs a usage marker with its timepoint set to the current time and its set of [[TileUser]]s empty. */\r\n public constructor() {\r\n }\r\n\r\n /** Returns true if this tile is currently in use by no [[TileUser]]s and its timestamp pre-dates `expirationTime`. */\r\n public isExpired(expirationTime: BeTimePoint): boolean {\r\n return this.isTimestampExpired(expirationTime) && !this.getIsTileInUse();\r\n }\r\n\r\n /** Returns true if this tile is currently in use by any [[TileUser]]. */\r\n public getIsTileInUse(): boolean {\r\n return IModelApp.tileAdmin.isTileInUse(this);\r\n }\r\n\r\n /** Returns true if this tile's timestamp pre-dates `expirationTime`, without checking if it is in use. */\r\n public isTimestampExpired(expirationTime: BeTimePoint): boolean {\r\n return this._timePoint.before(expirationTime);\r\n }\r\n\r\n /** Updates the timestamp to the specified time and marks the tile as being in use by the specified [[TileUser]]. */\r\n public mark(user: TileUser, time: BeTimePoint): void {\r\n this._timePoint = time;\r\n IModelApp.tileAdmin.markTileUsed(this, user);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TileUsageMarker.js","sourceRoot":"","sources":["../../../src/tile/TileUsageMarker.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAkD;AAClD,4CAAyC;AAGzC;;;;;;;;GAQG;AACH,MAAa,eAAe;IAG1B,+GAA+G;IAC/G;QAHQ,eAAU,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC;IAIvC,CAAC;IAED,sHAAsH;IAC/G,SAAS,CAAC,cAA2B;QAC1C,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC3E,CAAC;IAED,yEAAyE;IAClE,cAAc;QACnB,OAAO,qBAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,0GAA0G;IACnG,kBAAkB,CAAC,cAA2B;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IAED,oHAAoH;IAC7G,IAAI,CAAC,IAAc,EAAE,IAAiB;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,qBAAS,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AA3BD,0CA2BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { BeTimePoint } from \"@itwin/core-bentley\";\nimport { IModelApp } from \"../IModelApp\";\nimport { TileUser } from \"./internal\";\n\n/** A marker associated with a [[Tile]] to track usage of that tile by any number of [[TileUser]]s.\n * The marker tracks:\n * - the set of [[TileUser]]s by which the tile is in use for some purpose (displayed, preloaded, requested, selected for shadow map, etc); and\n * - the most recent time at which any tile user declared its use of the tile.\n * The marker is used to allow tiles to be discarded after they become disused by any tile user, via [[Tile.prune]].\n * @see [[Tile.usageMarker]].\n * @public\n * @extensions\n */\nexport class TileUsageMarker {\n private _timePoint = BeTimePoint.now();\n\n /** Constructs a usage marker with its timepoint set to the current time and its set of [[TileUser]]s empty. */\n public constructor() {\n }\n\n /** Returns true if this tile is currently in use by no [[TileUser]]s and its timestamp pre-dates `expirationTime`. */\n public isExpired(expirationTime: BeTimePoint): boolean {\n return this.isTimestampExpired(expirationTime) && !this.getIsTileInUse();\n }\n\n /** Returns true if this tile is currently in use by any [[TileUser]]. */\n public getIsTileInUse(): boolean {\n return IModelApp.tileAdmin.isTileInUse(this);\n }\n\n /** Returns true if this tile's timestamp pre-dates `expirationTime`, without checking if it is in use. */\n public isTimestampExpired(expirationTime: BeTimePoint): boolean {\n return this._timePoint.before(expirationTime);\n }\n\n /** Updates the timestamp to the specified time and marks the tile as being in use by the specified [[TileUser]]. */\n public mark(user: TileUser, time: BeTimePoint): void {\n this._timePoint = time;\n IModelApp.tileAdmin.markTileUsed(this, user);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TileUser.js","sourceRoot":"","sources":["../../../src/tile/TileUser.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,0CAAuC;AAwBvC,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,cAAc;AACd,IAAiB,QAAQ,CAWxB;AAXD,WAAiB,QAAQ;IACvB,SAAgB,UAAU;QACxB,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAFe,mBAAU,aAEzB,CAAA;IAED,4DAA4D;IAC5D,QAAgB,CAAC,CAAC,kBAAkB,CAAC,KAAyB;QAC5D,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,IAAI,YAAY,mBAAQ;gBAC1B,MAAM,IAAI,CAAC;IACjB,CAAC;IAJiB,2BAAkB,qBAInC,CAAA;AACH,CAAC,EAXgB,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAWxB","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { DisclosedTileTreeSet, TileRequest } from \"./internal\";\r\n\r\n/** Represents some object that makes use of [[Tile]]s in some way - e.g., by requesting and/or displaying their contents, querying their geometry, etc.\r\n * Each [[Tile]] keeps track of its users via its [[TileUsageMarker]]. A tile with no users is eligible to be discarded view [[Tile.prune]].\r\n * Every [[Viewport]] is a tile user. It is occasionally useful to have a tile user that is **not** a viewport.\r\n * Every TileUser is identified by an integer Id that is unique among all extant TileUsers. This Id **must** be obtained via [[TileUser.generateId]].\r\n * Every TileUser must be registered with [[IModelApp.tileAdmin]] before use via [[TileAdmin.registerUser]] and unregistered via [[TileAdmin.forgetUser]] after\r\n * it ceases using tiles.\r\n * @public\r\n */\r\nexport interface TileUser {\r\n /** A unique integer identifying this user amongst all extant users. This Id **must** be obtained via [[TIleUser.generateId]]. */\r\n readonly tileUserId: number;\r\n /** The iModel with which the user is associated. */\r\n readonly iModel: IModelConnection;\r\n /** Disclose all tile trees currently in use by this user. Any tile tree not disclosed by any user becomes eligible for garbage collection. */\r\n readonly discloseTileTrees: (trees: DisclosedTileTreeSet) => void;\r\n /** An optional function invoked when a [[TileRequest]] associated with a [[Tile]] in use by this user changes state - e.g., when the request completes, fails, or\r\n * is cancelled. For example, a [[Viewport]] responds to such events by invalidating its scene.\r\n */\r\n readonly onRequestStateChanged?: (req: TileRequest) => void;\r\n}\r\n\r\nlet nextUserId = 1;\r\n\r\n/** @public */\r\nexport namespace TileUser {\r\n export function generateId(): number {\r\n return nextUserId++;\r\n }\r\n\r\n /** Iterate the subset of `users` that are [[Viewport]]s. */\r\n export function * viewportsFromUsers(users: Iterable<TileUser>): Iterable<Viewport> {\r\n for (const user of users)\r\n if (user instanceof Viewport)\r\n yield user;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TileUser.js","sourceRoot":"","sources":["../../../src/tile/TileUser.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,0CAAuC;AAwBvC,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,cAAc;AACd,IAAiB,QAAQ,CAWxB;AAXD,WAAiB,QAAQ;IACvB,SAAgB,UAAU;QACxB,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAFe,mBAAU,aAEzB,CAAA;IAED,4DAA4D;IAC5D,QAAgB,CAAC,CAAC,kBAAkB,CAAC,KAAyB;QAC5D,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,IAAI,YAAY,mBAAQ;gBAC1B,MAAM,IAAI,CAAC;IACjB,CAAC;IAJiB,2BAAkB,qBAInC,CAAA;AACH,CAAC,EAXgB,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAWxB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { IModelConnection } from \"../IModelConnection\";\nimport { Viewport } from \"../Viewport\";\nimport { DisclosedTileTreeSet, TileRequest } from \"./internal\";\n\n/** Represents some object that makes use of [[Tile]]s in some way - e.g., by requesting and/or displaying their contents, querying their geometry, etc.\n * Each [[Tile]] keeps track of its users via its [[TileUsageMarker]]. A tile with no users is eligible to be discarded view [[Tile.prune]].\n * Every [[Viewport]] is a tile user. It is occasionally useful to have a tile user that is **not** a viewport.\n * Every TileUser is identified by an integer Id that is unique among all extant TileUsers. This Id **must** be obtained via [[TileUser.generateId]].\n * Every TileUser must be registered with [[IModelApp.tileAdmin]] before use via [[TileAdmin.registerUser]] and unregistered via [[TileAdmin.forgetUser]] after\n * it ceases using tiles.\n * @public\n */\nexport interface TileUser {\n /** A unique integer identifying this user amongst all extant users. This Id **must** be obtained via [[TIleUser.generateId]]. */\n readonly tileUserId: number;\n /** The iModel with which the user is associated. */\n readonly iModel: IModelConnection;\n /** Disclose all tile trees currently in use by this user. Any tile tree not disclosed by any user becomes eligible for garbage collection. */\n readonly discloseTileTrees: (trees: DisclosedTileTreeSet) => void;\n /** An optional function invoked when a [[TileRequest]] associated with a [[Tile]] in use by this user changes state - e.g., when the request completes, fails, or\n * is cancelled. For example, a [[Viewport]] responds to such events by invalidating its scene.\n */\n readonly onRequestStateChanged?: (req: TileRequest) => void;\n}\n\nlet nextUserId = 1;\n\n/** @public */\nexport namespace TileUser {\n export function generateId(): number {\n return nextUserId++;\n }\n\n /** Iterate the subset of `users` that are [[Viewport]]s. */\n export function * viewportsFromUsers(users: Iterable<TileUser>): Iterable<Viewport> {\n for (const user of users)\n if (user instanceof Viewport)\n yield user;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TileUserSet.js","sourceRoot":"","sources":["../../../src/tile/TileUserSet.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 { ReadonlySortedArray, SortedArray } from \"@itwin/core-bentley\";\r\nimport { TileUser } from \"./internal\";\r\n\r\n/** An immutable set of [[TileUser]]s wherein uniqueness is determined by each TileUser's unique integer identifier.\r\n * @see [[UniqueTileUserSets]].\r\n * @internal\r\n */\r\nexport class ReadonlyTileUserSet extends ReadonlySortedArray<TileUser> {\r\n public constructor(user?: TileUser) {\r\n super((lhs, rhs) => lhs.tileUserId - rhs.tileUserId);\r\n if (undefined !== user)\r\n this._array.push(user);\r\n }\r\n}\r\n\r\nclass TileUserSet extends ReadonlyTileUserSet {\r\n public copyFrom(src: ReadonlyTileUserSet): void {\r\n this._array.length = src.length;\r\n let i = 0;\r\n for (const user of src)\r\n this._array[i++] = user;\r\n }\r\n\r\n public clone(): TileUserSet {\r\n const clone = new TileUserSet();\r\n clone.copyFrom(this);\r\n return clone;\r\n }\r\n\r\n public insert(user: TileUser): number { return this._insert(user); }\r\n public remove(user: TileUser): number { return this._remove(user); }\r\n public clear(): void { this._clear(); }\r\n}\r\n\r\nfunction compareTileUserSets(lhs: TileUserSet, rhs: TileUserSet): number {\r\n if (lhs === rhs)\r\n return 0;\r\n\r\n let diff = lhs.length - rhs.length;\r\n if (0 === diff) {\r\n for (let i = 0; i < lhs.length; i++) {\r\n diff = lhs.get(i)!.tileUserId - rhs.get(i)!.tileUserId;\r\n if (0 !== diff)\r\n break;\r\n }\r\n }\r\n\r\n return diff;\r\n}\r\n\r\nconst emptySet = new ReadonlyTileUserSet();\r\nconst scratchSet = new TileUserSet();\r\n\r\nclass TileUserSetSet extends SortedArray<TileUserSet> {\r\n public constructor() {\r\n super((lhs, rhs) => compareTileUserSets(lhs, rhs));\r\n }\r\n\r\n private getForUser(user: TileUser): TileUserSet {\r\n for (let i = 0; i < this.length; i++) {\r\n const set = this._array[i];\r\n if (1 === set.length && set.get(0)! === user)\r\n return set;\r\n }\r\n\r\n const newSet = new TileUserSet(user);\r\n this.insert(newSet);\r\n return newSet;\r\n }\r\n\r\n public getTileUserSet(user: TileUser, users?: ReadonlyTileUserSet): TileUserSet {\r\n if (undefined === users || users.isEmpty)\r\n return this.getForUser(user);\r\n\r\n // Use the scratch set for equality comparison - only allocate if no equivalent set already exists.\r\n const toFind = scratchSet;\r\n toFind.copyFrom(users);\r\n toFind.insert(user);\r\n const found = this.findEqual(toFind);\r\n if (undefined !== found) {\r\n toFind.clear();\r\n return found;\r\n }\r\n\r\n const newSet = toFind.clone();\r\n toFind.clear();\r\n this.insert(newSet);\r\n return newSet;\r\n }\r\n\r\n public clearAll(): void {\r\n this.forEach((set) => set.clear());\r\n this.clear();\r\n }\r\n\r\n public forgetUser(user: TileUser): void {\r\n for (const set of this)\r\n set.remove(user);\r\n }\r\n}\r\n\r\n/** Maintains a set of [[TileUserSets]] designed to minimize duplication.\r\n * For example, the tile request scheduler needs to associate with each [[TileRequest]] the set of [[TileUser]]s awaiting the request's response.\r\n * Using UniqueTileUserSets ensures all tiles requested by the same user use the same TileUserSet object.\r\n * Additionally, whenever a user is unregistered there is no need to track down every associated tile request - the user can just be removed from the TileUserSets managed by this object.\r\n * The TileUserSets managed by this object should be treated as immutable - \"adding\" a user to an existing set should be done using [[getTileUserSet]].\r\n * @internal\r\n */\r\nexport class UniqueTileUserSets {\r\n private readonly _sets = new TileUserSetSet();\r\n\r\n public getTileUserSet(user: TileUser, users?: ReadonlyTileUserSet): ReadonlyTileUserSet {\r\n return this._sets.getTileUserSet(user, users);\r\n }\r\n\r\n public clearAll(): void {\r\n this._sets.clearAll();\r\n }\r\n\r\n public clear(): void {\r\n this._sets.clear();\r\n }\r\n\r\n public remove(user: TileUser): void {\r\n this._sets.forgetUser(user);\r\n }\r\n\r\n public static get emptySet(): ReadonlyTileUserSet {\r\n return emptySet;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TileUserSet.js","sourceRoot":"","sources":["../../../src/tile/TileUserSet.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\n\nimport { ReadonlySortedArray, SortedArray } from \"@itwin/core-bentley\";\nimport { TileUser } from \"./internal\";\n\n/** An immutable set of [[TileUser]]s wherein uniqueness is determined by each TileUser's unique integer identifier.\n * @see [[UniqueTileUserSets]].\n * @internal\n */\nexport class ReadonlyTileUserSet extends ReadonlySortedArray<TileUser> {\n public constructor(user?: TileUser) {\n super((lhs, rhs) => lhs.tileUserId - rhs.tileUserId);\n if (undefined !== user)\n this._array.push(user);\n }\n}\n\nclass TileUserSet extends ReadonlyTileUserSet {\n public copyFrom(src: ReadonlyTileUserSet): void {\n this._array.length = src.length;\n let i = 0;\n for (const user of src)\n this._array[i++] = user;\n }\n\n public clone(): TileUserSet {\n const clone = new TileUserSet();\n clone.copyFrom(this);\n return clone;\n }\n\n public insert(user: TileUser): number { return this._insert(user); }\n public remove(user: TileUser): number { return this._remove(user); }\n public clear(): void { this._clear(); }\n}\n\nfunction compareTileUserSets(lhs: TileUserSet, rhs: TileUserSet): number {\n if (lhs === rhs)\n return 0;\n\n let diff = lhs.length - rhs.length;\n if (0 === diff) {\n for (let i = 0; i < lhs.length; i++) {\n diff = lhs.get(i)!.tileUserId - rhs.get(i)!.tileUserId;\n if (0 !== diff)\n break;\n }\n }\n\n return diff;\n}\n\nconst emptySet = new ReadonlyTileUserSet();\nconst scratchSet = new TileUserSet();\n\nclass TileUserSetSet extends SortedArray<TileUserSet> {\n public constructor() {\n super((lhs, rhs) => compareTileUserSets(lhs, rhs));\n }\n\n private getForUser(user: TileUser): TileUserSet {\n for (let i = 0; i < this.length; i++) {\n const set = this._array[i];\n if (1 === set.length && set.get(0)! === user)\n return set;\n }\n\n const newSet = new TileUserSet(user);\n this.insert(newSet);\n return newSet;\n }\n\n public getTileUserSet(user: TileUser, users?: ReadonlyTileUserSet): TileUserSet {\n if (undefined === users || users.isEmpty)\n return this.getForUser(user);\n\n // Use the scratch set for equality comparison - only allocate if no equivalent set already exists.\n const toFind = scratchSet;\n toFind.copyFrom(users);\n toFind.insert(user);\n const found = this.findEqual(toFind);\n if (undefined !== found) {\n toFind.clear();\n return found;\n }\n\n const newSet = toFind.clone();\n toFind.clear();\n this.insert(newSet);\n return newSet;\n }\n\n public clearAll(): void {\n this.forEach((set) => set.clear());\n this.clear();\n }\n\n public forgetUser(user: TileUser): void {\n for (const set of this)\n set.remove(user);\n }\n}\n\n/** Maintains a set of [[TileUserSets]] designed to minimize duplication.\n * For example, the tile request scheduler needs to associate with each [[TileRequest]] the set of [[TileUser]]s awaiting the request's response.\n * Using UniqueTileUserSets ensures all tiles requested by the same user use the same TileUserSet object.\n * Additionally, whenever a user is unregistered there is no need to track down every associated tile request - the user can just be removed from the TileUserSets managed by this object.\n * The TileUserSets managed by this object should be treated as immutable - \"adding\" a user to an existing set should be done using [[getTileUserSet]].\n * @internal\n */\nexport class UniqueTileUserSets {\n private readonly _sets = new TileUserSetSet();\n\n public getTileUserSet(user: TileUser, users?: ReadonlyTileUserSet): ReadonlyTileUserSet {\n return this._sets.getTileUserSet(user, users);\n }\n\n public clearAll(): void {\n this._sets.clearAll();\n }\n\n public clear(): void {\n this._sets.clear();\n }\n\n public remove(user: TileUser): void {\n this._sets.forgetUser(user);\n }\n\n public static get emptySet(): ReadonlyTileUserSet {\n return emptySet;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TiledGraphicsProvider.js","sourceRoot":"","sources":["../../../src/tile/TiledGraphicsProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AA8BH,cAAc;AACd,IAAiB,qBAAqB,CAqBrC;AArBD,WAAiB,qBAAqB;IACpC,2FAA2F;IAC3F,SAAgB,UAAU,CAAC,QAA+B,EAAE,OAAqB;QAC/E,IAAI,QAAQ,CAAC,UAAU;YACrB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;;YAE7B,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,CAAC;IALe,gCAAU,aAKzB,CAAA;IAED,2FAA2F;IAC3F,SAAgB,iBAAiB,CAAC,QAA+B,EAAE,QAAkB;QACnF,IAAI,QAAQ,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YACrE,OAAO,KAAK,CAAC;QAEf,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5C,SAAS,KAAK,GAAG,CAAC,iBAAiB,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAVe,uCAAiB,oBAUhC,CAAA;AACH,CAAC,EArBgB,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QAqBrC","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 Views\r\n */\r\n\r\nimport { Viewport } from \"../Viewport\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { TileTreeReference } from \"./internal\";\r\n\r\n/** Provides a way for applications to inject additional non-decorative graphics into a [[Viewport]] by supplying one or more [[TileTreeReference]]s capable of loading and drawing the graphics.\r\n * @see [[Viewport.addTiledGraphicsProvider]] to register a provider to be drawn in a viewport.\r\n * @see [Exploded View Sample](https://www.itwinjs.org/sample-showcase/?group=Viewer+Features&sample=explode-sample&imodel=House+Sample) for an interactive\r\n * demonstration of a custom provider.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface TiledGraphicsProvider {\r\n /** For each [[TileTreeReference]] belonging to this provider that should be drawn in the specified [[Viewport]], apply the provided function. */\r\n forEachTileTreeRef(viewport: Viewport, func: (ref: TileTreeReference) => void): void;\r\n\r\n /** If defined, overrides the logic for adding this provider's graphics into the scene.\r\n * Otherwise, [[TileTreeReference.addToScene]] is invoked for each reference.\r\n */\r\n addToScene?: (context: SceneContext) => void;\r\n\r\n /** If defined, returns true if the [[TileTree]]s required for displaying this provider's graphics in the specified [[Viewport]] are loaded and ready to draw.\r\n * Otherwise, [[TileTreeReference.isLoadingComplete]] is invoked for each reference.\r\n * A provider might supply this function if it needs to perform some asynchronous work before it can supply its [[TileTreeReference]]s and/or after its\r\n * [[TileTree]]s are loaded.\r\n */\r\n isLoadingComplete?: (viewport: Viewport) => boolean;\r\n}\r\n\r\n/** @public */\r\nexport namespace TiledGraphicsProvider {\r\n /** @internal because TypeDoc can't disambiguate with the interface method by same name. */\r\n export function addToScene(provider: TiledGraphicsProvider, context: SceneContext): void {\r\n if (provider.addToScene)\r\n provider.addToScene(context);\r\n else\r\n provider.forEachTileTreeRef(context.viewport, (ref) => ref.addToScene(context));\r\n }\r\n\r\n /** @internal because TypeDoc can't disambiguate with the interface method by same name. */\r\n export function isLoadingComplete(provider: TiledGraphicsProvider, viewport: Viewport): boolean {\r\n if (provider.isLoadingComplete && !provider.isLoadingComplete(viewport))\r\n return false;\r\n\r\n let allLoaded = true;\r\n provider.forEachTileTreeRef(viewport, (ref) => {\r\n allLoaded &&= ref.isLoadingComplete;\r\n });\r\n\r\n return allLoaded;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TiledGraphicsProvider.js","sourceRoot":"","sources":["../../../src/tile/TiledGraphicsProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AA8BH,cAAc;AACd,IAAiB,qBAAqB,CAqBrC;AArBD,WAAiB,qBAAqB;IACpC,2FAA2F;IAC3F,SAAgB,UAAU,CAAC,QAA+B,EAAE,OAAqB;QAC/E,IAAI,QAAQ,CAAC,UAAU;YACrB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;;YAE7B,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,CAAC;IALe,gCAAU,aAKzB,CAAA;IAED,2FAA2F;IAC3F,SAAgB,iBAAiB,CAAC,QAA+B,EAAE,QAAkB;QACnF,IAAI,QAAQ,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YACrE,OAAO,KAAK,CAAC;QAEf,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5C,SAAS,KAAK,GAAG,CAAC,iBAAiB,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAVe,uCAAiB,oBAUhC,CAAA;AACH,CAAC,EArBgB,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QAqBrC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { Viewport } from \"../Viewport\";\nimport { SceneContext } from \"../ViewContext\";\nimport { TileTreeReference } from \"./internal\";\n\n/** Provides a way for applications to inject additional non-decorative graphics into a [[Viewport]] by supplying one or more [[TileTreeReference]]s capable of loading and drawing the graphics.\n * @see [[Viewport.addTiledGraphicsProvider]] to register a provider to be drawn in a viewport.\n * @see [Exploded View Sample](https://www.itwinjs.org/sample-showcase/?group=Viewer+Features&sample=explode-sample&imodel=House+Sample) for an interactive\n * demonstration of a custom provider.\n * @public\n * @extensions\n */\nexport interface TiledGraphicsProvider {\n /** For each [[TileTreeReference]] belonging to this provider that should be drawn in the specified [[Viewport]], apply the provided function. */\n forEachTileTreeRef(viewport: Viewport, func: (ref: TileTreeReference) => void): void;\n\n /** If defined, overrides the logic for adding this provider's graphics into the scene.\n * Otherwise, [[TileTreeReference.addToScene]] is invoked for each reference.\n */\n addToScene?: (context: SceneContext) => void;\n\n /** If defined, returns true if the [[TileTree]]s required for displaying this provider's graphics in the specified [[Viewport]] are loaded and ready to draw.\n * Otherwise, [[TileTreeReference.isLoadingComplete]] is invoked for each reference.\n * A provider might supply this function if it needs to perform some asynchronous work before it can supply its [[TileTreeReference]]s and/or after its\n * [[TileTree]]s are loaded.\n */\n isLoadingComplete?: (viewport: Viewport) => boolean;\n}\n\n/** @public */\nexport namespace TiledGraphicsProvider {\n /** @internal because TypeDoc can't disambiguate with the interface method by same name. */\n export function addToScene(provider: TiledGraphicsProvider, context: SceneContext): void {\n if (provider.addToScene)\n provider.addToScene(context);\n else\n provider.forEachTileTreeRef(context.viewport, (ref) => ref.addToScene(context));\n }\n\n /** @internal because TypeDoc can't disambiguate with the interface method by same name. */\n export function isLoadingComplete(provider: TiledGraphicsProvider, viewport: Viewport): boolean {\n if (provider.isLoadingComplete && !provider.isLoadingComplete(viewport))\n return false;\n\n let allLoaded = true;\n provider.forEachTileTreeRef(viewport, (ref) => {\n allLoaded &&= ref.isLoadingComplete;\n });\n\n return allLoaded;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewFlagOverrides.js","sourceRoot":"","sources":["../../../src/tile/ViewFlagOverrides.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAA8E;AAE9E;;;GAGG;AACH,SAAgB,8BAA8B,CAAC,OAA0F;IACvI,MAAM,QAAQ,GAAG,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,SAAS,GAAG,uBAAS,CAAC,QAAQ,CAAC;QACnC,UAAU,EAAE,wBAAU,CAAC,WAAW;QAClC,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;QACxB,YAAY,EAAE,QAAQ;QACtB,OAAO,EAAE,OAAO,CAAC,UAAU;QAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,sBAAsB,EAAE,IAAI;QAC5B,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAsB,EAAE,GAAG,SAAS,EAAE,CAAC;IACjD,IAAI,SAAS,KAAK,OAAO,CAAC,UAAU;QAClC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAE9B,IAAI,SAAS,KAAK,OAAO,CAAC,OAAO;QAC/B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAE3B,IAAI,SAAS,KAAK,OAAO,CAAC,QAAQ;QAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAE5B,IAAI,SAAS,KAAK,OAAO,CAAC,QAAQ;QAChC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IAEnC,OAAO,IAAI,CAAC;AACd,CAAC;AA3BD,wEA2BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { RenderMode, ViewFlagOverrides, ViewFlags } from \"@itwin/core-common\";\r\n\r\n/** Create ViewFlagOverrides suitable for most non-iModel tile trees (reality/map tiles).\r\n * @param options Customize the overrides. Any properties left unspecified use the current view settings, except white-on-white reversal is always disabled.\r\n * @internal\r\n */\r\nexport function createDefaultViewFlagOverrides(options: { clipVolume?: boolean, shadows?: boolean, lighting?: boolean, thematic?: false }): ViewFlagOverrides {\r\n const noLights = undefined !== options.lighting ? !options.lighting : undefined;\r\n const viewflags = ViewFlags.fromJSON({\r\n renderMode: RenderMode.SmoothShade,\r\n noCameraLights: noLights,\r\n noSourceLights: noLights,\r\n noSolarLight: noLights,\r\n clipVol: options.clipVolume,\r\n shadows: options.shadows,\r\n noWhiteOnWhiteReversal: true,\r\n thematicDisplay: false,\r\n });\r\n\r\n const ovrs: ViewFlagOverrides = { ...viewflags };\r\n if (undefined === options.clipVolume)\r\n ovrs.clipVolume = undefined;\r\n\r\n if (undefined === options.shadows)\r\n ovrs.shadows = undefined;\r\n\r\n if (undefined === options.lighting)\r\n ovrs.lighting = undefined;\r\n\r\n if (undefined === options.thematic)\r\n ovrs.thematicDisplay = undefined;\r\n\r\n return ovrs;\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewFlagOverrides.js","sourceRoot":"","sources":["../../../src/tile/ViewFlagOverrides.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAA8E;AAE9E;;;GAGG;AACH,SAAgB,8BAA8B,CAAC,OAA0F;IACvI,MAAM,QAAQ,GAAG,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,SAAS,GAAG,uBAAS,CAAC,QAAQ,CAAC;QACnC,UAAU,EAAE,wBAAU,CAAC,WAAW;QAClC,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;QACxB,YAAY,EAAE,QAAQ;QACtB,OAAO,EAAE,OAAO,CAAC,UAAU;QAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,sBAAsB,EAAE,IAAI;QAC5B,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAsB,EAAE,GAAG,SAAS,EAAE,CAAC;IACjD,IAAI,SAAS,KAAK,OAAO,CAAC,UAAU;QAClC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAE9B,IAAI,SAAS,KAAK,OAAO,CAAC,OAAO;QAC/B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAE3B,IAAI,SAAS,KAAK,OAAO,CAAC,QAAQ;QAChC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAE5B,IAAI,SAAS,KAAK,OAAO,CAAC,QAAQ;QAChC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IAEnC,OAAO,IAAI,CAAC;AACd,CAAC;AA3BD,wEA2BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { RenderMode, ViewFlagOverrides, ViewFlags } from \"@itwin/core-common\";\n\n/** Create ViewFlagOverrides suitable for most non-iModel tile trees (reality/map tiles).\n * @param options Customize the overrides. Any properties left unspecified use the current view settings, except white-on-white reversal is always disabled.\n * @internal\n */\nexport function createDefaultViewFlagOverrides(options: { clipVolume?: boolean, shadows?: boolean, lighting?: boolean, thematic?: false }): ViewFlagOverrides {\n const noLights = undefined !== options.lighting ? !options.lighting : undefined;\n const viewflags = ViewFlags.fromJSON({\n renderMode: RenderMode.SmoothShade,\n noCameraLights: noLights,\n noSourceLights: noLights,\n noSolarLight: noLights,\n clipVol: options.clipVolume,\n shadows: options.shadows,\n noWhiteOnWhiteReversal: true,\n thematicDisplay: false,\n });\n\n const ovrs: ViewFlagOverrides = { ...viewflags };\n if (undefined === options.clipVolume)\n ovrs.clipVolume = undefined;\n\n if (undefined === options.shadows)\n ovrs.shadows = undefined;\n\n if (undefined === options.lighting)\n ovrs.lighting = undefined;\n\n if (undefined === options.thematic)\n ovrs.thematicDisplay = undefined;\n\n return ovrs;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/tile/internal.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;;;;;;;;;;AAEH;;;;;;;;GAQG;AAEH,sDAAoC;AACpC,0DAAwC;AACxC,+CAA6B;AAC7B,yDAAuC;AACvC,yCAAuB;AACvB,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,iDAA+B;AAC/B,wDAAsC;AACtC,sDAAoC;AACpC,qDAAmC;AACnC,mDAAiC;AACjC,6CAA2B;AAC3B,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,sDAAoC;AACpC,0DAAwC;AACxC,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,8DAA4C;AAC5C,wDAAsC;AACtC,oDAAkC;AAClC,6CAA2B;AAC3B,gDAA8B;AAC9B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,sDAAoC;AACpC,+DAA6C;AAC7C,uDAAqC;AACrC,+DAA6C;AAC7C,wDAAsC;AACtC,qDAAmC;AACnC,wDAAsC;AACtC,yDAAuC;AACvC,gEAA8C;AAC9C,+EAA6D;AAC7D,uFAAqE;AACrE,uFAAqE;AACrE,6EAA2D;AAC3D,oFAAkE;AAClE,gFAA8D;AAC9D,oFAAkE;AAClE,qFAAmE;AACnE,+DAA6C;AAC7C,kEAAgD;AAChD,oDAAkC;AAClC,4DAA0C;AAC1C,wDAAsC;AACtC,8DAA4C;AAC5C,iEAA+C;AAC/C,gDAA8B;AAC9B,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,wDAAsC;AACtC,4DAA0C;AAC1C,+CAA6B;AAC7B,yDAAuC;AACvC,+CAA6B;AAC7B,sDAAoC;AACpC,mDAAiC;AACjC,oDAAkC;AAClC,uDAAqC;AACrC,oDAAkC;AAClC,wDAAsC;AACtC,wDAAsC;AACtC,iEAA+C;AAC/C,wDAAsC;AACtC,yDAAuC;AACvC,gEAA8C;AAC9C,yDAAuC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\n/* The order of exports below is based on dependencies between the types in each file.\r\n * For example, IModelTileTree derives from TileTree, so TileTree must be exported first.\r\n * No file inside core-frontend should import from *any* file in /tile/ *except* for this one.\r\n * e.g.:\r\n * import { TileTree } from \"./tile/TileTree\"; // NO...\r\n * import { TileTree } from \"./tile/internal\"; // YES!\r\n * Failure to follow either of these two guidelines is very likely to produce difficult-to-debug run-time errors due\r\n * to circular dependencies.\r\n */\r\n\r\nexport * from \"./ViewFlagOverrides\";\r\nexport * from \"./map/MapCartoRectangle\";\r\nexport * from \"./map/QuadId\";\r\nexport * from \"./DisclosedTileTreeSet\";\r\nexport * from \"./Tile\";\r\nexport * from \"./LRUTileList\";\r\nexport * from \"./RealityTile\";\r\nexport * from \"./TileParams\";\r\nexport * from \"./TileContent\";\r\nexport * from \"./TileDrawArgs\";\r\nexport * from \"./RealityTileDrawArgs\";\r\nexport * from \"./GraphicsCollector\";\r\nexport * from \"./BatchedTileIdMap\";\r\nexport * from \"./TileTreeParams\";\r\nexport * from \"./TileTree\";\r\nexport * from \"./RealityTileTree\";\r\nexport * from \"./TileTreeSupplier\";\r\nexport * from \"./TileTreeOwner\";\r\nexport * from \"./TileTreeReference\";\r\nexport * from \"./TileGeometryCollector\";\r\nexport * from \"./TiledGraphicsProvider\";\r\nexport * from \"./TileAdmin\";\r\nexport * from \"./TileStorage\";\r\nexport * from \"./TileRequest\";\r\nexport * from \"./TileRequestChannel\";\r\nexport * from \"./IModelTileRequestChannels\";\r\nexport * from \"./TileRequestChannels\";\r\nexport * from \"./TileUsageMarker\";\r\nexport * from \"./TileUser\";\r\nexport * from \"./TileUserSet\";\r\nexport * from \"./GltfReader\";\r\nexport * from \"./I3dmReader\";\r\nexport * from \"./B3dmReader\";\r\nexport * from \"./ImdlReader\";\r\nexport * from \"./map/ArcGISTileMap\";\r\nexport * from \"./map/MapLayerAuthentication\";\r\nexport * from \"./map/MapFeatureInfo\";\r\nexport * from \"./map/MapLayerFormatRegistry\";\r\nexport * from \"./map/ArcGisUtilities\";\r\nexport * from \"./map/WmsUtilities\";\r\nexport * from \"./map/WmsCapabilities\";\r\nexport * from \"./map/WmtsCapabilities\";\r\nexport * from \"./map/MapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/ArcGISImageryProvider\";\r\nexport * from \"./map/ImageryProviders/ArcGISMapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/AzureMapsLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/BingImageryProvider\";\r\nexport * from \"./map/ImageryProviders/MapBoxLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/TileUrlImageryProvider\";\r\nexport * from \"./map/ImageryProviders/WmsMapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/WmtsMapLayerImageryProvider\";\r\nexport * from \"./map/MapLayerImageryFormats\";\r\nexport * from \"./map/MapLayerTileTreeReference\";\r\nexport * from \"./map/MapTileTree\";\r\nexport * from \"./map/TerrainMeshProvider\";\r\nexport * from \"./map/TerrainProvider\";\r\nexport * from \"./map/CesiumTerrainProvider\";\r\nexport * from \"./map/EllipsoidTerrainProvider\";\r\nexport * from \"./map/MapTile\";\r\nexport * from \"./RealityTileLoader\";\r\nexport * from \"./map/MapTileLoader\";\r\nexport * from \"./map/BingElevation\";\r\nexport * from \"./map/MapTilingScheme\";\r\nexport * from \"./map/MapTileAvailability\";\r\nexport * from \"./PntsReader\";\r\nexport * from \"./RealityModelTileTree\";\r\nexport * from \"./IModelTile\";\r\nexport * from \"./DynamicIModelTile\";\r\nexport * from \"./IModelTileTree\";\r\nexport * from \"./PrimaryTileTree\";\r\nexport * from \"./ClassifierTileTree\";\r\nexport * from \"./OrbitGtTileTree\";\r\nexport * from \"./map/ImageryTileTree\";\r\nexport * from \"./map/MapLayerSources\";\r\nexport * from \"./map/MapTiledGraphicsProvider\";\r\nexport * from \"./CesiumAssetProvider\";\r\nexport * from \"./ContextShareProvider\";\r\nexport * from \"./ThreeDTileFormatInterpreter\";\r\nexport * from \"./OPCFormatInterpreter\";\r\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/tile/internal.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;;;;;;;;;;AAEH;;;;;;;;GAQG;AAEH,sDAAoC;AACpC,0DAAwC;AACxC,+CAA6B;AAC7B,yDAAuC;AACvC,yCAAuB;AACvB,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,iDAA+B;AAC/B,wDAAsC;AACtC,sDAAoC;AACpC,qDAAmC;AACnC,mDAAiC;AACjC,6CAA2B;AAC3B,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,sDAAoC;AACpC,0DAAwC;AACxC,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,8DAA4C;AAC5C,wDAAsC;AACtC,oDAAkC;AAClC,6CAA2B;AAC3B,gDAA8B;AAC9B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,sDAAoC;AACpC,+DAA6C;AAC7C,uDAAqC;AACrC,+DAA6C;AAC7C,wDAAsC;AACtC,qDAAmC;AACnC,wDAAsC;AACtC,yDAAuC;AACvC,gEAA8C;AAC9C,+EAA6D;AAC7D,uFAAqE;AACrE,uFAAqE;AACrE,6EAA2D;AAC3D,oFAAkE;AAClE,gFAA8D;AAC9D,oFAAkE;AAClE,qFAAmE;AACnE,+DAA6C;AAC7C,kEAAgD;AAChD,oDAAkC;AAClC,4DAA0C;AAC1C,wDAAsC;AACtC,8DAA4C;AAC5C,iEAA+C;AAC/C,gDAA8B;AAC9B,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,wDAAsC;AACtC,4DAA0C;AAC1C,+CAA6B;AAC7B,yDAAuC;AACvC,+CAA6B;AAC7B,sDAAoC;AACpC,mDAAiC;AACjC,oDAAkC;AAClC,uDAAqC;AACrC,oDAAkC;AAClC,wDAAsC;AACtC,wDAAsC;AACtC,iEAA+C;AAC/C,wDAAsC;AACtC,yDAAuC;AACvC,gEAA8C;AAC9C,yDAAuC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\n/* The order of exports below is based on dependencies between the types in each file.\n * For example, IModelTileTree derives from TileTree, so TileTree must be exported first.\n * No file inside core-frontend should import from *any* file in /tile/ *except* for this one.\n * e.g.:\n * import { TileTree } from \"./tile/TileTree\"; // NO...\n * import { TileTree } from \"./tile/internal\"; // YES!\n * Failure to follow either of these two guidelines is very likely to produce difficult-to-debug run-time errors due\n * to circular dependencies.\n */\n\nexport * from \"./ViewFlagOverrides\";\nexport * from \"./map/MapCartoRectangle\";\nexport * from \"./map/QuadId\";\nexport * from \"./DisclosedTileTreeSet\";\nexport * from \"./Tile\";\nexport * from \"./LRUTileList\";\nexport * from \"./RealityTile\";\nexport * from \"./TileParams\";\nexport * from \"./TileContent\";\nexport * from \"./TileDrawArgs\";\nexport * from \"./RealityTileDrawArgs\";\nexport * from \"./GraphicsCollector\";\nexport * from \"./BatchedTileIdMap\";\nexport * from \"./TileTreeParams\";\nexport * from \"./TileTree\";\nexport * from \"./RealityTileTree\";\nexport * from \"./TileTreeSupplier\";\nexport * from \"./TileTreeOwner\";\nexport * from \"./TileTreeReference\";\nexport * from \"./TileGeometryCollector\";\nexport * from \"./TiledGraphicsProvider\";\nexport * from \"./TileAdmin\";\nexport * from \"./TileStorage\";\nexport * from \"./TileRequest\";\nexport * from \"./TileRequestChannel\";\nexport * from \"./IModelTileRequestChannels\";\nexport * from \"./TileRequestChannels\";\nexport * from \"./TileUsageMarker\";\nexport * from \"./TileUser\";\nexport * from \"./TileUserSet\";\nexport * from \"./GltfReader\";\nexport * from \"./I3dmReader\";\nexport * from \"./B3dmReader\";\nexport * from \"./ImdlReader\";\nexport * from \"./map/ArcGISTileMap\";\nexport * from \"./map/MapLayerAuthentication\";\nexport * from \"./map/MapFeatureInfo\";\nexport * from \"./map/MapLayerFormatRegistry\";\nexport * from \"./map/ArcGisUtilities\";\nexport * from \"./map/WmsUtilities\";\nexport * from \"./map/WmsCapabilities\";\nexport * from \"./map/WmtsCapabilities\";\nexport * from \"./map/MapLayerImageryProvider\";\nexport * from \"./map/ImageryProviders/ArcGISImageryProvider\";\nexport * from \"./map/ImageryProviders/ArcGISMapLayerImageryProvider\";\nexport * from \"./map/ImageryProviders/AzureMapsLayerImageryProvider\";\nexport * from \"./map/ImageryProviders/BingImageryProvider\";\nexport * from \"./map/ImageryProviders/MapBoxLayerImageryProvider\";\nexport * from \"./map/ImageryProviders/TileUrlImageryProvider\";\nexport * from \"./map/ImageryProviders/WmsMapLayerImageryProvider\";\nexport * from \"./map/ImageryProviders/WmtsMapLayerImageryProvider\";\nexport * from \"./map/MapLayerImageryFormats\";\nexport * from \"./map/MapLayerTileTreeReference\";\nexport * from \"./map/MapTileTree\";\nexport * from \"./map/TerrainMeshProvider\";\nexport * from \"./map/TerrainProvider\";\nexport * from \"./map/CesiumTerrainProvider\";\nexport * from \"./map/EllipsoidTerrainProvider\";\nexport * from \"./map/MapTile\";\nexport * from \"./RealityTileLoader\";\nexport * from \"./map/MapTileLoader\";\nexport * from \"./map/BingElevation\";\nexport * from \"./map/MapTilingScheme\";\nexport * from \"./map/MapTileAvailability\";\nexport * from \"./PntsReader\";\nexport * from \"./RealityModelTileTree\";\nexport * from \"./IModelTile\";\nexport * from \"./DynamicIModelTile\";\nexport * from \"./IModelTileTree\";\nexport * from \"./PrimaryTileTree\";\nexport * from \"./ClassifierTileTree\";\nexport * from \"./OrbitGtTileTree\";\nexport * from \"./map/ImageryTileTree\";\nexport * from \"./map/MapLayerSources\";\nexport * from \"./map/MapTiledGraphicsProvider\";\nexport * from \"./CesiumAssetProvider\";\nexport * from \"./ContextShareProvider\";\nexport * from \"./ThreeDTileFormatInterpreter\";\nexport * from \"./OPCFormatInterpreter\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISTileMap.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGISTileMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { request } from \"../../request/Request\";\r\nimport { assert, compareStrings, Dictionary } from \"@itwin/core-bentley\";\r\nimport { ArcGisUtilities, MapLayerAccessClient, QuadId } from \"../internal\";\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\n\r\nconst nonVisibleChildren = [false, false, false, false];\r\n/** @internal */\r\nexport class ArcGISTileMap {\r\n public tileMapRequestSize = 32;\r\n public fallbackTileMapRequestSize = 2;\r\n\r\n private _callQueues: Array<Promise<boolean[]>> | undefined;\r\n private _tilesCache = new Dictionary<string, boolean>((lhs, rhs) => compareStrings(lhs, rhs));\r\n private _restBaseUrl: string;\r\n private _accessClient: MapLayerAccessClient|undefined;\r\n private _settings: ImageMapLayerSettings;\r\n\r\n constructor(restBaseUrl: string, settings: ImageMapLayerSettings, nbLods?: number, accessClient?: MapLayerAccessClient) {\r\n this._restBaseUrl = restBaseUrl;\r\n this._accessClient = accessClient;\r\n this._settings = settings;\r\n if (nbLods !== undefined && nbLods > 0) {\r\n this._callQueues = new Array<Promise<boolean[]>>(nbLods).fill(Promise.resolve<boolean[]>(nonVisibleChildren));\r\n }\r\n\r\n }\r\n protected async fetchTileMapFromServer(level: number, row: number, column: number, width: number, height: number): Promise<any> {\r\n const tmpUrl = `${this._restBaseUrl}/tilemap/${level}/${row}/${column}/${width}/${height}?f=json`;\r\n const urlObj = new URL(tmpUrl);\r\n try {\r\n if (this._accessClient) {\r\n await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {\r\n mapLayerUrl: new URL(this._settings.url),\r\n userName: this._settings.userName,\r\n password: this._settings.password,\r\n });\r\n }\r\n\r\n } catch {\r\n }\r\n\r\n return request(urlObj.toString(), \"json\");\r\n }\r\n\r\n protected getAvailableTilesFromCache(tiles: QuadId[]): {allTilesFound: boolean, available: boolean[]} {\r\n let allTilesFound = true;\r\n\r\n // Check children visibility from cache\r\n const available = tiles.map((tileId) => {\r\n const avail = this._tilesCache.get(tileId.contentId);\r\n if (undefined === avail) {\r\n allTilesFound = false;\r\n }\r\n return avail ?? false;\r\n });\r\n\r\n return {allTilesFound, available};\r\n }\r\n\r\n public async getChildrenAvailability(childIds: QuadId[]): Promise<boolean[]> {\r\n if (!childIds.length)\r\n return [];\r\n\r\n // We need to check cache again:\r\n // Tiles we are looking for may have been added to cache while we were waiting in the call queue.\r\n const cacheInfo = this.getAvailableTilesFromCache(childIds);\r\n if (cacheInfo.allTilesFound) {\r\n return cacheInfo.available;\r\n }\r\n\r\n // If we never encountered this tile level before, then a tilemap request must be made to get tiles visibility.\r\n // However, we dont want several overlapping large tilemap request being made simultaneously for tiles on the same level.\r\n // To avoid this from happening, we 'serialize' async calls so that we wait until the first tilemap request has completed\r\n // before making another one.\r\n const childLevel = childIds[0].level+1;\r\n if (this._callQueues && childLevel < this._callQueues.length ) {\r\n const res = this._callQueues[childLevel].then(async () => this.getChildrenAvailabilityFromServer(childIds));\r\n this._callQueues[childLevel] = res.catch(() => nonVisibleChildren);\r\n return res;\r\n } else {\r\n // We should not be in this case, probably because server info is missing LODs in the capabilities?!\r\n return this.getChildrenAvailabilityFromServer(childIds);\r\n }\r\n }\r\n\r\n // Query tiles are tiles that we need to check availability\r\n // The array is assumed to be in in row major orientation, i.e.: [TileRow0Col0, TileRow0Col1, TileRow1Col0, TileRow1Col1,]\r\n protected async fetchAndReadTilemap(queryTiles: QuadId[], reqWidth: number, reqHeight: number) {\r\n let available: boolean[] = [];\r\n if (queryTiles.length === 0) {\r\n return available;\r\n }\r\n\r\n const row = queryTiles[0].row;\r\n const column = queryTiles[0].column;\r\n const level = queryTiles[0].level;\r\n\r\n let reqRow, reqColumn;\r\n if (reqWidth === this.fallbackTileMapRequestSize && reqHeight === this.fallbackTileMapRequestSize){\r\n reqRow = row;\r\n reqColumn = column;\r\n } else {\r\n // If tile map if big enough. create offset that will place the current tile in the middle of the tilemap.\r\n // If we place the first query tile in the top-left corner (i.e. without offset), any query for a tile located above or on the left\r\n // will trigger a new request.\r\n const offsetRow = (reqHeight/2.0)-1;\r\n const offsetColumn = (reqWidth/2.0)-1;\r\n reqRow = Math.max(row - offsetRow, 0);\r\n reqColumn = Math.max(column - offsetColumn, 0);\r\n }\r\n\r\n try {\r\n // console.log(`Tilemap request: ${level},${reqRow},${reqColumn},${reqWidth},${reqHeight}`);\r\n const json = await this.fetchTileMapFromServer(level, reqRow, reqColumn, reqWidth, reqHeight);\r\n let tileMapWidth = reqWidth;\r\n let tileMapHeight = reqHeight;\r\n if (Array.isArray(json.data)){\r\n\r\n // The response width and height might be different than the requested dimensions.\r\n // Ref: https://developers.arcgis.com/rest/services-reference/enterprise/tile-map.htm\r\n if (json.adjusted) {\r\n // If tilemap size got adjusted, I'm expecting to get adjusted size...\r\n // otherwise there is something really odd with this server.\r\n assert(json.location?.width !== undefined && json.location?.height !== undefined);\r\n if (json.location?.width !== undefined && json.location?.height !== undefined) {\r\n tileMapWidth = json.location?.width;\r\n tileMapHeight = json.location?.height;\r\n }\r\n }\r\n let k = 0;\r\n for (let j = 0; j < tileMapWidth; j++) {\r\n for (let i = 0; i < tileMapHeight; i++) {\r\n const avail = json.data[(j*tileMapWidth)+i] !== 0;\r\n const curColumn = reqColumn + i;\r\n const curRow = reqRow + j;\r\n // console.log(`Tilemap tile:: ${level},${curRow},${curColumn} => ${avail}`);\r\n this._tilesCache.set(QuadId.getTileContentId(level, curColumn, curRow), avail);\r\n\r\n // Check if actual tile is among the children we are looking for, if so update the availability array.\r\n if ( curColumn >= queryTiles[0].column && curColumn <= queryTiles[queryTiles.length-1].column\r\n && curRow >= queryTiles[0].row && curRow <= queryTiles[queryTiles.length-1].row ) {\r\n available[k++] = avail;\r\n }\r\n\r\n }\r\n }\r\n } else {\r\n // If server returns data (i.e. error 422), thats fine we assume all tiles of tilemap are not available.\r\n available = queryTiles.map(()=>false);\r\n\r\n // Mark all tilemap tiles to non-available in the cache too\r\n for (let j = 0; j < tileMapWidth; j++) {\r\n for (let i = 0; i < tileMapHeight; i++) {\r\n this._tilesCache.set(QuadId.getTileContentId(level, reqColumn + i, reqRow + j), false);\r\n }\r\n }\r\n }\r\n } catch (_error) {\r\n available = queryTiles.map(()=>false);\r\n }\r\n\r\n return available;\r\n }\r\n\r\n protected async getChildrenAvailabilityFromServer(childIds: QuadId[]): Promise<boolean[]> {\r\n // We need to check cache again:\r\n // Tiles we are looking for may have been added to cache while we were waiting in the call queue.\r\n const cacheInfo = this.getAvailableTilesFromCache(childIds);\r\n if (cacheInfo.allTilesFound) {\r\n return cacheInfo.available;\r\n }\r\n\r\n let available;\r\n try {\r\n available = await this.fetchAndReadTilemap(childIds, this.tileMapRequestSize, this.tileMapRequestSize);\r\n if (available.length !== childIds.length) {\r\n if (this.tileMapRequestSize > this.fallbackTileMapRequestSize) {\r\n // Maybe we were unlucky and the tilemap got adjusted our the tiles we are looking for got clipped,\r\n // so let try we a smaller tilemap\r\n available = await this.fetchAndReadTilemap(childIds, this.fallbackTileMapRequestSize, this.fallbackTileMapRequestSize);\r\n }\r\n\r\n if (available.length < childIds.length) {\r\n // Could not all tiles children tiles, returns what we got and fill any gaps with false.\r\n const tmpAvail = childIds.map(()=>false);\r\n for (let i=0; i<available.length;i++ ) {\r\n tmpAvail[i] = available[i];\r\n }\r\n available = tmpAvail;\r\n }\r\n }\r\n } catch (_error) {\r\n // if any error occurs, we assume tiles not to be visible\r\n available = childIds.map(()=>false);\r\n }\r\n\r\n return available;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGISTileMap.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGISTileMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { request } from \"../../request/Request\";\nimport { assert, compareStrings, Dictionary } from \"@itwin/core-bentley\";\nimport { ArcGisUtilities, MapLayerAccessClient, QuadId } from \"../internal\";\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\n\nconst nonVisibleChildren = [false, false, false, false];\n/** @internal */\nexport class ArcGISTileMap {\n public tileMapRequestSize = 32;\n public fallbackTileMapRequestSize = 2;\n\n private _callQueues: Array<Promise<boolean[]>> | undefined;\n private _tilesCache = new Dictionary<string, boolean>((lhs, rhs) => compareStrings(lhs, rhs));\n private _restBaseUrl: string;\n private _accessClient: MapLayerAccessClient|undefined;\n private _settings: ImageMapLayerSettings;\n\n constructor(restBaseUrl: string, settings: ImageMapLayerSettings, nbLods?: number, accessClient?: MapLayerAccessClient) {\n this._restBaseUrl = restBaseUrl;\n this._accessClient = accessClient;\n this._settings = settings;\n if (nbLods !== undefined && nbLods > 0) {\n this._callQueues = new Array<Promise<boolean[]>>(nbLods).fill(Promise.resolve<boolean[]>(nonVisibleChildren));\n }\n\n }\n protected async fetchTileMapFromServer(level: number, row: number, column: number, width: number, height: number): Promise<any> {\n const tmpUrl = `${this._restBaseUrl}/tilemap/${level}/${row}/${column}/${width}/${height}?f=json`;\n const urlObj = new URL(tmpUrl);\n try {\n if (this._accessClient) {\n await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {\n mapLayerUrl: new URL(this._settings.url),\n userName: this._settings.userName,\n password: this._settings.password,\n });\n }\n\n } catch {\n }\n\n return request(urlObj.toString(), \"json\");\n }\n\n protected getAvailableTilesFromCache(tiles: QuadId[]): {allTilesFound: boolean, available: boolean[]} {\n let allTilesFound = true;\n\n // Check children visibility from cache\n const available = tiles.map((tileId) => {\n const avail = this._tilesCache.get(tileId.contentId);\n if (undefined === avail) {\n allTilesFound = false;\n }\n return avail ?? false;\n });\n\n return {allTilesFound, available};\n }\n\n public async getChildrenAvailability(childIds: QuadId[]): Promise<boolean[]> {\n if (!childIds.length)\n return [];\n\n // We need to check cache again:\n // Tiles we are looking for may have been added to cache while we were waiting in the call queue.\n const cacheInfo = this.getAvailableTilesFromCache(childIds);\n if (cacheInfo.allTilesFound) {\n return cacheInfo.available;\n }\n\n // If we never encountered this tile level before, then a tilemap request must be made to get tiles visibility.\n // However, we dont want several overlapping large tilemap request being made simultaneously for tiles on the same level.\n // To avoid this from happening, we 'serialize' async calls so that we wait until the first tilemap request has completed\n // before making another one.\n const childLevel = childIds[0].level+1;\n if (this._callQueues && childLevel < this._callQueues.length ) {\n const res = this._callQueues[childLevel].then(async () => this.getChildrenAvailabilityFromServer(childIds));\n this._callQueues[childLevel] = res.catch(() => nonVisibleChildren);\n return res;\n } else {\n // We should not be in this case, probably because server info is missing LODs in the capabilities?!\n return this.getChildrenAvailabilityFromServer(childIds);\n }\n }\n\n // Query tiles are tiles that we need to check availability\n // The array is assumed to be in in row major orientation, i.e.: [TileRow0Col0, TileRow0Col1, TileRow1Col0, TileRow1Col1,]\n protected async fetchAndReadTilemap(queryTiles: QuadId[], reqWidth: number, reqHeight: number) {\n let available: boolean[] = [];\n if (queryTiles.length === 0) {\n return available;\n }\n\n const row = queryTiles[0].row;\n const column = queryTiles[0].column;\n const level = queryTiles[0].level;\n\n let reqRow, reqColumn;\n if (reqWidth === this.fallbackTileMapRequestSize && reqHeight === this.fallbackTileMapRequestSize){\n reqRow = row;\n reqColumn = column;\n } else {\n // If tile map if big enough. create offset that will place the current tile in the middle of the tilemap.\n // If we place the first query tile in the top-left corner (i.e. without offset), any query for a tile located above or on the left\n // will trigger a new request.\n const offsetRow = (reqHeight/2.0)-1;\n const offsetColumn = (reqWidth/2.0)-1;\n reqRow = Math.max(row - offsetRow, 0);\n reqColumn = Math.max(column - offsetColumn, 0);\n }\n\n try {\n // console.log(`Tilemap request: ${level},${reqRow},${reqColumn},${reqWidth},${reqHeight}`);\n const json = await this.fetchTileMapFromServer(level, reqRow, reqColumn, reqWidth, reqHeight);\n let tileMapWidth = reqWidth;\n let tileMapHeight = reqHeight;\n if (Array.isArray(json.data)){\n\n // The response width and height might be different than the requested dimensions.\n // Ref: https://developers.arcgis.com/rest/services-reference/enterprise/tile-map.htm\n if (json.adjusted) {\n // If tilemap size got adjusted, I'm expecting to get adjusted size...\n // otherwise there is something really odd with this server.\n assert(json.location?.width !== undefined && json.location?.height !== undefined);\n if (json.location?.width !== undefined && json.location?.height !== undefined) {\n tileMapWidth = json.location?.width;\n tileMapHeight = json.location?.height;\n }\n }\n let k = 0;\n for (let j = 0; j < tileMapWidth; j++) {\n for (let i = 0; i < tileMapHeight; i++) {\n const avail = json.data[(j*tileMapWidth)+i] !== 0;\n const curColumn = reqColumn + i;\n const curRow = reqRow + j;\n // console.log(`Tilemap tile:: ${level},${curRow},${curColumn} => ${avail}`);\n this._tilesCache.set(QuadId.getTileContentId(level, curColumn, curRow), avail);\n\n // Check if actual tile is among the children we are looking for, if so update the availability array.\n if ( curColumn >= queryTiles[0].column && curColumn <= queryTiles[queryTiles.length-1].column\n && curRow >= queryTiles[0].row && curRow <= queryTiles[queryTiles.length-1].row ) {\n available[k++] = avail;\n }\n\n }\n }\n } else {\n // If server returns data (i.e. error 422), thats fine we assume all tiles of tilemap are not available.\n available = queryTiles.map(()=>false);\n\n // Mark all tilemap tiles to non-available in the cache too\n for (let j = 0; j < tileMapWidth; j++) {\n for (let i = 0; i < tileMapHeight; i++) {\n this._tilesCache.set(QuadId.getTileContentId(level, reqColumn + i, reqRow + j), false);\n }\n }\n }\n } catch (_error) {\n available = queryTiles.map(()=>false);\n }\n\n return available;\n }\n\n protected async getChildrenAvailabilityFromServer(childIds: QuadId[]): Promise<boolean[]> {\n // We need to check cache again:\n // Tiles we are looking for may have been added to cache while we were waiting in the call queue.\n const cacheInfo = this.getAvailableTilesFromCache(childIds);\n if (cacheInfo.allTilesFound) {\n return cacheInfo.available;\n }\n\n let available;\n try {\n available = await this.fetchAndReadTilemap(childIds, this.tileMapRequestSize, this.tileMapRequestSize);\n if (available.length !== childIds.length) {\n if (this.tileMapRequestSize > this.fallbackTileMapRequestSize) {\n // Maybe we were unlucky and the tilemap got adjusted our the tiles we are looking for got clipped,\n // so let try we a smaller tilemap\n available = await this.fetchAndReadTilemap(childIds, this.fallbackTileMapRequestSize, this.fallbackTileMapRequestSize);\n }\n\n if (available.length < childIds.length) {\n // Could not all tiles children tiles, returns what we got and fill any gaps with false.\n const tmpAvail = childIds.map(()=>false);\n for (let i=0; i<available.length;i++ ) {\n tmpAvail[i] = available[i];\n }\n available = tmpAvail;\n }\n }\n } catch (_error) {\n // if any error occurs, we assume tiles not to be visible\n available = childIds.map(()=>false);\n }\n\n return available;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisUtilities.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.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\nimport { Angle, Constant } from \"@itwin/core-geometry\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { MapCartoRectangle, MapLayerAccessClient, MapLayerAccessToken, MapLayerAccessTokenParams, MapLayerSource, MapLayerSourceStatus, MapLayerSourceValidation} from \"../internal\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n/** @internal */\r\nexport enum ArcGisErrorCode {\r\n InvalidCredentials = 401,\r\n InvalidToken = 498,\r\n TokenRequired = 499,\r\n UnknownError = 1000,\r\n NoTokenService = 1001,\r\n}\r\n\r\n/** Class representing an ArcGIS service metadata.\r\n * @internal\r\n * */\r\nexport interface ArcGISServiceMetadata {\r\n /** JSON content from the service */\r\n content: any;\r\n\r\n /** Indicates if an access token is required to access the service */\r\n accessTokenRequired: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class ArcGisUtilities {\r\n\r\n private static getBBoxString(range?: MapCartoRectangle) {\r\n if (!range)\r\n range = MapCartoRectangle.createMaximum();\r\n\r\n return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;\r\n }\r\n\r\n public static async getNationalMapSources(): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n const response = await fetch(\"https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList\", { method: \"GET\" });\r\n const services = await response.json();\r\n\r\n if (!Array.isArray(services))\r\n return sources;\r\n\r\n for (const service of services) {\r\n if (service.wmsUrl.length === 0) // Exclude Wfs..\r\n continue;\r\n switch (service.serviceType) {\r\n case \"ArcGIS\":\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url: service.serviceLink, formatId: \"ArcGIS\" })!);\r\n break;\r\n default: {\r\n const wmsIndex = service.wmsUrl.lastIndexOf(\"/wms\");\r\n if (wmsIndex > 0) {\r\n const url = service.wmsUrl.slice(0, wmsIndex + 4);\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url, formatId: \"WMS\" })!);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return sources;\r\n }\r\n public static async getServiceDirectorySources(url: string, baseUrl?: string): Promise<MapLayerSource[]> {\r\n if (undefined === baseUrl)\r\n baseUrl = url;\r\n let sources = new Array<MapLayerSource>();\r\n const response = await fetch(`${url}?f=json`, { method: \"GET\" });\r\n const json = await response.json();\r\n if (json !== undefined) {\r\n if (Array.isArray(json.folders)) {\r\n for (const folder of json.folders) {\r\n sources = sources.concat(await ArcGisUtilities.getServiceDirectorySources(`${url}/${folder}`, url));\r\n }\r\n }\r\n if (Array.isArray(json.services)) {\r\n for (const service of json.services) {\r\n let source;\r\n if (service.type === \"MapServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/MapServer`, formatId: \"ArcGIS\" });\r\n else if (service.type === \"ImageServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/ImageServer`, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n public static async getSourcesFromQuery(range?: MapCartoRectangle, url = \"https://usgs.maps.arcgis.com/sharing/rest/search\"): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n for (let start = 1; start > 0;) {\r\n const response = await fetch(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:\"Map Service\")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`, { method: \"GET\" });\r\n const json = await response.json();\r\n if (!json)\r\n break;\r\n\r\n start = json.nextStart ? json.nextStart : -1;\r\n if (json !== undefined && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n const source = MapLayerSource.fromJSON({ name: result.name ? result.name : result.title, url: result.url, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n /**\r\n * Attempt to access an ArcGIS service, and validate its service metadata.\r\n * @param url URL of the source to validate.\r\n * @param formatId Format Id of the source.\r\n * @param capabilitiesFilter List of capabilities 'keyword' that needs to be advertised in the service's metadata\r\n * in order to be valid. For example: 'Map', 'Query', etc\r\n * @param userName Username to use for legacy token based security.\r\n * @param password Username to use for legacy token based security.\r\n * @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)\r\n * @return Validation Status. If successful, a list of available sub-layers will also be returned.\r\n */\r\n public static async validateSource(url: string, formatId: string, capabilitiesFilter: string[], userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const metadata = await this.getServiceJson(url, formatId, userName, password, ignoreCache);\r\n const json = metadata?.content;\r\n if (json === undefined) {\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n } else if (json.error !== undefined) {\r\n\r\n // If we got a 'Token Required' error, lets check what authentification methods this ESRI service offers\r\n // and return information needed to initiate the authentification process... the end-user\r\n // will have to provide his credentials before we can fully validate this source.\r\n if (json.error.code === ArcGisErrorCode.TokenRequired) {\r\n return { status: MapLayerSourceStatus.RequireAuth};\r\n } else if (json.error.code === ArcGisErrorCode.InvalidCredentials)\r\n return { status: MapLayerSourceStatus.InvalidCredentials};\r\n }\r\n\r\n // Check this service support the expected queries\r\n let hasCapabilities = false;\r\n let capsArray: string[] = [];\r\n if (json.capabilities && typeof json.capabilities === \"string\" ) {\r\n const capabilities: string = json.capabilities;\r\n capsArray = capabilities.split(\",\").map((entry) => entry.toLowerCase());\r\n\r\n const filtered = capsArray.filter((element, _index, _array) => capabilitiesFilter.includes(element));\r\n hasCapabilities = (filtered.length === capabilitiesFilter.length);\r\n }\r\n if (!hasCapabilities) {\r\n return { status: MapLayerSourceStatus.InvalidFormat};\r\n }\r\n\r\n // Only EPSG:3857 is supported with pre-rendered tiles.\r\n if (json.tileInfo && capsArray.includes(\"tilesonly\") && !ArcGisUtilities.isEpsg3857Compatible(json.tileInfo)) {\r\n return { status: MapLayerSourceStatus.InvalidCoordinateSystem};\r\n }\r\n\r\n let subLayers;\r\n if (json.layers) {\r\n\r\n subLayers = new Array<MapSubLayerProps>();\r\n\r\n for (const layer of json.layers) {\r\n const parent = layer.parentLayerId < 0 ? undefined : layer.parentLayerId;\r\n const children = Array.isArray(layer.subLayerIds) ? layer.subLayerIds : undefined;\r\n subLayers.push({ name: layer.name, visible: layer.defaultVisibility !== false, id: layer.id, parent, children });\r\n }\r\n }\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n }\r\n\r\n /**\r\n * Validate MapService tiling metadata and checks if the tile tree is 'Google Maps' compatible.\r\n */\r\n public static isEpsg3857Compatible(tileInfo: any) {\r\n if (tileInfo.spatialReference?.latestWkid !== 3857 || !Array.isArray(tileInfo.lods))\r\n return false;\r\n\r\n const zeroLod = tileInfo.lods[0];\r\n return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;\r\n }\r\n\r\n private static _serviceCache = new Map<string, ArcGISServiceMetadata|undefined>();\r\n\r\n /**\r\n * Fetch an ArcGIS service metadata, and returns its JSON representation.\r\n * If an access client has been configured for the specified formatId,\r\n * it will be used to apply required security token.\r\n * By default, response for each URL are cached.\r\n */\r\n public static async getServiceJson(url: string, formatId: string, userName?: string, password?: string, ignoreCache?: boolean, requireToken?: boolean): Promise<ArcGISServiceMetadata|undefined> {\r\n if (!ignoreCache) {\r\n const cached = ArcGisUtilities._serviceCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n let accessTokenRequired = false;\r\n try {\r\n let tmpUrl = new URL(url);\r\n tmpUrl.searchParams.append(\"f\", \"json\");\r\n\r\n // In some cases, caller might already know token is required, so append it immediately\r\n if (requireToken) {\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\r\n if (accessClient) {\r\n accessTokenRequired = true;\r\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\r\n }\r\n }\r\n let response = await fetch(tmpUrl.toString(), { method: \"GET\" });\r\n\r\n // Append security token when corresponding error code is returned by ArcGIS service\r\n let errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\r\n if (!accessTokenRequired\r\n && errorCode !== undefined\r\n && errorCode === ArcGisErrorCode.TokenRequired ) {\r\n accessTokenRequired = true;\r\n // If token required\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\r\n if (accessClient) {\r\n tmpUrl = new URL(url);\r\n tmpUrl.searchParams.append(\"f\", \"json\");\r\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\r\n response = await fetch(tmpUrl.toString(), { method: \"GET\" });\r\n errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\r\n }\r\n }\r\n\r\n const json = await response.json();\r\n const info = {content: json, accessTokenRequired};\r\n // Cache the response only if it doesn't contain any error.\r\n ArcGisUtilities._serviceCache.set(url, (errorCode === undefined ? info : undefined));\r\n return info; // Always return json, even though it contains an error code.\r\n\r\n } catch (_error) {\r\n ArcGisUtilities._serviceCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Read a response from ArcGIS server and check for error code in the response.\r\n */\r\n public static async checkForResponseErrorCode(response: Response) {\r\n const tmpResponse = response;\r\n if (response.headers && tmpResponse.headers.get(\"content-type\")?.toLowerCase().includes(\"json\")) {\r\n\r\n try {\r\n // Note:\r\n // Since response stream can only be read once (i.e. calls to .json() method)\r\n // we have to clone the response object in order to check for potential error code,\r\n // but still keep the response stream as unread.\r\n const clonedResponse = tmpResponse.clone();\r\n const json = await clonedResponse.json();\r\n if (json?.error?.code !== undefined)\r\n return json?.error?.code as number;\r\n } catch { }\r\n\r\n }\r\n return undefined;\r\n }\r\n\r\n // return the appended access token if available.\r\n public static async appendSecurityToken(url: URL, accessClient: MapLayerAccessClient, accessTokenParams: MapLayerAccessTokenParams): Promise<MapLayerAccessToken|undefined> {\r\n\r\n // Append security token if available\r\n let accessToken: MapLayerAccessToken|undefined;\r\n try {\r\n accessToken = await accessClient.getAccessToken(accessTokenParams);\r\n } catch {}\r\n\r\n if (accessToken?.token) {\r\n url.searchParams.append(\"token\", accessToken.token);\r\n return accessToken;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute scale, resolution values for requested zoom levels (WSG 84)\r\n * Use a scale of 96 dpi for Google Maps scales\r\n * Based on this article: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Resolution_and_Scale\r\n * @param startZoom Zoom level where scales begins to be computed\r\n * @param endZoom Zoom level where scales ends to be computed\r\n * @param latitude Latitude in degrees to use to compute scales (i.e 0 for Equator)\r\n * @param tileSize Size of a tile in pixels (i.e 256)\r\n * @param screenDpi Monitor resolution in dots per inch (i.e. typically 96dpi is used by Google Maps)\r\n *\r\n * @returns An array containing resolution and scale values for each requested zoom level\r\n */\r\n public static computeZoomLevelsScales(startZoom: number = 0, endZoom: number = 20, latitude: number = 0, tileSize: number = 256, screenDpi = 96): {zoom: number, resolution: number, scale: number}[] {\r\n // Note: There is probably a more direct way to compute this, but I prefer to go for a simple and well documented approach.\r\n if (startZoom <0 || endZoom < startZoom || tileSize < 0 || screenDpi < 1 || latitude < -90 || latitude > 90)\r\n return [];\r\n\r\n const inchPerMeter = 1 / 0.0254;\r\n const results: {zoom: number, resolution: number, scale: number}[] = [];\r\n const equatorLength = Constant.earthRadiusWGS84.equator * 2 * Math.PI;\r\n const zoom0Resolution = equatorLength / tileSize; // in meters per pixel\r\n\r\n const cosLatitude = Math.cos(latitude);\r\n for (let zoom = startZoom; zoom<= endZoom; zoom++) {\r\n const resolution = zoom0Resolution * cosLatitude / Math.pow(2, zoom);\r\n const scale = screenDpi * inchPerMeter * resolution;\r\n results.push({zoom, resolution, scale});\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Match the provided minScale,maxScale values to corresponding wgs84 zoom levels\r\n * @param defaultMaxLod Value of the last LOD (i.e 22)\r\n * @param tileSize Size of a tile in pixels (i.e 256)\r\n * @param minScale Minimum scale value that needs to be matched to a LOD level\r\n * @param maxScale Maximum scale value that needs to be matched to a LOD level\r\n * @returns minLod: LOD value matching minScale, maxLod: LOD value matching maxScale\r\n */\r\n public static getZoomLevelsScales( defaultMaxLod: number, tileSize: number, minScale?: number, maxScale?: number, tolerance: number = 0): {minLod?: number, maxLod?: number} {\r\n\r\n let minLod: number|undefined, maxLod: number|undefined;\r\n\r\n const zoomScales = ArcGisUtilities.computeZoomLevelsScales(0, defaultMaxLod, 0 /* latitude 0 = Equator*/, tileSize);\r\n\r\n if (zoomScales.length > 0) {\r\n\r\n if (minScale) {\r\n minLod = 0;\r\n // We are looking for the largest scale value with a scale value smaller than minScale\r\n for (; minLod < zoomScales.length && (zoomScales[minLod].scale > minScale && Math.abs(zoomScales[minLod].scale - minScale) > tolerance); minLod++)\r\n ;\r\n\r\n }\r\n\r\n if (maxScale) {\r\n maxLod = defaultMaxLod;\r\n // We are looking for the smallest scale value with a value greater than maxScale\r\n for (; maxLod >= 0 && zoomScales[maxLod].scale < maxScale && Math.abs(zoomScales[maxLod].scale - maxScale) > tolerance; maxLod--)\r\n ;\r\n }\r\n }\r\n return {minLod, maxLod};\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGisUtilities.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Angle, Constant } from \"@itwin/core-geometry\";\nimport { MapSubLayerProps } from \"@itwin/core-common\";\nimport { MapCartoRectangle, MapLayerAccessClient, MapLayerAccessToken, MapLayerAccessTokenParams, MapLayerSource, MapLayerSourceStatus, MapLayerSourceValidation} from \"../internal\";\nimport { IModelApp } from \"../../IModelApp\";\n\n/** @packageDocumentation\n * @module Tiles\n */\n/** @internal */\nexport enum ArcGisErrorCode {\n InvalidCredentials = 401,\n InvalidToken = 498,\n TokenRequired = 499,\n UnknownError = 1000,\n NoTokenService = 1001,\n}\n\n/** Class representing an ArcGIS service metadata.\n * @internal\n * */\nexport interface ArcGISServiceMetadata {\n /** JSON content from the service */\n content: any;\n\n /** Indicates if an access token is required to access the service */\n accessTokenRequired: boolean;\n}\n\n/** @internal */\nexport class ArcGisUtilities {\n\n private static getBBoxString(range?: MapCartoRectangle) {\n if (!range)\n range = MapCartoRectangle.createMaximum();\n\n return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;\n }\n\n public static async getNationalMapSources(): Promise<MapLayerSource[]> {\n const sources = new Array<MapLayerSource>();\n const response = await fetch(\"https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList\", { method: \"GET\" });\n const services = await response.json();\n\n if (!Array.isArray(services))\n return sources;\n\n for (const service of services) {\n if (service.wmsUrl.length === 0) // Exclude Wfs..\n continue;\n switch (service.serviceType) {\n case \"ArcGIS\":\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url: service.serviceLink, formatId: \"ArcGIS\" })!);\n break;\n default: {\n const wmsIndex = service.wmsUrl.lastIndexOf(\"/wms\");\n if (wmsIndex > 0) {\n const url = service.wmsUrl.slice(0, wmsIndex + 4);\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url, formatId: \"WMS\" })!);\n }\n break;\n }\n }\n }\n return sources;\n }\n public static async getServiceDirectorySources(url: string, baseUrl?: string): Promise<MapLayerSource[]> {\n if (undefined === baseUrl)\n baseUrl = url;\n let sources = new Array<MapLayerSource>();\n const response = await fetch(`${url}?f=json`, { method: \"GET\" });\n const json = await response.json();\n if (json !== undefined) {\n if (Array.isArray(json.folders)) {\n for (const folder of json.folders) {\n sources = sources.concat(await ArcGisUtilities.getServiceDirectorySources(`${url}/${folder}`, url));\n }\n }\n if (Array.isArray(json.services)) {\n for (const service of json.services) {\n let source;\n if (service.type === \"MapServer\")\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/MapServer`, formatId: \"ArcGIS\" });\n else if (service.type === \"ImageServer\")\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/ImageServer`, formatId: \"ArcGIS\" });\n if (source)\n sources.push(source);\n }\n }\n }\n\n return sources;\n }\n public static async getSourcesFromQuery(range?: MapCartoRectangle, url = \"https://usgs.maps.arcgis.com/sharing/rest/search\"): Promise<MapLayerSource[]> {\n const sources = new Array<MapLayerSource>();\n for (let start = 1; start > 0;) {\n const response = await fetch(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:\"Map Service\")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`, { method: \"GET\" });\n const json = await response.json();\n if (!json)\n break;\n\n start = json.nextStart ? json.nextStart : -1;\n if (json !== undefined && Array.isArray(json.results)) {\n for (const result of json.results) {\n const source = MapLayerSource.fromJSON({ name: result.name ? result.name : result.title, url: result.url, formatId: \"ArcGIS\" });\n if (source)\n sources.push(source);\n }\n }\n }\n\n return sources;\n }\n\n /**\n * Attempt to access an ArcGIS service, and validate its service metadata.\n * @param url URL of the source to validate.\n * @param formatId Format Id of the source.\n * @param capabilitiesFilter List of capabilities 'keyword' that needs to be advertised in the service's metadata\n * in order to be valid. For example: 'Map', 'Query', etc\n * @param userName Username to use for legacy token based security.\n * @param password Username to use for legacy token based security.\n * @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)\n * @return Validation Status. If successful, a list of available sub-layers will also be returned.\n */\n public static async validateSource(url: string, formatId: string, capabilitiesFilter: string[], userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\n const metadata = await this.getServiceJson(url, formatId, userName, password, ignoreCache);\n const json = metadata?.content;\n if (json === undefined) {\n return { status: MapLayerSourceStatus.InvalidUrl };\n } else if (json.error !== undefined) {\n\n // If we got a 'Token Required' error, lets check what authentification methods this ESRI service offers\n // and return information needed to initiate the authentification process... the end-user\n // will have to provide his credentials before we can fully validate this source.\n if (json.error.code === ArcGisErrorCode.TokenRequired) {\n return { status: MapLayerSourceStatus.RequireAuth};\n } else if (json.error.code === ArcGisErrorCode.InvalidCredentials)\n return { status: MapLayerSourceStatus.InvalidCredentials};\n }\n\n // Check this service support the expected queries\n let hasCapabilities = false;\n let capsArray: string[] = [];\n if (json.capabilities && typeof json.capabilities === \"string\" ) {\n const capabilities: string = json.capabilities;\n capsArray = capabilities.split(\",\").map((entry) => entry.toLowerCase());\n\n const filtered = capsArray.filter((element, _index, _array) => capabilitiesFilter.includes(element));\n hasCapabilities = (filtered.length === capabilitiesFilter.length);\n }\n if (!hasCapabilities) {\n return { status: MapLayerSourceStatus.InvalidFormat};\n }\n\n // Only EPSG:3857 is supported with pre-rendered tiles.\n if (json.tileInfo && capsArray.includes(\"tilesonly\") && !ArcGisUtilities.isEpsg3857Compatible(json.tileInfo)) {\n return { status: MapLayerSourceStatus.InvalidCoordinateSystem};\n }\n\n let subLayers;\n if (json.layers) {\n\n subLayers = new Array<MapSubLayerProps>();\n\n for (const layer of json.layers) {\n const parent = layer.parentLayerId < 0 ? undefined : layer.parentLayerId;\n const children = Array.isArray(layer.subLayerIds) ? layer.subLayerIds : undefined;\n subLayers.push({ name: layer.name, visible: layer.defaultVisibility !== false, id: layer.id, parent, children });\n }\n }\n return { status: MapLayerSourceStatus.Valid, subLayers };\n }\n\n /**\n * Validate MapService tiling metadata and checks if the tile tree is 'Google Maps' compatible.\n */\n public static isEpsg3857Compatible(tileInfo: any) {\n if (tileInfo.spatialReference?.latestWkid !== 3857 || !Array.isArray(tileInfo.lods))\n return false;\n\n const zeroLod = tileInfo.lods[0];\n return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;\n }\n\n private static _serviceCache = new Map<string, ArcGISServiceMetadata|undefined>();\n\n /**\n * Fetch an ArcGIS service metadata, and returns its JSON representation.\n * If an access client has been configured for the specified formatId,\n * it will be used to apply required security token.\n * By default, response for each URL are cached.\n */\n public static async getServiceJson(url: string, formatId: string, userName?: string, password?: string, ignoreCache?: boolean, requireToken?: boolean): Promise<ArcGISServiceMetadata|undefined> {\n if (!ignoreCache) {\n const cached = ArcGisUtilities._serviceCache.get(url);\n if (cached !== undefined)\n return cached;\n }\n\n let accessTokenRequired = false;\n try {\n let tmpUrl = new URL(url);\n tmpUrl.searchParams.append(\"f\", \"json\");\n\n // In some cases, caller might already know token is required, so append it immediately\n if (requireToken) {\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\n if (accessClient) {\n accessTokenRequired = true;\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\n }\n }\n let response = await fetch(tmpUrl.toString(), { method: \"GET\" });\n\n // Append security token when corresponding error code is returned by ArcGIS service\n let errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\n if (!accessTokenRequired\n && errorCode !== undefined\n && errorCode === ArcGisErrorCode.TokenRequired ) {\n accessTokenRequired = true;\n // If token required\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\n if (accessClient) {\n tmpUrl = new URL(url);\n tmpUrl.searchParams.append(\"f\", \"json\");\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\n response = await fetch(tmpUrl.toString(), { method: \"GET\" });\n errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\n }\n }\n\n const json = await response.json();\n const info = {content: json, accessTokenRequired};\n // Cache the response only if it doesn't contain any error.\n ArcGisUtilities._serviceCache.set(url, (errorCode === undefined ? info : undefined));\n return info; // Always return json, even though it contains an error code.\n\n } catch (_error) {\n ArcGisUtilities._serviceCache.set(url, undefined);\n return undefined;\n }\n }\n\n /** Read a response from ArcGIS server and check for error code in the response.\n */\n public static async checkForResponseErrorCode(response: Response) {\n const tmpResponse = response;\n if (response.headers && tmpResponse.headers.get(\"content-type\")?.toLowerCase().includes(\"json\")) {\n\n try {\n // Note:\n // Since response stream can only be read once (i.e. calls to .json() method)\n // we have to clone the response object in order to check for potential error code,\n // but still keep the response stream as unread.\n const clonedResponse = tmpResponse.clone();\n const json = await clonedResponse.json();\n if (json?.error?.code !== undefined)\n return json?.error?.code as number;\n } catch { }\n\n }\n return undefined;\n }\n\n // return the appended access token if available.\n public static async appendSecurityToken(url: URL, accessClient: MapLayerAccessClient, accessTokenParams: MapLayerAccessTokenParams): Promise<MapLayerAccessToken|undefined> {\n\n // Append security token if available\n let accessToken: MapLayerAccessToken|undefined;\n try {\n accessToken = await accessClient.getAccessToken(accessTokenParams);\n } catch {}\n\n if (accessToken?.token) {\n url.searchParams.append(\"token\", accessToken.token);\n return accessToken;\n }\n\n return undefined;\n }\n\n /**\n * Compute scale, resolution values for requested zoom levels (WSG 84)\n * Use a scale of 96 dpi for Google Maps scales\n * Based on this article: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Resolution_and_Scale\n * @param startZoom Zoom level where scales begins to be computed\n * @param endZoom Zoom level where scales ends to be computed\n * @param latitude Latitude in degrees to use to compute scales (i.e 0 for Equator)\n * @param tileSize Size of a tile in pixels (i.e 256)\n * @param screenDpi Monitor resolution in dots per inch (i.e. typically 96dpi is used by Google Maps)\n *\n * @returns An array containing resolution and scale values for each requested zoom level\n */\n public static computeZoomLevelsScales(startZoom: number = 0, endZoom: number = 20, latitude: number = 0, tileSize: number = 256, screenDpi = 96): {zoom: number, resolution: number, scale: number}[] {\n // Note: There is probably a more direct way to compute this, but I prefer to go for a simple and well documented approach.\n if (startZoom <0 || endZoom < startZoom || tileSize < 0 || screenDpi < 1 || latitude < -90 || latitude > 90)\n return [];\n\n const inchPerMeter = 1 / 0.0254;\n const results: {zoom: number, resolution: number, scale: number}[] = [];\n const equatorLength = Constant.earthRadiusWGS84.equator * 2 * Math.PI;\n const zoom0Resolution = equatorLength / tileSize; // in meters per pixel\n\n const cosLatitude = Math.cos(latitude);\n for (let zoom = startZoom; zoom<= endZoom; zoom++) {\n const resolution = zoom0Resolution * cosLatitude / Math.pow(2, zoom);\n const scale = screenDpi * inchPerMeter * resolution;\n results.push({zoom, resolution, scale});\n }\n\n return results;\n }\n\n /**\n * Match the provided minScale,maxScale values to corresponding wgs84 zoom levels\n * @param defaultMaxLod Value of the last LOD (i.e 22)\n * @param tileSize Size of a tile in pixels (i.e 256)\n * @param minScale Minimum scale value that needs to be matched to a LOD level\n * @param maxScale Maximum scale value that needs to be matched to a LOD level\n * @returns minLod: LOD value matching minScale, maxLod: LOD value matching maxScale\n */\n public static getZoomLevelsScales( defaultMaxLod: number, tileSize: number, minScale?: number, maxScale?: number, tolerance: number = 0): {minLod?: number, maxLod?: number} {\n\n let minLod: number|undefined, maxLod: number|undefined;\n\n const zoomScales = ArcGisUtilities.computeZoomLevelsScales(0, defaultMaxLod, 0 /* latitude 0 = Equator*/, tileSize);\n\n if (zoomScales.length > 0) {\n\n if (minScale) {\n minLod = 0;\n // We are looking for the largest scale value with a scale value smaller than minScale\n for (; minLod < zoomScales.length && (zoomScales[minLod].scale > minScale && Math.abs(zoomScales[minLod].scale - minScale) > tolerance); minLod++)\n ;\n\n }\n\n if (maxScale) {\n maxLod = defaultMaxLod;\n // We are looking for the smallest scale value with a value greater than maxScale\n for (; maxLod >= 0 && zoomScales[maxLod].scale < maxScale && Math.abs(zoomScales[maxLod].scale - maxScale) > tolerance; maxLod--)\n ;\n }\n }\n return {minLod, maxLod};\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BingElevation.js","sourceRoot":"","sources":["../../../../src/tile/map/BingElevation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { request } from \"../../request/Request\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { Point3d, Range1d, Range2d } from \"@itwin/core-geometry\";\r\n\r\n// cspell:ignore atae qdng uyzv auje sealevel\r\n\r\n/** Provides an interface to the [Bing Maps elevation services](https://docs.microsoft.com/en-us/bingmaps/rest-services/elevations/).\r\n * Use of these services requires an API key to be supplied via [[MapLayerOptions.BingMaps]] in the [[IModelAppOptions.mapLayerOptions]]\r\n * passed to [[IModelApp.startup]].\r\n * @public\r\n * @extensions\r\n */\r\nexport class BingElevationProvider {\r\n private _heightRangeRequestTemplate: string;\r\n private _seaLevelOffsetRequestTemplate: string;\r\n private _heightListRequestTemplate: string;\r\n\r\n /** @public */\r\n constructor() {\r\n let bingKey = \"\";\r\n if (IModelApp.mapLayerFormatRegistry.configOptions.BingMaps)\r\n bingKey = IModelApp.mapLayerFormatRegistry.configOptions.BingMaps.value;\r\n\r\n this._heightRangeRequestTemplate =\r\n \"https://dev.virtualearth.net/REST/v1/Elevation/Bounds?bounds={boundingBox}&rows=16&cols=16&heights=ellipsoid&key={BingMapsAPIKey}\"\r\n .replace(\"{BingMapsAPIKey}\", bingKey);\r\n this._seaLevelOffsetRequestTemplate =\r\n \"https://dev.virtualearth.net/REST/v1/Elevation/SeaLevel?points={points}&key={BingMapsAPIKey}\"\r\n .replace(\"{BingMapsAPIKey}\", bingKey);\r\n this._heightListRequestTemplate =\r\n \"https://dev.virtualearth.net/REST/v1/Elevation/List?points={points}&heights={heights}&key={BingMapsAPIKey}\"\r\n .replace(\"{BingMapsAPIKey}\", bingKey);\r\n }\r\n\r\n /** Return the height (altitude) at a given cartographic location.\r\n * If geodetic is true (the default) then height is returned in the Ellipsoidal WGS84 datum. If geodetic is false then the sea level height id returned using the Earth Gravitational Model 2008 (EGM2008 2.5’).\r\n * @public\r\n */\r\n public async getHeight(carto: Cartographic, geodetic = true) {\r\n if (undefined === carto)\r\n return 0.0;\r\n\r\n const requestUrl =\r\n this._heightListRequestTemplate\r\n .replace(\"{points}\", `${carto.latitudeDegrees},${carto.longitudeDegrees}`)\r\n .replace(\"{heights}\", geodetic ? \"ellipsoid\" : \"sealevel\");\r\n\r\n try {\r\n const tileResponseBody = await request(requestUrl, \"json\");\r\n return tileResponseBody.resourceSets[0].resources[0].elevations[0];\r\n } catch (error) {\r\n return 0.0;\r\n }\r\n }\r\n\r\n /** Returns 256 elevations in the specified range - 16 rows and 16 columns.\r\n * The elevations are ordered starting with the southwest corner, then proceeding west to east and south to north.\r\n * @beta\r\n */\r\n public async getHeights(range: Range2d): Promise<number[] | undefined> {\r\n const boundingBox = `${range.low.y},${range.low.x},${range.high.y},${range.high.x}`;\r\n const requestUrl = this._heightRangeRequestTemplate.replace(\"{boundingBox}\", boundingBox);\r\n\r\n try {\r\n const tileResponseBody = await request(requestUrl, \"json\");\r\n return tileResponseBody.resourceSets[0].resources[0].elevations;\r\n } catch (error) {\r\n return undefined;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public async getGeodeticToSeaLevelOffset(point: Point3d, iModel: IModelConnection): Promise<number> {\r\n const carto = iModel.spatialToCartographicFromEcef(point);\r\n if (carto === undefined)\r\n return 0.0;\r\n\r\n const requestUrl = this._seaLevelOffsetRequestTemplate.replace(\"{points}\", `${carto.latitudeDegrees},${carto.longitudeDegrees}`);\r\n try {\r\n const tileResponseBody = await request(requestUrl, \"json\");\r\n return tileResponseBody.resourceSets[0].resources[0].offsets[0];\r\n } catch (error) {\r\n return 0.0;\r\n }\r\n }\r\n /** Get the height (altitude) at a given iModel coordinate. The height is geodetic (WGS84 ellipsoid)\r\n * If geodetic is true (the default) then height is returned in the Ellipsoidal WGS84 datum. If geodetic is false then sea level height is returned using the Earth Gravitational Model 2008 (EGM2008 2.5’).\r\n *\r\n * @public\r\n */\r\n public async getHeightValue(point: Point3d, iModel: IModelConnection, geodetic = true): Promise<number> {\r\n return this.getHeight(iModel.spatialToCartographicFromEcef(point), geodetic);\r\n }\r\n\r\n /** Get the height (altitude) range for a given iModel project extents. The height values are geodetic (WGS84 ellipsoid).\r\n * @public\r\n */\r\n public async getHeightRange(iModel: IModelConnection) {\r\n const latLongRange = Range2d.createNull();\r\n const range = iModel.projectExtents.clone();\r\n\r\n // Expand for project surroundings.\r\n range.expandInPlace(1000);\r\n for (const corner of range.corners()) {\r\n const carto = iModel.spatialToCartographicFromEcef(corner);\r\n latLongRange.extendXY(carto.longitudeDegrees, carto.latitudeDegrees);\r\n }\r\n\r\n const heights = await this.getHeights(latLongRange);\r\n return heights ? Range1d.createArray(heights) : Range1d.createNull();\r\n }\r\n\r\n /** Get the average height (altitude) for a given iModel project extents. The height values are geodetic (WGS84 ellipsoid).\r\n * @public\r\n */\r\n public async getHeightAverage(iModel: IModelConnection) {\r\n const latLongRange = Range2d.createNull();\r\n for (const corner of iModel.projectExtents.corners()) {\r\n const carto = iModel.spatialToCartographicFromEcef(corner);\r\n latLongRange.extendXY(carto.longitudeDegrees, carto.latitudeDegrees);\r\n }\r\n\r\n const heights = await this.getHeights(latLongRange);\r\n if (!heights || !heights.length)\r\n return 0;\r\n\r\n let total = 0.0;\r\n for (const height of heights)\r\n total += height;\r\n\r\n return total / heights.length;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BingElevation.js","sourceRoot":"","sources":["../../../../src/tile/map/BingElevation.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,mDAAgD;AAChD,+CAA4C;AAG5C,wDAAiE;AAEjE,6CAA6C;AAE7C;;;;;GAKG;AACH,MAAa,qBAAqB;IAKhC,cAAc;IACd;QACE,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,qBAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,QAAQ;YACzD,OAAO,GAAG,qBAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;QAE1E,IAAI,CAAC,2BAA2B;YAC9B,mIAAmI;iBAChI,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,8BAA8B;YACjC,8FAA8F;iBAC3F,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,0BAA0B;YAC7B,4GAA4G;iBACzG,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAS,CAAC,KAAmB,EAAE,QAAQ,GAAG,IAAI;QACzD,IAAI,SAAS,KAAK,KAAK;YACrB,OAAO,GAAG,CAAC;QAEb,MAAM,UAAU,GACd,IAAI,CAAC,0BAA0B;aAC5B,OAAO,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;aACzE,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAE/D,IAAI;YACF,MAAM,gBAAgB,GAAG,MAAM,IAAA,iBAAO,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACpE;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,GAAG,CAAC;SACZ;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,UAAU,CAAC,KAAc;QACpC,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,UAAU,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAE1F,IAAI;YACF,MAAM,gBAAgB,GAAG,MAAM,IAAA,iBAAO,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;SACjE;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAED,gBAAgB;IACT,KAAK,CAAC,2BAA2B,CAAC,KAAc,EAAE,MAAwB;QAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO,GAAG,CAAC;QAEb,MAAM,UAAU,GAAG,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACjI,IAAI;YACF,MAAM,gBAAgB,GAAG,MAAM,IAAA,iBAAO,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACjE;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,GAAG,CAAC;SACZ;IACH,CAAC;IACD;;;;OAIG;IACI,KAAK,CAAC,cAAc,CAAC,KAAc,EAAE,MAAwB,EAAE,QAAQ,GAAG,IAAI;QACnF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,6BAA6B,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc,CAAC,MAAwB;QAClD,MAAM,YAAY,GAAG,uBAAO,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAE5C,mCAAmC;QACnC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;YAC3D,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;SACtE;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC,CAAC,CAAC,uBAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,uBAAO,CAAC,UAAU,EAAE,CAAC;IACvE,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,gBAAgB,CAAC,MAAwB;QACpD,MAAM,YAAY,GAAG,uBAAO,CAAC,UAAU,EAAE,CAAC;QAC1C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;YAC3D,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;SACtE;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;YAC7B,OAAO,CAAC,CAAC;QAEX,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,KAAK,MAAM,MAAM,IAAI,OAAO;YAC1B,KAAK,IAAI,MAAM,CAAC;QAElB,OAAO,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,CAAC;CACF;AAxHD,sDAwHC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Tiles\n */\nimport { request } from \"../../request/Request\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { Cartographic } from \"@itwin/core-common\";\nimport { Point3d, Range1d, Range2d } from \"@itwin/core-geometry\";\n\n// cspell:ignore atae qdng uyzv auje sealevel\n\n/** Provides an interface to the [Bing Maps elevation services](https://docs.microsoft.com/en-us/bingmaps/rest-services/elevations/).\n * Use of these services requires an API key to be supplied via [[MapLayerOptions.BingMaps]] in the [[IModelAppOptions.mapLayerOptions]]\n * passed to [[IModelApp.startup]].\n * @public\n * @extensions\n */\nexport class BingElevationProvider {\n private _heightRangeRequestTemplate: string;\n private _seaLevelOffsetRequestTemplate: string;\n private _heightListRequestTemplate: string;\n\n /** @public */\n constructor() {\n let bingKey = \"\";\n if (IModelApp.mapLayerFormatRegistry.configOptions.BingMaps)\n bingKey = IModelApp.mapLayerFormatRegistry.configOptions.BingMaps.value;\n\n this._heightRangeRequestTemplate =\n \"https://dev.virtualearth.net/REST/v1/Elevation/Bounds?bounds={boundingBox}&rows=16&cols=16&heights=ellipsoid&key={BingMapsAPIKey}\"\n .replace(\"{BingMapsAPIKey}\", bingKey);\n this._seaLevelOffsetRequestTemplate =\n \"https://dev.virtualearth.net/REST/v1/Elevation/SeaLevel?points={points}&key={BingMapsAPIKey}\"\n .replace(\"{BingMapsAPIKey}\", bingKey);\n this._heightListRequestTemplate =\n \"https://dev.virtualearth.net/REST/v1/Elevation/List?points={points}&heights={heights}&key={BingMapsAPIKey}\"\n .replace(\"{BingMapsAPIKey}\", bingKey);\n }\n\n /** Return the height (altitude) at a given cartographic location.\n * If geodetic is true (the default) then height is returned in the Ellipsoidal WGS84 datum. If geodetic is false then the sea level height id returned using the Earth Gravitational Model 2008 (EGM2008 2.5’).\n * @public\n */\n public async getHeight(carto: Cartographic, geodetic = true) {\n if (undefined === carto)\n return 0.0;\n\n const requestUrl =\n this._heightListRequestTemplate\n .replace(\"{points}\", `${carto.latitudeDegrees},${carto.longitudeDegrees}`)\n .replace(\"{heights}\", geodetic ? \"ellipsoid\" : \"sealevel\");\n\n try {\n const tileResponseBody = await request(requestUrl, \"json\");\n return tileResponseBody.resourceSets[0].resources[0].elevations[0];\n } catch (error) {\n return 0.0;\n }\n }\n\n /** Returns 256 elevations in the specified range - 16 rows and 16 columns.\n * The elevations are ordered starting with the southwest corner, then proceeding west to east and south to north.\n * @beta\n */\n public async getHeights(range: Range2d): Promise<number[] | undefined> {\n const boundingBox = `${range.low.y},${range.low.x},${range.high.y},${range.high.x}`;\n const requestUrl = this._heightRangeRequestTemplate.replace(\"{boundingBox}\", boundingBox);\n\n try {\n const tileResponseBody = await request(requestUrl, \"json\");\n return tileResponseBody.resourceSets[0].resources[0].elevations;\n } catch (error) {\n return undefined;\n }\n }\n\n /** @internal */\n public async getGeodeticToSeaLevelOffset(point: Point3d, iModel: IModelConnection): Promise<number> {\n const carto = iModel.spatialToCartographicFromEcef(point);\n if (carto === undefined)\n return 0.0;\n\n const requestUrl = this._seaLevelOffsetRequestTemplate.replace(\"{points}\", `${carto.latitudeDegrees},${carto.longitudeDegrees}`);\n try {\n const tileResponseBody = await request(requestUrl, \"json\");\n return tileResponseBody.resourceSets[0].resources[0].offsets[0];\n } catch (error) {\n return 0.0;\n }\n }\n /** Get the height (altitude) at a given iModel coordinate. The height is geodetic (WGS84 ellipsoid)\n * If geodetic is true (the default) then height is returned in the Ellipsoidal WGS84 datum. If geodetic is false then sea level height is returned using the Earth Gravitational Model 2008 (EGM2008 2.5’).\n *\n * @public\n */\n public async getHeightValue(point: Point3d, iModel: IModelConnection, geodetic = true): Promise<number> {\n return this.getHeight(iModel.spatialToCartographicFromEcef(point), geodetic);\n }\n\n /** Get the height (altitude) range for a given iModel project extents. The height values are geodetic (WGS84 ellipsoid).\n * @public\n */\n public async getHeightRange(iModel: IModelConnection) {\n const latLongRange = Range2d.createNull();\n const range = iModel.projectExtents.clone();\n\n // Expand for project surroundings.\n range.expandInPlace(1000);\n for (const corner of range.corners()) {\n const carto = iModel.spatialToCartographicFromEcef(corner);\n latLongRange.extendXY(carto.longitudeDegrees, carto.latitudeDegrees);\n }\n\n const heights = await this.getHeights(latLongRange);\n return heights ? Range1d.createArray(heights) : Range1d.createNull();\n }\n\n /** Get the average height (altitude) for a given iModel project extents. The height values are geodetic (WGS84 ellipsoid).\n * @public\n */\n public async getHeightAverage(iModel: IModelConnection) {\n const latLongRange = Range2d.createNull();\n for (const corner of iModel.projectExtents.corners()) {\n const carto = iModel.spatialToCartographicFromEcef(corner);\n latLongRange.extendXY(carto.longitudeDegrees, carto.latitudeDegrees);\n }\n\n const heights = await this.getHeights(latLongRange);\n if (!heights || !heights.length)\n return 0;\n\n let total = 0.0;\n for (const height of heights)\n total += height;\n\n return total / heights.length;\n }\n}\n"]}