@itwin/core-frontend 5.1.0-dev.4 → 5.1.0-dev.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +91 -1
- package/lib/cjs/AccuDraw.d.ts +2 -0
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +2 -0
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.js +2 -2
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/GraphicalEditingScope.d.ts +1 -1
- package/lib/cjs/GraphicalEditingScope.d.ts.map +1 -1
- package/lib/cjs/GraphicalEditingScope.js +1 -1
- package/lib/cjs/GraphicalEditingScope.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts +1 -1
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +18 -3
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +20 -1
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +6 -6
- package/lib/cjs/IModelConnection.js +6 -6
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts +2 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +4 -2
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/SelectionSet.d.ts +7 -7
- package/lib/cjs/SelectionSet.js +3 -3
- package/lib/cjs/SelectionSet.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts +2 -0
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +25 -3
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/ViewContext.d.ts +4 -1
- package/lib/cjs/ViewContext.d.ts.map +1 -1
- package/lib/cjs/ViewContext.js +10 -5
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewManager.js +2 -2
- package/lib/cjs/ViewManager.js.map +1 -1
- package/lib/cjs/ViewState.d.ts +1 -1
- package/lib/cjs/ViewState.js +1 -1
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +7 -5
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +9 -5
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +1 -1
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/extension/ExtensionRuntime.js +15 -2
- package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
- package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
- package/lib/cjs/internal/render/MockRender.d.ts +1 -1
- package/lib/cjs/internal/render/MockRender.d.ts.map +1 -1
- package/lib/cjs/internal/render/MockRender.js +1 -1
- package/lib/cjs/internal/render/MockRender.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts +2 -2
- package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeBuffers.js +2 -2
- package/lib/cjs/internal/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ClippingProgram.d.ts +1 -1
- package/lib/cjs/internal/render/webgl/ClippingProgram.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ClippingProgram.js +1 -1
- package/lib/cjs/internal/render/webgl/ClippingProgram.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.js +2 -3
- package/lib/cjs/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderProgram.d.ts +2 -2
- package/lib/cjs/internal/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderProgram.js +2 -2
- package/lib/cjs/internal/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.d.ts +1 -1
- package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.js +2 -2
- package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
- package/lib/cjs/internal/render/webgl/TargetGraphics.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/TargetGraphics.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/TargetGraphics.js +10 -7
- package/lib/cjs/internal/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Technique.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/Technique.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Technique.js +3 -3
- package/lib/cjs/internal/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/internal/tile/ClassifierTileTree.js +3 -1
- package/lib/cjs/internal/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTile.d.ts +1 -0
- package/lib/cjs/internal/tile/IModelTile.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTile.js +4 -0
- package/lib/cjs/internal/tile/IModelTile.js.map +1 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js +8 -0
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.js +4 -3
- package/lib/cjs/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts +15 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.js +25 -11
- package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.d.ts +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +4 -0
- package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +52 -11
- package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts +7 -0
- package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js +17 -0
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/properties/AngleDescription.d.ts +4 -1
- package/lib/cjs/properties/AngleDescription.d.ts.map +1 -1
- package/lib/cjs/properties/AngleDescription.js +10 -2
- package/lib/cjs/properties/AngleDescription.js.map +1 -1
- package/lib/cjs/properties/FormattedQuantityDescription.d.ts +11 -1
- package/lib/cjs/properties/FormattedQuantityDescription.d.ts.map +1 -1
- package/lib/cjs/properties/FormattedQuantityDescription.js +7 -2
- package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
- package/lib/cjs/properties/LengthDescription.d.ts +12 -3
- package/lib/cjs/properties/LengthDescription.d.ts.map +1 -1
- package/lib/cjs/properties/LengthDescription.js +30 -6
- package/lib/cjs/properties/LengthDescription.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +103 -7
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +212 -23
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/render/Decorations.d.ts +1 -1
- package/lib/cjs/render/Decorations.d.ts.map +1 -1
- package/lib/cjs/render/Decorations.js +1 -1
- package/lib/cjs/render/Decorations.js.map +1 -1
- package/lib/cjs/render/GraphicBranch.d.ts +1 -1
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/RenderGraphic.d.ts +1 -1
- package/lib/cjs/render/RenderGraphic.d.ts.map +1 -1
- package/lib/cjs/render/RenderGraphic.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +2 -2
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/RenderTarget.d.ts +1 -1
- package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
- package/lib/cjs/render/RenderTarget.js.map +1 -1
- package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts +1 -1
- package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
- package/lib/cjs/request/Request.d.ts +2 -2
- package/lib/cjs/request/Request.js.map +1 -1
- package/lib/cjs/tile/Tile.d.ts +1 -1
- package/lib/cjs/tile/Tile.d.ts.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 +10 -0
- package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +3 -0
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileTree.d.ts +1 -1
- package/lib/cjs/tile/TileTree.d.ts.map +1 -1
- package/lib/cjs/tile/TileTree.js +1 -1
- package/lib/cjs/tile/TileTree.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +1 -1
- package/lib/cjs/tile/TileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.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 +2 -2
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapCartoRectangle.d.ts +10 -0
- package/lib/cjs/tile/map/MapCartoRectangle.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapCartoRectangle.js +12 -0
- package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +3 -3
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +9 -5
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +1 -1
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/QuadId.d.ts +15 -0
- package/lib/cjs/tile/map/QuadId.d.ts.map +1 -1
- package/lib/cjs/tile/map/QuadId.js +12 -0
- package/lib/cjs/tile/map/QuadId.js.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.js +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts +7 -0
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.js +14 -0
- package/lib/cjs/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/cjs/tools/ElementSetTool.d.ts +9 -1
- package/lib/cjs/tools/ElementSetTool.d.ts.map +1 -1
- package/lib/cjs/tools/ElementSetTool.js +128 -7
- package/lib/cjs/tools/ElementSetTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.d.ts +9 -0
- package/lib/cjs/tools/MeasureTool.d.ts.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +53 -22
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/cjs/tools/SelectTool.d.ts +2 -2
- package/lib/cjs/tools/SelectTool.d.ts.map +1 -1
- package/lib/cjs/tools/SelectTool.js +26 -97
- package/lib/cjs/tools/SelectTool.js.map +1 -1
- package/lib/cjs/tools/Tool.d.ts +10 -1
- package/lib/cjs/tools/Tool.d.ts.map +1 -1
- package/lib/cjs/tools/Tool.js +27 -4
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts +1 -0
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +8 -2
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ToolSettings.d.ts +5 -0
- package/lib/cjs/tools/ToolSettings.d.ts.map +1 -1
- package/lib/cjs/tools/ToolSettings.js +5 -0
- package/lib/cjs/tools/ToolSettings.js.map +1 -1
- package/lib/cjs/tools/ViewTool.d.ts +1 -2
- package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ViewTool.js +10 -47
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuDraw.d.ts +2 -0
- package/lib/esm/AccuDraw.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +2 -0
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.js +2 -2
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/GraphicalEditingScope.d.ts +1 -1
- package/lib/esm/GraphicalEditingScope.d.ts.map +1 -1
- package/lib/esm/GraphicalEditingScope.js +1 -1
- package/lib/esm/GraphicalEditingScope.js.map +1 -1
- package/lib/esm/HitDetail.d.ts +1 -1
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +18 -3
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +21 -2
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +6 -6
- package/lib/esm/IModelConnection.js +6 -6
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.d.ts +2 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +4 -2
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/SelectionSet.d.ts +7 -7
- package/lib/esm/SelectionSet.js +3 -3
- package/lib/esm/SelectionSet.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts +2 -0
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +25 -3
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/ViewContext.d.ts +4 -1
- package/lib/esm/ViewContext.d.ts.map +1 -1
- package/lib/esm/ViewContext.js +10 -5
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewManager.js +2 -2
- package/lib/esm/ViewManager.js.map +1 -1
- package/lib/esm/ViewState.d.ts +1 -1
- package/lib/esm/ViewState.js +1 -1
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +7 -5
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +9 -5
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +1 -1
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/extension/ExtensionRuntime.js +15 -2
- package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
- package/lib/esm/extension/providers/ExtensionLoadScript.js +1 -1
- package/lib/esm/extension/providers/ExtensionLoadScript.js.map +1 -1
- package/lib/esm/internal/render/MockRender.d.ts +1 -1
- package/lib/esm/internal/render/MockRender.d.ts.map +1 -1
- package/lib/esm/internal/render/MockRender.js +1 -1
- package/lib/esm/internal/render/MockRender.js.map +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.js +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts +2 -2
- package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeBuffers.js +2 -2
- package/lib/esm/internal/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/esm/internal/render/webgl/ClippingProgram.d.ts +1 -1
- package/lib/esm/internal/render/webgl/ClippingProgram.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ClippingProgram.js +1 -1
- package/lib/esm/internal/render/webgl/ClippingProgram.js.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.js +2 -3
- package/lib/esm/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderProgram.d.ts +2 -2
- package/lib/esm/internal/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderProgram.js +2 -2
- package/lib/esm/internal/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/esm/internal/render/webgl/Target.d.ts +1 -1
- package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Target.js +2 -2
- package/lib/esm/internal/render/webgl/Target.js.map +1 -1
- package/lib/esm/internal/render/webgl/TargetGraphics.d.ts +3 -3
- package/lib/esm/internal/render/webgl/TargetGraphics.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/TargetGraphics.js +10 -7
- package/lib/esm/internal/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/esm/internal/render/webgl/Technique.d.ts +3 -3
- package/lib/esm/internal/render/webgl/Technique.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Technique.js +3 -3
- package/lib/esm/internal/render/webgl/Technique.js.map +1 -1
- package/lib/esm/internal/tile/ClassifierTileTree.js +3 -1
- package/lib/esm/internal/tile/ClassifierTileTree.js.map +1 -1
- package/lib/esm/internal/tile/IModelTile.d.ts +1 -0
- package/lib/esm/internal/tile/IModelTile.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTile.js +4 -0
- package/lib/esm/internal/tile/IModelTile.js.map +1 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js +8 -0
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.js +4 -3
- package/lib/esm/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts +15 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.js +24 -11
- package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.d.ts +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +4 -0
- package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +52 -11
- package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts +7 -0
- package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.js +17 -0
- package/lib/esm/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/properties/AngleDescription.d.ts +4 -1
- package/lib/esm/properties/AngleDescription.d.ts.map +1 -1
- package/lib/esm/properties/AngleDescription.js +10 -2
- package/lib/esm/properties/AngleDescription.js.map +1 -1
- package/lib/esm/properties/FormattedQuantityDescription.d.ts +11 -1
- package/lib/esm/properties/FormattedQuantityDescription.d.ts.map +1 -1
- package/lib/esm/properties/FormattedQuantityDescription.js +7 -2
- package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
- package/lib/esm/properties/LengthDescription.d.ts +12 -3
- package/lib/esm/properties/LengthDescription.d.ts.map +1 -1
- package/lib/esm/properties/LengthDescription.js +30 -6
- package/lib/esm/properties/LengthDescription.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +103 -7
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +210 -23
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/render/Decorations.d.ts +1 -1
- package/lib/esm/render/Decorations.d.ts.map +1 -1
- package/lib/esm/render/Decorations.js +1 -1
- package/lib/esm/render/Decorations.js.map +1 -1
- package/lib/esm/render/GraphicBranch.d.ts +1 -1
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/RenderGraphic.d.ts +1 -1
- package/lib/esm/render/RenderGraphic.d.ts.map +1 -1
- package/lib/esm/render/RenderGraphic.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +2 -2
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/RenderTarget.d.ts +1 -1
- package/lib/esm/render/RenderTarget.d.ts.map +1 -1
- package/lib/esm/render/RenderTarget.js.map +1 -1
- package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +1 -1
- package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
- package/lib/esm/request/Request.d.ts +2 -2
- package/lib/esm/request/Request.js.map +1 -1
- package/lib/esm/tile/Tile.d.ts +1 -1
- package/lib/esm/tile/Tile.d.ts.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 +10 -0
- package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +3 -0
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileTree.d.ts +1 -1
- package/lib/esm/tile/TileTree.d.ts.map +1 -1
- package/lib/esm/tile/TileTree.js +1 -1
- package/lib/esm/tile/TileTree.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +1 -1
- package/lib/esm/tile/TileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.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 +2 -2
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapCartoRectangle.d.ts +10 -0
- package/lib/esm/tile/map/MapCartoRectangle.d.ts.map +1 -1
- package/lib/esm/tile/map/MapCartoRectangle.js +12 -0
- package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +3 -3
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +9 -5
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +1 -1
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/QuadId.d.ts +15 -0
- package/lib/esm/tile/map/QuadId.d.ts.map +1 -1
- package/lib/esm/tile/map/QuadId.js +12 -0
- package/lib/esm/tile/map/QuadId.js.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.js +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts +7 -0
- package/lib/esm/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.js +14 -0
- package/lib/esm/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/esm/tools/ElementSetTool.d.ts +9 -1
- package/lib/esm/tools/ElementSetTool.d.ts.map +1 -1
- package/lib/esm/tools/ElementSetTool.js +130 -9
- package/lib/esm/tools/ElementSetTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.d.ts +9 -0
- package/lib/esm/tools/MeasureTool.d.ts.map +1 -1
- package/lib/esm/tools/MeasureTool.js +53 -22
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/esm/tools/SelectTool.d.ts +2 -2
- package/lib/esm/tools/SelectTool.d.ts.map +1 -1
- package/lib/esm/tools/SelectTool.js +26 -97
- package/lib/esm/tools/SelectTool.js.map +1 -1
- package/lib/esm/tools/Tool.d.ts +10 -1
- package/lib/esm/tools/Tool.d.ts.map +1 -1
- package/lib/esm/tools/Tool.js +27 -4
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts +1 -0
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +8 -2
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ToolSettings.d.ts +5 -0
- package/lib/esm/tools/ToolSettings.d.ts.map +1 -1
- package/lib/esm/tools/ToolSettings.js +5 -0
- package/lib/esm/tools/ToolSettings.js.map +1 -1
- package/lib/esm/tools/ViewTool.d.ts +1 -2
- package/lib/esm/tools/ViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ViewTool.js +10 -47
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +20 -20
package/lib/cjs/AccuSnap.js
CHANGED
|
@@ -767,7 +767,7 @@ class AccuSnap {
|
|
|
767
767
|
return undefined;
|
|
768
768
|
const filterStatus = (this.isLocateEnabled ? await IModelApp_1.IModelApp.locateManager.filterHit(thisHit, ElementLocateManager_1.LocateAction.AutoLocate, out) : ElementLocateManager_1.LocateFilterStatus.Accept);
|
|
769
769
|
if (ElementLocateManager_1.LocateFilterStatus.Accept !== filterStatus) {
|
|
770
|
-
out.snapStatus = ElementLocateManager_1.SnapStatus.FilteredByApp;
|
|
770
|
+
out.snapStatus = IModelApp_1.IModelApp.toolAdmin.wantToolTip(thisHit) ? ElementLocateManager_1.SnapStatus.FilteredByApp : ElementLocateManager_1.SnapStatus.FilteredByAppQuietly;
|
|
771
771
|
return undefined;
|
|
772
772
|
}
|
|
773
773
|
let snapModes;
|
|
@@ -868,7 +868,7 @@ class AccuSnap {
|
|
|
868
868
|
if (undefined !== firstRejected)
|
|
869
869
|
continue;
|
|
870
870
|
firstRejected = filterResponse.clone();
|
|
871
|
-
firstRejected.snapStatus = ElementLocateManager_1.SnapStatus.FilteredByApp;
|
|
871
|
+
firstRejected.snapStatus = IModelApp_1.IModelApp.toolAdmin.wantToolTip(thisHit) ? ElementLocateManager_1.SnapStatus.FilteredByApp : ElementLocateManager_1.SnapStatus.FilteredByAppQuietly;
|
|
872
872
|
}
|
|
873
873
|
if (undefined !== firstRejected)
|
|
874
874
|
out.setFrom(firstRejected);
|
package/lib/cjs/AccuSnap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccuSnap.js","sourceRoot":"","sources":["../../src/AccuSnap.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAyE;AACzE,wDAA4I;AAE5I,iEAA2I;AAC3I,2CAAsJ;AACtJ,2CAAwC;AAExC,uCAAgE;AAChE,uCAAkF;AAClF,uDAAoD;AAIpD,uDAAyD;AACzD,yCAA0E;AAE1E,oCAAoC;AAEpC;;GAEG;AACH,MAAa,WAAW;IACf,QAAQ,GAAG,IAAI,uBAAO,EAAE,CAAC;IACzB,QAAQ,CAAW;IAChB,eAAe,GAAG,IAAI,uBAAO,EAAE,CAAC;IAChC,KAAK,CAAS;IACd,QAAQ,CAAS;IACjB,WAAW,GAAG,KAAK,CAAC;IACpB,WAAW,GAAG,KAAK,CAAC;IACpB,WAAW,GAAG,KAAK,CAAC;IAE9B,YAAsB,EAAkB;QACtC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAES,WAAW,CAAC,EAAY,EAAE,aAAsB;QACxD,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,CAAC,GAAG,GAAG;YACtC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,uBAAuB;QAE3C,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC;YAC1C,OAAO,KAAK,CAAC,CAAC,6BAA6B;QAE7C,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAClD,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAClD,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC;QACrB,MAAM,cAAc,GAAG,IAAI,uBAAO,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;YAC5C,OAAO,KAAK,CAAC,CAAC,6BAA6B;QAE7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrB,CAAC;QACD,EAAE,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAES,UAAU,CAAC,GAA6B,EAAE,MAAe;QACjE,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3B,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;QACrH,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,MAAM;YACR,GAAG,CAAC,IAAI,EAAE,CAAC;QAEb,GAAG,CAAC,MAAM,EAAE,CAAC;QAEb,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,GAAG,CAAC,MAAM,EAAE,CAAC;QAEb,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAChC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QACjD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAChD,GAAG,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAEM,cAAc,CAAC,GAA6B;QACjD,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,WAAW,GAAG,iBAAiB,CAAC;QACpC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QACxB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7C,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;QACpB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;QACtB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAClF,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;QAC1B,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE3B,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;QACpB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,qBAAqB,CAAC;QACpF,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAES,UAAU,CAAC,EAAS,IAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7G,eAAe,CAAC,EAAiB,IAAa,OAAO,CAAC,eAAQ,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,IAAI,kBAAW,CAAC,KAAK,KAAK,EAAE,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAElJ,WAAW,CAAC,EAAgB;QACjC,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa;YAChD,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,qBAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,8DAA8D;QAChH,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,gBAAgB,CAAC,EAAgB,EAAE,OAAqB;QAC7D,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa;YAChD,OAAO,KAAK,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACjE,CAAC;IAEM,YAAY,CAAC,EAAgB;QAClC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACxC,CAAC;IAEM,UAAU,CAAC,EAAgB;QAChC,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC/C,qBAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,kBAAW,CAAC,KAAK,CAAC,CAAC,CAAC,2DAA2D;QACpK,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC5C,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,EAAgB;QACtC,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ;YACrE,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC;gBAC1C,OAAO,KAAK,CAAC;YACf,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,qBAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,8DAA8D;YAChH,OAAO,KAAK,CAAC;QACf,CAAC;QACD,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,MAAM,qBAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,EAAgB;QAC/C,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ;YACrE,OAAO,SAAS,CAAC;QACnB,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACxH,OAAO,SAAS,CAAC;QACnB,EAAE,CAAC,SAAS,GAAG,WAAW,CAAC,eAAe,CAAC;QAC3C,qBAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,8DAA8D;QAChH,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAjJD,kCAiJC;AAED;;;;GAIG;AACH,MAAa,QAAQ;IACnB,2BAA2B;IACpB,OAAO,CAAa;IAC3B,4BAA4B;IACrB,SAAS,CAAsB;IACtC,oCAAoC;IACpB,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IAChD,qCAAqC;IACrB,UAAU,GAAG,IAAI,GAAG,EAAY,CAAC;IACjD,qDAAqD;IACrC,KAAK,GAAG,IAAI,wBAAc,EAAE,CAAC;IAC7C,0DAA0D;IAC1C,IAAI,GAAG,IAAI,wBAAc,EAAE,CAAC;IAC5C,uCAAuC;IACvB,SAAS,GAAG,IAAI,wBAAc,EAAE,CAAC;IACjD,gCAAgC;IACzB,QAAQ,CAAU;IACzB,iEAAiE;IAC1D,WAAW,CAAU;IAC5B,8GAA8G;IACtG,WAAW,GAAG,CAAC,CAAC;IACxB,yDAAyD;IACxC,cAAc,GAAG,IAAI,uBAAO,EAAE,CAAC;IAChD,gBAAgB;IACA,SAAS,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;IACrD,gBAAgB;IACN,SAAS,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC9C,gBAAgB;IACT,WAAW,CAAe;IACjC,2CAA2C;IACnC,eAAe,CAA0B;IAEjD,gBAAgB;IACT,aAAa,KAAK,CAAC;IAC1B,IAAY,eAAe,KAAa,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5G,IAAY,kBAAkB,KAAa,OAAO,qBAAS,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC9H,6FAA6F;IAC7F,IAAW,eAAe,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,+FAA+F;IAC/F,IAAW,aAAa,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,8IAA8I;IAC9I,IAAW,mBAAmB,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/E,6BAA6B;IAC7B,IAAW,YAAY,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAE5C,SAAS,CAAC,IAAc,IAAa,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,UAAU,CAAC,IAAc,IAAa,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,aAAa,CAAC,IAAc;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEO,YAAY,CAAC,IAAc,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,cAAc,CAAC,IAAc,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,YAAY,CAAC,GAAe,IAA4B,OAAO,CAAC,GAAG,IAAI,GAAG,YAAY,sBAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACrI,4BAA4B;IACrB,iBAAiB,KAA6B,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClG,8DAA8D;IAC9D,IAAW,KAAK;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1C,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,GAAa;QAC7B,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,KAAK,MAAM,EAAE,IAAI,mBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEjB,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC;IAED,gBAAgB;IACT,OAAO;QACZ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,IAAY,WAAW,KAAc,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvH,IAAY,gBAAgB,KAAc,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAE9G;;OAEG;IACH,IAAW,eAAe,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IAEvE;;OAEG;IACI,kBAAkB;QACvB,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,oBAAQ,CAAC,eAAe,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACI,aAAa,KAAW,CAAC;IAEhC,wGAAwG;IACxG,IAAY,+BAA+B;QACzC,MAAM,IAAI,GAAG,qBAAS,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACpD,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,IAAW,QAAQ;QACjB,8GAA8G;QAC9G,IAAI,qBAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,+BAA+B;gBAC5D,OAAO,KAAK,CAAC;YAEf,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,KAAK,oBAAQ,CAAC,YAAY;oBAChC,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC;IAClD,CAAC;IAEO,wBAAwB;QAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,qBAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAChF,CAAC;IAED,uCAAuC;IAChC,KAAK,KAAW,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpD,gBAAgB;IACT,UAAU,CAAC,MAAkB;QAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,CAAC,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,QAAQ,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,gBAAgB,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7F,8HAA8H;QAC9H,IAAI,MAAM,IAAI,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YAC3C,6GAA6G;YAC7G,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,6FAA6F;QAC7F,uEAAuE;QACvE,IAAI,CAAC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,yCAAyC;QACzC,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACvC,OAAO;QAET,4BAA4B;QAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,oCAAoC;IAC5B,cAAc,CAAC,GAAc,EAAE,OAAwB;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC1E,OAAO;QAET,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEO,iBAAiB,CAAC,IAAc;QACtC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACjD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,+BAA+B;IACvB,WAAW,CAAC,GAAe;QACjC,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;YACnD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,gBAAgB;IACT,KAAK;QACV,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,mCAAmC;QACjE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,qCAAqC;IAC5D,CAAC;IAEO,YAAY,CAAC,MAAa,EAAE,EAAkB,EAAE,GAAc,EAAE,KAAiB;QACvF,IAAI,CAAC,qBAAS,CAAC,WAAW,CAAC,iBAAiB,IAAI,SAAS,KAAK,IAAI,CAAC,eAAe;YAChF,OAAO;QAET,IAAI,CAAC,qBAAS,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC;YACvC,OAAO;QAET,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACnE,IAAI,OAAO,KAAK,IAAI,CAAC,eAAe;gBAClC,OAAO,CAAC,yCAAyC;YACnD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,qBAAS,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACtD,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,EAAE,4DAA4D;oBAChG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC,CAAC,qCAAqC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAAa,EAAE,EAAkB,EAAE,GAAyB;QACpF,IAAI,qBAAS,CAAC,WAAW,CAAC,iBAAiB;YACzC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB;IACT,cAAc,CAAC,MAAa,EAAE,EAAkB,EAAE,KAAe;QACtE,yEAAyE;QACzE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,qBAAS,CAAC,aAAa,CAAC,kBAAkB,IAAI,qBAAS,CAAC,aAAa,CAAC,aAAa;YACjH,OAAO;QAET,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;QACjC,MAAM,KAAK,GAAG,qBAAS,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAErD,sEAAsE;QACtE,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ;YACpD,OAAO;QAET,IAAI,MAA6B,CAAC;QAElC,8BAA8B;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,EAAE,CAAC;gBACV,mEAAmE;gBACnE,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,EAAE,CAAC,gBAAgB,CAAC,qBAAS,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBACzH,IAAI,CAAC,qBAAS,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,qBAAS,CAAC,aAAa,CAAC,OAAO,CAAC;oBACtG,OAAO;YACX,CAAC;YACD,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC;QAED,6FAA6F;QAC7F,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,kDAAkD;QAClD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAChB,OAAO;QAET,IAAI,CAAC,WAAW,GAAG,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,YAAY,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,CAAC,WAAW;YACnB,OAAO;QAET,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,gBAAgB;IACT,YAAY,CAAC,EAAkB;QACpC,qDAAqD;QACrD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,qBAAS,CAAC,aAAa,CAAC,aAAa;YACxC,OAAO;QAET,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,qBAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAC9E,OAAO;QAET,qBAAS,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IACzC,CAAC;IAED,wHAAwH;IAChH,cAAc;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI;YACP,OAAO;QAET,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,WAAW,GAAG,qBAAW,CAAC,gBAAgB,CAAC,GAAG,qBAAS,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAAC,CAAC;QAEjJ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI,UAAU;YACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9G,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,EAAY,EAAE,KAAc,EAAE,QAAe;QAC7E,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5B,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5B,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,oFAAoF;IAC5E,aAAa,CAAC,GAAmB,EAAE,EAAiB;QAC1D,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAE5B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAS,CAAC;QACxB,IAAI,WAA+B,CAAC;QACpC,QAAQ,GAAG,CAAC,UAAU,EAAE,CAAC;YACvB,KAAK,iCAAU,CAAC,aAAa;gBAC3B,WAAW,GAAG,qBAAW,CAAC,gBAAgB,CAAC,GAAG,qBAAS,CAAC,UAAU,6BAA6B,CAAC,CAAC;gBACjG,MAAM;YAER,KAAK,iCAAU,CAAC,oBAAoB;gBAClC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAC1B,MAAM;YAER,KAAK,iCAAU,CAAC,YAAY;gBAC1B,WAAW,GAAG,qBAAW,CAAC,gBAAgB,CAAC,GAAG,qBAAS,CAAC,UAAU,8BAA8B,CAAC,CAAC;gBAClG,IAAI,CAAC,QAAQ,GAAG,2CAAoB,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;gBAC1E,MAAM;QACV,CAAC;QAED,IAAI,CAAC,WAAW;YACd,OAAO;QAET,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;QACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEpE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IAED,wDAAwD;IAChD,kBAAkB,CAAC,GAA0B;QACnD,IAAI,CAAC,GAAG;YACN,OAAO,KAAK,CAAC;QAEf,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ;YAChC,OAAO,KAAK,CAAC,CAAC,6CAA6C;QAE7D,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC1E,OAAO,KAAK,CAAC;QAEf,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;IAC9D,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU;YAC9B,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,gBAAgB;IACT,gBAAgB,CAAC,EAAW,EAAE,IAAc;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE1C,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,QAAQ;YAC5D,OAAO;QAET,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,oBAAoB,CAAC,UAAmB,EAAE,WAAoB,IAAI,CAAC;IAE1E,gBAAgB;IACT,aAAa,CAAC,MAAqB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC;IACxC,CAAC;IAED,gBAAgB;IACT,OAAO,CAAC,SAAkB;QAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5C,IAAI,SAAS;YACX,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;aACxB,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAE7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED,gBAAgB;IACT,QAAQ,CAAC,UAAmB;QACjC,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5C,IAAI,UAAU;YACZ,IAAI,CAAC,WAAW,EAAE,CAAC;aAChB,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;YAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;QAErB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,8BAA8B;IACvB,UAAU,CAAC,KAAc;QAC9B,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC9D,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;gBAC7B,qBAAS,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED,gBAAgB;IACT,WAAW,CAAC,MAAkB,EAAE,MAAkB;QACvD,0DAA0D;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC7C,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO,SAAS,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,SAAS,CAAC;QAEnB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;QAC9D,MAAM,MAAM,GAAG,0BAAU,CAAC,4BAA4B,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACpG,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM;YACrB,OAAO,SAAS,CAAC;QAEnB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,uBAAW,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,IAAI,uBAAW,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,2CAA2C;YAClN,IAAI,QAA4B,CAAC;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAE/C,IAAI,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;oBAC9E,QAAQ,GAAG,QAAQ,CAAC;oBACpB,UAAU,GAAG,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,2BAAe,CAAC,MAAM,EAAE,oBAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,qDAAqD;QAClL,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,2EAA2E;QAE5G,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,IAAgB,EAAE,QAAkB;QACvE,MAAM,QAAQ,GAAG,qBAAS,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,aAAa;YAC/C,OAAO,iCAAU,CAAC,QAAQ,CAAC,CAAC,4CAA4C;QAE1E,IAAI,uBAAW,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ;YACvC,OAAO,iCAAU,CAAC,cAAc,CAAC,CAAC,wCAAwC;QAE5E,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvC,IAAI,SAAS,KAAK,KAAK;YACrB,OAAO,iCAAU,CAAC,cAAc,CAAC;QAEnC,MAAM,OAAO,GAAG,mBAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,iCAAU,CAAC,cAAc,CAAC;QAEnC,wFAAwF;QACxF,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,QAAQ,CAAC,UAAU,CAAC,wBAAa,CAAC,aAAa,CAAC,CAAC,CAAC,+DAA+D;YACjH,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC3B,OAAO,iCAAU,CAAC,OAAO,CAAC;QAC5B,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,0BAA0B;QACvD,MAAM,UAAU,GAAG,8BAAmB,CAAC,yBAAyB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9H,IAAI,SAAS,KAAK,UAAU;YAC1B,OAAO,iCAAU,CAAC,cAAc,CAAC;QAEnC,IAAI,MAAM,CAAC;QACX,IAAI,oBAAQ,CAAC,kBAAkB,KAAK,QAAQ;YAC1C,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;;YAE9C,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7G,IAAI,SAAS,KAAK,MAAM,EAAE,KAAK;YAC7B,OAAO,iCAAU,CAAC,cAAc,CAAC;QAEnC,uEAAuE;QACvE,IAAI,oBAAQ,CAAC,kBAAkB,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC;YACjF,MAAM,eAAe,GAAG,8BAAmB,CAAC,yBAAyB,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAChI,IAAI,SAAS,KAAK,eAAe;gBAC/B,OAAO,iCAAU,CAAC,cAAc,CAAC;YAEnC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,KAAK,CAAC,6BAA6B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1E,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnE,MAAM,mBAAmB,GAAG,8BAAmB,CAAC,wBAAwB,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,EAAE,EAAE,YAAY,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC5K,IAAI,SAAS,KAAK,mBAAmB;oBACnC,OAAO,iCAAU,CAAC,cAAc,CAAC;gBACnC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,8BAAmB,CAAC,yBAAyB,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtH,IAAI,SAAS,KAAK,KAAK;YACrB,OAAO,iCAAU,CAAC,cAAc,CAAC;QAEnC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,oBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;QAChE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE3B,OAAO,iCAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAkB,EAAE,SAAqB,EAAE,iBAAyB,EAAE,eAAuB,EAAE,OAA4B,EAAE,GAAoB;QAC/K,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACnE,IAAI,SAAS,CAAC,QAAQ,CAAC,oBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,IAAI,GAAG;oBACL,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,OAAO,CAAC;gBAEtC,OAAO,IAAI,sBAAU,CAAC,OAAO,EAAE,oBAAQ,CAAC,OAAO,EAAE,oBAAQ,CAAC,OAAO,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,oBAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/E,IAAI,GAAG;oBACL,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,cAAc,CAAC;gBAE7C,OAAO,SAAS,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG;oBACL,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,OAAO,CAAC;gBAEtC,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,OAAO,EAAE,oBAAQ,CAAC,OAAO,EAAE,oBAAQ,CAAC,IAAI,CAAC,CAAC;gBAC7E,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,8EAA8E;gBAC9G,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;QACnG,CAAC;QAED,KAAK,GAAG,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACxE,MAAM,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACzE,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxB,IAAI,GAAG,EAAE,CAAC;oBACR,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,YAAY,CAAC;oBACzC,GAAG,CAAC,WAAW,GAAG,qBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,YAAY,2CAAoB,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBAClJ,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,oBAAQ,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,sBAAsB,GAAG,SAAS,CAAC,QAAQ,CAAC,oBAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC/E,MAAM,mBAAmB,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAE5I,IAAI,SAAS,KAAK,mBAAmB,EAAE,CAAC;YACtC,4FAA4F;YAC5F,uFAAuF;YACvF,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,KAAK,oBAAQ,CAAC,kBAAkB,IAAI,QAAQ,KAAK,oBAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;YAC3H,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAQ,CAAC,OAAO,CAAC;gBACvC,SAAS,CAAC,IAAI,CAAC,oBAAQ,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,YAAY,GAAqB;YACrC,EAAE,EAAE,OAAO,CAAC,QAAQ;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,QAAQ;YAC5B,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE;YACrD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS;YACT,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;YACvD,WAAW,EAAE,eAAe;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,YAAY,EAAE,OAAO,CAAC,yBAAyB,EAAE,MAAM,EAAE;SAC1D,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,WAAW,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,qBAAS,CAAC,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;QAExJ,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,YAAY,CAAC,kBAAkB,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzF,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACjC,IAAI,GAAG;gBACL,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,cAAc,CAAC;YAC7C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,CAAC,oBAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9C,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC1B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;wBACpE,SAAS;oBAEX,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAS,CAAC,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAS,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;oBAExI,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;wBACvB,IAAI,SAAS,KAAK,YAAY,CAAC,kBAAkB;4BAC/C,YAAY,CAAC,kBAAkB,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;;4BAEnF,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzF,CAAC;yBAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;wBAC7B,SAAS;oBACX,CAAC;oBAED,IAAI,SAAS,KAAK,YAAY,CAAC,mBAAmB;wBAChD,YAAY,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;;wBAElD,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAEtD,IAAI,CAAC,KAAK,YAAY,CAAC,mBAAmB,CAAC,MAAM;wBAC/C,MAAM,CAAC,8DAA8D;gBACzE,CAAC;YACH,CAAC;YAED,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,KAAK,YAAY,CAAC,mBAAmB,EAAE,CAAC;gBAC7E,IAAI,GAAG;oBACL,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,cAAc,CAAC;gBAE7C,OAAO,SAAS,CAAC,CAAC,oHAAoH;YACxI,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,sBAAY,CAAC,CAAC,YAAY,CAAC,CAAC;YAEhE,IAAI,GAAG;gBACL,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;YAEjC,IAAI,MAAM,CAAC,MAAM,KAAK,iCAAU,CAAC,OAAO;gBACtC,OAAO,SAAS,CAAC;YAEnB,MAAM,UAAU,GAAG,CAAC,IAAS,EAA8B,EAAE;gBAC3D,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,0BAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC5E,OAAO,MAAM,YAAY,6BAAa,IAAI,gBAAgB,KAAK,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9G,CAAC,CAAC;YAEF,IAAI,gBAAgB,CAAC;YACrB,IAAI,SAAS,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClC,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC;oBAC/D,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,SAAS,EAAE,OAAO,CAAC,QAAQ;oBAC3B,gBAAgB,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE;oBAClD,0BAA0B,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,EAAE,wBAAwB;iBACjF,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,uBAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrD,gBAAgB,EAAE,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAExD,MAAM,IAAI,GAAG,IAAI,sBAAU,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAE9E,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpF,IAAI,SAAS,KAAK,MAAM,CAAC,cAAc;gBACrC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAE9C,gGAAgG;YAChG,IAAI,SAAS,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC3C,gBAAgB,EAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClE,CAAC;YAED,qCAAqC;YACrC,IAAI,SAAS,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,GAAG,wBAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/C,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACjC,CAAC;YAED,IAAI,SAAS,KAAK,mBAAmB,IAAI,oBAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC9E,IAAI,iCAAU,CAAC,OAAO,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,CAAC;oBAC9E,OAAO,SAAS,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,oBAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,QAAQ;gBACzC,OAAO,IAAI,CAAC;YAEd,IAAI,SAAS,KAAK,MAAM,CAAC,WAAW;gBAClC,OAAO,SAAS,CAAC;YAEnB,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,SAAS,KAAK,cAAc;gBAC9B,OAAO,SAAS,CAAC;YAEnB,MAAM,SAAS,GAAG,IAAI,2BAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAC3G,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG;gBACL,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,OAAO,CAAC;YAEtC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAA2B,EAAE,GAAmB;QAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,SAAS,CAAC;QAEnB,MAAM,YAAY,GAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,qBAAS,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,mCAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,yCAAkB,CAAC,MAAM,CAAC,CAAC;QAC7K,IAAI,yCAAkB,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAC/C,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,aAAa,CAAC;YAC1C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,SAAqB,CAAC;QAC1B,IAAI,qBAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YACtC,SAAS,GAAG,EAAE,CAAC;YACf,SAAS,CAAC,IAAI,CAAC,oBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,+FAA+F;QACnI,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,+CAA+C;QACxF,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC7H,IAAI,SAAS,KAAK,QAAQ;YACxB,OAAO,SAAS,CAAC;QAEnB,IAAI,qBAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,qBAAS,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,IAAI,SAAS,KAAK,MAAM;gBACtB,OAAO,SAAS,CAAC;YACnB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACzD,IAAI,SAAS,KAAK,aAAa;gBAC7B,OAAO,SAAS,CAAC;YACnB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,qBAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,gIAAgI;QACrK,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,GAAc,EAAE,QAAmB;QAC5D,IAAI,SAAqB,CAAC;QAC1B,IAAI,SAAS,KAAK,QAAQ;YACxB,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;;YAEtC,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEzB,OAAO,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7F,CAAC;IAEO,QAAQ,CAAC,EAAiB,EAAE,QAAiB,KAAK;QACxD,uFAAuF;QACvF,gGAAgG;QAChG,kGAAkG;QAClG,6FAA6F;QAC7F,sBAAsB;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QAChE,MAAM,EAAE,GAAG,EAAE,CAAC,QAAS,CAAC;QACxB,MAAM,MAAM,GAAG,qBAAS,CAAC,aAAa,CAAC,MAAM,CAAC;QAC9C,MAAM,OAAO,GAAG,qBAAS,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,uDAAuD;QAEhH,2GAA2G;QAC3G,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC;QAErF,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,qBAAS,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACzF,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC;QAEjC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,+FAA+F;YAC3H,OAAO,iCAAU,CAAC,UAAU,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,2CAA2C;QAErF,wCAAwC;QACxC,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,yBAAa,CAAC,YAAY,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,uBAAW,CAAC,aAAa,CAAC,CAAC;QAC3L,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC;gBACxD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;oBAClC,SAAS;gBACX,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrC,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,iCAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,EAAiB,EAAE,SAAkB,EAAE,GAAmB;QACvF,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,UAAU,CAAC;QAEvC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,mGAAmG;YACnG,IAAI,iCAAU,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC7D,OAAO,SAAS,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,UAAU,CAAC;gBACvC,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAU,CAAC;QACjC,IAAI,OAA8B,CAAC;QACnC,IAAI,aAAa,CAAC;QAClB,MAAM,cAAc,GAAG,IAAI,qCAAc,EAAE,CAAC;QAE5C,sEAAsE;QACtE,OAAO,SAAS,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;YACvD,IAAI,yCAAkB,CAAC,MAAM,KAAK,MAAM,qBAAS,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,mCAAY,CAAC,UAAU,EAAE,cAAc,CAAC;gBACzH,OAAO,OAAO,CAAC;YACjB,kDAAkD;YAClD,IAAI,SAAS,KAAK,aAAa;gBAC7B,SAAS;YACX,aAAa,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;YACvC,aAAa,CAAC,UAAU,GAAG,iCAAU,CAAC,aAAa,CAAC;QACtD,CAAC;QAED,IAAI,SAAS,KAAK,aAAa;YAC7B,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAE7B,kFAAkF;QAClF,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,WAAW;QACtB,IAAI,GAA0B,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,qCAAc,EAAE,CAAC;QACjC,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAE7B,MAAM,EAAE,GAAG,IAAI,oBAAa,EAAE,CAAC;QAC/B,qBAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,mFAAmF;YACnF,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACnC,GAAG,GAAG,CAAC,iCAAU,CAAC,OAAO,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAU,EAAE,GAAG,CAAC,CAAC;YACjH,CAAC;iBAAM,CAAC;gBACN,6GAA6G;gBAC7G,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAClC,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW;gBACnB,GAAG,GAAG,SAAS,CAAC,CAAC,8BAA8B;QACnD,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChC,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,wCAAwC;YAC3F,IAAI,CAAC,IAAI,CAAC,eAAe;gBACvB,GAAG,GAAG,SAAS,CAAC,CAAC,6BAA6B;QAClD,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO;YACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEvB,kBAAkB;QAClB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,EAAiB;QACrC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,qCAAc,EAAE,CAAC;QACjC,GAAG,CAAC,UAAU,GAAG,iCAAU,CAAC,QAAQ,CAAC;QAErC,IAAI,GAA0B,CAAC;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACnC,GAAG,GAAG,CAAC,iCAAU,CAAC,OAAO,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAU,EAAE,GAAG,CAAC,CAAC;gBAC/G,IAAI,CAAC,IAAI,CAAC,WAAW;oBACnB,GAAG,GAAG,SAAS,CAAC,CAAC,8BAA8B;YACnD,CAAC;iBAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAChC,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI,CAAC,eAAe;oBACvB,GAAG,GAAG,SAAS,CAAC,CAAC,6BAA6B;YAClD,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO;YACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEvB,gGAAgG;QAChG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,QAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAE7D,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,kBAAW,CAAC,KAAK,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3E,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,qBAAS,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED,gBAAgB;IACT,gBAAgB,CAAC,EAAiB;QACvC,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACzF,CAAC;IAED,gBAAgB;IACT,YAAY,CAAC,EAAgB;QAClC,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,gBAAgB;IACT,UAAU,CAAC,EAAgB;QAChC,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU;YACvD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,gBAAgB;IACT,aAAa,CAAC,EAAgB;QACnC,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,gBAAgB;IACT,WAAW,CAAC,EAAgB;QACjC,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrF,CAAC;IAED,gBAAgB;IACT,gBAAgB,CAAC,EAAgB,EAAE,OAAqB;QAC7D,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnG,CAAC;IAED,gBAAgB;IAChB,IAAW,iBAAiB;QAC1B,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,2BAAY,CAAC,4BAA4B,CAAC,CAAC;IACjG,CAAC;IAED,gBAAgB;IACT,KAAK,CAAC,UAAU,CAAC,EAAgB;QACtC,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,iBAAiB;YACzB,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,OAAO,KAAK,CAAC;QACf,sGAAsG;QACtG,MAAM,IAAI,GAAG,qBAAS,CAAC,SAAS,CAAC,UAAU,CAAC;QAC5C,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO,IAAI,CAAC;QACd,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,OAAwB;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,qBAAS,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ;YACxC,OAAO,CAAC,+BAA+B;QAEzC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC1E,OAAO;QAET,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IAED,gBAAgB;IACT,QAAQ,CAAC,OAAwB;QACtC,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;YAClF,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAEtD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAEO,oBAAoB,CAAC,OAAe;QAC1C,IAAI,IAAI,CAAC,SAAS;YAChB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB;IACT,cAAc,CAAC,QAAgB;QACpC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,KAAc;QAChC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,qBAAS,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzB,qBAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU;QACrB,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,IAAI,oBAAa,EAAE,CAAC;YAC/B,qBAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;CACF;AAtjCD,4BAsjCC;AAED;;GAEG;AACH,MAAa,mBAAmB;IAC9B,sGAAsG;IAC/F,MAAM,KAAK,KAAK,KAAc,OAAO,qBAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,qBAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7G;;;OAGG;IACI,MAAM,CAAC,cAAc,CAAC,aAAsB,IAAI;QACrD,0GAA0G;QAC1G,IAAI,qBAAS,CAAC,QAAQ,CAAC,KAAK;YAC1B,OAAO,qBAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QAEhD,IAAI,qBAAS,CAAC,cAAc,CAAC,SAAS;YACpC,OAAO,qBAAS,CAAC,cAAc,CAAC,QAAQ,CAAC;QAE3C,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,eAAe;QAC3B,IAAI,qBAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,qBAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACpD,IAAI,IAAI;gBACN,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QAED,OAAO,qBAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;IAED,wEAAwE;IACjE,MAAM,CAAC,cAAc;QAC1B,MAAM,IAAI,GAAG,qBAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAS,CAAC,cAAc,CAAC,QAAQ,CAAC;IAClE,CAAC;CACF;AAnCD,kDAmCC;AAED,cAAc;AACd,WAAiB,QAAQ;IACvB,MAAa,SAAS;QACb,OAAO,GAAG,KAAK,CAAC;QAChB,MAAM,GAAG,KAAK,CAAC;QACf,SAAS,GAAG,CAAC,CAAC;QACd,UAAU,CAAW;QACrB,OAAO,CAAC,KAAgB;YAC7B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACrC,CAAC;QACM,KAAK;YACV,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,GAAG,CAAC;QACb,CAAC;KACF;IAhBY,kBAAS,YAgBrB,CAAA;IAED,MAAa,QAAQ;QACnB,wGAAwG;QACjG,iBAAiB,GAAG,GAAG,CAAC;QAC/B,6GAA6G;QACtG,YAAY,GAAG,GAAG,CAAC;QAC1B,kGAAkG;QAC3F,cAAc,GAAG,GAAG,CAAC;QAC5B,2EAA2E;QACpE,cAAc,GAAG,IAAI,CAAC;QAC7B,yFAAyF;QAClF,UAAU,GAAG,IAAI,CAAC;QACzB,4DAA4D;QACrD,OAAO,GAAG,IAAI,CAAC;QACtB,mCAAmC;QAC5B,YAAY,GAAG,yBAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACjD,6DAA6D;QACtD,eAAe,GAAG,CAAC,CAAC;KAC5B;IAjBY,iBAAQ,WAiBpB,CAAA;AACH,CAAC,EArCgB,QAAQ,wBAAR,QAAQ,QAqCxB","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LocatingElements\n */\n\nimport { BeDuration, Id64, Id64Arg, Id64Set } from \"@itwin/core-bentley\";\nimport { CurveCurve, CurvePrimitive, GeometryQuery, IModelJson as GeomJson, Point2d, Point3d, Vector3d, XAndY } from \"@itwin/core-geometry\";\nimport { SnapRequestProps } from \"@itwin/core-common\";\nimport { ElementLocateManager, HitListHolder, LocateAction, LocateFilterStatus, LocateResponse, SnapStatus } from \"./ElementLocateManager\";\nimport { HitDetail, HitDetailType, HitGeomType, HitList, HitPriority, HitSource, IntersectDetail, SnapDetail, SnapHeat, SnapMode } from \"./HitDetail\";\nimport { IModelApp } from \"./IModelApp\";\nimport { CanvasDecoration } from \"./render/CanvasDecoration\";\nimport { IconSprites, Sprite, SpriteLocation } from \"./Sprites\";\nimport { BeButton, BeButtonEvent, BeTouchEvent, InputSource } from \"./tools/Tool\";\nimport { ToolSettings } from \"./tools/ToolSettings\";\nimport { DecorateContext } from \"./ViewContext\";\nimport { Decorator } from \"./ViewManager\";\nimport { ScreenViewport, Viewport } from \"./Viewport\";\nimport { _requestSnap } from \"./common/internal/Symbols\";\nimport { AccuDraw, AccuDrawFlags, AccuDrawHintBuilder } from \"./AccuDraw\";\n\n// cspell:ignore dont primitivetools\n\n/** Virtual cursor for using AccuSnap with touch input.\n * @internal\n */\nexport class TouchCursor implements CanvasDecoration {\n public position = new Point3d();\n public viewport: Viewport;\n protected _offsetPosition = new Point3d();\n protected _size: number;\n protected _yOffset: number;\n protected _isSelected = false;\n protected _isDragging = false;\n protected _inTouchTap = false;\n\n protected constructor(vp: ScreenViewport) {\n this._size = vp.pixelsFromInches(0.3);\n this._yOffset = this._size * 1.75;\n this.viewport = vp;\n }\n\n protected setPosition(vp: Viewport, worldLocation: Point3d): boolean {\n const pointNpc = vp.worldToNpc(worldLocation);\n if (pointNpc.z < 0.0 || pointNpc.z > 1.0)\n pointNpc.z = 0.5; // move inside frustum.\n\n const viewLocation = vp.npcToView(pointNpc);\n if (!vp.viewRect.containsPoint(viewLocation))\n return false; // outside this viewport rect\n\n viewLocation.x = Math.floor(viewLocation.x) + 0.5;\n viewLocation.y = Math.floor(viewLocation.y) + 0.5;\n viewLocation.z = 0.0;\n const offsetLocation = new Point3d(viewLocation.x, viewLocation.y - this._yOffset, viewLocation.z);\n if (!vp.viewRect.containsPoint(offsetLocation))\n return false; // outside this viewport rect\n\n this.position.setFrom(viewLocation);\n this._offsetPosition.setFrom(offsetLocation);\n if (vp !== this.viewport) {\n this.viewport.invalidateDecorations();\n this.viewport = vp;\n }\n vp.invalidateDecorations();\n return true;\n }\n\n protected drawHandle(ctx: CanvasRenderingContext2D, filled: boolean): void {\n ctx.beginPath();\n ctx.moveTo(-this._size, 0);\n ctx.bezierCurveTo(-this._size, -this._size * 0.85, -this._size * 0.6, -this._yOffset * 0.6, 0, -this._yOffset * 0.8);\n ctx.bezierCurveTo(this._size * 0.6, -this._yOffset * 0.6, this._size, -this._size * 0.85, this._size, 0);\n ctx.arc(0, 0, this._size, 0, Math.PI);\n if (filled)\n ctx.fill();\n\n ctx.stroke();\n\n ctx.beginPath();\n ctx.arc(0, 0, this._size * 0.75, 0, 2 * Math.PI);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(-this._size * 0.4, 0);\n ctx.lineTo(this._size * 0.4, 0);\n ctx.moveTo(-this._size * 0.4, this._size * 0.25);\n ctx.lineTo(this._size * 0.4, this._size * 0.25);\n ctx.stroke();\n }\n\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"rgba(0,0,0,.75)\";\n ctx.fillStyle = \"white\";\n ctx.strokeRect(-2, -(this._yOffset + 2), 5, 5);\n ctx.fillRect(-1, -(this._yOffset + 1), 3, 3);\n\n ctx.lineWidth = 3.5;\n ctx.lineCap = \"round\";\n ctx.fillStyle = this._isSelected ? \"rgba(35,187,252,.25)\" : \"rgba(255,215,0,.25)\";\n ctx.shadowColor = \"black\";\n ctx.shadowBlur = 10;\n this.drawHandle(ctx, true);\n\n ctx.lineWidth = 1.5;\n ctx.strokeStyle = this._isSelected ? \"rgba(35,187,252,.75)\" : \"rgba(255,215,0,.75)\";\n ctx.shadowBlur = 0;\n this.drawHandle(ctx, false);\n }\n\n protected isSelected(pt: XAndY): boolean { return this.position.distance(Point3d.create(pt.x, pt.y)) < this._size; }\n public isButtonHandled(ev: BeButtonEvent): boolean { return (BeButton.Data === ev.button && InputSource.Touch === ev.inputSource && !this._inTouchTap); }\n\n public doTouchMove(ev: BeTouchEvent): boolean {\n if (undefined === ev.viewport || !ev.isSingleTouch)\n return false;\n if (!this._isDragging || !this.setPosition(ev.viewport, ev.point))\n return false;\n ev.viewPoint = this._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return true;\n }\n\n public doTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean {\n if (undefined === ev.viewport || !ev.isSingleTouch)\n return false;\n return (this._isDragging = this.isSelected(startEv.viewPoint));\n }\n\n public doTouchStart(ev: BeTouchEvent): void {\n this._isSelected = ev.isSingleTouch && this.isSelected(ev.viewPoint);\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n public doTouchEnd(ev: BeTouchEvent): void {\n if (this._isDragging && undefined !== ev.viewport)\n IModelApp.toolAdmin.currentInputState.fromPoint(ev.viewport, this._offsetPosition, InputSource.Touch); // Current location should reflect virtual cursor offset...\n this._isSelected = this._isDragging = false;\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n public async doTouchTap(ev: BeTouchEvent): Promise<boolean> {\n if (undefined === ev.viewport || !ev.isSingleTouch || 1 !== ev.tapCount)\n return false;\n if (!this.isSelected(ev.viewPoint)) {\n if (!this.setPosition(ev.viewport, ev.point))\n return false;\n ev.viewPoint = this._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return false;\n }\n ev.viewPoint = this._offsetPosition;\n this._inTouchTap = true;\n await IModelApp.toolAdmin.convertTouchTapToButtonDownAndUp(ev);\n this._inTouchTap = false;\n return true;\n }\n\n public static createFromTouchTap(ev: BeTouchEvent): TouchCursor | undefined {\n if (undefined === ev.viewport || !ev.isSingleTouch || 1 !== ev.tapCount)\n return undefined;\n const touchCursor = new TouchCursor(ev.viewport);\n if (!touchCursor.setPosition(ev.viewport, ev.point) && !touchCursor.setPosition(ev.viewport, ev.viewport.view.getCenter()))\n return undefined;\n ev.viewPoint = touchCursor._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return touchCursor;\n }\n}\n\n/** AccuSnap is an aide for snapping to interesting points on elements or decorations as the cursor moves over them.\n * @see [Using AccuSnap]($docs/learning/frontend/primitivetools.md#AccuSnap)\n * @public\n * @extensions\n */\nexport class AccuSnap implements Decorator {\n /** Currently active hit */\n public currHit?: HitDetail;\n /** Current list of hits. */\n public aSnapHits?: HitList<HitDetail>;\n /** Views that need to be flashed */\n public readonly needFlash = new Set<Viewport>();\n /** Views that are already flashed */\n public readonly areFlashed = new Set<Viewport>();\n /** The \"+\" that indicates where the snap point is */\n public readonly cross = new SpriteLocation();\n /** The icon that indicates what type of snap is active */\n public readonly icon = new SpriteLocation();\n /** The icon that indicates an error */\n public readonly errorIcon = new SpriteLocation();\n /** Reason key for last error */\n public errorKey?: string;\n /** localized message explaining why last error was generated. */\n public explanation?: string;\n /** Number of times \"suppress\" has been called -- unlike suspend this is not automatically cleared by tools */\n private _suppressed = 0;\n /** Location of cursor when we last checked for motion */\n private readonly _lastCursorPos = new Point2d();\n /** @internal */\n public readonly toolState = new AccuSnap.ToolState();\n /** @internal */\n protected _settings = new AccuSnap.Settings();\n /** @internal */\n public touchCursor?: TouchCursor;\n /** Current request for tooltip message. */\n private _toolTipPromise?: Promise<Promise<void>>;\n\n /** @internal */\n public onInitialized() { }\n private get _searchDistance(): number { return this.isLocateEnabled ? 1.0 : this._settings.searchDistance; }\n private get _hotDistanceInches(): number { return IModelApp.locateManager.apertureInches * this._settings.hotDistanceFactor; }\n /** Whether locate of elements under the cursor is enabled by the current InteractiveTool. */\n public get isLocateEnabled(): boolean { return this.toolState.locate; }\n /** Whether snapping to elements under the cursor is enabled by the current InteractiveTool. */\n public get isSnapEnabled(): boolean { return this.toolState.enabled; }\n /** Whether the user setting for snapping is enabled. Snapping is done only when both the user and current InteractiveTool have enabled it. */\n public get isSnapEnabledByUser(): boolean { return this._settings.enableFlag; }\n /** AccuSnap user settings */\n public get userSettings() { return this._settings; }\n\n private isFlashed(view: Viewport): boolean { return (this.areFlashed.has(view)); }\n private needsFlash(view: Viewport): boolean { return (this.needFlash.has(view)); }\n private setNeedsFlash(view: Viewport) {\n this.needFlash.add(view);\n this.clearIsFlashed(view);\n view.invalidateDecorations();\n }\n\n private setIsFlashed(view: Viewport) { this.areFlashed.add(view); }\n private clearIsFlashed(view: Viewport) { this.areFlashed.delete(view); }\n private static toSnapDetail(hit?: HitDetail): SnapDetail | undefined { return (hit && hit instanceof SnapDetail) ? hit : undefined; }\n /** Currently active snap */\n public getCurrSnapDetail(): SnapDetail | undefined { return AccuSnap.toSnapDetail(this.currHit); }\n /** Determine whether there is a current hit that is *hot*. */\n public get isHot(): boolean {\n const currSnap = this.getCurrSnapDetail();\n return !currSnap ? false : currSnap.isHot;\n }\n\n /** Optional ids to never flash. Useful for tools like \"trim curve\" that won't want a flashed segment to obscure a result preview.\n * @note Cleared when a primitive or view tool is started and saved/restored when a primitive tool is suspended/unsuspended.\n * @public\n */\n public neverFlash(ids?: Id64Arg): void {\n if (undefined === ids) {\n this.toolState.neverFlash = undefined;\n return;\n }\n\n const newIds = new Set<string>();\n for (const id of Id64.iterable(ids))\n newIds.add(id);\n\n this.toolState.neverFlash = (0 !== newIds.size ? newIds : undefined);\n }\n\n /** @internal */\n public destroy(): void {\n this.currHit = undefined;\n this.aSnapHits = undefined;\n }\n\n private get _doSnapping(): boolean { return this.isSnapEnabled && this.isSnapEnabledByUser && !this._isSnapSuspended; }\n private get _isSnapSuspended(): boolean { return (0 !== this._suppressed || 0 !== this.toolState.suspended); }\n\n /** Get the current snap divisor to use to use for SnapMode.NearestKeypoint.\n * @public\n */\n public get keypointDivisor() { return this._settings.keypointDivisor; }\n\n /** Get the current active SnapModes. SnapMode position determines priority, with the first entry being the highest. The SnapDetail will be returned for the first SnapMode that produces a hot snap.\n * @public\n */\n public getActiveSnapModes(): SnapMode[] {\n const snaps: SnapMode[] = [];\n snaps.push(SnapMode.NearestKeypoint);\n return snaps;\n }\n\n /** Can be implemented by a subclass of AccuSnap to implement a SnapMode override that applies only to the next point.\n * This method will be called whenever a new tool is installed and on button events.\n * @internal\n */\n public synchSnapMode(): void { }\n\n /** Check whether current tentative snap has valid curve geometry for finding extended intersections. */\n private get _searchForExtendedIntersections(): boolean {\n const snap = IModelApp.tentativePoint.getCurrSnap();\n return (undefined !== snap && undefined !== snap.primitive);\n }\n\n /**\n * Check to see whether its appropriate to generate an AccuSnap point, given the current user\n * and command settings, and whether a tentative point is currently active.\n */\n public get isActive(): boolean {\n // Unless we're snapping in intersect mode (to find extended intersections), skip if tentative point active...\n if (IModelApp.tentativePoint.isActive) {\n if (!this._doSnapping || !this._searchForExtendedIntersections)\n return false;\n\n const snaps = this.getActiveSnapModes();\n for (const snap of snaps) {\n if (snap === SnapMode.Intersection)\n return true;\n }\n\n return false;\n }\n\n return this._doSnapping || this.isLocateEnabled;\n }\n\n private initializeForCheckMotion(): void {\n this._lastCursorPos.setFrom(IModelApp.toolAdmin.currentInputState.lastMotion);\n }\n\n /** Clear the current AccuSnap info. */\n public clear(): void { this.setCurrHit(undefined); }\n /** @internal */\n public setCurrHit(newHit?: HitDetail): void {\n const newSnap = AccuSnap.toSnapDetail(newHit);\n const currSnap = this.getCurrSnapDetail();\n const sameElem = (undefined !== newHit && newHit.isSameHit(this.currHit));\n const sameHit = (sameElem && !newSnap);\n const sameSnap = (sameElem && undefined !== newSnap && undefined !== currSnap);\n const samePt = (sameHit || (sameSnap && newSnap.snapPoint.isAlmostEqual(currSnap.snapPoint)));\n const sameHot = (sameHit || (sameSnap && (this.isHot === newSnap.isHot)));\n const sameBaseSnapMode = (!newSnap || !currSnap || newSnap.snapMode === currSnap.snapMode);\n const sameType = (sameHot && (!currSnap || (currSnap.getHitType() === newHit.getHitType())));\n\n // see if it is the same point on the same element, the hot flags are the same multiple snaps, and the snap modes are the same\n if (samePt && sameType && sameBaseSnapMode) {\n // we know that nothing about the screen could change, just save the new hit and return to avoid screen flash\n this.currHit = newHit;\n return;\n }\n\n this.erase();\n\n // if we hit the same element with the same \"hotness\" as last time, we don't need to erase it\n // multiple snaps: but only if the old and new snap modes are the same\n if (!sameHot || !sameBaseSnapMode) {\n this.unFlashViews();\n this.setFlashHit(newHit);\n }\n\n // if we didn't get a new hit, we're done\n if (undefined === (this.currHit = newHit))\n return;\n\n // draw sprites for this hit\n this.showSnapSprite();\n }\n\n /** flash a hit in a single view. */\n private flashHitInView(hit: HitDetail, context: DecorateContext) {\n const viewport = context.viewport;\n if (!viewport || !this.hitShouldBeHilited(hit) || !this.needsFlash(viewport))\n return;\n\n hit.draw(context);\n this.setIsFlashed(viewport);\n }\n\n private setNeedsFlashView(view: Viewport) {\n if (!this.isFlashed(view) && !this.needsFlash(view))\n this.setNeedsFlash(view);\n }\n\n /** flash a hit in its view. */\n private setFlashHit(hit?: HitDetail): void {\n if (hit !== undefined && this.hitShouldBeHilited(hit))\n this.setNeedsFlashView(hit.viewport);\n }\n\n /** @internal */\n public erase(): void {\n this.clearToolTip(undefined); // make sure there's no tooltip up.\n this.clearSprites(); // remove all sprites from the screen\n }\n\n private showElemInfo(viewPt: XAndY, vp: ScreenViewport, hit: HitDetail, delay: BeDuration): void {\n if (!IModelApp.viewManager.doesHostHaveFocus || undefined !== this._toolTipPromise)\n return;\n\n if (!IModelApp.toolAdmin.wantToolTip(hit))\n return;\n\n const promise = this._toolTipPromise = delay.executeAfter(async () => {\n if (promise !== this._toolTipPromise)\n return; // we abandoned this request during delay\n try {\n const msg = await IModelApp.toolAdmin.getToolTip(hit);\n if (this._toolTipPromise === promise) // have we abandoned this request while awaiting getToolTip?\n this.showLocateMessage(viewPt, vp, msg);\n } catch { } // happens if getToolTip was canceled\n });\n }\n\n private showLocateMessage(viewPt: XAndY, vp: ScreenViewport, msg: HTMLElement | string) {\n if (IModelApp.viewManager.doesHostHaveFocus)\n vp.openToolTip(msg, viewPt);\n }\n\n /** @internal */\n public displayToolTip(viewPt: XAndY, vp: ScreenViewport, uorPt?: Point3d): void {\n // if the tooltip is already displayed, or if user doesn't want it, quit.\n if (!this._settings.toolTip || !IModelApp.notifications.isToolTipSupported || IModelApp.notifications.isToolTipOpen)\n return;\n\n const accuSnapHit = this.currHit;\n const tpHit = IModelApp.tentativePoint.getCurrSnap();\n\n // if we don't have either an AccuSnap or a tentative point hit, quit.\n if (!accuSnapHit && !tpHit && !this.errorIcon.isActive)\n return;\n\n let theHit: HitDetail | undefined;\n\n // determine which type of hit\n if (tpHit) {\n if (uorPt) {\n // see if he came back somewhere near the currently snapped element\n const aperture = (this._settings.stickyFactor * vp.pixelsFromInches(IModelApp.locateManager.apertureInches) / 2.0) + 1.5;\n if (!IModelApp.locateManager.picker.testHit(tpHit, vp, uorPt, aperture, IModelApp.locateManager.options))\n return;\n }\n theHit = tpHit;\n } else {\n theHit = accuSnapHit;\n }\n\n // if we're currently showing an error, get the error message...otherwise display hit info...\n if (!this.errorIcon.isActive && theHit) {\n this.showElemInfo(viewPt, vp, theHit, this._settings.toolTipDelay);\n return;\n }\n\n // If we have an error explanation...use it as is!\n if (this.explanation) {\n this.showLocateMessage(viewPt, vp, this.explanation);\n return;\n }\n\n // if we don't have an explanation yet, translate the error code.\n if (!this.errorKey)\n return;\n\n this.explanation = IModelApp.localization.getLocalizedString(`iModelJs:${this.errorKey}`);\n if (!this.explanation)\n return;\n\n this.showLocateMessage(viewPt, vp, this.explanation);\n }\n\n /** @internal */\n public clearToolTip(ev?: BeButtonEvent): void {\n // Throw away any stale request for a tooltip message\n this._toolTipPromise = undefined;\n if (!IModelApp.notifications.isToolTipOpen)\n return;\n\n if (ev && (5 > ev.viewPoint.distanceXY(IModelApp.notifications.toolTipLocation)))\n return;\n\n IModelApp.notifications.clearToolTip();\n }\n\n /** Display the sprites for the current snap to indicate its position on the screen and what snap mode it represents. */\n private showSnapSprite(): void {\n const snap = this.getCurrSnapDetail();\n if (!snap)\n return;\n\n const crossPt = snap.snapPoint;\n const viewport = snap.viewport;\n const crossSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}${snap.isHot ? \"sprites/SnapCross.png\" : \"sprites/SnapUnfocused.png\"}`);\n\n this.cross.activate(crossSprite, viewport, crossPt);\n\n const snapSprite = snap.sprite;\n if (snapSprite)\n this.icon.activate(snapSprite, viewport, AccuSnap.adjustIconLocation(viewport, crossPt, snapSprite.size));\n }\n\n private static adjustIconLocation(vp: Viewport, input: Point3d, iconSize: XAndY): Point3d {\n const out = vp.worldToView(input);\n out.x += (iconSize.x / 3.0);\n out.y -= (iconSize.y * 1.3);\n return vp.viewToWorld(out, out);\n }\n\n /** try to indicate what's wrong with the current point (why we're not snapping). */\n private showSnapError(out: LocateResponse, ev: BeButtonEvent) {\n this.explanation = out.explanation;\n this.errorKey = out.reason;\n this.errorIcon.deactivate();\n\n const vp = ev.viewport!;\n let errorSprite: Sprite | undefined;\n switch (out.snapStatus) {\n case SnapStatus.FilteredByApp:\n errorSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}sprites/SnapAppFiltered.png`);\n break;\n\n case SnapStatus.FilteredByAppQuietly:\n this.errorKey = undefined;\n break;\n\n case SnapStatus.NotSnappable:\n errorSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}sprites/SnapNotSnappable.png`);\n this.errorKey = ElementLocateManager.getFailureMessageKey(\"NotSnappable\");\n break;\n }\n\n if (!errorSprite)\n return;\n\n const spriteSize = errorSprite.size;\n const pt = AccuSnap.adjustIconLocation(vp, ev.rawPoint, spriteSize);\n\n this.errorIcon.activate(errorSprite, vp, pt);\n }\n\n private clearSprites() {\n this.errorIcon.deactivate();\n this.cross.deactivate();\n this.icon.deactivate();\n }\n\n /** determine whether a hit should be hilited or not. */\n private hitShouldBeHilited(hit: HitDetail | undefined): boolean {\n if (!hit)\n return false;\n\n if (hit.isModelHit || hit.isMapHit)\n return false; // Avoid annoying flashing of reality models.\n\n if (this.toolState.neverFlash && this.toolState.neverFlash.has(hit.sourceId))\n return false;\n\n const snap = AccuSnap.toSnapDetail(hit);\n return !snap || snap.isHot || this._settings.hiliteColdHits;\n }\n\n private unFlashViews() {\n this.needFlash.clear();\n for (const vp of this.areFlashed)\n vp.flashedId = undefined;\n\n this.areFlashed.clear();\n }\n\n /** @internal */\n public adjustPointIfHot(pt: Point3d, view: Viewport): void {\n const currSnap = this.getCurrSnapDetail();\n\n if (!currSnap || !currSnap.isHot || view !== currSnap.viewport)\n return;\n\n pt.setFrom(currSnap.adjustedPoint);\n }\n\n /** Implemented by sub-classes to update ui to show current enabled state.\n * @internal\n */\n public onEnabledStateChange(_isEnabled: boolean, _wasEnabled: boolean) { }\n\n /** @internal */\n public getHitAndList(holder: HitListHolder): HitDetail | undefined {\n const hit = this.currHit;\n if (hit) {\n holder.setHitList(this.aSnapHits);\n this.aSnapHits = undefined;\n }\n return hit;\n }\n\n private initCmdState() {\n this.toolState.suspended = 0;\n this.toolState.neverFlash = undefined;\n }\n\n /** @internal */\n public suspend(doSuspend: boolean) {\n const previousDoSnapping = this._doSnapping;\n if (doSuspend)\n this.toolState.suspended++;\n else if (this.toolState.suspended > 0)\n this.toolState.suspended--;\n\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n }\n\n /** @internal */\n public suppress(doSuppress: boolean): number {\n const previousDoSnapping = this._doSnapping;\n if (doSuppress)\n this._suppressed++;\n else if (this._suppressed > 0)\n this._suppressed--;\n\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n return this._suppressed;\n }\n\n /** Turn AccuSnap on or off */\n public enableSnap(yesNo: boolean) {\n const previousDoSnapping = this._doSnapping;\n this.toolState.enabled = yesNo;\n if (!yesNo) {\n this.clear();\n if (undefined !== this.touchCursor && !this.wantVirtualCursor) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n }\n\n /** @internal */\n public intersectXY(tpSnap: SnapDetail, second: SnapDetail): IntersectDetail | undefined {\n // Get single segment curve from each snap to intersect...\n const tpSegment = tpSnap.getCurvePrimitive();\n if (undefined === tpSegment)\n return undefined;\n const segment = second.getCurvePrimitive();\n if (undefined === segment)\n return undefined;\n\n const worldToView = second.viewport.worldToViewMap.transform0;\n const detail = CurveCurve.intersectionProjectedXYPairs(worldToView, tpSegment, true, segment, true);\n if (0 === detail.length)\n return undefined;\n\n let closeIndex = 0;\n if (detail.length > 1) {\n const snapPt = worldToView.multiplyPoint3d(HitGeomType.Point === tpSnap.geomType && HitGeomType.Point !== second.geomType ? second.getPoint() : tpSnap.getPoint(), 1); // Don't check distance from arc centers...\n let lastDist: number | undefined;\n\n for (let i = 0; i < detail.length; i++) {\n const testPt = worldToView.multiplyPoint3d(detail[i].detailA.point, 1);\n const testDist = snapPt.realDistanceXY(testPt);\n\n if (undefined !== testDist && (undefined === lastDist || testDist < lastDist)) {\n lastDist = testDist;\n closeIndex = i;\n }\n }\n }\n\n const intersect = new IntersectDetail(tpSnap, SnapHeat.InRange, detail[closeIndex].detailA.point, segment, second.sourceId); // Should be ok to share hit detail with tentative...\n intersect.primitive = tpSegment; // Just save single segment that was intersected for line strings/shapes...\n\n return intersect;\n }\n\n private static doPostProcessSnapMode(snap: SnapDetail, snapMode: SnapMode): SnapStatus {\n const accuDraw = IModelApp.accuDraw;\n if (!accuDraw.isEnabled || accuDraw.isDeactivated)\n return SnapStatus.Disabled; // AccuDraw is require for this snap mode...\n\n if (HitGeomType.Surface === snap.geomType)\n return SnapStatus.NoSnapPossible; // Only valid for edge and curve hits...\n\n const curve = snap.getCurvePrimitive();\n if (undefined === curve)\n return SnapStatus.NoSnapPossible;\n\n const rMatrix = AccuDraw.getSnapRotation(snap, snap.viewport);\n if (undefined === rMatrix)\n return SnapStatus.NoSnapPossible;\n\n // Compute snap from AccuDraw origin when active or set AccuDraw rotation if accepted...\n if (!accuDraw.isActive) {\n accuDraw.setContext(AccuDrawFlags.SmartRotation); // Automatically orient compass to snap location if accepted...\n snap.setSnapMode(snapMode);\n return SnapStatus.Success;\n }\n\n const zVec = rMatrix.rowZ(); // This is a row matrix...\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, snap.getPoint(), zVec, snap.viewport, true);\n if (undefined === spacePoint)\n return SnapStatus.NoSnapPossible;\n\n let detail;\n if (SnapMode.PerpendicularPoint === snapMode)\n detail = curve.closestPoint(spacePoint, true);\n else\n detail = curve.closestTangent(spacePoint, { hintPoint: snap.getPoint(), vectorToEye: zVec, extend: true });\n\n if (undefined === detail?.curve)\n return SnapStatus.NoSnapPossible;\n\n // Close point may not be perpendicular when curve can't be extended...\n if (SnapMode.PerpendicularPoint === snapMode && !curve.isExtensibleFractionSpace) {\n const curvePlanePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, detail.point, zVec, snap.viewport, true);\n if (undefined === curvePlanePoint)\n return SnapStatus.NoSnapPossible;\n\n const curveNormal = detail.point.vectorTo(curvePlanePoint);\n const curveTangent = curve.fractionToPointAndUnitTangent(detail.fraction);\n if (!curveTangent.getDirectionRef().isPerpendicularTo(curveNormal)) {\n const curveExtensionPoint = AccuDrawHintBuilder.projectPointToLineInView(accuDraw.origin, curveTangent.getOriginRef(), curveTangent.getDirectionRef(), snap.viewport, true);\n if (undefined === curveExtensionPoint)\n return SnapStatus.NoSnapPossible;\n detail.point.setFrom(curveExtensionPoint);\n }\n }\n\n const point = AccuDrawHintBuilder.projectPointToPlaneInView(detail.point, accuDraw.origin, zVec, snap.viewport, true);\n if (undefined === point)\n return SnapStatus.NoSnapPossible;\n\n snap.setSnapPoint(point, SnapHeat.InRange); // Force hot snap...\n snap.setSnapMode(snapMode);\n\n return SnapStatus.Success;\n }\n\n /** @internal */\n public static async requestSnap(thisHit: HitDetail, snapModes: SnapMode[], hotDistanceInches: number, keypointDivisor: number, hitList?: HitList<HitDetail>, out?: LocateResponse): Promise<SnapDetail | undefined> {\n if (thisHit.isModelHit || thisHit.isMapHit || thisHit.isClassifier) {\n if (snapModes.includes(SnapMode.Nearest)) {\n if (out)\n out.snapStatus = SnapStatus.Success;\n\n return new SnapDetail(thisHit, SnapMode.Nearest, SnapHeat.InRange);\n } else if (1 === snapModes.length && snapModes.includes(SnapMode.Intersection)) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n\n return undefined;\n } else {\n if (out)\n out.snapStatus = SnapStatus.Success;\n\n const realitySnap = new SnapDetail(thisHit, SnapMode.Nearest, SnapHeat.None);\n realitySnap.sprite = undefined; // Don't show a snap mode that isn't applicable, but still accept hit point...\n return realitySnap;\n }\n }\n\n let hitVp;\n if (thisHit.path) {\n hitVp = thisHit.path.sectionDrawingAttachment?.viewport ?? thisHit.path.viewAttachment?.viewport;\n }\n\n hitVp = hitVp ?? thisHit.viewport;\n if (undefined !== thisHit.subCategoryId && !thisHit.isExternalIModelHit) {\n const appearance = hitVp.getSubCategoryAppearance(thisHit.subCategoryId);\n if (appearance.dontSnap) {\n if (out) {\n out.snapStatus = SnapStatus.NotSnappable;\n out.explanation = IModelApp.localization.getLocalizedString(`iModelJs:${ElementLocateManager.getFailureMessageKey(\"NotSnappableSubCategory\")}`);\n }\n return undefined;\n }\n }\n\n const haveTangentPoint = snapModes.includes(SnapMode.TangentPoint);\n const havePerpendicularPoint = snapModes.includes(SnapMode.PerpendicularPoint);\n const postProcessSnapMode = (havePerpendicularPoint ? SnapMode.PerpendicularPoint : (haveTangentPoint ? SnapMode.TangentPoint : undefined));\n\n if (undefined !== postProcessSnapMode) {\n // NOTE: These are not valid backend snap modes. Instead make the snap request using nearest\n // snap in order to get the candidate curve to use to compute the desired snap point...\n snapModes = snapModes.filter(snapMode => (snapMode !== SnapMode.PerpendicularPoint && snapMode !== SnapMode.TangentPoint));\n if (!snapModes.includes(SnapMode.Nearest))\n snapModes.push(SnapMode.Nearest);\n }\n\n const requestProps: SnapRequestProps = {\n id: thisHit.sourceId,\n testPoint: thisHit.testPoint,\n closePoint: thisHit.hitPoint,\n worldToView: hitVp.worldToViewMap.transform0.toJSON(),\n viewFlags: hitVp.viewFlags,\n snapModes,\n snapAperture: hitVp.pixelsFromInches(hotDistanceInches),\n snapDivisor: keypointDivisor,\n subCategoryId: thisHit.subCategoryId,\n geometryClass: thisHit.geometryClass,\n modelToWorld: thisHit.transformFromSourceIModel?.toJSON(),\n };\n\n const thisGeom = (thisHit.isElementHit ? IModelApp.viewManager.overrideElementGeometry(thisHit) : IModelApp.viewManager.getDecorationGeometry(thisHit));\n\n if (undefined !== thisGeom) {\n requestProps.decorationGeometry = [{ id: thisHit.sourceId, geometryStream: thisGeom }];\n } else if (!thisHit.isElementHit) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n return undefined;\n }\n\n if (snapModes.includes(SnapMode.Intersection)) {\n if (undefined !== hitList) {\n for (const hit of hitList.hits) {\n if (thisHit.sourceId === hit.sourceId || thisHit.iModel !== hit.iModel)\n continue;\n\n const geom = (hit.isElementHit ? IModelApp.viewManager.overrideElementGeometry(hit) : IModelApp.viewManager.getDecorationGeometry(hit));\n\n if (undefined !== geom) {\n if (undefined === requestProps.decorationGeometry)\n requestProps.decorationGeometry = [{ id: thisHit.sourceId, geometryStream: geom }];\n else\n requestProps.decorationGeometry.push({ id: thisHit.sourceId, geometryStream: geom });\n } else if (!hit.isElementHit) {\n continue;\n }\n\n if (undefined === requestProps.intersectCandidates)\n requestProps.intersectCandidates = [hit.sourceId];\n else\n requestProps.intersectCandidates.push(hit.sourceId);\n\n if (5 === requestProps.intersectCandidates.length)\n break; // Search for intersection with a few of the next best hits...\n }\n }\n\n if (1 === snapModes.length && undefined === requestProps.intersectCandidates) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n\n return undefined; // Don't make back end request when only doing intersection snap when we don't have another hit to intersect with...\n }\n }\n\n try {\n const result = await thisHit.iModel[_requestSnap](requestProps);\n\n if (out)\n out.snapStatus = result.status;\n\n if (result.status !== SnapStatus.Success)\n return undefined;\n\n const parseCurve = (json: any): CurvePrimitive | undefined => {\n const parsed = undefined !== json ? GeomJson.Reader.parse(json) : undefined;\n return parsed instanceof GeometryQuery && \"curvePrimitive\" === parsed.geometryCategory ? parsed : undefined;\n };\n\n let displayTransform;\n if (undefined !== thisHit.modelId) {\n displayTransform = thisHit.viewport.view.computeDisplayTransform({\n modelId: thisHit.modelId,\n elementId: thisHit.sourceId,\n viewAttachmentId: thisHit.path?.viewAttachment?.id,\n inSectionDrawingAttachment: undefined !== thisHit.path?.sectionDrawingAttachment,\n });\n }\n\n const snapPoint = Point3d.fromJSON(result.snapPoint);\n displayTransform?.multiplyPoint3d(snapPoint, snapPoint);\n\n const snap = new SnapDetail(thisHit, result.snapMode, result.heat, snapPoint);\n\n snap.setCurvePrimitive(parseCurve(result.curve), displayTransform, result.geomType);\n if (undefined !== result.parentGeomType)\n snap.parentGeomType = result.parentGeomType;\n\n // Update hitPoint from readPixels with exact point location corrected to surface/edge geometry.\n if (undefined !== result.hitPoint) {\n snap.hitPoint.setFromJSON(result.hitPoint);\n displayTransform?.multiplyPoint3d(snap.hitPoint, snap.hitPoint);\n }\n\n // Apply display transform to normal.\n if (undefined !== result.normal) {\n snap.normal = Vector3d.fromJSON(result.normal);\n displayTransform?.matrix.multiplyVector(snap.normal, snap.normal);\n snap.normal.normalizeInPlace();\n }\n\n if (undefined !== postProcessSnapMode && SnapMode.Nearest === result.snapMode) {\n if (SnapStatus.Success !== this.doPostProcessSnapMode(snap, postProcessSnapMode))\n return undefined;\n return snap;\n }\n\n if (SnapMode.Intersection !== snap.snapMode)\n return snap;\n\n if (undefined === result.intersectId)\n return undefined;\n\n const otherPrimitive = parseCurve(result.intersectCurve);\n if (undefined === otherPrimitive)\n return undefined;\n\n const intersect = new IntersectDetail(snap, snap.heat, snap.snapPoint, otherPrimitive, result.intersectId);\n return intersect;\n } catch {\n if (out)\n out.snapStatus = SnapStatus.Aborted;\n\n return undefined;\n }\n }\n\n private async getAccuSnapDetail(hitList: HitList<HitDetail>, out: LocateResponse): Promise<SnapDetail | undefined> {\n const thisHit = hitList.getNextHit();\n if (undefined === thisHit)\n return undefined;\n\n const filterStatus: LocateFilterStatus = (this.isLocateEnabled ? await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, out) : LocateFilterStatus.Accept);\n if (LocateFilterStatus.Accept !== filterStatus) {\n out.snapStatus = SnapStatus.FilteredByApp;\n return undefined;\n }\n\n let snapModes: SnapMode[];\n if (IModelApp.tentativePoint.isActive) {\n snapModes = [];\n snapModes.push(SnapMode.Nearest); // Special case: isActive only allows snapping with tentative to find extended intersections...\n } else {\n snapModes = this.getActiveSnapModes(); // Get the list of point snap modes to consider\n }\n\n const thisSnap = await AccuSnap.requestSnap(thisHit, snapModes, this._hotDistanceInches, this.keypointDivisor, hitList, out);\n if (undefined === thisSnap)\n return undefined;\n\n if (IModelApp.tentativePoint.isActive) {\n const tpSnap = IModelApp.tentativePoint.getCurrSnap();\n if (undefined === tpSnap)\n return undefined;\n const intersectSnap = this.intersectXY(tpSnap, thisSnap);\n if (undefined === intersectSnap)\n return undefined;\n hitList.setCurrentHit(thisHit);\n return intersectSnap;\n }\n\n IModelApp.accuDraw.onSnap(thisSnap); // AccuDraw can adjust nearest snap to intersection of circle (polar distance lock) or line (axis lock) with snapped to curve...\n hitList.setCurrentHit(thisHit);\n return thisSnap;\n }\n\n /** Request a snap from the backend for the supplied HitDetail.\n * @param hit The HitDetail to snap to.\n * @param snapMode Optional SnapMode, uses active snap modes if not specified.\n * @return A Promise for the SnapDetail or undefined if no snap could be created.\n */\n public async doSnapRequest(hit: HitDetail, snapMode?: SnapMode): Promise<SnapDetail | undefined> {\n let snapModes: SnapMode[];\n if (undefined === snapMode)\n snapModes = this.getActiveSnapModes();\n else\n snapModes = [snapMode];\n\n return AccuSnap.requestSnap(hit, snapModes, this._hotDistanceInches, this.keypointDivisor);\n }\n\n private findHits(ev: BeButtonEvent, force: boolean = false): SnapStatus {\n // When using AccuSnap to locate elements, we have to start with the datapoint adjusted\n // for locks and not the raw point. Otherwise, when grid/unit lock are on, we locate elements by\n // points not on the grid. This causes them to be \"pulled\" off the grid when they are accepted. On\n // the other hand, when NOT locating, we need to use the raw point so we can snap to elements\n // away from the grid.\n\n const testPoint = this.isLocateEnabled ? ev.point : ev.rawPoint;\n const vp = ev.viewport!;\n const picker = IModelApp.locateManager.picker;\n const options = IModelApp.locateManager.options.clone(); // Copy to avoid changing out from under active Tool...\n\n // NOTE: Since TestHit will use the same HitSource as the input hit we only need to sets this for DoPick...\n options.hitSource = this.isSnapEnabled ? HitSource.AccuSnap : HitSource.MotionLocate;\n\n let aperture = (vp.pixelsFromInches(IModelApp.locateManager.apertureInches) / 2.0) + 1.5;\n this.initializeForCheckMotion();\n aperture *= this._searchDistance;\n\n if (0 === picker.doPick(vp, testPoint, aperture, options)) {\n this.aSnapHits = undefined; // Clear any previous hit list so reset won't cycle through hits cursor is no longer over, etc.\n return SnapStatus.NoElements;\n }\n\n this.aSnapHits = picker.getHitList(true); // take ownership of the pickElem hit list.\n\n // see if we should keep the current hit\n const canBeSticky = !force && this.aSnapHits.length > 1 && this.currHit && (HitDetailType.Intersection !== this.currHit.getHitType() && this.currHit.priority < HitPriority.PlanarSurface);\n if (canBeSticky) {\n for (let iHit = 1; iHit < this.aSnapHits.length; ++iHit) {\n const thisHit = this.aSnapHits.hits[iHit];\n if (!thisHit.isSameHit(this.currHit))\n continue;\n this.aSnapHits.removeHit(iHit);\n this.aSnapHits.insertHit(0, thisHit);\n break;\n }\n }\n\n return SnapStatus.Success;\n }\n\n private async findLocatableHit(ev: BeButtonEvent, newSearch: boolean, out: LocateResponse): Promise<HitDetail | undefined> {\n out.snapStatus = SnapStatus.NoElements;\n\n if (newSearch) {\n this.aSnapHits = undefined;\n // search for new hits, but if the cursor is still close to the current hit, don't throw away list.\n if (SnapStatus.Success !== (out.snapStatus = this.findHits(ev)))\n return undefined;\n } else {\n if (!this.aSnapHits) {\n out.snapStatus = SnapStatus.NoElements;\n return undefined;\n }\n }\n\n const thisList = this.aSnapHits!;\n let thisHit: HitDetail | undefined;\n let firstRejected;\n const filterResponse = new LocateResponse();\n\n // keep looking through hits until we find one that is accu-snappable.\n while (undefined !== (thisHit = thisList.getNextHit())) {\n if (LocateFilterStatus.Accept === await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, filterResponse))\n return thisHit;\n // we only care about the status of the first hit.\n if (undefined !== firstRejected)\n continue;\n firstRejected = filterResponse.clone();\n firstRejected.snapStatus = SnapStatus.FilteredByApp;\n }\n\n if (undefined !== firstRejected)\n out.setFrom(firstRejected);\n\n // Reset current hit index to go back to first hit on next AccuSnap reset event...\n thisList.resetCurrentHit();\n return undefined;\n }\n\n /** When in auto-locate mode, advance to the next hit without searching again.\n * @internal\n */\n public async resetButton(): Promise<SnapStatus> {\n let hit: HitDetail | undefined;\n const out = new LocateResponse();\n out.snapStatus = SnapStatus.Disabled;\n\n this.clearToolTip(undefined);\n\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n\n if (this._doSnapping) {\n // if we don't have any more candidate hits, get a new list at the current location\n if (!this.aSnapHits || (0 === this.aSnapHits.length)) {\n out.snapStatus = this.findHits(ev);\n hit = (SnapStatus.Success !== out.snapStatus) ? undefined : await this.getAccuSnapDetail(this.aSnapHits!, out);\n } else {\n // drop the current hit from the list and then retest the list (without the dropped hit) to find the new snap\n this.aSnapHits.removeCurrentHit();\n hit = await this.getAccuSnapDetail(this.aSnapHits, out);\n }\n if (!this._doSnapping)\n hit = undefined; // Snap no longer requested...\n } else if (this.isLocateEnabled) {\n hit = await this.findLocatableHit(ev, false, out); // get next AccuSnap path (or undefined)\n if (!this.isLocateEnabled)\n hit = undefined; // Hit no longer requested...\n }\n\n // set the current hit\n if (hit || this.currHit)\n this.setCurrHit(hit);\n\n // indicate errors\n this.showSnapError(out, ev);\n return out.snapStatus;\n }\n\n /** Find the best snap point according to the current cursor location\n * @internal\n */\n public async onMotion(ev: BeButtonEvent): Promise<void> {\n this.clearToolTip(ev);\n const out = new LocateResponse();\n out.snapStatus = SnapStatus.Disabled;\n\n let hit: HitDetail | undefined;\n if (this.isActive) {\n if (this._doSnapping) {\n out.snapStatus = this.findHits(ev);\n hit = (SnapStatus.Success !== out.snapStatus) ? undefined : await this.getAccuSnapDetail(this.aSnapHits!, out);\n if (!this._doSnapping)\n hit = undefined; // Snap no longer requested...\n } else if (this.isLocateEnabled) {\n hit = await this.findLocatableHit(ev, true, out);\n if (!this.isLocateEnabled)\n hit = undefined; // Hit no longer requested...\n }\n }\n\n // set the current hit and display the sprite (based on snap's KeypointType)\n if (hit || this.currHit)\n this.setCurrHit(hit);\n\n // set up active error before calling displayToolTip to indicate error or show locate message...\n this.showSnapError(out, ev);\n this.displayToolTip(ev.viewPoint, ev.viewport!, ev.rawPoint);\n\n if (undefined !== this.touchCursor && InputSource.Mouse === ev.inputSource) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n\n /** @internal */\n public onPreButtonEvent(ev: BeButtonEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.isButtonHandled(ev) : false;\n }\n\n /** @internal */\n public onTouchStart(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor)\n this.touchCursor.doTouchStart(ev);\n }\n\n /** @internal */\n public onTouchEnd(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor && 0 === ev.touchCount)\n this.touchCursor.doTouchEnd(ev);\n }\n\n /** @internal */\n public onTouchCancel(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor)\n this.touchCursor.doTouchEnd(ev);\n }\n\n /** @internal */\n public onTouchMove(ev: BeTouchEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.doTouchMove(ev) : false;\n }\n\n /** @internal */\n public onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.doTouchMoveStart(ev, startEv) : false;\n }\n\n /** @internal */\n public get wantVirtualCursor(): boolean {\n return this._doSnapping || (this.isLocateEnabled && ToolSettings.enableVirtualCursorForLocate);\n }\n\n /** @internal */\n public async onTouchTap(ev: BeTouchEvent): Promise<boolean> {\n if (undefined !== this.touchCursor)\n return this.touchCursor.doTouchTap(ev);\n if (!this.wantVirtualCursor)\n return false;\n this.touchCursor = TouchCursor.createFromTouchTap(ev);\n if (undefined === this.touchCursor)\n return false;\n // Give active tool an opportunity to update it's tool assistance since event won't be passed along...\n const tool = IModelApp.toolAdmin.activeTool;\n if (undefined === tool)\n return true;\n await tool.onSuspend();\n await tool.onUnsuspend();\n return true;\n }\n\n private flashElements(context: DecorateContext): void {\n const viewport = context.viewport;\n if (this.currHit) {\n if (this.needsFlash(viewport))\n this.flashHitInView(this.currHit, context);\n return;\n }\n\n const hit = IModelApp.tentativePoint.getCurrSnap();\n if (!hit || hit.isModelHit || hit.isMapHit)\n return; // Don't hilite reality models.\n\n if (this.toolState.neverFlash && this.toolState.neverFlash.has(hit.sourceId))\n return;\n\n hit.draw(context);\n }\n\n /** @internal */\n public decorate(context: DecorateContext): void {\n if (undefined !== this.touchCursor && this.touchCursor.viewport === context.viewport)\n context.addCanvasDecoration(this.touchCursor, true);\n\n this.flashElements(context);\n\n if (this.cross.isActive) {\n this.cross.decorate(context);\n this.icon.decorate(context);\n }\n\n this.errorIcon.decorate(context);\n }\n\n private clearElemFromHitList(element: string) {\n if (this.aSnapHits)\n this.aSnapHits.removeHitsFrom(element);\n }\n\n /** @internal */\n public clearIfElement(sourceId: string): void {\n this.clearElemFromHitList(sourceId);\n\n const hit = this.currHit;\n if (hit && hit.sourceId === sourceId) {\n this.destroy();\n }\n }\n\n /** Enable locating elements.\n * @public\n */\n public enableLocate(yesNo: boolean) {\n this.toolState.locate = yesNo;\n if (!yesNo && undefined !== this.touchCursor && !this.wantVirtualCursor) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n\n /** Called whenever a new [[Tool]] is started.\n * @internal\n */\n public onStartTool(): void {\n this.initCmdState();\n this.enableSnap(false);\n this.enableLocate(false);\n IModelApp.tentativePoint.clear(true);\n }\n\n /**\n * Force AccuSnap to reevaluate the snap at the current cursor location.\n * This is useful of an application changes the snap mode and wants AccuSnap to choose it immediately, without\n * requiring the user to move the mouse.\n * @internal\n */\n public async reEvaluate() {\n if (this.getCurrSnapDetail()) {\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n return this.onMotion(ev);\n }\n }\n}\n\n/** TentativeOrAccuSnap returns information about an active snap generated by either [[AccuSnap]] or [[TentativePoint]].\n * @public\n */\nexport class TentativeOrAccuSnap {\n /** @return true if AccuSnap is *hot* or TentativePoint is active and snapped to pickable geometry. */\n public static get isHot(): boolean { return IModelApp.accuSnap.isHot || IModelApp.tentativePoint.isSnapped; }\n\n /** Get the current snap from either AccuSnap or TentativePoint.\n * @param checkIsHot true to only return the snap from AccuSnap when it is *hot*.\n * @return The current snap from AccuSnap, TentativePoint, or undefined.\n */\n public static getCurrentSnap(checkIsHot: boolean = true): SnapDetail | undefined {\n // Checking for a hot AccuSnap before checking TentativePoint is done to support extended intersections...\n if (IModelApp.accuSnap.isHot)\n return IModelApp.accuSnap.getCurrSnapDetail();\n\n if (IModelApp.tentativePoint.isSnapped)\n return IModelApp.tentativePoint.currSnap;\n\n return (checkIsHot ? undefined : IModelApp.accuSnap.getCurrSnapDetail());\n }\n\n /** @return The current snap location from AccuSnap or TentativePoint */\n public static getCurrentPoint(): Point3d {\n if (IModelApp.accuSnap.isHot) {\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n if (snap)\n return snap.adjustedPoint;\n }\n\n return IModelApp.tentativePoint.getPoint();\n }\n\n /** @return The current snap Viewport from AccuSnap or TentativePoint */\n public static getCurrentView(): ScreenViewport | undefined {\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n return snap ? snap.viewport : IModelApp.tentativePoint.viewport;\n }\n}\n\n/** @public */\nexport namespace AccuSnap {\n export class ToolState {\n public enabled = false;\n public locate = false;\n public suspended = 0;\n public neverFlash?: Id64Set;\n public setFrom(other: ToolState): void {\n this.enabled = other.enabled;\n this.locate = other.locate;\n this.suspended = other.suspended;\n this.neverFlash = other.neverFlash;\n }\n public clone(): ToolState {\n const val = new ToolState();\n val.setFrom(this);\n return val;\n }\n }\n\n export class Settings {\n /** How far cursor can be from snap location (relative to snap aperture) and be considered a hot snap */\n public hotDistanceFactor = 1.2;\n /** When moving along an element, affects the affinity for snapping to the same curve as the previous snap */\n public stickyFactor = 1.0;\n /** Factor applied to locate aperture when snapping is enabled and used to pick snap candidates */\n public searchDistance = 2.0;\n /** Whether the snapped element is also hilited when the snap is not hot */\n public hiliteColdHits = true;\n /** Enables snap on cursor motion when true, only snap using Tentative snap when false */\n public enableFlag = true;\n /** Whether to show a tooltip for snap and element locate */\n public toolTip = true;\n /** Delay before tooltip appears */\n public toolTipDelay = BeDuration.fromSeconds(.5);\n /** Curve segment divisor used by SnapMode.NearestKeypoint */\n public keypointDivisor = 2;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AccuSnap.js","sourceRoot":"","sources":["../../src/AccuSnap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LocatingElements\n */\n\nimport { BeDuration, Id64, Id64Arg, Id64Set } from \"@itwin/core-bentley\";\nimport { CurveCurve, CurvePrimitive, GeometryQuery, IModelJson as GeomJson, Point2d, Point3d, Vector3d, XAndY } from \"@itwin/core-geometry\";\nimport { SnapRequestProps } from \"@itwin/core-common\";\nimport { ElementLocateManager, HitListHolder, LocateAction, LocateFilterStatus, LocateResponse, SnapStatus } from \"./ElementLocateManager\";\nimport { HitDetail, HitDetailType, HitGeomType, HitList, HitPriority, HitSource, IntersectDetail, SnapDetail, SnapHeat, SnapMode } from \"./HitDetail\";\nimport { IModelApp } from \"./IModelApp\";\nimport { CanvasDecoration } from \"./render/CanvasDecoration\";\nimport { IconSprites, Sprite, SpriteLocation } from \"./Sprites\";\nimport { BeButton, BeButtonEvent, BeTouchEvent, InputSource } from \"./tools/Tool\";\nimport { ToolSettings } from \"./tools/ToolSettings\";\nimport { DecorateContext } from \"./ViewContext\";\nimport { Decorator } from \"./ViewManager\";\nimport { ScreenViewport, Viewport } from \"./Viewport\";\nimport { _requestSnap } from \"./common/internal/Symbols\";\nimport { AccuDraw, AccuDrawFlags, AccuDrawHintBuilder } from \"./AccuDraw\";\n\n// cspell:ignore dont primitivetools\n\n/** Virtual cursor for using AccuSnap with touch input.\n * @internal\n */\nexport class TouchCursor implements CanvasDecoration {\n public position = new Point3d();\n public viewport: Viewport;\n protected _offsetPosition = new Point3d();\n protected _size: number;\n protected _yOffset: number;\n protected _isSelected = false;\n protected _isDragging = false;\n protected _inTouchTap = false;\n\n protected constructor(vp: ScreenViewport) {\n this._size = vp.pixelsFromInches(0.3);\n this._yOffset = this._size * 1.75;\n this.viewport = vp;\n }\n\n protected setPosition(vp: Viewport, worldLocation: Point3d): boolean {\n const pointNpc = vp.worldToNpc(worldLocation);\n if (pointNpc.z < 0.0 || pointNpc.z > 1.0)\n pointNpc.z = 0.5; // move inside frustum.\n\n const viewLocation = vp.npcToView(pointNpc);\n if (!vp.viewRect.containsPoint(viewLocation))\n return false; // outside this viewport rect\n\n viewLocation.x = Math.floor(viewLocation.x) + 0.5;\n viewLocation.y = Math.floor(viewLocation.y) + 0.5;\n viewLocation.z = 0.0;\n const offsetLocation = new Point3d(viewLocation.x, viewLocation.y - this._yOffset, viewLocation.z);\n if (!vp.viewRect.containsPoint(offsetLocation))\n return false; // outside this viewport rect\n\n this.position.setFrom(viewLocation);\n this._offsetPosition.setFrom(offsetLocation);\n if (vp !== this.viewport) {\n this.viewport.invalidateDecorations();\n this.viewport = vp;\n }\n vp.invalidateDecorations();\n return true;\n }\n\n protected drawHandle(ctx: CanvasRenderingContext2D, filled: boolean): void {\n ctx.beginPath();\n ctx.moveTo(-this._size, 0);\n ctx.bezierCurveTo(-this._size, -this._size * 0.85, -this._size * 0.6, -this._yOffset * 0.6, 0, -this._yOffset * 0.8);\n ctx.bezierCurveTo(this._size * 0.6, -this._yOffset * 0.6, this._size, -this._size * 0.85, this._size, 0);\n ctx.arc(0, 0, this._size, 0, Math.PI);\n if (filled)\n ctx.fill();\n\n ctx.stroke();\n\n ctx.beginPath();\n ctx.arc(0, 0, this._size * 0.75, 0, 2 * Math.PI);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(-this._size * 0.4, 0);\n ctx.lineTo(this._size * 0.4, 0);\n ctx.moveTo(-this._size * 0.4, this._size * 0.25);\n ctx.lineTo(this._size * 0.4, this._size * 0.25);\n ctx.stroke();\n }\n\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"rgba(0,0,0,.75)\";\n ctx.fillStyle = \"white\";\n ctx.strokeRect(-2, -(this._yOffset + 2), 5, 5);\n ctx.fillRect(-1, -(this._yOffset + 1), 3, 3);\n\n ctx.lineWidth = 3.5;\n ctx.lineCap = \"round\";\n ctx.fillStyle = this._isSelected ? \"rgba(35,187,252,.25)\" : \"rgba(255,215,0,.25)\";\n ctx.shadowColor = \"black\";\n ctx.shadowBlur = 10;\n this.drawHandle(ctx, true);\n\n ctx.lineWidth = 1.5;\n ctx.strokeStyle = this._isSelected ? \"rgba(35,187,252,.75)\" : \"rgba(255,215,0,.75)\";\n ctx.shadowBlur = 0;\n this.drawHandle(ctx, false);\n }\n\n protected isSelected(pt: XAndY): boolean { return this.position.distance(Point3d.create(pt.x, pt.y)) < this._size; }\n public isButtonHandled(ev: BeButtonEvent): boolean { return (BeButton.Data === ev.button && InputSource.Touch === ev.inputSource && !this._inTouchTap); }\n\n public doTouchMove(ev: BeTouchEvent): boolean {\n if (undefined === ev.viewport || !ev.isSingleTouch)\n return false;\n if (!this._isDragging || !this.setPosition(ev.viewport, ev.point))\n return false;\n ev.viewPoint = this._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return true;\n }\n\n public doTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean {\n if (undefined === ev.viewport || !ev.isSingleTouch)\n return false;\n return (this._isDragging = this.isSelected(startEv.viewPoint));\n }\n\n public doTouchStart(ev: BeTouchEvent): void {\n this._isSelected = ev.isSingleTouch && this.isSelected(ev.viewPoint);\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n public doTouchEnd(ev: BeTouchEvent): void {\n if (this._isDragging && undefined !== ev.viewport)\n IModelApp.toolAdmin.currentInputState.fromPoint(ev.viewport, this._offsetPosition, InputSource.Touch); // Current location should reflect virtual cursor offset...\n this._isSelected = this._isDragging = false;\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n public async doTouchTap(ev: BeTouchEvent): Promise<boolean> {\n if (undefined === ev.viewport || !ev.isSingleTouch || 1 !== ev.tapCount)\n return false;\n if (!this.isSelected(ev.viewPoint)) {\n if (!this.setPosition(ev.viewport, ev.point))\n return false;\n ev.viewPoint = this._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return false;\n }\n ev.viewPoint = this._offsetPosition;\n this._inTouchTap = true;\n await IModelApp.toolAdmin.convertTouchTapToButtonDownAndUp(ev);\n this._inTouchTap = false;\n return true;\n }\n\n public static createFromTouchTap(ev: BeTouchEvent): TouchCursor | undefined {\n if (undefined === ev.viewport || !ev.isSingleTouch || 1 !== ev.tapCount)\n return undefined;\n const touchCursor = new TouchCursor(ev.viewport);\n if (!touchCursor.setPosition(ev.viewport, ev.point) && !touchCursor.setPosition(ev.viewport, ev.viewport.view.getCenter()))\n return undefined;\n ev.viewPoint = touchCursor._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return touchCursor;\n }\n}\n\n/** AccuSnap is an aide for snapping to interesting points on elements or decorations as the cursor moves over them.\n * @see [Using AccuSnap]($docs/learning/frontend/primitivetools.md#AccuSnap)\n * @public\n * @extensions\n */\nexport class AccuSnap implements Decorator {\n /** Currently active hit */\n public currHit?: HitDetail;\n /** Current list of hits. */\n public aSnapHits?: HitList<HitDetail>;\n /** Views that need to be flashed */\n public readonly needFlash = new Set<Viewport>();\n /** Views that are already flashed */\n public readonly areFlashed = new Set<Viewport>();\n /** The \"+\" that indicates where the snap point is */\n public readonly cross = new SpriteLocation();\n /** The icon that indicates what type of snap is active */\n public readonly icon = new SpriteLocation();\n /** The icon that indicates an error */\n public readonly errorIcon = new SpriteLocation();\n /** Reason key for last error */\n public errorKey?: string;\n /** localized message explaining why last error was generated. */\n public explanation?: string;\n /** Number of times \"suppress\" has been called -- unlike suspend this is not automatically cleared by tools */\n private _suppressed = 0;\n /** Location of cursor when we last checked for motion */\n private readonly _lastCursorPos = new Point2d();\n /** @internal */\n public readonly toolState = new AccuSnap.ToolState();\n /** @internal */\n protected _settings = new AccuSnap.Settings();\n /** @internal */\n public touchCursor?: TouchCursor;\n /** Current request for tooltip message. */\n private _toolTipPromise?: Promise<Promise<void>>;\n\n /** @internal */\n public onInitialized() { }\n private get _searchDistance(): number { return this.isLocateEnabled ? 1.0 : this._settings.searchDistance; }\n private get _hotDistanceInches(): number { return IModelApp.locateManager.apertureInches * this._settings.hotDistanceFactor; }\n /** Whether locate of elements under the cursor is enabled by the current InteractiveTool. */\n public get isLocateEnabled(): boolean { return this.toolState.locate; }\n /** Whether snapping to elements under the cursor is enabled by the current InteractiveTool. */\n public get isSnapEnabled(): boolean { return this.toolState.enabled; }\n /** Whether the user setting for snapping is enabled. Snapping is done only when both the user and current InteractiveTool have enabled it. */\n public get isSnapEnabledByUser(): boolean { return this._settings.enableFlag; }\n /** AccuSnap user settings */\n public get userSettings() { return this._settings; }\n\n private isFlashed(view: Viewport): boolean { return (this.areFlashed.has(view)); }\n private needsFlash(view: Viewport): boolean { return (this.needFlash.has(view)); }\n private setNeedsFlash(view: Viewport) {\n this.needFlash.add(view);\n this.clearIsFlashed(view);\n view.invalidateDecorations();\n }\n\n private setIsFlashed(view: Viewport) { this.areFlashed.add(view); }\n private clearIsFlashed(view: Viewport) { this.areFlashed.delete(view); }\n private static toSnapDetail(hit?: HitDetail): SnapDetail | undefined { return (hit && hit instanceof SnapDetail) ? hit : undefined; }\n /** Currently active snap */\n public getCurrSnapDetail(): SnapDetail | undefined { return AccuSnap.toSnapDetail(this.currHit); }\n /** Determine whether there is a current hit that is *hot*. */\n public get isHot(): boolean {\n const currSnap = this.getCurrSnapDetail();\n return !currSnap ? false : currSnap.isHot;\n }\n\n /** Optional ids to never flash. Useful for tools like \"trim curve\" that won't want a flashed segment to obscure a result preview.\n * @note Cleared when a primitive or view tool is started and saved/restored when a primitive tool is suspended/unsuspended.\n * @public\n */\n public neverFlash(ids?: Id64Arg): void {\n if (undefined === ids) {\n this.toolState.neverFlash = undefined;\n return;\n }\n\n const newIds = new Set<string>();\n for (const id of Id64.iterable(ids))\n newIds.add(id);\n\n this.toolState.neverFlash = (0 !== newIds.size ? newIds : undefined);\n }\n\n /** @internal */\n public destroy(): void {\n this.currHit = undefined;\n this.aSnapHits = undefined;\n }\n\n private get _doSnapping(): boolean { return this.isSnapEnabled && this.isSnapEnabledByUser && !this._isSnapSuspended; }\n private get _isSnapSuspended(): boolean { return (0 !== this._suppressed || 0 !== this.toolState.suspended); }\n\n /** Get the current snap divisor to use to use for SnapMode.NearestKeypoint.\n * @public\n */\n public get keypointDivisor() { return this._settings.keypointDivisor; }\n\n /** Get the current active SnapModes. SnapMode position determines priority, with the first entry being the highest. The SnapDetail will be returned for the first SnapMode that produces a hot snap.\n * @public\n */\n public getActiveSnapModes(): SnapMode[] {\n const snaps: SnapMode[] = [];\n snaps.push(SnapMode.NearestKeypoint);\n return snaps;\n }\n\n /** Can be implemented by a subclass of AccuSnap to implement a SnapMode override that applies only to the next point.\n * This method will be called whenever a new tool is installed and on button events.\n * @internal\n */\n public synchSnapMode(): void { }\n\n /** Check whether current tentative snap has valid curve geometry for finding extended intersections. */\n private get _searchForExtendedIntersections(): boolean {\n const snap = IModelApp.tentativePoint.getCurrSnap();\n return (undefined !== snap && undefined !== snap.primitive);\n }\n\n /**\n * Check to see whether its appropriate to generate an AccuSnap point, given the current user\n * and command settings, and whether a tentative point is currently active.\n */\n public get isActive(): boolean {\n // Unless we're snapping in intersect mode (to find extended intersections), skip if tentative point active...\n if (IModelApp.tentativePoint.isActive) {\n if (!this._doSnapping || !this._searchForExtendedIntersections)\n return false;\n\n const snaps = this.getActiveSnapModes();\n for (const snap of snaps) {\n if (snap === SnapMode.Intersection)\n return true;\n }\n\n return false;\n }\n\n return this._doSnapping || this.isLocateEnabled;\n }\n\n private initializeForCheckMotion(): void {\n this._lastCursorPos.setFrom(IModelApp.toolAdmin.currentInputState.lastMotion);\n }\n\n /** Clear the current AccuSnap info. */\n public clear(): void { this.setCurrHit(undefined); }\n /** @internal */\n public setCurrHit(newHit?: HitDetail): void {\n const newSnap = AccuSnap.toSnapDetail(newHit);\n const currSnap = this.getCurrSnapDetail();\n const sameElem = (undefined !== newHit && newHit.isSameHit(this.currHit));\n const sameHit = (sameElem && !newSnap);\n const sameSnap = (sameElem && undefined !== newSnap && undefined !== currSnap);\n const samePt = (sameHit || (sameSnap && newSnap.snapPoint.isAlmostEqual(currSnap.snapPoint)));\n const sameHot = (sameHit || (sameSnap && (this.isHot === newSnap.isHot)));\n const sameBaseSnapMode = (!newSnap || !currSnap || newSnap.snapMode === currSnap.snapMode);\n const sameType = (sameHot && (!currSnap || (currSnap.getHitType() === newHit.getHitType())));\n\n // see if it is the same point on the same element, the hot flags are the same multiple snaps, and the snap modes are the same\n if (samePt && sameType && sameBaseSnapMode) {\n // we know that nothing about the screen could change, just save the new hit and return to avoid screen flash\n this.currHit = newHit;\n return;\n }\n\n this.erase();\n\n // if we hit the same element with the same \"hotness\" as last time, we don't need to erase it\n // multiple snaps: but only if the old and new snap modes are the same\n if (!sameHot || !sameBaseSnapMode) {\n this.unFlashViews();\n this.setFlashHit(newHit);\n }\n\n // if we didn't get a new hit, we're done\n if (undefined === (this.currHit = newHit))\n return;\n\n // draw sprites for this hit\n this.showSnapSprite();\n }\n\n /** flash a hit in a single view. */\n private flashHitInView(hit: HitDetail, context: DecorateContext) {\n const viewport = context.viewport;\n if (!viewport || !this.hitShouldBeHilited(hit) || !this.needsFlash(viewport))\n return;\n\n hit.draw(context);\n this.setIsFlashed(viewport);\n }\n\n private setNeedsFlashView(view: Viewport) {\n if (!this.isFlashed(view) && !this.needsFlash(view))\n this.setNeedsFlash(view);\n }\n\n /** flash a hit in its view. */\n private setFlashHit(hit?: HitDetail): void {\n if (hit !== undefined && this.hitShouldBeHilited(hit))\n this.setNeedsFlashView(hit.viewport);\n }\n\n /** @internal */\n public erase(): void {\n this.clearToolTip(undefined); // make sure there's no tooltip up.\n this.clearSprites(); // remove all sprites from the screen\n }\n\n private showElemInfo(viewPt: XAndY, vp: ScreenViewport, hit: HitDetail, delay: BeDuration): void {\n if (!IModelApp.viewManager.doesHostHaveFocus || undefined !== this._toolTipPromise)\n return;\n\n if (!IModelApp.toolAdmin.wantToolTip(hit))\n return;\n\n const promise = this._toolTipPromise = delay.executeAfter(async () => {\n if (promise !== this._toolTipPromise)\n return; // we abandoned this request during delay\n try {\n const msg = await IModelApp.toolAdmin.getToolTip(hit);\n if (this._toolTipPromise === promise) // have we abandoned this request while awaiting getToolTip?\n this.showLocateMessage(viewPt, vp, msg);\n } catch { } // happens if getToolTip was canceled\n });\n }\n\n private showLocateMessage(viewPt: XAndY, vp: ScreenViewport, msg: HTMLElement | string) {\n if (IModelApp.viewManager.doesHostHaveFocus)\n vp.openToolTip(msg, viewPt);\n }\n\n /** @internal */\n public displayToolTip(viewPt: XAndY, vp: ScreenViewport, uorPt?: Point3d): void {\n // if the tooltip is already displayed, or if user doesn't want it, quit.\n if (!this._settings.toolTip || !IModelApp.notifications.isToolTipSupported || IModelApp.notifications.isToolTipOpen)\n return;\n\n const accuSnapHit = this.currHit;\n const tpHit = IModelApp.tentativePoint.getCurrSnap();\n\n // if we don't have either an AccuSnap or a tentative point hit, quit.\n if (!accuSnapHit && !tpHit && !this.errorIcon.isActive)\n return;\n\n let theHit: HitDetail | undefined;\n\n // determine which type of hit\n if (tpHit) {\n if (uorPt) {\n // see if he came back somewhere near the currently snapped element\n const aperture = (this._settings.stickyFactor * vp.pixelsFromInches(IModelApp.locateManager.apertureInches) / 2.0) + 1.5;\n if (!IModelApp.locateManager.picker.testHit(tpHit, vp, uorPt, aperture, IModelApp.locateManager.options))\n return;\n }\n theHit = tpHit;\n } else {\n theHit = accuSnapHit;\n }\n\n // if we're currently showing an error, get the error message...otherwise display hit info...\n if (!this.errorIcon.isActive && theHit) {\n this.showElemInfo(viewPt, vp, theHit, this._settings.toolTipDelay);\n return;\n }\n\n // If we have an error explanation...use it as is!\n if (this.explanation) {\n this.showLocateMessage(viewPt, vp, this.explanation);\n return;\n }\n\n // if we don't have an explanation yet, translate the error code.\n if (!this.errorKey)\n return;\n\n this.explanation = IModelApp.localization.getLocalizedString(`iModelJs:${this.errorKey}`);\n if (!this.explanation)\n return;\n\n this.showLocateMessage(viewPt, vp, this.explanation);\n }\n\n /** @internal */\n public clearToolTip(ev?: BeButtonEvent): void {\n // Throw away any stale request for a tooltip message\n this._toolTipPromise = undefined;\n if (!IModelApp.notifications.isToolTipOpen)\n return;\n\n if (ev && (5 > ev.viewPoint.distanceXY(IModelApp.notifications.toolTipLocation)))\n return;\n\n IModelApp.notifications.clearToolTip();\n }\n\n /** Display the sprites for the current snap to indicate its position on the screen and what snap mode it represents. */\n private showSnapSprite(): void {\n const snap = this.getCurrSnapDetail();\n if (!snap)\n return;\n\n const crossPt = snap.snapPoint;\n const viewport = snap.viewport;\n const crossSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}${snap.isHot ? \"sprites/SnapCross.png\" : \"sprites/SnapUnfocused.png\"}`);\n\n this.cross.activate(crossSprite, viewport, crossPt);\n\n const snapSprite = snap.sprite;\n if (snapSprite)\n this.icon.activate(snapSprite, viewport, AccuSnap.adjustIconLocation(viewport, crossPt, snapSprite.size));\n }\n\n private static adjustIconLocation(vp: Viewport, input: Point3d, iconSize: XAndY): Point3d {\n const out = vp.worldToView(input);\n out.x += (iconSize.x / 3.0);\n out.y -= (iconSize.y * 1.3);\n return vp.viewToWorld(out, out);\n }\n\n /** try to indicate what's wrong with the current point (why we're not snapping). */\n private showSnapError(out: LocateResponse, ev: BeButtonEvent) {\n this.explanation = out.explanation;\n this.errorKey = out.reason;\n this.errorIcon.deactivate();\n\n const vp = ev.viewport!;\n let errorSprite: Sprite | undefined;\n switch (out.snapStatus) {\n case SnapStatus.FilteredByApp:\n errorSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}sprites/SnapAppFiltered.png`);\n break;\n\n case SnapStatus.FilteredByAppQuietly:\n this.errorKey = undefined;\n break;\n\n case SnapStatus.NotSnappable:\n errorSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}sprites/SnapNotSnappable.png`);\n this.errorKey = ElementLocateManager.getFailureMessageKey(\"NotSnappable\");\n break;\n }\n\n if (!errorSprite)\n return;\n\n const spriteSize = errorSprite.size;\n const pt = AccuSnap.adjustIconLocation(vp, ev.rawPoint, spriteSize);\n\n this.errorIcon.activate(errorSprite, vp, pt);\n }\n\n private clearSprites() {\n this.errorIcon.deactivate();\n this.cross.deactivate();\n this.icon.deactivate();\n }\n\n /** determine whether a hit should be hilited or not. */\n private hitShouldBeHilited(hit: HitDetail | undefined): boolean {\n if (!hit)\n return false;\n\n if (hit.isModelHit || hit.isMapHit)\n return false; // Avoid annoying flashing of reality models.\n\n if (this.toolState.neverFlash && this.toolState.neverFlash.has(hit.sourceId))\n return false;\n\n const snap = AccuSnap.toSnapDetail(hit);\n return !snap || snap.isHot || this._settings.hiliteColdHits;\n }\n\n private unFlashViews() {\n this.needFlash.clear();\n for (const vp of this.areFlashed)\n vp.flashedId = undefined;\n\n this.areFlashed.clear();\n }\n\n /** @internal */\n public adjustPointIfHot(pt: Point3d, view: Viewport): void {\n const currSnap = this.getCurrSnapDetail();\n\n if (!currSnap || !currSnap.isHot || view !== currSnap.viewport)\n return;\n\n pt.setFrom(currSnap.adjustedPoint);\n }\n\n /** Implemented by sub-classes to update ui to show current enabled state.\n * @internal\n */\n public onEnabledStateChange(_isEnabled: boolean, _wasEnabled: boolean) { }\n\n /** @internal */\n public getHitAndList(holder: HitListHolder): HitDetail | undefined {\n const hit = this.currHit;\n if (hit) {\n holder.setHitList(this.aSnapHits);\n this.aSnapHits = undefined;\n }\n return hit;\n }\n\n private initCmdState() {\n this.toolState.suspended = 0;\n this.toolState.neverFlash = undefined;\n }\n\n /** @internal */\n public suspend(doSuspend: boolean) {\n const previousDoSnapping = this._doSnapping;\n if (doSuspend)\n this.toolState.suspended++;\n else if (this.toolState.suspended > 0)\n this.toolState.suspended--;\n\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n }\n\n /** @internal */\n public suppress(doSuppress: boolean): number {\n const previousDoSnapping = this._doSnapping;\n if (doSuppress)\n this._suppressed++;\n else if (this._suppressed > 0)\n this._suppressed--;\n\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n return this._suppressed;\n }\n\n /** Turn AccuSnap on or off */\n public enableSnap(yesNo: boolean) {\n const previousDoSnapping = this._doSnapping;\n this.toolState.enabled = yesNo;\n if (!yesNo) {\n this.clear();\n if (undefined !== this.touchCursor && !this.wantVirtualCursor) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n }\n\n /** @internal */\n public intersectXY(tpSnap: SnapDetail, second: SnapDetail): IntersectDetail | undefined {\n // Get single segment curve from each snap to intersect...\n const tpSegment = tpSnap.getCurvePrimitive();\n if (undefined === tpSegment)\n return undefined;\n const segment = second.getCurvePrimitive();\n if (undefined === segment)\n return undefined;\n\n const worldToView = second.viewport.worldToViewMap.transform0;\n const detail = CurveCurve.intersectionProjectedXYPairs(worldToView, tpSegment, true, segment, true);\n if (0 === detail.length)\n return undefined;\n\n let closeIndex = 0;\n if (detail.length > 1) {\n const snapPt = worldToView.multiplyPoint3d(HitGeomType.Point === tpSnap.geomType && HitGeomType.Point !== second.geomType ? second.getPoint() : tpSnap.getPoint(), 1); // Don't check distance from arc centers...\n let lastDist: number | undefined;\n\n for (let i = 0; i < detail.length; i++) {\n const testPt = worldToView.multiplyPoint3d(detail[i].detailA.point, 1);\n const testDist = snapPt.realDistanceXY(testPt);\n\n if (undefined !== testDist && (undefined === lastDist || testDist < lastDist)) {\n lastDist = testDist;\n closeIndex = i;\n }\n }\n }\n\n const intersect = new IntersectDetail(tpSnap, SnapHeat.InRange, detail[closeIndex].detailA.point, segment, second.sourceId); // Should be ok to share hit detail with tentative...\n intersect.primitive = tpSegment; // Just save single segment that was intersected for line strings/shapes...\n\n return intersect;\n }\n\n private static doPostProcessSnapMode(snap: SnapDetail, snapMode: SnapMode): SnapStatus {\n const accuDraw = IModelApp.accuDraw;\n if (!accuDraw.isEnabled || accuDraw.isDeactivated)\n return SnapStatus.Disabled; // AccuDraw is require for this snap mode...\n\n if (HitGeomType.Surface === snap.geomType)\n return SnapStatus.NoSnapPossible; // Only valid for edge and curve hits...\n\n const curve = snap.getCurvePrimitive();\n if (undefined === curve)\n return SnapStatus.NoSnapPossible;\n\n const rMatrix = AccuDraw.getSnapRotation(snap, snap.viewport);\n if (undefined === rMatrix)\n return SnapStatus.NoSnapPossible;\n\n // Compute snap from AccuDraw origin when active or set AccuDraw rotation if accepted...\n if (!accuDraw.isActive) {\n accuDraw.setContext(AccuDrawFlags.SmartRotation); // Automatically orient compass to snap location if accepted...\n snap.setSnapMode(snapMode);\n return SnapStatus.Success;\n }\n\n const zVec = rMatrix.rowZ(); // This is a row matrix...\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, snap.getPoint(), zVec, snap.viewport, true);\n if (undefined === spacePoint)\n return SnapStatus.NoSnapPossible;\n\n let detail;\n if (SnapMode.PerpendicularPoint === snapMode)\n detail = curve.closestPoint(spacePoint, true);\n else\n detail = curve.closestTangent(spacePoint, { hintPoint: snap.getPoint(), vectorToEye: zVec, extend: true });\n\n if (undefined === detail?.curve)\n return SnapStatus.NoSnapPossible;\n\n // Close point may not be perpendicular when curve can't be extended...\n if (SnapMode.PerpendicularPoint === snapMode && !curve.isExtensibleFractionSpace) {\n const curvePlanePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, detail.point, zVec, snap.viewport, true);\n if (undefined === curvePlanePoint)\n return SnapStatus.NoSnapPossible;\n\n const curveNormal = detail.point.vectorTo(curvePlanePoint);\n const curveTangent = curve.fractionToPointAndUnitTangent(detail.fraction);\n if (!curveTangent.getDirectionRef().isPerpendicularTo(curveNormal)) {\n const curveExtensionPoint = AccuDrawHintBuilder.projectPointToLineInView(accuDraw.origin, curveTangent.getOriginRef(), curveTangent.getDirectionRef(), snap.viewport, true);\n if (undefined === curveExtensionPoint)\n return SnapStatus.NoSnapPossible;\n detail.point.setFrom(curveExtensionPoint);\n }\n }\n\n const point = AccuDrawHintBuilder.projectPointToPlaneInView(detail.point, accuDraw.origin, zVec, snap.viewport, true);\n if (undefined === point)\n return SnapStatus.NoSnapPossible;\n\n snap.setSnapPoint(point, SnapHeat.InRange); // Force hot snap...\n snap.setSnapMode(snapMode);\n\n return SnapStatus.Success;\n }\n\n /** @internal */\n public static async requestSnap(thisHit: HitDetail, snapModes: SnapMode[], hotDistanceInches: number, keypointDivisor: number, hitList?: HitList<HitDetail>, out?: LocateResponse): Promise<SnapDetail | undefined> {\n if (thisHit.isModelHit || thisHit.isMapHit || thisHit.isClassifier) {\n if (snapModes.includes(SnapMode.Nearest)) {\n if (out)\n out.snapStatus = SnapStatus.Success;\n\n return new SnapDetail(thisHit, SnapMode.Nearest, SnapHeat.InRange);\n } else if (1 === snapModes.length && snapModes.includes(SnapMode.Intersection)) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n\n return undefined;\n } else {\n if (out)\n out.snapStatus = SnapStatus.Success;\n\n const realitySnap = new SnapDetail(thisHit, SnapMode.Nearest, SnapHeat.None);\n realitySnap.sprite = undefined; // Don't show a snap mode that isn't applicable, but still accept hit point...\n return realitySnap;\n }\n }\n\n let hitVp;\n if (thisHit.path) {\n hitVp = thisHit.path.sectionDrawingAttachment?.viewport ?? thisHit.path.viewAttachment?.viewport;\n }\n\n hitVp = hitVp ?? thisHit.viewport;\n if (undefined !== thisHit.subCategoryId && !thisHit.isExternalIModelHit) {\n const appearance = hitVp.getSubCategoryAppearance(thisHit.subCategoryId);\n if (appearance.dontSnap) {\n if (out) {\n out.snapStatus = SnapStatus.NotSnappable;\n out.explanation = IModelApp.localization.getLocalizedString(`iModelJs:${ElementLocateManager.getFailureMessageKey(\"NotSnappableSubCategory\")}`);\n }\n return undefined;\n }\n }\n\n const haveTangentPoint = snapModes.includes(SnapMode.TangentPoint);\n const havePerpendicularPoint = snapModes.includes(SnapMode.PerpendicularPoint);\n const postProcessSnapMode = (havePerpendicularPoint ? SnapMode.PerpendicularPoint : (haveTangentPoint ? SnapMode.TangentPoint : undefined));\n\n if (undefined !== postProcessSnapMode) {\n // NOTE: These are not valid backend snap modes. Instead make the snap request using nearest\n // snap in order to get the candidate curve to use to compute the desired snap point...\n snapModes = snapModes.filter(snapMode => (snapMode !== SnapMode.PerpendicularPoint && snapMode !== SnapMode.TangentPoint));\n if (!snapModes.includes(SnapMode.Nearest))\n snapModes.push(SnapMode.Nearest);\n }\n\n const requestProps: SnapRequestProps = {\n id: thisHit.sourceId,\n testPoint: thisHit.testPoint,\n closePoint: thisHit.hitPoint,\n worldToView: hitVp.worldToViewMap.transform0.toJSON(),\n viewFlags: hitVp.viewFlags,\n snapModes,\n snapAperture: hitVp.pixelsFromInches(hotDistanceInches),\n snapDivisor: keypointDivisor,\n subCategoryId: thisHit.subCategoryId,\n geometryClass: thisHit.geometryClass,\n modelToWorld: thisHit.transformFromSourceIModel?.toJSON(),\n };\n\n const thisGeom = (thisHit.isElementHit ? IModelApp.viewManager.overrideElementGeometry(thisHit) : IModelApp.viewManager.getDecorationGeometry(thisHit));\n\n if (undefined !== thisGeom) {\n requestProps.decorationGeometry = [{ id: thisHit.sourceId, geometryStream: thisGeom }];\n } else if (!thisHit.isElementHit) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n return undefined;\n }\n\n if (snapModes.includes(SnapMode.Intersection)) {\n if (undefined !== hitList) {\n for (const hit of hitList.hits) {\n if (thisHit.sourceId === hit.sourceId || thisHit.iModel !== hit.iModel)\n continue;\n\n const geom = (hit.isElementHit ? IModelApp.viewManager.overrideElementGeometry(hit) : IModelApp.viewManager.getDecorationGeometry(hit));\n\n if (undefined !== geom) {\n if (undefined === requestProps.decorationGeometry)\n requestProps.decorationGeometry = [{ id: thisHit.sourceId, geometryStream: geom }];\n else\n requestProps.decorationGeometry.push({ id: thisHit.sourceId, geometryStream: geom });\n } else if (!hit.isElementHit) {\n continue;\n }\n\n if (undefined === requestProps.intersectCandidates)\n requestProps.intersectCandidates = [hit.sourceId];\n else\n requestProps.intersectCandidates.push(hit.sourceId);\n\n if (5 === requestProps.intersectCandidates.length)\n break; // Search for intersection with a few of the next best hits...\n }\n }\n\n if (1 === snapModes.length && undefined === requestProps.intersectCandidates) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n\n return undefined; // Don't make back end request when only doing intersection snap when we don't have another hit to intersect with...\n }\n }\n\n try {\n const result = await thisHit.iModel[_requestSnap](requestProps);\n\n if (out)\n out.snapStatus = result.status;\n\n if (result.status !== SnapStatus.Success)\n return undefined;\n\n const parseCurve = (json: any): CurvePrimitive | undefined => {\n const parsed = undefined !== json ? GeomJson.Reader.parse(json) : undefined;\n return parsed instanceof GeometryQuery && \"curvePrimitive\" === parsed.geometryCategory ? parsed : undefined;\n };\n\n let displayTransform;\n if (undefined !== thisHit.modelId) {\n displayTransform = thisHit.viewport.view.computeDisplayTransform({\n modelId: thisHit.modelId,\n elementId: thisHit.sourceId,\n viewAttachmentId: thisHit.path?.viewAttachment?.id,\n inSectionDrawingAttachment: undefined !== thisHit.path?.sectionDrawingAttachment,\n });\n }\n\n const snapPoint = Point3d.fromJSON(result.snapPoint);\n displayTransform?.multiplyPoint3d(snapPoint, snapPoint);\n\n const snap = new SnapDetail(thisHit, result.snapMode, result.heat, snapPoint);\n\n snap.setCurvePrimitive(parseCurve(result.curve), displayTransform, result.geomType);\n if (undefined !== result.parentGeomType)\n snap.parentGeomType = result.parentGeomType;\n\n // Update hitPoint from readPixels with exact point location corrected to surface/edge geometry.\n if (undefined !== result.hitPoint) {\n snap.hitPoint.setFromJSON(result.hitPoint);\n displayTransform?.multiplyPoint3d(snap.hitPoint, snap.hitPoint);\n }\n\n // Apply display transform to normal.\n if (undefined !== result.normal) {\n snap.normal = Vector3d.fromJSON(result.normal);\n displayTransform?.matrix.multiplyVector(snap.normal, snap.normal);\n snap.normal.normalizeInPlace();\n }\n\n if (undefined !== postProcessSnapMode && SnapMode.Nearest === result.snapMode) {\n if (SnapStatus.Success !== this.doPostProcessSnapMode(snap, postProcessSnapMode))\n return undefined;\n return snap;\n }\n\n if (SnapMode.Intersection !== snap.snapMode)\n return snap;\n\n if (undefined === result.intersectId)\n return undefined;\n\n const otherPrimitive = parseCurve(result.intersectCurve);\n if (undefined === otherPrimitive)\n return undefined;\n\n const intersect = new IntersectDetail(snap, snap.heat, snap.snapPoint, otherPrimitive, result.intersectId);\n return intersect;\n } catch {\n if (out)\n out.snapStatus = SnapStatus.Aborted;\n\n return undefined;\n }\n }\n\n private async getAccuSnapDetail(hitList: HitList<HitDetail>, out: LocateResponse): Promise<SnapDetail | undefined> {\n const thisHit = hitList.getNextHit();\n if (undefined === thisHit)\n return undefined;\n\n const filterStatus: LocateFilterStatus = (this.isLocateEnabled ? await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, out) : LocateFilterStatus.Accept);\n if (LocateFilterStatus.Accept !== filterStatus) {\n out.snapStatus = IModelApp.toolAdmin.wantToolTip(thisHit) ? SnapStatus.FilteredByApp : SnapStatus.FilteredByAppQuietly;\n return undefined;\n }\n\n let snapModes: SnapMode[];\n if (IModelApp.tentativePoint.isActive) {\n snapModes = [];\n snapModes.push(SnapMode.Nearest); // Special case: isActive only allows snapping with tentative to find extended intersections...\n } else {\n snapModes = this.getActiveSnapModes(); // Get the list of point snap modes to consider\n }\n\n const thisSnap = await AccuSnap.requestSnap(thisHit, snapModes, this._hotDistanceInches, this.keypointDivisor, hitList, out);\n if (undefined === thisSnap)\n return undefined;\n\n if (IModelApp.tentativePoint.isActive) {\n const tpSnap = IModelApp.tentativePoint.getCurrSnap();\n if (undefined === tpSnap)\n return undefined;\n const intersectSnap = this.intersectXY(tpSnap, thisSnap);\n if (undefined === intersectSnap)\n return undefined;\n hitList.setCurrentHit(thisHit);\n return intersectSnap;\n }\n\n IModelApp.accuDraw.onSnap(thisSnap); // AccuDraw can adjust nearest snap to intersection of circle (polar distance lock) or line (axis lock) with snapped to curve...\n hitList.setCurrentHit(thisHit);\n return thisSnap;\n }\n\n /** Request a snap from the backend for the supplied HitDetail.\n * @param hit The HitDetail to snap to.\n * @param snapMode Optional SnapMode, uses active snap modes if not specified.\n * @return A Promise for the SnapDetail or undefined if no snap could be created.\n */\n public async doSnapRequest(hit: HitDetail, snapMode?: SnapMode): Promise<SnapDetail | undefined> {\n let snapModes: SnapMode[];\n if (undefined === snapMode)\n snapModes = this.getActiveSnapModes();\n else\n snapModes = [snapMode];\n\n return AccuSnap.requestSnap(hit, snapModes, this._hotDistanceInches, this.keypointDivisor);\n }\n\n private findHits(ev: BeButtonEvent, force: boolean = false): SnapStatus {\n // When using AccuSnap to locate elements, we have to start with the datapoint adjusted\n // for locks and not the raw point. Otherwise, when grid/unit lock are on, we locate elements by\n // points not on the grid. This causes them to be \"pulled\" off the grid when they are accepted. On\n // the other hand, when NOT locating, we need to use the raw point so we can snap to elements\n // away from the grid.\n\n const testPoint = this.isLocateEnabled ? ev.point : ev.rawPoint;\n const vp = ev.viewport!;\n const picker = IModelApp.locateManager.picker;\n const options = IModelApp.locateManager.options.clone(); // Copy to avoid changing out from under active Tool...\n\n // NOTE: Since TestHit will use the same HitSource as the input hit we only need to sets this for DoPick...\n options.hitSource = this.isSnapEnabled ? HitSource.AccuSnap : HitSource.MotionLocate;\n\n let aperture = (vp.pixelsFromInches(IModelApp.locateManager.apertureInches) / 2.0) + 1.5;\n this.initializeForCheckMotion();\n aperture *= this._searchDistance;\n\n if (0 === picker.doPick(vp, testPoint, aperture, options)) {\n this.aSnapHits = undefined; // Clear any previous hit list so reset won't cycle through hits cursor is no longer over, etc.\n return SnapStatus.NoElements;\n }\n\n this.aSnapHits = picker.getHitList(true); // take ownership of the pickElem hit list.\n\n // see if we should keep the current hit\n const canBeSticky = !force && this.aSnapHits.length > 1 && this.currHit && (HitDetailType.Intersection !== this.currHit.getHitType() && this.currHit.priority < HitPriority.PlanarSurface);\n if (canBeSticky) {\n for (let iHit = 1; iHit < this.aSnapHits.length; ++iHit) {\n const thisHit = this.aSnapHits.hits[iHit];\n if (!thisHit.isSameHit(this.currHit))\n continue;\n this.aSnapHits.removeHit(iHit);\n this.aSnapHits.insertHit(0, thisHit);\n break;\n }\n }\n\n return SnapStatus.Success;\n }\n\n private async findLocatableHit(ev: BeButtonEvent, newSearch: boolean, out: LocateResponse): Promise<HitDetail | undefined> {\n out.snapStatus = SnapStatus.NoElements;\n\n if (newSearch) {\n this.aSnapHits = undefined;\n // search for new hits, but if the cursor is still close to the current hit, don't throw away list.\n if (SnapStatus.Success !== (out.snapStatus = this.findHits(ev)))\n return undefined;\n } else {\n if (!this.aSnapHits) {\n out.snapStatus = SnapStatus.NoElements;\n return undefined;\n }\n }\n\n const thisList = this.aSnapHits!;\n let thisHit: HitDetail | undefined;\n let firstRejected;\n const filterResponse = new LocateResponse();\n\n // keep looking through hits until we find one that is accu-snappable.\n while (undefined !== (thisHit = thisList.getNextHit())) {\n if (LocateFilterStatus.Accept === await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, filterResponse))\n return thisHit;\n // we only care about the status of the first hit.\n if (undefined !== firstRejected)\n continue;\n firstRejected = filterResponse.clone();\n firstRejected.snapStatus = IModelApp.toolAdmin.wantToolTip(thisHit) ? SnapStatus.FilteredByApp : SnapStatus.FilteredByAppQuietly;\n }\n\n if (undefined !== firstRejected)\n out.setFrom(firstRejected);\n\n // Reset current hit index to go back to first hit on next AccuSnap reset event...\n thisList.resetCurrentHit();\n return undefined;\n }\n\n /** When in auto-locate mode, advance to the next hit without searching again.\n * @internal\n */\n public async resetButton(): Promise<SnapStatus> {\n let hit: HitDetail | undefined;\n const out = new LocateResponse();\n out.snapStatus = SnapStatus.Disabled;\n\n this.clearToolTip(undefined);\n\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n\n if (this._doSnapping) {\n // if we don't have any more candidate hits, get a new list at the current location\n if (!this.aSnapHits || (0 === this.aSnapHits.length)) {\n out.snapStatus = this.findHits(ev);\n hit = (SnapStatus.Success !== out.snapStatus) ? undefined : await this.getAccuSnapDetail(this.aSnapHits!, out);\n } else {\n // drop the current hit from the list and then retest the list (without the dropped hit) to find the new snap\n this.aSnapHits.removeCurrentHit();\n hit = await this.getAccuSnapDetail(this.aSnapHits, out);\n }\n if (!this._doSnapping)\n hit = undefined; // Snap no longer requested...\n } else if (this.isLocateEnabled) {\n hit = await this.findLocatableHit(ev, false, out); // get next AccuSnap path (or undefined)\n if (!this.isLocateEnabled)\n hit = undefined; // Hit no longer requested...\n }\n\n // set the current hit\n if (hit || this.currHit)\n this.setCurrHit(hit);\n\n // indicate errors\n this.showSnapError(out, ev);\n return out.snapStatus;\n }\n\n /** Find the best snap point according to the current cursor location\n * @internal\n */\n public async onMotion(ev: BeButtonEvent): Promise<void> {\n this.clearToolTip(ev);\n const out = new LocateResponse();\n out.snapStatus = SnapStatus.Disabled;\n\n let hit: HitDetail | undefined;\n if (this.isActive) {\n if (this._doSnapping) {\n out.snapStatus = this.findHits(ev);\n hit = (SnapStatus.Success !== out.snapStatus) ? undefined : await this.getAccuSnapDetail(this.aSnapHits!, out);\n if (!this._doSnapping)\n hit = undefined; // Snap no longer requested...\n } else if (this.isLocateEnabled) {\n hit = await this.findLocatableHit(ev, true, out);\n if (!this.isLocateEnabled)\n hit = undefined; // Hit no longer requested...\n }\n }\n\n // set the current hit and display the sprite (based on snap's KeypointType)\n if (hit || this.currHit)\n this.setCurrHit(hit);\n\n // set up active error before calling displayToolTip to indicate error or show locate message...\n this.showSnapError(out, ev);\n this.displayToolTip(ev.viewPoint, ev.viewport!, ev.rawPoint);\n\n if (undefined !== this.touchCursor && InputSource.Mouse === ev.inputSource) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n\n /** @internal */\n public onPreButtonEvent(ev: BeButtonEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.isButtonHandled(ev) : false;\n }\n\n /** @internal */\n public onTouchStart(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor)\n this.touchCursor.doTouchStart(ev);\n }\n\n /** @internal */\n public onTouchEnd(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor && 0 === ev.touchCount)\n this.touchCursor.doTouchEnd(ev);\n }\n\n /** @internal */\n public onTouchCancel(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor)\n this.touchCursor.doTouchEnd(ev);\n }\n\n /** @internal */\n public onTouchMove(ev: BeTouchEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.doTouchMove(ev) : false;\n }\n\n /** @internal */\n public onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.doTouchMoveStart(ev, startEv) : false;\n }\n\n /** @internal */\n public get wantVirtualCursor(): boolean {\n return this._doSnapping || (this.isLocateEnabled && ToolSettings.enableVirtualCursorForLocate);\n }\n\n /** @internal */\n public async onTouchTap(ev: BeTouchEvent): Promise<boolean> {\n if (undefined !== this.touchCursor)\n return this.touchCursor.doTouchTap(ev);\n if (!this.wantVirtualCursor)\n return false;\n this.touchCursor = TouchCursor.createFromTouchTap(ev);\n if (undefined === this.touchCursor)\n return false;\n // Give active tool an opportunity to update it's tool assistance since event won't be passed along...\n const tool = IModelApp.toolAdmin.activeTool;\n if (undefined === tool)\n return true;\n await tool.onSuspend();\n await tool.onUnsuspend();\n return true;\n }\n\n private flashElements(context: DecorateContext): void {\n const viewport = context.viewport;\n if (this.currHit) {\n if (this.needsFlash(viewport))\n this.flashHitInView(this.currHit, context);\n return;\n }\n\n const hit = IModelApp.tentativePoint.getCurrSnap();\n if (!hit || hit.isModelHit || hit.isMapHit)\n return; // Don't hilite reality models.\n\n if (this.toolState.neverFlash && this.toolState.neverFlash.has(hit.sourceId))\n return;\n\n hit.draw(context);\n }\n\n /** @internal */\n public decorate(context: DecorateContext): void {\n if (undefined !== this.touchCursor && this.touchCursor.viewport === context.viewport)\n context.addCanvasDecoration(this.touchCursor, true);\n\n this.flashElements(context);\n\n if (this.cross.isActive) {\n this.cross.decorate(context);\n this.icon.decorate(context);\n }\n\n this.errorIcon.decorate(context);\n }\n\n private clearElemFromHitList(element: string) {\n if (this.aSnapHits)\n this.aSnapHits.removeHitsFrom(element);\n }\n\n /** @internal */\n public clearIfElement(sourceId: string): void {\n this.clearElemFromHitList(sourceId);\n\n const hit = this.currHit;\n if (hit && hit.sourceId === sourceId) {\n this.destroy();\n }\n }\n\n /** Enable locating elements.\n * @public\n */\n public enableLocate(yesNo: boolean) {\n this.toolState.locate = yesNo;\n if (!yesNo && undefined !== this.touchCursor && !this.wantVirtualCursor) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n\n /** Called whenever a new [[Tool]] is started.\n * @internal\n */\n public onStartTool(): void {\n this.initCmdState();\n this.enableSnap(false);\n this.enableLocate(false);\n IModelApp.tentativePoint.clear(true);\n }\n\n /**\n * Force AccuSnap to reevaluate the snap at the current cursor location.\n * This is useful of an application changes the snap mode and wants AccuSnap to choose it immediately, without\n * requiring the user to move the mouse.\n * @internal\n */\n public async reEvaluate() {\n if (this.getCurrSnapDetail()) {\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n return this.onMotion(ev);\n }\n }\n}\n\n/** TentativeOrAccuSnap returns information about an active snap generated by either [[AccuSnap]] or [[TentativePoint]].\n * @public\n */\nexport class TentativeOrAccuSnap {\n /** @return true if AccuSnap is *hot* or TentativePoint is active and snapped to pickable geometry. */\n public static get isHot(): boolean { return IModelApp.accuSnap.isHot || IModelApp.tentativePoint.isSnapped; }\n\n /** Get the current snap from either AccuSnap or TentativePoint.\n * @param checkIsHot true to only return the snap from AccuSnap when it is *hot*.\n * @return The current snap from AccuSnap, TentativePoint, or undefined.\n */\n public static getCurrentSnap(checkIsHot: boolean = true): SnapDetail | undefined {\n // Checking for a hot AccuSnap before checking TentativePoint is done to support extended intersections...\n if (IModelApp.accuSnap.isHot)\n return IModelApp.accuSnap.getCurrSnapDetail();\n\n if (IModelApp.tentativePoint.isSnapped)\n return IModelApp.tentativePoint.currSnap;\n\n return (checkIsHot ? undefined : IModelApp.accuSnap.getCurrSnapDetail());\n }\n\n /** @return The current snap location from AccuSnap or TentativePoint */\n public static getCurrentPoint(): Point3d {\n if (IModelApp.accuSnap.isHot) {\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n if (snap)\n return snap.adjustedPoint;\n }\n\n return IModelApp.tentativePoint.getPoint();\n }\n\n /** @return The current snap Viewport from AccuSnap or TentativePoint */\n public static getCurrentView(): ScreenViewport | undefined {\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n return snap ? snap.viewport : IModelApp.tentativePoint.viewport;\n }\n}\n\n/** @public */\nexport namespace AccuSnap {\n export class ToolState {\n public enabled = false;\n public locate = false;\n public suspended = 0;\n public neverFlash?: Id64Set;\n public setFrom(other: ToolState): void {\n this.enabled = other.enabled;\n this.locate = other.locate;\n this.suspended = other.suspended;\n this.neverFlash = other.neverFlash;\n }\n public clone(): ToolState {\n const val = new ToolState();\n val.setFrom(this);\n return val;\n }\n }\n\n export class Settings {\n /** How far cursor can be from snap location (relative to snap aperture) and be considered a hot snap */\n public hotDistanceFactor = 1.2;\n /** When moving along an element, affects the affinity for snapping to the same curve as the previous snap */\n public stickyFactor = 1.0;\n /** Factor applied to locate aperture when snapping is enabled and used to pick snap candidates */\n public searchDistance = 2.0;\n /** Whether the snapped element is also hilited when the snap is not hot */\n public hiliteColdHits = true;\n /** Enables snap on cursor motion when true, only snap using Tentative snap when false */\n public enableFlag = true;\n /** Whether to show a tooltip for snap and element locate */\n public toolTip = true;\n /** Delay before tooltip appears */\n public toolTipDelay = BeDuration.fromSeconds(.5);\n /** Curve segment divisor used by SnapMode.NearestKeypoint */\n public keypointDivisor = 2;\n }\n}\n"]}
|
|
@@ -73,7 +73,7 @@ export declare class GraphicalEditingScope extends BriefcaseNotificationHandler
|
|
|
73
73
|
private geometryChangeIterator;
|
|
74
74
|
private constructor();
|
|
75
75
|
private [Symbol.dispose];
|
|
76
|
-
/** @deprecated in 5.0 Use [Symbol.dispose] instead. */
|
|
76
|
+
/** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [Symbol.dispose] instead. */
|
|
77
77
|
dispose(): void;
|
|
78
78
|
/** @internal */
|
|
79
79
|
notifyGeometryChanged(props: ModelGeometryChangesProps[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicalEditingScope.d.ts","sourceRoot":"","sources":["../../src/GraphicalEditingScope.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,OAAO,EAAkE,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAE/I,OAAO,EACL,yBAAyB,EAAE,qBAAqB,EAAkB,oBAAoB,EAAE,yBAAyB,EAClH,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAc5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,qBAAsB,SAAQ,4BAA6B,YAAW,yBAAyB;IAC1G,IAAW,oBAAoB,iCAA0C;IAEzE,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuC;IACxE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAElC,iDAAiD;IACjD,SAAgB,MAAM,EAAE,mBAAmB,CAAC;IAE5C;;OAEG;IACH,gBAAuB,OAAO,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAEvF;;;OAGG;IACH,SAAgB,SAAS,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAElF;;;OAGG;IACH,SAAgB,QAAQ,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAEjF,sEAAsE;IACtE,SAAgB,iBAAiB,oBAAyB,QAAQ,CAAC,oBAAoB,CAAC,SAAS,qBAAqB,KAAK,IAAI,EAAI;IAEnI;;OAEG;WACiB,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmBtF;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBlC,yGAAyG;IAClG,0BAA0B,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,SAAS;IAInG,4EAA4E;IACrE,kBAAkB,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAI3D,gBAAgB;IAChB,IAAW,UAAU,YAEpB;IAED,OAAO,CAAG,sBAAsB;IAWhC,OAAO;IAMP,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAexB,
|
|
1
|
+
{"version":3,"file":"GraphicalEditingScope.d.ts","sourceRoot":"","sources":["../../src/GraphicalEditingScope.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,OAAO,EAAkE,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAE/I,OAAO,EACL,yBAAyB,EAAE,qBAAqB,EAAkB,oBAAoB,EAAE,yBAAyB,EAClH,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAc5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,qBAAsB,SAAQ,4BAA6B,YAAW,yBAAyB;IAC1G,IAAW,oBAAoB,iCAA0C;IAEzE,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuC;IACxE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAElC,iDAAiD;IACjD,SAAgB,MAAM,EAAE,mBAAmB,CAAC;IAE5C;;OAEG;IACH,gBAAuB,OAAO,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAEvF;;;OAGG;IACH,SAAgB,SAAS,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAElF;;;OAGG;IACH,SAAgB,QAAQ,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAEjF,sEAAsE;IACtE,SAAgB,iBAAiB,oBAAyB,QAAQ,CAAC,oBAAoB,CAAC,SAAS,qBAAqB,KAAK,IAAI,EAAI;IAEnI;;OAEG;WACiB,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmBtF;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBlC,yGAAyG;IAClG,0BAA0B,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,SAAS;IAInG,4EAA4E;IACrE,kBAAkB,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAI3D,gBAAgB;IAChB,IAAW,UAAU,YAEpB;IAED,OAAO,CAAG,sBAAsB;IAWhC,OAAO;IAMP,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAexB,qGAAqG;IAC9F,OAAO;IAId,gBAAgB;IACT,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,EAAE;CAiChE"}
|
|
@@ -150,7 +150,7 @@ class GraphicalEditingScope extends BriefcaseTxns_1.BriefcaseNotificationHandler
|
|
|
150
150
|
this._cleanup = undefined;
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
-
/** @deprecated in 5.0 Use [Symbol.dispose] instead. */
|
|
153
|
+
/** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [Symbol.dispose] instead. */
|
|
154
154
|
dispose() {
|
|
155
155
|
this[Symbol.dispose]();
|
|
156
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicalEditingScope.js","sourceRoot":"","sources":["../../src/GraphicalEditingScope.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module IModelConnection\n */\n\nimport { assert, BeEvent, compareStrings, DbOpcode, DuplicatePolicy, GuidString, Id64Set, Id64String, SortedArray } from \"@itwin/core-bentley\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport {\n EditingScopeNotifications, ElementGeometryChange, ipcAppChannels, ModelGeometryChanges, ModelGeometryChangesProps, RemoveFunction,\n} from \"@itwin/core-common\";\nimport { BriefcaseNotificationHandler } from \"./BriefcaseTxns\";\nimport { BriefcaseConnection } from \"./BriefcaseConnection\";\nimport { IpcApp } from \"./IpcApp\";\n\nclass ModelChanges extends SortedArray<ElementGeometryChange> {\n public geometryGuid: GuidString;\n public readonly range: Range3d;\n\n public constructor(geometryGuid: GuidString, range: Range3d) {\n super((lhs, rhs) => compareStrings(lhs.id, rhs.id), DuplicatePolicy.Replace);\n this.geometryGuid = geometryGuid;\n this.range = range;\n }\n}\n\n/** Represents a period of time within an [interactive editing]($docs/learning/InteractiveEditing.md) session during which the\n * geometry of elements being displayed in one or more [[Viewport]]s is being modified. Outside of such a scope, whenever the\n * geometry within a [GeometricModel]($backend) changes new [[Tile]]s must be generated to reflect those changes in a viewport.\n * Regenerating entire tiles each time individual elements change can be time-consuming, which may introduce an unacceptable delay\n * between making a modification and seeing its result on the screen.\n *\n * Within the context of a graphical editing scope, no new tiles are generated. Instead, the geometry for any deleted or modified elements\n * is hidden in the tile graphics, and additional temporary graphics are displayed for any newly-inserted or modified elements. Only when the\n * scope exits are new tiles produced.\n *\n * The application decides when to enter and exit a graphical editing scope. A single interactive editing session may involve any number of\n * editing scopes. Typically, applications will enter a new editing scope (after first exiting a previous scope, if one exists):\n * - When switching from a non-graphical workflow to one that involves editing geometry; or\n * - When changing which geometric model is being edited; or\n * - After performing an operation that creates or modifies a \"large\" number (perhaps hundreds?) of elements.\n *\n * An application should typically exit any graphical editing scope before:\n * - Pulling changesets; or\n * - Switching from a graphical editing workflow to some non-graphical workflow.\n *\n * Graphical editing scopes are only supported for [[BriefcaseConnection]]s opened in read-write mode that contain version 1.0.11 or newer of the BisCore schema.\n * @see [[BriefcaseConnection.enterEditingScope]] to create a scope for a briefcase.\n * @see [[BriefcaseConnection.editingScope]] to obtain a briefcase's current scope.\n * @see [[exit]] to terminate a scope.\n * @public\n */\nexport class GraphicalEditingScope extends BriefcaseNotificationHandler implements EditingScopeNotifications {\n public get briefcaseChannelName() { return ipcAppChannels.editingScope; }\n\n /** Maps model Id to accumulated changes to geometric elements within the associated model. */\n private readonly _geometryChanges = new Map<Id64String, ModelChanges>();\n private _disposed = false;\n private _cleanup?: RemoveFunction;\n\n /** The connection to the iModel being edited. */\n public readonly iModel: BriefcaseConnection;\n\n /** Event raised when a new scope is created for any [[BriefcaseConnection]].\n * @see [[onExiting]] and [[onExited]] for complementary events.\n */\n public static readonly onEnter = new BeEvent<(scope: GraphicalEditingScope) => void>();\n\n /** Event raised when this scope is about to exit.\n * @see [[onEnter]] for the complementary event.\n * @see [[onExited]] for an event raised after the scope exits.\n */\n public readonly onExiting = new BeEvent<(scope: GraphicalEditingScope) => void>();\n\n /** Event raised when this scope has exited.\n * @see [[onEnter]] for the complementary event.\n * @see [[onExiting]] for an event raised just before the scope is exited.\n */\n public readonly onExited = new BeEvent<(scope: GraphicalEditingScope) => void>();\n\n /** Event raised after geometric changes are written to the iModel. */\n public readonly onGeometryChanges = new BeEvent<(changes: Iterable<ModelGeometryChanges>, scope: GraphicalEditingScope) => void>();\n\n /** Don't call this directly - use BriefcaseConnection.enterEditingScope.\n * @internal\n */\n public static async enter(imodel: BriefcaseConnection): Promise<GraphicalEditingScope> {\n if (imodel.editingScope)\n throw new Error(\"Cannot create an editing scope for an iModel that already has one\");\n\n // Register the scope synchronously, in case enter() is called again for same iModel while awaiting asynchronous initialization.\n const scope = new GraphicalEditingScope(imodel);\n try {\n const scopeStarted = await IpcApp.appFunctionIpc.toggleGraphicalEditingScope(imodel.key, true);\n assert(scopeStarted); // If it didn't, the backend threw an error.\n } catch (e) {\n scope[Symbol.dispose]();\n throw e;\n }\n\n this.onEnter.raiseEvent(scope);\n\n return scope;\n }\n\n /** Exits this editing scope. The associated [[BriefcaseConnection]]'s `editingScope` will be reset to `undefined`.\n * @throws Error if the scope could not be exited, e.g., if it has already been exited.\n * @see [[BriefcaseConnection.enterEditingScope]] to enter an editing scope.\n */\n public async exit(): Promise<void> {\n if (this._disposed || this.iModel.editingScope !== this)\n throw new Error(\"Cannot exit editing scope after it is disconnected from the iModel\");\n\n this._disposed = true;\n try {\n this.onExiting.raiseEvent(this);\n } finally {\n const scopeExited = await IpcApp.appFunctionIpc.toggleGraphicalEditingScope(this.iModel.key, false);\n assert(!scopeExited);\n try {\n this.onExited.raiseEvent(this);\n } finally {\n this[Symbol.dispose]();\n }\n }\n }\n\n /** Obtain all geometric changes to elements within the specified model accumulated within this scope. */\n public getGeometryChangesForModel(modelId: Id64String): Iterable<ElementGeometryChange> | undefined {\n return this._geometryChanges.get(modelId);\n }\n\n /** Obtain all geometric changes to models accumulated within this scope. */\n public getGeometryChanges(): Iterable<ModelGeometryChanges> {\n return { [Symbol.iterator]: () => this.geometryChangeIterator() };\n }\n\n /** @internal */\n public get isDisposed() {\n return this._disposed;\n }\n\n private * geometryChangeIterator(): Iterator<ModelGeometryChanges> {\n for (const [key, value] of this._geometryChanges) {\n yield {\n id: key,\n geometryGuid: value.geometryGuid,\n range: value.range,\n elements: value,\n };\n }\n }\n\n private constructor(iModel: BriefcaseConnection) {\n super(iModel.key);\n this.iModel = iModel;\n this._cleanup = this.registerImpl();\n }\n\n private [Symbol.dispose](): void {\n this._disposed = true;\n\n this.onExiting.clear();\n this.onGeometryChanges.clear();\n this.onExited.clear();\n\n this._geometryChanges.clear();\n\n if (this._cleanup) {\n this._cleanup();\n this._cleanup = undefined;\n }\n }\n\n /** @deprecated in 5.0 Use [Symbol.dispose] instead. */\n public dispose() {\n this[Symbol.dispose]();\n }\n\n /** @internal */\n public notifyGeometryChanged(props: ModelGeometryChangesProps[]) {\n const changes = ModelGeometryChanges.iterable(props);\n const modelIds: Id64String[] = [];\n let deletedIds: Id64Set | undefined;\n\n for (const modelChanges of changes) {\n // ###TODO do we care about the model range?\n let list = this._geometryChanges.get(modelChanges.id);\n modelIds.push(modelChanges.id);\n for (const elementChange of modelChanges.elements) {\n if (!list) {\n this._geometryChanges.set(modelChanges.id, list = new ModelChanges(modelChanges.geometryGuid, modelChanges.range));\n } else {\n list.geometryGuid = modelChanges.geometryGuid;\n modelChanges.range.clone(list.range);\n }\n\n list.insert(elementChange);\n if (DbOpcode.Delete === elementChange.type) {\n if (undefined === deletedIds)\n deletedIds = new Set<Id64String>();\n deletedIds.add(elementChange.id);\n }\n }\n }\n\n if (deletedIds) {\n this.iModel.selectionSet.remove(deletedIds);\n this.iModel.hilited.remove({ elements: deletedIds });\n }\n\n this.onGeometryChanges.raiseEvent(changes, this);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GraphicalEditingScope.js","sourceRoot":"","sources":["../../src/GraphicalEditingScope.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module IModelConnection\n */\n\nimport { assert, BeEvent, compareStrings, DbOpcode, DuplicatePolicy, GuidString, Id64Set, Id64String, SortedArray } from \"@itwin/core-bentley\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport {\n EditingScopeNotifications, ElementGeometryChange, ipcAppChannels, ModelGeometryChanges, ModelGeometryChangesProps, RemoveFunction,\n} from \"@itwin/core-common\";\nimport { BriefcaseNotificationHandler } from \"./BriefcaseTxns\";\nimport { BriefcaseConnection } from \"./BriefcaseConnection\";\nimport { IpcApp } from \"./IpcApp\";\n\nclass ModelChanges extends SortedArray<ElementGeometryChange> {\n public geometryGuid: GuidString;\n public readonly range: Range3d;\n\n public constructor(geometryGuid: GuidString, range: Range3d) {\n super((lhs, rhs) => compareStrings(lhs.id, rhs.id), DuplicatePolicy.Replace);\n this.geometryGuid = geometryGuid;\n this.range = range;\n }\n}\n\n/** Represents a period of time within an [interactive editing]($docs/learning/InteractiveEditing.md) session during which the\n * geometry of elements being displayed in one or more [[Viewport]]s is being modified. Outside of such a scope, whenever the\n * geometry within a [GeometricModel]($backend) changes new [[Tile]]s must be generated to reflect those changes in a viewport.\n * Regenerating entire tiles each time individual elements change can be time-consuming, which may introduce an unacceptable delay\n * between making a modification and seeing its result on the screen.\n *\n * Within the context of a graphical editing scope, no new tiles are generated. Instead, the geometry for any deleted or modified elements\n * is hidden in the tile graphics, and additional temporary graphics are displayed for any newly-inserted or modified elements. Only when the\n * scope exits are new tiles produced.\n *\n * The application decides when to enter and exit a graphical editing scope. A single interactive editing session may involve any number of\n * editing scopes. Typically, applications will enter a new editing scope (after first exiting a previous scope, if one exists):\n * - When switching from a non-graphical workflow to one that involves editing geometry; or\n * - When changing which geometric model is being edited; or\n * - After performing an operation that creates or modifies a \"large\" number (perhaps hundreds?) of elements.\n *\n * An application should typically exit any graphical editing scope before:\n * - Pulling changesets; or\n * - Switching from a graphical editing workflow to some non-graphical workflow.\n *\n * Graphical editing scopes are only supported for [[BriefcaseConnection]]s opened in read-write mode that contain version 1.0.11 or newer of the BisCore schema.\n * @see [[BriefcaseConnection.enterEditingScope]] to create a scope for a briefcase.\n * @see [[BriefcaseConnection.editingScope]] to obtain a briefcase's current scope.\n * @see [[exit]] to terminate a scope.\n * @public\n */\nexport class GraphicalEditingScope extends BriefcaseNotificationHandler implements EditingScopeNotifications {\n public get briefcaseChannelName() { return ipcAppChannels.editingScope; }\n\n /** Maps model Id to accumulated changes to geometric elements within the associated model. */\n private readonly _geometryChanges = new Map<Id64String, ModelChanges>();\n private _disposed = false;\n private _cleanup?: RemoveFunction;\n\n /** The connection to the iModel being edited. */\n public readonly iModel: BriefcaseConnection;\n\n /** Event raised when a new scope is created for any [[BriefcaseConnection]].\n * @see [[onExiting]] and [[onExited]] for complementary events.\n */\n public static readonly onEnter = new BeEvent<(scope: GraphicalEditingScope) => void>();\n\n /** Event raised when this scope is about to exit.\n * @see [[onEnter]] for the complementary event.\n * @see [[onExited]] for an event raised after the scope exits.\n */\n public readonly onExiting = new BeEvent<(scope: GraphicalEditingScope) => void>();\n\n /** Event raised when this scope has exited.\n * @see [[onEnter]] for the complementary event.\n * @see [[onExiting]] for an event raised just before the scope is exited.\n */\n public readonly onExited = new BeEvent<(scope: GraphicalEditingScope) => void>();\n\n /** Event raised after geometric changes are written to the iModel. */\n public readonly onGeometryChanges = new BeEvent<(changes: Iterable<ModelGeometryChanges>, scope: GraphicalEditingScope) => void>();\n\n /** Don't call this directly - use BriefcaseConnection.enterEditingScope.\n * @internal\n */\n public static async enter(imodel: BriefcaseConnection): Promise<GraphicalEditingScope> {\n if (imodel.editingScope)\n throw new Error(\"Cannot create an editing scope for an iModel that already has one\");\n\n // Register the scope synchronously, in case enter() is called again for same iModel while awaiting asynchronous initialization.\n const scope = new GraphicalEditingScope(imodel);\n try {\n const scopeStarted = await IpcApp.appFunctionIpc.toggleGraphicalEditingScope(imodel.key, true);\n assert(scopeStarted); // If it didn't, the backend threw an error.\n } catch (e) {\n scope[Symbol.dispose]();\n throw e;\n }\n\n this.onEnter.raiseEvent(scope);\n\n return scope;\n }\n\n /** Exits this editing scope. The associated [[BriefcaseConnection]]'s `editingScope` will be reset to `undefined`.\n * @throws Error if the scope could not be exited, e.g., if it has already been exited.\n * @see [[BriefcaseConnection.enterEditingScope]] to enter an editing scope.\n */\n public async exit(): Promise<void> {\n if (this._disposed || this.iModel.editingScope !== this)\n throw new Error(\"Cannot exit editing scope after it is disconnected from the iModel\");\n\n this._disposed = true;\n try {\n this.onExiting.raiseEvent(this);\n } finally {\n const scopeExited = await IpcApp.appFunctionIpc.toggleGraphicalEditingScope(this.iModel.key, false);\n assert(!scopeExited);\n try {\n this.onExited.raiseEvent(this);\n } finally {\n this[Symbol.dispose]();\n }\n }\n }\n\n /** Obtain all geometric changes to elements within the specified model accumulated within this scope. */\n public getGeometryChangesForModel(modelId: Id64String): Iterable<ElementGeometryChange> | undefined {\n return this._geometryChanges.get(modelId);\n }\n\n /** Obtain all geometric changes to models accumulated within this scope. */\n public getGeometryChanges(): Iterable<ModelGeometryChanges> {\n return { [Symbol.iterator]: () => this.geometryChangeIterator() };\n }\n\n /** @internal */\n public get isDisposed() {\n return this._disposed;\n }\n\n private * geometryChangeIterator(): Iterator<ModelGeometryChanges> {\n for (const [key, value] of this._geometryChanges) {\n yield {\n id: key,\n geometryGuid: value.geometryGuid,\n range: value.range,\n elements: value,\n };\n }\n }\n\n private constructor(iModel: BriefcaseConnection) {\n super(iModel.key);\n this.iModel = iModel;\n this._cleanup = this.registerImpl();\n }\n\n private [Symbol.dispose](): void {\n this._disposed = true;\n\n this.onExiting.clear();\n this.onGeometryChanges.clear();\n this.onExited.clear();\n\n this._geometryChanges.clear();\n\n if (this._cleanup) {\n this._cleanup();\n this._cleanup = undefined;\n }\n }\n\n /** @deprecated in 5.0 - will not be removed until after 2026-06-13. Use [Symbol.dispose] instead. */\n public dispose() {\n this[Symbol.dispose]();\n }\n\n /** @internal */\n public notifyGeometryChanged(props: ModelGeometryChangesProps[]) {\n const changes = ModelGeometryChanges.iterable(props);\n const modelIds: Id64String[] = [];\n let deletedIds: Id64Set | undefined;\n\n for (const modelChanges of changes) {\n // ###TODO do we care about the model range?\n let list = this._geometryChanges.get(modelChanges.id);\n modelIds.push(modelChanges.id);\n for (const elementChange of modelChanges.elements) {\n if (!list) {\n this._geometryChanges.set(modelChanges.id, list = new ModelChanges(modelChanges.geometryGuid, modelChanges.range));\n } else {\n list.geometryGuid = modelChanges.geometryGuid;\n modelChanges.range.clone(list.range);\n }\n\n list.insert(elementChange);\n if (DbOpcode.Delete === elementChange.type) {\n if (undefined === deletedIds)\n deletedIds = new Set<Id64String>();\n deletedIds.add(elementChange.id);\n }\n }\n }\n\n if (deletedIds) {\n this.iModel.selectionSet.remove(deletedIds);\n this.iModel.hilited.remove({ elements: deletedIds });\n }\n\n this.onGeometryChanges.raiseEvent(changes, this);\n }\n}\n"]}
|
package/lib/cjs/HitDetail.d.ts
CHANGED
|
@@ -253,7 +253,7 @@ export declare class HitDetail {
|
|
|
253
253
|
get contour(): ContourHit | undefined;
|
|
254
254
|
/** Create a new HitDetail from the inputs to and results of a locate operation. */
|
|
255
255
|
constructor(props: HitDetailProps);
|
|
256
|
-
/** @deprecated in 4.1. Use the overload that takes a [[HitDetailProps]]. */
|
|
256
|
+
/** @deprecated in 4.1 - will not be removed until after 2026-06-13. Use the overload that takes a [[HitDetailProps]]. */
|
|
257
257
|
constructor(testPoint: Point3d, viewport: ScreenViewport, hitSource: HitSource, hitPoint: Point3d, sourceId: string, priority: HitPriority, distXY: number, distFraction: number, subCategoryId?: string, geometryClass?: GeometryClass, modelId?: string, sourceIModel?: IModelConnection, tileId?: string, isClassifier?: boolean);
|
|
258
258
|
/** Get the type of HitDetail.
|
|
259
259
|
* @returns HitDetailType.Hit if this is a HitDetail, HitDetailType.Snap if it is a SnapDetail
|