@itwin/core-frontend 4.0.0-dev.4 → 4.0.0-dev.40
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 +67 -37
- package/lib/cjs/AccuDraw.js +1 -1
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.js +3 -3
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +9 -11
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/DisplayStyleState.js +8 -12
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/DrawingViewState.js +4 -6
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +2 -0
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/EnvironmentDecorations.js +2 -3
- package/lib/cjs/EnvironmentDecorations.js.map +1 -1
- package/lib/cjs/FlashSettings.js +3 -4
- package/lib/cjs/FlashSettings.js.map +1 -1
- package/lib/cjs/GeoServices.d.ts +57 -5
- package/lib/cjs/GeoServices.d.ts.map +1 -1
- package/lib/cjs/GeoServices.js +180 -155
- package/lib/cjs/GeoServices.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +1 -3
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +20 -24
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +1 -1
- package/lib/cjs/IModelConnection.js +2 -2
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.js +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +3 -4
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/ModelState.js +2 -3
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +1 -1
- package/lib/cjs/NativeApp.js +4 -7
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NoRenderApp.d.ts +11 -4
- package/lib/cjs/NoRenderApp.d.ts.map +1 -1
- package/lib/cjs/NoRenderApp.js +14 -8
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/PlanarClipMaskState.js +1 -1
- package/lib/cjs/PlanarClipMaskState.js.map +1 -1
- package/lib/cjs/RealityDataSourceContextShareImpl.js +2 -4
- package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
- package/lib/cjs/SelectionSet.d.ts +0 -1
- package/lib/cjs/SelectionSet.d.ts.map +1 -1
- package/lib/cjs/SelectionSet.js +0 -1
- package/lib/cjs/SelectionSet.js.map +1 -1
- package/lib/cjs/SheetViewState.js +15 -23
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/Tiles.js +2 -2
- package/lib/cjs/Tiles.js.map +1 -1
- package/lib/cjs/ViewContext.js +1 -1
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewCreator2d.js +4 -5
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewCreator3d.js +5 -5
- package/lib/cjs/ViewCreator3d.js.map +1 -1
- package/lib/cjs/ViewRect.d.ts +1 -1
- package/lib/cjs/ViewRect.d.ts.map +1 -1
- package/lib/cjs/ViewRect.js +1 -1
- package/lib/cjs/ViewRect.js.map +1 -1
- package/lib/cjs/ViewState.js +17 -24
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.js +23 -33
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/extension/ExtensionImpl.js +1 -1
- package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +7 -9
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/render/FeatureSymbology.js +1 -2
- package/lib/cjs/render/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/GraphicBuilder.js +7 -9
- package/lib/cjs/render/GraphicBuilder.js.map +1 -1
- package/lib/cjs/render/MockRender.js +1 -2
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/ParticleCollectionBuilder.js +2 -3
- package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/cjs/render/RealityMeshParams.d.ts +2 -2
- package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/render/RealityMeshParams.js +8 -11
- package/lib/cjs/render/RealityMeshParams.js.map +1 -1
- package/lib/cjs/render/RenderPlan.js +1 -1
- package/lib/cjs/render/RenderPlan.js.map +1 -1
- package/lib/cjs/render/RenderSystem.js +1 -2
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/VisibleFeature.js +2 -4
- package/lib/cjs/render/VisibleFeature.js.map +1 -1
- package/lib/cjs/render/primitives/AuxChannelTable.js +6 -9
- package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.js +6 -7
- package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
- package/lib/cjs/render/primitives/PolylineParams.js +2 -3
- package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
- package/lib/cjs/render/primitives/VertexKey.js +1 -1
- package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.js +1 -1
- package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTableSplitter.js +6 -8
- package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +9 -11
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +3 -5
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +2 -3
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +9 -10
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/EDL.js +17 -21
- package/lib/cjs/render/webgl/EDL.js.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.js +2 -2
- package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +3 -5
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +1 -1
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +2 -3
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/Mesh.js +7 -10
- package/lib/cjs/render/webgl/Mesh.js.map +1 -1
- package/lib/cjs/render/webgl/MeshData.js +1 -2
- package/lib/cjs/render/webgl/MeshData.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +10 -15
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +5 -8
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.js +3 -4
- package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +7 -8
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +7 -9
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +1 -2
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +1 -11
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +0 -1
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +12 -17
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.js +9 -14
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/TargetGraphics.js +1 -2
- package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/cjs/render/webgl/Texture.js +1 -2
- package/lib/cjs/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/render/webgl/ThematicSensors.js +2 -4
- package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
- package/lib/cjs/render/webgl/VisibleTileFeatures.js +1 -2
- package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.js +6 -9
- package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +1 -2
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Instancing.js +4 -5
- package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +2 -4
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +1 -2
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.js +1 -2
- package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/cjs/request/Request.d.ts.map +1 -1
- package/lib/cjs/request/Request.js.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.js +3 -3
- package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/tile/GltfReader.js +62 -76
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/IModelTile.js +2 -3
- package/lib/cjs/tile/IModelTile.js.map +1 -1
- package/lib/cjs/tile/IModelTileRequestChannels.js +6 -11
- package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
- package/lib/cjs/tile/IModelTileTree.js +5 -9
- package/lib/cjs/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +13 -17
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.js +2 -2
- package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/tile/PntsReader.js +4 -5
- package/lib/cjs/tile/PntsReader.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +22 -32
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +12 -19
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts +1 -1
- package/lib/cjs/tile/RealityTile.js +4 -6
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +2 -2
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +2 -3
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +3 -5
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/cjs/tile/Tile.js +1 -1
- package/lib/cjs/tile/Tile.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.d.ts +5 -1
- package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +22 -27
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +3 -6
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileRequest.d.ts.map +1 -1
- package/lib/cjs/tile/TileRequest.js +2 -1
- package/lib/cjs/tile/TileRequest.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannel.d.ts +23 -1
- package/lib/cjs/tile/TileRequestChannel.d.ts.map +1 -1
- package/lib/cjs/tile/TileRequestChannel.js +28 -7
- package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannels.js +1 -1
- package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
- package/lib/cjs/tile/TileTree.js +2 -3
- package/lib/cjs/tile/TileTree.js.map +1 -1
- package/lib/cjs/tile/TiledGraphicsProvider.js +1 -1
- package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +5 -6
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +6 -8
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts +11 -3
- package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/EllipsoidTerrainProvider.js +17 -5
- package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -9
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +10 -5
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapCartoRectangle.d.ts +1 -1
- package/lib/cjs/tile/map/MapCartoRectangle.js +2 -2
- package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +5 -6
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +11 -14
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -3
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +10 -2
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +34 -12
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +3 -2
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +24 -26
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +6 -7
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.d.ts +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/cjs/tile/map/QuadId.d.ts +1 -1
- package/lib/cjs/tile/map/QuadId.js +1 -1
- package/lib/cjs/tile/map/QuadId.js.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +9 -4
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.js +6 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/cjs/tile/map/TerrainProvider.d.ts +2 -2
- package/lib/cjs/tile/map/TerrainProvider.js +1 -1
- package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +4 -5
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +17 -25
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +1 -1
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +2 -4
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/cjs/tools/PrimitiveTool.js +2 -3
- package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
- package/lib/cjs/tools/SelectTool.js +1 -2
- package/lib/cjs/tools/SelectTool.js.map +1 -1
- package/lib/cjs/tools/Tool.js +2 -3
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +2 -4
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ViewTool.js +3 -3
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuDraw.js +1 -1
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.js +3 -3
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/BriefcaseConnection.js +9 -11
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/DisplayStyleState.js +8 -12
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/DrawingViewState.js +4 -6
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +2 -0
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/EnvironmentDecorations.js +2 -3
- package/lib/esm/EnvironmentDecorations.js.map +1 -1
- package/lib/esm/FlashSettings.js +3 -4
- package/lib/esm/FlashSettings.js.map +1 -1
- package/lib/esm/GeoServices.d.ts +57 -5
- package/lib/esm/GeoServices.d.ts.map +1 -1
- package/lib/esm/GeoServices.js +178 -154
- package/lib/esm/GeoServices.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +1 -3
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +20 -24
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +1 -1
- package/lib/esm/IModelConnection.js +2 -2
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.js +1 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +3 -4
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/ModelState.js +2 -3
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +1 -1
- package/lib/esm/NativeApp.js +4 -7
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NoRenderApp.d.ts +11 -4
- package/lib/esm/NoRenderApp.d.ts.map +1 -1
- package/lib/esm/NoRenderApp.js +12 -6
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/PlanarClipMaskState.js +1 -1
- package/lib/esm/PlanarClipMaskState.js.map +1 -1
- package/lib/esm/RealityDataSourceContextShareImpl.js +2 -4
- package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
- package/lib/esm/SelectionSet.d.ts +0 -1
- package/lib/esm/SelectionSet.d.ts.map +1 -1
- package/lib/esm/SelectionSet.js +0 -1
- package/lib/esm/SelectionSet.js.map +1 -1
- package/lib/esm/SheetViewState.js +15 -23
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/Tiles.js +2 -2
- package/lib/esm/Tiles.js.map +1 -1
- package/lib/esm/ViewContext.js +1 -1
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewCreator2d.js +4 -5
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewCreator3d.js +5 -5
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/ViewRect.d.ts +1 -1
- package/lib/esm/ViewRect.d.ts.map +1 -1
- package/lib/esm/ViewRect.js +1 -1
- package/lib/esm/ViewRect.js.map +1 -1
- package/lib/esm/ViewState.js +17 -24
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.js +23 -33
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/extension/ExtensionImpl.js +1 -1
- package/lib/esm/extension/ExtensionImpl.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +7 -9
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/render/FeatureSymbology.js +1 -2
- package/lib/esm/render/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/GraphicBuilder.js +7 -9
- package/lib/esm/render/GraphicBuilder.js.map +1 -1
- package/lib/esm/render/MockRender.js +1 -2
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/ParticleCollectionBuilder.js +2 -3
- package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/esm/render/RealityMeshParams.d.ts +2 -2
- package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/esm/render/RealityMeshParams.js +8 -11
- package/lib/esm/render/RealityMeshParams.js.map +1 -1
- package/lib/esm/render/RenderPlan.js +1 -1
- package/lib/esm/render/RenderPlan.js.map +1 -1
- package/lib/esm/render/RenderSystem.js +1 -2
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/VisibleFeature.js +2 -4
- package/lib/esm/render/VisibleFeature.js.map +1 -1
- package/lib/esm/render/primitives/AuxChannelTable.js +6 -9
- package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.js +6 -7
- package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
- package/lib/esm/render/primitives/PolylineParams.js +2 -3
- package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
- package/lib/esm/render/primitives/VertexKey.js +1 -1
- package/lib/esm/render/primitives/VertexKey.js.map +1 -1
- package/lib/esm/render/primitives/VertexTable.js +1 -1
- package/lib/esm/render/primitives/VertexTable.js.map +1 -1
- package/lib/esm/render/primitives/VertexTableSplitter.js +6 -8
- package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +9 -11
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +3 -5
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.js +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js +2 -3
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +9 -10
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/EDL.js +17 -21
- package/lib/esm/render/webgl/EDL.js.map +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.js +2 -2
- package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +3 -5
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/IndexedEdgeGeometry.js +1 -1
- package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.js +2 -3
- package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/Mesh.js +7 -10
- package/lib/esm/render/webgl/Mesh.js.map +1 -1
- package/lib/esm/render/webgl/MeshData.js +1 -2
- package/lib/esm/render/webgl/MeshData.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +10 -15
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +5 -8
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.js +3 -4
- package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +7 -8
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +7 -9
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +1 -2
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +1 -11
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +0 -1
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +12 -17
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.js +9 -14
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/TargetGraphics.js +1 -2
- package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/esm/render/webgl/Texture.js +1 -2
- package/lib/esm/render/webgl/Texture.js.map +1 -1
- package/lib/esm/render/webgl/ThematicSensors.js +2 -4
- package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
- package/lib/esm/render/webgl/VisibleTileFeatures.js +1 -2
- package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Animation.js +6 -9
- package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -2
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Instancing.js +4 -5
- package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +2 -4
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +1 -2
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.js +1 -2
- package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/esm/request/Request.d.ts.map +1 -1
- package/lib/esm/request/Request.js.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.js +3 -3
- package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
- package/lib/esm/tile/GltfReader.js +62 -76
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/IModelTile.js +2 -3
- package/lib/esm/tile/IModelTile.js.map +1 -1
- package/lib/esm/tile/IModelTileRequestChannels.js +6 -11
- package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
- package/lib/esm/tile/IModelTileTree.js +5 -9
- package/lib/esm/tile/IModelTileTree.js.map +1 -1
- package/lib/esm/tile/ImdlReader.js +13 -17
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.js +2 -2
- package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/tile/PntsReader.js +4 -5
- package/lib/esm/tile/PntsReader.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +22 -32
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +12 -19
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts +1 -1
- package/lib/esm/tile/RealityTile.js +4 -6
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +2 -2
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +2 -3
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js +3 -5
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/tile/Tile.js +1 -1
- package/lib/esm/tile/Tile.js.map +1 -1
- package/lib/esm/tile/TileAdmin.d.ts +5 -1
- package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +22 -27
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +3 -6
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileRequest.d.ts.map +1 -1
- package/lib/esm/tile/TileRequest.js +2 -1
- package/lib/esm/tile/TileRequest.js.map +1 -1
- package/lib/esm/tile/TileRequestChannel.d.ts +23 -1
- package/lib/esm/tile/TileRequestChannel.d.ts.map +1 -1
- package/lib/esm/tile/TileRequestChannel.js +28 -7
- package/lib/esm/tile/TileRequestChannel.js.map +1 -1
- package/lib/esm/tile/TileRequestChannels.js +1 -1
- package/lib/esm/tile/TileRequestChannels.js.map +1 -1
- package/lib/esm/tile/TileTree.js +2 -3
- package/lib/esm/tile/TileTree.js.map +1 -1
- package/lib/esm/tile/TiledGraphicsProvider.js +1 -1
- package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +5 -6
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +6 -8
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts +11 -3
- package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/EllipsoidTerrainProvider.js +17 -5
- package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -9
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +10 -5
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapCartoRectangle.d.ts +1 -1
- package/lib/esm/tile/map/MapCartoRectangle.js +2 -2
- package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +5 -6
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +11 -14
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -3
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +1 -1
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +10 -2
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +34 -12
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.js +1 -1
- package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +3 -2
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +24 -26
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +6 -7
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.d.ts +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/esm/tile/map/QuadId.d.ts +1 -1
- package/lib/esm/tile/map/QuadId.js +1 -1
- package/lib/esm/tile/map/QuadId.js.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts +9 -4
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.js +6 -1
- package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/esm/tile/map/TerrainProvider.d.ts +2 -2
- package/lib/esm/tile/map/TerrainProvider.js +1 -1
- package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +4 -5
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +17 -25
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +1 -1
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.js +2 -4
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/esm/tools/PrimitiveTool.js +2 -3
- package/lib/esm/tools/PrimitiveTool.js.map +1 -1
- package/lib/esm/tools/SelectTool.js +1 -2
- package/lib/esm/tools/SelectTool.js.map +1 -1
- package/lib/esm/tools/Tool.js +2 -3
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +2 -4
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ViewTool.js +3 -3
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/package.json +24 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawingViewState.js","sourceRoot":"","sources":["../../src/DrawingViewState.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 Views\r\n */\r\n\r\nimport { assert, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n AxisAlignedBox3d, Frustum, HydrateViewStateRequestProps, HydrateViewStateResponseProps, QueryRowFormat, SectionDrawingViewProps, ViewDefinition2dProps, ViewFlagOverrides, ViewStateProps,\r\n} from \"@itwin/core-common\";\r\nimport { Constant, Range3d, Transform, TransformProps, Vector3d } from \"@itwin/core-geometry\";\r\nimport { CategorySelectorState } from \"./CategorySelectorState\";\r\nimport { CoordSystem } from \"./CoordSystem\";\r\nimport { DisplayStyle2dState } from \"./DisplayStyleState\";\r\nimport { Frustum2d } from \"./Frustum2d\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\r\nimport { GraphicBranch, GraphicBranchOptions } from \"./render/GraphicBranch\";\r\nimport { MockRender } from \"./render/MockRender\";\r\nimport { RenderGraphic } from \"./render/RenderGraphic\";\r\nimport { Scene } from \"./render/Scene\";\r\nimport { DisclosedTileTreeSet, TileGraphicType } from \"./tile/internal\";\r\nimport { SceneContext } from \"./ViewContext\";\r\nimport { OffScreenViewport } from \"./Viewport\";\r\nimport { ViewRect } from \"./ViewRect\";\r\nimport { AttachToViewportArgs, ExtentLimits, ViewState2d, ViewState3d } from \"./ViewState\";\r\n\r\n/** Strictly for testing.\r\n * @internal\r\n */\r\nexport interface SectionDrawingInfo {\r\n readonly spatialView: Id64String;\r\n readonly drawingToSpatialTransform: Transform;\r\n}\r\n\r\n/** The information required to instantiate a [[SectionAttachment]]. This information is supplied to DrawingViewState constructor via ViewStateProps.\r\n * The spatial view is obtained asynchronously in DrawingViewState.load(). The SectionAttachment is created in DrawingViewState.attachToViewport and\r\n * disposed of in DrawingViewState.detachFromViewport.\r\n */\r\nclass SectionAttachmentInfo {\r\n private _spatialView: Id64String | ViewState3d;\r\n private readonly _drawingToSpatialTransform: Transform;\r\n private readonly _displaySpatialView: boolean;\r\n\r\n public get spatialView(): Id64String | ViewState3d { return this._spatialView; }\r\n public get wantDisplayed(): boolean {\r\n return this._displaySpatialView || DrawingViewState.alwaysDisplaySpatialView;\r\n }\r\n\r\n private constructor(spatialView: Id64String | ViewState3d, drawingToSpatialTransform: Transform, displaySpatialView: boolean) {\r\n this._spatialView = spatialView;\r\n this._drawingToSpatialTransform = drawingToSpatialTransform;\r\n this._displaySpatialView = displaySpatialView;\r\n }\r\n\r\n public static fromJSON(props?: SectionDrawingViewProps): SectionAttachmentInfo {\r\n if (!props)\r\n return new SectionAttachmentInfo(Id64.invalid, Transform.createIdentity(), false);\r\n\r\n return new SectionAttachmentInfo(props.spatialView, Transform.fromJSON(props.drawingToSpatialTransform), true === props.displaySpatialView);\r\n }\r\n\r\n public toJSON(): SectionDrawingViewProps | undefined {\r\n if (\"string\" === typeof this._spatialView && !Id64.isValidId64(this._spatialView))\r\n return undefined;\r\n\r\n return {\r\n spatialView: (this._spatialView instanceof ViewState3d) ? this._spatialView.id : this._spatialView,\r\n drawingToSpatialTransform: this._drawingToSpatialTransform.isIdentity ? undefined : this._drawingToSpatialTransform.toJSON(),\r\n displaySpatialView: this._displaySpatialView,\r\n };\r\n }\r\n\r\n public clone(): SectionAttachmentInfo {\r\n return new SectionAttachmentInfo(this._spatialView, this._drawingToSpatialTransform, this._displaySpatialView);\r\n }\r\n\r\n public preload(options: HydrateViewStateRequestProps): void {\r\n if (!this.wantDisplayed)\r\n return;\r\n\r\n if (this._spatialView instanceof ViewState3d)\r\n return;\r\n\r\n if (!Id64.isValidId64(this._spatialView))\r\n return;\r\n\r\n options.spatialViewId = this._spatialView;\r\n options.viewStateLoadProps = {\r\n displayStyle: {\r\n omitScheduleScriptElementIds: !IModelApp.tileAdmin.enableFrontendScheduleScripts,\r\n compressExcludedElementIds: true,\r\n },\r\n };\r\n }\r\n\r\n public async load(iModel: IModelConnection): Promise<void> {\r\n if (!this.wantDisplayed)\r\n return;\r\n\r\n if (this._spatialView instanceof ViewState3d)\r\n return;\r\n\r\n if (!Id64.isValidId64(this._spatialView))\r\n return;\r\n\r\n const spatialView = await iModel.views.load(this._spatialView);\r\n if (spatialView instanceof ViewState3d)\r\n this._spatialView = spatialView;\r\n }\r\n\r\n public async postload(options: HydrateViewStateResponseProps, iModel: IModelConnection): Promise<void> {\r\n let spatialView;\r\n if (options.spatialViewProps) {\r\n spatialView = await iModel.views.convertViewStatePropsToViewState(options.spatialViewProps);\r\n }\r\n\r\n if (spatialView instanceof ViewState3d)\r\n this._spatialView = spatialView;\r\n }\r\n\r\n public createAttachment(toSheet: Transform | undefined): SectionAttachment | undefined {\r\n if (!this.wantDisplayed || !(this._spatialView instanceof ViewState3d))\r\n return undefined;\r\n\r\n const spatialToDrawing = this._drawingToSpatialTransform.inverse();\r\n return spatialToDrawing ? new SectionAttachment(this._spatialView, spatialToDrawing, this._drawingToSpatialTransform, toSheet) : undefined;\r\n }\r\n\r\n public get sectionDrawingInfo(): SectionDrawingInfo {\r\n return {\r\n drawingToSpatialTransform: this._drawingToSpatialTransform,\r\n spatialView: this._spatialView instanceof ViewState3d ? this._spatialView.id : this._spatialView,\r\n };\r\n }\r\n}\r\n\r\n/** A mostly no-op [[RenderTarget]] for a [[SectionAttachment]]. It allocates no webgl resources. */\r\nclass SectionTarget extends MockRender.OffScreenTarget {\r\n private readonly _attachment: SectionAttachment;\r\n\r\n public constructor(attachment: SectionAttachment) {\r\n super(IModelApp.renderSystem, new ViewRect(0, 0, 1, 1));\r\n this._attachment = attachment;\r\n }\r\n\r\n public override changeScene(scene: Scene): void {\r\n this._attachment.scene = scene;\r\n }\r\n\r\n public override overrideFeatureSymbology(ovrs: FeatureSymbology.Overrides): void {\r\n this._attachment.symbologyOverrides = ovrs;\r\n }\r\n}\r\n\r\n/** Draws the contents of an orthographic [[ViewState3d]] directly into a [[DrawingViewState]], if the associated [SectionDrawing]($backend)\r\n * specifies it should be. We select tiles for the view in the context of a lightweight offscreen viewport with a no-op [[RenderTarget]], then\r\n * add the resultant graphics to the drawing view's scene. The attachment is created in DrawingViewState.attachToViewport and disposed of in\r\n * DrawingViewState.detachFromViewport.\r\n */\r\nclass SectionAttachment {\r\n private readonly _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _toDrawing: Transform;\r\n private readonly _fromDrawing: Transform;\r\n private readonly _viewRect = new ViewRect(0, 0, 1, 1);\r\n private readonly _originalFrustum = new Frustum();\r\n private readonly _drawingExtents: Vector3d;\r\n public readonly viewport: OffScreenViewport;\r\n private readonly _branchOptions: GraphicBranchOptions;\r\n public scene?: Scene;\r\n public symbologyOverrides: FeatureSymbology.Overrides;\r\n\r\n public get view(): ViewState3d {\r\n assert(this.viewport.view instanceof ViewState3d);\r\n return this.viewport.view;\r\n }\r\n\r\n public get zDepth(): number {\r\n return this._drawingExtents.z;\r\n }\r\n\r\n public constructor(view: ViewState3d, toDrawing: Transform, fromDrawing: Transform, toSheet: Transform | undefined) {\r\n // Save the input for clone(). Attach a copy to the viewport.\r\n this._toDrawing = toDrawing;\r\n this._fromDrawing = fromDrawing;\r\n\r\n this.viewport = OffScreenViewport.createViewport(view, new SectionTarget(this), true);\r\n\r\n this.symbologyOverrides = new FeatureSymbology.Overrides(view);\r\n let clipVolume;\r\n let clip = this.view.getViewClip();\r\n if (clip) {\r\n clip = clip.clone();\r\n const clipTransform = toSheet ? toSheet.multiplyTransformTransform(this._toDrawing) : this._toDrawing;\r\n clip.transformInPlace(clipTransform);\r\n clipVolume = IModelApp.renderSystem.createClipVolume(clip);\r\n }\r\n\r\n this._branchOptions = {\r\n clipVolume,\r\n hline: view.getDisplayStyle3d().settings.hiddenLineSettings,\r\n frustum: {\r\n is3d: true,\r\n scale: { x: 1, y: 1 },\r\n },\r\n };\r\n\r\n this._viewFlagOverrides = { ...view.viewFlags, lighting: false, shadows: false };\r\n this._drawingExtents = this.viewport.viewingSpace.viewDelta.clone();\r\n this._toDrawing.multiplyVector(this._drawingExtents, this._drawingExtents);\r\n this._drawingExtents.z = Math.abs(this._drawingExtents.z);\r\n\r\n // Save off the original frustum (potentially adjusted by viewport).\r\n this.viewport.setupFromView();\r\n this.viewport.viewingSpace.getFrustum(CoordSystem.World, true, this._originalFrustum);\r\n }\r\n\r\n public dispose(): void {\r\n this.viewport.dispose();\r\n }\r\n\r\n public addToScene(context: SceneContext): void {\r\n if (context.viewport.freezeScene)\r\n return;\r\n\r\n const pixelSize = context.viewport.getPixelSizeAtPoint();\r\n if (0 === pixelSize)\r\n return;\r\n\r\n // Adjust offscreen viewport's frustum based on intersection with drawing view frustum.\r\n const frustum3d = this._originalFrustum.transformBy(this._toDrawing);\r\n const frustumRange3d = frustum3d.toRange();\r\n const frustum2d = context.viewport.getWorldFrustum();\r\n const frustumRange2d = frustum2d.toRange();\r\n const intersect = frustumRange3d.intersect(frustumRange2d);\r\n if (intersect.isNull)\r\n return;\r\n\r\n frustum3d.initFromRange(intersect);\r\n frustum3d.transformBy(this._fromDrawing, frustum3d);\r\n this.viewport.setupViewFromFrustum(frustum3d);\r\n\r\n // Adjust view rect based on size of attachment on screen so tiles of appropriate LOD are selected.\r\n const width = this._drawingExtents.x * intersect.xLength() / frustumRange3d.xLength();\r\n const height = this._drawingExtents.y * intersect.yLength() / frustumRange3d.yLength();\r\n this._viewRect.width = Math.max(1, Math.round(width / pixelSize));\r\n this._viewRect.height = Math.max(1, Math.round(height / pixelSize));\r\n this.viewport.setRect(this._viewRect);\r\n\r\n // Propagate settings from drawing viewport.\r\n this.viewport.debugBoundingBoxes = context.viewport.debugBoundingBoxes;\r\n this.viewport.setTileSizeModifier(context.viewport.tileSizeModifier);\r\n\r\n // Create the scene.\r\n this.viewport.renderFrame();\r\n const scene = this.scene;\r\n if (!scene)\r\n return;\r\n\r\n // Extract graphics and insert into drawing's scene context.\r\n const outputGraphics = (source: RenderGraphic[]) => {\r\n if (0 === source.length)\r\n return;\r\n\r\n const graphics = new GraphicBranch();\r\n graphics.setViewFlagOverrides(this._viewFlagOverrides);\r\n graphics.symbologyOverrides = this.symbologyOverrides;\r\n\r\n for (const graphic of source)\r\n graphics.entries.push(graphic);\r\n\r\n const branch = context.createGraphicBranch(graphics, this._toDrawing, this._branchOptions);\r\n context.outputGraphic(branch);\r\n };\r\n\r\n outputGraphics(scene.foreground);\r\n context.withGraphicType(TileGraphicType.BackgroundMap, () => outputGraphics(scene.background));\r\n context.withGraphicType(TileGraphicType.Overlay, () => outputGraphics(scene.overlay));\r\n\r\n // Report tile statistics to drawing viewport.\r\n const tileAdmin = IModelApp.tileAdmin;\r\n const selectedAndReady = tileAdmin.getTilesForUser(this.viewport);\r\n const requested = tileAdmin.getRequestsForUser(this.viewport);\r\n tileAdmin.addExternalTilesForUser(context.viewport, {\r\n requested: requested?.size ?? 0,\r\n selected: selectedAndReady?.selected.size ?? 0,\r\n ready: selectedAndReady?.ready.size ?? 0,\r\n });\r\n }\r\n}\r\n\r\n/** A view of a [DrawingModel]($backend)\r\n * @public\r\n * @extensions\r\n */\r\nexport class DrawingViewState extends ViewState2d {\r\n /** @internal */\r\n public static override get className() { return \"DrawingViewDefinition\"; }\r\n\r\n /** Exposed strictly for testing and debugging. Indicates that when loading the view, the spatial view should be displayed even\r\n * if `SectionDrawing.displaySpatialView` is not `true`.\r\n * @internal\r\n */\r\n public static alwaysDisplaySpatialView = false;\r\n\r\n /** Exposed strictly for testing and debugging. Indicates that the 2d graphics should not be displayed.\r\n * @internal\r\n */\r\n public static hideDrawingGraphics = false;\r\n\r\n private readonly _modelLimits: ExtentLimits;\r\n private readonly _viewedExtents: AxisAlignedBox3d;\r\n private _attachmentInfo: SectionAttachmentInfo;\r\n private _attachment?: SectionAttachment;\r\n\r\n /** Strictly for testing. @internal */\r\n public get sectionDrawingProps(): SectionDrawingViewProps | undefined {\r\n return this._attachmentInfo.toJSON();\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get sectionDrawingInfo() {\r\n return this._attachmentInfo.sectionDrawingInfo;\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get attachment(): Object | undefined {\r\n return this._attachment;\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get attachmentInfo(): Object {\r\n return this._attachmentInfo;\r\n }\r\n\r\n public constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, extents: AxisAlignedBox3d, sectionDrawing?: SectionDrawingViewProps) {\r\n super(props, iModel, categories, displayStyle);\r\n if (categories instanceof DrawingViewState) {\r\n this._viewedExtents = categories._viewedExtents.clone();\r\n this._modelLimits = { ...categories._modelLimits };\r\n this._attachmentInfo = categories._attachmentInfo.clone();\r\n } else {\r\n this._viewedExtents = extents;\r\n this._modelLimits = { min: Constant.oneMillimeter, max: 10 * extents.maxLength() };\r\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(sectionDrawing);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override attachToViewport(args: AttachToViewportArgs): void {\r\n super.attachToViewport(args);\r\n assert(undefined === this._attachment);\r\n this._attachment = this._attachmentInfo.createAttachment(args.drawingToSheetTransform);\r\n }\r\n\r\n /** @internal */\r\n public override detachFromViewport(): void {\r\n super.detachFromViewport();\r\n this._attachment = dispose(this._attachment);\r\n }\r\n\r\n /** @internal */\r\n public override async changeViewedModel(modelId: Id64String): Promise<void> {\r\n await super.changeViewedModel(modelId);\r\n const props = await this.querySectionDrawingProps();\r\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(props);\r\n\r\n // super.changeViewedModel() throws if attached to viewport, and attachment only allocated while attached to viewport\r\n assert(undefined === this._attachment);\r\n }\r\n\r\n private async querySectionDrawingProps(): Promise<SectionDrawingViewProps> {\r\n let spatialView = Id64.invalid;\r\n let drawingToSpatialTransform: TransformProps | undefined;\r\n let displaySpatialView = false;\r\n try {\r\n const ecsql = `\r\n SELECT spatialView,\r\n json_extract(jsonProperties, '$.drawingToSpatialTransform') as drawingToSpatialTransform,\r\n CAST(json_extract(jsonProperties, '$.displaySpatialView') as BOOLEAN) as displaySpatialView\r\n FROM bis.SectionDrawing\r\n WHERE ECInstanceId=${this.baseModelId}`;\r\n\r\n for await (const row of this.iModel.query(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n spatialView = Id64.fromJSON(row.spatialView?.id);\r\n displaySpatialView = !!row.displaySpatialView;\r\n try {\r\n drawingToSpatialTransform = JSON.parse(row.drawingToSpatialTransform);\r\n } catch {\r\n // We'll use identity transform.\r\n }\r\n\r\n break;\r\n }\r\n } catch (_ex) {\r\n // The version of BisCore ECSchema in the iModel is probably too old to contain the SectionDrawing ECClass.\r\n }\r\n\r\n return { spatialView, displaySpatialView, drawingToSpatialTransform };\r\n }\r\n\r\n /** @internal */\r\n protected override preload(hydrateRequest: HydrateViewStateRequestProps): void {\r\n assert(!this.isAttachedToViewport);\r\n super.preload(hydrateRequest);\r\n this._attachmentInfo.preload(hydrateRequest);\r\n }\r\n\r\n /** @internal */\r\n protected override async postload(hydrateResponse: HydrateViewStateResponseProps): Promise<void> {\r\n const promises = [];\r\n promises.push(super.postload(hydrateResponse));\r\n promises.push(this._attachmentInfo.postload(hydrateResponse, this.iModel));\r\n await Promise.all(promises);\r\n }\r\n\r\n public static override createFromProps(props: ViewStateProps, iModel: IModelConnection): DrawingViewState {\r\n const cat = new CategorySelectorState(props.categorySelectorProps, iModel);\r\n const displayStyleState = new DisplayStyle2dState(props.displayStyleProps, iModel);\r\n const extents = props.modelExtents ? Range3d.fromJSON(props.modelExtents) : new Range3d();\r\n\r\n // use \"new this\" so subclasses are correct\r\n return new this(props.viewDefinitionProps as ViewDefinition2dProps, iModel, cat, displayStyleState, extents, props.sectionDrawing);\r\n }\r\n\r\n public override toProps(): ViewStateProps {\r\n const props = super.toProps();\r\n props.modelExtents = this._viewedExtents.toJSON();\r\n props.sectionDrawing = this._attachmentInfo.toJSON();\r\n return props;\r\n }\r\n\r\n public getViewedExtents(): AxisAlignedBox3d {\r\n return this._viewedExtents;\r\n }\r\n\r\n public get defaultExtentLimits() {\r\n return this._modelLimits;\r\n }\r\n\r\n /** @internal */\r\n public override isDrawingView(): this is DrawingViewState { return true; }\r\n\r\n /** @internal */\r\n public override getOrigin() {\r\n const origin = super.getOrigin();\r\n if (this._attachment)\r\n origin.z = -this._attachment.zDepth;\r\n\r\n return origin;\r\n }\r\n\r\n /** @internal */\r\n public override getExtents() {\r\n const extents = super.getExtents();\r\n if (this._attachment)\r\n extents.z = this._attachment.zDepth + Frustum2d.minimumZDistance;\r\n\r\n return extents;\r\n }\r\n\r\n /** @internal */\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n if (this._attachment)\r\n trees.disclose(this._attachment.viewport);\r\n }\r\n\r\n /** @internal */\r\n public override createScene(context: SceneContext): void {\r\n if (!DrawingViewState.hideDrawingGraphics)\r\n super.createScene(context);\r\n\r\n if (this._attachment)\r\n this._attachment.addToScene(context);\r\n }\r\n\r\n /** @internal */\r\n public override get areAllTileTreesLoaded(): boolean {\r\n return super.areAllTileTreesLoaded && (!this._attachment || this._attachment.view.areAllTileTreesLoaded);\r\n }\r\n\r\n /** @internal */\r\n public override get secondaryViewports() {\r\n return this._attachment ? [this._attachment.viewport] : super.secondaryViewports;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"DrawingViewState.js","sourceRoot":"","sources":["../../src/DrawingViewState.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 Views\r\n */\r\n\r\nimport { assert, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n AxisAlignedBox3d, Frustum, HydrateViewStateRequestProps, HydrateViewStateResponseProps, QueryRowFormat, SectionDrawingViewProps, ViewDefinition2dProps, ViewFlagOverrides, ViewStateProps,\r\n} from \"@itwin/core-common\";\r\nimport { Constant, Range3d, Transform, TransformProps, Vector3d } from \"@itwin/core-geometry\";\r\nimport { CategorySelectorState } from \"./CategorySelectorState\";\r\nimport { CoordSystem } from \"./CoordSystem\";\r\nimport { DisplayStyle2dState } from \"./DisplayStyleState\";\r\nimport { Frustum2d } from \"./Frustum2d\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\r\nimport { GraphicBranch, GraphicBranchOptions } from \"./render/GraphicBranch\";\r\nimport { MockRender } from \"./render/MockRender\";\r\nimport { RenderGraphic } from \"./render/RenderGraphic\";\r\nimport { Scene } from \"./render/Scene\";\r\nimport { DisclosedTileTreeSet, TileGraphicType } from \"./tile/internal\";\r\nimport { SceneContext } from \"./ViewContext\";\r\nimport { OffScreenViewport } from \"./Viewport\";\r\nimport { ViewRect } from \"./ViewRect\";\r\nimport { AttachToViewportArgs, ExtentLimits, ViewState2d, ViewState3d } from \"./ViewState\";\r\n\r\n/** Strictly for testing.\r\n * @internal\r\n */\r\nexport interface SectionDrawingInfo {\r\n readonly spatialView: Id64String;\r\n readonly drawingToSpatialTransform: Transform;\r\n}\r\n\r\n/** The information required to instantiate a [[SectionAttachment]]. This information is supplied to DrawingViewState constructor via ViewStateProps.\r\n * The spatial view is obtained asynchronously in DrawingViewState.load(). The SectionAttachment is created in DrawingViewState.attachToViewport and\r\n * disposed of in DrawingViewState.detachFromViewport.\r\n */\r\nclass SectionAttachmentInfo {\r\n private _spatialView: Id64String | ViewState3d;\r\n private readonly _drawingToSpatialTransform: Transform;\r\n private readonly _displaySpatialView: boolean;\r\n\r\n public get spatialView(): Id64String | ViewState3d { return this._spatialView; }\r\n public get wantDisplayed(): boolean {\r\n return this._displaySpatialView || DrawingViewState.alwaysDisplaySpatialView;\r\n }\r\n\r\n private constructor(spatialView: Id64String | ViewState3d, drawingToSpatialTransform: Transform, displaySpatialView: boolean) {\r\n this._spatialView = spatialView;\r\n this._drawingToSpatialTransform = drawingToSpatialTransform;\r\n this._displaySpatialView = displaySpatialView;\r\n }\r\n\r\n public static fromJSON(props?: SectionDrawingViewProps): SectionAttachmentInfo {\r\n if (!props)\r\n return new SectionAttachmentInfo(Id64.invalid, Transform.createIdentity(), false);\r\n\r\n return new SectionAttachmentInfo(props.spatialView, Transform.fromJSON(props.drawingToSpatialTransform), true === props.displaySpatialView);\r\n }\r\n\r\n public toJSON(): SectionDrawingViewProps | undefined {\r\n if (\"string\" === typeof this._spatialView && !Id64.isValidId64(this._spatialView))\r\n return undefined;\r\n\r\n return {\r\n spatialView: (this._spatialView instanceof ViewState3d) ? this._spatialView.id : this._spatialView,\r\n drawingToSpatialTransform: this._drawingToSpatialTransform.isIdentity ? undefined : this._drawingToSpatialTransform.toJSON(),\r\n displaySpatialView: this._displaySpatialView,\r\n };\r\n }\r\n\r\n public clone(): SectionAttachmentInfo {\r\n return new SectionAttachmentInfo(this._spatialView, this._drawingToSpatialTransform, this._displaySpatialView);\r\n }\r\n\r\n public preload(options: HydrateViewStateRequestProps): void {\r\n if (!this.wantDisplayed)\r\n return;\r\n\r\n if (this._spatialView instanceof ViewState3d)\r\n return;\r\n\r\n if (!Id64.isValidId64(this._spatialView))\r\n return;\r\n\r\n options.spatialViewId = this._spatialView;\r\n options.viewStateLoadProps = {\r\n displayStyle: {\r\n omitScheduleScriptElementIds: !IModelApp.tileAdmin.enableFrontendScheduleScripts,\r\n compressExcludedElementIds: true,\r\n },\r\n };\r\n }\r\n\r\n public async load(iModel: IModelConnection): Promise<void> {\r\n if (!this.wantDisplayed)\r\n return;\r\n\r\n if (this._spatialView instanceof ViewState3d)\r\n return;\r\n\r\n if (!Id64.isValidId64(this._spatialView))\r\n return;\r\n\r\n const spatialView = await iModel.views.load(this._spatialView);\r\n if (spatialView instanceof ViewState3d)\r\n this._spatialView = spatialView;\r\n }\r\n\r\n public async postload(options: HydrateViewStateResponseProps, iModel: IModelConnection): Promise<void> {\r\n let spatialView;\r\n if (options.spatialViewProps) {\r\n spatialView = await iModel.views.convertViewStatePropsToViewState(options.spatialViewProps);\r\n }\r\n\r\n if (spatialView instanceof ViewState3d)\r\n this._spatialView = spatialView;\r\n }\r\n\r\n public createAttachment(toSheet: Transform | undefined): SectionAttachment | undefined {\r\n if (!this.wantDisplayed || !(this._spatialView instanceof ViewState3d))\r\n return undefined;\r\n\r\n const spatialToDrawing = this._drawingToSpatialTransform.inverse();\r\n return spatialToDrawing ? new SectionAttachment(this._spatialView, spatialToDrawing, this._drawingToSpatialTransform, toSheet) : undefined;\r\n }\r\n\r\n public get sectionDrawingInfo(): SectionDrawingInfo {\r\n return {\r\n drawingToSpatialTransform: this._drawingToSpatialTransform,\r\n spatialView: this._spatialView instanceof ViewState3d ? this._spatialView.id : this._spatialView,\r\n };\r\n }\r\n}\r\n\r\n/** A mostly no-op [[RenderTarget]] for a [[SectionAttachment]]. It allocates no webgl resources. */\r\nclass SectionTarget extends MockRender.OffScreenTarget {\r\n private readonly _attachment: SectionAttachment;\r\n\r\n public constructor(attachment: SectionAttachment) {\r\n super(IModelApp.renderSystem, new ViewRect(0, 0, 1, 1));\r\n this._attachment = attachment;\r\n }\r\n\r\n public override changeScene(scene: Scene): void {\r\n this._attachment.scene = scene;\r\n }\r\n\r\n public override overrideFeatureSymbology(ovrs: FeatureSymbology.Overrides): void {\r\n this._attachment.symbologyOverrides = ovrs;\r\n }\r\n}\r\n\r\n/** Draws the contents of an orthographic [[ViewState3d]] directly into a [[DrawingViewState]], if the associated [SectionDrawing]($backend)\r\n * specifies it should be. We select tiles for the view in the context of a lightweight offscreen viewport with a no-op [[RenderTarget]], then\r\n * add the resultant graphics to the drawing view's scene. The attachment is created in DrawingViewState.attachToViewport and disposed of in\r\n * DrawingViewState.detachFromViewport.\r\n */\r\nclass SectionAttachment {\r\n private readonly _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _toDrawing: Transform;\r\n private readonly _fromDrawing: Transform;\r\n private readonly _viewRect = new ViewRect(0, 0, 1, 1);\r\n private readonly _originalFrustum = new Frustum();\r\n private readonly _drawingExtents: Vector3d;\r\n public readonly viewport: OffScreenViewport;\r\n private readonly _branchOptions: GraphicBranchOptions;\r\n public scene?: Scene;\r\n public symbologyOverrides: FeatureSymbology.Overrides;\r\n\r\n public get view(): ViewState3d {\r\n assert(this.viewport.view instanceof ViewState3d);\r\n return this.viewport.view;\r\n }\r\n\r\n public get zDepth(): number {\r\n return this._drawingExtents.z;\r\n }\r\n\r\n public constructor(view: ViewState3d, toDrawing: Transform, fromDrawing: Transform, toSheet: Transform | undefined) {\r\n // Save the input for clone(). Attach a copy to the viewport.\r\n this._toDrawing = toDrawing;\r\n this._fromDrawing = fromDrawing;\r\n\r\n this.viewport = OffScreenViewport.createViewport(view, new SectionTarget(this), true);\r\n\r\n this.symbologyOverrides = new FeatureSymbology.Overrides(view);\r\n let clipVolume;\r\n let clip = this.view.getViewClip();\r\n if (clip) {\r\n clip = clip.clone();\r\n const clipTransform = toSheet ? toSheet.multiplyTransformTransform(this._toDrawing) : this._toDrawing;\r\n clip.transformInPlace(clipTransform);\r\n clipVolume = IModelApp.renderSystem.createClipVolume(clip);\r\n }\r\n\r\n this._branchOptions = {\r\n clipVolume,\r\n hline: view.getDisplayStyle3d().settings.hiddenLineSettings,\r\n frustum: {\r\n is3d: true,\r\n scale: { x: 1, y: 1 },\r\n },\r\n };\r\n\r\n this._viewFlagOverrides = { ...view.viewFlags, lighting: false, shadows: false };\r\n this._drawingExtents = this.viewport.viewingSpace.viewDelta.clone();\r\n this._toDrawing.multiplyVector(this._drawingExtents, this._drawingExtents);\r\n this._drawingExtents.z = Math.abs(this._drawingExtents.z);\r\n\r\n // Save off the original frustum (potentially adjusted by viewport).\r\n this.viewport.setupFromView();\r\n this.viewport.viewingSpace.getFrustum(CoordSystem.World, true, this._originalFrustum);\r\n }\r\n\r\n public dispose(): void {\r\n this.viewport.dispose();\r\n }\r\n\r\n public addToScene(context: SceneContext): void {\r\n if (context.viewport.freezeScene)\r\n return;\r\n\r\n const pixelSize = context.viewport.getPixelSizeAtPoint();\r\n if (0 === pixelSize)\r\n return;\r\n\r\n // Adjust offscreen viewport's frustum based on intersection with drawing view frustum.\r\n const frustum3d = this._originalFrustum.transformBy(this._toDrawing);\r\n const frustumRange3d = frustum3d.toRange();\r\n const frustum2d = context.viewport.getWorldFrustum();\r\n const frustumRange2d = frustum2d.toRange();\r\n const intersect = frustumRange3d.intersect(frustumRange2d);\r\n if (intersect.isNull)\r\n return;\r\n\r\n frustum3d.initFromRange(intersect);\r\n frustum3d.transformBy(this._fromDrawing, frustum3d);\r\n this.viewport.setupViewFromFrustum(frustum3d);\r\n\r\n // Adjust view rect based on size of attachment on screen so tiles of appropriate LOD are selected.\r\n const width = this._drawingExtents.x * intersect.xLength() / frustumRange3d.xLength();\r\n const height = this._drawingExtents.y * intersect.yLength() / frustumRange3d.yLength();\r\n this._viewRect.width = Math.max(1, Math.round(width / pixelSize));\r\n this._viewRect.height = Math.max(1, Math.round(height / pixelSize));\r\n this.viewport.setRect(this._viewRect);\r\n\r\n // Propagate settings from drawing viewport.\r\n this.viewport.debugBoundingBoxes = context.viewport.debugBoundingBoxes;\r\n this.viewport.setTileSizeModifier(context.viewport.tileSizeModifier);\r\n\r\n // Create the scene.\r\n this.viewport.renderFrame();\r\n const scene = this.scene;\r\n if (!scene)\r\n return;\r\n\r\n // Extract graphics and insert into drawing's scene context.\r\n const outputGraphics = (source: RenderGraphic[]) => {\r\n if (0 === source.length)\r\n return;\r\n\r\n const graphics = new GraphicBranch();\r\n graphics.setViewFlagOverrides(this._viewFlagOverrides);\r\n graphics.symbologyOverrides = this.symbologyOverrides;\r\n\r\n for (const graphic of source)\r\n graphics.entries.push(graphic);\r\n\r\n const branch = context.createGraphicBranch(graphics, this._toDrawing, this._branchOptions);\r\n context.outputGraphic(branch);\r\n };\r\n\r\n outputGraphics(scene.foreground);\r\n context.withGraphicType(TileGraphicType.BackgroundMap, () => outputGraphics(scene.background));\r\n context.withGraphicType(TileGraphicType.Overlay, () => outputGraphics(scene.overlay));\r\n\r\n // Report tile statistics to drawing viewport.\r\n const tileAdmin = IModelApp.tileAdmin;\r\n const selectedAndReady = tileAdmin.getTilesForUser(this.viewport);\r\n const requested = tileAdmin.getRequestsForUser(this.viewport);\r\n tileAdmin.addExternalTilesForUser(context.viewport, {\r\n requested: requested?.size ?? 0,\r\n selected: selectedAndReady?.selected.size ?? 0,\r\n ready: selectedAndReady?.ready.size ?? 0,\r\n });\r\n }\r\n}\r\n\r\n/** A view of a [DrawingModel]($backend)\r\n * @public\r\n * @extensions\r\n */\r\nexport class DrawingViewState extends ViewState2d {\r\n /** @internal */\r\n public static override get className() { return \"DrawingViewDefinition\"; }\r\n\r\n /** Exposed strictly for testing and debugging. Indicates that when loading the view, the spatial view should be displayed even\r\n * if `SectionDrawing.displaySpatialView` is not `true`.\r\n * @internal\r\n */\r\n public static alwaysDisplaySpatialView = false;\r\n\r\n /** Exposed strictly for testing and debugging. Indicates that the 2d graphics should not be displayed.\r\n * @internal\r\n */\r\n public static hideDrawingGraphics = false;\r\n\r\n private readonly _modelLimits: ExtentLimits;\r\n private readonly _viewedExtents: AxisAlignedBox3d;\r\n private _attachmentInfo: SectionAttachmentInfo;\r\n private _attachment?: SectionAttachment;\r\n\r\n /** Strictly for testing. @internal */\r\n public get sectionDrawingProps(): SectionDrawingViewProps | undefined {\r\n return this._attachmentInfo.toJSON();\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get sectionDrawingInfo() {\r\n return this._attachmentInfo.sectionDrawingInfo;\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get attachment(): Object | undefined {\r\n return this._attachment;\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get attachmentInfo(): Object {\r\n return this._attachmentInfo;\r\n }\r\n\r\n public constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, extents: AxisAlignedBox3d, sectionDrawing?: SectionDrawingViewProps) {\r\n super(props, iModel, categories, displayStyle);\r\n if (categories instanceof DrawingViewState) {\r\n this._viewedExtents = categories._viewedExtents.clone();\r\n this._modelLimits = { ...categories._modelLimits };\r\n this._attachmentInfo = categories._attachmentInfo.clone();\r\n } else {\r\n this._viewedExtents = extents;\r\n this._modelLimits = { min: Constant.oneMillimeter, max: 10 * extents.maxLength() };\r\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(sectionDrawing);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override attachToViewport(args: AttachToViewportArgs): void {\r\n super.attachToViewport(args);\r\n assert(undefined === this._attachment);\r\n this._attachment = this._attachmentInfo.createAttachment(args.drawingToSheetTransform);\r\n }\r\n\r\n /** @internal */\r\n public override detachFromViewport(): void {\r\n super.detachFromViewport();\r\n this._attachment = dispose(this._attachment);\r\n }\r\n\r\n /** @internal */\r\n public override async changeViewedModel(modelId: Id64String): Promise<void> {\r\n await super.changeViewedModel(modelId);\r\n const props = await this.querySectionDrawingProps();\r\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(props);\r\n\r\n // super.changeViewedModel() throws if attached to viewport, and attachment only allocated while attached to viewport\r\n assert(undefined === this._attachment);\r\n }\r\n\r\n private async querySectionDrawingProps(): Promise<SectionDrawingViewProps> {\r\n let spatialView = Id64.invalid;\r\n let drawingToSpatialTransform: TransformProps | undefined;\r\n let displaySpatialView = false;\r\n try {\r\n const ecsql = `\r\n SELECT spatialView,\r\n json_extract(jsonProperties, '$.drawingToSpatialTransform') as drawingToSpatialTransform,\r\n CAST(json_extract(jsonProperties, '$.displaySpatialView') as BOOLEAN) as displaySpatialView\r\n FROM bis.SectionDrawing\r\n WHERE ECInstanceId=${this.baseModelId}`;\r\n\r\n for await (const row of this.iModel.query(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n spatialView = Id64.fromJSON(row.spatialView?.id);\r\n displaySpatialView = !!row.displaySpatialView;\r\n try {\r\n drawingToSpatialTransform = JSON.parse(row.drawingToSpatialTransform);\r\n } catch {\r\n // We'll use identity transform.\r\n }\r\n\r\n break;\r\n }\r\n } catch (_ex) {\r\n // The version of BisCore ECSchema in the iModel is probably too old to contain the SectionDrawing ECClass.\r\n }\r\n\r\n return { spatialView, displaySpatialView, drawingToSpatialTransform };\r\n }\r\n\r\n /** @internal */\r\n protected override preload(hydrateRequest: HydrateViewStateRequestProps): void {\r\n assert(!this.isAttachedToViewport);\r\n super.preload(hydrateRequest);\r\n this._attachmentInfo.preload(hydrateRequest);\r\n }\r\n\r\n /** @internal */\r\n protected override async postload(hydrateResponse: HydrateViewStateResponseProps): Promise<void> {\r\n const promises = [];\r\n promises.push(super.postload(hydrateResponse));\r\n promises.push(this._attachmentInfo.postload(hydrateResponse, this.iModel));\r\n await Promise.all(promises);\r\n }\r\n\r\n public static override createFromProps(props: ViewStateProps, iModel: IModelConnection): DrawingViewState {\r\n const cat = new CategorySelectorState(props.categorySelectorProps, iModel);\r\n const displayStyleState = new DisplayStyle2dState(props.displayStyleProps, iModel);\r\n const extents = props.modelExtents ? Range3d.fromJSON(props.modelExtents) : new Range3d();\r\n\r\n // use \"new this\" so subclasses are correct\r\n return new this(props.viewDefinitionProps as ViewDefinition2dProps, iModel, cat, displayStyleState, extents, props.sectionDrawing);\r\n }\r\n\r\n public override toProps(): ViewStateProps {\r\n const props = super.toProps();\r\n props.modelExtents = this._viewedExtents.toJSON();\r\n props.sectionDrawing = this._attachmentInfo.toJSON();\r\n return props;\r\n }\r\n\r\n public getViewedExtents(): AxisAlignedBox3d {\r\n return this._viewedExtents;\r\n }\r\n\r\n public get defaultExtentLimits() {\r\n return this._modelLimits;\r\n }\r\n\r\n /** @internal */\r\n public override isDrawingView(): this is DrawingViewState { return true; }\r\n\r\n /** @internal */\r\n public override getOrigin() {\r\n const origin = super.getOrigin();\r\n if (this._attachment)\r\n origin.z = -this._attachment.zDepth;\r\n\r\n return origin;\r\n }\r\n\r\n /** @internal */\r\n public override getExtents() {\r\n const extents = super.getExtents();\r\n if (this._attachment)\r\n extents.z = this._attachment.zDepth + Frustum2d.minimumZDistance;\r\n\r\n return extents;\r\n }\r\n\r\n /** @internal */\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n if (this._attachment)\r\n trees.disclose(this._attachment.viewport);\r\n }\r\n\r\n /** @internal */\r\n public override createScene(context: SceneContext): void {\r\n if (!DrawingViewState.hideDrawingGraphics)\r\n super.createScene(context);\r\n\r\n if (this._attachment)\r\n this._attachment.addToScene(context);\r\n }\r\n\r\n /** @internal */\r\n public override get areAllTileTreesLoaded(): boolean {\r\n return super.areAllTileTreesLoaded && (!this._attachment || this._attachment.view.areAllTileTreesLoaded);\r\n }\r\n\r\n /** @internal */\r\n public override get secondaryViewports() {\r\n return this._attachment ? [this._attachment.viewport] : super.secondaryViewports;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementLocateManager.d.ts","sourceRoot":"","sources":["../../src/ElementLocateManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAW,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAe,SAAS,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAmB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtD;;;GAGG;AACH,oBAAY,YAAY;IACtB,QAAQ,IAAI;IACZ,UAAU,IAAI;CACf;AAED;;;;GAIG;AACH,oBAAY,kBAAkB;IAC5B,MAAM,IAAI;IACV,MAAM,IAAI;CACX;AAED;;;GAGG;AACH,oBAAY,UAAU;IACpB,OAAO,IAAI;IACX,OAAO,IAAI;IACX,UAAU,IAAI;IACd,QAAQ,MAAM;IACd,cAAc,MAAM;IACpB,YAAY,MAAM;IAClB,aAAa,MAAM;IACnB,oBAAoB,MAAM;CAC3B;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,yDAAyD;IAClD,gBAAgB,UAAS;IAChC,+DAA+D;IACxD,iBAAiB,UAAS;IACjC,wCAAwC;IACjC,OAAO,SAAM;IACpB,gDAAgD;IACzC,SAAS,YAAuB;IACvC;;;;OAIG;IACI,oBAAoB,UAAS;IACpC;;;OAGG;IACI,8BAA8B,UAAS;IAE9C,yCAAyC;IAClC,KAAK,IAAI,aAAa;IAStB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAOnC,IAAI;CAKZ;AAED;;;GAGG;AACH,qBAAa,cAAc;IAClB,UAAU,aAAsB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,SAAM;IAExB,gBAAgB;IACT,KAAK,IAAI,cAAc;IAQ9B,gBAAgB;IACT,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;CAK5C;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;CACxD;AAED;;;GAGG;AACH,qBAAa,aAAa;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC3B,SAAgB,cAAc,UAAiB;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7B,KAAK;IASZ,kHAAkH;IAC3G,UAAU,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;IAOtD,UAAU,IAAI,SAAS,GAAG,SAAS;IAE1C,wFAAwF;IACjF,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAExC,eAAe,IAAI,IAAI;IAK9B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACI,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"ElementLocateManager.d.ts","sourceRoot":"","sources":["../../src/ElementLocateManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -200,6 +200,8 @@ class ElementPicker {
|
|
|
200
200
|
const testPointView = new core_geometry_1.Point2d(Math.floor(pickPointView.x + 0.5), Math.floor(pickPointView.y + 0.5));
|
|
201
201
|
let pixelRadius = Math.floor(pickRadiusView + 0.5);
|
|
202
202
|
const rect = new ViewRect_1.ViewRect(testPointView.x - pixelRadius, testPointView.y - pixelRadius, testPointView.x + pixelRadius, testPointView.y + pixelRadius);
|
|
203
|
+
if (rect.isNull)
|
|
204
|
+
return 0;
|
|
203
205
|
let result = 0;
|
|
204
206
|
vp.readPixels(rect, Pixel_1.Pixel.Selector.All, (pixels) => {
|
|
205
207
|
if (undefined === pixels)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementLocateManager.js","sourceRoot":"","sources":["../../src/ElementLocateManager.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 LocatingElements\r\n */\r\n\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\r\nimport { HitDetail, HitList, HitPriority, HitSource } from \"./HitDetail\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { Pixel } from \"./render/Pixel\";\r\nimport { InputSource, InteractiveTool } from \"./tools/Tool\";\r\nimport { ScreenViewport, Viewport } from \"./Viewport\";\r\nimport { ViewRect } from \"./ViewRect\";\r\n\r\n/** The possible actions for which a locate filter can be called.\r\n * @public\r\n * @extensions\r\n */\r\nexport enum LocateAction {\r\n Identify = 0,\r\n AutoLocate = 1,\r\n}\r\n\r\n/** Values to return from a locate filter.\r\n * Return `Reject` to indicate the element is unacceptable.\r\n * @public\r\n * @extensions\r\n */\r\nexport enum LocateFilterStatus {\r\n Accept = 0,\r\n Reject = 1,\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport enum SnapStatus {\r\n Success = 0,\r\n Aborted = 1,\r\n NoElements = 2,\r\n Disabled = 100,\r\n NoSnapPossible = 200,\r\n NotSnappable = 300,\r\n FilteredByApp = 600,\r\n FilteredByAppQuietly = 700,\r\n}\r\n\r\n/** Options that customize the way element location (i.e. *picking*) works.\r\n * @public\r\n * @extensions\r\n */\r\nexport class LocateOptions {\r\n /** If true, also test graphics from view decorations. */\r\n public allowDecorations = false;\r\n /** If true, also test graphics with non-locatable flag set. */\r\n public allowNonLocatable = false;\r\n /** Maximum number of hits to return. */\r\n public maxHits = 20;\r\n /** The [[HitSource]] identifying the caller. */\r\n public hitSource = HitSource.DataPoint;\r\n /** If true, also test graphics from an IModelConnection other than the one associated with the Viewport. This can occur if, e.g., a\r\n * [[TiledGraphicsProvider]] is used to display graphics from a different iModel into the [[Viewport]].\r\n * @note If you override this, you must be prepared to properly handle [[HitDetail]]s originating from other IModelConnections.\r\n * @see [[HitDetail.iModel]] and [[HitDetail.isExternalIModelHit]]\r\n */\r\n public allowExternalIModels = false;\r\n /** If true, then the world point of a hit on a model will preserve any transforms applied to the model at display time,\r\n * such as those supplied by a [[ModelDisplayTransformProvider]] or [PlanProjectionSettings.elevation]($common).\r\n * Otherwise, the world point will be multiplied by the inverse of any such transforms to correlate it with the model's true coordinate space.\r\n */\r\n public preserveModelDisplayTransforms = false;\r\n\r\n /** Make a copy of this LocateOptions. */\r\n public clone(): LocateOptions {\r\n const other = new LocateOptions();\r\n other.allowDecorations = this.allowDecorations;\r\n other.allowNonLocatable = this.allowNonLocatable;\r\n other.maxHits = this.maxHits;\r\n other.hitSource = this.hitSource;\r\n other.allowExternalIModels = this.allowExternalIModels;\r\n return other;\r\n }\r\n public setFrom(other: LocateOptions): void {\r\n this.allowDecorations = other.allowDecorations;\r\n this.allowNonLocatable = other.allowNonLocatable;\r\n this.maxHits = other.maxHits;\r\n this.hitSource = other.hitSource;\r\n this.allowExternalIModels = other.allowExternalIModels;\r\n }\r\n public init() {\r\n this.allowDecorations = this.allowNonLocatable = this.allowExternalIModels = false;\r\n this.maxHits = 20;\r\n this.hitSource = HitSource.DataPoint;\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport class LocateResponse {\r\n public snapStatus = SnapStatus.Success;\r\n public reason?: string;\r\n public explanation = \"\";\r\n\r\n /** @internal */\r\n public clone(): LocateResponse {\r\n const other = new LocateResponse();\r\n other.snapStatus = this.snapStatus;\r\n other.reason = this.reason;\r\n other.explanation = this.explanation;\r\n return other;\r\n }\r\n\r\n /** @internal */\r\n public setFrom(other: LocateResponse): void {\r\n this.snapStatus = other.snapStatus;\r\n this.reason = other.reason;\r\n this.explanation = other.explanation;\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport interface HitListHolder {\r\n setHitList(list: HitList<HitDetail> | undefined): void;\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport class ElementPicker {\r\n public viewport?: Viewport;\r\n public readonly pickPointWorld = new Point3d();\r\n public hitList?: HitList<HitDetail>;\r\n\r\n public empty() {\r\n this.pickPointWorld.setZero();\r\n this.viewport = undefined;\r\n if (this.hitList)\r\n this.hitList.empty();\r\n else\r\n this.hitList = new HitList<HitDetail>();\r\n }\r\n\r\n /** return the HitList for the last Pick performed. Optionally allows the caller to take ownership of the list. */\r\n public getHitList(takeOwnership: boolean): HitList<HitDetail> {\r\n const list = this.hitList!;\r\n if (takeOwnership)\r\n this.hitList = undefined;\r\n return list;\r\n }\r\n\r\n public getNextHit(): HitDetail | undefined { return this.hitList ? this.hitList.getNextHit() : undefined; }\r\n\r\n /** Return a hit from the list of hits created the last time pickElements was called. */\r\n public getHit(i: number): HitDetail | undefined { return this.hitList ? this.hitList.getHit(i) : undefined; }\r\n\r\n public resetCurrentHit(): void {\r\n if (this.hitList)\r\n this.hitList.resetCurrentHit();\r\n }\r\n\r\n private getPixelPriority(pixel: Pixel.Data) {\r\n switch (pixel.type) {\r\n case Pixel.GeometryType.Surface:\r\n return Pixel.Planarity.Planar === pixel.planarity ? HitPriority.PlanarSurface : HitPriority.NonPlanarSurface;\r\n case Pixel.GeometryType.Linear:\r\n return HitPriority.WireEdge;\r\n case Pixel.GeometryType.Edge:\r\n return Pixel.Planarity.Planar === pixel.planarity ? HitPriority.PlanarEdge : HitPriority.NonPlanarEdge;\r\n case Pixel.GeometryType.Silhouette:\r\n return HitPriority.SilhouetteEdge;\r\n default:\r\n return HitPriority.Unknown;\r\n }\r\n }\r\n\r\n private comparePixel(pixel1: Pixel.Data, pixel2: Pixel.Data, distXY1: number, distXY2: number) {\r\n const priority1 = this.getPixelPriority(pixel1);\r\n const priority2 = this.getPixelPriority(pixel2);\r\n if (priority1 < priority2)\r\n return -1;\r\n if (priority1 > priority2)\r\n return 1;\r\n if (distXY1 < distXY2)\r\n return -1;\r\n if (distXY1 > distXY2)\r\n return 1;\r\n if (pixel1.distanceFraction > pixel2.distanceFraction)\r\n return -1;\r\n if (pixel1.distanceFraction < pixel2.distanceFraction)\r\n return 1;\r\n\r\n return 0;\r\n }\r\n\r\n /** Generate a list of elements that are close to a given point.\r\n * @returns The number of hits in the hitList of this object.\r\n */\r\n public doPick(vp: ScreenViewport, pickPointWorld: Point3d, pickRadiusView: number, options: LocateOptions): number {\r\n if (this.hitList && this.hitList.length > 0 && vp === this.viewport && pickPointWorld.isAlmostEqual(this.pickPointWorld)) {\r\n this.hitList.resetCurrentHit();\r\n return this.hitList.length;\r\n }\r\n\r\n this.empty(); // empty the hit list\r\n this.viewport = vp;\r\n this.pickPointWorld.setFrom(pickPointWorld);\r\n\r\n const pickPointView = vp.worldToView(pickPointWorld);\r\n const testPointView = new Point2d(Math.floor(pickPointView.x + 0.5), Math.floor(pickPointView.y + 0.5));\r\n let pixelRadius = Math.floor(pickRadiusView + 0.5);\r\n const rect = new ViewRect(testPointView.x - pixelRadius, testPointView.y - pixelRadius, testPointView.x + pixelRadius, testPointView.y + pixelRadius);\r\n let result: number = 0;\r\n vp.readPixels(rect, Pixel.Selector.All, (pixels) => {\r\n if (undefined === pixels)\r\n return;\r\n\r\n testPointView.x = vp.cssPixelsToDevicePixels(testPointView.x);\r\n testPointView.y = vp.cssPixelsToDevicePixels(testPointView.y);\r\n pixelRadius = vp.cssPixelsToDevicePixels(pixelRadius);\r\n\r\n const elmHits = new Map<string, Point2d>();\r\n const testPoint = Point2d.createZero();\r\n for (testPoint.x = testPointView.x - pixelRadius; testPoint.x <= testPointView.x + pixelRadius; ++testPoint.x) {\r\n for (testPoint.y = testPointView.y - pixelRadius; testPoint.y <= testPointView.y + pixelRadius; ++testPoint.y) {\r\n const pixel = pixels.getPixel(testPoint.x, testPoint.y);\r\n if (undefined === pixel || undefined === pixel.elementId || Id64.isInvalid(pixel.elementId))\r\n continue; // no geometry at this location...\r\n\r\n const distXY = testPointView.distance(testPoint);\r\n if (distXY > pixelRadius)\r\n continue; // ignore corners. it's a locate circle not square...\r\n\r\n const oldPoint = elmHits.get(pixel.elementId);\r\n if (undefined !== oldPoint) {\r\n if (this.comparePixel(pixel, pixels.getPixel(oldPoint.x, oldPoint.y), distXY, testPointView.distance(oldPoint)) < 0)\r\n oldPoint.setFrom(testPoint); // new hit is better, update location...\r\n } else {\r\n elmHits.set(pixel.elementId, testPoint.clone());\r\n }\r\n }\r\n }\r\n if (0 === elmHits.size)\r\n return;\r\n\r\n for (const elmPoint of elmHits.values()) {\r\n const pixel = pixels.getPixel(elmPoint.x, elmPoint.y);\r\n if (undefined === pixel || undefined === pixel.elementId)\r\n continue;\r\n\r\n const hitPointWorld = vp.getPixelDataWorldPoint({\r\n pixels,\r\n x: elmPoint.x,\r\n y: elmPoint.y,\r\n preserveModelDisplayTransforms: options.preserveModelDisplayTransforms,\r\n });\r\n\r\n if (!hitPointWorld)\r\n continue;\r\n\r\n const modelId = undefined !== pixel.featureTable ? pixel.featureTable.modelId : undefined;\r\n const hit = new HitDetail(pickPointWorld, vp, options.hitSource, hitPointWorld, pixel.elementId, this.getPixelPriority(pixel), testPointView.distance(elmPoint), pixel.distanceFraction, pixel.subCategoryId, pixel.geometryClass, modelId, pixel.iModel, pixel.tileId, pixel.isClassifier);\r\n this.hitList!.addHit(hit);\r\n\r\n if (this.hitList!.hits.length > options.maxHits)\r\n this.hitList!.hits.length = options.maxHits; // truncate array...\r\n }\r\n\r\n result = this.hitList!.length;\r\n }, !options.allowNonLocatable);\r\n\r\n return result;\r\n }\r\n\r\n public testHit(hit: HitDetail, vp: ScreenViewport, pickPointWorld: Point3d, pickRadiusView: number, options: LocateOptions): boolean {\r\n if (0 === this.doPick(vp, pickPointWorld, pickRadiusView, options))\r\n return false;\r\n\r\n return this.hitList!.hits.some((thisHit) => hit.isSameHit(thisHit));\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport class ElementLocateManager {\r\n public hitList?: HitList<HitDetail>;\r\n public currHit?: HitDetail;\r\n public readonly options = new LocateOptions();\r\n public readonly picker = new ElementPicker();\r\n\r\n /** get the full message key for a locate failure */\r\n public static getFailureMessageKey(key: string) { return `LocateFailure.${key}`; }\r\n public onInitialized() { }\r\n public get apertureInches() { return 0.11; }\r\n public get touchApertureInches() { return 0.22; }\r\n\r\n public clear(): void { this.setCurrHit(undefined); }\r\n public setHitList(list?: HitList<HitDetail>) { this.hitList = list; }\r\n public setCurrHit(hit?: HitDetail): void { this.currHit = hit; }\r\n public getNextHit(): HitDetail | undefined { return this.hitList ? this.hitList.getNextHit() : undefined; }\r\n\r\n /** return the current path from either the snapping logic or the pre-locating systems. */\r\n public getPreLocatedHit(): HitDetail | undefined {\r\n // NOTE: Check AccuSnap first as Tentative is used to build intersect snap. For normal snaps when a Tentative is active there should be no AccuSnap.\r\n let preLocated = IModelApp.accuSnap.getHitAndList(this);\r\n\r\n if (!preLocated && !!(preLocated = IModelApp.tentativePoint.getHitAndList(this))) {\r\n const vp = preLocated.viewport;\r\n this.picker.empty(); // Get new hit list at hit point; want reset to cycle hits using adjusted point location...\r\n this.picker.doPick(vp, preLocated.getPoint(), (vp.pixelsFromInches(this.apertureInches) / 2.0) + 1.5, this.options);\r\n this.setHitList(this.picker.getHitList(true));\r\n }\r\n\r\n if (this.hitList)\r\n this.hitList.resetCurrentHit();\r\n\r\n return preLocated;\r\n }\r\n\r\n public async filterHit(hit: HitDetail, _action: LocateAction, out: LocateResponse): Promise<LocateFilterStatus> {\r\n // Tools must opt-in to locate of transient geometry as it requires special treatment.\r\n if (!this.options.allowDecorations && !hit.isElementHit) {\r\n if (hit.isModelHit)\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"RealityModel\");\r\n else if (hit.isMapHit)\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"Map\");\r\n else\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"Transient\");\r\n return LocateFilterStatus.Reject;\r\n }\r\n\r\n // Tools must opt-in to locate geometry from external iModels.\r\n if (!this.options.allowExternalIModels && hit.isExternalIModelHit) {\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"ExternalIModel\");\r\n return LocateFilterStatus.Reject;\r\n }\r\n\r\n if (undefined !== hit.subCategoryId && !hit.isExternalIModelHit) {\r\n const appearance = hit.viewport.getSubCategoryAppearance(hit.subCategoryId);\r\n if (appearance.dontLocate) {\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"NotLocatableSubCategory\");\r\n return LocateFilterStatus.Reject;\r\n }\r\n }\r\n\r\n const tool = IModelApp.toolAdmin.activeTool;\r\n if (!(tool && tool instanceof InteractiveTool))\r\n return LocateFilterStatus.Accept;\r\n\r\n const status = await tool.filterHit(hit, out);\r\n if (LocateFilterStatus.Reject === status)\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"ByApp\");\r\n\r\n return status;\r\n }\r\n\r\n public initLocateOptions() { this.options.init(); }\r\n public initToolLocate() {\r\n this.initLocateOptions();\r\n this.clear();\r\n this.picker.empty();\r\n IModelApp.tentativePoint.clear(true);\r\n }\r\n\r\n private async _doLocate(response: LocateResponse, newSearch: boolean, testPoint: Point3d, vp: ScreenViewport | undefined, source: InputSource, filterHits: boolean): Promise<HitDetail | undefined> {\r\n if (!vp)\r\n return;\r\n\r\n // the \"newSearch\" flag indicates whether the caller wants us to conduct a new search at the testPoint, or just continue returning paths from the previous search.\r\n if (newSearch) {\r\n const hit = this.getPreLocatedHit();\r\n\r\n // if we're snapped to something, that path has the highest priority and becomes the active hit.\r\n if (hit) {\r\n if (!filterHits || LocateFilterStatus.Accept === await this.filterHit(hit, LocateAction.Identify, response))\r\n return hit;\r\n\r\n response = new LocateResponse(); // we have the reason and explanation we want.\r\n }\r\n\r\n this.picker.empty();\r\n this.picker.doPick(vp, testPoint, (vp.pixelsFromInches(InputSource.Touch === source ? this.touchApertureInches : this.apertureInches) / 2.0) + 1.5, this.options);\r\n\r\n const hitList = this.picker.getHitList(true);\r\n this.setHitList(hitList);\r\n }\r\n\r\n let newHit: HitDetail | undefined;\r\n while (undefined !== (newHit = this.getNextHit())) {\r\n if (!filterHits || LocateFilterStatus.Accept === await this.filterHit(newHit, LocateAction.Identify, response))\r\n return newHit;\r\n response = new LocateResponse(); // we have the reason and explanation we want.\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public async doLocate(response: LocateResponse, newSearch: boolean, testPoint: Point3d, view: ScreenViewport | undefined, source: InputSource, filterHits = true): Promise<HitDetail | undefined> {\r\n response.reason = ElementLocateManager.getFailureMessageKey(\"NoElements\");\r\n response.explanation = \"\";\r\n\r\n const hit = await this._doLocate(response, newSearch, testPoint, view, source, filterHits);\r\n this.setCurrHit(hit);\r\n\r\n // if we found a hit, remove it from the list of remaining hits near the current search point.\r\n if (hit && this.hitList)\r\n this.hitList.removeHitsFrom(hit.sourceId);\r\n return hit;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ElementLocateManager.js","sourceRoot":"","sources":["../../src/ElementLocateManager.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 LocatingElements\r\n */\r\n\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\r\nimport { HitDetail, HitList, HitPriority, HitSource } from \"./HitDetail\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { Pixel } from \"./render/Pixel\";\r\nimport { InputSource, InteractiveTool } from \"./tools/Tool\";\r\nimport { ScreenViewport, Viewport } from \"./Viewport\";\r\nimport { ViewRect } from \"./ViewRect\";\r\n\r\n/** The possible actions for which a locate filter can be called.\r\n * @public\r\n * @extensions\r\n */\r\nexport enum LocateAction {\r\n Identify = 0,\r\n AutoLocate = 1,\r\n}\r\n\r\n/** Values to return from a locate filter.\r\n * Return `Reject` to indicate the element is unacceptable.\r\n * @public\r\n * @extensions\r\n */\r\nexport enum LocateFilterStatus {\r\n Accept = 0,\r\n Reject = 1,\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport enum SnapStatus {\r\n Success = 0,\r\n Aborted = 1,\r\n NoElements = 2,\r\n Disabled = 100,\r\n NoSnapPossible = 200,\r\n NotSnappable = 300,\r\n FilteredByApp = 600,\r\n FilteredByAppQuietly = 700,\r\n}\r\n\r\n/** Options that customize the way element location (i.e. *picking*) works.\r\n * @public\r\n * @extensions\r\n */\r\nexport class LocateOptions {\r\n /** If true, also test graphics from view decorations. */\r\n public allowDecorations = false;\r\n /** If true, also test graphics with non-locatable flag set. */\r\n public allowNonLocatable = false;\r\n /** Maximum number of hits to return. */\r\n public maxHits = 20;\r\n /** The [[HitSource]] identifying the caller. */\r\n public hitSource = HitSource.DataPoint;\r\n /** If true, also test graphics from an IModelConnection other than the one associated with the Viewport. This can occur if, e.g., a\r\n * [[TiledGraphicsProvider]] is used to display graphics from a different iModel into the [[Viewport]].\r\n * @note If you override this, you must be prepared to properly handle [[HitDetail]]s originating from other IModelConnections.\r\n * @see [[HitDetail.iModel]] and [[HitDetail.isExternalIModelHit]]\r\n */\r\n public allowExternalIModels = false;\r\n /** If true, then the world point of a hit on a model will preserve any transforms applied to the model at display time,\r\n * such as those supplied by a [[ModelDisplayTransformProvider]] or [PlanProjectionSettings.elevation]($common).\r\n * Otherwise, the world point will be multiplied by the inverse of any such transforms to correlate it with the model's true coordinate space.\r\n */\r\n public preserveModelDisplayTransforms = false;\r\n\r\n /** Make a copy of this LocateOptions. */\r\n public clone(): LocateOptions {\r\n const other = new LocateOptions();\r\n other.allowDecorations = this.allowDecorations;\r\n other.allowNonLocatable = this.allowNonLocatable;\r\n other.maxHits = this.maxHits;\r\n other.hitSource = this.hitSource;\r\n other.allowExternalIModels = this.allowExternalIModels;\r\n return other;\r\n }\r\n public setFrom(other: LocateOptions): void {\r\n this.allowDecorations = other.allowDecorations;\r\n this.allowNonLocatable = other.allowNonLocatable;\r\n this.maxHits = other.maxHits;\r\n this.hitSource = other.hitSource;\r\n this.allowExternalIModels = other.allowExternalIModels;\r\n }\r\n public init() {\r\n this.allowDecorations = this.allowNonLocatable = this.allowExternalIModels = false;\r\n this.maxHits = 20;\r\n this.hitSource = HitSource.DataPoint;\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport class LocateResponse {\r\n public snapStatus = SnapStatus.Success;\r\n public reason?: string;\r\n public explanation = \"\";\r\n\r\n /** @internal */\r\n public clone(): LocateResponse {\r\n const other = new LocateResponse();\r\n other.snapStatus = this.snapStatus;\r\n other.reason = this.reason;\r\n other.explanation = this.explanation;\r\n return other;\r\n }\r\n\r\n /** @internal */\r\n public setFrom(other: LocateResponse): void {\r\n this.snapStatus = other.snapStatus;\r\n this.reason = other.reason;\r\n this.explanation = other.explanation;\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport interface HitListHolder {\r\n setHitList(list: HitList<HitDetail> | undefined): void;\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport class ElementPicker {\r\n public viewport?: Viewport;\r\n public readonly pickPointWorld = new Point3d();\r\n public hitList?: HitList<HitDetail>;\r\n\r\n public empty() {\r\n this.pickPointWorld.setZero();\r\n this.viewport = undefined;\r\n if (this.hitList)\r\n this.hitList.empty();\r\n else\r\n this.hitList = new HitList<HitDetail>();\r\n }\r\n\r\n /** return the HitList for the last Pick performed. Optionally allows the caller to take ownership of the list. */\r\n public getHitList(takeOwnership: boolean): HitList<HitDetail> {\r\n const list = this.hitList!;\r\n if (takeOwnership)\r\n this.hitList = undefined;\r\n return list;\r\n }\r\n\r\n public getNextHit(): HitDetail | undefined { return this.hitList ? this.hitList.getNextHit() : undefined; }\r\n\r\n /** Return a hit from the list of hits created the last time pickElements was called. */\r\n public getHit(i: number): HitDetail | undefined { return this.hitList ? this.hitList.getHit(i) : undefined; }\r\n\r\n public resetCurrentHit(): void {\r\n if (this.hitList)\r\n this.hitList.resetCurrentHit();\r\n }\r\n\r\n private getPixelPriority(pixel: Pixel.Data) {\r\n switch (pixel.type) {\r\n case Pixel.GeometryType.Surface:\r\n return Pixel.Planarity.Planar === pixel.planarity ? HitPriority.PlanarSurface : HitPriority.NonPlanarSurface;\r\n case Pixel.GeometryType.Linear:\r\n return HitPriority.WireEdge;\r\n case Pixel.GeometryType.Edge:\r\n return Pixel.Planarity.Planar === pixel.planarity ? HitPriority.PlanarEdge : HitPriority.NonPlanarEdge;\r\n case Pixel.GeometryType.Silhouette:\r\n return HitPriority.SilhouetteEdge;\r\n default:\r\n return HitPriority.Unknown;\r\n }\r\n }\r\n\r\n private comparePixel(pixel1: Pixel.Data, pixel2: Pixel.Data, distXY1: number, distXY2: number) {\r\n const priority1 = this.getPixelPriority(pixel1);\r\n const priority2 = this.getPixelPriority(pixel2);\r\n if (priority1 < priority2)\r\n return -1;\r\n if (priority1 > priority2)\r\n return 1;\r\n if (distXY1 < distXY2)\r\n return -1;\r\n if (distXY1 > distXY2)\r\n return 1;\r\n if (pixel1.distanceFraction > pixel2.distanceFraction)\r\n return -1;\r\n if (pixel1.distanceFraction < pixel2.distanceFraction)\r\n return 1;\r\n\r\n return 0;\r\n }\r\n\r\n /** Generate a list of elements that are close to a given point.\r\n * @returns The number of hits in the hitList of this object.\r\n */\r\n public doPick(vp: ScreenViewport, pickPointWorld: Point3d, pickRadiusView: number, options: LocateOptions): number {\r\n if (this.hitList && this.hitList.length > 0 && vp === this.viewport && pickPointWorld.isAlmostEqual(this.pickPointWorld)) {\r\n this.hitList.resetCurrentHit();\r\n return this.hitList.length;\r\n }\r\n\r\n this.empty(); // empty the hit list\r\n this.viewport = vp;\r\n this.pickPointWorld.setFrom(pickPointWorld);\r\n\r\n const pickPointView = vp.worldToView(pickPointWorld);\r\n const testPointView = new Point2d(Math.floor(pickPointView.x + 0.5), Math.floor(pickPointView.y + 0.5));\r\n let pixelRadius = Math.floor(pickRadiusView + 0.5);\r\n const rect = new ViewRect(testPointView.x - pixelRadius, testPointView.y - pixelRadius, testPointView.x + pixelRadius, testPointView.y + pixelRadius);\r\n if (rect.isNull)\r\n return 0;\r\n let result: number = 0;\r\n vp.readPixels(rect, Pixel.Selector.All, (pixels) => {\r\n if (undefined === pixels)\r\n return;\r\n\r\n testPointView.x = vp.cssPixelsToDevicePixels(testPointView.x);\r\n testPointView.y = vp.cssPixelsToDevicePixels(testPointView.y);\r\n pixelRadius = vp.cssPixelsToDevicePixels(pixelRadius);\r\n\r\n const elmHits = new Map<string, Point2d>();\r\n const testPoint = Point2d.createZero();\r\n for (testPoint.x = testPointView.x - pixelRadius; testPoint.x <= testPointView.x + pixelRadius; ++testPoint.x) {\r\n for (testPoint.y = testPointView.y - pixelRadius; testPoint.y <= testPointView.y + pixelRadius; ++testPoint.y) {\r\n const pixel = pixels.getPixel(testPoint.x, testPoint.y);\r\n if (undefined === pixel || undefined === pixel.elementId || Id64.isInvalid(pixel.elementId))\r\n continue; // no geometry at this location...\r\n\r\n const distXY = testPointView.distance(testPoint);\r\n if (distXY > pixelRadius)\r\n continue; // ignore corners. it's a locate circle not square...\r\n\r\n const oldPoint = elmHits.get(pixel.elementId);\r\n if (undefined !== oldPoint) {\r\n if (this.comparePixel(pixel, pixels.getPixel(oldPoint.x, oldPoint.y), distXY, testPointView.distance(oldPoint)) < 0)\r\n oldPoint.setFrom(testPoint); // new hit is better, update location...\r\n } else {\r\n elmHits.set(pixel.elementId, testPoint.clone());\r\n }\r\n }\r\n }\r\n if (0 === elmHits.size)\r\n return;\r\n\r\n for (const elmPoint of elmHits.values()) {\r\n const pixel = pixels.getPixel(elmPoint.x, elmPoint.y);\r\n if (undefined === pixel || undefined === pixel.elementId)\r\n continue;\r\n\r\n const hitPointWorld = vp.getPixelDataWorldPoint({\r\n pixels,\r\n x: elmPoint.x,\r\n y: elmPoint.y,\r\n preserveModelDisplayTransforms: options.preserveModelDisplayTransforms,\r\n });\r\n\r\n if (!hitPointWorld)\r\n continue;\r\n\r\n const modelId = undefined !== pixel.featureTable ? pixel.featureTable.modelId : undefined;\r\n const hit = new HitDetail(pickPointWorld, vp, options.hitSource, hitPointWorld, pixel.elementId, this.getPixelPriority(pixel), testPointView.distance(elmPoint), pixel.distanceFraction, pixel.subCategoryId, pixel.geometryClass, modelId, pixel.iModel, pixel.tileId, pixel.isClassifier);\r\n this.hitList!.addHit(hit);\r\n\r\n if (this.hitList!.hits.length > options.maxHits)\r\n this.hitList!.hits.length = options.maxHits; // truncate array...\r\n }\r\n\r\n result = this.hitList!.length;\r\n }, !options.allowNonLocatable);\r\n\r\n return result;\r\n }\r\n\r\n public testHit(hit: HitDetail, vp: ScreenViewport, pickPointWorld: Point3d, pickRadiusView: number, options: LocateOptions): boolean {\r\n if (0 === this.doPick(vp, pickPointWorld, pickRadiusView, options))\r\n return false;\r\n\r\n return this.hitList!.hits.some((thisHit) => hit.isSameHit(thisHit));\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport class ElementLocateManager {\r\n public hitList?: HitList<HitDetail>;\r\n public currHit?: HitDetail;\r\n public readonly options = new LocateOptions();\r\n public readonly picker = new ElementPicker();\r\n\r\n /** get the full message key for a locate failure */\r\n public static getFailureMessageKey(key: string) { return `LocateFailure.${key}`; }\r\n public onInitialized() { }\r\n public get apertureInches() { return 0.11; }\r\n public get touchApertureInches() { return 0.22; }\r\n\r\n public clear(): void { this.setCurrHit(undefined); }\r\n public setHitList(list?: HitList<HitDetail>) { this.hitList = list; }\r\n public setCurrHit(hit?: HitDetail): void { this.currHit = hit; }\r\n public getNextHit(): HitDetail | undefined { return this.hitList ? this.hitList.getNextHit() : undefined; }\r\n\r\n /** return the current path from either the snapping logic or the pre-locating systems. */\r\n public getPreLocatedHit(): HitDetail | undefined {\r\n // NOTE: Check AccuSnap first as Tentative is used to build intersect snap. For normal snaps when a Tentative is active there should be no AccuSnap.\r\n let preLocated = IModelApp.accuSnap.getHitAndList(this);\r\n\r\n if (!preLocated && !!(preLocated = IModelApp.tentativePoint.getHitAndList(this))) {\r\n const vp = preLocated.viewport;\r\n this.picker.empty(); // Get new hit list at hit point; want reset to cycle hits using adjusted point location...\r\n this.picker.doPick(vp, preLocated.getPoint(), (vp.pixelsFromInches(this.apertureInches) / 2.0) + 1.5, this.options);\r\n this.setHitList(this.picker.getHitList(true));\r\n }\r\n\r\n if (this.hitList)\r\n this.hitList.resetCurrentHit();\r\n\r\n return preLocated;\r\n }\r\n\r\n public async filterHit(hit: HitDetail, _action: LocateAction, out: LocateResponse): Promise<LocateFilterStatus> {\r\n // Tools must opt-in to locate of transient geometry as it requires special treatment.\r\n if (!this.options.allowDecorations && !hit.isElementHit) {\r\n if (hit.isModelHit)\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"RealityModel\");\r\n else if (hit.isMapHit)\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"Map\");\r\n else\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"Transient\");\r\n return LocateFilterStatus.Reject;\r\n }\r\n\r\n // Tools must opt-in to locate geometry from external iModels.\r\n if (!this.options.allowExternalIModels && hit.isExternalIModelHit) {\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"ExternalIModel\");\r\n return LocateFilterStatus.Reject;\r\n }\r\n\r\n if (undefined !== hit.subCategoryId && !hit.isExternalIModelHit) {\r\n const appearance = hit.viewport.getSubCategoryAppearance(hit.subCategoryId);\r\n if (appearance.dontLocate) {\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"NotLocatableSubCategory\");\r\n return LocateFilterStatus.Reject;\r\n }\r\n }\r\n\r\n const tool = IModelApp.toolAdmin.activeTool;\r\n if (!(tool && tool instanceof InteractiveTool))\r\n return LocateFilterStatus.Accept;\r\n\r\n const status = await tool.filterHit(hit, out);\r\n if (LocateFilterStatus.Reject === status)\r\n out.reason = ElementLocateManager.getFailureMessageKey(\"ByApp\");\r\n\r\n return status;\r\n }\r\n\r\n public initLocateOptions() { this.options.init(); }\r\n public initToolLocate() {\r\n this.initLocateOptions();\r\n this.clear();\r\n this.picker.empty();\r\n IModelApp.tentativePoint.clear(true);\r\n }\r\n\r\n private async _doLocate(response: LocateResponse, newSearch: boolean, testPoint: Point3d, vp: ScreenViewport | undefined, source: InputSource, filterHits: boolean): Promise<HitDetail | undefined> {\r\n if (!vp)\r\n return;\r\n\r\n // the \"newSearch\" flag indicates whether the caller wants us to conduct a new search at the testPoint, or just continue returning paths from the previous search.\r\n if (newSearch) {\r\n const hit = this.getPreLocatedHit();\r\n\r\n // if we're snapped to something, that path has the highest priority and becomes the active hit.\r\n if (hit) {\r\n if (!filterHits || LocateFilterStatus.Accept === await this.filterHit(hit, LocateAction.Identify, response))\r\n return hit;\r\n\r\n response = new LocateResponse(); // we have the reason and explanation we want.\r\n }\r\n\r\n this.picker.empty();\r\n this.picker.doPick(vp, testPoint, (vp.pixelsFromInches(InputSource.Touch === source ? this.touchApertureInches : this.apertureInches) / 2.0) + 1.5, this.options);\r\n\r\n const hitList = this.picker.getHitList(true);\r\n this.setHitList(hitList);\r\n }\r\n\r\n let newHit: HitDetail | undefined;\r\n while (undefined !== (newHit = this.getNextHit())) {\r\n if (!filterHits || LocateFilterStatus.Accept === await this.filterHit(newHit, LocateAction.Identify, response))\r\n return newHit;\r\n response = new LocateResponse(); // we have the reason and explanation we want.\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public async doLocate(response: LocateResponse, newSearch: boolean, testPoint: Point3d, view: ScreenViewport | undefined, source: InputSource, filterHits = true): Promise<HitDetail | undefined> {\r\n response.reason = ElementLocateManager.getFailureMessageKey(\"NoElements\");\r\n response.explanation = \"\";\r\n\r\n const hit = await this._doLocate(response, newSearch, testPoint, view, source, filterHits);\r\n this.setCurrHit(hit);\r\n\r\n // if we found a hit, remove it from the list of remaining hits near the current search point.\r\n if (hit && this.hitList)\r\n this.hitList.removeHitsFrom(hit.sourceId);\r\n return hit;\r\n }\r\n}\r\n"]}
|
|
@@ -130,7 +130,7 @@ class EnvironmentDecorations {
|
|
|
130
130
|
}
|
|
131
131
|
setSky(params) {
|
|
132
132
|
this._sky.promise = undefined;
|
|
133
|
-
this._sky.params = params
|
|
133
|
+
this._sky.params = params ?? this.createSkyGradientParams();
|
|
134
134
|
this._onLoaded();
|
|
135
135
|
}
|
|
136
136
|
loadSkyBoxParams() {
|
|
@@ -207,9 +207,8 @@ class EnvironmentDecorations {
|
|
|
207
207
|
};
|
|
208
208
|
}
|
|
209
209
|
async imageFromSpec(spec) {
|
|
210
|
-
var _a;
|
|
211
210
|
if (core_bentley_1.Id64.isValidId64(spec))
|
|
212
|
-
return (
|
|
211
|
+
return (await IModelApp_1.IModelApp.renderSystem.loadTextureImage(spec, this._view.iModel))?.image;
|
|
213
212
|
return (0, ImageUtil_1.tryImageElementFromUrl)(spec);
|
|
214
213
|
}
|
|
215
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentDecorations.js","sourceRoot":"","sources":["../../src/EnvironmentDecorations.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 Views\r\n */\r\n\r\nimport { assert, Id64} from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, PolyfaceBuilder, StrokeOptions } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Environment, Gradient, GraphicParams, RenderTexture, SkyCube, SkySphere, TextureImageSpec, TextureMapping,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { ViewState3d } from \"./ViewState\";\r\nimport { DecorateContext } from \"./ViewContext\";\r\nimport { tryImageElementFromUrl } from \"./ImageUtil\";\r\nimport { GraphicType } from \"./render/GraphicBuilder\";\r\nimport { RenderSkyBoxParams } from \"./render/RenderSystem\";\r\n\r\n/** @internal */\r\nexport interface GroundPlaneDecorations {\r\n readonly aboveParams: GraphicParams;\r\n readonly belowParams: GraphicParams;\r\n}\r\n\r\ninterface SkyBoxParamsLoader {\r\n // Invoke to obtain sky box params.\r\n load(): RenderSkyBoxParams | undefined;\r\n // If defined, await before invoking load().\r\n preload?: Promise<boolean>;\r\n}\r\n\r\n/** @internal */\r\nexport interface SkyBoxDecorations {\r\n params?: RenderSkyBoxParams;\r\n promise?: Promise<boolean>;\r\n}\r\n\r\n/** @internal */\r\nexport class EnvironmentDecorations {\r\n protected readonly _view: ViewState3d;\r\n protected readonly _onLoaded: () => void;\r\n protected readonly _onDispose: () => void;\r\n protected _environment: Environment;\r\n protected _ground?: GroundPlaneDecorations;\r\n protected _sky: SkyBoxDecorations;\r\n\r\n public constructor(view: ViewState3d, onLoaded: () => void, onDispose: () => void) {\r\n this._environment = view.displayStyle.environment;\r\n this._view = view;\r\n this._onLoaded = onLoaded;\r\n this._onDispose = onDispose;\r\n\r\n this._sky = { };\r\n this.loadSkyBox();\r\n if (this._environment.displayGround)\r\n this.loadGround();\r\n }\r\n\r\n public dispose(): void {\r\n this._ground = undefined;\r\n this._sky.params = this._sky.promise = undefined;\r\n\r\n this._onDispose();\r\n }\r\n\r\n public setEnvironment(env: Environment): void {\r\n const prev = this._environment;\r\n if (prev === env)\r\n return;\r\n\r\n this._environment = env;\r\n\r\n // Update ground plane\r\n if (!env.displayGround || env.ground !== prev.ground)\r\n this._ground = undefined;\r\n\r\n if (env.displayGround && !this._ground)\r\n this.loadGround();\r\n\r\n // Update sky box\r\n if (env.sky !== prev.sky)\r\n this.loadSkyBox();\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const env = this._environment;\r\n if (env.displaySky && this._sky.params) {\r\n const sky = IModelApp.renderSystem.createSkyBox(this._sky.params);\r\n if (sky)\r\n context.setSkyBox(sky);\r\n }\r\n\r\n if (!env.displayGround || !this._ground)\r\n return;\r\n\r\n const extents = this._view.getGroundExtents(context.viewport);\r\n if (extents.isNull)\r\n return;\r\n\r\n const points: Point3d[] = [extents.low.clone(), extents.low.clone(), extents.high.clone(), extents.high.clone()];\r\n points[1].x = extents.high.x;\r\n points[3].x = extents.low.x;\r\n\r\n const aboveGround = this._view.isEyePointAbove(extents.low.z);\r\n const params = aboveGround ? this._ground.aboveParams : this._ground.belowParams;\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n builder.activateGraphicParams(params);\r\n\r\n const strokeOptions = new StrokeOptions();\r\n strokeOptions.needParams = true;\r\n const polyfaceBuilder = PolyfaceBuilder.create(strokeOptions);\r\n polyfaceBuilder.toggleReversedFacetFlag();\r\n const uvParams: Point2d[] = [Point2d.create(0, 0), Point2d.create(1, 0), Point2d.create(1, 1), Point2d.create(0, 1)];\r\n polyfaceBuilder.addQuadFacet(points, uvParams);\r\n const polyface = polyfaceBuilder.claimPolyface(false);\r\n\r\n builder.addPolyface(polyface, true);\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n private loadGround(): void {\r\n assert(undefined === this._ground);\r\n const aboveParams = this.createGroundParams(true);\r\n const belowParams = this.createGroundParams(false);\r\n if (aboveParams && belowParams)\r\n this._ground = { aboveParams, belowParams };\r\n }\r\n\r\n private createGroundParams(above: boolean): GraphicParams | undefined {\r\n // Create a gradient texture.\r\n const ground = this._environment.ground;\r\n const values = [0, 0.25, 0.5 ];\r\n const color = above ? ground.aboveColor : ground.belowColor;\r\n const alpha = above ? 0x80 : 0x85;\r\n const groundColors = [color.withTransparency(0xff), color, color];\r\n groundColors[1] = groundColors[2] = color.withTransparency(alpha);\r\n\r\n const gradient = new Gradient.Symb();\r\n gradient.mode = Gradient.Mode.Spherical;\r\n gradient.keys = [{ color: groundColors[0], value: values[0] }, { color: groundColors[1], value: values[1] }, { color: groundColors[2], value: values[2] }];\r\n const texture = IModelApp.renderSystem.getGradientTexture(gradient, this._view.iModel);\r\n if (!texture)\r\n return undefined;\r\n\r\n // Create a material using the gradient texture\r\n const material = IModelApp.renderSystem.createRenderMaterial({\r\n diffuse: { color: ColorDef.white, weight: 0 },\r\n textureMapping: {\r\n texture,\r\n transform: new TextureMapping.Trans2x3(0, 1, 0, 1, 0, 0),\r\n },\r\n });\r\n\r\n if (!material)\r\n return undefined;\r\n\r\n // Create GraphicParams using the material.\r\n const params = new GraphicParams();\r\n params.lineColor = gradient.keys[0].color;\r\n params.fillColor = ColorDef.white; // Fill should be set to opaque white for gradient texture...\r\n params.material = material;\r\n\r\n return params;\r\n }\r\n\r\n private loadSkyBox(): void {\r\n const loader = this.loadSkyBoxParams();\r\n if (undefined === loader.preload) {\r\n this.setSky(loader.load());\r\n return;\r\n }\r\n\r\n const promise = loader.preload;\r\n this._sky.promise = promise;\r\n loader.preload.then((loaded) => {\r\n if (promise === this._sky.promise)\r\n this.setSky(loaded ? loader.load() : undefined);\r\n }).catch(() => {\r\n if (promise === this._sky.promise)\r\n this.setSky(undefined);\r\n });\r\n }\r\n\r\n private setSky(params: RenderSkyBoxParams | undefined): void {\r\n this._sky.promise = undefined;\r\n this._sky.params = params ?? this.createSkyGradientParams();\r\n this._onLoaded();\r\n }\r\n\r\n private loadSkyBoxParams(): SkyBoxParamsLoader {\r\n let load: (() => RenderSkyBoxParams | undefined);\r\n let preload: Promise<boolean> | undefined;\r\n\r\n const sky = this._environment.sky;\r\n if (sky instanceof SkyCube) {\r\n const key = this.createCubeImageKey(sky);\r\n load = () => {\r\n const texture = IModelApp.renderSystem.findTexture(key, this._view.iModel);\r\n return texture ? { type: \"cube\", texture } : undefined;\r\n };\r\n\r\n if (!IModelApp.renderSystem.findTexture(key, this._view.iModel)) {\r\n // Some faces may use the same image. Only request each image once.\r\n const promises = [];\r\n const specs = new Set<string>([sky.images.front, sky.images.back, sky.images.left, sky.images.right, sky.images.top, sky.images.bottom]);\r\n for (const spec of specs)\r\n promises.push(this.imageFromSpec(spec));\r\n\r\n preload = Promise.all(promises).then((images) => {\r\n const idToImage = new Map<TextureImageSpec, HTMLImageElement>();\r\n let index = 0;\r\n for (const spec of specs) {\r\n const image = images[index++];\r\n if (!image)\r\n return false;\r\n else\r\n idToImage.set(spec, image);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n const params = new RenderTexture.Params(key, RenderTexture.Type.SkyBox);\r\n const txImgs = [\r\n idToImage.get(sky.images.front)!, idToImage.get(sky.images.back)!, idToImage.get(sky.images.top)!,\r\n idToImage.get(sky.images.bottom)!, idToImage.get(sky.images.right)!, idToImage.get(sky.images.left)!,\r\n ];\r\n\r\n return undefined !== IModelApp.renderSystem.createTextureFromCubeImages(txImgs[0], txImgs[1], txImgs[2], txImgs[3], txImgs[4], txImgs[5], this._view.iModel, params);\r\n });\r\n }\r\n } else if (sky instanceof SkySphere) {\r\n load = () => {\r\n const texture = IModelApp.renderSystem.findTexture(sky.image, this._view.iModel);\r\n return texture ? {\r\n type: \"sphere\",\r\n texture,\r\n rotation: 0,\r\n zOffset: this._view.iModel.globalOrigin.z,\r\n } : undefined;\r\n };\r\n\r\n if (!IModelApp.renderSystem.findTexture(sky.image, this._view.iModel)) {\r\n preload = this.imageFromSpec(sky.image).then((image) => {\r\n if (!image)\r\n return false;\r\n\r\n return undefined !== IModelApp.renderSystem.createTexture({\r\n image: { source: image },\r\n ownership: { iModel: this._view.iModel, key: sky.image },\r\n });\r\n });\r\n }\r\n } else {\r\n load = () => this.createSkyGradientParams();\r\n }\r\n\r\n return { load, preload };\r\n }\r\n\r\n private createCubeImageKey(sky: SkyCube): string {\r\n const i = sky.images;\r\n return `skycube:${i.front}:${i.back}:${i.left}:${i.right}:${i.top}:${i.bottom}`;\r\n }\r\n\r\n private createSkyGradientParams(): RenderSkyBoxParams {\r\n return {\r\n type: \"gradient\",\r\n gradient: this._environment.sky.gradient,\r\n zOffset: this._view.iModel.globalOrigin.z,\r\n };\r\n }\r\n\r\n private async imageFromSpec(spec: TextureImageSpec): Promise<HTMLImageElement | undefined> {\r\n if (Id64.isValidId64(spec))\r\n return (await IModelApp.renderSystem.loadTextureImage(spec, this._view.iModel))?.image;\r\n\r\n return tryImageElementFromUrl(spec);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"EnvironmentDecorations.js","sourceRoot":"","sources":["../../src/EnvironmentDecorations.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAkD;AAClD,wDAAwF;AACxF,oDAE4B;AAC5B,2CAAwC;AAGxC,2CAAqD;AACrD,4DAAsD;AAsBtD,gBAAgB;AAChB,MAAa,sBAAsB;IAQjC,YAAmB,IAAiB,EAAE,QAAoB,EAAE,SAAqB;QAC/E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,CAAC,IAAI,GAAG,EAAG,CAAC;QAChB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa;YACjC,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAEjD,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEM,cAAc,CAAC,GAAgB;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,IAAI,KAAK,GAAG;YACd,OAAO;QAET,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QAExB,sBAAsB;QACtB,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAClD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAE3B,IAAI,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,OAAO;YACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAEpB,iBAAiB;QACjB,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG;YACtB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEM,QAAQ,CAAC,OAAwB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9B,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACtC,MAAM,GAAG,GAAG,qBAAS,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClE,IAAI,GAAG;gBACL,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SAC1B;QAED,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,OAAO;YACrC,OAAO;QAET,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM;YAChB,OAAO;QAET,MAAM,MAAM,GAAc,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjH,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACjF,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,4BAAW,CAAC,eAAe,CAAC,CAAC;QAC1E,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,aAAa,GAAG,IAAI,6BAAa,EAAE,CAAC;QAC1C,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;QAChC,MAAM,eAAe,GAAG,+BAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC9D,eAAe,CAAC,uBAAuB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAc,CAAC,uBAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,uBAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,uBAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,uBAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrH,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEtD,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEO,UAAU;QAChB,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,WAAW,IAAI,WAAW;YAC5B,IAAI,CAAC,OAAO,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC;IAEO,kBAAkB,CAAC,KAAc;QACvC,6BAA6B;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACxC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAClC,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAElE,MAAM,QAAQ,GAAG,IAAI,sBAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,QAAQ,CAAC,IAAI,GAAG,sBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QACxC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3J,MAAM,OAAO,GAAG,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO;YACV,OAAO,SAAS,CAAC;QAEnB,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,qBAAS,CAAC,YAAY,CAAC,oBAAoB,CAAC;YAC3D,OAAO,EAAE,EAAE,KAAK,EAAE,sBAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE;YAC7C,cAAc,EAAE;gBACd,OAAO;gBACP,SAAS,EAAE,IAAI,4BAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACzD;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ;YACX,OAAO,SAAS,CAAC;QAEnB,2CAA2C;QAC3C,MAAM,MAAM,GAAG,IAAI,2BAAa,EAAE,CAAC;QACnC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1C,MAAM,CAAC,SAAS,GAAG,sBAAQ,CAAC,KAAK,CAAC,CAAE,6DAA6D;QACjG,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,UAAU;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,IAAI,SAAS,KAAK,MAAM,CAAC,OAAO,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3B,OAAO;SACR;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO;gBAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,IAAI,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO;gBAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,MAAsC;QACnD,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAA4C,CAAC;QACjD,IAAI,OAAqC,CAAC;QAE1C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;QAClC,IAAI,GAAG,YAAY,qBAAO,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,GAAG,GAAG,EAAE;gBACV,MAAM,OAAO,GAAG,qBAAS,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3E,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzD,CAAC,CAAC;YAEF,IAAI,CAAC,qBAAS,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC/D,mEAAmE;gBACnE,MAAM,QAAQ,GAAG,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACzI,KAAK,MAAM,IAAI,IAAI,KAAK;oBACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBAE1C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAC;oBAChE,IAAI,KAAK,GAAG,CAAC,CAAC;oBACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;wBACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;wBAC9B,IAAI,CAAC,KAAK;4BACR,OAAO,KAAK,CAAC;;4BAEb,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;qBAC9B;oBAED,mDAAmD;oBACnD,MAAM,MAAM,GAAG,IAAI,2BAAa,CAAC,MAAM,CAAC,GAAG,EAAE,2BAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACxE,MAAM,MAAM,GAAG;wBACb,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAE,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAE,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAE;wBACjG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAE,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAE,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAE;qBACrG,CAAC;oBAEF,OAAO,SAAS,KAAK,qBAAS,CAAC,YAAY,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvK,CAAC,CAAC,CAAC;aACJ;SACF;aAAM,IAAI,GAAG,YAAY,uBAAS,EAAE;YACnC,IAAI,GAAG,GAAG,EAAE;gBACV,MAAM,OAAO,GAAG,qBAAS,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjF,OAAO,OAAO,CAAC,CAAC,CAAC;oBACf,IAAI,EAAE,QAAQ;oBACd,OAAO;oBACP,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;iBAC1C,CAAC,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC,CAAC;YAEF,IAAI,CAAC,qBAAS,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;gBACrE,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;oBACrD,IAAI,CAAC,KAAK;wBACR,OAAO,KAAK,CAAC;oBAEf,OAAO,SAAS,KAAK,qBAAS,CAAC,YAAY,CAAC,aAAa,CAAC;wBACxD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;wBACxB,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE;qBACzD,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;aACJ;SACF;aAAM;YACL,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAC7C;QAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEO,kBAAkB,CAAC,GAAY;QACrC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QACrB,OAAO,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;IAClF,CAAC;IAEO,uBAAuB;QAC7B,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ;YACxC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAC1C,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAsB;QAChD,IAAI,mBAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,MAAM,qBAAS,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;QAEzF,OAAO,IAAA,kCAAsB,EAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACF;AA/OD,wDA+OC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { assert, Id64} from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, PolyfaceBuilder, StrokeOptions } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Environment, Gradient, GraphicParams, RenderTexture, SkyCube, SkySphere, TextureImageSpec, TextureMapping,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { ViewState3d } from \"./ViewState\";\r\nimport { DecorateContext } from \"./ViewContext\";\r\nimport { tryImageElementFromUrl } from \"./ImageUtil\";\r\nimport { GraphicType } from \"./render/GraphicBuilder\";\r\nimport { RenderSkyBoxParams } from \"./render/RenderSystem\";\r\n\r\n/** @internal */\r\nexport interface GroundPlaneDecorations {\r\n readonly aboveParams: GraphicParams;\r\n readonly belowParams: GraphicParams;\r\n}\r\n\r\ninterface SkyBoxParamsLoader {\r\n // Invoke to obtain sky box params.\r\n load(): RenderSkyBoxParams | undefined;\r\n // If defined, await before invoking load().\r\n preload?: Promise<boolean>;\r\n}\r\n\r\n/** @internal */\r\nexport interface SkyBoxDecorations {\r\n params?: RenderSkyBoxParams;\r\n promise?: Promise<boolean>;\r\n}\r\n\r\n/** @internal */\r\nexport class EnvironmentDecorations {\r\n protected readonly _view: ViewState3d;\r\n protected readonly _onLoaded: () => void;\r\n protected readonly _onDispose: () => void;\r\n protected _environment: Environment;\r\n protected _ground?: GroundPlaneDecorations;\r\n protected _sky: SkyBoxDecorations;\r\n\r\n public constructor(view: ViewState3d, onLoaded: () => void, onDispose: () => void) {\r\n this._environment = view.displayStyle.environment;\r\n this._view = view;\r\n this._onLoaded = onLoaded;\r\n this._onDispose = onDispose;\r\n\r\n this._sky = { };\r\n this.loadSkyBox();\r\n if (this._environment.displayGround)\r\n this.loadGround();\r\n }\r\n\r\n public dispose(): void {\r\n this._ground = undefined;\r\n this._sky.params = this._sky.promise = undefined;\r\n\r\n this._onDispose();\r\n }\r\n\r\n public setEnvironment(env: Environment): void {\r\n const prev = this._environment;\r\n if (prev === env)\r\n return;\r\n\r\n this._environment = env;\r\n\r\n // Update ground plane\r\n if (!env.displayGround || env.ground !== prev.ground)\r\n this._ground = undefined;\r\n\r\n if (env.displayGround && !this._ground)\r\n this.loadGround();\r\n\r\n // Update sky box\r\n if (env.sky !== prev.sky)\r\n this.loadSkyBox();\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const env = this._environment;\r\n if (env.displaySky && this._sky.params) {\r\n const sky = IModelApp.renderSystem.createSkyBox(this._sky.params);\r\n if (sky)\r\n context.setSkyBox(sky);\r\n }\r\n\r\n if (!env.displayGround || !this._ground)\r\n return;\r\n\r\n const extents = this._view.getGroundExtents(context.viewport);\r\n if (extents.isNull)\r\n return;\r\n\r\n const points: Point3d[] = [extents.low.clone(), extents.low.clone(), extents.high.clone(), extents.high.clone()];\r\n points[1].x = extents.high.x;\r\n points[3].x = extents.low.x;\r\n\r\n const aboveGround = this._view.isEyePointAbove(extents.low.z);\r\n const params = aboveGround ? this._ground.aboveParams : this._ground.belowParams;\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n builder.activateGraphicParams(params);\r\n\r\n const strokeOptions = new StrokeOptions();\r\n strokeOptions.needParams = true;\r\n const polyfaceBuilder = PolyfaceBuilder.create(strokeOptions);\r\n polyfaceBuilder.toggleReversedFacetFlag();\r\n const uvParams: Point2d[] = [Point2d.create(0, 0), Point2d.create(1, 0), Point2d.create(1, 1), Point2d.create(0, 1)];\r\n polyfaceBuilder.addQuadFacet(points, uvParams);\r\n const polyface = polyfaceBuilder.claimPolyface(false);\r\n\r\n builder.addPolyface(polyface, true);\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n private loadGround(): void {\r\n assert(undefined === this._ground);\r\n const aboveParams = this.createGroundParams(true);\r\n const belowParams = this.createGroundParams(false);\r\n if (aboveParams && belowParams)\r\n this._ground = { aboveParams, belowParams };\r\n }\r\n\r\n private createGroundParams(above: boolean): GraphicParams | undefined {\r\n // Create a gradient texture.\r\n const ground = this._environment.ground;\r\n const values = [0, 0.25, 0.5 ];\r\n const color = above ? ground.aboveColor : ground.belowColor;\r\n const alpha = above ? 0x80 : 0x85;\r\n const groundColors = [color.withTransparency(0xff), color, color];\r\n groundColors[1] = groundColors[2] = color.withTransparency(alpha);\r\n\r\n const gradient = new Gradient.Symb();\r\n gradient.mode = Gradient.Mode.Spherical;\r\n gradient.keys = [{ color: groundColors[0], value: values[0] }, { color: groundColors[1], value: values[1] }, { color: groundColors[2], value: values[2] }];\r\n const texture = IModelApp.renderSystem.getGradientTexture(gradient, this._view.iModel);\r\n if (!texture)\r\n return undefined;\r\n\r\n // Create a material using the gradient texture\r\n const material = IModelApp.renderSystem.createRenderMaterial({\r\n diffuse: { color: ColorDef.white, weight: 0 },\r\n textureMapping: {\r\n texture,\r\n transform: new TextureMapping.Trans2x3(0, 1, 0, 1, 0, 0),\r\n },\r\n });\r\n\r\n if (!material)\r\n return undefined;\r\n\r\n // Create GraphicParams using the material.\r\n const params = new GraphicParams();\r\n params.lineColor = gradient.keys[0].color;\r\n params.fillColor = ColorDef.white; // Fill should be set to opaque white for gradient texture...\r\n params.material = material;\r\n\r\n return params;\r\n }\r\n\r\n private loadSkyBox(): void {\r\n const loader = this.loadSkyBoxParams();\r\n if (undefined === loader.preload) {\r\n this.setSky(loader.load());\r\n return;\r\n }\r\n\r\n const promise = loader.preload;\r\n this._sky.promise = promise;\r\n loader.preload.then((loaded) => {\r\n if (promise === this._sky.promise)\r\n this.setSky(loaded ? loader.load() : undefined);\r\n }).catch(() => {\r\n if (promise === this._sky.promise)\r\n this.setSky(undefined);\r\n });\r\n }\r\n\r\n private setSky(params: RenderSkyBoxParams | undefined): void {\r\n this._sky.promise = undefined;\r\n this._sky.params = params ?? this.createSkyGradientParams();\r\n this._onLoaded();\r\n }\r\n\r\n private loadSkyBoxParams(): SkyBoxParamsLoader {\r\n let load: (() => RenderSkyBoxParams | undefined);\r\n let preload: Promise<boolean> | undefined;\r\n\r\n const sky = this._environment.sky;\r\n if (sky instanceof SkyCube) {\r\n const key = this.createCubeImageKey(sky);\r\n load = () => {\r\n const texture = IModelApp.renderSystem.findTexture(key, this._view.iModel);\r\n return texture ? { type: \"cube\", texture } : undefined;\r\n };\r\n\r\n if (!IModelApp.renderSystem.findTexture(key, this._view.iModel)) {\r\n // Some faces may use the same image. Only request each image once.\r\n const promises = [];\r\n const specs = new Set<string>([sky.images.front, sky.images.back, sky.images.left, sky.images.right, sky.images.top, sky.images.bottom]);\r\n for (const spec of specs)\r\n promises.push(this.imageFromSpec(spec));\r\n\r\n preload = Promise.all(promises).then((images) => {\r\n const idToImage = new Map<TextureImageSpec, HTMLImageElement>();\r\n let index = 0;\r\n for (const spec of specs) {\r\n const image = images[index++];\r\n if (!image)\r\n return false;\r\n else\r\n idToImage.set(spec, image);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n const params = new RenderTexture.Params(key, RenderTexture.Type.SkyBox);\r\n const txImgs = [\r\n idToImage.get(sky.images.front)!, idToImage.get(sky.images.back)!, idToImage.get(sky.images.top)!,\r\n idToImage.get(sky.images.bottom)!, idToImage.get(sky.images.right)!, idToImage.get(sky.images.left)!,\r\n ];\r\n\r\n return undefined !== IModelApp.renderSystem.createTextureFromCubeImages(txImgs[0], txImgs[1], txImgs[2], txImgs[3], txImgs[4], txImgs[5], this._view.iModel, params);\r\n });\r\n }\r\n } else if (sky instanceof SkySphere) {\r\n load = () => {\r\n const texture = IModelApp.renderSystem.findTexture(sky.image, this._view.iModel);\r\n return texture ? {\r\n type: \"sphere\",\r\n texture,\r\n rotation: 0,\r\n zOffset: this._view.iModel.globalOrigin.z,\r\n } : undefined;\r\n };\r\n\r\n if (!IModelApp.renderSystem.findTexture(sky.image, this._view.iModel)) {\r\n preload = this.imageFromSpec(sky.image).then((image) => {\r\n if (!image)\r\n return false;\r\n\r\n return undefined !== IModelApp.renderSystem.createTexture({\r\n image: { source: image },\r\n ownership: { iModel: this._view.iModel, key: sky.image },\r\n });\r\n });\r\n }\r\n } else {\r\n load = () => this.createSkyGradientParams();\r\n }\r\n\r\n return { load, preload };\r\n }\r\n\r\n private createCubeImageKey(sky: SkyCube): string {\r\n const i = sky.images;\r\n return `skycube:${i.front}:${i.back}:${i.left}:${i.right}:${i.top}:${i.bottom}`;\r\n }\r\n\r\n private createSkyGradientParams(): RenderSkyBoxParams {\r\n return {\r\n type: \"gradient\",\r\n gradient: this._environment.sky.gradient,\r\n zOffset: this._view.iModel.globalOrigin.z,\r\n };\r\n }\r\n\r\n private async imageFromSpec(spec: TextureImageSpec): Promise<HTMLImageElement | undefined> {\r\n if (Id64.isValidId64(spec))\r\n return (await IModelApp.renderSystem.loadTextureImage(spec, this._view.iModel))?.image;\r\n\r\n return tryImageElementFromUrl(spec);\r\n }\r\n}\r\n"]}
|
package/lib/cjs/FlashSettings.js
CHANGED
|
@@ -43,11 +43,10 @@ class FlashSettings {
|
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
45
|
constructor(options) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const maxIntensity = (_a = options === null || options === void 0 ? void 0 : options.maxIntensity) !== null && _a !== void 0 ? _a : 1;
|
|
46
|
+
this.litMode = options?.litMode === FlashMode.Hilite ? FlashMode.Hilite : FlashMode.Brighten;
|
|
47
|
+
const maxIntensity = options?.maxIntensity ?? 1;
|
|
49
48
|
this.maxIntensity = Math.min(1, Math.max(0, maxIntensity));
|
|
50
|
-
let duration = options
|
|
49
|
+
let duration = options?.duration;
|
|
51
50
|
if (duration) {
|
|
52
51
|
const ms = Math.max(0, Math.min(10 * 1000, duration.milliseconds));
|
|
53
52
|
if (ms !== duration.milliseconds)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlashSettings.js","sourceRoot":"","sources":["../../src/FlashSettings.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA0D;AAE1D;;;GAGG;AACH,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,gEAAgE;IAChE,6CAAM,CAAA;IACN;;OAEG;IACH,iDAAQ,CAAA;AACV,CAAC,EAPW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAOpB;AASD;;;;;;;;;;;GAWG;AACH,MAAa,aAAa;IAmBxB;;;;;;OAMG;IACH,YAAmB,OAA8B
|
|
1
|
+
{"version":3,"file":"FlashSettings.js","sourceRoot":"","sources":["../../src/FlashSettings.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA0D;AAE1D;;;GAGG;AACH,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,gEAAgE;IAChE,6CAAM,CAAA;IACN;;OAEG;IACH,iDAAQ,CAAA;AACV,CAAC,EAPW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAOpB;AASD;;;;;;;;;;;GAWG;AACH,MAAa,aAAa;IAmBxB;;;;;;OAMG;IACH,YAAmB,OAA8B;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;QAE7F,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAE3D,IAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;QACjC,IAAI,QAAQ,EAAE;YACZ,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;YACnE,IAAI,EAAE,KAAK,QAAQ,CAAC,YAAY;gBAC9B,QAAQ,GAAG,yBAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;SAC9C;aAAM;YACL,QAAQ,GAAG,yBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACzC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAA8B;QACzC,IAAI,CAAC,OAAO;YACV,OAAO,IAAI,CAAC;QAEd,OAAO,IAAI,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;CACF;AAvDD,sCAuDC","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 Rendering\r\n */\r\n\r\nimport { BeDuration, Mutable } from \"@itwin/core-bentley\";\r\n\r\n/** As part of [[FlashSettings]], describes how geometry is flashed.\r\n * @public\r\n * @extensions\r\n */\r\nexport enum FlashMode {\r\n /** The color of the geometry is mixed with the hilite color. */\r\n Hilite,\r\n /** The color of the geometry is brightened. Applicable only to lit geometry - i.e., meshes displayed in a view with [RenderMode.SmoothShade]($common)\r\n * and lighting enabled.\r\n */\r\n Brighten,\r\n}\r\n\r\n/** Options used to construct or clone a [[FlashSettings]]. All properties are mutable and optional; those left undefined receive their default\r\n * values.\r\n * @public\r\n * @extensions\r\n */\r\nexport type FlashSettingsOptions = Mutable<Partial<FlashSettings>>;\r\n\r\n/** Settings that control how geometry is \"flashed\" when hovered over in a [[Viewport]].\r\n * When the user hovers the mouse cursor over an element (or other piece of geometry, like a reality mesh), a [[Tool]] visually indicates\r\n * that it can interact with that geometry by \"flashing\" it. Flashed geometry changes color in one of the following two ways:\r\n * - By mixing the viewport's hilite color as specified by [[Viewport.hilite]] with the geometry's own color; or\r\n * - By brightening the geometry's own color (for lit geometry only - i.e., meshes displayed in a view with lighting enabled).\r\n * The flash effect starts out at an intensity of zero and increases linearly over the period of time specified by [[duration]] until\r\n * [[maxIntensity]] is reached.\r\n * @see [[Viewport.flashSettings]] to customize the flash behavior for a viewport.\r\n * @see [[Viewport.hilite]] to customize the hilite color used by [[FlashMode.Hilite]].\r\n * @public\r\n * @extensions\r\n */\r\nexport class FlashSettings {\r\n /** The duration in seconds over which the flash effect increases from zero to [[maxIntensity]], in [0..10].\r\n * Default value: 0.25 seconds.\r\n * Values outside of [0..10] are clamped to that range.\r\n */\r\n public readonly duration: BeDuration;\r\n /** The maximum intensity of the flash effect, after [[duration]] seconds have elapsed, in [0..1].\r\n * For [[FlashMode.Brighten]] this indicates how much brighter the the geometry will be.\r\n * For [[FlashMode.Hilite]] this indicates the ratio of the hilite color to the geometry's own color - i.e., a max intensity of 1.0 causes\r\n * the geometry to display entirely in the hilite color at its maximum.\r\n * Default value: 1.0.\r\n * Values outside of [0..1] are clamped to that range.\r\n */\r\n public readonly maxIntensity: number;\r\n /** Specifies how lit geometry (that is, meshes displayed in a view with lighting enabled) is flashed.\r\n * Default value: [[FlashMode.Brighten]].\r\n */\r\n public readonly litMode: FlashMode;\r\n\r\n /** Construct new flash settings.\r\n * @param options If supplied, overrides specified default values.\r\n * Example: to change [[duration]] to 1 second and use default [[maxIntensity]] and [[litMode]]:\r\n * ```ts\r\n * const settings = new FlashSettings({ duration: BeDuration.fromSeconds(1) });\r\n * ```\r\n */\r\n public constructor(options?: FlashSettingsOptions) {\r\n this.litMode = options?.litMode === FlashMode.Hilite ? FlashMode.Hilite : FlashMode.Brighten;\r\n\r\n const maxIntensity = options?.maxIntensity ?? 1;\r\n this.maxIntensity = Math.min(1, Math.max(0, maxIntensity));\r\n\r\n let duration = options?.duration;\r\n if (duration) {\r\n const ms = Math.max(0, Math.min(10 * 1000, duration.milliseconds));\r\n if (ms !== duration.milliseconds)\r\n duration = BeDuration.fromMilliseconds(ms);\r\n } else {\r\n duration = BeDuration.fromSeconds(0.25);\r\n }\r\n\r\n this.duration = duration;\r\n }\r\n\r\n /** Create a copy of these settings identical except for properties explicitly specified by `options`.\r\n * @param options Overrides selected properties of these settings. Any property not supplied will retain its current value. Any property\r\n * explicitly set to `undefined` will receive its default value.\r\n * @returns A copy of these settings identical except as specified by `options`.\r\n */\r\n public clone(options?: FlashSettingsOptions): FlashSettings {\r\n if (!options)\r\n return this;\r\n\r\n return new FlashSettings({ ...this, ...options });\r\n }\r\n}\r\n"]}
|
package/lib/cjs/GeoServices.d.ts
CHANGED
|
@@ -1,6 +1,58 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BeEvent, Dictionary, SortedArray } from "@itwin/core-bentley";
|
|
2
|
+
import { WritableXYAndZ, XYAndZ, XYZProps } from "@itwin/core-geometry";
|
|
2
3
|
import { GeoCoordinatesResponseProps, GeographicCRSProps, IModelCoordinatesResponseProps, PointWithStatus } from "@itwin/core-common";
|
|
3
4
|
import { IModelConnection } from "./IModelConnection";
|
|
5
|
+
/** Options used to create a [[CoordinateConverter]].
|
|
6
|
+
* @internal exported strictly for tests.
|
|
7
|
+
*/
|
|
8
|
+
export interface CoordinateConverterOptions {
|
|
9
|
+
/** The iModel for which to perform the conversions. */
|
|
10
|
+
iModel: IModelConnection;
|
|
11
|
+
/** Asynchronously convert each point. The resultant array should have the same number and order of points as the input. */
|
|
12
|
+
requestPoints: (points: XYAndZ[]) => Promise<PointWithStatus[]>;
|
|
13
|
+
/** Maximum number of points to include in each request. Default: 300. */
|
|
14
|
+
maxPointsPerRequest?: number;
|
|
15
|
+
}
|
|
16
|
+
declare type CoordinateConverterState = "idle" | "scheduled" | "in-flight";
|
|
17
|
+
/** Performs conversion of coordinates from one coordinate system to another.
|
|
18
|
+
* A [[GeoConverter]] has a pair of these for converting between iModel coordinates and geographic coordinates.
|
|
19
|
+
* Uses a cache to avoid repeatedly requesting the same points, and a batching strategy to avoid making frequent small requests.
|
|
20
|
+
* The cache stores every point that was ever converted by [[convert]]. It is currently permitted to grow to unbounded size.
|
|
21
|
+
* The batching works as follows:
|
|
22
|
+
* When a conversion is requested via [[convert]], if all the requested points are in the cache, they are returned immediately.
|
|
23
|
+
* Otherwise, any points not in the cache and not in the current in-flight request (if any) are placed onto the queue of pending requests.
|
|
24
|
+
* A pending request is scheduled if one hasn't already been scheduled, via requestAnimationFrame.
|
|
25
|
+
* In the animation frame callback, the pending requests are split into batches of no more than options.maxPointsPerRequest and dispatched to the backend.
|
|
26
|
+
* Once the response is received, the results are loaded into and returned from the cache.
|
|
27
|
+
* If more calls to convert occurred while the request was in flight, another request is dispatched.
|
|
28
|
+
* @internal exported strictly for tests.
|
|
29
|
+
*/
|
|
30
|
+
export declare class CoordinateConverter {
|
|
31
|
+
protected readonly _cache: Dictionary<XYAndZ, PointWithStatus>;
|
|
32
|
+
protected _state: CoordinateConverterState;
|
|
33
|
+
protected _pending: SortedArray<XYAndZ>;
|
|
34
|
+
protected _inflight: SortedArray<XYAndZ>;
|
|
35
|
+
protected _onCompleted: BeEvent<() => void>;
|
|
36
|
+
protected readonly _scratchXYZ: {
|
|
37
|
+
x: number;
|
|
38
|
+
y: number;
|
|
39
|
+
z: number;
|
|
40
|
+
};
|
|
41
|
+
protected readonly _maxPointsPerRequest: number;
|
|
42
|
+
protected readonly _iModel: IModelConnection;
|
|
43
|
+
protected readonly _requestPoints: (points: XYAndZ[]) => Promise<PointWithStatus[]>;
|
|
44
|
+
protected toXYAndZ(input: XYZProps, output: WritableXYAndZ): XYAndZ;
|
|
45
|
+
constructor(opts: CoordinateConverterOptions);
|
|
46
|
+
protected dispatch(): Promise<void>;
|
|
47
|
+
protected enqueue(points: XYZProps[]): number;
|
|
48
|
+
protected getFromCache(inputs: XYZProps[]): PointWithStatus[];
|
|
49
|
+
protected scheduleDispatch(): Promise<void>;
|
|
50
|
+
convert(inputs: XYZProps[]): Promise<{
|
|
51
|
+
points: PointWithStatus[];
|
|
52
|
+
fromCache: number;
|
|
53
|
+
}>;
|
|
54
|
+
findCached(inputs: XYZProps[]): CachedIModelCoordinatesResponseProps;
|
|
55
|
+
}
|
|
4
56
|
/** Response to a request to obtain imodel coordinates from cache.
|
|
5
57
|
* @internal
|
|
6
58
|
*/
|
|
@@ -14,13 +66,12 @@ export interface CachedIModelCoordinatesResponseProps {
|
|
|
14
66
|
* @internal
|
|
15
67
|
*/
|
|
16
68
|
export declare class GeoConverter {
|
|
17
|
-
private
|
|
18
|
-
private
|
|
19
|
-
private _iMCtoGCResultCache;
|
|
69
|
+
private readonly _geoToIModel;
|
|
70
|
+
private readonly _iModelToGeo;
|
|
20
71
|
constructor(iModel: IModelConnection, datumOrGCRS: string | GeographicCRSProps);
|
|
21
72
|
getIModelCoordinatesFromGeoCoordinates(geoPoints: XYZProps[]): Promise<IModelCoordinatesResponseProps>;
|
|
22
|
-
getCachedIModelCoordinatesFromGeoCoordinates(geoPoints: XYZProps[]): CachedIModelCoordinatesResponseProps;
|
|
23
73
|
getGeoCoordinatesFromIModelCoordinates(iModelPoints: XYZProps[]): Promise<GeoCoordinatesResponseProps>;
|
|
74
|
+
getCachedIModelCoordinatesFromGeoCoordinates(geoPoints: XYZProps[]): CachedIModelCoordinatesResponseProps;
|
|
24
75
|
}
|
|
25
76
|
/** The Geographic Services available for an [[IModelConnection]].
|
|
26
77
|
* @internal
|
|
@@ -30,4 +81,5 @@ export declare class GeoServices {
|
|
|
30
81
|
constructor(iModel: IModelConnection);
|
|
31
82
|
getConverter(datumOrGCRS?: string | GeographicCRSProps): GeoConverter | undefined;
|
|
32
83
|
}
|
|
84
|
+
export {};
|
|
33
85
|
//# sourceMappingURL=GeoServices.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeoServices.d.ts","sourceRoot":"","sources":["../../src/GeoServices.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"GeoServices.d.ts","sourceRoot":"","sources":["../../src/GeoServices.ts"],"names":[],"mappings":"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"}
|