@itwin/core-frontend 5.0.0-dev.4 → 5.0.0-dev.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -1
- package/lib/cjs/AccuDraw.d.ts +63 -8
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +118 -16
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/ApproximateTerrainHeights.js +1 -1
- package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
- package/lib/cjs/BackgroundMapGeometry.js +5 -5
- package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
- package/lib/cjs/BriefcaseTxns.d.ts +2 -2
- package/lib/cjs/BriefcaseTxns.d.ts.map +1 -1
- package/lib/cjs/BriefcaseTxns.js.map +1 -1
- package/lib/cjs/DrawingViewState.js +9 -9
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/GraphicalEditingScope.js +5 -5
- package/lib/cjs/GraphicalEditingScope.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +62 -64
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +4 -1
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +24 -21
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IModelRoutingContext.d.ts +0 -3
- package/lib/cjs/IModelRoutingContext.d.ts.map +1 -1
- package/lib/cjs/IModelRoutingContext.js +5 -4
- package/lib/cjs/IModelRoutingContext.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +4 -3
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +1 -1
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/NativeApp.js +15 -17
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NativeAppLogger.js +1 -1
- package/lib/cjs/NativeAppLogger.js.map +1 -1
- package/lib/cjs/NoRenderApp.js +1 -1
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +6 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +14 -2
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/cjs/SelectionSet.d.ts +84 -35
- package/lib/cjs/SelectionSet.d.ts.map +1 -1
- package/lib/cjs/SelectionSet.js +419 -163
- package/lib/cjs/SelectionSet.js.map +1 -1
- package/lib/cjs/Sprites.js +1 -1
- package/lib/cjs/Sprites.js.map +1 -1
- package/lib/cjs/ViewCreator2d.js +3 -3
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewGlobalLocation.js +5 -5
- package/lib/cjs/ViewGlobalLocation.js.map +1 -1
- package/lib/cjs/ViewState.js +2 -2
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/ViewingSpace.js +9 -9
- package/lib/cjs/ViewingSpace.js.map +1 -1
- package/lib/cjs/Viewport.js +41 -41
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/imdl/ImdlSchema.d.ts +4 -0
- package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.js +80 -7
- package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/cjs/common/internal/render/DisplayParams.js +1 -1
- package/lib/cjs/common/internal/render/DisplayParams.js.map +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
- package/lib/cjs/common/internal/render/MeshPrimitives.js +1 -1
- package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
- package/lib/cjs/internal/render/PrimitiveBuilder.js +1 -1
- package/lib/cjs/internal/render/PrimitiveBuilder.js.map +1 -1
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +1 -1
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -1
- package/lib/cjs/render/MockRender.js +3 -3
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/render/webgl/BatchState.js +1 -1
- package/lib/cjs/render/webgl/BatchState.js.map +1 -1
- package/lib/cjs/render/webgl/ColorInfo.js +2 -2
- package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
- package/lib/cjs/render/webgl/Diagnostics.js +4 -4
- package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +4 -4
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/IModelFrameLifecycle.js +4 -4
- package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +3 -3
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/Material.js +4 -4
- package/lib/cjs/render/webgl/Material.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/RenderState.js +1 -1
- package/lib/cjs/render/webgl/RenderState.js.map +1 -1
- package/lib/cjs/render/webgl/Target.js +1 -1
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +39 -39
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/cjs/render/webgl/Texture.js +3 -3
- package/lib/cjs/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/tile/CesiumAssetProvider.js +1 -1
- package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +6 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +79 -2
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/ImdlParser.js +2 -2
- package/lib/cjs/tile/ImdlParser.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +1 -1
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/MeshoptCompression.d.ts +9 -0
- package/lib/cjs/tile/MeshoptCompression.d.ts.map +1 -1
- package/lib/cjs/tile/MeshoptCompression.js +98 -66
- package/lib/cjs/tile/MeshoptCompression.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +6 -6
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +5 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +2 -2
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +7 -7
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +8 -8
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileAvailability.js +1 -1
- package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +9 -9
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +2 -2
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.d.ts +1 -0
- package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.js +22 -21
- package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +40 -40
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/cjs/tools/EditManipulator.js +2 -2
- package/lib/cjs/tools/EditManipulator.js.map +1 -1
- package/lib/cjs/tools/ElementSetTool.d.ts.map +1 -1
- package/lib/cjs/tools/ElementSetTool.js +11 -4
- package/lib/cjs/tools/ElementSetTool.js.map +1 -1
- package/lib/cjs/tools/IdleTool.js +2 -2
- package/lib/cjs/tools/IdleTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.d.ts.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +39 -39
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/cjs/tools/SelectTool.js +7 -7
- package/lib/cjs/tools/SelectTool.js.map +1 -1
- package/lib/cjs/tools/Tool.js +10 -10
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +36 -24
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ToolAssistance.js +19 -19
- package/lib/cjs/tools/ToolAssistance.js.map +1 -1
- package/lib/cjs/tools/ToolSettings.js +63 -63
- package/lib/cjs/tools/ToolSettings.js.map +1 -1
- package/lib/cjs/tools/ViewTool.js +37 -37
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/cjs/workers/ImdlParser/Worker.js +2 -2
- package/lib/cjs/workers/ImdlParser/Worker.js.map +1 -1
- package/lib/esm/AccuDraw.d.ts +63 -8
- package/lib/esm/AccuDraw.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +119 -17
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/ApproximateTerrainHeights.js +1 -1
- package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
- package/lib/esm/BackgroundMapGeometry.js +5 -5
- package/lib/esm/BackgroundMapGeometry.js.map +1 -1
- package/lib/esm/BriefcaseTxns.d.ts +2 -2
- package/lib/esm/BriefcaseTxns.d.ts.map +1 -1
- package/lib/esm/BriefcaseTxns.js.map +1 -1
- package/lib/esm/DrawingViewState.js +9 -9
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/GraphicalEditingScope.js +5 -5
- package/lib/esm/GraphicalEditingScope.js.map +1 -1
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +63 -65
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +4 -1
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +20 -17
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IModelRoutingContext.d.ts +0 -3
- package/lib/esm/IModelRoutingContext.d.ts.map +1 -1
- package/lib/esm/IModelRoutingContext.js +3 -2
- package/lib/esm/IModelRoutingContext.js.map +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +4 -3
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +1 -1
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/NativeApp.js +15 -17
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NativeAppLogger.js +1 -1
- package/lib/esm/NativeAppLogger.js.map +1 -1
- package/lib/esm/NoRenderApp.js +1 -1
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +6 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js +14 -2
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/esm/SelectionSet.d.ts +84 -35
- package/lib/esm/SelectionSet.d.ts.map +1 -1
- package/lib/esm/SelectionSet.js +418 -162
- package/lib/esm/SelectionSet.js.map +1 -1
- package/lib/esm/Sprites.js +1 -1
- package/lib/esm/Sprites.js.map +1 -1
- package/lib/esm/ViewCreator2d.js +3 -3
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewGlobalLocation.js +5 -5
- package/lib/esm/ViewGlobalLocation.js.map +1 -1
- package/lib/esm/ViewState.js +2 -2
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/ViewingSpace.js +9 -9
- package/lib/esm/ViewingSpace.js.map +1 -1
- package/lib/esm/Viewport.js +41 -41
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/imdl/ImdlSchema.d.ts +4 -0
- package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
- package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.js +80 -7
- package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/esm/common/internal/render/DisplayParams.js +1 -1
- package/lib/esm/common/internal/render/DisplayParams.js.map +1 -1
- package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
- package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
- package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
- package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
- package/lib/esm/common/internal/render/MeshPrimitives.js +2 -2
- package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
- package/lib/esm/internal/render/PrimitiveBuilder.js +1 -1
- package/lib/esm/internal/render/PrimitiveBuilder.js.map +1 -1
- package/lib/esm/internal/render/RenderInstancesParamsImpl.js +1 -1
- package/lib/esm/internal/render/RenderInstancesParamsImpl.js.map +1 -1
- package/lib/esm/render/MockRender.js +3 -3
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/render/webgl/BatchState.js +1 -1
- package/lib/esm/render/webgl/BatchState.js.map +1 -1
- package/lib/esm/render/webgl/ColorInfo.js +2 -2
- package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
- package/lib/esm/render/webgl/Diagnostics.js +4 -4
- package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +4 -4
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/IModelFrameLifecycle.js +4 -4
- package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.js +3 -3
- package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/Material.js +4 -4
- package/lib/esm/render/webgl/Material.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/RenderState.js +1 -1
- package/lib/esm/render/webgl/RenderState.js.map +1 -1
- package/lib/esm/render/webgl/Target.js +1 -1
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/Technique.js +39 -39
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/esm/render/webgl/Texture.js +3 -3
- package/lib/esm/render/webgl/Texture.js.map +1 -1
- package/lib/esm/tile/CesiumAssetProvider.js +1 -1
- package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +6 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +79 -2
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/ImdlParser.js +2 -2
- package/lib/esm/tile/ImdlParser.js.map +1 -1
- package/lib/esm/tile/ImdlReader.js +1 -1
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/MeshoptCompression.d.ts +9 -0
- package/lib/esm/tile/MeshoptCompression.d.ts.map +1 -1
- package/lib/esm/tile/MeshoptCompression.js +98 -44
- package/lib/esm/tile/MeshoptCompression.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +6 -6
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +5 -2
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +2 -2
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +7 -7
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapTile.js +8 -8
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileAvailability.js +1 -1
- package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +9 -9
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +2 -2
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/AccuDrawTool.d.ts +1 -0
- package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawTool.js +22 -21
- package/lib/esm/tools/AccuDrawTool.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +40 -40
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/tools/EditManipulator.js +2 -2
- package/lib/esm/tools/EditManipulator.js.map +1 -1
- package/lib/esm/tools/ElementSetTool.d.ts.map +1 -1
- package/lib/esm/tools/ElementSetTool.js +11 -4
- package/lib/esm/tools/ElementSetTool.js.map +1 -1
- package/lib/esm/tools/IdleTool.js +2 -2
- package/lib/esm/tools/IdleTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.d.ts.map +1 -1
- package/lib/esm/tools/MeasureTool.js +40 -40
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/esm/tools/SelectTool.js +7 -7
- package/lib/esm/tools/SelectTool.js.map +1 -1
- package/lib/esm/tools/Tool.js +10 -10
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +36 -24
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ToolAssistance.js +19 -19
- package/lib/esm/tools/ToolAssistance.js.map +1 -1
- package/lib/esm/tools/ToolSettings.js +63 -63
- package/lib/esm/tools/ToolSettings.js.map +1 -1
- package/lib/esm/tools/ViewTool.js +37 -37
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/lib/esm/workers/ImdlParser/Worker.js +2 -2
- package/lib/esm/workers/ImdlParser/Worker.js.map +1 -1
- package/lib/public/locales/en/CoreTools.json +1 -0
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +20 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeasureTool.js","sourceRoot":"","sources":["../../../src/tools/MeasureTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Measure\r\n */\r\n\r\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n AxisOrder, IModelJson, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, PointString3d, PolygonOps, Vector3d, XAndY, XYAndZ,\r\n} from \"@itwin/core-geometry\";\r\nimport {\r\n BentleyStatus, ColorDef, GeometryStreamProps, LinePixels, MassPropertiesOperation, MassPropertiesRequestProps, MassPropertiesResponseProps,\r\n} from \"@itwin/core-common\";\r\nimport { DialogItem, DialogItemValue, DialogPropertySyncItem, PropertyDescription } from \"@itwin/appui-abstract\";\r\nimport { AccuDrawHintBuilder, ContextRotationId } from \"../AccuDraw\";\r\nimport { LocateFilterStatus, LocateResponse } from \"../ElementLocateManager\";\r\nimport { HitDetail, HitGeomType } from \"../HitDetail\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { Marker } from \"../Marker\";\r\nimport { NotifyMessageDetails, OutputMessagePriority, OutputMessageType } from \"../NotificationManager\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\nimport { CanvasDecoration } from \"../render/CanvasDecoration\";\r\nimport { DecorateContext } from \"../ViewContext\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { PrimitiveTool } from \"./PrimitiveTool\";\r\nimport { BeButtonEvent, BeModifierKeys, CoreTools, EventHandled, InputSource } from \"./Tool\";\r\nimport { ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection } from \"./ToolAssistance\";\r\nimport { GraphicType } from \"../common/render/GraphicType\";\r\n\r\nfunction translateBold(key: string) {\r\n return `<b>${CoreTools.translate(`Measure.Labels.${key}`)}:</b> `;\r\n}\r\n\r\n/** @internal */\r\nclass MeasureLabel implements CanvasDecoration {\r\n public worldLocation = new Point3d();\r\n public position = new Point3d();\r\n public label: string;\r\n\r\n constructor(worldLocation: XYAndZ, label: string) {\r\n this.worldLocation.setFrom(worldLocation);\r\n this.label = label;\r\n }\r\n\r\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\r\n ctx.font = \"16px sans-serif\";\r\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\r\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"white\";\r\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\r\n ctx.shadowColor = \"black\";\r\n ctx.shadowBlur = 10;\r\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n\r\n ctx.fillStyle = \"white\";\r\n ctx.shadowBlur = 0;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(this.label, 0, 0);\r\n }\r\n\r\n public setPosition(vp: Viewport): boolean {\r\n vp.worldToView(this.worldLocation, this.position);\r\n this.position.y -= Math.floor(vp.pixelsFromInches(0.44)) + 0.5; // Offset from snap location...\r\n return vp.viewRect.containsPoint(this.position);\r\n }\r\n\r\n public addDecoration(context: DecorateContext) {\r\n if (this.setPosition(context.viewport))\r\n context.addCanvasDecoration(this);\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass MeasureMarker extends Marker {\r\n public isSelected: boolean = false;\r\n constructor(label: string, title: HTMLElement, worldLocation: XYAndZ, size: XAndY) {\r\n super(worldLocation, size);\r\n\r\n const markerDrawFunc = (ctx: CanvasRenderingContext2D) => {\r\n ctx.beginPath();\r\n ctx.arc(0, 0, this.size.x * 0.5, 0, 2 * Math.PI);\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = \"black\";\r\n const hilite = this.isSelected && this._hiliteColor ? this._hiliteColor.colors : undefined;\r\n ctx.fillStyle = undefined !== hilite ? `rgba(${hilite.r | 0},${hilite.g | 0},${hilite.b | 0}, 0.5)` : \"rgba(255,255,255,.5)\";\r\n ctx.fill();\r\n ctx.stroke();\r\n };\r\n\r\n this.drawFunc = markerDrawFunc;\r\n this.title = title;\r\n this.label = label;\r\n this.labelFont = \"16px sans-serif\";\r\n this.labelColor = \"black\";\r\n this.labelMaxWidth = this.size.x * 0.75;\r\n this.labelOffset = { x: 0, y: -1 };\r\n }\r\n\r\n public override onMouseButton(_ev: BeButtonEvent): boolean { return true; } // Never forward event to active tool...\r\n\r\n public override onMouseEnter(ev: BeButtonEvent) {\r\n super.onMouseEnter(ev);\r\n if (this.title && InputSource.Touch === ev.inputSource && ev.viewport)\r\n ev.viewport.openToolTip(this.title, ev.viewPoint, this.tooltipOptions);\r\n }\r\n\r\n public override onMouseLeave() {\r\n super.onMouseLeave();\r\n if (this.title)\r\n IModelApp.notifications.clearToolTip(); // Clear tool tip from tap since we won't get a motion event...\r\n }\r\n}\r\n\r\n/** @internal */\r\ninterface Location { point: Point3d, adjustedPoint: Point3d, refAxes: Matrix3d }\r\n/** @internal */\r\ninterface Segment { distance: number, slope: number, start: Point3d, end: Point3d, delta: Vector3d, adjustedStart: Point3d, adjustedEnd: Point3d, adjustedDelta: Vector3d, refAxes: Matrix3d, marker: MeasureMarker }\r\n\r\n/** @internal */\r\nfunction adjustPoint(ev: BeButtonEvent, segments?: Array<Segment>, locations?: Array<Location>): Point3d {\r\n // If the point was from a hit we must transform it by the display transform of what got hit.\r\n const hit = IModelApp.accuSnap.currHit;\r\n if (!hit || !ev.viewport || !hit.modelId)\r\n return ev.point;\r\n\r\n if (\"0\" !== hit.modelId) {\r\n const transform = ev.viewport.view.computeDisplayTransform({ modelId: hit.modelId, elementId: hit.sourceId });\r\n return transform?.multiplyInversePoint3d(ev.point) ?? ev.point;\r\n }\r\n\r\n // Must have snapped to a decoration, so look through previous any segments & locations for a match to get an adjusted point.\r\n if (segments) {\r\n for (const seg of segments) {\r\n if (seg.start.isExactEqual(ev.point))\r\n return seg.adjustedStart.clone();\r\n\r\n if (seg.end.isExactEqual(ev.point))\r\n return seg.adjustedEnd.clone();\r\n }\r\n }\r\n\r\n if (locations)\r\n for (const loc of locations)\r\n if (loc.point.isExactEqual(ev.point))\r\n return loc.adjustedPoint.clone();\r\n\r\n return ev.point;\r\n}\r\n\r\n/** Report distance between 2 points using current quantity formatter for length.\r\n * @public\r\n */\r\nexport class MeasureDistanceTool extends PrimitiveTool {\r\n public static override toolId = \"Measure.Distance\";\r\n public static override iconSpec = \"icon-measure-distance\";\r\n /** @internal */\r\n protected readonly _locationData = new Array<Location>();\r\n /** @internal */\r\n protected readonly _acceptedSegments = new Array<Segment>();\r\n /** @internal */\r\n protected _totalDistance: number = 0.0;\r\n /** @internal */\r\n protected _totalDistanceMarker?: MeasureLabel;\r\n /** @internal */\r\n protected _snapGeomId?: string;\r\n /** @internal */\r\n protected _lastMotionPt?: Point3d;\r\n /** @internal */\r\n protected _lastMotionAdjustedPt?: Point3d;\r\n\r\n /** @internal */\r\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\r\n /** @internal */\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n /** @internal */\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\r\n /** @internal */\r\n public override requireWriteableTarget(): boolean { return false; }\r\n /** @internal */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n\r\n /** @internal */\r\n protected showPrompt(): void {\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(0 === this._locationData.length ? \"Measure.Distance.Prompts.FirstPoint\" : \"Measure.Distance.Prompts.NextPoint\"));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n if (0 === this._locationData.length) {\r\n if (this._acceptedSegments.length > 0) {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n } else {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Cancel\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Cancel\"), false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** @internal */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n const hints = new AccuDrawHintBuilder();\r\n hints.enableSmartRotation = true;\r\n hints.setModeRectangular();\r\n hints.sendHints(false);\r\n IModelApp.toolAdmin.setCursor(0 === this._locationData.length ? IModelApp.viewManager.crossHairCursor : IModelApp.viewManager.dynamicsCursor);\r\n this.showPrompt();\r\n }\r\n\r\n /** @internal */\r\n public override testDecorationHit(id: string): boolean { return id === this._snapGeomId; }\r\n\r\n /** @internal */\r\n protected getSnapPoints(): Point3d[] | undefined {\r\n if (this._acceptedSegments.length < 1 && this._locationData.length < 2)\r\n return undefined;\r\n\r\n const snapPoints: Point3d[] = [];\r\n for (const seg of this._acceptedSegments) {\r\n if (0 === snapPoints.length || !seg.start.isAlmostEqual(snapPoints[snapPoints.length - 1]))\r\n snapPoints.push(seg.start);\r\n if (!seg.end.isAlmostEqual(snapPoints[0]))\r\n snapPoints.push(seg.end);\r\n }\r\n\r\n if (this._locationData.length > 1)\r\n for (const loc of this._locationData)\r\n snapPoints.push(loc.point);\r\n return snapPoints;\r\n }\r\n\r\n /** @internal */\r\n public override getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined {\r\n const snapPoints = this.getSnapPoints();\r\n if (undefined === snapPoints)\r\n return undefined;\r\n const geomData = IModelJson.Writer.toIModelJson(PointString3d.create(snapPoints));\r\n return (undefined === geomData ? undefined : [geomData]);\r\n }\r\n\r\n /** @internal */\r\n protected displayDynamicDistance(context: DecorateContext, points: Point3d[], adjustedPoints: Point3d[]): void {\r\n let totalDistance = 0.0;\r\n for (let i = 0; i < adjustedPoints.length - 1; i++)\r\n totalDistance += adjustedPoints[i].distance(adjustedPoints[i + 1]);\r\n if (0.0 === totalDistance)\r\n return;\r\n\r\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === formatterSpec)\r\n return;\r\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(totalDistance, formatterSpec);\r\n const distDyn = new MeasureLabel(points[points.length - 1], formattedTotalDistance);\r\n distDyn.addDecoration(context);\r\n }\r\n\r\n /** @internal */\r\n protected displayDelta(context: DecorateContext, seg: any): void {\r\n const xVec = new Vector3d(seg.delta.x, 0.0, 0.0);\r\n const yVec = new Vector3d(0.0, seg.delta.y, 0.0);\r\n const zVec = new Vector3d(0.0, 0.0, seg.delta.z);\r\n\r\n seg.refAxes.multiplyVectorInPlace(xVec);\r\n seg.refAxes.multiplyVectorInPlace(yVec);\r\n seg.refAxes.multiplyVectorInPlace(zVec);\r\n\r\n const builderAxes = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n let basePt = seg.start.clone();\r\n\r\n if (xVec.magnitude() > 1.0e-5) {\r\n const segPoints: Point3d[] = [];\r\n segPoints.push(basePt);\r\n basePt = basePt.plus(xVec);\r\n segPoints.push(basePt);\r\n const colorX = ColorDef.red.adjustedForContrast(context.viewport.view.backgroundColor);\r\n builderAxes.setSymbology(colorX, ColorDef.black, 5);\r\n builderAxes.addLineString(segPoints);\r\n }\r\n\r\n if (yVec.magnitude() > 1.0e-5) {\r\n const segPoints: Point3d[] = [];\r\n segPoints.push(basePt);\r\n basePt = basePt.plus(yVec);\r\n segPoints.push(basePt);\r\n const colorY = ColorDef.green.adjustedForContrast(context.viewport.view.backgroundColor);\r\n builderAxes.setSymbology(colorY, ColorDef.black, 5);\r\n builderAxes.addLineString(segPoints);\r\n }\r\n\r\n if (zVec.magnitude() > 1.0e-5) {\r\n const segPoints: Point3d[] = [];\r\n segPoints.push(basePt);\r\n basePt = basePt.plus(zVec);\r\n segPoints.push(basePt);\r\n const colorZ = ColorDef.blue.adjustedForContrast(context.viewport.view.backgroundColor);\r\n builderAxes.setSymbology(colorZ, ColorDef.black, 5);\r\n builderAxes.addLineString(segPoints);\r\n }\r\n\r\n const segGlow = context.viewport.hilite.color.withAlpha(50);\r\n builderAxes.setSymbology(segGlow, ColorDef.black, 8);\r\n builderAxes.addLineString([seg.start, seg.end]);\r\n\r\n context.addDecorationFromBuilder(builderAxes);\r\n }\r\n\r\n /** @internal */\r\n protected createDecorations(context: DecorateContext, isSuspended: boolean): void {\r\n if (!this.isCompatibleViewport(context.viewport, false))\r\n return;\r\n\r\n if (!isSuspended && this._locationData.length > 0 && undefined !== this._lastMotionPt && undefined !== this._lastMotionAdjustedPt) {\r\n const tmpPoints: Point3d[] = [];\r\n const tmpAdjustedPoints: Point3d[] = [];\r\n for (const loc of this._locationData) {\r\n tmpPoints.push(loc.point); // Deep copy not necessary...\r\n tmpAdjustedPoints.push(loc.adjustedPoint);\r\n }\r\n tmpPoints.push(this._lastMotionPt);\r\n tmpAdjustedPoints.push(this._lastMotionAdjustedPt);\r\n\r\n const builderDynVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const colorDynVis = context.viewport.hilite.color;\r\n\r\n builderDynVis.setSymbology(colorDynVis, ColorDef.black, 3);\r\n builderDynVis.addLineString(tmpPoints);\r\n\r\n context.addDecorationFromBuilder(builderDynVis);\r\n\r\n const builderDynHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorDynHid = colorDynVis.withAlpha(100);\r\n\r\n builderDynHid.setSymbology(colorDynHid, ColorDef.black, 1, LinePixels.Code2);\r\n builderDynHid.addLineString(tmpPoints);\r\n\r\n context.addDecorationFromBuilder(builderDynHid);\r\n this.displayDynamicDistance(context, tmpPoints, tmpAdjustedPoints);\r\n }\r\n\r\n if (this._acceptedSegments.length > 0) {\r\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n const colorAccHid = colorAccVis.withAlpha(100);\r\n\r\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\r\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\r\n\r\n for (const seg of this._acceptedSegments) {\r\n builderAccVis.addLineString([seg.start, seg.end]);\r\n builderAccHid.addLineString([seg.start, seg.end]);\r\n seg.marker.addDecoration(context);\r\n if (seg.marker.isSelected)\r\n this.displayDelta(context, seg);\r\n }\r\n\r\n context.addDecorationFromBuilder(builderAccVis);\r\n context.addDecorationFromBuilder(builderAccHid);\r\n }\r\n\r\n if (undefined !== this._totalDistanceMarker)\r\n this._totalDistanceMarker.addDecoration(context);\r\n\r\n const snapPoints = this.getSnapPoints();\r\n if (undefined === snapPoints)\r\n return;\r\n\r\n if (undefined === this._snapGeomId)\r\n this._snapGeomId = this.iModel.transientIds.getNext();\r\n\r\n const builderSnapPts = context.createGraphicBuilder(GraphicType.WorldOverlay, undefined, this._snapGeomId);\r\n const colorAccPts = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n\r\n builderSnapPts.setSymbology(colorAccPts, ColorDef.black, 7);\r\n builderSnapPts.addPointString(snapPoints);\r\n\r\n context.addDecorationFromBuilder(builderSnapPts);\r\n }\r\n\r\n /** @internal */\r\n public override decorate(context: DecorateContext): void { this.createDecorations(context, false); }\r\n /** @internal */\r\n public override decorateSuspended(context: DecorateContext): void { this.createDecorations(context, true); }\r\n\r\n /** @internal */\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (this._locationData.length > 0 && undefined !== ev.viewport) {\r\n const point = ev.point;\r\n const adjustedPoint = adjustPoint(ev, this._acceptedSegments, this._locationData);\r\n if (undefined !== this._lastMotionPt) {\r\n this._lastMotionPt.setFrom(point);\r\n this._lastMotionAdjustedPt?.setFrom(adjustedPoint);\r\n } else {\r\n this._lastMotionPt = point.clone();\r\n this._lastMotionAdjustedPt = adjustedPoint;\r\n }\r\n ev.viewport.invalidateDecorations();\r\n }\r\n }\r\n\r\n protected reportMeasurements(): void {\r\n if (undefined === this._totalDistanceMarker)\r\n return;\r\n const briefMsg = `${CoreTools.translate(this._acceptedSegments.length > 1 ? \"Measure.Labels.CumulativeDistance\" : \"Measure.Labels.Distance\")}: ${this._totalDistanceMarker.label}`;\r\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\r\n IModelApp.notifications.outputMessage(msgDetail);\r\n }\r\n\r\n protected async updateTotals(): Promise<void> {\r\n this._totalDistance = 0.0;\r\n this._totalDistanceMarker = undefined;\r\n for (const seg of this._acceptedSegments)\r\n this._totalDistance += seg.distance;\r\n if (0.0 === this._totalDistance)\r\n return;\r\n\r\n const formatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === formatterSpec)\r\n return;\r\n\r\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(this._totalDistance, formatterSpec);\r\n this._totalDistanceMarker = new MeasureLabel(this._acceptedSegments[this._acceptedSegments.length - 1].end, formattedTotalDistance);\r\n this.reportMeasurements();\r\n }\r\n\r\n protected async getMarkerToolTip(distance: number, slope: number, start: Point3d, end: Point3d, delta?: Vector3d): Promise<HTMLElement> {\r\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\r\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\r\n const toolTip = document.createElement(\"div\");\r\n\r\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === distanceFormatterSpec)\r\n return toolTip;\r\n\r\n let toolTipHtml = \"\";\r\n const formattedDistance = IModelApp.quantityFormatter.formatQuantity(distance, distanceFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Distance\") + formattedDistance}<br>`;\r\n\r\n if (is3d) {\r\n const angleFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Angle);\r\n if (undefined !== angleFormatterSpec) {\r\n const formattedSlope = IModelApp.quantityFormatter.formatQuantity(slope, angleFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Slope\") + formattedSlope}<br>`;\r\n }\r\n }\r\n\r\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\r\n if (undefined !== coordFormatterSpec) {\r\n let startAdjusted = start;\r\n let endAdjusted = end;\r\n if (isSpatial) {\r\n const globalOrigin = this.iModel.globalOrigin;\r\n startAdjusted = startAdjusted.minus(globalOrigin);\r\n endAdjusted = endAdjusted.minus(globalOrigin);\r\n }\r\n\r\n {\r\n const formattedStartX = IModelApp.quantityFormatter.formatQuantity(startAdjusted.x, coordFormatterSpec);\r\n const formattedStartY = IModelApp.quantityFormatter.formatQuantity(startAdjusted.y, coordFormatterSpec);\r\n const formattedStartZ = IModelApp.quantityFormatter.formatQuantity(startAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"StartCoord\") + formattedStartX}, ${formattedStartY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedStartZ}`;\r\n toolTipHtml += \"<br>\";\r\n }\r\n const formattedEndX = IModelApp.quantityFormatter.formatQuantity(endAdjusted.x, coordFormatterSpec);\r\n const formattedEndY = IModelApp.quantityFormatter.formatQuantity(endAdjusted.y, coordFormatterSpec);\r\n const formattedEndZ = IModelApp.quantityFormatter.formatQuantity(endAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"EndCoord\") + formattedEndX}, ${formattedEndY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedEndZ}`;\r\n toolTipHtml += \"<br>\";\r\n }\r\n\r\n if (undefined !== delta) {\r\n const formattedDeltaX = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.x), distanceFormatterSpec);\r\n const formattedDeltaY = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.y), distanceFormatterSpec);\r\n const formattedDeltaZ = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.z), distanceFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Delta\") + formattedDeltaX}, ${formattedDeltaY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedDeltaZ}`;\r\n toolTipHtml += \"<br>\";\r\n }\r\n\r\n toolTip.innerHTML = toolTipHtml;\r\n return toolTip;\r\n }\r\n\r\n /** @internal */\r\n protected async updateSelectedMarkerToolTip(seg: any, ev: BeButtonEvent, reopenToolTip: boolean): Promise<void> {\r\n seg.marker.title = await this.getMarkerToolTip(seg.distance, seg.slope, seg.adjustedStart, seg.adjustedEnd, seg.marker.isSelected ? seg.adjustedDelta : undefined);\r\n if (!reopenToolTip || undefined === ev.viewport || !IModelApp.notifications.isToolTipOpen)\r\n return;\r\n IModelApp.notifications.clearToolTip();\r\n ev.viewport.openToolTip(seg.marker.title, ev.viewPoint);\r\n }\r\n\r\n /** @internal */\r\n protected async acceptNewSegments(): Promise<void> {\r\n if (this._locationData.length > 1) {\r\n for (let i = 0; i <= this._locationData.length - 2; i++) {\r\n const adjustedStart = this._locationData[i].adjustedPoint;\r\n const adjustedEnd = this._locationData[i + 1].adjustedPoint;\r\n const distance = adjustedStart.distance(adjustedEnd);\r\n const xyDist = adjustedStart.distanceXY(adjustedEnd);\r\n const zDist = adjustedEnd.z - adjustedStart.z;\r\n const slope = (0.0 === xyDist ? Math.PI : Math.atan(zDist / xyDist));\r\n const adjustedDelta = Vector3d.createStartEnd(adjustedStart, adjustedEnd);\r\n const refAxes = this._locationData[i].refAxes;\r\n refAxes.multiplyTransposeVectorInPlace(adjustedDelta);\r\n const start = this._locationData[i].point;\r\n const end = this._locationData[i + 1].point;\r\n const delta = Vector3d.createStartEnd(start, end);\r\n refAxes.multiplyTransposeVectorInPlace(delta);\r\n\r\n const toolTip = await this.getMarkerToolTip(distance, slope, adjustedStart, adjustedEnd);\r\n const marker = new MeasureMarker((this._acceptedSegments.length + 1).toString(), toolTip, start.interpolate(0.5, end), Point2d.create(25, 25));\r\n\r\n const segMarkerButtonFunc = (ev: BeButtonEvent) => {\r\n if (ev.isDown)\r\n return true;\r\n\r\n let selectedMarker: MeasureMarker | undefined;\r\n let pickedMarker: MeasureMarker | undefined;\r\n for (const seg of this._acceptedSegments) {\r\n if (!seg.marker.pick(ev.viewPoint))\r\n continue;\r\n selectedMarker = (seg.marker.isSelected ? undefined : seg.marker);\r\n pickedMarker = seg.marker;\r\n break;\r\n }\r\n\r\n for (const seg of this._acceptedSegments) {\r\n const wasSelected = seg.marker.isSelected;\r\n seg.marker.isSelected = (seg.marker === selectedMarker);\r\n if (wasSelected !== seg.marker.isSelected)\r\n this.updateSelectedMarkerToolTip(seg, ev, (seg.marker === pickedMarker)); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return true;\r\n };\r\n\r\n marker.onMouseButton = segMarkerButtonFunc;\r\n this._acceptedSegments.push({ distance, slope, start, end, delta, adjustedStart, adjustedEnd, adjustedDelta, refAxes, marker });\r\n }\r\n }\r\n this._locationData.length = 0;\r\n await this.updateTotals();\r\n }\r\n\r\n /** @internal */\r\n protected getReferenceAxes(vp?: Viewport): Matrix3d {\r\n const refAxes = Matrix3d.createIdentity();\r\n if (undefined !== vp && vp.isContextRotationRequired)\r\n vp.getAuxCoordRotation(refAxes);\r\n return refAxes;\r\n }\r\n\r\n /** @internal */\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n const point = ev.point.clone();\r\n const adjustedPoint = adjustPoint(ev, this._acceptedSegments, this._locationData);\r\n const refAxes = this.getReferenceAxes(ev.viewport);\r\n const zDir = refAxes.columnZ();\r\n const normal = refAxes.columnZ();\r\n const tangent = refAxes.columnX();\r\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\r\n\r\n // Report xyz delta relative to world up. The surface normal and edge tangent help determine the rotation about z...\r\n if (undefined !== snap) {\r\n if (undefined !== snap.primitive) {\r\n const locDetail = snap.primitive.closestPoint(point, false);\r\n if (undefined !== locDetail && (HitGeomType.Segment === snap.geomType || snap.primitive.isInPlane(Plane3dByOriginAndUnitNormal.create(point, undefined !== snap.normal ? snap.normal : normal)!))) {\r\n const locRay = snap.primitive.fractionToPointAndUnitTangent(locDetail.fraction);\r\n tangent.setFrom(locRay.direction);\r\n if (undefined !== snap.normal)\r\n normal.setFrom(snap.normal);\r\n }\r\n } else if (undefined !== snap.normal) {\r\n normal.setFrom(snap.normal);\r\n }\r\n }\r\n\r\n if (!normal.isParallelTo(zDir, true)) {\r\n const yDir = zDir.unitCrossProduct(normal);\r\n if (undefined !== yDir) {\r\n yDir.unitCrossProduct(zDir, normal);\r\n Matrix3d.createColumnsInAxisOrder(AxisOrder.ZXY, normal, yDir, zDir, refAxes);\r\n }\r\n } else if (!tangent.isParallelTo(zDir, true)) {\r\n const yDir = zDir.unitCrossProduct(tangent);\r\n if (undefined !== yDir) {\r\n yDir.unitCrossProduct(zDir, tangent);\r\n Matrix3d.createColumnsInAxisOrder(AxisOrder.XYZ, tangent, yDir, zDir, refAxes);\r\n }\r\n }\r\n\r\n this._locationData.push({ point, adjustedPoint, refAxes });\r\n\r\n if (this._locationData.length > 1 && !ev.isControlKey)\r\n await this.acceptNewSegments();\r\n this.setupAndPromptForNextAction();\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (0 === this._locationData.length) {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n await this.acceptNewSegments();\r\n this.setupAndPromptForNextAction();\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n if (0 === this._locationData.length && 0 === this._acceptedSegments.length)\r\n return false;\r\n\r\n if (0 !== this._locationData.length) {\r\n this._locationData.pop();\r\n } else if (0 !== this._acceptedSegments.length) {\r\n this._acceptedSegments.pop();\r\n }\r\n\r\n if (0 === this._locationData.length && 0 === this._acceptedSegments.length) {\r\n await this.onReinitialize();\r\n } else {\r\n await this.updateTotals();\r\n this.setupAndPromptForNextAction();\r\n }\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureDistanceTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Report spatial coordinate at a point as well as cartographic location for geolocated models using current quantity formatters.\r\n * @public\r\n */\r\nexport class MeasureLocationTool extends PrimitiveTool {\r\n public static override toolId = \"Measure.Location\";\r\n public static override iconSpec = \"icon-measure-location\";\r\n /** @internal */\r\n protected readonly _acceptedLocations: MeasureMarker[] = [];\r\n /** @internal */\r\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\r\n /** @internal */\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n /** @internal */\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\r\n /** @internal */\r\n public override requireWriteableTarget(): boolean { return false; }\r\n /** @internal */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n\r\n /** @internal */\r\n protected showPrompt(): void {\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"Measure.Location.Prompts.EnterPoint\"));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n if (0 !== this._acceptedLocations.length) {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** @internal */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.showPrompt();\r\n }\r\n\r\n protected async getMarkerToolTip(point: Point3d): Promise<HTMLElement> {\r\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\r\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\r\n const toolTip = document.createElement(\"div\");\r\n\r\n let toolTipHtml = \"\";\r\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\r\n if (undefined !== coordFormatterSpec) {\r\n let pointAdjusted = point;\r\n if (isSpatial) {\r\n const globalOrigin = this.iModel.globalOrigin;\r\n pointAdjusted = pointAdjusted.minus(globalOrigin);\r\n }\r\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\r\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\r\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Coordinate\") + formattedPointX}, ${formattedPointY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedPointZ}`;\r\n\r\n toolTipHtml += \"<br>\";\r\n }\r\n\r\n if (isSpatial) {\r\n const latLongFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.LatLong);\r\n if (undefined !== latLongFormatterSpec && undefined !== coordFormatterSpec) {\r\n try {\r\n const cartographic = await this.iModel.spatialToCartographic(point);\r\n const formattedLat = IModelApp.quantityFormatter.formatQuantity(Math.abs(cartographic.latitude), latLongFormatterSpec);\r\n const formattedLong = IModelApp.quantityFormatter.formatQuantity(Math.abs(cartographic.longitude), latLongFormatterSpec);\r\n const formattedHeight = IModelApp.quantityFormatter.formatQuantity(cartographic.height, coordFormatterSpec);\r\n const latDir = CoreTools.translate(cartographic.latitude < 0 ? \"Measure.Labels.S\" : \"Measure.Labels.N\");\r\n const longDir = CoreTools.translate(cartographic.longitude < 0 ? \"Measure.Labels.W\" : \"Measure.Labels.E\");\r\n toolTipHtml += `${translateBold(\"LatLong\") + formattedLat + latDir}, ${formattedLong}${longDir}<br>`;\r\n toolTipHtml += `${translateBold(\"Altitude\") + formattedHeight}<br>`;\r\n } catch { }\r\n }\r\n }\r\n\r\n toolTip.innerHTML = toolTipHtml;\r\n return toolTip;\r\n }\r\n\r\n /** @internal */\r\n public override decorate(context: DecorateContext): void {\r\n if (!this.isCompatibleViewport(context.viewport, false))\r\n return;\r\n\r\n this._acceptedLocations.forEach((marker) => marker.addDecoration(context));\r\n }\r\n /** @internal */\r\n public override decorateSuspended(context: DecorateContext): void { this.decorate(context); }\r\n\r\n protected reportMeasurements(): void {\r\n if (0 === this._acceptedLocations.length)\r\n return;\r\n const briefMsg = this._acceptedLocations[this._acceptedLocations.length - 1].title;\r\n if (undefined === briefMsg)\r\n return;\r\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\r\n IModelApp.notifications.outputMessage(msgDetail);\r\n }\r\n\r\n /** @internal */\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n const point = ev.point.clone();\r\n const adjustedPoint = adjustPoint(ev);\r\n const toolTip = await this.getMarkerToolTip(adjustedPoint);\r\n const marker = new MeasureMarker((this._acceptedLocations.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\r\n\r\n this._acceptedLocations.push(marker);\r\n this.reportMeasurements();\r\n this.setupAndPromptForNextAction();\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n if (0 === this._acceptedLocations.length)\r\n return false;\r\n\r\n this._acceptedLocations.pop();\r\n if (0 === this._acceptedLocations.length) {\r\n await this.onReinitialize();\r\n } else {\r\n this.reportMeasurements();\r\n this.setupAndPromptForNextAction();\r\n }\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureLocationTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Report area defined by points using current quantity formatter for area.\r\n * @public\r\n */\r\nexport class MeasureAreaByPointsTool extends PrimitiveTool {\r\n public static override toolId = \"Measure.AreaByPoints\";\r\n public static override iconSpec = \"icon-measure-2d\";\r\n /** @internal */\r\n private _orientationValue: DialogItemValue = { value: ContextRotationId.Top };\r\n /** @internal */\r\n protected readonly _points: Point3d[] = [];\r\n /** @internal */\r\n protected _matrix?: Matrix3d;\r\n /** @internal */\r\n protected _isComplete = false;\r\n /** @internal */\r\n protected _area = 0.0;\r\n /** @internal */\r\n protected _perimeter = 0.0;\r\n /** @internal */\r\n protected _centroid = Point3d.createZero();\r\n /** @internal */\r\n protected _marker?: MeasureLabel;\r\n /** @internal */\r\n protected _acceptedMeasurement?: MeasureMarker;\r\n /** @internal */\r\n protected _lastMotionPt?: Point3d;\r\n\r\n /** @internal */\r\n public get orientation(): ContextRotationId { return this._orientationValue.value as ContextRotationId; }\r\n public set orientation(option: ContextRotationId) { this._orientationValue.value = option; }\r\n\r\n /** @internal */\r\n protected static _orientationName = \"enumAsOrientation\";\r\n /** @internal */\r\n protected static enumAsOrientationMessage(str: string) { return CoreTools.translate(`Settings.Orientation.${str}`); }\r\n /** @internal */\r\n protected static _getEnumAsOrientationDescription = (): PropertyDescription => {\r\n return {\r\n name: MeasureAreaByPointsTool._orientationName,\r\n displayLabel: CoreTools.translate(\"Settings.Orientation.Label\"),\r\n typename: \"enum\",\r\n enum: {\r\n choices: [\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Top\"), value: ContextRotationId.Top },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Front\"), value: ContextRotationId.Front },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Left\"), value: ContextRotationId.Left },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Bottom\"), value: ContextRotationId.Bottom },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Back\"), value: ContextRotationId.Back },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Right\"), value: ContextRotationId.Right },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"View\"), value: ContextRotationId.View },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Face\"), value: ContextRotationId.Face },\r\n ],\r\n },\r\n };\r\n };\r\n\r\n /** @internal */\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n const initialValue = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, MeasureAreaByPointsTool._orientationName);\r\n initialValue && (this._orientationValue = initialValue);\r\n const toolSettings = new Array<DialogItem>();\r\n toolSettings.push({ value: this._orientationValue, property: MeasureAreaByPointsTool._getEnumAsOrientationDescription(), editorPosition: { rowPriority: 0, columnIndex: 2 } });\r\n return toolSettings;\r\n }\r\n\r\n /** @internal */\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n if (updatedValue.propertyName === MeasureAreaByPointsTool._orientationName) {\r\n this._orientationValue = updatedValue.value;\r\n if (!this._orientationValue)\r\n return false;\r\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: MeasureAreaByPointsTool._orientationName, value: this._orientationValue });\r\n await this.onReinitialize();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\r\n /** @internal */\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n /** @internal */\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\r\n /** @internal */\r\n public override requireWriteableTarget(): boolean { return false; }\r\n /** @internal */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n\r\n /** @internal */\r\n protected showPrompt(): void {\r\n let mainMsg = \"Measure.AreaByPoints.Prompts.\";\r\n switch (this._points.length) {\r\n case 0:\r\n mainMsg += \"FirstPoint\";\r\n break;\r\n case 1:\r\n mainMsg += \"SecondPoint\";\r\n break;\r\n case 2:\r\n mainMsg += \"ThirdPoint\";\r\n break;\r\n default:\r\n mainMsg += this._isComplete ? \"FirstPoint\" : \"NextPoint\";\r\n break;\r\n }\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n const acceptMsg = CoreTools.translate(this._isComplete ? \"ElementSet.Inputs.Restart\" : \"ElementSet.Inputs.AcceptPoint\");\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n\r\n const resetMsg = CoreTools.translate(\"ElementSet.Inputs.Restart\");\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, resetMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, resetMsg, false, ToolAssistanceInputMethod.Mouse));\r\n\r\n if (this._points.length > 1)\r\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n if (0 !== this._points.length)\r\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** @internal */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.showPrompt();\r\n\r\n if (this._isComplete) {\r\n AccuDrawHintBuilder.deactivate();\r\n return;\r\n }\r\n\r\n if (0 === this._points.length)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOrigin(this._points[this._points.length - 1]);\r\n if (this._matrix) {\r\n if (1 === this._points.length) {\r\n hints.setMatrix(this._matrix);\r\n hints.setModeRectangular();\r\n } else if (this._points.length > 1 && !(this._points[this._points.length - 1].isAlmostEqual(this._points[this._points.length - 2]))) {\r\n const xVec = Vector3d.createStartEnd(this._points[this._points.length - 2], this._points[this._points.length - 1]);\r\n const zVec = this._matrix.getColumn(2);\r\n const matrix = Matrix3d.createRigidFromColumns(xVec, zVec, AxisOrder.XZY);\r\n if (undefined !== matrix)\r\n hints.setMatrix(matrix); // Rotate AccuDraw x axis to last segment preserving current up vector...\r\n }\r\n }\r\n hints.setLockZ = true;\r\n hints.sendHints();\r\n }\r\n\r\n /** @internal */\r\n protected getShapePoints(cursorPt: Point3d): Point3d[] {\r\n const points: Point3d[] = [];\r\n if (undefined === this.targetView || this._points.length < 1)\r\n return points;\r\n for (const pt of this._points)\r\n points.push(pt.clone());\r\n\r\n if (this._isComplete || !this._matrix)\r\n return points;\r\n\r\n const normal = this._matrix.getColumn(2);\r\n let currentPt = AccuDrawHintBuilder.projectPointToPlaneInView(cursorPt, points[0], normal, this.targetView, true);\r\n if (undefined === currentPt)\r\n currentPt = cursorPt.clone();\r\n if (2 === points.length && 0 === (IModelApp.toolAdmin.currentInputState.qualifiers & BeModifierKeys.Control)) {\r\n const xDir = Vector3d.createStartEnd(points[0], points[1]);\r\n const xLen = xDir.magnitude();\r\n xDir.normalizeInPlace();\r\n const yDir = xDir.crossProduct(normal);\r\n yDir.normalizeInPlace();\r\n const cornerPt = AccuDrawHintBuilder.projectPointToLineInView(currentPt, points[1], yDir, this.targetView, true);\r\n if (undefined !== cornerPt) {\r\n points.push(cornerPt);\r\n cornerPt.plusScaled(xDir, -xLen, currentPt);\r\n }\r\n }\r\n points.push(currentPt);\r\n\r\n if (points.length > 2)\r\n points.push(points[0].clone());\r\n\r\n return points;\r\n }\r\n\r\n /** @internal */\r\n public override decorate(context: DecorateContext): void {\r\n if (context.viewport !== this.targetView)\r\n return;\r\n\r\n if (undefined === this._lastMotionPt)\r\n return;\r\n const points = this.getShapePoints(this._lastMotionPt);\r\n if (points.length < 2)\r\n return;\r\n\r\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n const colorAccHid = colorAccVis.withAlpha(100);\r\n const fillAccVis = context.viewport.hilite.color.withAlpha(50);\r\n\r\n builderAccVis.setSymbology(colorAccVis, fillAccVis, 3);\r\n builderAccHid.setSymbology(colorAccHid, fillAccVis, 1, LinePixels.Code2);\r\n\r\n if (points.length > 2)\r\n builderAccHid.addShape(points);\r\n\r\n builderAccVis.addLineString(points);\r\n builderAccHid.addLineString(points);\r\n\r\n context.addDecorationFromBuilder(builderAccVis);\r\n context.addDecorationFromBuilder(builderAccHid);\r\n\r\n if (undefined !== this._acceptedMeasurement)\r\n this._acceptedMeasurement.addDecoration(context);\r\n if (undefined !== this._marker)\r\n this._marker.addDecoration(context);\r\n }\r\n\r\n /** @internal */\r\n public override decorateSuspended(context: DecorateContext): void {\r\n if (this._isComplete)\r\n this.decorate(context);\r\n }\r\n\r\n /** @internal */\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (this._points.length > 0 && undefined !== ev.viewport && !this._isComplete) {\r\n if (undefined !== this._lastMotionPt)\r\n this._lastMotionPt.setFrom(ev.point);\r\n else\r\n this._lastMotionPt = ev.point.clone();\r\n ev.viewport.invalidateDecorations();\r\n }\r\n }\r\n\r\n protected async getMarkerToolTip(): Promise<HTMLElement> {\r\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\r\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\r\n const toolTip = document.createElement(\"div\");\r\n let toolTipHtml = \"\";\r\n\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined !== areaFormatterSpec) {\r\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(this._area, areaFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\r\n }\r\n const perimeterFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined !== perimeterFormatterSpec) {\r\n const formattedPerimeter = IModelApp.quantityFormatter.formatQuantity(this._perimeter, perimeterFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Perimeter\") + formattedPerimeter}<br>`;\r\n }\r\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\r\n if (undefined !== coordFormatterSpec) {\r\n let pointAdjusted = this._centroid.clone();\r\n if (isSpatial) {\r\n const globalOrigin = this.iModel.globalOrigin;\r\n pointAdjusted = pointAdjusted.minus(globalOrigin);\r\n }\r\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\r\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\r\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Centroid\") + formattedPointX}, ${formattedPointY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedPointZ}`;\r\n\r\n toolTipHtml += \"<br>\";\r\n }\r\n\r\n toolTip.innerHTML = toolTipHtml;\r\n return toolTip;\r\n }\r\n\r\n protected reportMeasurements(): void {\r\n if (undefined === this._marker)\r\n return;\r\n const briefMsg = `${CoreTools.translate(\"Measure.Labels.Area\")}: ${this._marker.label}`;\r\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\r\n IModelApp.notifications.outputMessage(msgDetail);\r\n }\r\n\r\n protected async updateTotals(): Promise<void> {\r\n if (this._points.length < 3)\r\n return;\r\n\r\n const result = PolygonOps.centroidAreaNormal(this._points);\r\n if (undefined === result)\r\n return;\r\n\r\n this._area = result.a ? result.a : 0.0;\r\n this._centroid.setFrom(result.origin);\r\n this._perimeter = 0.0;\r\n for (let i = 1; i < this._points.length; i++)\r\n this._perimeter += (this._points[i - 1].distance(this._points[i]));\r\n\r\n const toolTip = await this.getMarkerToolTip();\r\n this._acceptedMeasurement = new MeasureMarker(\"1\", toolTip, this._centroid, Point2d.create(25, 25));\r\n this._marker = undefined;\r\n\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined === areaFormatterSpec)\r\n return;\r\n const formattedTotalArea = IModelApp.quantityFormatter.formatQuantity(this._area, areaFormatterSpec);\r\n this._marker = new MeasureLabel(this._centroid, formattedTotalArea);\r\n\r\n this.reportMeasurements();\r\n }\r\n\r\n /** @internal */\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === this.targetView)\r\n return EventHandled.No;\r\n\r\n if (this._isComplete)\r\n await this.onReinitialize();\r\n\r\n if (this._points.length > 1 && !ev.isControlKey) {\r\n const points = this.getShapePoints(ev.point);\r\n if (points.length < 3)\r\n return EventHandled.No;\r\n\r\n this._isComplete = true;\r\n this._points.length = 0;\r\n for (const pt of points)\r\n this._points.push(pt);\r\n\r\n await this.updateTotals();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n if (undefined === this._matrix && undefined === (this._matrix = AccuDrawHintBuilder.getContextRotation(this.orientation, this.targetView)))\r\n return EventHandled.No;\r\n\r\n const currPt = ev.point.clone();\r\n if (this._points.length > 0) {\r\n const planePt = AccuDrawHintBuilder.projectPointToPlaneInView(currPt, this._points[0], this._matrix.getColumn(2), ev.viewport!, true);\r\n if (undefined !== planePt)\r\n currPt.setFrom(planePt);\r\n }\r\n\r\n this._points.push(currPt);\r\n this.setupAndPromptForNextAction();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onReinitialize(): Promise<void> {\r\n this._acceptedMeasurement = undefined;\r\n this._marker = undefined;\r\n this._isComplete = false;\r\n this._points.length = 0;\r\n this._matrix = undefined;\r\n AccuDrawHintBuilder.deactivate();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n if (0 === this._points.length || this._isComplete)\r\n return false;\r\n\r\n this._points.pop();\r\n this.setupAndPromptForNextAction();\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureAreaByPointsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Base class for mass properties tools.\r\n * @public\r\n */\r\nexport abstract class MeasureElementTool extends PrimitiveTool {\r\n /** @internal */\r\n protected readonly _checkedIds = new Map<Id64String, MassPropertiesResponseProps>();\r\n /** @internal */\r\n protected readonly _acceptedIds: Id64Array = [];\r\n /** @internal */\r\n protected readonly _acceptedMeasurements: MeasureMarker[] = [];\r\n /** @internal */\r\n protected _totalValue: number = 0.0;\r\n /** @internal */\r\n protected _totalMarker?: MeasureLabel;\r\n /** @internal */\r\n protected _useSelection: boolean = false;\r\n\r\n protected abstract getOperation(): MassPropertiesOperation;\r\n\r\n /** @internal */\r\n protected allowView(vp: Viewport) {\r\n return (MassPropertiesOperation.AccumulateVolumes === this.getOperation() ? vp.view.isSpatialView() : (vp.view.isSpatialView() || vp.view.isDrawingView()));\r\n }\r\n\r\n /** @internal */\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n /** @internal */\r\n public override requireWriteableTarget(): boolean { return false; }\r\n /** @internal */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onCleanup() {\r\n if (0 !== this._acceptedIds.length)\r\n this.iModel.hilited.setHilite(this._acceptedIds, false);\r\n }\r\n\r\n /** @internal */\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n\r\n /** @internal */\r\n protected showPrompt(): void {\r\n const mainMsg = (this._useSelection ? (0 === this._acceptedMeasurements.length ? \"ElementSet.Prompts.ConfirmSelection\" : \"ElementSet.Prompts.InspectResult\") : \"ElementSet.Prompts.IdentifyElement\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (this._useSelection) {\r\n if (0 === this._acceptedMeasurements.length) {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptSelection\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptSelection\"), false, ToolAssistanceInputMethod.Mouse));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.RejectSelection\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.RejectSelection\"), false, ToolAssistanceInputMethod.Mouse));\r\n } else {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n } else {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Mouse));\r\n if (0 !== this._acceptedMeasurements.length) {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** @internal */\r\n protected setupAndPromptForNextAction(): void {\r\n this._useSelection = (undefined !== this.targetView && this.targetView.iModel.selectionSet.isActive);\r\n if (!this._useSelection)\r\n this.initLocateElements();\r\n this.showPrompt();\r\n }\r\n\r\n /** @internal */\r\n public override decorate(context: DecorateContext): void {\r\n if (!this.isCompatibleViewport(context.viewport, false))\r\n return;\r\n\r\n this._acceptedMeasurements.forEach((marker) => marker.addDecoration(context));\r\n if (undefined !== this._totalMarker)\r\n this._totalMarker.addDecoration(context);\r\n }\r\n\r\n /** @internal */\r\n public override decorateSuspended(context: DecorateContext): void { this.decorate(context); }\r\n\r\n protected reportMeasurements(): void {\r\n if (undefined === this._totalMarker)\r\n return;\r\n let label = \"Measure.Labels.\";\r\n switch (this.getOperation()) {\r\n case MassPropertiesOperation.AccumulateLengths:\r\n label += \"Length\";\r\n break;\r\n case MassPropertiesOperation.AccumulateAreas:\r\n label += \"Area\";\r\n break;\r\n case MassPropertiesOperation.AccumulateVolumes:\r\n label += \"Volume\";\r\n break;\r\n default:\r\n return;\r\n }\r\n const briefMsg = `${CoreTools.translate(label)}: ${this._totalMarker.label}`;\r\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\r\n IModelApp.notifications.outputMessage(msgDetail);\r\n }\r\n\r\n protected async getMarkerToolTip(responseProps: MassPropertiesResponseProps): Promise<HTMLElement> {\r\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\r\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\r\n const toolTip = document.createElement(\"div\");\r\n let toolTipHtml = \"\";\r\n\r\n switch (this.getOperation()) {\r\n case MassPropertiesOperation.AccumulateLengths: {\r\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined !== distanceFormatterSpec) {\r\n const formattedLength = IModelApp.quantityFormatter.formatQuantity(responseProps.length ? responseProps.length : 0, distanceFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Length\") + formattedLength}<br>`;\r\n }\r\n break;\r\n }\r\n case MassPropertiesOperation.AccumulateAreas: {\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined !== areaFormatterSpec) {\r\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(responseProps.area ? responseProps.area : 0, areaFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\r\n }\r\n if (responseProps.perimeter) {\r\n const perimeterFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined !== perimeterFormatterSpec) {\r\n const formattedPerimeter = IModelApp.quantityFormatter.formatQuantity(responseProps.perimeter, perimeterFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Perimeter\") + formattedPerimeter}<br>`;\r\n }\r\n }\r\n break;\r\n }\r\n case MassPropertiesOperation.AccumulateVolumes: {\r\n const volumeFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Volume);\r\n if (undefined !== volumeFormatterSpec) {\r\n const formattedVolume = IModelApp.quantityFormatter.formatQuantity(responseProps.volume ? responseProps.volume : 0, volumeFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Volume\") + formattedVolume}<br>`;\r\n }\r\n if (responseProps.area) {\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined !== areaFormatterSpec) {\r\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(responseProps.area, areaFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (responseProps.centroid) {\r\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\r\n if (undefined !== coordFormatterSpec) {\r\n let pointAdjusted = Point3d.fromJSON(responseProps.centroid);\r\n if (isSpatial) {\r\n const globalOrigin = this.iModel.globalOrigin;\r\n pointAdjusted = pointAdjusted.minus(globalOrigin);\r\n }\r\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\r\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\r\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Centroid\") + formattedPointX}, ${formattedPointY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedPointZ}`;\r\n toolTipHtml += \"<br>\";\r\n }\r\n }\r\n\r\n toolTip.innerHTML = toolTipHtml;\r\n return toolTip;\r\n }\r\n\r\n private getResultValue(operation: MassPropertiesOperation, result: MassPropertiesResponseProps): number {\r\n switch (operation) {\r\n case MassPropertiesOperation.AccumulateLengths:\r\n return (result.length ? result.length : 0.0);\r\n case MassPropertiesOperation.AccumulateAreas:\r\n return (result.area ? result.area : 0.0);\r\n case MassPropertiesOperation.AccumulateVolumes:\r\n return (result.volume ? result.volume : 0.0);\r\n }\r\n }\r\n\r\n protected async updateTotals(selectionSetResult?: MassPropertiesResponseProps): Promise<void> {\r\n this._totalValue = 0.0;\r\n this._totalMarker = undefined;\r\n\r\n let labelPt;\r\n const operation = this.getOperation();\r\n if (undefined !== selectionSetResult) {\r\n labelPt = Point3d.fromJSON(selectionSetResult.centroid);\r\n this._totalValue += this.getResultValue(operation, selectionSetResult);\r\n } else if (0 !== this._acceptedIds.length) {\r\n for (const id of this._acceptedIds) {\r\n const result = this._checkedIds.get(id);\r\n if (undefined === result)\r\n continue;\r\n labelPt = Point3d.fromJSON(result.centroid);\r\n this._totalValue += this.getResultValue(operation, result);\r\n }\r\n }\r\n if (0.0 === this._totalValue || undefined === labelPt)\r\n return;\r\n\r\n switch (operation) {\r\n case MassPropertiesOperation.AccumulateLengths:\r\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === distanceFormatterSpec)\r\n return;\r\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(this._totalValue, distanceFormatterSpec);\r\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalDistance);\r\n break;\r\n case MassPropertiesOperation.AccumulateAreas:\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined === areaFormatterSpec)\r\n return;\r\n const formattedTotalArea = IModelApp.quantityFormatter.formatQuantity(this._totalValue, areaFormatterSpec);\r\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalArea);\r\n break;\r\n case MassPropertiesOperation.AccumulateVolumes:\r\n const volumeFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Volume);\r\n if (undefined === volumeFormatterSpec)\r\n return;\r\n const formattedTotalVolume = IModelApp.quantityFormatter.formatQuantity(this._totalValue, volumeFormatterSpec);\r\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalVolume);\r\n break;\r\n }\r\n\r\n this.reportMeasurements();\r\n }\r\n\r\n /** @internal */\r\n public async doMeasureSelectedElements(viewport: Viewport): Promise<void> {\r\n const candidates: Id64Array = [];\r\n viewport.iModel.selectionSet.elements.forEach((val) => {\r\n if (!Id64.isInvalid(val) && !Id64.isTransient(val))\r\n candidates.push(val);\r\n });\r\n\r\n if (0 === candidates.length)\r\n return;\r\n\r\n const requestProps: MassPropertiesRequestProps = {\r\n operation: this.getOperation(),\r\n candidates,\r\n };\r\n const result = await this.iModel.getMassProperties(requestProps);\r\n if (BentleyStatus.SUCCESS !== result.status)\r\n return;\r\n\r\n const toolTip = await this.getMarkerToolTip(result);\r\n const point = Point3d.fromJSON(result.centroid);\r\n const marker = new MeasureMarker((this._acceptedMeasurements.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\r\n\r\n this._acceptedMeasurements.push(marker);\r\n await this.updateTotals(result);\r\n this.setupAndPromptForNextAction();\r\n\r\n if (undefined !== viewport)\r\n viewport.invalidateDecorations();\r\n }\r\n\r\n /** @internal */\r\n public override async filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus> {\r\n if (!hit.isElementHit)\r\n return LocateFilterStatus.Reject;\r\n\r\n let result = this._checkedIds.get(hit.sourceId);\r\n if (undefined === result) {\r\n const requestProps: MassPropertiesRequestProps = {\r\n operation: this.getOperation(),\r\n candidates: [hit.sourceId],\r\n };\r\n result = await this.iModel.getMassProperties(requestProps);\r\n this._checkedIds.set(hit.sourceId, result);\r\n }\r\n\r\n return (BentleyStatus.SUCCESS === result.status ? LocateFilterStatus.Accept : LocateFilterStatus.Reject);\r\n }\r\n\r\n /** @internal */\r\n public override async onReinitialize(): Promise<void> {\r\n if (this._useSelection)\r\n return this.exitTool();\r\n return this.onRestartTool();\r\n }\r\n\r\n /** @internal */\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (this._useSelection) {\r\n if (0 === this._acceptedMeasurements.length && undefined !== ev.viewport) {\r\n await this.doMeasureSelectedElements(ev.viewport);\r\n if (0 !== this._acceptedMeasurements.length)\r\n return EventHandled.Yes;\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, CoreTools.translate(\"ElementSet.Error.NotSupportedElmType\")));\r\n await this.onReinitialize();\r\n }\r\n return EventHandled.Yes;\r\n }\r\n\r\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\r\n if (undefined === hit || !hit.isElementHit)\r\n return EventHandled.No;\r\n\r\n const result = this._checkedIds.get(hit.sourceId);\r\n if (undefined === result)\r\n return EventHandled.No;\r\n if (-1 !== this._acceptedIds.indexOf(hit.sourceId))\r\n return EventHandled.Yes; // Already accepted, not rejected in filterHit to avoid showing \"not\" cursor...\r\n\r\n const toolTip = await this.getMarkerToolTip(result);\r\n const point = result.centroid ? Point3d.fromJSON(result.centroid) : ev.point.clone();\r\n const marker = new MeasureMarker((this._acceptedMeasurements.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\r\n\r\n this._acceptedMeasurements.push(marker);\r\n this._acceptedIds.push(hit.sourceId);\r\n this.iModel.hilited.setHilite(hit.sourceId, true);\r\n\r\n await this.updateTotals();\r\n this.setupAndPromptForNextAction();\r\n\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n if (0 === this._acceptedMeasurements.length)\r\n return false;\r\n\r\n this._acceptedMeasurements.pop();\r\n if (0 === this._acceptedMeasurements.length) {\r\n await this.onReinitialize();\r\n } else {\r\n if (0 !== this._acceptedIds.length) {\r\n this.iModel.hilited.setHilite(this._acceptedIds[this._acceptedIds.length - 1], false);\r\n this._acceptedIds.pop();\r\n }\r\n\r\n await this.updateTotals();\r\n this.setupAndPromptForNextAction();\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/** Report accumulated lengths of selected elements using the current quantity formatter for length.\r\n * @public\r\n */\r\nexport class MeasureLengthTool extends MeasureElementTool {\r\n public static override toolId = \"Measure.Length\";\r\n public static override iconSpec = \"icon-measure\";\r\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateLengths; }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureLengthTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Report accumulated areas of selected elements using the current quantity formatter for area.\r\n * @public\r\n */\r\nexport class MeasureAreaTool extends MeasureElementTool {\r\n public static override toolId = \"Measure.Area\";\r\n public static override iconSpec = \"icon-measure-area\";\r\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateAreas; }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureAreaTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Report accumulated volumes of selected elements using the current quantity formatter for volume.\r\n * @public\r\n */\r\nexport class MeasureVolumeTool extends MeasureElementTool {\r\n public static override toolId = \"Measure.Volume\";\r\n public static override iconSpec = \"icon-measure-3d\";\r\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateVolumes; }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureVolumeTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MeasureTool.js","sourceRoot":"","sources":["../../../src/tools/MeasureTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Measure\r\n */\r\n\r\nimport { BentleyStatus, Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { AxisOrder, IModelJson, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, PointString3d, PolygonOps, Vector3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { ColorDef, GeometryStreamProps, LinePixels, MassPropertiesOperation, MassPropertiesRequestProps, MassPropertiesResponseProps } from \"@itwin/core-common\";\r\nimport { DialogItem, DialogItemValue, DialogPropertySyncItem, PropertyDescription } from \"@itwin/appui-abstract\";\r\nimport { AccuDrawHintBuilder, ContextRotationId } from \"../AccuDraw\";\r\nimport { LocateFilterStatus, LocateResponse } from \"../ElementLocateManager\";\r\nimport { HitDetail, HitGeomType } from \"../HitDetail\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { Marker } from \"../Marker\";\r\nimport { NotifyMessageDetails, OutputMessagePriority, OutputMessageType } from \"../NotificationManager\";\r\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\r\nimport { CanvasDecoration } from \"../render/CanvasDecoration\";\r\nimport { DecorateContext } from \"../ViewContext\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { PrimitiveTool } from \"./PrimitiveTool\";\r\nimport { BeButtonEvent, BeModifierKeys, CoreTools, EventHandled, InputSource } from \"./Tool\";\r\nimport { ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection } from \"./ToolAssistance\";\r\nimport { GraphicType } from \"../common/render/GraphicType\";\r\n\r\nfunction translateBold(key: string) {\r\n return `<b>${CoreTools.translate(`Measure.Labels.${key}`)}:</b> `;\r\n}\r\n\r\n/** @internal */\r\nclass MeasureLabel implements CanvasDecoration {\r\n public worldLocation = new Point3d();\r\n public position = new Point3d();\r\n public label: string;\r\n\r\n constructor(worldLocation: XYAndZ, label: string) {\r\n this.worldLocation.setFrom(worldLocation);\r\n this.label = label;\r\n }\r\n\r\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\r\n ctx.font = \"16px sans-serif\";\r\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\r\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"white\";\r\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\r\n ctx.shadowColor = \"black\";\r\n ctx.shadowBlur = 10;\r\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n\r\n ctx.fillStyle = \"white\";\r\n ctx.shadowBlur = 0;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(this.label, 0, 0);\r\n }\r\n\r\n public setPosition(vp: Viewport): boolean {\r\n vp.worldToView(this.worldLocation, this.position);\r\n this.position.y -= Math.floor(vp.pixelsFromInches(0.44)) + 0.5; // Offset from snap location...\r\n return vp.viewRect.containsPoint(this.position);\r\n }\r\n\r\n public addDecoration(context: DecorateContext) {\r\n if (this.setPosition(context.viewport))\r\n context.addCanvasDecoration(this);\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass MeasureMarker extends Marker {\r\n public isSelected: boolean = false;\r\n constructor(label: string, title: HTMLElement, worldLocation: XYAndZ, size: XAndY) {\r\n super(worldLocation, size);\r\n\r\n const markerDrawFunc = (ctx: CanvasRenderingContext2D) => {\r\n ctx.beginPath();\r\n ctx.arc(0, 0, this.size.x * 0.5, 0, 2 * Math.PI);\r\n ctx.lineWidth = 2;\r\n ctx.strokeStyle = \"black\";\r\n const hilite = this.isSelected && this._hiliteColor ? this._hiliteColor.colors : undefined;\r\n ctx.fillStyle = undefined !== hilite ? `rgba(${hilite.r | 0},${hilite.g | 0},${hilite.b | 0}, 0.5)` : \"rgba(255,255,255,.5)\";\r\n ctx.fill();\r\n ctx.stroke();\r\n };\r\n\r\n this.drawFunc = markerDrawFunc;\r\n this.title = title;\r\n this.label = label;\r\n this.labelFont = \"16px sans-serif\";\r\n this.labelColor = \"black\";\r\n this.labelMaxWidth = this.size.x * 0.75;\r\n this.labelOffset = { x: 0, y: -1 };\r\n }\r\n\r\n public override onMouseButton(_ev: BeButtonEvent): boolean { return true; } // Never forward event to active tool...\r\n\r\n public override onMouseEnter(ev: BeButtonEvent) {\r\n super.onMouseEnter(ev);\r\n if (this.title && InputSource.Touch === ev.inputSource && ev.viewport)\r\n ev.viewport.openToolTip(this.title, ev.viewPoint, this.tooltipOptions);\r\n }\r\n\r\n public override onMouseLeave() {\r\n super.onMouseLeave();\r\n if (this.title)\r\n IModelApp.notifications.clearToolTip(); // Clear tool tip from tap since we won't get a motion event...\r\n }\r\n}\r\n\r\n/** @internal */\r\ninterface Location { point: Point3d, adjustedPoint: Point3d, refAxes: Matrix3d }\r\n/** @internal */\r\ninterface Segment { distance: number, slope: number, start: Point3d, end: Point3d, delta: Vector3d, adjustedStart: Point3d, adjustedEnd: Point3d, adjustedDelta: Vector3d, refAxes: Matrix3d, marker: MeasureMarker }\r\n\r\n/** @internal */\r\nfunction adjustPoint(ev: BeButtonEvent, segments?: Array<Segment>, locations?: Array<Location>): Point3d {\r\n // If the point was from a hit we must transform it by the display transform of what got hit.\r\n const hit = IModelApp.accuSnap.currHit;\r\n if (!hit || !ev.viewport || !hit.modelId)\r\n return ev.point;\r\n\r\n if (\"0\" !== hit.modelId) {\r\n const transform = ev.viewport.view.computeDisplayTransform({ modelId: hit.modelId, elementId: hit.sourceId });\r\n return transform?.multiplyInversePoint3d(ev.point) ?? ev.point;\r\n }\r\n\r\n // Must have snapped to a decoration, so look through previous any segments & locations for a match to get an adjusted point.\r\n if (segments) {\r\n for (const seg of segments) {\r\n if (seg.start.isExactEqual(ev.point))\r\n return seg.adjustedStart.clone();\r\n\r\n if (seg.end.isExactEqual(ev.point))\r\n return seg.adjustedEnd.clone();\r\n }\r\n }\r\n\r\n if (locations)\r\n for (const loc of locations)\r\n if (loc.point.isExactEqual(ev.point))\r\n return loc.adjustedPoint.clone();\r\n\r\n return ev.point;\r\n}\r\n\r\n/** Report distance between 2 points using current quantity formatter for length.\r\n * @public\r\n */\r\nexport class MeasureDistanceTool extends PrimitiveTool {\r\n public static override toolId = \"Measure.Distance\";\r\n public static override iconSpec = \"icon-measure-distance\";\r\n /** @internal */\r\n protected readonly _locationData = new Array<Location>();\r\n /** @internal */\r\n protected readonly _acceptedSegments = new Array<Segment>();\r\n /** @internal */\r\n protected _totalDistance: number = 0.0;\r\n /** @internal */\r\n protected _totalDistanceMarker?: MeasureLabel;\r\n /** @internal */\r\n protected _snapGeomId?: string;\r\n /** @internal */\r\n protected _lastMotionPt?: Point3d;\r\n /** @internal */\r\n protected _lastMotionAdjustedPt?: Point3d;\r\n\r\n /** @internal */\r\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\r\n /** @internal */\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n /** @internal */\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\r\n /** @internal */\r\n public override requireWriteableTarget(): boolean { return false; }\r\n /** @internal */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n\r\n /** @internal */\r\n protected showPrompt(): void {\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(0 === this._locationData.length ? \"Measure.Distance.Prompts.FirstPoint\" : \"Measure.Distance.Prompts.NextPoint\"));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n if (0 === this._locationData.length) {\r\n if (this._acceptedSegments.length > 0) {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n } else {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Cancel\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Cancel\"), false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** @internal */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n const hints = new AccuDrawHintBuilder();\r\n hints.enableSmartRotation = true;\r\n hints.setModeRectangular();\r\n hints.sendHints(false);\r\n IModelApp.toolAdmin.setCursor(0 === this._locationData.length ? IModelApp.viewManager.crossHairCursor : IModelApp.viewManager.dynamicsCursor);\r\n this.showPrompt();\r\n }\r\n\r\n /** @internal */\r\n public override testDecorationHit(id: string): boolean { return id === this._snapGeomId; }\r\n\r\n /** @internal */\r\n protected getSnapPoints(): Point3d[] | undefined {\r\n if (this._acceptedSegments.length < 1 && this._locationData.length < 2)\r\n return undefined;\r\n\r\n const snapPoints: Point3d[] = [];\r\n for (const seg of this._acceptedSegments) {\r\n if (0 === snapPoints.length || !seg.start.isAlmostEqual(snapPoints[snapPoints.length - 1]))\r\n snapPoints.push(seg.start);\r\n if (!seg.end.isAlmostEqual(snapPoints[0]))\r\n snapPoints.push(seg.end);\r\n }\r\n\r\n if (this._locationData.length > 1)\r\n for (const loc of this._locationData)\r\n snapPoints.push(loc.point);\r\n return snapPoints;\r\n }\r\n\r\n /** @internal */\r\n public override getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined {\r\n const snapPoints = this.getSnapPoints();\r\n if (undefined === snapPoints)\r\n return undefined;\r\n const geomData = IModelJson.Writer.toIModelJson(PointString3d.create(snapPoints));\r\n return (undefined === geomData ? undefined : [geomData]);\r\n }\r\n\r\n /** @internal */\r\n protected displayDynamicDistance(context: DecorateContext, points: Point3d[], adjustedPoints: Point3d[]): void {\r\n let totalDistance = 0.0;\r\n for (let i = 0; i < adjustedPoints.length - 1; i++)\r\n totalDistance += adjustedPoints[i].distance(adjustedPoints[i + 1]);\r\n if (0.0 === totalDistance)\r\n return;\r\n\r\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === formatterSpec)\r\n return;\r\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(totalDistance, formatterSpec);\r\n const distDyn = new MeasureLabel(points[points.length - 1], formattedTotalDistance);\r\n distDyn.addDecoration(context);\r\n }\r\n\r\n /** @internal */\r\n protected displayDelta(context: DecorateContext, seg: any): void {\r\n const xVec = new Vector3d(seg.delta.x, 0.0, 0.0);\r\n const yVec = new Vector3d(0.0, seg.delta.y, 0.0);\r\n const zVec = new Vector3d(0.0, 0.0, seg.delta.z);\r\n\r\n seg.refAxes.multiplyVectorInPlace(xVec);\r\n seg.refAxes.multiplyVectorInPlace(yVec);\r\n seg.refAxes.multiplyVectorInPlace(zVec);\r\n\r\n const builderAxes = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n let basePt = seg.start.clone();\r\n\r\n if (xVec.magnitude() > 1.0e-5) {\r\n const segPoints: Point3d[] = [];\r\n segPoints.push(basePt);\r\n basePt = basePt.plus(xVec);\r\n segPoints.push(basePt);\r\n const colorX = ColorDef.red.adjustedForContrast(context.viewport.view.backgroundColor);\r\n builderAxes.setSymbology(colorX, ColorDef.black, 5);\r\n builderAxes.addLineString(segPoints);\r\n }\r\n\r\n if (yVec.magnitude() > 1.0e-5) {\r\n const segPoints: Point3d[] = [];\r\n segPoints.push(basePt);\r\n basePt = basePt.plus(yVec);\r\n segPoints.push(basePt);\r\n const colorY = ColorDef.green.adjustedForContrast(context.viewport.view.backgroundColor);\r\n builderAxes.setSymbology(colorY, ColorDef.black, 5);\r\n builderAxes.addLineString(segPoints);\r\n }\r\n\r\n if (zVec.magnitude() > 1.0e-5) {\r\n const segPoints: Point3d[] = [];\r\n segPoints.push(basePt);\r\n basePt = basePt.plus(zVec);\r\n segPoints.push(basePt);\r\n const colorZ = ColorDef.blue.adjustedForContrast(context.viewport.view.backgroundColor);\r\n builderAxes.setSymbology(colorZ, ColorDef.black, 5);\r\n builderAxes.addLineString(segPoints);\r\n }\r\n\r\n const segGlow = context.viewport.hilite.color.withAlpha(50);\r\n builderAxes.setSymbology(segGlow, ColorDef.black, 8);\r\n builderAxes.addLineString([seg.start, seg.end]);\r\n\r\n context.addDecorationFromBuilder(builderAxes);\r\n }\r\n\r\n /** @internal */\r\n protected createDecorations(context: DecorateContext, isSuspended: boolean): void {\r\n if (!this.isCompatibleViewport(context.viewport, false))\r\n return;\r\n\r\n if (!isSuspended && this._locationData.length > 0 && undefined !== this._lastMotionPt && undefined !== this._lastMotionAdjustedPt) {\r\n const tmpPoints: Point3d[] = [];\r\n const tmpAdjustedPoints: Point3d[] = [];\r\n for (const loc of this._locationData) {\r\n tmpPoints.push(loc.point); // Deep copy not necessary...\r\n tmpAdjustedPoints.push(loc.adjustedPoint);\r\n }\r\n tmpPoints.push(this._lastMotionPt);\r\n tmpAdjustedPoints.push(this._lastMotionAdjustedPt);\r\n\r\n const builderDynVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const colorDynVis = context.viewport.hilite.color;\r\n\r\n builderDynVis.setSymbology(colorDynVis, ColorDef.black, 3);\r\n builderDynVis.addLineString(tmpPoints);\r\n\r\n context.addDecorationFromBuilder(builderDynVis);\r\n\r\n const builderDynHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorDynHid = colorDynVis.withAlpha(100);\r\n\r\n builderDynHid.setSymbology(colorDynHid, ColorDef.black, 1, LinePixels.Code2);\r\n builderDynHid.addLineString(tmpPoints);\r\n\r\n context.addDecorationFromBuilder(builderDynHid);\r\n this.displayDynamicDistance(context, tmpPoints, tmpAdjustedPoints);\r\n }\r\n\r\n if (this._acceptedSegments.length > 0) {\r\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n const colorAccHid = colorAccVis.withAlpha(100);\r\n\r\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\r\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\r\n\r\n for (const seg of this._acceptedSegments) {\r\n builderAccVis.addLineString([seg.start, seg.end]);\r\n builderAccHid.addLineString([seg.start, seg.end]);\r\n seg.marker.addDecoration(context);\r\n if (seg.marker.isSelected)\r\n this.displayDelta(context, seg);\r\n }\r\n\r\n context.addDecorationFromBuilder(builderAccVis);\r\n context.addDecorationFromBuilder(builderAccHid);\r\n }\r\n\r\n if (undefined !== this._totalDistanceMarker)\r\n this._totalDistanceMarker.addDecoration(context);\r\n\r\n const snapPoints = this.getSnapPoints();\r\n if (undefined === snapPoints)\r\n return;\r\n\r\n if (undefined === this._snapGeomId)\r\n this._snapGeomId = this.iModel.transientIds.getNext();\r\n\r\n const builderSnapPts = context.createGraphicBuilder(GraphicType.WorldOverlay, undefined, this._snapGeomId);\r\n const colorAccPts = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n\r\n builderSnapPts.setSymbology(colorAccPts, ColorDef.black, 7);\r\n builderSnapPts.addPointString(snapPoints);\r\n\r\n context.addDecorationFromBuilder(builderSnapPts);\r\n }\r\n\r\n /** @internal */\r\n public override decorate(context: DecorateContext): void { this.createDecorations(context, false); }\r\n /** @internal */\r\n public override decorateSuspended(context: DecorateContext): void { this.createDecorations(context, true); }\r\n\r\n /** @internal */\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (this._locationData.length > 0 && undefined !== ev.viewport) {\r\n const point = ev.point;\r\n const adjustedPoint = adjustPoint(ev, this._acceptedSegments, this._locationData);\r\n if (undefined !== this._lastMotionPt) {\r\n this._lastMotionPt.setFrom(point);\r\n this._lastMotionAdjustedPt?.setFrom(adjustedPoint);\r\n } else {\r\n this._lastMotionPt = point.clone();\r\n this._lastMotionAdjustedPt = adjustedPoint;\r\n }\r\n ev.viewport.invalidateDecorations();\r\n }\r\n }\r\n\r\n protected reportMeasurements(): void {\r\n if (undefined === this._totalDistanceMarker)\r\n return;\r\n const briefMsg = `${CoreTools.translate(this._acceptedSegments.length > 1 ? \"Measure.Labels.CumulativeDistance\" : \"Measure.Labels.Distance\")}: ${this._totalDistanceMarker.label}`;\r\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\r\n IModelApp.notifications.outputMessage(msgDetail);\r\n }\r\n\r\n protected async updateTotals(): Promise<void> {\r\n this._totalDistance = 0.0;\r\n this._totalDistanceMarker = undefined;\r\n for (const seg of this._acceptedSegments)\r\n this._totalDistance += seg.distance;\r\n if (0.0 === this._totalDistance)\r\n return;\r\n\r\n const formatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === formatterSpec)\r\n return;\r\n\r\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(this._totalDistance, formatterSpec);\r\n this._totalDistanceMarker = new MeasureLabel(this._acceptedSegments[this._acceptedSegments.length - 1].end, formattedTotalDistance);\r\n this.reportMeasurements();\r\n }\r\n\r\n protected async getMarkerToolTip(distance: number, slope: number, start: Point3d, end: Point3d, delta?: Vector3d): Promise<HTMLElement> {\r\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\r\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\r\n const toolTip = document.createElement(\"div\");\r\n\r\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === distanceFormatterSpec)\r\n return toolTip;\r\n\r\n let toolTipHtml = \"\";\r\n const formattedDistance = IModelApp.quantityFormatter.formatQuantity(distance, distanceFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Distance\") + formattedDistance}<br>`;\r\n\r\n if (is3d) {\r\n const angleFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Angle);\r\n if (undefined !== angleFormatterSpec) {\r\n const formattedSlope = IModelApp.quantityFormatter.formatQuantity(slope, angleFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Slope\") + formattedSlope}<br>`;\r\n }\r\n }\r\n\r\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\r\n if (undefined !== coordFormatterSpec) {\r\n let startAdjusted = start;\r\n let endAdjusted = end;\r\n if (isSpatial) {\r\n const globalOrigin = this.iModel.globalOrigin;\r\n startAdjusted = startAdjusted.minus(globalOrigin);\r\n endAdjusted = endAdjusted.minus(globalOrigin);\r\n }\r\n\r\n {\r\n const formattedStartX = IModelApp.quantityFormatter.formatQuantity(startAdjusted.x, coordFormatterSpec);\r\n const formattedStartY = IModelApp.quantityFormatter.formatQuantity(startAdjusted.y, coordFormatterSpec);\r\n const formattedStartZ = IModelApp.quantityFormatter.formatQuantity(startAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"StartCoord\") + formattedStartX}, ${formattedStartY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedStartZ}`;\r\n toolTipHtml += \"<br>\";\r\n }\r\n const formattedEndX = IModelApp.quantityFormatter.formatQuantity(endAdjusted.x, coordFormatterSpec);\r\n const formattedEndY = IModelApp.quantityFormatter.formatQuantity(endAdjusted.y, coordFormatterSpec);\r\n const formattedEndZ = IModelApp.quantityFormatter.formatQuantity(endAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"EndCoord\") + formattedEndX}, ${formattedEndY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedEndZ}`;\r\n toolTipHtml += \"<br>\";\r\n }\r\n\r\n if (undefined !== delta) {\r\n const formattedDeltaX = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.x), distanceFormatterSpec);\r\n const formattedDeltaY = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.y), distanceFormatterSpec);\r\n const formattedDeltaZ = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.z), distanceFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Delta\") + formattedDeltaX}, ${formattedDeltaY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedDeltaZ}`;\r\n toolTipHtml += \"<br>\";\r\n }\r\n\r\n toolTip.innerHTML = toolTipHtml;\r\n return toolTip;\r\n }\r\n\r\n /** @internal */\r\n protected async updateSelectedMarkerToolTip(seg: any, ev: BeButtonEvent, reopenToolTip: boolean): Promise<void> {\r\n seg.marker.title = await this.getMarkerToolTip(seg.distance, seg.slope, seg.adjustedStart, seg.adjustedEnd, seg.marker.isSelected ? seg.adjustedDelta : undefined);\r\n if (!reopenToolTip || undefined === ev.viewport || !IModelApp.notifications.isToolTipOpen)\r\n return;\r\n IModelApp.notifications.clearToolTip();\r\n ev.viewport.openToolTip(seg.marker.title, ev.viewPoint);\r\n }\r\n\r\n /** @internal */\r\n protected async acceptNewSegments(): Promise<void> {\r\n if (this._locationData.length > 1) {\r\n for (let i = 0; i <= this._locationData.length - 2; i++) {\r\n const adjustedStart = this._locationData[i].adjustedPoint;\r\n const adjustedEnd = this._locationData[i + 1].adjustedPoint;\r\n const distance = adjustedStart.distance(adjustedEnd);\r\n const xyDist = adjustedStart.distanceXY(adjustedEnd);\r\n const zDist = adjustedEnd.z - adjustedStart.z;\r\n const slope = (0.0 === xyDist ? Math.PI : Math.atan(zDist / xyDist));\r\n const adjustedDelta = Vector3d.createStartEnd(adjustedStart, adjustedEnd);\r\n const refAxes = this._locationData[i].refAxes;\r\n refAxes.multiplyTransposeVectorInPlace(adjustedDelta);\r\n const start = this._locationData[i].point;\r\n const end = this._locationData[i + 1].point;\r\n const delta = Vector3d.createStartEnd(start, end);\r\n refAxes.multiplyTransposeVectorInPlace(delta);\r\n\r\n const toolTip = await this.getMarkerToolTip(distance, slope, adjustedStart, adjustedEnd);\r\n const marker = new MeasureMarker((this._acceptedSegments.length + 1).toString(), toolTip, start.interpolate(0.5, end), Point2d.create(25, 25));\r\n\r\n const segMarkerButtonFunc = (ev: BeButtonEvent) => {\r\n if (ev.isDown)\r\n return true;\r\n\r\n let selectedMarker: MeasureMarker | undefined;\r\n let pickedMarker: MeasureMarker | undefined;\r\n for (const seg of this._acceptedSegments) {\r\n if (!seg.marker.pick(ev.viewPoint))\r\n continue;\r\n selectedMarker = (seg.marker.isSelected ? undefined : seg.marker);\r\n pickedMarker = seg.marker;\r\n break;\r\n }\r\n\r\n for (const seg of this._acceptedSegments) {\r\n const wasSelected = seg.marker.isSelected;\r\n seg.marker.isSelected = (seg.marker === selectedMarker);\r\n if (wasSelected !== seg.marker.isSelected)\r\n this.updateSelectedMarkerToolTip(seg, ev, (seg.marker === pickedMarker)); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return true;\r\n };\r\n\r\n marker.onMouseButton = segMarkerButtonFunc;\r\n this._acceptedSegments.push({ distance, slope, start, end, delta, adjustedStart, adjustedEnd, adjustedDelta, refAxes, marker });\r\n }\r\n }\r\n this._locationData.length = 0;\r\n await this.updateTotals();\r\n }\r\n\r\n /** @internal */\r\n protected getReferenceAxes(vp?: Viewport): Matrix3d {\r\n const refAxes = Matrix3d.createIdentity();\r\n if (undefined !== vp && vp.isContextRotationRequired)\r\n vp.getAuxCoordRotation(refAxes);\r\n return refAxes;\r\n }\r\n\r\n /** @internal */\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n const point = ev.point.clone();\r\n const adjustedPoint = adjustPoint(ev, this._acceptedSegments, this._locationData);\r\n const refAxes = this.getReferenceAxes(ev.viewport);\r\n const zDir = refAxes.columnZ();\r\n const normal = refAxes.columnZ();\r\n const tangent = refAxes.columnX();\r\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\r\n\r\n // Report xyz delta relative to world up. The surface normal and edge tangent help determine the rotation about z...\r\n if (undefined !== snap) {\r\n if (undefined !== snap.primitive) {\r\n const locDetail = snap.primitive.closestPoint(point, false);\r\n if (undefined !== locDetail && (HitGeomType.Segment === snap.geomType || snap.primitive.isInPlane(Plane3dByOriginAndUnitNormal.create(point, undefined !== snap.normal ? snap.normal : normal)!))) {\r\n const locRay = snap.primitive.fractionToPointAndUnitTangent(locDetail.fraction);\r\n tangent.setFrom(locRay.direction);\r\n if (undefined !== snap.normal)\r\n normal.setFrom(snap.normal);\r\n }\r\n } else if (undefined !== snap.normal) {\r\n normal.setFrom(snap.normal);\r\n }\r\n }\r\n\r\n if (!normal.isParallelTo(zDir, true)) {\r\n const yDir = zDir.unitCrossProduct(normal);\r\n if (undefined !== yDir) {\r\n yDir.unitCrossProduct(zDir, normal);\r\n Matrix3d.createColumnsInAxisOrder(AxisOrder.ZXY, normal, yDir, zDir, refAxes);\r\n }\r\n } else if (!tangent.isParallelTo(zDir, true)) {\r\n const yDir = zDir.unitCrossProduct(tangent);\r\n if (undefined !== yDir) {\r\n yDir.unitCrossProduct(zDir, tangent);\r\n Matrix3d.createColumnsInAxisOrder(AxisOrder.XYZ, tangent, yDir, zDir, refAxes);\r\n }\r\n }\r\n\r\n this._locationData.push({ point, adjustedPoint, refAxes });\r\n\r\n if (this._locationData.length > 1 && !ev.isControlKey)\r\n await this.acceptNewSegments();\r\n this.setupAndPromptForNextAction();\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (0 === this._locationData.length) {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n await this.acceptNewSegments();\r\n this.setupAndPromptForNextAction();\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n if (0 === this._locationData.length && 0 === this._acceptedSegments.length)\r\n return false;\r\n\r\n if (0 !== this._locationData.length) {\r\n this._locationData.pop();\r\n } else if (0 !== this._acceptedSegments.length) {\r\n this._acceptedSegments.pop();\r\n }\r\n\r\n if (0 === this._locationData.length && 0 === this._acceptedSegments.length) {\r\n await this.onReinitialize();\r\n } else {\r\n await this.updateTotals();\r\n this.setupAndPromptForNextAction();\r\n }\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureDistanceTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Report spatial coordinate at a point as well as cartographic location for geolocated models using current quantity formatters.\r\n * @public\r\n */\r\nexport class MeasureLocationTool extends PrimitiveTool {\r\n public static override toolId = \"Measure.Location\";\r\n public static override iconSpec = \"icon-measure-location\";\r\n /** @internal */\r\n protected readonly _acceptedLocations: MeasureMarker[] = [];\r\n /** @internal */\r\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\r\n /** @internal */\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n /** @internal */\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\r\n /** @internal */\r\n public override requireWriteableTarget(): boolean { return false; }\r\n /** @internal */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n\r\n /** @internal */\r\n protected showPrompt(): void {\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"Measure.Location.Prompts.EnterPoint\"));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n if (0 !== this._acceptedLocations.length) {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** @internal */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.showPrompt();\r\n }\r\n\r\n protected async getMarkerToolTip(point: Point3d): Promise<HTMLElement> {\r\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\r\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\r\n const toolTip = document.createElement(\"div\");\r\n\r\n let toolTipHtml = \"\";\r\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\r\n if (undefined !== coordFormatterSpec) {\r\n let pointAdjusted = point;\r\n if (isSpatial) {\r\n const globalOrigin = this.iModel.globalOrigin;\r\n pointAdjusted = pointAdjusted.minus(globalOrigin);\r\n }\r\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\r\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\r\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Coordinate\") + formattedPointX}, ${formattedPointY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedPointZ}`;\r\n\r\n toolTipHtml += \"<br>\";\r\n }\r\n\r\n if (isSpatial) {\r\n const latLongFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.LatLong);\r\n if (undefined !== latLongFormatterSpec && undefined !== coordFormatterSpec) {\r\n try {\r\n const cartographic = await this.iModel.spatialToCartographic(point);\r\n const formattedLat = IModelApp.quantityFormatter.formatQuantity(Math.abs(cartographic.latitude), latLongFormatterSpec);\r\n const formattedLong = IModelApp.quantityFormatter.formatQuantity(Math.abs(cartographic.longitude), latLongFormatterSpec);\r\n const formattedHeight = IModelApp.quantityFormatter.formatQuantity(cartographic.height, coordFormatterSpec);\r\n const latDir = CoreTools.translate(cartographic.latitude < 0 ? \"Measure.Labels.S\" : \"Measure.Labels.N\");\r\n const longDir = CoreTools.translate(cartographic.longitude < 0 ? \"Measure.Labels.W\" : \"Measure.Labels.E\");\r\n toolTipHtml += `${translateBold(\"LatLong\") + formattedLat + latDir}, ${formattedLong}${longDir}<br>`;\r\n toolTipHtml += `${translateBold(\"Altitude\") + formattedHeight}<br>`;\r\n } catch { }\r\n }\r\n }\r\n\r\n toolTip.innerHTML = toolTipHtml;\r\n return toolTip;\r\n }\r\n\r\n /** @internal */\r\n public override decorate(context: DecorateContext): void {\r\n if (!this.isCompatibleViewport(context.viewport, false))\r\n return;\r\n\r\n this._acceptedLocations.forEach((marker) => marker.addDecoration(context));\r\n }\r\n /** @internal */\r\n public override decorateSuspended(context: DecorateContext): void { this.decorate(context); }\r\n\r\n protected reportMeasurements(): void {\r\n if (0 === this._acceptedLocations.length)\r\n return;\r\n const briefMsg = this._acceptedLocations[this._acceptedLocations.length - 1].title;\r\n if (undefined === briefMsg)\r\n return;\r\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\r\n IModelApp.notifications.outputMessage(msgDetail);\r\n }\r\n\r\n /** @internal */\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n const point = ev.point.clone();\r\n const adjustedPoint = adjustPoint(ev);\r\n const toolTip = await this.getMarkerToolTip(adjustedPoint);\r\n const marker = new MeasureMarker((this._acceptedLocations.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\r\n\r\n this._acceptedLocations.push(marker);\r\n this.reportMeasurements();\r\n this.setupAndPromptForNextAction();\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n if (0 === this._acceptedLocations.length)\r\n return false;\r\n\r\n this._acceptedLocations.pop();\r\n if (0 === this._acceptedLocations.length) {\r\n await this.onReinitialize();\r\n } else {\r\n this.reportMeasurements();\r\n this.setupAndPromptForNextAction();\r\n }\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureLocationTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Report area defined by points using current quantity formatter for area.\r\n * @public\r\n */\r\nexport class MeasureAreaByPointsTool extends PrimitiveTool {\r\n public static override toolId = \"Measure.AreaByPoints\";\r\n public static override iconSpec = \"icon-measure-2d\";\r\n /** @internal */\r\n private _orientationValue: DialogItemValue = { value: ContextRotationId.Top };\r\n /** @internal */\r\n protected readonly _points: Point3d[] = [];\r\n /** @internal */\r\n protected _matrix?: Matrix3d;\r\n /** @internal */\r\n protected _isComplete = false;\r\n /** @internal */\r\n protected _area = 0.0;\r\n /** @internal */\r\n protected _perimeter = 0.0;\r\n /** @internal */\r\n protected _centroid = Point3d.createZero();\r\n /** @internal */\r\n protected _marker?: MeasureLabel;\r\n /** @internal */\r\n protected _acceptedMeasurement?: MeasureMarker;\r\n /** @internal */\r\n protected _lastMotionPt?: Point3d;\r\n\r\n /** @internal */\r\n public get orientation(): ContextRotationId { return this._orientationValue.value as ContextRotationId; }\r\n public set orientation(option: ContextRotationId) { this._orientationValue.value = option; }\r\n\r\n /** @internal */\r\n protected static _orientationName = \"enumAsOrientation\";\r\n /** @internal */\r\n protected static enumAsOrientationMessage(str: string) { return CoreTools.translate(`Settings.Orientation.${str}`); }\r\n /** @internal */\r\n protected static _getEnumAsOrientationDescription = (): PropertyDescription => {\r\n return {\r\n name: MeasureAreaByPointsTool._orientationName,\r\n displayLabel: CoreTools.translate(\"Settings.Orientation.Label\"),\r\n typename: \"enum\",\r\n enum: {\r\n choices: [\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Top\"), value: ContextRotationId.Top },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Front\"), value: ContextRotationId.Front },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Left\"), value: ContextRotationId.Left },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Bottom\"), value: ContextRotationId.Bottom },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Back\"), value: ContextRotationId.Back },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Right\"), value: ContextRotationId.Right },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"View\"), value: ContextRotationId.View },\r\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Face\"), value: ContextRotationId.Face },\r\n ],\r\n },\r\n };\r\n };\r\n\r\n /** @internal */\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n const initialValue = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, MeasureAreaByPointsTool._orientationName);\r\n initialValue && (this._orientationValue = initialValue);\r\n const toolSettings = new Array<DialogItem>();\r\n toolSettings.push({ value: this._orientationValue, property: MeasureAreaByPointsTool._getEnumAsOrientationDescription(), editorPosition: { rowPriority: 0, columnIndex: 2 } });\r\n return toolSettings;\r\n }\r\n\r\n /** @internal */\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n if (updatedValue.propertyName === MeasureAreaByPointsTool._orientationName) {\r\n this._orientationValue = updatedValue.value;\r\n if (!this._orientationValue)\r\n return false;\r\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: MeasureAreaByPointsTool._orientationName, value: this._orientationValue });\r\n await this.onReinitialize();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\r\n /** @internal */\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n /** @internal */\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\r\n /** @internal */\r\n public override requireWriteableTarget(): boolean { return false; }\r\n /** @internal */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n\r\n /** @internal */\r\n protected showPrompt(): void {\r\n let mainMsg = \"Measure.AreaByPoints.Prompts.\";\r\n switch (this._points.length) {\r\n case 0:\r\n mainMsg += \"FirstPoint\";\r\n break;\r\n case 1:\r\n mainMsg += \"SecondPoint\";\r\n break;\r\n case 2:\r\n mainMsg += \"ThirdPoint\";\r\n break;\r\n default:\r\n mainMsg += this._isComplete ? \"FirstPoint\" : \"NextPoint\";\r\n break;\r\n }\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n const acceptMsg = CoreTools.translate(this._isComplete ? \"ElementSet.Inputs.Restart\" : \"ElementSet.Inputs.AcceptPoint\");\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n\r\n const resetMsg = CoreTools.translate(\"ElementSet.Inputs.Restart\");\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, resetMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, resetMsg, false, ToolAssistanceInputMethod.Mouse));\r\n\r\n if (this._points.length > 1)\r\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n if (0 !== this._points.length)\r\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** @internal */\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.showPrompt();\r\n\r\n if (this._isComplete) {\r\n AccuDrawHintBuilder.deactivate();\r\n return;\r\n }\r\n\r\n if (0 === this._points.length)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setOrigin(this._points[this._points.length - 1]);\r\n if (this._matrix) {\r\n if (1 === this._points.length) {\r\n hints.setMatrix(this._matrix);\r\n hints.setModeRectangular();\r\n } else if (this._points.length > 1 && !(this._points[this._points.length - 1].isAlmostEqual(this._points[this._points.length - 2]))) {\r\n const xVec = Vector3d.createStartEnd(this._points[this._points.length - 2], this._points[this._points.length - 1]);\r\n const zVec = this._matrix.getColumn(2);\r\n const matrix = Matrix3d.createRigidFromColumns(xVec, zVec, AxisOrder.XZY);\r\n if (undefined !== matrix)\r\n hints.setMatrix(matrix); // Rotate AccuDraw x axis to last segment preserving current up vector...\r\n }\r\n }\r\n hints.setLockZ = true;\r\n hints.sendHints();\r\n }\r\n\r\n /** @internal */\r\n protected getShapePoints(cursorPt: Point3d): Point3d[] {\r\n const points: Point3d[] = [];\r\n if (undefined === this.targetView || this._points.length < 1)\r\n return points;\r\n for (const pt of this._points)\r\n points.push(pt.clone());\r\n\r\n if (this._isComplete || !this._matrix)\r\n return points;\r\n\r\n const normal = this._matrix.getColumn(2);\r\n let currentPt = AccuDrawHintBuilder.projectPointToPlaneInView(cursorPt, points[0], normal, this.targetView, true);\r\n if (undefined === currentPt)\r\n currentPt = cursorPt.clone();\r\n if (2 === points.length && 0 === (IModelApp.toolAdmin.currentInputState.qualifiers & BeModifierKeys.Control)) {\r\n const xDir = Vector3d.createStartEnd(points[0], points[1]);\r\n const xLen = xDir.magnitude();\r\n xDir.normalizeInPlace();\r\n const yDir = xDir.crossProduct(normal);\r\n yDir.normalizeInPlace();\r\n const cornerPt = AccuDrawHintBuilder.projectPointToLineInView(currentPt, points[1], yDir, this.targetView, true);\r\n if (undefined !== cornerPt) {\r\n points.push(cornerPt);\r\n cornerPt.plusScaled(xDir, -xLen, currentPt);\r\n }\r\n }\r\n points.push(currentPt);\r\n\r\n if (points.length > 2)\r\n points.push(points[0].clone());\r\n\r\n return points;\r\n }\r\n\r\n /** @internal */\r\n public override decorate(context: DecorateContext): void {\r\n if (context.viewport !== this.targetView)\r\n return;\r\n\r\n if (undefined === this._lastMotionPt)\r\n return;\r\n const points = this.getShapePoints(this._lastMotionPt);\r\n if (points.length < 2)\r\n return;\r\n\r\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n const colorAccHid = colorAccVis.withAlpha(100);\r\n const fillAccVis = context.viewport.hilite.color.withAlpha(50);\r\n\r\n builderAccVis.setSymbology(colorAccVis, fillAccVis, 3);\r\n builderAccHid.setSymbology(colorAccHid, fillAccVis, 1, LinePixels.Code2);\r\n\r\n if (points.length > 2)\r\n builderAccHid.addShape(points);\r\n\r\n builderAccVis.addLineString(points);\r\n builderAccHid.addLineString(points);\r\n\r\n context.addDecorationFromBuilder(builderAccVis);\r\n context.addDecorationFromBuilder(builderAccHid);\r\n\r\n if (undefined !== this._acceptedMeasurement)\r\n this._acceptedMeasurement.addDecoration(context);\r\n if (undefined !== this._marker)\r\n this._marker.addDecoration(context);\r\n }\r\n\r\n /** @internal */\r\n public override decorateSuspended(context: DecorateContext): void {\r\n if (this._isComplete)\r\n this.decorate(context);\r\n }\r\n\r\n /** @internal */\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (this._points.length > 0 && undefined !== ev.viewport && !this._isComplete) {\r\n if (undefined !== this._lastMotionPt)\r\n this._lastMotionPt.setFrom(ev.point);\r\n else\r\n this._lastMotionPt = ev.point.clone();\r\n ev.viewport.invalidateDecorations();\r\n }\r\n }\r\n\r\n protected async getMarkerToolTip(): Promise<HTMLElement> {\r\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\r\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\r\n const toolTip = document.createElement(\"div\");\r\n let toolTipHtml = \"\";\r\n\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined !== areaFormatterSpec) {\r\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(this._area, areaFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\r\n }\r\n const perimeterFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined !== perimeterFormatterSpec) {\r\n const formattedPerimeter = IModelApp.quantityFormatter.formatQuantity(this._perimeter, perimeterFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Perimeter\") + formattedPerimeter}<br>`;\r\n }\r\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\r\n if (undefined !== coordFormatterSpec) {\r\n let pointAdjusted = this._centroid.clone();\r\n if (isSpatial) {\r\n const globalOrigin = this.iModel.globalOrigin;\r\n pointAdjusted = pointAdjusted.minus(globalOrigin);\r\n }\r\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\r\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\r\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Centroid\") + formattedPointX}, ${formattedPointY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedPointZ}`;\r\n\r\n toolTipHtml += \"<br>\";\r\n }\r\n\r\n toolTip.innerHTML = toolTipHtml;\r\n return toolTip;\r\n }\r\n\r\n protected reportMeasurements(): void {\r\n if (undefined === this._marker)\r\n return;\r\n const briefMsg = `${CoreTools.translate(\"Measure.Labels.Area\")}: ${this._marker.label}`;\r\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\r\n IModelApp.notifications.outputMessage(msgDetail);\r\n }\r\n\r\n protected async updateTotals(): Promise<void> {\r\n if (this._points.length < 3)\r\n return;\r\n\r\n const result = PolygonOps.centroidAreaNormal(this._points);\r\n if (undefined === result)\r\n return;\r\n\r\n this._area = result.a ? result.a : 0.0;\r\n this._centroid.setFrom(result.origin);\r\n this._perimeter = 0.0;\r\n for (let i = 1; i < this._points.length; i++)\r\n this._perimeter += (this._points[i - 1].distance(this._points[i]));\r\n\r\n const toolTip = await this.getMarkerToolTip();\r\n this._acceptedMeasurement = new MeasureMarker(\"1\", toolTip, this._centroid, Point2d.create(25, 25));\r\n this._marker = undefined;\r\n\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined === areaFormatterSpec)\r\n return;\r\n const formattedTotalArea = IModelApp.quantityFormatter.formatQuantity(this._area, areaFormatterSpec);\r\n this._marker = new MeasureLabel(this._centroid, formattedTotalArea);\r\n\r\n this.reportMeasurements();\r\n }\r\n\r\n /** @internal */\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === this.targetView)\r\n return EventHandled.No;\r\n\r\n if (this._isComplete)\r\n await this.onReinitialize();\r\n\r\n if (this._points.length > 1 && !ev.isControlKey) {\r\n const points = this.getShapePoints(ev.point);\r\n if (points.length < 3)\r\n return EventHandled.No;\r\n\r\n this._isComplete = true;\r\n this._points.length = 0;\r\n for (const pt of points)\r\n this._points.push(pt);\r\n\r\n await this.updateTotals();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n if (undefined === this._matrix && undefined === (this._matrix = AccuDrawHintBuilder.getContextRotation(this.orientation, this.targetView)))\r\n return EventHandled.No;\r\n\r\n const currPt = ev.point.clone();\r\n if (this._points.length > 0) {\r\n const planePt = AccuDrawHintBuilder.projectPointToPlaneInView(currPt, this._points[0], this._matrix.getColumn(2), ev.viewport!, true);\r\n if (undefined !== planePt)\r\n currPt.setFrom(planePt);\r\n }\r\n\r\n this._points.push(currPt);\r\n this.setupAndPromptForNextAction();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onReinitialize(): Promise<void> {\r\n this._acceptedMeasurement = undefined;\r\n this._marker = undefined;\r\n this._isComplete = false;\r\n this._points.length = 0;\r\n this._matrix = undefined;\r\n AccuDrawHintBuilder.deactivate();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n if (0 === this._points.length || this._isComplete)\r\n return false;\r\n\r\n this._points.pop();\r\n this.setupAndPromptForNextAction();\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureAreaByPointsTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Base class for mass properties tools.\r\n * @public\r\n */\r\nexport abstract class MeasureElementTool extends PrimitiveTool {\r\n /** @internal */\r\n protected readonly _checkedIds = new Map<Id64String, MassPropertiesResponseProps>();\r\n /** @internal */\r\n protected readonly _acceptedIds: Id64Array = [];\r\n /** @internal */\r\n protected readonly _acceptedMeasurements: MeasureMarker[] = [];\r\n /** @internal */\r\n protected _totalValue: number = 0.0;\r\n /** @internal */\r\n protected _totalMarker?: MeasureLabel;\r\n /** @internal */\r\n protected _useSelection: boolean = false;\r\n\r\n protected abstract getOperation(): MassPropertiesOperation;\r\n\r\n /** @internal */\r\n protected allowView(vp: Viewport) {\r\n return (MassPropertiesOperation.AccumulateVolumes === this.getOperation() ? vp.view.isSpatialView() : (vp.view.isSpatialView() || vp.view.isDrawingView()));\r\n }\r\n\r\n /** @internal */\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\r\n /** @internal */\r\n public override requireWriteableTarget(): boolean { return false; }\r\n /** @internal */\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n /** @internal */\r\n public override async onCleanup() {\r\n if (0 !== this._acceptedIds.length)\r\n this.iModel.hilited.remove({ elements: this._acceptedIds });\r\n }\r\n\r\n /** @internal */\r\n public override async onUnsuspend() { this.showPrompt(); }\r\n\r\n /** @internal */\r\n protected showPrompt(): void {\r\n const mainMsg = (this._useSelection ? (0 === this._acceptedMeasurements.length ? \"ElementSet.Prompts.ConfirmSelection\" : \"ElementSet.Prompts.InspectResult\") : \"ElementSet.Prompts.IdentifyElement\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n if (this._useSelection) {\r\n if (0 === this._acceptedMeasurements.length) {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptSelection\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptSelection\"), false, ToolAssistanceInputMethod.Mouse));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.RejectSelection\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.RejectSelection\"), false, ToolAssistanceInputMethod.Mouse));\r\n } else {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n } else {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Mouse));\r\n if (0 !== this._acceptedMeasurements.length) {\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\r\n }\r\n }\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n /** @internal */\r\n protected setupAndPromptForNextAction(): void {\r\n this._useSelection = (undefined !== this.targetView && this.targetView.iModel.selectionSet.isActive);\r\n if (!this._useSelection)\r\n this.initLocateElements();\r\n this.showPrompt();\r\n }\r\n\r\n /** @internal */\r\n public override decorate(context: DecorateContext): void {\r\n if (!this.isCompatibleViewport(context.viewport, false))\r\n return;\r\n\r\n this._acceptedMeasurements.forEach((marker) => marker.addDecoration(context));\r\n if (undefined !== this._totalMarker)\r\n this._totalMarker.addDecoration(context);\r\n }\r\n\r\n /** @internal */\r\n public override decorateSuspended(context: DecorateContext): void { this.decorate(context); }\r\n\r\n protected reportMeasurements(): void {\r\n if (undefined === this._totalMarker)\r\n return;\r\n let label = \"Measure.Labels.\";\r\n switch (this.getOperation()) {\r\n case MassPropertiesOperation.AccumulateLengths:\r\n label += \"Length\";\r\n break;\r\n case MassPropertiesOperation.AccumulateAreas:\r\n label += \"Area\";\r\n break;\r\n case MassPropertiesOperation.AccumulateVolumes:\r\n label += \"Volume\";\r\n break;\r\n default:\r\n return;\r\n }\r\n const briefMsg = `${CoreTools.translate(label)}: ${this._totalMarker.label}`;\r\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\r\n IModelApp.notifications.outputMessage(msgDetail);\r\n }\r\n\r\n protected async getMarkerToolTip(responseProps: MassPropertiesResponseProps): Promise<HTMLElement> {\r\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\r\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\r\n const toolTip = document.createElement(\"div\");\r\n let toolTipHtml = \"\";\r\n\r\n switch (this.getOperation()) {\r\n case MassPropertiesOperation.AccumulateLengths: {\r\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined !== distanceFormatterSpec) {\r\n const formattedLength = IModelApp.quantityFormatter.formatQuantity(responseProps.length ? responseProps.length : 0, distanceFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Length\") + formattedLength}<br>`;\r\n }\r\n break;\r\n }\r\n case MassPropertiesOperation.AccumulateAreas: {\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined !== areaFormatterSpec) {\r\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(responseProps.area ? responseProps.area : 0, areaFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\r\n }\r\n if (responseProps.perimeter) {\r\n const perimeterFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined !== perimeterFormatterSpec) {\r\n const formattedPerimeter = IModelApp.quantityFormatter.formatQuantity(responseProps.perimeter, perimeterFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Perimeter\") + formattedPerimeter}<br>`;\r\n }\r\n }\r\n break;\r\n }\r\n case MassPropertiesOperation.AccumulateVolumes: {\r\n const volumeFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Volume);\r\n if (undefined !== volumeFormatterSpec) {\r\n const formattedVolume = IModelApp.quantityFormatter.formatQuantity(responseProps.volume ? responseProps.volume : 0, volumeFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Volume\") + formattedVolume}<br>`;\r\n }\r\n if (responseProps.area) {\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined !== areaFormatterSpec) {\r\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(responseProps.area, areaFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (responseProps.centroid) {\r\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\r\n if (undefined !== coordFormatterSpec) {\r\n let pointAdjusted = Point3d.fromJSON(responseProps.centroid);\r\n if (isSpatial) {\r\n const globalOrigin = this.iModel.globalOrigin;\r\n pointAdjusted = pointAdjusted.minus(globalOrigin);\r\n }\r\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\r\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\r\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\r\n toolTipHtml += `${translateBold(\"Centroid\") + formattedPointX}, ${formattedPointY}`;\r\n if (is3d)\r\n toolTipHtml += `, ${formattedPointZ}`;\r\n toolTipHtml += \"<br>\";\r\n }\r\n }\r\n\r\n toolTip.innerHTML = toolTipHtml;\r\n return toolTip;\r\n }\r\n\r\n private getResultValue(operation: MassPropertiesOperation, result: MassPropertiesResponseProps): number {\r\n switch (operation) {\r\n case MassPropertiesOperation.AccumulateLengths:\r\n return (result.length ? result.length : 0.0);\r\n case MassPropertiesOperation.AccumulateAreas:\r\n return (result.area ? result.area : 0.0);\r\n case MassPropertiesOperation.AccumulateVolumes:\r\n return (result.volume ? result.volume : 0.0);\r\n }\r\n }\r\n\r\n protected async updateTotals(selectionSetResult?: MassPropertiesResponseProps): Promise<void> {\r\n this._totalValue = 0.0;\r\n this._totalMarker = undefined;\r\n\r\n let labelPt;\r\n const operation = this.getOperation();\r\n if (undefined !== selectionSetResult) {\r\n labelPt = Point3d.fromJSON(selectionSetResult.centroid);\r\n this._totalValue += this.getResultValue(operation, selectionSetResult);\r\n } else if (0 !== this._acceptedIds.length) {\r\n for (const id of this._acceptedIds) {\r\n const result = this._checkedIds.get(id);\r\n if (undefined === result)\r\n continue;\r\n labelPt = Point3d.fromJSON(result.centroid);\r\n this._totalValue += this.getResultValue(operation, result);\r\n }\r\n }\r\n if (0.0 === this._totalValue || undefined === labelPt)\r\n return;\r\n\r\n switch (operation) {\r\n case MassPropertiesOperation.AccumulateLengths:\r\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === distanceFormatterSpec)\r\n return;\r\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(this._totalValue, distanceFormatterSpec);\r\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalDistance);\r\n break;\r\n case MassPropertiesOperation.AccumulateAreas:\r\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\r\n if (undefined === areaFormatterSpec)\r\n return;\r\n const formattedTotalArea = IModelApp.quantityFormatter.formatQuantity(this._totalValue, areaFormatterSpec);\r\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalArea);\r\n break;\r\n case MassPropertiesOperation.AccumulateVolumes:\r\n const volumeFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Volume);\r\n if (undefined === volumeFormatterSpec)\r\n return;\r\n const formattedTotalVolume = IModelApp.quantityFormatter.formatQuantity(this._totalValue, volumeFormatterSpec);\r\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalVolume);\r\n break;\r\n }\r\n\r\n this.reportMeasurements();\r\n }\r\n\r\n /** @internal */\r\n public async doMeasureSelectedElements(viewport: Viewport): Promise<void> {\r\n const candidates: Id64Array = [];\r\n viewport.iModel.selectionSet.elements.forEach((val) => {\r\n if (!Id64.isInvalid(val) && !Id64.isTransient(val))\r\n candidates.push(val);\r\n });\r\n\r\n if (0 === candidates.length)\r\n return;\r\n\r\n const requestProps: MassPropertiesRequestProps = {\r\n operation: this.getOperation(),\r\n candidates,\r\n };\r\n const result = await this.iModel.getMassProperties(requestProps);\r\n if (BentleyStatus.SUCCESS !== result.status)\r\n return;\r\n\r\n const toolTip = await this.getMarkerToolTip(result);\r\n const point = Point3d.fromJSON(result.centroid);\r\n const marker = new MeasureMarker((this._acceptedMeasurements.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\r\n\r\n this._acceptedMeasurements.push(marker);\r\n await this.updateTotals(result);\r\n this.setupAndPromptForNextAction();\r\n\r\n if (undefined !== viewport)\r\n viewport.invalidateDecorations();\r\n }\r\n\r\n /** @internal */\r\n public override async filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus> {\r\n if (!hit.isElementHit)\r\n return LocateFilterStatus.Reject;\r\n\r\n let result = this._checkedIds.get(hit.sourceId);\r\n if (undefined === result) {\r\n const requestProps: MassPropertiesRequestProps = {\r\n operation: this.getOperation(),\r\n candidates: [hit.sourceId],\r\n };\r\n result = await this.iModel.getMassProperties(requestProps);\r\n this._checkedIds.set(hit.sourceId, result);\r\n }\r\n\r\n return (BentleyStatus.SUCCESS === result.status ? LocateFilterStatus.Accept : LocateFilterStatus.Reject);\r\n }\r\n\r\n /** @internal */\r\n public override async onReinitialize(): Promise<void> {\r\n if (this._useSelection)\r\n return this.exitTool();\r\n return this.onRestartTool();\r\n }\r\n\r\n /** @internal */\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (this._useSelection) {\r\n if (0 === this._acceptedMeasurements.length && undefined !== ev.viewport) {\r\n await this.doMeasureSelectedElements(ev.viewport);\r\n if (0 !== this._acceptedMeasurements.length)\r\n return EventHandled.Yes;\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, CoreTools.translate(\"ElementSet.Error.NotSupportedElmType\")));\r\n await this.onReinitialize();\r\n }\r\n return EventHandled.Yes;\r\n }\r\n\r\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\r\n if (undefined === hit || !hit.isElementHit)\r\n return EventHandled.No;\r\n\r\n const result = this._checkedIds.get(hit.sourceId);\r\n if (undefined === result)\r\n return EventHandled.No;\r\n if (-1 !== this._acceptedIds.indexOf(hit.sourceId))\r\n return EventHandled.Yes; // Already accepted, not rejected in filterHit to avoid showing \"not\" cursor...\r\n\r\n const toolTip = await this.getMarkerToolTip(result);\r\n const point = result.centroid ? Point3d.fromJSON(result.centroid) : ev.point.clone();\r\n const marker = new MeasureMarker((this._acceptedMeasurements.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\r\n\r\n this._acceptedMeasurements.push(marker);\r\n this._acceptedIds.push(hit.sourceId);\r\n this.iModel.hilited.add({ elements: hit.sourceId });\r\n\r\n await this.updateTotals();\r\n this.setupAndPromptForNextAction();\r\n\r\n if (undefined !== ev.viewport)\r\n ev.viewport.invalidateDecorations();\r\n return EventHandled.No;\r\n }\r\n\r\n /** @internal */\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n if (0 === this._acceptedMeasurements.length)\r\n return false;\r\n\r\n this._acceptedMeasurements.pop();\r\n if (0 === this._acceptedMeasurements.length) {\r\n await this.onReinitialize();\r\n } else {\r\n if (0 !== this._acceptedIds.length) {\r\n this.iModel.hilited.remove({ elements: this._acceptedIds[this._acceptedIds.length - 1] });\r\n this._acceptedIds.pop();\r\n }\r\n\r\n await this.updateTotals();\r\n this.setupAndPromptForNextAction();\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/** Report accumulated lengths of selected elements using the current quantity formatter for length.\r\n * @public\r\n */\r\nexport class MeasureLengthTool extends MeasureElementTool {\r\n public static override toolId = \"Measure.Length\";\r\n public static override iconSpec = \"icon-measure\";\r\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateLengths; }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureLengthTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Report accumulated areas of selected elements using the current quantity formatter for area.\r\n * @public\r\n */\r\nexport class MeasureAreaTool extends MeasureElementTool {\r\n public static override toolId = \"Measure.Area\";\r\n public static override iconSpec = \"icon-measure-area\";\r\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateAreas; }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureAreaTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n\r\n/** Report accumulated volumes of selected elements using the current quantity formatter for volume.\r\n * @public\r\n */\r\nexport class MeasureVolumeTool extends MeasureElementTool {\r\n public static override toolId = \"Measure.Volume\";\r\n public static override iconSpec = \"icon-measure-3d\";\r\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateVolumes; }\r\n\r\n /** @internal */\r\n public async onRestartTool(): Promise<void> {\r\n const tool = new MeasureVolumeTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
|