@itwin/core-frontend 5.2.0-dev.3 → 5.2.0-dev.31
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.
- package/CHANGELOG.md +76 -1
- package/lib/cjs/BackgroundMapGeometry.js +13 -13
- package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +2 -2
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CheckpointConnection.d.ts.map +1 -1
- package/lib/cjs/CheckpointConnection.js +3 -3
- package/lib/cjs/CheckpointConnection.js.map +1 -1
- package/lib/cjs/ContextRealityModelState.js.map +1 -1
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +7 -6
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/EmphasizeElements.d.ts.map +1 -1
- package/lib/cjs/EmphasizeElements.js +3 -1
- package/lib/cjs/EmphasizeElements.js.map +1 -1
- package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -1
- package/lib/cjs/EnvironmentDecorations.js +4 -0
- package/lib/cjs/EnvironmentDecorations.js.map +1 -1
- package/lib/cjs/FrustumAnimator.d.ts.map +1 -1
- package/lib/cjs/FrustumAnimator.js +3 -2
- package/lib/cjs/FrustumAnimator.js.map +1 -1
- package/lib/cjs/GlobeAnimator.d.ts.map +1 -1
- package/lib/cjs/GlobeAnimator.js +7 -6
- package/lib/cjs/GlobeAnimator.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +12 -7
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +5 -1
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +4 -0
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +156 -14
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LinePlaneIntersect.d.ts.map +1 -1
- package/lib/cjs/LinePlaneIntersect.js +2 -0
- package/lib/cjs/LinePlaneIntersect.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +2 -1
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/Marker.d.ts.map +1 -1
- package/lib/cjs/Marker.js +4 -3
- package/lib/cjs/Marker.js.map +1 -1
- package/lib/cjs/ModelState.d.ts.map +1 -1
- package/lib/cjs/ModelState.js +2 -2
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +5 -4
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NativeAppLogger.d.ts.map +1 -1
- package/lib/cjs/NativeAppLogger.js +1 -0
- package/lib/cjs/NativeAppLogger.js.map +1 -1
- package/lib/cjs/PlanarClipMaskState.d.ts +3 -0
- package/lib/cjs/PlanarClipMaskState.d.ts.map +1 -1
- package/lib/cjs/PlanarClipMaskState.js +8 -4
- package/lib/cjs/PlanarClipMaskState.js.map +1 -1
- package/lib/cjs/RealityDataSource.d.ts.map +1 -1
- package/lib/cjs/RealityDataSource.js +5 -1
- package/lib/cjs/RealityDataSource.js.map +1 -1
- package/lib/cjs/SelectionSet.d.ts.map +1 -1
- package/lib/cjs/SelectionSet.js +1 -0
- package/lib/cjs/SelectionSet.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +5 -5
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +1 -1
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/Sprites.js +2 -2
- package/lib/cjs/Sprites.js.map +1 -1
- package/lib/cjs/TentativePoint.d.ts.map +1 -1
- package/lib/cjs/TentativePoint.js +10 -9
- package/lib/cjs/TentativePoint.js.map +1 -1
- package/lib/cjs/ViewContext.d.ts +10 -1
- package/lib/cjs/ViewContext.d.ts.map +1 -1
- package/lib/cjs/ViewContext.js +12 -1
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewCreator2d.js +1 -1
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewCreator3d.js +1 -1
- package/lib/cjs/ViewCreator3d.js.map +1 -1
- package/lib/cjs/ViewPose.d.ts.map +1 -1
- package/lib/cjs/ViewPose.js +4 -1
- package/lib/cjs/ViewPose.js.map +1 -1
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +17 -12
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/ViewingSpace.d.ts.map +1 -1
- package/lib/cjs/ViewingSpace.js +2 -0
- package/lib/cjs/ViewingSpace.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +17 -10
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/ImageUtil.d.ts.map +1 -1
- package/lib/cjs/common/ImageUtil.js +2 -1
- package/lib/cjs/common/ImageUtil.js.map +1 -1
- package/lib/cjs/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/GeometryAccumulator.js +4 -3
- package/lib/cjs/common/internal/render/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
- package/lib/cjs/common/internal/render/MeshBuilder.js +1 -1
- package/lib/cjs/common/internal/render/MeshBuilder.js.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableBuilder.js +16 -7
- package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
- package/lib/cjs/extension/ExtensionAdmin.js +2 -2
- package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
- package/lib/cjs/internal/GoogleMapsDecorator.js +7 -7
- package/lib/cjs/internal/GoogleMapsDecorator.js.map +1 -1
- package/lib/cjs/internal/ScriptUtils.js +1 -0
- package/lib/cjs/internal/ScriptUtils.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +2 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.js +2 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js +7 -2
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeBuffers.js +5 -3
- package/lib/cjs/internal/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeMap.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeMap.js +2 -0
- package/lib/cjs/internal/render/webgl/AttributeMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js +3 -3
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.d.ts +4 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.js +16 -5
- package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchState.js +2 -1
- package/lib/cjs/internal/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchUniforms.js +2 -2
- package/lib/cjs/internal/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/CachedGeometry.js +2 -2
- package/lib/cjs/internal/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ClipStack.js +1 -1
- package/lib/cjs/internal/render/webgl/ClipStack.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ColorInfo.js +1 -1
- package/lib/cjs/internal/render/webgl/ColorInfo.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Contours.js +3 -3
- package/lib/cjs/internal/render/webgl/Contours.js.map +1 -1
- package/lib/cjs/internal/render/webgl/EDL.js +18 -18
- package/lib/cjs/internal/render/webgl/EDL.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FeatureOverrides.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js +14 -14
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrameBuffer.js +3 -3
- package/lib/cjs/internal/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js +2 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/GLTimer.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/GLTimer.js +2 -0
- package/lib/cjs/internal/render/webgl/GLTimer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Graphic.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Graphic.js +7 -7
- package/lib/cjs/internal/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.js +2 -2
- package/lib/cjs/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MeshData.js +2 -2
- package/lib/cjs/internal/render/webgl/MeshData.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PerformanceMetrics.js +1 -1
- package/lib/cjs/internal/render/webgl/PerformanceMetrics.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts +1 -0
- package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js +27 -11
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarGrid.js +1 -1
- package/lib/cjs/internal/render/webgl/PlanarGrid.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js +6 -5
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PointCloud.js +1 -1
- package/lib/cjs/internal/render/webgl/PointCloud.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RealityMesh.js +1 -1
- package/lib/cjs/internal/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderBuffer.js +2 -2
- package/lib/cjs/internal/render/webgl/RenderBuffer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.js +3 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +118 -85
- package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.js +11 -10
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js +3 -3
- package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderProgram.js +3 -3
- package/lib/cjs/internal/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.js +2 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js +6 -4
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/System.js +1 -1
- package/lib/cjs/internal/render/webgl/System.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.js +12 -9
- package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Texture.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Texture.js +10 -8
- package/lib/cjs/internal/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/internal/render/webgl/VisibleTileFeatures.js +1 -1
- package/lib/cjs/internal/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Animation.js +4 -2
- package/lib/cjs/internal/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.js +2 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Composite.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js +3 -2
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js +3 -3
- package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js +4 -3
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +8 -8
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Surface.js +10 -10
- package/lib/cjs/internal/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Vertex.js +2 -2
- package/lib/cjs/internal/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/internal/tile/B3dmReader.d.ts.map +1 -1
- package/lib/cjs/internal/tile/B3dmReader.js +1 -1
- package/lib/cjs/internal/tile/B3dmReader.js.map +1 -1
- package/lib/cjs/internal/tile/DynamicIModelTile.js +1 -0
- package/lib/cjs/internal/tile/DynamicIModelTile.js.map +1 -1
- package/lib/cjs/internal/tile/FetchCloudStorage.js +1 -1
- package/lib/cjs/internal/tile/FetchCloudStorage.js.map +1 -1
- package/lib/cjs/internal/tile/LRUTileList.d.ts.map +1 -1
- package/lib/cjs/internal/tile/LRUTileList.js +4 -0
- package/lib/cjs/internal/tile/LRUTileList.js.map +1 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
- package/lib/cjs/internal/tile/OPCFormatInterpreter.js +4 -4
- package/lib/cjs/internal/tile/OPCFormatInterpreter.js.map +1 -1
- package/lib/cjs/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/OrbitGtTileTree.js +2 -2
- package/lib/cjs/internal/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts +2 -0
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.js +17 -12
- package/lib/cjs/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.js +3 -3
- package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.js +3 -0
- package/lib/cjs/internal/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js +3 -3
- package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/cjs/internal/tile/TileUserSet.d.ts.map +1 -1
- package/lib/cjs/internal/tile/TileUserSet.js +4 -0
- package/lib/cjs/internal/tile/TileUserSet.js.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGISTileMap.js +1 -1
- package/lib/cjs/internal/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGisUtilities.js +4 -0
- package/lib/cjs/internal/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/MapTileAvailability.js +5 -2
- package/lib/cjs/internal/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js +3 -2
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/properties/FormattedQuantityDescription.d.ts.map +1 -1
- package/lib/cjs/properties/FormattedQuantityDescription.js +2 -0
- package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +5 -3
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +5 -2
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +69 -17
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTile.js +2 -2
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +5 -5
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +2 -1
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +9 -1
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +10 -8
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +8 -7
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js +2 -1
- package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/cjs/tools/Tool.js +1 -1
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts +5 -0
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +9 -0
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/workers/ImdlParser/webpack.config.js +8 -0
- package/lib/esm/BackgroundMapGeometry.js +14 -14
- package/lib/esm/BackgroundMapGeometry.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js +2 -2
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CheckpointConnection.d.ts.map +1 -1
- package/lib/esm/CheckpointConnection.js +4 -4
- package/lib/esm/CheckpointConnection.js.map +1 -1
- package/lib/esm/ContextRealityModelState.js.map +1 -1
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +8 -7
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/EmphasizeElements.d.ts.map +1 -1
- package/lib/esm/EmphasizeElements.js +3 -1
- package/lib/esm/EmphasizeElements.js.map +1 -1
- package/lib/esm/EnvironmentDecorations.d.ts.map +1 -1
- package/lib/esm/EnvironmentDecorations.js +4 -0
- package/lib/esm/EnvironmentDecorations.js.map +1 -1
- package/lib/esm/FrustumAnimator.d.ts.map +1 -1
- package/lib/esm/FrustumAnimator.js +3 -2
- package/lib/esm/FrustumAnimator.js.map +1 -1
- package/lib/esm/GlobeAnimator.d.ts.map +1 -1
- package/lib/esm/GlobeAnimator.js +7 -6
- package/lib/esm/GlobeAnimator.js.map +1 -1
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +12 -7
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +7 -3
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +4 -0
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +158 -16
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +2 -2
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/LinePlaneIntersect.d.ts.map +1 -1
- package/lib/esm/LinePlaneIntersect.js +2 -0
- package/lib/esm/LinePlaneIntersect.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +2 -1
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/Marker.d.ts.map +1 -1
- package/lib/esm/Marker.js +5 -4
- package/lib/esm/Marker.js.map +1 -1
- package/lib/esm/ModelState.d.ts.map +1 -1
- package/lib/esm/ModelState.js +3 -3
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +5 -4
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NativeAppLogger.d.ts.map +1 -1
- package/lib/esm/NativeAppLogger.js +1 -0
- package/lib/esm/NativeAppLogger.js.map +1 -1
- package/lib/esm/PlanarClipMaskState.d.ts +3 -0
- package/lib/esm/PlanarClipMaskState.d.ts.map +1 -1
- package/lib/esm/PlanarClipMaskState.js +8 -4
- package/lib/esm/PlanarClipMaskState.js.map +1 -1
- package/lib/esm/RealityDataSource.d.ts.map +1 -1
- package/lib/esm/RealityDataSource.js +5 -1
- package/lib/esm/RealityDataSource.js.map +1 -1
- package/lib/esm/SelectionSet.d.ts.map +1 -1
- package/lib/esm/SelectionSet.js +2 -1
- package/lib/esm/SelectionSet.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +6 -6
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +2 -2
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/Sprites.js +2 -2
- package/lib/esm/Sprites.js.map +1 -1
- package/lib/esm/TentativePoint.d.ts.map +1 -1
- package/lib/esm/TentativePoint.js +10 -9
- package/lib/esm/TentativePoint.js.map +1 -1
- package/lib/esm/ViewContext.d.ts +10 -1
- package/lib/esm/ViewContext.d.ts.map +1 -1
- package/lib/esm/ViewContext.js +12 -1
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewCreator2d.js +1 -1
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewCreator3d.js +1 -1
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/ViewPose.d.ts.map +1 -1
- package/lib/esm/ViewPose.js +4 -1
- package/lib/esm/ViewPose.js.map +1 -1
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +18 -13
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/ViewingSpace.d.ts.map +1 -1
- package/lib/esm/ViewingSpace.js +2 -0
- package/lib/esm/ViewingSpace.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +18 -11
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/ImageUtil.d.ts.map +1 -1
- package/lib/esm/common/ImageUtil.js +2 -1
- package/lib/esm/common/ImageUtil.js.map +1 -1
- package/lib/esm/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
- package/lib/esm/common/internal/render/GeometryAccumulator.js +4 -3
- package/lib/esm/common/internal/render/GeometryAccumulator.js.map +1 -1
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
- package/lib/esm/common/internal/render/MeshBuilder.js +2 -2
- package/lib/esm/common/internal/render/MeshBuilder.js.map +1 -1
- package/lib/esm/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
- package/lib/esm/common/internal/render/VertexTableBuilder.js +17 -8
- package/lib/esm/common/internal/render/VertexTableBuilder.js.map +1 -1
- package/lib/esm/extension/ExtensionAdmin.js +2 -2
- package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
- package/lib/esm/internal/GoogleMapsDecorator.js +7 -7
- package/lib/esm/internal/GoogleMapsDecorator.js.map +1 -1
- package/lib/esm/internal/ScriptUtils.js +1 -0
- package/lib/esm/internal/ScriptUtils.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.js +2 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.js +7 -2
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeBuffers.js +5 -3
- package/lib/esm/internal/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeMap.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeMap.js +2 -0
- package/lib/esm/internal/render/webgl/AttributeMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.js +4 -4
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.d.ts +4 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.js +16 -5
- package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BranchState.js +2 -1
- package/lib/esm/internal/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchUniforms.js +3 -3
- package/lib/esm/internal/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/CachedGeometry.js +3 -3
- package/lib/esm/internal/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/internal/render/webgl/ClipStack.js +1 -1
- package/lib/esm/internal/render/webgl/ClipStack.js.map +1 -1
- package/lib/esm/internal/render/webgl/ColorInfo.js +2 -2
- package/lib/esm/internal/render/webgl/ColorInfo.js.map +1 -1
- package/lib/esm/internal/render/webgl/Contours.js +4 -4
- package/lib/esm/internal/render/webgl/Contours.js.map +1 -1
- package/lib/esm/internal/render/webgl/EDL.js +19 -19
- package/lib/esm/internal/render/webgl/EDL.js.map +1 -1
- package/lib/esm/internal/render/webgl/FeatureOverrides.d.ts +3 -3
- package/lib/esm/internal/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FeatureOverrides.js +15 -15
- package/lib/esm/internal/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrameBuffer.js +4 -4
- package/lib/esm/internal/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js +2 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/GLTimer.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/GLTimer.js +2 -0
- package/lib/esm/internal/render/webgl/GLTimer.js.map +1 -1
- package/lib/esm/internal/render/webgl/Graphic.d.ts +3 -3
- package/lib/esm/internal/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Graphic.js +7 -7
- package/lib/esm/internal/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.js +3 -3
- package/lib/esm/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/MeshData.js +3 -3
- package/lib/esm/internal/render/webgl/MeshData.js.map +1 -1
- package/lib/esm/internal/render/webgl/PerformanceMetrics.js +1 -1
- package/lib/esm/internal/render/webgl/PerformanceMetrics.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts +1 -0
- package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.js +28 -12
- package/lib/esm/internal/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarGrid.js +2 -2
- package/lib/esm/internal/render/webgl/PlanarGrid.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.js +6 -5
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/internal/render/webgl/PointCloud.js +2 -2
- package/lib/esm/internal/render/webgl/PointCloud.js.map +1 -1
- package/lib/esm/internal/render/webgl/RealityMesh.js +2 -2
- package/lib/esm/internal/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/internal/render/webgl/RenderBuffer.js +3 -3
- package/lib/esm/internal/render/webgl/RenderBuffer.js.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/esm/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.js +3 -1
- package/lib/esm/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +119 -86
- package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ScratchDrawParams.js +11 -10
- package/lib/esm/internal/render/webgl/ScratchDrawParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js +4 -4
- package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderProgram.js +4 -4
- package/lib/esm/internal/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.js +2 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.js +7 -5
- package/lib/esm/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/System.js +2 -2
- package/lib/esm/internal/render/webgl/System.js.map +1 -1
- package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Target.js +13 -10
- package/lib/esm/internal/render/webgl/Target.js.map +1 -1
- package/lib/esm/internal/render/webgl/Texture.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Texture.js +11 -9
- package/lib/esm/internal/render/webgl/Texture.js.map +1 -1
- package/lib/esm/internal/render/webgl/VisibleTileFeatures.js +1 -1
- package/lib/esm/internal/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Animation.js +5 -3
- package/lib/esm/internal/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Color.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Color.js +2 -1
- package/lib/esm/internal/render/webgl/glsl/Color.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Composite.js +2 -2
- package/lib/esm/internal/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.js +3 -2
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js +4 -4
- package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js +4 -3
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +9 -9
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Surface.js +11 -11
- package/lib/esm/internal/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Vertex.js +3 -3
- package/lib/esm/internal/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/internal/tile/B3dmReader.d.ts.map +1 -1
- package/lib/esm/internal/tile/B3dmReader.js +2 -2
- package/lib/esm/internal/tile/B3dmReader.js.map +1 -1
- package/lib/esm/internal/tile/DynamicIModelTile.js +1 -0
- package/lib/esm/internal/tile/DynamicIModelTile.js.map +1 -1
- package/lib/esm/internal/tile/FetchCloudStorage.js +1 -1
- package/lib/esm/internal/tile/FetchCloudStorage.js.map +1 -1
- package/lib/esm/internal/tile/LRUTileList.d.ts.map +1 -1
- package/lib/esm/internal/tile/LRUTileList.js +4 -0
- package/lib/esm/internal/tile/LRUTileList.js.map +1 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
- package/lib/esm/internal/tile/OPCFormatInterpreter.js +5 -5
- package/lib/esm/internal/tile/OPCFormatInterpreter.js.map +1 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.js +3 -3
- package/lib/esm/internal/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts +2 -0
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.js +16 -12
- package/lib/esm/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.js +4 -4
- package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.js +3 -0
- package/lib/esm/internal/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js +4 -4
- package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/internal/tile/TileUserSet.d.ts.map +1 -1
- package/lib/esm/internal/tile/TileUserSet.js +4 -0
- package/lib/esm/internal/tile/TileUserSet.js.map +1 -1
- package/lib/esm/internal/tile/map/ArcGISTileMap.js +1 -1
- package/lib/esm/internal/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ArcGisUtilities.js +4 -0
- package/lib/esm/internal/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js +3 -3
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -2
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/MapTileAvailability.js +6 -3
- package/lib/esm/internal/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.js +3 -2
- package/lib/esm/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/properties/FormattedQuantityDescription.d.ts.map +1 -1
- package/lib/esm/properties/FormattedQuantityDescription.js +2 -0
- package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +5 -3
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +5 -2
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +70 -18
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts.map +1 -1
- package/lib/esm/tile/RealityTile.js +3 -3
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +6 -6
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +2 -1
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +2 -2
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +2 -2
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +10 -2
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +11 -9
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +9 -8
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js +2 -1
- package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/esm/tools/Tool.js +2 -2
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts +5 -0
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +9 -0
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/workers/ImdlParser/webpack.config.js +8 -0
- package/lib/public/images/GoogleMaps_Logo_Gray.svg +50 -0
- package/lib/public/images/GoogleMaps_Logo_WithDarkOutline.svg +78 -0
- package/lib/public/images/GoogleMaps_Logo_WithLightOutline.svg +78 -0
- package/lib/public/locales/en/iModelJs.json +1 -1
- package/lib/public/scripts/draco_decoder.wasm +0 -0
- package/lib/public/scripts/draco_encoder.js +52 -0
- package/lib/public/scripts/draco_wasm_wrapper.js +117 -0
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +25 -23
- package/lib/public/images/google_on_non_white.png +0 -0
- package/lib/public/images/google_on_non_white_hdpi.png +0 -0
- package/lib/public/images/google_on_white.png +0 -0
- package/lib/public/images/google_on_white_hdpi.png +0 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module Tiles
|
|
7
7
|
*/
|
|
8
|
-
import { assert, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, CompressedId64Set } from "@itwin/core-bentley";
|
|
8
|
+
import { assert, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, CompressedId64Set, expectDefined } from "@itwin/core-bentley";
|
|
9
9
|
import { Cartographic, FeatureAppearance, GeoCoordStatus, GlobeMode, ModelMapLayerDrapeTarget, ModelMapLayerSettings, PlanarClipMaskPriority, TerrainHeightOriginMode, } from "@itwin/core-common";
|
|
10
10
|
import { Angle, AngleSweep, Constant, Ellipsoid, EllipsoidPatch, Point3d, Range1d, Range3d, Ray3d, Transform, Vector3d, } from "@itwin/core-geometry";
|
|
11
11
|
import { ApproximateTerrainHeights } from "../../ApproximateTerrainHeights";
|
|
@@ -233,10 +233,10 @@ export class MapTileTree extends RealityTileTree {
|
|
|
233
233
|
getCornerRays(rectangle) {
|
|
234
234
|
const rays = new Array();
|
|
235
235
|
if (this.globeMode === GlobeMode.Ellipsoid) {
|
|
236
|
-
rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y)));
|
|
237
|
-
rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y)));
|
|
238
|
-
rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y)));
|
|
239
|
-
rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y)));
|
|
236
|
+
rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))));
|
|
237
|
+
rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))));
|
|
238
|
+
rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))));
|
|
239
|
+
rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))));
|
|
240
240
|
}
|
|
241
241
|
else {
|
|
242
242
|
const mercatorFractionRange = rectangle.getTileFractionRange(this._mercatorTilingScheme);
|
|
@@ -249,7 +249,7 @@ export class MapTileTree extends RealityTileTree {
|
|
|
249
249
|
}
|
|
250
250
|
/** @internal */
|
|
251
251
|
pointAboveEllipsoid(point) {
|
|
252
|
-
return this.earthEllipsoid.worldToLocal(point, scratchPoint).magnitude() > 1;
|
|
252
|
+
return expectDefined(this.earthEllipsoid.worldToLocal(point, scratchPoint)).magnitude() > 1;
|
|
253
253
|
}
|
|
254
254
|
getMercatorFractionChildGridPoints(tile, columnCount, rowCount) {
|
|
255
255
|
const gridPoints = [];
|
|
@@ -288,7 +288,7 @@ export class MapTileTree extends RealityTileTree {
|
|
|
288
288
|
y: this._mercatorTilingScheme.yFractionToLatitude(gridPoint.y) * Angle.degreesPerRadian,
|
|
289
289
|
z: this.bimElevationBias,
|
|
290
290
|
});
|
|
291
|
-
const iModelCoordinates = this._gcsConverter.getCachedIModelCoordinatesFromGeoCoordinates(requestProps);
|
|
291
|
+
const iModelCoordinates = expectDefined(this._gcsConverter).getCachedIModelCoordinatesFromGeoCoordinates(requestProps);
|
|
292
292
|
if (iModelCoordinates.missing)
|
|
293
293
|
return undefined;
|
|
294
294
|
return iModelCoordinates.result.map((result) => !result || result.s ? undefined : Point3d.fromJSON(result.p));
|
|
@@ -316,7 +316,7 @@ export class MapTileTree extends RealityTileTree {
|
|
|
316
316
|
});
|
|
317
317
|
}
|
|
318
318
|
}
|
|
319
|
-
await this._gcsConverter.getIModelCoordinatesFromGeoCoordinates(requestProps);
|
|
319
|
+
await expectDefined(this._gcsConverter).getIModelCoordinatesFromGeoCoordinates(requestProps);
|
|
320
320
|
}
|
|
321
321
|
static _scratchCarto = Cartographic.createZero();
|
|
322
322
|
/** Get the corners for planar children.
|
|
@@ -330,6 +330,7 @@ export class MapTileTree extends RealityTileTree {
|
|
|
330
330
|
this._mercatorFractionToDb.multiplyPoint3d(gridPoint, scratchCorner);
|
|
331
331
|
if (this.globeMode !== GlobeMode.Ellipsoid || this.cartesianRange.containsPoint(scratchCorner)) {
|
|
332
332
|
if (reprojected !== undefined && reprojected[i] !== undefined)
|
|
333
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
333
334
|
reprojected[i].clone(gridPoint);
|
|
334
335
|
else
|
|
335
336
|
scratchCorner.clone(gridPoint);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTileTree.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, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, CompressedId64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BackgroundMapSettings, BaseLayerSettings, Cartographic, ColorDef, FeatureAppearance, GeoCoordStatus, GlobeMode, MapLayerSettings, ModelMapLayerDrapeTarget, ModelMapLayerSettings, PlanarClipMaskPriority, TerrainHeightOriginMode,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n Angle, AngleSweep, Constant, Ellipsoid, EllipsoidPatch, Point3d, Range1d, Range3d, Ray3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { TerrainDisplayOverrides } from \"../../DisplayStyleState\";\r\nimport { HitDetail } from \"../../HitDetail\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { FeatureSymbology } from \"../../render/FeatureSymbology\";\r\nimport { DecorateContext, SceneContext } from \"../../ViewContext\";\r\nimport { MapLayerScaleRangeVisibility, ScreenViewport } from \"../../Viewport\";\r\nimport {\r\n BingElevationProvider, createDefaultViewFlagOverrides, DisclosedTileTreeSet, EllipsoidTerrainProvider, GeometryTileTreeReference,\r\n ImageryMapLayerTreeReference, ImageryMapTileTree, ImageryTileTreeState, LayerTileTreeHandler, LayerTileTreeReferenceHandler, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapLayerImageryProvider, MapLayerIndex, MapLayerTileTreeReference, MapLayerTreeSetting, MapTile,\r\n MapTileLoader, MapTilingScheme, PlanarTilePatch, QuadId,\r\n RealityTile, RealityTileDrawArgs, RealityTileTree, RealityTileTreeParams, TerrainMeshProviderOptions, Tile, TileDrawArgs, TileLoadPriority, TileParams, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier, UpsampledMapTile, WebMercatorTilingScheme,\r\n} from \"../internal\";\r\n\r\nconst scratchPoint = Point3d.create();\r\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\r\nconst scratchCorner = Point3d.createZero();\r\nconst scratchZNormal = Vector3d.create(0, 0, 1);\r\n\r\n/** Map tile tree scale range visibility values.\r\n * @beta */\r\nexport enum MapTileTreeScaleRangeVisibility {\r\n /** state is currently unknown (i.e. never been displayed) */\r\n Unknown = 0,\r\n\r\n /** all currently selected tree tiles are visible (i.e within the scale range) */\r\n Visible,\r\n\r\n /** all currently selected tree tiles are hidden (i.e outside the scale range) */\r\n Hidden,\r\n\r\n /** currently selected tree tiles are partially visible (i.e some tiles are within the scale range, and some are outside.) */\r\n Partial\r\n}\r\n\r\n/**\r\n* Provides map layer information for a given tile tree.\r\n* @internal\r\n*/\r\nexport interface MapLayerInfoFromTileTree {\r\n /** Indicate if the map layer represents the base layer */\r\n isBaseLayer: boolean;\r\n\r\n /** Map layer index; undefined if base map */\r\n index?: MapLayerIndex;\r\n\r\n /** Settings for the map layer (or the base layer)*/\r\n settings: MapLayerSettings;\r\n\r\n /** Provider for the map layer (or the base layer) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\n/** A [quad tree](https://en.wikipedia.org/wiki/Quadtree) consisting of [[MapTile]]s representing the map imagery draped onto the surface of the Earth.\r\n * A `MapTileTree` enables display of a globe or planar map with [map imagery](https://en.wikipedia.org/wiki/Tiled_web_map) obtained from any number of sources, such as\r\n * [Bing](https://learn.microsoft.com/en-us/bingmaps/), [OpenStreetMap](https://wiki.openstreetmap.org/wiki/API), and [GIS servers](https://wiki.openstreetmap.org/wiki/API).\r\n * The specific imagery displayed is determined by a [[Viewport]]'s [MapImagerySettings]($common) and [BackgroundMapSettings]($common).\r\n *\r\n * The map or globe may be smooth, or feature 3d geometry supplied by a [[TerrainProvider]].\r\n * The terrain displayed in a [[Viewport]] is determined by its [TerrainSettings]($common).\r\n * @public\r\n */\r\n\r\nexport class MapTileTree extends RealityTileTree {\r\n /** @internal */\r\n public ecefToDb: Transform;\r\n /** @internal */\r\n public bimElevationBias: number;\r\n /** @internal */\r\n public geodeticOffset: number;\r\n /** @internal */\r\n public sourceTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n private _mercatorFractionToDb: Transform;\r\n /** @internal */\r\n public earthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public minEarthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public maxEarthEllipsoid: Ellipsoid;\r\n /** Determines whether the map displays as a plane or an ellipsoid. */\r\n public readonly globeMode: GlobeMode;\r\n /** @internal */\r\n public globeOrigin: Point3d;\r\n /** @internal */\r\n private _mercatorTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n public useDepthBuffer: boolean;\r\n /** @internal */\r\n public isOverlay: boolean;\r\n /** @internal */\r\n public terrainExaggeration: number;\r\n /** @internal */\r\n public baseColor?: ColorDef;\r\n /** @internal */\r\n public baseTransparent: boolean;\r\n /** @internal */\r\n public mapTransparent: boolean;\r\n /** @internal */\r\n public produceGeometry?: boolean;\r\n /** @internal */\r\n public layerImageryTrees: MapLayerTreeSetting[] = [];\r\n\r\n private readonly _layerHandler: LayerTileTreeHandler;\r\n\r\n /** @internal */\r\n public override get layerHandler() { return this._layerHandler; }\r\n\r\n /** @internal */\r\n constructor(params: RealityTileTreeParams, ecefToDb: Transform, bimElevationBias: number, geodeticOffset: number,\r\n sourceTilingScheme: MapTilingScheme, id: MapTreeId, applyTerrain: boolean) {\r\n super(params);\r\n this.ecefToDb = ecefToDb;\r\n this.bimElevationBias = bimElevationBias;\r\n this.geodeticOffset = geodeticOffset;\r\n this.sourceTilingScheme = sourceTilingScheme;\r\n this._mercatorTilingScheme = new WebMercatorTilingScheme();\r\n this._mercatorFractionToDb = this._mercatorTilingScheme.computeMercatorFractionToDb(ecefToDb, bimElevationBias, params.iModel, applyTerrain);\r\n const quadId = new QuadId(sourceTilingScheme.rootLevel, 0, 0);\r\n this.globeOrigin = this.ecefToDb.getOrigin().clone();\r\n this.earthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\n const globalHeightRange = applyTerrain ? ApproximateTerrainHeights.instance.globalHeightRange : Range1d.createXX(0, 0);\r\n const globalRectangle = MapCartoRectangle.createMaximum();\r\n\r\n this.globeMode = id.globeMode;\r\n this.isOverlay = id.isOverlay;\r\n this.useDepthBuffer = id.useDepthBuffer;\r\n this.terrainExaggeration = id.terrainExaggeration;\r\n this.baseColor = id.baseColor;\r\n this.baseTransparent = id.baseTransparent;\r\n this.mapTransparent = id.mapTransparent;\r\n if (applyTerrain) {\r\n this.minEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.polar + globalHeightRange.low);\r\n this.maxEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.polar + globalHeightRange.high);\r\n this.produceGeometry = id.produceGeometry;\r\n } else {\r\n this.minEarthEllipsoid = this.earthEllipsoid;\r\n this.maxEarthEllipsoid = this.earthEllipsoid;\r\n }\r\n\r\n const rootPatch = EllipsoidPatch.createCapture(\r\n this.maxEarthEllipsoid, AngleSweep.createStartSweepRadians(0, Angle.pi2Radians),\r\n AngleSweep.createStartSweepRadians(-Angle.piOver2Radians, Angle.piRadians),\r\n );\r\n\r\n let range;\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n range = rootPatch.range();\r\n } else {\r\n const corners = this.getFractionalTileCorners(quadId);\r\n this._mercatorFractionToDb.multiplyPoint3dArrayInPlace(corners);\r\n range = Range3d.createArray(MapTile.computeRangeCorners(corners, Vector3d.create(0, 0, 1), 0, scratchCorners, globalHeightRange));\r\n }\r\n\r\n this._rootTile = this.createGlobeChild({ contentId: quadId.contentId, maximumSize: 0, range }, quadId, range.corners(), globalRectangle, rootPatch, undefined);\r\n\r\n this._layerHandler = new LayerTileTreeHandler(this);\r\n }\r\n\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() {\r\n // If we are not depth buffering we force parents and exclusive to false to cause the map tiles to be sorted\r\n // by depth so that painters algorithm will approximate correct depth display.\r\n return this.useDepthBuffer ? this.loader.parentsAndChildrenExclusive : false;\r\n }\r\n\r\n /** Return the imagery tile tree state of matching the provided imagery tree id.\r\n * @internal\r\n */\r\n public getImageryTreeState(imageryTreeId: string) {\r\n return this._layerHandler.imageryTreeState.get(imageryTreeId);\r\n }\r\n\r\n /** Return a cloned dictionary of the imagery tile tree states\r\n * @internal\r\n */\r\n public cloneImageryTreeState() {\r\n const clone = new Map<Id64String, ImageryTileTreeState>();\r\n for (const [treeId, state] of this._layerHandler.imageryTreeState) {\r\n clone.set(treeId, state.clone());\r\n }\r\n return clone;\r\n }\r\n\r\n /** @internal */\r\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\r\n return (this._rootTile as MapTile).tileFromQuadId(quadId);\r\n }\r\n\r\n protected override collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n super.collectClassifierGraphics(args, selectedTiles);\r\n this._layerHandler.collectClassifierGraphics(args, selectedTiles);\r\n }\r\n\r\n /** @internal */\r\n public clearImageryTreesAndClassifiers() {\r\n this._layerHandler.layerImageryTrees.length = 0;\r\n this._layerHandler.layerSettings.clear();\r\n this._layerHandler.modelIdToIndex.clear();\r\n this._layerHandler.layerClassifiers.clear();\r\n }\r\n\r\n /** @internal */\r\n public override get isTransparent() {\r\n return this.mapTransparent || this.baseTransparent;\r\n }\r\n\r\n /** @internal */\r\n public override get maxDepth() {\r\n let maxDepth = this.loader.maxDepth;\r\n /** NB: need to use local layerImageTrees because of the order super() is called (before layerHandler exists on this class)! */\r\n this.layerImageryTrees?.forEach((layerImageryTree) => maxDepth = Math.max(maxDepth, layerImageryTree.tree.maxDepth));\r\n\r\n return maxDepth;\r\n }\r\n\r\n /** @internal */\r\n public createPlanarChild(params: TileParams, quadId: QuadId, corners: Point3d[], normal: Vector3d, rectangle: MapCartoRectangle, chordHeight: number, heightRange?: Range1d): MapTile | undefined {\r\n const childAvailable = this.mapLoader.isTileAvailable(quadId);\r\n if (!childAvailable && this.produceGeometry)\r\n return undefined;\r\n\r\n const patch = new PlanarTilePatch(corners, normal, chordHeight);\r\n const cornerNormals = this.getCornerRays(rectangle);\r\n if (childAvailable)\r\n return new MapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals);\r\n\r\n assert(params.parent instanceof MapTile);\r\n let loadableTile: MapTile | undefined = params.parent;\r\n while (loadableTile?.isUpsampled)\r\n loadableTile = loadableTile.parent as MapTile | undefined;\r\n\r\n assert(undefined !== loadableTile);\r\n return new UpsampledMapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals, loadableTile);\r\n }\r\n\r\n /** @internal */\r\n public createGlobeChild(params: TileParams, quadId: QuadId, _rangeCorners: Point3d[], rectangle: MapCartoRectangle, ellipsoidPatch: EllipsoidPatch, heightRange?: Range1d): MapTile {\r\n return new MapTile(params, this, quadId, ellipsoidPatch, rectangle, heightRange, this.getCornerRays(rectangle));\r\n }\r\n\r\n /** @internal */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return this.mapLoader.getChildHeightRange(quadId, rectangle, parent);\r\n }\r\n\r\n /** Reprojection does not work with very large tiles so just do linear transform.\r\n * @internal\r\n */\r\n public static minReprojectionDepth = 8;\r\n /** @internal */\r\n public static maxGlobeDisplayDepth = 8;\r\n /** @internal */\r\n public static minDisplayableDepth = 3;\r\n /** @internal */\r\n public get mapLoader() { return this.loader as MapTileLoader; }\r\n\r\n /** @internal */\r\n public override getBaseRealityDepth(sceneContext: SceneContext) {\r\n // If the view has ever had global scope then preload low level (global) tiles.\r\n return (sceneContext.viewport.view.maxGlobalScopeFactor > 1) ? MapTileTree.minDisplayableDepth : -1;\r\n }\r\n\r\n /** @internal */\r\n public doCreateGlobeChildren(tile: Tile): boolean {\r\n if (this.globeMode !== GlobeMode.Ellipsoid)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.maxGlobeDisplayDepth) // If the depth is too low (tile is too large) display as globe.\r\n return true;\r\n\r\n return false; // Display as globe if more than 100 KM from project.\r\n }\r\n\r\n /** @internal */\r\n public override doReprojectChildren(tile: Tile): boolean {\r\n if (this._gcsConverter === undefined)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.minReprojectionDepth) // If the depth is too low (tile is too large) omit reprojection.\r\n return false;\r\n\r\n return this.cartesianRange.intersectsRange(tile.range);\r\n }\r\n\r\n /** @internal */\r\n public getCornerRays(rectangle: MapCartoRectangle): Ray3d[] | undefined {\r\n const rays = new Array<Ray3d>();\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))!);\r\n rays.push(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))!);\r\n } else {\r\n const mercatorFractionRange = rectangle.getTileFractionRange(this._mercatorTilingScheme);\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.low.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.low.y), scratchZNormal));\r\n }\r\n return rays;\r\n }\r\n\r\n /** @internal */\r\n public pointAboveEllipsoid(point: Point3d): boolean {\r\n return this.earthEllipsoid.worldToLocal(point, scratchPoint)!.magnitude() > 1;\r\n }\r\n\r\n private getMercatorFractionChildGridPoints(tile: MapTile, columnCount: number, rowCount: number): Point3d[] {\r\n const gridPoints = [];\r\n const quadId = tile.quadId;\r\n const deltaX = 1.0 / columnCount, deltaY = 1.0 / rowCount;\r\n for (let row = 0; row <= rowCount; row++) {\r\n for (let column = 0; column <= columnCount; column++) {\r\n const xFraction = this.sourceTilingScheme.tileXToFraction(quadId.column + column * deltaX, quadId.level);\r\n const yFraction = this.sourceTilingScheme.tileYToFraction(quadId.row + row * deltaY, quadId.level);\r\n\r\n gridPoints.push(Point3d.create(xFraction, yFraction, 0));\r\n }\r\n }\r\n // If not mercator already need to remap latitude...\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n for (const gridPoint of gridPoints)\r\n gridPoint.y = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(gridPoint.y));\r\n\r\n return gridPoints;\r\n }\r\n\r\n private getChildCornersFromGridPoints(gridPoints: Point3d[], columnCount: number, rowCount: number) {\r\n const childCorners = new Array<Point3d[]>();\r\n for (let row = 0; row < rowCount; row++) {\r\n for (let column = 0; column < columnCount; column++) {\r\n const index0 = column + row * (columnCount + 1);\r\n const index1 = index0 + (columnCount + 1);\r\n childCorners.push([gridPoints[index0], gridPoints[index0 + 1], gridPoints[index1], gridPoints[index1 + 1]]);\r\n }\r\n }\r\n return childCorners;\r\n }\r\n\r\n /** @internal */\r\n public getCachedReprojectedPoints(gridPoints: Point3d[]): (Point3d | undefined)[] | undefined {\r\n const requestProps = [];\r\n for (const gridPoint of gridPoints)\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(gridPoint.x) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(gridPoint.y) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n\r\n const iModelCoordinates = this._gcsConverter!.getCachedIModelCoordinatesFromGeoCoordinates(requestProps);\r\n\r\n if (iModelCoordinates.missing)\r\n return undefined;\r\n\r\n return iModelCoordinates.result.map((result) => !result || result.s ? undefined : Point3d.fromJSON(result.p));\r\n }\r\n\r\n /** Minimize reprojection requests by requesting this corners tile and a grid that will include all points for 4 levels of descendants.\r\n * This greatly reduces the number of reprojection requests which currently require a roundtrip through the backend.\r\n * @internal\r\n */\r\n public async loadReprojectionCache(tile: MapTile): Promise<void> {\r\n const quadId = tile.quadId;\r\n const xRange = Range1d.createXX(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level));\r\n const yRange = Range1d.createXX(this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level));\r\n const cacheDepth = 4, cacheDimension = 2 ** cacheDepth;\r\n const delta = 1.0 / cacheDimension;\r\n const requestProps = [];\r\n\r\n for (let row = 0; row <= cacheDimension; row++) {\r\n for (let column = 0; column <= cacheDimension; column++) {\r\n let yFraction = yRange.fractionToPoint(row * delta);\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n yFraction = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(yFraction));\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(xRange.fractionToPoint(column * delta)) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(yFraction) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n }\r\n }\r\n\r\n await this._gcsConverter!.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n }\r\n\r\n private static _scratchCarto = Cartographic.createZero();\r\n\r\n /** Get the corners for planar children.\r\n * This generally will resolve immediately, but may require an asynchronous request for reprojecting the corners.\r\n * @internal\r\n */\r\n public getPlanarChildCorners(tile: MapTile, columnCount: number, rowCount: number, resolve: (childCorners: Point3d[][]) => void) {\r\n const resolveCorners = (points: Point3d[], reprojected: (Point3d | undefined)[] | undefined = undefined) => {\r\n for (let i = 0; i < points.length; i++) {\r\n const gridPoint = points[i];\r\n this._mercatorFractionToDb.multiplyPoint3d(gridPoint, scratchCorner);\r\n if (this.globeMode !== GlobeMode.Ellipsoid || this.cartesianRange.containsPoint(scratchCorner)) {\r\n if (reprojected !== undefined && reprojected[i] !== undefined)\r\n reprojected[i]!.clone(gridPoint);\r\n else\r\n scratchCorner.clone(gridPoint);\r\n } else {\r\n this._mercatorTilingScheme.fractionToCartographic(gridPoint.x, gridPoint.y, MapTileTree._scratchCarto);\r\n this.earthEllipsoid.radiansToPoint(MapTileTree._scratchCarto.longitude, Cartographic.parametricLatitudeFromGeodeticLatitude(MapTileTree._scratchCarto.latitude), gridPoint);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchCorner);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n scratchCorner.interpolate(cartesianDistance / this.cartesianTransitionDistance, gridPoint, gridPoint);\r\n }\r\n }\r\n resolve(this.getChildCornersFromGridPoints(points, columnCount, rowCount));\r\n };\r\n\r\n let reprojectedPoints: (Point3d | undefined)[] | undefined;\r\n const gridPoints = this.getMercatorFractionChildGridPoints(tile, columnCount, rowCount);\r\n if (this.doReprojectChildren(tile)) {\r\n reprojectedPoints = this.getCachedReprojectedPoints(gridPoints);\r\n if (reprojectedPoints) {\r\n // If the reprojected corners are in the cache, resolve immediately.\r\n resolveCorners(gridPoints, reprojectedPoints);\r\n } else {\r\n // If the reprojected corners are not in cache request them - but also request reprojection of a grid that will include descendent corners to ensure they can\r\n // be reloaded without expensive reprojection requests.\r\n this.loadReprojectionCache(tile).then(() => {\r\n const reprojected = this.getCachedReprojectedPoints(gridPoints);\r\n assert(reprojected !== undefined); // We just cached them... they better be there now.\r\n resolveCorners(gridPoints, reprojected);\r\n }).catch((_error: Error) => {\r\n resolveCorners(gridPoints);\r\n });\r\n }\r\n } else {\r\n resolveCorners(gridPoints);\r\n }\r\n }\r\n\r\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\r\n * if any scale range visibility change is detected for one more map-layer definition.\r\n * @internal\r\n */\r\n public override reportTileVisibility(args: TileDrawArgs, selected: RealityTile[]) {\r\n\r\n const debugControl = args.context.target.debugControl;\r\n\r\n const layersVisibilityBefore = this.cloneImageryTreeState();\r\n\r\n const changes = new Array<MapLayerScaleRangeVisibility>();\r\n\r\n if (!layersVisibilityBefore)\r\n return;\r\n\r\n for (const [treeId] of layersVisibilityBefore) {\r\n const treeVisibility = this.getImageryTreeState(treeId);\r\n if (treeVisibility) {\r\n treeVisibility.reset();\r\n }\r\n }\r\n\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n let selectedImageryTiles = selectedTile.imageryTiles;\r\n if (selectedTile.hiddenImageryTiles) {\r\n selectedImageryTiles = selectedImageryTiles ? [...selectedImageryTiles, ...selectedTile.hiddenImageryTiles] : selectedTile.hiddenImageryTiles;\r\n }\r\n\r\n const leafTiles = selectedTile.highResolutionReplacementTiles;\r\n if (leafTiles) {\r\n for (const tile of leafTiles) {\r\n const treeState = this.getImageryTreeState(tile.tree.id);\r\n treeState?.setScaleRangeVisibility(false);\r\n }\r\n }\r\n\r\n if (selectedImageryTiles) {\r\n for (const selectedImageryTile of selectedImageryTiles) {\r\n const treeState = this.getImageryTreeState(selectedImageryTile.tree.id);\r\n if (treeState) {\r\n if (selectedImageryTile.isOutOfLodRange) {\r\n treeState.setScaleRangeVisibility(false);\r\n } else {\r\n treeState.setScaleRangeVisibility(true);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const [treeId, prevState] of layersVisibilityBefore) {\r\n const newState = this.getImageryTreeState(treeId);\r\n if (newState) {\r\n\r\n const prevVisibility = prevState.getScaleRangeVisibility();\r\n const visibility = newState.getScaleRangeVisibility();\r\n if (prevVisibility !== visibility) {\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n // eslint-disable-next-line no-console\r\n console.log(`ImageryTileTree '${treeId}' changed prev state: '${MapTileTreeScaleRangeVisibility[prevVisibility]}' new state: '${MapTileTreeScaleRangeVisibility[visibility]}'`);\r\n }\r\n\r\n const mapLayersIndexes = args.context.viewport.getMapLayerIndexesFromIds(this.id, treeId);\r\n for (const index of mapLayersIndexes) {\r\n changes.push({ index: index.index, isOverlay: index.isOverlay, visibility });\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n if (changes.length !== 0) {\r\n args.context.viewport.onMapLayerScaleRangeVisibilityChanged.raiseEvent(changes);\r\n }\r\n\r\n }\r\n\r\n /** @internal */\r\n public getFractionalTileCorners(quadId: QuadId): Point3d[] {\r\n const corners: Point3d[] = [];\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n return corners;\r\n }\r\n\r\n /** @internal */\r\n public getTileRectangle(quadId: QuadId): MapCartoRectangle {\r\n return this.sourceTilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n }\r\n\r\n /** @internal */\r\n public getLayerIndex(imageryTreeId: Id64String) {\r\n const index = this._layerHandler.modelIdToIndex.get(imageryTreeId);\r\n return index === undefined ? -1 : index;\r\n }\r\n\r\n /** @internal */\r\n public getLayerTransparency(imageryTreeId: Id64String): number {\r\n const layerSettings = this._layerHandler.layerSettings.get(imageryTreeId);\r\n assert(undefined !== layerSettings);\r\n return undefined === layerSettings || !layerSettings.transparency ? 0.0 : layerSettings.transparency;\r\n }\r\n}\r\n\r\ninterface MapTreeId {\r\n tileUserId: number;\r\n applyTerrain: boolean;\r\n terrainProviderName: string;\r\n terrainDataSource: string;\r\n terrainHeightOrigin: number;\r\n terrainHeightOriginMode: number;\r\n terrainExaggeration: number;\r\n mapGroundBias: number;\r\n wantSkirts: boolean;\r\n wantNormals: boolean;\r\n globeMode: GlobeMode;\r\n useDepthBuffer: boolean;\r\n isOverlay: boolean;\r\n baseColor?: ColorDef;\r\n baseTransparent: boolean;\r\n mapTransparent: boolean;\r\n maskModelIds?: string;\r\n produceGeometry?: boolean;\r\n}\r\n\r\n/** @internal */\r\nclass MapTileTreeProps implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public location = Transform.createIdentity();\r\n public yAxisUp = true;\r\n public is3d = true;\r\n public rootTile = { contentId: \"\", range: Range3d.createNull(), maximumSize: 0 };\r\n public loader: MapTileLoader;\r\n public iModel: IModelConnection;\r\n public get priority(): TileLoadPriority { return this.loader.priority; }\r\n\r\n public constructor(modelId: Id64String, loader: MapTileLoader, iModel: IModelConnection, public gcsConverterAvailable: boolean) {\r\n this.id = this.modelId = modelId;\r\n this.loader = loader;\r\n this.iModel = iModel;\r\n }\r\n}\r\n\r\nfunction createViewFlagOverrides(wantLighting: boolean, wantThematic: false | undefined) {\r\n return createDefaultViewFlagOverrides({ clipVolume: false, lighting: wantLighting, thematic: wantThematic });\r\n}\r\n\r\nclass MapTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public compareTileTreeIds(lhs: MapTreeId, rhs: MapTreeId): number {\r\n let cmp = compareNumbers(lhs.tileUserId, rhs.tileUserId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.isOverlay, rhs.isOverlay);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantSkirts, rhs.wantSkirts);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantNormals, rhs.wantNormals);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.globeMode, rhs.globeMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.baseColor ? lhs.baseColor.tbgr : -1, rhs.baseColor ? rhs.baseColor.tbgr : -1);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.baseTransparent, rhs.baseTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.mapTransparent, rhs.mapTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.applyTerrain, rhs.applyTerrain);\r\n if (0 === cmp) {\r\n if (lhs.applyTerrain) {\r\n // Terrain-only settings.\r\n cmp = compareStrings(lhs.terrainProviderName, rhs.terrainProviderName);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.terrainDataSource, rhs.terrainDataSource);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOrigin, rhs.terrainHeightOrigin);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOriginMode, rhs.terrainHeightOriginMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainExaggeration, rhs.terrainExaggeration);\r\n if (0 === cmp)\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Non-Terrain (flat) settings.\r\n cmp = compareNumbers(lhs.mapGroundBias, rhs.mapGroundBias);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.useDepthBuffer, rhs.useDepthBuffer);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n private async computeHeightBias(heightOrigin: number, heightOriginMode: TerrainHeightOriginMode, exaggeration: number, iModel: IModelConnection, elevationProvider: BingElevationProvider): Promise<number> {\r\n const projectCenter = iModel.projectExtents.center;\r\n switch (heightOriginMode) {\r\n case TerrainHeightOriginMode.Ground:\r\n return heightOrigin + exaggeration * (await elevationProvider.getHeightValue(projectCenter, iModel, true));\r\n\r\n case TerrainHeightOriginMode.Geodetic:\r\n return heightOrigin;\r\n\r\n case TerrainHeightOriginMode.Geoid:\r\n return heightOrigin + await elevationProvider.getGeodeticToSeaLevelOffset(projectCenter, iModel);\r\n }\r\n }\r\n\r\n public async createTileTree(id: MapTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n let bimElevationBias = 0, terrainProvider, geodeticOffset = 0;\r\n let applyTerrain = id.applyTerrain;\r\n const modelId = iModel.transientIds.getNext();\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n const terrainOpts: TerrainMeshProviderOptions = {\r\n wantSkirts: id.wantSkirts,\r\n exaggeration: id.terrainExaggeration,\r\n wantNormals: id.wantNormals,\r\n dataSource: id.terrainDataSource,\r\n produceGeometry: id.produceGeometry,\r\n };\r\n\r\n if (id.applyTerrain) {\r\n await ApproximateTerrainHeights.instance.initialize();\r\n const elevationProvider = new BingElevationProvider();\r\n\r\n bimElevationBias = - await this.computeHeightBias(id.terrainHeightOrigin, id.terrainHeightOriginMode, id.terrainExaggeration, iModel, elevationProvider);\r\n geodeticOffset = await elevationProvider.getGeodeticToSeaLevelOffset(iModel.projectExtents.center, iModel);\r\n const provider = IModelApp.terrainProviderRegistry.find(id.terrainProviderName);\r\n if (provider)\r\n terrainProvider = await provider.createTerrainMeshProvider(terrainOpts);\r\n\r\n if (!terrainProvider) {\r\n applyTerrain = false;\r\n geodeticOffset = 0;\r\n }\r\n }\r\n\r\n if (!terrainProvider) {\r\n terrainProvider = new EllipsoidTerrainProvider(terrainOpts);\r\n bimElevationBias = id.mapGroundBias;\r\n }\r\n\r\n const loader = new MapTileLoader(iModel, modelId, bimElevationBias, terrainProvider);\r\n const ecefToDb = iModel.getMapEcefToDb(bimElevationBias);\r\n\r\n if (id.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(id.maskModelIds));\r\n\r\n const treeProps = new MapTileTreeProps(modelId, loader, iModel, gcsConverterAvailable);\r\n return new MapTileTree(treeProps, ecefToDb, bimElevationBias, geodeticOffset, terrainProvider.tilingScheme, id, applyTerrain);\r\n }\r\n}\r\n\r\nconst mapTreeSupplier = new MapTreeSupplier();\r\n\r\n/** @internal */\r\ntype CheckTerrainDisplayOverride = () => TerrainDisplayOverrides | undefined;\r\n\r\n/** Specialization of tile tree that represents background map.\r\n * @internal\r\n */\r\nexport class MapTileTreeReference extends TileTreeReference {\r\n private _tileUserId: number;\r\n private _settings: BackgroundMapSettings;\r\n private _symbologyOverrides: FeatureSymbology.Overrides | undefined;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n private _layerRefHandler: LayerTileTreeReferenceHandler;\r\n public readonly iModel: IModelConnection;\r\n\r\n public get layerRefHandler() { return this._layerRefHandler; }\r\n\r\n public shouldDrapeLayer(layerTreeRef?: MapLayerTileTreeReference): boolean {\r\n const mapLayerSettings = layerTreeRef?.layerSettings;\r\n if (mapLayerSettings && mapLayerSettings instanceof ModelMapLayerSettings)\r\n return ModelMapLayerDrapeTarget.Globe === mapLayerSettings.drapeTarget;\r\n return true; // catch-all for other cases (skip reality models, though).\r\n }\r\n\r\n public constructor(settings: BackgroundMapSettings, baseLayerSettings: BaseLayerSettings | undefined, layerSettings: MapLayerSettings[], iModel: IModelConnection, tileUserId: number, isOverlay: boolean, private _isDrape: boolean, private _overrideTerrainDisplay?: CheckTerrainDisplayOverride) {\r\n super();\r\n\r\n this.iModel = iModel;\r\n\r\n this._tileUserId = tileUserId;\r\n this._settings = settings;\r\n\r\n if (this._settings.planarClipMask && this._settings.planarClipMask.isValid)\r\n this._planarClipMask = PlanarClipMaskState.create(this._settings.planarClipMask);\r\n\r\n if (this._overrideTerrainDisplay && this._overrideTerrainDisplay()?.produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n\r\n this._layerRefHandler = new LayerTileTreeReferenceHandler(this, isOverlay, baseLayerSettings, layerSettings, true);\r\n }\r\n\r\n public forEachLayerTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n for (const layerTree of this._layerRefHandler.layerTrees) {\r\n assert(layerTree instanceof MapLayerTileTreeReference);\r\n func(layerTree);\r\n }\r\n }\r\n\r\n public override get isGlobal() { return true; }\r\n public get baseColor(): ColorDef | undefined { return this.baseColor; }\r\n public override get planarClipMaskPriority(): number { return PlanarClipMaskPriority.BackgroundMap; }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference | undefined {\r\n if (!this._settings.applyTerrain || this._isDrape)\r\n return undefined; // Don't bother generating non-terrain (flat) geometry.\r\n\r\n const ref = new MapTileTreeReference(this._settings, undefined, [], this.iModel, this._tileUserId, false, false, () => {\r\n return { produceGeometry: true };\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n /** Terrain tiles do not contribute to the range used by \"fit view\". */\r\n public override unionFitRange(_range: Range3d): void { }\r\n public get settings(): BackgroundMapSettings { return this._settings; }\r\n public set settings(settings: BackgroundMapSettings) {\r\n this._settings = settings;\r\n this._planarClipMask = settings.planarClipMask ? PlanarClipMaskState.create(settings.planarClipMask) : undefined;\r\n }\r\n\r\n public get layerSettings(): MapLayerSettings[] {\r\n return this.layerRefHandler.layerSettings;\r\n }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n // Wait until drape tree is fully loaded too.\r\n for (const drapeTree of this._layerRefHandler.layerTrees)\r\n if (drapeTree && !drapeTree.isLoadingComplete)\r\n return false;\r\n\r\n return super._isLoadingComplete;\r\n }\r\n public get useDepthBuffer() {\r\n return !this._layerRefHandler.isOverlay && (this.settings.applyTerrain || this.settings.useDepthBuffer);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n let wantSkirts = (this.settings.applyTerrain || this.useDepthBuffer) && !this.settings.transparency && !this._layerRefHandler.baseTransparent;\r\n if (wantSkirts) {\r\n const maskTrans = this._planarClipMask?.settings.transparency;\r\n wantSkirts = (undefined === maskTrans || maskTrans <= 0);\r\n }\r\n\r\n const id: MapTreeId = {\r\n tileUserId: this._tileUserId,\r\n applyTerrain: this.settings.applyTerrain && !this._isDrape,\r\n terrainProviderName: this.settings.terrainSettings.providerName,\r\n terrainDataSource: this.settings.terrainSettings.dataSource,\r\n terrainHeightOrigin: this.settings.terrainSettings.heightOrigin,\r\n terrainHeightOriginMode: this.settings.terrainSettings.heightOriginMode,\r\n terrainExaggeration: this.settings.terrainSettings.exaggeration,\r\n mapGroundBias: this.settings.groundBias,\r\n wantSkirts,\r\n // Can set to this.settings.terrainSettings.applyLighting if we want to ever apply lighting to terrain again so that normals are retrieved when lighting is on.\r\n wantNormals: false,\r\n globeMode: this._isDrape ? GlobeMode.Plane : this.settings.globeMode,\r\n isOverlay: this._layerRefHandler.isOverlay,\r\n useDepthBuffer: this.useDepthBuffer,\r\n baseColor: this._layerRefHandler.baseColor,\r\n baseTransparent: this._layerRefHandler.baseTransparent,\r\n mapTransparent: Number(this.settings.transparency) > 0,\r\n maskModelIds: this._planarClipMask?.settings.compressedModelIds,\r\n produceGeometry: false,\r\n };\r\n\r\n if (undefined !== this._overrideTerrainDisplay) {\r\n const ovr = this._overrideTerrainDisplay();\r\n if (undefined !== ovr) {\r\n id.wantSkirts = ovr.wantSkirts ?? id.wantSkirts;\r\n id.wantNormals = ovr.wantNormals ?? id.wantNormals;\r\n id.produceGeometry = ovr.produceGeometry === true;\r\n }\r\n }\r\n\r\n return this.iModel.tiles.getTileTreeOwner(id, mapTreeSupplier);\r\n }\r\n public getLayerImageryTreeRef(index: number): MapLayerTileTreeReference | undefined {\r\n const baseLayerIndex = this._layerRefHandler.baseImageryLayerIncluded ? 1 : 0;\r\n const treeIndex = index + baseLayerIndex;\r\n return index < 0 || treeIndex >= this._layerRefHandler.layerTrees.length ? undefined : this._layerRefHandler.layerTrees[treeIndex];\r\n }\r\n\r\n /** Return the map-layer scale range visibility for the provided map-layer index.\r\n * @internal\r\n */\r\n public getMapLayerScaleRangeVisibility(index: number): MapTileTreeScaleRangeVisibility {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined !== tree) {\r\n const tileTreeRef = this.getLayerImageryTreeRef(index);\r\n const treeId = tileTreeRef?.treeOwner.tileTree?.id;\r\n if (treeId !== undefined) {\r\n const treeState = tree.getImageryTreeState(treeId);\r\n if (treeState !== undefined)\r\n return treeState.getScaleRangeVisibility();\r\n }\r\n }\r\n return MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.drawScene]] on the referenced TileTree, if it is loaded. */\r\n public override addToScene(context: SceneContext): void {\r\n if (!context.viewFlags.backgroundMap)\r\n return;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n if (undefined === tree || !this._layerRefHandler.initializeLayers(context))\r\n return; // Not loaded yet.\r\n\r\n if (this._planarClipMask && this._planarClipMask.settings.isValid)\r\n context.addPlanarClassifier(tree.modelId, undefined, this._planarClipMask);\r\n\r\n const nonLocatable = this.settings.locatable ? undefined : true;\r\n const transparency = this.settings.transparency ? this.settings.transparency : undefined;\r\n this._symbologyOverrides = new FeatureSymbology.Overrides();\r\n if (nonLocatable || transparency) {\r\n this._symbologyOverrides.override({\r\n modelId: tree.modelId,\r\n appearance: FeatureAppearance.fromJSON({ transparency, nonLocatable }),\r\n });\r\n }\r\n\r\n const args = this.createDrawArgs(context);\r\n if (undefined !== args)\r\n tree.draw(args);\r\n\r\n tree.clearImageryTreesAndClassifiers();\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (undefined === args)\r\n return undefined;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n return new RealityTileDrawArgs(args, args.worldToViewMap, args.frustumPlanes, undefined, tree?.layerHandler.layerClassifiers);\r\n }\r\n\r\n protected override getViewFlagOverrides(_tree: TileTree) {\r\n return createViewFlagOverrides(false, this._settings.applyTerrain ? undefined : false);\r\n }\r\n\r\n protected override getSymbologyOverrides(_tree: TileTree) {\r\n return this._symbologyOverrides;\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n this._layerRefHandler.discloseTileTrees(trees);\r\n\r\n if (this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n\r\n public imageryTreeFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): ImageryMapLayerTreeReference[] {\r\n const imageryTrees: ImageryMapLayerTreeReference[] = [];\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || tree.modelId !== mapTreeModelId)\r\n return imageryTrees;\r\n\r\n for (const imageryTree of this._layerRefHandler.layerTrees)\r\n if (imageryTree && imageryTree.treeOwner.tileTree && imageryTree.treeOwner.tileTree.modelId === layerTreeModelId)\r\n imageryTrees.push(imageryTree);\r\n\r\n return imageryTrees;\r\n }\r\n\r\n public layerFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): MapLayerInfoFromTileTree[] {\r\n const imageryTree = this.imageryTreeFromTreeModelIds(mapTreeModelId, layerTreeModelId);\r\n return imageryTree.map((tree) => {\r\n const isBaseLayer = (this._layerRefHandler.baseImageryLayerIncluded && tree.layerIndex === 0);\r\n return {\r\n isBaseLayer,\r\n index: isBaseLayer ? undefined : { isOverlay: this._layerRefHandler.isOverlay, index: this._layerRefHandler.baseImageryLayerIncluded ? tree.layerIndex - 1 : tree.layerIndex },\r\n settings: tree.layerSettings, provider: tree.imageryProvider,\r\n };\r\n });\r\n }\r\n\r\n // Utility method that execute the provided function for every *imagery* tiles under a given HitDetail object.\r\n private async forEachImageryTileHit(hit: HitDetail, func: (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => Promise<void>): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const backgroundMapGeometry = hit.viewport.displayStyle.getBackgroundMapGeometry();\r\n if (undefined === backgroundMapGeometry)\r\n return undefined;\r\n\r\n const worldPoint = hit.hitPoint.clone();\r\n let cartoGraphic: Cartographic | undefined;\r\n try {\r\n cartoGraphic = (await backgroundMapGeometry.dbToWGS84CartographicFromGcs([worldPoint]))[0];\r\n } catch {\r\n }\r\n if (!cartoGraphic) {\r\n return undefined;\r\n }\r\n\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef.length > 0) {\r\n if (hit.tileId !== undefined) {\r\n const terrainQuadId = QuadId.createFromContentId(hit.tileId);\r\n const terrainTile = tree.tileFromQuadId(terrainQuadId);\r\n\r\n for (const treeRef of imageryTreeRef) {\r\n const processedTileIds: string[] = [];\r\n if (terrainTile && terrainTile.imageryTiles) {\r\n const imageryTree = treeRef.treeOwner.tileTree as ImageryMapTileTree;\r\n if (imageryTree) {\r\n for (const imageryTile of terrainTile.imageryTiles) {\r\n if (!processedTileIds.includes(imageryTile.contentId)\r\n && imageryTree === imageryTile.imageryTree\r\n && imageryTile.rectangle.containsCartographic(cartoGraphic)) {\r\n processedTileIds.push(imageryTile.contentId);\r\n try {\r\n await func(treeRef, imageryTile.quadId, cartoGraphic, imageryTree);\r\n } catch {\r\n // continue iterating even though we got a failure.\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override canSupplyToolTip(hit: HitDetail): boolean {\r\n const tree = this.treeOwner.tileTree;\r\n return undefined !== tree && tree.modelId === hit.modelId;\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree | undefined;\r\n if (undefined === tree || tree.modelId !== hit.modelId)\r\n return undefined;\r\n\r\n let carto: Cartographic | undefined;\r\n\r\n const strings: string[] = [];\r\n\r\n const getTooltipFunc = async (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.ImageryLayer\")}: ${imageryTreeRef.layerSettings.name}`);\r\n carto = cartoGraphic;\r\n await imageryTree.imageryLoader.getToolTip(strings, quadId, cartoGraphic, imageryTree);\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getTooltipFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n if (carto) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Latitude\")}: ${carto.latitudeDegrees.toFixed(4)}`);\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Longitude\")}: ${carto.longitudeDegrees.toFixed(4)}`);\r\n if (this.settings.applyTerrain && tree.terrainExaggeration !== 0.0) {\r\n const geodeticHeight = (carto.height - tree.bimElevationBias) / tree.terrainExaggeration;\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Height\")}: ${geodeticHeight.toFixed(1)} ${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.SeaLevel\")}: ${(geodeticHeight - tree.geodeticOffset).toFixed(1)}`);\r\n }\r\n }\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override async getMapFeatureInfo(hit: HitDetail, options?: MapFeatureInfoOptions): Promise<MapLayerFeatureInfo[] | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const info: MapLayerFeatureInfo[] = [];\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef !== undefined) {\r\n\r\n const getFeatureInfoFunc = async (_imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n try {\r\n await imageryTree.imageryLoader.getMapFeatureInfo(info, quadId, cartoGraphic, imageryTree, hit, options);\r\n } catch {\r\n }\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getFeatureInfoFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n }\r\n\r\n return info;\r\n }\r\n\r\n /** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [addAttributions] instead. */\r\n public override addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (tree) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n tree.mapLoader.terrainProvider.addLogoCards(cards, vp);\r\n for (const imageryTreeRef of this._layerRefHandler.layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n imageryTree.addLogoCards(cards, vp);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Add logo cards to logo div. */\r\n public override async addAttributions(cards: HTMLTableElement, vp: ScreenViewport): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n\r\n if (tree) {\r\n const promises = [tree.mapLoader.terrainProvider.addAttributions(cards, vp)];\r\n\r\n for (const imageryTreeRef of this._layerRefHandler.layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n promises.push(imageryTree.addAttributions(cards, vp));\r\n }\r\n }\r\n await Promise.all(promises);\r\n }\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n for (const layerTree of this._layerRefHandler.layerTrees) {\r\n if (layerTree)\r\n layerTree.decorate(context);\r\n }\r\n }\r\n}\r\n\r\n/** Returns whether a GCS converter is available.\r\n * @internal\r\n */\r\nexport async function getGcsConverterAvailable(iModel: IModelConnection) {\r\n if (iModel.noGcsDefined)\r\n return false;\r\n\r\n // Determine if we have a usable GCS.\r\n const converter = iModel.geoServices.getConverter(\"WGS84\");\r\n if (undefined === converter)\r\n return false;\r\n const requestProps: XYZProps[] = [{ x: 0, y: 0, z: 0 }];\r\n let haveConverter;\r\n try {\r\n const responseProps = await converter.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n haveConverter = responseProps.iModelCoords.length === 1 && responseProps.iModelCoords[0].s !== GeoCoordStatus.NoGCSDefined;\r\n } catch {\r\n haveConverter = false;\r\n }\r\n return haveConverter;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapTileTree.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTileTree.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, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, CompressedId64Set, expectDefined, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BackgroundMapSettings, BaseLayerSettings, Cartographic, ColorDef, FeatureAppearance, GeoCoordStatus, GlobeMode, MapLayerSettings, ModelMapLayerDrapeTarget, ModelMapLayerSettings, PlanarClipMaskPriority, TerrainHeightOriginMode,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n Angle, AngleSweep, Constant, Ellipsoid, EllipsoidPatch, Point3d, Range1d, Range3d, Ray3d, Transform, Vector3d, XYZProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ApproximateTerrainHeights } from \"../../ApproximateTerrainHeights\";\r\nimport { TerrainDisplayOverrides } from \"../../DisplayStyleState\";\r\nimport { HitDetail } from \"../../HitDetail\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { FeatureSymbology } from \"../../render/FeatureSymbology\";\r\nimport { DecorateContext, SceneContext } from \"../../ViewContext\";\r\nimport { MapLayerScaleRangeVisibility, ScreenViewport } from \"../../Viewport\";\r\nimport {\r\n BingElevationProvider, createDefaultViewFlagOverrides, DisclosedTileTreeSet, EllipsoidTerrainProvider, GeometryTileTreeReference,\r\n ImageryMapLayerTreeReference, ImageryMapTileTree, ImageryTileTreeState, LayerTileTreeHandler, LayerTileTreeReferenceHandler, MapCartoRectangle, MapFeatureInfoOptions, MapLayerFeatureInfo, MapLayerImageryProvider, MapLayerIndex, MapLayerTileTreeReference, MapLayerTreeSetting, MapTile,\r\n MapTileLoader, MapTilingScheme, PlanarTilePatch, QuadId,\r\n RealityTile, RealityTileDrawArgs, RealityTileTree, RealityTileTreeParams, TerrainMeshProviderOptions, Tile, TileDrawArgs, TileLoadPriority, TileParams, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier, UpsampledMapTile, WebMercatorTilingScheme,\r\n} from \"../internal\";\r\n\r\nconst scratchPoint = Point3d.create();\r\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\r\nconst scratchCorner = Point3d.createZero();\r\nconst scratchZNormal = Vector3d.create(0, 0, 1);\r\n\r\n/** Map tile tree scale range visibility values.\r\n * @beta */\r\nexport enum MapTileTreeScaleRangeVisibility {\r\n /** state is currently unknown (i.e. never been displayed) */\r\n Unknown = 0,\r\n\r\n /** all currently selected tree tiles are visible (i.e within the scale range) */\r\n Visible,\r\n\r\n /** all currently selected tree tiles are hidden (i.e outside the scale range) */\r\n Hidden,\r\n\r\n /** currently selected tree tiles are partially visible (i.e some tiles are within the scale range, and some are outside.) */\r\n Partial\r\n}\r\n\r\n/**\r\n* Provides map layer information for a given tile tree.\r\n* @internal\r\n*/\r\nexport interface MapLayerInfoFromTileTree {\r\n /** Indicate if the map layer represents the base layer */\r\n isBaseLayer: boolean;\r\n\r\n /** Map layer index; undefined if base map */\r\n index?: MapLayerIndex;\r\n\r\n /** Settings for the map layer (or the base layer)*/\r\n settings: MapLayerSettings;\r\n\r\n /** Provider for the map layer (or the base layer) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\n/** A [quad tree](https://en.wikipedia.org/wiki/Quadtree) consisting of [[MapTile]]s representing the map imagery draped onto the surface of the Earth.\r\n * A `MapTileTree` enables display of a globe or planar map with [map imagery](https://en.wikipedia.org/wiki/Tiled_web_map) obtained from any number of sources, such as\r\n * [Bing](https://learn.microsoft.com/en-us/bingmaps/), [OpenStreetMap](https://wiki.openstreetmap.org/wiki/API), and [GIS servers](https://wiki.openstreetmap.org/wiki/API).\r\n * The specific imagery displayed is determined by a [[Viewport]]'s [MapImagerySettings]($common) and [BackgroundMapSettings]($common).\r\n *\r\n * The map or globe may be smooth, or feature 3d geometry supplied by a [[TerrainProvider]].\r\n * The terrain displayed in a [[Viewport]] is determined by its [TerrainSettings]($common).\r\n * @public\r\n */\r\n\r\nexport class MapTileTree extends RealityTileTree {\r\n /** @internal */\r\n public ecefToDb: Transform;\r\n /** @internal */\r\n public bimElevationBias: number;\r\n /** @internal */\r\n public geodeticOffset: number;\r\n /** @internal */\r\n public sourceTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n private _mercatorFractionToDb: Transform;\r\n /** @internal */\r\n public earthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public minEarthEllipsoid: Ellipsoid;\r\n /** @internal */\r\n public maxEarthEllipsoid: Ellipsoid;\r\n /** Determines whether the map displays as a plane or an ellipsoid. */\r\n public readonly globeMode: GlobeMode;\r\n /** @internal */\r\n public globeOrigin: Point3d;\r\n /** @internal */\r\n private _mercatorTilingScheme: MapTilingScheme;\r\n /** @internal */\r\n public useDepthBuffer: boolean;\r\n /** @internal */\r\n public isOverlay: boolean;\r\n /** @internal */\r\n public terrainExaggeration: number;\r\n /** @internal */\r\n public baseColor?: ColorDef;\r\n /** @internal */\r\n public baseTransparent: boolean;\r\n /** @internal */\r\n public mapTransparent: boolean;\r\n /** @internal */\r\n public produceGeometry?: boolean;\r\n /** @internal */\r\n public layerImageryTrees: MapLayerTreeSetting[] = [];\r\n\r\n private readonly _layerHandler: LayerTileTreeHandler;\r\n\r\n /** @internal */\r\n public override get layerHandler() { return this._layerHandler; }\r\n\r\n /** @internal */\r\n constructor(params: RealityTileTreeParams, ecefToDb: Transform, bimElevationBias: number, geodeticOffset: number,\r\n sourceTilingScheme: MapTilingScheme, id: MapTreeId, applyTerrain: boolean) {\r\n super(params);\r\n this.ecefToDb = ecefToDb;\r\n this.bimElevationBias = bimElevationBias;\r\n this.geodeticOffset = geodeticOffset;\r\n this.sourceTilingScheme = sourceTilingScheme;\r\n this._mercatorTilingScheme = new WebMercatorTilingScheme();\r\n this._mercatorFractionToDb = this._mercatorTilingScheme.computeMercatorFractionToDb(ecefToDb, bimElevationBias, params.iModel, applyTerrain);\r\n const quadId = new QuadId(sourceTilingScheme.rootLevel, 0, 0);\r\n this.globeOrigin = this.ecefToDb.getOrigin().clone();\r\n this.earthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\n const globalHeightRange = applyTerrain ? ApproximateTerrainHeights.instance.globalHeightRange : Range1d.createXX(0, 0);\r\n const globalRectangle = MapCartoRectangle.createMaximum();\r\n\r\n this.globeMode = id.globeMode;\r\n this.isOverlay = id.isOverlay;\r\n this.useDepthBuffer = id.useDepthBuffer;\r\n this.terrainExaggeration = id.terrainExaggeration;\r\n this.baseColor = id.baseColor;\r\n this.baseTransparent = id.baseTransparent;\r\n this.mapTransparent = id.mapTransparent;\r\n if (applyTerrain) {\r\n this.minEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.equator + globalHeightRange.low, Constant.earthRadiusWGS84.polar + globalHeightRange.low);\r\n this.maxEarthEllipsoid = Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.ecefToDb.matrix, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.equator + globalHeightRange.high, Constant.earthRadiusWGS84.polar + globalHeightRange.high);\r\n this.produceGeometry = id.produceGeometry;\r\n } else {\r\n this.minEarthEllipsoid = this.earthEllipsoid;\r\n this.maxEarthEllipsoid = this.earthEllipsoid;\r\n }\r\n\r\n const rootPatch = EllipsoidPatch.createCapture(\r\n this.maxEarthEllipsoid, AngleSweep.createStartSweepRadians(0, Angle.pi2Radians),\r\n AngleSweep.createStartSweepRadians(-Angle.piOver2Radians, Angle.piRadians),\r\n );\r\n\r\n let range;\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n range = rootPatch.range();\r\n } else {\r\n const corners = this.getFractionalTileCorners(quadId);\r\n this._mercatorFractionToDb.multiplyPoint3dArrayInPlace(corners);\r\n range = Range3d.createArray(MapTile.computeRangeCorners(corners, Vector3d.create(0, 0, 1), 0, scratchCorners, globalHeightRange));\r\n }\r\n\r\n this._rootTile = this.createGlobeChild({ contentId: quadId.contentId, maximumSize: 0, range }, quadId, range.corners(), globalRectangle, rootPatch, undefined);\r\n\r\n this._layerHandler = new LayerTileTreeHandler(this);\r\n }\r\n\r\n /** @internal */\r\n public override get parentsAndChildrenExclusive() {\r\n // If we are not depth buffering we force parents and exclusive to false to cause the map tiles to be sorted\r\n // by depth so that painters algorithm will approximate correct depth display.\r\n return this.useDepthBuffer ? this.loader.parentsAndChildrenExclusive : false;\r\n }\r\n\r\n /** Return the imagery tile tree state of matching the provided imagery tree id.\r\n * @internal\r\n */\r\n public getImageryTreeState(imageryTreeId: string) {\r\n return this._layerHandler.imageryTreeState.get(imageryTreeId);\r\n }\r\n\r\n /** Return a cloned dictionary of the imagery tile tree states\r\n * @internal\r\n */\r\n public cloneImageryTreeState() {\r\n const clone = new Map<Id64String, ImageryTileTreeState>();\r\n for (const [treeId, state] of this._layerHandler.imageryTreeState) {\r\n clone.set(treeId, state.clone());\r\n }\r\n return clone;\r\n }\r\n\r\n /** @internal */\r\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\r\n return (this._rootTile as MapTile).tileFromQuadId(quadId);\r\n }\r\n\r\n protected override collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n super.collectClassifierGraphics(args, selectedTiles);\r\n this._layerHandler.collectClassifierGraphics(args, selectedTiles);\r\n }\r\n\r\n /** @internal */\r\n public clearImageryTreesAndClassifiers() {\r\n this._layerHandler.layerImageryTrees.length = 0;\r\n this._layerHandler.layerSettings.clear();\r\n this._layerHandler.modelIdToIndex.clear();\r\n this._layerHandler.layerClassifiers.clear();\r\n }\r\n\r\n /** @internal */\r\n public override get isTransparent() {\r\n return this.mapTransparent || this.baseTransparent;\r\n }\r\n\r\n /** @internal */\r\n public override get maxDepth() {\r\n let maxDepth = this.loader.maxDepth;\r\n /** NB: need to use local layerImageTrees because of the order super() is called (before layerHandler exists on this class)! */\r\n this.layerImageryTrees?.forEach((layerImageryTree) => maxDepth = Math.max(maxDepth, layerImageryTree.tree.maxDepth));\r\n\r\n return maxDepth;\r\n }\r\n\r\n /** @internal */\r\n public createPlanarChild(params: TileParams, quadId: QuadId, corners: Point3d[], normal: Vector3d, rectangle: MapCartoRectangle, chordHeight: number, heightRange?: Range1d): MapTile | undefined {\r\n const childAvailable = this.mapLoader.isTileAvailable(quadId);\r\n if (!childAvailable && this.produceGeometry)\r\n return undefined;\r\n\r\n const patch = new PlanarTilePatch(corners, normal, chordHeight);\r\n const cornerNormals = this.getCornerRays(rectangle);\r\n if (childAvailable)\r\n return new MapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals);\r\n\r\n assert(params.parent instanceof MapTile);\r\n let loadableTile: MapTile | undefined = params.parent;\r\n while (loadableTile?.isUpsampled)\r\n loadableTile = loadableTile.parent as MapTile | undefined;\r\n\r\n assert(undefined !== loadableTile);\r\n return new UpsampledMapTile(params, this, quadId, patch, rectangle, heightRange, cornerNormals, loadableTile);\r\n }\r\n\r\n /** @internal */\r\n public createGlobeChild(params: TileParams, quadId: QuadId, _rangeCorners: Point3d[], rectangle: MapCartoRectangle, ellipsoidPatch: EllipsoidPatch, heightRange?: Range1d): MapTile {\r\n return new MapTile(params, this, quadId, ellipsoidPatch, rectangle, heightRange, this.getCornerRays(rectangle));\r\n }\r\n\r\n /** @internal */\r\n public getChildHeightRange(quadId: QuadId, rectangle: MapCartoRectangle, parent: MapTile): Range1d | undefined {\r\n return this.mapLoader.getChildHeightRange(quadId, rectangle, parent);\r\n }\r\n\r\n /** Reprojection does not work with very large tiles so just do linear transform.\r\n * @internal\r\n */\r\n public static minReprojectionDepth = 8;\r\n /** @internal */\r\n public static maxGlobeDisplayDepth = 8;\r\n /** @internal */\r\n public static minDisplayableDepth = 3;\r\n /** @internal */\r\n public get mapLoader() { return this.loader as MapTileLoader; }\r\n\r\n /** @internal */\r\n public override getBaseRealityDepth(sceneContext: SceneContext) {\r\n // If the view has ever had global scope then preload low level (global) tiles.\r\n return (sceneContext.viewport.view.maxGlobalScopeFactor > 1) ? MapTileTree.minDisplayableDepth : -1;\r\n }\r\n\r\n /** @internal */\r\n public doCreateGlobeChildren(tile: Tile): boolean {\r\n if (this.globeMode !== GlobeMode.Ellipsoid)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.maxGlobeDisplayDepth) // If the depth is too low (tile is too large) display as globe.\r\n return true;\r\n\r\n return false; // Display as globe if more than 100 KM from project.\r\n }\r\n\r\n /** @internal */\r\n public override doReprojectChildren(tile: Tile): boolean {\r\n if (this._gcsConverter === undefined)\r\n return false;\r\n\r\n const childDepth = tile.depth + 1;\r\n if (childDepth < MapTileTree.minReprojectionDepth) // If the depth is too low (tile is too large) omit reprojection.\r\n return false;\r\n\r\n return this.cartesianRange.intersectsRange(tile.range);\r\n }\r\n\r\n /** @internal */\r\n public getCornerRays(rectangle: MapCartoRectangle): Ray3d[] | undefined {\r\n const rays = new Array<Ray3d>();\r\n if (this.globeMode === GlobeMode.Ellipsoid) {\r\n rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))));\r\n rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.high.y))));\r\n rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.low.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))));\r\n rays.push(expectDefined(this.earthEllipsoid.radiansToUnitNormalRay(rectangle.high.x, Cartographic.parametricLatitudeFromGeodeticLatitude(rectangle.low.y))));\r\n } else {\r\n const mercatorFractionRange = rectangle.getTileFractionRange(this._mercatorTilingScheme);\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.high.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.low.x, mercatorFractionRange.low.y), scratchZNormal));\r\n rays.push(Ray3d.createCapture(this._mercatorFractionToDb.multiplyXYZ(mercatorFractionRange.high.x, mercatorFractionRange.low.y), scratchZNormal));\r\n }\r\n return rays;\r\n }\r\n\r\n /** @internal */\r\n public pointAboveEllipsoid(point: Point3d): boolean {\r\n return expectDefined(this.earthEllipsoid.worldToLocal(point, scratchPoint)).magnitude() > 1;\r\n }\r\n\r\n private getMercatorFractionChildGridPoints(tile: MapTile, columnCount: number, rowCount: number): Point3d[] {\r\n const gridPoints = [];\r\n const quadId = tile.quadId;\r\n const deltaX = 1.0 / columnCount, deltaY = 1.0 / rowCount;\r\n for (let row = 0; row <= rowCount; row++) {\r\n for (let column = 0; column <= columnCount; column++) {\r\n const xFraction = this.sourceTilingScheme.tileXToFraction(quadId.column + column * deltaX, quadId.level);\r\n const yFraction = this.sourceTilingScheme.tileYToFraction(quadId.row + row * deltaY, quadId.level);\r\n\r\n gridPoints.push(Point3d.create(xFraction, yFraction, 0));\r\n }\r\n }\r\n // If not mercator already need to remap latitude...\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n for (const gridPoint of gridPoints)\r\n gridPoint.y = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(gridPoint.y));\r\n\r\n return gridPoints;\r\n }\r\n\r\n private getChildCornersFromGridPoints(gridPoints: Point3d[], columnCount: number, rowCount: number) {\r\n const childCorners = new Array<Point3d[]>();\r\n for (let row = 0; row < rowCount; row++) {\r\n for (let column = 0; column < columnCount; column++) {\r\n const index0 = column + row * (columnCount + 1);\r\n const index1 = index0 + (columnCount + 1);\r\n childCorners.push([gridPoints[index0], gridPoints[index0 + 1], gridPoints[index1], gridPoints[index1 + 1]]);\r\n }\r\n }\r\n return childCorners;\r\n }\r\n\r\n /** @internal */\r\n public getCachedReprojectedPoints(gridPoints: Point3d[]): (Point3d | undefined)[] | undefined {\r\n const requestProps = [];\r\n for (const gridPoint of gridPoints)\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(gridPoint.x) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(gridPoint.y) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n\r\n const iModelCoordinates = expectDefined(this._gcsConverter).getCachedIModelCoordinatesFromGeoCoordinates(requestProps);\r\n\r\n if (iModelCoordinates.missing)\r\n return undefined;\r\n\r\n return iModelCoordinates.result.map((result) => !result || result.s ? undefined : Point3d.fromJSON(result.p));\r\n }\r\n\r\n /** Minimize reprojection requests by requesting this corners tile and a grid that will include all points for 4 levels of descendants.\r\n * This greatly reduces the number of reprojection requests which currently require a roundtrip through the backend.\r\n * @internal\r\n */\r\n public async loadReprojectionCache(tile: MapTile): Promise<void> {\r\n const quadId = tile.quadId;\r\n const xRange = Range1d.createXX(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level));\r\n const yRange = Range1d.createXX(this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level));\r\n const cacheDepth = 4, cacheDimension = 2 ** cacheDepth;\r\n const delta = 1.0 / cacheDimension;\r\n const requestProps = [];\r\n\r\n for (let row = 0; row <= cacheDimension; row++) {\r\n for (let column = 0; column <= cacheDimension; column++) {\r\n let yFraction = yRange.fractionToPoint(row * delta);\r\n if (!(this.sourceTilingScheme instanceof WebMercatorTilingScheme))\r\n yFraction = this._mercatorTilingScheme.latitudeToYFraction(this.sourceTilingScheme.yFractionToLatitude(yFraction));\r\n requestProps.push({\r\n x: this._mercatorTilingScheme.xFractionToLongitude(xRange.fractionToPoint(column * delta)) * Angle.degreesPerRadian,\r\n y: this._mercatorTilingScheme.yFractionToLatitude(yFraction) * Angle.degreesPerRadian,\r\n z: this.bimElevationBias,\r\n });\r\n }\r\n }\r\n\r\n await expectDefined(this._gcsConverter).getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n }\r\n\r\n private static _scratchCarto = Cartographic.createZero();\r\n\r\n /** Get the corners for planar children.\r\n * This generally will resolve immediately, but may require an asynchronous request for reprojecting the corners.\r\n * @internal\r\n */\r\n public getPlanarChildCorners(tile: MapTile, columnCount: number, rowCount: number, resolve: (childCorners: Point3d[][]) => void) {\r\n const resolveCorners = (points: Point3d[], reprojected: (Point3d | undefined)[] | undefined = undefined) => {\r\n for (let i = 0; i < points.length; i++) {\r\n const gridPoint = points[i];\r\n this._mercatorFractionToDb.multiplyPoint3d(gridPoint, scratchCorner);\r\n if (this.globeMode !== GlobeMode.Ellipsoid || this.cartesianRange.containsPoint(scratchCorner)) {\r\n if (reprojected !== undefined && reprojected[i] !== undefined)\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n reprojected[i]!.clone(gridPoint);\r\n else\r\n scratchCorner.clone(gridPoint);\r\n } else {\r\n this._mercatorTilingScheme.fractionToCartographic(gridPoint.x, gridPoint.y, MapTileTree._scratchCarto);\r\n this.earthEllipsoid.radiansToPoint(MapTileTree._scratchCarto.longitude, Cartographic.parametricLatitudeFromGeodeticLatitude(MapTileTree._scratchCarto.latitude), gridPoint);\r\n const cartesianDistance = this.cartesianRange.distanceToPoint(scratchCorner);\r\n if (cartesianDistance < this.cartesianTransitionDistance)\r\n scratchCorner.interpolate(cartesianDistance / this.cartesianTransitionDistance, gridPoint, gridPoint);\r\n }\r\n }\r\n resolve(this.getChildCornersFromGridPoints(points, columnCount, rowCount));\r\n };\r\n\r\n let reprojectedPoints: (Point3d | undefined)[] | undefined;\r\n const gridPoints = this.getMercatorFractionChildGridPoints(tile, columnCount, rowCount);\r\n if (this.doReprojectChildren(tile)) {\r\n reprojectedPoints = this.getCachedReprojectedPoints(gridPoints);\r\n if (reprojectedPoints) {\r\n // If the reprojected corners are in the cache, resolve immediately.\r\n resolveCorners(gridPoints, reprojectedPoints);\r\n } else {\r\n // If the reprojected corners are not in cache request them - but also request reprojection of a grid that will include descendent corners to ensure they can\r\n // be reloaded without expensive reprojection requests.\r\n this.loadReprojectionCache(tile).then(() => {\r\n const reprojected = this.getCachedReprojectedPoints(gridPoints);\r\n assert(reprojected !== undefined); // We just cached them... they better be there now.\r\n resolveCorners(gridPoints, reprojected);\r\n }).catch((_error: Error) => {\r\n resolveCorners(gridPoints);\r\n });\r\n }\r\n } else {\r\n resolveCorners(gridPoints);\r\n }\r\n }\r\n\r\n /** Scan the list of currently selected reality tiles, and fire the viewport's 'onMapLayerScaleRangeVisibilityChanged ' event\r\n * if any scale range visibility change is detected for one more map-layer definition.\r\n * @internal\r\n */\r\n public override reportTileVisibility(args: TileDrawArgs, selected: RealityTile[]) {\r\n\r\n const debugControl = args.context.target.debugControl;\r\n\r\n const layersVisibilityBefore = this.cloneImageryTreeState();\r\n\r\n const changes = new Array<MapLayerScaleRangeVisibility>();\r\n\r\n if (!layersVisibilityBefore)\r\n return;\r\n\r\n for (const [treeId] of layersVisibilityBefore) {\r\n const treeVisibility = this.getImageryTreeState(treeId);\r\n if (treeVisibility) {\r\n treeVisibility.reset();\r\n }\r\n }\r\n\r\n for (const selectedTile of selected) {\r\n if (selectedTile instanceof MapTile) {\r\n let selectedImageryTiles = selectedTile.imageryTiles;\r\n if (selectedTile.hiddenImageryTiles) {\r\n selectedImageryTiles = selectedImageryTiles ? [...selectedImageryTiles, ...selectedTile.hiddenImageryTiles] : selectedTile.hiddenImageryTiles;\r\n }\r\n\r\n const leafTiles = selectedTile.highResolutionReplacementTiles;\r\n if (leafTiles) {\r\n for (const tile of leafTiles) {\r\n const treeState = this.getImageryTreeState(tile.tree.id);\r\n treeState?.setScaleRangeVisibility(false);\r\n }\r\n }\r\n\r\n if (selectedImageryTiles) {\r\n for (const selectedImageryTile of selectedImageryTiles) {\r\n const treeState = this.getImageryTreeState(selectedImageryTile.tree.id);\r\n if (treeState) {\r\n if (selectedImageryTile.isOutOfLodRange) {\r\n treeState.setScaleRangeVisibility(false);\r\n } else {\r\n treeState.setScaleRangeVisibility(true);\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const [treeId, prevState] of layersVisibilityBefore) {\r\n const newState = this.getImageryTreeState(treeId);\r\n if (newState) {\r\n\r\n const prevVisibility = prevState.getScaleRangeVisibility();\r\n const visibility = newState.getScaleRangeVisibility();\r\n if (prevVisibility !== visibility) {\r\n\r\n if (debugControl && debugControl.logRealityTiles) {\r\n // eslint-disable-next-line no-console\r\n console.log(`ImageryTileTree '${treeId}' changed prev state: '${MapTileTreeScaleRangeVisibility[prevVisibility]}' new state: '${MapTileTreeScaleRangeVisibility[visibility]}'`);\r\n }\r\n\r\n const mapLayersIndexes = args.context.viewport.getMapLayerIndexesFromIds(this.id, treeId);\r\n for (const index of mapLayersIndexes) {\r\n changes.push({ index: index.index, isOverlay: index.isOverlay, visibility });\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n if (changes.length !== 0) {\r\n args.context.viewport.onMapLayerScaleRangeVisibilityChanged.raiseEvent(changes);\r\n }\r\n\r\n }\r\n\r\n /** @internal */\r\n public getFractionalTileCorners(quadId: QuadId): Point3d[] {\r\n const corners: Point3d[] = [];\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n corners.push(Point3d.create(this.sourceTilingScheme.tileXToFraction(quadId.column + 1, quadId.level), this.sourceTilingScheme.tileYToFraction(quadId.row + 1, quadId.level), 0.0));\r\n return corners;\r\n }\r\n\r\n /** @internal */\r\n public getTileRectangle(quadId: QuadId): MapCartoRectangle {\r\n return this.sourceTilingScheme.tileXYToRectangle(quadId.column, quadId.row, quadId.level);\r\n }\r\n\r\n /** @internal */\r\n public getLayerIndex(imageryTreeId: Id64String) {\r\n const index = this._layerHandler.modelIdToIndex.get(imageryTreeId);\r\n return index === undefined ? -1 : index;\r\n }\r\n\r\n /** @internal */\r\n public getLayerTransparency(imageryTreeId: Id64String): number {\r\n const layerSettings = this._layerHandler.layerSettings.get(imageryTreeId);\r\n assert(undefined !== layerSettings);\r\n return undefined === layerSettings || !layerSettings.transparency ? 0.0 : layerSettings.transparency;\r\n }\r\n}\r\n\r\ninterface MapTreeId {\r\n tileUserId: number;\r\n applyTerrain: boolean;\r\n terrainProviderName: string;\r\n terrainDataSource: string;\r\n terrainHeightOrigin: number;\r\n terrainHeightOriginMode: number;\r\n terrainExaggeration: number;\r\n mapGroundBias: number;\r\n wantSkirts: boolean;\r\n wantNormals: boolean;\r\n globeMode: GlobeMode;\r\n useDepthBuffer: boolean;\r\n isOverlay: boolean;\r\n baseColor?: ColorDef;\r\n baseTransparent: boolean;\r\n mapTransparent: boolean;\r\n maskModelIds?: string;\r\n produceGeometry?: boolean;\r\n}\r\n\r\n/** @internal */\r\nclass MapTileTreeProps implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public location = Transform.createIdentity();\r\n public yAxisUp = true;\r\n public is3d = true;\r\n public rootTile = { contentId: \"\", range: Range3d.createNull(), maximumSize: 0 };\r\n public loader: MapTileLoader;\r\n public iModel: IModelConnection;\r\n public get priority(): TileLoadPriority { return this.loader.priority; }\r\n\r\n public constructor(modelId: Id64String, loader: MapTileLoader, iModel: IModelConnection, public gcsConverterAvailable: boolean) {\r\n this.id = this.modelId = modelId;\r\n this.loader = loader;\r\n this.iModel = iModel;\r\n }\r\n}\r\n\r\nfunction createViewFlagOverrides(wantLighting: boolean, wantThematic: false | undefined) {\r\n return createDefaultViewFlagOverrides({ clipVolume: false, lighting: wantLighting, thematic: wantThematic });\r\n}\r\n\r\nclass MapTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public compareTileTreeIds(lhs: MapTreeId, rhs: MapTreeId): number {\r\n let cmp = compareNumbers(lhs.tileUserId, rhs.tileUserId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.isOverlay, rhs.isOverlay);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantSkirts, rhs.wantSkirts);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.wantNormals, rhs.wantNormals);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.globeMode, rhs.globeMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.baseColor ? lhs.baseColor.tbgr : -1, rhs.baseColor ? rhs.baseColor.tbgr : -1);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.baseTransparent, rhs.baseTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.mapTransparent, rhs.mapTransparent);\r\n if (0 === cmp) {\r\n cmp = compareBooleans(lhs.applyTerrain, rhs.applyTerrain);\r\n if (0 === cmp) {\r\n if (lhs.applyTerrain) {\r\n // Terrain-only settings.\r\n cmp = compareStrings(lhs.terrainProviderName, rhs.terrainProviderName);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.terrainDataSource, rhs.terrainDataSource);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOrigin, rhs.terrainHeightOrigin);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainHeightOriginMode, rhs.terrainHeightOriginMode);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.terrainExaggeration, rhs.terrainExaggeration);\r\n if (0 === cmp)\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n // Non-Terrain (flat) settings.\r\n cmp = compareNumbers(lhs.mapGroundBias, rhs.mapGroundBias);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.useDepthBuffer, rhs.useDepthBuffer);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n private async computeHeightBias(heightOrigin: number, heightOriginMode: TerrainHeightOriginMode, exaggeration: number, iModel: IModelConnection, elevationProvider: BingElevationProvider): Promise<number> {\r\n const projectCenter = iModel.projectExtents.center;\r\n switch (heightOriginMode) {\r\n case TerrainHeightOriginMode.Ground:\r\n return heightOrigin + exaggeration * (await elevationProvider.getHeightValue(projectCenter, iModel, true));\r\n\r\n case TerrainHeightOriginMode.Geodetic:\r\n return heightOrigin;\r\n\r\n case TerrainHeightOriginMode.Geoid:\r\n return heightOrigin + await elevationProvider.getGeodeticToSeaLevelOffset(projectCenter, iModel);\r\n }\r\n }\r\n\r\n public async createTileTree(id: MapTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n let bimElevationBias = 0, terrainProvider, geodeticOffset = 0;\r\n let applyTerrain = id.applyTerrain;\r\n const modelId = iModel.transientIds.getNext();\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n const terrainOpts: TerrainMeshProviderOptions = {\r\n wantSkirts: id.wantSkirts,\r\n exaggeration: id.terrainExaggeration,\r\n wantNormals: id.wantNormals,\r\n dataSource: id.terrainDataSource,\r\n produceGeometry: id.produceGeometry,\r\n };\r\n\r\n if (id.applyTerrain) {\r\n await ApproximateTerrainHeights.instance.initialize();\r\n const elevationProvider = new BingElevationProvider();\r\n\r\n bimElevationBias = - await this.computeHeightBias(id.terrainHeightOrigin, id.terrainHeightOriginMode, id.terrainExaggeration, iModel, elevationProvider);\r\n geodeticOffset = await elevationProvider.getGeodeticToSeaLevelOffset(iModel.projectExtents.center, iModel);\r\n const provider = IModelApp.terrainProviderRegistry.find(id.terrainProviderName);\r\n if (provider)\r\n terrainProvider = await provider.createTerrainMeshProvider(terrainOpts);\r\n\r\n if (!terrainProvider) {\r\n applyTerrain = false;\r\n geodeticOffset = 0;\r\n }\r\n }\r\n\r\n if (!terrainProvider) {\r\n terrainProvider = new EllipsoidTerrainProvider(terrainOpts);\r\n bimElevationBias = id.mapGroundBias;\r\n }\r\n\r\n const loader = new MapTileLoader(iModel, modelId, bimElevationBias, terrainProvider);\r\n const ecefToDb = iModel.getMapEcefToDb(bimElevationBias);\r\n\r\n if (id.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(id.maskModelIds));\r\n\r\n const treeProps = new MapTileTreeProps(modelId, loader, iModel, gcsConverterAvailable);\r\n return new MapTileTree(treeProps, ecefToDb, bimElevationBias, geodeticOffset, terrainProvider.tilingScheme, id, applyTerrain);\r\n }\r\n}\r\n\r\nconst mapTreeSupplier = new MapTreeSupplier();\r\n\r\n/** @internal */\r\ntype CheckTerrainDisplayOverride = () => TerrainDisplayOverrides | undefined;\r\n\r\n/** Specialization of tile tree that represents background map.\r\n * @internal\r\n */\r\nexport class MapTileTreeReference extends TileTreeReference {\r\n private _tileUserId: number;\r\n private _settings: BackgroundMapSettings;\r\n private _symbologyOverrides: FeatureSymbology.Overrides | undefined;\r\n private _planarClipMask?: PlanarClipMaskState;\r\n private _layerRefHandler: LayerTileTreeReferenceHandler;\r\n public readonly iModel: IModelConnection;\r\n\r\n public get layerRefHandler() { return this._layerRefHandler; }\r\n\r\n public shouldDrapeLayer(layerTreeRef?: MapLayerTileTreeReference): boolean {\r\n const mapLayerSettings = layerTreeRef?.layerSettings;\r\n if (mapLayerSettings && mapLayerSettings instanceof ModelMapLayerSettings)\r\n return ModelMapLayerDrapeTarget.Globe === mapLayerSettings.drapeTarget;\r\n return true; // catch-all for other cases (skip reality models, though).\r\n }\r\n\r\n public constructor(settings: BackgroundMapSettings, baseLayerSettings: BaseLayerSettings | undefined, layerSettings: MapLayerSettings[], iModel: IModelConnection, tileUserId: number, isOverlay: boolean, private _isDrape: boolean, private _overrideTerrainDisplay?: CheckTerrainDisplayOverride) {\r\n super();\r\n\r\n this.iModel = iModel;\r\n\r\n this._tileUserId = tileUserId;\r\n this._settings = settings;\r\n\r\n if (this._settings.planarClipMask && this._settings.planarClipMask.isValid)\r\n this._planarClipMask = PlanarClipMaskState.create(this._settings.planarClipMask);\r\n\r\n if (this._overrideTerrainDisplay && this._overrideTerrainDisplay()?.produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n\r\n this._layerRefHandler = new LayerTileTreeReferenceHandler(this, isOverlay, baseLayerSettings, layerSettings, true);\r\n }\r\n\r\n public forEachLayerTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n for (const layerTree of this._layerRefHandler.layerTrees) {\r\n assert(layerTree instanceof MapLayerTileTreeReference);\r\n func(layerTree);\r\n }\r\n }\r\n\r\n public override get isGlobal() { return true; }\r\n public get baseColor(): ColorDef | undefined { return this.baseColor; }\r\n public override get planarClipMaskPriority(): number { return PlanarClipMaskPriority.BackgroundMap; }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference | undefined {\r\n if (!this._settings.applyTerrain || this._isDrape)\r\n return undefined; // Don't bother generating non-terrain (flat) geometry.\r\n\r\n const ref = new MapTileTreeReference(this._settings, undefined, [], this.iModel, this._tileUserId, false, false, () => {\r\n return { produceGeometry: true };\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n /** Terrain tiles do not contribute to the range used by \"fit view\". */\r\n public override unionFitRange(_range: Range3d): void { }\r\n public get settings(): BackgroundMapSettings { return this._settings; }\r\n public set settings(settings: BackgroundMapSettings) {\r\n this._settings = settings;\r\n this._planarClipMask = settings.planarClipMask ? PlanarClipMaskState.create(settings.planarClipMask) : undefined;\r\n }\r\n\r\n public get layerSettings(): MapLayerSettings[] {\r\n return this.layerRefHandler.layerSettings;\r\n }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n // Wait until drape tree is fully loaded too.\r\n for (const drapeTree of this._layerRefHandler.layerTrees)\r\n if (drapeTree && !drapeTree.isLoadingComplete)\r\n return false;\r\n\r\n return super._isLoadingComplete;\r\n }\r\n public get useDepthBuffer() {\r\n return !this._layerRefHandler.isOverlay && (this.settings.applyTerrain || this.settings.useDepthBuffer);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n let wantSkirts = (this.settings.applyTerrain || this.useDepthBuffer) && !this.settings.transparency && !this._layerRefHandler.baseTransparent;\r\n if (wantSkirts) {\r\n const maskTrans = this._planarClipMask?.settings.transparency;\r\n wantSkirts = (undefined === maskTrans || maskTrans <= 0);\r\n }\r\n\r\n const id: MapTreeId = {\r\n tileUserId: this._tileUserId,\r\n applyTerrain: this.settings.applyTerrain && !this._isDrape,\r\n terrainProviderName: this.settings.terrainSettings.providerName,\r\n terrainDataSource: this.settings.terrainSettings.dataSource,\r\n terrainHeightOrigin: this.settings.terrainSettings.heightOrigin,\r\n terrainHeightOriginMode: this.settings.terrainSettings.heightOriginMode,\r\n terrainExaggeration: this.settings.terrainSettings.exaggeration,\r\n mapGroundBias: this.settings.groundBias,\r\n wantSkirts,\r\n // Can set to this.settings.terrainSettings.applyLighting if we want to ever apply lighting to terrain again so that normals are retrieved when lighting is on.\r\n wantNormals: false,\r\n globeMode: this._isDrape ? GlobeMode.Plane : this.settings.globeMode,\r\n isOverlay: this._layerRefHandler.isOverlay,\r\n useDepthBuffer: this.useDepthBuffer,\r\n baseColor: this._layerRefHandler.baseColor,\r\n baseTransparent: this._layerRefHandler.baseTransparent,\r\n mapTransparent: Number(this.settings.transparency) > 0,\r\n maskModelIds: this._planarClipMask?.settings.compressedModelIds,\r\n produceGeometry: false,\r\n };\r\n\r\n if (undefined !== this._overrideTerrainDisplay) {\r\n const ovr = this._overrideTerrainDisplay();\r\n if (undefined !== ovr) {\r\n id.wantSkirts = ovr.wantSkirts ?? id.wantSkirts;\r\n id.wantNormals = ovr.wantNormals ?? id.wantNormals;\r\n id.produceGeometry = ovr.produceGeometry === true;\r\n }\r\n }\r\n\r\n return this.iModel.tiles.getTileTreeOwner(id, mapTreeSupplier);\r\n }\r\n public getLayerImageryTreeRef(index: number): MapLayerTileTreeReference | undefined {\r\n const baseLayerIndex = this._layerRefHandler.baseImageryLayerIncluded ? 1 : 0;\r\n const treeIndex = index + baseLayerIndex;\r\n return index < 0 || treeIndex >= this._layerRefHandler.layerTrees.length ? undefined : this._layerRefHandler.layerTrees[treeIndex];\r\n }\r\n\r\n /** Return the map-layer scale range visibility for the provided map-layer index.\r\n * @internal\r\n */\r\n public getMapLayerScaleRangeVisibility(index: number): MapTileTreeScaleRangeVisibility {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined !== tree) {\r\n const tileTreeRef = this.getLayerImageryTreeRef(index);\r\n const treeId = tileTreeRef?.treeOwner.tileTree?.id;\r\n if (treeId !== undefined) {\r\n const treeState = tree.getImageryTreeState(treeId);\r\n if (treeState !== undefined)\r\n return treeState.getScaleRangeVisibility();\r\n }\r\n }\r\n return MapTileTreeScaleRangeVisibility.Unknown;\r\n }\r\n\r\n /** Adds this reference's graphics to the scene. By default this invokes [[TileTree.drawScene]] on the referenced TileTree, if it is loaded. */\r\n public override addToScene(context: SceneContext): void {\r\n if (!context.viewFlags.backgroundMap)\r\n return;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n if (undefined === tree || !this._layerRefHandler.initializeLayers(context))\r\n return; // Not loaded yet.\r\n\r\n if (this._planarClipMask && this._planarClipMask.settings.isValid)\r\n context.addPlanarClassifier(tree.modelId, undefined, this._planarClipMask);\r\n\r\n const nonLocatable = this.settings.locatable ? undefined : true;\r\n const transparency = this.settings.transparency ? this.settings.transparency : undefined;\r\n this._symbologyOverrides = new FeatureSymbology.Overrides();\r\n if (nonLocatable || transparency) {\r\n this._symbologyOverrides.override({\r\n modelId: tree.modelId,\r\n appearance: FeatureAppearance.fromJSON({ transparency, nonLocatable }),\r\n });\r\n }\r\n\r\n const args = this.createDrawArgs(context);\r\n if (undefined !== args)\r\n tree.draw(args);\r\n\r\n tree.clearImageryTreesAndClassifiers();\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (undefined === args)\r\n return undefined;\r\n\r\n const tree = this.treeOwner.load() as MapTileTree;\r\n return new RealityTileDrawArgs(args, args.worldToViewMap, args.frustumPlanes, undefined, tree?.layerHandler.layerClassifiers);\r\n }\r\n\r\n protected override getViewFlagOverrides(_tree: TileTree) {\r\n return createViewFlagOverrides(false, this._settings.applyTerrain ? undefined : false);\r\n }\r\n\r\n protected override getSymbologyOverrides(_tree: TileTree) {\r\n return this._symbologyOverrides;\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n this._layerRefHandler.discloseTileTrees(trees);\r\n\r\n if (this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n\r\n public imageryTreeFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): ImageryMapLayerTreeReference[] {\r\n const imageryTrees: ImageryMapLayerTreeReference[] = [];\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || tree.modelId !== mapTreeModelId)\r\n return imageryTrees;\r\n\r\n for (const imageryTree of this._layerRefHandler.layerTrees)\r\n if (imageryTree && imageryTree.treeOwner.tileTree && imageryTree.treeOwner.tileTree.modelId === layerTreeModelId)\r\n imageryTrees.push(imageryTree);\r\n\r\n return imageryTrees;\r\n }\r\n\r\n public layerFromTreeModelIds(mapTreeModelId: Id64String, layerTreeModelId: Id64String): MapLayerInfoFromTileTree[] {\r\n const imageryTree = this.imageryTreeFromTreeModelIds(mapTreeModelId, layerTreeModelId);\r\n return imageryTree.map((tree) => {\r\n const isBaseLayer = (this._layerRefHandler.baseImageryLayerIncluded && tree.layerIndex === 0);\r\n return {\r\n isBaseLayer,\r\n index: isBaseLayer ? undefined : { isOverlay: this._layerRefHandler.isOverlay, index: this._layerRefHandler.baseImageryLayerIncluded ? tree.layerIndex - 1 : tree.layerIndex },\r\n settings: tree.layerSettings, provider: tree.imageryProvider,\r\n };\r\n });\r\n }\r\n\r\n // Utility method that execute the provided function for every *imagery* tiles under a given HitDetail object.\r\n private async forEachImageryTileHit(hit: HitDetail, func: (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => Promise<void>): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const backgroundMapGeometry = hit.viewport.displayStyle.getBackgroundMapGeometry();\r\n if (undefined === backgroundMapGeometry)\r\n return undefined;\r\n\r\n const worldPoint = hit.hitPoint.clone();\r\n let cartoGraphic: Cartographic | undefined;\r\n try {\r\n cartoGraphic = (await backgroundMapGeometry.dbToWGS84CartographicFromGcs([worldPoint]))[0];\r\n } catch {\r\n }\r\n if (!cartoGraphic) {\r\n return undefined;\r\n }\r\n\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef.length > 0) {\r\n if (hit.tileId !== undefined) {\r\n const terrainQuadId = QuadId.createFromContentId(hit.tileId);\r\n const terrainTile = tree.tileFromQuadId(terrainQuadId);\r\n\r\n for (const treeRef of imageryTreeRef) {\r\n const processedTileIds: string[] = [];\r\n if (terrainTile && terrainTile.imageryTiles) {\r\n const imageryTree = treeRef.treeOwner.tileTree as ImageryMapTileTree;\r\n if (imageryTree) {\r\n for (const imageryTile of terrainTile.imageryTiles) {\r\n if (!processedTileIds.includes(imageryTile.contentId)\r\n && imageryTree === imageryTile.imageryTree\r\n && imageryTile.rectangle.containsCartographic(cartoGraphic)) {\r\n processedTileIds.push(imageryTile.contentId);\r\n try {\r\n await func(treeRef, imageryTile.quadId, cartoGraphic, imageryTree);\r\n } catch {\r\n // continue iterating even though we got a failure.\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override canSupplyToolTip(hit: HitDetail): boolean {\r\n const tree = this.treeOwner.tileTree;\r\n return undefined !== tree && tree.modelId === hit.modelId;\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree | undefined;\r\n if (undefined === tree || tree.modelId !== hit.modelId)\r\n return undefined;\r\n\r\n let carto: Cartographic | undefined;\r\n\r\n const strings: string[] = [];\r\n\r\n const getTooltipFunc = async (imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.ImageryLayer\")}: ${imageryTreeRef.layerSettings.name}`);\r\n carto = cartoGraphic;\r\n await imageryTree.imageryLoader.getToolTip(strings, quadId, cartoGraphic, imageryTree);\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getTooltipFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n if (carto) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Latitude\")}: ${carto.latitudeDegrees.toFixed(4)}`);\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Longitude\")}: ${carto.longitudeDegrees.toFixed(4)}`);\r\n if (this.settings.applyTerrain && tree.terrainExaggeration !== 0.0) {\r\n const geodeticHeight = (carto.height - tree.bimElevationBias) / tree.terrainExaggeration;\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Height\")}: ${geodeticHeight.toFixed(1)} ${IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.SeaLevel\")}: ${(geodeticHeight - tree.geodeticOffset).toFixed(1)}`);\r\n }\r\n }\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override async getMapFeatureInfo(hit: HitDetail, options?: MapFeatureInfoOptions): Promise<MapLayerFeatureInfo[] | undefined> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.modelId || !hit.viewport || !hit.viewport.view.is3d)\r\n return undefined;\r\n\r\n const info: MapLayerFeatureInfo[] = [];\r\n const imageryTreeRef = this.imageryTreeFromTreeModelIds(hit.modelId, hit.sourceId);\r\n if (imageryTreeRef !== undefined) {\r\n\r\n const getFeatureInfoFunc = async (_imageryTreeRef: ImageryMapLayerTreeReference, quadId: QuadId, cartoGraphic: Cartographic, imageryTree: ImageryMapTileTree) => {\r\n try {\r\n await imageryTree.imageryLoader.getMapFeatureInfo(info, quadId, cartoGraphic, imageryTree, hit, options);\r\n } catch {\r\n }\r\n };\r\n try {\r\n await this.forEachImageryTileHit(hit, getFeatureInfoFunc);\r\n } catch {\r\n // No results added\r\n }\r\n\r\n }\r\n\r\n return info;\r\n }\r\n\r\n /** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [addAttributions] instead. */\r\n public override addLogoCards(cards: HTMLTableElement, vp: ScreenViewport): void {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n if (tree) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n tree.mapLoader.terrainProvider.addLogoCards(cards, vp);\r\n for (const imageryTreeRef of this._layerRefHandler.layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n imageryTree.addLogoCards(cards, vp);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Add logo cards to logo div. */\r\n public override async addAttributions(cards: HTMLTableElement, vp: ScreenViewport): Promise<void> {\r\n const tree = this.treeOwner.tileTree as MapTileTree;\r\n\r\n if (tree) {\r\n const promises = [tree.mapLoader.terrainProvider.addAttributions(cards, vp)];\r\n\r\n for (const imageryTreeRef of this._layerRefHandler.layerTrees) {\r\n if (imageryTreeRef?.layerSettings.visible) {\r\n const imageryTree = imageryTreeRef.treeOwner.tileTree;\r\n if (imageryTree instanceof ImageryMapTileTree)\r\n promises.push(imageryTree.addAttributions(cards, vp));\r\n }\r\n }\r\n await Promise.all(promises);\r\n }\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n for (const layerTree of this._layerRefHandler.layerTrees) {\r\n if (layerTree)\r\n layerTree.decorate(context);\r\n }\r\n }\r\n}\r\n\r\n/** Returns whether a GCS converter is available.\r\n * @internal\r\n */\r\nexport async function getGcsConverterAvailable(iModel: IModelConnection) {\r\n if (iModel.noGcsDefined)\r\n return false;\r\n\r\n // Determine if we have a usable GCS.\r\n const converter = iModel.geoServices.getConverter(\"WGS84\");\r\n if (undefined === converter)\r\n return false;\r\n const requestProps: XYZProps[] = [{ x: 0, y: 0, z: 0 }];\r\n let haveConverter;\r\n try {\r\n const responseProps = await converter.getIModelCoordinatesFromGeoCoordinates(requestProps);\r\n haveConverter = responseProps.iModelCoords.length === 1 && responseProps.iModelCoords[0].s !== GeoCoordStatus.NoGCSDefined;\r\n } catch {\r\n haveConverter = false;\r\n }\r\n return haveConverter;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTilingScheme.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"MapTilingScheme.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapTilingScheme.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAmB,OAAO,EAAW,SAAS,EAAY,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;GASG;AACH,8BAAsB,eAAe;IACnC;;OAEG;IACH,SAAgB,kBAAkB,EAAE,OAAO,CAAC;IAC5C,0EAA0E;IAC1E,SAAgB,uBAAuB,SAAC;IACxC,0EAA0E;IAC1E,SAAgB,uBAAuB,SAAC;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IAExD,wFAAwF;IACjF,oBAAoB,CAAC,SAAS,EAAE,MAAM;IAI7C,2FAA2F;IACpF,oBAAoB,CAAC,SAAS,EAAE,MAAM;IAI7C,8FAA8F;aAC9E,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAE9D,8FAA8F;aAC9E,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAE7D,SAAS,aAAa,uBAAuB,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO;IAMnH;;OAEG;IACI,wBAAwB,CAAC,KAAK,EAAE,MAAM;IAI7C;;OAEG;IACI,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAItD,aAAa;IACb,IAAW,SAAS,WAEnB;IAED,aAAa;IACN,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIzD,aAAa;IACN,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIzD,6GAA6G;IACtG,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIxD,6GAA6G;IACtG,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIxD,0IAA0I;IACnI,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAKjE,0IAA0I;IACnI,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAKjE,mGAAmG;IAC5F,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIhD,sGAAsG;IAC/F,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAI/C,gGAAgG;IACzF,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAUvF;;;;;;OAMG;IACI,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAI,GAAG,YAAY;IAKhH,qGAAqG;IAC9F,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB;IAaxF,sGAAsG;IAC/F,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAItD,sGAAsG;IAC/F,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAItD;;OAEG;IACI,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAM1F,sHAAsH;IAC/G,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAI,GAAG,YAAY;IAOnH,uHAAuH;IAChH,sBAAsB,CAAC,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAM1G,aAAa;IACb,OAAO,CAAC,mBAAmB;IAO3B,aAAa;IACN,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO;IAuBnI,aAAa;IACb,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM;CAGzC;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;gBACtC,uBAAuB,SAAI,EAAE,uBAAuB,SAAI,EAAE,kBAAkB,UAAQ;IAIvG,0DAA0D;IACnD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIrD,0DAA0D;IACnD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAGrD;AAED,aAAa;AACb,qBAAa,qBAAqB;IAChC;;;;;;OAMG;WACW,+BAA+B,CAAC,aAAa,EAAE,MAAM;IAInE,OAAc,eAAe,SAA0E;WAEzF,+BAA+B,CAAC,QAAQ,EAAE,MAAM;CAU/D;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,eAAe;gBACvC,uBAAuB,SAAI,EAAE,uBAAuB,SAAI,EAAE,kBAAkB,UAAO;IAItG,0DAA0D;IACnD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAKrD,wDAAwD;IACjD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAUrD"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module Tiles
|
|
7
7
|
*/
|
|
8
|
+
import { expectDefined } from "@itwin/core-bentley";
|
|
8
9
|
import { Angle, Matrix3d, Point2d, Point3d, Transform, Vector3d } from "@itwin/core-geometry";
|
|
9
10
|
import { Cartographic } from "@itwin/core-common";
|
|
10
11
|
import { MapCartoRectangle } from "../internal";
|
|
@@ -154,7 +155,7 @@ export class MapTilingScheme {
|
|
|
154
155
|
}
|
|
155
156
|
/** @alpha */
|
|
156
157
|
computeMercatorFractionToDb(ecefToDb, bimElevationOffset, iModel, applyTerrain) {
|
|
157
|
-
const dbToEcef = ecefToDb.inverse();
|
|
158
|
+
const dbToEcef = expectDefined(ecefToDb.inverse());
|
|
158
159
|
const projectCenter = Point3d.create(iModel.projectExtents.center.x, iModel.projectExtents.center.y, bimElevationOffset);
|
|
159
160
|
const projectEast = projectCenter.plusXYZ(1, 0, 0);
|
|
160
161
|
const projectNorth = projectCenter.plusXYZ(0, 1, 0);
|