@itwin/core-frontend 5.0.0-dev.4 → 5.0.0-dev.41
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 +42 -1
- package/lib/cjs/AccuDraw.d.ts +63 -8
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +118 -16
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/ApproximateTerrainHeights.js +1 -1
- package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
- package/lib/cjs/BackgroundMapGeometry.js +5 -5
- package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
- package/lib/cjs/BriefcaseTxns.d.ts +2 -2
- package/lib/cjs/BriefcaseTxns.d.ts.map +1 -1
- package/lib/cjs/BriefcaseTxns.js.map +1 -1
- package/lib/cjs/DrawingViewState.js +9 -9
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/GraphicalEditingScope.js +5 -5
- package/lib/cjs/GraphicalEditingScope.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +62 -64
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +4 -1
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +24 -21
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IModelRoutingContext.d.ts +0 -3
- package/lib/cjs/IModelRoutingContext.d.ts.map +1 -1
- package/lib/cjs/IModelRoutingContext.js +5 -4
- package/lib/cjs/IModelRoutingContext.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +4 -3
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +1 -1
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/NativeApp.js +15 -17
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NativeAppLogger.js +1 -1
- package/lib/cjs/NativeAppLogger.js.map +1 -1
- package/lib/cjs/NoRenderApp.js +1 -1
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +6 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +14 -2
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/cjs/SelectionSet.d.ts +84 -35
- package/lib/cjs/SelectionSet.d.ts.map +1 -1
- package/lib/cjs/SelectionSet.js +419 -163
- package/lib/cjs/SelectionSet.js.map +1 -1
- package/lib/cjs/Sprites.js +1 -1
- package/lib/cjs/Sprites.js.map +1 -1
- package/lib/cjs/ViewCreator2d.js +3 -3
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewGlobalLocation.js +5 -5
- package/lib/cjs/ViewGlobalLocation.js.map +1 -1
- package/lib/cjs/ViewState.js +2 -2
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/ViewingSpace.js +9 -9
- package/lib/cjs/ViewingSpace.js.map +1 -1
- package/lib/cjs/Viewport.js +41 -41
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/imdl/ImdlSchema.d.ts +4 -0
- package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.js +80 -7
- package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/cjs/common/internal/render/DisplayParams.js +1 -1
- package/lib/cjs/common/internal/render/DisplayParams.js.map +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
- package/lib/cjs/common/internal/render/MeshPrimitives.js +1 -1
- package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
- package/lib/cjs/internal/render/PrimitiveBuilder.js +1 -1
- package/lib/cjs/internal/render/PrimitiveBuilder.js.map +1 -1
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +1 -1
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -1
- package/lib/cjs/render/MockRender.js +3 -3
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/render/webgl/BatchState.js +1 -1
- package/lib/cjs/render/webgl/BatchState.js.map +1 -1
- package/lib/cjs/render/webgl/ColorInfo.js +2 -2
- package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
- package/lib/cjs/render/webgl/Diagnostics.js +4 -4
- package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +4 -4
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/IModelFrameLifecycle.js +4 -4
- package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +3 -3
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/Material.js +4 -4
- package/lib/cjs/render/webgl/Material.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/RenderState.js +1 -1
- package/lib/cjs/render/webgl/RenderState.js.map +1 -1
- package/lib/cjs/render/webgl/Target.js +1 -1
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +39 -39
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/cjs/render/webgl/Texture.js +3 -3
- package/lib/cjs/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/tile/CesiumAssetProvider.js +1 -1
- package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +6 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +79 -2
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/ImdlParser.js +2 -2
- package/lib/cjs/tile/ImdlParser.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +1 -1
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/MeshoptCompression.d.ts +9 -0
- package/lib/cjs/tile/MeshoptCompression.d.ts.map +1 -1
- package/lib/cjs/tile/MeshoptCompression.js +98 -66
- package/lib/cjs/tile/MeshoptCompression.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +6 -6
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +5 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +2 -2
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +7 -7
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +8 -8
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileAvailability.js +1 -1
- package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +9 -9
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +2 -2
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.d.ts +1 -0
- package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.js +22 -21
- package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +40 -40
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/cjs/tools/EditManipulator.js +2 -2
- package/lib/cjs/tools/EditManipulator.js.map +1 -1
- package/lib/cjs/tools/ElementSetTool.d.ts.map +1 -1
- package/lib/cjs/tools/ElementSetTool.js +11 -4
- package/lib/cjs/tools/ElementSetTool.js.map +1 -1
- package/lib/cjs/tools/IdleTool.js +2 -2
- package/lib/cjs/tools/IdleTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.d.ts.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +39 -39
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/cjs/tools/SelectTool.js +7 -7
- package/lib/cjs/tools/SelectTool.js.map +1 -1
- package/lib/cjs/tools/Tool.js +10 -10
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +36 -24
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ToolAssistance.js +19 -19
- package/lib/cjs/tools/ToolAssistance.js.map +1 -1
- package/lib/cjs/tools/ToolSettings.js +63 -63
- package/lib/cjs/tools/ToolSettings.js.map +1 -1
- package/lib/cjs/tools/ViewTool.js +37 -37
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/cjs/workers/ImdlParser/Worker.js +2 -2
- package/lib/cjs/workers/ImdlParser/Worker.js.map +1 -1
- package/lib/esm/AccuDraw.d.ts +63 -8
- package/lib/esm/AccuDraw.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +119 -17
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/ApproximateTerrainHeights.js +1 -1
- package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
- package/lib/esm/BackgroundMapGeometry.js +5 -5
- package/lib/esm/BackgroundMapGeometry.js.map +1 -1
- package/lib/esm/BriefcaseTxns.d.ts +2 -2
- package/lib/esm/BriefcaseTxns.d.ts.map +1 -1
- package/lib/esm/BriefcaseTxns.js.map +1 -1
- package/lib/esm/DrawingViewState.js +9 -9
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/GraphicalEditingScope.js +5 -5
- package/lib/esm/GraphicalEditingScope.js.map +1 -1
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +63 -65
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +4 -1
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +20 -17
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IModelRoutingContext.d.ts +0 -3
- package/lib/esm/IModelRoutingContext.d.ts.map +1 -1
- package/lib/esm/IModelRoutingContext.js +3 -2
- package/lib/esm/IModelRoutingContext.js.map +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +4 -3
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +1 -1
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/NativeApp.js +15 -17
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NativeAppLogger.js +1 -1
- package/lib/esm/NativeAppLogger.js.map +1 -1
- package/lib/esm/NoRenderApp.js +1 -1
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +6 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js +14 -2
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/esm/SelectionSet.d.ts +84 -35
- package/lib/esm/SelectionSet.d.ts.map +1 -1
- package/lib/esm/SelectionSet.js +418 -162
- package/lib/esm/SelectionSet.js.map +1 -1
- package/lib/esm/Sprites.js +1 -1
- package/lib/esm/Sprites.js.map +1 -1
- package/lib/esm/ViewCreator2d.js +3 -3
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewGlobalLocation.js +5 -5
- package/lib/esm/ViewGlobalLocation.js.map +1 -1
- package/lib/esm/ViewState.js +2 -2
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/ViewingSpace.js +9 -9
- package/lib/esm/ViewingSpace.js.map +1 -1
- package/lib/esm/Viewport.js +41 -41
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/imdl/ImdlSchema.d.ts +4 -0
- package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
- package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.js +80 -7
- package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/esm/common/internal/render/DisplayParams.js +1 -1
- package/lib/esm/common/internal/render/DisplayParams.js.map +1 -1
- package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
- package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
- package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
- package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
- package/lib/esm/common/internal/render/MeshPrimitives.js +2 -2
- package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
- package/lib/esm/internal/render/PrimitiveBuilder.js +1 -1
- package/lib/esm/internal/render/PrimitiveBuilder.js.map +1 -1
- package/lib/esm/internal/render/RenderInstancesParamsImpl.js +1 -1
- package/lib/esm/internal/render/RenderInstancesParamsImpl.js.map +1 -1
- package/lib/esm/render/MockRender.js +3 -3
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/render/webgl/BatchState.js +1 -1
- package/lib/esm/render/webgl/BatchState.js.map +1 -1
- package/lib/esm/render/webgl/ColorInfo.js +2 -2
- package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
- package/lib/esm/render/webgl/Diagnostics.js +4 -4
- package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +4 -4
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/IModelFrameLifecycle.js +4 -4
- package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.js +3 -3
- package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/Material.js +4 -4
- package/lib/esm/render/webgl/Material.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/RenderState.js +1 -1
- package/lib/esm/render/webgl/RenderState.js.map +1 -1
- package/lib/esm/render/webgl/Target.js +1 -1
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/Technique.js +39 -39
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/esm/render/webgl/Texture.js +3 -3
- package/lib/esm/render/webgl/Texture.js.map +1 -1
- package/lib/esm/tile/CesiumAssetProvider.js +1 -1
- package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +6 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +79 -2
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/ImdlParser.js +2 -2
- package/lib/esm/tile/ImdlParser.js.map +1 -1
- package/lib/esm/tile/ImdlReader.js +1 -1
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/MeshoptCompression.d.ts +9 -0
- package/lib/esm/tile/MeshoptCompression.d.ts.map +1 -1
- package/lib/esm/tile/MeshoptCompression.js +98 -44
- package/lib/esm/tile/MeshoptCompression.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +6 -6
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +5 -2
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.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/MapLayerImageryFormats.js +7 -7
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapTile.js +8 -8
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileAvailability.js +1 -1
- package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +9 -9
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +2 -2
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/AccuDrawTool.d.ts +1 -0
- package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawTool.js +22 -21
- package/lib/esm/tools/AccuDrawTool.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +40 -40
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/tools/EditManipulator.js +2 -2
- package/lib/esm/tools/EditManipulator.js.map +1 -1
- package/lib/esm/tools/ElementSetTool.d.ts.map +1 -1
- package/lib/esm/tools/ElementSetTool.js +11 -4
- package/lib/esm/tools/ElementSetTool.js.map +1 -1
- package/lib/esm/tools/IdleTool.js +2 -2
- package/lib/esm/tools/IdleTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.d.ts.map +1 -1
- package/lib/esm/tools/MeasureTool.js +40 -40
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/esm/tools/SelectTool.js +7 -7
- package/lib/esm/tools/SelectTool.js.map +1 -1
- package/lib/esm/tools/Tool.js +10 -10
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +36 -24
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ToolAssistance.js +19 -19
- package/lib/esm/tools/ToolAssistance.js.map +1 -1
- package/lib/esm/tools/ToolSettings.js +63 -63
- package/lib/esm/tools/ToolSettings.js.map +1 -1
- package/lib/esm/tools/ViewTool.js +37 -37
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/lib/esm/workers/ImdlParser/Worker.js +2 -2
- package/lib/esm/workers/ImdlParser/Worker.js.map +1 -1
- package/lib/public/locales/en/CoreTools.json +1 -0
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +20 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTile.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTile.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, dispose } from \"@itwin/core-bentley\";\r\nimport { ColorByName, ColorDef, FrustumPlanes, GlobeMode, PackedFeatureTable, RenderTexture } from \"@itwin/core-common\";\r\nimport { AxisOrder, BilinearPatch, ClipPlane, ClipPrimitive, ClipShape, ClipVector, Constant, ConvexClipPlaneSet, EllipsoidPatch, LongitudeLatitudeNumber, Matrix3d, Point3d, PolygonOps, Range1d, Range2d, Range3d, Ray3d, Transform, Vector2d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { GraphicBuilder } from \"../../render/GraphicBuilder\";\r\nimport { RealityMeshParams } from \"../../render/RealityMeshParams\";\r\nimport { upsampleRealityMeshParams } from \"../../render/UpsampleRealityMeshParams\";\r\nimport { RenderGraphic } from \"../../render/RenderGraphic\";\r\nimport { RenderMemory } from \"../../render/RenderMemory\";\r\nimport { RenderSystem, RenderTerrainGeometry, TerrainTexture } from \"../../render/RenderSystem\";\r\nimport { ViewingSpace } from \"../../ViewingSpace\";\r\nimport {\r\n ImageryMapTile, MapCartoRectangle, MapTileLoader, MapTileTree, QuadId, RealityTile, RealityTileParams, Tile, TileContent, TileDrawArgs, TileGraphicType,\r\n TileLoadStatus, TileTreeLoadStatus, TraversalSelectionContext,\r\n} from \"../internal\";\r\n\r\n/** @internal */\r\nexport class PlanarTilePatch {\r\n constructor(public corners: Point3d[], public normal: Vector3d, private _chordHeight: number) {\r\n }\r\n\r\n public getRangeCorners(heightRange: Range1d, result: Point3d[]): Point3d[] {\r\n let index = 0;\r\n for (const corner of this.corners)\r\n corner.plusScaled(this.normal, heightRange.low - this._chordHeight, result[index++]);\r\n\r\n for (const corner of this.corners)\r\n corner.plusScaled(this.normal, heightRange.high + this._chordHeight, result[index++]);\r\n\r\n return result;\r\n }\r\n public getClipShape(): Point3d[] {\r\n return [this.corners[0], this.corners[1], this.corners[3], this.corners[2]];\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type TilePatch = PlanarTilePatch | EllipsoidPatch;\r\n\r\n/** Projects points within the rectangular region of a [[MapTile]] into 3d space.\r\n * @see [[MapTile.getProjection]] to obtain the projection for a [[MapTile]].\r\n * @public\r\n */\r\nexport abstract class MapTileProjection {\r\n /** The extents of the volume of space associated with the projected [[MapTile]]. */\r\n public abstract get localRange(): Range3d;\r\n /** @alpha */\r\n public abstract get transformFromLocal(): Transform;\r\n\r\n /** Given parametric coordinates in [0, 1] within the tile's rectangular region, and an elevation above the Earth,\r\n * compute the 3d position in space.\r\n */\r\n public abstract getPoint(u: number, v: number, height: number, result?: Point3d): Point3d;\r\n\r\n /** @alpha */\r\n public get ellipsoidPatch(): EllipsoidPatch | undefined { return undefined; }\r\n\r\n /** @alpha */\r\n public getGlobalPoint(u: number, v: number, z: number, result?: Point3d): Point3d {\r\n const point = this.getPoint(u, v, z, result);\r\n return this.transformFromLocal.multiplyPoint3d(point, point);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nclass EllipsoidProjection extends MapTileProjection {\r\n public transformFromLocal = Transform.createIdentity();\r\n public localRange: Range3d;\r\n constructor(private _patch: EllipsoidPatch, heightRange?: Range1d) {\r\n super();\r\n this.localRange = _patch.range();\r\n this.localRange.expandInPlace(heightRange ? (heightRange.high - heightRange.low) : 0);\r\n }\r\n private static _scratchAngles = LongitudeLatitudeNumber.createZero();\r\n private static _scratchRay = Ray3d.createZero();\r\n public getPoint(u: number, v: number, height: number, result?: Point3d): Point3d {\r\n const angles = this._patch.uvFractionToAngles(u, v, height, EllipsoidProjection._scratchAngles);\r\n const ray = this._patch.anglesToUnitNormalRay(angles, EllipsoidProjection._scratchRay);\r\n return Point3d.createFrom(ray!.origin, result);\r\n }\r\n public override get ellipsoidPatch() { return this._patch; }\r\n}\r\n\r\n/** @alpha */\r\nclass PlanarProjection extends MapTileProjection {\r\n private _bilinearPatch: BilinearPatch;\r\n public transformFromLocal: Transform;\r\n public localRange: Range3d;\r\n constructor(patch: PlanarTilePatch, heightRange?: Range1d) {\r\n super();\r\n this.transformFromLocal = Transform.createOriginAndMatrix(patch.corners[0], Matrix3d.createRigidHeadsUp(patch.normal, AxisOrder.ZYX));\r\n const planeCorners = this.transformFromLocal.multiplyInversePoint3dArray([patch.corners[0], patch.corners[1], patch.corners[2], patch.corners[3]])!;\r\n this.localRange = Range3d.createArray(planeCorners);\r\n this.localRange.low.z += heightRange ? heightRange.low : 0;\r\n this.localRange.high.z += heightRange ? heightRange.high : 0;\r\n this._bilinearPatch = new BilinearPatch(planeCorners[0], planeCorners[1], planeCorners[2], planeCorners[3]);\r\n }\r\n public getPoint(u: number, v: number, z: number, result?: Point3d): Point3d {\r\n result = this._bilinearPatch.uvFractionToPoint(u, v, result);\r\n result.z += z;\r\n return result;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface TerrainTileContent extends TileContent {\r\n terrain?: {\r\n renderGeometry?: RenderTerrainGeometry;\r\n /** Used on leaves to support up-sampling. */\r\n mesh?: RealityMeshParams;\r\n };\r\n}\r\n\r\nconst scratchNormal = Vector3d.create();\r\nconst scratchViewZ = Vector3d.create();\r\nconst scratchPoint = Point3d.create();\r\nconst scratchClipPlanes = [ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint)];\r\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\r\n\r\n/** A [[Tile]] belonging to a [[MapTileTree]] representing a rectangular region of a map of the Earth.\r\n * @public\r\n */\r\nexport class MapTile extends RealityTile {\r\n private static _maxParentHeightDepth = 4;\r\n private _imageryTiles?: ImageryMapTile[];\r\n private _hiddenTiles?: ImageryMapTile[];\r\n private _highResolutionReplacementTiles?: ImageryMapTile[];\r\n /** @internal */\r\n public everLoaded = false; // If the tile is only required for availability metadata, load it once and then allow it to be unloaded.\r\n /** @internal */\r\n protected _heightRange: Range1d | undefined;\r\n /** @internal */\r\n protected _renderGeometry?: RenderTerrainGeometry;\r\n /** @internal */\r\n protected _mesh?: RealityMeshParams; // Primitive retained on leaves only for upsampling.\r\n /** @internal */\r\n public override get isReady(): boolean {\r\n return super.isReady && this.baseImageryIsReady;\r\n }\r\n\r\n /** @internal */\r\n public override get hasGraphics(): boolean {\r\n return this._renderGeometry !== undefined;\r\n }\r\n\r\n /** @internal */\r\n public get renderGeometry() { return this._renderGeometry; }\r\n /** @internal */\r\n public get mesh() { return this._mesh; }\r\n /** @internal */\r\n public get loadableTerrainTile() { return this.loadableTile as MapTile; }\r\n /** @internal */\r\n public get isPlanar(): boolean { return this._patch instanceof PlanarTilePatch; }\r\n /** @internal */\r\n public get imageryTiles(): ImageryMapTile[] | undefined { return this._imageryTiles; }\r\n /** List of selected tiles but are currently in hidden state (i.e. scale range visibility)\r\n * @internal\r\n */\r\n public get hiddenImageryTiles(): ImageryMapTile[] | undefined { return this._hiddenTiles; }\r\n\r\n /** List of leafs tiles that have been selected as a replacement for missing high resolution tiles.\r\n * When this list is non-empty this means we are past the maximum LOD available of the tile tree.\r\n * By using those tiles, you are likely to get a display where tiles looks pixelated..\r\n * in some cases this is preferred to have no tile at all.\r\n * @internal\r\n */\r\n public get highResolutionReplacementTiles(): ImageryMapTile[] | undefined { return this._highResolutionReplacementTiles; }\r\n\r\n /** The [[MapTileTree]] to which this tile belongs. */\r\n public readonly mapTree: MapTileTree;\r\n /** Uniquely identifies this tile within its [[mapTree]]. */\r\n public readonly quadId: QuadId;\r\n private _patch: TilePatch;\r\n /** The area of the surface of the Earth that this tile represents. */\r\n public readonly rectangle: MapCartoRectangle;\r\n /** @internal */\r\n protected _cornerRays?: Ray3d[];\r\n\r\n /** @internal */\r\n constructor(params: RealityTileParams, mapTree: MapTileTree, quadId: QuadId, patch: TilePatch, rectangle: MapCartoRectangle, heightRange: Range1d | undefined, cornerRays: Ray3d[] | undefined) {\r\n super(params, mapTree);\r\n this.mapTree = mapTree;\r\n this.quadId = quadId;\r\n this._patch = patch;\r\n this.rectangle = rectangle;\r\n this._cornerRays = cornerRays;\r\n this._heightRange = heightRange?.clone();\r\n }\r\n\r\n /** @internal */\r\n public getRangeCorners(result: Point3d[]): Point3d[] {\r\n return this._patch instanceof PlanarTilePatch ? this._patch.getRangeCorners(this.heightRange!, result) : this.range.corners(result);\r\n }\r\n\r\n /** @internal */\r\n public override getSizeProjectionCorners(): Point3d[] | undefined {\r\n // Use only the first 4 corners -- On terrain tiles the height is initially exagerated to world height range which can cause excessive tile loading.\r\n const rangeCorners = this.getRangeCorners(scratchCorners);\r\n return rangeCorners.slice(0, 4);\r\n }\r\n\r\n /** @internal */\r\n public override markUsed(args: TileDrawArgs) {\r\n super.markUsed(args);\r\n if (this._imageryTiles)\r\n for (const imageryTile of this._imageryTiles)\r\n imageryTile.markUsed(args);\r\n }\r\n\r\n /** @internal */\r\n public override get graphicType() {\r\n if (this.mapTree.isOverlay)\r\n return TileGraphicType.Overlay;\r\n\r\n return (this.mapTree.useDepthBuffer || this._forceDepthBuffer) ? TileGraphicType.Scene : TileGraphicType.BackgroundMap;\r\n }\r\n\r\n /** @internal */\r\n public get mapLoader() { return this.realityRoot.loader as MapTileLoader; }\r\n /** @internal */\r\n public get isUpsampled() { return false; }\r\n\r\n /** @internal */\r\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\r\n if (0 === quadId.compare(this.quadId))\r\n return this;\r\n\r\n assert(quadId.level > this.quadId.level);\r\n if (quadId.level <= this.quadId.level)\r\n return undefined;\r\n\r\n if (this.children) {\r\n const shift = quadId.level - this.quadId.level - 1;\r\n const childRow = quadId.row >> shift;\r\n const childColumn = quadId.column >> shift;\r\n for (const child of this.children) {\r\n const mapChild = child as MapTile;\r\n const childQuadId = mapChild.quadId;\r\n if (childQuadId.row === childRow && childQuadId.column === childColumn)\r\n return mapChild.tileFromQuadId(quadId);\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private get _forceDepthBuffer() {\r\n // For large ellipsoidal globe tile force the depth buffer on to avoid anomalies at horizon.\r\n return this.mapTree.globeMode === GlobeMode.Ellipsoid && this.depth < 8;\r\n }\r\n\r\n /** @internal */\r\n public override addBoundingGraphic(builder: GraphicBuilder, color: ColorDef) {\r\n if (!this.isDisplayable)\r\n return;\r\n\r\n const heightRange = (this.heightRange === undefined) ? Range1d.createXX(-1, 1) : this.heightRange;\r\n const lows = [], highs = [], reorder = [0, 1, 3, 2, 0];\r\n const cornerRays = this._cornerRays!;\r\n if (this._patch instanceof PlanarTilePatch) {\r\n const normal = this._patch.normal;\r\n for (let i = 0; i < 5; i++) {\r\n const corner = this._patch.corners[reorder[i]];\r\n lows.push(corner.plusScaled(normal, heightRange.low));\r\n highs.push(corner.plusScaled(normal, heightRange.high));\r\n }\r\n } else {\r\n for (let i = 0; i < 5; i++) {\r\n const cornerRay = cornerRays[reorder[i]];\r\n lows.push(cornerRay.origin.plusScaled(cornerRay.direction, heightRange.low));\r\n highs.push(cornerRay.origin.plusScaled(cornerRay.direction, heightRange.high));\r\n }\r\n }\r\n\r\n builder.setSymbology(color, color, 1);\r\n builder.addLineString(lows);\r\n builder.addLineString(highs);\r\n for (let i = 0; i < 4; i++)\r\n builder.addLineString([lows[i], highs[i]]);\r\n\r\n const inColor = ColorDef.create(ColorByName.cornflowerBlue);\r\n const outColor = ColorDef.create(ColorByName.chartreuse);\r\n const transitionColor = ColorDef.create(ColorByName.aquamarine);\r\n\r\n const inPoints = [], outPoints = [], transitionPoints = [];\r\n\r\n for (const point of highs)\r\n if (this.mapTree.cartesianRange.containsPoint(point))\r\n inPoints.push(point);\r\n else if (this.mapTree.cartesianRange.distanceToPoint(point) < this.mapTree.cartesianTransitionDistance)\r\n transitionPoints.push(point);\r\n else\r\n outPoints.push(point);\r\n\r\n builder.setSymbology(inColor, inColor, 15);\r\n builder.addPointString(inPoints);\r\n builder.setSymbology(outColor, outColor, 15);\r\n builder.addPointString(outPoints);\r\n builder.setSymbology(transitionColor, transitionColor, 31);\r\n builder.addPointString(transitionPoints);\r\n }\r\n\r\n /** @internal */\r\n public override getContentClip(): ClipVector | undefined {\r\n const points = this.getClipShape();\r\n if (points.length < 3)\r\n return undefined;\r\n if (this.mapTree.globeMode === GlobeMode.Ellipsoid) {\r\n const normal = PolygonOps.areaNormal(points);\r\n const globeOrigin = this.mapTree.globeOrigin;\r\n const globeNormal = Vector3d.createStartEnd(globeOrigin, points[0]);\r\n const negate = normal.dotProduct(globeNormal) < 0;\r\n const clipPlanes = [];\r\n for (let i = 0; i < 4; i++) {\r\n const point = points[i];\r\n const clipNormal = globeOrigin.crossProductToPoints(point, points[(i + 1) % 4], scratchNormal);\r\n if (negate)\r\n clipNormal.negate(clipNormal);\r\n\r\n const clipPlane = ClipPlane.createNormalAndPoint(clipNormal, point, false, false, scratchClipPlanes[i]);\r\n if (clipPlane !== undefined) // Undefined at pole tiles...\r\n clipPlanes.push(clipPlane);\r\n }\r\n\r\n const planeSet = ConvexClipPlaneSet.createPlanes(clipPlanes);\r\n const clipPrimitive = ClipPrimitive.createCapture(planeSet);\r\n\r\n return ClipVector.createCapture([clipPrimitive]);\r\n } else {\r\n return ClipVector.createCapture([ClipShape.createShape(points)!]);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override setNotFound(): void {\r\n super.setNotFound();\r\n\r\n // For map tiles assume that an unfound tile implies descendants and siblings will also be unfound.\r\n if (undefined !== this.parent)\r\n this.parent.setLeaf();\r\n }\r\n\r\n /** @internal */\r\n public getGraphic(_system: RenderSystem, _texture: RenderTexture): RenderGraphic | undefined {\r\n return undefined;\r\n }\r\n\r\n /** For globe tiles displaying less then depth 2 appears distorted\r\n * @internal\r\n */\r\n public override get isDisplayable() {\r\n return this.mapTree.globeMode === GlobeMode.Ellipsoid ? (this.depth >= MapTileTree.minDisplayableDepth) : super.isDisplayable;\r\n }\r\n\r\n /** @internal */\r\n public override isOccluded(viewingSpace: ViewingSpace): boolean {\r\n if (undefined === this._cornerRays || this.mapTree.globeMode !== GlobeMode.Ellipsoid)\r\n return false;\r\n\r\n if (viewingSpace.eyePoint !== undefined) {\r\n if (!this.mapTree.pointAboveEllipsoid(viewingSpace.eyePoint))\r\n return false;\r\n\r\n for (const cornerNormal of this._cornerRays) {\r\n const eyeNormal = Vector3d.createStartEnd(viewingSpace.eyePoint, cornerNormal.origin, scratchNormal);\r\n eyeNormal.normalizeInPlace();\r\n if (eyeNormal.dotProduct(cornerNormal.direction) < .01)\r\n return false;\r\n }\r\n } else {\r\n const viewZ = viewingSpace.rotation.getRow(2, scratchViewZ);\r\n for (const cornerNormal of this._cornerRays)\r\n if (cornerNormal.direction.dotProduct(viewZ) > 0)\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n protected override _loadChildren(resolve: (children: Tile[] | undefined) => void, _reject: (error: Error) => void): void {\r\n const mapTree = this.mapTree;\r\n const childLevel = this.quadId.level + 1;\r\n const rowCount = mapTree.sourceTilingScheme.getNumberOfYChildrenAtLevel(childLevel);\r\n const columnCount = mapTree.sourceTilingScheme.getNumberOfXChildrenAtLevel(childLevel);\r\n\r\n const resolveChildren = (children: Tile[]) => {\r\n const childrenRange = Range3d.createNull();\r\n for (const child of children)\r\n childrenRange.extendRange(child.range);\r\n\r\n if (!this.range.containsRange(childrenRange))\r\n this.range.extendRange(childrenRange);\r\n\r\n resolve(children);\r\n };\r\n\r\n if (mapTree.doCreateGlobeChildren(this)) {\r\n this.createGlobeChildren(columnCount, rowCount, resolveChildren);\r\n return;\r\n }\r\n\r\n const resolvePlanarChildren = (childCorners: Point3d[][]) => {\r\n const level = this.quadId.level + 1;\r\n const column = this.quadId.column * 2;\r\n const row = this.quadId.row * 2;\r\n const children = [];\r\n const childrenAreLeaves = (this.depth + 1) === mapTree.loader.maxDepth;\r\n const globeMode = this.mapTree.globeMode;\r\n for (let j = 0; j < rowCount; j++) {\r\n for (let i = 0; i < columnCount; i++) {\r\n const quadId = new QuadId(level, column + i, row + j);\r\n const corners = childCorners[j * columnCount + i];\r\n const rectangle = mapTree.getTileRectangle(quadId);\r\n const normal = PolygonOps.areaNormal([corners[0], corners[1], corners[3], corners[2]]);\r\n normal.normalizeInPlace();\r\n\r\n const heightRange = this.mapTree.getChildHeightRange(quadId, rectangle, this);\r\n const diagonal = Math.max(corners[0].distance(corners[3]), corners[1].distance(corners[2])) / 2.0;\r\n const chordHeight = globeMode === GlobeMode.Ellipsoid ? Math.sqrt(diagonal * diagonal + Constant.earthRadiusWGS84.equator * Constant.earthRadiusWGS84.equator) - Constant.earthRadiusWGS84.equator : 0.0;\r\n const rangeCorners = MapTile.computeRangeCorners(corners, normal, chordHeight, undefined, heightRange);\r\n const range = Range3d.createArray(rangeCorners);\r\n const child = this.mapTree.createPlanarChild({ contentId: quadId.contentId, maximumSize: 512, range, parent: this, isLeaf: childrenAreLeaves }, quadId, corners, normal, rectangle, chordHeight, heightRange);\r\n if (child)\r\n children.push(child);\r\n }\r\n }\r\n\r\n resolveChildren(children);\r\n };\r\n\r\n mapTree.getPlanarChildCorners(this, columnCount, rowCount, resolvePlanarChildren);\r\n }\r\n\r\n private createGlobeChildren(columnCount: number, rowCount: number, resolve: (children: MapTile[]) => void) {\r\n const level = this.quadId.level + 1;\r\n const column = this.quadId.column * 2;\r\n const row = this.quadId.row * 2;\r\n const mapTree = this.mapTree;\r\n const children = [];\r\n\r\n for (let j = 0; j < rowCount; j++) {\r\n for (let i = 0; i < columnCount; i++) {\r\n const quadId = new QuadId(level, column + i, row + j);\r\n const angleSweep = quadId.getAngleSweep(mapTree.sourceTilingScheme);\r\n const ellipsoidPatch = EllipsoidPatch.createCapture(this.mapTree.earthEllipsoid, angleSweep.longitude, angleSweep.latitude);\r\n const range = ellipsoidPatch.range();\r\n const rectangle = mapTree.getTileRectangle(quadId);\r\n const heightRange = this.mapTree.getChildHeightRange(quadId, rectangle, this);\r\n if (undefined !== heightRange)\r\n range.expandInPlace(heightRange.high - heightRange.low);\r\n\r\n children.push(this.mapTree.createGlobeChild({ contentId: quadId.contentId, maximumSize: 512, range, parent: this, isLeaf: false }, quadId, range.corners(), rectangle, ellipsoidPatch, heightRange));\r\n }\r\n }\r\n\r\n resolve(children);\r\n return children;\r\n }\r\n\r\n /** @internal */\r\n public static computeRangeCorners(corners: Point3d[], normal: Vector3d, chordHeight: number, result?: Point3d[], heightRange?: Range1d) {\r\n if (result === undefined) {\r\n result = [];\r\n for (let i = 0; i < 8; i++)\r\n result.push(Point3d.create());\r\n }\r\n\r\n let index = 0;\r\n assert(corners.length === 4);\r\n const deltaLow = normal.scale(- chordHeight + (heightRange ? heightRange.low : 0));\r\n const deltaHigh = normal.scale(chordHeight + (heightRange ? heightRange.high : 0));\r\n\r\n for (const corner of corners)\r\n corner.plus(deltaLow, result[index++]);\r\n\r\n for (const corner of corners)\r\n corner.plus(deltaHigh, result[index++]);\r\n\r\n return result;\r\n }\r\n\r\n /** @internal */\r\n public override isRegionCulled(args: TileDrawArgs): boolean {\r\n return this.isContentCulled(args);\r\n }\r\n\r\n /** @internal */\r\n public override isContentCulled(args: TileDrawArgs): boolean {\r\n return FrustumPlanes.Containment.Outside === args.frustumPlanes.computeContainment(this.getRangeCorners(scratchCorners));\r\n }\r\n\r\n /** @internal */\r\n public clearLayers() {\r\n this.clearImageryTiles();\r\n this._graphic = undefined;\r\n if (this.children)\r\n for (const child of this.children)\r\n (child as MapTile).clearLayers();\r\n }\r\n\r\n private clearImageryTiles() {\r\n if (this._imageryTiles) {\r\n this._imageryTiles.forEach((tile) => tile.releaseMapTileUsage());\r\n this._imageryTiles = undefined;\r\n }\r\n if (this._hiddenTiles) {\r\n this._hiddenTiles = undefined;\r\n }\r\n if (this._highResolutionReplacementTiles) {\r\n this._highResolutionReplacementTiles = undefined;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override produceGraphics(): RenderGraphic | undefined {\r\n if (undefined !== this._graphic && this.imageryIsReady)\r\n return this._graphic;\r\n\r\n const geometry = this.renderGeometry;\r\n if (undefined === geometry)\r\n return undefined;\r\n\r\n const textures = this.getDrapeTextures();\r\n const { baseColor, baseTransparent, layerClassifiers } = this.mapTree;\r\n const graphic = IModelApp.renderSystem.createRealityMeshGraphic({ realityMesh: geometry, projection: this.getProjection(), tileRectangle: this.rectangle, featureTable: PackedFeatureTable.pack(this.mapLoader.featureTable), tileId: this.contentId, baseColor, baseTransparent, textures, layerClassifiers, disableClipStyle: true }, true);\r\n\r\n // If there are no layer classifiers then we can save this graphic for re-use. If layer classifiers exist they are regenerated based on view and we must collate them with the imagery.\r\n if (this.imageryIsReady && 0 === this.mapTree.layerClassifiers.size)\r\n this._graphic = graphic;\r\n\r\n return graphic;\r\n }\r\n\r\n /** @internal */\r\n public getClipShape(): Point3d[] {\r\n return (this._patch instanceof PlanarTilePatch) ? this._patch.getClipShape() : [this._cornerRays![0].origin, this._cornerRays![1].origin, this._cornerRays![3].origin, this._cornerRays![2].origin];\r\n }\r\n\r\n /** @internal */\r\n protected override _collectStatistics(stats: RenderMemory.Statistics): void {\r\n super._collectStatistics(stats);\r\n\r\n this._renderGeometry?.collectStatistics(stats);\r\n if (this._mesh) {\r\n stats.addTerrain(this._mesh.indices.byteLength\r\n + this._mesh.positions.points.byteLength\r\n + this._mesh.uvs.points.byteLength\r\n + (this._mesh.normals ? this._mesh.normals.byteLength : 0),\r\n );\r\n }\r\n }\r\n\r\n /** Height range is along with the tile corners to detect if tile intersects view frustum.\r\n * Range will be single value fo ron-terrain tiles -- if terrain tile is not loaded it will\r\n * inherit height from ancestors.\r\n * @internal\r\n */\r\n public get heightRange(): Range1d | undefined {\r\n if (undefined !== this._heightRange)\r\n return this._heightRange;\r\n\r\n for (let parent = this.parent; undefined !== parent; parent = parent.parent) {\r\n const mapParent = parent as MapTile;\r\n if (undefined !== mapParent._heightRange)\r\n return mapParent._heightRange;\r\n }\r\n\r\n assert(false);\r\n return Range1d.createNull();\r\n }\r\n\r\n /** @internal */\r\n public get mapTilingScheme() {\r\n return this.mapTree.sourceTilingScheme;\r\n }\r\n\r\n /** Adjust the minimum and maximum elevations of the terrain within this tile. */\r\n public adjustHeights(minHeight: number, maxHeight: number) {\r\n if (undefined === this._heightRange)\r\n this._heightRange = Range1d.createXX(minHeight, maxHeight);\r\n else {\r\n this._heightRange.low = Math.max(this.heightRange!.low, minHeight);\r\n this._heightRange.high = Math.min(this.heightRange!.high, maxHeight);\r\n }\r\n\r\n if (this.rangeCorners && this._patch instanceof PlanarTilePatch)\r\n this._patch.getRangeCorners(this.heightRange!, this.rangeCorners);\r\n }\r\n\r\n /** Obtain a [[MapTileProjection]] to project positions within this tile's area into 3d space. */\r\n public getProjection(heightRange?: Range1d): MapTileProjection {\r\n return this._patch instanceof PlanarTilePatch ? new PlanarProjection(this._patch, heightRange) : new EllipsoidProjection(this._patch, heightRange);\r\n }\r\n\r\n /** @internal */\r\n public get baseImageryIsReady(): boolean {\r\n if (undefined !== this.mapTree.baseColor || 0 === this.mapTree.layerImageryTrees.length)\r\n return true;\r\n\r\n if (undefined === this._imageryTiles)\r\n return false;\r\n\r\n const baseTreeId = this.mapTree.layerImageryTrees[0].tree.modelId;\r\n return this._imageryTiles.every((imageryTile) => imageryTile.imageryTree.modelId !== baseTreeId || imageryTile.isReady);\r\n }\r\n\r\n /** @internal */\r\n public get imageryIsReady(): boolean {\r\n if (undefined === this._imageryTiles)\r\n return 0 === this.mapTree.layerImageryTrees.length;\r\n\r\n return this._imageryTiles.every((tile) => tile.isReady);\r\n }\r\n\r\n /** Select secondary (imagery) tiles\r\n * @internal\r\n */\r\n public override selectSecondaryTiles(args: TileDrawArgs, context: TraversalSelectionContext) {\r\n if (0 === this.mapTree.layerImageryTrees.length || this.imageryIsReady)\r\n return;\r\n\r\n this.clearImageryTiles();\r\n this._imageryTiles = new Array<ImageryMapTile>();\r\n this._hiddenTiles = new Array<ImageryMapTile>();\r\n this._highResolutionReplacementTiles = new Array<ImageryMapTile>();\r\n for (const layerImageryTree of this.mapTree.layerImageryTrees) {\r\n let tmpTiles = new Array<ImageryMapTile>();\r\n const tmpLeafTiles = new Array<ImageryMapTile>();\r\n if (TileTreeLoadStatus.Loaded !== layerImageryTree.tree.selectCartoDrapeTiles(tmpTiles, tmpLeafTiles, this, args)) {\r\n this._imageryTiles = undefined;\r\n return;\r\n }\r\n\r\n // When the base layer is zoomed-in beyond it's max resolution,\r\n // we display leaf tiles and stretched them if needed.\r\n // We don't want the same behavior non-base layers, in the case,\r\n // the layer will simply disappear past its max resolution.\r\n // Note: Replacement leaf tiles are kept as a mean to determine which\r\n // imagery tree has reached it's maximum zoom level.\r\n if (layerImageryTree.baseImageryLayer) {\r\n tmpTiles = [...tmpTiles, ...tmpLeafTiles];\r\n } else {\r\n this._highResolutionReplacementTiles = [...this._highResolutionReplacementTiles, ...tmpLeafTiles];\r\n }\r\n\r\n // MapTileTree might include a non-visible imagery tree, we need to check for that.\r\n if (layerImageryTree.settings.visible && !layerImageryTree.settings.allSubLayersInvisible) {\r\n for (const imageryTile of tmpTiles) {\r\n imageryTile.markMapTileUsage();\r\n if (imageryTile.isReady)\r\n args.markReady(imageryTile);\r\n else\r\n context.missing.push(imageryTile);\r\n this._imageryTiles.push(imageryTile);\r\n }\r\n } else {\r\n // Even though those selected imagery tile are not visible,\r\n // we keep track of them for scale range reporting.\r\n for (const imageryTile of tmpTiles) {\r\n this._hiddenTiles.push(imageryTile);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static _scratchRectangle1 = MapCartoRectangle.createZero();\r\n private static _scratchRectangle2 = MapCartoRectangle.createZero();\r\n\r\n /** The height range for terrain tiles is not known until the tiles are unloaded. We use \"ApproximateTerrainHeight\" for first 6 levels but below\r\n * that the tiles inherit height range from parents. This is problematic as tiles with large height range will be unnecessarily selected as\r\n * they apparently intersect view frustum. To avoid this force loading of terrain tiles if they exceed \"_maxParentHightDepth\".\r\n * @internal\r\n */\r\n protected override forceSelectRealityTile(): boolean {\r\n let parentHeightDepth = 0;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n for (let parent: MapTile = this; parent !== undefined && parent._heightRange === undefined; parent = parent.parent as MapTile)\r\n parentHeightDepth++;\r\n\r\n return parentHeightDepth > MapTile._maxParentHeightDepth;\r\n }\r\n\r\n /** @internal */\r\n protected override minimumVisibleFactor(): number {\r\n // if minimumVisibleFactor is more than 0, it stops parents from loading when children are not ready, to fill in gaps\r\n return 0.0;\r\n }\r\n\r\n private static _scratchThisDiagonal = Vector2d.create();\r\n private static _scratchDrapeDiagonal = Vector2d.create();\r\n\r\n /** @internal */\r\n public getDrapeTextures(): TerrainTexture[] | undefined {\r\n if (undefined === this._imageryTiles)\r\n return undefined;\r\n\r\n const drapeTextures: TerrainTexture[] = [];\r\n const thisRectangle = this.loadableTerrainTile.rectangle;\r\n const thisDiagonal = thisRectangle.diagonal(MapTile._scratchThisDiagonal);\r\n const bordersNorthPole = this.quadId.bordersNorthPole(this.mapTree.sourceTilingScheme);\r\n const bordersSouthPole = this.quadId.bordersSouthPole(this.mapTree.sourceTilingScheme);\r\n for (const imageryTile of this._imageryTiles) {\r\n if (imageryTile.texture) {\r\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, imageryTile, imageryTile.rectangle));\r\n\r\n if ((bordersNorthPole && imageryTile.quadId.bordersNorthPole(imageryTile.tilingScheme) && imageryTile.rectangle.high.y < thisRectangle.high.y) ||\r\n (bordersSouthPole && imageryTile.quadId.bordersSouthPole(imageryTile.tilingScheme) && imageryTile.rectangle.low.y > thisRectangle.low.y)) {\r\n // Add separate texture stretching last sliver of tile imagery to cover pole.\r\n const sliverRectangle = imageryTile.rectangle.clone(MapTile._scratchRectangle1);\r\n const clipRectangle = thisRectangle.clone(MapTile._scratchRectangle2);\r\n const sliverHeight = sliverRectangle.high.y - sliverRectangle.low.y;\r\n\r\n if (bordersSouthPole) {\r\n clipRectangle.high.y = sliverRectangle.low.y;\r\n sliverRectangle.low.y = thisRectangle.low.y;\r\n sliverRectangle.high.y += 1 / sliverHeight;\r\n } else {\r\n clipRectangle.low.y = sliverRectangle.high.y;\r\n sliverRectangle.high.y = thisRectangle.high.y;\r\n sliverRectangle.low.y -= 1 / sliverHeight;\r\n }\r\n\r\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, imageryTile, sliverRectangle, clipRectangle));\r\n }\r\n } else {\r\n for (let parent = imageryTile.parent; undefined !== parent; parent = parent.parent) {\r\n const mapTile = parent as ImageryMapTile;\r\n if (mapTile.texture) {\r\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, mapTile, mapTile.rectangle, imageryTile.rectangle));\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return drapeTextures.length > 0 ? drapeTextures : undefined;\r\n }\r\n\r\n private static _scratchIntersectRange = Range2d.createNull();\r\n\r\n private computeDrapeTexture(thisRectangle: Range2d, thisDiagonal: Vector2d, imageryTile: ImageryMapTile, drapeRectangle: Range2d, clipRectangle?: Range2d): TerrainTexture {\r\n assert(imageryTile.texture !== undefined);\r\n\r\n // Compute transformation from the terrain tile texture coordinates (0-1) to the drape tile texture coordinates.\r\n const drapeDiagonal = drapeRectangle.diagonal(MapTile._scratchDrapeDiagonal);\r\n const translate = Vector2d.create((thisRectangle.low.x - drapeRectangle.low.x) / drapeDiagonal.x, (thisRectangle.low.y - drapeRectangle.low.y) / drapeDiagonal.y);\r\n const scale = Vector2d.create(thisDiagonal.x / drapeDiagonal.x, thisDiagonal.y / drapeDiagonal.y);\r\n const featureIndex = this.mapLoader.getFeatureIndex(imageryTile.imageryTree.modelId);\r\n let clipRect;\r\n if (undefined !== clipRectangle) {\r\n const intersect = clipRectangle.intersect(drapeRectangle, MapTile._scratchIntersectRange);\r\n assert(!intersect.isNull);\r\n clipRect = Range2d.createXYXY((intersect.low.x - drapeRectangle.low.x) / drapeDiagonal.x, (intersect.low.y - drapeRectangle.low.y) / drapeDiagonal.y, (intersect.high.x - drapeRectangle.low.x) / drapeDiagonal.x, (intersect.high.y - drapeRectangle.low.y) / drapeDiagonal.y);\r\n }\r\n\r\n const imageryModelId = imageryTile.tree.modelId;\r\n return new TerrainTexture(imageryTile.texture, featureIndex, scale, translate, drapeRectangle, this.mapTree.getLayerIndex(imageryModelId), this.mapTree.getLayerTransparency(imageryModelId), clipRect);\r\n }\r\n\r\n /** @internal */\r\n public override setContent(content: TerrainTileContent): void {\r\n\r\n if (this.quadId.level < this.maxDepth) {\r\n const childIds = this.quadId.getChildIds();\r\n for (const childId of childIds) {\r\n if (!this.mapLoader.isTileAvailable(childId)) {\r\n this._mesh = content.terrain?.mesh; // If a child is unavailable retain mesh for upsampling.\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (this.mapTree.produceGeometry) {\r\n const iModelTransform = this.mapTree.iModelTransform;\r\n const geometryTransform = content.terrain?.renderGeometry?.transform;\r\n const transform = geometryTransform ? iModelTransform.multiplyTransformTransform(geometryTransform) : iModelTransform;\r\n const polyface = content.terrain?.mesh ? RealityMeshParams.toPolyface(content.terrain.mesh, { transform }) : undefined;\r\n this._geometry = polyface ? { polyfaces: [polyface] } : undefined;\r\n\r\n } else {\r\n dispose(this._renderGeometry);\r\n this._renderGeometry = content.terrain?.renderGeometry;\r\n }\r\n\r\n this.everLoaded = true;\r\n\r\n if (undefined !== content.contentRange)\r\n this._contentRange = content.contentRange;\r\n\r\n this.setIsReady();\r\n }\r\n\r\n /** @internal */\r\n public override freeMemory(): void {\r\n // ###TODO MapTiles and ImageryMapTiles share resources and don't currently interact well with TileAdmin.freeMemory(). Opt out for now.\r\n }\r\n\r\n /** @internal */\r\n public override disposeContents() {\r\n super.disposeContents();\r\n this._renderGeometry = dispose(this._renderGeometry);\r\n this.clearImageryTiles();\r\n // Note - don't dispose of mesh - these should only ever exist on terrain leaf tile and are required by children. Let garbage collector handle them.\r\n }\r\n}\r\n\r\n/** A child tile that has no content of its own available. It instead produces content by up-sampling the content of an ancestor tile.\r\n * @internal\r\n */\r\nexport class UpsampledMapTile extends MapTile {\r\n /** The ancestor tile whose content will be up-sampled. */\r\n private readonly _loadableTile: MapTile;\r\n\r\n constructor(params: RealityTileParams, mapTree: MapTileTree, quadId: QuadId, patch: TilePatch, rectangle: MapCartoRectangle, heightRange: Range1d | undefined, cornerRays: Ray3d[] | undefined, loadableTile: MapTile) {\r\n super(params, mapTree, quadId, patch, rectangle, heightRange, cornerRays);\r\n this._loadableTile = loadableTile;\r\n }\r\n\r\n public override get isUpsampled() { return true; }\r\n public override get isEmpty() { return false; }\r\n public override get loadableTile(): RealityTile { return this._loadableTile; }\r\n\r\n private upsampleFromParent() {\r\n const parent = this.loadableTerrainTile;\r\n const parentMesh = parent.mesh;\r\n if (undefined === parentMesh) {\r\n return undefined;\r\n }\r\n const thisId = this.quadId, parentId = parent.quadId;\r\n const levelDelta = thisId.level - parentId.level;\r\n const thisColumn = thisId.column - (parentId.column << levelDelta);\r\n const thisRow = thisId.row - (parentId.row << levelDelta);\r\n const scale = 1.0 / (1 << levelDelta);\r\n const parentParameterRange = Range2d.createXYXY(scale * thisColumn, scale * thisRow, scale * (thisColumn + 1), scale * (thisRow + 1));\r\n const upsample = upsampleRealityMeshParams(parentMesh, parentParameterRange);\r\n this.adjustHeights(upsample.heightRange.low, upsample.heightRange.high);\r\n return upsample;\r\n }\r\n\r\n public override get renderGeometry() {\r\n if (undefined === this._renderGeometry) {\r\n const upsample = this.upsampleFromParent();\r\n const projection = this.loadableTerrainTile.getProjection(this.heightRange);\r\n if (upsample)\r\n this._renderGeometry = IModelApp.renderSystem.createTerrainMesh(upsample.mesh, projection.transformFromLocal, true);\r\n }\r\n return this._renderGeometry;\r\n }\r\n\r\n public override get isLoading(): boolean { return this.loadableTile.isLoading; }\r\n public override get isQueued(): boolean { return this.loadableTile.isQueued; }\r\n public override get isNotFound(): boolean { return this.loadableTile.isNotFound; }\r\n public override get isReady(): boolean { return (this._renderGeometry !== undefined || this.loadableTile.loadStatus === TileLoadStatus.Ready) && this.baseImageryIsReady; }\r\n\r\n public override markUsed(args: TileDrawArgs): void {\r\n args.markUsed(this);\r\n args.markUsed(this.loadableTile);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapTile.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTile.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, dispose } from \"@itwin/core-bentley\";\r\nimport { ColorByName, ColorDef, FrustumPlanes, GlobeMode, PackedFeatureTable, RenderTexture } from \"@itwin/core-common\";\r\nimport { AxisOrder, BilinearPatch, ClipPlane, ClipPrimitive, ClipShape, ClipVector, Constant, ConvexClipPlaneSet, EllipsoidPatch, LongitudeLatitudeNumber, Matrix3d, Point3d, PolygonOps, Range1d, Range2d, Range3d, Ray3d, Transform, Vector2d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { GraphicBuilder } from \"../../render/GraphicBuilder\";\r\nimport { RealityMeshParams } from \"../../render/RealityMeshParams\";\r\nimport { upsampleRealityMeshParams } from \"../../render/UpsampleRealityMeshParams\";\r\nimport { RenderGraphic } from \"../../render/RenderGraphic\";\r\nimport { RenderMemory } from \"../../render/RenderMemory\";\r\nimport { RenderSystem, RenderTerrainGeometry, TerrainTexture } from \"../../render/RenderSystem\";\r\nimport { ViewingSpace } from \"../../ViewingSpace\";\r\nimport {\r\n ImageryMapTile, MapCartoRectangle, MapTileLoader, MapTileTree, QuadId, RealityTile, RealityTileParams, Tile, TileContent, TileDrawArgs, TileGraphicType,\r\n TileLoadStatus, TileTreeLoadStatus, TraversalSelectionContext,\r\n} from \"../internal\";\r\n\r\n/** @internal */\r\nexport class PlanarTilePatch {\r\n constructor(public corners: Point3d[], public normal: Vector3d, private _chordHeight: number) {\r\n }\r\n\r\n public getRangeCorners(heightRange: Range1d, result: Point3d[]): Point3d[] {\r\n let index = 0;\r\n for (const corner of this.corners)\r\n corner.plusScaled(this.normal, heightRange.low - this._chordHeight, result[index++]);\r\n\r\n for (const corner of this.corners)\r\n corner.plusScaled(this.normal, heightRange.high + this._chordHeight, result[index++]);\r\n\r\n return result;\r\n }\r\n public getClipShape(): Point3d[] {\r\n return [this.corners[0], this.corners[1], this.corners[3], this.corners[2]];\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type TilePatch = PlanarTilePatch | EllipsoidPatch;\r\n\r\n/** Projects points within the rectangular region of a [[MapTile]] into 3d space.\r\n * @see [[MapTile.getProjection]] to obtain the projection for a [[MapTile]].\r\n * @public\r\n */\r\nexport abstract class MapTileProjection {\r\n /** The extents of the volume of space associated with the projected [[MapTile]]. */\r\n public abstract get localRange(): Range3d;\r\n /** @alpha */\r\n public abstract get transformFromLocal(): Transform;\r\n\r\n /** Given parametric coordinates in [0, 1] within the tile's rectangular region, and an elevation above the Earth,\r\n * compute the 3d position in space.\r\n */\r\n public abstract getPoint(u: number, v: number, height: number, result?: Point3d): Point3d;\r\n\r\n /** @alpha */\r\n public get ellipsoidPatch(): EllipsoidPatch | undefined { return undefined; }\r\n\r\n /** @alpha */\r\n public getGlobalPoint(u: number, v: number, z: number, result?: Point3d): Point3d {\r\n const point = this.getPoint(u, v, z, result);\r\n return this.transformFromLocal.multiplyPoint3d(point, point);\r\n }\r\n}\r\n\r\n/** @alpha */\r\nclass EllipsoidProjection extends MapTileProjection {\r\n public transformFromLocal = Transform.createIdentity();\r\n public localRange: Range3d;\r\n constructor(private _patch: EllipsoidPatch, heightRange?: Range1d) {\r\n super();\r\n this.localRange = _patch.range();\r\n this.localRange.expandInPlace(heightRange ? (heightRange.high - heightRange.low) : 0);\r\n }\r\n private static _scratchAngles = LongitudeLatitudeNumber.createZero();\r\n private static _scratchRay = Ray3d.createZero();\r\n public getPoint(u: number, v: number, height: number, result?: Point3d): Point3d {\r\n const angles = this._patch.uvFractionToAngles(u, v, height, EllipsoidProjection._scratchAngles);\r\n const ray = this._patch.anglesToUnitNormalRay(angles, EllipsoidProjection._scratchRay);\r\n return Point3d.createFrom(ray!.origin, result);\r\n }\r\n public override get ellipsoidPatch() { return this._patch; }\r\n}\r\n\r\n/** @alpha */\r\nclass PlanarProjection extends MapTileProjection {\r\n private _bilinearPatch: BilinearPatch;\r\n public transformFromLocal: Transform;\r\n public localRange: Range3d;\r\n constructor(patch: PlanarTilePatch, heightRange?: Range1d) {\r\n super();\r\n this.transformFromLocal = Transform.createOriginAndMatrix(patch.corners[0], Matrix3d.createRigidHeadsUp(patch.normal, AxisOrder.ZYX));\r\n const planeCorners = this.transformFromLocal.multiplyInversePoint3dArray([patch.corners[0], patch.corners[1], patch.corners[2], patch.corners[3]])!;\r\n this.localRange = Range3d.createArray(planeCorners);\r\n this.localRange.low.z += heightRange ? heightRange.low : 0;\r\n this.localRange.high.z += heightRange ? heightRange.high : 0;\r\n this._bilinearPatch = new BilinearPatch(planeCorners[0], planeCorners[1], planeCorners[2], planeCorners[3]);\r\n }\r\n public getPoint(u: number, v: number, z: number, result?: Point3d): Point3d {\r\n result = this._bilinearPatch.uvFractionToPoint(u, v, result);\r\n result.z += z;\r\n return result;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface TerrainTileContent extends TileContent {\r\n terrain?: {\r\n renderGeometry?: RenderTerrainGeometry;\r\n /** Used on leaves to support up-sampling. */\r\n mesh?: RealityMeshParams;\r\n };\r\n}\r\n\r\nconst scratchNormal = Vector3d.create();\r\nconst scratchViewZ = Vector3d.create();\r\nconst scratchPoint = Point3d.create();\r\nconst scratchClipPlanes = [ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint), ClipPlane.createNormalAndPoint(scratchNormal, scratchPoint)];\r\nconst scratchCorners = [Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero()];\r\n\r\n/** A [[Tile]] belonging to a [[MapTileTree]] representing a rectangular region of a map of the Earth.\r\n * @public\r\n */\r\nexport class MapTile extends RealityTile {\r\n private static _maxParentHeightDepth = 4;\r\n private _imageryTiles?: ImageryMapTile[];\r\n private _hiddenTiles?: ImageryMapTile[];\r\n private _highResolutionReplacementTiles?: ImageryMapTile[];\r\n /** @internal */\r\n public everLoaded = false; // If the tile is only required for availability metadata, load it once and then allow it to be unloaded.\r\n /** @internal */\r\n protected _heightRange: Range1d | undefined;\r\n /** @internal */\r\n protected _renderGeometry?: RenderTerrainGeometry;\r\n /** @internal */\r\n protected _mesh?: RealityMeshParams; // Primitive retained on leaves only for upsampling.\r\n /** @internal */\r\n public override get isReady(): boolean {\r\n return super.isReady && this.baseImageryIsReady;\r\n }\r\n\r\n /** @internal */\r\n public override get hasGraphics(): boolean {\r\n return this._renderGeometry !== undefined;\r\n }\r\n\r\n /** @internal */\r\n public get renderGeometry() { return this._renderGeometry; }\r\n /** @internal */\r\n public get mesh() { return this._mesh; }\r\n /** @internal */\r\n public get loadableTerrainTile() { return this.loadableTile as MapTile; }\r\n /** @internal */\r\n public get isPlanar(): boolean { return this._patch instanceof PlanarTilePatch; }\r\n /** @internal */\r\n public get imageryTiles(): ImageryMapTile[] | undefined { return this._imageryTiles; }\r\n /** List of selected tiles but are currently in hidden state (i.e. scale range visibility)\r\n * @internal\r\n */\r\n public get hiddenImageryTiles(): ImageryMapTile[] | undefined { return this._hiddenTiles; }\r\n\r\n /** List of leafs tiles that have been selected as a replacement for missing high resolution tiles.\r\n * When this list is non-empty this means we are past the maximum LOD available of the tile tree.\r\n * By using those tiles, you are likely to get a display where tiles looks pixelated..\r\n * in some cases this is preferred to have no tile at all.\r\n * @internal\r\n */\r\n public get highResolutionReplacementTiles(): ImageryMapTile[] | undefined { return this._highResolutionReplacementTiles; }\r\n\r\n /** The [[MapTileTree]] to which this tile belongs. */\r\n public readonly mapTree: MapTileTree;\r\n /** Uniquely identifies this tile within its [[mapTree]]. */\r\n public readonly quadId: QuadId;\r\n private _patch: TilePatch;\r\n /** The area of the surface of the Earth that this tile represents. */\r\n public readonly rectangle: MapCartoRectangle;\r\n /** @internal */\r\n protected _cornerRays?: Ray3d[];\r\n\r\n /** @internal */\r\n constructor(params: RealityTileParams, mapTree: MapTileTree, quadId: QuadId, patch: TilePatch, rectangle: MapCartoRectangle, heightRange: Range1d | undefined, cornerRays: Ray3d[] | undefined) {\r\n super(params, mapTree);\r\n this.mapTree = mapTree;\r\n this.quadId = quadId;\r\n this._patch = patch;\r\n this.rectangle = rectangle;\r\n this._cornerRays = cornerRays;\r\n this._heightRange = heightRange?.clone();\r\n }\r\n\r\n /** @internal */\r\n public getRangeCorners(result: Point3d[]): Point3d[] {\r\n return this._patch instanceof PlanarTilePatch ? this._patch.getRangeCorners(this.heightRange!, result) : this.range.corners(result);\r\n }\r\n\r\n /** @internal */\r\n public override getSizeProjectionCorners(): Point3d[] | undefined {\r\n // Use only the first 4 corners -- On terrain tiles the height is initially exagerated to world height range which can cause excessive tile loading.\r\n const rangeCorners = this.getRangeCorners(scratchCorners);\r\n return rangeCorners.slice(0, 4);\r\n }\r\n\r\n /** @internal */\r\n public override markUsed(args: TileDrawArgs) {\r\n super.markUsed(args);\r\n if (this._imageryTiles)\r\n for (const imageryTile of this._imageryTiles)\r\n imageryTile.markUsed(args);\r\n }\r\n\r\n /** @internal */\r\n public override get graphicType() {\r\n if (this.mapTree.isOverlay)\r\n return TileGraphicType.Overlay;\r\n\r\n return (this.mapTree.useDepthBuffer || this._forceDepthBuffer) ? TileGraphicType.Scene : TileGraphicType.BackgroundMap;\r\n }\r\n\r\n /** @internal */\r\n public get mapLoader() { return this.realityRoot.loader as MapTileLoader; }\r\n /** @internal */\r\n public get isUpsampled() { return false; }\r\n\r\n /** @internal */\r\n public tileFromQuadId(quadId: QuadId): MapTile | undefined {\r\n if (0 === quadId.compare(this.quadId))\r\n return this;\r\n\r\n assert(quadId.level > this.quadId.level);\r\n if (quadId.level <= this.quadId.level)\r\n return undefined;\r\n\r\n if (this.children) {\r\n const shift = quadId.level - this.quadId.level - 1;\r\n const childRow = quadId.row >> shift;\r\n const childColumn = quadId.column >> shift;\r\n for (const child of this.children) {\r\n const mapChild = child as MapTile;\r\n const childQuadId = mapChild.quadId;\r\n if (childQuadId.row === childRow && childQuadId.column === childColumn)\r\n return mapChild.tileFromQuadId(quadId);\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private get _forceDepthBuffer() {\r\n // For large ellipsoidal globe tile force the depth buffer on to avoid anomalies at horizon.\r\n return this.mapTree.globeMode === GlobeMode.Ellipsoid && this.depth < 8;\r\n }\r\n\r\n /** @internal */\r\n public override addBoundingGraphic(builder: GraphicBuilder, color: ColorDef) {\r\n if (!this.isDisplayable)\r\n return;\r\n\r\n const heightRange = (this.heightRange === undefined) ? Range1d.createXX(-1, 1) : this.heightRange;\r\n const lows = [], highs = [], reorder = [0, 1, 3, 2, 0];\r\n const cornerRays = this._cornerRays!;\r\n if (this._patch instanceof PlanarTilePatch) {\r\n const normal = this._patch.normal;\r\n for (let i = 0; i < 5; i++) {\r\n const corner = this._patch.corners[reorder[i]];\r\n lows.push(corner.plusScaled(normal, heightRange.low));\r\n highs.push(corner.plusScaled(normal, heightRange.high));\r\n }\r\n } else {\r\n for (let i = 0; i < 5; i++) {\r\n const cornerRay = cornerRays[reorder[i]];\r\n lows.push(cornerRay.origin.plusScaled(cornerRay.direction, heightRange.low));\r\n highs.push(cornerRay.origin.plusScaled(cornerRay.direction, heightRange.high));\r\n }\r\n }\r\n\r\n builder.setSymbology(color, color, 1);\r\n builder.addLineString(lows);\r\n builder.addLineString(highs);\r\n for (let i = 0; i < 4; i++)\r\n builder.addLineString([lows[i], highs[i]]);\r\n\r\n const inColor = ColorDef.create(ColorByName.cornflowerBlue);\r\n const outColor = ColorDef.create(ColorByName.chartreuse);\r\n const transitionColor = ColorDef.create(ColorByName.aquamarine);\r\n\r\n const inPoints = [], outPoints = [], transitionPoints = [];\r\n\r\n for (const point of highs)\r\n if (this.mapTree.cartesianRange.containsPoint(point))\r\n inPoints.push(point);\r\n else if (this.mapTree.cartesianRange.distanceToPoint(point) < this.mapTree.cartesianTransitionDistance)\r\n transitionPoints.push(point);\r\n else\r\n outPoints.push(point);\r\n\r\n builder.setSymbology(inColor, inColor, 15);\r\n builder.addPointString(inPoints);\r\n builder.setSymbology(outColor, outColor, 15);\r\n builder.addPointString(outPoints);\r\n builder.setSymbology(transitionColor, transitionColor, 31);\r\n builder.addPointString(transitionPoints);\r\n }\r\n\r\n /** @internal */\r\n public override getContentClip(): ClipVector | undefined {\r\n const points = this.getClipShape();\r\n if (points.length < 3)\r\n return undefined;\r\n if (this.mapTree.globeMode === GlobeMode.Ellipsoid) {\r\n const normal = PolygonOps.areaNormal(points);\r\n const globeOrigin = this.mapTree.globeOrigin;\r\n const globeNormal = Vector3d.createStartEnd(globeOrigin, points[0]);\r\n const negate = normal.dotProduct(globeNormal) < 0;\r\n const clipPlanes = [];\r\n for (let i = 0; i < 4; i++) {\r\n const point = points[i];\r\n const clipNormal = globeOrigin.crossProductToPoints(point, points[(i + 1) % 4], scratchNormal);\r\n if (negate)\r\n clipNormal.negate(clipNormal);\r\n\r\n const clipPlane = ClipPlane.createNormalAndPoint(clipNormal, point, false, false, scratchClipPlanes[i]);\r\n if (clipPlane !== undefined) // Undefined at pole tiles...\r\n clipPlanes.push(clipPlane);\r\n }\r\n\r\n const planeSet = ConvexClipPlaneSet.createPlanes(clipPlanes);\r\n const clipPrimitive = ClipPrimitive.createCapture(planeSet);\r\n\r\n return ClipVector.createCapture([clipPrimitive]);\r\n } else {\r\n return ClipVector.createCapture([ClipShape.createShape(points)!]);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override setNotFound(): void {\r\n super.setNotFound();\r\n\r\n // For map tiles assume that an unfound tile implies descendants and siblings will also be unfound.\r\n if (undefined !== this.parent)\r\n this.parent.setLeaf();\r\n }\r\n\r\n /** @internal */\r\n public getGraphic(_system: RenderSystem, _texture: RenderTexture): RenderGraphic | undefined {\r\n return undefined;\r\n }\r\n\r\n /** For globe tiles displaying less then depth 2 appears distorted\r\n * @internal\r\n */\r\n public override get isDisplayable() {\r\n return this.mapTree.globeMode === GlobeMode.Ellipsoid ? (this.depth >= MapTileTree.minDisplayableDepth) : super.isDisplayable;\r\n }\r\n\r\n /** @internal */\r\n public override isOccluded(viewingSpace: ViewingSpace): boolean {\r\n if (undefined === this._cornerRays || this.mapTree.globeMode !== GlobeMode.Ellipsoid)\r\n return false;\r\n\r\n if (viewingSpace.eyePoint !== undefined) {\r\n if (!this.mapTree.pointAboveEllipsoid(viewingSpace.eyePoint))\r\n return false;\r\n\r\n for (const cornerNormal of this._cornerRays) {\r\n const eyeNormal = Vector3d.createStartEnd(viewingSpace.eyePoint, cornerNormal.origin, scratchNormal);\r\n eyeNormal.normalizeInPlace();\r\n if (eyeNormal.dotProduct(cornerNormal.direction) < .01)\r\n return false;\r\n }\r\n } else {\r\n const viewZ = viewingSpace.rotation.getRow(2, scratchViewZ);\r\n for (const cornerNormal of this._cornerRays)\r\n if (cornerNormal.direction.dotProduct(viewZ) > 0)\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n protected override _loadChildren(resolve: (children: Tile[] | undefined) => void, _reject: (error: Error) => void): void {\r\n const mapTree = this.mapTree;\r\n const childLevel = this.quadId.level + 1;\r\n const rowCount = mapTree.sourceTilingScheme.getNumberOfYChildrenAtLevel(childLevel);\r\n const columnCount = mapTree.sourceTilingScheme.getNumberOfXChildrenAtLevel(childLevel);\r\n\r\n const resolveChildren = (children: Tile[]) => {\r\n const childrenRange = Range3d.createNull();\r\n for (const child of children)\r\n childrenRange.extendRange(child.range);\r\n\r\n if (!this.range.containsRange(childrenRange))\r\n this.range.extendRange(childrenRange);\r\n\r\n resolve(children);\r\n };\r\n\r\n if (mapTree.doCreateGlobeChildren(this)) {\r\n this.createGlobeChildren(columnCount, rowCount, resolveChildren);\r\n return;\r\n }\r\n\r\n const resolvePlanarChildren = (childCorners: Point3d[][]) => {\r\n const level = this.quadId.level + 1;\r\n const column = this.quadId.column * 2;\r\n const row = this.quadId.row * 2;\r\n const children = [];\r\n const childrenAreLeaves = (this.depth + 1) === mapTree.loader.maxDepth;\r\n const globeMode = this.mapTree.globeMode;\r\n for (let j = 0; j < rowCount; j++) {\r\n for (let i = 0; i < columnCount; i++) {\r\n const quadId = new QuadId(level, column + i, row + j);\r\n const corners = childCorners[j * columnCount + i];\r\n const rectangle = mapTree.getTileRectangle(quadId);\r\n const normal = PolygonOps.areaNormal([corners[0], corners[1], corners[3], corners[2]]);\r\n normal.normalizeInPlace();\r\n\r\n const heightRange = this.mapTree.getChildHeightRange(quadId, rectangle, this);\r\n const diagonal = Math.max(corners[0].distance(corners[3]), corners[1].distance(corners[2])) / 2.0;\r\n const chordHeight = globeMode === GlobeMode.Ellipsoid ? Math.sqrt(diagonal * diagonal + Constant.earthRadiusWGS84.equator * Constant.earthRadiusWGS84.equator) - Constant.earthRadiusWGS84.equator : 0.0;\r\n const rangeCorners = MapTile.computeRangeCorners(corners, normal, chordHeight, undefined, heightRange);\r\n const range = Range3d.createArray(rangeCorners);\r\n const child = this.mapTree.createPlanarChild({ contentId: quadId.contentId, maximumSize: 512, range, parent: this, isLeaf: childrenAreLeaves }, quadId, corners, normal, rectangle, chordHeight, heightRange);\r\n if (child)\r\n children.push(child);\r\n }\r\n }\r\n\r\n resolveChildren(children);\r\n };\r\n\r\n mapTree.getPlanarChildCorners(this, columnCount, rowCount, resolvePlanarChildren);\r\n }\r\n\r\n private createGlobeChildren(columnCount: number, rowCount: number, resolve: (children: MapTile[]) => void) {\r\n const level = this.quadId.level + 1;\r\n const column = this.quadId.column * 2;\r\n const row = this.quadId.row * 2;\r\n const mapTree = this.mapTree;\r\n const children = [];\r\n\r\n for (let j = 0; j < rowCount; j++) {\r\n for (let i = 0; i < columnCount; i++) {\r\n const quadId = new QuadId(level, column + i, row + j);\r\n const angleSweep = quadId.getAngleSweep(mapTree.sourceTilingScheme);\r\n const ellipsoidPatch = EllipsoidPatch.createCapture(this.mapTree.earthEllipsoid, angleSweep.longitude, angleSweep.latitude);\r\n const range = ellipsoidPatch.range();\r\n const rectangle = mapTree.getTileRectangle(quadId);\r\n const heightRange = this.mapTree.getChildHeightRange(quadId, rectangle, this);\r\n if (undefined !== heightRange)\r\n range.expandInPlace(heightRange.high - heightRange.low);\r\n\r\n children.push(this.mapTree.createGlobeChild({ contentId: quadId.contentId, maximumSize: 512, range, parent: this, isLeaf: false }, quadId, range.corners(), rectangle, ellipsoidPatch, heightRange));\r\n }\r\n }\r\n\r\n resolve(children);\r\n return children;\r\n }\r\n\r\n /** @internal */\r\n public static computeRangeCorners(corners: Point3d[], normal: Vector3d, chordHeight: number, result?: Point3d[], heightRange?: Range1d) {\r\n if (result === undefined) {\r\n result = [];\r\n for (let i = 0; i < 8; i++)\r\n result.push(Point3d.create());\r\n }\r\n\r\n let index = 0;\r\n assert(corners.length === 4);\r\n const deltaLow = normal.scale(- chordHeight + (heightRange ? heightRange.low : 0));\r\n const deltaHigh = normal.scale(chordHeight + (heightRange ? heightRange.high : 0));\r\n\r\n for (const corner of corners)\r\n corner.plus(deltaLow, result[index++]);\r\n\r\n for (const corner of corners)\r\n corner.plus(deltaHigh, result[index++]);\r\n\r\n return result;\r\n }\r\n\r\n /** @internal */\r\n public override isRegionCulled(args: TileDrawArgs): boolean {\r\n return this.isContentCulled(args);\r\n }\r\n\r\n /** @internal */\r\n public override isContentCulled(args: TileDrawArgs): boolean {\r\n return FrustumPlanes.Containment.Outside === args.frustumPlanes.computeContainment(this.getRangeCorners(scratchCorners));\r\n }\r\n\r\n /** @internal */\r\n public clearLayers() {\r\n this.clearImageryTiles();\r\n this._graphic = undefined;\r\n if (this.children)\r\n for (const child of this.children)\r\n (child as MapTile).clearLayers();\r\n }\r\n\r\n private clearImageryTiles() {\r\n if (this._imageryTiles) {\r\n this._imageryTiles.forEach((tile) => tile.releaseMapTileUsage());\r\n this._imageryTiles = undefined;\r\n }\r\n if (this._hiddenTiles) {\r\n this._hiddenTiles = undefined;\r\n }\r\n if (this._highResolutionReplacementTiles) {\r\n this._highResolutionReplacementTiles = undefined;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override produceGraphics(): RenderGraphic | undefined {\r\n if (undefined !== this._graphic && this.imageryIsReady)\r\n return this._graphic;\r\n\r\n const geometry = this.renderGeometry;\r\n if (undefined === geometry)\r\n return undefined;\r\n\r\n const textures = this.getDrapeTextures();\r\n const { baseColor, baseTransparent, layerClassifiers } = this.mapTree;\r\n const graphic = IModelApp.renderSystem.createRealityMeshGraphic({ realityMesh: geometry, projection: this.getProjection(), tileRectangle: this.rectangle, featureTable: PackedFeatureTable.pack(this.mapLoader.featureTable), tileId: this.contentId, baseColor, baseTransparent, textures, layerClassifiers, disableClipStyle: true }, true);\r\n\r\n // If there are no layer classifiers then we can save this graphic for re-use. If layer classifiers exist they are regenerated based on view and we must collate them with the imagery.\r\n if (this.imageryIsReady && 0 === this.mapTree.layerClassifiers.size)\r\n this._graphic = graphic;\r\n\r\n return graphic;\r\n }\r\n\r\n /** @internal */\r\n public getClipShape(): Point3d[] {\r\n return (this._patch instanceof PlanarTilePatch) ? this._patch.getClipShape() : [this._cornerRays![0].origin, this._cornerRays![1].origin, this._cornerRays![3].origin, this._cornerRays![2].origin];\r\n }\r\n\r\n /** @internal */\r\n protected override _collectStatistics(stats: RenderMemory.Statistics): void {\r\n super._collectStatistics(stats);\r\n\r\n this._renderGeometry?.collectStatistics(stats);\r\n if (this._mesh) {\r\n stats.addTerrain(this._mesh.indices.byteLength\r\n + this._mesh.positions.points.byteLength\r\n + this._mesh.uvs.points.byteLength\r\n + (this._mesh.normals ? this._mesh.normals.byteLength : 0),\r\n );\r\n }\r\n }\r\n\r\n /** Height range is along with the tile corners to detect if tile intersects view frustum.\r\n * Range will be single value fo ron-terrain tiles -- if terrain tile is not loaded it will\r\n * inherit height from ancestors.\r\n * @internal\r\n */\r\n public get heightRange(): Range1d | undefined {\r\n if (undefined !== this._heightRange)\r\n return this._heightRange;\r\n\r\n for (let parent = this.parent; undefined !== parent; parent = parent.parent) {\r\n const mapParent = parent as MapTile;\r\n if (undefined !== mapParent._heightRange)\r\n return mapParent._heightRange;\r\n }\r\n\r\n assert(false);\r\n return Range1d.createNull();\r\n }\r\n\r\n /** @internal */\r\n public get mapTilingScheme() {\r\n return this.mapTree.sourceTilingScheme;\r\n }\r\n\r\n /** Adjust the minimum and maximum elevations of the terrain within this tile. */\r\n public adjustHeights(minHeight: number, maxHeight: number) {\r\n if (undefined === this._heightRange)\r\n this._heightRange = Range1d.createXX(minHeight, maxHeight);\r\n else {\r\n this._heightRange.low = Math.max(this.heightRange!.low, minHeight);\r\n this._heightRange.high = Math.min(this.heightRange!.high, maxHeight);\r\n }\r\n\r\n if (this.rangeCorners && this._patch instanceof PlanarTilePatch)\r\n this._patch.getRangeCorners(this.heightRange!, this.rangeCorners);\r\n }\r\n\r\n /** Obtain a [[MapTileProjection]] to project positions within this tile's area into 3d space. */\r\n public getProjection(heightRange?: Range1d): MapTileProjection {\r\n return this._patch instanceof PlanarTilePatch ? new PlanarProjection(this._patch, heightRange) : new EllipsoidProjection(this._patch, heightRange);\r\n }\r\n\r\n /** @internal */\r\n public get baseImageryIsReady(): boolean {\r\n if (undefined !== this.mapTree.baseColor || 0 === this.mapTree.layerImageryTrees.length)\r\n return true;\r\n\r\n if (undefined === this._imageryTiles)\r\n return false;\r\n\r\n const baseTreeId = this.mapTree.layerImageryTrees[0].tree.modelId;\r\n return this._imageryTiles.every((imageryTile) => imageryTile.imageryTree.modelId !== baseTreeId || imageryTile.isReady);\r\n }\r\n\r\n /** @internal */\r\n public get imageryIsReady(): boolean {\r\n if (undefined === this._imageryTiles)\r\n return 0 === this.mapTree.layerImageryTrees.length;\r\n\r\n return this._imageryTiles.every((tile) => tile.isReady);\r\n }\r\n\r\n /** Select secondary (imagery) tiles\r\n * @internal\r\n */\r\n public override selectSecondaryTiles(args: TileDrawArgs, context: TraversalSelectionContext) {\r\n if (0 === this.mapTree.layerImageryTrees.length || this.imageryIsReady)\r\n return;\r\n\r\n this.clearImageryTiles();\r\n this._imageryTiles = new Array<ImageryMapTile>();\r\n this._hiddenTiles = new Array<ImageryMapTile>();\r\n this._highResolutionReplacementTiles = new Array<ImageryMapTile>();\r\n for (const layerImageryTree of this.mapTree.layerImageryTrees) {\r\n let tmpTiles = new Array<ImageryMapTile>();\r\n const tmpLeafTiles = new Array<ImageryMapTile>();\r\n if (TileTreeLoadStatus.Loaded !== layerImageryTree.tree.selectCartoDrapeTiles(tmpTiles, tmpLeafTiles, this, args)) {\r\n this._imageryTiles = undefined;\r\n return;\r\n }\r\n\r\n // When the base layer is zoomed-in beyond it's max resolution,\r\n // we display leaf tiles and stretched them if needed.\r\n // We don't want the same behavior non-base layers, in the case,\r\n // the layer will simply disappear past its max resolution.\r\n // Note: Replacement leaf tiles are kept as a mean to determine which\r\n // imagery tree has reached it's maximum zoom level.\r\n if (layerImageryTree.baseImageryLayer) {\r\n tmpTiles = [...tmpTiles, ...tmpLeafTiles];\r\n } else {\r\n this._highResolutionReplacementTiles = [...this._highResolutionReplacementTiles, ...tmpLeafTiles];\r\n }\r\n\r\n // MapTileTree might include a non-visible imagery tree, we need to check for that.\r\n if (layerImageryTree.settings.visible && !layerImageryTree.settings.allSubLayersInvisible) {\r\n for (const imageryTile of tmpTiles) {\r\n imageryTile.markMapTileUsage();\r\n if (imageryTile.isReady)\r\n args.markReady(imageryTile);\r\n else\r\n context.missing.push(imageryTile);\r\n this._imageryTiles.push(imageryTile);\r\n }\r\n } else {\r\n // Even though those selected imagery tile are not visible,\r\n // we keep track of them for scale range reporting.\r\n for (const imageryTile of tmpTiles) {\r\n this._hiddenTiles.push(imageryTile);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static _scratchRectangle1 = MapCartoRectangle.createZero();\r\n private static _scratchRectangle2 = MapCartoRectangle.createZero();\r\n\r\n /** The height range for terrain tiles is not known until the tiles are unloaded. We use \"ApproximateTerrainHeight\" for first 6 levels but below\r\n * that the tiles inherit height range from parents. This is problematic as tiles with large height range will be unnecessarily selected as\r\n * they apparently intersect view frustum. To avoid this force loading of terrain tiles if they exceed \"_maxParentHightDepth\".\r\n * @internal\r\n */\r\n protected override forceSelectRealityTile(): boolean {\r\n let parentHeightDepth = 0;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n for (let parent: MapTile = this; parent !== undefined && parent._heightRange === undefined; parent = parent.parent as MapTile)\r\n parentHeightDepth++;\r\n\r\n return parentHeightDepth > MapTile._maxParentHeightDepth;\r\n }\r\n\r\n /** @internal */\r\n protected override minimumVisibleFactor(): number {\r\n // if minimumVisibleFactor is more than 0, it stops parents from loading when children are not ready, to fill in gaps\r\n return 0.0;\r\n }\r\n\r\n private static _scratchThisDiagonal = Vector2d.create();\r\n private static _scratchDrapeDiagonal = Vector2d.create();\r\n\r\n /** @internal */\r\n public getDrapeTextures(): TerrainTexture[] | undefined {\r\n if (undefined === this._imageryTiles)\r\n return undefined;\r\n\r\n const drapeTextures: TerrainTexture[] = [];\r\n const thisRectangle = this.loadableTerrainTile.rectangle;\r\n const thisDiagonal = thisRectangle.diagonal(MapTile._scratchThisDiagonal);\r\n const bordersNorthPole = this.quadId.bordersNorthPole(this.mapTree.sourceTilingScheme);\r\n const bordersSouthPole = this.quadId.bordersSouthPole(this.mapTree.sourceTilingScheme);\r\n for (const imageryTile of this._imageryTiles) {\r\n if (imageryTile.texture) {\r\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, imageryTile, imageryTile.rectangle));\r\n\r\n if ((bordersNorthPole && imageryTile.quadId.bordersNorthPole(imageryTile.tilingScheme) && imageryTile.rectangle.high.y < thisRectangle.high.y) ||\r\n (bordersSouthPole && imageryTile.quadId.bordersSouthPole(imageryTile.tilingScheme) && imageryTile.rectangle.low.y > thisRectangle.low.y)) {\r\n // Add separate texture stretching last sliver of tile imagery to cover pole.\r\n const sliverRectangle = imageryTile.rectangle.clone(MapTile._scratchRectangle1);\r\n const clipRectangle = thisRectangle.clone(MapTile._scratchRectangle2);\r\n const sliverHeight = sliverRectangle.high.y - sliverRectangle.low.y;\r\n\r\n if (bordersSouthPole) {\r\n clipRectangle.high.y = sliverRectangle.low.y;\r\n sliverRectangle.low.y = thisRectangle.low.y;\r\n sliverRectangle.high.y += 1 / sliverHeight;\r\n } else {\r\n clipRectangle.low.y = sliverRectangle.high.y;\r\n sliverRectangle.high.y = thisRectangle.high.y;\r\n sliverRectangle.low.y -= 1 / sliverHeight;\r\n }\r\n\r\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, imageryTile, sliverRectangle, clipRectangle));\r\n }\r\n } else {\r\n for (let parent = imageryTile.parent; undefined !== parent; parent = parent.parent) {\r\n const mapTile = parent as ImageryMapTile;\r\n if (mapTile.texture) {\r\n drapeTextures.push(this.computeDrapeTexture(thisRectangle, thisDiagonal, mapTile, mapTile.rectangle, imageryTile.rectangle));\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return drapeTextures.length > 0 ? drapeTextures : undefined;\r\n }\r\n\r\n private static _scratchIntersectRange = Range2d.createNull();\r\n\r\n private computeDrapeTexture(thisRectangle: Range2d, thisDiagonal: Vector2d, imageryTile: ImageryMapTile, drapeRectangle: Range2d, clipRectangle?: Range2d): TerrainTexture {\r\n assert(imageryTile.texture !== undefined);\r\n\r\n // Compute transformation from the terrain tile texture coordinates (0-1) to the drape tile texture coordinates.\r\n const drapeDiagonal = drapeRectangle.diagonal(MapTile._scratchDrapeDiagonal);\r\n const translate = Vector2d.create((thisRectangle.low.x - drapeRectangle.low.x) / drapeDiagonal.x, (thisRectangle.low.y - drapeRectangle.low.y) / drapeDiagonal.y);\r\n const scale = Vector2d.create(thisDiagonal.x / drapeDiagonal.x, thisDiagonal.y / drapeDiagonal.y);\r\n const featureIndex = this.mapLoader.getFeatureIndex(imageryTile.imageryTree.modelId);\r\n let clipRect;\r\n if (undefined !== clipRectangle) {\r\n const intersect = clipRectangle.intersect(drapeRectangle, MapTile._scratchIntersectRange);\r\n assert(!intersect.isNull);\r\n clipRect = Range2d.createXYXY((intersect.low.x - drapeRectangle.low.x) / drapeDiagonal.x, (intersect.low.y - drapeRectangle.low.y) / drapeDiagonal.y, (intersect.high.x - drapeRectangle.low.x) / drapeDiagonal.x, (intersect.high.y - drapeRectangle.low.y) / drapeDiagonal.y);\r\n }\r\n\r\n const imageryModelId = imageryTile.tree.modelId;\r\n return new TerrainTexture(imageryTile.texture, featureIndex, scale, translate, drapeRectangle, this.mapTree.getLayerIndex(imageryModelId), this.mapTree.getLayerTransparency(imageryModelId), clipRect);\r\n }\r\n\r\n /** @internal */\r\n public override setContent(content: TerrainTileContent): void {\r\n\r\n if (this.quadId.level < this.maxDepth) {\r\n const childIds = this.quadId.getChildIds();\r\n for (const childId of childIds) {\r\n if (!this.mapLoader.isTileAvailable(childId)) {\r\n this._mesh = content.terrain?.mesh; // If a child is unavailable retain mesh for upsampling.\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (this.mapTree.produceGeometry) {\r\n const iModelTransform = this.mapTree.iModelTransform;\r\n const geometryTransform = content.terrain?.renderGeometry?.transform;\r\n const transform = geometryTransform ? iModelTransform.multiplyTransformTransform(geometryTransform) : iModelTransform;\r\n const polyface = content.terrain?.mesh ? RealityMeshParams.toPolyface(content.terrain.mesh, { transform }) : undefined;\r\n this._geometry = polyface ? { polyfaces: [polyface] } : undefined;\r\n\r\n } else {\r\n dispose(this._renderGeometry);\r\n this._renderGeometry = content.terrain?.renderGeometry;\r\n }\r\n\r\n this.everLoaded = true;\r\n\r\n if (undefined !== content.contentRange)\r\n this._contentRange = content.contentRange;\r\n\r\n this.setIsReady();\r\n }\r\n\r\n /** @internal */\r\n public override freeMemory(): void {\r\n // ###TODO MapTiles and ImageryMapTiles share resources and don't currently interact well with TileAdmin.freeMemory(). Opt out for now.\r\n }\r\n\r\n /** @internal */\r\n public override disposeContents() {\r\n super.disposeContents();\r\n this._renderGeometry = dispose(this._renderGeometry);\r\n this.clearImageryTiles();\r\n // Note - don't dispose of mesh - these should only ever exist on terrain leaf tile and are required by children. Let garbage collector handle them.\r\n }\r\n}\r\n\r\n/** A child tile that has no content of its own available. It instead produces content by up-sampling the content of an ancestor tile.\r\n * @internal\r\n */\r\nexport class UpsampledMapTile extends MapTile {\r\n /** The ancestor tile whose content will be up-sampled. */\r\n private readonly _loadableTile: MapTile;\r\n\r\n constructor(params: RealityTileParams, mapTree: MapTileTree, quadId: QuadId, patch: TilePatch, rectangle: MapCartoRectangle, heightRange: Range1d | undefined, cornerRays: Ray3d[] | undefined, loadableTile: MapTile) {\r\n super(params, mapTree, quadId, patch, rectangle, heightRange, cornerRays);\r\n this._loadableTile = loadableTile;\r\n }\r\n\r\n public override get isUpsampled() { return true; }\r\n public override get isEmpty() { return false; }\r\n public override get loadableTile(): RealityTile { return this._loadableTile; }\r\n\r\n private upsampleFromParent() {\r\n const parent = this.loadableTerrainTile;\r\n const parentMesh = parent.mesh;\r\n if (undefined === parentMesh) {\r\n return undefined;\r\n }\r\n const thisId = this.quadId, parentId = parent.quadId;\r\n const levelDelta = thisId.level - parentId.level;\r\n const thisColumn = thisId.column - (parentId.column << levelDelta);\r\n const thisRow = thisId.row - (parentId.row << levelDelta);\r\n const scale = 1.0 / (1 << levelDelta);\r\n const parentParameterRange = Range2d.createXYXY(scale * thisColumn, scale * thisRow, scale * (thisColumn + 1), scale * (thisRow + 1));\r\n const upsample = upsampleRealityMeshParams(parentMesh, parentParameterRange);\r\n this.adjustHeights(upsample.heightRange.low, upsample.heightRange.high);\r\n return upsample;\r\n }\r\n\r\n public override get renderGeometry() {\r\n if (undefined === this._renderGeometry) {\r\n const upsample = this.upsampleFromParent();\r\n const projection = this.loadableTerrainTile.getProjection(this.heightRange);\r\n if (upsample)\r\n this._renderGeometry = IModelApp.renderSystem.createTerrainMesh(upsample.mesh, projection.transformFromLocal, true);\r\n }\r\n return this._renderGeometry;\r\n }\r\n\r\n public override get isLoading(): boolean { return this.loadableTile.isLoading; }\r\n public override get isQueued(): boolean { return this.loadableTile.isQueued; }\r\n public override get isNotFound(): boolean { return this.loadableTile.isNotFound; }\r\n public override get isReady(): boolean { return (this._renderGeometry !== undefined || this.loadableTile.loadStatus === TileLoadStatus.Ready) && this.baseImageryIsReady; }\r\n\r\n public override markUsed(args: TileDrawArgs): void {\r\n args.markUsed(this);\r\n args.markUsed(this.loadableTile);\r\n }\r\n}\r\n"]}
|
|
@@ -77,6 +77,7 @@ export class TileAvailability {
|
|
|
77
77
|
this._rootNodes = new Array();
|
|
78
78
|
this._cartographicScratch = Cartographic.createZero();
|
|
79
79
|
}
|
|
80
|
+
static { this.rectangleScratch = MapCartoRectangle.createMaximum(); }
|
|
80
81
|
findNode(level, x, y, nodes) {
|
|
81
82
|
for (const node of nodes) {
|
|
82
83
|
if (node.x === x && node.y === y && node.level === level) {
|
|
@@ -208,5 +209,4 @@ export class TileAvailability {
|
|
|
208
209
|
return maxLevel;
|
|
209
210
|
}
|
|
210
211
|
}
|
|
211
|
-
TileAvailability.rectangleScratch = MapCartoRectangle.createMaximum();
|
|
212
212
|
//# sourceMappingURL=MapTileAvailability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapTileAvailability.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTileAvailability.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 { Cartographic } from \"@itwin/core-common\";\r\nimport { MapCartoRectangle, MapTilingScheme } from \"../internal\";\r\nimport { SortedArray } from \"@itwin/core-bentley\";\r\n\r\n// portions adapted from Cesium.js Copyright 2011 - 2017 Cesium Contributors\r\n/** @internal */\r\nclass RectangleWithLevel extends MapCartoRectangle {\r\n constructor(public level: number, west: number, south: number, east: number, north: number) {\r\n super(west, south, east, north);\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass QuadTreeNode {\r\n public swNode?: QuadTreeNode;\r\n public seNode?: QuadTreeNode;\r\n public nwNode?: QuadTreeNode;\r\n public neNode?: QuadTreeNode;\r\n public extent: MapCartoRectangle;\r\n public rectangles = new SortedArray<RectangleWithLevel>((lhs: RectangleWithLevel, rhs: RectangleWithLevel) => lhs.level - rhs.level, true);\r\n constructor(public tilingScheme: MapTilingScheme, public parent: QuadTreeNode | undefined, public level: number, public x: number, public y: number) {\r\n this.extent = tilingScheme.tileXYToRectangle(x, y, level + 1);\r\n }\r\n public get nw(): QuadTreeNode {\r\n if (!this.nwNode)\r\n this.nwNode = new QuadTreeNode(this.tilingScheme, this, this.level + 1, this.x * 2, this.y * 2);\r\n\r\n return this.nwNode;\r\n }\r\n public get ne(): QuadTreeNode {\r\n if (!this.neNode)\r\n this.neNode = new QuadTreeNode(this.tilingScheme, this, this.level + 1, this.x * 2 + 1, this.y * 2);\r\n\r\n return this.neNode;\r\n }\r\n public get sw(): QuadTreeNode {\r\n if (!this.swNode)\r\n this.swNode = new QuadTreeNode(this.tilingScheme, this, this.level + 1, this.x * 2, this.y * 2 + 1);\r\n\r\n return this.swNode;\r\n }\r\n public get se(): QuadTreeNode {\r\n if (!this.seNode)\r\n this.seNode = new QuadTreeNode(this.tilingScheme, this, this.level + 1, this.x * 2 + 1, this.y * 2 + 1);\r\n\r\n return this.seNode;\r\n }\r\n}\r\n\r\n/** @internal */\r\nfunction putRectangleInQuadtree(maxDepth: number, node: QuadTreeNode, rectangle: RectangleWithLevel) {\r\n while (node.level < maxDepth) {\r\n if (node.nw.extent.containsRange(rectangle)) {\r\n node = node.nw;\r\n } else if (node.ne.extent.containsRange(rectangle)) {\r\n node = node.ne;\r\n } else if (node.sw.extent.containsRange(rectangle)) {\r\n node = node.sw;\r\n } else if (node.se.extent.containsRange(rectangle)) {\r\n node = node.se;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n node.rectangles.insert(rectangle);\r\n}\r\n\r\n/** @internal */\r\nexport class TileAvailability {\r\n private _rootNodes = new Array<QuadTreeNode>();\r\n constructor(private _tilingScheme: MapTilingScheme, private _maximumLevel: number) { }\r\n\r\n public static rectangleScratch = MapCartoRectangle.createMaximum();\r\n\r\n public findNode(level: number, x: number, y: number, nodes: QuadTreeNode[]) {\r\n for (const node of nodes) {\r\n if (node.x === x && node.y === y && node.level === level) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Marks a rectangular range of tiles in a particular level as being available. For best performance,\r\n * add your ranges in order of increasing level.\r\n *\r\n * @param {Number} level The level.\r\n * @param {Number} startX The X coordinate of the first available tiles at the level.\r\n * @param {Number} startY The Y coordinate of the first available tiles at the level.\r\n * @param {Number} endX The X coordinate of the last available tiles at the level.\r\n * @param {Number} endY The Y coordinate of the last available tiles at the level.\r\n */\r\n public addAvailableTileRange(level: number, startX: number, startY: number, endX: number, endY: number) {\r\n const tilingScheme = this._tilingScheme;\r\n const rootNodes = this._rootNodes;\r\n if (level === 0) {\r\n for (let y = startY; y <= endY; ++y) {\r\n for (let x = startX; x <= endX; ++x) {\r\n if (!this.findNode(level, x, y, rootNodes)) {\r\n rootNodes.push(new QuadTreeNode(tilingScheme, undefined, 0, x, y));\r\n }\r\n }\r\n }\r\n }\r\n\r\n tilingScheme.tileXYToRectangle(startX, startY, level + 1, TileAvailability.rectangleScratch);\r\n const west = TileAvailability.rectangleScratch.west;\r\n const south = TileAvailability.rectangleScratch.south;\r\n\r\n tilingScheme.tileXYToRectangle(endX, endY, level + 1, TileAvailability.rectangleScratch);\r\n const east = TileAvailability.rectangleScratch.east;\r\n const north = TileAvailability.rectangleScratch.north;\r\n\r\n const rectangleWithLevel = new RectangleWithLevel(level, west, south, east, north);\r\n\r\n for (const rootNode of rootNodes) {\r\n if (rootNode.extent.intersectsRange(rectangleWithLevel)) {\r\n putRectangleInQuadtree(this._maximumLevel, rootNode, rectangleWithLevel);\r\n }\r\n }\r\n }\r\n\r\n public computeMaximumLevelAtPosition(position: Cartographic): number {\r\n // Find the root node that contains this position.\r\n let node;\r\n for (const rootNode of this._rootNodes) {\r\n if (rootNode.extent.containsCartographic(position)) {\r\n node = rootNode;\r\n break;\r\n }\r\n }\r\n\r\n if (undefined === node) {\r\n return -1;\r\n }\r\n\r\n return this.findMaxLevelFromNode(undefined, node, position);\r\n }\r\n\r\n private _cartographicScratch = Cartographic.createZero();\r\n\r\n /**\r\n * Determines if a particular tile is available.\r\n * @param {Number} level The tile level to check.\r\n * @param {Number} x The X coordinate of the tile to check.\r\n * @param {Number} y The Y coordinate of the tile to check.\r\n * @return {Boolean} True if the tile is available; otherwise, false.\r\n */\r\n public isTileAvailable(level: number, x: number, y: number): boolean {\r\n // Get the center of the tile and find the maximum level at that position.\r\n // Because availability is by tile, if the level is available at that point, it\r\n // is sure to be available for the whole tile. We assume that if a tile at level n exists,\r\n // then all its parent tiles back to level 0 exist too. This isn't really enforced\r\n // anywhere, but Cesium would never load a tile for which this is not true.\r\n const rectangle = this._tilingScheme.tileXYToRectangle(x, y, level + 1, TileAvailability.rectangleScratch);\r\n rectangle.getCenter(this._cartographicScratch);\r\n return this.computeMaximumLevelAtPosition(this._cartographicScratch) >= level;\r\n }\r\n\r\n private findMaxLevelFromNode(stopNode: QuadTreeNode | undefined, node: QuadTreeNode | undefined, position: Cartographic) {\r\n let maxLevel = 0;\r\n\r\n // Find the deepest quadtree node containing this point.\r\n let found = false;\r\n while (!found && node !== undefined) {\r\n const nw = node.nwNode && node.nwNode.extent.containsCartographic(position);\r\n const ne = node.neNode && node.neNode.extent.containsCartographic(position);\r\n const sw = node.swNode && node.swNode.extent.containsCartographic(position);\r\n const se = node.seNode && node.seNode.extent.containsCartographic(position);\r\n\r\n // The common scenario is that the point is in only one quadrant and we can simply\r\n // iterate down the tree. But if the point is on a boundary between tiles, it is\r\n // in multiple tiles and we need to check all of them, so use recursion.\r\n if ((nw ? 1 : 0) + (ne ? 1 : 0) + (sw ? 1 : 0) + (se ? 1 : 0) > 1) {\r\n if (nw) {\r\n maxLevel = Math.max(maxLevel, this.findMaxLevelFromNode(node, node.nwNode, position));\r\n }\r\n if (ne) {\r\n maxLevel = Math.max(maxLevel, this.findMaxLevelFromNode(node, node.neNode, position));\r\n }\r\n if (sw) {\r\n maxLevel = Math.max(maxLevel, this.findMaxLevelFromNode(node, node.swNode, position));\r\n }\r\n if (se) {\r\n maxLevel = Math.max(maxLevel, this.findMaxLevelFromNode(node, node.seNode, position));\r\n }\r\n break;\r\n } else if (nw) {\r\n node = node.nwNode;\r\n } else if (ne) {\r\n node = node.neNode;\r\n } else if (sw) {\r\n node = node.swNode;\r\n } else if (se) {\r\n node = node.seNode;\r\n } else {\r\n found = true;\r\n }\r\n }\r\n\r\n // Work up the tree until we find a rectangle that contains this point.\r\n while (node !== stopNode) {\r\n const rectangles = node!.rectangles;\r\n\r\n // Rectangles are sorted by level, lowest first.\r\n for (let i = rectangles.length - 1; i >= 0 && rectangles.get(i)!.level > maxLevel; --i) {\r\n const rectangle = rectangles.get(i)!;\r\n if (rectangle.containsCartographic(position))\r\n maxLevel = rectangle.level;\r\n }\r\n node = node!.parent!;\r\n }\r\n return maxLevel;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapTileAvailability.js","sourceRoot":"","sources":["../../../../src/tile/map/MapTileAvailability.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 { Cartographic } from \"@itwin/core-common\";\r\nimport { MapCartoRectangle, MapTilingScheme } from \"../internal\";\r\nimport { SortedArray } from \"@itwin/core-bentley\";\r\n\r\n// portions adapted from Cesium.js Copyright 2011 - 2017 Cesium Contributors\r\n/** @internal */\r\nclass RectangleWithLevel extends MapCartoRectangle {\r\n constructor(public level: number, west: number, south: number, east: number, north: number) {\r\n super(west, south, east, north);\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass QuadTreeNode {\r\n public swNode?: QuadTreeNode;\r\n public seNode?: QuadTreeNode;\r\n public nwNode?: QuadTreeNode;\r\n public neNode?: QuadTreeNode;\r\n public extent: MapCartoRectangle;\r\n public rectangles = new SortedArray<RectangleWithLevel>((lhs: RectangleWithLevel, rhs: RectangleWithLevel) => lhs.level - rhs.level, true);\r\n constructor(public tilingScheme: MapTilingScheme, public parent: QuadTreeNode | undefined, public level: number, public x: number, public y: number) {\r\n this.extent = tilingScheme.tileXYToRectangle(x, y, level + 1);\r\n }\r\n public get nw(): QuadTreeNode {\r\n if (!this.nwNode)\r\n this.nwNode = new QuadTreeNode(this.tilingScheme, this, this.level + 1, this.x * 2, this.y * 2);\r\n\r\n return this.nwNode;\r\n }\r\n public get ne(): QuadTreeNode {\r\n if (!this.neNode)\r\n this.neNode = new QuadTreeNode(this.tilingScheme, this, this.level + 1, this.x * 2 + 1, this.y * 2);\r\n\r\n return this.neNode;\r\n }\r\n public get sw(): QuadTreeNode {\r\n if (!this.swNode)\r\n this.swNode = new QuadTreeNode(this.tilingScheme, this, this.level + 1, this.x * 2, this.y * 2 + 1);\r\n\r\n return this.swNode;\r\n }\r\n public get se(): QuadTreeNode {\r\n if (!this.seNode)\r\n this.seNode = new QuadTreeNode(this.tilingScheme, this, this.level + 1, this.x * 2 + 1, this.y * 2 + 1);\r\n\r\n return this.seNode;\r\n }\r\n}\r\n\r\n/** @internal */\r\nfunction putRectangleInQuadtree(maxDepth: number, node: QuadTreeNode, rectangle: RectangleWithLevel) {\r\n while (node.level < maxDepth) {\r\n if (node.nw.extent.containsRange(rectangle)) {\r\n node = node.nw;\r\n } else if (node.ne.extent.containsRange(rectangle)) {\r\n node = node.ne;\r\n } else if (node.sw.extent.containsRange(rectangle)) {\r\n node = node.sw;\r\n } else if (node.se.extent.containsRange(rectangle)) {\r\n node = node.se;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n node.rectangles.insert(rectangle);\r\n}\r\n\r\n/** @internal */\r\nexport class TileAvailability {\r\n private _rootNodes = new Array<QuadTreeNode>();\r\n constructor(private _tilingScheme: MapTilingScheme, private _maximumLevel: number) { }\r\n\r\n public static rectangleScratch = MapCartoRectangle.createMaximum();\r\n\r\n public findNode(level: number, x: number, y: number, nodes: QuadTreeNode[]) {\r\n for (const node of nodes) {\r\n if (node.x === x && node.y === y && node.level === level) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Marks a rectangular range of tiles in a particular level as being available. For best performance,\r\n * add your ranges in order of increasing level.\r\n *\r\n * @param {Number} level The level.\r\n * @param {Number} startX The X coordinate of the first available tiles at the level.\r\n * @param {Number} startY The Y coordinate of the first available tiles at the level.\r\n * @param {Number} endX The X coordinate of the last available tiles at the level.\r\n * @param {Number} endY The Y coordinate of the last available tiles at the level.\r\n */\r\n public addAvailableTileRange(level: number, startX: number, startY: number, endX: number, endY: number) {\r\n const tilingScheme = this._tilingScheme;\r\n const rootNodes = this._rootNodes;\r\n if (level === 0) {\r\n for (let y = startY; y <= endY; ++y) {\r\n for (let x = startX; x <= endX; ++x) {\r\n if (!this.findNode(level, x, y, rootNodes)) {\r\n rootNodes.push(new QuadTreeNode(tilingScheme, undefined, 0, x, y));\r\n }\r\n }\r\n }\r\n }\r\n\r\n tilingScheme.tileXYToRectangle(startX, startY, level + 1, TileAvailability.rectangleScratch);\r\n const west = TileAvailability.rectangleScratch.west;\r\n const south = TileAvailability.rectangleScratch.south;\r\n\r\n tilingScheme.tileXYToRectangle(endX, endY, level + 1, TileAvailability.rectangleScratch);\r\n const east = TileAvailability.rectangleScratch.east;\r\n const north = TileAvailability.rectangleScratch.north;\r\n\r\n const rectangleWithLevel = new RectangleWithLevel(level, west, south, east, north);\r\n\r\n for (const rootNode of rootNodes) {\r\n if (rootNode.extent.intersectsRange(rectangleWithLevel)) {\r\n putRectangleInQuadtree(this._maximumLevel, rootNode, rectangleWithLevel);\r\n }\r\n }\r\n }\r\n\r\n public computeMaximumLevelAtPosition(position: Cartographic): number {\r\n // Find the root node that contains this position.\r\n let node;\r\n for (const rootNode of this._rootNodes) {\r\n if (rootNode.extent.containsCartographic(position)) {\r\n node = rootNode;\r\n break;\r\n }\r\n }\r\n\r\n if (undefined === node) {\r\n return -1;\r\n }\r\n\r\n return this.findMaxLevelFromNode(undefined, node, position);\r\n }\r\n\r\n private _cartographicScratch = Cartographic.createZero();\r\n\r\n /**\r\n * Determines if a particular tile is available.\r\n * @param {Number} level The tile level to check.\r\n * @param {Number} x The X coordinate of the tile to check.\r\n * @param {Number} y The Y coordinate of the tile to check.\r\n * @return {Boolean} True if the tile is available; otherwise, false.\r\n */\r\n public isTileAvailable(level: number, x: number, y: number): boolean {\r\n // Get the center of the tile and find the maximum level at that position.\r\n // Because availability is by tile, if the level is available at that point, it\r\n // is sure to be available for the whole tile. We assume that if a tile at level n exists,\r\n // then all its parent tiles back to level 0 exist too. This isn't really enforced\r\n // anywhere, but Cesium would never load a tile for which this is not true.\r\n const rectangle = this._tilingScheme.tileXYToRectangle(x, y, level + 1, TileAvailability.rectangleScratch);\r\n rectangle.getCenter(this._cartographicScratch);\r\n return this.computeMaximumLevelAtPosition(this._cartographicScratch) >= level;\r\n }\r\n\r\n private findMaxLevelFromNode(stopNode: QuadTreeNode | undefined, node: QuadTreeNode | undefined, position: Cartographic) {\r\n let maxLevel = 0;\r\n\r\n // Find the deepest quadtree node containing this point.\r\n let found = false;\r\n while (!found && node !== undefined) {\r\n const nw = node.nwNode && node.nwNode.extent.containsCartographic(position);\r\n const ne = node.neNode && node.neNode.extent.containsCartographic(position);\r\n const sw = node.swNode && node.swNode.extent.containsCartographic(position);\r\n const se = node.seNode && node.seNode.extent.containsCartographic(position);\r\n\r\n // The common scenario is that the point is in only one quadrant and we can simply\r\n // iterate down the tree. But if the point is on a boundary between tiles, it is\r\n // in multiple tiles and we need to check all of them, so use recursion.\r\n if ((nw ? 1 : 0) + (ne ? 1 : 0) + (sw ? 1 : 0) + (se ? 1 : 0) > 1) {\r\n if (nw) {\r\n maxLevel = Math.max(maxLevel, this.findMaxLevelFromNode(node, node.nwNode, position));\r\n }\r\n if (ne) {\r\n maxLevel = Math.max(maxLevel, this.findMaxLevelFromNode(node, node.neNode, position));\r\n }\r\n if (sw) {\r\n maxLevel = Math.max(maxLevel, this.findMaxLevelFromNode(node, node.swNode, position));\r\n }\r\n if (se) {\r\n maxLevel = Math.max(maxLevel, this.findMaxLevelFromNode(node, node.seNode, position));\r\n }\r\n break;\r\n } else if (nw) {\r\n node = node.nwNode;\r\n } else if (ne) {\r\n node = node.neNode;\r\n } else if (sw) {\r\n node = node.swNode;\r\n } else if (se) {\r\n node = node.seNode;\r\n } else {\r\n found = true;\r\n }\r\n }\r\n\r\n // Work up the tree until we find a rectangle that contains this point.\r\n while (node !== stopNode) {\r\n const rectangles = node!.rectangles;\r\n\r\n // Rectangles are sorted by level, lowest first.\r\n for (let i = rectangles.length - 1; i >= 0 && rectangles.get(i)!.level > maxLevel; --i) {\r\n const rectangle = rectangles.get(i)!;\r\n if (rectangle.containsCartographic(position))\r\n maxLevel = rectangle.level;\r\n }\r\n node = node!.parent!;\r\n }\r\n return maxLevel;\r\n }\r\n}\r\n"]}
|
|
@@ -184,6 +184,14 @@ export class MapTileTree extends RealityTileTree {
|
|
|
184
184
|
clearLayers() {
|
|
185
185
|
this._rootTile.clearLayers();
|
|
186
186
|
}
|
|
187
|
+
/** Reprojection does not work with very large tiles so just do linear transform.
|
|
188
|
+
* @internal
|
|
189
|
+
*/
|
|
190
|
+
static { this.minReprojectionDepth = 8; }
|
|
191
|
+
/** @internal */
|
|
192
|
+
static { this.maxGlobeDisplayDepth = 8; }
|
|
193
|
+
/** @internal */
|
|
194
|
+
static { this.minDisplayableDepth = 3; }
|
|
187
195
|
/** @internal */
|
|
188
196
|
get mapLoader() { return this.loader; }
|
|
189
197
|
/** @internal */
|
|
@@ -298,6 +306,7 @@ export class MapTileTree extends RealityTileTree {
|
|
|
298
306
|
}
|
|
299
307
|
await this._gcsConverter.getIModelCoordinatesFromGeoCoordinates(requestProps);
|
|
300
308
|
}
|
|
309
|
+
static { this._scratchCarto = Cartographic.createZero(); }
|
|
301
310
|
/** Get the corners for planar children.
|
|
302
311
|
* This generally will resolve immediately, but may require an asynchronous request for reprojecting the corners.
|
|
303
312
|
* @internal
|
|
@@ -437,15 +446,6 @@ export class MapTileTree extends RealityTileTree {
|
|
|
437
446
|
return undefined === layerSettings || !layerSettings.transparency ? 0.0 : layerSettings.transparency;
|
|
438
447
|
}
|
|
439
448
|
}
|
|
440
|
-
/** Reprojection does not work with very large tiles so just do linear transform.
|
|
441
|
-
* @internal
|
|
442
|
-
*/
|
|
443
|
-
MapTileTree.minReprojectionDepth = 8;
|
|
444
|
-
/** @internal */
|
|
445
|
-
MapTileTree.maxGlobeDisplayDepth = 8;
|
|
446
|
-
/** @internal */
|
|
447
|
-
MapTileTree.minDisplayableDepth = 3;
|
|
448
|
-
MapTileTree._scratchCarto = Cartographic.createZero();
|
|
449
449
|
/** @internal */
|
|
450
450
|
class MapTileTreeProps {
|
|
451
451
|
get priority() { return this.loader.priority; }
|