@itwin/core-frontend 5.3.0-dev.8 → 5.3.0
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 +39 -1
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +2 -5
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts +1 -24
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +0 -5
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +4 -0
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +5 -1
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModeljs-css.d.ts.map +1 -1
- package/lib/cjs/IModeljs-css.js +4 -0
- package/lib/cjs/IModeljs-css.js.map +1 -1
- package/lib/cjs/SubCategoriesCache.d.ts +1 -1
- package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
- package/lib/cjs/SubCategoriesCache.js +3 -3
- package/lib/cjs/SubCategoriesCache.js.map +1 -1
- package/lib/cjs/ViewManager.d.ts +4 -2
- package/lib/cjs/ViewManager.d.ts.map +1 -1
- package/lib/cjs/ViewManager.js +3 -1
- package/lib/cjs/ViewManager.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +9 -3
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.js +1 -43
- package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/cjs/common/internal/Symbols.d.ts +1 -0
- package/lib/cjs/common/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/common/internal/Symbols.js +1 -0
- package/lib/cjs/common/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +4 -0
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +3 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/render/RenderAreaPattern.d.ts +1 -0
- package/lib/cjs/internal/render/RenderAreaPattern.d.ts.map +1 -1
- package/lib/cjs/internal/render/RenderAreaPattern.js.map +1 -1
- package/lib/cjs/internal/render/RenderGeometry.d.ts +3 -1
- package/lib/cjs/internal/render/RenderGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/RenderGeometry.js.map +1 -1
- package/lib/cjs/internal/render/RenderPlan.d.ts +3 -1
- package/lib/cjs/internal/render/RenderPlan.d.ts.map +1 -1
- package/lib/cjs/internal/render/RenderPlan.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts +0 -2
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js +0 -7
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts +0 -9
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +4 -67
- package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts +3 -4
- package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderBuilder.js +3 -3
- package/lib/cjs/internal/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/internal/render/webgl/System.d.ts +1 -1
- package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/System.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.js +1 -2
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.js +1 -30
- package/lib/cjs/internal/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Fragment.js +2 -7
- package/lib/cjs/internal/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Surface.js +1 -1
- package/lib/cjs/internal/tile/DynamicIModelTile.d.ts +2 -0
- package/lib/cjs/internal/tile/DynamicIModelTile.d.ts.map +1 -1
- package/lib/cjs/internal/tile/DynamicIModelTile.js +3 -0
- package/lib/cjs/internal/tile/DynamicIModelTile.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.d.ts +2 -0
- package/lib/cjs/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.js +5 -0
- package/lib/cjs/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js +1 -0
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/render/Pixel.d.ts +2 -13
- package/lib/cjs/render/Pixel.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.js +1 -9
- package/lib/cjs/render/Pixel.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerAuthentication.d.ts +4 -0
- package/lib/cjs/tile/map/MapLayerAuthentication.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +17 -2
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +29 -2
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts +82 -26
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.js +171 -87
- package/lib/cjs/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +3 -0
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +2 -5
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/HitDetail.d.ts +1 -24
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +0 -5
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +4 -0
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +5 -1
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModeljs-css.d.ts.map +1 -1
- package/lib/esm/IModeljs-css.js +4 -0
- package/lib/esm/IModeljs-css.js.map +1 -1
- package/lib/esm/SubCategoriesCache.d.ts +1 -1
- package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
- package/lib/esm/SubCategoriesCache.js +3 -3
- package/lib/esm/SubCategoriesCache.js.map +1 -1
- package/lib/esm/ViewManager.d.ts +4 -2
- package/lib/esm/ViewManager.d.ts.map +1 -1
- package/lib/esm/ViewManager.js +3 -1
- package/lib/esm/ViewManager.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +9 -3
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.js +1 -43
- package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/esm/common/internal/Symbols.d.ts +1 -0
- package/lib/esm/common/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/common/internal/Symbols.js +1 -0
- package/lib/esm/common/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +4 -0
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -0
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/render/RenderAreaPattern.d.ts +1 -0
- package/lib/esm/internal/render/RenderAreaPattern.d.ts.map +1 -1
- package/lib/esm/internal/render/RenderAreaPattern.js.map +1 -1
- package/lib/esm/internal/render/RenderGeometry.d.ts +3 -1
- package/lib/esm/internal/render/RenderGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/RenderGeometry.js.map +1 -1
- package/lib/esm/internal/render/RenderPlan.d.ts +3 -1
- package/lib/esm/internal/render/RenderPlan.d.ts.map +1 -1
- package/lib/esm/internal/render/RenderPlan.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts +0 -2
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js +1 -8
- package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts +0 -9
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +4 -67
- package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts +3 -4
- package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderBuilder.js +3 -3
- package/lib/esm/internal/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/internal/render/webgl/System.d.ts +1 -1
- package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/System.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.js +1 -2
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.js +1 -30
- package/lib/esm/internal/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Fragment.js +2 -7
- package/lib/esm/internal/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +1 -1
- package/lib/esm/internal/render/webgl/glsl/Surface.js +1 -1
- package/lib/esm/internal/tile/DynamicIModelTile.d.ts +2 -0
- package/lib/esm/internal/tile/DynamicIModelTile.d.ts.map +1 -1
- package/lib/esm/internal/tile/DynamicIModelTile.js +3 -0
- package/lib/esm/internal/tile/DynamicIModelTile.js.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.d.ts +2 -0
- package/lib/esm/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.js +5 -0
- package/lib/esm/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js +1 -0
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/render/Pixel.d.ts +2 -13
- package/lib/esm/render/Pixel.d.ts.map +1 -1
- package/lib/esm/render/Pixel.js +1 -9
- package/lib/esm/render/Pixel.js.map +1 -1
- package/lib/esm/tile/map/MapLayerAuthentication.d.ts +4 -0
- package/lib/esm/tile/map/MapLayerAuthentication.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +17 -2
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +29 -2
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts +82 -26
- package/lib/esm/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.js +171 -87
- package/lib/esm/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +3 -0
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +22 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolAdmin.js","sourceRoot":"","sources":["../../../src/tools/ToolAdmin.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { AbandonedError, assert, BeEvent, BeTimePoint, IModelStatus, Logger } from \"@itwin/core-bentley\";\nimport { Matrix3d, Point2d, Point3d, Transform, Vector3d, XAndY } from \"@itwin/core-geometry\";\nimport { Easing, GeometryStreamProps, NpcCenter } from \"@itwin/core-common\";\nimport { DialogItemValue, DialogPropertyItem, DialogPropertySyncItem } from \"@itwin/appui-abstract\";\nimport { AccuSnap, TentativeOrAccuSnap } from \"../AccuSnap\";\nimport { LocateOptions } from \"../ElementLocateManager\";\nimport { FrontendLoggerCategory } from \"../common/FrontendLoggerCategory\";\nimport { HitDetail } from \"../HitDetail\";\nimport { IModelApp } from \"../IModelApp\";\nimport { linePlaneIntersect } from \"../LinePlaneIntersect\";\nimport { MessageBoxIconType, MessageBoxType } from \"../NotificationManager\";\nimport { CanvasDecoration } from \"../render/CanvasDecoration\";\nimport { IconSprites } from \"../Sprites\";\nimport { OnViewExtentsError, ViewChangeOptions } from \"../ViewAnimation\";\nimport { DecorateContext, DynamicsContext } from \"../ViewContext\";\nimport { ScreenViewport, Viewport } from \"../Viewport\";\nimport { ViewStatus } from \"../ViewStatus\";\nimport { PrimitiveTool } from \"./PrimitiveTool\";\nimport {\n BeButton, BeButtonEvent, BeButtonState, BeModifierKeys, BeTouchEvent, BeWheelEvent, CoordinateLockOverrides, CoordSource, EventHandled,\n InputCollector, InputSource, InteractiveTool, Tool,\n} from \"./Tool\";\nimport { ToolSettings } from \"./ToolSettings\";\nimport { ViewTool } from \"./ViewTool\";\n\n/**\n * @public\n * @extensions\n */\nexport enum StartOrResume { Start = 1, Resume = 2 }\n\n/**\n * @public\n * @extensions\n */\nexport enum ManipulatorToolEvent { Start = 1, Stop = 2, Suspend = 3, Unsuspend = 4 }\n\nconst enum MouseButton { Left = 0, Middle = 1, Right = 2 } // eslint-disable-line no-restricted-syntax\n\n/** Maintains the state of tool settings properties for the current session.\n * @see [[ToolAdmin.toolSettingsState]] to access the state for the current session.\n * @public\n */\nexport class ToolSettingsState {\n /** Retrieve saved tool settings DialogItemValue by property name. */\n public getInitialToolSettingValue(toolId: string, propertyName: string): DialogItemValue | undefined {\n const key = `${toolId}:${propertyName}`;\n const savedValue = window.sessionStorage.getItem(key);\n if (null !== savedValue) {\n return JSON.parse(savedValue) as DialogItemValue;\n }\n return undefined;\n }\n\n /** Retrieve an array of DialogPropertyItem with the values latest values that were used in the session. */\n public getInitialToolSettingValues(toolId: string, propertyNames: string[]): DialogPropertyItem[] | undefined {\n const initializedProperties: DialogPropertyItem[] = [];\n let propertyValue: DialogItemValue | undefined;\n\n propertyNames.forEach((propertyName: string) => {\n propertyValue = this.getInitialToolSettingValue(toolId, propertyName);\n if (propertyValue)\n initializedProperties.push({ value: propertyValue, propertyName });\n });\n\n return initializedProperties.length ? initializedProperties : undefined;\n }\n\n /** Save single tool settings value to session storage. */\n public saveToolSettingProperty(toolId: string, item: DialogPropertyItem): void {\n const key = `${toolId}:${item.propertyName}`;\n const objectAsString = JSON.stringify(item.value);\n window.sessionStorage.setItem(key, objectAsString);\n }\n\n /** Save an array of tool settings values to session storage */\n public saveToolSettingProperties(toolId: string, tsProps: DialogPropertyItem[]): void {\n tsProps.forEach((item: DialogPropertyItem) => this.saveToolSettingProperty(toolId, item));\n }\n}\n\n/** @internal */\nexport class ToolState {\n public coordLockOvr = CoordinateLockOverrides.None;\n public locateCircleOn = false;\n public setFrom(other: ToolState) {\n this.coordLockOvr = other.coordLockOvr;\n this.locateCircleOn = other.locateCircleOn;\n }\n\n public clone(): ToolState {\n const val = new ToolState();\n val.setFrom(this);\n return val;\n }\n}\n\n/** @internal */\nexport class SuspendedToolState {\n private readonly _toolState: ToolState;\n private readonly _accuSnapState: AccuSnap.ToolState;\n private readonly _locateOptions: LocateOptions;\n private readonly _viewCursor?: string;\n private _inDynamics: boolean;\n private _shuttingDown = false;\n\n constructor() {\n const { toolAdmin, viewManager, accuSnap, locateManager } = IModelApp;\n toolAdmin.setIncompatibleViewportCursor(true); // Don't save this\n this._toolState = toolAdmin.toolState.clone();\n this._accuSnapState = accuSnap.toolState.clone();\n this._locateOptions = locateManager.options.clone();\n this._viewCursor = viewManager.cursor;\n this._inDynamics = viewManager.inDynamicsMode;\n if (this._inDynamics)\n viewManager.endDynamicsMode();\n }\n\n public stop() {\n if (this._shuttingDown)\n return;\n\n const { toolAdmin, viewManager, accuSnap, locateManager } = IModelApp;\n toolAdmin.setIncompatibleViewportCursor(true); // Don't restore this\n toolAdmin.toolState.setFrom(this._toolState);\n accuSnap.toolState.setFrom(this._accuSnapState);\n locateManager.options.setFrom(this._locateOptions);\n viewManager.setViewCursor(this._viewCursor);\n if (this._inDynamics)\n viewManager.beginDynamicsMode();\n else\n viewManager.endDynamicsMode();\n }\n}\n\n/** @internal */\nexport class CurrentInputState {\n private readonly _rawPoint: Point3d = new Point3d();\n private readonly _point: Point3d = new Point3d();\n private readonly _viewPoint: Point3d = new Point3d();\n public qualifiers = BeModifierKeys.None;\n public viewport?: ScreenViewport;\n public button: BeButtonState[] = [new BeButtonState(), new BeButtonState(), new BeButtonState()];\n public lastButton: BeButton = BeButton.Data;\n public inputSource: InputSource = InputSource.Unknown;\n public lastMotion = new Point2d();\n public lastMotionEvent?: BeButtonEvent;\n public lastWheelEvent?: BeWheelEvent;\n public lastTouchStart?: BeTouchEvent;\n public touchTapTimer?: number;\n public touchTapCount?: number;\n\n public get rawPoint() { return this._rawPoint; }\n public set rawPoint(pt: Point3d) { this._rawPoint.setFrom(pt); }\n public get point() { return this._point; }\n public set point(pt: Point3d) { this._point.setFrom(pt); }\n public get viewPoint() { return this._viewPoint; }\n public set viewPoint(pt: Point3d) { this._viewPoint.setFrom(pt); }\n public get isShiftDown() { return 0 !== (this.qualifiers & BeModifierKeys.Shift); }\n public get isControlDown() { return 0 !== (this.qualifiers & BeModifierKeys.Control); }\n public get isAltDown() { return 0 !== (this.qualifiers & BeModifierKeys.Alt); }\n\n public isDragging(button: BeButton) { return this.button[button].isDragging; }\n public onStartDrag(button: BeButton) { this.button[button].isDragging = true; }\n public onInstallTool() {\n this.clearKeyQualifiers();\n this.lastWheelEvent = this.lastMotionEvent = undefined;\n this.lastTouchStart = this.touchTapTimer = this.touchTapCount = undefined;\n }\n\n public clearKeyQualifiers() { this.qualifiers = BeModifierKeys.None; }\n public clearViewport(vp: Viewport) {\n if (vp === this.viewport)\n this.viewport = undefined;\n }\n\n private isAnyDragging() { return this.button.some((button) => button.isDragging); }\n private setKeyQualifier(qual: BeModifierKeys, down: boolean) {\n this.qualifiers = down ? (this.qualifiers | qual) : (this.qualifiers & (~qual));\n }\n\n public setKeyQualifiers(ev: MouseEvent | KeyboardEvent | TouchEvent): void {\n this.setKeyQualifier(BeModifierKeys.Shift, ev.shiftKey);\n this.setKeyQualifier(BeModifierKeys.Control, ev.ctrlKey);\n this.setKeyQualifier(BeModifierKeys.Alt, ev.altKey);\n }\n\n public onMotion(pt2d: XAndY) {\n this.lastMotion.x = pt2d.x;\n this.lastMotion.y = pt2d.y;\n }\n\n public changeButtonToDownPoint(ev: BeButtonEvent) {\n ev.point = this.button[ev.button].downUorPt;\n ev.rawPoint = this.button[ev.button].downRawPt;\n\n if (ev.viewport)\n ev.viewPoint = ev.viewport.worldToView(ev.rawPoint);\n }\n\n public updateDownPoint(ev: BeButtonEvent) { this.button[ev.button].downUorPt = ev.point; }\n\n public onButtonDown(button: BeButton) {\n let isDoubleClick = false;\n const now = Date.now();\n const vp = this.viewport;\n\n if (undefined !== vp) {\n const viewPt = vp.worldToView(this.button[button].downRawPt);\n const center = vp.npcToView(NpcCenter);\n viewPt.z = center.z;\n\n isDoubleClick = ((now - this.button[button].downTime) < ToolSettings.doubleClickTimeout.milliseconds) && (viewPt.distance(this.viewPoint) < vp.pixelsFromInches(ToolSettings.doubleClickToleranceInches));\n }\n\n this.button[button].init(this.point, this.rawPoint, now, true, isDoubleClick, false, this.inputSource);\n this.lastButton = button;\n }\n\n public onButtonUp(button: BeButton) {\n this.button[button].isDown = false;\n this.button[button].isDragging = false;\n this.lastButton = button;\n }\n\n public toEvent(ev: BeButtonEvent, useSnap: boolean) {\n let coordsFrom = CoordSource.User;\n const point = this.point.clone();\n let viewport = this.viewport;\n\n if (useSnap) {\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (snap) {\n coordsFrom = snap.isHot ? CoordSource.ElemSnap : CoordSource.User;\n point.setFrom(snap.isPointAdjusted ? snap.adjustedPoint : snap.getPoint()); // NOTE: adjustedPoint can be set by adjustSnapPoint even when not hot...\n viewport = snap.viewport;\n } else if (IModelApp.tentativePoint.isActive) {\n coordsFrom = CoordSource.TentativePoint;\n point.setFrom(IModelApp.tentativePoint.getPoint());\n viewport = IModelApp.tentativePoint.viewport;\n }\n }\n\n const buttonState = this.button[this.lastButton];\n ev.init({\n point, rawPoint: this.rawPoint, viewPoint: this.viewPoint, viewport, coordsFrom,\n keyModifiers: this.qualifiers, button: this.lastButton, isDown: buttonState.isDown,\n isDoubleClick: buttonState.isDoubleClick, isDragging: buttonState.isDragging,\n inputSource: this.inputSource,\n });\n }\n\n public adjustLastDataPoint(ev: BeButtonEvent) {\n const state = this.button[BeButton.Data];\n state.downUorPt = ev.point;\n state.downRawPt = ev.point;\n this.viewport = ev.viewport;\n }\n\n public toEventFromLastDataPoint(ev: BeButtonEvent) {\n const state = this.button[BeButton.Data];\n const point = state.downUorPt;\n const rawPoint = state.downRawPt;\n const viewPoint = this.viewport ? this.viewport.worldToView(rawPoint) : Point3d.create(); // BeButtonEvent is invalid when viewport is undefined\n ev.init({\n point, rawPoint, viewPoint, viewport: this.viewport, coordsFrom: CoordSource.User,\n keyModifiers: this.qualifiers, button: BeButton.Data, isDown: state.isDown,\n isDoubleClick: state.isDoubleClick, isDragging: state.isDragging, inputSource: state.inputSource,\n });\n }\n\n public fromPoint(vp: ScreenViewport, pt: XAndY, source: InputSource) {\n this.viewport = vp;\n this._viewPoint.x = pt.x;\n this._viewPoint.y = pt.y;\n this._viewPoint.z = vp.npcToView(NpcCenter).z;\n vp.viewToWorld(this._viewPoint, this._rawPoint);\n this.point = this._rawPoint;\n this.inputSource = source;\n }\n\n public fromButton(vp: ScreenViewport, pt: XAndY, source: InputSource, applyLocks: boolean) {\n this.fromPoint(vp, pt, source);\n\n // NOTE: Using the hit point on the element is preferable to ignoring a snap that is not \"hot\" completely\n if (TentativeOrAccuSnap.getCurrentSnap(false)) {\n if (applyLocks)\n IModelApp.toolAdmin.adjustSnapPoint();\n return;\n }\n IModelApp.toolAdmin.adjustPoint(this._point, vp, true, applyLocks);\n }\n\n public isStartDrag(button: BeButton): boolean {\n // First make sure we aren't already dragging any button\n if (this.isAnyDragging())\n return false;\n\n const state = this.button[button];\n if (!state.isDown)\n return false;\n\n if ((Date.now() - state.downTime) <= ToolSettings.startDragDelay.milliseconds)\n return false;\n\n const vp = this.viewport;\n if (undefined === vp)\n return false;\n\n const viewPt = vp.worldToView(state.downRawPt);\n const deltaX = Math.abs(this._viewPoint.x - viewPt.x);\n const deltaY = Math.abs(this._viewPoint.y - viewPt.y);\n\n return ((deltaX + deltaY) > vp.pixelsFromInches(ToolSettings.startDragDistanceInches));\n }\n}\n\n/** A ToolEvent combines an HTML Event and a Viewport. It is stored in a queue for processing by the ToolAdmin.eventLoop. */\ninterface ToolEvent {\n ev: Event;\n vp?: ScreenViewport; // Viewport is optional - keyboard events aren't associated with a Viewport.\n}\n\n/** Supplied by EditTools.initialize to make sure the current edit command finishes before starting a new primitive tool in the event that\n * the current edit tool that did not do so in it's onCleanup.\n * @internal\n */\nexport interface EditCommandHandler {\n finishCommand(): Promise<string>;\n}\n\n/** Controls the operation of [[Tool]]s, administering the current [[ViewTool]], [[PrimitiveTool]], and [[IdleTool]] and forwarding events to the appropriate tool.\n * @see [[IModelApp.toolAdmin]] to access the session's `ToolAdmin`.\n * @public\n * @extensions\n */\nexport class ToolAdmin {\n public markupView?: ScreenViewport;\n /** @internal */\n public readonly currentInputState = new CurrentInputState();\n /** @internal */\n public readonly toolState = new ToolState();\n /** Maintains the state of tool settings properties for the current session. */\n public readonly toolSettingsState = new ToolSettingsState();\n private _canvasDecoration?: CanvasDecoration;\n private _suspendedByViewTool?: SuspendedToolState;\n private _suspendedByInputCollector?: SuspendedToolState;\n private _viewTool?: ViewTool;\n private _primitiveTool?: PrimitiveTool;\n private _idleTool?: InteractiveTool;\n private _inputCollector?: InputCollector;\n private _saveCursor?: string;\n private _saveLocateCircle = false;\n private _defaultToolId = \"Select\";\n private _defaultToolArgs?: any[];\n private _lastHandledMotionTime?: BeTimePoint;\n private _mouseMoveOverTimeout?: NodeJS.Timeout;\n private _editCommandHandler?: EditCommandHandler;\n\n /** The name of the [[PrimitiveTool]] to use as the default tool.\n * Defaults to \"Select\", referring to [[SelectionTool]].\n * @note An empty string signifies no default tool allowing more events to be handled by [[idleTool]].\n * @see [[startDefaultTool]] to activate the default tool.\n * @see [[defaultToolArgs]] to supply arguments when starting the tool.\n */\n public get defaultToolId(): string {\n return this._defaultToolId;\n }\n public set defaultToolId(toolId: string) {\n this._defaultToolId = toolId;\n }\n\n /** The arguments supplied to the default [[Tool]]'s [[Tool.run]] method from [[startDefaultTool]].\n * @see [[defaultToolId]] to configure the default tool.\n */\n public get defaultToolArgs(): any[] | undefined {\n return this._defaultToolArgs;\n }\n public set defaultToolArgs(args: any[] | undefined) {\n this._defaultToolArgs = args;\n }\n\n /** Apply operations such as transform, copy or delete to all members of an assembly. */\n public assemblyLock = false;\n /** If Grid Lock is on, project data points to grid. */\n public gridLock = false;\n /** If ACS Snap Lock is on, project snap points to the ACS plane. */\n public acsPlaneSnapLock = false;\n /** If ACS Plane Lock is on, standard view rotations are relative to the ACS instead of global. */\n public acsContextLock = false;\n\n /** Options for how uncaught exceptions should be handled by [[ToolAdmin.exceptionHandler]]. */\n public static exceptionOptions = {\n /** Log exception to Logger. */\n log: true,\n /** Show an alert box explaining that a problem happened. */\n alertBox: true,\n /** Include the \"gory details\" (e.g. stack trace) in the alert box. */\n details: true,\n /** break into debugger (only works if debugger is already opened) */\n launchDebugger: true,\n };\n\n /** A function that catches otherwise-uncaught exceptions occurring inside ToolAdmin.eventLoop.\n * To customize the behavior of this function, modify [[ToolAdmin.exceptionOptions]].\n * To replace it within your own handler, simply assign to it, e.g.:\n * ```ts\n * ToolAdmin.exceptionHandler = (exception: any): Promise<any> => {\n * ... your implementation here\n * }\n * ```\n */\n public static async exceptionHandler(exception: any): Promise<any> {\n const opts = ToolAdmin.exceptionOptions;\n const msg: string = undefined !== exception.stack ? exception.stack : exception.toString();\n if (opts.log)\n Logger.logError(`${FrontendLoggerCategory.Package}.unhandledException`, msg);\n\n if (opts.launchDebugger) // this does nothing if the debugger window is not already opened\n debugger; // eslint-disable-line no-debugger\n\n if (!opts.alertBox)\n return;\n\n let out = `<h2>${IModelApp.localization.getLocalizedString(\"iModelJs:Errors.ReloadPage\")}</h2>`;\n if (opts.details) {\n out += `<h3>${IModelApp.localization.getLocalizedString(\"iModelJs:Errors.Details\")}</h3><h4>`;\n msg.split(\"\\n\").forEach((line) => out += `${line}<br>`);\n out += \"</h4>\";\n }\n\n const div = document.createElement(\"div\");\n div.innerHTML = out;\n return IModelApp.notifications.openMessageBox(MessageBoxType.MediumAlert, div, MessageBoxIconType.Critical);\n }\n\n private static readonly _removals: VoidFunction[] = [];\n\n /** The registered handler method that will update the UI with any property value changes.\n * @internal\n */\n private _toolSettingsChangeHandler: ((toolId: string, syncProperties: DialogPropertySyncItem[]) => void) | undefined = undefined;\n\n /** Returns the handler registered by the UI layer that allows it to display property changes made by the active Tool. */\n public get toolSettingsChangeHandler() { return this._toolSettingsChangeHandler; }\n public set toolSettingsChangeHandler(handler: ((toolId: string, syncProperties: DialogPropertySyncItem[]) => void) | undefined) {\n this._toolSettingsChangeHandler = handler;\n }\n\n /** The registered handler method that will inform the UI to reload tool setting with properties from active tool.\n * @internal\n */\n private _reloadToolSettingsHandler: (() => void) | undefined = undefined;\n\n /** Returns the handler registered by the UI layer that allows it to display property changes made by the active Tool. */\n public get reloadToolSettingsHandler() { return this._reloadToolSettingsHandler; }\n public set reloadToolSettingsHandler(handler: (() => void) | undefined) {\n this._reloadToolSettingsHandler = handler;\n }\n\n /** The registered handler method that will trigger UI Sync processing.\n * @internal\n */\n private _toolSyncUiEventDispatcher: ((syncEventId: string, useImmediateDispatch?: boolean) => void) | undefined = undefined;\n\n /** Returns the handler registered by the UI layer that will trigger UiSyncEvent processing that informs UI component to refresh their state. */\n public get toolSyncUiEventDispatcher() { return this._toolSyncUiEventDispatcher; }\n public set toolSyncUiEventDispatcher(handler: ((syncEventId: string, useImmediateDispatch?: boolean) => void) | undefined) {\n this._toolSyncUiEventDispatcher = handler;\n }\n\n /** Handler for keyboard events. */\n private static _keyEventHandler = (ev: KeyboardEvent) => {\n if (!ev.repeat) // we don't want repeated keyboard events. If we keep them they interfere with replacing mouse motion events, since they come as a stream.\n ToolAdmin.addEvent(ev);\n };\n\n /** @internal */\n public onInitialized() {\n if (typeof document === \"undefined\")\n return; // if document isn't defined, we're probably running in a test environment. At any rate, we can't have interactive tools.\n\n this._idleTool = IModelApp.tools.create(\"Idle\") as InteractiveTool;\n\n [\"keydown\", \"keyup\"].forEach((type) => {\n document.addEventListener(type, ToolAdmin._keyEventHandler as EventListener, false);\n ToolAdmin._removals.push(() => document.removeEventListener(type, ToolAdmin._keyEventHandler as EventListener, false));\n });\n\n ToolAdmin._removals.push(() => window.onfocus = null);\n }\n\n /** @internal */\n public onShutDown() {\n this.clearMotionPromises();\n this._idleTool = undefined;\n IconSprites.emptyAll(); // clear cache of icon sprites\n ToolAdmin._removals.forEach((remove) => remove());\n ToolAdmin._removals.length = 0;\n }\n\n /** Get the ScreenViewport where the cursor is currently, if any. */\n public get cursorView(): ScreenViewport | undefined { return this.currentInputState.viewport; }\n\n /** Called from ViewManager.dropViewport to prevent tools from continuing to operate on the dropped viewport.\n * @internal\n */\n public forgetViewport(vp: ScreenViewport): void {\n // Ignore pending motion promises on fulfillment.\n this.clearMotionPromises();\n\n // make sure tools don't think the cursor is still in this viewport.\n this.onMouseLeave(vp);\n\n // Invalidate last motion if for this viewport...\n if (this.currentInputState.lastMotionEvent?.viewport === vp)\n this.currentInputState.lastMotionEvent = undefined;\n\n // Remove any events associated with this viewport.\n ToolAdmin._toolEvents = ToolAdmin._toolEvents.filter((ev) => ev.vp !== vp);\n }\n\n private getMousePosition(event: ToolEvent): XAndY {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return event.vp!.mousePosFromEvent(event.ev as MouseEvent);\n }\n\n private getMouseMovement(event: ToolEvent): XAndY {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return event.vp!.mouseMovementFromEvent(event.ev as MouseEvent);\n }\n\n private getMouseButton(button: number) {\n switch (button) {\n case MouseButton.Middle: return BeButton.Middle;\n case MouseButton.Right: return BeButton.Reset;\n default: return BeButton.Data;\n }\n }\n\n private async onMouseButton(event: ToolEvent, isDown: boolean): Promise<any> {\n const ev = event.ev as MouseEvent;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const vp = event.vp!;\n const pos = this.getMousePosition(event);\n const button = this.getMouseButton(ev.button);\n\n this.currentInputState.setKeyQualifiers(ev);\n return isDown ? this.onButtonDown(vp, pos, button, InputSource.Mouse) : this.onButtonUp(vp, pos, button, InputSource.Mouse);\n }\n\n private async onWheel(event: ToolEvent): Promise<EventHandled> {\n const ev = event.ev as WheelEvent;\n const vp = event.vp;\n if (undefined === vp || this.filterViewport(vp))\n return EventHandled.Yes;\n const current = this.currentInputState;\n current.setKeyQualifiers(ev);\n\n if (ev.deltaY === 0)\n return EventHandled.No;\n\n let delta: number;\n switch (ev.deltaMode) {\n case ev.DOM_DELTA_LINE:\n delta = -ev.deltaY * ToolSettings.wheelLineFactor; // 40\n break;\n case ev.DOM_DELTA_PAGE:\n delta = -ev.deltaY * ToolSettings.wheelPageFactor; // 120;\n break;\n default: // DOM_DELTA_PIXEL:\n delta = -ev.deltaY;\n break;\n }\n\n const pt2d = this.getMousePosition(event);\n\n vp.setAnimator();\n current.fromButton(vp, pt2d, InputSource.Mouse, true);\n const wheelEvent = new BeWheelEvent();\n wheelEvent.wheelDelta = delta;\n current.toEvent(wheelEvent, true);\n\n const overlayHit = this.pickCanvasDecoration(wheelEvent);\n if (undefined !== overlayHit && undefined !== overlayHit.onWheel && overlayHit.onWheel(wheelEvent))\n return EventHandled.Yes;\n\n const tool = this.activeTool;\n if (undefined === tool || EventHandled.Yes !== await tool.onMouseWheel(wheelEvent) && vp !== this.markupView)\n return this.idleTool.onMouseWheel(wheelEvent);\n return EventHandled.Yes;\n }\n\n private async sendTapEvent(touchEv: BeTouchEvent): Promise<EventHandled> {\n const vp = touchEv.viewport;\n if (undefined !== vp)\n vp.setAnimator();\n const overlayHit = this.pickCanvasDecoration(touchEv);\n if (undefined !== overlayHit && undefined !== overlayHit.onMouseButton && overlayHit.onMouseButton(touchEv))\n return EventHandled.Yes;\n\n if (await IModelApp.accuSnap.onTouchTap(touchEv))\n return EventHandled.Yes;\n\n const tool = this.activeTool;\n if (undefined !== tool && EventHandled.Yes === await tool.onTouchTap(touchEv))\n return EventHandled.Yes;\n\n return this.idleTool.onTouchTap(touchEv);\n }\n\n private async doubleTapTimeout(): Promise<void> {\n const current = this.currentInputState;\n if (undefined === current.touchTapTimer)\n return;\n\n const touchEv = current.lastTouchStart;\n const numTouches = (undefined !== current.lastTouchStart ? current.lastTouchStart.touchCount : 0);\n const numTaps = (undefined !== current.touchTapCount ? current.touchTapCount : 0);\n\n current.touchTapTimer = current.touchTapCount = current.lastTouchStart = undefined;\n if (undefined === touchEv || 0 > numTouches || 0 > numTaps)\n return;\n\n touchEv.tapCount = numTaps;\n await this.sendTapEvent(touchEv);\n }\n\n private async onTouch(event: ToolEvent): Promise<void> {\n const touchEvent = event.ev as TouchEvent;\n const vp = event.vp;\n if (undefined === vp || this.filterViewport(vp))\n return;\n\n const ev = new BeTouchEvent({ touchEvent });\n const current = this.currentInputState;\n const pos = BeTouchEvent.getTouchListCentroid(0 !== touchEvent.targetTouches.length ? touchEvent.targetTouches : touchEvent.changedTouches, vp);\n\n switch (touchEvent.type) {\n case \"touchstart\":\n if (touchEvent.changedTouches.length === touchEvent.targetTouches.length)\n vp.setAnimator(); // Clear viewport animator on start of new touch input (first contact point added)...\n current.setKeyQualifiers(touchEvent);\n break;\n case \"touchend\":\n current.setKeyQualifiers(touchEvent);\n break;\n }\n\n current.fromButton(vp, undefined !== pos ? pos : Point2d.createZero(), InputSource.Touch, true);\n current.toEvent(ev, false);\n const tool = this.activeTool;\n\n switch (touchEvent.type) {\n case \"touchstart\": {\n current.lastTouchStart = ev;\n IModelApp.accuSnap.onTouchStart(ev);\n if (undefined !== tool)\n await tool.onTouchStart(ev);\n return;\n }\n\n case \"touchend\": {\n IModelApp.accuSnap.onTouchEnd(ev);\n if (undefined !== tool) {\n await tool.onTouchEnd(ev);\n if (0 === ev.touchCount)\n await tool.onTouchComplete(ev);\n }\n\n if (undefined === current.lastTouchStart)\n return;\n\n if (ev.touchEvent.timeStamp - current.lastTouchStart.touchEvent.timeStamp > (2.0 * ToolSettings.doubleTapTimeout.milliseconds))\n return; // Too much time has passed from touchstart to be considered a tap...\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ev.touchEvent.changedTouches.length; i++) {\n const currTouch = ev.touchEvent.changedTouches[i];\n const startTouch = BeTouchEvent.findTouchById(current.lastTouchStart.touchEvent.targetTouches, currTouch.identifier);\n\n if (undefined !== startTouch) {\n const currPt = BeTouchEvent.getTouchPosition(currTouch, vp);\n const startPt = BeTouchEvent.getTouchPosition(startTouch, vp);\n\n if (currPt.distance(startPt) < vp.pixelsFromInches(ToolSettings.touchMoveDistanceInches))\n continue; // Hasn't moved appreciably....\n }\n\n current.lastTouchStart = undefined; // Not a tap...\n return;\n }\n\n if (0 !== ev.touchCount || undefined === current.lastTouchStart)\n return;\n\n // All fingers off, defer processing tap until we've waited long enough to detect double tap...\n if (undefined === current.touchTapTimer) {\n current.touchTapTimer = Date.now();\n current.touchTapCount = 1;\n // NOTE: We cannot await the executeAfter call below, because that prevents any other\n // taps from being processed, which makes it impossible for double tap to happen.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n void ToolSettings.doubleTapTimeout.executeAfter(this.doubleTapTimeout, this);\n } else if (undefined !== current.touchTapCount) {\n current.touchTapCount++;\n }\n return;\n }\n\n case \"touchcancel\": {\n current.lastTouchStart = undefined;\n IModelApp.accuSnap.onTouchCancel(ev);\n if (undefined !== tool)\n await tool.onTouchCancel(ev);\n return;\n }\n\n case \"touchmove\": {\n if (!IModelApp.accuSnap.onTouchMove(ev) && undefined !== tool)\n await tool.onTouchMove(ev);\n\n if (undefined === current.lastTouchStart)\n return;\n\n if (ev.touchEvent.timeStamp - current.lastTouchStart.touchEvent.timeStamp < ToolSettings.touchMoveDelay.milliseconds)\n return;\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ev.touchEvent.changedTouches.length; ++i) {\n const currTouch = ev.touchEvent.changedTouches[i];\n const startTouch = BeTouchEvent.findTouchById(current.lastTouchStart.touchEvent.targetTouches, currTouch.identifier);\n\n if (undefined === startTouch)\n continue;\n\n const currPt = BeTouchEvent.getTouchPosition(currTouch, vp);\n const startPt = BeTouchEvent.getTouchPosition(startTouch, vp);\n\n if (currPt.distance(startPt) < vp.pixelsFromInches(ToolSettings.touchMoveDistanceInches))\n continue; // Hasn't moved appreciably....\n\n const touchStart = current.lastTouchStart;\n current.lastTouchStart = undefined;\n\n if (IModelApp.accuSnap.onTouchMoveStart(ev, touchStart))\n return;\n\n if (undefined === tool || EventHandled.Yes !== await tool.onTouchMoveStart(ev, touchStart))\n await this.idleTool.onTouchMoveStart(ev, touchStart);\n\n return;\n }\n return;\n }\n }\n }\n\n /** A first-in-first-out queue of ToolEvents. */\n private static _toolEvents: ToolEvent[] = [];\n private static tryReplace(ev: Event, vp?: ScreenViewport): boolean {\n if (ToolAdmin._toolEvents.length < 1)\n return false;\n const last = ToolAdmin._toolEvents[ToolAdmin._toolEvents.length - 1];\n const lastType = last.ev.type;\n if (lastType !== ev.type || (lastType !== \"mousemove\" && lastType !== \"touchmove\"))\n return false; // only mousemove and touchmove can replace previous\n last.ev = ev; // sequential moves are not important. Replace the previous one with this one.\n last.vp = vp;\n return true;\n }\n\n /** @internal */\n private static getNextEvent(): ToolEvent | undefined {\n if (ToolAdmin._toolEvents.length > 1) // if there is more than one event, we're going to need another animation frame to process it.\n IModelApp.requestNextAnimation();\n\n return ToolAdmin._toolEvents.shift(); // pull first event from the queue\n }\n\n /** Called from HTML event listeners. Events are processed in the order they're received in ToolAdmin.eventLoop\n * @internal\n */\n public static addEvent(ev: Event, vp?: ScreenViewport): void {\n if (!ToolAdmin.tryReplace(ev, vp)) // see if this event replaces the last event in the queue\n this._toolEvents.push({ ev, vp }); // otherwise put it at the end of the queue.\n\n IModelApp.requestNextAnimation(); // wake up event loop, if\n }\n\n /** Process the next event in the event queue, if any. */\n private async processNextEvent(): Promise<any> {\n const event = ToolAdmin.getNextEvent(); // pull first event from the queue\n if (undefined === event)\n return; // nothing in queue\n\n switch (event.ev.type) {\n case \"mousedown\": return this.onMouseButton(event, true);\n case \"mouseup\": return this.onMouseButton(event, false);\n case \"mousemove\": return this.onMouseMove(event);\n case \"mouseover\": return this.onMouseEnter(event);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n case \"mouseout\": return this.onMouseLeave(event.vp!);\n case \"wheel\": return this.onWheel(event);\n case \"keydown\": return this.onKeyTransition(event, true);\n case \"keyup\": return this.onKeyTransition(event, false);\n case \"touchstart\": return this.onTouch(event);\n case \"touchend\": return this.onTouch(event);\n case \"touchcancel\": return this.onTouch(event);\n case \"touchmove\": return this.onTouch(event);\n }\n }\n\n private _processingEvent = false;\n /**\n * Process a single event, plus timer events. Don't start work on new events if the previous one has not finished.\n * @internal\n */\n public async processEvent(): Promise<void> {\n if (this._processingEvent)\n return; // we're still working on the previous event.\n\n try {\n this._processingEvent = true; // we can't allow any further event processing until the current event completes.\n await this.processNextEvent();\n } catch (exception) {\n await ToolAdmin.exceptionHandler(exception); // we don't attempt to exit here\n } finally {\n this._processingEvent = false; // this event is now finished. Allow processing next time through.\n }\n }\n\n /** The idleTool handles events that are not otherwise processed. */\n public get idleTool(): InteractiveTool {\n assert(undefined !== this._idleTool);\n return this._idleTool;\n }\n public set idleTool(idleTool: InteractiveTool) {\n this._idleTool = idleTool;\n }\n\n /** Return true to filter (ignore) events to the given viewport */\n protected filterViewport(vp: ScreenViewport) {\n if (undefined === vp || vp.isDisposed)\n return true;\n\n const tool = this.activeTool;\n return (undefined !== tool ? !tool.isCompatibleViewport(vp, false) : false);\n }\n\n /** @internal */\n public async onInstallTool(tool: InteractiveTool): Promise<boolean> {\n this.currentInputState.onInstallTool();\n return tool.onInstall();\n }\n\n /** @internal */\n public async onPostInstallTool(tool: InteractiveTool) { return tool.onPostInstall(); }\n\n public get viewTool(): ViewTool | undefined { return this._viewTool; }\n public get primitiveTool(): PrimitiveTool | undefined { return this._primitiveTool; }\n\n /** The currently active InteractiveTool. May be ViewTool, InputCollector, PrimitiveTool, undefined - in that priority order. */\n public get activeTool(): InteractiveTool | undefined {\n return this._viewTool ? this._viewTool : (this._inputCollector ? this._inputCollector : this._primitiveTool); // NOTE: Viewing tools suspend input collectors as well as primitives\n }\n\n /** The current tool. May be ViewTool, InputCollector, PrimitiveTool, or IdleTool - in that priority order. */\n public get currentTool(): InteractiveTool { return this.activeTool ? this.activeTool : this.idleTool; }\n\n /** Allow applications to inhibit specific tooltips, such as for maps. */\n public wantToolTip(_hit: HitDetail): boolean { return true; }\n\n /** Ask the current tool to provide tooltip contents for the supplied HitDetail. */\n public async getToolTip(hit: HitDetail): Promise<HTMLElement | string> { return this.currentTool.getToolTip(hit); }\n\n /**\n * Event raised whenever the active tool changes. This includes PrimitiveTool, ViewTool, and InputCollector.\n * @param newTool The newly activated tool\n */\n public readonly activeToolChanged = new BeEvent<(tool: Tool, start: StartOrResume) => void>();\n\n /**\n * Event raised by tools that support edit manipulators like the SelectTool.\n * @param tool The current tool\n */\n public readonly manipulatorToolEvent = new BeEvent<(tool: Tool, event: ManipulatorToolEvent) => void>();\n\n private async onMouseEnter(event: ToolEvent): Promise<void> {\n const vp = event.vp;\n const current = this.currentInputState;\n current.viewport = vp;\n\n // Detect if drag was active and button was released outside the view...\n const tool = this.activeTool;\n if (undefined === tool)\n return;\n\n const buttonMask = (event.ev as MouseEvent).buttons;\n let cancelDrag = false;\n\n current.button.forEach((button, buttonNum) => {\n if (button.isDragging && !(buttonMask & (1 << buttonNum))) {\n button.isDragging = button.isDown = false;\n cancelDrag = true;\n }\n });\n\n if (cancelDrag)\n await tool.onReinitialize();\n }\n\n /** @internal */\n public onMouseLeave(vp: ScreenViewport): void {\n if (this._mouseMoveOverTimeout !== undefined)\n clearTimeout(this._mouseMoveOverTimeout);\n\n IModelApp.accuSnap.clear();\n this.currentInputState.clearViewport(vp);\n this.setCanvasDecoration(vp);\n vp.invalidateDecorations(); // stop drawing locate circle...\n }\n\n /** @internal */\n public updateDynamics(ev?: BeButtonEvent, useLastData?: boolean, adjustPoint?: boolean): void {\n if (undefined === this.activeTool)\n return;\n\n if (undefined === ev) {\n ev = new BeButtonEvent();\n\n if (useLastData)\n this.fillEventFromLastDataButton(ev);\n else\n this.fillEventFromCursorLocation(ev);\n\n if (adjustPoint && undefined !== ev.viewport) {\n // Use ev.rawPoint for cursor location when not snapped as ev.point gets adjusted in fromButton...\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined !== snap) {\n // Account for changes to locks, reset and re-adjust snap point...\n snap.adjustedPoint.setFrom(snap.getPoint());\n this.adjustSnapPoint();\n ev.point.setFrom(snap.isPointAdjusted ? snap.adjustedPoint : snap.getPoint());\n } else {\n ev.point.setFrom(IModelApp.tentativePoint.isActive ? IModelApp.tentativePoint.getPoint() : ev.rawPoint);\n this.adjustPoint(ev.point, ev.viewport);\n }\n IModelApp.accuDraw.onMotion(ev);\n }\n }\n\n if (undefined === ev.viewport)\n return;\n\n // Support tools requesting async information in onMouseMotion for use in decorate or onDynamicFrame...\n const toolPromise = this._toolMotionPromise = this.activeTool.onMouseMotion(ev);\n const tool = this.activeTool;\n const vp = ev.viewport;\n const motion = ev;\n\n toolPromise.then(() => {\n if (undefined === this._toolMotionPromise)\n return; // Only early return if canceled, result from a previous motion is preferable to showing nothing...\n\n this.currentInputState.lastMotionEvent = motion; // Save to use for simulation motion...\n\n // Update decorations when dynamics are inactive...\n if (!IModelApp.viewManager.inDynamicsMode) {\n vp.invalidateDecorations();\n return;\n }\n\n // Update dynamics and decorations only after motion...\n const context = new DynamicsContext(vp);\n tool.onDynamicFrame(motion, context);\n context.changeDynamics();\n }).catch((_) => { });\n }\n\n public async sendEndDragEvent(ev: BeButtonEvent): Promise<any> {\n let tool = this.activeTool;\n\n if (undefined !== tool) {\n if (!tool.isValidLocation(ev, true))\n tool = undefined;\n else if (tool.receivedDownEvent)\n tool.receivedDownEvent = false;\n else\n tool = undefined;\n }\n\n // Don't send tool end drag event if it didn't get the start drag event\n if (undefined === tool || EventHandled.Yes !== await tool.onMouseEndDrag(ev))\n return this.idleTool.onMouseEndDrag(ev);\n }\n\n private setCanvasDecoration(vp: ScreenViewport, dec?: CanvasDecoration, ev?: BeButtonEvent) {\n if (dec === this._canvasDecoration)\n return;\n\n if (this._canvasDecoration && this._canvasDecoration.onMouseLeave)\n this._canvasDecoration.onMouseLeave();\n this._canvasDecoration = dec;\n if (ev && dec && dec.onMouseEnter)\n dec.onMouseEnter(ev);\n\n vp.canvas.style.cursor = dec ? (dec.decorationCursor ? dec.decorationCursor : \"pointer\") : IModelApp.viewManager.cursor;\n vp.invalidateDecorations();\n }\n\n private pickCanvasDecoration(ev: BeButtonEvent) {\n const vp = ev.viewport;\n if (undefined === vp)\n return undefined;\n const decoration = (undefined === this.viewTool) ? vp.pickCanvasDecoration(ev.viewPoint) : undefined;\n this.setCanvasDecoration(vp, decoration, ev);\n return decoration;\n }\n\n /** Current request for locate/snap */\n private _snapMotionPromise?: Promise<boolean>;\n /** Current request for active tool motion event */\n private _toolMotionPromise?: Promise<void>;\n\n private clearMotionPromises(): void {\n this._snapMotionPromise = this._toolMotionPromise = undefined;\n }\n\n private async forceOnMotionSnap(ev: BeButtonEvent): Promise<boolean> {\n // Make sure that we fire the motion snap event correctly\n this._lastHandledMotionTime = undefined;\n\n return this.onMotionSnap(ev);\n }\n\n private async onMotionSnap(ev: BeButtonEvent): Promise<boolean> {\n try {\n await this.onMotionSnapOrSkip(ev);\n return true;\n } catch (error) {\n if (error instanceof AbandonedError)\n return false; // expected, not a problem. Just ignore this motion and return.\n throw error; // unknown error\n }\n }\n\n // Call accuSnap.onMotion\n private async onMotionSnapOrSkip(ev: BeButtonEvent): Promise<void> {\n if (this.shouldSkipOnMotionSnap())\n return;\n\n await IModelApp.accuSnap.onMotion(ev);\n\n this._lastHandledMotionTime = BeTimePoint.now();\n }\n\n // Should the current onMotionSnap event be skipped to avoid unnecessary ReadPixel calls?\n private shouldSkipOnMotionSnap(): boolean {\n if (this._lastHandledMotionTime === undefined)\n return false;\n\n const now = BeTimePoint.now();\n const msSinceLastCall = now.milliseconds - this._lastHandledMotionTime.milliseconds;\n\n const delay = 1000 / ToolSettings.maxOnMotionSnapCallPerSecond;\n\n return msSinceLastCall < delay;\n }\n\n private async onStartDrag(ev: BeButtonEvent, tool?: InteractiveTool): Promise<EventHandled> {\n if (undefined !== tool && EventHandled.Yes === await tool.onMouseStartDrag(ev))\n return EventHandled.Yes;\n\n // Pass start drag event to idle tool if active tool doesn't explicitly handle it\n return this.idleTool.onMouseStartDrag(ev);\n }\n\n private async onMotion(vp: ScreenViewport, pt2d: XAndY, inputSource: InputSource, forceStartDrag: boolean = false, movement?: XAndY): Promise<any> {\n const current = this.currentInputState;\n current.onMotion(pt2d);\n\n if (this.filterViewport(vp)) {\n this.setIncompatibleViewportCursor(false);\n return;\n }\n\n // Detect when the motion stops by setting a timeout\n if (this._mouseMoveOverTimeout !== undefined)\n clearTimeout(this._mouseMoveOverTimeout); // If a previous timeout was up, it is cancelled: the movement is not over yet\n\n const ev = new BeButtonEvent();\n current.fromPoint(vp, pt2d, inputSource);\n current.toEvent(ev, false);\n\n const overlayHit = this.pickCanvasDecoration(ev);\n if (undefined !== overlayHit) {\n if (overlayHit.onMouseMove)\n overlayHit.onMouseMove(ev);\n\n if (undefined === overlayHit.propagateMouseMove || !overlayHit.propagateMouseMove(ev))\n return; // we're inside a pickable decoration that doesn't want event sent to tool\n }\n\n this._mouseMoveOverTimeout = setTimeout(async () => {\n await this.onMotionEnd(vp, pt2d, inputSource);\n await processMotion();\n }, 100);\n\n const processMotion = async (): Promise<void> => {\n // Update event to account for AccuSnap adjustments...\n current.fromButton(vp, pt2d, inputSource, true);\n current.toEvent(ev, true);\n ev.movement = movement;\n\n IModelApp.accuDraw.onMotion(ev);\n\n let tool = this.activeTool;\n const isValidLocation = (undefined !== tool ? tool.isValidLocation(ev, false) : true);\n this.setIncompatibleViewportCursor(isValidLocation);\n\n if (forceStartDrag || current.isStartDrag(ev.button)) {\n current.onStartDrag(ev.button);\n current.changeButtonToDownPoint(ev);\n ev.isDragging = true;\n\n if (undefined !== tool) {\n if (!isValidLocation)\n tool = undefined;\n else if (forceStartDrag)\n tool.receivedDownEvent = true;\n else if (!tool.receivedDownEvent)\n tool = undefined;\n }\n\n await this.onStartDrag(ev, tool);\n return;\n }\n\n this.updateDynamics(ev);\n };\n\n const snapPromise = this._snapMotionPromise = this.onMotionSnap(ev);\n\n /** When forceStartDrag is true, make sure we don't return a fulfilled promise until we've processed the motion so callers can await it.\n * The .then below happens AFTER this method returns its (fulfilled) promise so we can't use that.\n */\n if (forceStartDrag) {\n await snapPromise;\n return processMotion();\n }\n\n if (this.isLocateCircleOn)\n vp.invalidateDecorations();\n\n snapPromise.then(async (snapOk) => {\n if (!snapOk || snapPromise !== this._snapMotionPromise)\n return;\n return processMotion();\n }).catch((_) => { });\n }\n\n // Called when we detect that the motion stopped\n private async onMotionEnd(vp: ScreenViewport, pos: XAndY, inputSource: InputSource): Promise<void> {\n const current = this.currentInputState;\n\n const ev = new BeButtonEvent();\n current.fromPoint(vp, pos, inputSource);\n current.toEvent(ev, false);\n\n await this.forceOnMotionSnap(ev);\n }\n\n private async onMouseMove(event: ToolEvent): Promise<any> {\n const vp = event.vp;\n if (undefined === vp)\n return;\n\n const pos = this.getMousePosition(event);\n const mov = this.getMouseMovement(event);\n\n // Sometimes the mouse goes down in a view, but we lose focus while its down so we never receive the up event.\n // That makes it look like the motion is a drag. Fix that by clearing the \"isDown\" based on the buttons member of the MouseEvent.\n const buttonMask = (event.ev as MouseEvent).buttons;\n if (!(buttonMask & 1))\n this.currentInputState.button[BeButton.Data].isDown = false;\n\n return this.onMotion(vp, pos, InputSource.Mouse, false, mov);\n }\n\n public adjustPointToACS(pointActive: Point3d, vp: Viewport, perpendicular: boolean): void {\n // The \"I don't want ACS lock\" flag can be set by tools to override the default behavior\n if (0 !== (this.toolState.coordLockOvr & CoordinateLockOverrides.ACS))\n return;\n\n let viewZRoot: Vector3d;\n\n // Lock to the construction plane\n if (vp.view.is3d() && vp.view.isCameraOn)\n viewZRoot = vp.view.camera.eye.vectorTo(pointActive);\n else\n viewZRoot = vp.rotation.getRow(2);\n\n const auxOriginRoot = vp.getAuxCoordOrigin();\n const auxRMatrixRoot = vp.getAuxCoordRotation();\n let auxNormalRoot = auxRMatrixRoot.getRow(2);\n\n // If ACS xy plane is perpendicular to view and not snapping, project to closest xz or yz plane instead\n if (auxNormalRoot.isPerpendicularTo(viewZRoot) && !TentativeOrAccuSnap.isHot) {\n const auxXRoot = auxRMatrixRoot.getRow(0);\n const auxYRoot = auxRMatrixRoot.getRow(1);\n auxNormalRoot = (Math.abs(auxXRoot.dotProduct(viewZRoot)) > Math.abs(auxYRoot.dotProduct(viewZRoot))) ? auxXRoot : auxYRoot;\n }\n linePlaneIntersect(pointActive, pointActive, viewZRoot, auxOriginRoot, auxNormalRoot, perpendicular);\n }\n\n public adjustPointToGrid(pointActive: Point3d, vp: Viewport) {\n // The \"I don't want grid lock\" flag can be set by tools to override the default behavior\n if (!this.gridLock || 0 !== (this.toolState.coordLockOvr & CoordinateLockOverrides.Grid))\n return;\n vp.pointToGrid(pointActive);\n }\n\n public adjustPoint(pointActive: Point3d, vp: ScreenViewport, projectToACS: boolean = true, applyLocks: boolean = true): void {\n if (Math.abs(pointActive.z) < 1.0e-7)\n pointActive.z = 0.0; // remove Z fuzz introduced by active depth when near 0\n\n let handled = false;\n\n if (applyLocks && !(IModelApp.tentativePoint.isActive || IModelApp.accuSnap.isHot))\n handled = IModelApp.accuDraw.adjustPoint(pointActive, vp, false);\n\n // NOTE: We don't need to support axis lock, it is worthless if you have AccuDraw\n if (!handled && vp.isPointAdjustmentRequired) {\n if (applyLocks)\n this.adjustPointToGrid(pointActive, vp);\n\n if (projectToACS)\n this.adjustPointToACS(pointActive, vp, false);\n } else if (applyLocks) {\n const savePoint = pointActive.clone();\n\n this.adjustPointToGrid(pointActive, vp);\n\n // if grid lock changes point, resend point to accudraw\n if (handled && !pointActive.isExactEqual(savePoint))\n IModelApp.accuDraw.adjustPoint(pointActive, vp, false);\n }\n\n if (Math.abs(pointActive.z) < 1.0e-7)\n pointActive.z = 0.0;\n }\n\n public adjustSnapPoint(perpendicular: boolean = true): void {\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (!snap)\n return;\n\n const vp = snap.viewport;\n const isHot = snap.isHot;\n const point = snap.getPoint().clone();\n const savePt = point.clone();\n\n if (!isHot) // Want point adjusted to grid for a hit that isn't hot\n this.adjustPointToGrid(point, vp);\n\n if (!IModelApp.accuDraw.adjustPoint(point, vp, isHot)) {\n if (vp.isSnapAdjustmentRequired)\n this.adjustPointToACS(point, vp, perpendicular || IModelApp.accuDraw.isActive);\n }\n\n if (!point.isExactEqual(savePt))\n snap.adjustedPoint.setFrom(point);\n }\n\n /** Application sub-classes can override this method to intercept button events before they are sent to the active tool.\n * An example use for this event would be to implement a shift + right-click or right-press menu.\n * @return true if event was handled and should not propagate to the active tool.\n */\n protected onPreButtonEvent(_ev: BeButtonEvent): boolean {\n return false;\n }\n\n /** @internal */\n public async sendButtonEvent(ev: BeButtonEvent): Promise<any> {\n const overlayHit = this.pickCanvasDecoration(ev);\n if (undefined !== overlayHit && undefined !== overlayHit.onMouseButton && overlayHit.onMouseButton(ev))\n return;\n\n if (this.onPreButtonEvent(ev))\n return;\n\n if (IModelApp.accuSnap.onPreButtonEvent(ev))\n return;\n\n const activeTool = this.activeTool;\n let tool = activeTool;\n\n if (undefined !== tool) {\n if (!tool.isValidLocation(ev, true))\n tool = undefined;\n else if (ev.isDown)\n tool.receivedDownEvent = true;\n else if (tool.receivedDownEvent)\n tool.receivedDownEvent = false;\n else\n tool = undefined;\n }\n\n if (IModelApp.accuDraw.onPreButtonEvent(ev))\n return;\n\n let updateDynamics = false;\n\n switch (ev.button) {\n case BeButton.Data: {\n if (undefined === tool) {\n if (undefined !== activeTool)\n break;\n tool = this.idleTool; // Pass data button event to idle tool when no active tool present\n }\n\n if (ev.isDown) {\n await tool.onDataButtonDown(ev);\n } else {\n await tool.onDataButtonUp(ev);\n break;\n }\n\n // Lock tool to target model of this view on first data button\n if (tool instanceof PrimitiveTool)\n tool.autoLockTarget();\n\n updateDynamics = true; // AccuDraw.onPostButtonEvent needs to process the active tool's pending hints from onDataButtonDown before calling updateDynamics...\n break;\n }\n\n case BeButton.Reset: {\n if (undefined === tool) {\n if (undefined !== activeTool)\n break;\n tool = this.idleTool; // Pass reset button event to idle tool when no active tool present\n }\n\n if (ev.isDown)\n await tool.onResetButtonDown(ev);\n else\n await tool.onResetButtonUp(ev);\n break;\n }\n\n case BeButton.Middle: {\n // Pass middle button event to idle tool when active tool doesn't explicitly handle it\n if (ev.isDown) {\n if (undefined === tool || EventHandled.Yes !== await tool.onMiddleButtonDown(ev))\n await this.idleTool.onMiddleButtonDown(ev);\n } else {\n if (undefined === tool || EventHandled.Yes !== await tool.onMiddleButtonUp(ev))\n await this.idleTool.onMiddleButtonUp(ev);\n }\n break;\n }\n }\n\n IModelApp.tentativePoint.onButtonEvent(ev);\n IModelApp.accuDraw.onPostButtonEvent(ev);\n\n if (!updateDynamics)\n return;\n\n // Update tool dynamics for current cursor location to not require a motion event.\n this.updateDynamics(undefined, undefined, true);\n }\n\n private async onButtonDown(vp: ScreenViewport, pt2d: XAndY, button: BeButton, inputSource: InputSource): Promise<any> {\n const filtered = this.filterViewport(vp);\n if (undefined === this._viewTool && button === BeButton.Data)\n await IModelApp.viewManager.setSelectedView(vp);\n if (filtered)\n return;\n\n vp.setAnimator();\n const ev = new BeButtonEvent();\n const current = this.currentInputState;\n current.fromButton(vp, pt2d, inputSource, true);\n current.onButtonDown(button);\n current.toEvent(ev, true);\n current.updateDownPoint(ev);\n\n return this.sendButtonEvent(ev);\n }\n\n private async onButtonUp(vp: ScreenViewport, pt2d: XAndY, button: BeButton, inputSource: InputSource): Promise<any> {\n if (this.filterViewport(vp))\n return;\n\n const ev = new BeButtonEvent();\n const current = this.currentInputState;\n const wasDragging = current.isDragging(button);\n current.fromButton(vp, pt2d, inputSource, true);\n current.onButtonUp(button);\n current.toEvent(ev, true);\n\n if (wasDragging)\n return this.sendEndDragEvent(ev);\n\n current.changeButtonToDownPoint(ev);\n return this.sendButtonEvent(ev);\n }\n\n /** Called when any *modifier* (Shift, Alt, or Control) key is pressed or released. */\n private async onModifierKeyTransition(wentDown: boolean, modifier: BeModifierKeys, event: KeyboardEvent): Promise<void> {\n const activeTool = this.activeTool;\n const changed = activeTool ? await activeTool.onModifierKeyTransition(wentDown, modifier, event) : EventHandled.No;\n\n if (changed === EventHandled.Yes) {\n IModelApp.viewManager.invalidateDecorationsAllViews();\n this.updateDynamics(undefined, undefined, true); // Don't wait for motion to update dynamics...\n }\n }\n\n private static getModifierKey(event: KeyboardEvent): BeModifierKeys {\n switch (event.key) {\n case \"Alt\": return BeModifierKeys.Alt;\n case \"Shift\": return BeModifierKeys.Shift;\n case \"Control\": return BeModifierKeys.Control;\n }\n return BeModifierKeys.None;\n }\n\n /** Process key down events while the Ctrl key is pressed */\n public async onCtrlKeyPressed(keyEvent: KeyboardEvent): Promise<{ handled: boolean, result: boolean }> {\n let handled = false;\n let result = false;\n\n switch (keyEvent.key) {\n case \"z\":\n case \"Z\":\n result = await this.doUndoOperation();\n handled = true;\n break;\n case \"y\":\n case \"Y\":\n result = await this.doRedoOperation();\n handled = true;\n break;\n case \"F2\":\n result = IModelApp.uiAdmin.showKeyinPalette();\n handled = true;\n break;\n }\n\n return { handled, result };\n }\n\n /** Process shortcut key events */\n public async processShortcutKey(_keyEvent: KeyboardEvent, _wentDown: boolean): Promise<boolean> {\n return false;\n }\n\n /** Event for every key down and up transition. */\n private async onKeyTransition(event: ToolEvent, wentDown: boolean): Promise<any> {\n const keyEvent = event.ev as KeyboardEvent;\n this.currentInputState.setKeyQualifiers(keyEvent);\n\n const modifierKey = ToolAdmin.getModifierKey(keyEvent);\n\n if (BeModifierKeys.None !== modifierKey)\n return this.onModifierKeyTransition(wentDown, modifierKey, keyEvent);\n\n if (wentDown && keyEvent.ctrlKey) {\n const { handled, result } = await this.onCtrlKeyPressed(keyEvent);\n if (handled)\n return result;\n }\n\n const activeTool = this.activeTool;\n if (activeTool) {\n if (EventHandled.Yes === await activeTool.onKeyTransition(wentDown, keyEvent))\n return EventHandled.Yes;\n }\n\n if (await this.processShortcutKey(keyEvent, wentDown))\n return EventHandled.Yes;\n\n return EventHandled.No;\n }\n\n /** Called to undo previous data button for primitive tools or undo last write operation. */\n public async doUndoOperation(): Promise<boolean> {\n const activeTool = this.activeTool;\n if (activeTool instanceof PrimitiveTool) {\n // ### TODO Add method so UI can be showing string to inform user that undo of last data point is available...\n if (await activeTool.undoPreviousStep())\n return true;\n }\n\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection())\n return false;\n\n return (IModelStatus.Success === await imodel.txns.reverseSingleTxn() ? true : false);\n }\n\n /** Called to redo previous data button for primitive tools or undo last write operation. */\n public async doRedoOperation(): Promise<boolean> {\n const activeTool = this.activeTool;\n if (activeTool instanceof PrimitiveTool) {\n // ### TODO Add method so UI can be showing string to inform user that undo of last data point is available...\n if (await activeTool.redoPreviousStep())\n return true;\n }\n\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection())\n return false;\n\n return (IModelStatus.Success === await imodel.txns.reinstateTxn() ? true : false);\n }\n\n private onActiveToolChanged(tool: Tool, start: StartOrResume): void {\n this.clearMotionPromises();\n this.activeToolChanged.raiseEvent(tool, start);\n }\n\n private async onUnsuspendTool() {\n const tool = this.activeTool;\n if (tool === undefined)\n return;\n\n await tool.onUnsuspend();\n this.onActiveToolChanged(tool, StartOrResume.Resume);\n }\n\n /** @internal */\n public async setInputCollector(newTool?: InputCollector) {\n if (undefined !== this._inputCollector) {\n await this._inputCollector.onCleanup();\n this._inputCollector = undefined;\n }\n this._inputCollector = newTool;\n }\n\n /** @internal */\n public async exitInputCollector() {\n if (undefined === this._inputCollector)\n return;\n let unsuspend = false;\n if (this._suspendedByInputCollector) {\n this._suspendedByInputCollector.stop();\n this._suspendedByInputCollector = undefined;\n unsuspend = true;\n }\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n await this.setInputCollector(undefined);\n if (unsuspend)\n await this.onUnsuspendTool();\n\n IModelApp.accuDraw.onInputCollectorExit();\n this.updateDynamics(undefined, undefined, true);\n }\n\n /** @internal */\n public async startInputCollector(newTool: InputCollector) {\n IModelApp.notifications.outputPrompt(\"\");\n IModelApp.accuDraw.onInputCollectorInstall();\n\n if (undefined !== this._inputCollector) {\n await this.setInputCollector(undefined);\n } else {\n const tool = this.activeTool;\n if (tool)\n await tool.onSuspend();\n this._suspendedByInputCollector = new SuspendedToolState();\n }\n\n IModelApp.viewManager.endDynamicsMode();\n IModelApp.viewManager.invalidateDecorationsAllViews();\n\n await this.setInputCollector(newTool);\n // it is important to raise event after setInputCollector is called\n this.onActiveToolChanged(newTool, StartOrResume.Start);\n }\n\n /** @internal */\n public async setViewTool(newTool?: ViewTool) {\n if (undefined !== this._viewTool) {\n await this._viewTool.onCleanup();\n this._viewTool = undefined;\n }\n this._viewTool = newTool;\n }\n\n /** @internal */\n public async exitViewTool() {\n if (undefined === this._viewTool)\n return;\n let unsuspend = false;\n if (undefined !== this._suspendedByViewTool) {\n this._suspendedByViewTool.stop(); // Restore state of suspended tool\n this._suspendedByViewTool = undefined;\n unsuspend = true;\n }\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n await this.setViewTool(undefined);\n if (unsuspend)\n await this.onUnsuspendTool();\n\n IModelApp.accuDraw.onViewToolExit();\n this.updateDynamics(undefined, undefined, true);\n }\n\n /** @internal */\n public async startViewTool(newTool: ViewTool) {\n\n IModelApp.notifications.outputPrompt(\"\");\n IModelApp.accuDraw.onViewToolInstall();\n\n if (undefined !== this._viewTool) {\n await this.setViewTool(undefined);\n } else {\n const tool = this.activeTool;\n if (tool)\n await tool.onSuspend();\n this._suspendedByViewTool = new SuspendedToolState();\n }\n\n IModelApp.viewManager.endDynamicsMode();\n IModelApp.viewManager.invalidateDecorationsAllViews();\n\n this.toolState.coordLockOvr = CoordinateLockOverrides.All;\n this.toolState.locateCircleOn = false;\n\n IModelApp.accuSnap.onStartTool();\n\n this.setCursor(IModelApp.viewManager.crossHairCursor);\n await this.setViewTool(newTool);\n // it is important to raise event after setViewTool is called\n this.onActiveToolChanged(newTool, StartOrResume.Start);\n }\n\n /** @internal */\n public setEditCommandHandler(handler?: EditCommandHandler) {\n this._editCommandHandler = handler;\n }\n\n /** @internal */\n public async setPrimitiveTool(newTool?: PrimitiveTool) {\n if (undefined !== this._primitiveTool) {\n await this._primitiveTool.onCleanup();\n if (undefined !== this._editCommandHandler)\n await this._editCommandHandler.finishCommand();\n this._primitiveTool = undefined;\n }\n this._primitiveTool = newTool;\n }\n\n /** @internal */\n public async startPrimitiveTool(newTool?: PrimitiveTool) {\n IModelApp.notifications.outputPrompt(\"\");\n await this.exitViewTool();\n\n if (undefined !== this._primitiveTool)\n await this.setPrimitiveTool(undefined);\n\n // clear the primitive tool first so following call does not trigger the refreshing of the ToolSetting for the previous primitive tool\n await this.exitInputCollector();\n\n IModelApp.viewManager.endDynamicsMode();\n this.setIncompatibleViewportCursor(true); // Don't restore this\n IModelApp.viewManager.invalidateDecorationsAllViews();\n\n this.toolState.coordLockOvr = CoordinateLockOverrides.None;\n this.toolState.locateCircleOn = false;\n\n IModelApp.accuDraw.onPrimitiveToolInstall();\n IModelApp.accuSnap.onStartTool();\n\n if (undefined !== newTool) {\n this.setCursor(IModelApp.viewManager.crossHairCursor);\n await this.setPrimitiveTool(newTool);\n }\n // it is important to raise event after setPrimitiveTool is called\n this.onActiveToolChanged(undefined !== newTool ? newTool : this.idleTool, StartOrResume.Start);\n }\n\n /** Method used by interactive tools to send updated values to UI components, typically showing tool settings.\n * @beta\n */\n public syncToolSettingsProperties(toolId: string, syncProperties: DialogPropertySyncItem[]): void {\n if (this.toolSettingsChangeHandler)\n this.toolSettingsChangeHandler(toolId, syncProperties);\n }\n\n /** Method used by interactive tools to send request to reload UI from properties returned via method supplyToolSettingsProperties.\n * @beta\n */\n public reloadToolSettingsProperties(): void {\n if (this.reloadToolSettingsHandler)\n this.reloadToolSettingsHandler();\n }\n\n /** Method used to \"bump\" the value of a tool setting for the current tool.\n * To \"bump\" a setting means to toggle a boolean value or cycle through enum values.\n * If no `settingIndex` param is specified, the first setting is bumped.\n * Returns true if the setting was successfully bumped.\n */\n public async bumpToolSetting(settingIndex?: number): Promise<boolean> {\n return this.currentTool.bumpToolSetting(settingIndex);\n }\n\n /** Method used by interactive tools to inform one or more UI components to refresh. This is typically used to update labels or icons associated with a specific tool.\n * This method should be used when the caller wants the UI layer to process the sync event immediately. Use dispatchUiSyncEvent when the event may be triggered while other\n * more important user interaction processing is required.\n * @param specificSyncEventId Optional sync event id. If not specified then \"tool-admin-refresh-ui\" is used.\n * @param toolId Optional, will be used if specificSyncEventId is not specified. If used, the resulting sync event Id will be created using `tool-admin-refresh-ui-${toolId}`.toLowerCase()\n */\n public dispatchImmediateUiSyncEvent(specificSyncEventId?: string, toolId?: string): void {\n const defaultRefreshEventId = \"tool-admin-refresh-ui\";\n if (this.toolSyncUiEventDispatcher) {\n if (specificSyncEventId)\n this.toolSyncUiEventDispatcher(specificSyncEventId.toLowerCase(), true);\n else if (toolId)\n this.toolSyncUiEventDispatcher(`${defaultRefreshEventId}-${toolId}`.toLowerCase(), true);\n else\n this.toolSyncUiEventDispatcher(defaultRefreshEventId, true);\n }\n }\n\n /** Method used by interactive tools to inform one or more UI components to refresh. This is typically used to update labels or icons associated with a specific tool.\n * This method should be used when the caller wants the UI layer to process the sync event on a timer, waiting a few 100 ms, allowing other events that may require a UI refresh\n * to be processed together.\n * @param specificSyncEventId Optional sync event id. If not specified then \"tool-admin-refresh-ui\" is used.\n * @param toolId Optional, will be used if specificSyncEventId is not specified. If used, the resulting sync event Id will be created using `tool-admin-refresh-ui-${toolId}`.toLowerCase()\n */\n public dispatchUiSyncEvent(specificSyncEventId?: string, toolId?: string): void {\n const defaultRefreshEventId = \"tool-admin-refresh-ui\";\n if (this.toolSyncUiEventDispatcher) {\n if (specificSyncEventId)\n this.toolSyncUiEventDispatcher(specificSyncEventId.toLowerCase());\n else if (toolId)\n this.toolSyncUiEventDispatcher(`${defaultRefreshEventId}-${toolId}`.toLowerCase());\n else\n this.toolSyncUiEventDispatcher(defaultRefreshEventId);\n }\n }\n\n /**\n * Starts the default [[PrimitiveTool]], if any. Generally invoked automatically when other tools exit, so shouldn't be called directly.\n * @note The default tool, when specified, must be a subclass of [[PrimitiveTool]]. A call to startDefaultTool is required to terminate\n * an active [[ViewTool]] or [[InputCollector]] and replace or clear the current [[PrimitiveTool]]. The default tool can not be\n * a subclass of [[ViewTool]] as view tools replace each other and aren't suspended. This means [[ViewTool.exitTool]] would\n * result in the active tool being undefined instead of making the default tool active.\n * The tool's [[Tool.run]] method is invoked with arguments specified by [[defaultToolArgs]].\n * @see [[defaultToolId]] to configure the default tool.\n */\n public async startDefaultTool(): Promise<void> {\n const tool = IModelApp.tools.create(this.defaultToolId, this.defaultToolArgs);\n\n if (tool instanceof PrimitiveTool) {\n if (!await tool.run(this.defaultToolArgs))\n return this.startPrimitiveTool(undefined);\n } else {\n await this.startPrimitiveTool(undefined); // Ensure active primitive tool is terminated...\n if (undefined !== tool)\n throw new Error(\"Default tool must be a subclass of PrimitiveTool\");\n }\n }\n\n /**\n * Call from external events or immediate tools that may have invalidated the current primitive tool's state.\n * Examples are undo, which may invalidate any references to elements, or an immediate tool that uses an edit command to write to the iModel,\n * since immediate tools do not replace the active tool.\n * The current primitive tool is expected to call installTool with a new instance, or exitTool to start the default tool.\n * @note Should be called even if the primitive tool is currently suspended by a view tool or input collector.\n */\n public async restartPrimitiveTool(): Promise<void> {\n if (undefined !== this._primitiveTool)\n await this._primitiveTool.onRestartTool();\n }\n\n public setCursor(cursor: string | undefined): void {\n if (undefined === this._saveCursor)\n IModelApp.viewManager.setViewCursor(cursor);\n else\n this._saveCursor = cursor;\n }\n\n /** @internal */\n public testDecorationHit(id: string): boolean { return this.currentTool.testDecorationHit(id); }\n\n /** @internal */\n public getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined { return this.currentTool.getDecorationGeometry(hit); }\n\n /** @internal */\n public decorate(context: DecorateContext): void {\n const tool = this.activeTool;\n if (undefined !== tool) {\n tool.decorate(context);\n\n if (undefined !== this._inputCollector && tool !== this._inputCollector)\n this._inputCollector.decorateSuspended(context);\n\n if (undefined !== this._primitiveTool && tool !== this._primitiveTool)\n this._primitiveTool.decorateSuspended(context);\n }\n\n const viewport = this.currentInputState.viewport;\n if (viewport !== context.viewport)\n return;\n\n const ev = new BeButtonEvent();\n this.fillEventFromCursorLocation(ev);\n\n const hit = IModelApp.accuDraw.isActive ? undefined : IModelApp.accuSnap.currHit; // NOTE: Show surface normal until AccuDraw becomes active\n viewport.drawLocateCursor(context, ev.viewPoint, viewport.pixelsFromInches(IModelApp.locateManager.apertureInches), this.isLocateCircleOn, hit);\n }\n\n public get isLocateCircleOn(): boolean {\n if (!this.toolState.locateCircleOn || undefined !== this._canvasDecoration)\n return false;\n\n if (InputSource.Mouse === this.currentInputState.inputSource)\n return true;\n\n return (InputSource.Touch === this.currentInputState.inputSource && undefined !== IModelApp.accuSnap.touchCursor);\n }\n\n /** @internal */\n public beginDynamics(): void {\n IModelApp.accuDraw.onBeginDynamics();\n IModelApp.viewManager.beginDynamicsMode();\n this.setCursor(IModelApp.viewManager.dynamicsCursor);\n }\n\n /** @internal */\n public endDynamics(): void {\n IModelApp.accuDraw.onEndDynamics();\n IModelApp.viewManager.endDynamicsMode();\n this.setCursor(IModelApp.viewManager.crossHairCursor);\n }\n\n /** Fill the supplied button event from the current cursor location. */\n public fillEventFromCursorLocation(ev: BeButtonEvent, useSnap = true) { this.currentInputState.toEvent(ev, useSnap); }\n /** Fill the supplied button event from the last data button location. */\n public fillEventFromLastDataButton(ev: BeButtonEvent) { this.currentInputState.toEventFromLastDataPoint(ev); }\n /** @internal */\n public setAdjustedDataPoint(ev: BeButtonEvent) { this.currentInputState.adjustLastDataPoint(ev); }\n\n /** Can be called by tools that wish to emulate mouse button down/up events for onTouchTap. */\n public async convertTouchTapToButtonDownAndUp(ev: BeTouchEvent, button: BeButton = BeButton.Data): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n const pt2d = ev.viewPoint;\n await this.onButtonDown(vp, pt2d, button, InputSource.Touch);\n return this.onButtonUp(vp, pt2d, button, InputSource.Touch);\n }\n\n /** Can be called by tools that wish to emulate moving the mouse with a button depressed for onTouchMoveStart.\n * @note Calls the tool's onMouseStartDrag method from onMotion.\n */\n public async convertTouchMoveStartToButtonDownAndMotion(startEv: BeTouchEvent, ev: BeTouchEvent, button: BeButton = BeButton.Data): Promise<void> {\n const startVp = startEv.viewport;\n if (undefined === startVp)\n return;\n\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n\n await this.onButtonDown(startVp, startEv.viewPoint, button, InputSource.Touch);\n return this.onMotion(vp, ev.viewPoint, InputSource.Touch, true);\n }\n\n /** Can be called by tools that wish to emulate pressing the mouse button for onTouchStart or onTouchMoveStart. */\n public async convertTouchStartToButtonDown(ev: BeTouchEvent, button: BeButton = BeButton.Data): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n return this.onButtonDown(vp, ev.viewPoint, button, InputSource.Touch);\n }\n\n /** Can be called by tools that wish to emulate releasing the mouse button for onTouchEnd or onTouchComplete.\n * @note Calls the tool's onMouseEndDrag method if convertTouchMoveStartToButtonDownAndMotion was called for onTouchMoveStart.\n */\n public async convertTouchEndToButtonUp(ev: BeTouchEvent, button: BeButton = BeButton.Data): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n return this.onButtonUp(vp, ev.viewPoint, button, InputSource.Touch);\n }\n\n /** Can be called by tools that wish to emulate a mouse motion event for onTouchMove. */\n public async convertTouchMoveToMotion(ev: BeTouchEvent): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n return this.onMotion(vp, ev.viewPoint, InputSource.Touch);\n }\n\n /** Can be called by tools to invoke their [[InteractiveTool.onDynamicFrame]] method without requiring a motion event. */\n public simulateMotionEvent(): void {\n // NOTE: Prefer last resolved motion over current cursor location which could be out of the view, or moved from last AccuSnap etc.\n this.updateDynamics(this.currentInputState.lastMotionEvent, undefined, true);\n }\n\n /** @internal */\n public setIncompatibleViewportCursor(restore: boolean) {\n if (restore) {\n if (undefined === this._saveCursor)\n return;\n\n this.toolState.locateCircleOn = this._saveLocateCircle;\n IModelApp.viewManager.setViewCursor(this._saveCursor);\n this._saveCursor = undefined;\n return;\n }\n\n if (undefined !== this._saveCursor)\n return;\n\n this._saveLocateCircle = this.toolState.locateCircleOn;\n this._saveCursor = IModelApp.viewManager.cursor;\n this.toolState.locateCircleOn = false;\n IModelApp.viewManager.setViewCursor(\"not-allowed\");\n }\n\n /** Performs default handling of mouse wheel event (zoom in/out) */\n public async processWheelEvent(ev: BeWheelEvent, doUpdate: boolean): Promise<EventHandled> {\n await WheelEventProcessor.process(ev, doUpdate);\n IModelApp.viewManager.invalidateDecorationsAllViews();\n this.updateDynamics(ev);\n return EventHandled.Yes;\n }\n\n /** @internal */\n public async onSelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined) {\n IModelApp.accuDraw.onSelectedViewportChanged(previous, current);\n\n if (undefined === current)\n return this.callOnCleanup();\n\n if (undefined !== this._viewTool)\n this._viewTool.onSelectedViewportChanged(previous, current);\n\n if (undefined !== this._inputCollector)\n this._inputCollector.onSelectedViewportChanged(previous, current);\n\n if (undefined !== this._primitiveTool)\n await this._primitiveTool.onSelectedViewportChanged(previous, current);\n }\n\n public setLocateCircleOn(locateOn: boolean): void {\n if (undefined === this._saveCursor)\n this.toolState.locateCircleOn = locateOn;\n else\n this._saveLocateCircle = locateOn;\n }\n\n public setLocateCursor(enableLocate: boolean): void {\n const viewManager = IModelApp.viewManager;\n this.setCursor(viewManager.inDynamicsMode ? viewManager.dynamicsCursor : viewManager.crossHairCursor);\n this.setLocateCircleOn(enableLocate);\n viewManager.invalidateDecorationsAllViews();\n }\n\n /** Controls how the button event location is adjusted for the active tool */\n public get coordinateLockOverrides(): CoordinateLockOverrides { return this.toolState.coordLockOvr; }\n public set coordinateLockOverrides(coordLockOvr: CoordinateLockOverrides) { this.toolState.coordLockOvr = coordLockOvr; }\n\n /** @internal */\n public async callOnCleanup() {\n await this.exitViewTool();\n await this.exitInputCollector();\n if (undefined !== this._primitiveTool)\n await this._primitiveTool.onCleanup();\n }\n}\n\n/**\n * Default processor to handle wheel events.\n * @internal\n */\nexport class WheelEventProcessor {\n public static async process(ev: BeWheelEvent, doUpdate: boolean): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n\n await this.doZoom(ev);\n\n if (doUpdate) {\n // AccuSnap hit won't be invalidated without cursor motion (closes info window, etc.).\n IModelApp.accuSnap.clear();\n }\n }\n\n private static async doZoom(ev: BeWheelEvent): Promise<ViewStatus> {\n const vp = ev.viewport;\n if (undefined === vp)\n return ViewStatus.InvalidViewport;\n\n let zoomRatio = ToolSettings.wheelZoomRatio;\n if (zoomRatio < 1)\n zoomRatio = 1;\n if (ev.wheelDelta > 0)\n zoomRatio = 1 / zoomRatio;\n\n let isSnapOrPrecision = false;\n const target = Point3d.create();\n if (IModelApp.tentativePoint.isActive) {\n // Always use Tentative location, adjusted point, not cross\n isSnapOrPrecision = true;\n target.setFrom(IModelApp.tentativePoint.getPoint());\n } else {\n // Never use AccuSnap location as initial zoom clears snap causing zoom center to \"jump\"\n isSnapOrPrecision = CoordSource.Precision === ev.coordsFrom;\n target.setFrom(isSnapOrPrecision ? ev.point : ev.rawPoint);\n }\n\n const view = vp.view;\n let globalAlignment;\n if (view.is3d() && view.iModel.ecefLocation)\n globalAlignment = { target, transition: zoomRatio > 1 };\n\n const animationOptions: ViewChangeOptions & OnViewExtentsError = {\n animateFrustumChange: true,\n cancelOnAbort: true,\n animationTime: ScreenViewport.animation.time.wheel.milliseconds,\n easingFunction: Easing.Cubic.Out,\n onExtentsError: (err) => view.outputStatusMessage(err),\n globalAlignment,\n };\n\n const currentInputState = IModelApp.toolAdmin.currentInputState;\n let status: ViewStatus;\n const now = Date.now();\n if (view.is3d() && view.isCameraOn) {\n if (!isSnapOrPrecision) {\n let lastEvent = currentInputState.lastWheelEvent;\n if (undefined !== lastEvent && lastEvent.viewport &&\n now - lastEvent.time < ToolSettings.doubleClickTimeout.milliseconds &&\n lastEvent.viewport.view.equals(view) && lastEvent.viewPoint.distanceSquaredXY(ev.viewPoint) < 10) {\n target.setFrom(lastEvent.point);\n lastEvent.time = now;\n } else {\n const newTarget = vp.pickNearestVisibleGeometry(target);\n if (undefined !== newTarget) {\n target.setFrom(newTarget);\n } else {\n view.getTargetPoint(target);\n }\n currentInputState.lastWheelEvent = lastEvent = ev.clone();\n lastEvent.point.setFrom(target);\n }\n }\n\n const transform = Transform.createFixedPointAndMatrix(target, Matrix3d.createScale(zoomRatio, zoomRatio, zoomRatio));\n const eye = view.getEyePoint();\n const newEye = transform.multiplyPoint3d(eye);\n const offset = eye.vectorTo(newEye);\n\n // when you're too close to an object, the wheel zoom operation will stop. We set a \"bump distance\" so you can blast through obstacles.\n const bumpDist = Math.max(ToolSettings.wheelZoomBumpDistance, view.minimumFrontDistance());\n if (offset.magnitude() < bumpDist) {\n offset.scaleToLength(bumpDist, offset); // move bump distance, just to get to the other side.\n target.addInPlace(offset);\n newEye.setFrom(eye.plus(offset));\n currentInputState.lastWheelEvent = undefined; // we need to search on the \"other side\" of what we were bumping into\n }\n\n const zDir = view.getZVector();\n target.setFrom(newEye.plusScaled(zDir, zDir.dotProduct(newEye.vectorTo(target))));\n\n if (ViewStatus.Success === (status = view.lookAt({ eyePoint: newEye, targetPoint: target, upVector: view.getYVector(), lensAngle: view.camera.lens, opts: animationOptions })))\n vp.synchWithView(animationOptions);\n } else {\n const targetNpc = vp.worldToNpc(target);\n const trans = Transform.createFixedPointAndMatrix(targetNpc, Matrix3d.createScale(zoomRatio, zoomRatio, 1));\n\n const viewCenter = trans.multiplyPoint3d(Point3d.create(.5, .5, .5));\n vp.npcToWorld(viewCenter, viewCenter);\n return vp.zoom(viewCenter, zoomRatio, animationOptions);\n }\n\n // if we scrolled out, we may have invalidated the current AccuSnap path\n await IModelApp.accuSnap.reEvaluate();\n return status;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ToolAdmin.js","sourceRoot":"","sources":["../../../src/tools/ToolAdmin.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tools\n */\n\nimport { AbandonedError, assert, BeEvent, BeTimePoint, IModelStatus, Logger } from \"@itwin/core-bentley\";\nimport { Matrix3d, Point2d, Point3d, Transform, Vector3d, XAndY } from \"@itwin/core-geometry\";\nimport { Easing, GeometryStreamProps, NpcCenter } from \"@itwin/core-common\";\nimport { DialogItemValue, DialogPropertyItem, DialogPropertySyncItem } from \"@itwin/appui-abstract\";\nimport { AccuSnap, TentativeOrAccuSnap } from \"../AccuSnap\";\nimport { LocateOptions } from \"../ElementLocateManager\";\nimport { FrontendLoggerCategory } from \"../common/FrontendLoggerCategory\";\nimport { HitDetail } from \"../HitDetail\";\nimport { IModelApp } from \"../IModelApp\";\nimport { linePlaneIntersect } from \"../LinePlaneIntersect\";\nimport { MessageBoxIconType, MessageBoxType } from \"../NotificationManager\";\nimport { CanvasDecoration } from \"../render/CanvasDecoration\";\nimport { IconSprites } from \"../Sprites\";\nimport { OnViewExtentsError, ViewChangeOptions } from \"../ViewAnimation\";\nimport { DecorateContext, DynamicsContext } from \"../ViewContext\";\nimport { ScreenViewport, Viewport } from \"../Viewport\";\nimport { ViewStatus } from \"../ViewStatus\";\nimport { PrimitiveTool } from \"./PrimitiveTool\";\nimport {\n BeButton, BeButtonEvent, BeButtonState, BeModifierKeys, BeTouchEvent, BeWheelEvent, CoordinateLockOverrides, CoordSource, EventHandled,\n InputCollector, InputSource, InteractiveTool, Tool,\n} from \"./Tool\";\nimport { ToolSettings } from \"./ToolSettings\";\nimport { ViewTool } from \"./ViewTool\";\n\n/**\n * @public\n * @extensions\n */\nexport enum StartOrResume { Start = 1, Resume = 2 }\n\n/**\n * @public\n * @extensions\n */\nexport enum ManipulatorToolEvent { Start = 1, Stop = 2, Suspend = 3, Unsuspend = 4 }\n\nconst enum MouseButton { Left = 0, Middle = 1, Right = 2 } // eslint-disable-line no-restricted-syntax\n\n/** Maintains the state of tool settings properties for the current session.\n * @see [[ToolAdmin.toolSettingsState]] to access the state for the current session.\n * @public\n */\nexport class ToolSettingsState {\n /** Retrieve saved tool settings DialogItemValue by property name. */\n public getInitialToolSettingValue(toolId: string, propertyName: string): DialogItemValue | undefined {\n const key = `${toolId}:${propertyName}`;\n const savedValue = window.sessionStorage.getItem(key);\n if (null !== savedValue) {\n return JSON.parse(savedValue) as DialogItemValue;\n }\n return undefined;\n }\n\n /** Retrieve an array of DialogPropertyItem with the values latest values that were used in the session. */\n public getInitialToolSettingValues(toolId: string, propertyNames: string[]): DialogPropertyItem[] | undefined {\n const initializedProperties: DialogPropertyItem[] = [];\n let propertyValue: DialogItemValue | undefined;\n\n propertyNames.forEach((propertyName: string) => {\n propertyValue = this.getInitialToolSettingValue(toolId, propertyName);\n if (propertyValue)\n initializedProperties.push({ value: propertyValue, propertyName });\n });\n\n return initializedProperties.length ? initializedProperties : undefined;\n }\n\n /** Save single tool settings value to session storage. */\n public saveToolSettingProperty(toolId: string, item: DialogPropertyItem): void {\n const key = `${toolId}:${item.propertyName}`;\n const objectAsString = JSON.stringify(item.value);\n window.sessionStorage.setItem(key, objectAsString);\n }\n\n /** Save an array of tool settings values to session storage */\n public saveToolSettingProperties(toolId: string, tsProps: DialogPropertyItem[]): void {\n tsProps.forEach((item: DialogPropertyItem) => this.saveToolSettingProperty(toolId, item));\n }\n}\n\n/** @internal */\nexport class ToolState {\n public coordLockOvr = CoordinateLockOverrides.None;\n public locateCircleOn = false;\n public setFrom(other: ToolState) {\n this.coordLockOvr = other.coordLockOvr;\n this.locateCircleOn = other.locateCircleOn;\n }\n\n public clone(): ToolState {\n const val = new ToolState();\n val.setFrom(this);\n return val;\n }\n}\n\n/** @internal */\nexport class SuspendedToolState {\n private readonly _toolState: ToolState;\n private readonly _accuSnapState: AccuSnap.ToolState;\n private readonly _locateOptions: LocateOptions;\n private readonly _viewCursor?: string;\n private _inDynamics: boolean;\n private _shuttingDown = false;\n\n constructor() {\n const { toolAdmin, viewManager, accuSnap, locateManager } = IModelApp;\n toolAdmin.setIncompatibleViewportCursor(true); // Don't save this\n this._toolState = toolAdmin.toolState.clone();\n this._accuSnapState = accuSnap.toolState.clone();\n this._locateOptions = locateManager.options.clone();\n this._viewCursor = viewManager.cursor;\n this._inDynamics = viewManager.inDynamicsMode;\n if (this._inDynamics)\n viewManager.endDynamicsMode();\n }\n\n public stop() {\n if (this._shuttingDown)\n return;\n\n const { toolAdmin, viewManager, accuSnap, locateManager } = IModelApp;\n toolAdmin.setIncompatibleViewportCursor(true); // Don't restore this\n toolAdmin.toolState.setFrom(this._toolState);\n accuSnap.toolState.setFrom(this._accuSnapState);\n locateManager.options.setFrom(this._locateOptions);\n viewManager.setViewCursor(this._viewCursor);\n if (this._inDynamics)\n viewManager.beginDynamicsMode();\n else\n viewManager.endDynamicsMode();\n }\n}\n\n/** @internal */\nexport class CurrentInputState {\n private readonly _rawPoint: Point3d = new Point3d();\n private readonly _point: Point3d = new Point3d();\n private readonly _viewPoint: Point3d = new Point3d();\n public qualifiers = BeModifierKeys.None;\n public viewport?: ScreenViewport;\n public button: BeButtonState[] = [new BeButtonState(), new BeButtonState(), new BeButtonState()];\n public lastButton: BeButton = BeButton.Data;\n public inputSource: InputSource = InputSource.Unknown;\n public lastMotion = new Point2d();\n public lastMotionEvent?: BeButtonEvent;\n public lastWheelEvent?: BeWheelEvent;\n public lastTouchStart?: BeTouchEvent;\n public touchTapTimer?: number;\n public touchTapCount?: number;\n\n public get rawPoint() { return this._rawPoint; }\n public set rawPoint(pt: Point3d) { this._rawPoint.setFrom(pt); }\n public get point() { return this._point; }\n public set point(pt: Point3d) { this._point.setFrom(pt); }\n public get viewPoint() { return this._viewPoint; }\n public set viewPoint(pt: Point3d) { this._viewPoint.setFrom(pt); }\n public get isShiftDown() { return 0 !== (this.qualifiers & BeModifierKeys.Shift); }\n public get isControlDown() { return 0 !== (this.qualifiers & BeModifierKeys.Control); }\n public get isAltDown() { return 0 !== (this.qualifiers & BeModifierKeys.Alt); }\n\n public isDragging(button: BeButton) { return this.button[button].isDragging; }\n public onStartDrag(button: BeButton) { this.button[button].isDragging = true; }\n public onInstallTool() {\n this.clearKeyQualifiers();\n this.lastWheelEvent = this.lastMotionEvent = undefined;\n this.lastTouchStart = this.touchTapTimer = this.touchTapCount = undefined;\n }\n\n public clearKeyQualifiers() { this.qualifiers = BeModifierKeys.None; }\n public clearViewport(vp: Viewport) {\n if (vp === this.viewport)\n this.viewport = undefined;\n }\n\n private isAnyDragging() { return this.button.some((button) => button.isDragging); }\n private setKeyQualifier(qual: BeModifierKeys, down: boolean) {\n this.qualifiers = down ? (this.qualifiers | qual) : (this.qualifiers & (~qual));\n }\n\n public setKeyQualifiers(ev: MouseEvent | KeyboardEvent | TouchEvent): void {\n this.setKeyQualifier(BeModifierKeys.Shift, ev.shiftKey);\n this.setKeyQualifier(BeModifierKeys.Control, ev.ctrlKey);\n this.setKeyQualifier(BeModifierKeys.Alt, ev.altKey);\n }\n\n public onMotion(pt2d: XAndY) {\n this.lastMotion.x = pt2d.x;\n this.lastMotion.y = pt2d.y;\n }\n\n public changeButtonToDownPoint(ev: BeButtonEvent) {\n ev.point = this.button[ev.button].downUorPt;\n ev.rawPoint = this.button[ev.button].downRawPt;\n\n if (ev.viewport)\n ev.viewPoint = ev.viewport.worldToView(ev.rawPoint);\n }\n\n public updateDownPoint(ev: BeButtonEvent) { this.button[ev.button].downUorPt = ev.point; }\n\n public onButtonDown(button: BeButton) {\n let isDoubleClick = false;\n const now = Date.now();\n const vp = this.viewport;\n\n if (undefined !== vp) {\n const viewPt = vp.worldToView(this.button[button].downRawPt);\n const center = vp.npcToView(NpcCenter);\n viewPt.z = center.z;\n\n isDoubleClick = ((now - this.button[button].downTime) < ToolSettings.doubleClickTimeout.milliseconds) && (viewPt.distance(this.viewPoint) < vp.pixelsFromInches(ToolSettings.doubleClickToleranceInches));\n }\n\n this.button[button].init(this.point, this.rawPoint, now, true, isDoubleClick, false, this.inputSource);\n this.lastButton = button;\n }\n\n public onButtonUp(button: BeButton) {\n this.button[button].isDown = false;\n this.button[button].isDragging = false;\n this.lastButton = button;\n }\n\n public toEvent(ev: BeButtonEvent, useSnap: boolean) {\n let coordsFrom = CoordSource.User;\n const point = this.point.clone();\n let viewport = this.viewport;\n\n if (useSnap) {\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (snap) {\n coordsFrom = snap.isHot ? CoordSource.ElemSnap : CoordSource.User;\n point.setFrom(snap.isPointAdjusted ? snap.adjustedPoint : snap.getPoint()); // NOTE: adjustedPoint can be set by adjustSnapPoint even when not hot...\n viewport = snap.viewport;\n } else if (IModelApp.tentativePoint.isActive) {\n coordsFrom = CoordSource.TentativePoint;\n point.setFrom(IModelApp.tentativePoint.getPoint());\n viewport = IModelApp.tentativePoint.viewport;\n }\n }\n\n const buttonState = this.button[this.lastButton];\n ev.init({\n point, rawPoint: this.rawPoint, viewPoint: this.viewPoint, viewport, coordsFrom,\n keyModifiers: this.qualifiers, button: this.lastButton, isDown: buttonState.isDown,\n isDoubleClick: buttonState.isDoubleClick, isDragging: buttonState.isDragging,\n inputSource: this.inputSource,\n });\n }\n\n public adjustLastDataPoint(ev: BeButtonEvent) {\n const state = this.button[BeButton.Data];\n state.downUorPt = ev.point;\n state.downRawPt = ev.point;\n this.viewport = ev.viewport;\n }\n\n public toEventFromLastDataPoint(ev: BeButtonEvent) {\n const state = this.button[BeButton.Data];\n const point = state.downUorPt;\n const rawPoint = state.downRawPt;\n const viewPoint = this.viewport ? this.viewport.worldToView(rawPoint) : Point3d.create(); // BeButtonEvent is invalid when viewport is undefined\n ev.init({\n point, rawPoint, viewPoint, viewport: this.viewport, coordsFrom: CoordSource.User,\n keyModifiers: this.qualifiers, button: BeButton.Data, isDown: state.isDown,\n isDoubleClick: state.isDoubleClick, isDragging: state.isDragging, inputSource: state.inputSource,\n });\n }\n\n public fromPoint(vp: ScreenViewport, pt: XAndY, source: InputSource) {\n this.viewport = vp;\n this._viewPoint.x = pt.x;\n this._viewPoint.y = pt.y;\n this._viewPoint.z = vp.npcToView(NpcCenter).z;\n vp.viewToWorld(this._viewPoint, this._rawPoint);\n this.point = this._rawPoint;\n this.inputSource = source;\n }\n\n public fromButton(vp: ScreenViewport, pt: XAndY, source: InputSource, applyLocks: boolean) {\n this.fromPoint(vp, pt, source);\n\n // NOTE: Using the hit point on the element is preferable to ignoring a snap that is not \"hot\" completely\n if (TentativeOrAccuSnap.getCurrentSnap(false)) {\n if (applyLocks)\n IModelApp.toolAdmin.adjustSnapPoint();\n return;\n }\n IModelApp.toolAdmin.adjustPoint(this._point, vp, true, applyLocks);\n }\n\n public isStartDrag(button: BeButton): boolean {\n // First make sure we aren't already dragging any button\n if (this.isAnyDragging())\n return false;\n\n const state = this.button[button];\n if (!state.isDown)\n return false;\n\n if ((Date.now() - state.downTime) <= ToolSettings.startDragDelay.milliseconds)\n return false;\n\n const vp = this.viewport;\n if (undefined === vp)\n return false;\n\n const viewPt = vp.worldToView(state.downRawPt);\n const deltaX = Math.abs(this._viewPoint.x - viewPt.x);\n const deltaY = Math.abs(this._viewPoint.y - viewPt.y);\n\n return ((deltaX + deltaY) > vp.pixelsFromInches(ToolSettings.startDragDistanceInches));\n }\n}\n\n/** A ToolEvent combines an HTML Event and a Viewport. It is stored in a queue for processing by the ToolAdmin.eventLoop. */\ninterface ToolEvent {\n ev: Event;\n vp?: ScreenViewport; // Viewport is optional - keyboard events aren't associated with a Viewport.\n}\n\n/** Supplied by EditTools.initialize to make sure the current edit command finishes before starting a new primitive tool in the event that\n * the current edit tool that did not do so in it's onCleanup.\n * @internal\n */\nexport interface EditCommandHandler {\n finishCommand(): Promise<string>;\n}\n\n/** Controls the operation of [[Tool]]s, administering the current [[ViewTool]], [[PrimitiveTool]], and [[IdleTool]] and forwarding events to the appropriate tool.\n * @see [[IModelApp.toolAdmin]] to access the session's `ToolAdmin`.\n * @public\n * @extensions\n */\nexport class ToolAdmin {\n public markupView?: ScreenViewport;\n /** @internal */\n public readonly currentInputState = new CurrentInputState();\n /** @internal */\n public readonly toolState = new ToolState();\n /** Maintains the state of tool settings properties for the current session. */\n public readonly toolSettingsState = new ToolSettingsState();\n private _canvasDecoration?: CanvasDecoration;\n private _suspendedByViewTool?: SuspendedToolState;\n private _suspendedByInputCollector?: SuspendedToolState;\n private _viewTool?: ViewTool;\n private _primitiveTool?: PrimitiveTool;\n private _idleTool?: InteractiveTool;\n private _inputCollector?: InputCollector;\n private _saveCursor?: string;\n private _saveLocateCircle = false;\n private _defaultToolId = \"Select\";\n private _defaultToolArgs?: any[];\n private _lastHandledMotionTime?: BeTimePoint;\n private _mouseMoveOverTimeout?: NodeJS.Timeout;\n private _editCommandHandler?: EditCommandHandler;\n\n /** The name of the [[PrimitiveTool]] to use as the default tool.\n * Defaults to \"Select\", referring to [[SelectionTool]].\n * @note An empty string signifies no default tool allowing more events to be handled by [[idleTool]].\n * @see [[startDefaultTool]] to activate the default tool.\n * @see [[defaultToolArgs]] to supply arguments when starting the tool.\n */\n public get defaultToolId(): string {\n return this._defaultToolId;\n }\n public set defaultToolId(toolId: string) {\n this._defaultToolId = toolId;\n }\n\n /** The arguments supplied to the default [[Tool]]'s [[Tool.run]] method from [[startDefaultTool]].\n * @see [[defaultToolId]] to configure the default tool.\n */\n public get defaultToolArgs(): any[] | undefined {\n return this._defaultToolArgs;\n }\n public set defaultToolArgs(args: any[] | undefined) {\n this._defaultToolArgs = args;\n }\n\n /** Apply operations such as transform, copy or delete to all members of an assembly. */\n public assemblyLock = false;\n /** If Grid Lock is on, project data points to grid. */\n public gridLock = false;\n /** If ACS Snap Lock is on, project snap points to the ACS plane. */\n public acsPlaneSnapLock = false;\n /** If ACS Plane Lock is on, standard view rotations are relative to the ACS instead of global. */\n public acsContextLock = false;\n\n /** Options for how uncaught exceptions should be handled by [[ToolAdmin.exceptionHandler]]. */\n public static exceptionOptions = {\n /** Log exception to Logger. */\n log: true,\n /** Show an alert box explaining that a problem happened. */\n alertBox: true,\n /** Include the \"gory details\" (e.g. stack trace) in the alert box. */\n details: true,\n /** break into debugger (only works if debugger is already opened) */\n launchDebugger: true,\n };\n\n /** A function that catches otherwise-uncaught exceptions occurring inside ToolAdmin.eventLoop.\n * To customize the behavior of this function, modify [[ToolAdmin.exceptionOptions]].\n * To replace it within your own handler, simply assign to it, e.g.:\n * ```ts\n * ToolAdmin.exceptionHandler = (exception: any): Promise<any> => {\n * ... your implementation here\n * }\n * ```\n */\n public static async exceptionHandler(exception: any): Promise<any> {\n const opts = ToolAdmin.exceptionOptions;\n const msg: string = undefined !== exception.stack ? exception.stack : exception.toString();\n if (opts.log)\n Logger.logError(`${FrontendLoggerCategory.Package}.unhandledException`, msg);\n\n if (opts.launchDebugger) // this does nothing if the debugger window is not already opened\n debugger; // eslint-disable-line no-debugger\n\n if (!opts.alertBox)\n return;\n\n let out = `<h2>${IModelApp.localization.getLocalizedString(\"iModelJs:Errors.ReloadPage\")}</h2>`;\n if (opts.details) {\n out += `<h3>${IModelApp.localization.getLocalizedString(\"iModelJs:Errors.Details\")}</h3><h4>`;\n msg.split(\"\\n\").forEach((line) => out += `${line}<br>`);\n out += \"</h4>\";\n }\n\n const div = document.createElement(\"div\");\n div.innerHTML = out;\n return IModelApp.notifications.openMessageBox(MessageBoxType.MediumAlert, div, MessageBoxIconType.Critical);\n }\n\n private static readonly _removals: VoidFunction[] = [];\n\n /** The registered handler method that will update the UI with any property value changes.\n * @internal\n */\n private _toolSettingsChangeHandler: ((toolId: string, syncProperties: DialogPropertySyncItem[]) => void) | undefined = undefined;\n\n /** Returns the handler registered by the UI layer that allows it to display property changes made by the active Tool. */\n public get toolSettingsChangeHandler() { return this._toolSettingsChangeHandler; }\n public set toolSettingsChangeHandler(handler: ((toolId: string, syncProperties: DialogPropertySyncItem[]) => void) | undefined) {\n this._toolSettingsChangeHandler = handler;\n }\n\n /** The registered handler method that will inform the UI to reload tool setting with properties from active tool.\n * @internal\n */\n private _reloadToolSettingsHandler: (() => void) | undefined = undefined;\n\n /** Returns the handler registered by the UI layer that allows it to display property changes made by the active Tool. */\n public get reloadToolSettingsHandler() { return this._reloadToolSettingsHandler; }\n public set reloadToolSettingsHandler(handler: (() => void) | undefined) {\n this._reloadToolSettingsHandler = handler;\n }\n\n /** The registered handler method that will trigger UI Sync processing.\n * @internal\n */\n private _toolSyncUiEventDispatcher: ((syncEventId: string, useImmediateDispatch?: boolean) => void) | undefined = undefined;\n\n /** Returns the handler registered by the UI layer that will trigger UiSyncEvent processing that informs UI component to refresh their state. */\n public get toolSyncUiEventDispatcher() { return this._toolSyncUiEventDispatcher; }\n public set toolSyncUiEventDispatcher(handler: ((syncEventId: string, useImmediateDispatch?: boolean) => void) | undefined) {\n this._toolSyncUiEventDispatcher = handler;\n }\n\n /** Handler for keyboard events. */\n private static _keyEventHandler = (ev: KeyboardEvent) => {\n if (!ev.repeat) // we don't want repeated keyboard events. If we keep them they interfere with replacing mouse motion events, since they come as a stream.\n ToolAdmin.addEvent(ev);\n };\n\n /** @internal */\n public onInitialized() {\n if (typeof document === \"undefined\")\n return; // if document isn't defined, we're probably running in a test environment. At any rate, we can't have interactive tools.\n\n this._idleTool = IModelApp.tools.create(\"Idle\") as InteractiveTool;\n\n [\"keydown\", \"keyup\"].forEach((type) => {\n document.addEventListener(type, ToolAdmin._keyEventHandler as EventListener, false);\n ToolAdmin._removals.push(() => document.removeEventListener(type, ToolAdmin._keyEventHandler as EventListener, false));\n });\n\n ToolAdmin._removals.push(() => window.onfocus = null);\n }\n\n /** @internal */\n public onShutDown() {\n this.clearMotionPromises();\n this._idleTool = undefined;\n IconSprites.emptyAll(); // clear cache of icon sprites\n ToolAdmin._removals.forEach((remove) => remove());\n ToolAdmin._removals.length = 0;\n }\n\n /** Get the ScreenViewport where the cursor is currently, if any. */\n public get cursorView(): ScreenViewport | undefined { return this.currentInputState.viewport; }\n\n /** Called from ViewManager.dropViewport to prevent tools from continuing to operate on the dropped viewport.\n * @internal\n */\n public forgetViewport(vp: ScreenViewport): void {\n // Ignore pending motion promises on fulfillment.\n this.clearMotionPromises();\n\n // make sure tools don't think the cursor is still in this viewport.\n this.onMouseLeave(vp);\n\n // Invalidate last motion if for this viewport...\n if (this.currentInputState.lastMotionEvent?.viewport === vp)\n this.currentInputState.lastMotionEvent = undefined;\n\n // Remove any events associated with this viewport.\n ToolAdmin._toolEvents = ToolAdmin._toolEvents.filter((ev) => ev.vp !== vp);\n }\n\n private getMousePosition(event: ToolEvent): XAndY {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return event.vp!.mousePosFromEvent(event.ev as MouseEvent);\n }\n\n private getMouseMovement(event: ToolEvent): XAndY {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return event.vp!.mouseMovementFromEvent(event.ev as MouseEvent);\n }\n\n private getMouseButton(button: number) {\n switch (button) {\n case MouseButton.Middle: return BeButton.Middle;\n case MouseButton.Right: return BeButton.Reset;\n default: return BeButton.Data;\n }\n }\n\n private async onMouseButton(event: ToolEvent, isDown: boolean): Promise<any> {\n const ev = event.ev as MouseEvent;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const vp = event.vp!;\n const pos = this.getMousePosition(event);\n const button = this.getMouseButton(ev.button);\n\n this.currentInputState.setKeyQualifiers(ev);\n return isDown ? this.onButtonDown(vp, pos, button, InputSource.Mouse) : this.onButtonUp(vp, pos, button, InputSource.Mouse);\n }\n\n private async onWheel(event: ToolEvent): Promise<EventHandled> {\n const ev = event.ev as WheelEvent;\n const vp = event.vp;\n if (undefined === vp || this.filterViewport(vp))\n return EventHandled.Yes;\n const current = this.currentInputState;\n current.setKeyQualifiers(ev);\n\n if (ev.deltaY === 0)\n return EventHandled.No;\n\n let delta: number;\n switch (ev.deltaMode) {\n case ev.DOM_DELTA_LINE:\n delta = -ev.deltaY * ToolSettings.wheelLineFactor; // 40\n break;\n case ev.DOM_DELTA_PAGE:\n delta = -ev.deltaY * ToolSettings.wheelPageFactor; // 120;\n break;\n default: // DOM_DELTA_PIXEL:\n delta = -ev.deltaY;\n break;\n }\n\n const pt2d = this.getMousePosition(event);\n\n vp.setAnimator();\n current.fromButton(vp, pt2d, InputSource.Mouse, true);\n const wheelEvent = new BeWheelEvent();\n wheelEvent.wheelDelta = delta;\n current.toEvent(wheelEvent, true);\n\n const overlayHit = this.pickCanvasDecoration(wheelEvent);\n if (undefined !== overlayHit && undefined !== overlayHit.onWheel && overlayHit.onWheel(wheelEvent))\n return EventHandled.Yes;\n\n const tool = this.activeTool;\n if (undefined === tool || EventHandled.Yes !== await tool.onMouseWheel(wheelEvent) && vp !== this.markupView)\n return this.idleTool.onMouseWheel(wheelEvent);\n return EventHandled.Yes;\n }\n\n private async sendTapEvent(touchEv: BeTouchEvent): Promise<EventHandled> {\n const vp = touchEv.viewport;\n if (undefined !== vp)\n vp.setAnimator();\n const overlayHit = this.pickCanvasDecoration(touchEv);\n if (undefined !== overlayHit && undefined !== overlayHit.onMouseButton && overlayHit.onMouseButton(touchEv))\n return EventHandled.Yes;\n\n if (await IModelApp.accuSnap.onTouchTap(touchEv))\n return EventHandled.Yes;\n\n const tool = this.activeTool;\n if (undefined !== tool && EventHandled.Yes === await tool.onTouchTap(touchEv))\n return EventHandled.Yes;\n\n return this.idleTool.onTouchTap(touchEv);\n }\n\n private async doubleTapTimeout(): Promise<void> {\n const current = this.currentInputState;\n if (undefined === current.touchTapTimer)\n return;\n\n const touchEv = current.lastTouchStart;\n const numTouches = (undefined !== current.lastTouchStart ? current.lastTouchStart.touchCount : 0);\n const numTaps = (undefined !== current.touchTapCount ? current.touchTapCount : 0);\n\n current.touchTapTimer = current.touchTapCount = current.lastTouchStart = undefined;\n if (undefined === touchEv || 0 > numTouches || 0 > numTaps)\n return;\n\n touchEv.tapCount = numTaps;\n await this.sendTapEvent(touchEv);\n }\n\n private async onTouch(event: ToolEvent): Promise<void> {\n const touchEvent = event.ev as TouchEvent;\n const vp = event.vp;\n if (undefined === vp || this.filterViewport(vp))\n return;\n\n const ev = new BeTouchEvent({ touchEvent });\n const current = this.currentInputState;\n const pos = BeTouchEvent.getTouchListCentroid(0 !== touchEvent.targetTouches.length ? touchEvent.targetTouches : touchEvent.changedTouches, vp);\n\n switch (touchEvent.type) {\n case \"touchstart\":\n if (touchEvent.changedTouches.length === touchEvent.targetTouches.length)\n vp.setAnimator(); // Clear viewport animator on start of new touch input (first contact point added)...\n current.setKeyQualifiers(touchEvent);\n break;\n case \"touchend\":\n current.setKeyQualifiers(touchEvent);\n break;\n }\n\n current.fromButton(vp, undefined !== pos ? pos : Point2d.createZero(), InputSource.Touch, true);\n current.toEvent(ev, false);\n const tool = this.activeTool;\n\n switch (touchEvent.type) {\n case \"touchstart\": {\n current.lastTouchStart = ev;\n IModelApp.accuSnap.onTouchStart(ev);\n if (undefined !== tool)\n await tool.onTouchStart(ev);\n return;\n }\n\n case \"touchend\": {\n IModelApp.accuSnap.onTouchEnd(ev);\n if (undefined !== tool) {\n await tool.onTouchEnd(ev);\n if (0 === ev.touchCount)\n await tool.onTouchComplete(ev);\n }\n\n if (undefined === current.lastTouchStart)\n return;\n\n if (ev.touchEvent.timeStamp - current.lastTouchStart.touchEvent.timeStamp > (2.0 * ToolSettings.doubleTapTimeout.milliseconds))\n return; // Too much time has passed from touchstart to be considered a tap...\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ev.touchEvent.changedTouches.length; i++) {\n const currTouch = ev.touchEvent.changedTouches[i];\n const startTouch = BeTouchEvent.findTouchById(current.lastTouchStart.touchEvent.targetTouches, currTouch.identifier);\n\n if (undefined !== startTouch) {\n const currPt = BeTouchEvent.getTouchPosition(currTouch, vp);\n const startPt = BeTouchEvent.getTouchPosition(startTouch, vp);\n\n if (currPt.distance(startPt) < vp.pixelsFromInches(ToolSettings.touchMoveDistanceInches))\n continue; // Hasn't moved appreciably....\n }\n\n current.lastTouchStart = undefined; // Not a tap...\n return;\n }\n\n if (0 !== ev.touchCount || undefined === current.lastTouchStart)\n return;\n\n // All fingers off, defer processing tap until we've waited long enough to detect double tap...\n if (undefined === current.touchTapTimer) {\n current.touchTapTimer = Date.now();\n current.touchTapCount = 1;\n // NOTE: We cannot await the executeAfter call below, because that prevents any other\n // taps from being processed, which makes it impossible for double tap to happen.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n void ToolSettings.doubleTapTimeout.executeAfter(this.doubleTapTimeout, this);\n } else if (undefined !== current.touchTapCount) {\n current.touchTapCount++;\n }\n return;\n }\n\n case \"touchcancel\": {\n current.lastTouchStart = undefined;\n IModelApp.accuSnap.onTouchCancel(ev);\n if (undefined !== tool)\n await tool.onTouchCancel(ev);\n return;\n }\n\n case \"touchmove\": {\n if (!IModelApp.accuSnap.onTouchMove(ev) && undefined !== tool)\n await tool.onTouchMove(ev);\n\n if (undefined === current.lastTouchStart)\n return;\n\n if (ev.touchEvent.timeStamp - current.lastTouchStart.touchEvent.timeStamp < ToolSettings.touchMoveDelay.milliseconds)\n return;\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < ev.touchEvent.changedTouches.length; ++i) {\n const currTouch = ev.touchEvent.changedTouches[i];\n const startTouch = BeTouchEvent.findTouchById(current.lastTouchStart.touchEvent.targetTouches, currTouch.identifier);\n\n if (undefined === startTouch)\n continue;\n\n const currPt = BeTouchEvent.getTouchPosition(currTouch, vp);\n const startPt = BeTouchEvent.getTouchPosition(startTouch, vp);\n\n if (currPt.distance(startPt) < vp.pixelsFromInches(ToolSettings.touchMoveDistanceInches))\n continue; // Hasn't moved appreciably....\n\n const touchStart = current.lastTouchStart;\n current.lastTouchStart = undefined;\n\n if (IModelApp.accuSnap.onTouchMoveStart(ev, touchStart))\n return;\n\n if (undefined === tool || EventHandled.Yes !== await tool.onTouchMoveStart(ev, touchStart))\n await this.idleTool.onTouchMoveStart(ev, touchStart);\n\n return;\n }\n return;\n }\n }\n }\n\n /** A first-in-first-out queue of ToolEvents. */\n private static _toolEvents: ToolEvent[] = [];\n private static tryReplace(ev: Event, vp?: ScreenViewport): boolean {\n if (ToolAdmin._toolEvents.length < 1)\n return false;\n const last = ToolAdmin._toolEvents[ToolAdmin._toolEvents.length - 1];\n const lastType = last.ev.type;\n if (lastType !== ev.type || (lastType !== \"mousemove\" && lastType !== \"touchmove\"))\n return false; // only mousemove and touchmove can replace previous\n last.ev = ev; // sequential moves are not important. Replace the previous one with this one.\n last.vp = vp;\n return true;\n }\n\n /** @internal */\n private static getNextEvent(): ToolEvent | undefined {\n if (ToolAdmin._toolEvents.length > 1) // if there is more than one event, we're going to need another animation frame to process it.\n IModelApp.requestNextAnimation();\n\n return ToolAdmin._toolEvents.shift(); // pull first event from the queue\n }\n\n /** Called from HTML event listeners. Events are processed in the order they're received in ToolAdmin.eventLoop\n * @internal\n */\n public static addEvent(ev: Event, vp?: ScreenViewport): void {\n // Don't add events to queue if event loop hasn't been started to process them...\n if (!IModelApp.isEventLoopStarted)\n return;\n\n if (!ToolAdmin.tryReplace(ev, vp)) // see if this event replaces the last event in the queue\n this._toolEvents.push({ ev, vp }); // otherwise put it at the end of the queue.\n\n IModelApp.requestNextAnimation(); // wake up event loop, if\n }\n\n /** Process the next event in the event queue, if any. */\n private async processNextEvent(): Promise<any> {\n const event = ToolAdmin.getNextEvent(); // pull first event from the queue\n if (undefined === event)\n return; // nothing in queue\n\n switch (event.ev.type) {\n case \"mousedown\": return this.onMouseButton(event, true);\n case \"mouseup\": return this.onMouseButton(event, false);\n case \"mousemove\": return this.onMouseMove(event);\n case \"mouseover\": return this.onMouseEnter(event);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n case \"mouseout\": return this.onMouseLeave(event.vp!);\n case \"wheel\": return this.onWheel(event);\n case \"keydown\": return this.onKeyTransition(event, true);\n case \"keyup\": return this.onKeyTransition(event, false);\n case \"touchstart\": return this.onTouch(event);\n case \"touchend\": return this.onTouch(event);\n case \"touchcancel\": return this.onTouch(event);\n case \"touchmove\": return this.onTouch(event);\n }\n }\n\n private _processingEvent = false;\n /**\n * Process a single event, plus timer events. Don't start work on new events if the previous one has not finished.\n * @internal\n */\n public async processEvent(): Promise<void> {\n if (this._processingEvent)\n return; // we're still working on the previous event.\n\n try {\n this._processingEvent = true; // we can't allow any further event processing until the current event completes.\n await this.processNextEvent();\n } catch (exception) {\n await ToolAdmin.exceptionHandler(exception); // we don't attempt to exit here\n } finally {\n this._processingEvent = false; // this event is now finished. Allow processing next time through.\n }\n }\n\n /** The idleTool handles events that are not otherwise processed. */\n public get idleTool(): InteractiveTool {\n assert(undefined !== this._idleTool);\n return this._idleTool;\n }\n public set idleTool(idleTool: InteractiveTool) {\n this._idleTool = idleTool;\n }\n\n /** Return true to filter (ignore) events to the given viewport */\n protected filterViewport(vp: ScreenViewport) {\n if (undefined === vp || vp.isDisposed)\n return true;\n\n const tool = this.activeTool;\n return (undefined !== tool ? !tool.isCompatibleViewport(vp, false) : false);\n }\n\n /** @internal */\n public async onInstallTool(tool: InteractiveTool): Promise<boolean> {\n this.currentInputState.onInstallTool();\n return tool.onInstall();\n }\n\n /** @internal */\n public async onPostInstallTool(tool: InteractiveTool) { return tool.onPostInstall(); }\n\n public get viewTool(): ViewTool | undefined { return this._viewTool; }\n public get primitiveTool(): PrimitiveTool | undefined { return this._primitiveTool; }\n\n /** The currently active InteractiveTool. May be ViewTool, InputCollector, PrimitiveTool, undefined - in that priority order. */\n public get activeTool(): InteractiveTool | undefined {\n return this._viewTool ? this._viewTool : (this._inputCollector ? this._inputCollector : this._primitiveTool); // NOTE: Viewing tools suspend input collectors as well as primitives\n }\n\n /** The current tool. May be ViewTool, InputCollector, PrimitiveTool, or IdleTool - in that priority order. */\n public get currentTool(): InteractiveTool { return this.activeTool ? this.activeTool : this.idleTool; }\n\n /** Allow applications to inhibit specific tooltips, such as for maps. */\n public wantToolTip(_hit: HitDetail): boolean { return true; }\n\n /** Ask the current tool to provide tooltip contents for the supplied HitDetail. */\n public async getToolTip(hit: HitDetail): Promise<HTMLElement | string> { return this.currentTool.getToolTip(hit); }\n\n /**\n * Event raised whenever the active tool changes. This includes PrimitiveTool, ViewTool, and InputCollector.\n * @param newTool The newly activated tool\n */\n public readonly activeToolChanged = new BeEvent<(tool: Tool, start: StartOrResume) => void>();\n\n /**\n * Event raised by tools that support edit manipulators like the SelectTool.\n * @param tool The current tool\n */\n public readonly manipulatorToolEvent = new BeEvent<(tool: Tool, event: ManipulatorToolEvent) => void>();\n\n private async onMouseEnter(event: ToolEvent): Promise<void> {\n const vp = event.vp;\n const current = this.currentInputState;\n current.viewport = vp;\n\n // Detect if drag was active and button was released outside the view...\n const tool = this.activeTool;\n if (undefined === tool)\n return;\n\n const buttonMask = (event.ev as MouseEvent).buttons;\n let cancelDrag = false;\n\n current.button.forEach((button, buttonNum) => {\n if (button.isDragging && !(buttonMask & (1 << buttonNum))) {\n button.isDragging = button.isDown = false;\n cancelDrag = true;\n }\n });\n\n if (cancelDrag)\n await tool.onReinitialize();\n }\n\n /** @internal */\n public onMouseLeave(vp: ScreenViewport): void {\n if (this._mouseMoveOverTimeout !== undefined)\n clearTimeout(this._mouseMoveOverTimeout);\n\n IModelApp.accuSnap.clear();\n this.currentInputState.clearViewport(vp);\n this.setCanvasDecoration(vp);\n vp.invalidateDecorations(); // stop drawing locate circle...\n }\n\n /** @internal */\n public updateDynamics(ev?: BeButtonEvent, useLastData?: boolean, adjustPoint?: boolean): void {\n if (undefined === this.activeTool)\n return;\n\n if (undefined === ev) {\n ev = new BeButtonEvent();\n\n if (useLastData)\n this.fillEventFromLastDataButton(ev);\n else\n this.fillEventFromCursorLocation(ev);\n\n if (adjustPoint && undefined !== ev.viewport) {\n // Use ev.rawPoint for cursor location when not snapped as ev.point gets adjusted in fromButton...\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined !== snap) {\n // Account for changes to locks, reset and re-adjust snap point...\n snap.adjustedPoint.setFrom(snap.getPoint());\n this.adjustSnapPoint();\n ev.point.setFrom(snap.isPointAdjusted ? snap.adjustedPoint : snap.getPoint());\n } else {\n ev.point.setFrom(IModelApp.tentativePoint.isActive ? IModelApp.tentativePoint.getPoint() : ev.rawPoint);\n this.adjustPoint(ev.point, ev.viewport);\n }\n IModelApp.accuDraw.onMotion(ev);\n }\n }\n\n if (undefined === ev.viewport)\n return;\n\n // Support tools requesting async information in onMouseMotion for use in decorate or onDynamicFrame...\n const toolPromise = this._toolMotionPromise = this.activeTool.onMouseMotion(ev);\n const tool = this.activeTool;\n const vp = ev.viewport;\n const motion = ev;\n\n toolPromise.then(() => {\n if (undefined === this._toolMotionPromise)\n return; // Only early return if canceled, result from a previous motion is preferable to showing nothing...\n\n this.currentInputState.lastMotionEvent = motion; // Save to use for simulation motion...\n\n // Update decorations when dynamics are inactive...\n if (!IModelApp.viewManager.inDynamicsMode) {\n vp.invalidateDecorations();\n return;\n }\n\n // Update dynamics and decorations only after motion...\n const context = new DynamicsContext(vp);\n tool.onDynamicFrame(motion, context);\n context.changeDynamics();\n }).catch((_) => { });\n }\n\n public async sendEndDragEvent(ev: BeButtonEvent): Promise<any> {\n let tool = this.activeTool;\n\n if (undefined !== tool) {\n if (!tool.isValidLocation(ev, true))\n tool = undefined;\n else if (tool.receivedDownEvent)\n tool.receivedDownEvent = false;\n else\n tool = undefined;\n }\n\n // Don't send tool end drag event if it didn't get the start drag event\n if (undefined === tool || EventHandled.Yes !== await tool.onMouseEndDrag(ev))\n return this.idleTool.onMouseEndDrag(ev);\n }\n\n private setCanvasDecoration(vp: ScreenViewport, dec?: CanvasDecoration, ev?: BeButtonEvent) {\n if (dec === this._canvasDecoration)\n return;\n\n if (this._canvasDecoration && this._canvasDecoration.onMouseLeave)\n this._canvasDecoration.onMouseLeave();\n this._canvasDecoration = dec;\n if (ev && dec && dec.onMouseEnter)\n dec.onMouseEnter(ev);\n\n vp.canvas.style.cursor = dec ? (dec.decorationCursor ? dec.decorationCursor : \"pointer\") : IModelApp.viewManager.cursor;\n vp.invalidateDecorations();\n }\n\n private pickCanvasDecoration(ev: BeButtonEvent) {\n const vp = ev.viewport;\n if (undefined === vp)\n return undefined;\n const decoration = (undefined === this.viewTool) ? vp.pickCanvasDecoration(ev.viewPoint) : undefined;\n this.setCanvasDecoration(vp, decoration, ev);\n return decoration;\n }\n\n /** Current request for locate/snap */\n private _snapMotionPromise?: Promise<boolean>;\n /** Current request for active tool motion event */\n private _toolMotionPromise?: Promise<void>;\n\n private clearMotionPromises(): void {\n this._snapMotionPromise = this._toolMotionPromise = undefined;\n }\n\n private async forceOnMotionSnap(ev: BeButtonEvent): Promise<boolean> {\n // Make sure that we fire the motion snap event correctly\n this._lastHandledMotionTime = undefined;\n\n return this.onMotionSnap(ev);\n }\n\n private async onMotionSnap(ev: BeButtonEvent): Promise<boolean> {\n try {\n await this.onMotionSnapOrSkip(ev);\n return true;\n } catch (error) {\n if (error instanceof AbandonedError)\n return false; // expected, not a problem. Just ignore this motion and return.\n throw error; // unknown error\n }\n }\n\n // Call accuSnap.onMotion\n private async onMotionSnapOrSkip(ev: BeButtonEvent): Promise<void> {\n if (this.shouldSkipOnMotionSnap())\n return;\n\n await IModelApp.accuSnap.onMotion(ev);\n\n this._lastHandledMotionTime = BeTimePoint.now();\n }\n\n // Should the current onMotionSnap event be skipped to avoid unnecessary ReadPixel calls?\n private shouldSkipOnMotionSnap(): boolean {\n if (this._lastHandledMotionTime === undefined)\n return false;\n\n const now = BeTimePoint.now();\n const msSinceLastCall = now.milliseconds - this._lastHandledMotionTime.milliseconds;\n\n const delay = 1000 / ToolSettings.maxOnMotionSnapCallPerSecond;\n\n return msSinceLastCall < delay;\n }\n\n private async onStartDrag(ev: BeButtonEvent, tool?: InteractiveTool): Promise<EventHandled> {\n if (undefined !== tool && EventHandled.Yes === await tool.onMouseStartDrag(ev))\n return EventHandled.Yes;\n\n // Pass start drag event to idle tool if active tool doesn't explicitly handle it\n return this.idleTool.onMouseStartDrag(ev);\n }\n\n private async onMotion(vp: ScreenViewport, pt2d: XAndY, inputSource: InputSource, forceStartDrag: boolean = false, movement?: XAndY): Promise<any> {\n const current = this.currentInputState;\n current.onMotion(pt2d);\n\n if (this.filterViewport(vp)) {\n this.setIncompatibleViewportCursor(false);\n return;\n }\n\n // Detect when the motion stops by setting a timeout\n if (this._mouseMoveOverTimeout !== undefined)\n clearTimeout(this._mouseMoveOverTimeout); // If a previous timeout was up, it is cancelled: the movement is not over yet\n\n const ev = new BeButtonEvent();\n current.fromPoint(vp, pt2d, inputSource);\n current.toEvent(ev, false);\n\n const overlayHit = this.pickCanvasDecoration(ev);\n if (undefined !== overlayHit) {\n if (overlayHit.onMouseMove)\n overlayHit.onMouseMove(ev);\n\n if (undefined === overlayHit.propagateMouseMove || !overlayHit.propagateMouseMove(ev))\n return; // we're inside a pickable decoration that doesn't want event sent to tool\n }\n\n this._mouseMoveOverTimeout = setTimeout(async () => {\n await this.onMotionEnd(vp, pt2d, inputSource);\n await processMotion();\n }, 100);\n\n const processMotion = async (): Promise<void> => {\n // Update event to account for AccuSnap adjustments...\n current.fromButton(vp, pt2d, inputSource, true);\n current.toEvent(ev, true);\n ev.movement = movement;\n\n IModelApp.accuDraw.onMotion(ev);\n\n let tool = this.activeTool;\n const isValidLocation = (undefined !== tool ? tool.isValidLocation(ev, false) : true);\n this.setIncompatibleViewportCursor(isValidLocation);\n\n if (forceStartDrag || current.isStartDrag(ev.button)) {\n current.onStartDrag(ev.button);\n current.changeButtonToDownPoint(ev);\n ev.isDragging = true;\n\n if (undefined !== tool) {\n if (!isValidLocation)\n tool = undefined;\n else if (forceStartDrag)\n tool.receivedDownEvent = true;\n else if (!tool.receivedDownEvent)\n tool = undefined;\n }\n\n await this.onStartDrag(ev, tool);\n return;\n }\n\n this.updateDynamics(ev);\n };\n\n const snapPromise = this._snapMotionPromise = this.onMotionSnap(ev);\n\n /** When forceStartDrag is true, make sure we don't return a fulfilled promise until we've processed the motion so callers can await it.\n * The .then below happens AFTER this method returns its (fulfilled) promise so we can't use that.\n */\n if (forceStartDrag) {\n await snapPromise;\n return processMotion();\n }\n\n if (this.isLocateCircleOn)\n vp.invalidateDecorations();\n\n snapPromise.then(async (snapOk) => {\n if (!snapOk || snapPromise !== this._snapMotionPromise)\n return;\n return processMotion();\n }).catch((_) => { });\n }\n\n // Called when we detect that the motion stopped\n private async onMotionEnd(vp: ScreenViewport, pos: XAndY, inputSource: InputSource): Promise<void> {\n const current = this.currentInputState;\n\n const ev = new BeButtonEvent();\n current.fromPoint(vp, pos, inputSource);\n current.toEvent(ev, false);\n\n await this.forceOnMotionSnap(ev);\n }\n\n private async onMouseMove(event: ToolEvent): Promise<any> {\n const vp = event.vp;\n if (undefined === vp)\n return;\n\n const pos = this.getMousePosition(event);\n const mov = this.getMouseMovement(event);\n\n // Sometimes the mouse goes down in a view, but we lose focus while its down so we never receive the up event.\n // That makes it look like the motion is a drag. Fix that by clearing the \"isDown\" based on the buttons member of the MouseEvent.\n const buttonMask = (event.ev as MouseEvent).buttons;\n if (!(buttonMask & 1))\n this.currentInputState.button[BeButton.Data].isDown = false;\n\n return this.onMotion(vp, pos, InputSource.Mouse, false, mov);\n }\n\n public adjustPointToACS(pointActive: Point3d, vp: Viewport, perpendicular: boolean): void {\n // The \"I don't want ACS lock\" flag can be set by tools to override the default behavior\n if (0 !== (this.toolState.coordLockOvr & CoordinateLockOverrides.ACS))\n return;\n\n let viewZRoot: Vector3d;\n\n // Lock to the construction plane\n if (vp.view.is3d() && vp.view.isCameraOn)\n viewZRoot = vp.view.camera.eye.vectorTo(pointActive);\n else\n viewZRoot = vp.rotation.getRow(2);\n\n const auxOriginRoot = vp.getAuxCoordOrigin();\n const auxRMatrixRoot = vp.getAuxCoordRotation();\n let auxNormalRoot = auxRMatrixRoot.getRow(2);\n\n // If ACS xy plane is perpendicular to view and not snapping, project to closest xz or yz plane instead\n if (auxNormalRoot.isPerpendicularTo(viewZRoot) && !TentativeOrAccuSnap.isHot) {\n const auxXRoot = auxRMatrixRoot.getRow(0);\n const auxYRoot = auxRMatrixRoot.getRow(1);\n auxNormalRoot = (Math.abs(auxXRoot.dotProduct(viewZRoot)) > Math.abs(auxYRoot.dotProduct(viewZRoot))) ? auxXRoot : auxYRoot;\n }\n linePlaneIntersect(pointActive, pointActive, viewZRoot, auxOriginRoot, auxNormalRoot, perpendicular);\n }\n\n public adjustPointToGrid(pointActive: Point3d, vp: Viewport) {\n // The \"I don't want grid lock\" flag can be set by tools to override the default behavior\n if (!this.gridLock || 0 !== (this.toolState.coordLockOvr & CoordinateLockOverrides.Grid))\n return;\n vp.pointToGrid(pointActive);\n }\n\n public adjustPoint(pointActive: Point3d, vp: ScreenViewport, projectToACS: boolean = true, applyLocks: boolean = true): void {\n if (Math.abs(pointActive.z) < 1.0e-7)\n pointActive.z = 0.0; // remove Z fuzz introduced by active depth when near 0\n\n let handled = false;\n\n if (applyLocks && !(IModelApp.tentativePoint.isActive || IModelApp.accuSnap.isHot))\n handled = IModelApp.accuDraw.adjustPoint(pointActive, vp, false);\n\n // NOTE: We don't need to support axis lock, it is worthless if you have AccuDraw\n if (!handled && vp.isPointAdjustmentRequired) {\n if (applyLocks)\n this.adjustPointToGrid(pointActive, vp);\n\n if (projectToACS)\n this.adjustPointToACS(pointActive, vp, false);\n } else if (applyLocks) {\n const savePoint = pointActive.clone();\n\n this.adjustPointToGrid(pointActive, vp);\n\n // if grid lock changes point, resend point to accudraw\n if (handled && !pointActive.isExactEqual(savePoint))\n IModelApp.accuDraw.adjustPoint(pointActive, vp, false);\n }\n\n if (Math.abs(pointActive.z) < 1.0e-7)\n pointActive.z = 0.0;\n }\n\n public adjustSnapPoint(perpendicular: boolean = true): void {\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (!snap)\n return;\n\n const vp = snap.viewport;\n const isHot = snap.isHot;\n const point = snap.getPoint().clone();\n const savePt = point.clone();\n\n if (!isHot) // Want point adjusted to grid for a hit that isn't hot\n this.adjustPointToGrid(point, vp);\n\n if (!IModelApp.accuDraw.adjustPoint(point, vp, isHot)) {\n if (vp.isSnapAdjustmentRequired)\n this.adjustPointToACS(point, vp, perpendicular || IModelApp.accuDraw.isActive);\n }\n\n if (!point.isExactEqual(savePt))\n snap.adjustedPoint.setFrom(point);\n }\n\n /** Application sub-classes can override this method to intercept button events before they are sent to the active tool.\n * An example use for this event would be to implement a shift + right-click or right-press menu.\n * @return true if event was handled and should not propagate to the active tool.\n */\n protected onPreButtonEvent(_ev: BeButtonEvent): boolean {\n return false;\n }\n\n /** @internal */\n public async sendButtonEvent(ev: BeButtonEvent): Promise<any> {\n const overlayHit = this.pickCanvasDecoration(ev);\n if (undefined !== overlayHit && undefined !== overlayHit.onMouseButton && overlayHit.onMouseButton(ev))\n return;\n\n if (this.onPreButtonEvent(ev))\n return;\n\n if (IModelApp.accuSnap.onPreButtonEvent(ev))\n return;\n\n const activeTool = this.activeTool;\n let tool = activeTool;\n\n if (undefined !== tool) {\n if (!tool.isValidLocation(ev, true))\n tool = undefined;\n else if (ev.isDown)\n tool.receivedDownEvent = true;\n else if (tool.receivedDownEvent)\n tool.receivedDownEvent = false;\n else\n tool = undefined;\n }\n\n if (IModelApp.accuDraw.onPreButtonEvent(ev))\n return;\n\n let updateDynamics = false;\n\n switch (ev.button) {\n case BeButton.Data: {\n if (undefined === tool) {\n if (undefined !== activeTool)\n break;\n tool = this.idleTool; // Pass data button event to idle tool when no active tool present\n }\n\n if (ev.isDown) {\n await tool.onDataButtonDown(ev);\n } else {\n await tool.onDataButtonUp(ev);\n break;\n }\n\n // Lock tool to target model of this view on first data button\n if (tool instanceof PrimitiveTool)\n tool.autoLockTarget();\n\n updateDynamics = true; // AccuDraw.onPostButtonEvent needs to process the active tool's pending hints from onDataButtonDown before calling updateDynamics...\n break;\n }\n\n case BeButton.Reset: {\n if (undefined === tool) {\n if (undefined !== activeTool)\n break;\n tool = this.idleTool; // Pass reset button event to idle tool when no active tool present\n }\n\n if (ev.isDown)\n await tool.onResetButtonDown(ev);\n else\n await tool.onResetButtonUp(ev);\n break;\n }\n\n case BeButton.Middle: {\n // Pass middle button event to idle tool when active tool doesn't explicitly handle it\n if (ev.isDown) {\n if (undefined === tool || EventHandled.Yes !== await tool.onMiddleButtonDown(ev))\n await this.idleTool.onMiddleButtonDown(ev);\n } else {\n if (undefined === tool || EventHandled.Yes !== await tool.onMiddleButtonUp(ev))\n await this.idleTool.onMiddleButtonUp(ev);\n }\n break;\n }\n }\n\n IModelApp.tentativePoint.onButtonEvent(ev);\n IModelApp.accuDraw.onPostButtonEvent(ev);\n\n if (!updateDynamics)\n return;\n\n // Update tool dynamics for current cursor location to not require a motion event.\n this.updateDynamics(undefined, undefined, true);\n }\n\n private async onButtonDown(vp: ScreenViewport, pt2d: XAndY, button: BeButton, inputSource: InputSource): Promise<any> {\n const filtered = this.filterViewport(vp);\n if (undefined === this._viewTool && button === BeButton.Data)\n await IModelApp.viewManager.setSelectedView(vp);\n if (filtered)\n return;\n\n vp.setAnimator();\n const ev = new BeButtonEvent();\n const current = this.currentInputState;\n current.fromButton(vp, pt2d, inputSource, true);\n current.onButtonDown(button);\n current.toEvent(ev, true);\n current.updateDownPoint(ev);\n\n return this.sendButtonEvent(ev);\n }\n\n private async onButtonUp(vp: ScreenViewport, pt2d: XAndY, button: BeButton, inputSource: InputSource): Promise<any> {\n if (this.filterViewport(vp))\n return;\n\n const ev = new BeButtonEvent();\n const current = this.currentInputState;\n const wasDragging = current.isDragging(button);\n current.fromButton(vp, pt2d, inputSource, true);\n current.onButtonUp(button);\n current.toEvent(ev, true);\n\n if (wasDragging)\n return this.sendEndDragEvent(ev);\n\n current.changeButtonToDownPoint(ev);\n return this.sendButtonEvent(ev);\n }\n\n /** Called when any *modifier* (Shift, Alt, or Control) key is pressed or released. */\n private async onModifierKeyTransition(wentDown: boolean, modifier: BeModifierKeys, event: KeyboardEvent): Promise<void> {\n const activeTool = this.activeTool;\n const changed = activeTool ? await activeTool.onModifierKeyTransition(wentDown, modifier, event) : EventHandled.No;\n\n if (changed === EventHandled.Yes) {\n IModelApp.viewManager.invalidateDecorationsAllViews();\n this.updateDynamics(undefined, undefined, true); // Don't wait for motion to update dynamics...\n }\n }\n\n private static getModifierKey(event: KeyboardEvent): BeModifierKeys {\n switch (event.key) {\n case \"Alt\": return BeModifierKeys.Alt;\n case \"Shift\": return BeModifierKeys.Shift;\n case \"Control\": return BeModifierKeys.Control;\n }\n return BeModifierKeys.None;\n }\n\n /** Process key down events while the Ctrl key is pressed */\n public async onCtrlKeyPressed(keyEvent: KeyboardEvent): Promise<{ handled: boolean, result: boolean }> {\n let handled = false;\n let result = false;\n\n switch (keyEvent.key) {\n case \"z\":\n case \"Z\":\n result = await this.doUndoOperation();\n handled = true;\n break;\n case \"y\":\n case \"Y\":\n result = await this.doRedoOperation();\n handled = true;\n break;\n case \"F2\":\n result = IModelApp.uiAdmin.showKeyinPalette();\n handled = true;\n break;\n }\n\n return { handled, result };\n }\n\n /** Process shortcut key events */\n public async processShortcutKey(_keyEvent: KeyboardEvent, _wentDown: boolean): Promise<boolean> {\n return false;\n }\n\n /** Event for every key down and up transition. */\n private async onKeyTransition(event: ToolEvent, wentDown: boolean): Promise<any> {\n const keyEvent = event.ev as KeyboardEvent;\n this.currentInputState.setKeyQualifiers(keyEvent);\n\n const modifierKey = ToolAdmin.getModifierKey(keyEvent);\n\n if (BeModifierKeys.None !== modifierKey)\n return this.onModifierKeyTransition(wentDown, modifierKey, keyEvent);\n\n if (wentDown && keyEvent.ctrlKey) {\n const { handled, result } = await this.onCtrlKeyPressed(keyEvent);\n if (handled)\n return result;\n }\n\n const activeTool = this.activeTool;\n if (activeTool) {\n if (EventHandled.Yes === await activeTool.onKeyTransition(wentDown, keyEvent))\n return EventHandled.Yes;\n }\n\n if (await this.processShortcutKey(keyEvent, wentDown))\n return EventHandled.Yes;\n\n return EventHandled.No;\n }\n\n /** Called to undo previous data button for primitive tools or undo last write operation. */\n public async doUndoOperation(): Promise<boolean> {\n const activeTool = this.activeTool;\n if (activeTool instanceof PrimitiveTool) {\n // ### TODO Add method so UI can be showing string to inform user that undo of last data point is available...\n if (await activeTool.undoPreviousStep())\n return true;\n }\n\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection())\n return false;\n\n return (IModelStatus.Success === await imodel.txns.reverseSingleTxn() ? true : false);\n }\n\n /** Called to redo previous data button for primitive tools or undo last write operation. */\n public async doRedoOperation(): Promise<boolean> {\n const activeTool = this.activeTool;\n if (activeTool instanceof PrimitiveTool) {\n // ### TODO Add method so UI can be showing string to inform user that undo of last data point is available...\n if (await activeTool.redoPreviousStep())\n return true;\n }\n\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection())\n return false;\n\n return (IModelStatus.Success === await imodel.txns.reinstateTxn() ? true : false);\n }\n\n private onActiveToolChanged(tool: Tool, start: StartOrResume): void {\n this.clearMotionPromises();\n this.activeToolChanged.raiseEvent(tool, start);\n }\n\n private async onUnsuspendTool() {\n const tool = this.activeTool;\n if (tool === undefined)\n return;\n\n await tool.onUnsuspend();\n this.onActiveToolChanged(tool, StartOrResume.Resume);\n }\n\n /** @internal */\n public async setInputCollector(newTool?: InputCollector) {\n if (undefined !== this._inputCollector) {\n await this._inputCollector.onCleanup();\n this._inputCollector = undefined;\n }\n this._inputCollector = newTool;\n }\n\n /** @internal */\n public async exitInputCollector() {\n if (undefined === this._inputCollector)\n return;\n let unsuspend = false;\n if (this._suspendedByInputCollector) {\n this._suspendedByInputCollector.stop();\n this._suspendedByInputCollector = undefined;\n unsuspend = true;\n }\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n await this.setInputCollector(undefined);\n if (unsuspend)\n await this.onUnsuspendTool();\n\n IModelApp.accuDraw.onInputCollectorExit();\n this.updateDynamics(undefined, undefined, true);\n }\n\n /** @internal */\n public async startInputCollector(newTool: InputCollector) {\n IModelApp.notifications.outputPrompt(\"\");\n IModelApp.accuDraw.onInputCollectorInstall();\n\n if (undefined !== this._inputCollector) {\n await this.setInputCollector(undefined);\n } else {\n const tool = this.activeTool;\n if (tool)\n await tool.onSuspend();\n this._suspendedByInputCollector = new SuspendedToolState();\n }\n\n IModelApp.viewManager.endDynamicsMode();\n IModelApp.viewManager.invalidateDecorationsAllViews();\n\n await this.setInputCollector(newTool);\n // it is important to raise event after setInputCollector is called\n this.onActiveToolChanged(newTool, StartOrResume.Start);\n }\n\n /** @internal */\n public async setViewTool(newTool?: ViewTool) {\n if (undefined !== this._viewTool) {\n await this._viewTool.onCleanup();\n this._viewTool = undefined;\n }\n this._viewTool = newTool;\n }\n\n /** @internal */\n public async exitViewTool() {\n if (undefined === this._viewTool)\n return;\n let unsuspend = false;\n if (undefined !== this._suspendedByViewTool) {\n this._suspendedByViewTool.stop(); // Restore state of suspended tool\n this._suspendedByViewTool = undefined;\n unsuspend = true;\n }\n\n IModelApp.viewManager.invalidateDecorationsAllViews();\n await this.setViewTool(undefined);\n if (unsuspend)\n await this.onUnsuspendTool();\n\n IModelApp.accuDraw.onViewToolExit();\n this.updateDynamics(undefined, undefined, true);\n }\n\n /** @internal */\n public async startViewTool(newTool: ViewTool) {\n\n IModelApp.notifications.outputPrompt(\"\");\n IModelApp.accuDraw.onViewToolInstall();\n\n if (undefined !== this._viewTool) {\n await this.setViewTool(undefined);\n } else {\n const tool = this.activeTool;\n if (tool)\n await tool.onSuspend();\n this._suspendedByViewTool = new SuspendedToolState();\n }\n\n IModelApp.viewManager.endDynamicsMode();\n IModelApp.viewManager.invalidateDecorationsAllViews();\n\n this.toolState.coordLockOvr = CoordinateLockOverrides.All;\n this.toolState.locateCircleOn = false;\n\n IModelApp.accuSnap.onStartTool();\n\n this.setCursor(IModelApp.viewManager.crossHairCursor);\n await this.setViewTool(newTool);\n // it is important to raise event after setViewTool is called\n this.onActiveToolChanged(newTool, StartOrResume.Start);\n }\n\n /** @internal */\n public setEditCommandHandler(handler?: EditCommandHandler) {\n this._editCommandHandler = handler;\n }\n\n /** @internal */\n public async setPrimitiveTool(newTool?: PrimitiveTool) {\n if (undefined !== this._primitiveTool) {\n await this._primitiveTool.onCleanup();\n if (undefined !== this._editCommandHandler)\n await this._editCommandHandler.finishCommand();\n this._primitiveTool = undefined;\n }\n this._primitiveTool = newTool;\n }\n\n /** @internal */\n public async startPrimitiveTool(newTool?: PrimitiveTool) {\n IModelApp.notifications.outputPrompt(\"\");\n await this.exitViewTool();\n\n if (undefined !== this._primitiveTool)\n await this.setPrimitiveTool(undefined);\n\n // clear the primitive tool first so following call does not trigger the refreshing of the ToolSetting for the previous primitive tool\n await this.exitInputCollector();\n\n IModelApp.viewManager.endDynamicsMode();\n this.setIncompatibleViewportCursor(true); // Don't restore this\n IModelApp.viewManager.invalidateDecorationsAllViews();\n\n this.toolState.coordLockOvr = CoordinateLockOverrides.None;\n this.toolState.locateCircleOn = false;\n\n IModelApp.accuDraw.onPrimitiveToolInstall();\n IModelApp.accuSnap.onStartTool();\n\n if (undefined !== newTool) {\n this.setCursor(IModelApp.viewManager.crossHairCursor);\n await this.setPrimitiveTool(newTool);\n }\n // it is important to raise event after setPrimitiveTool is called\n this.onActiveToolChanged(undefined !== newTool ? newTool : this.idleTool, StartOrResume.Start);\n }\n\n /** Method used by interactive tools to send updated values to UI components, typically showing tool settings.\n * @beta\n */\n public syncToolSettingsProperties(toolId: string, syncProperties: DialogPropertySyncItem[]): void {\n if (this.toolSettingsChangeHandler)\n this.toolSettingsChangeHandler(toolId, syncProperties);\n }\n\n /** Method used by interactive tools to send request to reload UI from properties returned via method supplyToolSettingsProperties.\n * @beta\n */\n public reloadToolSettingsProperties(): void {\n if (this.reloadToolSettingsHandler)\n this.reloadToolSettingsHandler();\n }\n\n /** Method used to \"bump\" the value of a tool setting for the current tool.\n * To \"bump\" a setting means to toggle a boolean value or cycle through enum values.\n * If no `settingIndex` param is specified, the first setting is bumped.\n * Returns true if the setting was successfully bumped.\n */\n public async bumpToolSetting(settingIndex?: number): Promise<boolean> {\n return this.currentTool.bumpToolSetting(settingIndex);\n }\n\n /** Method used by interactive tools to inform one or more UI components to refresh. This is typically used to update labels or icons associated with a specific tool.\n * This method should be used when the caller wants the UI layer to process the sync event immediately. Use dispatchUiSyncEvent when the event may be triggered while other\n * more important user interaction processing is required.\n * @param specificSyncEventId Optional sync event id. If not specified then \"tool-admin-refresh-ui\" is used.\n * @param toolId Optional, will be used if specificSyncEventId is not specified. If used, the resulting sync event Id will be created using `tool-admin-refresh-ui-${toolId}`.toLowerCase()\n */\n public dispatchImmediateUiSyncEvent(specificSyncEventId?: string, toolId?: string): void {\n const defaultRefreshEventId = \"tool-admin-refresh-ui\";\n if (this.toolSyncUiEventDispatcher) {\n if (specificSyncEventId)\n this.toolSyncUiEventDispatcher(specificSyncEventId.toLowerCase(), true);\n else if (toolId)\n this.toolSyncUiEventDispatcher(`${defaultRefreshEventId}-${toolId}`.toLowerCase(), true);\n else\n this.toolSyncUiEventDispatcher(defaultRefreshEventId, true);\n }\n }\n\n /** Method used by interactive tools to inform one or more UI components to refresh. This is typically used to update labels or icons associated with a specific tool.\n * This method should be used when the caller wants the UI layer to process the sync event on a timer, waiting a few 100 ms, allowing other events that may require a UI refresh\n * to be processed together.\n * @param specificSyncEventId Optional sync event id. If not specified then \"tool-admin-refresh-ui\" is used.\n * @param toolId Optional, will be used if specificSyncEventId is not specified. If used, the resulting sync event Id will be created using `tool-admin-refresh-ui-${toolId}`.toLowerCase()\n */\n public dispatchUiSyncEvent(specificSyncEventId?: string, toolId?: string): void {\n const defaultRefreshEventId = \"tool-admin-refresh-ui\";\n if (this.toolSyncUiEventDispatcher) {\n if (specificSyncEventId)\n this.toolSyncUiEventDispatcher(specificSyncEventId.toLowerCase());\n else if (toolId)\n this.toolSyncUiEventDispatcher(`${defaultRefreshEventId}-${toolId}`.toLowerCase());\n else\n this.toolSyncUiEventDispatcher(defaultRefreshEventId);\n }\n }\n\n /**\n * Starts the default [[PrimitiveTool]], if any. Generally invoked automatically when other tools exit, so shouldn't be called directly.\n * @note The default tool, when specified, must be a subclass of [[PrimitiveTool]]. A call to startDefaultTool is required to terminate\n * an active [[ViewTool]] or [[InputCollector]] and replace or clear the current [[PrimitiveTool]]. The default tool can not be\n * a subclass of [[ViewTool]] as view tools replace each other and aren't suspended. This means [[ViewTool.exitTool]] would\n * result in the active tool being undefined instead of making the default tool active.\n * The tool's [[Tool.run]] method is invoked with arguments specified by [[defaultToolArgs]].\n * @see [[defaultToolId]] to configure the default tool.\n */\n public async startDefaultTool(): Promise<void> {\n const tool = IModelApp.tools.create(this.defaultToolId, this.defaultToolArgs);\n\n if (tool instanceof PrimitiveTool) {\n if (!await tool.run(this.defaultToolArgs))\n return this.startPrimitiveTool(undefined);\n } else {\n await this.startPrimitiveTool(undefined); // Ensure active primitive tool is terminated...\n if (undefined !== tool)\n throw new Error(\"Default tool must be a subclass of PrimitiveTool\");\n }\n }\n\n /**\n * Call from external events or immediate tools that may have invalidated the current primitive tool's state.\n * Examples are undo, which may invalidate any references to elements, or an immediate tool that uses an edit command to write to the iModel,\n * since immediate tools do not replace the active tool.\n * The current primitive tool is expected to call installTool with a new instance, or exitTool to start the default tool.\n * @note Should be called even if the primitive tool is currently suspended by a view tool or input collector.\n */\n public async restartPrimitiveTool(): Promise<void> {\n if (undefined !== this._primitiveTool)\n await this._primitiveTool.onRestartTool();\n }\n\n public setCursor(cursor: string | undefined): void {\n if (undefined === this._saveCursor)\n IModelApp.viewManager.setViewCursor(cursor);\n else\n this._saveCursor = cursor;\n }\n\n /** @internal */\n public testDecorationHit(id: string): boolean { return this.currentTool.testDecorationHit(id); }\n\n /** @internal */\n public getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined { return this.currentTool.getDecorationGeometry(hit); }\n\n /** @internal */\n public decorate(context: DecorateContext): void {\n const tool = this.activeTool;\n if (undefined !== tool) {\n tool.decorate(context);\n\n if (undefined !== this._inputCollector && tool !== this._inputCollector)\n this._inputCollector.decorateSuspended(context);\n\n if (undefined !== this._primitiveTool && tool !== this._primitiveTool)\n this._primitiveTool.decorateSuspended(context);\n }\n\n const viewport = this.currentInputState.viewport;\n if (viewport !== context.viewport)\n return;\n\n const ev = new BeButtonEvent();\n this.fillEventFromCursorLocation(ev);\n\n const hit = IModelApp.accuDraw.isActive ? undefined : IModelApp.accuSnap.currHit; // NOTE: Show surface normal until AccuDraw becomes active\n viewport.drawLocateCursor(context, ev.viewPoint, viewport.pixelsFromInches(IModelApp.locateManager.apertureInches), this.isLocateCircleOn, hit);\n }\n\n public get isLocateCircleOn(): boolean {\n if (!this.toolState.locateCircleOn || undefined !== this._canvasDecoration)\n return false;\n\n if (InputSource.Mouse === this.currentInputState.inputSource)\n return true;\n\n return (InputSource.Touch === this.currentInputState.inputSource && undefined !== IModelApp.accuSnap.touchCursor);\n }\n\n /** @internal */\n public beginDynamics(): void {\n IModelApp.accuDraw.onBeginDynamics();\n IModelApp.viewManager.beginDynamicsMode();\n this.setCursor(IModelApp.viewManager.dynamicsCursor);\n }\n\n /** @internal */\n public endDynamics(): void {\n IModelApp.accuDraw.onEndDynamics();\n IModelApp.viewManager.endDynamicsMode();\n this.setCursor(IModelApp.viewManager.crossHairCursor);\n }\n\n /** Fill the supplied button event from the current cursor location. */\n public fillEventFromCursorLocation(ev: BeButtonEvent, useSnap = true) { this.currentInputState.toEvent(ev, useSnap); }\n /** Fill the supplied button event from the last data button location. */\n public fillEventFromLastDataButton(ev: BeButtonEvent) { this.currentInputState.toEventFromLastDataPoint(ev); }\n /** @internal */\n public setAdjustedDataPoint(ev: BeButtonEvent) { this.currentInputState.adjustLastDataPoint(ev); }\n\n /** Can be called by tools that wish to emulate mouse button down/up events for onTouchTap. */\n public async convertTouchTapToButtonDownAndUp(ev: BeTouchEvent, button: BeButton = BeButton.Data): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n const pt2d = ev.viewPoint;\n await this.onButtonDown(vp, pt2d, button, InputSource.Touch);\n return this.onButtonUp(vp, pt2d, button, InputSource.Touch);\n }\n\n /** Can be called by tools that wish to emulate moving the mouse with a button depressed for onTouchMoveStart.\n * @note Calls the tool's onMouseStartDrag method from onMotion.\n */\n public async convertTouchMoveStartToButtonDownAndMotion(startEv: BeTouchEvent, ev: BeTouchEvent, button: BeButton = BeButton.Data): Promise<void> {\n const startVp = startEv.viewport;\n if (undefined === startVp)\n return;\n\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n\n await this.onButtonDown(startVp, startEv.viewPoint, button, InputSource.Touch);\n return this.onMotion(vp, ev.viewPoint, InputSource.Touch, true);\n }\n\n /** Can be called by tools that wish to emulate pressing the mouse button for onTouchStart or onTouchMoveStart. */\n public async convertTouchStartToButtonDown(ev: BeTouchEvent, button: BeButton = BeButton.Data): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n return this.onButtonDown(vp, ev.viewPoint, button, InputSource.Touch);\n }\n\n /** Can be called by tools that wish to emulate releasing the mouse button for onTouchEnd or onTouchComplete.\n * @note Calls the tool's onMouseEndDrag method if convertTouchMoveStartToButtonDownAndMotion was called for onTouchMoveStart.\n */\n public async convertTouchEndToButtonUp(ev: BeTouchEvent, button: BeButton = BeButton.Data): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n return this.onButtonUp(vp, ev.viewPoint, button, InputSource.Touch);\n }\n\n /** Can be called by tools that wish to emulate a mouse motion event for onTouchMove. */\n public async convertTouchMoveToMotion(ev: BeTouchEvent): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n return this.onMotion(vp, ev.viewPoint, InputSource.Touch);\n }\n\n /** Can be called by tools to invoke their [[InteractiveTool.onDynamicFrame]] method without requiring a motion event. */\n public simulateMotionEvent(): void {\n // NOTE: Prefer last resolved motion over current cursor location which could be out of the view, or moved from last AccuSnap etc.\n this.updateDynamics(this.currentInputState.lastMotionEvent, undefined, true);\n }\n\n /** @internal */\n public setIncompatibleViewportCursor(restore: boolean) {\n if (restore) {\n if (undefined === this._saveCursor)\n return;\n\n this.toolState.locateCircleOn = this._saveLocateCircle;\n IModelApp.viewManager.setViewCursor(this._saveCursor);\n this._saveCursor = undefined;\n return;\n }\n\n if (undefined !== this._saveCursor)\n return;\n\n this._saveLocateCircle = this.toolState.locateCircleOn;\n this._saveCursor = IModelApp.viewManager.cursor;\n this.toolState.locateCircleOn = false;\n IModelApp.viewManager.setViewCursor(\"not-allowed\");\n }\n\n /** Performs default handling of mouse wheel event (zoom in/out) */\n public async processWheelEvent(ev: BeWheelEvent, doUpdate: boolean): Promise<EventHandled> {\n await WheelEventProcessor.process(ev, doUpdate);\n IModelApp.viewManager.invalidateDecorationsAllViews();\n this.updateDynamics(ev);\n return EventHandled.Yes;\n }\n\n /** @internal */\n public async onSelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined) {\n IModelApp.accuDraw.onSelectedViewportChanged(previous, current);\n\n if (undefined === current)\n return this.callOnCleanup();\n\n if (undefined !== this._viewTool)\n this._viewTool.onSelectedViewportChanged(previous, current);\n\n if (undefined !== this._inputCollector)\n this._inputCollector.onSelectedViewportChanged(previous, current);\n\n if (undefined !== this._primitiveTool)\n await this._primitiveTool.onSelectedViewportChanged(previous, current);\n }\n\n public setLocateCircleOn(locateOn: boolean): void {\n if (undefined === this._saveCursor)\n this.toolState.locateCircleOn = locateOn;\n else\n this._saveLocateCircle = locateOn;\n }\n\n public setLocateCursor(enableLocate: boolean): void {\n const viewManager = IModelApp.viewManager;\n this.setCursor(viewManager.inDynamicsMode ? viewManager.dynamicsCursor : viewManager.crossHairCursor);\n this.setLocateCircleOn(enableLocate);\n viewManager.invalidateDecorationsAllViews();\n }\n\n /** Controls how the button event location is adjusted for the active tool */\n public get coordinateLockOverrides(): CoordinateLockOverrides { return this.toolState.coordLockOvr; }\n public set coordinateLockOverrides(coordLockOvr: CoordinateLockOverrides) { this.toolState.coordLockOvr = coordLockOvr; }\n\n /** @internal */\n public async callOnCleanup() {\n await this.exitViewTool();\n await this.exitInputCollector();\n if (undefined !== this._primitiveTool)\n await this._primitiveTool.onCleanup();\n }\n}\n\n/**\n * Default processor to handle wheel events.\n * @internal\n */\nexport class WheelEventProcessor {\n public static async process(ev: BeWheelEvent, doUpdate: boolean): Promise<void> {\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n\n await this.doZoom(ev);\n\n if (doUpdate) {\n // AccuSnap hit won't be invalidated without cursor motion (closes info window, etc.).\n IModelApp.accuSnap.clear();\n }\n }\n\n private static async doZoom(ev: BeWheelEvent): Promise<ViewStatus> {\n const vp = ev.viewport;\n if (undefined === vp)\n return ViewStatus.InvalidViewport;\n\n let zoomRatio = ToolSettings.wheelZoomRatio;\n if (zoomRatio < 1)\n zoomRatio = 1;\n if (ev.wheelDelta > 0)\n zoomRatio = 1 / zoomRatio;\n\n let isSnapOrPrecision = false;\n const target = Point3d.create();\n if (IModelApp.tentativePoint.isActive) {\n // Always use Tentative location, adjusted point, not cross\n isSnapOrPrecision = true;\n target.setFrom(IModelApp.tentativePoint.getPoint());\n } else {\n // Never use AccuSnap location as initial zoom clears snap causing zoom center to \"jump\"\n isSnapOrPrecision = CoordSource.Precision === ev.coordsFrom;\n target.setFrom(isSnapOrPrecision ? ev.point : ev.rawPoint);\n }\n\n const view = vp.view;\n let globalAlignment;\n if (view.is3d() && view.iModel.ecefLocation)\n globalAlignment = { target, transition: zoomRatio > 1 };\n\n const animationOptions: ViewChangeOptions & OnViewExtentsError = {\n animateFrustumChange: true,\n cancelOnAbort: true,\n animationTime: ScreenViewport.animation.time.wheel.milliseconds,\n easingFunction: Easing.Cubic.Out,\n onExtentsError: (err) => view.outputStatusMessage(err),\n globalAlignment,\n };\n\n const currentInputState = IModelApp.toolAdmin.currentInputState;\n let status: ViewStatus;\n const now = Date.now();\n if (view.is3d() && view.isCameraOn) {\n if (!isSnapOrPrecision) {\n let lastEvent = currentInputState.lastWheelEvent;\n if (undefined !== lastEvent && lastEvent.viewport &&\n now - lastEvent.time < ToolSettings.doubleClickTimeout.milliseconds &&\n lastEvent.viewport.view.equals(view) && lastEvent.viewPoint.distanceSquaredXY(ev.viewPoint) < 10) {\n target.setFrom(lastEvent.point);\n lastEvent.time = now;\n } else {\n const newTarget = vp.pickNearestVisibleGeometry(target);\n if (undefined !== newTarget) {\n target.setFrom(newTarget);\n } else {\n view.getTargetPoint(target);\n }\n currentInputState.lastWheelEvent = lastEvent = ev.clone();\n lastEvent.point.setFrom(target);\n }\n }\n\n const transform = Transform.createFixedPointAndMatrix(target, Matrix3d.createScale(zoomRatio, zoomRatio, zoomRatio));\n const eye = view.getEyePoint();\n const newEye = transform.multiplyPoint3d(eye);\n const offset = eye.vectorTo(newEye);\n\n // when you're too close to an object, the wheel zoom operation will stop. We set a \"bump distance\" so you can blast through obstacles.\n const bumpDist = Math.max(ToolSettings.wheelZoomBumpDistance, view.minimumFrontDistance());\n if (offset.magnitude() < bumpDist) {\n offset.scaleToLength(bumpDist, offset); // move bump distance, just to get to the other side.\n target.addInPlace(offset);\n newEye.setFrom(eye.plus(offset));\n currentInputState.lastWheelEvent = undefined; // we need to search on the \"other side\" of what we were bumping into\n }\n\n const zDir = view.getZVector();\n target.setFrom(newEye.plusScaled(zDir, zDir.dotProduct(newEye.vectorTo(target))));\n\n if (ViewStatus.Success === (status = view.lookAt({ eyePoint: newEye, targetPoint: target, upVector: view.getYVector(), lensAngle: view.camera.lens, opts: animationOptions })))\n vp.synchWithView(animationOptions);\n } else {\n const targetNpc = vp.worldToNpc(target);\n const trans = Transform.createFixedPointAndMatrix(targetNpc, Matrix3d.createScale(zoomRatio, zoomRatio, 1));\n\n const viewCenter = trans.multiplyPoint3d(Point3d.create(.5, .5, .5));\n vp.npcToWorld(viewCenter, viewCenter);\n return vp.zoom(viewCenter, zoomRatio, animationOptions);\n }\n\n // if we scrolled out, we may have invalidated the current AccuSnap path\n await IModelApp.accuSnap.reEvaluate();\n return status;\n }\n}\n"]}
|