@itwin/core-frontend 5.0.0-dev.99 → 5.1.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +20 -41
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.d.ts +1 -0
- package/lib/cjs/AccuSnap.d.ts.map +1 -1
- package/lib/cjs/AccuSnap.js +69 -1
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CatalogConnection.d.ts +71 -0
- package/lib/cjs/CatalogConnection.d.ts.map +1 -0
- package/lib/cjs/CatalogConnection.js +95 -0
- package/lib/cjs/CatalogConnection.js.map +1 -0
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +5 -2
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts +29 -2
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +14 -0
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/ModelState.d.ts.map +1 -1
- package/lib/cjs/ModelState.js +7 -5
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +2 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +1 -0
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +1 -0
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +1 -0
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +1 -0
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +3 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts +2 -0
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js +7 -0
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.d.ts +0 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.js +11 -20
- package/lib/cjs/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts +9 -0
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +86 -11
- package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts +4 -3
- package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderBuilder.js +3 -3
- package/lib/cjs/internal/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js +2 -2
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.js +20 -8
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.js +2 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.js +31 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Fragment.js +7 -2
- package/lib/cjs/internal/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Surface.js +1 -1
- package/lib/cjs/internal/tile/GraphicsCollector.d.ts +1 -0
- package/lib/cjs/internal/tile/GraphicsCollector.d.ts.map +1 -1
- package/lib/cjs/internal/tile/GraphicsCollector.js +1 -0
- package/lib/cjs/internal/tile/GraphicsCollector.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTile.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTile.js +5 -0
- package/lib/cjs/internal/tile/IModelTile.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.d.ts +4 -1
- package/lib/cjs/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.js +5 -0
- package/lib/cjs/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/ImdlDecoder.d.ts +2 -0
- package/lib/cjs/internal/tile/ImdlDecoder.d.ts.map +1 -1
- package/lib/cjs/internal/tile/ImdlDecoder.js.map +1 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.d.ts +2 -2
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.js +2 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeHandler.d.ts +3 -3
- package/lib/cjs/internal/tile/LayerTileTreeHandler.d.ts.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeHandler.js +3 -2
- package/lib/cjs/internal/tile/LayerTileTreeHandler.js.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeReferenceHandler.d.ts +7 -5
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeReferenceHandler.js +29 -4
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -0
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts +9 -4
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.js +30 -8
- package/lib/cjs/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts +0 -2
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.js +2 -21
- package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/render/Pixel.d.ts +13 -2
- package/lib/cjs/render/Pixel.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.js +20 -8
- package/lib/cjs/render/Pixel.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.d.ts +3 -2
- package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +1 -0
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/internal.d.ts +3 -2
- package/lib/cjs/tile/internal.d.ts.map +1 -1
- package/lib/cjs/tile/internal.js +3 -2
- package/lib/cjs/tile/internal.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -3
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +2 -4
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.d.ts +0 -12
- package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.js +2 -60
- package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts +0 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.js +15 -19
- package/lib/cjs/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/cjs/tools/ViewTool.d.ts +25 -16
- package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ViewTool.js +29 -40
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuDraw.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +21 -42
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.d.ts +1 -0
- package/lib/esm/AccuSnap.d.ts.map +1 -1
- package/lib/esm/AccuSnap.js +69 -1
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts +1 -1
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CatalogConnection.d.ts +71 -0
- package/lib/esm/CatalogConnection.d.ts.map +1 -0
- package/lib/esm/CatalogConnection.js +92 -0
- package/lib/esm/CatalogConnection.js.map +1 -0
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +5 -2
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/HitDetail.d.ts +29 -2
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +14 -0
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IpcApp.d.ts +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/ModelState.d.ts.map +1 -1
- package/lib/esm/ModelState.js +7 -5
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +2 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +1 -0
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +1 -0
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +1 -0
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +1 -0
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts +2 -0
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js +8 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.d.ts +0 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.js +11 -20
- package/lib/esm/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts +9 -0
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +86 -11
- package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts +4 -3
- package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderBuilder.js +3 -3
- package/lib/esm/internal/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.js +2 -2
- package/lib/esm/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SurfaceGeometry.js +20 -8
- package/lib/esm/internal/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.js +2 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.js +31 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Fragment.js +7 -2
- package/lib/esm/internal/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +1 -1
- package/lib/esm/internal/render/webgl/glsl/Surface.js +1 -1
- package/lib/esm/internal/tile/GraphicsCollector.d.ts +1 -0
- package/lib/esm/internal/tile/GraphicsCollector.d.ts.map +1 -1
- package/lib/esm/internal/tile/GraphicsCollector.js +1 -0
- package/lib/esm/internal/tile/GraphicsCollector.js.map +1 -1
- package/lib/esm/internal/tile/IModelTile.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTile.js +6 -1
- package/lib/esm/internal/tile/IModelTile.js.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.d.ts +4 -1
- package/lib/esm/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.js +6 -1
- package/lib/esm/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/ImdlDecoder.d.ts +2 -0
- package/lib/esm/internal/tile/ImdlDecoder.d.ts.map +1 -1
- package/lib/esm/internal/tile/ImdlDecoder.js.map +1 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.d.ts +2 -2
- package/lib/esm/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.js +2 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/esm/{tile → internal/tile}/LayerTileTreeHandler.d.ts +3 -3
- package/lib/esm/internal/tile/LayerTileTreeHandler.d.ts.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeHandler.js +3 -2
- package/lib/esm/internal/tile/LayerTileTreeHandler.js.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeReferenceHandler.d.ts +7 -5
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeReferenceHandler.js +29 -4
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -0
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts +9 -4
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.js +32 -10
- package/lib/esm/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts +0 -2
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.js +2 -21
- package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/render/Pixel.d.ts +13 -2
- package/lib/esm/render/Pixel.d.ts.map +1 -1
- package/lib/esm/render/Pixel.js +20 -8
- package/lib/esm/render/Pixel.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts +3 -2
- package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
- package/lib/esm/tile/ImdlReader.js +1 -0
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/internal.d.ts +3 -2
- package/lib/esm/tile/internal.d.ts.map +1 -1
- package/lib/esm/tile/internal.js +3 -2
- package/lib/esm/tile/internal.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.d.ts +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +3 -4
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +2 -4
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tools/AccuDrawTool.d.ts +0 -12
- package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawTool.js +3 -60
- package/lib/esm/tools/AccuDrawTool.js.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts +0 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.js +16 -20
- package/lib/esm/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/esm/tools/ViewTool.d.ts +25 -16
- package/lib/esm/tools/ViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ViewTool.js +29 -40
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/lib/public/locales/en/CoreTools.json +0 -5
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/public/sprites/SnapPerpendicularPoint.png +0 -0
- package/lib/public/sprites/SnapTangentPoint.png +0 -0
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +16 -16
- package/lib/cjs/tile/LayerTileTreeHandler.d.ts.map +0 -1
- package/lib/cjs/tile/LayerTileTreeHandler.js.map +0 -1
- package/lib/cjs/tile/LayerTileTreeReferenceHandler.d.ts.map +0 -1
- package/lib/cjs/tile/LayerTileTreeReferenceHandler.js.map +0 -1
- package/lib/esm/tile/LayerTileTreeHandler.d.ts.map +0 -1
- package/lib/esm/tile/LayerTileTreeHandler.js.map +0 -1
- package/lib/esm/tile/LayerTileTreeReferenceHandler.d.ts.map +0 -1
- package/lib/esm/tile/LayerTileTreeReferenceHandler.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealityModelTileTree.js","sourceRoot":"","sources":["../../../../src/internal/tile/RealityModelTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\nimport {\r\n assert, compareBooleans, compareBooleansOrUndefined, compareNumbers, comparePossiblyUndefined, compareStrings,\r\n compareStringsOrUndefined, CompressedId64Set, Id64, Id64String,\r\n} from \"@itwin/core-bentley\";\r\nimport {\r\n BaseLayerSettings,\r\n Cartographic, DefaultSupportedTypes, GeoCoordStatus, MapImagerySettings, MapLayerSettings, ModelMapLayerDrapeTarget, ModelMapLayerSettings, PlanarClipMaskPriority, PlanarClipMaskSettings,\r\n RealityDataProvider, RealityDataSourceKey, RealityModelDisplaySettings, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport { Angle, Constant, Ellipsoid, Matrix3d, Point3d, Range3d, Ray3d, Transform, TransformProps, Vector3d, XYZ } from \"@itwin/core-geometry\";\r\nimport { calculateEcefToDbTransformAtLocation } from \"../../BackgroundMapGeometry\";\r\nimport { DisplayStyleState } from \"../../DisplayStyleState\";\r\nimport { HitDetail } from \"../../HitDetail\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { RealityDataSource } from \"../../RealityDataSource\";\r\nimport { RenderMemory } from \"../../render/RenderMemory\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewState } from \"../../ViewState\";\r\nimport {\r\n BatchedTileIdMap, CesiumIonAssetProvider, createClassifierTileTreeReference, createDefaultViewFlagOverrides, DisclosedTileTreeSet, GeometryTileTreeReference,\r\n getGcsConverterAvailable, LayerTileTreeHandler, LayerTileTreeReferenceHandler, MapLayerTileTreeReference, MapLayerTreeSetting, RealityTile, RealityTileLoader, RealityTileParams, RealityTileTree, RealityTileTreeParams, SpatialClassifierTileTreeReference, Tile,\r\n TileDrawArgs, TileLoadPriority, TileRequest, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier,\r\n} from \"../../tile/internal\";\r\nimport { SpatialClassifiersState } from \"../../SpatialClassifiersState\";\r\nimport { RealityDataSourceTilesetUrlImpl } from \"../../RealityDataSourceTilesetUrlImpl\";\r\nimport { compareMapLayer } from \"../render/webgl/MapLayerParams\";\r\n\r\nfunction getUrl(content: any) {\r\n return content ? (content.url ? content.url : content.uri) : undefined;\r\n}\r\n\r\ninterface RealityTreeId {\r\n rdSourceKey: RealityDataSourceKey;\r\n transform?: Transform;\r\n modelId: Id64String;\r\n maskModelIds?: string;\r\n deduplicateVertices: boolean;\r\n produceGeometry?: boolean;\r\n displaySettings: RealityModelDisplaySettings;\r\n backgroundBase?: BaseLayerSettings;\r\n backgroundLayers?: MapLayerSettings[];\r\n}\r\n\r\nnamespace RealityTreeId {\r\n function compareOrigins(lhs: XYZ, rhs: XYZ): number {\r\n return compareNumbers(lhs.x, rhs.x) || compareNumbers(lhs.y, rhs.y) || compareNumbers(lhs.z, rhs.z);\r\n }\r\n\r\n function compareMatrices(lhs: Matrix3d, rhs: Matrix3d): number {\r\n for (let i = 0; i < 9; i++) {\r\n const cmp = compareNumbers(lhs.coffs[i], rhs.coffs[i]);\r\n if (0 !== cmp)\r\n return cmp;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n function compareTransforms(lhs: Transform, rhs: Transform) {\r\n return compareOrigins(lhs.origin, rhs.origin) || compareMatrices(lhs.matrix, rhs.matrix);\r\n }\r\n\r\n function compareRealityDataSourceKeys(lhs: RealityDataSourceKey, rhs: RealityDataSourceKey): number {\r\n return compareStringsOrUndefined(lhs.id, rhs.id) || compareStringsOrUndefined(lhs.format, rhs.format) || compareStringsOrUndefined(lhs.iTwinId, rhs.iTwinId);\r\n }\r\n\r\n export function compareWithoutModelId(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n return (\r\n compareRealityDataSourceKeys(lhs.rdSourceKey, rhs.rdSourceKey) ||\r\n compareBooleans(lhs.deduplicateVertices, rhs.deduplicateVertices) ||\r\n compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry) ||\r\n compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds) ||\r\n comparePossiblyUndefined((ltf, rtf) => compareTransforms(ltf, rtf), lhs.transform, rhs.transform)\r\n );\r\n }\r\n\r\n export function compare(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n return compareStrings(lhs.modelId, rhs.modelId) || compareWithoutModelId(lhs, rhs);\r\n }\r\n}\r\n\r\nclass RealityTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public getOwner(treeId: RealityTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(treeId, this);\r\n }\r\n\r\n public async createTileTree(treeId: RealityTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n if (treeId.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(treeId.maskModelIds));\r\n\r\n const opts = { deduplicateVertices: treeId.deduplicateVertices, produceGeometry: treeId.produceGeometry };\r\n return RealityModelTileTree.createRealityModelTileTree(treeId.rdSourceKey, iModel, treeId.modelId, treeId.transform, opts);\r\n }\r\n\r\n public compareTileTreeIds(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n return RealityTreeId.compare(lhs, rhs);\r\n }\r\n\r\n public findCompatibleContextRealityModelId(id: RealityTreeId, style: DisplayStyleState): Id64String | undefined {\r\n const owners = style.iModel.tiles.getTreeOwnersForSupplier(this);\r\n for (const owner of owners) {\r\n // Find an existing tree with the same Id, ignoring its model Id.\r\n if (0 === RealityTreeId.compareWithoutModelId(id, owner.id)) {\r\n const modelId = owner.id.modelId;\r\n assert(undefined !== modelId);\r\n\r\n // If the model Id is unused by any other context reality model in the view and does not identify a persistent reality model, use it.\r\n if (Id64.isTransientId64(modelId) && !style.contextRealityModelStates.some((model) => model.modelId === modelId))\r\n return modelId;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\nconst realityTreeSupplier = new RealityTreeSupplier();\r\n\r\nexport function createRealityTileTreeReference(props: RealityModelTileTree.ReferenceProps): RealityModelTileTree.Reference {\r\n return new RealityTreeReference(props);\r\n}\r\n\r\nconst zeroPoint = Point3d.createZero();\r\nconst earthEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\nconst scratchRay = Ray3d.createXAxis();\r\n\r\nexport class RealityTileRegion {\r\n constructor(values: { minLongitude: number, minLatitude: number, minHeight: number, maxLongitude: number, maxLatitude: number, maxHeight: number }) {\r\n this.minLongitude = values.minLongitude;\r\n this.minLatitude = values.minLatitude;\r\n this.minHeight = values.minHeight;\r\n this.maxLongitude = values.maxLongitude;\r\n this.maxLatitude = values.maxLatitude;\r\n this.maxHeight = values.maxHeight;\r\n }\r\n public minLongitude: number;\r\n public minLatitude: number;\r\n public minHeight: number;\r\n public maxLongitude: number;\r\n public maxLatitude: number;\r\n public maxHeight: number;\r\n\r\n public static create(region: number[]): RealityTileRegion {\r\n const minHeight = region[4];\r\n const maxHeight = region[5];\r\n const minLongitude = region[0];\r\n const maxLongitude = region[2];\r\n const minLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[1]);\r\n const maxLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[3]);\r\n return new RealityTileRegion({ minLongitude, minLatitude, minHeight, maxLongitude, maxLatitude, maxHeight });\r\n }\r\n\r\n public static isGlobal(boundingVolume: any) {\r\n return Array.isArray(boundingVolume?.region) && (boundingVolume.region[2] - boundingVolume.region[0]) > Angle.piRadians && (boundingVolume.region[3] - boundingVolume.region[1]) > Angle.piOver2Radians;\r\n }\r\n public getRange(): { range: Range3d, corners?: Point3d[] } {\r\n const maxAngle = Math.max(Math.abs(this.maxLatitude - this.minLatitude), Math.abs(this.maxLongitude - this.minLongitude));\r\n let corners;\r\n let range: Range3d;\r\n if (maxAngle < Math.PI / 8) {\r\n corners = new Array<Point3d>(8);\r\n const chordTolerance = (1 - Math.cos(maxAngle / 2)) * Constant.earthRadiusWGS84.polar;\r\n const addEllipsoidCorner = ((long: number, lat: number, index: number) => {\r\n const ray = earthEllipsoid.radiansToUnitNormalRay(long, lat, scratchRay)!;\r\n corners[index] = ray.fractionToPoint(this.minHeight - chordTolerance);\r\n corners[index + 4] = ray.fractionToPoint(this.maxHeight + chordTolerance);\r\n });\r\n addEllipsoidCorner(this.minLongitude, this.minLatitude, 0);\r\n addEllipsoidCorner(this.minLongitude, this.maxLatitude, 1);\r\n addEllipsoidCorner(this.maxLongitude, this.minLatitude, 2);\r\n addEllipsoidCorner(this.maxLongitude, this.maxLatitude, 3);\r\n range = Range3d.createArray(corners);\r\n } else {\r\n const minEq = Constant.earthRadiusWGS84.equator + this.minHeight, maxEq = Constant.earthRadiusWGS84.equator + this.maxHeight;\r\n const minEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, minEq, minEq, Constant.earthRadiusWGS84.polar + this.minHeight);\r\n const maxEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, maxEq, maxEq, Constant.earthRadiusWGS84.polar + this.maxHeight);\r\n range = minEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude);\r\n range.extendRange(maxEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude));\r\n }\r\n return { range, corners };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityModelTileUtils {\r\n public static rangeFromBoundingVolume(boundingVolume: any): { range: Range3d, corners?: Point3d[], region?: RealityTileRegion } | undefined {\r\n if (undefined === boundingVolume)\r\n return undefined;\r\n\r\n let corners: Point3d[] | undefined;\r\n let range: Range3d | undefined;\r\n if (undefined !== boundingVolume.box) {\r\n const box: number[] = boundingVolume.box;\r\n const center = Point3d.create(box[0], box[1], box[2]);\r\n const ux = Vector3d.create(box[3], box[4], box[5]);\r\n const uy = Vector3d.create(box[6], box[7], box[8]);\r\n const uz = Vector3d.create(box[9], box[10], box[11]);\r\n corners = new Array<Point3d>();\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < 2; k++) {\r\n for (let l = 0; l < 2; l++) {\r\n corners.push(center.plus3Scaled(ux, (j ? -1.0 : 1.0), uy, (k ? -1.0 : 1.0), uz, (l ? -1.0 : 1.0)));\r\n }\r\n }\r\n }\r\n range = Range3d.createArray(corners);\r\n } else if (Array.isArray(boundingVolume.sphere)) {\r\n const sphere: number[] = boundingVolume.sphere;\r\n const center = Point3d.create(sphere[0], sphere[1], sphere[2]);\r\n const radius = sphere[3];\r\n range = Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n } else if (Array.isArray(boundingVolume.region)) {\r\n const region = RealityTileRegion.create(boundingVolume.region);\r\n const regionRange = region.getRange();\r\n return { range: regionRange.range, corners: regionRange.corners, region };\r\n }\r\n return range ? { range, corners } : undefined;\r\n\r\n }\r\n public static maximumSizeFromGeometricTolerance(range: Range3d, geometricError: number): number {\r\n const minToleranceRatio = true === IModelApp.renderSystem.isMobile ? IModelApp.tileAdmin.mobileRealityTileMinToleranceRatio : 1.0; // Nominally the error on screen size of a tile. Increasing generally increases performance (fewer draw calls) at expense of higher load times.\r\n\r\n // NB: We increase the above minToleranceRatio on mobile devices in order to help avoid pruning too often based on the memory threshold for\r\n // pruning currently used by reality tile trees on mobile.\r\n\r\n return minToleranceRatio * range.diagonal().magnitude() / geometricError;\r\n }\r\n public static transformFromJson(jTrans: number[] | undefined): Transform {\r\n return (jTrans === undefined) ? Transform.createIdentity() : Transform.createOriginAndMatrix(Point3d.create(jTrans[12], jTrans[13], jTrans[14]), Matrix3d.createRowValues(jTrans[0], jTrans[4], jTrans[8], jTrans[1], jTrans[5], jTrans[9], jTrans[2], jTrans[6], jTrans[10]));\r\n }\r\n}\r\n\r\nenum SMTextureType {\r\n None = 0, // no textures\r\n Embedded = 1, // textures are available and stored in the nodes\r\n Streaming = 2, // textures need to be downloaded, Bing Maps, etc…\r\n}\r\n\r\nclass RealityModelTileTreeProps {\r\n public location: Transform;\r\n public tilesetJson: any;\r\n public doDrapeBackgroundMap: boolean = false;\r\n public rdSource: RealityDataSource;\r\n public yAxisUp = false;\r\n public root: any;\r\n\r\n constructor(json: any, root: any, rdSource: RealityDataSource, tilesetToDbTransform: Transform, public readonly tilesetToEcef?: Transform) {\r\n this.tilesetJson = root;\r\n this.rdSource = rdSource;\r\n this.location = tilesetToDbTransform;\r\n this.doDrapeBackgroundMap = (json.root && json.root.SMMasterHeader && SMTextureType.Streaming === json.root.SMMasterHeader.IsTextured);\r\n if (json.asset.gltfUpAxis === undefined || json.asset.gltfUpAxis === \"y\" || json.asset.gltfUpAxis === \"Y\")\r\n this.yAxisUp = true;\r\n }\r\n}\r\n\r\nclass RealityModelTileTreeParams implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public iModel: IModelConnection;\r\n public is3d = true;\r\n public loader: RealityModelTileLoader;\r\n public rootTile: RealityTileParams;\r\n public baseUrl?: string;\r\n\r\n public get location() { return this.loader.tree.location; }\r\n public get yAxisUp() { return this.loader.tree.yAxisUp; }\r\n public get priority() { return this.loader.priority; }\r\n\r\n public constructor(tileTreeId: string, iModel: IModelConnection, modelId: Id64String, loader: RealityModelTileLoader, public readonly gcsConverterAvailable: boolean, public readonly rootToEcef: Transform | undefined, baseUrl?: string) {\r\n this.loader = loader;\r\n this.id = tileTreeId;\r\n this.modelId = modelId;\r\n this.iModel = iModel;\r\n const refine = loader.tree.tilesetJson.refine;\r\n this.rootTile = new RealityModelTileProps({\r\n json: loader.tree.tilesetJson,\r\n id: \"\",\r\n // If not specified explicitly, additiveRefinement is inherited from parent tile.\r\n additiveRefinement: undefined !== refine ? \"ADD\" === refine : undefined,\r\n usesGeometricError: loader.tree.rdSource.usesGeometricError,\r\n });\r\n this.baseUrl = baseUrl;\r\n }\r\n}\r\n\r\nclass RealityModelTileProps implements RealityTileParams {\r\n public readonly contentId: string;\r\n public readonly range: Range3d;\r\n public readonly contentRange?: Range3d;\r\n public readonly maximumSize: number;\r\n public readonly isLeaf: boolean;\r\n public readonly transformToRoot?: Transform;\r\n public readonly additiveRefinement?: boolean;\r\n public readonly parent?: RealityTile;\r\n public readonly noContentButTerminateOnSelection?: boolean;\r\n public readonly rangeCorners?: Point3d[];\r\n public readonly region?: RealityTileRegion;\r\n public readonly geometricError?: number;\r\n\r\n constructor(args: {\r\n json: any;\r\n parent?: RealityTile;\r\n id: string;\r\n transformToRoot?: Transform;\r\n additiveRefinement?: boolean;\r\n usesGeometricError?: boolean;\r\n }) {\r\n this.contentId = args.id;\r\n this.parent = args.parent;\r\n this.transformToRoot = args.transformToRoot;\r\n this.additiveRefinement = args.additiveRefinement;\r\n\r\n const json = args.json;\r\n const boundingVolume = RealityModelTileUtils.rangeFromBoundingVolume(json.boundingVolume);\r\n if (boundingVolume) {\r\n this.range = boundingVolume.range;\r\n this.rangeCorners = boundingVolume.corners;\r\n this.region = boundingVolume?.region;\r\n } else {\r\n this.range = Range3d.createNull();\r\n assert(false, \"Unbounded tile\");\r\n }\r\n\r\n this.isLeaf = !Array.isArray(json.children) || 0 === json.children.length;\r\n const hasContents = undefined !== getUrl(json.content);\r\n if (hasContents)\r\n this.contentRange = RealityModelTileUtils.rangeFromBoundingVolume(json.content.boundingVolume)?.range;\r\n else {\r\n // A node without content should probably be selectable even if not additive refinement - But restrict it to that case here\r\n // to avoid potential problems with existing reality models, but still avoid overselection in the OSM world building set.\r\n if (this.additiveRefinement || args.parent?.additiveRefinement)\r\n this.noContentButTerminateOnSelection = true;\r\n }\r\n\r\n this.maximumSize = (this.noContentButTerminateOnSelection || hasContents) ? RealityModelTileUtils.maximumSizeFromGeometricTolerance(Range3d.fromJSON(this.range), json.geometricError) : 0;\r\n if (args.usesGeometricError)\r\n this.geometricError = json.geometricError;\r\n }\r\n}\r\n\r\nclass FindChildResult {\r\n constructor(public id: string, public json: any, public transformToRoot?: Transform) { }\r\n}\r\n\r\nfunction assembleUrl(prefix: string, url: string): string {\r\n if (url.startsWith(\"/\")) {\r\n // Relative to base origin, not to parent tile\r\n return url.substring(1);\r\n }\r\n\r\n if (url.startsWith(\"./\")) {\r\n // Relative to parent tile\r\n url = url.substring(2);\r\n } else {\r\n const prefixParts = prefix.split(\"/\");\r\n prefixParts.pop();\r\n while (url.startsWith(\"../\")) {\r\n prefixParts.pop();\r\n url = url.substring(3);\r\n }\r\n\r\n prefixParts.push(\"\");\r\n prefix = prefixParts.join(\"/\");\r\n }\r\n\r\n return prefix + url;\r\n}\r\n\r\nfunction addUrlPrefix(subTree: any, prefix: string) {\r\n if (undefined === subTree)\r\n return;\r\n\r\n if (undefined !== subTree.content) {\r\n if (undefined !== subTree.content.url)\r\n subTree.content.url = assembleUrl(prefix, subTree.content.url);\r\n else if (undefined !== subTree.content.uri)\r\n subTree.content.uri = assembleUrl(prefix, subTree.content.uri);\r\n }\r\n\r\n if (undefined !== subTree.children)\r\n for (const child of subTree.children)\r\n addUrlPrefix(child, prefix);\r\n}\r\n\r\nasync function expandSubTree(root: any, rdsource: RealityDataSource): Promise<any> {\r\n const childUrl = getUrl(root.content);\r\n if (undefined === childUrl || \"tileset\" !== rdsource.getTileContentType(childUrl))\r\n return root;\r\n\r\n const subTree = await rdsource.getTileJson(childUrl);\r\n const prefixIndex = childUrl.lastIndexOf(\"/\");\r\n if (prefixIndex > 0)\r\n addUrlPrefix(subTree.root, childUrl.substring(0, prefixIndex + 1));\r\n\r\n return subTree.root;\r\n}\r\n\r\nclass RealityModelTileLoader extends RealityTileLoader {\r\n public readonly tree: RealityModelTileTreeProps;\r\n private readonly _batchedIdMap?: BatchedTileIdMap;\r\n private _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _deduplicateVertices: boolean;\r\n\r\n public constructor(tree: RealityModelTileTreeProps, batchedIdMap?: BatchedTileIdMap, opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean }) {\r\n super(opts?.produceGeometry ?? false);\r\n this.tree = tree;\r\n this._batchedIdMap = batchedIdMap;\r\n this._deduplicateVertices = opts?.deduplicateVertices ?? false;\r\n\r\n let clipVolume;\r\n if (RealityTileRegion.isGlobal(tree.tilesetJson.boundingVolume))\r\n clipVolume = false;\r\n this._viewFlagOverrides = createDefaultViewFlagOverrides({ lighting: true, clipVolume });\r\n\r\n // Display edges if they are present (Cesium outline extension) and enabled for view.\r\n this._viewFlagOverrides.visibleEdges = undefined;\r\n this._viewFlagOverrides.hiddenEdges = undefined;\r\n\r\n // Allow wiremesh display.\r\n this._viewFlagOverrides.wiremesh = undefined;\r\n }\r\n\r\n public get doDrapeBackgroundMap(): boolean { return this.tree.doDrapeBackgroundMap; }\r\n public override get wantDeduplicatedVertices() { return this._deduplicateVertices; }\r\n\r\n public get maxDepth(): number { return Number.MAX_SAFE_INTEGER; }\r\n public get minDepth(): number { return 0; }\r\n public get priority(): TileLoadPriority { return TileLoadPriority.Context; }\r\n public override getBatchIdMap(): BatchedTileIdMap | undefined { return this._batchedIdMap; }\r\n public get clipLowResolutionTiles(): boolean { return true; }\r\n public override get viewFlagOverrides(): ViewFlagOverrides { return this._viewFlagOverrides; }\r\n public override get maximumScreenSpaceError(): number | undefined {\r\n return this.tree.rdSource.maximumScreenSpaceError;\r\n }\r\n\r\n public async loadChildren(tile: RealityTile): Promise<Tile[] | undefined> {\r\n const props = await this.getChildrenProps(tile);\r\n if (undefined === props)\r\n return undefined;\r\n\r\n const children = [];\r\n for (const prop of props)\r\n children.push(tile.realityRoot.createTile(prop));\r\n\r\n return children;\r\n }\r\n\r\n public async getChildrenProps(parent: RealityTile): Promise<RealityTileParams[]> {\r\n const props: RealityModelTileProps[] = [];\r\n const thisId = parent.contentId;\r\n const prefix = thisId.length ? `${thisId}_` : \"\";\r\n const findResult = await this.findTileInJson(this.tree.tilesetJson, thisId, \"\", undefined);\r\n if (undefined !== findResult && Array.isArray(findResult.json.children)) {\r\n for (let i = 0; i < findResult.json.children.length; i++) {\r\n const childId = prefix + i;\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, childId, \"\", undefined);\r\n if (undefined !== foundChild) {\r\n const refine = foundChild.json.refine;\r\n props.push(new RealityModelTileProps({\r\n json: foundChild.json,\r\n parent,\r\n id: foundChild.id,\r\n transformToRoot: foundChild.transformToRoot,\r\n // If not specified explicitly, additiveRefinement is inherited from parent tile.\r\n additiveRefinement: undefined !== refine ? refine === \"ADD\" : undefined,\r\n usesGeometricError: this.tree.rdSource.usesGeometricError,\r\n }));\r\n }\r\n }\r\n }\r\n return props;\r\n }\r\n\r\n public getRequestChannel(_tile: Tile) {\r\n // ###TODO: May want to extract the hostname from the URL.\r\n return IModelApp.tileAdmin.channels.getForHttp(\"itwinjs-reality-model\");\r\n }\r\n\r\n public async requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, tile.contentId, \"\");\r\n if (undefined === foundChild || undefined === foundChild.json.content || isCanceled())\r\n return undefined;\r\n\r\n return this.tree.rdSource.getTileContent(getUrl(foundChild.json.content));\r\n }\r\n\r\n private async findTileInJson(tilesetJson: any, id: string, parentId: string, transformToRoot?: Transform): Promise<FindChildResult | undefined> {\r\n if (id.length === 0)\r\n return new FindChildResult(id, tilesetJson, transformToRoot); // Root.\r\n\r\n const separatorIndex = id.indexOf(\"_\");\r\n const childId = (separatorIndex < 0) ? id : id.substring(0, separatorIndex);\r\n const childIndex = parseInt(childId, 10);\r\n\r\n if (isNaN(childIndex) || tilesetJson === undefined || tilesetJson.children === undefined || childIndex >= tilesetJson.children.length) {\r\n assert(false, \"scalable mesh child not found.\");\r\n return undefined;\r\n }\r\n\r\n const foundChild = tilesetJson.children[childIndex];\r\n const thisParentId = parentId.length ? (`${parentId}_${childId}`) : childId;\r\n if (foundChild.transform) {\r\n const thisTransform = RealityModelTileUtils.transformFromJson(foundChild.transform);\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(thisTransform) : thisTransform;\r\n }\r\n\r\n if (separatorIndex >= 0) {\r\n return this.findTileInJson(foundChild, id.substring(separatorIndex + 1), thisParentId, transformToRoot);\r\n }\r\n\r\n tilesetJson.children[childIndex] = await expandSubTree(foundChild, this.tree.rdSource);\r\n\r\n return new FindChildResult(thisParentId, tilesetJson.children[childIndex], transformToRoot);\r\n }\r\n}\r\n\r\nexport type RealityModelSource = ViewState | DisplayStyleState;\r\n\r\n/** @internal */\r\nexport class RealityModelTileTree extends RealityTileTree {\r\n private readonly _isContentUnbounded: boolean;\r\n private readonly _layerHandler: LayerTileTreeHandler;\r\n public layerImageryTrees: MapLayerTreeSetting[] = [];\r\n\r\n public override get layerHandler() { return this._layerHandler; }\r\n\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n\r\n this._layerHandler = new LayerTileTreeHandler(this);\r\n\r\n this._isContentUnbounded = this.rootTile.contentRange.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n }\r\n public override get isContentUnbounded() { return this._isContentUnbounded; }\r\n\r\n protected override collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n super.collectClassifierGraphics(args, selectedTiles);\r\n this._layerHandler.collectClassifierGraphics(args, selectedTiles);\r\n }\r\n}\r\n\r\nexport namespace RealityModelTileTree {\r\n export interface ReferenceBaseProps {\r\n iModel: IModelConnection;\r\n source: RealityModelSource;\r\n rdSourceKey: RealityDataSourceKey;\r\n modelId?: Id64String;\r\n tilesetToDbTransform?: TransformProps;\r\n name?: string;\r\n classifiers?: SpatialClassifiersState;\r\n planarClipMask?: PlanarClipMaskSettings;\r\n getDisplaySettings(): RealityModelDisplaySettings;\r\n getBackgroundBase?(): BaseLayerSettings;\r\n getBackgroundLayers?(): MapLayerSettings[];\r\n }\r\n\r\n export interface ReferenceProps extends ReferenceBaseProps {\r\n url?: string;\r\n requestAuthorization?: string;\r\n produceGeometry?: boolean;\r\n }\r\n\r\n export abstract class Reference extends TileTreeReference {\r\n protected readonly _name: string;\r\n protected _transform?: Transform;\r\n private _isGlobal?: boolean;\r\n protected readonly _source: RealityModelSource;\r\n protected _planarClipMask?: PlanarClipMaskState;\r\n protected _classifier?: SpatialClassifierTileTreeReference;\r\n protected _mapDrapeTree?: TileTreeReference;\r\n protected _getDisplaySettings: () => RealityModelDisplaySettings;\r\n private readonly _detachFromDisplayStyle: VoidFunction[] = [];\r\n private _layerRefHandler: LayerTileTreeReferenceHandler;\r\n public readonly iModel: IModelConnection;\r\n\r\n // public get classifiers(): SpatialClassifiers | undefined { return undefined !== this._classifier ? this._classifier.classifiers : undefined; }\r\n public abstract get modelId(): Id64String;\r\n\r\n public get planarClipMask(): PlanarClipMaskState | undefined { return this._planarClipMask; }\r\n public set planarClipMask(planarClipMask: PlanarClipMaskState | undefined) { this._planarClipMask = planarClipMask; }\r\n\r\n public override get planarClipMaskPriority(): number {\r\n if (this._planarClipMask?.settings.priority !== undefined)\r\n return this._planarClipMask.settings.priority;\r\n\r\n return this.isGlobal ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\r\n }\r\n\r\n protected get maskModelIds(): string | undefined {\r\n return this._planarClipMask?.settings.compressedModelIds;\r\n }\r\n\r\n public shouldDrapeLayer(layerTreeRef?: MapLayerTileTreeReference): boolean {\r\n const mapLayerSettings = layerTreeRef?.layerSettings;\r\n if (mapLayerSettings && mapLayerSettings instanceof ModelMapLayerSettings)\r\n return ModelMapLayerDrapeTarget.RealityData === mapLayerSettings.drapeTarget;\r\n return false;\r\n }\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceBaseProps) {\r\n super();\r\n\r\n this.iModel = props.iModel;\r\n\r\n this._layerRefHandler = new LayerTileTreeReferenceHandler(this, false, props.getBackgroundBase?.(), props.getBackgroundLayers?.());\r\n\r\n this._name = undefined !== props.name ? props.name : \"\";\r\n let transform;\r\n if (undefined !== props.tilesetToDbTransform) {\r\n const tf = Transform.fromJSON(props.tilesetToDbTransform);\r\n if (!tf.isIdentity)\r\n transform = tf;\r\n\r\n this._transform = transform;\r\n }\r\n\r\n this._source = props.source;\r\n this._getDisplaySettings = () => props.getDisplaySettings();\r\n\r\n if (props.planarClipMask)\r\n this._planarClipMask = PlanarClipMaskState.create(props.planarClipMask);\r\n\r\n if (undefined !== props.classifiers)\r\n this._classifier = createClassifierTileTreeReference(props.classifiers, this, props.iModel, props.source);\r\n }\r\n\r\n public get planarClassifierTreeRef() { return this._classifier && this._classifier.activeClassifier && this._classifier.isPlanar ? this._classifier : undefined; }\r\n\r\n public override unionFitRange(union: Range3d): void {\r\n const contentRange = this.computeWorldContentRange();\r\n if (!contentRange.isNull && contentRange.diagonal().magnitude() < Constant.earthRadiusWGS84.equator)\r\n union.extendRange(contentRange);\r\n }\r\n\r\n public override get isGlobal() {\r\n if (undefined === this._isGlobal) {\r\n const range = this.computeWorldContentRange();\r\n if (!range.isNull)\r\n this._isGlobal = range.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n }\r\n return this._isGlobal === undefined ? false : this._isGlobal;\r\n }\r\n\r\n public preInitializeLayers(context: SceneContext): void {\r\n const removals = this._detachFromDisplayStyle;\r\n const mapImagery = context.viewport.displayStyle.settings.mapImagery;\r\n if (0 === removals.length) {\r\n removals.push(context.viewport.displayStyle.settings.onMapImageryChanged.addListener((imagery: Readonly<MapImagerySettings>) => {\r\n this._layerRefHandler.setBaseLayerSettings(imagery.backgroundBase);\r\n this._layerRefHandler.setLayerSettings(imagery.backgroundLayers);\r\n this._layerRefHandler.clearLayers();\r\n }));\r\n }\r\n removals.push(context.viewport.onChangeView.addListener((vp, previousViewState) => {\r\n if(compareMapLayer(previousViewState, vp.view)){\r\n this._layerRefHandler.setBaseLayerSettings(mapImagery.backgroundBase);\r\n this._layerRefHandler.setLayerSettings(mapImagery.backgroundLayers);\r\n this._layerRefHandler.clearLayers();\r\n }\r\n }));\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n const tree = this.treeOwner.load() as RealityModelTileTree;\r\n if (undefined === tree || !this._layerRefHandler.initializeLayers(context))\r\n return; // Not loaded yet.\r\n\r\n // NB: The classifier must be added first, so we can find it when adding our own tiles.\r\n if (this._classifier && this._classifier.activeClassifier)\r\n this._classifier.addToScene(context);\r\n\r\n this.addPlanarClassifierOrMaskToScene(context);\r\n super.addToScene(context);\r\n }\r\n\r\n protected addPlanarClassifierOrMaskToScene(context: SceneContext) {\r\n // A planarClassifier is required if there is a classification tree OR planar masking is required.\r\n const classifierTree = this.planarClassifierTreeRef;\r\n const planarClipMask = this._planarClipMask ?? context.viewport.displayStyle.getPlanarClipMaskState(this.modelId);\r\n if (!classifierTree && !planarClipMask)\r\n return;\r\n\r\n if (classifierTree && !classifierTree.treeOwner.load())\r\n return;\r\n\r\n context.addPlanarClassifier(this.modelId, classifierTree, planarClipMask);\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._classifier)\r\n this._classifier.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._mapDrapeTree)\r\n this._mapDrapeTree.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n\r\n const tree = undefined !== this._classifier ? this._classifier.treeOwner.tileTree : undefined;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (args) {\r\n args.graphics.realityModelDisplaySettings = this._getDisplaySettings();\r\n args.graphics.realityModelRange = args.tree.rootTile.contentRange;\r\n\r\n if (args.tree instanceof RealityTileTree) {\r\n const maxSSE = args.tree.loader.maximumScreenSpaceError;\r\n if (undefined !== maxSSE)\r\n args.maximumScreenSpaceError = maxSSE;\r\n }\r\n }\r\n\r\n return args;\r\n }\r\n }\r\n\r\n export async function createRealityModelTileTree(\r\n rdSourceKey: RealityDataSourceKey,\r\n iModel: IModelConnection,\r\n modelId: Id64String,\r\n tilesetToDb: Transform | undefined,\r\n opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean },\r\n ): Promise<TileTree | undefined> {\r\n const rdSource = await RealityDataSource.fromKey(rdSourceKey, iModel.iTwinId);\r\n // If we can get a valid connection from sourceKey, returns the tile tree\r\n if (rdSource) {\r\n // Serialize the reality data source key into a string to uniquely identify this tile tree\r\n const tileTreeId = RealityDataSourceKey.convertToString(rdSource.key);\r\n if (tileTreeId === undefined)\r\n return undefined;\r\n const props = await getTileTreeProps(rdSource, tilesetToDb, iModel);\r\n const loader = new RealityModelTileLoader(props, new BatchedTileIdMap(iModel), opts);\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n //The full tileset url is needed so that it includes the url's search parameters if any are present\r\n const baseUrl = rdSource instanceof RealityDataSourceTilesetUrlImpl ? rdSource.getTilesetUrl() : undefined;\r\n const params = new RealityModelTileTreeParams(tileTreeId, iModel, modelId, loader, gcsConverterAvailable, props.tilesetToEcef, baseUrl);\r\n return new RealityModelTileTree(params);\r\n }\r\n return undefined;\r\n }\r\n\r\n async function getTileTreeProps(rdSource: RealityDataSource, tilesetToDbJson: any, iModel: IModelConnection): Promise<RealityModelTileTreeProps> {\r\n const json = await rdSource.getRootDocument(iModel.iTwinId);\r\n let rootTransform = iModel.ecefLocation ? iModel.getMapEcefToDb(0) : Transform.createIdentity();\r\n const geoConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter(\"WGS84\");\r\n if (geoConverter !== undefined) {\r\n let realityTileRange = RealityModelTileUtils.rangeFromBoundingVolume(json.root.boundingVolume)!.range;\r\n if (json.root.transform) {\r\n const realityToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n realityTileRange = realityToEcef.multiplyRange(realityTileRange);\r\n }\r\n\r\n if (iModel.ecefLocation) {\r\n // In initial publishing version the iModel ecef Transform was used to locate the reality model.\r\n // This would work well only for tilesets published from that iModel but for iModels the ecef transform is calculated\r\n // at the center of the project extents and the reality model location may differ greatly, and the curvature of the earth\r\n // could introduce significant errors.\r\n // The publishing was modified to calculate the ecef transform at the reality model range center and at the same time the \"iModelPublishVersion\"\r\n // member was added to the root object. In order to continue to locate reality models published from older versions at the\r\n // project extents center we look for Tileset version 0.0 and no root.iModelVersion.\r\n const ecefOrigin = realityTileRange.localXYZToWorld(.5, .5, .5)!;\r\n const dbOrigin = rootTransform.multiplyPoint3d(ecefOrigin);\r\n const realityOriginToProjectDistance = iModel.projectExtents.distanceToPoint(dbOrigin);\r\n const maxProjectDistance = 1E5; // Only use the project GCS projection if within 100KM of the project. Don't attempt to use GCS if global reality model or in another locale - Results will be unreliable.\r\n if (realityOriginToProjectDistance < maxProjectDistance && json.asset?.version !== \"0.0\" || undefined !== json.root?.iModelPublishVersion) {\r\n const cartographicOrigin = Cartographic.fromEcef(ecefOrigin);\r\n\r\n if (cartographicOrigin !== undefined) {\r\n const geoOrigin = Point3d.create(cartographicOrigin.longitudeDegrees, cartographicOrigin.latitudeDegrees, cartographicOrigin.height);\r\n const response = await geoConverter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);\r\n if (response.iModelCoords[0].s === GeoCoordStatus.Success) {\r\n const ecefToDb = await calculateEcefToDbTransformAtLocation(Point3d.fromJSON(response.iModelCoords[0].p), iModel);\r\n if (ecefToDb)\r\n rootTransform = ecefToDb;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let tilesetToEcef = Transform.createIdentity();\r\n\r\n if (json.root.transform) {\r\n tilesetToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n rootTransform = rootTransform.multiplyTransformTransform(tilesetToEcef);\r\n }\r\n\r\n if (undefined !== tilesetToDbJson)\r\n rootTransform = Transform.fromJSON(tilesetToDbJson).multiplyTransformTransform(rootTransform);\r\n\r\n const root = await expandSubTree(json.root, rdSource);\r\n return new RealityModelTileTreeProps(json, root, rdSource, rootTransform, tilesetToEcef);\r\n }\r\n}\r\n\r\n/** Supplies a reality data [[TileTree]] from a URL. May be associated with a persistent [[GeometricModelState]], or attached at run-time via a [[ContextRealityModelState]].\r\n */\r\nexport class RealityTreeReference extends RealityModelTileTree.Reference {\r\n protected _rdSourceKey: RealityDataSourceKey;\r\n private readonly _produceGeometry?: boolean;\r\n private readonly _modelId: Id64String;\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceProps) {\r\n super(props);\r\n this._produceGeometry = props.produceGeometry;\r\n\r\n // Maybe we should throw if both props.rdSourceKey && props.url are undefined\r\n if (props.rdSourceKey)\r\n this._rdSourceKey = props.rdSourceKey;\r\n else\r\n this._rdSourceKey = RealityDataSource.createKeyFromUrl(props.url ?? \"\", RealityDataProvider.ContextShare);\r\n\r\n if (this._produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n\r\n let modelId = props.modelId;\r\n if (undefined === modelId && this._source instanceof DisplayStyleState) {\r\n const treeId = this.createTreeId(Id64.invalid);\r\n modelId = realityTreeSupplier.findCompatibleContextRealityModelId(treeId, this._source);\r\n }\r\n\r\n this._modelId = modelId ?? props.iModel.transientIds.getNext();\r\n }\r\n\r\n public override get modelId() { return this._modelId; }\r\n\r\n private createTreeId(modelId: Id64String): RealityTreeId {\r\n return {\r\n rdSourceKey: this._rdSourceKey,\r\n transform: this._transform,\r\n modelId,\r\n maskModelIds: this.maskModelIds,\r\n deduplicateVertices: this._wantWiremesh,\r\n produceGeometry: this._produceGeometry,\r\n displaySettings: this._getDisplaySettings(),\r\n };\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n return realityTreeSupplier.getOwner(this.createTreeId(this.modelId), this.iModel);\r\n }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference {\r\n const ref = new RealityTreeReference({\r\n iModel: this.iModel,\r\n modelId: this.modelId,\r\n source: this._source,\r\n rdSourceKey: this._rdSourceKey,\r\n name: this._name,\r\n produceGeometry: true,\r\n getDisplaySettings: () => RealityModelDisplaySettings.defaults,\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n private get _wantWiremesh(): boolean {\r\n return this._source.viewFlags.wiremesh;\r\n }\r\n\r\n public override get castsShadows() {\r\n return true;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n return !this._mapDrapeTree || this._mapDrapeTree.isLoadingComplete;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n // For global reality models (OSM Building layer only) - offset the reality model by the BIM elevation bias. This would not be necessary\r\n // if iModels had their elevation set correctly but unfortunately many GCS erroneously report Sea (Geoid) elevation rather than\r\n // Geodetic.\r\n const tree = this.treeOwner.load();\r\n if (undefined === tree)\r\n return undefined;\r\n\r\n const drawArgs = super.createDrawArgs(context);\r\n if (drawArgs !== undefined && this.iModel.isGeoLocated && tree.isContentUnbounded) {\r\n const elevationBias = context.viewport.view.displayStyle.backgroundMapElevationBias;\r\n\r\n if (undefined !== elevationBias)\r\n drawArgs.location.origin.z -= elevationBias;\r\n }\r\n\r\n return drawArgs;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n const tree = this.treeOwner.tileTree as RealityTileTree;\r\n if (undefined !== tree && context.viewport.iModel.isGeoLocated && (tree.loader as RealityModelTileLoader).doDrapeBackgroundMap) {\r\n // NB: We save this off strictly so that discloseTileTrees() can find it...better option?\r\n this._mapDrapeTree = context.viewport.backgroundDrapeMap;\r\n context.addBackgroundDrapedModel(this, undefined);\r\n }\r\n\r\n super.addToScene(context);\r\n }\r\n\r\n public override canSupplyToolTip(hit: HitDetail): boolean {\r\n const classifier = this._classifier?.activeClassifier?.tileTreeReference;\r\n if (classifier && classifier.canSupplyToolTip(hit)) {\r\n return true;\r\n }\r\n\r\n const tree = this.treeOwner.tileTree;\r\n return tree instanceof RealityTileTree && hit.iModel === tree.iModel && undefined !== tree.batchTableProperties?.getFeatureProperties(hit.sourceId);\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tooltip = this._getToolTip(hit);\r\n if (tooltip) {\r\n return tooltip;\r\n }\r\n\r\n const classifierTree = this._classifier?.activeClassifier?.tileTreeReference;\r\n if (classifierTree) {\r\n return classifierTree.getToolTip(hit);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private _getToolTip(hit: HitDetail): HTMLElement | string | undefined {\r\n const tree = this.treeOwner.tileTree;\r\n if (!(tree instanceof RealityTileTree) || hit.iModel !== tree.iModel)\r\n return undefined;\r\n\r\n const batch = tree.batchTableProperties?.getFeatureProperties(hit.sourceId);\r\n if (undefined === batch && tree.modelId !== hit.sourceId)\r\n return undefined;\r\n\r\n const strings = [];\r\n\r\n const loader = (tree as RealityModelTileTree).loader;\r\n const type = (loader as RealityModelTileLoader).tree.rdSource.realityDataType;\r\n\r\n // If a type is specified, display it\r\n if (type !== undefined) {\r\n // Case insensitive\r\n switch (type.toUpperCase()) {\r\n case DefaultSupportedTypes.RealityMesh3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.RealityMesh3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Terrain3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Terrain3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Cesium3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Cesium3DTiles\"));\r\n break;\r\n }\r\n }\r\n\r\n if (this._name) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:TooltipInfo.Name\")} ${this._name}`);\r\n } else {\r\n const cesiumAsset = this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset ? CesiumIonAssetProvider.parseCesiumUrl(this._rdSourceKey.id) : undefined;\r\n strings.push(cesiumAsset ? `Cesium Asset: ${cesiumAsset.id}` : this._rdSourceKey.id);\r\n }\r\n\r\n if (batch !== undefined)\r\n for (const key of Object.keys(batch))\r\n if (-1 === key.indexOf(\"#\")) // Avoid internal cesium\r\n strings.push(`${key}: ${JSON.stringify(batch[key])}`);\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n /** @deprecated in 5.0 Use [addAttributions] instead. */\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset && !cards.dataset.openStreetMapLogoCard) {\r\n cards.dataset.openStreetMapLogoCard = \"true\";\r\n cards.appendChild(IModelApp.makeLogoCard({ heading: \"OpenStreetMap\", notice: `©<a href=\\\"https://www.openstreetmap.org/copyright\\\">OpenStreetMap</a> ${IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap:OpenStreetMapContributors\")}` }));\r\n }\r\n }\r\n\r\n public override async addAttributions(cards: HTMLTableElement): Promise<void> {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return Promise.resolve(this.addLogoCards(cards));\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"RealityModelTileTree.js","sourceRoot":"","sources":["../../../../src/internal/tile/RealityModelTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\nimport {\r\n assert, compareBooleans, compareBooleansOrUndefined, compareNumbers, comparePossiblyUndefined, compareStrings,\r\n compareStringsOrUndefined, CompressedId64Set, Id64, Id64String,\r\n} from \"@itwin/core-bentley\";\r\nimport {\r\n BaseLayerSettings,\r\n Cartographic, DefaultSupportedTypes, GeoCoordStatus, MapLayerSettings, ModelMapLayerDrapeTarget, ModelMapLayerSettings, PlanarClipMaskPriority, PlanarClipMaskSettings,\r\n RealityDataProvider, RealityDataSourceKey, RealityModelDisplaySettings, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport { Angle, Constant, Ellipsoid, Matrix3d, Point3d, Range3d, Ray3d, Transform, TransformProps, Vector3d, XYZ } from \"@itwin/core-geometry\";\r\nimport { calculateEcefToDbTransformAtLocation } from \"../../BackgroundMapGeometry\";\r\nimport { DisplayStyleState } from \"../../DisplayStyleState\";\r\nimport { HitDetail } from \"../../HitDetail\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { PlanarClipMaskState } from \"../../PlanarClipMaskState\";\r\nimport { RealityDataSource } from \"../../RealityDataSource\";\r\nimport { RenderMemory } from \"../../render/RenderMemory\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewState } from \"../../ViewState\";\r\nimport {\r\n BatchedTileIdMap, CesiumIonAssetProvider, createClassifierTileTreeReference, createDefaultViewFlagOverrides, DisclosedTileTreeSet, GeometryTileTreeReference,\r\n getGcsConverterAvailable, LayerTileTreeHandler, LayerTileTreeReferenceHandler, MapLayerTileTreeReference, MapLayerTreeSetting, RealityTile, RealityTileLoader, RealityTileParams, RealityTileTree, RealityTileTreeParams, SpatialClassifierTileTreeReference, Tile,\r\n TileDrawArgs, TileLoadPriority, TileRequest, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier,\r\n} from \"../../tile/internal\";\r\nimport { SpatialClassifiersState } from \"../../SpatialClassifiersState\";\r\nimport { RealityDataSourceTilesetUrlImpl } from \"../../RealityDataSourceTilesetUrlImpl\";\r\n\r\nfunction getUrl(content: any) {\r\n return content ? (content.url ? content.url : content.uri) : undefined;\r\n}\r\n\r\ninterface RealityTreeId {\r\n rdSourceKey: RealityDataSourceKey;\r\n transform?: Transform;\r\n modelId: Id64String;\r\n maskModelIds?: string;\r\n deduplicateVertices: boolean;\r\n produceGeometry?: boolean;\r\n displaySettings: RealityModelDisplaySettings;\r\n backgroundBase?: BaseLayerSettings;\r\n backgroundLayers?: MapLayerSettings[];\r\n}\r\n\r\nnamespace RealityTreeId {\r\n function compareOrigins(lhs: XYZ, rhs: XYZ): number {\r\n return compareNumbers(lhs.x, rhs.x) || compareNumbers(lhs.y, rhs.y) || compareNumbers(lhs.z, rhs.z);\r\n }\r\n\r\n function compareMatrices(lhs: Matrix3d, rhs: Matrix3d): number {\r\n for (let i = 0; i < 9; i++) {\r\n const cmp = compareNumbers(lhs.coffs[i], rhs.coffs[i]);\r\n if (0 !== cmp)\r\n return cmp;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n function compareTransforms(lhs: Transform, rhs: Transform) {\r\n return compareOrigins(lhs.origin, rhs.origin) || compareMatrices(lhs.matrix, rhs.matrix);\r\n }\r\n\r\n function compareRealityDataSourceKeys(lhs: RealityDataSourceKey, rhs: RealityDataSourceKey): number {\r\n return compareStringsOrUndefined(lhs.id, rhs.id) || compareStringsOrUndefined(lhs.format, rhs.format) || compareStringsOrUndefined(lhs.iTwinId, rhs.iTwinId);\r\n }\r\n\r\n export function compareWithoutModelId(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n return (\r\n compareRealityDataSourceKeys(lhs.rdSourceKey, rhs.rdSourceKey) ||\r\n compareBooleans(lhs.deduplicateVertices, rhs.deduplicateVertices) ||\r\n compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry) ||\r\n compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds) ||\r\n comparePossiblyUndefined((ltf, rtf) => compareTransforms(ltf, rtf), lhs.transform, rhs.transform)\r\n );\r\n }\r\n\r\n export function compare(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n return compareStrings(lhs.modelId, rhs.modelId) || compareWithoutModelId(lhs, rhs);\r\n }\r\n}\r\n\r\nclass RealityTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public getOwner(treeId: RealityTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(treeId, this);\r\n }\r\n\r\n public async createTileTree(treeId: RealityTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n if (treeId.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(treeId.maskModelIds));\r\n\r\n const opts = { deduplicateVertices: treeId.deduplicateVertices, produceGeometry: treeId.produceGeometry };\r\n return RealityModelTileTree.createRealityModelTileTree(treeId.rdSourceKey, iModel, treeId.modelId, treeId.transform, opts);\r\n }\r\n\r\n public compareTileTreeIds(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n return RealityTreeId.compare(lhs, rhs);\r\n }\r\n\r\n public findCompatibleContextRealityModelId(id: RealityTreeId, style: DisplayStyleState): Id64String | undefined {\r\n const owners = style.iModel.tiles.getTreeOwnersForSupplier(this);\r\n for (const owner of owners) {\r\n // Find an existing tree with the same Id, ignoring its model Id.\r\n if (0 === RealityTreeId.compareWithoutModelId(id, owner.id)) {\r\n const modelId = owner.id.modelId;\r\n assert(undefined !== modelId);\r\n\r\n // If the model Id is unused by any other context reality model in the view and does not identify a persistent reality model, use it.\r\n if (Id64.isTransientId64(modelId) && !style.contextRealityModelStates.some((model) => model.modelId === modelId))\r\n return modelId;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\nconst realityTreeSupplier = new RealityTreeSupplier();\r\n\r\nexport function createRealityTileTreeReference(props: RealityModelTileTree.ReferenceProps): RealityModelTileTree.Reference {\r\n return new RealityTreeReference(props);\r\n}\r\n\r\nconst zeroPoint = Point3d.createZero();\r\nconst earthEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\nconst scratchRay = Ray3d.createXAxis();\r\n\r\nexport class RealityTileRegion {\r\n constructor(values: { minLongitude: number, minLatitude: number, minHeight: number, maxLongitude: number, maxLatitude: number, maxHeight: number }) {\r\n this.minLongitude = values.minLongitude;\r\n this.minLatitude = values.minLatitude;\r\n this.minHeight = values.minHeight;\r\n this.maxLongitude = values.maxLongitude;\r\n this.maxLatitude = values.maxLatitude;\r\n this.maxHeight = values.maxHeight;\r\n }\r\n public minLongitude: number;\r\n public minLatitude: number;\r\n public minHeight: number;\r\n public maxLongitude: number;\r\n public maxLatitude: number;\r\n public maxHeight: number;\r\n\r\n public static create(region: number[]): RealityTileRegion {\r\n const minHeight = region[4];\r\n const maxHeight = region[5];\r\n const minLongitude = region[0];\r\n const maxLongitude = region[2];\r\n const minLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[1]);\r\n const maxLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[3]);\r\n return new RealityTileRegion({ minLongitude, minLatitude, minHeight, maxLongitude, maxLatitude, maxHeight });\r\n }\r\n\r\n public static isGlobal(boundingVolume: any) {\r\n return Array.isArray(boundingVolume?.region) && (boundingVolume.region[2] - boundingVolume.region[0]) > Angle.piRadians && (boundingVolume.region[3] - boundingVolume.region[1]) > Angle.piOver2Radians;\r\n }\r\n public getRange(): { range: Range3d, corners?: Point3d[] } {\r\n const maxAngle = Math.max(Math.abs(this.maxLatitude - this.minLatitude), Math.abs(this.maxLongitude - this.minLongitude));\r\n let corners;\r\n let range: Range3d;\r\n if (maxAngle < Math.PI / 8) {\r\n corners = new Array<Point3d>(8);\r\n const chordTolerance = (1 - Math.cos(maxAngle / 2)) * Constant.earthRadiusWGS84.polar;\r\n const addEllipsoidCorner = ((long: number, lat: number, index: number) => {\r\n const ray = earthEllipsoid.radiansToUnitNormalRay(long, lat, scratchRay)!;\r\n corners[index] = ray.fractionToPoint(this.minHeight - chordTolerance);\r\n corners[index + 4] = ray.fractionToPoint(this.maxHeight + chordTolerance);\r\n });\r\n addEllipsoidCorner(this.minLongitude, this.minLatitude, 0);\r\n addEllipsoidCorner(this.minLongitude, this.maxLatitude, 1);\r\n addEllipsoidCorner(this.maxLongitude, this.minLatitude, 2);\r\n addEllipsoidCorner(this.maxLongitude, this.maxLatitude, 3);\r\n range = Range3d.createArray(corners);\r\n } else {\r\n const minEq = Constant.earthRadiusWGS84.equator + this.minHeight, maxEq = Constant.earthRadiusWGS84.equator + this.maxHeight;\r\n const minEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, minEq, minEq, Constant.earthRadiusWGS84.polar + this.minHeight);\r\n const maxEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, maxEq, maxEq, Constant.earthRadiusWGS84.polar + this.maxHeight);\r\n range = minEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude);\r\n range.extendRange(maxEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude));\r\n }\r\n return { range, corners };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityModelTileUtils {\r\n public static rangeFromBoundingVolume(boundingVolume: any): { range: Range3d, corners?: Point3d[], region?: RealityTileRegion } | undefined {\r\n if (undefined === boundingVolume)\r\n return undefined;\r\n\r\n let corners: Point3d[] | undefined;\r\n let range: Range3d | undefined;\r\n if (undefined !== boundingVolume.box) {\r\n const box: number[] = boundingVolume.box;\r\n const center = Point3d.create(box[0], box[1], box[2]);\r\n const ux = Vector3d.create(box[3], box[4], box[5]);\r\n const uy = Vector3d.create(box[6], box[7], box[8]);\r\n const uz = Vector3d.create(box[9], box[10], box[11]);\r\n corners = new Array<Point3d>();\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < 2; k++) {\r\n for (let l = 0; l < 2; l++) {\r\n corners.push(center.plus3Scaled(ux, (j ? -1.0 : 1.0), uy, (k ? -1.0 : 1.0), uz, (l ? -1.0 : 1.0)));\r\n }\r\n }\r\n }\r\n range = Range3d.createArray(corners);\r\n } else if (Array.isArray(boundingVolume.sphere)) {\r\n const sphere: number[] = boundingVolume.sphere;\r\n const center = Point3d.create(sphere[0], sphere[1], sphere[2]);\r\n const radius = sphere[3];\r\n range = Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n } else if (Array.isArray(boundingVolume.region)) {\r\n const region = RealityTileRegion.create(boundingVolume.region);\r\n const regionRange = region.getRange();\r\n return { range: regionRange.range, corners: regionRange.corners, region };\r\n }\r\n return range ? { range, corners } : undefined;\r\n\r\n }\r\n public static maximumSizeFromGeometricTolerance(range: Range3d, geometricError: number): number {\r\n const minToleranceRatio = true === IModelApp.renderSystem.isMobile ? IModelApp.tileAdmin.mobileRealityTileMinToleranceRatio : 1.0; // Nominally the error on screen size of a tile. Increasing generally increases performance (fewer draw calls) at expense of higher load times.\r\n\r\n // NB: We increase the above minToleranceRatio on mobile devices in order to help avoid pruning too often based on the memory threshold for\r\n // pruning currently used by reality tile trees on mobile.\r\n\r\n return minToleranceRatio * range.diagonal().magnitude() / geometricError;\r\n }\r\n public static transformFromJson(jTrans: number[] | undefined): Transform {\r\n return (jTrans === undefined) ? Transform.createIdentity() : Transform.createOriginAndMatrix(Point3d.create(jTrans[12], jTrans[13], jTrans[14]), Matrix3d.createRowValues(jTrans[0], jTrans[4], jTrans[8], jTrans[1], jTrans[5], jTrans[9], jTrans[2], jTrans[6], jTrans[10]));\r\n }\r\n}\r\n\r\nenum SMTextureType {\r\n None = 0, // no textures\r\n Embedded = 1, // textures are available and stored in the nodes\r\n Streaming = 2, // textures need to be downloaded, Bing Maps, etc…\r\n}\r\n\r\nclass RealityModelTileTreeProps {\r\n public location: Transform;\r\n public tilesetJson: any;\r\n public doDrapeBackgroundMap: boolean = false;\r\n public rdSource: RealityDataSource;\r\n public yAxisUp = false;\r\n public root: any;\r\n\r\n constructor(json: any, root: any, rdSource: RealityDataSource, tilesetToDbTransform: Transform, public readonly tilesetToEcef?: Transform) {\r\n this.tilesetJson = root;\r\n this.rdSource = rdSource;\r\n this.location = tilesetToDbTransform;\r\n this.doDrapeBackgroundMap = (json.root && json.root.SMMasterHeader && SMTextureType.Streaming === json.root.SMMasterHeader.IsTextured);\r\n if (json.asset.gltfUpAxis === undefined || json.asset.gltfUpAxis === \"y\" || json.asset.gltfUpAxis === \"Y\")\r\n this.yAxisUp = true;\r\n }\r\n}\r\n\r\nclass RealityModelTileTreeParams implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public iModel: IModelConnection;\r\n public is3d = true;\r\n public loader: RealityModelTileLoader;\r\n public rootTile: RealityTileParams;\r\n public baseUrl?: string;\r\n\r\n public get location() { return this.loader.tree.location; }\r\n public get yAxisUp() { return this.loader.tree.yAxisUp; }\r\n public get priority() { return this.loader.priority; }\r\n\r\n public constructor(tileTreeId: string, iModel: IModelConnection, modelId: Id64String, loader: RealityModelTileLoader, public readonly gcsConverterAvailable: boolean, public readonly rootToEcef: Transform | undefined, baseUrl?: string) {\r\n this.loader = loader;\r\n this.id = tileTreeId;\r\n this.modelId = modelId;\r\n this.iModel = iModel;\r\n const refine = loader.tree.tilesetJson.refine;\r\n this.rootTile = new RealityModelTileProps({\r\n json: loader.tree.tilesetJson,\r\n id: \"\",\r\n // If not specified explicitly, additiveRefinement is inherited from parent tile.\r\n additiveRefinement: undefined !== refine ? \"ADD\" === refine : undefined,\r\n usesGeometricError: loader.tree.rdSource.usesGeometricError,\r\n });\r\n this.baseUrl = baseUrl;\r\n }\r\n}\r\n\r\nclass RealityModelTileProps implements RealityTileParams {\r\n public readonly contentId: string;\r\n public readonly range: Range3d;\r\n public readonly contentRange?: Range3d;\r\n public readonly maximumSize: number;\r\n public readonly isLeaf: boolean;\r\n public readonly transformToRoot?: Transform;\r\n public readonly additiveRefinement?: boolean;\r\n public readonly parent?: RealityTile;\r\n public readonly noContentButTerminateOnSelection?: boolean;\r\n public readonly rangeCorners?: Point3d[];\r\n public readonly region?: RealityTileRegion;\r\n public readonly geometricError?: number;\r\n\r\n constructor(args: {\r\n json: any;\r\n parent?: RealityTile;\r\n id: string;\r\n transformToRoot?: Transform;\r\n additiveRefinement?: boolean;\r\n usesGeometricError?: boolean;\r\n }) {\r\n this.contentId = args.id;\r\n this.parent = args.parent;\r\n this.transformToRoot = args.transformToRoot;\r\n this.additiveRefinement = args.additiveRefinement;\r\n\r\n const json = args.json;\r\n const boundingVolume = RealityModelTileUtils.rangeFromBoundingVolume(json.boundingVolume);\r\n if (boundingVolume) {\r\n this.range = boundingVolume.range;\r\n this.rangeCorners = boundingVolume.corners;\r\n this.region = boundingVolume?.region;\r\n } else {\r\n this.range = Range3d.createNull();\r\n assert(false, \"Unbounded tile\");\r\n }\r\n\r\n this.isLeaf = !Array.isArray(json.children) || 0 === json.children.length;\r\n const hasContents = undefined !== getUrl(json.content);\r\n if (hasContents)\r\n this.contentRange = RealityModelTileUtils.rangeFromBoundingVolume(json.content.boundingVolume)?.range;\r\n else {\r\n // A node without content should probably be selectable even if not additive refinement - But restrict it to that case here\r\n // to avoid potential problems with existing reality models, but still avoid overselection in the OSM world building set.\r\n if (this.additiveRefinement || args.parent?.additiveRefinement)\r\n this.noContentButTerminateOnSelection = true;\r\n }\r\n\r\n this.maximumSize = (this.noContentButTerminateOnSelection || hasContents) ? RealityModelTileUtils.maximumSizeFromGeometricTolerance(Range3d.fromJSON(this.range), json.geometricError) : 0;\r\n if (args.usesGeometricError)\r\n this.geometricError = json.geometricError;\r\n }\r\n}\r\n\r\nclass FindChildResult {\r\n constructor(public id: string, public json: any, public transformToRoot?: Transform) { }\r\n}\r\n\r\nfunction assembleUrl(prefix: string, url: string): string {\r\n if (url.startsWith(\"/\")) {\r\n // Relative to base origin, not to parent tile\r\n return url.substring(1);\r\n }\r\n\r\n if (url.startsWith(\"./\")) {\r\n // Relative to parent tile\r\n url = url.substring(2);\r\n } else {\r\n const prefixParts = prefix.split(\"/\");\r\n prefixParts.pop();\r\n while (url.startsWith(\"../\")) {\r\n prefixParts.pop();\r\n url = url.substring(3);\r\n }\r\n\r\n prefixParts.push(\"\");\r\n prefix = prefixParts.join(\"/\");\r\n }\r\n\r\n return prefix + url;\r\n}\r\n\r\nfunction addUrlPrefix(subTree: any, prefix: string) {\r\n if (undefined === subTree)\r\n return;\r\n\r\n if (undefined !== subTree.content) {\r\n if (undefined !== subTree.content.url)\r\n subTree.content.url = assembleUrl(prefix, subTree.content.url);\r\n else if (undefined !== subTree.content.uri)\r\n subTree.content.uri = assembleUrl(prefix, subTree.content.uri);\r\n }\r\n\r\n if (undefined !== subTree.children)\r\n for (const child of subTree.children)\r\n addUrlPrefix(child, prefix);\r\n}\r\n\r\nasync function expandSubTree(root: any, rdsource: RealityDataSource): Promise<any> {\r\n const childUrl = getUrl(root.content);\r\n if (undefined === childUrl || \"tileset\" !== rdsource.getTileContentType(childUrl))\r\n return root;\r\n\r\n const subTree = await rdsource.getTileJson(childUrl);\r\n const prefixIndex = childUrl.lastIndexOf(\"/\");\r\n if (prefixIndex > 0)\r\n addUrlPrefix(subTree.root, childUrl.substring(0, prefixIndex + 1));\r\n\r\n return subTree.root;\r\n}\r\n\r\nclass RealityModelTileLoader extends RealityTileLoader {\r\n public readonly tree: RealityModelTileTreeProps;\r\n private readonly _batchedIdMap?: BatchedTileIdMap;\r\n private _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _deduplicateVertices: boolean;\r\n\r\n public constructor(tree: RealityModelTileTreeProps, batchedIdMap?: BatchedTileIdMap, opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean }) {\r\n super(opts?.produceGeometry ?? false);\r\n this.tree = tree;\r\n this._batchedIdMap = batchedIdMap;\r\n this._deduplicateVertices = opts?.deduplicateVertices ?? false;\r\n\r\n let clipVolume;\r\n if (RealityTileRegion.isGlobal(tree.tilesetJson.boundingVolume))\r\n clipVolume = false;\r\n this._viewFlagOverrides = createDefaultViewFlagOverrides({ lighting: true, clipVolume });\r\n\r\n // Display edges if they are present (Cesium outline extension) and enabled for view.\r\n this._viewFlagOverrides.visibleEdges = undefined;\r\n this._viewFlagOverrides.hiddenEdges = undefined;\r\n\r\n // Allow wiremesh display.\r\n this._viewFlagOverrides.wiremesh = undefined;\r\n }\r\n\r\n public get doDrapeBackgroundMap(): boolean { return this.tree.doDrapeBackgroundMap; }\r\n public override get wantDeduplicatedVertices() { return this._deduplicateVertices; }\r\n\r\n public get maxDepth(): number { return Number.MAX_SAFE_INTEGER; }\r\n public get minDepth(): number { return 0; }\r\n public get priority(): TileLoadPriority { return TileLoadPriority.Context; }\r\n public override getBatchIdMap(): BatchedTileIdMap | undefined { return this._batchedIdMap; }\r\n public get clipLowResolutionTiles(): boolean { return true; }\r\n public override get viewFlagOverrides(): ViewFlagOverrides { return this._viewFlagOverrides; }\r\n public override get maximumScreenSpaceError(): number | undefined {\r\n return this.tree.rdSource.maximumScreenSpaceError;\r\n }\r\n\r\n public async loadChildren(tile: RealityTile): Promise<Tile[] | undefined> {\r\n const props = await this.getChildrenProps(tile);\r\n if (undefined === props)\r\n return undefined;\r\n\r\n const children = [];\r\n for (const prop of props)\r\n children.push(tile.realityRoot.createTile(prop));\r\n\r\n return children;\r\n }\r\n\r\n public async getChildrenProps(parent: RealityTile): Promise<RealityTileParams[]> {\r\n const props: RealityModelTileProps[] = [];\r\n const thisId = parent.contentId;\r\n const prefix = thisId.length ? `${thisId}_` : \"\";\r\n const findResult = await this.findTileInJson(this.tree.tilesetJson, thisId, \"\", undefined);\r\n if (undefined !== findResult && Array.isArray(findResult.json.children)) {\r\n for (let i = 0; i < findResult.json.children.length; i++) {\r\n const childId = prefix + i;\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, childId, \"\", undefined);\r\n if (undefined !== foundChild) {\r\n const refine = foundChild.json.refine;\r\n props.push(new RealityModelTileProps({\r\n json: foundChild.json,\r\n parent,\r\n id: foundChild.id,\r\n transformToRoot: foundChild.transformToRoot,\r\n // If not specified explicitly, additiveRefinement is inherited from parent tile.\r\n additiveRefinement: undefined !== refine ? refine === \"ADD\" : undefined,\r\n usesGeometricError: this.tree.rdSource.usesGeometricError,\r\n }));\r\n }\r\n }\r\n }\r\n return props;\r\n }\r\n\r\n public getRequestChannel(_tile: Tile) {\r\n // ###TODO: May want to extract the hostname from the URL.\r\n return IModelApp.tileAdmin.channels.getForHttp(\"itwinjs-reality-model\");\r\n }\r\n\r\n public async requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, tile.contentId, \"\");\r\n if (undefined === foundChild || undefined === foundChild.json.content || isCanceled())\r\n return undefined;\r\n\r\n return this.tree.rdSource.getTileContent(getUrl(foundChild.json.content));\r\n }\r\n\r\n private async findTileInJson(tilesetJson: any, id: string, parentId: string, transformToRoot?: Transform): Promise<FindChildResult | undefined> {\r\n if (id.length === 0)\r\n return new FindChildResult(id, tilesetJson, transformToRoot); // Root.\r\n\r\n const separatorIndex = id.indexOf(\"_\");\r\n const childId = (separatorIndex < 0) ? id : id.substring(0, separatorIndex);\r\n const childIndex = parseInt(childId, 10);\r\n\r\n if (isNaN(childIndex) || tilesetJson === undefined || tilesetJson.children === undefined || childIndex >= tilesetJson.children.length) {\r\n assert(false, \"scalable mesh child not found.\");\r\n return undefined;\r\n }\r\n\r\n const foundChild = tilesetJson.children[childIndex];\r\n const thisParentId = parentId.length ? (`${parentId}_${childId}`) : childId;\r\n if (foundChild.transform) {\r\n const thisTransform = RealityModelTileUtils.transformFromJson(foundChild.transform);\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(thisTransform) : thisTransform;\r\n }\r\n\r\n if (separatorIndex >= 0) {\r\n return this.findTileInJson(foundChild, id.substring(separatorIndex + 1), thisParentId, transformToRoot);\r\n }\r\n\r\n tilesetJson.children[childIndex] = await expandSubTree(foundChild, this.tree.rdSource);\r\n\r\n return new FindChildResult(thisParentId, tilesetJson.children[childIndex], transformToRoot);\r\n }\r\n}\r\n\r\nexport type RealityModelSource = ViewState | DisplayStyleState;\r\n\r\n/** @internal */\r\nexport class RealityModelTileTree extends RealityTileTree {\r\n private readonly _isContentUnbounded: boolean;\r\n private readonly _layerHandler: LayerTileTreeHandler;\r\n public layerImageryTrees: MapLayerTreeSetting[] = [];\r\n\r\n public override get layerHandler() { return this._layerHandler; }\r\n\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n\r\n this._layerHandler = new LayerTileTreeHandler(this);\r\n\r\n this._isContentUnbounded = this.rootTile.contentRange.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n }\r\n public override get isContentUnbounded() { return this._isContentUnbounded; }\r\n\r\n protected override collectClassifierGraphics(args: TileDrawArgs, selectedTiles: RealityTile[]) {\r\n super.collectClassifierGraphics(args, selectedTiles);\r\n this._layerHandler.collectClassifierGraphics(args, selectedTiles);\r\n }\r\n}\r\n\r\nexport namespace RealityModelTileTree {\r\n export interface ReferenceBaseProps {\r\n iModel: IModelConnection;\r\n source: RealityModelSource;\r\n rdSourceKey: RealityDataSourceKey;\r\n modelId?: Id64String;\r\n tilesetToDbTransform?: TransformProps;\r\n name?: string;\r\n classifiers?: SpatialClassifiersState;\r\n planarClipMask?: PlanarClipMaskSettings;\r\n getDisplaySettings(): RealityModelDisplaySettings;\r\n getBackgroundBase?(): BaseLayerSettings;\r\n getBackgroundLayers?(): MapLayerSettings[];\r\n }\r\n\r\n export interface ReferenceProps extends ReferenceBaseProps {\r\n url?: string;\r\n requestAuthorization?: string;\r\n produceGeometry?: boolean;\r\n }\r\n\r\n export abstract class Reference extends TileTreeReference {\r\n protected readonly _name: string;\r\n protected _transform?: Transform;\r\n private _isGlobal?: boolean;\r\n protected readonly _source: RealityModelSource;\r\n protected _planarClipMask?: PlanarClipMaskState;\r\n protected _classifier?: SpatialClassifierTileTreeReference;\r\n protected _mapDrapeTree?: TileTreeReference;\r\n protected _getDisplaySettings: () => RealityModelDisplaySettings;\r\n private _layerRefHandler: LayerTileTreeReferenceHandler;\r\n public readonly iModel: IModelConnection;\r\n\r\n // public get classifiers(): SpatialClassifiers | undefined { return undefined !== this._classifier ? this._classifier.classifiers : undefined; }\r\n public abstract get modelId(): Id64String;\r\n\r\n public get planarClipMask(): PlanarClipMaskState | undefined { return this._planarClipMask; }\r\n public set planarClipMask(planarClipMask: PlanarClipMaskState | undefined) { this._planarClipMask = planarClipMask; }\r\n\r\n public override get planarClipMaskPriority(): number {\r\n if (this._planarClipMask?.settings.priority !== undefined)\r\n return this._planarClipMask.settings.priority;\r\n\r\n return this.isGlobal ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\r\n }\r\n\r\n protected get maskModelIds(): string | undefined {\r\n return this._planarClipMask?.settings.compressedModelIds;\r\n }\r\n\r\n public shouldDrapeLayer(layerTreeRef?: MapLayerTileTreeReference): boolean {\r\n const mapLayerSettings = layerTreeRef?.layerSettings;\r\n if (mapLayerSettings && mapLayerSettings instanceof ModelMapLayerSettings)\r\n return ModelMapLayerDrapeTarget.RealityData === mapLayerSettings.drapeTarget;\r\n return false;\r\n }\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceBaseProps) {\r\n super();\r\n\r\n this.iModel = props.iModel;\r\n\r\n this._layerRefHandler = new LayerTileTreeReferenceHandler(this, false, props.getBackgroundBase?.(), props.getBackgroundLayers?.(), false);\r\n\r\n this._name = undefined !== props.name ? props.name : \"\";\r\n let transform;\r\n if (undefined !== props.tilesetToDbTransform) {\r\n const tf = Transform.fromJSON(props.tilesetToDbTransform);\r\n if (!tf.isIdentity)\r\n transform = tf;\r\n\r\n this._transform = transform;\r\n }\r\n\r\n this._source = props.source;\r\n this._getDisplaySettings = () => props.getDisplaySettings();\r\n\r\n if (props.planarClipMask)\r\n this._planarClipMask = PlanarClipMaskState.create(props.planarClipMask);\r\n\r\n if (undefined !== props.classifiers)\r\n this._classifier = createClassifierTileTreeReference(props.classifiers, this, props.iModel, props.source);\r\n }\r\n\r\n public get planarClassifierTreeRef() { return this._classifier && this._classifier.activeClassifier && this._classifier.isPlanar ? this._classifier : undefined; }\r\n\r\n public override unionFitRange(union: Range3d): void {\r\n const contentRange = this.computeWorldContentRange();\r\n if (!contentRange.isNull && contentRange.diagonal().magnitude() < Constant.earthRadiusWGS84.equator)\r\n union.extendRange(contentRange);\r\n }\r\n\r\n public override get isGlobal() {\r\n if (undefined === this._isGlobal) {\r\n const range = this.computeWorldContentRange();\r\n if (!range.isNull)\r\n this._isGlobal = range.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n }\r\n return this._isGlobal === undefined ? false : this._isGlobal;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n const tree = this.treeOwner.load() as RealityModelTileTree;\r\n if (undefined === tree || !this._layerRefHandler.initializeLayers(context))\r\n return; // Not loaded yet.\r\n\r\n // NB: The classifier must be added first, so we can find it when adding our own tiles.\r\n if (this._classifier && this._classifier.activeClassifier)\r\n this._classifier.addToScene(context);\r\n\r\n this.addPlanarClassifierOrMaskToScene(context);\r\n super.addToScene(context);\r\n }\r\n\r\n protected addPlanarClassifierOrMaskToScene(context: SceneContext) {\r\n // A planarClassifier is required if there is a classification tree OR planar masking is required.\r\n const classifierTree = this.planarClassifierTreeRef;\r\n const planarClipMask = this._planarClipMask ?? context.viewport.displayStyle.getPlanarClipMaskState(this.modelId);\r\n if (!classifierTree && !planarClipMask)\r\n return;\r\n\r\n if (classifierTree && !classifierTree.treeOwner.load())\r\n return;\r\n\r\n context.addPlanarClassifier(this.modelId, classifierTree, planarClipMask);\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._classifier)\r\n this._classifier.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._mapDrapeTree)\r\n this._mapDrapeTree.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n\r\n this._layerRefHandler.discloseTileTrees(trees);\r\n }\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n\r\n const tree = undefined !== this._classifier ? this._classifier.treeOwner.tileTree : undefined;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (args) {\r\n args.graphics.realityModelDisplaySettings = this._getDisplaySettings();\r\n args.graphics.realityModelRange = args.tree.rootTile.contentRange;\r\n\r\n if (args.tree instanceof RealityTileTree) {\r\n const maxSSE = args.tree.loader.maximumScreenSpaceError;\r\n if (undefined !== maxSSE)\r\n args.maximumScreenSpaceError = maxSSE;\r\n }\r\n }\r\n\r\n return args;\r\n }\r\n }\r\n\r\n export async function createRealityModelTileTree(\r\n rdSourceKey: RealityDataSourceKey,\r\n iModel: IModelConnection,\r\n modelId: Id64String,\r\n tilesetToDb: Transform | undefined,\r\n opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean },\r\n ): Promise<TileTree | undefined> {\r\n const rdSource = await RealityDataSource.fromKey(rdSourceKey, iModel.iTwinId);\r\n // If we can get a valid connection from sourceKey, returns the tile tree\r\n if (rdSource) {\r\n // Serialize the reality data source key into a string to uniquely identify this tile tree\r\n const tileTreeId = RealityDataSourceKey.convertToString(rdSource.key);\r\n if (tileTreeId === undefined)\r\n return undefined;\r\n const props = await getTileTreeProps(rdSource, tilesetToDb, iModel);\r\n const loader = new RealityModelTileLoader(props, new BatchedTileIdMap(iModel), opts);\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n //The full tileset url is needed so that it includes the url's search parameters if any are present\r\n const baseUrl = rdSource instanceof RealityDataSourceTilesetUrlImpl ? rdSource.getTilesetUrl() : undefined;\r\n const params = new RealityModelTileTreeParams(tileTreeId, iModel, modelId, loader, gcsConverterAvailable, props.tilesetToEcef, baseUrl);\r\n return new RealityModelTileTree(params);\r\n }\r\n return undefined;\r\n }\r\n\r\n async function getTileTreeProps(rdSource: RealityDataSource, tilesetToDbJson: any, iModel: IModelConnection): Promise<RealityModelTileTreeProps> {\r\n const json = await rdSource.getRootDocument(iModel.iTwinId);\r\n let rootTransform = iModel.ecefLocation ? iModel.getMapEcefToDb(0) : Transform.createIdentity();\r\n const geoConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter(\"WGS84\");\r\n if (geoConverter !== undefined) {\r\n let realityTileRange = RealityModelTileUtils.rangeFromBoundingVolume(json.root.boundingVolume)!.range;\r\n if (json.root.transform) {\r\n const realityToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n realityTileRange = realityToEcef.multiplyRange(realityTileRange);\r\n }\r\n\r\n if (iModel.ecefLocation) {\r\n // In initial publishing version the iModel ecef Transform was used to locate the reality model.\r\n // This would work well only for tilesets published from that iModel but for iModels the ecef transform is calculated\r\n // at the center of the project extents and the reality model location may differ greatly, and the curvature of the earth\r\n // could introduce significant errors.\r\n // The publishing was modified to calculate the ecef transform at the reality model range center and at the same time the \"iModelPublishVersion\"\r\n // member was added to the root object. In order to continue to locate reality models published from older versions at the\r\n // project extents center we look for Tileset version 0.0 and no root.iModelVersion.\r\n const ecefOrigin = realityTileRange.localXYZToWorld(.5, .5, .5)!;\r\n const dbOrigin = rootTransform.multiplyPoint3d(ecefOrigin);\r\n const realityOriginToProjectDistance = iModel.projectExtents.distanceToPoint(dbOrigin);\r\n const maxProjectDistance = 1E5; // Only use the project GCS projection if within 100KM of the project. Don't attempt to use GCS if global reality model or in another locale - Results will be unreliable.\r\n if (realityOriginToProjectDistance < maxProjectDistance && json.asset?.version !== \"0.0\" || undefined !== json.root?.iModelPublishVersion) {\r\n const cartographicOrigin = Cartographic.fromEcef(ecefOrigin);\r\n\r\n if (cartographicOrigin !== undefined) {\r\n const geoOrigin = Point3d.create(cartographicOrigin.longitudeDegrees, cartographicOrigin.latitudeDegrees, cartographicOrigin.height);\r\n const response = await geoConverter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);\r\n if (response.iModelCoords[0].s === GeoCoordStatus.Success) {\r\n const ecefToDb = await calculateEcefToDbTransformAtLocation(Point3d.fromJSON(response.iModelCoords[0].p), iModel);\r\n if (ecefToDb)\r\n rootTransform = ecefToDb;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let tilesetToEcef = Transform.createIdentity();\r\n\r\n if (json.root.transform) {\r\n tilesetToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n rootTransform = rootTransform.multiplyTransformTransform(tilesetToEcef);\r\n }\r\n\r\n if (undefined !== tilesetToDbJson)\r\n rootTransform = Transform.fromJSON(tilesetToDbJson).multiplyTransformTransform(rootTransform);\r\n\r\n const root = await expandSubTree(json.root, rdSource);\r\n return new RealityModelTileTreeProps(json, root, rdSource, rootTransform, tilesetToEcef);\r\n }\r\n}\r\n\r\n/** Supplies a reality data [[TileTree]] from a URL. May be associated with a persistent [[GeometricModelState]], or attached at run-time via a [[ContextRealityModelState]].\r\n */\r\nexport class RealityTreeReference extends RealityModelTileTree.Reference {\r\n protected _rdSourceKey: RealityDataSourceKey;\r\n private readonly _produceGeometry?: boolean;\r\n private readonly _modelId: Id64String;\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceProps) {\r\n super(props);\r\n this._produceGeometry = props.produceGeometry;\r\n\r\n // Maybe we should throw if both props.rdSourceKey && props.url are undefined\r\n if (props.rdSourceKey)\r\n this._rdSourceKey = props.rdSourceKey;\r\n else\r\n this._rdSourceKey = RealityDataSource.createKeyFromUrl(props.url ?? \"\", RealityDataProvider.ContextShare);\r\n\r\n if (this._produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n\r\n let modelId = props.modelId;\r\n if (undefined === modelId && this._source instanceof DisplayStyleState) {\r\n const treeId = this.createTreeId(Id64.invalid);\r\n modelId = realityTreeSupplier.findCompatibleContextRealityModelId(treeId, this._source);\r\n }\r\n\r\n this._modelId = modelId ?? props.iModel.transientIds.getNext();\r\n }\r\n\r\n public override get modelId() { return this._modelId; }\r\n\r\n private createTreeId(modelId: Id64String): RealityTreeId {\r\n return {\r\n rdSourceKey: this._rdSourceKey,\r\n transform: this._transform,\r\n modelId,\r\n maskModelIds: this.maskModelIds,\r\n deduplicateVertices: this._wantWiremesh,\r\n produceGeometry: this._produceGeometry,\r\n displaySettings: this._getDisplaySettings(),\r\n };\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n return realityTreeSupplier.getOwner(this.createTreeId(this.modelId), this.iModel);\r\n }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference {\r\n const ref = new RealityTreeReference({\r\n iModel: this.iModel,\r\n modelId: this.modelId,\r\n source: this._source,\r\n rdSourceKey: this._rdSourceKey,\r\n name: this._name,\r\n produceGeometry: true,\r\n getDisplaySettings: () => RealityModelDisplaySettings.defaults,\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n private get _wantWiremesh(): boolean {\r\n return this._source.viewFlags.wiremesh;\r\n }\r\n\r\n public override get castsShadows() {\r\n return true;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n return !this._mapDrapeTree || this._mapDrapeTree.isLoadingComplete;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n // For global reality models (OSM Building layer only) - offset the reality model by the BIM elevation bias. This would not be necessary\r\n // if iModels had their elevation set correctly but unfortunately many GCS erroneously report Sea (Geoid) elevation rather than\r\n // Geodetic.\r\n const tree = this.treeOwner.load();\r\n if (undefined === tree)\r\n return undefined;\r\n\r\n const drawArgs = super.createDrawArgs(context);\r\n if (drawArgs !== undefined && this.iModel.isGeoLocated && tree.isContentUnbounded) {\r\n const elevationBias = context.viewport.view.displayStyle.backgroundMapElevationBias;\r\n\r\n if (undefined !== elevationBias)\r\n drawArgs.location.origin.z -= elevationBias;\r\n }\r\n\r\n return drawArgs;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n const tree = this.treeOwner.tileTree as RealityTileTree;\r\n if (undefined !== tree && context.viewport.iModel.isGeoLocated && (tree.loader as RealityModelTileLoader).doDrapeBackgroundMap) {\r\n // NB: We save this off strictly so that discloseTileTrees() can find it...better option?\r\n this._mapDrapeTree = context.viewport.backgroundDrapeMap;\r\n context.addBackgroundDrapedModel(this, undefined);\r\n }\r\n\r\n super.addToScene(context);\r\n }\r\n\r\n public override canSupplyToolTip(hit: HitDetail): boolean {\r\n const classifier = this._classifier?.activeClassifier?.tileTreeReference;\r\n if (classifier && classifier.canSupplyToolTip(hit)) {\r\n return true;\r\n }\r\n\r\n const tree = this.treeOwner.tileTree;\r\n return tree instanceof RealityTileTree && hit.iModel === tree.iModel && undefined !== tree.batchTableProperties?.getFeatureProperties(hit.sourceId);\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tooltip = this._getToolTip(hit);\r\n if (tooltip) {\r\n return tooltip;\r\n }\r\n\r\n const classifierTree = this._classifier?.activeClassifier?.tileTreeReference;\r\n if (classifierTree) {\r\n return classifierTree.getToolTip(hit);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private _getToolTip(hit: HitDetail): HTMLElement | string | undefined {\r\n const tree = this.treeOwner.tileTree;\r\n if (!(tree instanceof RealityTileTree) || hit.iModel !== tree.iModel)\r\n return undefined;\r\n\r\n const batch = tree.batchTableProperties?.getFeatureProperties(hit.sourceId);\r\n if (undefined === batch && tree.modelId !== hit.sourceId)\r\n return undefined;\r\n\r\n const strings = [];\r\n\r\n const loader = (tree as RealityModelTileTree).loader;\r\n const type = (loader as RealityModelTileLoader).tree.rdSource.realityDataType;\r\n\r\n // If a type is specified, display it\r\n if (type !== undefined) {\r\n // Case insensitive\r\n switch (type.toUpperCase()) {\r\n case DefaultSupportedTypes.RealityMesh3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.RealityMesh3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Terrain3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Terrain3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Cesium3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Cesium3DTiles\"));\r\n break;\r\n }\r\n }\r\n\r\n if (this._name) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:TooltipInfo.Name\")} ${this._name}`);\r\n } else {\r\n const cesiumAsset = this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset ? CesiumIonAssetProvider.parseCesiumUrl(this._rdSourceKey.id) : undefined;\r\n strings.push(cesiumAsset ? `Cesium Asset: ${cesiumAsset.id}` : this._rdSourceKey.id);\r\n }\r\n\r\n if (batch !== undefined)\r\n for (const key of Object.keys(batch))\r\n if (-1 === key.indexOf(\"#\")) // Avoid internal cesium\r\n strings.push(`${key}: ${JSON.stringify(batch[key])}`);\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n /** @deprecated in 5.0 Use [addAttributions] instead. */\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset && !cards.dataset.openStreetMapLogoCard) {\r\n cards.dataset.openStreetMapLogoCard = \"true\";\r\n cards.appendChild(IModelApp.makeLogoCard({ heading: \"OpenStreetMap\", notice: `©<a href=\\\"https://www.openstreetmap.org/copyright\\\">OpenStreetMap</a> ${IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap:OpenStreetMapContributors\")}` }));\r\n }\r\n }\r\n\r\n public override async addAttributions(cards: HTMLTableElement): Promise<void> {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return Promise.resolve(this.addLogoCards(cards));\r\n }\r\n}\r\n\r\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Id64String } from "@itwin/core-bentley";
|
|
5
5
|
import { BatchType, Feature, GeometryClass, ModelFeature } from "@itwin/core-common";
|
|
6
|
-
import { HitPath, HitPriority } from "../HitDetail";
|
|
6
|
+
import { ContourHit, HitPath, HitPriority } from "../HitDetail";
|
|
7
7
|
import { IModelConnection } from "../IModelConnection";
|
|
8
8
|
import type { Viewport } from "../Viewport";
|
|
9
9
|
import { Transform } from "@itwin/core-geometry";
|
|
@@ -28,6 +28,10 @@ export declare namespace Pixel {
|
|
|
28
28
|
readonly batchType?: BatchType;
|
|
29
29
|
/** The iModel from which the geometry producing the pixel originated. */
|
|
30
30
|
readonly iModel?: IModelConnection;
|
|
31
|
+
/** Information about the [contour line]($docs/learning/display/ContourDisplay.md), if any, that generated this pixel.
|
|
32
|
+
* @beta
|
|
33
|
+
*/
|
|
34
|
+
readonly contour?: ContourHit;
|
|
31
35
|
/** @internal */
|
|
32
36
|
readonly transformFromIModel?: Transform;
|
|
33
37
|
/** @internal */
|
|
@@ -54,6 +58,7 @@ export declare namespace Pixel {
|
|
|
54
58
|
viewAttachmentId?: string;
|
|
55
59
|
inSectionDrawingAttachment?: boolean;
|
|
56
60
|
transformFromIModel?: Transform;
|
|
61
|
+
contour?: ContourHit;
|
|
57
62
|
});
|
|
58
63
|
/** The Id of the element that produced the pixel. */
|
|
59
64
|
get elementId(): Id64String | undefined;
|
|
@@ -112,6 +117,10 @@ export declare namespace Pixel {
|
|
|
112
117
|
* @beta
|
|
113
118
|
*/
|
|
114
119
|
path?: HitPath;
|
|
120
|
+
/** Information about the [contour line]($docs/learning/display/ContourDisplay.md), if any, from which the hit originated.
|
|
121
|
+
* @beta
|
|
122
|
+
*/
|
|
123
|
+
contour?: ContourHit;
|
|
115
124
|
}
|
|
116
125
|
/** Describes the type of geometry that produced the [[Pixel.Data]]. */
|
|
117
126
|
enum GeometryType {
|
|
@@ -149,8 +158,10 @@ export declare namespace Pixel {
|
|
|
149
158
|
Feature = 1,// eslint-disable-line @typescript-eslint/no-shadow
|
|
150
159
|
/** Select the type and planarity of geometry which produced each pixel as well as the fraction of its distance between the near and far planes. */
|
|
151
160
|
GeometryAndDistance = 4,
|
|
161
|
+
/** Select the [[ContourHit]]s describing which if any contour line produced each pixel. */
|
|
162
|
+
Contours = 8,
|
|
152
163
|
/** Select all aspects of each pixel. */
|
|
153
|
-
All =
|
|
164
|
+
All = 13
|
|
154
165
|
}
|
|
155
166
|
/** A rectangular array of pixels as read from a [[Viewport]]'s frame buffer. Each pixel is represented as a [[Pixel.Data]] object.
|
|
156
167
|
* The contents of the pixel buffer will be specified using device pixels, not CSS pixels. See [[Viewport.devicePixelRatio]] and [[Viewport.cssPixelsToDevicePixels]].
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pixel.d.ts","sourceRoot":"","sources":["../../../src/render/Pixel.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAQ,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Pixel.d.ts","sourceRoot":"","sources":["../../../src/render/Pixel.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/render/Pixel.js
CHANGED
|
@@ -33,6 +33,10 @@ var Pixel;
|
|
|
33
33
|
batchType;
|
|
34
34
|
/** The iModel from which the geometry producing the pixel originated. */
|
|
35
35
|
iModel;
|
|
36
|
+
/** Information about the [contour line]($docs/learning/display/ContourDisplay.md), if any, that generated this pixel.
|
|
37
|
+
* @beta
|
|
38
|
+
*/
|
|
39
|
+
contour;
|
|
36
40
|
/** @internal */
|
|
37
41
|
transformFromIModel;
|
|
38
42
|
/** @internal */
|
|
@@ -51,17 +55,22 @@ var Pixel;
|
|
|
51
55
|
}
|
|
52
56
|
/** @internal */
|
|
53
57
|
constructor(args) {
|
|
54
|
-
if (args?.feature)
|
|
55
|
-
this.feature = new core_common_1.Feature(args.feature.elementId, args.feature.subCategoryId, args.feature.geometryClass);
|
|
56
|
-
this.modelId = args?.feature?.modelId;
|
|
57
58
|
this.distanceFraction = args?.distanceFraction ?? -1;
|
|
58
59
|
this.type = args?.type ?? GeometryType.Unknown;
|
|
59
60
|
this.planarity = args?.planarity ?? Planarity.Unknown;
|
|
60
|
-
this.iModel = args?.iModel;
|
|
61
|
-
this.tileId = args?.tileId;
|
|
62
|
-
this.viewAttachmentId = args?.viewAttachmentId;
|
|
63
61
|
this.inSectionDrawingAttachment = true === args?.inSectionDrawingAttachment;
|
|
64
|
-
|
|
62
|
+
if (!args) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (args.feature) {
|
|
66
|
+
this.feature = new core_common_1.Feature(args.feature.elementId, args.feature.subCategoryId, args.feature.geometryClass);
|
|
67
|
+
}
|
|
68
|
+
this.modelId = args.feature?.modelId;
|
|
69
|
+
this.iModel = args.iModel;
|
|
70
|
+
this.tileId = args.tileId;
|
|
71
|
+
this.viewAttachmentId = args.viewAttachmentId;
|
|
72
|
+
this.transformFromIModel = args.transformFromIModel;
|
|
73
|
+
this.contour = args.contour;
|
|
65
74
|
}
|
|
66
75
|
/** The Id of the element that produced the pixel. */
|
|
67
76
|
get elementId() {
|
|
@@ -126,6 +135,7 @@ var Pixel;
|
|
|
126
135
|
sourceIModel: this.iModel,
|
|
127
136
|
transformFromSourceIModel: this.transformFromIModel,
|
|
128
137
|
path,
|
|
138
|
+
contour: this.contour,
|
|
129
139
|
};
|
|
130
140
|
}
|
|
131
141
|
}
|
|
@@ -169,8 +179,10 @@ var Pixel;
|
|
|
169
179
|
Selector[Selector["Feature"] = 1] = "Feature";
|
|
170
180
|
/** Select the type and planarity of geometry which produced each pixel as well as the fraction of its distance between the near and far planes. */
|
|
171
181
|
Selector[Selector["GeometryAndDistance"] = 4] = "GeometryAndDistance";
|
|
182
|
+
/** Select the [[ContourHit]]s describing which if any contour line produced each pixel. */
|
|
183
|
+
Selector[Selector["Contours"] = 8] = "Contours";
|
|
172
184
|
/** Select all aspects of each pixel. */
|
|
173
|
-
Selector[Selector["All"] =
|
|
185
|
+
Selector[Selector["All"] = 13] = "All";
|
|
174
186
|
})(Selector = Pixel.Selector || (Pixel.Selector = {}));
|
|
175
187
|
})(Pixel || (exports.Pixel = Pixel = {}));
|
|
176
188
|
//# sourceMappingURL=Pixel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pixel.js","sourceRoot":"","sources":["../../../src/render/Pixel.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { BatchType, Feature, GeometryClass, ModelFeature } from \"@itwin/core-common\";\nimport { HitPath, HitPriority } from \"../HitDetail\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport type { Viewport } from \"../Viewport\";\nimport { Transform } from \"@itwin/core-geometry\";\n\n/** Describes aspects of a pixel as read from a [[Viewport]].\n * @see [[Viewport.readPixels]].\n * @public\n * @extensions\n */\nexport namespace Pixel {\n /** Describes a single pixel within a [[Pixel.Buffer]]. */\n export class Data {\n /** The feature that produced the pixel. */\n public readonly feature?: Feature;\n public readonly modelId?: Id64String;\n /** The pixel's depth in [[CoordSystem.Npc]] coordinates (0 to 1), or -1 if depth was not written or not requested. */\n public readonly distanceFraction: number;\n /** The type of geometry that produced the pixel. */\n public readonly type: GeometryType;\n /** The planarity of the geometry that produced the pixel. */\n public readonly planarity: Planarity;\n /** @internal */\n public readonly batchType?: BatchType;\n /** The iModel from which the geometry producing the pixel originated. */\n public readonly iModel?: IModelConnection;\n /** @internal */\n public readonly transformFromIModel?: Transform;\n /** @internal */\n public readonly tileId?: string;\n /** The Id of the [ViewAttachment]($backend), if any, from which the pixel originated.\n * @beta\n */\n public readonly viewAttachmentId?: Id64String;\n /** True if the pixel originated from a [[SpatialViewState]] attached via a [SectionDrawing]($backend).\n * @beta\n */\n public readonly inSectionDrawingAttachment: boolean;\n /** @internal */\n public get isClassifier(): boolean {\n return undefined !== this.batchType && BatchType.Primary !== this.batchType;\n }\n\n /** @internal */\n public constructor(args?: {\n feature?: ModelFeature;\n distanceFraction?: number;\n type?: GeometryType;\n planarity?: Planarity;\n batchType?: BatchType;\n iModel?: IModelConnection;\n tileId?: string;\n viewAttachmentId?: string;\n inSectionDrawingAttachment?: boolean;\n transformFromIModel?: Transform;\n }) {\n if (args?.feature)\n this.feature = new Feature(args.feature.elementId, args.feature.subCategoryId, args.feature.geometryClass);\n\n this.modelId = args?.feature?.modelId;\n this.distanceFraction = args?.distanceFraction ?? -1;\n this.type = args?.type ?? GeometryType.Unknown;\n this.planarity = args?.planarity ?? Planarity.Unknown;\n this.iModel = args?.iModel;\n this.tileId = args?.tileId;\n this.viewAttachmentId = args?.viewAttachmentId;\n this.inSectionDrawingAttachment = true === args?.inSectionDrawingAttachment;\n this.transformFromIModel = args?.transformFromIModel;\n }\n\n /** The Id of the element that produced the pixel. */\n public get elementId(): Id64String | undefined {\n return this.feature?.elementId;\n }\n\n /** The Id of the [SubCategory]($backend) that produced the pixel. */\n public get subCategoryId(): Id64String | undefined {\n return this.feature?.subCategoryId;\n }\n\n /** The class of geometry that produced the pixel. */\n public get geometryClass(): GeometryClass | undefined {\n return this.feature?.geometryClass;\n }\n\n /** Computes the [[HitPriority]] of this pixel based on its [[type]] and [[planarity]]. */\n public computeHitPriority(): HitPriority {\n switch (this.type) {\n case Pixel.GeometryType.Surface:\n return Pixel.Planarity.Planar === this.planarity ? HitPriority.PlanarSurface : HitPriority.NonPlanarSurface;\n case Pixel.GeometryType.Linear:\n return HitPriority.WireEdge;\n case Pixel.GeometryType.Edge:\n return Pixel.Planarity.Planar === this.planarity ? HitPriority.PlanarEdge : HitPriority.NonPlanarEdge;\n case Pixel.GeometryType.Silhouette:\n return HitPriority.SilhouetteEdge;\n default:\n return HitPriority.Unknown;\n }\n }\n\n /** Convert this pixel to a [[Pixel.HitProps]] suitable for constructing a [[HitDetail]].\n * @param viewport The viewport in which the hit originated.\n */\n public toHitProps(viewport: Viewport): Pixel.HitProps {\n let path: HitPath | undefined;\n if (this.viewAttachmentId) {\n const attachmentViewport = viewport.view.getAttachmentViewport({ viewAttachmentId: this.viewAttachmentId });\n if (attachmentViewport) {\n path = {\n viewAttachment: {\n viewport: attachmentViewport,\n id: this.viewAttachmentId,\n },\n };\n }\n }\n\n if (this.inSectionDrawingAttachment) {\n const checkVp = path?.viewAttachment?.viewport ?? viewport;\n const attachVp = checkVp.view.getAttachmentViewport({ inSectionDrawingAttachment: true });\n if (attachVp) {\n path = path ?? { };\n path.sectionDrawingAttachment = { viewport: attachVp };\n }\n }\n\n return {\n sourceId: this.elementId ?? Id64.invalid,\n priority: this.computeHitPriority(),\n distFraction: this.distanceFraction,\n subCategoryId: this.subCategoryId,\n geometryClass: this.geometryClass,\n modelId: this.modelId,\n tileId: this.tileId,\n isClassifier: this.isClassifier,\n sourceIModel: this.iModel,\n transformFromSourceIModel: this.transformFromIModel,\n path,\n };\n }\n }\n\n /** Describes a subset of [[HitDetailProps]] computed from a [[Pixel.Data]], suitable for constructing a [[HitDetail]].\n * For example, the following function creates a `HitDetail` from a `Pixel.Data` and other hit information:\n * ```ts\n * function makeHitDetail(pixel: Pixel.Data, viewport: ScreenViewport, testPoint: Point3d, hitSource: HitSource, hitPoint: Point3d, distXY: number): HitDetail {\n * return new HitDetail({\n * ...pixel.toHitProps(viewport),\n * viewport, testPoint, hitSource, hitPoint, distXY,\n * };\n * }\n * ```\n * @see [[Data.toHitProps]] to convert a [[Pixel.Data]] to a `HitProps`.\n * @public\n */\n export interface HitProps {\n /** The source of the geometry. This may be a persistent element Id, or a transient Id used for, e.g., pickable decorations. */\n sourceId: Id64String;\n /** The hit geometry priority/classification. */\n priority: HitPriority;\n /** The distance in view coordinates between the hit and the near plane. */\n distFraction: number;\n /** The [SubCategory]($backend) to which the hit geometry belongs. */\n subCategoryId?: Id64String;\n /** The class of the hit geometry. */\n geometryClass?: GeometryClass;\n /** The Id of the [[ModelState]] from which the hit originated. */\n modelId?: Id64String;\n /** The IModelConnection from which the hit originated.\n * This should almost always be left undefined, unless the hit is known to have originated from an iModel\n * other than the one associated with the viewport.\n * @internal\n */\n sourceIModel?: IModelConnection;\n /** @internal */\n transformFromSourceIModel?: Transform;\n /** @internal chiefly for debugging */\n tileId?: string;\n /** True if the hit originated from a reality model classifier.\n * @alpha\n */\n isClassifier?: boolean;\n /** Path through which the hit was located.\n * @beta\n */\n path?: HitPath;\n }\n\n /** Describes the type of geometry that produced the [[Pixel.Data]]. */\n export enum GeometryType {\n /** [[Pixel.Selector.GeometryAndDistance]] was not specified, or the type could not be determined. */\n Unknown, // Geometry was not selected, or type could not be determined\n /** No geometry was rendered to this pixel. */\n None,\n /** A surface produced this pixel. */\n Surface,\n /** A point primitive or polyline produced this pixel. */\n Linear,\n /** This pixel was produced by an edge of a surface. */\n Edge,\n /** This pixel was produced by a silhouette edge of a curved surface. */\n Silhouette,\n }\n\n /** Describes the planarity of the foremost geometry which produced the pixel. */\n export enum Planarity {\n /** [[Pixel.Selector.GeometryAndDistance]] was not specified, or the planarity could not be determined. */\n Unknown,\n /** No geometry was rendered to this pixel. */\n None,\n /** Planar geometry produced this pixel. */\n Planar,\n /** Non-planar geometry produced this pixel. */\n NonPlanar,\n }\n\n /**\n * Bit-mask by which callers of [[Viewport.readPixels]] specify which aspects are of interest.\n * Aspects not specified will be omitted from the returned data.\n */\n export enum Selector {\n None = 0,\n /** Select the [[Feature]] which produced each pixel. */\n Feature = 1 << 0, // eslint-disable-line @typescript-eslint/no-shadow\n /** Select the type and planarity of geometry which produced each pixel as well as the fraction of its distance between the near and far planes. */\n GeometryAndDistance = 1 << 2,\n /** Select all aspects of each pixel. */\n All = GeometryAndDistance | Feature,\n }\n\n /** A rectangular array of pixels as read from a [[Viewport]]'s frame buffer. Each pixel is represented as a [[Pixel.Data]] object.\n * The contents of the pixel buffer will be specified using device pixels, not CSS pixels. See [[Viewport.devicePixelRatio]] and [[Viewport.cssPixelsToDevicePixels]].\n * @see [[Viewport.readPixels]].\n */\n export interface Buffer {\n /** Retrieve the data associated with the pixel at (x,y) in view coordinates. */\n getPixel(x: number, y: number): Data;\n }\n\n /** A function which receives the results of a call to [[Viewport.readPixels]].\n * @note The contents of the buffer become invalid once the Receiver function returns. Do not store a reference to it.\n */\n export type Receiver = (pixels: Buffer | undefined) => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Pixel.js","sourceRoot":"","sources":["../../../src/render/Pixel.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAuD;AACvD,oDAAqF;AACrF,4CAAgE;AAKhE;;;;GAIG;AACH,IAAiB,KAAK,CA6PrB;AA7PD,WAAiB,KAAK;IACpB,0DAA0D;IAC1D,MAAa,IAAI;QACf,2CAA2C;QAC3B,OAAO,CAAW;QAClB,OAAO,CAAc;QACrC,sHAAsH;QACtG,gBAAgB,CAAS;QACzC,oDAAoD;QACpC,IAAI,CAAe;QACnC,6DAA6D;QAC7C,SAAS,CAAY;QACrC,gBAAgB;QACA,SAAS,CAAa;QACtC,yEAAyE;QACzD,MAAM,CAAoB;QAC5C;;aAEK;QACa,OAAO,CAAc;QACrC,gBAAgB;QACA,mBAAmB,CAAa;QAChD,gBAAgB;QACA,MAAM,CAAU;QAChC;;WAEG;QACa,gBAAgB,CAAc;QAC9C;;WAEG;QACa,0BAA0B,CAAU;QACpD,gBAAgB;QAChB,IAAW,YAAY;YACrB,OAAO,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,uBAAS,CAAC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC;QAC9E,CAAC;QAED,gBAAgB;QAChB,YAAmB,IAYlB;YACC,IAAI,CAAC,gBAAgB,GAAG,IAAI,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC;YACtD,IAAI,CAAC,0BAA0B,GAAG,IAAI,KAAK,IAAI,EAAE,0BAA0B,CAAC;YAE5E,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,GAAG,IAAI,qBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC7G,CAAC;YAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC9C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,CAAC;QAED,qDAAqD;QACrD,IAAW,SAAS;YAClB,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACjC,CAAC;QAED,qEAAqE;QACrE,IAAW,aAAa;YACtB,OAAO,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QACrC,CAAC;QAED,qDAAqD;QACrD,IAAW,aAAa;YACtB,OAAO,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QACrC,CAAC;QAED,0FAA0F;QACnF,kBAAkB;YACvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,KAAK,CAAC,YAAY,CAAC,OAAO;oBAC7B,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAW,CAAC,aAAa,CAAC,CAAC,CAAC,uBAAW,CAAC,gBAAgB,CAAC;gBAC9G,KAAK,KAAK,CAAC,YAAY,CAAC,MAAM;oBAC5B,OAAO,uBAAW,CAAC,QAAQ,CAAC;gBAC9B,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI;oBAC1B,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAW,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAW,CAAC,aAAa,CAAC;gBACxG,KAAK,KAAK,CAAC,YAAY,CAAC,UAAU;oBAChC,OAAO,uBAAW,CAAC,cAAc,CAAC;gBACpC;oBACE,OAAO,uBAAW,CAAC,OAAO,CAAC;YAC/B,CAAC;QACH,CAAC;QAED;;WAEG;QACI,UAAU,CAAC,QAAkB;YAClC,IAAI,IAAyB,CAAC;YAC9B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC5G,IAAI,kBAAkB,EAAE,CAAC;oBACvB,IAAI,GAAG;wBACL,cAAc,EAAE;4BACd,QAAQ,EAAE,kBAAkB;4BAC5B,EAAE,EAAE,IAAI,CAAC,gBAAgB;yBAC1B;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,IAAI,EAAE,cAAc,EAAE,QAAQ,IAAI,QAAQ,CAAC;gBAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1F,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,GAAG,IAAI,IAAI,EAAG,CAAC;oBACnB,IAAI,CAAC,wBAAwB,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;gBACzD,CAAC;YACH,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,mBAAI,CAAC,OAAO;gBACxC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBACnC,YAAY,EAAE,IAAI,CAAC,gBAAgB;gBACnC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,YAAY,EAAE,IAAI,CAAC,MAAM;gBACzB,yBAAyB,EAAE,IAAI,CAAC,mBAAmB;gBACnD,IAAI;gBACJ,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC;QACJ,CAAC;KACF;IA9IY,UAAI,OA8IhB,CAAA;IAoDD,uEAAuE;IACvE,IAAY,YAaX;IAbD,WAAY,YAAY;QACtB,qGAAqG;QACrG,qDAAO,CAAA;QACP,8CAA8C;QAC9C,+CAAI,CAAA;QACJ,qCAAqC;QACrC,qDAAO,CAAA;QACP,yDAAyD;QACzD,mDAAM,CAAA;QACN,uDAAuD;QACvD,+CAAI,CAAA;QACJ,wEAAwE;QACxE,2DAAU,CAAA;IACZ,CAAC,EAbW,YAAY,GAAZ,kBAAY,KAAZ,kBAAY,QAavB;IAED,iFAAiF;IACjF,IAAY,SASX;IATD,WAAY,SAAS;QACnB,0GAA0G;QAC1G,+CAAO,CAAA;QACP,8CAA8C;QAC9C,yCAAI,CAAA;QACJ,2CAA2C;QAC3C,6CAAM,CAAA;QACN,+CAA+C;QAC/C,mDAAS,CAAA;IACX,CAAC,EATW,SAAS,GAAT,eAAS,KAAT,eAAS,QASpB;IAED;;;OAGG;IACH,IAAY,QAUX;IAVD,WAAY,QAAQ;QAClB,uCAAQ,CAAA;QACR,wDAAwD;QACxD,6CAAgB,CAAA;QAChB,mJAAmJ;QACnJ,qEAA4B,CAAA;QAC5B,2FAA2F;QAC3F,+CAAiB,CAAA;QACjB,wCAAwC;QACxC,sCAA8C,CAAA;IAChD,CAAC,EAVW,QAAQ,GAAR,cAAQ,KAAR,cAAQ,QAUnB;AAeH,CAAC,EA7PgB,KAAK,qBAAL,KAAK,QA6PrB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { BatchType, Feature, GeometryClass, ModelFeature } from \"@itwin/core-common\";\nimport { ContourHit, HitPath, HitPriority } from \"../HitDetail\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport type { Viewport } from \"../Viewport\";\nimport { Transform } from \"@itwin/core-geometry\";\n\n/** Describes aspects of a pixel as read from a [[Viewport]].\n * @see [[Viewport.readPixels]].\n * @public\n * @extensions\n */\nexport namespace Pixel {\n /** Describes a single pixel within a [[Pixel.Buffer]]. */\n export class Data {\n /** The feature that produced the pixel. */\n public readonly feature?: Feature;\n public readonly modelId?: Id64String;\n /** The pixel's depth in [[CoordSystem.Npc]] coordinates (0 to 1), or -1 if depth was not written or not requested. */\n public readonly distanceFraction: number;\n /** The type of geometry that produced the pixel. */\n public readonly type: GeometryType;\n /** The planarity of the geometry that produced the pixel. */\n public readonly planarity: Planarity;\n /** @internal */\n public readonly batchType?: BatchType;\n /** The iModel from which the geometry producing the pixel originated. */\n public readonly iModel?: IModelConnection;\n /** Information about the [contour line]($docs/learning/display/ContourDisplay.md), if any, that generated this pixel.\n * @beta\n */\n public readonly contour?: ContourHit;\n /** @internal */\n public readonly transformFromIModel?: Transform;\n /** @internal */\n public readonly tileId?: string;\n /** The Id of the [ViewAttachment]($backend), if any, from which the pixel originated.\n * @beta\n */\n public readonly viewAttachmentId?: Id64String;\n /** True if the pixel originated from a [[SpatialViewState]] attached via a [SectionDrawing]($backend).\n * @beta\n */\n public readonly inSectionDrawingAttachment: boolean;\n /** @internal */\n public get isClassifier(): boolean {\n return undefined !== this.batchType && BatchType.Primary !== this.batchType;\n }\n\n /** @internal */\n public constructor(args?: {\n feature?: ModelFeature;\n distanceFraction?: number;\n type?: GeometryType;\n planarity?: Planarity;\n batchType?: BatchType;\n iModel?: IModelConnection;\n tileId?: string;\n viewAttachmentId?: string;\n inSectionDrawingAttachment?: boolean;\n transformFromIModel?: Transform;\n contour?: ContourHit;\n }) {\n this.distanceFraction = args?.distanceFraction ?? -1;\n this.type = args?.type ?? GeometryType.Unknown;\n this.planarity = args?.planarity ?? Planarity.Unknown;\n this.inSectionDrawingAttachment = true === args?.inSectionDrawingAttachment;\n\n if (!args) {\n return;\n }\n\n if (args.feature) {\n this.feature = new Feature(args.feature.elementId, args.feature.subCategoryId, args.feature.geometryClass);\n }\n\n this.modelId = args.feature?.modelId;\n this.iModel = args.iModel;\n this.tileId = args.tileId;\n this.viewAttachmentId = args.viewAttachmentId;\n this.transformFromIModel = args.transformFromIModel;\n this.contour = args.contour;\n }\n\n /** The Id of the element that produced the pixel. */\n public get elementId(): Id64String | undefined {\n return this.feature?.elementId;\n }\n\n /** The Id of the [SubCategory]($backend) that produced the pixel. */\n public get subCategoryId(): Id64String | undefined {\n return this.feature?.subCategoryId;\n }\n\n /** The class of geometry that produced the pixel. */\n public get geometryClass(): GeometryClass | undefined {\n return this.feature?.geometryClass;\n }\n\n /** Computes the [[HitPriority]] of this pixel based on its [[type]] and [[planarity]]. */\n public computeHitPriority(): HitPriority {\n switch (this.type) {\n case Pixel.GeometryType.Surface:\n return Pixel.Planarity.Planar === this.planarity ? HitPriority.PlanarSurface : HitPriority.NonPlanarSurface;\n case Pixel.GeometryType.Linear:\n return HitPriority.WireEdge;\n case Pixel.GeometryType.Edge:\n return Pixel.Planarity.Planar === this.planarity ? HitPriority.PlanarEdge : HitPriority.NonPlanarEdge;\n case Pixel.GeometryType.Silhouette:\n return HitPriority.SilhouetteEdge;\n default:\n return HitPriority.Unknown;\n }\n }\n\n /** Convert this pixel to a [[Pixel.HitProps]] suitable for constructing a [[HitDetail]].\n * @param viewport The viewport in which the hit originated.\n */\n public toHitProps(viewport: Viewport): Pixel.HitProps {\n let path: HitPath | undefined;\n if (this.viewAttachmentId) {\n const attachmentViewport = viewport.view.getAttachmentViewport({ viewAttachmentId: this.viewAttachmentId });\n if (attachmentViewport) {\n path = {\n viewAttachment: {\n viewport: attachmentViewport,\n id: this.viewAttachmentId,\n },\n };\n }\n }\n\n if (this.inSectionDrawingAttachment) {\n const checkVp = path?.viewAttachment?.viewport ?? viewport;\n const attachVp = checkVp.view.getAttachmentViewport({ inSectionDrawingAttachment: true });\n if (attachVp) {\n path = path ?? { };\n path.sectionDrawingAttachment = { viewport: attachVp };\n }\n }\n\n return {\n sourceId: this.elementId ?? Id64.invalid,\n priority: this.computeHitPriority(),\n distFraction: this.distanceFraction,\n subCategoryId: this.subCategoryId,\n geometryClass: this.geometryClass,\n modelId: this.modelId,\n tileId: this.tileId,\n isClassifier: this.isClassifier,\n sourceIModel: this.iModel,\n transformFromSourceIModel: this.transformFromIModel,\n path,\n contour: this.contour,\n };\n }\n }\n\n /** Describes a subset of [[HitDetailProps]] computed from a [[Pixel.Data]], suitable for constructing a [[HitDetail]].\n * For example, the following function creates a `HitDetail` from a `Pixel.Data` and other hit information:\n * ```ts\n * function makeHitDetail(pixel: Pixel.Data, viewport: ScreenViewport, testPoint: Point3d, hitSource: HitSource, hitPoint: Point3d, distXY: number): HitDetail {\n * return new HitDetail({\n * ...pixel.toHitProps(viewport),\n * viewport, testPoint, hitSource, hitPoint, distXY,\n * };\n * }\n * ```\n * @see [[Data.toHitProps]] to convert a [[Pixel.Data]] to a `HitProps`.\n * @public\n */\n export interface HitProps {\n /** The source of the geometry. This may be a persistent element Id, or a transient Id used for, e.g., pickable decorations. */\n sourceId: Id64String;\n /** The hit geometry priority/classification. */\n priority: HitPriority;\n /** The distance in view coordinates between the hit and the near plane. */\n distFraction: number;\n /** The [SubCategory]($backend) to which the hit geometry belongs. */\n subCategoryId?: Id64String;\n /** The class of the hit geometry. */\n geometryClass?: GeometryClass;\n /** The Id of the [[ModelState]] from which the hit originated. */\n modelId?: Id64String;\n /** The IModelConnection from which the hit originated.\n * This should almost always be left undefined, unless the hit is known to have originated from an iModel\n * other than the one associated with the viewport.\n * @internal\n */\n sourceIModel?: IModelConnection;\n /** @internal */\n transformFromSourceIModel?: Transform;\n /** @internal chiefly for debugging */\n tileId?: string;\n /** True if the hit originated from a reality model classifier.\n * @alpha\n */\n isClassifier?: boolean;\n /** Path through which the hit was located.\n * @beta\n */\n path?: HitPath;\n /** Information about the [contour line]($docs/learning/display/ContourDisplay.md), if any, from which the hit originated.\n * @beta\n */\n contour?: ContourHit;\n }\n\n /** Describes the type of geometry that produced the [[Pixel.Data]]. */\n export enum GeometryType {\n /** [[Pixel.Selector.GeometryAndDistance]] was not specified, or the type could not be determined. */\n Unknown, // Geometry was not selected, or type could not be determined\n /** No geometry was rendered to this pixel. */\n None,\n /** A surface produced this pixel. */\n Surface,\n /** A point primitive or polyline produced this pixel. */\n Linear,\n /** This pixel was produced by an edge of a surface. */\n Edge,\n /** This pixel was produced by a silhouette edge of a curved surface. */\n Silhouette,\n }\n\n /** Describes the planarity of the foremost geometry which produced the pixel. */\n export enum Planarity {\n /** [[Pixel.Selector.GeometryAndDistance]] was not specified, or the planarity could not be determined. */\n Unknown,\n /** No geometry was rendered to this pixel. */\n None,\n /** Planar geometry produced this pixel. */\n Planar,\n /** Non-planar geometry produced this pixel. */\n NonPlanar,\n }\n\n /**\n * Bit-mask by which callers of [[Viewport.readPixels]] specify which aspects are of interest.\n * Aspects not specified will be omitted from the returned data.\n */\n export enum Selector {\n None = 0,\n /** Select the [[Feature]] which produced each pixel. */\n Feature = 1 << 0, // eslint-disable-line @typescript-eslint/no-shadow\n /** Select the type and planarity of geometry which produced each pixel as well as the fraction of its distance between the near and far planes. */\n GeometryAndDistance = 1 << 2,\n /** Select the [[ContourHit]]s describing which if any contour line produced each pixel. */\n Contours = 1 << 3,\n /** Select all aspects of each pixel. */\n All = GeometryAndDistance | Feature | Contours,\n }\n\n /** A rectangular array of pixels as read from a [[Viewport]]'s frame buffer. Each pixel is represented as a [[Pixel.Data]] object.\n * The contents of the pixel buffer will be specified using device pixels, not CSS pixels. See [[Viewport.devicePixelRatio]] and [[Viewport.cssPixelsToDevicePixels]].\n * @see [[Viewport.readPixels]].\n */\n export interface Buffer {\n /** Retrieve the data associated with the pixel at (x,y) in view coordinates. */\n getPixel(x: number, y: number): Data;\n }\n\n /** A function which receives the results of a call to [[Viewport.readPixels]].\n * @note The contents of the buffer become invalid once the Receiver function returns. Do not store a reference to it.\n */\n export type Receiver = (pixels: Buffer | undefined) => void;\n}\n"]}
|