@itwin/core-frontend 5.1.0-dev.9 → 5.2.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -1
- package/lib/cjs/AccuDraw.js +2 -2
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.d.ts.map +1 -1
- package/lib/cjs/AccuSnap.js +15 -6
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/AuxCoordSys.js +1 -1
- package/lib/cjs/AuxCoordSys.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts +37 -0
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +65 -0
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/DrawingViewState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.js +1 -0
- package/lib/cjs/DrawingViewState.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 +19 -4
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +21 -2
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +8 -9
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +52 -24
- 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/RealityDataSource.d.ts +65 -3
- package/lib/cjs/RealityDataSource.d.ts.map +1 -1
- package/lib/cjs/RealityDataSource.js +79 -3
- package/lib/cjs/RealityDataSource.js.map +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.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/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 +6 -4
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +23 -3
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/gltf/GltfSchema.d.ts +18 -0
- package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
- package/lib/cjs/common/gltf/GltfSchema.js +1 -0
- package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
- package/lib/cjs/common/imdl/CompactEdges.d.ts +11 -0
- package/lib/cjs/common/imdl/CompactEdges.d.ts.map +1 -1
- package/lib/cjs/common/imdl/CompactEdges.js +9 -6
- package/lib/cjs/common/imdl/CompactEdges.js.map +1 -1
- package/lib/cjs/common/imdl/ImdlSchema.d.ts +5 -1
- package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ImdlSchema.js +4 -0
- package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.js +11 -9
- package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/cjs/common/internal/render/EdgeParams.d.ts +7 -2
- package/lib/cjs/common/internal/render/EdgeParams.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/EdgeParams.js +30 -8
- package/lib/cjs/common/internal/render/EdgeParams.js.map +1 -1
- package/lib/cjs/common/internal/render/MeshPrimitives.d.ts +2 -1
- package/lib/cjs/common/internal/render/MeshPrimitives.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/MeshPrimitives.js +5 -7
- package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
- package/lib/cjs/common/internal/render/PolylineParams.d.ts +8 -3
- package/lib/cjs/common/internal/render/PolylineParams.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/PolylineParams.js +6 -9
- package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableSplitter.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableSplitter.js +9 -7
- package/lib/cjs/common/internal/render/VertexTableSplitter.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +2 -2
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +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/GoogleMapsDecorator.d.ts +53 -0
- package/lib/cjs/internal/GoogleMapsDecorator.d.ts.map +1 -0
- package/lib/cjs/internal/GoogleMapsDecorator.js +132 -0
- package/lib/cjs/internal/GoogleMapsDecorator.js.map +1 -0
- package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.d.ts +83 -0
- package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.d.ts.map +1 -0
- package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.js +201 -0
- package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.js.map +1 -0
- package/lib/cjs/internal/ScriptUtils.d.ts +5 -0
- package/lib/cjs/internal/ScriptUtils.d.ts.map +1 -0
- package/lib/cjs/internal/ScriptUtils.js +120 -0
- package/lib/cjs/internal/ScriptUtils.js.map +1 -0
- package/lib/cjs/internal/cross-package.d.ts +1 -0
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +4 -1
- package/lib/cjs/internal/cross-package.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/BatchUniforms.js +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchStack.d.ts +2 -2
- package/lib/cjs/internal/render/webgl/BranchStack.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchStack.js +3 -2
- package/lib/cjs/internal/render/webgl/BranchStack.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchState.d.ts +4 -2
- package/lib/cjs/internal/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchState.js +4 -1
- package/lib/cjs/internal/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchUniforms.d.ts +2 -2
- package/lib/cjs/internal/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchUniforms.js +2 -2
- package/lib/cjs/internal/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/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/ContourUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ContourUniforms.js +2 -3
- package/lib/cjs/internal/render/webgl/ContourUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Contours.js +8 -8
- package/lib/cjs/internal/render/webgl/Contours.js.map +1 -1
- package/lib/cjs/internal/render/webgl/EdgeGeometry.d.ts +8 -6
- package/lib/cjs/internal/render/webgl/EdgeGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/EdgeGeometry.js +21 -7
- package/lib/cjs/internal/render/webgl/EdgeGeometry.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Graphic.d.ts +2 -1
- package/lib/cjs/internal/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Graphic.js +2 -0
- package/lib/cjs/internal/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.d.ts +6 -1
- package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.js +19 -4
- package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Mesh.d.ts +1 -1
- package/lib/cjs/internal/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Mesh.js +13 -6
- package/lib/cjs/internal/render/webgl/Mesh.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +2 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.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 +2 -1
- package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.js +3 -1
- package/lib/cjs/internal/render/webgl/Target.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/IModelTileTree.d.ts +4 -2
- package/lib/cjs/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.js +58 -0
- package/lib/cjs/internal/tile/IModelTileTree.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/OrbitGtTileTree.d.ts +4 -1
- package/lib/cjs/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/OrbitGtTileTree.js +4 -0
- package/lib/cjs/internal/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.js +5 -4
- package/lib/cjs/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts +26 -7
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.js +48 -21
- package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.d.ts +2 -2
- package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.js +10 -2
- package/lib/cjs/internal/tile/RealityTileLoader.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/internal/webgl.d.ts +1 -1
- package/lib/cjs/internal/webgl.d.ts.map +1 -1
- package/lib/cjs/internal/webgl.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 +210 -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 +4 -2
- 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/MeshArgs.d.ts +8 -3
- package/lib/cjs/render/MeshArgs.d.ts.map +1 -1
- package/lib/cjs/render/MeshArgs.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/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/GltfReader.d.ts +6 -2
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +154 -18
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts +9 -0
- package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTile.js +12 -0
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +4 -0
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +4 -0
- package/lib/cjs/tile/RealityTileTree.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/TileGeometryCollector.d.ts +5 -0
- package/lib/cjs/tile/TileGeometryCollector.d.ts.map +1 -1
- package/lib/cjs/tile/TileGeometryCollector.js.map +1 -1
- package/lib/cjs/tile/TileTree.d.ts +15 -2
- package/lib/cjs/tile/TileTree.d.ts.map +1 -1
- package/lib/cjs/tile/TileTree.js +14 -1
- package/lib/cjs/tile/TileTree.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +17 -3
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +11 -5
- 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/ClipViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +18 -7
- package/lib/cjs/tools/ClipViewTool.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 +130 -7
- package/lib/cjs/tools/ElementSetTool.js.map +1 -1
- package/lib/cjs/tools/IdleTool.d.ts.map +1 -1
- package/lib/cjs/tools/IdleTool.js +4 -1
- package/lib/cjs/tools/IdleTool.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 +57 -24
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/cjs/tools/PrimitiveTool.d.ts +1 -1
- package/lib/cjs/tools/PrimitiveTool.d.ts.map +1 -1
- package/lib/cjs/tools/PrimitiveTool.js +4 -3
- package/lib/cjs/tools/PrimitiveTool.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.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +51 -16
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ToolAssistance.d.ts +1 -1
- package/lib/cjs/tools/ToolAssistance.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 +143 -84
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuDraw.js +2 -2
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.d.ts.map +1 -1
- package/lib/esm/AccuSnap.js +15 -6
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/AuxCoordSys.js +1 -1
- package/lib/esm/AuxCoordSys.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +37 -0
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +65 -0
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/DrawingViewState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.js +1 -0
- package/lib/esm/DrawingViewState.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 +19 -4
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +22 -3
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +8 -9
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +53 -25
- 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/RealityDataSource.d.ts +65 -3
- package/lib/esm/RealityDataSource.d.ts.map +1 -1
- package/lib/esm/RealityDataSource.js +77 -3
- package/lib/esm/RealityDataSource.js.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.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/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 +6 -4
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +23 -3
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/gltf/GltfSchema.d.ts +18 -0
- package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
- package/lib/esm/common/gltf/GltfSchema.js +1 -0
- package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
- package/lib/esm/common/imdl/CompactEdges.d.ts +11 -0
- package/lib/esm/common/imdl/CompactEdges.d.ts.map +1 -1
- package/lib/esm/common/imdl/CompactEdges.js +8 -6
- package/lib/esm/common/imdl/CompactEdges.js.map +1 -1
- package/lib/esm/common/imdl/ImdlSchema.d.ts +5 -1
- package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
- package/lib/esm/common/imdl/ImdlSchema.js +4 -0
- package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.js +11 -9
- package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/esm/common/internal/render/EdgeParams.d.ts +7 -2
- package/lib/esm/common/internal/render/EdgeParams.d.ts.map +1 -1
- package/lib/esm/common/internal/render/EdgeParams.js +31 -9
- package/lib/esm/common/internal/render/EdgeParams.js.map +1 -1
- package/lib/esm/common/internal/render/MeshPrimitives.d.ts +2 -1
- package/lib/esm/common/internal/render/MeshPrimitives.d.ts.map +1 -1
- package/lib/esm/common/internal/render/MeshPrimitives.js +5 -7
- package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
- package/lib/esm/common/internal/render/PolylineParams.d.ts +8 -3
- package/lib/esm/common/internal/render/PolylineParams.d.ts.map +1 -1
- package/lib/esm/common/internal/render/PolylineParams.js +5 -8
- package/lib/esm/common/internal/render/PolylineParams.js.map +1 -1
- package/lib/esm/common/internal/render/VertexTableSplitter.d.ts.map +1 -1
- package/lib/esm/common/internal/render/VertexTableSplitter.js +9 -7
- package/lib/esm/common/internal/render/VertexTableSplitter.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +2 -2
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +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/GoogleMapsDecorator.d.ts +53 -0
- package/lib/esm/internal/GoogleMapsDecorator.d.ts.map +1 -0
- package/lib/esm/internal/GoogleMapsDecorator.js +126 -0
- package/lib/esm/internal/GoogleMapsDecorator.js.map +1 -0
- package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.d.ts +83 -0
- package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.d.ts.map +1 -0
- package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.js +197 -0
- package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.js.map +1 -0
- package/lib/esm/internal/ScriptUtils.d.ts +5 -0
- package/lib/esm/internal/ScriptUtils.d.ts.map +1 -0
- package/lib/esm/internal/ScriptUtils.js +117 -0
- package/lib/esm/internal/ScriptUtils.js.map +1 -0
- package/lib/esm/internal/cross-package.d.ts +1 -0
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -0
- package/lib/esm/internal/cross-package.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/BatchUniforms.js +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchStack.d.ts +2 -2
- package/lib/esm/internal/render/webgl/BranchStack.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BranchStack.js +3 -2
- package/lib/esm/internal/render/webgl/BranchStack.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchState.d.ts +4 -2
- package/lib/esm/internal/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BranchState.js +4 -1
- package/lib/esm/internal/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchUniforms.d.ts +2 -2
- package/lib/esm/internal/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BranchUniforms.js +2 -2
- package/lib/esm/internal/render/webgl/BranchUniforms.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/ContourUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ContourUniforms.js +2 -3
- package/lib/esm/internal/render/webgl/ContourUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/Contours.js +8 -8
- package/lib/esm/internal/render/webgl/Contours.js.map +1 -1
- package/lib/esm/internal/render/webgl/EdgeGeometry.d.ts +8 -6
- package/lib/esm/internal/render/webgl/EdgeGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/EdgeGeometry.js +21 -7
- package/lib/esm/internal/render/webgl/EdgeGeometry.js.map +1 -1
- package/lib/esm/internal/render/webgl/Graphic.d.ts +2 -1
- package/lib/esm/internal/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Graphic.js +2 -0
- package/lib/esm/internal/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.d.ts +6 -1
- package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.js +19 -4
- package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.js.map +1 -1
- package/lib/esm/internal/render/webgl/Mesh.d.ts +1 -1
- package/lib/esm/internal/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Mesh.js +14 -7
- package/lib/esm/internal/render/webgl/Mesh.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +2 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.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 +2 -1
- package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Target.js +3 -1
- package/lib/esm/internal/render/webgl/Target.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/IModelTileTree.d.ts +4 -2
- package/lib/esm/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.js +60 -2
- package/lib/esm/internal/tile/IModelTileTree.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/OrbitGtTileTree.d.ts +4 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.js +5 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.js +5 -4
- package/lib/esm/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts +26 -7
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.js +48 -22
- package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.d.ts +2 -2
- package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.js +10 -2
- package/lib/esm/internal/tile/RealityTileLoader.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/internal/webgl.d.ts +1 -1
- package/lib/esm/internal/webgl.d.ts.map +1 -1
- package/lib/esm/internal/webgl.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 +208 -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 +4 -2
- 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/MeshArgs.d.ts +8 -3
- package/lib/esm/render/MeshArgs.d.ts.map +1 -1
- package/lib/esm/render/MeshArgs.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/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/GltfReader.d.ts +6 -2
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +154 -19
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts +9 -0
- package/lib/esm/tile/RealityTile.d.ts.map +1 -1
- package/lib/esm/tile/RealityTile.js +12 -0
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +4 -0
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +4 -0
- package/lib/esm/tile/RealityTileTree.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/TileGeometryCollector.d.ts +5 -0
- package/lib/esm/tile/TileGeometryCollector.d.ts.map +1 -1
- package/lib/esm/tile/TileGeometryCollector.js.map +1 -1
- package/lib/esm/tile/TileTree.d.ts +15 -2
- package/lib/esm/tile/TileTree.d.ts.map +1 -1
- package/lib/esm/tile/TileTree.js +14 -1
- package/lib/esm/tile/TileTree.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +17 -3
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +11 -5
- 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/ClipViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +18 -7
- package/lib/esm/tools/ClipViewTool.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 +132 -9
- package/lib/esm/tools/ElementSetTool.js.map +1 -1
- package/lib/esm/tools/IdleTool.d.ts.map +1 -1
- package/lib/esm/tools/IdleTool.js +4 -1
- package/lib/esm/tools/IdleTool.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 +57 -24
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/esm/tools/PrimitiveTool.d.ts +1 -1
- package/lib/esm/tools/PrimitiveTool.d.ts.map +1 -1
- package/lib/esm/tools/PrimitiveTool.js +4 -3
- package/lib/esm/tools/PrimitiveTool.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.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +51 -16
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ToolAssistance.d.ts +1 -1
- package/lib/esm/tools/ToolAssistance.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 +143 -84
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/lib/public/images/google_on_non_white.png +0 -0
- package/lib/public/images/google_on_non_white_hdpi.png +0 -0
- package/lib/public/images/google_on_white.png +0 -0
- package/lib/public/images/google_on_white_hdpi.png +0 -0
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +25 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClipViewTool.js","sourceRoot":"","sources":["../../../src/tools/ClipViewTool.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 Tools\n */\n\nimport { BeEvent, Id64, Id64Arg, Id64String } from \"@itwin/core-bentley\";\nimport {\n AxisOrder, ClipMaskXYZRangePlanes, ClipPlane, ClipPrimitive, ClipShape, ClipUtilities, ClipVector, ConvexClipPlaneSet, FrameBuilder, Geometry, GeometryQuery,\n GrowableXYZArray, LineString3d, Loop, Matrix3d, Path, Plane3dByOriginAndUnitNormal, Point3d, PolygonOps, PolylineOps, Range1d, Range3d, Ray3d,\n Transform, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { ClipStyle, ColorDef, LinePixels, Placement2d } from \"@itwin/core-common\";\nimport { DialogItem, DialogItemValue, DialogPropertySyncItem, PropertyDescription } from \"@itwin/appui-abstract\";\nimport { AccuDrawHintBuilder, ContextRotationId } from \"../AccuDraw\";\nimport { CoordSystem } from \"../CoordSystem\";\nimport { LocateResponse } from \"../ElementLocateManager\";\nimport { HitDetail } from \"../HitDetail\";\nimport { IModelApp } from \"../IModelApp\";\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\nimport { DecorateContext } from \"../ViewContext\";\nimport { ScreenViewport, Viewport } from \"../Viewport\";\nimport { EditManipulator } from \"./EditManipulator\";\nimport { PrimitiveTool } from \"./PrimitiveTool\";\nimport { BeButtonEvent, CoordinateLockOverrides, CoreTools, EventHandled } from \"./Tool\";\nimport { ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection } from \"./ToolAssistance\";\nimport { GraphicType } from \"../common/render/GraphicType\";\n\n// cSpell:ignore geti\n\n/** An object that can react to a view's clip being changed by tools or modify handles.\n * @public\n * @extensions\n */\nexport interface ViewClipEventHandler {\n /** Add newly created clip geometry to selection set and show modify controls. */\n selectOnCreate(): boolean;\n /** Stop displaying clip geometry when clip is removed from the selection set. */\n clearOnDeselect(): boolean;\n /** Called by tools that set or replace the existing view clip with a new clip. */\n onNewClip(viewport: Viewport): void;\n /** Called by tools that add a single plane to the view clip. When there is more than one plane, the new plane is always last. */\n onNewClipPlane(viewport: Viewport): void;\n /** Called by tools after modifying the view clip. */\n onModifyClip(viewport: Viewport): void;\n /** Called when the view clip is cleared from the view. */\n onClearClip(viewport: Viewport): void;\n /** Called when user right clicks on clip geometry or clip modify handle. Return true if event handled. */\n onRightClick(hit: HitDetail, ev: BeButtonEvent): boolean;\n}\n\n/** @internal Options to control display for ViewClipTool.drawClip */\nexport interface DrawClipOptions {\n /** Color to use for clip edges, uses white adjusted for background color if not specified. */\n color?: ColorDef;\n /** Color to use for clip plane fill, uses transparent cyan adjusted for background color if not specified. */\n fill?: ColorDef;\n /** Width for visible clip edges, uses 3 if not specified. */\n visibleWidth?: number;\n /** Width for hidden clip edges, uses 1 if not specified. */\n hiddenWidth?: number;\n /** Style for hidden clip edges, uses LinePixels.Code2 if not specified. */\n hiddenStyle?: LinePixels;\n /** Whether to draw filled clip planes. */\n fillClipPlanes?: boolean;\n /** Whether clip represents a single section plane with additional planes for xy and back clipping. Fill will only apply to the primary plane. */\n hasPrimaryPlane?: boolean;\n /** Unique id to allow clip edges to be pickable. */\n id?: string;\n}\n\n/** A tool to define a clip volume for a view\n * @public @extensions\n */\nexport class ViewClipTool extends PrimitiveTool {\n constructor(protected _clipEventHandler?: ViewClipEventHandler) { super(); }\n\n /** @internal */\n protected static _orientationName = \"enumAsOrientation\";\n /** @internal */\n protected static enumAsOrientationMessage(str: string) { return CoreTools.translate(`Settings.Orientation.${str}`); }\n /** @internal */\n protected static _getEnumAsOrientationDescription = (): PropertyDescription => {\n return {\n name: ViewClipTool._orientationName,\n displayLabel: CoreTools.translate(\"Settings.Orientation.Label\"),\n typename: \"enum\",\n enum: {\n choices: [\n { label: ViewClipTool.enumAsOrientationMessage(\"Top\"), value: ContextRotationId.Top },\n { label: ViewClipTool.enumAsOrientationMessage(\"Front\"), value: ContextRotationId.Front },\n { label: ViewClipTool.enumAsOrientationMessage(\"Left\"), value: ContextRotationId.Left },\n { label: ViewClipTool.enumAsOrientationMessage(\"Bottom\"), value: ContextRotationId.Bottom },\n { label: ViewClipTool.enumAsOrientationMessage(\"Back\"), value: ContextRotationId.Back },\n { label: ViewClipTool.enumAsOrientationMessage(\"Right\"), value: ContextRotationId.Right },\n { label: ViewClipTool.enumAsOrientationMessage(\"View\"), value: ContextRotationId.View },\n { label: ViewClipTool.enumAsOrientationMessage(\"Face\"), value: ContextRotationId.Face },\n ],\n },\n };\n };\n\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.allow3dManipulations()); }\n\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n /** @internal */\n public async onRestartTool(): Promise<void> { return this.exitTool(); }\n /** @internal */\n protected showPrompt(): void { }\n /** @internal */\n protected setupAndPromptForNextAction(): void { this.showPrompt(); }\n /** @internal */\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** @internal */\n public static getPlaneInwardNormal(orientation: ContextRotationId, viewport: Viewport): Vector3d | undefined {\n const matrix = AccuDrawHintBuilder.getContextRotation(orientation, viewport);\n if (undefined === matrix)\n return undefined;\n return matrix.getColumn(2).negate();\n }\n\n public static enableClipVolume(viewport: Viewport): boolean {\n if (viewport.viewFlags.clipVolume)\n return false;\n\n viewport.viewFlags = viewport.viewFlags.with(\"clipVolume\", true);\n return true;\n }\n\n public static setViewClip(viewport: Viewport, clip?: ClipVector): boolean {\n viewport.view.setViewClip(clip);\n viewport.setupFromView();\n return true;\n }\n\n public static doClipToConvexClipPlaneSet(viewport: Viewport, planes: ConvexClipPlaneSet): boolean {\n const prim = ClipPrimitive.createCapture(planes);\n const clip = ClipVector.createEmpty();\n clip.appendReference(prim);\n return this.setViewClip(viewport, clip);\n }\n\n public static doClipToPlane(viewport: Viewport, origin: Point3d, normal: Vector3d, clearExistingPlanes: boolean): boolean {\n const plane = Plane3dByOriginAndUnitNormal.create(origin, normal);\n if (undefined === plane)\n return false;\n let planeSet: ConvexClipPlaneSet | undefined;\n if (!clearExistingPlanes) {\n const existingClip = viewport.view.getViewClip();\n if (undefined !== existingClip && 1 === existingClip.clips.length) {\n const existingPrim = existingClip.clips[0];\n if (!(existingPrim instanceof ClipShape)) {\n const existingPlaneSets = existingPrim.fetchClipPlanesRef();\n if (undefined !== existingPlaneSets && 1 === existingPlaneSets.convexSets.length)\n planeSet = existingPlaneSets.convexSets[0];\n }\n }\n }\n if (undefined === planeSet)\n planeSet = ConvexClipPlaneSet.createEmpty();\n planeSet.addPlaneToConvexSet(ClipPlane.createPlane(plane));\n return this.doClipToConvexClipPlaneSet(viewport, planeSet);\n }\n\n public static doClipToShape(viewport: Viewport, xyPoints: Point3d[], transform?: Transform, zLow?: number, zHigh?: number): boolean {\n const clip = ClipVector.createEmpty();\n clip.appendShape(xyPoints, zLow, zHigh, transform);\n return this.setViewClip(viewport, clip);\n }\n\n public static doClipToRange(viewport: Viewport, range: Range3d, transform?: Transform): boolean {\n if (range.isNull || range.isAlmostZeroX || range.isAlmostZeroY)\n return false;\n const clip = ClipVector.createEmpty();\n const block = ClipShape.createBlock(range, range.isAlmostZeroZ ? ClipMaskXYZRangePlanes.XAndY : ClipMaskXYZRangePlanes.All, false, false, transform);\n clip.appendReference(block);\n return this.setViewClip(viewport, clip);\n }\n\n public static doClipClear(viewport: Viewport): boolean {\n if (!ViewClipTool.hasClip(viewport))\n return false;\n return this.setViewClip(viewport);\n }\n\n /** @internal */\n public static getClipRayTransformed(origin: Point3d, direction: Vector3d, transform?: Transform): Ray3d {\n const facePt = origin.clone();\n const faceDir = direction.clone();\n\n if (undefined !== transform) {\n transform.multiplyPoint3d(facePt, facePt);\n transform.multiplyVector(faceDir, faceDir);\n faceDir.normalizeInPlace();\n }\n\n return Ray3d.createCapture(facePt, faceDir);\n }\n\n /** @internal */\n public static getOffsetValueTransformed(offset: number, transform?: Transform) {\n if (undefined === transform)\n return offset;\n const lengthVec = Vector3d.create(offset);\n transform.multiplyVector(lengthVec, lengthVec);\n const localOffset = lengthVec.magnitude();\n return (offset < 0 ? -localOffset : localOffset);\n }\n\n /** @internal */\n public static addClipPlanesLoops(builder: GraphicBuilder, loops: GeometryQuery[], outline: boolean): void {\n for (const geom of loops) {\n if (!(geom instanceof Loop))\n continue;\n if (outline)\n builder.addPath(Path.createArray(geom.children));\n else\n builder.addLoop(geom);\n }\n }\n\n /** @internal */\n private static addClipShape(builder: GraphicBuilder, shape: ClipShape, extents: Range1d): void {\n const shapePtsLo = ViewClipTool.getClipShapePoints(shape, extents.low);\n const shapePtsHi = ViewClipTool.getClipShapePoints(shape, extents.high);\n for (let i: number = 0; i < shapePtsLo.length; i++)\n builder.addLineString([shapePtsLo[i].clone(), shapePtsHi[i].clone()]);\n builder.addLineString(shapePtsLo);\n builder.addLineString(shapePtsHi);\n }\n\n /** @internal */\n public static drawClip(context: DecorateContext, clip: ClipVector, viewExtents?: Range3d, options?: DrawClipOptions): void {\n const clipShape = ViewClipTool.isSingleClipShape(clip);\n const clipPlanes = (undefined === clipShape ? ViewClipTool.isSingleConvexClipPlaneSet(clip) : undefined);\n if (undefined === clipShape && undefined === clipPlanes)\n return;\n\n const viewRange = (viewExtents ? viewExtents : context.viewport.computeViewRange());\n const clipPlanesLoops = (undefined !== clipPlanes ? ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(clipPlanes, viewRange) : undefined);\n if (undefined === clipShape && (undefined === clipPlanesLoops || 0 === clipPlanesLoops.length))\n return;\n\n const color = (options && options.color ? options.color : EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport));\n const builderVis = context.createGraphicBuilder(GraphicType.WorldDecoration, clipShape ? clipShape.transformFromClip : undefined, (options ? options.id : undefined));\n const builderHid = context.createGraphicBuilder(GraphicType.WorldOverlay, clipShape ? clipShape.transformFromClip : undefined);\n builderVis.setSymbology(color, ColorDef.black, (options && options.visibleWidth ? options.visibleWidth : 3));\n builderHid.setSymbology(color, ColorDef.black, (options && options.hiddenWidth ? options.hiddenWidth : 1), (options && options.hiddenStyle ? options.hiddenStyle : LinePixels.Code2));\n\n if (undefined !== clipPlanesLoops) {\n ViewClipTool.addClipPlanesLoops(builderVis, clipPlanesLoops, true);\n ViewClipTool.addClipPlanesLoops(builderHid, clipPlanesLoops, true);\n if (options && options.fillClipPlanes) {\n const fill = (options.fill ? options.fill : EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(0, 255, 255, 225), context.viewport));\n const builderFill = context.createGraphicBuilder(GraphicType.WorldDecoration);\n builderFill.setSymbology(fill, fill, 0);\n ViewClipTool.addClipPlanesLoops(builderFill, (options.hasPrimaryPlane ? [clipPlanesLoops[0]] : clipPlanesLoops), false);\n context.addDecorationFromBuilder(builderFill);\n }\n } else if (undefined !== clipShape) {\n const clipExtents = ViewClipTool.getClipShapeExtents(clipShape, viewRange);\n ViewClipTool.addClipShape(builderVis, clipShape, clipExtents);\n ViewClipTool.addClipShape(builderHid, clipShape, clipExtents);\n }\n\n context.addDecorationFromBuilder(builderVis);\n context.addDecorationFromBuilder(builderHid);\n }\n\n private static isHilited(vp: Viewport, id?: string): boolean {\n return (undefined !== id ? vp.iModel.hilited.elements.has(Id64.getLowerUint32(id), Id64.getUpperUint32(id)) : false);\n }\n\n private static isFlashed(vp: Viewport, id?: string): boolean {\n return (undefined !== id ? vp.lastFlashedElementId === id : false);\n }\n\n public static drawClipShape(context: DecorateContext, shape: ClipShape, extents: Range1d, color: ColorDef, weight: number, id?: string): void {\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration, shape.transformFromClip, id); // Use WorldDecoration not WorldOverlay to make sure handles have priority...\n builder.setSymbology(color, ColorDef.black, weight);\n ViewClipTool.addClipShape(builder, shape, extents);\n context.addDecorationFromBuilder(builder);\n\n // NOTE: We want to display hidden edges when clip decoration isn't hilited (not selected or drawn in dynamics).\n // This isn't required and is messy looking when the clip is being drawn hilited.\n // If the clip decoration is being flashed, draw using the hilite color to match the pickable world decoration display.\n if (!this.isHilited(context.viewport, id)) {\n const builderHid = context.createGraphicBuilder(GraphicType.WorldOverlay, shape.transformFromClip);\n builderHid.setSymbology(this.isFlashed(context.viewport, id) ? context.viewport.hilite.color : color, ColorDef.black, 1, LinePixels.Code2);\n ViewClipTool.addClipShape(builderHid, shape, extents);\n context.addDecorationFromBuilder(builderHid);\n }\n }\n\n /** @internal */\n public static getClipShapePoints(shape: ClipShape, z: number): Point3d[] {\n const points: Point3d[] = [];\n for (const pt of shape.polygon)\n points.push(Point3d.create(pt.x, pt.y, z));\n return points;\n }\n\n /** @internal */\n public static getClipShapeExtents(shape: ClipShape, viewRange: Range3d): Range1d {\n let zLow = shape.zLow;\n let zHigh = shape.zHigh;\n if (undefined === zLow || undefined === zHigh) {\n const zVec = Vector3d.unitZ();\n const origin = shape.polygon[0];\n const corners = viewRange.corners();\n if (undefined !== shape.transformToClip)\n shape.transformToClip.multiplyPoint3dArrayInPlace(corners);\n for (const corner of corners) {\n const delta = Vector3d.createStartEnd(origin, corner);\n const projection = delta.dotProduct(zVec);\n if (undefined === shape.zLow && (undefined === zLow || projection < zLow))\n zLow = projection;\n if (undefined === shape.zHigh && (undefined === zHigh || projection > zHigh))\n zHigh = projection;\n }\n }\n return Range1d.createXX(zLow!, zHigh!);\n }\n\n /** @internal */\n public static isSingleClipShape(clip: ClipVector): ClipShape | undefined {\n if (1 !== clip.clips.length)\n return undefined;\n const prim = clip.clips[0];\n if (!(prim instanceof ClipShape))\n return undefined;\n if (!prim.isValidPolygon)\n return undefined;\n return prim;\n }\n\n public static drawClipPlanesLoops(context: DecorateContext, loops: GeometryQuery[], color: ColorDef, weight: number, dashed?: boolean, fill?: ColorDef, id?: string): void {\n if (loops.length < 1)\n return;\n\n const builderEdge = context.createGraphicBuilder(GraphicType.WorldDecoration, undefined, id); // Use WorldDecoration not WorldOverlay to make sure handles have priority...\n builderEdge.setSymbology(color, ColorDef.black, weight, dashed ? LinePixels.Code2 : undefined);\n ViewClipTool.addClipPlanesLoops(builderEdge, loops, true);\n context.addDecorationFromBuilder(builderEdge);\n\n // NOTE: We want to display hidden edges when clip decoration isn't hilited (not selected or drawn in dynamics).\n // This isn't required and is messy looking when the clip is being drawn hilited.\n // If the clip decoration is being flashed, draw using the hilite color to match the pickable world decoration display.\n if (!this.isHilited(context.viewport, id)) {\n const builderEdgeHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n builderEdgeHid.setSymbology(this.isFlashed(context.viewport, id) ? context.viewport.hilite.color : color, ColorDef.black, 1, LinePixels.Code2);\n ViewClipTool.addClipPlanesLoops(builderEdgeHid, loops, true);\n context.addDecorationFromBuilder(builderEdgeHid);\n }\n\n if (undefined === fill)\n return;\n\n const builderFace = context.createGraphicBuilder(GraphicType.WorldDecoration, undefined);\n builderFace.setSymbology(fill, fill, 0);\n ViewClipTool.addClipPlanesLoops(builderFace, loops, false);\n context.addDecorationFromBuilder(builderFace);\n }\n\n /** @internal */\n public static isSingleConvexClipPlaneSet(clip: ClipVector): ConvexClipPlaneSet | undefined {\n if (1 !== clip.clips.length)\n return undefined;\n const prim = clip.clips[0];\n if (prim instanceof ClipShape)\n return undefined;\n const planeSets = prim.fetchClipPlanesRef();\n return (undefined !== planeSets && 1 === planeSets.convexSets.length) ? planeSets.convexSets[0] : undefined;\n }\n\n /** @internal */\n public static isSingleClipPlane(clip: ClipVector): ClipPlane | undefined {\n const clipPlanes = ViewClipTool.isSingleConvexClipPlaneSet(clip);\n if (undefined === clipPlanes || 1 !== clipPlanes.planes.length)\n return undefined;\n return clipPlanes.planes[0];\n }\n\n public static areClipsEqual(clipA: ClipVector, clipB: ClipVector): boolean {\n if (clipA === clipB)\n return true;\n if (clipA.clips.length !== clipB.clips.length)\n return false;\n for (let iPrim = 0; iPrim < clipA.clips.length; iPrim++) {\n const primA = clipA.clips[iPrim];\n const primB = clipB.clips[iPrim];\n const planesA = primA.fetchClipPlanesRef();\n const planesB = primB.fetchClipPlanesRef();\n if (undefined !== planesA && undefined !== planesB) {\n if (planesA.convexSets.length !== planesB.convexSets.length)\n return false;\n for (let iPlane = 0; iPlane < planesA.convexSets.length; iPlane++) {\n const planeSetA = planesA.convexSets[iPlane];\n const planeSetB = planesB.convexSets[iPlane];\n if (planeSetA.planes.length !== planeSetB.planes.length)\n return false;\n for (let iClipPlane = 0; iClipPlane < planeSetA.planes.length; iClipPlane++) {\n const planeA = planeSetA.planes[iClipPlane];\n const planeB = planeSetB.planes[iClipPlane];\n if (!planeA.isAlmostEqual(planeB))\n return false;\n }\n }\n } else if (undefined === planesA && undefined === planesB) {\n continue;\n } else {\n return false;\n }\n }\n return true;\n }\n\n public static hasClip(viewport: Viewport) {\n return (undefined !== viewport.view.getViewClip());\n }\n}\n\n/** A tool to remove a clip volume for a view\n * @public @extensions\n */\nexport class ViewClipClearTool extends ViewClipTool {\n public static override toolId = \"ViewClip.Clear\";\n public static override iconSpec = \"icon-section-tool\";\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && ViewClipTool.hasClip(vp)); }\n /** @internal */\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"ViewClip.Clear.Prompts.FirstPoint\"));\n IModelApp.notifications.setToolAssistance(ToolAssistance.createInstructions(mainInstruction));\n }\n\n protected async doClipClear(viewport: Viewport): Promise<boolean> {\n if (!ViewClipTool.doClipClear(viewport))\n return false;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onClearClip(viewport);\n await this.onReinitialize();\n return true;\n }\n\n /** @internal */\n public override async onPostInstall(): Promise<void> {\n await super.onPostInstall();\n if (undefined !== this.targetView)\n await this.doClipClear(this.targetView);\n }\n\n /** @internal */\n public override async onDataButtonDown(_ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n return await this.doClipClear(this.targetView) ? EventHandled.Yes : EventHandled.No;\n }\n}\n\n/** A tool to define a clip volume for a view by specifying a plane\n * @public\n */\nexport class ViewClipByPlaneTool extends ViewClipTool {\n public static override toolId = \"ViewClip.ByPlane\";\n public static override iconSpec = \"icon-section-plane\";\n /** @internal */\n private _orientationValue: DialogItemValue = { value: ContextRotationId.Face };\n\n constructor(clipEventHandler?: ViewClipEventHandler, protected _clearExistingPlanes: boolean = false) { super(clipEventHandler); }\n\n /** @internal */\n public get orientation(): ContextRotationId { return this._orientationValue.value as ContextRotationId; }\n public set orientation(option: ContextRotationId) { this._orientationValue.value = option; }\n\n /** @internal */\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n const initialValue = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, ViewClipTool._orientationName);\n initialValue && (this._orientationValue = initialValue);\n const toolSettings = new Array<DialogItem>();\n const settingsItem: DialogItem = { value: this._orientationValue, property: ViewClipTool._getEnumAsOrientationDescription(), editorPosition: { rowPriority: 0, columnIndex: 2 } };\n toolSettings.push(settingsItem);\n return toolSettings;\n }\n\n /** @internal */\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (updatedValue.propertyName === ViewClipTool._orientationName) {\n this._orientationValue = updatedValue.value;\n if (this._orientationValue) {\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: ViewClipTool._orientationName, value: this._orientationValue });\n return true;\n }\n }\n return false;\n }\n\n /** @internal */\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"ViewClip.ByPlane.Prompts.FirstPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected override setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n super.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n const normal = ViewClipTool.getPlaneInwardNormal(this.orientation, this.targetView);\n if (undefined === normal)\n return EventHandled.No;\n ViewClipTool.enableClipVolume(this.targetView);\n if (!ViewClipTool.doClipToPlane(this.targetView, ev.point, normal, this._clearExistingPlanes))\n return EventHandled.No;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClipPlane(this.targetView);\n await this.onReinitialize();\n return EventHandled.Yes;\n }\n}\n\n/** A tool to define a clip volume for a view by specifying a shape\n * @public\n */\nexport class ViewClipByShapeTool extends ViewClipTool {\n public static override toolId = \"ViewClip.ByShape\";\n public static override iconSpec = \"icon-section-shape\";\n /** @internal */\n private _orientationValue: DialogItemValue = { value: ContextRotationId.Top };\n /** @internal */\n protected readonly _points: Point3d[] = [];\n /** @internal */\n protected _matrix?: Matrix3d;\n /** @internal */\n protected _zLow?: number;\n /** @internal */\n protected _zHigh?: number;\n\n /** @internal */\n public get orientation(): ContextRotationId { return this._orientationValue.value as ContextRotationId; }\n public set orientation(option: ContextRotationId) { this._orientationValue.value = option; }\n\n /** @internal */\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n const initialValue = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, ViewClipTool._orientationName);\n initialValue && (this._orientationValue = initialValue);\n const toolSettings = new Array<DialogItem>();\n toolSettings.push({ value: this._orientationValue, property: ViewClipTool._getEnumAsOrientationDescription(), editorPosition: { rowPriority: 0, columnIndex: 2 } });\n return toolSettings;\n }\n\n /** @internal */\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (updatedValue.propertyName === ViewClipTool._orientationName) {\n this._orientationValue = updatedValue.value;\n if (!this._orientationValue)\n return false;\n this._points.length = 0;\n this._matrix = undefined;\n AccuDrawHintBuilder.deactivate();\n this.setupAndPromptForNextAction();\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: ViewClipTool._orientationName, value: this._orientationValue });\n return true;\n }\n return false;\n }\n\n /** @internal */\n protected override showPrompt(): void {\n let mainMsg = \"ViewClip.ByShape.Prompts.\";\n switch (this._points.length) {\n case 0:\n mainMsg += \"FirstPoint\";\n break;\n case 1:\n mainMsg += \"SecondPoint\";\n break;\n case 2:\n mainMsg += \"ThirdPoint\";\n break;\n default:\n mainMsg += \"NextPoint\";\n break;\n }\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n\n if (this._points.length > 1)\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 !== this._points.length)\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected override setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n super.setupAndPromptForNextAction();\n if (0 === this._points.length)\n return;\n\n if (undefined === this._matrix)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setOrigin(this._points[this._points.length - 1]);\n if (1 === this._points.length) {\n hints.setMatrix(this._matrix);\n hints.setModeRectangular();\n } else if (this._points.length > 1 && !(this._points[this._points.length - 1].isAlmostEqual(this._points[this._points.length - 2]))) {\n const xVec = Vector3d.createStartEnd(this._points[this._points.length - 2], this._points[this._points.length - 1]);\n const zVec = this._matrix.getColumn(2);\n const matrix = Matrix3d.createRigidFromColumns(xVec, zVec, AxisOrder.XZY);\n if (undefined !== matrix)\n hints.setMatrix(matrix); // Rotate AccuDraw x axis to last segment preserving current up vector...\n }\n hints.setLockZ = true;\n hints.sendHints();\n }\n\n protected getClipPoints(ev: BeButtonEvent): Point3d[] {\n const points: Point3d[] = [];\n if (undefined === this.targetView || this._points.length < 1)\n return points;\n for (const pt of this._points)\n points.push(pt.clone());\n\n if (undefined === this._matrix)\n return points;\n\n const normal = this._matrix.getColumn(2);\n let currentPt = AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, points[0], normal, ev.viewport!, true);\n if (undefined === currentPt)\n currentPt = ev.point.clone();\n if (2 === points.length && !ev.isControlKey) {\n const xDir = Vector3d.createStartEnd(points[0], points[1]);\n const xLen = xDir.magnitude();\n xDir.normalizeInPlace();\n const yDir = xDir.crossProduct(normal);\n yDir.normalizeInPlace();\n const cornerPt = AccuDrawHintBuilder.projectPointToLineInView(currentPt, points[1], yDir, ev.viewport!, true);\n if (undefined !== cornerPt) {\n points.push(cornerPt);\n cornerPt.plusScaled(xDir, -xLen, currentPt);\n }\n }\n points.push(currentPt);\n if (points.length > 2)\n points.push(points[0].clone());\n\n return points;\n }\n\n /** @internal */\n public override isValidLocation(ev: BeButtonEvent, isButtonEvent: boolean): boolean {\n return (this._points.length > 0 ? true : super.isValidLocation(ev, isButtonEvent));\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (context.viewport !== this.targetView)\n return;\n\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n if (undefined === ev.viewport)\n return;\n const points = this.getClipPoints(ev);\n if (points.length < 2)\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport);\n const colorAccHid = colorAccVis.withAlpha(100);\n const fillAccVis = context.viewport.hilite.color.withAlpha(25);\n\n builderAccVis.setSymbology(colorAccVis, fillAccVis, 3);\n builderAccHid.setSymbology(colorAccHid, fillAccVis, 1, LinePixels.Code2);\n\n if (points.length > 2)\n builderAccHid.addShape(points);\n\n builderAccVis.addLineString(points);\n builderAccHid.addLineString(points);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n }\n\n /** @internal */\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (this._points.length > 0 && undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n\n if (this._points.length > 1 && !ev.isControlKey) {\n const points = this.getClipPoints(ev);\n if (points.length < 3)\n return EventHandled.No;\n\n const transform = Transform.createOriginAndMatrix(points[0], this._matrix);\n transform.multiplyInversePoint3dArrayInPlace(points);\n ViewClipTool.enableClipVolume(this.targetView);\n if (!ViewClipTool.doClipToShape(this.targetView, points, transform, this._zLow, this._zHigh))\n return EventHandled.No;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClip(this.targetView);\n await this.onReinitialize();\n return EventHandled.Yes;\n }\n\n if (undefined === this._matrix && undefined === (this._matrix = AccuDrawHintBuilder.getContextRotation(this.orientation, this.targetView)))\n return EventHandled.No;\n\n const currPt = ev.point.clone();\n if (this._points.length > 0) {\n const planePt = AccuDrawHintBuilder.projectPointToPlaneInView(currPt, this._points[0], this._matrix.getColumn(2), ev.viewport!, true);\n if (undefined !== planePt)\n currPt.setFrom(planePt);\n }\n\n this._points.push(currPt);\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._points.length)\n return false;\n\n this._points.pop();\n this.setupAndPromptForNextAction();\n return true;\n }\n}\n\n/** A tool to define a clip volume for a view by specifying range corners\n * @public\n */\nexport class ViewClipByRangeTool extends ViewClipTool {\n public static override toolId = \"ViewClip.ByRange\";\n public static override iconSpec = \"icon-section-range\";\n /** @internal */\n protected _corner?: Point3d;\n\n /** @internal */\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(undefined === this._corner ? \"ViewClip.ByRange.Prompts.FirstPoint\" : \"ViewClip.ByRange.Prompts.NextPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n if (undefined !== this._corner)\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected override setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n super.setupAndPromptForNextAction();\n }\n\n protected getClipRange(range: Range3d, transform: Transform, ev: BeButtonEvent): boolean {\n if (undefined === this.targetView || undefined === this._corner)\n return false;\n // Creating clip aligned with ACS when ACS context lock is enabled...\n const matrix = AccuDrawHintBuilder.getContextRotation(ContextRotationId.Top, this.targetView);\n Transform.createOriginAndMatrix(this._corner, matrix, transform);\n const pt1 = transform.multiplyInversePoint3d(this._corner);\n const pt2 = transform.multiplyInversePoint3d(ev.point);\n if (undefined === pt1 || undefined === pt2)\n return false;\n range.setFrom(Range3d.create(pt1, pt2));\n return true;\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (context.viewport !== this.targetView || undefined === this._corner)\n return;\n\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n if (undefined === ev.viewport)\n return;\n const range = Range3d.create();\n const transform = Transform.createIdentity();\n if (!this.getClipRange(range, transform, ev))\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration, transform);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay, transform);\n const colorAccVis = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport);\n const colorAccHid = colorAccVis.withAlpha(100);\n\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\n\n builderAccVis.addRangeBox(range);\n builderAccHid.addRangeBox(range);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n }\n\n /** @internal */\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined !== this._corner && undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n\n if (undefined !== this._corner) {\n const range = Range3d.create();\n const transform = Transform.createIdentity();\n if (!this.getClipRange(range, transform, ev))\n return EventHandled.No;\n ViewClipTool.enableClipVolume(this.targetView);\n if (!ViewClipTool.doClipToRange(this.targetView, range, transform))\n return EventHandled.No;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClip(this.targetView);\n await this.onReinitialize();\n return EventHandled.Yes;\n }\n\n this._corner = ev.point.clone();\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (undefined === this._corner)\n return false;\n this._corner = undefined;\n this.setupAndPromptForNextAction();\n return true;\n }\n}\n\n/** A tool to define a clip volume for a view using the element aligned box or axis aligned box.\n * @public\n */\nexport class ViewClipByElementTool extends ViewClipTool {\n public static override toolId = \"ViewClip.ByElement\";\n public static override iconSpec = \"icon-section-element\";\n\n constructor(clipEventHandler?: ViewClipEventHandler, protected _alwaysUseRange: boolean = false) { super(clipEventHandler); }\n\n /** @internal */\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"ViewClip.ByElement.Prompts.FirstPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Mouse));\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n if (undefined !== this.targetView && this.targetView.iModel.selectionSet.isActive) {\n let useSelection = true;\n this.targetView.iModel.selectionSet.elements.forEach((val) => {\n if (Id64.isInvalid(val) || Id64.isTransient(val))\n useSelection = false;\n });\n\n if (useSelection) {\n await this.doClipToSelectedElements(this.targetView);\n return;\n }\n }\n this.initLocateElements(true, false, \"default\", CoordinateLockOverrides.All);\n }\n\n /** @internal */\n public async doClipToSelectedElements(viewport: Viewport): Promise<boolean> {\n if (await this.doClipToElements(viewport, viewport.iModel.selectionSet.elements, this._alwaysUseRange))\n return true;\n await this.exitTool();\n return false;\n }\n\n protected async doClipToElements(viewport: Viewport, ids: Id64Arg, alwaysUseRange: boolean = false, modelId?: Id64String): Promise<boolean> {\n try {\n const placements = await viewport.iModel.elements.getPlacements(ids, { type: viewport.view.is3d() ? \"3d\" : \"2d\" });\n if (0 === placements.length)\n return false;\n\n const displayTransform = modelId && 1 === placements.length ? viewport.view.computeDisplayTransform({ modelId, elementId: placements[0].elementId }) : undefined;\n const range = new Range3d();\n const transform = Transform.createIdentity();\n if (!alwaysUseRange && 1 === placements.length) {\n const placement = placements[0];\n range.setFrom(placement instanceof Placement2d ? Range3d.createRange2d(placement.bbox, 0) : placement.bbox);\n transform.setFrom(placement.transform); // Use ElementAlignedBox for single selection...\n displayTransform?.multiplyTransformTransform(transform, transform);\n } else {\n for (const placement of placements)\n range.extendRange(placement.calculateRange());\n\n if (displayTransform)\n transform.setFrom(displayTransform);\n }\n\n if (range.isNull)\n return false;\n\n range.scaleAboutCenterInPlace(1.001); // pad range slightly...\n if (range.isAlmostZeroX || range.isAlmostZeroY) {\n if (range.isAlmostZeroZ)\n return false;\n\n // Invalid XY range for clip, see if XZ or YZ can be used instead...\n const canUseXZ = !range.isAlmostZeroX;\n const canUseYZ = !canUseXZ && !range.isAlmostZeroY;\n if (!canUseXZ && !canUseYZ)\n return false;\n\n const zDir = canUseXZ ? Vector3d.unitY() : Vector3d.unitX();\n const indices = Range3d.faceCornerIndices(canUseXZ ? 3 : 1);\n const corners = range.corners();\n const points: Point3d[] = [];\n for (const index of indices)\n points.push(corners[index]);\n\n transform.multiplyPoint3dArrayInPlace(points);\n transform.multiplyVector(zDir, zDir);\n transform.setFrom(Transform.createOriginAndMatrix(points[0], Matrix3d.createRigidHeadsUp(zDir)));\n transform.multiplyInversePoint3dArrayInPlace(points);\n ViewClipTool.enableClipVolume(viewport);\n if (!ViewClipTool.doClipToShape(viewport, points, transform))\n return false;\n\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClip(viewport);\n\n await this.onReinitialize();\n return true;\n }\n ViewClipTool.enableClipVolume(viewport);\n if (!ViewClipTool.doClipToRange(viewport, range, transform))\n return false;\n\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClip(viewport);\n\n await this.onReinitialize();\n return true;\n } catch {\n return false;\n }\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\n if (undefined === hit || !hit.isElementHit)\n return EventHandled.No;\n return await this.doClipToElements(this.targetView, hit.sourceId, this._alwaysUseRange, hit.modelId) ? EventHandled.Yes : EventHandled.No;\n }\n}\n\n/** @internal Interactive tool base class to modify a view's clip */\nexport abstract class ViewClipModifyTool extends EditManipulator.HandleTool {\n protected _anchorIndex: number;\n protected _ids: string[];\n protected _controls: ViewClipControlArrow[];\n protected _clipView: Viewport;\n protected _clip: ClipVector;\n protected _viewRange: Range3d;\n protected _restoreClip = true;\n protected _currentDistance: number = 0.0;\n private readonly _clipStyle: ClipStyle;\n\n public constructor(manipulator: EditManipulator.HandleProvider, clip: ClipVector, vp: Viewport, hitId: string, ids: string[], controls: ViewClipControlArrow[]) {\n super(manipulator);\n this._anchorIndex = ids.indexOf(hitId);\n this._ids = ids;\n this._controls = controls;\n this._clipView = vp;\n this._clip = clip;\n this._viewRange = vp.computeViewRange();\n\n // Don't request section-cut graphics while the user is modifying the clip. We'll restore this when the tool exits.\n this._clipStyle = vp.clipStyle;\n if (this._clipStyle.produceCutGeometry) {\n vp.clipStyle = ClipStyle.fromJSON({\n ...this._clipStyle.toJSON(),\n produceCutGeometry: false,\n });\n }\n }\n\n protected override get wantAccuSnap(): boolean { return false; }\n\n protected override init(): void {\n super.init();\n AccuDrawHintBuilder.deactivate();\n }\n\n protected abstract updateViewClip(ev: BeButtonEvent, isAccept: boolean): boolean;\n protected abstract drawViewClip(context: DecorateContext): void;\n\n protected getOffsetValue(ev: BeButtonEvent, transformFromClip?: Transform): number | undefined {\n if (-1 === this._anchorIndex || undefined === ev.viewport || ev.viewport !== this._clipView)\n return undefined;\n\n // NOTE: Use AccuDraw z instead of view z if AccuDraw is explicitly enabled...\n const anchorRay = ViewClipTool.getClipRayTransformed(this._controls[this._anchorIndex].origin, this._controls[this._anchorIndex].direction, transformFromClip);\n const projectedPt = AccuDrawHintBuilder.projectPointToLineInView(ev.point, anchorRay.origin, anchorRay.direction, ev.viewport, true);\n if (undefined === projectedPt)\n return undefined;\n\n const offsetVec = Vector3d.createStartEnd(anchorRay.origin, projectedPt);\n let offset = offsetVec.normalizeWithLength(offsetVec).mag;\n if (offset < Geometry.smallMetricDistance)\n return undefined;\n if (offsetVec.dotProduct(anchorRay.direction) < 0.0)\n offset *= -1.0;\n\n this._currentDistance = offset;\n return offset;\n }\n\n protected drawAnchorOffset(context: DecorateContext, color: ColorDef, weight: number, transformFromClip?: Transform): void {\n if (-1 === this._anchorIndex || Math.abs(this._currentDistance) < Geometry.smallMetricDistance)\n return;\n\n const anchorRay = ViewClipTool.getClipRayTransformed(this._controls[this._anchorIndex].origin, this._controls[this._anchorIndex].direction, transformFromClip);\n anchorRay.direction.scaleToLength(this._currentDistance, anchorRay.direction);\n const pt1 = anchorRay.fractionToPoint(0.0);\n const pt2 = anchorRay.fractionToPoint(1.0);\n const builder = context.createGraphicBuilder(GraphicType.ViewOverlay);\n\n context.viewport.worldToView(pt1, pt1);\n pt1.z = 0.0;\n context.viewport.worldToView(pt2, pt2);\n pt2.z = 0.0;\n\n builder.setSymbology(color, ColorDef.black, weight, LinePixels.Code5);\n builder.addLineString([pt1, pt2]);\n builder.setSymbology(color, ColorDef.black, weight + 7);\n builder.addPointString([pt1, pt2]);\n\n context.addDecorationFromBuilder(builder);\n }\n\n public override decorate(context: DecorateContext): void {\n if (-1 === this._anchorIndex || context.viewport !== this._clipView)\n return;\n this.drawViewClip(context);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (!this.updateViewClip(ev, false))\n return;\n this._clipView.invalidateDecorations();\n }\n\n protected accept(ev: BeButtonEvent): boolean {\n if (!this.updateViewClip(ev, true))\n return false;\n this._restoreClip = false;\n return true;\n }\n\n public override async onCleanup() {\n if (this._restoreClip && ViewClipTool.hasClip(this._clipView))\n ViewClipTool.setViewClip(this._clipView, this._clip);\n\n this._clipView.clipStyle = this._clipStyle;\n }\n}\n\n/** @internal Interactive tool to modify a view's clip defined by a ClipShape */\nexport class ViewClipShapeModifyTool extends ViewClipModifyTool {\n protected updateViewClip(ev: BeButtonEvent, _isAccept: boolean): boolean {\n const clipShape = ViewClipTool.isSingleClipShape(this._clip);\n if (undefined === clipShape)\n return false;\n\n const offset = this.getOffsetValue(ev, clipShape.transformFromClip);\n if (undefined === offset)\n return false;\n\n const offsetAll = ev.isShiftKey;\n const localOffset = ViewClipTool.getOffsetValueTransformed(offset, clipShape.transformToClip);\n const shapePts = ViewClipTool.getClipShapePoints(clipShape, 0.0);\n const adjustedPts: Point3d[] = [];\n for (let i = 0; i < shapePts.length; i++) {\n const prevFace = (0 === i ? shapePts.length - 2 : i - 1);\n const nextFace = (shapePts.length - 1 === i ? 0 : i);\n const prevSelected = offsetAll || (prevFace === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[prevFace]));\n const nextSelected = offsetAll || (nextFace === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[nextFace]));\n if (prevSelected && nextSelected) {\n const prevPt = shapePts[i].plusScaled(this._controls[prevFace].direction, localOffset);\n const nextPt = shapePts[i].plusScaled(this._controls[nextFace].direction, localOffset);\n const prevRay = Ray3d.create(prevPt, Vector3d.createStartEnd(shapePts[i === 0 ? shapePts.length - 2 : i - 1], shapePts[i]));\n const nextPlane = Plane3dByOriginAndUnitNormal.create(nextPt, this._controls[nextFace].direction);\n if (undefined === nextPlane || undefined === prevRay.intersectionWithPlane(nextPlane, prevPt))\n return false;\n adjustedPts[i] = prevPt;\n } else if (prevSelected) {\n adjustedPts[i] = shapePts[i].plusScaled(this._controls[prevFace].direction, localOffset);\n } else if (nextSelected) {\n adjustedPts[i] = shapePts[i].plusScaled(this._controls[nextFace].direction, localOffset);\n } else {\n adjustedPts[i] = shapePts[i];\n }\n }\n\n let zLow = clipShape.zLow;\n let zHigh = clipShape.zHigh;\n const zLowIndex = this._controls.length - 2;\n const zHighIndex = this._controls.length - 1;\n const zLowSelected = offsetAll || (zLowIndex === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[zLowIndex]));\n const zHighSelected = offsetAll || (zHighIndex === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[zHighIndex]));\n\n if (zLowSelected || zHighSelected) {\n const clipExtents = ViewClipTool.getClipShapeExtents(clipShape, this._viewRange);\n if (zLowSelected)\n zLow = clipExtents.low - localOffset;\n if (zHighSelected)\n zHigh = clipExtents.high + localOffset;\n const realZLow = (undefined === zLow ? clipExtents.low : zLow);\n const realZHigh = (undefined === zHigh ? clipExtents.high : zHigh);\n if (realZLow > realZHigh) {\n zLow = realZHigh;\n zHigh = realZLow;\n }\n }\n\n return ViewClipTool.doClipToShape(this._clipView, adjustedPts, clipShape.transformFromClip, zLow, zHigh);\n }\n\n protected drawViewClip(context: DecorateContext): void {\n const clip = this._clipView.view.getViewClip();\n if (undefined === clip)\n return;\n const clipShape = ViewClipTool.isSingleClipShape(clip);\n if (undefined === clipShape)\n return;\n const clipExtents = ViewClipTool.getClipShapeExtents(clipShape, this._viewRange);\n const color = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport);\n ViewClipTool.drawClipShape(context, clipShape, clipExtents, color, 1);\n this.drawAnchorOffset(context, color, 1, clipShape.transformFromClip);\n }\n}\n\n/** @internal Interactive tool to modify a view's clip defined by a ConvexClipPlaneSet */\nexport class ViewClipPlanesModifyTool extends ViewClipModifyTool {\n protected updateViewClip(ev: BeButtonEvent, _isAccept: boolean): boolean {\n const offset = this.getOffsetValue(ev);\n if (undefined === offset)\n return false;\n\n const offsetAll = ev.isShiftKey;\n const planeSet = ConvexClipPlaneSet.createEmpty();\n for (let i: number = 0; i < this._controls.length; i++) {\n const selected = offsetAll || (i === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[i]));\n const origin = this._controls[i].origin.clone();\n const direction = this._controls[i].direction;\n if (selected)\n origin.plusScaled(direction, offset, origin);\n planeSet.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(direction.negate(), origin));\n }\n\n return ViewClipTool.doClipToConvexClipPlaneSet(this._clipView, planeSet);\n }\n\n protected drawViewClip(context: DecorateContext): void {\n const clip = this._clipView.view.getViewClip();\n if (undefined === clip)\n return;\n const clipPlanes = ViewClipTool.isSingleConvexClipPlaneSet(clip);\n if (undefined === clipPlanes)\n return;\n const clipPlanesLoops = ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(clipPlanes, this._viewRange, true, false, true);\n if (undefined === clipPlanesLoops)\n return;\n const color = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport);\n ViewClipTool.drawClipPlanesLoops(context, clipPlanesLoops, color, 1);\n this.drawAnchorOffset(context, color, 1);\n }\n}\n\n/** @internal Modify handle data to modify a view's clip */\nexport class ViewClipControlArrow {\n public origin: Point3d;\n public direction: Vector3d;\n public sizeInches: number;\n public fill?: ColorDef;\n public outline?: ColorDef;\n public name?: string;\n public floatingOrigin?: Point3d;\n\n public constructor(origin: Point3d, direction: Vector3d, sizeInches: number, fill?: ColorDef, outline?: ColorDef, name?: string) {\n this.origin = origin;\n this.direction = direction;\n this.sizeInches = sizeInches;\n this.fill = fill;\n this.outline = outline;\n this.name = name;\n }\n}\n\n/** A pickable decoration managed by ViewClipDecorationProvider used to visualize a view's clip and present modification handles.\n * This class is public to facilitate customization of view clip events by type or selected controls.\n * @see [[ViewClipDecorationProvider]]\n * @public\n * @extensions\n */\nexport class ViewClipDecoration extends EditManipulator.HandleProvider {\n private static _decorator?: ViewClipDecoration;\n /** @internal */\n protected _clip?: ClipVector;\n /** @internal */\n protected _clipId?: string;\n /** @internal */\n protected _clipShape?: ClipShape;\n /** @internal */\n protected _clipShapeExtents?: Range1d;\n /** @internal */\n protected _clipPlanes?: ConvexClipPlaneSet;\n /** @internal */\n protected _clipPlanesLoops?: GeometryQuery[];\n /** @internal */\n protected _clipPlanesLoopsNoncontributing?: GeometryQuery[];\n /** @internal */\n protected _controlIds: string[] = [];\n /** @internal */\n protected _controls: ViewClipControlArrow[] = [];\n /** @internal */\n protected _suspendDecorator = false;\n /** @internal */\n protected _removeViewCloseListener?: () => void;\n\n public constructor(protected _clipView: ScreenViewport, protected _clipEventHandler?: ViewClipEventHandler) {\n super(_clipView.iModel);\n if (!this.getClipData())\n return;\n this._clipId = this.iModel.transientIds.getNext();\n this.updateDecorationListener(true);\n this._removeViewCloseListener = IModelApp.viewManager.onViewClose.addListener(this.onViewClose, this); // eslint-disable-line @typescript-eslint/unbound-method\n if (undefined !== this._clipEventHandler && this._clipEventHandler.selectOnCreate())\n this.iModel.selectionSet.replace(this._clipId);\n }\n\n public get clipId(): string | undefined { return this._clipId; }\n public get clipShape(): ClipShape | undefined { return this._clipShape; }\n public get clipPlaneSet(): ConvexClipPlaneSet | undefined { return this._clipPlanes; }\n public getControlIndex(id: string): number { return this._controlIds.indexOf(id); }\n\n protected override stop(): void {\n const selectedId = (undefined !== this._clipId && this.iModel.selectionSet.elements.has(this._clipId)) ? this._clipId : undefined;\n this._clipId = undefined; // Invalidate id so that decorator will be dropped...\n super.stop();\n if (undefined !== selectedId)\n this.iModel.selectionSet.remove(selectedId); // Don't leave decorator id in selection set...\n if (undefined !== this._removeViewCloseListener) {\n this._removeViewCloseListener();\n this._removeViewCloseListener = undefined;\n }\n }\n\n public onViewClose(vp: ScreenViewport): void {\n if (this._clipView === vp)\n ViewClipDecoration.clear();\n }\n\n private getClipData(): boolean {\n this._clip = this._clipShape = this._clipShapeExtents = this._clipPlanes = this._clipPlanesLoops = this._clipPlanesLoopsNoncontributing = undefined;\n let clip = this._clipView.view.getViewClip();\n if (undefined === clip)\n return false;\n let clipShape = ViewClipTool.isSingleClipShape(clip);\n if (undefined !== clipShape) {\n if (clipShape.polygon.length > 5) {\n const compressed = PolylineOps.compressByChordError(clipShape.polygon, 1.0e-5);\n if (compressed.length < clipShape.polygon.length) {\n clip = clip.clone();\n clipShape = ViewClipTool.isSingleClipShape(clip)!;\n clipShape.setPolygon(compressed);\n this._clipView.view.setViewClip(clip);\n }\n }\n this._clipShapeExtents = ViewClipTool.getClipShapeExtents(clipShape, this._clipView.computeViewRange());\n this._clipShape = clipShape;\n } else {\n const clipPlanes = ViewClipTool.isSingleConvexClipPlaneSet(clip);\n if (undefined === clipPlanes || clipPlanes.planes.length > 12) {\n // Show visual representation for ClipVectors that are not supported for modification...\n const viewRange = this._clipView.computeViewRange();\n\n for (const primitive of clip.clips) {\n const union = primitive.fetchClipPlanesRef();\n if (undefined === union)\n continue;\n\n for (const convexSet of union.convexSets) {\n const convexSetLoops = ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(convexSet, viewRange, true, false, true);\n if (undefined === convexSetLoops)\n continue;\n\n if (undefined === this._clipPlanesLoops)\n this._clipPlanesLoops = convexSetLoops;\n else\n this._clipPlanesLoops.push(...convexSetLoops);\n }\n }\n\n if (undefined === this._clipPlanesLoops)\n return false;\n\n this._clip = clip;\n return true;\n }\n const clipPlanesLoops = ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(clipPlanes, this._clipView.computeViewRange(), true, false, true);\n if (undefined !== clipPlanesLoops && clipPlanesLoops.length > clipPlanes.planes.length)\n return false;\n this._clipPlanesLoops = clipPlanesLoops;\n this._clipPlanes = clipPlanes;\n }\n this._clip = clip;\n return true;\n }\n\n private ensureNumControls(numReqControls: number): void {\n const numCurrent = this._controlIds.length;\n if (numCurrent < numReqControls) {\n const transientIds = this.iModel.transientIds;\n for (let i: number = numCurrent; i < numReqControls; i++)\n this._controlIds[i] = transientIds.getNext();\n } else if (numCurrent > numReqControls) {\n this._controlIds.length = numReqControls;\n }\n }\n\n private createClipShapeControls(): boolean {\n if (undefined === this._clipShape || undefined === this._clipShapeExtents)\n return false;\n\n const shapePtsLo = ViewClipTool.getClipShapePoints(this._clipShape, this._clipShapeExtents.low);\n const shapePtsHi = ViewClipTool.getClipShapePoints(this._clipShape, this._clipShapeExtents.high);\n const shapeArea = PolygonOps.centroidAreaNormal(shapePtsLo);\n if (undefined === shapeArea)\n return false;\n\n const numControls = shapePtsLo.length + 1; // Number of edge midpoints plus zLow and zHigh...\n this.ensureNumControls(numControls);\n\n for (let i: number = 0; i < numControls - 2; i++) {\n const midPtLo = shapePtsLo[i].interpolate(0.5, shapePtsLo[i + 1]);\n const midPtHi = shapePtsHi[i].interpolate(0.5, shapePtsHi[i + 1]);\n const faceCenter = midPtLo.interpolate(0.5, midPtHi);\n const edgeTangent = Vector3d.createStartEnd(shapePtsLo[i], shapePtsLo[i + 1]);\n const faceNormal = edgeTangent.crossProduct(shapeArea.direction);\n faceNormal.normalizeInPlace();\n this._controls[i] = new ViewClipControlArrow(faceCenter, faceNormal, shapePtsLo.length > 5 ? 0.5 : 0.75);\n }\n\n const zFillColor = ColorDef.from(150, 150, 250);\n this._controls[numControls - 2] = new ViewClipControlArrow(shapeArea.origin, Vector3d.unitZ(-1.0), 0.75, zFillColor, undefined, \"zLow\");\n this._controls[numControls - 1] = new ViewClipControlArrow(shapeArea.origin.plusScaled(Vector3d.unitZ(), shapePtsLo[0].distance(shapePtsHi[0])), Vector3d.unitZ(), 0.75, zFillColor, undefined, \"zHigh\");\n\n return true;\n }\n\n private getLoopCentroidAreaNormal(geom: GeometryQuery): Ray3d | undefined {\n if (!(geom instanceof Loop) || geom.children.length > 1)\n return undefined;\n const child = geom.getChild(0);\n if (!(child instanceof LineString3d))\n return undefined;\n return PolygonOps.centroidAreaNormal(child.points);\n }\n\n private createClipPlanesControls(): boolean {\n if (undefined === this._clipPlanes)\n return false;\n\n const loopData: Ray3d[] = [];\n if (undefined !== this._clipPlanesLoops) {\n for (const geom of this._clipPlanesLoops) {\n const loopArea = this.getLoopCentroidAreaNormal(geom);\n if (undefined !== loopArea)\n loopData.push(loopArea);\n }\n }\n\n const numControls = this._clipPlanes.planes.length;\n this.ensureNumControls(numControls);\n\n let viewRange;\n let iLoop: number = 0;\n for (let i: number = 0; i < this._clipPlanes.planes.length; i++) {\n const plane = this._clipPlanes.planes[i].getPlane3d();\n if (iLoop < loopData.length) {\n if (Math.abs(loopData[iLoop].direction.dotProduct(plane.getNormalRef())) > 0.9999 && plane.isPointInPlane(loopData[iLoop].origin)) {\n const outwardNormal = loopData[iLoop].direction.negate();\n this._controls[i] = new ViewClipControlArrow(loopData[iLoop].origin, outwardNormal, 0.75);\n iLoop++;\n continue;\n }\n }\n\n if (undefined === viewRange)\n viewRange = this._clipView.computeViewRange();\n\n const defaultOrigin = plane.projectPointToPlane(viewRange.center);\n const defaultOutwardNormal = plane.getNormalRef().negate();\n const expandedRange = viewRange.clone();\n expandedRange.extend(defaultOrigin);\n const nonContribLoops = ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(ConvexClipPlaneSet.createPlanes([this._clipPlanes.planes[i]]), expandedRange, true, false, true);\n const nonContribColor = ColorDef.from(250, 100, 100);\n\n if (undefined !== nonContribLoops && nonContribLoops.length > 0) {\n if (undefined === this._clipPlanesLoopsNoncontributing)\n this._clipPlanesLoopsNoncontributing = nonContribLoops;\n else\n this._clipPlanesLoopsNoncontributing = this._clipPlanesLoopsNoncontributing.concat(nonContribLoops);\n const loopArea = this.getLoopCentroidAreaNormal(nonContribLoops[0]);\n if (undefined !== loopArea) {\n const outwardNormal = loopArea.direction.negate();\n this._controls[i] = new ViewClipControlArrow(loopArea.origin, outwardNormal, 0.5, nonContribColor);\n continue;\n }\n }\n\n this._controls[i] = new ViewClipControlArrow(defaultOrigin, defaultOutwardNormal, 0.5, nonContribColor); // Just show arrow for right-click menu options...\n }\n\n return true;\n }\n\n protected async createControls(): Promise<boolean> {\n // Always update to current view clip to handle post-modify, etc.\n if (undefined === this._clipId || !this.getClipData())\n return false;\n\n // Show controls if only range box and it's controls are selected, selection set doesn't include any other elements...\n let showControls = false;\n if (this.iModel.selectionSet.size <= this._controlIds.length + 1 && this.iModel.selectionSet.elements.has(this._clipId)) {\n showControls = true;\n if (this.iModel.selectionSet.size > 1) {\n this.iModel.selectionSet.elements.forEach((val) => {\n if (this._clipId !== val && !this._controlIds.includes(val))\n showControls = false;\n });\n }\n }\n\n if (!showControls) {\n if (undefined !== this._clipEventHandler && this._clipEventHandler.clearOnDeselect())\n ViewClipDecoration.clear();\n return false;\n }\n\n if (undefined !== this._clipShape)\n return this.createClipShapeControls();\n else if (undefined !== this._clipPlanes)\n return this.createClipPlanesControls();\n\n return false;\n }\n\n protected override clearControls(): void {\n this.iModel.selectionSet.remove(this._controlIds); // Remove any selected controls as they won't continue to be displayed...\n super.clearControls();\n }\n\n protected async modifyControls(hit: HitDetail, _ev: BeButtonEvent): Promise<boolean> {\n if (undefined === this._clip || hit.sourceId === this._clipId)\n return false;\n const saveQualifiers = IModelApp.toolAdmin.currentInputState.qualifiers;\n if (undefined !== this._clipShape) {\n const clipShapeModifyTool = new ViewClipShapeModifyTool(this, this._clip, this._clipView, hit.sourceId, this._controlIds, this._controls);\n this._suspendDecorator = await clipShapeModifyTool.run();\n } else if (undefined !== this._clipPlanes) {\n const clipPlanesModifyTool = new ViewClipPlanesModifyTool(this, this._clip, this._clipView, hit.sourceId, this._controlIds, this._controls);\n this._suspendDecorator = await clipPlanesModifyTool.run();\n }\n if (this._suspendDecorator)\n IModelApp.toolAdmin.currentInputState.qualifiers = saveQualifiers; // onInstallTool cleared qualifiers, preserve for \"modify all\" behavior when shift was held and drag started...\n return this._suspendDecorator;\n }\n\n public doClipPlaneNegate(index: number): boolean {\n if (undefined === this._clipPlanes)\n return false;\n\n if (index < 0 || index >= this._clipPlanes.planes.length)\n return false;\n\n const planeSet = ConvexClipPlaneSet.createEmpty();\n for (let i: number = 0; i < this._clipPlanes.planes.length; i++) {\n const plane = (i === index ? this._clipPlanes.planes[i].cloneNegated() : this._clipPlanes.planes[i]);\n planeSet.addPlaneToConvexSet(plane);\n }\n\n if (!ViewClipTool.doClipToConvexClipPlaneSet(this._clipView, planeSet))\n return false;\n\n this.onManipulatorEvent(EditManipulator.EventType.Accept);\n return true;\n }\n\n public doClipPlaneClear(index: number): boolean {\n if (undefined === this._clipPlanes)\n return false;\n\n if (index < 0 || index >= this._clipPlanes.planes.length)\n return false;\n\n if (1 === this._clipPlanes.planes.length) {\n if (!ViewClipTool.doClipClear(this._clipView))\n return false;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onClearClip(this._clipView);\n ViewClipDecoration.clear();\n return true;\n }\n\n const planeSet = ConvexClipPlaneSet.createEmpty();\n for (let i: number = 0; i < this._clipPlanes.planes.length; i++) {\n if (i === index)\n continue;\n const plane = this._clipPlanes.planes[i];\n planeSet.addPlaneToConvexSet(plane);\n }\n\n if (!ViewClipTool.doClipToConvexClipPlaneSet(this._clipView, planeSet))\n return false;\n\n this.onManipulatorEvent(EditManipulator.EventType.Accept);\n return true;\n }\n\n private getClipShapeFaceLoops(): GeometryQuery[] | undefined {\n if (undefined === this._clipShape || undefined === this._clipShapeExtents)\n return undefined;\n\n const shapePtsLo = ViewClipTool.getClipShapePoints(this._clipShape, this._clipShapeExtents.low);\n const shapePtsHi = ViewClipTool.getClipShapePoints(this._clipShape, this._clipShapeExtents.high);\n\n if (undefined !== this._clipShape.transformFromClip) {\n this._clipShape.transformFromClip.multiplyPoint3dArrayInPlace(shapePtsLo);\n this._clipShape.transformFromClip.multiplyPoint3dArrayInPlace(shapePtsHi);\n }\n\n const cap0 = Loop.createPolygon(shapePtsLo);\n const cap1 = Loop.createPolygon(shapePtsHi);\n const faces: GeometryQuery[] = [];\n\n faces.push(cap0);\n faces.push(cap1);\n\n for (let i: number = 0; i < shapePtsLo.length; i++) {\n const next = (i === shapePtsLo.length - 1 ? 0 : i + 1);\n const side = Loop.createPolygon([shapePtsLo[i].clone(), shapePtsLo[next].clone(), shapePtsHi[next].clone(), shapePtsHi[i].clone()]);\n faces.push(side);\n }\n\n return faces;\n }\n\n private getMatchingLoop(loops: GeometryQuery[], ray: Ray3d): GeometryQuery | undefined {\n for (const geom of loops) {\n const loopArea = this.getLoopCentroidAreaNormal(geom);\n if (undefined === loopArea)\n continue;\n\n if (!loopArea.direction.isParallelTo(ray.direction, true)) // don't assume outward normal for clip plane loops...\n continue;\n\n const plane = Plane3dByOriginAndUnitNormal.create(loopArea.origin, loopArea.direction);\n if (undefined === plane || !plane.isPointInPlane(ray.origin))\n continue;\n\n return geom;\n }\n return undefined;\n }\n\n private getLoopPreferredX(loop: GeometryQuery, outwardNormal: Vector3d): Vector3d | undefined {\n const localToWorld = FrameBuilder.createRightHandedFrame(undefined, loop);\n if (undefined === localToWorld)\n return undefined;\n\n let vectorX;\n const dirX = localToWorld.matrix.getColumn(0);\n const dirY = localToWorld.matrix.getColumn(1);\n const dirZ = localToWorld.matrix.getColumn(2);\n const unitX = Vector3d.unitX();\n const unitZ = Vector3d.unitZ();\n\n if (dirZ.isParallelTo(unitZ, true)) {\n // For clip in xy plane, choose direction closest to world x...\n vectorX = Math.abs(dirX.dotProduct(unitX)) > Math.abs(dirY.dotProduct(unitX)) ? dirX : dirY;\n\n if (vectorX.dotProduct(unitX) < 0.0)\n vectorX.negate(vectorX); // prefer positive x...\n } else {\n // For clip in arbitrary plane, choose direction closest to being in xy plane...\n let vectorY;\n const crossX = outwardNormal.unitCrossProduct(dirY);\n const crossY = outwardNormal.unitCrossProduct(dirX);\n\n if (crossX && crossY) {\n if (Math.abs(crossY.dotProduct(unitZ)) > Math.abs(crossX.dotProduct(unitZ))) {\n vectorX = dirX;\n vectorY = crossY;\n } else {\n vectorX = dirY;\n vectorY = crossX;\n }\n } else {\n vectorX = crossX ? dirY : dirX;\n }\n\n if (vectorY && vectorY.dotProduct(unitZ) < 0.0)\n vectorX.negate(vectorX); // prefer positive z...\n }\n\n return vectorX;\n }\n\n public doClipPlaneOrientView(index: number): boolean {\n if (index < 0 || index >= this._controlIds.length)\n return false;\n\n const vp = this._clipView;\n const anchorRay = ViewClipTool.getClipRayTransformed(this._controls[index].origin, this._controls[index].direction, undefined !== this._clipShape ? this._clipShape.transformFromClip : undefined);\n\n // Try to align x direction with clip plane loop...\n const loops = (undefined !== this._clipPlanesLoops ? this._clipPlanesLoops : this.getClipShapeFaceLoops());\n const loop = (loops ? (1 === loops.length ? loops[0] : this.getMatchingLoop(loops, anchorRay)) : undefined);\n const vectorX = (loop ? this.getLoopPreferredX(loop, anchorRay.direction) : undefined);\n\n const matrix = Matrix3d.createIdentity();\n if (undefined === vectorX || undefined === Matrix3d.createRigidFromColumns(anchorRay.direction, vectorX, AxisOrder.ZXY, matrix))\n Matrix3d.createRigidHeadsUp(anchorRay.direction, AxisOrder.ZXY, matrix);\n\n const targetMatrix = matrix.multiplyMatrixMatrix(vp.rotation);\n const rotateTransform = Transform.createFixedPointAndMatrix(anchorRay.origin, targetMatrix);\n const newFrustum = vp.getFrustum();\n newFrustum.multiply(rotateTransform);\n vp.view.setupFromFrustum(newFrustum);\n vp.synchWithView();\n vp.animateFrustumChange();\n return true;\n }\n\n private getWorldUpPlane(viewport: Viewport): Plane3dByOriginAndUnitNormal | undefined {\n const matrix = AccuDrawHintBuilder.getContextRotation(ContextRotationId.Top, viewport);\n if (undefined === matrix)\n return undefined;\n const worldUp = matrix.getColumn(2);\n const planePt = (viewport.isContextRotationRequired ? viewport.getAuxCoordOrigin() : (viewport.view.isSpatialView() ? viewport.view.iModel.globalOrigin : Point3d.createZero()));\n return Plane3dByOriginAndUnitNormal.create(planePt, worldUp);\n }\n\n private isAlignedToWorldUpPlane(plane: Plane3dByOriginAndUnitNormal, transformFromClip?: Transform): boolean {\n const normal = (undefined !== transformFromClip ? transformFromClip.multiplyVector(Vector3d.unitZ()) : Vector3d.unitZ());\n return plane.getNormalRef().isParallelTo(normal, true);\n }\n\n public isClipShapeAlignedWithWorldUp(extents?: Range1d): boolean {\n if (undefined === this._clipShape || undefined === this._clipShapeExtents)\n return false;\n\n const plane = this.getWorldUpPlane(this._clipView);\n if (undefined === plane || !this.isAlignedToWorldUpPlane(plane, this._clipShape.transformFromClip))\n return false;\n\n if (undefined === extents)\n return true;\n\n const zLow = Point3d.create(0.0, 0.0, this._clipShapeExtents.low);\n const zHigh = Point3d.create(0.0, 0.0, this._clipShapeExtents.high);\n\n if (undefined !== this._clipShape.transformFromClip) {\n this._clipShape.transformFromClip.multiplyPoint3d(zLow, zLow);\n this._clipShape.transformFromClip.multiplyPoint3d(zHigh, zHigh);\n }\n\n const lowDir = Vector3d.createStartEnd(plane.projectPointToPlane(zLow), zLow);\n const highDir = Vector3d.createStartEnd(plane.projectPointToPlane(zHigh), zHigh);\n let zLowWorld = lowDir.magnitude();\n let zHighWorld = highDir.magnitude();\n\n if (lowDir.dotProduct(plane.getNormalRef()) < 0.0)\n zLowWorld = -zLowWorld;\n if (highDir.dotProduct(plane.getNormalRef()) < 0.0)\n zHighWorld = -zHighWorld;\n\n Range1d.createXX(zLowWorld, zHighWorld, extents);\n return true;\n }\n\n public doClipShapeSetZExtents(extents: Range1d): boolean {\n if (extents.low > extents.high)\n return false;\n if (undefined === this._clipShape)\n return false;\n const plane = this.getWorldUpPlane(this._clipView);\n if (undefined === plane || !this.isAlignedToWorldUpPlane(plane, this._clipShape.transformFromClip))\n return false;\n\n const zLow = plane.getOriginRef().plusScaled(plane.getNormalRef(), extents.low);\n const zHigh = plane.getOriginRef().plusScaled(plane.getNormalRef(), extents.high);\n\n if (undefined !== this._clipShape.transformToClip) {\n this._clipShape.transformToClip.multiplyPoint3d(zLow, zLow);\n this._clipShape.transformToClip.multiplyPoint3d(zHigh, zHigh);\n }\n\n const reversed = (zLow.z > zHigh.z);\n const shape = ClipShape.createFrom(this._clipShape);\n shape.initSecondaryProps(shape.isMask, reversed ? zHigh.z : zLow.z, reversed ? zLow.z : zHigh.z, this._clipShape.transformFromClip);\n\n const clip = ClipVector.createEmpty();\n clip.appendReference(shape);\n\n if (!ViewClipTool.setViewClip(this._clipView, clip))\n return false;\n\n this.onManipulatorEvent(EditManipulator.EventType.Accept);\n return true;\n }\n\n protected override async onRightClick(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this._clipEventHandler)\n return EventHandled.No;\n return (this._clipEventHandler.onRightClick(hit, ev) ? EventHandled.Yes : EventHandled.No);\n }\n\n protected override async onTouchTap(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled> { return (hit.sourceId === this._clipId ? EventHandled.No : super.onTouchTap(hit, ev)); }\n\n public override onManipulatorEvent(eventType: EditManipulator.EventType): void {\n this._suspendDecorator = false;\n super.onManipulatorEvent(eventType);\n if (EditManipulator.EventType.Accept === eventType && undefined !== this._clipEventHandler)\n this._clipEventHandler.onModifyClip(this._clipView);\n }\n\n public testDecorationHit(id: string): boolean { return (id === this._clipId || this._controlIds.includes(id)); }\n public async getDecorationToolTip(hit: HitDetail): Promise<HTMLElement | string> {\n if (hit.sourceId === this._clipId)\n return CoreTools.translate(\"ViewClip.Message.Clip\");\n return CoreTools.translate(\"ViewClip.Message.ModifyClip\");\n }\n protected override updateDecorationListener(_add: boolean): void { super.updateDecorationListener(undefined !== this._clipId); } // Decorator isn't just for resize controls...\n\n public override decorate(context: DecorateContext): void {\n if (this._suspendDecorator)\n return;\n\n if (undefined === this._clipId || undefined === this._clip)\n return;\n\n const vp = context.viewport;\n if (this._clipView !== vp)\n return;\n\n if (undefined !== this._clipShape) {\n ViewClipTool.drawClipShape(context, this._clipShape, this._clipShapeExtents!, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, vp), 3, this._clipId);\n } else if (undefined !== this._clipPlanes) {\n if (undefined !== this._clipPlanesLoops)\n ViewClipTool.drawClipPlanesLoops(context, this._clipPlanesLoops, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, vp), 3, false, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(0, 255, 255, 225), vp), this._clipId);\n if (undefined !== this._clipPlanesLoopsNoncontributing)\n ViewClipTool.drawClipPlanesLoops(context, this._clipPlanesLoopsNoncontributing, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.red, vp), 1, true);\n } else if (undefined !== this._clipPlanesLoops) {\n ViewClipTool.drawClipPlanesLoops(context, this._clipPlanesLoops, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, vp), 3, false, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(0, 255, 255, 225), vp), this._clipId);\n }\n\n if (!this._isActive)\n return;\n\n const outlineColor = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(0, 0, 0, 50), vp);\n const fillVisColor = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(150, 250, 200, 175), vp);\n const fillHidColor = fillVisColor.withAlpha(225);\n const fillSelColor = fillVisColor.inverse().withAlpha(75);\n const shapePts = EditManipulator.HandleUtils.getArrowShape(0.0, 0.15, 0.55, 1.0, 0.3, 0.5, 0.1);\n\n for (let iFace = 0; iFace < this._controlIds.length; iFace++) {\n const sizeInches = this._controls[iFace].sizeInches;\n if (0.0 === sizeInches)\n continue;\n\n // For single plane clip, choose location for handle that's visible in the current view...\n if (1 === this._controls.length && undefined !== this._clipPlanes && undefined !== this._clipPlanesLoops && this._clipPlanesLoops.length > 0) {\n if (!vp.isPointVisibleXY(this._controls[iFace].origin, CoordSystem.World, 0.05)) {\n const geom = this._clipPlanesLoops[0];\n if (geom instanceof Loop && geom.children.length > 0) {\n const child = geom.getChild(0);\n if (child instanceof LineString3d) {\n const work = new GrowableXYZArray();\n const finalPoints = new GrowableXYZArray();\n const lineString = child.points;\n const convexSet = vp.getFrustum().getRangePlanes(false, false, 0);\n convexSet.polygonClip(lineString, finalPoints, work);\n if (finalPoints.length > 0) {\n const loopArea = PolygonOps.centroidAreaNormal(finalPoints.getPoint3dArray());\n if (undefined !== loopArea) {\n if (undefined === this._controls[iFace].floatingOrigin)\n this._controls[iFace].floatingOrigin = this._controls[iFace].origin.clone();\n this._controls[iFace].origin.setFrom(loopArea.origin);\n }\n }\n }\n }\n } else if (undefined !== this._controls[iFace].floatingOrigin && vp.isPointVisibleXY(this._controls[iFace].floatingOrigin!, CoordSystem.World, 0.1)) {\n this._controls[iFace].origin.setFrom(this._controls[iFace].floatingOrigin);\n this._controls[iFace].floatingOrigin = undefined;\n }\n }\n\n const anchorRay = ViewClipTool.getClipRayTransformed(this._controls[iFace].origin, this._controls[iFace].direction, undefined !== this._clipShape ? this._clipShape.transformFromClip : undefined);\n const transform = EditManipulator.HandleUtils.getArrowTransform(vp, anchorRay.origin, anchorRay.direction, sizeInches);\n if (undefined === transform)\n continue;\n\n // deep copy because we're using a builder transform w/addLineString...\n const visPts = shapePts.map((pt) => pt.clone());\n const hidPts = shapePts.map((pt) => pt.clone());\n\n const arrowVisBuilder = context.createGraphicBuilder(GraphicType.WorldOverlay, transform, this._controlIds[iFace]);\n const arrowHidBuilder = context.createGraphicBuilder(GraphicType.WorldDecoration, transform);\n const isSelected = this.iModel.selectionSet.elements.has(this._controlIds[iFace]);\n\n let outlineColorOvr = this._controls[iFace].outline;\n if (undefined !== outlineColorOvr) {\n outlineColorOvr = EditManipulator.HandleUtils.adjustForBackgroundColor(outlineColorOvr, vp);\n outlineColorOvr = outlineColorOvr.withAlpha(outlineColor.getAlpha());\n } else {\n outlineColorOvr = outlineColor;\n }\n\n let fillVisColorOvr = this._controls[iFace].fill;\n let fillHidColorOvr = fillHidColor;\n let fillSelColorOvr = fillSelColor;\n if (undefined !== fillVisColorOvr) {\n fillVisColorOvr = EditManipulator.HandleUtils.adjustForBackgroundColor(fillVisColorOvr, vp);\n fillVisColorOvr = fillVisColorOvr.withAlpha(fillVisColor.getAlpha());\n fillHidColorOvr = fillVisColorOvr.withAlpha(fillHidColor.getAlpha());\n fillSelColorOvr = fillVisColorOvr.inverse().withAlpha(fillSelColor.getAlpha());\n } else {\n fillVisColorOvr = fillVisColor;\n }\n\n arrowVisBuilder.setSymbology(outlineColorOvr, outlineColorOvr, isSelected ? 4 : 2);\n arrowVisBuilder.addLineString(visPts);\n arrowVisBuilder.setBlankingFill(isSelected ? fillSelColorOvr : fillVisColorOvr);\n arrowVisBuilder.addShape(visPts);\n context.addDecorationFromBuilder(arrowVisBuilder);\n\n arrowHidBuilder.setSymbology(fillHidColorOvr, fillHidColorOvr, 1);\n arrowHidBuilder.addShape(hidPts);\n context.addDecorationFromBuilder(arrowHidBuilder);\n }\n }\n\n public static get(vp: ScreenViewport): ViewClipDecoration | undefined {\n if (undefined === ViewClipDecoration._decorator || vp !== ViewClipDecoration._decorator._clipView)\n return undefined;\n return ViewClipDecoration._decorator;\n }\n\n public static create(vp: ScreenViewport, clipEventHandler?: ViewClipEventHandler): string | undefined {\n if (undefined !== ViewClipDecoration._decorator)\n ViewClipDecoration.clear();\n if (!ViewClipTool.hasClip(vp))\n return undefined;\n ViewClipDecoration._decorator = new ViewClipDecoration(vp, clipEventHandler);\n return ViewClipDecoration._decorator.clipId;\n }\n\n public static clear(): void {\n if (undefined === ViewClipDecoration._decorator)\n return;\n ViewClipDecoration._decorator.stop();\n ViewClipDecoration._decorator = undefined;\n }\n\n public static async toggle(vp: ScreenViewport, clipEventHandler?: ViewClipEventHandler): Promise<string | undefined> {\n let clipId: string | undefined;\n if (undefined === ViewClipDecoration._decorator)\n clipId = ViewClipDecoration.create(vp, clipEventHandler);\n else\n ViewClipDecoration.clear();\n await IModelApp.toolAdmin.startDefaultTool();\n return clipId;\n }\n}\n\n/** Event types for ViewClipDecorationProvider.onActiveClipChanged \\\n * @public\n * @extensions\n */\nexport enum ClipEventType { New, NewPlane, Modify, Clear }\n\n/** An implementation of ViewClipEventHandler that responds to new clips by presenting clip modification handles\n * @public @extensions\n */\nexport class ViewClipDecorationProvider implements ViewClipEventHandler {\n private static _provider?: ViewClipDecorationProvider;\n public selectDecorationOnCreate = true;\n public clearDecorationOnDeselect = true;\n\n /** Called when the active clip for a view is changed */\n public readonly onActiveClipChanged = new BeEvent<(viewport: Viewport, eventType: ClipEventType, provider: ViewClipDecorationProvider) => void>();\n\n /** Called on a right click over the clip geometry or clip modify handle. ViewClipDecoration provides methods for the following possible menu actions:\n * For ClipPlanes (undefined !== clipPlaneSet): Flip (doClipPlaneNegate), Clear (doClipPlaneClear), and Orient View (doClipPlaneOrientView)\n * For ClipShapes (undefined === clipPlaneSet): Orient View (doClipPlaneOrientView) and input fields to set world zLow/zHigh (doClipShapeSetZExtents provided isClipShapeAlignedWithWorldUp returns true)\n */\n public readonly onActiveClipRightClick = new BeEvent<(hit: HitDetail, ev: BeButtonEvent, provider: ViewClipDecorationProvider) => void>();\n\n public selectOnCreate(): boolean { return this.selectDecorationOnCreate; }\n public clearOnDeselect(): boolean { return this.clearDecorationOnDeselect; }\n\n public onNewClip(viewport: ScreenViewport): void {\n ViewClipDecoration.create(viewport, this);\n this.onActiveClipChanged.raiseEvent(viewport, ClipEventType.New, this);\n }\n\n public onNewClipPlane(viewport: ScreenViewport): void {\n ViewClipDecoration.create(viewport, this);\n this.onActiveClipChanged.raiseEvent(viewport, ClipEventType.NewPlane, this);\n }\n\n public onModifyClip(viewport: ScreenViewport): void {\n this.onActiveClipChanged.raiseEvent(viewport, ClipEventType.Modify, this);\n }\n\n public onClearClip(viewport: ScreenViewport): void {\n ViewClipDecoration.clear();\n this.onActiveClipChanged.raiseEvent(viewport, ClipEventType.Clear, this);\n }\n\n public onRightClick(hit: HitDetail, ev: BeButtonEvent): boolean {\n const decoration = (undefined !== ev.viewport ? ViewClipDecoration.get(ev.viewport) : undefined);\n if (undefined === decoration)\n return false;\n if (0 === this.onActiveClipRightClick.numberOfListeners)\n return decoration.doClipPlaneNegate(decoration.getControlIndex(hit.sourceId));\n this.onActiveClipRightClick.raiseEvent(hit, ev, this);\n return true;\n }\n\n public showDecoration(vp: ScreenViewport): void { ViewClipDecoration.create(vp, this); }\n public hideDecoration(): void { ViewClipDecoration.clear(); }\n public async toggleDecoration(vp: ScreenViewport) { return ViewClipDecoration.toggle(vp, this); }\n public isDecorationActive(vp: ScreenViewport): boolean { return (undefined !== ViewClipDecoration.get(vp)); }\n\n public static create(): ViewClipDecorationProvider {\n if (undefined === ViewClipDecorationProvider._provider) {\n ViewClipDecoration.clear();\n ViewClipDecorationProvider._provider = new ViewClipDecorationProvider();\n }\n return ViewClipDecorationProvider._provider;\n }\n\n public static clear(): void {\n if (undefined === ViewClipDecorationProvider._provider)\n return;\n ViewClipDecoration.clear();\n ViewClipDecorationProvider._provider = undefined;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ClipViewTool.js","sourceRoot":"","sources":["../../../src/tools/ClipViewTool.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 Tools\n */\n\nimport { BeEvent, Id64, Id64Arg, Id64String } from \"@itwin/core-bentley\";\nimport {\n AxisOrder, ClipMaskXYZRangePlanes, ClipPlane, ClipPrimitive, ClipShape, ClipUtilities, ClipVector, ConvexClipPlaneSet, FrameBuilder, Geometry, GeometryQuery,\n GrowableXYZArray, LineString3d, Loop, Matrix3d, Path, Plane3dByOriginAndUnitNormal, Point3d, PolygonOps, PolylineOps, Range1d, Range3d, Ray3d,\n Transform, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { ClipStyle, ColorDef, LinePixels, Placement2d } from \"@itwin/core-common\";\nimport { DialogItem, DialogItemValue, DialogPropertySyncItem, PropertyDescription } from \"@itwin/appui-abstract\";\nimport { AccuDrawHintBuilder, ContextRotationId } from \"../AccuDraw\";\nimport { CoordSystem } from \"../CoordSystem\";\nimport { LocateResponse } from \"../ElementLocateManager\";\nimport { HitDetail } from \"../HitDetail\";\nimport { IModelApp } from \"../IModelApp\";\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\nimport { DecorateContext } from \"../ViewContext\";\nimport { ScreenViewport, Viewport } from \"../Viewport\";\nimport { EditManipulator } from \"./EditManipulator\";\nimport { PrimitiveTool } from \"./PrimitiveTool\";\nimport { BeButtonEvent, CoordinateLockOverrides, CoreTools, EventHandled } from \"./Tool\";\nimport { ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection } from \"./ToolAssistance\";\nimport { GraphicType } from \"../common/render/GraphicType\";\n\n// cSpell:ignore geti\n\n/** An object that can react to a view's clip being changed by tools or modify handles.\n * @public\n * @extensions\n */\nexport interface ViewClipEventHandler {\n /** Add newly created clip geometry to selection set and show modify controls. */\n selectOnCreate(): boolean;\n /** Stop displaying clip geometry when clip is removed from the selection set. */\n clearOnDeselect(): boolean;\n /** Called by tools that set or replace the existing view clip with a new clip. */\n onNewClip(viewport: Viewport): void;\n /** Called by tools that add a single plane to the view clip. When there is more than one plane, the new plane is always last. */\n onNewClipPlane(viewport: Viewport): void;\n /** Called by tools after modifying the view clip. */\n onModifyClip(viewport: Viewport): void;\n /** Called when the view clip is cleared from the view. */\n onClearClip(viewport: Viewport): void;\n /** Called when user right clicks on clip geometry or clip modify handle. Return true if event handled. */\n onRightClick(hit: HitDetail, ev: BeButtonEvent): boolean;\n}\n\n/** @internal Options to control display for ViewClipTool.drawClip */\nexport interface DrawClipOptions {\n /** Color to use for clip edges, uses white adjusted for background color if not specified. */\n color?: ColorDef;\n /** Color to use for clip plane fill, uses transparent cyan adjusted for background color if not specified. */\n fill?: ColorDef;\n /** Width for visible clip edges, uses 3 if not specified. */\n visibleWidth?: number;\n /** Width for hidden clip edges, uses 1 if not specified. */\n hiddenWidth?: number;\n /** Style for hidden clip edges, uses LinePixels.Code2 if not specified. */\n hiddenStyle?: LinePixels;\n /** Whether to draw filled clip planes. */\n fillClipPlanes?: boolean;\n /** Whether clip represents a single section plane with additional planes for xy and back clipping. Fill will only apply to the primary plane. */\n hasPrimaryPlane?: boolean;\n /** Unique id to allow clip edges to be pickable. */\n id?: string;\n}\n\n/** A tool to define a clip volume for a view\n * @public @extensions\n */\nexport class ViewClipTool extends PrimitiveTool {\n constructor(protected _clipEventHandler?: ViewClipEventHandler) { super(); }\n\n /** @internal */\n protected static _orientationName = \"enumAsOrientation\";\n /** @internal */\n protected static enumAsOrientationMessage(str: string) { return CoreTools.translate(`Settings.Orientation.${str}`); }\n /** @internal */\n protected static _getEnumAsOrientationDescription = (): PropertyDescription => {\n return {\n name: ViewClipTool._orientationName,\n displayLabel: CoreTools.translate(\"Settings.Orientation.Label\"),\n typename: \"enum\",\n enum: {\n choices: [\n { label: ViewClipTool.enumAsOrientationMessage(\"Top\"), value: ContextRotationId.Top },\n { label: ViewClipTool.enumAsOrientationMessage(\"Front\"), value: ContextRotationId.Front },\n { label: ViewClipTool.enumAsOrientationMessage(\"Left\"), value: ContextRotationId.Left },\n { label: ViewClipTool.enumAsOrientationMessage(\"Bottom\"), value: ContextRotationId.Bottom },\n { label: ViewClipTool.enumAsOrientationMessage(\"Back\"), value: ContextRotationId.Back },\n { label: ViewClipTool.enumAsOrientationMessage(\"Right\"), value: ContextRotationId.Right },\n { label: ViewClipTool.enumAsOrientationMessage(\"View\"), value: ContextRotationId.View },\n { label: ViewClipTool.enumAsOrientationMessage(\"Face\"), value: ContextRotationId.Face },\n ],\n },\n };\n };\n\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.allow3dManipulations()); }\n\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n /** @internal */\n public async onRestartTool(): Promise<void> { return this.exitTool(); }\n /** @internal */\n protected showPrompt(): void { }\n /** @internal */\n protected setupAndPromptForNextAction(): void { this.showPrompt(); }\n /** @internal */\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** @internal */\n public static getPlaneInwardNormal(orientation: ContextRotationId, viewport: Viewport): Vector3d | undefined {\n const matrix = AccuDrawHintBuilder.getContextRotation(orientation, viewport);\n if (undefined === matrix)\n return undefined;\n return matrix.getColumn(2).negate();\n }\n\n public static enableClipVolume(viewport: Viewport): boolean {\n if (viewport.viewFlags.clipVolume)\n return false;\n\n viewport.viewFlags = viewport.viewFlags.with(\"clipVolume\", true);\n return true;\n }\n\n public static setViewClip(viewport: Viewport, clip?: ClipVector): boolean {\n viewport.view.setViewClip(clip);\n viewport.setupFromView();\n return true;\n }\n\n public static doClipToConvexClipPlaneSet(viewport: Viewport, planes: ConvexClipPlaneSet): boolean {\n const prim = ClipPrimitive.createCapture(planes);\n const clip = ClipVector.createEmpty();\n clip.appendReference(prim);\n return this.setViewClip(viewport, clip);\n }\n\n public static doClipToPlane(viewport: Viewport, origin: Point3d, normal: Vector3d, clearExistingPlanes: boolean): boolean {\n const plane = Plane3dByOriginAndUnitNormal.create(origin, normal);\n if (undefined === plane)\n return false;\n let planeSet: ConvexClipPlaneSet | undefined;\n if (!clearExistingPlanes) {\n const existingClip = viewport.view.getViewClip();\n if (undefined !== existingClip && 1 === existingClip.clips.length) {\n const existingPrim = existingClip.clips[0];\n if (!(existingPrim instanceof ClipShape)) {\n const existingPlaneSets = existingPrim.fetchClipPlanesRef();\n if (undefined !== existingPlaneSets && 1 === existingPlaneSets.convexSets.length)\n planeSet = existingPlaneSets.convexSets[0];\n }\n }\n }\n if (undefined === planeSet)\n planeSet = ConvexClipPlaneSet.createEmpty();\n planeSet.addPlaneToConvexSet(ClipPlane.createPlane(plane));\n return this.doClipToConvexClipPlaneSet(viewport, planeSet);\n }\n\n public static doClipToShape(viewport: Viewport, xyPoints: Point3d[], transform?: Transform, zLow?: number, zHigh?: number): boolean {\n const clip = ClipVector.createEmpty();\n clip.appendShape(xyPoints, zLow, zHigh, transform);\n return this.setViewClip(viewport, clip);\n }\n\n public static doClipToRange(viewport: Viewport, range: Range3d, transform?: Transform): boolean {\n if (range.isNull || range.isAlmostZeroX || range.isAlmostZeroY)\n return false;\n const clip = ClipVector.createEmpty();\n const block = ClipShape.createBlock(range, range.isAlmostZeroZ ? ClipMaskXYZRangePlanes.XAndY : ClipMaskXYZRangePlanes.All, false, false, transform);\n clip.appendReference(block);\n return this.setViewClip(viewport, clip);\n }\n\n public static doClipClear(viewport: Viewport): boolean {\n if (!ViewClipTool.hasClip(viewport))\n return false;\n return this.setViewClip(viewport);\n }\n\n /** @internal */\n public static getClipRayTransformed(origin: Point3d, direction: Vector3d, transform?: Transform): Ray3d {\n const facePt = origin.clone();\n const faceDir = direction.clone();\n\n if (undefined !== transform) {\n transform.multiplyPoint3d(facePt, facePt);\n transform.multiplyVector(faceDir, faceDir);\n faceDir.normalizeInPlace();\n }\n\n return Ray3d.createCapture(facePt, faceDir);\n }\n\n /** @internal */\n public static getOffsetValueTransformed(offset: number, transform?: Transform) {\n if (undefined === transform)\n return offset;\n const lengthVec = Vector3d.create(offset);\n transform.multiplyVector(lengthVec, lengthVec);\n const localOffset = lengthVec.magnitude();\n return (offset < 0 ? -localOffset : localOffset);\n }\n\n /** @internal */\n public static addClipPlanesLoops(builder: GraphicBuilder, loops: GeometryQuery[], outline: boolean): void {\n for (const geom of loops) {\n if (!(geom instanceof Loop))\n continue;\n if (outline)\n builder.addPath(Path.createArray(geom.children));\n else\n builder.addLoop(geom);\n }\n }\n\n /** @internal */\n private static addClipShape(builder: GraphicBuilder, shape: ClipShape, extents: Range1d): void {\n const shapePtsLo = ViewClipTool.getClipShapePoints(shape, extents.low);\n const shapePtsHi = ViewClipTool.getClipShapePoints(shape, extents.high);\n for (let i: number = 0; i < shapePtsLo.length; i++)\n builder.addLineString([shapePtsLo[i].clone(), shapePtsHi[i].clone()]);\n builder.addLineString(shapePtsLo);\n builder.addLineString(shapePtsHi);\n }\n\n /** @internal */\n public static drawClip(context: DecorateContext, clip: ClipVector, viewExtents?: Range3d, options?: DrawClipOptions): void {\n const clipShape = ViewClipTool.isSingleClipShape(clip);\n const clipPlanes = (undefined === clipShape ? ViewClipTool.isSingleConvexClipPlaneSet(clip) : undefined);\n if (undefined === clipShape && undefined === clipPlanes)\n return;\n\n const viewRange = (viewExtents ? viewExtents : context.viewport.computeViewRange());\n const clipPlanesLoops = (undefined !== clipPlanes ? ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(clipPlanes, viewRange) : undefined);\n if (undefined === clipShape && (undefined === clipPlanesLoops || 0 === clipPlanesLoops.length))\n return;\n\n const color = (options && options.color ? options.color : EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport));\n const builderVis = context.createGraphicBuilder(GraphicType.WorldDecoration, clipShape ? clipShape.transformFromClip : undefined, (options ? options.id : undefined));\n const builderHid = context.createGraphicBuilder(GraphicType.WorldOverlay, clipShape ? clipShape.transformFromClip : undefined);\n builderVis.setSymbology(color, ColorDef.black, (options && options.visibleWidth ? options.visibleWidth : 3));\n builderHid.setSymbology(color, ColorDef.black, (options && options.hiddenWidth ? options.hiddenWidth : 1), (options && options.hiddenStyle ? options.hiddenStyle : LinePixels.Code2));\n\n if (undefined !== clipPlanesLoops) {\n ViewClipTool.addClipPlanesLoops(builderVis, clipPlanesLoops, true);\n ViewClipTool.addClipPlanesLoops(builderHid, clipPlanesLoops, true);\n if (options && options.fillClipPlanes) {\n const fill = (options.fill ? options.fill : EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(0, 255, 255, 225), context.viewport));\n const builderFill = context.createGraphicBuilder(GraphicType.WorldDecoration);\n builderFill.setSymbology(fill, fill, 0);\n ViewClipTool.addClipPlanesLoops(builderFill, (options.hasPrimaryPlane ? [clipPlanesLoops[0]] : clipPlanesLoops), false);\n context.addDecorationFromBuilder(builderFill);\n }\n } else if (undefined !== clipShape) {\n const clipExtents = ViewClipTool.getClipShapeExtents(clipShape, viewRange);\n ViewClipTool.addClipShape(builderVis, clipShape, clipExtents);\n ViewClipTool.addClipShape(builderHid, clipShape, clipExtents);\n }\n\n context.addDecorationFromBuilder(builderVis);\n context.addDecorationFromBuilder(builderHid);\n }\n\n private static isHilited(vp: Viewport, id?: string): boolean {\n return (undefined !== id ? vp.iModel.hilited.elements.has(Id64.getLowerUint32(id), Id64.getUpperUint32(id)) : false);\n }\n\n private static isFlashed(vp: Viewport, id?: string): boolean {\n return (undefined !== id ? vp.lastFlashedElementId === id : false);\n }\n\n public static drawClipShape(context: DecorateContext, shape: ClipShape, extents: Range1d, color: ColorDef, weight: number, id?: string): void {\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration, shape.transformFromClip, id); // Use WorldDecoration not WorldOverlay to make sure handles have priority...\n builder.setSymbology(color, ColorDef.black, weight);\n ViewClipTool.addClipShape(builder, shape, extents);\n context.addDecorationFromBuilder(builder);\n\n // NOTE: We want to display hidden edges when clip decoration isn't hilited (not selected or drawn in dynamics).\n // This isn't required and is messy looking when the clip is being drawn hilited.\n // If the clip decoration is being flashed, draw using the hilite color to match the pickable world decoration display.\n if (!this.isHilited(context.viewport, id)) {\n const builderHid = context.createGraphicBuilder(GraphicType.WorldOverlay, shape.transformFromClip);\n builderHid.setSymbology(this.isFlashed(context.viewport, id) ? context.viewport.hilite.color : color, ColorDef.black, 1, LinePixels.Code2);\n ViewClipTool.addClipShape(builderHid, shape, extents);\n context.addDecorationFromBuilder(builderHid);\n }\n }\n\n /** @internal */\n public static getClipShapePoints(shape: ClipShape, z: number): Point3d[] {\n const points: Point3d[] = [];\n for (const pt of shape.polygon)\n points.push(Point3d.create(pt.x, pt.y, z));\n return points;\n }\n\n /** @internal */\n public static getClipShapeExtents(shape: ClipShape, viewRange: Range3d): Range1d {\n let zLow = shape.zLow;\n let zHigh = shape.zHigh;\n if (undefined === zLow || undefined === zHigh) {\n const zVec = Vector3d.unitZ();\n const origin = shape.polygon[0];\n const corners = viewRange.corners();\n if (undefined !== shape.transformToClip)\n shape.transformToClip.multiplyPoint3dArrayInPlace(corners);\n for (const corner of corners) {\n const delta = Vector3d.createStartEnd(origin, corner);\n const projection = delta.dotProduct(zVec);\n if (undefined === shape.zLow && (undefined === zLow || projection < zLow))\n zLow = projection;\n if (undefined === shape.zHigh && (undefined === zHigh || projection > zHigh))\n zHigh = projection;\n }\n }\n\n if (undefined === zLow || undefined === zHigh)\n return Range1d.createNull();\n return Range1d.createXX(zLow, zHigh);\n }\n\n /** @internal */\n public static isSingleClipShape(clip: ClipVector): ClipShape | undefined {\n if (1 !== clip.clips.length)\n return undefined;\n const prim = clip.clips[0];\n if (!(prim instanceof ClipShape))\n return undefined;\n if (!prim.isValidPolygon)\n return undefined;\n return prim;\n }\n\n public static drawClipPlanesLoops(context: DecorateContext, loops: GeometryQuery[], color: ColorDef, weight: number, dashed?: boolean, fill?: ColorDef, id?: string): void {\n if (loops.length < 1)\n return;\n\n const builderEdge = context.createGraphicBuilder(GraphicType.WorldDecoration, undefined, id); // Use WorldDecoration not WorldOverlay to make sure handles have priority...\n builderEdge.setSymbology(color, ColorDef.black, weight, dashed ? LinePixels.Code2 : undefined);\n ViewClipTool.addClipPlanesLoops(builderEdge, loops, true);\n context.addDecorationFromBuilder(builderEdge);\n\n // NOTE: We want to display hidden edges when clip decoration isn't hilited (not selected or drawn in dynamics).\n // This isn't required and is messy looking when the clip is being drawn hilited.\n // If the clip decoration is being flashed, draw using the hilite color to match the pickable world decoration display.\n if (!this.isHilited(context.viewport, id)) {\n const builderEdgeHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n builderEdgeHid.setSymbology(this.isFlashed(context.viewport, id) ? context.viewport.hilite.color : color, ColorDef.black, 1, LinePixels.Code2);\n ViewClipTool.addClipPlanesLoops(builderEdgeHid, loops, true);\n context.addDecorationFromBuilder(builderEdgeHid);\n }\n\n if (undefined === fill)\n return;\n\n const builderFace = context.createGraphicBuilder(GraphicType.WorldDecoration, undefined);\n builderFace.setSymbology(fill, fill, 0);\n ViewClipTool.addClipPlanesLoops(builderFace, loops, false);\n context.addDecorationFromBuilder(builderFace);\n }\n\n /** @internal */\n public static isSingleConvexClipPlaneSet(clip: ClipVector): ConvexClipPlaneSet | undefined {\n if (1 !== clip.clips.length)\n return undefined;\n const prim = clip.clips[0];\n if (prim instanceof ClipShape)\n return undefined;\n const planeSets = prim.fetchClipPlanesRef();\n return (undefined !== planeSets && 1 === planeSets.convexSets.length) ? planeSets.convexSets[0] : undefined;\n }\n\n /** @internal */\n public static isSingleClipPlane(clip: ClipVector): ClipPlane | undefined {\n const clipPlanes = ViewClipTool.isSingleConvexClipPlaneSet(clip);\n if (undefined === clipPlanes || 1 !== clipPlanes.planes.length)\n return undefined;\n return clipPlanes.planes[0];\n }\n\n public static areClipsEqual(clipA: ClipVector, clipB: ClipVector): boolean {\n if (clipA === clipB)\n return true;\n if (clipA.clips.length !== clipB.clips.length)\n return false;\n for (let iPrim = 0; iPrim < clipA.clips.length; iPrim++) {\n const primA = clipA.clips[iPrim];\n const primB = clipB.clips[iPrim];\n const planesA = primA.fetchClipPlanesRef();\n const planesB = primB.fetchClipPlanesRef();\n if (undefined !== planesA && undefined !== planesB) {\n if (planesA.convexSets.length !== planesB.convexSets.length)\n return false;\n for (let iPlane = 0; iPlane < planesA.convexSets.length; iPlane++) {\n const planeSetA = planesA.convexSets[iPlane];\n const planeSetB = planesB.convexSets[iPlane];\n if (planeSetA.planes.length !== planeSetB.planes.length)\n return false;\n for (let iClipPlane = 0; iClipPlane < planeSetA.planes.length; iClipPlane++) {\n const planeA = planeSetA.planes[iClipPlane];\n const planeB = planeSetB.planes[iClipPlane];\n if (!planeA.isAlmostEqual(planeB))\n return false;\n }\n }\n } else if (undefined === planesA && undefined === planesB) {\n continue;\n } else {\n return false;\n }\n }\n return true;\n }\n\n public static hasClip(viewport: Viewport) {\n return (undefined !== viewport.view.getViewClip());\n }\n}\n\n/** A tool to remove a clip volume for a view\n * @public @extensions\n */\nexport class ViewClipClearTool extends ViewClipTool {\n public static override toolId = \"ViewClip.Clear\";\n public static override iconSpec = \"icon-section-tool\";\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && ViewClipTool.hasClip(vp)); }\n /** @internal */\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"ViewClip.Clear.Prompts.FirstPoint\"));\n IModelApp.notifications.setToolAssistance(ToolAssistance.createInstructions(mainInstruction));\n }\n\n protected async doClipClear(viewport: Viewport): Promise<boolean> {\n if (!ViewClipTool.doClipClear(viewport))\n return false;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onClearClip(viewport);\n await this.onReinitialize();\n return true;\n }\n\n /** @internal */\n public override async onPostInstall(): Promise<void> {\n await super.onPostInstall();\n if (undefined !== this.targetView)\n await this.doClipClear(this.targetView);\n }\n\n /** @internal */\n public override async onDataButtonDown(_ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n return await this.doClipClear(this.targetView) ? EventHandled.Yes : EventHandled.No;\n }\n}\n\n/** A tool to define a clip volume for a view by specifying a plane\n * @public\n */\nexport class ViewClipByPlaneTool extends ViewClipTool {\n public static override toolId = \"ViewClip.ByPlane\";\n public static override iconSpec = \"icon-section-plane\";\n /** @internal */\n private _orientationValue: DialogItemValue = { value: ContextRotationId.Face };\n\n constructor(clipEventHandler?: ViewClipEventHandler, protected _clearExistingPlanes: boolean = false) { super(clipEventHandler); }\n\n /** @internal */\n public get orientation(): ContextRotationId { return this._orientationValue.value as ContextRotationId; }\n public set orientation(option: ContextRotationId) { this._orientationValue.value = option; }\n\n /** @internal */\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n const initialValue = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, ViewClipTool._orientationName);\n initialValue && (this._orientationValue = initialValue);\n const toolSettings = new Array<DialogItem>();\n const settingsItem: DialogItem = { value: this._orientationValue, property: ViewClipTool._getEnumAsOrientationDescription(), editorPosition: { rowPriority: 0, columnIndex: 2 } };\n toolSettings.push(settingsItem);\n return toolSettings;\n }\n\n /** @internal */\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (updatedValue.propertyName === ViewClipTool._orientationName) {\n this._orientationValue = updatedValue.value;\n if (this._orientationValue) {\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: ViewClipTool._orientationName, value: this._orientationValue });\n return true;\n }\n }\n return false;\n }\n\n /** @internal */\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"ViewClip.ByPlane.Prompts.FirstPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected override setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n super.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n const normal = ViewClipTool.getPlaneInwardNormal(this.orientation, this.targetView);\n if (undefined === normal)\n return EventHandled.No;\n ViewClipTool.enableClipVolume(this.targetView);\n if (!ViewClipTool.doClipToPlane(this.targetView, ev.point, normal, this._clearExistingPlanes))\n return EventHandled.No;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClipPlane(this.targetView);\n await this.onReinitialize();\n return EventHandled.Yes;\n }\n}\n\n/** A tool to define a clip volume for a view by specifying a shape\n * @public\n */\nexport class ViewClipByShapeTool extends ViewClipTool {\n public static override toolId = \"ViewClip.ByShape\";\n public static override iconSpec = \"icon-section-shape\";\n /** @internal */\n private _orientationValue: DialogItemValue = { value: ContextRotationId.Top };\n /** @internal */\n protected readonly _points: Point3d[] = [];\n /** @internal */\n protected _matrix?: Matrix3d;\n /** @internal */\n protected _zLow?: number;\n /** @internal */\n protected _zHigh?: number;\n\n /** @internal */\n public get orientation(): ContextRotationId { return this._orientationValue.value as ContextRotationId; }\n public set orientation(option: ContextRotationId) { this._orientationValue.value = option; }\n\n /** @internal */\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n const initialValue = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, ViewClipTool._orientationName);\n initialValue && (this._orientationValue = initialValue);\n const toolSettings = new Array<DialogItem>();\n toolSettings.push({ value: this._orientationValue, property: ViewClipTool._getEnumAsOrientationDescription(), editorPosition: { rowPriority: 0, columnIndex: 2 } });\n return toolSettings;\n }\n\n /** @internal */\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (updatedValue.propertyName === ViewClipTool._orientationName) {\n this._orientationValue = updatedValue.value;\n if (!this._orientationValue)\n return false;\n this._points.length = 0;\n this._matrix = undefined;\n AccuDrawHintBuilder.deactivate();\n this.setupAndPromptForNextAction();\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: ViewClipTool._orientationName, value: this._orientationValue });\n return true;\n }\n return false;\n }\n\n /** @internal */\n protected override showPrompt(): void {\n let mainMsg = \"ViewClip.ByShape.Prompts.\";\n switch (this._points.length) {\n case 0:\n mainMsg += \"FirstPoint\";\n break;\n case 1:\n mainMsg += \"SecondPoint\";\n break;\n case 2:\n mainMsg += \"ThirdPoint\";\n break;\n default:\n mainMsg += \"NextPoint\";\n break;\n }\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n\n if (this._points.length > 1)\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 !== this._points.length)\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected override setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n super.setupAndPromptForNextAction();\n if (0 === this._points.length)\n return;\n\n if (undefined === this._matrix)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setOrigin(this._points[this._points.length - 1]);\n if (1 === this._points.length) {\n hints.setMatrix(this._matrix);\n hints.setModeRectangular();\n } else if (this._points.length > 1 && !(this._points[this._points.length - 1].isAlmostEqual(this._points[this._points.length - 2]))) {\n const xVec = Vector3d.createStartEnd(this._points[this._points.length - 2], this._points[this._points.length - 1]);\n const zVec = this._matrix.getColumn(2);\n const matrix = Matrix3d.createRigidFromColumns(xVec, zVec, AxisOrder.XZY);\n if (undefined !== matrix)\n hints.setMatrix(matrix); // Rotate AccuDraw x axis to last segment preserving current up vector...\n }\n hints.setLockZ = true;\n hints.sendHints();\n }\n\n protected getClipPoints(ev: BeButtonEvent): Point3d[] {\n const points: Point3d[] = [];\n if (undefined === this.targetView || this._points.length < 1)\n return points;\n for (const pt of this._points)\n points.push(pt.clone());\n\n if (undefined === this._matrix)\n return points;\n\n const vp = ev.viewport;\n if (undefined === vp)\n return points;\n\n const normal = this._matrix.getColumn(2);\n let currentPt = AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, points[0], normal, vp, true);\n if (undefined === currentPt)\n currentPt = ev.point.clone();\n if (2 === points.length && !ev.isControlKey) {\n const xDir = Vector3d.createStartEnd(points[0], points[1]);\n const xLen = xDir.magnitude();\n xDir.normalizeInPlace();\n const yDir = xDir.crossProduct(normal);\n yDir.normalizeInPlace();\n const cornerPt = AccuDrawHintBuilder.projectPointToLineInView(currentPt, points[1], yDir, vp, true);\n if (undefined !== cornerPt) {\n points.push(cornerPt);\n cornerPt.plusScaled(xDir, -xLen, currentPt);\n }\n }\n points.push(currentPt);\n if (points.length > 2)\n points.push(points[0].clone());\n\n return points;\n }\n\n /** @internal */\n public override isValidLocation(ev: BeButtonEvent, isButtonEvent: boolean): boolean {\n return (this._points.length > 0 ? true : super.isValidLocation(ev, isButtonEvent));\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (context.viewport !== this.targetView)\n return;\n\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n if (undefined === ev.viewport)\n return;\n const points = this.getClipPoints(ev);\n if (points.length < 2)\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport);\n const colorAccHid = colorAccVis.withAlpha(100);\n const fillAccVis = context.viewport.hilite.color.withAlpha(25);\n\n builderAccVis.setSymbology(colorAccVis, fillAccVis, 3);\n builderAccHid.setSymbology(colorAccHid, fillAccVis, 1, LinePixels.Code2);\n\n if (points.length > 2)\n builderAccHid.addShape(points);\n\n builderAccVis.addLineString(points);\n builderAccHid.addLineString(points);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n }\n\n /** @internal */\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (this._points.length > 0 && undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n\n if (this._points.length > 1 && !ev.isControlKey) {\n const points = this.getClipPoints(ev);\n if (points.length < 3)\n return EventHandled.No;\n\n const transform = Transform.createOriginAndMatrix(points[0], this._matrix);\n transform.multiplyInversePoint3dArrayInPlace(points);\n ViewClipTool.enableClipVolume(this.targetView);\n if (!ViewClipTool.doClipToShape(this.targetView, points, transform, this._zLow, this._zHigh))\n return EventHandled.No;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClip(this.targetView);\n await this.onReinitialize();\n return EventHandled.Yes;\n }\n\n if (undefined === this._matrix && undefined === (this._matrix = AccuDrawHintBuilder.getContextRotation(this.orientation, this.targetView)))\n return EventHandled.No;\n\n const currPt = ev.point.clone();\n if (this._points.length > 0) {\n const vp = ev.viewport;\n const planePt = (vp ? AccuDrawHintBuilder.projectPointToPlaneInView(currPt, this._points[0], this._matrix.getColumn(2), vp, true) : undefined);\n if (undefined !== planePt)\n currPt.setFrom(planePt);\n }\n\n this._points.push(currPt);\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._points.length)\n return false;\n\n this._points.pop();\n this.setupAndPromptForNextAction();\n return true;\n }\n}\n\n/** A tool to define a clip volume for a view by specifying range corners\n * @public\n */\nexport class ViewClipByRangeTool extends ViewClipTool {\n public static override toolId = \"ViewClip.ByRange\";\n public static override iconSpec = \"icon-section-range\";\n /** @internal */\n protected _corner?: Point3d;\n\n /** @internal */\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(undefined === this._corner ? \"ViewClip.ByRange.Prompts.FirstPoint\" : \"ViewClip.ByRange.Prompts.NextPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n if (undefined !== this._corner)\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected override setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n super.setupAndPromptForNextAction();\n }\n\n protected getClipRange(range: Range3d, transform: Transform, ev: BeButtonEvent): boolean {\n if (undefined === this.targetView || undefined === this._corner)\n return false;\n // Creating clip aligned with ACS when ACS context lock is enabled...\n const matrix = AccuDrawHintBuilder.getContextRotation(ContextRotationId.Top, this.targetView);\n Transform.createOriginAndMatrix(this._corner, matrix, transform);\n const pt1 = transform.multiplyInversePoint3d(this._corner);\n const pt2 = transform.multiplyInversePoint3d(ev.point);\n if (undefined === pt1 || undefined === pt2)\n return false;\n range.setFrom(Range3d.create(pt1, pt2));\n return true;\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (context.viewport !== this.targetView || undefined === this._corner)\n return;\n\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n if (undefined === ev.viewport)\n return;\n const range = Range3d.create();\n const transform = Transform.createIdentity();\n if (!this.getClipRange(range, transform, ev))\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration, transform);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay, transform);\n const colorAccVis = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport);\n const colorAccHid = colorAccVis.withAlpha(100);\n\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\n\n builderAccVis.addRangeBox(range);\n builderAccHid.addRangeBox(range);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n }\n\n /** @internal */\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined !== this._corner && undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n\n if (undefined !== this._corner) {\n const range = Range3d.create();\n const transform = Transform.createIdentity();\n if (!this.getClipRange(range, transform, ev))\n return EventHandled.No;\n ViewClipTool.enableClipVolume(this.targetView);\n if (!ViewClipTool.doClipToRange(this.targetView, range, transform))\n return EventHandled.No;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClip(this.targetView);\n await this.onReinitialize();\n return EventHandled.Yes;\n }\n\n this._corner = ev.point.clone();\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (undefined === this._corner)\n return false;\n this._corner = undefined;\n this.setupAndPromptForNextAction();\n return true;\n }\n}\n\n/** A tool to define a clip volume for a view using the element aligned box or axis aligned box.\n * @public\n */\nexport class ViewClipByElementTool extends ViewClipTool {\n public static override toolId = \"ViewClip.ByElement\";\n public static override iconSpec = \"icon-section-element\";\n\n constructor(clipEventHandler?: ViewClipEventHandler, protected _alwaysUseRange: boolean = false) { super(clipEventHandler); }\n\n /** @internal */\n protected override showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"ViewClip.ByElement.Prompts.FirstPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Mouse));\n\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n if (undefined !== this.targetView && this.targetView.iModel.selectionSet.isActive) {\n let useSelection = true;\n this.targetView.iModel.selectionSet.elements.forEach((val) => {\n if (Id64.isInvalid(val) || Id64.isTransient(val))\n useSelection = false;\n });\n\n if (useSelection) {\n await this.doClipToSelectedElements(this.targetView);\n return;\n }\n }\n this.initLocateElements(true, false, \"default\", CoordinateLockOverrides.All);\n }\n\n /** @internal */\n public async doClipToSelectedElements(viewport: Viewport): Promise<boolean> {\n if (await this.doClipToElements(viewport, viewport.iModel.selectionSet.elements, this._alwaysUseRange))\n return true;\n await this.exitTool();\n return false;\n }\n\n protected async doClipToElements(viewport: Viewport, ids: Id64Arg, alwaysUseRange: boolean = false, modelId?: Id64String): Promise<boolean> {\n try {\n const placements = await viewport.iModel.elements.getPlacements(ids, { type: viewport.view.is3d() ? \"3d\" : \"2d\" });\n if (0 === placements.length)\n return false;\n\n const displayTransform = modelId && 1 === placements.length ? viewport.view.computeDisplayTransform({ modelId, elementId: placements[0].elementId }) : undefined;\n const range = new Range3d();\n const transform = Transform.createIdentity();\n if (!alwaysUseRange && 1 === placements.length) {\n const placement = placements[0];\n range.setFrom(placement instanceof Placement2d ? Range3d.createRange2d(placement.bbox, 0) : placement.bbox);\n transform.setFrom(placement.transform); // Use ElementAlignedBox for single selection...\n displayTransform?.multiplyTransformTransform(transform, transform);\n } else {\n for (const placement of placements)\n range.extendRange(placement.calculateRange());\n\n if (displayTransform)\n transform.setFrom(displayTransform);\n }\n\n if (range.isNull)\n return false;\n\n range.scaleAboutCenterInPlace(1.001); // pad range slightly...\n if (range.isAlmostZeroX || range.isAlmostZeroY) {\n if (range.isAlmostZeroZ)\n return false;\n\n // Invalid XY range for clip, see if XZ or YZ can be used instead...\n const canUseXZ = !range.isAlmostZeroX;\n const canUseYZ = !canUseXZ && !range.isAlmostZeroY;\n if (!canUseXZ && !canUseYZ)\n return false;\n\n const zDir = canUseXZ ? Vector3d.unitY() : Vector3d.unitX();\n const indices = Range3d.faceCornerIndices(canUseXZ ? 3 : 1);\n const corners = range.corners();\n const points: Point3d[] = [];\n for (const index of indices)\n points.push(corners[index]);\n\n transform.multiplyPoint3dArrayInPlace(points);\n transform.multiplyVector(zDir, zDir);\n transform.setFrom(Transform.createOriginAndMatrix(points[0], Matrix3d.createRigidHeadsUp(zDir)));\n transform.multiplyInversePoint3dArrayInPlace(points);\n ViewClipTool.enableClipVolume(viewport);\n if (!ViewClipTool.doClipToShape(viewport, points, transform))\n return false;\n\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClip(viewport);\n\n await this.onReinitialize();\n return true;\n }\n ViewClipTool.enableClipVolume(viewport);\n if (!ViewClipTool.doClipToRange(viewport, range, transform))\n return false;\n\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onNewClip(viewport);\n\n await this.onReinitialize();\n return true;\n } catch {\n return false;\n }\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\n if (undefined === hit || !hit.isElementHit)\n return EventHandled.No;\n return await this.doClipToElements(this.targetView, hit.sourceId, this._alwaysUseRange, hit.modelId) ? EventHandled.Yes : EventHandled.No;\n }\n}\n\n/** @internal Interactive tool base class to modify a view's clip */\nexport abstract class ViewClipModifyTool extends EditManipulator.HandleTool {\n protected _anchorIndex: number;\n protected _ids: string[];\n protected _controls: ViewClipControlArrow[];\n protected _clipView: Viewport;\n protected _clip: ClipVector;\n protected _viewRange: Range3d;\n protected _restoreClip = true;\n protected _currentDistance: number = 0.0;\n private readonly _clipStyle: ClipStyle;\n\n public constructor(manipulator: EditManipulator.HandleProvider, clip: ClipVector, vp: Viewport, hitId: string, ids: string[], controls: ViewClipControlArrow[]) {\n super(manipulator);\n this._anchorIndex = ids.indexOf(hitId);\n this._ids = ids;\n this._controls = controls;\n this._clipView = vp;\n this._clip = clip;\n this._viewRange = vp.computeViewRange();\n\n // Don't request section-cut graphics while the user is modifying the clip. We'll restore this when the tool exits.\n this._clipStyle = vp.clipStyle;\n if (this._clipStyle.produceCutGeometry) {\n vp.clipStyle = ClipStyle.fromJSON({\n ...this._clipStyle.toJSON(),\n produceCutGeometry: false,\n });\n }\n }\n\n protected override get wantAccuSnap(): boolean { return false; }\n\n protected override init(): void {\n super.init();\n AccuDrawHintBuilder.deactivate();\n }\n\n protected abstract updateViewClip(ev: BeButtonEvent, isAccept: boolean): boolean;\n protected abstract drawViewClip(context: DecorateContext): void;\n\n protected getOffsetValue(ev: BeButtonEvent, transformFromClip?: Transform): number | undefined {\n if (-1 === this._anchorIndex || undefined === ev.viewport || ev.viewport !== this._clipView)\n return undefined;\n\n // NOTE: Use AccuDraw z instead of view z if AccuDraw is explicitly enabled...\n const anchorRay = ViewClipTool.getClipRayTransformed(this._controls[this._anchorIndex].origin, this._controls[this._anchorIndex].direction, transformFromClip);\n const projectedPt = AccuDrawHintBuilder.projectPointToLineInView(ev.point, anchorRay.origin, anchorRay.direction, ev.viewport, true);\n if (undefined === projectedPt)\n return undefined;\n\n const offsetVec = Vector3d.createStartEnd(anchorRay.origin, projectedPt);\n let offset = offsetVec.normalizeWithLength(offsetVec).mag;\n if (offset < Geometry.smallMetricDistance)\n return undefined;\n if (offsetVec.dotProduct(anchorRay.direction) < 0.0)\n offset *= -1.0;\n\n this._currentDistance = offset;\n return offset;\n }\n\n protected drawAnchorOffset(context: DecorateContext, color: ColorDef, weight: number, transformFromClip?: Transform): void {\n if (-1 === this._anchorIndex || Math.abs(this._currentDistance) < Geometry.smallMetricDistance)\n return;\n\n const anchorRay = ViewClipTool.getClipRayTransformed(this._controls[this._anchorIndex].origin, this._controls[this._anchorIndex].direction, transformFromClip);\n anchorRay.direction.scaleToLength(this._currentDistance, anchorRay.direction);\n const pt1 = anchorRay.fractionToPoint(0.0);\n const pt2 = anchorRay.fractionToPoint(1.0);\n const builder = context.createGraphicBuilder(GraphicType.ViewOverlay);\n\n context.viewport.worldToView(pt1, pt1);\n pt1.z = 0.0;\n context.viewport.worldToView(pt2, pt2);\n pt2.z = 0.0;\n\n builder.setSymbology(color, ColorDef.black, weight, LinePixels.Code5);\n builder.addLineString([pt1, pt2]);\n builder.setSymbology(color, ColorDef.black, weight + 7);\n builder.addPointString([pt1, pt2]);\n\n context.addDecorationFromBuilder(builder);\n }\n\n public override decorate(context: DecorateContext): void {\n if (-1 === this._anchorIndex || context.viewport !== this._clipView)\n return;\n this.drawViewClip(context);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (!this.updateViewClip(ev, false))\n return;\n this._clipView.invalidateDecorations();\n }\n\n protected accept(ev: BeButtonEvent): boolean {\n if (!this.updateViewClip(ev, true))\n return false;\n this._restoreClip = false;\n return true;\n }\n\n public override async onCleanup() {\n if (this._restoreClip && ViewClipTool.hasClip(this._clipView))\n ViewClipTool.setViewClip(this._clipView, this._clip);\n\n this._clipView.clipStyle = this._clipStyle;\n }\n}\n\n/** @internal Interactive tool to modify a view's clip defined by a ClipShape */\nexport class ViewClipShapeModifyTool extends ViewClipModifyTool {\n protected updateViewClip(ev: BeButtonEvent, _isAccept: boolean): boolean {\n const clipShape = ViewClipTool.isSingleClipShape(this._clip);\n if (undefined === clipShape)\n return false;\n\n const offset = this.getOffsetValue(ev, clipShape.transformFromClip);\n if (undefined === offset)\n return false;\n\n const offsetAll = ev.isShiftKey;\n const localOffset = ViewClipTool.getOffsetValueTransformed(offset, clipShape.transformToClip);\n const shapePts = ViewClipTool.getClipShapePoints(clipShape, 0.0);\n const adjustedPts: Point3d[] = [];\n for (let i = 0; i < shapePts.length; i++) {\n const prevFace = (0 === i ? shapePts.length - 2 : i - 1);\n const nextFace = (shapePts.length - 1 === i ? 0 : i);\n const prevSelected = offsetAll || (prevFace === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[prevFace]));\n const nextSelected = offsetAll || (nextFace === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[nextFace]));\n if (prevSelected && nextSelected) {\n const prevPt = shapePts[i].plusScaled(this._controls[prevFace].direction, localOffset);\n const nextPt = shapePts[i].plusScaled(this._controls[nextFace].direction, localOffset);\n const prevRay = Ray3d.create(prevPt, Vector3d.createStartEnd(shapePts[i === 0 ? shapePts.length - 2 : i - 1], shapePts[i]));\n const nextPlane = Plane3dByOriginAndUnitNormal.create(nextPt, this._controls[nextFace].direction);\n if (undefined === nextPlane || undefined === prevRay.intersectionWithPlane(nextPlane, prevPt))\n return false;\n adjustedPts[i] = prevPt;\n } else if (prevSelected) {\n adjustedPts[i] = shapePts[i].plusScaled(this._controls[prevFace].direction, localOffset);\n } else if (nextSelected) {\n adjustedPts[i] = shapePts[i].plusScaled(this._controls[nextFace].direction, localOffset);\n } else {\n adjustedPts[i] = shapePts[i];\n }\n }\n\n let zLow = clipShape.zLow;\n let zHigh = clipShape.zHigh;\n const zLowIndex = this._controls.length - 2;\n const zHighIndex = this._controls.length - 1;\n const zLowSelected = offsetAll || (zLowIndex === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[zLowIndex]));\n const zHighSelected = offsetAll || (zHighIndex === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[zHighIndex]));\n\n if (zLowSelected || zHighSelected) {\n const clipExtents = ViewClipTool.getClipShapeExtents(clipShape, this._viewRange);\n if (zLowSelected)\n zLow = clipExtents.low - localOffset;\n if (zHighSelected)\n zHigh = clipExtents.high + localOffset;\n const realZLow = (undefined === zLow ? clipExtents.low : zLow);\n const realZHigh = (undefined === zHigh ? clipExtents.high : zHigh);\n if (realZLow > realZHigh) {\n zLow = realZHigh;\n zHigh = realZLow;\n }\n }\n\n return ViewClipTool.doClipToShape(this._clipView, adjustedPts, clipShape.transformFromClip, zLow, zHigh);\n }\n\n protected drawViewClip(context: DecorateContext): void {\n const clip = this._clipView.view.getViewClip();\n if (undefined === clip)\n return;\n const clipShape = ViewClipTool.isSingleClipShape(clip);\n if (undefined === clipShape)\n return;\n const clipExtents = ViewClipTool.getClipShapeExtents(clipShape, this._viewRange);\n const color = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport);\n ViewClipTool.drawClipShape(context, clipShape, clipExtents, color, 1);\n this.drawAnchorOffset(context, color, 1, clipShape.transformFromClip);\n }\n}\n\n/** @internal Interactive tool to modify a view's clip defined by a ConvexClipPlaneSet */\nexport class ViewClipPlanesModifyTool extends ViewClipModifyTool {\n protected updateViewClip(ev: BeButtonEvent, _isAccept: boolean): boolean {\n const offset = this.getOffsetValue(ev);\n if (undefined === offset)\n return false;\n\n const offsetAll = ev.isShiftKey;\n const planeSet = ConvexClipPlaneSet.createEmpty();\n for (let i: number = 0; i < this._controls.length; i++) {\n const selected = offsetAll || (i === this._anchorIndex || this.manipulator.iModel.selectionSet.elements.has(this._ids[i]));\n const origin = this._controls[i].origin.clone();\n const direction = this._controls[i].direction;\n if (selected)\n origin.plusScaled(direction, offset, origin);\n planeSet.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(direction.negate(), origin));\n }\n\n return ViewClipTool.doClipToConvexClipPlaneSet(this._clipView, planeSet);\n }\n\n protected drawViewClip(context: DecorateContext): void {\n const clip = this._clipView.view.getViewClip();\n if (undefined === clip)\n return;\n const clipPlanes = ViewClipTool.isSingleConvexClipPlaneSet(clip);\n if (undefined === clipPlanes)\n return;\n const clipPlanesLoops = ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(clipPlanes, this._viewRange, true, false, true);\n if (undefined === clipPlanesLoops)\n return;\n const color = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, context.viewport);\n ViewClipTool.drawClipPlanesLoops(context, clipPlanesLoops, color, 1);\n this.drawAnchorOffset(context, color, 1);\n }\n}\n\n/** @internal Modify handle data to modify a view's clip */\nexport class ViewClipControlArrow {\n public origin: Point3d;\n public direction: Vector3d;\n public sizeInches: number;\n public fill?: ColorDef;\n public outline?: ColorDef;\n public name?: string;\n public floatingOrigin?: Point3d;\n\n public constructor(origin: Point3d, direction: Vector3d, sizeInches: number, fill?: ColorDef, outline?: ColorDef, name?: string) {\n this.origin = origin;\n this.direction = direction;\n this.sizeInches = sizeInches;\n this.fill = fill;\n this.outline = outline;\n this.name = name;\n }\n}\n\n/** A pickable decoration managed by ViewClipDecorationProvider used to visualize a view's clip and present modification handles.\n * This class is public to facilitate customization of view clip events by type or selected controls.\n * @see [[ViewClipDecorationProvider]]\n * @public\n * @extensions\n */\nexport class ViewClipDecoration extends EditManipulator.HandleProvider {\n private static _decorator?: ViewClipDecoration;\n /** @internal */\n protected _clip?: ClipVector;\n /** @internal */\n protected _clipId?: string;\n /** @internal */\n protected _clipShape?: ClipShape;\n /** @internal */\n protected _clipShapeExtents?: Range1d;\n /** @internal */\n protected _clipPlanes?: ConvexClipPlaneSet;\n /** @internal */\n protected _clipPlanesLoops?: GeometryQuery[];\n /** @internal */\n protected _clipPlanesLoopsNoncontributing?: GeometryQuery[];\n /** @internal */\n protected _controlIds: string[] = [];\n /** @internal */\n protected _controls: ViewClipControlArrow[] = [];\n /** @internal */\n protected _suspendDecorator = false;\n /** @internal */\n protected _removeViewCloseListener?: () => void;\n\n public constructor(protected _clipView: ScreenViewport, protected _clipEventHandler?: ViewClipEventHandler) {\n super(_clipView.iModel);\n if (!this.getClipData())\n return;\n this._clipId = this.iModel.transientIds.getNext();\n this.updateDecorationListener(true);\n this._removeViewCloseListener = IModelApp.viewManager.onViewClose.addListener(this.onViewClose, this); // eslint-disable-line @typescript-eslint/unbound-method\n if (undefined !== this._clipEventHandler && this._clipEventHandler.selectOnCreate())\n this.iModel.selectionSet.replace(this._clipId);\n }\n\n public get clipId(): string | undefined { return this._clipId; }\n public get clipShape(): ClipShape | undefined { return this._clipShape; }\n public get clipPlaneSet(): ConvexClipPlaneSet | undefined { return this._clipPlanes; }\n public getControlIndex(id: string): number { return this._controlIds.indexOf(id); }\n\n protected override stop(): void {\n const selectedId = (undefined !== this._clipId && this.iModel.selectionSet.elements.has(this._clipId)) ? this._clipId : undefined;\n this._clipId = undefined; // Invalidate id so that decorator will be dropped...\n super.stop();\n if (undefined !== selectedId)\n this.iModel.selectionSet.remove(selectedId); // Don't leave decorator id in selection set...\n if (undefined !== this._removeViewCloseListener) {\n this._removeViewCloseListener();\n this._removeViewCloseListener = undefined;\n }\n }\n\n public onViewClose(vp: ScreenViewport): void {\n if (this._clipView === vp)\n ViewClipDecoration.clear();\n }\n\n private getClipData(): boolean {\n this._clip = this._clipShape = this._clipShapeExtents = this._clipPlanes = this._clipPlanesLoops = this._clipPlanesLoopsNoncontributing = undefined;\n let clip = this._clipView.view.getViewClip();\n if (undefined === clip)\n return false;\n let clipShape = ViewClipTool.isSingleClipShape(clip);\n if (undefined !== clipShape) {\n if (clipShape.polygon.length > 5) {\n const compressed = PolylineOps.compressByChordError(clipShape.polygon, 1.0e-5);\n if (compressed.length < clipShape.polygon.length) {\n clip = clip.clone();\n clipShape = ViewClipTool.isSingleClipShape(clip);\n if (undefined === clipShape)\n return false;\n clipShape.setPolygon(compressed);\n this._clipView.view.setViewClip(clip);\n }\n }\n this._clipShapeExtents = ViewClipTool.getClipShapeExtents(clipShape, this._clipView.computeViewRange());\n this._clipShape = clipShape;\n } else {\n const clipPlanes = ViewClipTool.isSingleConvexClipPlaneSet(clip);\n if (undefined === clipPlanes || clipPlanes.planes.length > 12) {\n // Show visual representation for ClipVectors that are not supported for modification...\n const viewRange = this._clipView.computeViewRange();\n\n for (const primitive of clip.clips) {\n const union = primitive.fetchClipPlanesRef();\n if (undefined === union)\n continue;\n\n for (const convexSet of union.convexSets) {\n const convexSetLoops = ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(convexSet, viewRange, true, false, true);\n if (undefined === convexSetLoops)\n continue;\n\n if (undefined === this._clipPlanesLoops)\n this._clipPlanesLoops = convexSetLoops;\n else\n this._clipPlanesLoops.push(...convexSetLoops);\n }\n }\n\n if (undefined === this._clipPlanesLoops)\n return false;\n\n this._clip = clip;\n return true;\n }\n const clipPlanesLoops = ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(clipPlanes, this._clipView.computeViewRange(), true, false, true);\n if (undefined !== clipPlanesLoops && clipPlanesLoops.length > clipPlanes.planes.length)\n return false;\n this._clipPlanesLoops = clipPlanesLoops;\n this._clipPlanes = clipPlanes;\n }\n this._clip = clip;\n return true;\n }\n\n private ensureNumControls(numReqControls: number): void {\n const numCurrent = this._controlIds.length;\n if (numCurrent < numReqControls) {\n const transientIds = this.iModel.transientIds;\n for (let i: number = numCurrent; i < numReqControls; i++)\n this._controlIds[i] = transientIds.getNext();\n } else if (numCurrent > numReqControls) {\n this._controlIds.length = numReqControls;\n }\n }\n\n private createClipShapeControls(): boolean {\n if (undefined === this._clipShape || undefined === this._clipShapeExtents)\n return false;\n\n const shapePtsLo = ViewClipTool.getClipShapePoints(this._clipShape, this._clipShapeExtents.low);\n const shapePtsHi = ViewClipTool.getClipShapePoints(this._clipShape, this._clipShapeExtents.high);\n const shapeArea = PolygonOps.centroidAreaNormal(shapePtsLo);\n if (undefined === shapeArea)\n return false;\n\n const numControls = shapePtsLo.length + 1; // Number of edge midpoints plus zLow and zHigh...\n this.ensureNumControls(numControls);\n\n for (let i: number = 0; i < numControls - 2; i++) {\n const midPtLo = shapePtsLo[i].interpolate(0.5, shapePtsLo[i + 1]);\n const midPtHi = shapePtsHi[i].interpolate(0.5, shapePtsHi[i + 1]);\n const faceCenter = midPtLo.interpolate(0.5, midPtHi);\n const edgeTangent = Vector3d.createStartEnd(shapePtsLo[i], shapePtsLo[i + 1]);\n const faceNormal = edgeTangent.crossProduct(shapeArea.direction);\n faceNormal.normalizeInPlace();\n this._controls[i] = new ViewClipControlArrow(faceCenter, faceNormal, shapePtsLo.length > 5 ? 0.5 : 0.75);\n }\n\n const zFillColor = ColorDef.from(150, 150, 250);\n this._controls[numControls - 2] = new ViewClipControlArrow(shapeArea.origin, Vector3d.unitZ(-1.0), 0.75, zFillColor, undefined, \"zLow\");\n this._controls[numControls - 1] = new ViewClipControlArrow(shapeArea.origin.plusScaled(Vector3d.unitZ(), shapePtsLo[0].distance(shapePtsHi[0])), Vector3d.unitZ(), 0.75, zFillColor, undefined, \"zHigh\");\n\n return true;\n }\n\n private getLoopCentroidAreaNormal(geom: GeometryQuery): Ray3d | undefined {\n if (!(geom instanceof Loop) || geom.children.length > 1)\n return undefined;\n const child = geom.getChild(0);\n if (!(child instanceof LineString3d))\n return undefined;\n return PolygonOps.centroidAreaNormal(child.points);\n }\n\n private createClipPlanesControls(): boolean {\n if (undefined === this._clipPlanes)\n return false;\n\n const loopData: Ray3d[] = [];\n if (undefined !== this._clipPlanesLoops) {\n for (const geom of this._clipPlanesLoops) {\n const loopArea = this.getLoopCentroidAreaNormal(geom);\n if (undefined !== loopArea)\n loopData.push(loopArea);\n }\n }\n\n const numControls = this._clipPlanes.planes.length;\n this.ensureNumControls(numControls);\n\n let viewRange;\n let iLoop: number = 0;\n for (let i: number = 0; i < this._clipPlanes.planes.length; i++) {\n const plane = this._clipPlanes.planes[i].getPlane3d();\n if (iLoop < loopData.length) {\n if (Math.abs(loopData[iLoop].direction.dotProduct(plane.getNormalRef())) > 0.9999 && plane.isPointInPlane(loopData[iLoop].origin)) {\n const outwardNormal = loopData[iLoop].direction.negate();\n this._controls[i] = new ViewClipControlArrow(loopData[iLoop].origin, outwardNormal, 0.75);\n iLoop++;\n continue;\n }\n }\n\n if (undefined === viewRange)\n viewRange = this._clipView.computeViewRange();\n\n const defaultOrigin = plane.projectPointToPlane(viewRange.center);\n const defaultOutwardNormal = plane.getNormalRef().negate();\n const expandedRange = viewRange.clone();\n expandedRange.extend(defaultOrigin);\n const nonContribLoops = ClipUtilities.loopsOfConvexClipPlaneIntersectionWithRange(ConvexClipPlaneSet.createPlanes([this._clipPlanes.planes[i]]), expandedRange, true, false, true);\n const nonContribColor = ColorDef.from(250, 100, 100);\n\n if (undefined !== nonContribLoops && nonContribLoops.length > 0) {\n if (undefined === this._clipPlanesLoopsNoncontributing)\n this._clipPlanesLoopsNoncontributing = nonContribLoops;\n else\n this._clipPlanesLoopsNoncontributing = this._clipPlanesLoopsNoncontributing.concat(nonContribLoops);\n const loopArea = this.getLoopCentroidAreaNormal(nonContribLoops[0]);\n if (undefined !== loopArea) {\n const outwardNormal = loopArea.direction.negate();\n this._controls[i] = new ViewClipControlArrow(loopArea.origin, outwardNormal, 0.5, nonContribColor);\n continue;\n }\n }\n\n this._controls[i] = new ViewClipControlArrow(defaultOrigin, defaultOutwardNormal, 0.5, nonContribColor); // Just show arrow for right-click menu options...\n }\n\n return true;\n }\n\n protected async createControls(): Promise<boolean> {\n // Always update to current view clip to handle post-modify, etc.\n if (undefined === this._clipId || !this.getClipData())\n return false;\n\n // Show controls if only range box and it's controls are selected, selection set doesn't include any other elements...\n let showControls = false;\n if (this.iModel.selectionSet.size <= this._controlIds.length + 1 && this.iModel.selectionSet.elements.has(this._clipId)) {\n showControls = true;\n if (this.iModel.selectionSet.size > 1) {\n this.iModel.selectionSet.elements.forEach((val) => {\n if (this._clipId !== val && !this._controlIds.includes(val))\n showControls = false;\n });\n }\n }\n\n if (!showControls) {\n if (undefined !== this._clipEventHandler && this._clipEventHandler.clearOnDeselect())\n ViewClipDecoration.clear();\n return false;\n }\n\n if (undefined !== this._clipShape)\n return this.createClipShapeControls();\n else if (undefined !== this._clipPlanes)\n return this.createClipPlanesControls();\n\n return false;\n }\n\n protected override clearControls(): void {\n this.iModel.selectionSet.remove(this._controlIds); // Remove any selected controls as they won't continue to be displayed...\n super.clearControls();\n }\n\n protected async modifyControls(hit: HitDetail, _ev: BeButtonEvent): Promise<boolean> {\n if (undefined === this._clip || hit.sourceId === this._clipId)\n return false;\n const saveQualifiers = IModelApp.toolAdmin.currentInputState.qualifiers;\n if (undefined !== this._clipShape) {\n const clipShapeModifyTool = new ViewClipShapeModifyTool(this, this._clip, this._clipView, hit.sourceId, this._controlIds, this._controls);\n this._suspendDecorator = await clipShapeModifyTool.run();\n } else if (undefined !== this._clipPlanes) {\n const clipPlanesModifyTool = new ViewClipPlanesModifyTool(this, this._clip, this._clipView, hit.sourceId, this._controlIds, this._controls);\n this._suspendDecorator = await clipPlanesModifyTool.run();\n }\n if (this._suspendDecorator)\n IModelApp.toolAdmin.currentInputState.qualifiers = saveQualifiers; // onInstallTool cleared qualifiers, preserve for \"modify all\" behavior when shift was held and drag started...\n return this._suspendDecorator;\n }\n\n public doClipPlaneNegate(index: number): boolean {\n if (undefined === this._clipPlanes)\n return false;\n\n if (index < 0 || index >= this._clipPlanes.planes.length)\n return false;\n\n const planeSet = ConvexClipPlaneSet.createEmpty();\n for (let i: number = 0; i < this._clipPlanes.planes.length; i++) {\n const plane = (i === index ? this._clipPlanes.planes[i].cloneNegated() : this._clipPlanes.planes[i]);\n planeSet.addPlaneToConvexSet(plane);\n }\n\n if (!ViewClipTool.doClipToConvexClipPlaneSet(this._clipView, planeSet))\n return false;\n\n this.onManipulatorEvent(EditManipulator.EventType.Accept);\n return true;\n }\n\n public doClipPlaneClear(index: number): boolean {\n if (undefined === this._clipPlanes)\n return false;\n\n if (index < 0 || index >= this._clipPlanes.planes.length)\n return false;\n\n if (1 === this._clipPlanes.planes.length) {\n if (!ViewClipTool.doClipClear(this._clipView))\n return false;\n if (undefined !== this._clipEventHandler)\n this._clipEventHandler.onClearClip(this._clipView);\n ViewClipDecoration.clear();\n return true;\n }\n\n const planeSet = ConvexClipPlaneSet.createEmpty();\n for (let i: number = 0; i < this._clipPlanes.planes.length; i++) {\n if (i === index)\n continue;\n const plane = this._clipPlanes.planes[i];\n planeSet.addPlaneToConvexSet(plane);\n }\n\n if (!ViewClipTool.doClipToConvexClipPlaneSet(this._clipView, planeSet))\n return false;\n\n this.onManipulatorEvent(EditManipulator.EventType.Accept);\n return true;\n }\n\n private getClipShapeFaceLoops(): GeometryQuery[] | undefined {\n if (undefined === this._clipShape || undefined === this._clipShapeExtents)\n return undefined;\n\n const shapePtsLo = ViewClipTool.getClipShapePoints(this._clipShape, this._clipShapeExtents.low);\n const shapePtsHi = ViewClipTool.getClipShapePoints(this._clipShape, this._clipShapeExtents.high);\n\n if (undefined !== this._clipShape.transformFromClip) {\n this._clipShape.transformFromClip.multiplyPoint3dArrayInPlace(shapePtsLo);\n this._clipShape.transformFromClip.multiplyPoint3dArrayInPlace(shapePtsHi);\n }\n\n const cap0 = Loop.createPolygon(shapePtsLo);\n const cap1 = Loop.createPolygon(shapePtsHi);\n const faces: GeometryQuery[] = [];\n\n faces.push(cap0);\n faces.push(cap1);\n\n for (let i: number = 0; i < shapePtsLo.length; i++) {\n const next = (i === shapePtsLo.length - 1 ? 0 : i + 1);\n const side = Loop.createPolygon([shapePtsLo[i].clone(), shapePtsLo[next].clone(), shapePtsHi[next].clone(), shapePtsHi[i].clone()]);\n faces.push(side);\n }\n\n return faces;\n }\n\n private getMatchingLoop(loops: GeometryQuery[], ray: Ray3d): GeometryQuery | undefined {\n for (const geom of loops) {\n const loopArea = this.getLoopCentroidAreaNormal(geom);\n if (undefined === loopArea)\n continue;\n\n if (!loopArea.direction.isParallelTo(ray.direction, true)) // don't assume outward normal for clip plane loops...\n continue;\n\n const plane = Plane3dByOriginAndUnitNormal.create(loopArea.origin, loopArea.direction);\n if (undefined === plane || !plane.isPointInPlane(ray.origin))\n continue;\n\n return geom;\n }\n return undefined;\n }\n\n private getLoopPreferredX(loop: GeometryQuery, outwardNormal: Vector3d): Vector3d | undefined {\n const localToWorld = FrameBuilder.createRightHandedFrame(undefined, loop);\n if (undefined === localToWorld)\n return undefined;\n\n let vectorX;\n const dirX = localToWorld.matrix.getColumn(0);\n const dirY = localToWorld.matrix.getColumn(1);\n const dirZ = localToWorld.matrix.getColumn(2);\n const unitX = Vector3d.unitX();\n const unitZ = Vector3d.unitZ();\n\n if (dirZ.isParallelTo(unitZ, true)) {\n // For clip in xy plane, choose direction closest to world x...\n vectorX = Math.abs(dirX.dotProduct(unitX)) > Math.abs(dirY.dotProduct(unitX)) ? dirX : dirY;\n\n if (vectorX.dotProduct(unitX) < 0.0)\n vectorX.negate(vectorX); // prefer positive x...\n } else {\n // For clip in arbitrary plane, choose direction closest to being in xy plane...\n let vectorY;\n const crossX = outwardNormal.unitCrossProduct(dirY);\n const crossY = outwardNormal.unitCrossProduct(dirX);\n\n if (crossX && crossY) {\n if (Math.abs(crossY.dotProduct(unitZ)) > Math.abs(crossX.dotProduct(unitZ))) {\n vectorX = dirX;\n vectorY = crossY;\n } else {\n vectorX = dirY;\n vectorY = crossX;\n }\n } else {\n vectorX = crossX ? dirY : dirX;\n }\n\n if (vectorY && vectorY.dotProduct(unitZ) < 0.0)\n vectorX.negate(vectorX); // prefer positive z...\n }\n\n return vectorX;\n }\n\n public doClipPlaneOrientView(index: number): boolean {\n if (index < 0 || index >= this._controlIds.length)\n return false;\n\n const vp = this._clipView;\n const anchorRay = ViewClipTool.getClipRayTransformed(this._controls[index].origin, this._controls[index].direction, undefined !== this._clipShape ? this._clipShape.transformFromClip : undefined);\n\n // Try to align x direction with clip plane loop...\n const loops = (undefined !== this._clipPlanesLoops ? this._clipPlanesLoops : this.getClipShapeFaceLoops());\n const loop = (loops ? (1 === loops.length ? loops[0] : this.getMatchingLoop(loops, anchorRay)) : undefined);\n const vectorX = (loop ? this.getLoopPreferredX(loop, anchorRay.direction) : undefined);\n\n const matrix = Matrix3d.createIdentity();\n if (undefined === vectorX || undefined === Matrix3d.createRigidFromColumns(anchorRay.direction, vectorX, AxisOrder.ZXY, matrix))\n Matrix3d.createRigidHeadsUp(anchorRay.direction, AxisOrder.ZXY, matrix);\n\n const targetMatrix = matrix.multiplyMatrixMatrix(vp.rotation);\n const rotateTransform = Transform.createFixedPointAndMatrix(anchorRay.origin, targetMatrix);\n const newFrustum = vp.getFrustum();\n newFrustum.multiply(rotateTransform);\n vp.view.setupFromFrustum(newFrustum);\n vp.synchWithView();\n vp.animateFrustumChange();\n return true;\n }\n\n private getWorldUpPlane(viewport: Viewport): Plane3dByOriginAndUnitNormal | undefined {\n const matrix = AccuDrawHintBuilder.getContextRotation(ContextRotationId.Top, viewport);\n if (undefined === matrix)\n return undefined;\n const worldUp = matrix.getColumn(2);\n const planePt = (viewport.isContextRotationRequired ? viewport.getAuxCoordOrigin() : (viewport.view.isSpatialView() ? viewport.view.iModel.globalOrigin : Point3d.createZero()));\n return Plane3dByOriginAndUnitNormal.create(planePt, worldUp);\n }\n\n private isAlignedToWorldUpPlane(plane: Plane3dByOriginAndUnitNormal, transformFromClip?: Transform): boolean {\n const normal = (undefined !== transformFromClip ? transformFromClip.multiplyVector(Vector3d.unitZ()) : Vector3d.unitZ());\n return plane.getNormalRef().isParallelTo(normal, true);\n }\n\n public isClipShapeAlignedWithWorldUp(extents?: Range1d): boolean {\n if (undefined === this._clipShape || undefined === this._clipShapeExtents)\n return false;\n\n const plane = this.getWorldUpPlane(this._clipView);\n if (undefined === plane || !this.isAlignedToWorldUpPlane(plane, this._clipShape.transformFromClip))\n return false;\n\n if (undefined === extents)\n return true;\n\n const zLow = Point3d.create(0.0, 0.0, this._clipShapeExtents.low);\n const zHigh = Point3d.create(0.0, 0.0, this._clipShapeExtents.high);\n\n if (undefined !== this._clipShape.transformFromClip) {\n this._clipShape.transformFromClip.multiplyPoint3d(zLow, zLow);\n this._clipShape.transformFromClip.multiplyPoint3d(zHigh, zHigh);\n }\n\n const lowDir = Vector3d.createStartEnd(plane.projectPointToPlane(zLow), zLow);\n const highDir = Vector3d.createStartEnd(plane.projectPointToPlane(zHigh), zHigh);\n let zLowWorld = lowDir.magnitude();\n let zHighWorld = highDir.magnitude();\n\n if (lowDir.dotProduct(plane.getNormalRef()) < 0.0)\n zLowWorld = -zLowWorld;\n if (highDir.dotProduct(plane.getNormalRef()) < 0.0)\n zHighWorld = -zHighWorld;\n\n Range1d.createXX(zLowWorld, zHighWorld, extents);\n return true;\n }\n\n public doClipShapeSetZExtents(extents: Range1d): boolean {\n if (extents.low > extents.high)\n return false;\n if (undefined === this._clipShape)\n return false;\n const plane = this.getWorldUpPlane(this._clipView);\n if (undefined === plane || !this.isAlignedToWorldUpPlane(plane, this._clipShape.transformFromClip))\n return false;\n\n const zLow = plane.getOriginRef().plusScaled(plane.getNormalRef(), extents.low);\n const zHigh = plane.getOriginRef().plusScaled(plane.getNormalRef(), extents.high);\n\n if (undefined !== this._clipShape.transformToClip) {\n this._clipShape.transformToClip.multiplyPoint3d(zLow, zLow);\n this._clipShape.transformToClip.multiplyPoint3d(zHigh, zHigh);\n }\n\n const reversed = (zLow.z > zHigh.z);\n const shape = ClipShape.createFrom(this._clipShape);\n shape.initSecondaryProps(shape.isMask, reversed ? zHigh.z : zLow.z, reversed ? zLow.z : zHigh.z, this._clipShape.transformFromClip);\n\n const clip = ClipVector.createEmpty();\n clip.appendReference(shape);\n\n if (!ViewClipTool.setViewClip(this._clipView, clip))\n return false;\n\n this.onManipulatorEvent(EditManipulator.EventType.Accept);\n return true;\n }\n\n protected override async onRightClick(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this._clipEventHandler)\n return EventHandled.No;\n return (this._clipEventHandler.onRightClick(hit, ev) ? EventHandled.Yes : EventHandled.No);\n }\n\n protected override async onTouchTap(hit: HitDetail, ev: BeButtonEvent): Promise<EventHandled> { return (hit.sourceId === this._clipId ? EventHandled.No : super.onTouchTap(hit, ev)); }\n\n public override onManipulatorEvent(eventType: EditManipulator.EventType): void {\n this._suspendDecorator = false;\n super.onManipulatorEvent(eventType);\n if (EditManipulator.EventType.Accept === eventType && undefined !== this._clipEventHandler)\n this._clipEventHandler.onModifyClip(this._clipView);\n }\n\n public testDecorationHit(id: string): boolean { return (id === this._clipId || this._controlIds.includes(id)); }\n public async getDecorationToolTip(hit: HitDetail): Promise<HTMLElement | string> {\n if (hit.sourceId === this._clipId)\n return CoreTools.translate(\"ViewClip.Message.Clip\");\n return CoreTools.translate(\"ViewClip.Message.ModifyClip\");\n }\n protected override updateDecorationListener(_add: boolean): void { super.updateDecorationListener(undefined !== this._clipId); } // Decorator isn't just for resize controls...\n\n public override decorate(context: DecorateContext): void {\n if (this._suspendDecorator)\n return;\n\n if (undefined === this._clipId || undefined === this._clip)\n return;\n\n const vp = context.viewport;\n if (this._clipView !== vp)\n return;\n\n if (undefined !== this._clipShape) {\n ViewClipTool.drawClipShape(context, this._clipShape, this._clipShapeExtents ?? Range1d.createNull(), EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, vp), 3, this._clipId);\n } else if (undefined !== this._clipPlanes) {\n if (undefined !== this._clipPlanesLoops)\n ViewClipTool.drawClipPlanesLoops(context, this._clipPlanesLoops, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, vp), 3, false, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(0, 255, 255, 225), vp), this._clipId);\n if (undefined !== this._clipPlanesLoopsNoncontributing)\n ViewClipTool.drawClipPlanesLoops(context, this._clipPlanesLoopsNoncontributing, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.red, vp), 1, true);\n } else if (undefined !== this._clipPlanesLoops) {\n ViewClipTool.drawClipPlanesLoops(context, this._clipPlanesLoops, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.white, vp), 3, false, EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(0, 255, 255, 225), vp), this._clipId);\n }\n\n if (!this._isActive)\n return;\n\n const outlineColor = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(0, 0, 0, 50), vp);\n const fillVisColor = EditManipulator.HandleUtils.adjustForBackgroundColor(ColorDef.from(150, 250, 200, 175), vp);\n const fillHidColor = fillVisColor.withAlpha(225);\n const fillSelColor = fillVisColor.inverse().withAlpha(75);\n const shapePts = EditManipulator.HandleUtils.getArrowShape(0.0, 0.15, 0.55, 1.0, 0.3, 0.5, 0.1);\n\n for (let iFace = 0; iFace < this._controlIds.length; iFace++) {\n const sizeInches = this._controls[iFace].sizeInches;\n if (0.0 === sizeInches)\n continue;\n\n // For single plane clip, choose location for handle that's visible in the current view...\n if (1 === this._controls.length && undefined !== this._clipPlanes && undefined !== this._clipPlanesLoops && this._clipPlanesLoops.length > 0) {\n if (!vp.isPointVisibleXY(this._controls[iFace].origin, CoordSystem.World, 0.05)) {\n const geom = this._clipPlanesLoops[0];\n if (geom instanceof Loop && geom.children.length > 0) {\n const child = geom.getChild(0);\n if (child instanceof LineString3d) {\n const work = new GrowableXYZArray();\n const finalPoints = new GrowableXYZArray();\n const lineString = child.points;\n const convexSet = vp.getFrustum().getRangePlanes(false, false, 0);\n convexSet.polygonClip(lineString, finalPoints, work);\n if (finalPoints.length > 0) {\n const loopArea = PolygonOps.centroidAreaNormal(finalPoints.getPoint3dArray());\n if (undefined !== loopArea) {\n if (undefined === this._controls[iFace].floatingOrigin)\n this._controls[iFace].floatingOrigin = this._controls[iFace].origin.clone();\n this._controls[iFace].origin.setFrom(loopArea.origin);\n }\n }\n }\n }\n } else {\n const floatingOrigin = this._controls[iFace].floatingOrigin;\n if (undefined !== floatingOrigin && vp.isPointVisibleXY(floatingOrigin, CoordSystem.World, 0.1)) {\n this._controls[iFace].origin.setFrom(this._controls[iFace].floatingOrigin);\n this._controls[iFace].floatingOrigin = undefined;\n }\n }\n }\n\n const anchorRay = ViewClipTool.getClipRayTransformed(this._controls[iFace].origin, this._controls[iFace].direction, undefined !== this._clipShape ? this._clipShape.transformFromClip : undefined);\n const transform = EditManipulator.HandleUtils.getArrowTransform(vp, anchorRay.origin, anchorRay.direction, sizeInches);\n if (undefined === transform)\n continue;\n\n // deep copy because we're using a builder transform w/addLineString...\n const visPts = shapePts.map((pt) => pt.clone());\n const hidPts = shapePts.map((pt) => pt.clone());\n\n const arrowVisBuilder = context.createGraphicBuilder(GraphicType.WorldOverlay, transform, this._controlIds[iFace]);\n const arrowHidBuilder = context.createGraphicBuilder(GraphicType.WorldDecoration, transform);\n const isSelected = this.iModel.selectionSet.elements.has(this._controlIds[iFace]);\n\n let outlineColorOvr = this._controls[iFace].outline;\n if (undefined !== outlineColorOvr) {\n outlineColorOvr = EditManipulator.HandleUtils.adjustForBackgroundColor(outlineColorOvr, vp);\n outlineColorOvr = outlineColorOvr.withAlpha(outlineColor.getAlpha());\n } else {\n outlineColorOvr = outlineColor;\n }\n\n let fillVisColorOvr = this._controls[iFace].fill;\n let fillHidColorOvr = fillHidColor;\n let fillSelColorOvr = fillSelColor;\n if (undefined !== fillVisColorOvr) {\n fillVisColorOvr = EditManipulator.HandleUtils.adjustForBackgroundColor(fillVisColorOvr, vp);\n fillVisColorOvr = fillVisColorOvr.withAlpha(fillVisColor.getAlpha());\n fillHidColorOvr = fillVisColorOvr.withAlpha(fillHidColor.getAlpha());\n fillSelColorOvr = fillVisColorOvr.inverse().withAlpha(fillSelColor.getAlpha());\n } else {\n fillVisColorOvr = fillVisColor;\n }\n\n arrowVisBuilder.setSymbology(outlineColorOvr, outlineColorOvr, isSelected ? 4 : 2);\n arrowVisBuilder.addLineString(visPts);\n arrowVisBuilder.setBlankingFill(isSelected ? fillSelColorOvr : fillVisColorOvr);\n arrowVisBuilder.addShape(visPts);\n context.addDecorationFromBuilder(arrowVisBuilder);\n\n arrowHidBuilder.setSymbology(fillHidColorOvr, fillHidColorOvr, 1);\n arrowHidBuilder.addShape(hidPts);\n context.addDecorationFromBuilder(arrowHidBuilder);\n }\n }\n\n public static get(vp: ScreenViewport): ViewClipDecoration | undefined {\n if (undefined === ViewClipDecoration._decorator || vp !== ViewClipDecoration._decorator._clipView)\n return undefined;\n return ViewClipDecoration._decorator;\n }\n\n public static create(vp: ScreenViewport, clipEventHandler?: ViewClipEventHandler): string | undefined {\n if (undefined !== ViewClipDecoration._decorator)\n ViewClipDecoration.clear();\n if (!ViewClipTool.hasClip(vp))\n return undefined;\n ViewClipDecoration._decorator = new ViewClipDecoration(vp, clipEventHandler);\n return ViewClipDecoration._decorator.clipId;\n }\n\n public static clear(): void {\n if (undefined === ViewClipDecoration._decorator)\n return;\n ViewClipDecoration._decorator.stop();\n ViewClipDecoration._decorator = undefined;\n }\n\n public static async toggle(vp: ScreenViewport, clipEventHandler?: ViewClipEventHandler): Promise<string | undefined> {\n let clipId: string | undefined;\n if (undefined === ViewClipDecoration._decorator)\n clipId = ViewClipDecoration.create(vp, clipEventHandler);\n else\n ViewClipDecoration.clear();\n await IModelApp.toolAdmin.startDefaultTool();\n return clipId;\n }\n}\n\n/** Event types for ViewClipDecorationProvider.onActiveClipChanged \\\n * @public\n * @extensions\n */\nexport enum ClipEventType { New, NewPlane, Modify, Clear }\n\n/** An implementation of ViewClipEventHandler that responds to new clips by presenting clip modification handles\n * @public @extensions\n */\nexport class ViewClipDecorationProvider implements ViewClipEventHandler {\n private static _provider?: ViewClipDecorationProvider;\n public selectDecorationOnCreate = true;\n public clearDecorationOnDeselect = true;\n\n /** Called when the active clip for a view is changed */\n public readonly onActiveClipChanged = new BeEvent<(viewport: Viewport, eventType: ClipEventType, provider: ViewClipDecorationProvider) => void>();\n\n /** Called on a right click over the clip geometry or clip modify handle. ViewClipDecoration provides methods for the following possible menu actions:\n * For ClipPlanes (undefined !== clipPlaneSet): Flip (doClipPlaneNegate), Clear (doClipPlaneClear), and Orient View (doClipPlaneOrientView)\n * For ClipShapes (undefined === clipPlaneSet): Orient View (doClipPlaneOrientView) and input fields to set world zLow/zHigh (doClipShapeSetZExtents provided isClipShapeAlignedWithWorldUp returns true)\n */\n public readonly onActiveClipRightClick = new BeEvent<(hit: HitDetail, ev: BeButtonEvent, provider: ViewClipDecorationProvider) => void>();\n\n public selectOnCreate(): boolean { return this.selectDecorationOnCreate; }\n public clearOnDeselect(): boolean { return this.clearDecorationOnDeselect; }\n\n public onNewClip(viewport: ScreenViewport): void {\n ViewClipDecoration.create(viewport, this);\n this.onActiveClipChanged.raiseEvent(viewport, ClipEventType.New, this);\n }\n\n public onNewClipPlane(viewport: ScreenViewport): void {\n ViewClipDecoration.create(viewport, this);\n this.onActiveClipChanged.raiseEvent(viewport, ClipEventType.NewPlane, this);\n }\n\n public onModifyClip(viewport: ScreenViewport): void {\n this.onActiveClipChanged.raiseEvent(viewport, ClipEventType.Modify, this);\n }\n\n public onClearClip(viewport: ScreenViewport): void {\n ViewClipDecoration.clear();\n this.onActiveClipChanged.raiseEvent(viewport, ClipEventType.Clear, this);\n }\n\n public onRightClick(hit: HitDetail, ev: BeButtonEvent): boolean {\n const decoration = (undefined !== ev.viewport ? ViewClipDecoration.get(ev.viewport) : undefined);\n if (undefined === decoration)\n return false;\n if (0 === this.onActiveClipRightClick.numberOfListeners)\n return decoration.doClipPlaneNegate(decoration.getControlIndex(hit.sourceId));\n this.onActiveClipRightClick.raiseEvent(hit, ev, this);\n return true;\n }\n\n public showDecoration(vp: ScreenViewport): void { ViewClipDecoration.create(vp, this); }\n public hideDecoration(): void { ViewClipDecoration.clear(); }\n public async toggleDecoration(vp: ScreenViewport) { return ViewClipDecoration.toggle(vp, this); }\n public isDecorationActive(vp: ScreenViewport): boolean { return (undefined !== ViewClipDecoration.get(vp)); }\n\n public static create(): ViewClipDecorationProvider {\n if (undefined === ViewClipDecorationProvider._provider) {\n ViewClipDecoration.clear();\n ViewClipDecorationProvider._provider = new ViewClipDecorationProvider();\n }\n return ViewClipDecorationProvider._provider;\n }\n\n public static clear(): void {\n if (undefined === ViewClipDecorationProvider._provider)\n return;\n ViewClipDecoration.clear();\n ViewClipDecorationProvider._provider = undefined;\n }\n}\n"]}
|