@itwin/core-frontend 5.1.0-dev.5 → 5.1.0-dev.9
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 +20 -1
- package/lib/cjs/AccuDraw.d.ts +2 -0
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +2 -0
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/ViewContext.d.ts +4 -1
- package/lib/cjs/ViewContext.d.ts.map +1 -1
- package/lib/cjs/ViewContext.js +10 -5
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewManager.js +2 -2
- package/lib/cjs/ViewManager.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +2 -2
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/internal/render/MockRender.d.ts +1 -1
- package/lib/cjs/internal/render/MockRender.d.ts.map +1 -1
- package/lib/cjs/internal/render/MockRender.js +1 -1
- package/lib/cjs/internal/render/MockRender.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.js +2 -3
- package/lib/cjs/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.d.ts +1 -1
- package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.js +2 -2
- package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
- package/lib/cjs/internal/render/webgl/TargetGraphics.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/TargetGraphics.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/TargetGraphics.js +10 -7
- package/lib/cjs/internal/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/cjs/render/RenderTarget.d.ts +1 -1
- package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
- package/lib/cjs/render/RenderTarget.js.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts +7 -0
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.js +14 -0
- package/lib/cjs/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts +1 -0
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +8 -2
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/AccuDraw.d.ts +2 -0
- package/lib/esm/AccuDraw.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +2 -0
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/ViewContext.d.ts +4 -1
- package/lib/esm/ViewContext.d.ts.map +1 -1
- package/lib/esm/ViewContext.js +10 -5
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewManager.js +2 -2
- package/lib/esm/ViewManager.js.map +1 -1
- package/lib/esm/Viewport.d.ts +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +2 -2
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/internal/render/MockRender.d.ts +1 -1
- package/lib/esm/internal/render/MockRender.d.ts.map +1 -1
- package/lib/esm/internal/render/MockRender.js +1 -1
- package/lib/esm/internal/render/MockRender.js.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.js +2 -3
- package/lib/esm/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/internal/render/webgl/Target.d.ts +1 -1
- package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Target.js +2 -2
- package/lib/esm/internal/render/webgl/Target.js.map +1 -1
- package/lib/esm/internal/render/webgl/TargetGraphics.d.ts +3 -3
- package/lib/esm/internal/render/webgl/TargetGraphics.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/TargetGraphics.js +10 -7
- package/lib/esm/internal/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/esm/render/RenderTarget.d.ts +1 -1
- package/lib/esm/render/RenderTarget.d.ts.map +1 -1
- package/lib/esm/render/RenderTarget.js.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts +7 -0
- package/lib/esm/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.js +14 -0
- package/lib/esm/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts +1 -0
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +8 -2
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/package.json +20 -20
package/lib/cjs/AccuDraw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccuDraw.js","sourceRoot":"","sources":["../../src/AccuDraw.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\n/** @packageDocumentation\n * @module AccuDraw\n */\nimport { BentleyStatus, Id64String } from \"@itwin/core-bentley\";\nimport {\n Arc3d, AxisOrder, CurveCurve, CurveCurveApproachType, CurvePrimitive, Geometry, IModelJson as GeomJson, LineSegment3d, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d,\n PointString3d, Ray3d, Transform, Vector2d, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { ColorByName, ColorDef, GeometryStreamProps, LinePixels } from \"@itwin/core-common\";\nimport { TentativeOrAccuSnap } from \"./AccuSnap\";\nimport { ACSDisplayOptions, AuxCoordSystemState } from \"./AuxCoordSys\";\nimport { HitDetail, SnapDetail, SnapHeat, SnapMode } from \"./HitDetail\";\nimport { IModelApp } from \"./IModelApp\";\nimport { GraphicBuilder } from \"./render/GraphicBuilder\";\nimport { StandardViewId } from \"./StandardView\";\nimport { BeButton, BeButtonEvent, CoordinateLockOverrides, InputCollector, InputSource } from \"./tools/Tool\";\nimport { ViewTool } from \"./tools/ViewTool\";\nimport { DecorateContext } from \"./ViewContext\";\nimport { linePlaneIntersect } from \"./LinePlaneIntersect\";\nimport { ScreenViewport, Viewport } from \"./Viewport\";\nimport { ViewState } from \"./ViewState\";\nimport { QuantityType } from \"./quantity-formatting/QuantityFormatter\";\nimport { FormatterSpec, FormatType, ParseError, Parser, ParserSpec, QuantityParseResult } from \"@itwin/core-quantity\";\nimport { GraphicType } from \"./common/render/GraphicType\";\n\n// cspell:ignore dont primitivetools\n\n/** @internal */\nexport enum AccuDrawFlags {\n None = 0,\n SetModePolar = 1,\n SetModeRect = 1 << 1,\n SetOrigin = (1 << 2),\n FixedOrigin = (1 << 3),\n SetRMatrix = (1 << 4),\n SetXAxis = (1 << 5),\n SetNormal = (1 << 6),\n SetDistance = (1 << 7),\n LockDistance = (1 << 8),\n Lock_X = (1 << 9),\n Lock_Y = (1 << 10),\n Lock_Z = (1 << 11),\n Disable = (1 << 12),\n OrientDefault = (1 << 14),\n SetFocus = (1 << 15),\n OrientACS = (1 << 17),\n SetXAxis2 = (1 << 18),\n LockAngle = (1 << 19),\n AlwaysSetOrigin = SetOrigin | (1 << 21),\n RedrawCompass = (1 << 22),\n UpdateRotation = (1 << 23),\n SmartRotation = (1 << 24),\n}\n\n/** AccuDraw coordinate input mode\n * @public\n */\nexport enum CompassMode {\n /** Coordinate input using distance and angle */\n Polar = 0,\n /** Coordinate input using x, y, and z deltas */\n Rectangular = 1,\n}\n\n/** AccuDraw compass base rotation\n * @public\n */\nexport enum RotationMode {\n /** Aligned with standard view top or ACS top when [[ToolAdmin.acsContextLock]] is enabled */\n Top = 1,\n /** Aligned with standard view front or ACS front when [[ToolAdmin.acsContextLock]] is enabled */\n Front = 2,\n /** Aligned with standard view right or ACS right when [[ToolAdmin.acsContextLock]] is enabled */\n Side = 3,\n /** Aligned with view */\n View = 4,\n /** Aligned with view ACS */\n ACS = 5,\n /** Not aligned with a standard rotation or ACS */\n Context = 6,\n}\n\n/** @internal */\nexport enum LockedStates {\n NONE_LOCKED = 0,\n X_BM = (1),\n Y_BM = (1 << 1),\n VEC_BM = (1 << 2),\n DIST_BM = (1 << 3),\n XY_BM = (X_BM | Y_BM),\n ANGLE_BM = (XY_BM | VEC_BM),\n}\n\n/** AccuDraw enabled states\n * @public\n */\nexport enum CurrentState {\n /** Compass disabled/unwanted for this session */\n NotEnabled = 0,\n /** Compass deactivated but CAN be activated by user */\n Deactivated = 1,\n /** Compass not displayed awaiting automatic activation (default tool state) */\n Inactive = 2,\n /** Compass displayed and adjusting points */\n Active = 3,\n}\n\n/** @internal */\nexport enum ContextMode {\n Locked = 0,\n XAxis = 1,\n YAxis = 2,\n ZAxis = 3,\n XAxis2 = 4,\n None = 15,\n}\n\n/** AccuDraw coordinate input fields\n * @public\n */\nexport enum ItemField {\n /** Distance for polar mode */\n DIST_Item = 0,\n /** Angle for polar mode */\n ANGLE_Item = 1,\n /** X delta for rectangular mode */\n X_Item = 2,\n /** Y delta for rectangular mode */\n Y_Item = 3,\n /** Z delta (3d only) */\n Z_Item = 4,\n}\n\n/** @internal */\nexport enum KeyinStatus {\n Dynamic = 0,\n Partial = 1,\n}\n\nconst enum Constants { // eslint-disable-line no-restricted-syntax\n MAX_SAVED_VALUES = 10,\n SMALL_ANGLE = 1.0e-12,\n SMALL_DELTA = 0.00001,\n}\n\n/** @internal */\nexport class AccudrawData {\n public flags = 0; // AccuDrawFlags\n public readonly origin = new Point3d(); // used if ACCUDRAW_SetOrigin\n public readonly delta = new Point3d(); // if ACCUDRAW_Lock_X, etc.\n public readonly rMatrix = new Matrix3d(); // if ACCUDRAW_SetRMatrix/ACCUDRAW_Set3dMatrix\n public readonly vector = new Vector3d(); // if ACCUDRAW_SetXAxis, etc.\n public distance = 0; // if ACCUDRAW_SetDistance\n public angle = 0; // if ACCUDRAW_SetAngle\n public zero() {\n this.flags = this.distance = this.angle = 0;\n this.origin.setZero();\n this.delta.setZero();\n this.vector.setZero();\n this.rMatrix.setIdentity();\n }\n}\n\n/** @internal */\nexport class Flags {\n public redrawCompass = false;\n public dialogNeedsUpdate = false;\n public rotationNeedsUpdate = true;\n public lockedRotation = false;\n public indexLocked = false;\n public haveValidOrigin = false;\n public fixedOrg = false;\n public auxRotationPlane = RotationMode.Top;\n public contextRotMode = 0;\n public baseRotation = RotationMode.View;\n public baseMode = 0;\n public pointIsOnPlane = false; // whether rawPointOnPlane is on compass plane\n public softAngleLock = false;\n public bearingFixToPlane2D = false;\n public inDataPoint = false;\n public ignoreDataButton = false;\n public animateRotation = false;\n}\n\n/** AccuDraw value round off settings. Allows dynamic distance and angle values to be rounded to the nearest increment of the specified units value(s).\n * @public\n */\nexport class RoundOff {\n /** Whether rounding is to be applied to the corresponding dynamic distance or angle value.\n * @note To be considered active, units must also specify at least one increment value.\n */\n public active = false;\n /** Round off increment value(s), meters for distance round off, and radians for angle round off.\n * @note When multiple values are specified, rounding is based on smallest discernable value at current view zoom.\n */\n public units = new Set<number>();\n}\n\n/** @internal */\nexport class SavedState {\n public state = CurrentState.NotEnabled;\n public mode = CompassMode.Polar;\n public rotationMode = RotationMode.View;\n public readonly axes = new ThreeAxes();\n public readonly origin = new Point3d();\n public auxRotationPlane = 0;\n public contextRotMode = 0;\n public fixedOrg = false;\n public ignoreDataButton = true; // By default the data point that terminates a view tool or input collector should be ignored...\n public ignoreFlags: AccuDrawFlags = 0;\n}\n\n/** @internal */\nexport class ThreeAxes {\n public readonly x = Vector3d.unitX();\n public readonly y = Vector3d.unitY();\n public readonly z = Vector3d.unitZ();\n public setFrom(other: ThreeAxes) {\n this.x.setFrom(other.x);\n this.y.setFrom(other.y);\n this.z.setFrom(other.z);\n }\n public fromMatrix3d(rMatrix: Matrix3d): void {\n rMatrix.getRow(0, this.x);\n rMatrix.getRow(1, this.y);\n rMatrix.getRow(2, this.z);\n }\n public static createFromMatrix3d(rMatrix: Matrix3d, result?: ThreeAxes): ThreeAxes {\n result = result ? result : new ThreeAxes();\n result.fromMatrix3d(rMatrix);\n return result;\n }\n public toMatrix3d(out?: Matrix3d) { return Matrix3d.createRows(this.x, this.y, this.z, out); }\n public clone(): ThreeAxes {\n const out = new ThreeAxes();\n out.setFrom(this);\n return out;\n }\n\n public equals(other: ThreeAxes): boolean { return this.x.isExactEqual(other.x) && this.y.isExactEqual(other.y) && this.z.isExactEqual(other.z); }\n}\n\n/** Accudraw is an aide for entering coordinate data.\n * This class is public to allow applications to provide a user interface for AccuDraw, either by implementing their own, or\n * using the one supplied by the itwin appui package.\n * @note When writing an [[InteractiveTool]] it is not correct to call methods on AccuDraw directly, tools should instead\n * provide hints to AccuDraw using [[AccuDrawHintBuilder]].\n * @public\n */\nexport class AccuDraw {\n private _currentState = CurrentState.NotEnabled;\n\n /** Current AccuDraw state */\n public get currentState(): CurrentState { return this._currentState; }\n public set currentState(state: CurrentState) {\n if (state === this._currentState)\n return;\n\n const wasActive = this.isActive;\n this._currentState = state;\n\n if (wasActive !== this.isActive)\n this.onCompassDisplayChange(wasActive ? \"hide\" : \"show\");\n }\n\n /** The current compass mode */\n public compassMode = CompassMode.Rectangular;\n /** The current compass rotation */\n public rotationMode = RotationMode.View;\n /** @internal */\n public currentView?: ScreenViewport; // will be nullptr if view not yet defined\n /** @internal */\n public readonly published = new AccudrawData(); // Staging area for hints\n /** @internal */\n public readonly origin = new Point3d(); // origin point...not on compass plane when z != 0.0\n /** @internal */\n public readonly axes = new ThreeAxes(); // X, Y and Z vectors (3d rotation matrix)\n /** @internal */\n public readonly delta = Vector3d.unitZ(); // dialog items (x, y & z)\n private _distance = 0; // current distance\n private _angle = 0; // current angle\n /** @internal */\n public locked = LockedStates.NONE_LOCKED; // axis/distance locked bit mask\n /** @internal */\n public indexed = LockedStates.NONE_LOCKED; // axis/distance indexed bit mask\n private readonly _distanceRoundOff = new RoundOff(); // distance round off enabled and unit\n private readonly _angleRoundOff = new RoundOff(); // angle round off enabled and unit\n /** @internal */\n public readonly flags = new Flags(); // current state flags\n private readonly _fieldLocked: [boolean, boolean, boolean, boolean, boolean] = [false, false, false, false, false]; // locked state of fields\n private readonly _keyinStatus: [KeyinStatus, KeyinStatus, KeyinStatus, KeyinStatus, KeyinStatus] = [KeyinStatus.Dynamic, KeyinStatus.Dynamic, KeyinStatus.Dynamic, KeyinStatus.Dynamic, KeyinStatus.Dynamic]; // state of input field\n /** @internal */\n public readonly savedStateViewTool = new SavedState(); // Restore point for shortcuts/tools...\n /** @internal */\n public readonly savedStateInputCollector = new SavedState(); // Restore point for shortcuts/tools...\n private readonly _savedDistances: number[] = []; // History of previous distances...\n private readonly _savedAngles: number[] = []; // History of previous angles...\n private _savedDistanceIndex = -1; // Current saved distance index for choosing next/previous value...\n private _savedAngleIndex = -1; // Current saved distance index for choosing next/previous value...\n /** @internal */\n public readonly baseAxes = new ThreeAxes(); // Used for \"context\" base rotation to hold arbitrary rotation w/o needing to change ACS...\n /** @internal */\n public readonly lastAxes = new ThreeAxes(); // Last result from UpdateRotation, replaces cM.rMatrix...\n private _lastDistance = 0; // previous saved distance or distance indexing tick\n private _tolerance = 0; // computed view based indexing tolerance\n private _percentChanged = 0; // Compass animation state\n private _threshold = 0; // Threshold for automatic x/y field focus change.\n private _lastSnapDetail?: { point: Point3d, matrix: Matrix3d, sourceId: Id64String, isTentative: boolean, deselect?: boolean, indexed?: true };\n /** @internal */\n public readonly planePt = new Point3d(); // same as origin unless non-zero locked z value\n private readonly _rawDelta = new Point2d(); // used by rect fix point\n private readonly _rawPoint = new Point3d(); // raw uor point passed to fix point\n private readonly _rawPointOnPlane = new Point3d(); // adjusted rawPoint by applying hard/soft construction plane\n /** @internal */\n public readonly point = new Point3d(); // current cursor point\n /** @internal */\n public readonly vector = Vector3d.unitZ(); // current/last good locked direction\n private _xIsNegative = false; // Last delta.x was negative\n private _yIsNegative = false; // Last delta.y was negative\n private _xIsExplicit = false; // Sign of delta.x established from user input input, don't allow +/- side flip.\n private _yIsExplicit = false; // Sign of delta.y established from user input input, don't allow +/- side flip.\n /** Disable automatic focus change when user is entering input. */\n public dontMoveFocus = false;\n /** Set input field to move focus to (X_Item or Y_Item) for automatic focus change. */\n public newFocus = ItemField.X_Item;\n private readonly _rMatrix = new Matrix3d();\n /** @internal */\n protected _acsPickId?: string;\n\n // Compass Display Preferences...\n /** @internal */\n protected _compassSizeInches = 0.44;\n /** @internal */\n protected _animationFrames = 12;\n /** @internal */\n protected _indexToleranceInches = 0.11;\n /** @internal */\n protected readonly _frameColor = ColorDef.create(ColorByName.lightGrey);\n /** @internal */\n protected readonly _fillColor = ColorDef.create(ColorByName.blue);\n /** @internal */\n protected readonly _xColor = ColorDef.create(ColorByName.red);\n /** @internal */\n protected readonly _yColor = ColorDef.create(ColorByName.green);\n /** @internal */\n protected readonly _indexColor = ColorDef.create(ColorByName.white);\n /** @internal */\n protected readonly _frameColorNoFocus = ColorDef.create(ColorByName.darkGrey);\n /** @internal */\n protected readonly _fillColorNoFocus = ColorDef.create(ColorByName.lightGrey);\n\n /** When true improve behavior for +/- input when cursor switches side and try to automatically manage focus */\n public smartKeyin = true;\n /** When true the compass follows the origin hint as opposed to remaining at a fixed location */\n public floatingOrigin = true;\n /** When true the z input field will remain locked with it's current value after a data button */\n public stickyZLock = false;\n /** When true the compass is always active and on screen instead of following the current tools request to activate */\n public alwaysShowCompass = false;\n /** When true all tool hints are applied as opposed to only selected hints */\n public contextSensitive = true;\n /** When true the current point is adjusted to the x and y axes when within a close tolerance */\n public axisIndexing = true;\n /** When true the current point is adjusted to the last locked distance value when within a close tolerance */\n public distanceIndexing = true;\n /** When true locking the angle also moves focus to the angle input field */\n public autoFocusFields = true;\n /** When true fully specifying a point by entering both distance and angle in polar mode or XY[Z] in rectangular mode, the point is automatically accepted */\n public autoPointPlacement = false;\n /** When true and axisIndexing is allowed the current point is adjusted to the tangent or binormal vector from the last snap when within a close tolerance\n * @beta\n */\n public snapIndexing = true;\n\n /** Get distance round off settings */\n public get distanceRoundOff(): RoundOff { return this._distanceRoundOff; }\n /** Get angle round off settings */\n public get angleRoundOff(): RoundOff { return this._angleRoundOff; }\n\n private static _tempRot = new Matrix3d();\n\n /** @internal */\n public onInitialized() { this.enableForSession(); }\n /** @internal */\n public getRotation(rMatrix?: Matrix3d): Matrix3d {\n if (!rMatrix)\n rMatrix = this._rMatrix;\n\n Matrix3d.createRows(this.axes.x, this.axes.y, this.axes.z, rMatrix);\n return rMatrix;\n }\n\n /** When true AccuDraw is enabled by the application and can be used by interactive tools */\n public get isEnabled(): boolean { return (this.currentState > CurrentState.NotEnabled); }\n /** When true the compass is displayed and adjusting input points for the current interactive tool */\n public get isActive(): boolean { return CurrentState.Active === this.currentState; }\n /** When true the compass is not displayed or adjusting points, but it can be automatically activated by the current interactive tool or via shortcuts */\n public get isInactive(): boolean { return (CurrentState.Inactive === this.currentState); }\n /** When true the compass is not displayed or adjusting points, the current interactive tool has disabled automatic activation, but can still be enabled via shortcuts */\n public get isDeactivated(): boolean { return (CurrentState.Deactivated === this.currentState); }\n\n /** Get the current lock state for the supplied input field */\n public getFieldLock(index: ItemField): boolean { return this._fieldLocked[index]; }\n /** @internal */\n public getKeyinStatus(index: ItemField): KeyinStatus { return this._keyinStatus[index]; }\n /** Get the current keyin status for the supplied input field */\n public isDynamicKeyinStatus(index: ItemField): boolean { return KeyinStatus.Dynamic === this.getKeyinStatus(index) }\n\n /** Get whether AccuDraw currently has input focus */\n public get hasInputFocus() { return true; }\n /** Called to request input focus be set to AccuDraw. Focus is managed by AccuDraw UI. */\n public grabInputFocus() { }\n /** Get default focus item for the current compass mode */\n public defaultFocusItem(): ItemField { return (CompassMode.Polar === this.compassMode ? ItemField.DIST_Item : this.newFocus); }\n\n /** @internal */\n public activate(): void {\n // Upgrade state to inactive so upgradeToActiveState knows it is ok to move to active...\n if (CurrentState.Deactivated === this.currentState)\n this.currentState = CurrentState.Inactive;\n this.upgradeToActiveState();\n }\n\n /** @internal */\n public deactivate() {\n this.downgradeInactiveState();\n // Don't allow compass to come back until user re-enables it...\n if (CurrentState.Inactive === this.currentState)\n this.currentState = CurrentState.Deactivated;\n }\n\n /** Whether to show Z input field in 3d. Sub-classes can override to restrict AccuDraw to 2d input when working in overlays where\n * depth is not important.\n * @note Intended to be used in conjunction with ViewState.allow3dManipulations returning false to also disable 3d rotation and\n * ToolAdmin.acsPlaneSnapLock set to true for projecting snapped points to the view's ACS plane.\n * @see [[ViewState.allow3dManipulations]][[ToolAdmin.acsPlaneSnapLock]]\n */\n public is3dCompass(viewport: Viewport): boolean {\n return viewport.view.is3d();\n }\n\n /** Change current compass input mode to either polar or rectangular */\n public setCompassMode(mode: CompassMode): void {\n if (mode === this.compassMode)\n return;\n\n this.compassMode = mode;\n this.onCompassModeChange();\n }\n\n /** Change current compass orientation */\n public setRotationMode(mode: RotationMode): void {\n if (mode === this.rotationMode)\n return;\n\n this.rotationMode = mode;\n this.onRotationModeChange();\n }\n\n /** Change the lock status for the supplied input field */\n public setFieldLock(index: ItemField, locked: boolean): void {\n if (locked === this._fieldLocked[index])\n return;\n\n this._fieldLocked[index] = locked;\n this.onFieldLockChange(index);\n }\n\n /** @internal */\n public setKeyinStatus(index: ItemField, status: KeyinStatus): void {\n if (status === this._keyinStatus[index])\n return;\n\n this._keyinStatus[index] = status;\n if (KeyinStatus.Dynamic !== status)\n this.dontMoveFocus = true;\n if (KeyinStatus.Partial === status)\n this._threshold = Math.abs(ItemField.X_Item === index ? this._rawDelta.y : this._rawDelta.x) + this._tolerance;\n\n this.onFieldKeyinStatusChange(index);\n }\n\n private needsRefresh(vp: Viewport): boolean {\n if (!this.isEnabled || this.isDeactivated)\n return false;\n\n // Get snap point from AccuSnap/Tentative or use raw point...\n let distance = 0.0;\n let snapPt = this._rawPoint;\n const ptP = this.point;\n const snap = TentativeOrAccuSnap.getCurrentSnap();\n\n if (snap) {\n snapPt = snap.snapPoint;\n distance = ptP.distance(snapPt);\n }\n\n const isRectMode = (CompassMode.Rectangular === this.compassMode);\n const offsetSnap = ((TentativeOrAccuSnap.isHot || IModelApp.tentativePoint.isActive) && ((this.locked) || (distance > 0.0)));\n\n // XY Offset:\n if (offsetSnap) {\n if (isRectMode) {\n let xIsOffset = false, yIsOffset = false;\n\n const vec = ptP.vectorTo(this._rawPointOnPlane);\n const xOffset = vec.dotProduct(this.axes.x);\n const yOffset = vec.dotProduct(this.axes.y);\n\n xIsOffset = (Math.abs(xOffset) > 1.0);\n yIsOffset = (Math.abs(yOffset) > 1.0);\n\n if (xIsOffset || yIsOffset)\n return true;\n }\n }\n\n const isOnCompassPlane = (!vp.view.is3d() || this.flags.pointIsOnPlane || this.isZLocked(vp));\n\n // Z Offset:\n if (offsetSnap) {\n if (isOnCompassPlane) {\n const zOffset = snapPt.distance(this._rawPointOnPlane);\n if (zOffset > Constants.SMALL_ANGLE || zOffset < -Constants.SMALL_ANGLE)\n return true;\n }\n }\n\n // Fat Point:\n if (offsetSnap)\n return true;\n\n let axisIsIndexed = false;\n\n // Axis Indexing:\n if (isRectMode) {\n if ((this.indexed & LockedStates.XY_BM) && (this.flags.pointIsOnPlane || this._fieldLocked[ItemField.Z_Item]))\n axisIsIndexed = true;\n } else {\n if ((this.indexed & LockedStates.ANGLE_BM || this.locked & LockedStates.ANGLE_BM) && (this.flags.pointIsOnPlane || this._fieldLocked[ItemField.Z_Item]))\n axisIsIndexed = true;\n }\n\n if (axisIsIndexed)\n return true;\n\n // Distance Indexing:\n if (this.indexed & LockedStates.DIST_BM)\n return true;\n\n // XY Lock:\n if (isRectMode) {\n const locked = this.locked & LockedStates.XY_BM;\n\n if ((0 !== locked) && isOnCompassPlane) {\n switch (locked) {\n case LockedStates.X_BM:\n case LockedStates.Y_BM:\n case LockedStates.XY_BM:\n return true;\n }\n }\n }\n\n return false;\n }\n\n private updateLastSnapDetail(vp: ScreenViewport, fromSnap: boolean): void {\n if (!this.snapIndexing || !this.axisIndexing || this.flags.indexLocked || LockedStates.NONE_LOCKED !== this.locked) {\n this._lastSnapDetail = undefined;\n return;\n }\n\n if (!fromSnap) {\n if (this._lastSnapDetail?.deselect)\n this._lastSnapDetail = undefined;\n else if (this._lastSnapDetail)\n this._lastSnapDetail.deselect = false; // Allow moving cursor back to previous snap to clear it...\n return;\n }\n\n const snap = TentativeOrAccuSnap.getCurrentSnap();\n if (undefined === snap || this.origin.isAlmostEqual(snap.getPoint()))\n return;\n\n if (this._lastSnapDetail && this._lastSnapDetail.sourceId === snap.sourceId && this._lastSnapDetail.point.isAlmostEqual(snap.getPoint())) {\n if (false === this._lastSnapDetail.deselect)\n this._lastSnapDetail.deselect = true; // Stop indexing to previous snap...\n return; // Don't compute rotation if location hasn't changed...\n }\n\n const isTentative = IModelApp.tentativePoint.isSnapped;\n if (this._lastSnapDetail?.isTentative && !isTentative)\n return; // Don't update snap from tentative unless it's another tentative to support holding a snap location in a dense drawing...\n\n const rotation = AccuDraw.getSnapRotation(snap, vp);\n if (undefined === rotation)\n return;\n\n this._lastSnapDetail = { point: snap.getPoint().clone(), matrix: rotation, sourceId: snap.sourceId, isTentative };\n }\n\n /** @internal */\n public adjustPoint(pointActive: Point3d, vp: ScreenViewport, fromSnap: boolean): boolean {\n if (!this.isEnabled)\n return false;\n\n const lastWasIndexed = (0 !== this.indexed);\n let pointChanged = false, handled = false;\n\n if (0.0 !== pointActive.z && !vp.isPointAdjustmentRequired)\n pointActive.z = 0.0;\n\n if (1.0 !== vp.view.getAspectRatioSkew())\n this.downgradeInactiveState(); // Disable AccuDraw if skew is applied with AccuDraw already active...\n\n if (this.isInactive) {\n this.point.setFrom(pointActive);\n this.currentView = vp;\n this.fixPoint(pointActive, vp);\n\n if (!fromSnap && IModelApp.accuSnap.currHit)\n this.flags.redrawCompass = true;\n } else if (this.isActive) {\n this.updateLastSnapDetail(vp, fromSnap);\n\n const lastPt = this.point.clone();\n this.fixPoint(pointActive, vp);\n\n pointChanged = !lastPt.isExactEqual(this.point);\n this.processHints();\n handled = true;\n } else {\n this.currentView = vp; // Keep view up to date...\n }\n\n // If redraw of compass isn't required (yet!) check if needed...\n if (!this.flags.redrawCompass && this.isActive) {\n // Redraw required to erase/draw old/new indexing geometry...\n if (pointChanged && (lastWasIndexed || this.needsRefresh(vp)))\n this.flags.redrawCompass = true;\n }\n // Redraw is necessary, force decorators to be called...\n if (this.flags.redrawCompass)\n vp.invalidateDecorations();\n\n return handled;\n }\n\n private setDefaultOrigin(vp?: Viewport): void {\n if (!vp || this.locked || this._fieldLocked[ItemField.Z_Item])\n return;\n\n const view = vp.view;\n const rMatrix = view.getRotation();\n const acsOrigin = vp.getAuxCoordOrigin();\n rMatrix.multiplyVectorInPlace(acsOrigin);\n\n const origin = view.getCenter();\n view.getRotation().multiplyVectorInPlace(origin);\n origin.z = acsOrigin.z;\n view.getRotation().multiplyTransposeVectorInPlace(origin);\n\n this.origin.setFrom(origin); // View center at acs z...\n this.planePt.setFrom(origin);\n }\n\n /** @internal */\n public isZLocked(vp: Viewport): boolean {\n if (this._fieldLocked[ItemField.Z_Item])\n return true;\n if (vp.isSnapAdjustmentRequired && TentativeOrAccuSnap.isHot)\n return true;\n\n return false;\n }\n\n /** @internal */\n public accountForAuxRotationPlane(rot: ThreeAxes, plane: RotationMode): void {\n // ACS mode now can have \"front\" and \"side\" variations...\n switch (plane) {\n case RotationMode.Top:\n return;\n\n case RotationMode.Front:\n const temp = rot.y.clone();\n rot.y.setFrom(rot.z);\n temp.scale(-1.0, rot.z);\n return;\n\n case RotationMode.Side:\n const temp0 = rot.x.clone();\n rot.x.setFrom(rot.y);\n rot.y.setFrom(rot.z);\n rot.z.setFrom(temp0);\n }\n }\n\n private accountForACSContextLock(vec: Vector3d): void {\n // Base rotation is relative to ACS when ACS context lock is enabled...\n if (!this.currentView || !this.currentView.isContextRotationRequired)\n return;\n\n const rMatrix = AccuDraw.getStandardRotation(StandardViewId.Top, this.currentView, true);\n rMatrix.multiplyTransposeVectorInPlace(vec);\n }\n\n private static useACSContextRotation(vp: Viewport, isSnap: boolean): boolean {\n if (isSnap) {\n if (!vp.isSnapAdjustmentRequired)\n return false;\n } else {\n if (!vp.isContextRotationRequired)\n return false;\n }\n return true;\n }\n\n /** Gets X, Y or Z vector from top, front, (right) side, ACS, or View. */\n private getStandardVector(whichVec: number): Vector3d {\n const vp = this.currentView;\n let rMatrix: Matrix3d;\n let myAxes: ThreeAxes;\n const vecP = Vector3d.createZero();\n switch (this.flags.baseRotation) {\n case RotationMode.Top:\n switch (whichVec) {\n case 0: vecP.x = 1.0; break;\n case 1: vecP.y = 1.0; break;\n case 2: vecP.z = 1.0; break;\n }\n this.accountForACSContextLock(vecP);\n break;\n\n case RotationMode.Front:\n switch (whichVec) {\n case 0: vecP.x = 1.0; break;\n case 1: vecP.z = 1.0; break;\n case 2: vecP.y = -1.0; break;\n }\n this.accountForACSContextLock(vecP);\n break;\n\n case RotationMode.Side:\n switch (whichVec) {\n case 0: vecP.y = 1.0; break;\n case 1: vecP.z = 1.0; break;\n case 2: vecP.x = 1.0; break;\n }\n this.accountForACSContextLock(vecP);\n break;\n\n case RotationMode.ACS:\n rMatrix = vp ? vp.getAuxCoordRotation() : Matrix3d.createIdentity();\n myAxes = ThreeAxes.createFromMatrix3d(rMatrix);\n this.accountForAuxRotationPlane(myAxes, this.flags.auxRotationPlane);\n switch (whichVec) {\n case 0: vecP.setFrom(myAxes.x); break;\n case 1: vecP.setFrom(myAxes.y); break;\n case 2: vecP.setFrom(myAxes.z); break;\n }\n break;\n\n case RotationMode.View:\n rMatrix = vp ? vp.rotation : Matrix3d.createIdentity();\n rMatrix.getRow(whichVec, vecP);\n break;\n\n case RotationMode.Context:\n myAxes = this.baseAxes.clone();\n this.accountForAuxRotationPlane(myAxes, this.flags.auxRotationPlane);\n switch (whichVec) {\n case 0: vecP.setFrom(myAxes.x); break;\n case 1: vecP.setFrom(myAxes.y); break;\n case 2: vecP.setFrom(myAxes.z); break;\n }\n break;\n }\n\n return vecP;\n }\n\n private getBestViewedRotationFromXVector(rotation: ThreeAxes, vp: Viewport): void {\n const viewZ = vp.rotation.getRow(2);\n const vec1 = this.getStandardVector(2);\n const vec2 = this.getStandardVector(1);\n const vec3 = this.getStandardVector(0);\n const rot1 = vec1.crossProduct(rotation.x);\n const rot2 = vec2.crossProduct(rotation.x);\n const rot3 = vec3.crossProduct(rotation.x);\n const useRot1 = (rot1.normalizeWithLength(rot1).mag > 0.00001);\n const useRot2 = (rot2.normalizeWithLength(rot2).mag > 0.00001);\n const useRot3 = (rot3.normalizeWithLength(rot3).mag > 0.00001);\n const dot1 = (useRot1 ? Math.abs(rotation.x.crossProduct(rot1).dotProduct(viewZ)) : -1.0);\n const dot2 = (useRot2 ? Math.abs(rotation.x.crossProduct(rot2).dotProduct(viewZ)) : -1.0);\n const dot3 = (useRot3 ? Math.abs(rotation.x.crossProduct(rot3).dotProduct(viewZ)) : -1.0);\n const max = Math.max(dot1, dot2, dot3);\n\n if (Geometry.isDistanceWithinTol(dot1 - dot2, 0.1) && (max !== dot3))\n rotation.y.setFrom(rot1);\n else if (max === dot1)\n rotation.y.setFrom(rot1);\n else if (max === dot2)\n rotation.y.setFrom(rot2);\n else\n rotation.y.setFrom(rot3);\n\n rotation.z.setFrom(rotation.x.crossProduct(rotation.y));\n }\n\n private getRotationFromVector(rotation: ThreeAxes, whichVec: number): void {\n let vec: Vector3d;\n switch (whichVec) {\n case 0:\n vec = this.getStandardVector(2);\n vec.crossProduct(rotation.x, rotation.y);\n\n if (rotation.y.normalizeWithLength(rotation.y).mag < .00001) {\n vec = this.getStandardVector(1);\n vec.crossProduct(rotation.x, rotation.y);\n rotation.y.normalizeInPlace();\n }\n\n rotation.x.crossProduct(rotation.y, rotation.z);\n break;\n\n case 1:\n vec = this.getStandardVector(2);\n vec.crossProduct(rotation.y, rotation.x);\n\n if (rotation.x.normalizeWithLength(rotation.x).mag < .00001) {\n vec = this.getStandardVector(0);\n vec.crossProduct(rotation.y, rotation.x);\n rotation.x.normalizeInPlace();\n }\n\n rotation.x.crossProduct(rotation.y, rotation.z);\n break;\n\n case 2:\n vec = this.getStandardVector(0);\n rotation.z.crossProduct(vec, rotation.y);\n\n if (rotation.y.normalizeWithLength(rotation.y).mag < .00001) {\n vec = this.getStandardVector(1);\n vec.crossProduct(rotation.z, rotation.x);\n rotation.x.normalizeInPlace();\n rotation.z.crossProduct(rotation.x, rotation.y);\n } else {\n rotation.y.crossProduct(rotation.z, rotation.x);\n }\n break;\n }\n }\n\n /** @internal */\n public updateRotation(animate: boolean = false, newRotationIn?: Matrix3d): void {\n let clearLocks = true;\n const oldRotation = this.axes.clone();\n let rMatrix: Matrix3d;\n let newRotation: ThreeAxes;\n\n if (!newRotationIn)\n newRotation = this.axes.clone(); // for axis based\n else\n newRotation = ThreeAxes.createFromMatrix3d(newRotationIn); // for animating context rotation change...\n\n const vp = this.currentView;\n const useACS = vp ? vp.isContextRotationRequired : false;\n\n switch (this.rotationMode) {\n case RotationMode.Top:\n // Get standard rotation relative to ACS when ACS context lock is enabled...\n newRotation.fromMatrix3d(AccuDraw.getStandardRotation(StandardViewId.Top, vp, useACS));\n this.flags.lockedRotation = true;\n break;\n\n case RotationMode.Front:\n // Get standard rotation relative to ACS when ACS context lock is enabled...\n newRotation.fromMatrix3d(AccuDraw.getStandardRotation(StandardViewId.Front, vp, useACS));\n this.flags.lockedRotation = true;\n break;\n\n case RotationMode.Side:\n // Get standard rotation relative to ACS when ACS context lock is enabled...\n newRotation.fromMatrix3d(AccuDraw.getStandardRotation(StandardViewId.Right, vp, useACS));\n this.flags.lockedRotation = true;\n break;\n\n case RotationMode.ACS:\n rMatrix = vp ? vp.getAuxCoordRotation() : Matrix3d.createIdentity();\n newRotation.fromMatrix3d(rMatrix);\n this.accountForAuxRotationPlane(newRotation, this.flags.auxRotationPlane);\n this.flags.lockedRotation = true;\n break;\n\n case RotationMode.View:\n rMatrix = vp ? vp.rotation : Matrix3d.createIdentity();\n newRotation.fromMatrix3d(rMatrix);\n this.flags.lockedRotation = false;\n break;\n\n case RotationMode.Context:\n switch (this.flags.contextRotMode) {\n case ContextMode.XAxis:\n this.getRotationFromVector(newRotation, 0);\n clearLocks = (LockedStates.Y_BM !== this.locked || !oldRotation.x.isExactEqual(newRotation.x)); // Try to keep locked axis when tool being unsuspended...\n break;\n\n case ContextMode.XAxis2:\n if (vp)\n this.getBestViewedRotationFromXVector(newRotation, vp); // Use base rotation axis that results in compass being most closely aligned to view direction....\n else\n this.getRotationFromVector(newRotation, 0);\n clearLocks = (LockedStates.Y_BM !== this.locked || !oldRotation.x.isExactEqual(newRotation.x)); // Try to keep locked axis when tool being unsuspended...\n break;\n\n case ContextMode.YAxis:\n this.getRotationFromVector(newRotation, 1);\n clearLocks = (LockedStates.X_BM !== this.locked || !oldRotation.y.isExactEqual(newRotation.y)); // Try to keep locked axis when tool being unsuspended...\n break;\n\n case ContextMode.ZAxis:\n this.getRotationFromVector(newRotation, 2);\n break;\n\n case ContextMode.Locked:\n break;\n }\n break;\n }\n\n const isChanged = !oldRotation.equals(newRotation);\n\n // unlock stuff if rotation has changed\n if (isChanged && clearLocks && (CompassMode.Rectangular === this.compassMode || !this._fieldLocked[ItemField.DIST_Item] || animate)) {\n this.locked = this.indexed = LockedStates.NONE_LOCKED;\n this.unlockAllFields();\n }\n\n this.axes.setFrom(newRotation);\n this.lastAxes.setFrom(newRotation);\n this.flags.redrawCompass = true;\n\n // If animate frame preference is set...\n if (!animate || !vp)\n return;\n\n // AccuDrawAnimatorPtr animator = AccuDrawAnimator:: Create();\n // viewport -> SetAnimator(* animator);\n // animator -> ChangeOfRotation(Matrix3d:: FromColumnVectors(oldRotation[0], oldRotation[1], oldRotation[2]));\n }\n\n /**\n * Enable AccuDraw so that it can be used by interactive tools.\n * This method is public to allow applications to provide a user interface to enable/disable AccuDraw.\n * @note Should not be called by interactive tools, those should use [[AccuDrawHintBuilder]]. AccuDraw is enabled for applications by default.\n * @see [[disableForSession]]\n */\n public enableForSession(): void {\n if (CurrentState.NotEnabled === this.currentState)\n this.currentState = CurrentState.Inactive;\n }\n\n /**\n * Disable AccuDraw so that it can not be used by interactive tools.\n * This method is public to allow applications to provide a user interface to enable/disable AccuDraw.\n * @note Should not be called by interactive tools, those should use [[AccuDrawHintBuilder]]. AccuDraw is enabled for applications by default.\n * @see [[enableForSession]]\n */\n public disableForSession(): void {\n this.currentState = CurrentState.NotEnabled;\n this.flags.redrawCompass = true; // Make sure decorators are called so we don't draw (i.e. erase AccuDraw compass)\n }\n\n /** @internal */\n public setLastPoint(pt: Point3d): void {\n const viewport = this.currentView;\n if (!viewport)\n return;\n\n const ev = new BeButtonEvent({ point: pt, rawPoint: pt, viewPoint: viewport.worldToView(pt), viewport });\n IModelApp.toolAdmin.setAdjustedDataPoint(ev);\n }\n\n /** Emulate a mouse click at the specified location in the supplied view by sending button down/up events. */\n public async sendDataPoint(pt: Point3d, viewport: ScreenViewport): Promise<void> {\n const ev = new BeButtonEvent({ point: pt, rawPoint: pt, viewPoint: viewport.worldToView(pt), viewport, inputSource: InputSource.Mouse, isDown: true });\n\n // Send both down and up events...\n await IModelApp.toolAdmin.sendButtonEvent(ev);\n ev.isDown = false;\n return IModelApp.toolAdmin.sendButtonEvent(ev);\n }\n\n /** @internal */\n public clearTentative(): boolean {\n if (!IModelApp.tentativePoint.isActive)\n return false;\n\n const wasSnapped = IModelApp.tentativePoint.isSnapped;\n IModelApp.tentativePoint.clear(true);\n return wasSnapped;\n }\n\n /** @internal */\n public async doAutoPoint(index: ItemField, mode: CompassMode): Promise<void> {\n const vp = this.currentView;\n if (!vp)\n return;\n\n if (CompassMode.Polar === mode) {\n if (!this.autoPointPlacement)\n return;\n\n if (this._fieldLocked[ItemField.DIST_Item] && (this._fieldLocked[ItemField.ANGLE_Item] || this.indexed & LockedStates.ANGLE_BM) && KeyinStatus.Dynamic === this._keyinStatus[index]) {\n this.fixPointPolar(vp);\n return this.sendDataPoint(this.point, vp);\n }\n\n return;\n }\n\n if (this._fieldLocked[ItemField.X_Item] && this._fieldLocked[ItemField.Y_Item]) {\n if (!this.isActive) {\n if (!vp.view.is3d() || this._fieldLocked[ItemField.Z_Item]) {\n const globalOrigin = new Point3d();\n\n if (vp.view.isSpatialView())\n globalOrigin.setFrom(vp.view.iModel.globalOrigin);\n\n return this.sendDataPoint(globalOrigin.plus(this.delta), vp);\n }\n\n return;\n }\n\n if (!this.autoPointPlacement || KeyinStatus.Dynamic !== this._keyinStatus[index])\n return;\n\n this.origin.plus3Scaled(this.axes.x, this.delta.x, this.axes.y, this.delta.y, this.axes.z, this.delta.z, this.point);\n return this.sendDataPoint(this.point, vp);\n }\n\n if (!this.autoPointPlacement || KeyinStatus.Dynamic !== this._keyinStatus[index])\n return;\n\n if ((ItemField.X_Item === index && this._fieldLocked[ItemField.X_Item] && (this.indexed & LockedStates.Y_BM)) || (ItemField.Y_Item === index && this._fieldLocked[ItemField.Y_Item] && (this.indexed & LockedStates.X_BM))) {\n this.origin.plus3Scaled(this.axes.x, this.delta.x, this.axes.y, this.delta.y, this.axes.z, this.delta.z, this.point);\n return this.sendDataPoint(this.point, vp);\n }\n }\n\n /** Get the current value for the supplied input field */\n public getValueByIndex(index: ItemField): number {\n switch (index) {\n case ItemField.X_Item: return this.delta.x;\n case ItemField.Y_Item: return this.delta.y;\n case ItemField.Z_Item: return this.delta.z;\n case ItemField.DIST_Item: return this._distance;\n case ItemField.ANGLE_Item: return this._angle;\n default:\n return 0.0;\n }\n }\n\n /** Set the current value for the supplied input field */\n public setValueByIndex(index: ItemField, value: number): void {\n switch (index) {\n case ItemField.X_Item:\n this.delta.x = value;\n break;\n case ItemField.Y_Item:\n this.delta.y = value;\n break;\n case ItemField.Z_Item:\n this.delta.z = value;\n break;\n case ItemField.DIST_Item:\n this._distance = value;\n break;\n case ItemField.ANGLE_Item:\n this._angle = value;\n break;\n }\n }\n\n private updateVector(angle: number): void {\n this.vector.set(Math.cos(angle), Math.sin(angle), 0.0);\n const rMatrix = this.getRotation();\n rMatrix.multiplyTransposeVectorInPlace(this.vector);\n }\n\n /** Allow the AccuDraw user interface to supply the distance parser */\n public getLengthParser(): ParserSpec | undefined {\n return IModelApp.quantityFormatter.findParserSpecByQuantityType(QuantityType.Length);\n }\n\n /** Allow the AccuDraw user interface to supply the distance parser */\n public getLengthFormatter(): FormatterSpec | undefined {\n return IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\n }\n\n private stringToDistance(str: string): QuantityParseResult {\n const parserSpec = this.getLengthParser();\n if (parserSpec)\n return parserSpec.parseToQuantityValue(str);\n return { ok: false, error: ParseError.InvalidParserSpec };\n }\n\n private stringFromDistance(distance: number): string {\n const formatterSpec = this.getLengthFormatter();\n let formattedValue = distance.toString();\n if (formatterSpec)\n formattedValue = IModelApp.quantityFormatter.formatQuantity(distance, formatterSpec);\n return formattedValue;\n }\n\n /** Allow the AccuDraw user interface to specify bearing */\n public get isBearingMode(): boolean { return this.getAngleParser()?.format.type === FormatType.Bearing; }\n\n /** Allow the AccuDraw user interface to specify bearing directions are always in xy plane */\n public get bearingFixedToPlane2d() { return this.flags.bearingFixToPlane2D; }\n public set bearingFixedToPlane2d(enable: boolean) { this.flags.bearingFixToPlane2D = enable; }\n\n /** Allow the AccuDraw user interface to supply the angle/direction parser */\n public getAngleParser(): ParserSpec | undefined {\n return IModelApp.quantityFormatter.findParserSpecByQuantityType(QuantityType.Angle);\n }\n\n /** Allow the AccuDraw user interface to supply the angle/direction formatter */\n public getAngleFormatter(): FormatterSpec | undefined {\n return IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Angle);\n }\n\n private stringToAngle(inString: string): QuantityParseResult {\n const parserSpec = this.getAngleParser();\n if (parserSpec)\n return parserSpec.parseToQuantityValue(inString);\n return { ok: false, error: ParseError.InvalidParserSpec };\n }\n\n private stringFromAngle(angle: number): string {\n if (this.isBearingMode && this.flags.bearingFixToPlane2D) {\n const point = Vector3d.create(this.axes.x.x, this.axes.x.y, 0.0);\n const matrix = Matrix3d.createRows(this.axes.x, this.axes.y, this.axes.z);\n if (matrix.determinant() < 0)\n angle = -angle; // Account for left handed rotations...\n\n point.normalizeInPlace();\n let adjustment = Math.acos(point.x);\n\n if (point.y < 0.0)\n adjustment = -adjustment;\n angle += adjustment; // This is the angle measured from design x...\n angle = (Math.PI / 2) - angle; // Account for bearing direction convention...\n\n if (angle < 0)\n angle = (Math.PI * 2) + angle; // Negative bearings aren't valid?\n }\n\n const formatterSpec = this.getAngleFormatter();\n let formattedValue = angle.toString();\n if (formatterSpec)\n formattedValue = IModelApp.quantityFormatter.formatQuantity(angle, formatterSpec);\n return formattedValue;\n }\n\n /** Can be called by sub-classes to get a formatted value to display for an AccuDraw input field\n * @see [[onFieldValueChange]]\n */\n public getFormattedValueByIndex(index: ItemField): string {\n const value = IModelApp.accuDraw.getValueByIndex(index);\n if (ItemField.ANGLE_Item === index)\n return this.stringFromAngle(value);\n return this.stringFromDistance(value);\n }\n\n private updateFieldValue(index: ItemField, input: string): BentleyStatus {\n if (input.length === 0)\n return BentleyStatus.ERROR;\n\n if (input.length === 1)\n switch (input) {\n case \":\":\n case \"-\":\n case \"+\":\n case \".\":\n return BentleyStatus.ERROR;\n }\n\n let parseResult;\n\n switch (index) {\n case ItemField.DIST_Item:\n parseResult = this.stringToDistance(input);\n if (Parser.isParsedQuantity(parseResult)) {\n this._distance = parseResult.value;\n break;\n }\n return BentleyStatus.ERROR;\n\n case ItemField.ANGLE_Item:\n parseResult = this.stringToAngle(input);\n if (Parser.isParsedQuantity(parseResult)) {\n if (this.isBearingMode && this.flags.bearingFixToPlane2D)\n this._angle = (Math.PI / 2) - parseResult.value;\n else\n this._angle = parseResult.value;\n break;\n }\n return BentleyStatus.ERROR;\n\n case ItemField.X_Item:\n parseResult = this.stringToDistance(input);\n if (Parser.isParsedQuantity(parseResult)) {\n this.delta.x = parseResult.value;\n\n this._xIsExplicit = (input[0] === \"+\" || input[0] === \"-\");\n if (!this._xIsExplicit) {\n if (this.smartKeyin && this.isActive && this._xIsNegative === (this.delta.x >= 0.0))\n this.delta.x = -this.delta.x;\n }\n break;\n }\n return BentleyStatus.ERROR;\n\n case ItemField.Y_Item:\n parseResult = this.stringToDistance(input);\n if (Parser.isParsedQuantity(parseResult)) {\n this.delta.y = parseResult.value;\n\n this._yIsExplicit = (input[0] === \"+\" || input[0] === \"-\");\n if (!this._yIsExplicit) {\n if (this.smartKeyin && this.isActive && this._yIsNegative === (this.delta.y >= 0.0))\n this.delta.y = -this.delta.y;\n }\n break;\n }\n return BentleyStatus.ERROR;\n\n case ItemField.Z_Item:\n parseResult = this.stringToDistance(input);\n if (Parser.isParsedQuantity(parseResult)) {\n this.delta.z = parseResult.value;\n break;\n }\n return BentleyStatus.ERROR;\n }\n\n return BentleyStatus.SUCCESS;\n }\n\n /** @internal */\n public unlockAllFields(): void {\n this.locked = LockedStates.NONE_LOCKED;;\n\n if (CompassMode.Polar === this.compassMode) {\n if (this._fieldLocked[ItemField.DIST_Item])\n this.setFieldLock(ItemField.DIST_Item, false);\n\n if (this._fieldLocked[ItemField.ANGLE_Item])\n this.setFieldLock(ItemField.ANGLE_Item, false);\n } else {\n if (this._fieldLocked[ItemField.X_Item])\n this.setFieldLock(ItemField.X_Item, false);\n\n if (this._fieldLocked[ItemField.Y_Item])\n this.setFieldLock(ItemField.Y_Item, false);\n }\n\n if (this._fieldLocked[ItemField.Z_Item]) {\n if (this.stickyZLock)\n this.delta.z = 0.0;\n else\n this.setFieldLock(ItemField.Z_Item, false);\n }\n\n this.setKeyinStatus(ItemField.DIST_Item, KeyinStatus.Dynamic);\n this.setKeyinStatus(ItemField.ANGLE_Item, KeyinStatus.Dynamic);\n this.setKeyinStatus(ItemField.X_Item, KeyinStatus.Dynamic);\n this.setKeyinStatus(ItemField.Y_Item, KeyinStatus.Dynamic);\n this.setKeyinStatus(ItemField.Z_Item, KeyinStatus.Dynamic);\n\n if (!this.smartKeyin)\n this.setFocusItem(CompassMode.Polar === this.compassMode ? ItemField.DIST_Item : ItemField.X_Item);\n\n this.dontMoveFocus = false;\n }\n\n /** produces the normal vector of the closest plane to the view which\n * contains inVec (uses true view rotation, never auxiliary)\n */\n private planeByVectorAndView(normalVec: Vector3d, inVec: Vector3d, vp: Viewport): boolean {\n if (!vp.view.is3d()) {\n normalVec.setFrom(Vector3d.unitZ());\n return true;\n }\n\n const viewNormal = vp.rotation.getRow(2);\n const yVec = viewNormal.crossProduct(inVec);\n\n if (!yVec.normalizeInPlace()) {\n normalVec.setFrom(viewNormal);\n return false;\n }\n\n inVec.crossProduct(yVec, normalVec);\n return true;\n }\n\n private _acosWithLimitCheck(value: number): number {\n if (value >= 1.0)\n return 0.0;\n if (value <= -1.0)\n return Math.PI;\n return Math.acos(value);\n }\n\n private handleDegeneratePolarCase(): void {\n if (!(this.locked & LockedStates.DIST_BM))\n this._distance = 0.0;\n\n if (this.locked & LockedStates.VEC_BM) {\n this._angle = this._acosWithLimitCheck(this.vector.dotProduct(this.axes.x));\n } else if (this.locked & LockedStates.Y_BM) {\n this.vector.setFrom(this.axes.y);\n this._angle = Math.PI / 2.0;\n this.indexed = this.locked;\n } else if (this.locked & LockedStates.X_BM) {\n this.vector.setFrom(this.axes.x);\n this._angle = 0.0;\n this.indexed = this.locked;\n } else {\n // use last good vector\n this._angle = this._acosWithLimitCheck(this.vector.dotProduct(this.axes.x));\n }\n this.origin.plusScaled(this.vector, this._distance, this.point);\n }\n\n private rawDeltaIsValid(rawDelta: number): boolean {\n /* Cursor Distance (*(+/-)) sense testing is not valid when raw delta is\n meaningless (0.0)...to make this change safer only reject the\n raw delta if unit or grid lock is also on. */\n if (0.0 !== rawDelta)\n return true;\n\n // The \"I don't want grid lock\" flag can be set by tools to override the default behavior...\n if (0 === (IModelApp.toolAdmin.toolState.coordLockOvr & CoordinateLockOverrides.Grid))\n return true;\n\n return (!IModelApp.toolAdmin.gridLock);\n }\n\n /** Call from an AccuDraw UI event to check if key is valid for updating the input field value. */\n protected itemFieldInputIsValid(key: string, item: ItemField): boolean {\n if (1 !== key.length)\n return false;\n\n switch (key) {\n case \".\":\n case \",\":\n return true;\n\n case \"'\": // feet/minutes...\n case \"\\\"\": // inches/seconds...\n return true;\n\n case \"°\": // degrees...\n return (ItemField.ANGLE_Item === item); // Allowed for angle input...\n\n case \"N\":\n case \"S\":\n case \"E\":\n case \"W\":\n case \"n\":\n case \"s\":\n case \"e\":\n case \"w\":\n return (ItemField.ANGLE_Item === item && this.isBearingMode); // Allowed for bearing direction input, trumps shortcuts...\n }\n\n if (!Number.isNaN(parseInt(key, 10)))\n return true; // Accept numeric input...\n\n if (key.toLowerCase() !== key.toUpperCase())\n return false; // Treat unhandled letters as potential shortcuts...\n\n // Let parser deal with anything else, like +-/*, etc.\n return true;\n }\n\n /** Call from an AccuDraw UI event to sync the supplied input field value */\n public async processFieldInput(index: ItemField, input: string, synchText: boolean): Promise<void> {\n if (BentleyStatus.SUCCESS !== this.updateFieldValue(index, input)) {\n this._unlockFieldInternal(index); // Don't want keyin status to change when entering '.', etc.\n return;\n }\n\n switch (index) {\n case ItemField.DIST_Item:\n this.distanceLock(synchText, false); // Don't save distance here, partial input...\n await this.doAutoPoint(index, CompassMode.Polar);\n break;\n\n case ItemField.ANGLE_Item:\n this.setFieldLock(index, true);\n\n if (synchText) {\n this.onFieldValueChange(index);\n this.setKeyinStatus(index, KeyinStatus.Dynamic);\n }\n\n if (!this.isBearingMode || !this.flags.bearingFixToPlane2D)\n this.updateVector(this._angle);\n else\n this.vector.set(Math.cos(this._angle), Math.sin(this._angle), 0.0);\n\n this.locked |= LockedStates.VEC_BM;\n await this.doAutoPoint(index, CompassMode.Polar);\n break;\n\n case ItemField.X_Item:\n case ItemField.Y_Item:\n this.locked |= (ItemField.X_Item === index) ? LockedStates.X_BM : LockedStates.Y_BM;\n\n // falls through\n case ItemField.Z_Item:\n this.setFieldLock(index, true);\n if (synchText) {\n this.onFieldValueChange(index);\n this.setKeyinStatus(index, KeyinStatus.Dynamic);\n }\n\n await this.doAutoPoint(index, this.compassMode);\n break;\n }\n\n this.refreshDecorationsAndDynamics();\n }\n\n private _lockFieldInternal(index: ItemField): void {\n if (this._fieldLocked[index])\n return;\n\n this.setFieldLock(index, true);\n\n switch (index) {\n case ItemField.DIST_Item:\n this.distanceLock(true, false);\n break;\n\n case ItemField.ANGLE_Item:\n this.angleLock();\n break;\n\n case ItemField.X_Item:\n this.locked |= LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n this.locked |= LockedStates.Y_BM;\n break;\n\n case ItemField.Z_Item:\n break;\n }\n }\n\n private _unlockFieldInternal(index: ItemField): void {\n switch (index) {\n case ItemField.DIST_Item:\n this.locked &= ~LockedStates.DIST_BM;\n break;\n\n case ItemField.ANGLE_Item:\n this.locked &= ~LockedStates.VEC_BM;\n break;\n\n case ItemField.X_Item:\n this.locked &= ~LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n this.locked &= ~LockedStates.Y_BM;\n break;\n }\n\n if (index !== ItemField.Z_Item || !this.stickyZLock)\n this.setFieldLock(index, false);\n }\n\n /** @internal */\n public updateFieldLock(index: ItemField, locked: boolean): void {\n if (locked) {\n this._lockFieldInternal(index);\n return;\n }\n\n this._unlockFieldInternal(index);\n this.setKeyinStatus(index, KeyinStatus.Dynamic);\n }\n\n /** @internal */\n public static getSnapRotation(snap: SnapDetail, currentVp: Viewport | undefined, out?: Matrix3d): Matrix3d | undefined {\n const vp = (undefined !== currentVp) ? currentVp : snap.viewport;\n const snapDetail = snap.primitive?.closestPoint(snap.snapPoint, false);\n const frame = snapDetail?.curve?.fractionToFrenetFrame(snapDetail.fraction);\n\n if (undefined === frame && undefined === snap.normal)\n return undefined;\n\n const zVec = (vp.view.allow3dManipulations() ? (snap.normal?.clone() ?? frame?.matrix.columnZ()) : Vector3d.unitZ());\n if (undefined === zVec)\n return undefined;\n\n const rotation = out ? out : new Matrix3d();\n const viewZ = vp.rotation.rowZ();\n\n zVec.normalizeInPlace();\n if (zVec.dotProduct(viewZ) < 0.0)\n zVec.negate(zVec);\n\n if (frame) {\n const xVec = frame.matrix.columnX();\n xVec.normalizeInPlace();\n const yVec = zVec.unitCrossProduct(xVec);\n\n if (undefined !== yVec) {\n rotation.setColumns(xVec, yVec, zVec);\n rotation.makeRigid();\n rotation.transposeInPlace();\n return rotation;\n }\n }\n\n Matrix3d.createRigidHeadsUp(zVec, undefined, rotation);\n rotation.transposeInPlace();\n return rotation;\n }\n\n /** @internal */\n public static getStandardRotation(nStandard: StandardViewId, vp: Viewport | undefined, useACS: boolean, out?: Matrix3d): Matrix3d {\n const rMatrix = out ? out : new Matrix3d();\n rMatrix.setFrom(ViewState.getStandardViewMatrix(nStandard));\n const useVp = vp ? vp : IModelApp.viewManager.selectedView;\n\n if (!useACS) {\n const globeToWorld = vp?.view.getGlobeRotation();\n if (globeToWorld)\n rMatrix.multiplyMatrixMatrix(globeToWorld, rMatrix);\n }\n\n if (!useACS || !useVp)\n return rMatrix;\n\n rMatrix.multiplyMatrixMatrix(useVp.getAuxCoordRotation(AccuDraw._tempRot), rMatrix);\n return rMatrix;\n }\n\n /** @internal */\n public static getCurrentOrientation(vp: Viewport, checkAccuDraw: boolean, checkACS: boolean, rMatrix?: Matrix3d): Matrix3d | undefined {\n if (checkAccuDraw && IModelApp.accuDraw.isActive)\n return IModelApp.accuDraw.getRotation(rMatrix);\n\n const useVp = vp ? vp : IModelApp.viewManager.selectedView;\n if (!useVp)\n return Matrix3d.createIdentity(rMatrix);\n\n if (checkACS && useVp.isContextRotationRequired)\n return useVp.getAuxCoordRotation(rMatrix);\n\n return useVp.rotation;\n }\n\n /** @internal */\n public static updateAuxCoordinateSystem(acs: AuxCoordSystemState, vp: Viewport, allViews: boolean = true): void {\n // When modeling with multiple spatial views open, you'd typically want the same ACS in all views...\n if (allViews && vp.view.isSpatialView()) {\n for (const otherVp of IModelApp.viewManager) {\n if (otherVp !== vp && otherVp.view.isSpatialView())\n otherVp.view.setAuxiliaryCoordinateSystem(acs);\n }\n }\n\n vp.view.setAuxiliaryCoordinateSystem(acs);\n\n // NOTE: Change AccuDraw's base rotation to ACS.\n IModelApp.accuDraw.setContext(AccuDrawFlags.OrientACS);\n }\n\n /** @internal */\n public distanceLock(synchText: boolean, saveInHistory: boolean): void {\n this.locked |= LockedStates.DIST_BM;\n\n if (!this._fieldLocked[ItemField.DIST_Item])\n this.setFieldLock(ItemField.DIST_Item, true);\n\n if (saveInHistory)\n this.saveCoordinate(ItemField.DIST_Item, this._distance);\n\n if (synchText) {\n this.onFieldValueChange(ItemField.DIST_Item);\n this.setKeyinStatus(ItemField.DIST_Item, KeyinStatus.Dynamic);\n }\n }\n\n /** @internal */\n public angleLock(): void {\n if (this.indexed & LockedStates.Y_BM)\n this.locked |= LockedStates.Y_BM;\n else if (this.indexed & LockedStates.X_BM)\n this.locked |= LockedStates.X_BM;\n else\n this.locked |= LockedStates.VEC_BM;\n\n this.clearTentative();\n\n if (!this._fieldLocked[ItemField.ANGLE_Item]) {\n this.setFieldLock(ItemField.ANGLE_Item, true);\n this.setKeyinStatus(ItemField.ANGLE_Item, KeyinStatus.Dynamic);\n }\n\n this.flags.lockedRotation = true;\n this.flags.softAngleLock = false;\n }\n\n /** @internal */\n public doLockAngle(isSnapped: boolean): void {\n if (CompassMode.Polar !== this.compassMode) {\n this.locked = LockedStates.NONE_LOCKED;\n this._rawPoint.setFrom(this.point);\n\n const vp = this.currentView;\n if (vp)\n this.fixPointPolar(vp);\n\n this.changeCompassMode(true);\n }\n\n this.setFieldLock(ItemField.ANGLE_Item, !this._fieldLocked[ItemField.ANGLE_Item]);\n\n if (this._fieldLocked[ItemField.ANGLE_Item]) {\n // Move focus to angle field...\n if (!isSnapped && this.autoFocusFields)\n this.setFocusItem(ItemField.ANGLE_Item);\n\n this.angleLock();\n\n if (!isSnapped)\n this.flags.softAngleLock = true;\n } else {\n this.locked &= ~LockedStates.ANGLE_BM;\n this.saveCoordinate(ItemField.ANGLE_Item, this._angle);\n this.setKeyinStatus(ItemField.ANGLE_Item, KeyinStatus.Dynamic);\n }\n }\n\n private saveAngle(value: number): void {\n if (Geometry.isAlmostEqualNumber(value, 0.0) || Geometry.isAlmostEqualNumber(Math.abs(value), Math.PI) || Geometry.isAlmostEqualNumber(Math.abs(value), (Math.PI / 2.0)))\n return; // Don't accept 0, 90, -90, 180 and -180 degrees...\n\n const foundIndex = this._savedAngles.findIndex(angle => Geometry.isAlmostEqualNumber(angle, value));\n if (-1 !== foundIndex) {\n this._savedAngleIndex = foundIndex; // Set index to existing entry with matching value...\n return;\n }\n\n this._savedAngleIndex++;\n if (this._savedAngleIndex >= Constants.MAX_SAVED_VALUES)\n this._savedAngleIndex = 0;\n\n this._savedAngles[this._savedAngleIndex] = value;\n }\n\n private saveDistance(value: number): void {\n if (Geometry.isAlmostEqualNumber(value, 0.0))\n return; // Don't accept zero or nearly zero...\n\n value = Math.abs(value); // Only save positive distance...\n const foundIndex = this._savedDistances.findIndex(distance => Geometry.isAlmostEqualNumber(distance, value));\n if (-1 !== foundIndex) {\n this._savedDistanceIndex = foundIndex; // Set index to existing entry with matching value...\n return;\n }\n\n this._savedDistanceIndex++;\n if (this._savedDistanceIndex >= Constants.MAX_SAVED_VALUES)\n this._savedDistanceIndex = 0;\n\n this._savedDistances[this._savedDistanceIndex] = value;\n this._lastDistance = value;\n }\n\n /** @internal */\n public saveCoordinate(index: ItemField, value: number): void {\n if (ItemField.ANGLE_Item === index)\n this.saveAngle(value);\n else\n this.saveDistance(value);\n }\n\n private getSavedAngle(next: boolean): number | undefined {\n if (-1 === this._savedAngleIndex || 0 === this._savedAngles.length)\n return undefined;\n\n const value = this._savedAngles[this._savedAngleIndex];\n\n if (next) {\n this._savedAngleIndex++;\n if (this._savedAngleIndex >= this._savedAngles.length)\n this._savedAngleIndex = 0;\n }\n else {\n this._savedAngleIndex--;\n if (this._savedAngleIndex < 0)\n this._savedAngleIndex = this._savedAngles.length - 1;\n }\n\n return value;\n }\n\n private getSavedDistance(next: boolean): number | undefined {\n if (-1 === this._savedDistanceIndex || 0 === this._savedDistances.length)\n return undefined;\n\n const value = this._savedDistances[this._savedDistanceIndex];\n\n if (next) {\n this._savedDistanceIndex++;\n if (this._savedDistanceIndex >= this._savedDistances.length)\n this._savedDistanceIndex = 0;\n }\n else {\n this._savedDistanceIndex--;\n if (this._savedDistanceIndex < 0)\n this._savedDistanceIndex = this._savedDistances.length - 1;\n }\n\n return value;\n }\n\n /** @internal */\n public getSavedValue(index: ItemField, next: boolean): void {\n const isAngle = (ItemField.ANGLE_Item === index);\n const savedValue = (isAngle ? this.getSavedAngle(next) : this.getSavedDistance(next));\n if (undefined === savedValue)\n return;\n\n if (!isAngle)\n this._lastDistance = savedValue;\n\n const currValue = this.getValueByIndex(index);\n this.setValueByIndex(index, currValue < 0.0 ? -savedValue : savedValue);\n\n switch (index) {\n case ItemField.X_Item:\n this.setFieldLock(ItemField.X_Item, true);\n this.onFieldValueChange(ItemField.X_Item);\n this.locked |= LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n this.setFieldLock(ItemField.Y_Item, true);\n this.onFieldValueChange(ItemField.Y_Item);\n this.locked |= LockedStates.Y_BM;\n break;\n\n case ItemField.Z_Item:\n this.setFieldLock(ItemField.Z_Item, true);\n this.onFieldValueChange(ItemField.Z_Item);\n break;\n\n case ItemField.DIST_Item:\n this.distanceLock(true, false);\n break;\n\n case ItemField.ANGLE_Item:\n this.locked &= ~LockedStates.XY_BM;\n this.updateVector(this._angle);\n this.angleLock();\n break;\n }\n }\n\n /** @internal */\n public clearSavedValues(): void {\n this._savedDistances.length = this._savedAngles.length = 0;\n this._savedDistanceIndex = this._savedAngleIndex = -1;\n }\n\n /** @internal */\n public changeCompassMode(animate: boolean = false): void {\n this.unlockAllFields(); // Clear locks for the current mode and send change notifications...\n this.setCompassMode(CompassMode.Polar === this.compassMode ? CompassMode.Rectangular : CompassMode.Polar);\n\n const viewport = this.currentView;\n if (!animate || !viewport)\n return;\n\n // AccuDrawAnimatorPtr animator = AccuDrawAnimator:: Create();\n // viewport.setAnimator(* animator);\n // animator -> ChangeOfMode();\n }\n\n /** @internal */\n public changeBaseRotationMode(mode: RotationMode): void {\n if (mode > RotationMode.Context)\n return;\n\n if (RotationMode.Context === mode) {\n // See if it is better to stay with the current base rotation (only care about z)...\n if (RotationMode.Context !== this.flags.baseRotation) {\n const baseRMatrix = this.getBaseRotation();\n const baseZ = baseRMatrix.getRow(2);\n\n if (baseZ.isParallelTo(this.axes.z, true))\n return;\n }\n\n this.baseAxes.setFrom(this.axes);\n this.flags.auxRotationPlane = RotationMode.Top;\n }\n\n this.flags.baseRotation = mode;\n }\n\n private getBaseRotation(): Matrix3d {\n const vp = this.currentView;\n let baseRMatrix: Matrix3d;\n const useAcs = vp ? vp.isContextRotationRequired : false;\n switch (this.flags.baseRotation) {\n case RotationMode.Top: {\n baseRMatrix = AccuDraw.getStandardRotation(StandardViewId.Top, vp, useAcs)!;\n break;\n }\n\n case RotationMode.Front: {\n baseRMatrix = AccuDraw.getStandardRotation(StandardViewId.Front, vp, useAcs)!;\n break;\n }\n\n case RotationMode.Side: {\n baseRMatrix = AccuDraw.getStandardRotation(StandardViewId.Right, vp, useAcs)!;\n break;\n }\n\n case RotationMode.ACS: {\n baseRMatrix = vp ? vp.getAuxCoordRotation() : Matrix3d.createIdentity();\n const axes = ThreeAxes.createFromMatrix3d(baseRMatrix);\n this.accountForAuxRotationPlane(axes, this.flags.auxRotationPlane);\n axes.toMatrix3d(baseRMatrix);\n break;\n }\n\n case RotationMode.View: {\n baseRMatrix = vp ? vp.rotation : Matrix3d.createIdentity();\n break;\n }\n\n case RotationMode.Context: {\n const axes = new ThreeAxes();\n axes.setFrom(this.baseAxes);\n this.accountForAuxRotationPlane(axes, this.flags.auxRotationPlane);\n baseRMatrix = axes.toMatrix3d();\n break;\n }\n\n default: {\n baseRMatrix = Matrix3d.createIdentity();\n break;\n }\n }\n return baseRMatrix;\n }\n\n /** @internal */\n public setContextRotation(rMatrix: Matrix3d, locked: boolean, animate: boolean): void {\n this.flags.lockedRotation = locked;\n this.flags.contextRotMode = locked ? ContextMode.Locked : ContextMode.None;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation(animate, rMatrix);\n }\n\n private clearContext(): void {\n this.published.flags = 0;\n this.flags.rotationNeedsUpdate = true;\n this.flags.fixedOrg = false;\n\n this.newFocus = ItemField.X_Item;\n this.unlockAllFields();\n\n if (this.rotationMode !== this.flags.baseRotation)\n this.setRotationMode(this.flags.baseRotation);\n\n if (this.compassMode !== this.flags.baseMode)\n this.setCompassMode(this.flags.baseMode);\n }\n\n /** @internal */\n public setContext(flags: AccuDrawFlags, originP?: Point3d, orientationP?: Matrix3d | Vector3d, deltaP?: Vector3d, distanceP?: number, angleP?: number, transP?: Transform): BentleyStatus {\n this.published.flags |= flags;\n\n if (flags & AccuDrawFlags.SetOrigin && originP) {\n this.published.origin.setFrom(originP);\n\n if (transP)\n transP.multiplyPoint3d(this.published.origin, this.published.origin);\n }\n\n if (deltaP) {\n this.published.delta.setFrom(deltaP);\n\n if (transP)\n this.published.delta.scaleInPlace(transP.matrix.columnX().magnitude());\n }\n\n if (typeof distanceP === \"number\") {\n this.published.distance = distanceP;\n\n if (transP)\n this.published.distance *= transP.matrix.columnX().magnitude();\n }\n\n if (typeof angleP === \"number\")\n this.published.angle = angleP;\n\n if (orientationP) {\n if (flags & AccuDrawFlags.SetXAxis || flags & AccuDrawFlags.SetNormal || flags & AccuDrawFlags.SetXAxis2) {\n this.published.vector.setFrom(orientationP as Vector3d);\n\n if (transP)\n transP.matrix.multiplyVectorInPlace(this.published.vector);\n\n this.published.vector.normalizeInPlace();\n } else if (flags & AccuDrawFlags.SetRMatrix) {\n this.published.rMatrix.setFrom(orientationP as Matrix3d);\n\n if (transP) {\n this.published.rMatrix.multiplyMatrixMatrix(transP.matrix, this.published.rMatrix);\n this.published.rMatrix.normalizeColumnsInPlace();\n }\n }\n }\n\n if (flags) {\n this.onEventCommon();\n if (!this.flags.haveValidOrigin)\n this.setDefaultOrigin(this.currentView);\n }\n\n return this.isEnabled ? BentleyStatus.SUCCESS : BentleyStatus.ERROR;\n }\n\n private onEventCommon(): void {\n if (this.published.flags & AccuDrawFlags.RedrawCompass) {\n this.flags.indexLocked = true;\n this.flags.redrawCompass = true;\n }\n\n if (this.published.flags & AccuDrawFlags.UpdateRotation) {\n this.flags.indexLocked = true;\n this.flags.contextRotMode = ContextMode.XAxis;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n this.flags.indexLocked = true;\n }\n }\n\n /** @internal */\n public onPrimitiveToolInstall(): boolean {\n this._lastSnapDetail = undefined;\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n this.saveLockedCoords();\n // Setup default starting tool state...\n this.currentState = CurrentState.Inactive;\n this.clearContext();\n if (this.alwaysShowCompass)\n this.activate();\n\n return false;\n }\n\n /** @internal */\n public onViewToolInstall(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n\n const tool = IModelApp.toolAdmin.activeTool;\n if (tool && !(tool instanceof ViewTool))\n this.saveState(this.savedStateViewTool); // Save AccuDraw state of tool being suspended...\n\n this.currentState = CurrentState.Deactivated; // Default to disabled for view tools.\n return false;\n }\n\n /** @internal */\n public onViewToolExit(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n this.restoreState(this.savedStateViewTool); // Restore AccuDraw state of suspended tool...\n return false;\n }\n\n /** @internal */\n public onInputCollectorInstall(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n\n const tool = IModelApp.toolAdmin.activeTool;\n if (tool && !(tool instanceof InputCollector))\n this.saveState(this.savedStateInputCollector); // Save AccuDraw state of tool being suspended...\n\n this.currentState = CurrentState.Inactive; // Default to inactive for input collectors.\n return false;\n }\n\n /** @internal */\n public onInputCollectorExit(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n this.restoreState(this.savedStateInputCollector); // Restore AccuDraw state of suspended tool...\n return false;\n }\n\n /** @internal */\n public saveState(stateBuffer: SavedState): void {\n stateBuffer.state = this.currentState;\n stateBuffer.mode = this.compassMode;\n stateBuffer.rotationMode = this.rotationMode;\n stateBuffer.axes.setFrom(this.axes);\n stateBuffer.origin.setFrom(this.origin);\n stateBuffer.auxRotationPlane = this.flags.auxRotationPlane;\n stateBuffer.contextRotMode = this.flags.contextRotMode;\n stateBuffer.fixedOrg = this.flags.fixedOrg;\n stateBuffer.ignoreDataButton = true;\n stateBuffer.ignoreFlags = 0;\n }\n\n /** @internal */\n public restoreState(stateBuffer: SavedState): void {\n if (0 === (stateBuffer.ignoreFlags & AccuDrawFlags.Disable)) {\n this.currentState = stateBuffer.state;\n }\n\n if (0 === (stateBuffer.ignoreFlags & AccuDrawFlags.SetOrigin)) {\n this.origin.setFrom(stateBuffer.origin);\n this.planePt.setFrom(stateBuffer.origin);\n }\n\n if (0 === (stateBuffer.ignoreFlags & AccuDrawFlags.SetRMatrix)) {\n this.axes.setFrom(stateBuffer.axes);\n this.setRotationMode(stateBuffer.rotationMode);\n this.flags.auxRotationPlane = stateBuffer.auxRotationPlane;\n this.flags.contextRotMode = stateBuffer.contextRotMode;\n }\n\n this.flags.fixedOrg = stateBuffer.fixedOrg;\n this.setCompassMode(stateBuffer.mode);\n this.updateRotation();\n\n if (stateBuffer.ignoreDataButton)\n this.flags.ignoreDataButton = (this.flags.inDataPoint ? true : false);\n }\n\n private getCompassPlanePoint(point: Point3d, vp: Viewport): boolean {\n point.setFrom(this.origin); // Isn't this just planePt?!? Maybe at display time it is not setup yet?!?\n if (this._fieldLocked[ItemField.Z_Item] && vp.view.is3d()) {\n if (0.0 !== this.delta.z && !(this.delta.z < Constants.SMALL_ANGLE && this.delta.z > -Constants.SMALL_ANGLE)) {\n point.addScaledInPlace(this.axes.z, this.delta.z);\n return true;\n }\n }\n return false;\n }\n\n private getDisplayTransform(vp: Viewport): Transform {\n const rMatrix = (!this.flags.animateRotation || 0.0 === this._percentChanged) ? this.axes.toMatrix3d() : this.lastAxes.toMatrix3d();\n const origin = new Point3d(); // Compass origin is adjusted by active z-lock...\n this.getCompassPlanePoint(origin, vp);\n const scale = vp.pixelsFromInches(this._compassSizeInches) * vp.getPixelSizeAtPoint(origin);\n\n rMatrix.transposeInPlace();\n rMatrix.scaleColumns(scale, scale, scale, rMatrix);\n return Transform.createRefs(origin, rMatrix);\n }\n\n private setIndexingTolerance(vp: Viewport) {\n const origin = new Point3d(); // Compass origin is adjusted by active z-lock...\n this.getCompassPlanePoint(origin, vp);\n this._tolerance = vp.pixelsFromInches(this._indexToleranceInches) * vp.getPixelSizeAtPoint(origin);\n if (Constants.SMALL_ANGLE > this._tolerance)\n this._tolerance = Constants.SMALL_ANGLE;\n }\n\n private displayAlignments(graphic: GraphicBuilder, vp: Viewport): void {\n const bgColor = vp.view.backgroundColor;\n const colorIndex = this._indexColor.adjustedForContrast(bgColor, 130);\n const origin = new Point3d(); // Compass origin is adjusted by active z-lock...\n // For non-zero Z value draw indicator line from plane point to compass origin...\n if (this.getCompassPlanePoint(origin, vp)) {\n const colorZ = this._frameColor.adjustedForContrast(bgColor, 155);\n graphic.setSymbology(colorZ, colorZ, 2);\n graphic.addLineString([origin, this.origin]);\n graphic.setSymbology(colorZ, colorZ, 4);\n graphic.addPointString([this.origin]);\n }\n\n // Get snap point from AccuSnap/Tentative or use raw point...\n let distance = 0.0;\n let snapPt = this._rawPoint;\n\n const snap = TentativeOrAccuSnap.getCurrentSnap();\n if (snap) {\n snapPt = snap.snapPoint;\n distance = this.point.distance(snapPt);\n }\n\n const isRectMode = (CompassMode.Rectangular === this.compassMode);\n const offsetSnap = ((TentativeOrAccuSnap.isHot || IModelApp.tentativePoint.isActive) && ((this.locked) || (distance > 0.0)));\n\n // XY Offset:\n if (offsetSnap) {\n if (isRectMode) {\n const vec = this.point.vectorTo(this._rawPointOnPlane);\n const xOffset = vec.dotProduct(this.axes.x);\n const yOffset = vec.dotProduct(this.axes.y);\n const xIsOffset = (Math.abs(xOffset) > 1.0);\n const yIsOffset = (Math.abs(yOffset) > 1.0);\n\n if (xIsOffset) {\n if (yIsOffset) { /* both */\n const pts: Point3d[] = [\n this.point,\n this.point.plusScaled(this.axes.y, yOffset),\n this._rawPointOnPlane,\n this.point.plusScaled(this.axes.x, xOffset)];\n pts[4] = pts[0];\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString(pts);\n } else { /* just X */\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this.point, this._rawPointOnPlane]);\n }\n } else if (yIsOffset) { /* just Y */\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this.point, this._rawPointOnPlane]);\n }\n }\n }\n\n const isOnCompassPlane = (!vp.view.is3d() || this.flags.pointIsOnPlane || this.isZLocked(vp));\n\n // Z Offset:\n if (offsetSnap) {\n if (isOnCompassPlane) {\n if (isRectMode) {\n const zOffset = snapPt.distance(this._rawPointOnPlane);\n if (zOffset > Constants.SMALL_ANGLE || zOffset < -Constants.SMALL_ANGLE) {\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this._rawPointOnPlane, this._rawPoint]);\n }\n } else {\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this.point, this._rawPoint]);\n }\n }\n }\n\n // Fat Point:\n if (offsetSnap) {\n graphic.setSymbology(colorIndex, colorIndex, 8);\n graphic.addPointString([this.point]);\n }\n\n let axisIsIndexed = false;\n\n // Axis Indexing:\n if (isRectMode) {\n if ((this.indexed & LockedStates.XY_BM) && (this.flags.pointIsOnPlane || this._fieldLocked[ItemField.Z_Item]))\n axisIsIndexed = true;\n } else {\n if ((this.indexed & LockedStates.ANGLE_BM || this.locked & LockedStates.ANGLE_BM) && (this.flags.pointIsOnPlane || this._fieldLocked[ItemField.Z_Item]))\n axisIsIndexed = true;\n }\n\n if (axisIsIndexed) {\n graphic.setSymbology(colorIndex, colorIndex, 4);\n graphic.addLineString([this.point, this.planePt]);\n }\n\n // Distance Indexing:\n if (this.indexed & LockedStates.DIST_BM) {\n const len = this._tolerance; // Show tick mark based on _GetIndexToleranceInches for length...\n let vec: Vector3d;\n\n if (isRectMode) {\n let index = this.indexed & LockedStates.XY_BM;\n\n if (!index)\n index = this.locked & LockedStates.XY_BM;\n\n vec = (index === LockedStates.X_BM) ? this.axes.x : this.axes.y;\n } else {\n const deltaVec = this.origin.vectorTo(this.point);\n vec = this.axes.z.crossProduct(deltaVec);\n vec.normalizeInPlace();\n }\n\n graphic.setSymbology(colorIndex, colorIndex, 3);\n graphic.addLineString([this.point.plusScaled(vec, len), this.point.plusScaled(vec, -len)]);\n }\n\n // XY Lock:\n if (isRectMode && !axisIsIndexed) {\n const locked = this.locked & LockedStates.XY_BM;\n\n if ((0 !== locked) && isOnCompassPlane) {\n const pts: Point3d[] = [this.point, this.point, this.point];\n\n if (locked & LockedStates.X_BM)\n pts[2].setFrom(this.planePt.plusScaled(this.axes.x, this.delta.x));\n\n if (locked & LockedStates.Y_BM)\n pts[0].setFrom(this.planePt.plusScaled(this.axes.y, this.delta.y));\n\n switch (locked) {\n case LockedStates.X_BM:\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([pts[1], pts[2]]);\n break;\n\n case LockedStates.Y_BM:\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([pts[0], pts[1]]);\n break;\n\n case LockedStates.XY_BM:\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString(pts);\n break;\n }\n }\n }\n\n if (undefined !== this._lastSnapDetail && undefined === snap) {\n if (this._lastSnapDetail.indexed) {\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this.point, this._lastSnapDetail.point]);\n }\n\n graphic.setSymbology(colorIndex, colorIndex, 8, LinePixels.Solid);\n graphic.addPointString([this._lastSnapDetail.point]);\n }\n }\n\n /** @internal */\n public testDecorationHit(id: string): boolean { return id === this._acsPickId; }\n /** @internal */\n public getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined {\n if (!hit.viewport.viewFlags.acsTriad)\n return undefined;\n const geomData = GeomJson.Writer.toIModelJson(PointString3d.create(hit.viewport.view.auxiliaryCoordinateSystem.getOrigin()));\n if (undefined === geomData)\n return undefined;\n const acsGeom: GeometryStreamProps = [geomData];\n return acsGeom;\n }\n\n /** @internal */\n public decorate(context: DecorateContext) {\n if (context.viewport.viewFlags.acsTriad) {\n context.viewport.view.auxiliaryCoordinateSystem.display(context, (ACSDisplayOptions.CheckVisible | ACSDisplayOptions.Active));\n if (undefined === this._acsPickId)\n this._acsPickId = context.viewport.iModel.transientIds.getNext();\n const acsPickBuilder = context.createGraphicBuilder(GraphicType.WorldDecoration, undefined, this._acsPickId);\n const color = ColorDef.blue.adjustedForContrast(context.viewport.view.backgroundColor, 50);\n acsPickBuilder.setSymbology(color, color, 6);\n acsPickBuilder.addPointString([context.viewport.view.auxiliaryCoordinateSystem.getOrigin()]);\n context.addDecorationFromBuilder(acsPickBuilder);\n }\n\n // Make sure this is cleared even if we do nothing...redraw might have been to make compass go away...\n this.flags.redrawCompass = false;\n\n // Check that AccuDraw is enabled...\n if (!this.isActive)\n return;\n\n const vp = context.viewport;\n if (this.currentView !== vp) // Do nothing if AccuDraw is not enabled for this view...\n return;\n\n this.setIndexingTolerance(vp);\n\n // Display indexing lines, distance locks, etc. without compass transform...\n let builder = context.createGraphicBuilder(GraphicType.WorldOverlay);\n this.displayAlignments(builder, vp);\n context.addDecorationFromBuilder(builder);\n\n // Create a new graphics with the compass transform and scale so that compass size is 1.0...\n builder = context.createGraphicBuilder(GraphicType.WorldOverlay, this.getDisplayTransform(vp));\n\n const hasFocus = this.hasInputFocus;\n const bgColor = vp.view.backgroundColor;\n const frameColor = (hasFocus ? this._frameColor : this._frameColorNoFocus).adjustedForContrast(bgColor, 155);\n const fillColor = (hasFocus ? this._fillColor : this._fillColorNoFocus).adjustedForContrast(bgColor, 75);\n const xColor = (hasFocus ? this._xColor : this._frameColorNoFocus).adjustedForContrast(bgColor, 155);\n const yColor = (hasFocus ? this._yColor : this._frameColorNoFocus).adjustedForContrast(bgColor, 155);\n const shadowColor = frameColor;\n\n // Display compass frame...\n builder.setSymbology(shadowColor, fillColor, 1);\n const center = Point3d.createZero();\n\n if (this.flags.animateRotation || 0.0 === this._percentChanged) {\n if (CompassMode.Polar === this.compassMode) {\n const ellipse = Arc3d.createXYEllipse(center, 1, 1);\n builder.addArc(ellipse, true, true);\n builder.addArc(ellipse, false, false);\n } else {\n const pts: Point3d[] = [\n new Point3d(-1.0, 1.0, 0.0),\n new Point3d(1.0, 1.0, 0.0),\n new Point3d(1.0, -1.0, 0.0),\n new Point3d(-1.0, -1.0, 0.0)];\n pts[4] = pts[0].clone();\n builder.addShape(pts);\n builder.addLineString(pts);\n }\n } else {\n let nSides, radius;\n const minSides = 7, maxSides = 24, factor = 1.0 / 5.0;\n\n // if currently animating change to polar need to get larger radius...go between 1.0 && 1.0 * sqrt (2.0)\n if (CompassMode.Polar === this.compassMode) {\n nSides = minSides + Math.floor(maxSides * this._percentChanged);\n radius = 1.0 + factor - (factor * this._percentChanged);\n } else {\n nSides = (maxSides - Math.floor(maxSides * this._percentChanged)) + minSides;\n radius = 1.0 + (factor * this._percentChanged);\n }\n\n let angle = 0.0;\n const delta = (Math.PI * 2) / nSides;\n const pts: Point3d[] = [];\n\n for (let iSide = 0; iSide < nSides; iSide++, angle += delta)\n pts[iSide] = new Point3d(radius * Math.cos(angle), radius * Math.sin(angle), 0.0);\n pts[nSides] = pts[0].clone();\n\n builder.addShape(pts);\n builder.addLineString(pts);\n }\n\n // Display sticky z-lock indicator as frame inset...\n if (this._fieldLocked[ItemField.Z_Item] && this.stickyZLock && vp.view.is3d()) {\n builder.setSymbology(frameColor, fillColor, 1);\n\n if (CompassMode.Polar === this.compassMode) {\n const ellipse = Arc3d.createXYEllipse(center, .5, .5);\n builder.addArc(ellipse, false, false);\n } else {\n const pts: Point3d[] = [\n new Point3d(-0.5, 0.5, 0.0),\n new Point3d(0.5, 0.5, 0.0),\n new Point3d(0.5, -0.5, 0.0),\n new Point3d(-0.5, -0.5, 0.0)];\n pts[4] = pts[0].clone();\n builder.addLineString(pts);\n }\n }\n\n // Display compass center mark...\n builder.setSymbology(frameColor, frameColor, 8);\n builder.addPointString([center]);\n\n // Display positive \"X\" tick...\n builder.setSymbology(xColor, xColor, 4);\n builder.addLineString([new Point3d(1.2, 0.0, 0.0), new Point3d(0.8, 0.0, 0.0)]);\n\n // Display negative \"X\" tick...\n builder.setSymbology(frameColor, frameColor, 1);\n builder.addLineString([new Point3d(-1.2, 0.0, 0.0), new Point3d(-0.8, 0.0, 0.0)]);\n\n // Display positive \"Y\" tick...\n builder.setSymbology(yColor, yColor, 4);\n builder.addLineString([new Point3d(0.0, 1.2, 0.0), new Point3d(0.0, 0.8, 0.0)]);\n\n // Display negative \"Y\" tick...\n builder.setSymbology(frameColor, frameColor, 1);\n builder.addLineString([new Point3d(0.0, -1.2, 0.0), new Point3d(0.0, -0.8, 0.0)]);\n\n context.addDecorationFromBuilder(builder); // add compass as world overlay decorator\n }\n\n private checkRotation(): void {\n this.updateRotation();\n\n if (RotationMode.View === this.rotationMode || !this.flags.lockedRotation)\n return;\n\n const vp = this.currentView;\n if (!vp || vp.isCameraOn)\n return;\n\n const viewZRoot = vp.rotation.getRow(2);\n if (!this.axes.z.isPerpendicularTo(viewZRoot))\n return;\n\n const preferY = (Math.abs(this.axes.x.dotProduct(viewZRoot)) < Math.abs(this.axes.y.dotProduct(viewZRoot)));\n\n // NOTE: Cycle rotation to get one that isn't edge-on...\n switch (this.rotationMode) {\n case RotationMode.Top:\n this.setRotationMode(preferY ? RotationMode.Front : RotationMode.Side);\n break;\n case RotationMode.Front:\n this.setRotationMode(preferY ? RotationMode.Top : RotationMode.Side);\n break;\n case RotationMode.Side:\n this.setRotationMode(preferY ? RotationMode.Top : RotationMode.Front);\n break;\n case RotationMode.ACS:\n switch (this.flags.auxRotationPlane) {\n case RotationMode.Top:\n this.flags.auxRotationPlane = preferY ? RotationMode.Front : RotationMode.Side;\n break;\n case RotationMode.Front:\n this.flags.auxRotationPlane = preferY ? RotationMode.Top : RotationMode.Side;\n break;\n case RotationMode.Side:\n this.flags.auxRotationPlane = preferY ? RotationMode.Top : RotationMode.Front;\n break;\n default:\n return;\n }\n break;\n default:\n return;\n }\n\n this.updateRotation();\n this.flags.baseRotation = this.rotationMode;\n }\n\n private saveLockedCoords(): void {\n if (CompassMode.Polar === this.compassMode) {\n if (this._fieldLocked[ItemField.DIST_Item])\n this.saveCoordinate(ItemField.DIST_Item, this._distance);\n if (this._fieldLocked[ItemField.ANGLE_Item])\n this.saveCoordinate(ItemField.ANGLE_Item, this._angle);\n } else {\n if (this._fieldLocked[ItemField.X_Item])\n this.saveCoordinate(ItemField.X_Item, this.delta.x);\n if (this._fieldLocked[ItemField.Y_Item])\n this.saveCoordinate(ItemField.Y_Item, this.delta.y);\n }\n\n const vp = this.currentView;\n if (vp && vp.view.is3d()) {\n if (this._fieldLocked[ItemField.Z_Item])\n this.saveCoordinate(ItemField.Z_Item, this.delta.z);\n }\n }\n\n /** Called after compass state is changed between the active state and one of the disabled states */\n public onCompassDisplayChange(_state: \"show\" | \"hide\"): void { }\n /** Called after compass mode is changed between polar and rectangular */\n public onCompassModeChange(): void { }\n /** Called after compass rotation is changed */\n public onRotationModeChange(): void { }\n /** Called after input field locked state is changed */\n public onFieldLockChange(_index: ItemField) { }\n /** Called after input field value changes */\n public onFieldValueChange(_index: ItemField) { }\n /** Called after input field keyin status changes */\n public onFieldKeyinStatusChange(_index: ItemField) { }\n /** Called to request focus change to the specified input field */\n public setFocusItem(_index: ItemField) { }\n\n private static getMinPolarMag(origin: Point3d): number {\n return (1.0e-12 * (1.0 + origin.magnitude()));\n }\n\n /** projects cursor onto plane in view, or returns an error */\n private constructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, perpendicular: boolean): BentleyStatus {\n let fromPtP: Point3d;\n let dotProduct: number;\n let distance: number;\n let projectionVector = new Vector3d();\n\n if (perpendicular) {\n if (AccuDraw.useACSContextRotation(vp, true)) { // Project along ACS axis to AccuDraw plane...\n const rMatrix = vp.getAuxCoordRotation(AccuDraw._tempRot);\n const axes = ThreeAxes.createFromMatrix3d(rMatrix);\n this.accountForAuxRotationPlane(axes, this.flags.auxRotationPlane);\n linePlaneIntersect(outPtP, inPtP, axes.z, pointOnPlaneP, normalVectorP, false);\n } else {\n projectionVector = inPtP.vectorTo(pointOnPlaneP);\n distance = projectionVector.dotProduct(normalVectorP);\n inPtP.plusScaled(normalVectorP, distance, outPtP);\n }\n } else {\n const isCamera = vp.isCameraOn;\n if (vp.view.is3d() && isCamera) {\n const cameraPos = vp.view.getEyePoint();\n fromPtP = cameraPos;\n fromPtP.vectorTo(inPtP, projectionVector).normalizeInPlace();\n } else {\n const rMatrix = vp.rotation;\n fromPtP = inPtP;\n rMatrix.getRow(2, projectionVector);\n }\n\n dotProduct = projectionVector.dotProduct(normalVectorP);\n\n if (Math.abs(dotProduct) < Constants.SMALL_DELTA)\n return BentleyStatus.ERROR; // PARALLEL;\n\n distance = (normalVectorP.dotProduct(pointOnPlaneP) - normalVectorP.dotProduct(fromPtP)) / dotProduct;\n\n if (isCamera && distance < Constants.SMALL_DELTA)\n return BentleyStatus.ERROR; // BEHIND_EYE_POINT;\n\n fromPtP.plusScaled(projectionVector, distance, outPtP);\n }\n\n return BentleyStatus.SUCCESS;\n }\n\n /** @internal */\n public softConstructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, isSnap: boolean): boolean {\n if (!vp.isPointAdjustmentRequired) {\n outPtP.setFrom(inPtP);\n return true;\n }\n\n if (isSnap) {\n outPtP.setFrom(inPtP);\n const delta = pointOnPlaneP.vectorTo(outPtP);\n return (Math.abs(normalVectorP.dotProduct(delta)) < Constants.SMALL_DELTA);\n }\n if (BentleyStatus.SUCCESS !== this.constructionPlane(outPtP, inPtP, pointOnPlaneP, normalVectorP, vp, false)) {\n const viewNormal = vp.rotation.getRow(2);\n this.constructionPlane(outPtP, inPtP, pointOnPlaneP, viewNormal, vp, false);\n this.constructionPlane(outPtP, outPtP, pointOnPlaneP, normalVectorP, vp, true);\n return false;\n }\n return true;\n }\n\n /** @internal */\n public hardConstructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, isSnap: boolean): boolean {\n if (!vp.isPointAdjustmentRequired) {\n outPtP.setFrom(inPtP);\n return true;\n }\n\n if (BentleyStatus.SUCCESS !== this.constructionPlane(outPtP, inPtP, pointOnPlaneP, normalVectorP, vp, isSnap)) {\n const viewNormal = vp.rotation.getRow(2);\n this.constructionPlane(outPtP, inPtP, pointOnPlaneP, viewNormal, vp, false);\n this.constructionPlane(outPtP, outPtP, pointOnPlaneP, normalVectorP, vp, true);\n }\n\n return true;\n }\n\n private static allowAxisIndexing(pointIsOnPlane: boolean): boolean {\n // NOTE: Normally we don't want indexing overriding a hot snap location. The\n // exception to this is nearest snap. If the nearest snap is in the plane\n // of the AccuDraw compass, it is confusing not having axis indexing.\n if (!TentativeOrAccuSnap.isHot)\n return true;\n\n if (!pointIsOnPlane)\n return false;\n\n const snapDetail = IModelApp.accuSnap.getCurrSnapDetail();\n return (undefined !== snapDetail && (SnapMode.Nearest === snapDetail.snapMode));\n }\n\n private applyDistanceRoundOff(distance: number, vp: Viewport): number | undefined {\n if (!this._distanceRoundOff.active || !this._distanceRoundOff.units.size)\n return undefined;\n\n let roundValue = this._distanceRoundOff.units.values().next().value!;\n\n if (this._distanceRoundOff.units.size > 1) {\n // NOTE: Set isn't ordered, find smallest entry...\n this._distanceRoundOff.units.forEach((thisRoundValue) => {\n if (thisRoundValue < roundValue)\n roundValue = thisRoundValue;\n });\n\n if (vp.viewDelta.magnitudeXY() < roundValue)\n return undefined; // Smallest rounding value is larger than view...don't use...\n\n const smallScreenDist = 0.0787402; // ~2 mm...\n const pixelSize = vp.getPixelSizeAtPoint(this.origin);\n const screenDist = vp.pixelsFromInches(smallScreenDist) * pixelSize;\n\n this._distanceRoundOff.units.forEach((thisRoundValue) => {\n if (thisRoundValue > roundValue && thisRoundValue < screenDist)\n roundValue = thisRoundValue;\n });\n }\n\n if (roundValue <= 0.0)\n return undefined;\n\n return roundValue * Math.floor((distance / roundValue) + 0.5);\n }\n\n private applyAngleRoundOff(angle: number, distance: number, vp: Viewport): number | undefined {\n if (!this._angleRoundOff.active || !this._angleRoundOff.units.size)\n return undefined;\n\n let roundValue = this._angleRoundOff.units.values().next().value!;\n\n if (this._angleRoundOff.units.size > 1) {\n // NOTE: Set isn't ordered, find smallest entry...\n this._angleRoundOff.units.forEach((thisRoundValue) => {\n if (thisRoundValue < roundValue)\n roundValue = thisRoundValue;\n });\n\n const circumference = 2.0 * Math.PI * distance;\n const roundDist = circumference / ((2.0 * Math.PI) / roundValue);\n\n if (vp.viewDelta.magnitudeXY() < roundDist)\n return undefined; // Smallest rounding value is larger than view...don't use...\n\n const smallScreenDist = 0.0787402; // ~2 mm...\n const pixelSize = vp.getPixelSizeAtPoint(this.origin);\n const screenDist = vp.pixelsFromInches(smallScreenDist) * pixelSize;\n\n this._angleRoundOff.units.forEach((thisRoundValue) => {\n const thisRoundDist = circumference / ((2.0 * Math.PI) / thisRoundValue);\n if (thisRoundValue > roundValue && thisRoundDist < screenDist)\n roundValue = thisRoundValue;\n });\n }\n\n if (roundValue <= 0.0)\n return undefined;\n\n return roundValue * Math.floor((angle / roundValue) + 0.5);\n }\n\n /** @internal */\n public fixPointPolar(vp: Viewport): void {\n let angleChanged = false;\n let distChanged = false;\n const zLocked = this.isZLocked(vp);\n const xyCorrection = new Point3d();\n\n this.planePt.setFrom(this.origin);\n\n if (zLocked && !(this.delta.z < Constants.SMALL_ANGLE && this.delta.z > -Constants.SMALL_ANGLE))\n this.planePt.addScaledInPlace(this.axes.z, this.delta.z);\n\n if (this.locked & LockedStates.VEC_BM) {\n if (!TentativeOrAccuSnap.isHot) {\n const normVec = new Vector3d();\n this.planeByVectorAndView(normVec, this.vector, vp);\n this.softConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.planePt, normVec, vp, false);\n } else {\n this._rawPointOnPlane.setFrom(this._rawPoint);\n this.flags.pointIsOnPlane = false;\n }\n } else {\n if (zLocked) {\n this.hardConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.planePt, this.axes.z, vp, TentativeOrAccuSnap.isHot);\n this.flags.pointIsOnPlane = true;\n } else {\n this.flags.pointIsOnPlane = (this.softConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.planePt, this.axes.z, vp, TentativeOrAccuSnap.isHot) || !!(this.locked & LockedStates.XY_BM));\n }\n }\n\n let delta: Vector3d;\n if (zLocked)\n delta = this.planePt.vectorTo(this._rawPointOnPlane);\n else\n delta = this.origin.vectorTo(this._rawPointOnPlane);\n\n const minPolarMag = AccuDraw.getMinPolarMag(this.origin);\n\n let mag: number;\n if (this.locked & LockedStates.VEC_BM) {\n mag = delta.dotProduct(this.vector);\n xyCorrection.x -= delta.x - mag * this.vector.x;\n xyCorrection.y -= delta.y - mag * this.vector.y;\n xyCorrection.z -= delta.z - mag * this.vector.z;\n this.vector.scale(mag, delta);\n if (mag < 0.0)\n mag = -mag;\n if (mag < minPolarMag) {\n this.handleDegeneratePolarCase();\n return;\n }\n\n this.flags.pointIsOnPlane = (Math.abs(this.axes.z.dotProduct(delta)) < Constants.SMALL_DELTA);\n } else {\n mag = delta.magnitude();\n if (mag < minPolarMag) {\n this.handleDegeneratePolarCase();\n return;\n }\n }\n\n const newPt = this._rawPointOnPlane.plus(xyCorrection);\n xyCorrection.setZero();\n\n // measure angle\n const rotVec = new Point3d();\n rotVec.x = this.axes.x.dotProduct(delta);\n\n // NOTE: Always return angle relative to compass plane...used to return \"angle out of plane\" for points off plane.\n rotVec.y = this.axes.y.dotProduct(delta);\n this._angle = Math.atan2(rotVec.y, rotVec.x);\n\n // constrain angle\n if (this.flags.pointIsOnPlane && !(this.locked & LockedStates.VEC_BM)) {\n if (!TentativeOrAccuSnap.isHot) {\n const newAngle = this.applyAngleRoundOff(this._angle, mag, vp);\n if (undefined !== newAngle) {\n angleChanged = true;\n this._angle = newAngle;\n xyCorrection.x += Math.cos(this._angle) * mag - rotVec.x;\n xyCorrection.y += Math.sin(this._angle) * mag - rotVec.y;\n rotVec.x = Math.cos(this._angle) * mag;\n rotVec.y = Math.sin(this._angle) * mag;\n }\n }\n\n if (this.locked & LockedStates.X_BM || (AccuDraw.allowAxisIndexing(this.flags.pointIsOnPlane) && (rotVec.x < this._tolerance && rotVec.x > - this._tolerance) && !this.flags.indexLocked && this.axisIndexing)) {\n this.indexed |= LockedStates.X_BM; // indexed in X\n\n xyCorrection.x -= rotVec.x;\n rotVec.x = 0.0;\n\n if (TentativeOrAccuSnap.isHot)\n xyCorrection.z -= delta.dotProduct(this.axes.z);\n\n this._angle = (rotVec.y < 0.0) ? -Math.PI / 2.0 : Math.PI / 2.0;\n angleChanged = true;\n }\n\n if (this.locked & LockedStates.Y_BM || (AccuDraw.allowAxisIndexing(this.flags.pointIsOnPlane) && (rotVec.y < this._tolerance && rotVec.y > -this._tolerance) && !this.flags.indexLocked && this.axisIndexing)) {\n if (this.indexed & LockedStates.X_BM) { // both indexed\n this.handleDegeneratePolarCase();\n return;\n }\n\n this.indexed |= LockedStates.Y_BM; // indexed in Y\n xyCorrection.y -= rotVec.y;\n\n if (TentativeOrAccuSnap.isHot)\n xyCorrection.z -= delta.dotProduct(this.axes.z);\n\n rotVec.y = 0.0;\n this._angle = (rotVec.x < 0.0) ? Math.PI : 0.0;\n angleChanged = true;\n }\n\n if (angleChanged) {\n this.axes.x.scale(rotVec.x, delta);\n delta.addScaledInPlace(this.axes.y, rotVec.y);\n mag = delta.magnitude();\n if (mag < minPolarMag) {\n this.handleDegeneratePolarCase();\n return;\n }\n }\n }\n\n // constrain distance\n const oldMag = mag;\n\n if (this.locked & LockedStates.DIST_BM) { // distance locked\n mag = this._distance;\n distChanged = true;\n this.indexed &= ~LockedStates.DIST_BM;\n } else if (!TentativeOrAccuSnap.isHot) { // if non-snap, try rounding and aligning\n const newDist = this.applyDistanceRoundOff(mag, vp);\n if (undefined !== newDist) {\n distChanged = true;\n mag = newDist;\n }\n\n if (Geometry.isDistanceWithinTol(mag - this._lastDistance, this._tolerance) && !this.flags.indexLocked && this.distanceIndexing) {\n this.indexed |= LockedStates.DIST_BM; // distance indexed\n mag = this._lastDistance;\n distChanged = true;\n }\n }\n\n // project to corrected point\n newPt.plus3Scaled(this.axes.x, xyCorrection.x, this.axes.y, xyCorrection.y, this.axes.z, xyCorrection.z, newPt);\n\n // display index highlight even if snapped\n if (TentativeOrAccuSnap.isHot && this.flags.pointIsOnPlane) {\n if (Math.abs(rotVec.x) < Constants.SMALL_ANGLE)\n this.indexed |= LockedStates.X_BM;\n else if (Math.abs(rotVec.y) < Constants.SMALL_ANGLE)\n this.indexed |= LockedStates.Y_BM;\n }\n\n if (distChanged) {\n if (mag < minPolarMag && mag > -minPolarMag) {\n this.handleDegeneratePolarCase();\n return;\n }\n\n // adjust corrected point for distance indexing\n newPt.addScaledInPlace(delta, mag / oldMag - 1.0);\n delta.scaleInPlace(mag / oldMag);\n }\n\n // save corrected point\n this.point.setFrom(newPt);\n\n // finish up\n this._distance = mag;\n\n if (!(this.locked & LockedStates.VEC_BM))\n delta.scale(1.0 / mag, this.vector);\n\n if (this.locked & LockedStates.XY_BM)\n this.indexed |= this.locked;\n\n if (!zLocked)\n this.delta.z = (this.flags.pointIsOnPlane) ? 0.0 : delta.dotProduct(this.axes.z);\n }\n\n /** @internal */\n public fixPointRectangular(vp: Viewport): void {\n const zLocked = this.isZLocked(vp);\n const xyCorrection = new Vector3d();\n\n this.planePt.setFrom(this.origin);\n this.indexed = 0;\n\n if (zLocked) {\n this.flags.pointIsOnPlane = (this.delta.z < Constants.SMALL_ANGLE && this.delta.z > -Constants.SMALL_ANGLE);\n if (!this.flags.pointIsOnPlane)\n this.planePt.addScaledInPlace(this.axes.z, this.delta.z);\n this.hardConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.planePt, this.axes.z, vp, TentativeOrAccuSnap.isHot);\n } else {\n this.flags.pointIsOnPlane = this.softConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.origin, this.axes.z, vp, TentativeOrAccuSnap.isHot);\n }\n\n const trueDelta = this.origin.vectorTo(this._rawPointOnPlane);\n this._rawDelta.x = trueDelta.dotProduct(this.axes.x);\n this._xIsNegative = (this._rawDelta.x < -Constants.SMALL_ANGLE);\n\n this._rawDelta.y = trueDelta.dotProduct(this.axes.y);\n this._yIsNegative = (this._rawDelta.y < -Constants.SMALL_ANGLE);\n\n if (!zLocked)\n this.delta.z = (this.flags.pointIsOnPlane) ? 0.0 : trueDelta.dotProduct(this.axes.z);\n\n if (AccuDraw.allowAxisIndexing(this.flags.pointIsOnPlane)) {\n if (!(this.locked & LockedStates.X_BM)) { // not locked in x\n const roundedDeltaX = this.applyDistanceRoundOff(this._rawDelta.x, vp); // round x\n if (undefined !== roundedDeltaX) {\n xyCorrection.x = roundedDeltaX - this._rawDelta.x;\n this._rawDelta.x = roundedDeltaX;\n }\n\n if (this._rawDelta.x < this._tolerance && this._rawDelta.x > -this._tolerance &&\n !this.flags.indexLocked && this.axisIndexing) { // index x\n this.indexed |= LockedStates.X_BM; // indexed in X\n xyCorrection.x -= this._rawDelta.x;\n this._rawDelta.x = 0.0;\n }\n }\n if (!(this.locked & LockedStates.Y_BM)) {\n const roundedDeltaY = this.applyDistanceRoundOff(this._rawDelta.y, vp); // round y\n if (undefined !== roundedDeltaY) {\n xyCorrection.y = roundedDeltaY - this._rawDelta.y;\n this._rawDelta.y = roundedDeltaY;\n }\n\n if (this._rawDelta.y < this._tolerance && this._rawDelta.y > -this._tolerance &&\n !this.flags.indexLocked && this.axisIndexing) { // index y\n this.indexed |= LockedStates.Y_BM; // indexed in Y\n xyCorrection.y -= this._rawDelta.y;\n this._rawDelta.y = 0.0;\n }\n }\n }\n\n if (this.locked & LockedStates.X_BM) {\n if (this.rawDeltaIsValid(this._rawDelta.x)) {\n // cursor changed sides, reverse value\n if ((this.delta.x < -Constants.SMALL_ANGLE) !== this._xIsNegative &&\n this.smartKeyin && this._keyinStatus[ItemField.X_Item] === KeyinStatus.Partial &&\n !this._xIsExplicit)\n this.delta.x = -this.delta.x;\n }\n\n xyCorrection.x = this.delta.x - this._rawDelta.x;\n } else {\n const lastDist = (this._rawDelta.x < 0.0) ? (-this._lastDistance) : this._lastDistance;\n\n if (!TentativeOrAccuSnap.isHot && ((this.locked & LockedStates.Y_BM) || (this.indexed & LockedStates.Y_BM)) && !(this.indexed & LockedStates.X_BM) &&\n Geometry.isDistanceWithinTol(this._rawDelta.x - lastDist, this._tolerance) &&\n !this.flags.indexLocked && this.distanceIndexing) {\n xyCorrection.x += lastDist - this._rawDelta.x;\n this.delta.x = lastDist;\n this.indexed |= LockedStates.DIST_BM;\n } else {\n this.delta.x = this._rawDelta.x;\n }\n }\n\n if (this.locked & LockedStates.Y_BM) {\n if (this.rawDeltaIsValid(this._rawDelta.y)) {\n // cursor changed sides, reverse value\n if ((this.delta.y < -Constants.SMALL_ANGLE) !== this._yIsNegative &&\n this.smartKeyin && this._keyinStatus[ItemField.Y_Item] === KeyinStatus.Partial &&\n !this._yIsExplicit)\n this.delta.y = -this.delta.y;\n }\n\n xyCorrection.y = this.delta.y - this._rawDelta.y;\n } else {\n const lastDist = (this._rawDelta.y < Constants.SMALL_ANGLE) ? - this._lastDistance : this._lastDistance;\n\n if (!TentativeOrAccuSnap.isHot && ((this.locked & LockedStates.X_BM) || (this.indexed & LockedStates.X_BM)) && !(this.indexed & LockedStates.Y_BM) &&\n Geometry.isDistanceWithinTol(this._rawDelta.y - lastDist, this._tolerance) &&\n !this.flags.indexLocked && this.distanceIndexing) {\n xyCorrection.y += lastDist - this._rawDelta.y;\n this.delta.y = lastDist;\n this.indexed |= LockedStates.DIST_BM;\n } else {\n this.delta.y = this._rawDelta.y;\n }\n }\n\n this._rawPointOnPlane.plus2Scaled(this.axes.x, xyCorrection.x, this.axes.y, xyCorrection.y, this.point);\n\n if (zLocked && !this.flags.pointIsOnPlane)\n this.hardConstructionPlane(this.point, this.point, this.planePt, this.axes.z, vp, TentativeOrAccuSnap.isHot);\n\n if ((this.locked & LockedStates.X_BM && this.delta.x === 0.0) || (this.locked & LockedStates.Y_BM && this.delta.y === 0.0)) {\n this.indexed |= this.locked; // to display index highlight\n } else if (TentativeOrAccuSnap.isHot) {\n if (Math.abs(this.delta.x) < Constants.SMALL_ANGLE)\n this.indexed |= LockedStates.X_BM;\n else if (Math.abs(this.delta.y) < Constants.SMALL_ANGLE)\n this.indexed |= LockedStates.Y_BM;\n }\n\n const lock = this.locked & LockedStates.XY_BM;\n const index = this.indexed & LockedStates.XY_BM;\n\n if (lock === LockedStates.Y_BM && index !== LockedStates.X_BM) {\n if (this._keyinStatus[ItemField.Y_Item] !== KeyinStatus.Dynamic) {\n if (Math.abs(this._rawDelta.x) < this._threshold)\n return;\n }\n\n this.newFocus = ItemField.X_Item;\n this.dontMoveFocus = false;\n } else if (lock === LockedStates.X_BM && index !== LockedStates.Y_BM) {\n if (this._keyinStatus[ItemField.X_Item] !== KeyinStatus.Dynamic) {\n if (Math.abs(this._rawDelta.y) < this._threshold)\n return;\n }\n\n this.newFocus = ItemField.Y_Item;\n this.dontMoveFocus = false;\n } else {\n this.newFocus = ((Math.abs(this._rawDelta.x) > Math.abs(this._rawDelta.y)) ? ItemField.X_Item : ItemField.Y_Item);\n }\n }\n\n private fixPointLastSnapDetail(vp: ScreenViewport): void {\n if (undefined === this._lastSnapDetail)\n return;\n\n this._lastSnapDetail.indexed = undefined;\n if (!this.axisIndexing || this.flags.indexLocked || LockedStates.NONE_LOCKED !== this.locked || this.indexed & LockedStates.DIST_BM || TentativeOrAccuSnap.isHot)\n return; // Don't adjust point if already adjusted or indexing is disabled...\n\n const minMag = AccuDraw.getMinPolarMag(this.point);\n const tmpVec = Vector3d.createStartEnd(this.planePt, this.point);\n if (tmpVec.magnitude() < minMag)\n return; // Current point is at compass origin...\n\n if (!this.hardConstructionPlane(this._rawPointOnPlane, this._lastSnapDetail.point, this.point, this.axes.z, vp, true))\n return;\n\n const snapDelta = this._rawPointOnPlane.vectorTo(this.point);\n if (snapDelta.magnitude() < minMag)\n return; // Haven't moved far enough away from snap point...\n\n const snapRayX = Ray3d.createCapture(this._rawPointOnPlane, this._lastSnapDetail.matrix.rowX());\n const snapRayY = Ray3d.createCapture(this._rawPointOnPlane, this._lastSnapDetail.matrix.rowY());\n const snapDeltaX = snapDelta.dotProduct(snapRayX.direction);\n const snapDeltaY = snapDelta.dotProduct(snapRayY.direction);\n\n let rayS;\n if (snapDeltaX < this._tolerance && snapDeltaX > -this._tolerance)\n rayS = snapRayY;\n else if (snapDeltaY < this._tolerance && snapDeltaY > -this._tolerance)\n rayS = snapRayX;\n else\n return;\n\n const rayA = Ray3d.createCapture(this.planePt, tmpVec);\n const detail = Ray3d.closestApproachRay3dRay3d(rayA, rayS);\n if (CurveCurveApproachType.Intersection !== detail.approachType)\n return;\n\n this.planePt.vectorTo(detail.detailA.point, tmpVec);\n Point2d.create(tmpVec.dotProduct(this.axes.x), tmpVec.dotProduct(this.axes.y), this._rawDelta);\n const xyCorrection = new Vector2d();\n\n if (this.indexed & LockedStates.X_BM) {\n xyCorrection.x -= this._rawDelta.x;\n this._rawDelta.x = 0.0;\n } else if (this.indexed & LockedStates.Y_BM) {\n xyCorrection.y -= this._rawDelta.y;\n this._rawDelta.y = 0.0;\n }\n\n if (this._rawDelta.magnitude() < minMag)\n return; // Don't accept adjustment back to compass origin...\n\n detail.detailA.point.plus2Scaled(this.axes.x, xyCorrection.x, this.axes.y, xyCorrection.y, this._rawPointOnPlane);\n if (this.point.distance(this._rawPointOnPlane) > (1.5 * this._tolerance))\n return; // Don't accept adjustment if distance is too great such as from nearly parallel vectors...\n\n if (CompassMode.Polar === this.compassMode) {\n this._distance = this.origin.distance(this._rawPointOnPlane);\n } else {\n this.delta.x = this._rawDelta.x;\n this.delta.y = this._rawDelta.y;\n }\n\n this.point.setFrom(this._rawPointOnPlane);\n this._lastSnapDetail.indexed = true;\n }\n\n private fixPoint(pointActive: Point3d, vp: ScreenViewport): void {\n if (this.isActive && ((vp !== this.currentView) || this.flags.rotationNeedsUpdate)) {\n this.currentView = vp;\n\n if (!(this.locked & LockedStates.ANGLE_BM || this._fieldLocked[ItemField.Z_Item])) {\n // origin not locked down...may change when vie changes...\n if (!this.flags.haveValidOrigin)\n this.setDefaultOrigin(vp);\n\n // in a view based rotation, and the view has changed, so update the rotation...\n if (!this.flags.lockedRotation) {\n this.updateRotation();\n this.flags.rotationNeedsUpdate = false;\n }\n }\n }\n if (this.isInactive || this.isDeactivated) {\n this.point.setFrom(pointActive);\n this.currentView = vp;\n this.processHints();\n return;\n }\n if (this.isActive) {\n this._rawPoint.setFrom(pointActive);\n this.currentView = vp;\n this.flags.dialogNeedsUpdate = true;\n\n if (TentativeOrAccuSnap.isHot && CompassMode.Polar === this.compassMode)\n this.indexed = this.locked;\n else\n this.indexed = LockedStates.NONE_LOCKED;\n\n if (CompassMode.Polar === this.compassMode)\n this.fixPointPolar(vp);\n else\n this.fixPointRectangular(vp);\n\n this.fixPointLastSnapDetail(vp);\n\n pointActive.setFrom(this.point);\n } else if (CompassMode.Rectangular === this.compassMode) {\n if (this._fieldLocked[ItemField.X_Item])\n pointActive.x = this.delta.x;\n\n if (this._fieldLocked[ItemField.Y_Item])\n pointActive.y = this.delta.y;\n\n if (this._fieldLocked[ItemField.Z_Item])\n pointActive.z = this.delta.z;\n }\n }\n\n /** @internal */\n public refreshDecorationsAndDynamics(): void {\n // Immediately process hints and show dynamics using adjusted point when not called from button down...\n if (!this.flags.inDataPoint)\n this.processHints();\n\n // Make sure AccuDraw updates its decorations...\n if (undefined !== this.currentView)\n this.currentView.invalidateDecorations();\n\n // Make sure active tool updates its dynamics. NOTE: Need point adjusted for new locks, etc.\n IModelApp.toolAdmin.updateDynamics(undefined, undefined, true);\n }\n\n /** @internal */\n public upgradeToActiveState(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n\n if (!this.isInactive)\n return false;\n\n const vp = this.currentView;\n if (!vp || 1.0 !== vp.view.getAspectRatioSkew())\n return false; // Disallow AccuDraw being enabled for exaggerated views...\n\n // NOTE: If ACS Plane lock setup initial and base rotation to ACS...\n if (vp && AccuDraw.useACSContextRotation(vp, false)) {\n this.setRotationMode(RotationMode.ACS);\n this.flags.baseRotation = RotationMode.ACS;\n this.flags.auxRotationPlane = RotationMode.Top;\n }\n\n if (this.published.flags & AccuDrawFlags.SmartRotation) {\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined !== snap) {\n const rotation = AccuDraw.getSnapRotation(snap, vp);\n if (undefined !== rotation) {\n this.setContextRotation(rotation, true, false);\n this.changeBaseRotationMode(RotationMode.Context);\n }\n }\n }\n\n this.checkRotation();\n\n // Compass will jump to correct location when fixPoint is called...but we don't want to see the jump...\n if (!this.flags.haveValidOrigin)\n this.setDefaultOrigin(vp);\n\n // Initialize rawPoint data...invalid for alignments until next fixPoint...\n this._rawPoint.setFrom(this.point);\n this._rawPointOnPlane.setFrom(this.point);\n\n // Upgrade state to enabled...want compass to display...\n this.currentState = CurrentState.Active;\n\n return false;\n }\n\n /** @internal */\n public downgradeInactiveState(): boolean {\n if (!this.isEnabled)\n return false;\n this.onEventCommon();\n if (!this.isActive)\n return false;\n // Downgrade state back to inactive...\n this.currentState = CurrentState.Inactive;\n return false;\n }\n\n /** @internal */\n public onBeginDynamics(): boolean { return this.upgradeToActiveState(); }\n /** @internal */\n public onEndDynamics(): boolean { return this.downgradeInactiveState(); }\n\n /** Can be called by sub-classes as the default implementation of onMotion.\n * @see [[onMotion]]\n * @note Input fields are expected to call [[AccuDrawShortcuts.itemFieldNewInput]] when the user enters a value that is not a shortcut\n * and call [[AccuDrawShortcuts.itemFieldCompletedInput]] when a value is accepted, such as when focusing out of the field. This is\n * required for processMotion to correctly handle updating dynamic field values to reflect the current cursor location.\n */\n public processMotion(): void {\n if (this.flags.dialogNeedsUpdate || !this.isActive) {\n if (this.isActive && this.smartKeyin) {\n // NOTE: fixPointRectangular sets newFocus to either x or y based on which axis is closer to the input point...\n if (CompassMode.Rectangular === this.compassMode && !this.dontMoveFocus && !this.getFieldLock(this.newFocus) && this.hasInputFocus)\n this.setFocusItem(this.newFocus);\n }\n\n const sendDynamicFieldValueChange = (item: ItemField): void => {\n if (KeyinStatus.Dynamic === this.getKeyinStatus(item))\n this.onFieldValueChange(item);\n };\n\n // NOTE: Shows the current deltas for rectangular mode when active and current coordinate when not active...\n sendDynamicFieldValueChange(ItemField.X_Item);\n sendDynamicFieldValueChange(ItemField.Y_Item);\n sendDynamicFieldValueChange(ItemField.Z_Item);\n sendDynamicFieldValueChange(ItemField.ANGLE_Item);\n sendDynamicFieldValueChange(ItemField.DIST_Item);\n }\n }\n\n /** Implemented by sub-classes to update ui fields to show current deltas or coordinates when inactive.\n * Should also choose active x or y input field in rectangular mode based on cursor position when\n * axis isn't locked to support \"smart lock\".\n * @see [[processMotion]]\n */\n public onMotion(_ev: BeButtonEvent): void { }\n\n /** @internal */\n public onPreButtonEvent(ev: BeButtonEvent): boolean {\n if (BeButton.Reset === ev.button && !ev.isDown && !ev.isDragging) {\n if (IModelApp.tentativePoint.isActive && this.isActive) {\n IModelApp.tentativePoint.clear(true);\n this.refreshDecorationsAndDynamics();\n return true;\n }\n\n if (this.isEnabled)\n this.onEventCommon();\n return false;\n }\n\n if (BeButton.Data !== ev.button || !ev.isDown || !this.isEnabled)\n return false;\n\n this.onEventCommon();\n this.flags.inDataPoint = true;\n if (this.currentState < CurrentState.Inactive)\n return false;\n if (!this.currentView)\n this.currentView = ev.viewport;\n this.updateRotation();\n return false;\n }\n\n /** @internal */\n public onPostButtonEvent(ev: BeButtonEvent): boolean {\n if (BeButton.Data !== ev.button || !ev.isDown || !this.isEnabled) {\n this._lastSnapDetail = undefined;\n return false;\n }\n\n this.onEventCommon();\n\n if (this.flags.ignoreDataButton) {\n // NOTE: Ignore this data point, was used to terminate a viewing command or input collector...\n this.flags.ignoreDataButton = false;\n } else if (!this.flags.fixedOrg && this.currentState >= CurrentState.Inactive) {\n /* set origin to last point placed unless its being set elsewhere */\n if (((!this.contextSensitive &&\n !(this.published.flags & (AccuDrawFlags.AlwaysSetOrigin ^ AccuDrawFlags.SetOrigin))) ||\n !(this.published.flags & AccuDrawFlags.SetOrigin))) {\n this.published.flags |= AccuDrawFlags.SetOrigin;\n\n if (this.currentState >= CurrentState.Inactive)\n this.published.origin.setFrom(ev.point);\n else\n this.published.origin.setFrom(this.point);\n }\n\n this.saveLockedCoords();\n this.processHints();\n\n if (this.currentState >= CurrentState.Inactive)\n this.updateRotation();\n }\n\n this.flags.inDataPoint = false;\n this.flags.indexLocked = false;\n return false;\n }\n\n /** @internal */\n public onTentative(): boolean {\n if (this.isActive || this.isInactive)\n this.grabInputFocus(); // AccuDraw gets input focus on a tentative\n\n return false;\n }\n\n private intersectXYCurve(snap: SnapDetail, curve: CurvePrimitive, usePointOnSnap: boolean) {\n if (undefined === this.currentView)\n return;\n\n const curveSegment = snap.getCurvePrimitive(); // Get single segment of linestring/shape...\n if (undefined === curveSegment)\n return;\n\n const worldToView = this.currentView.worldToViewMap.transform0;\n const detail = CurveCurve.intersectionProjectedXYPairs(worldToView, usePointOnSnap ? curveSegment : curve, true, usePointOnSnap ? curve : curveSegment, true);\n if (0 === detail.length)\n return;\n\n let closeIndex = 0;\n if (detail.length > 1) {\n const snapPt = worldToView.multiplyPoint3d(snap.getPoint(), 1);\n let lastDist: number | undefined;\n\n for (let i = 0; i < detail.length; i++) {\n const testPt = worldToView.multiplyPoint3d(detail[i].detailA.point, 1);\n const testDist = snapPt.realDistanceXY(testPt);\n\n if (undefined !== testDist && (undefined === lastDist || testDist < lastDist)) {\n lastDist = testDist;\n closeIndex = i;\n }\n }\n }\n\n snap.setSnapPoint(detail[closeIndex].detailA.point, SnapHeat.NotInRange);\n }\n\n private intersectLine(snap: SnapDetail, linePt: Point3d, unitVec: Vector3d) {\n const vec = Vector3d.createStartEnd(linePt, snap.getPoint());\n const endPt = linePt.plusScaled(unitVec, vec.dotProduct(unitVec));\n const cpLine = LineSegment3d.create(linePt, endPt);\n this.intersectXYCurve(snap, cpLine, true); // Get point on snapped curve, not AccuDraw axis. Snap point isn't required to be in AccuDraw plane when Z isn't locked.\n }\n\n private intersectCircle(snap: SnapDetail, center: Point3d, normal: Vector3d, radius: number) {\n const matrix = Matrix3d.createRigidHeadsUp(normal);\n const vector0 = matrix.columnX();\n const vector90 = matrix.columnY();\n vector0.scaleToLength(radius, vector0);\n vector90.scaleToLength(radius, vector90);\n const cpArc = Arc3d.create(center, vector0, vector90);\n this.intersectXYCurve(snap, cpArc, false); // Get point on AccuDraw distance circle, not snapped curve. Want to preserve distance constraint with apparent intersection in XY.\n }\n\n /** @internal */\n public onSnap(snap: SnapDetail): boolean {\n // If accudraw is locked, adjust near snap point to be the nearest point on this element, CONSTRAINED by the accudraw lock.\n if (!this.isActive || !this.locked)\n return false;\n\n if (SnapMode.Nearest !== snap.snapMode)\n return false;\n\n if (!snap.primitive)\n return false;\n\n switch (this.locked) {\n case LockedStates.VEC_BM: {\n this.intersectLine(snap, this.origin, this.vector);\n break;\n }\n\n case LockedStates.X_BM: {\n const refPt = (CompassMode.Rectangular === this.compassMode) ? this.planePt.plusScaled(this.axes.x, this.delta.x) : this.origin;\n this.intersectLine(snap, refPt, this.axes.y);\n break;\n }\n\n case LockedStates.Y_BM: {\n const refPt = (CompassMode.Rectangular === this.compassMode) ? this.planePt.plusScaled(this.axes.y, this.delta.y) : this.origin;\n this.intersectLine(snap, refPt, this.axes.x);\n break;\n }\n\n case LockedStates.DIST_BM: {\n this.intersectCircle(snap, this.origin, this.axes.z, this._distance);\n break;\n }\n }\n\n return false;\n }\n\n /** @internal */\n public onSelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void {\n // In case previous is closing, always update AccuDraw to current view...\n if (undefined !== this.currentView && this.currentView === previous)\n this.currentView = current;\n\n // Reset AccuDraw when iModel or view type changes...\n if (undefined !== current && undefined !== previous &&\n (current.view.classFullName === previous.view.classFullName) &&\n (current.view.iModel === previous.view.iModel))\n return;\n\n this._acsPickId = undefined;\n this.currentView = undefined;\n this.flags.redrawCompass = false;\n\n this.flags.baseRotation = RotationMode.View;\n this.flags.auxRotationPlane = RotationMode.Top;\n this.flags.rotationNeedsUpdate = true;\n\n this.flags.haveValidOrigin = false;\n this.flags.indexLocked = false;\n this.flags.bearingFixToPlane2D = false;\n\n this.setRotationMode(RotationMode.View);\n this.updateRotation();\n\n this.saveState(this.savedStateViewTool);\n this.saveState(this.savedStateInputCollector);\n }\n\n private doProcessHints(): void {\n if (!this.floatingOrigin) {\n if (this.published.flags & AccuDrawFlags.SetOrigin)\n this.unlockAllFields();\n return;\n }\n\n // Set Context Origin\n if (this.published.flags & AccuDrawFlags.SetOrigin) {\n if (this.floatingOrigin) {\n this.origin.setFrom(this.published.origin);\n this.point.setFrom(this.origin);\n this.planePt.setFrom(this.origin);\n }\n this.flags.haveValidOrigin = true;\n this.setLastPoint(this.origin);\n this.unlockAllFields();\n this.updateRotation();\n }\n\n if (!this.contextSensitive)\n return;\n\n // Mode -- Polar or Rectangular\n if (this.published.flags & (AccuDrawFlags.SetModePolar | AccuDrawFlags.SetModeRect)) {\n if (this.compassMode !== ((this.published.flags & AccuDrawFlags.SetModePolar) ? CompassMode.Polar : CompassMode.Rectangular))\n this.changeCompassMode();\n }\n\n // Fixed Origin\n if (this.published.flags & AccuDrawFlags.FixedOrigin)\n this.flags.fixedOrg = true;\n\n // Save Distance\n if (this.published.flags & (AccuDrawFlags.SetDistance | AccuDrawFlags.LockDistance))\n this.saveCoordinate(ItemField.DIST_Item, this.published.distance);\n\n const vp = this.currentView;\n // Do Context Rotation\n if (this.published.flags & AccuDrawFlags.SetRMatrix) {\n this.axes.fromMatrix3d(this.published.rMatrix);\n this.flags.lockedRotation = true;\n this.flags.contextRotMode = ContextMode.Locked;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n } else if (this.published.flags & AccuDrawFlags.SetXAxis) {\n this.axes.x.setFrom(this.published.vector);\n this.flags.contextRotMode = ContextMode.XAxis;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n } else if (this.published.flags & AccuDrawFlags.SetXAxis2) {\n this.axes.x.setFrom(this.published.vector);\n this.flags.contextRotMode = ContextMode.XAxis2;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n } else if (this.published.flags & AccuDrawFlags.SetNormal) {\n if (vp && vp.view.is3d()) {\n this.axes.z.setFrom(this.published.vector);\n this.flags.contextRotMode = ContextMode.ZAxis;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n }\n } else if (this.published.flags & AccuDrawFlags.OrientACS) {\n this.flags.lockedRotation = true;\n this.flags.baseRotation = RotationMode.ACS;\n this.setRotationMode(RotationMode.ACS);\n this.updateRotation();\n } else if (this.isInactive || (this.published.flags & AccuDrawFlags.OrientDefault)) {\n this.setRotationMode(this.flags.baseRotation);\n this.updateRotation();\n }\n\n // Lock Items\n switch (this.compassMode) {\n case CompassMode.Polar:\n if (this.published.flags & AccuDrawFlags.LockDistance) {\n this._distance = this.published.distance;\n this.distanceLock(true, true);\n }\n\n if (this.published.flags & AccuDrawFlags.LockAngle) {\n this.updateVector(this.published.angle);\n this.indexed = LockedStates.NONE_LOCKED;\n this.angleLock();\n this.saveCoordinate(ItemField.ANGLE_Item, this.published.angle);\n }\n break;\n\n case CompassMode.Rectangular:\n if ((this.published.flags & AccuDrawFlags.Lock_X)) {\n this.locked |= LockedStates.X_BM;\n this.delta.x = this.published.delta.x;\n this.setFieldLock(ItemField.X_Item, true);\n this.saveCoordinate(ItemField.X_Item, this.published.delta.x);\n }\n\n if ((this.published.flags & AccuDrawFlags.Lock_Y)) {\n this.locked |= LockedStates.Y_BM;\n this.delta.y = this.published.delta.y;\n this.setFieldLock(ItemField.Y_Item, true);\n this.saveCoordinate(ItemField.Y_Item, this.published.delta.y);\n }\n\n if ((this.published.flags & AccuDrawFlags.Lock_Z)) {\n if (vp && vp.view.is3d()) {\n this.delta.z = this.published.delta.z;\n this.setFieldLock(ItemField.Z_Item, true);\n this.saveCoordinate(ItemField.Z_Item, this.published.delta.z);\n }\n }\n break;\n }\n }\n\n /** @internal */\n public processHints(): void {\n if (!this.published.flags || !this.isEnabled)\n return;\n\n if (this.published.flags & AccuDrawFlags.Disable) {\n this.published.flags = 0;\n this.currentState = CurrentState.Deactivated;\n return;\n }\n const setFocus: boolean = !!(this.published.flags & AccuDrawFlags.SetFocus);\n const smartRotation: boolean = !!(this.published.flags & AccuDrawFlags.SmartRotation);\n this.doProcessHints();\n this.published.zero();\n if (smartRotation && this.isInactive) // Preserve smart rotation hint until when/if AccuDraw is enabled for the current tool...\n this.published.flags = AccuDrawFlags.SmartRotation;\n if (this.isEnabled || setFocus)\n this.grabInputFocus();\n }\n}\n\n/** Specify the rotation to return from [[AccuDrawHintBuilder.getContextRotation]].\n * @public\n * @extensions\n */\nexport enum ContextRotationId { Top, Front, Left, Bottom, Back, Right, View, Face }\n\n/** [[AccuDrawHintBuilder]] is an [[InteractiveTool]] helper class that facilitates AccuDraw interaction.\n * Accudraw is an aide for entering coordinate data.\n * A tool does not directly change the current AccuDraw state; the tool's job is merely\n * to supply \"hints\" to AccuDraw regarding its preferred AccuDraw configuration for the\n * current tool state. User settings such as \"Context Sensitivity\" and \"Floating Origin\"\n * affect how and which hints are applied. Additionally the user can drive AccuDraw\n * through keyboard shortcuts.\n * @see [Using AccuDraw]($docs/learning/frontend/primitivetools.md#AccuDraw)*\n * @public\n * @extensions\n */\nexport class AccuDrawHintBuilder {\n private _flagOrigin = false;\n private _flagNormal = false;\n private _flagRotation = false;\n private _flagXAxis = false;\n private _flagXAxis2 = false;\n private _flagDistance = false;\n private _flagAngle = false;\n private _flagModePolar = false;\n private _flagModeRectangular = false;\n private _origin?: Point3d;\n private _axis?: Vector3d;\n private _rMatrix?: Matrix3d;\n private _distance = 0;\n private _angle = 0;\n\n /** Don't automatically set compass origin to point from data button events */\n public setOriginFixed = false;\n /** Override \"fixed\" and \"floating\" origin settings for [[setOrigin] hint */\n public setOriginAlways = false;\n /** Lock current distance value in polar mode */\n public setLockDistance = false;\n /** Lock current angle value in polar mode */\n public setLockAngle = false;\n /** Lock current x delta value in rectangular mode */\n public setLockX = false;\n /** Lock current y delta value in rectangular mode */\n public setLockY = false;\n /** Lock current z delta value in 3d views */\n public setLockZ = false;\n /** Set the initial compass orientation from the current [[SnapDetail]] when activating */\n public enableSmartRotation = false;\n\n /** Add hint to specify a new compass origin */\n public setOrigin(origin: Point3d): void {\n this._origin = origin.clone();\n this._flagOrigin = true;\n }\n\n /** Add hint to fully specify compass orientation from a Matrix3d */\n public setMatrix(matrix: Matrix3d): boolean {\n const invMatrix = matrix.inverse();\n if (undefined === invMatrix)\n return false;\n this.setRotation(invMatrix);\n return true;\n }\n\n /** @internal Add hint to fully specify compass orientation from a Matrix3d in row format */\n public setRotation(rowMatrix: Matrix3d): void {\n this._rMatrix = rowMatrix.clone();\n this._flagRotation = true;\n this._flagXAxis = this._flagNormal = false;\n }\n\n /** Add hint to change compass orientation by combining the supplied x axis direction with the current base rotation */\n public setXAxis(xAxis: Vector3d): void {\n this._axis = xAxis.clone();\n this._flagXAxis = true;\n this._flagRotation = this._flagNormal = this._flagXAxis2 = false;\n }\n\n /** Add hint to change compass orientation by combining the supplied x axis direction with the current base rotation preferring the result most closely aligned to the view */\n public setXAxis2(xAxis: Vector3d): void {\n this._axis = xAxis.clone();\n this._flagXAxis2 = true;\n this._flagRotation = this._flagNormal = this._flagXAxis = false;\n }\n\n /** Add hint to change compass orientation by combining the supplied z axis direction with the current base rotation */\n public setNormal(normal: Vector3d): void {\n this._axis = normal.clone();\n this._flagNormal = true;\n this._flagRotation = this._flagXAxis = this._flagXAxis2 = false;\n }\n\n /** Add hint to change compass to polar mode */\n public setModePolar(): void {\n this._flagModePolar = true;\n this._flagModeRectangular = false;\n }\n\n /** Add hint to change compass to rectangular mode */\n public setModeRectangular(): void {\n this._flagModeRectangular = true;\n this._flagModePolar = false;\n }\n\n /** Set current distance value in polar mode */\n public setDistance(distance: number): void {\n this._distance = distance;\n this._flagDistance = true;\n }\n\n /** Set current angle value in polar mode */\n public setAngle(angle: number): void {\n this._angle = angle;\n this._flagAngle = true;\n }\n\n /** Enable AccuDraw for the current tool without sending any hints */\n public static activate(): void { IModelApp.accuDraw.activate(); }\n\n /** Disable AccuDraw for the current tool */\n public static deactivate(): void { IModelApp.accuDraw.deactivate(); }\n\n /** Whether AccuDraw is enabled by the host application this session and can be used */\n public static get isEnabled(): boolean { return IModelApp.accuDraw.isEnabled; }\n\n /** Whether AccuDraw compass is currently displayed and points are being adjusted */\n public static get isActive(): boolean { return IModelApp.accuDraw.isActive; }\n\n /**\n * Immediately process pending hints and update tool dynamics using the adjusted point when not called from a button down event.\n * @note Provided to help with exceptions cases, such as starting an InputCollector from the active tool's drag event, that are not handled by normal hint processing.\n * A typical interactive tool should not call this method and should only be calling sendHints.\n * @see [[sendHints]]\n */\n public static processHintsImmediate(): void { return IModelApp.accuDraw.refreshDecorationsAndDynamics(); }\n\n /**\n * Provide hints to AccuDraw using the current builder state.\n * @return true if hints were successfully sent.\n */\n public sendHints(activate = true): boolean {\n let flags = 0;\n if (this._flagOrigin)\n flags |= AccuDrawFlags.SetOrigin;\n if (this.setOriginFixed)\n flags |= AccuDrawFlags.FixedOrigin;\n if (this.setOriginAlways)\n flags |= AccuDrawFlags.AlwaysSetOrigin;\n if (this._flagRotation)\n flags |= AccuDrawFlags.SetRMatrix;\n if (this._flagXAxis)\n flags |= AccuDrawFlags.SetXAxis;\n if (this._flagXAxis2)\n flags |= AccuDrawFlags.SetXAxis2;\n if (this._flagNormal)\n flags |= AccuDrawFlags.SetNormal;\n if (this._flagModePolar)\n flags |= AccuDrawFlags.SetModePolar;\n if (this._flagModeRectangular)\n flags |= AccuDrawFlags.SetModeRect;\n if (this.setLockDistance)\n flags |= AccuDrawFlags.LockDistance;\n if (this.setLockAngle)\n flags |= AccuDrawFlags.LockAngle;\n if (this.setLockX)\n flags |= AccuDrawFlags.Lock_X;\n if (this.setLockY)\n flags |= AccuDrawFlags.Lock_Y;\n if (this.setLockZ)\n flags |= AccuDrawFlags.Lock_Z;\n if (this.enableSmartRotation)\n flags |= AccuDrawFlags.SmartRotation;\n\n const accuDraw = IModelApp.accuDraw;\n if (BentleyStatus.SUCCESS !== accuDraw.setContext(flags, this._origin, this._flagRotation ? this._rMatrix : this._axis, undefined, this._flagDistance ? this._distance : undefined, this._flagAngle ? this._angle : undefined))\n return false; // Not enabled for this session...\n\n if (activate)\n accuDraw.activate(); // If not already enabled (ex. dynamics not started) most/all callers would want to enable it now (optional activate arg provided just in case)...\n\n return true;\n }\n\n /** Adjust the location of the last data button. If dynamics are enabled on this event, [[InteractiveTool.onDynamicFrame]] is called with this location. */\n public setLastPoint(ev: BeButtonEvent): void {\n IModelApp.toolAdmin.setAdjustedDataPoint(ev);\n }\n\n /** Create a [[Ray3d]] whose origin is the supplied space point and direction is into the view */\n public static getBoresite(spacePt: Point3d, vp: Viewport, checkAccuDraw: boolean = false, checkACS: boolean = false): Ray3d {\n if (checkAccuDraw && IModelApp.accuDraw.isActive)\n return Ray3d.create(spacePt, IModelApp.accuDraw.getRotation().getRow(2).negate());\n\n if (checkACS && vp.isContextRotationRequired)\n return Ray3d.create(spacePt, vp.getAuxCoordRotation().getRow(2).negate());\n\n const eyePoint = vp.worldToViewMap.transform1.columnZ();\n const direction = Vector3d.createFrom(eyePoint);\n const aa = Geometry.conditionalDivideFraction(1, eyePoint.w);\n if (aa !== undefined) {\n const xyzEye = direction.scale(aa);\n direction.setFrom(spacePt.vectorTo(xyzEye));\n }\n direction.scaleToLength(-1.0, direction);\n return Ray3d.create(spacePt, direction);\n }\n\n /** Return ray intersection with a plane defined by a point and normal\n * @see [[getBoresite]]\n */\n public static projectPointToPlaneInView(spacePt: Point3d, planePt: Point3d, planeNormal: Vector3d, vp: Viewport, checkAccuDraw: boolean = false, checkACS: boolean = false): Point3d | undefined {\n const plane = Plane3dByOriginAndUnitNormal.create(planePt, planeNormal);\n if (undefined === plane)\n return undefined;\n const rayToEye = AccuDrawHintBuilder.getBoresite(spacePt, vp, checkAccuDraw, checkACS);\n const projectedPt = Point3d.createZero();\n if (undefined === rayToEye.intersectionWithPlane(plane, projectedPt))\n return undefined;\n return projectedPt;\n }\n\n /** Return ray intersection with a line defined by a point and direction\n * @see [[getBoresite]]\n */\n public static projectPointToLineInView(spacePt: Point3d, linePt: Point3d, lineDirection: Vector3d, vp: Viewport, checkAccuDraw: boolean = false, checkACS: boolean = false): Point3d | undefined {\n const lineRay = Ray3d.create(linePt, lineDirection);\n const rayToEye = AccuDrawHintBuilder.getBoresite(spacePt, vp, checkAccuDraw, checkACS);\n if (rayToEye.direction.isParallelTo(lineRay.direction, true))\n return lineRay.projectPointToRay(spacePt);\n const matrix = Matrix3d.createRigidFromColumns(lineRay.direction, rayToEye.direction, AxisOrder.XZY);\n if (undefined === matrix)\n return undefined;\n const plane = Plane3dByOriginAndUnitNormal.create(linePt, matrix.columnZ());\n if (undefined === plane)\n return undefined;\n const projectedPt = Point3d.createZero();\n if (undefined === rayToEye.intersectionWithPlane(plane, projectedPt))\n return undefined;\n return lineRay.projectPointToRay(projectedPt);\n }\n\n /** Return a [[Matrix3d]] representing the current working plane specified by AccuDraw, [[Viewport.auxCoordSystem]], or [[Viewport.rotation]]. */\n public static getCurrentRotation(vp: Viewport, checkAccuDraw: boolean, checkACS: boolean, matrix?: Matrix3d): Matrix3d | undefined {\n const current = AccuDraw.getCurrentOrientation(vp, checkAccuDraw, checkACS, matrix);\n return (undefined !== current ? current.inverse() : undefined);\n }\n\n /** Return a [[Matrix3d]] from a [[SnapDetail]].\n * Uses [[SnapDetail.normal]] and [[SnapDetail.primitive]] when available to create the most well defined rotation for the given snap location.\n */\n public static getSnapRotation(snap: SnapDetail, matrix?: Matrix3d): Matrix3d | undefined {\n const out = AccuDraw.getSnapRotation(snap, undefined, matrix);\n return (undefined !== out ? out.inverse() : undefined);\n }\n\n /** Return a [[Matrix3d]] corresponding to the supplied [[ContextRotationId]].\n * A [[ContextRotationId]] that corresponds to a standard view, \"Top\", \"Front\", etc. will return a [[Matrix3d]] that\n * is relative to the current [[Viewport.auxCoordSystem]] when ACS context lock is enabled.\n * @see [[ToolAdmin.acsContextLock]]\n */\n public static getContextRotation(id: ContextRotationId, vp: Viewport): Matrix3d | undefined {\n switch (id) {\n case ContextRotationId.Top:\n return AccuDraw.getStandardRotation(StandardViewId.Top, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Front:\n return AccuDraw.getStandardRotation(StandardViewId.Front, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Left:\n return AccuDraw.getStandardRotation(StandardViewId.Left, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Bottom:\n return AccuDraw.getStandardRotation(StandardViewId.Bottom, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Back:\n return AccuDraw.getStandardRotation(StandardViewId.Back, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Right:\n return AccuDraw.getStandardRotation(StandardViewId.Right, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.View:\n return vp.view.getRotation().inverse();\n case ContextRotationId.Face:\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined === snap || undefined === snap.normal)\n return undefined;\n const normal = Vector3d.createZero();\n const boresite = this.getBoresite(snap.hitPoint, vp);\n if (snap.normal.dotProduct(boresite.direction) < 0.0)\n normal.setFrom(snap.normal);\n else\n snap.normal.negate(normal);\n return Matrix3d.createRigidHeadsUp(normal);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AccuDraw.js","sourceRoot":"","sources":["../../src/AccuDraw.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\n/** @packageDocumentation\n * @module AccuDraw\n */\nimport { BentleyStatus, Id64String } from \"@itwin/core-bentley\";\nimport {\n Arc3d, AxisOrder, CurveCurve, CurveCurveApproachType, CurvePrimitive, Geometry, IModelJson as GeomJson, LineSegment3d, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d,\n PointString3d, Ray3d, Transform, Vector2d, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { ColorByName, ColorDef, GeometryStreamProps, LinePixels } from \"@itwin/core-common\";\nimport { TentativeOrAccuSnap } from \"./AccuSnap\";\nimport { ACSDisplayOptions, AuxCoordSystemState } from \"./AuxCoordSys\";\nimport { HitDetail, SnapDetail, SnapHeat, SnapMode } from \"./HitDetail\";\nimport { IModelApp } from \"./IModelApp\";\nimport { GraphicBuilder } from \"./render/GraphicBuilder\";\nimport { StandardViewId } from \"./StandardView\";\nimport { BeButton, BeButtonEvent, CoordinateLockOverrides, InputCollector, InputSource } from \"./tools/Tool\";\nimport { ViewTool } from \"./tools/ViewTool\";\nimport { DecorateContext } from \"./ViewContext\";\nimport { linePlaneIntersect } from \"./LinePlaneIntersect\";\nimport { ScreenViewport, Viewport } from \"./Viewport\";\nimport { ViewState } from \"./ViewState\";\nimport { QuantityType } from \"./quantity-formatting/QuantityFormatter\";\nimport { FormatterSpec, FormatType, ParseError, Parser, ParserSpec, QuantityParseResult } from \"@itwin/core-quantity\";\nimport { GraphicType } from \"./common/render/GraphicType\";\n\n// cspell:ignore dont primitivetools\n\n/** @internal */\nexport enum AccuDrawFlags {\n None = 0,\n SetModePolar = 1,\n SetModeRect = 1 << 1,\n SetOrigin = (1 << 2),\n FixedOrigin = (1 << 3),\n SetRMatrix = (1 << 4),\n SetXAxis = (1 << 5),\n SetNormal = (1 << 6),\n SetDistance = (1 << 7),\n LockDistance = (1 << 8),\n Lock_X = (1 << 9),\n Lock_Y = (1 << 10),\n Lock_Z = (1 << 11),\n Disable = (1 << 12),\n OrientDefault = (1 << 14),\n SetFocus = (1 << 15),\n OrientACS = (1 << 17),\n SetXAxis2 = (1 << 18),\n LockAngle = (1 << 19),\n AlwaysSetOrigin = SetOrigin | (1 << 21),\n RedrawCompass = (1 << 22),\n UpdateRotation = (1 << 23),\n SmartRotation = (1 << 24),\n}\n\n/** AccuDraw coordinate input mode\n * @public\n */\nexport enum CompassMode {\n /** Coordinate input using distance and angle */\n Polar = 0,\n /** Coordinate input using x, y, and z deltas */\n Rectangular = 1,\n}\n\n/** AccuDraw compass base rotation\n * @public\n */\nexport enum RotationMode {\n /** Aligned with standard view top or ACS top when [[ToolAdmin.acsContextLock]] is enabled */\n Top = 1,\n /** Aligned with standard view front or ACS front when [[ToolAdmin.acsContextLock]] is enabled */\n Front = 2,\n /** Aligned with standard view right or ACS right when [[ToolAdmin.acsContextLock]] is enabled */\n Side = 3,\n /** Aligned with view */\n View = 4,\n /** Aligned with view ACS */\n ACS = 5,\n /** Not aligned with a standard rotation or ACS */\n Context = 6,\n}\n\n/** @internal */\nexport enum LockedStates {\n NONE_LOCKED = 0,\n X_BM = (1),\n Y_BM = (1 << 1),\n VEC_BM = (1 << 2),\n DIST_BM = (1 << 3),\n XY_BM = (X_BM | Y_BM),\n ANGLE_BM = (XY_BM | VEC_BM),\n}\n\n/** AccuDraw enabled states\n * @public\n */\nexport enum CurrentState {\n /** Compass disabled/unwanted for this session */\n NotEnabled = 0,\n /** Compass deactivated but CAN be activated by user */\n Deactivated = 1,\n /** Compass not displayed awaiting automatic activation (default tool state) */\n Inactive = 2,\n /** Compass displayed and adjusting points */\n Active = 3,\n}\n\n/** @internal */\nexport enum ContextMode {\n Locked = 0,\n XAxis = 1,\n YAxis = 2,\n ZAxis = 3,\n XAxis2 = 4,\n None = 15,\n}\n\n/** AccuDraw coordinate input fields\n * @public\n */\nexport enum ItemField {\n /** Distance for polar mode */\n DIST_Item = 0,\n /** Angle for polar mode */\n ANGLE_Item = 1,\n /** X delta for rectangular mode */\n X_Item = 2,\n /** Y delta for rectangular mode */\n Y_Item = 3,\n /** Z delta (3d only) */\n Z_Item = 4,\n}\n\n/** @internal */\nexport enum KeyinStatus {\n Dynamic = 0,\n Partial = 1,\n}\n\nconst enum Constants { // eslint-disable-line no-restricted-syntax\n MAX_SAVED_VALUES = 10,\n SMALL_ANGLE = 1.0e-12,\n SMALL_DELTA = 0.00001,\n}\n\n/** @internal */\nexport class AccudrawData {\n public flags = 0; // AccuDrawFlags\n public readonly origin = new Point3d(); // used if ACCUDRAW_SetOrigin\n public readonly delta = new Point3d(); // if ACCUDRAW_Lock_X, etc.\n public readonly rMatrix = new Matrix3d(); // if ACCUDRAW_SetRMatrix/ACCUDRAW_Set3dMatrix\n public readonly vector = new Vector3d(); // if ACCUDRAW_SetXAxis, etc.\n public distance = 0; // if ACCUDRAW_SetDistance\n public angle = 0; // if ACCUDRAW_SetAngle\n public zero() {\n this.flags = this.distance = this.angle = 0;\n this.origin.setZero();\n this.delta.setZero();\n this.vector.setZero();\n this.rMatrix.setIdentity();\n }\n}\n\n/** @internal */\nexport class Flags {\n public redrawCompass = false;\n public dialogNeedsUpdate = false;\n public rotationNeedsUpdate = true;\n public lockedRotation = false;\n public indexLocked = false;\n public haveValidOrigin = false;\n public fixedOrg = false;\n public auxRotationPlane = RotationMode.Top;\n public contextRotMode = 0;\n public baseRotation = RotationMode.View;\n public baseMode = 0;\n public pointIsOnPlane = false; // whether rawPointOnPlane is on compass plane\n public softAngleLock = false;\n public bearingFixToPlane2D = false;\n public inDataPoint = false;\n public ignoreDataButton = false;\n public animateRotation = false;\n}\n\n/** AccuDraw value round off settings. Allows dynamic distance and angle values to be rounded to the nearest increment of the specified units value(s).\n * @public\n */\nexport class RoundOff {\n /** Whether rounding is to be applied to the corresponding dynamic distance or angle value.\n * @note To be considered active, units must also specify at least one increment value.\n */\n public active = false;\n /** Round off increment value(s), meters for distance round off, and radians for angle round off.\n * @note When multiple values are specified, rounding is based on smallest discernable value at current view zoom.\n */\n public units = new Set<number>();\n}\n\n/** @internal */\nexport class SavedState {\n public state = CurrentState.NotEnabled;\n public mode = CompassMode.Polar;\n public rotationMode = RotationMode.View;\n public readonly axes = new ThreeAxes();\n public readonly origin = new Point3d();\n public auxRotationPlane = 0;\n public contextRotMode = 0;\n public fixedOrg = false;\n public ignoreDataButton = true; // By default the data point that terminates a view tool or input collector should be ignored...\n public ignoreFlags: AccuDrawFlags = 0;\n}\n\n/** @internal */\nexport class ThreeAxes {\n public readonly x = Vector3d.unitX();\n public readonly y = Vector3d.unitY();\n public readonly z = Vector3d.unitZ();\n public setFrom(other: ThreeAxes) {\n this.x.setFrom(other.x);\n this.y.setFrom(other.y);\n this.z.setFrom(other.z);\n }\n public fromMatrix3d(rMatrix: Matrix3d): void {\n rMatrix.getRow(0, this.x);\n rMatrix.getRow(1, this.y);\n rMatrix.getRow(2, this.z);\n }\n public static createFromMatrix3d(rMatrix: Matrix3d, result?: ThreeAxes): ThreeAxes {\n result = result ? result : new ThreeAxes();\n result.fromMatrix3d(rMatrix);\n return result;\n }\n public toMatrix3d(out?: Matrix3d) { return Matrix3d.createRows(this.x, this.y, this.z, out); }\n public clone(): ThreeAxes {\n const out = new ThreeAxes();\n out.setFrom(this);\n return out;\n }\n\n public equals(other: ThreeAxes): boolean { return this.x.isExactEqual(other.x) && this.y.isExactEqual(other.y) && this.z.isExactEqual(other.z); }\n}\n\n/** Accudraw is an aide for entering coordinate data.\n * This class is public to allow applications to provide a user interface for AccuDraw, either by implementing their own, or\n * using the one supplied by the itwin appui package.\n * @note When writing an [[InteractiveTool]] it is not correct to call methods on AccuDraw directly, tools should instead\n * provide hints to AccuDraw using [[AccuDrawHintBuilder]].\n * @public\n */\nexport class AccuDraw {\n private _currentState = CurrentState.NotEnabled;\n\n /** Current AccuDraw state */\n public get currentState(): CurrentState { return this._currentState; }\n public set currentState(state: CurrentState) {\n if (state === this._currentState)\n return;\n\n const wasActive = this.isActive;\n this._currentState = state;\n\n if (wasActive !== this.isActive)\n this.onCompassDisplayChange(wasActive ? \"hide\" : \"show\");\n }\n\n /** The current compass mode */\n public compassMode = CompassMode.Rectangular;\n /** The current compass rotation */\n public rotationMode = RotationMode.View;\n /** @internal */\n public currentView?: ScreenViewport; // will be nullptr if view not yet defined\n /** @internal */\n public readonly published = new AccudrawData(); // Staging area for hints\n /** @internal */\n public readonly origin = new Point3d(); // origin point...not on compass plane when z != 0.0\n /** @internal */\n public readonly axes = new ThreeAxes(); // X, Y and Z vectors (3d rotation matrix)\n /** @internal */\n public readonly delta = Vector3d.unitZ(); // dialog items (x, y & z)\n private _distance = 0; // current distance\n private _angle = 0; // current angle\n /** @internal */\n public locked = LockedStates.NONE_LOCKED; // axis/distance locked bit mask\n /** @internal */\n public indexed = LockedStates.NONE_LOCKED; // axis/distance indexed bit mask\n private readonly _distanceRoundOff = new RoundOff(); // distance round off enabled and unit\n private readonly _angleRoundOff = new RoundOff(); // angle round off enabled and unit\n /** @internal */\n public readonly flags = new Flags(); // current state flags\n private readonly _fieldLocked: [boolean, boolean, boolean, boolean, boolean] = [false, false, false, false, false]; // locked state of fields\n private readonly _keyinStatus: [KeyinStatus, KeyinStatus, KeyinStatus, KeyinStatus, KeyinStatus] = [KeyinStatus.Dynamic, KeyinStatus.Dynamic, KeyinStatus.Dynamic, KeyinStatus.Dynamic, KeyinStatus.Dynamic]; // state of input field\n /** @internal */\n public readonly savedStateViewTool = new SavedState(); // Restore point for shortcuts/tools...\n /** @internal */\n public readonly savedStateInputCollector = new SavedState(); // Restore point for shortcuts/tools...\n private readonly _savedDistances: number[] = []; // History of previous distances...\n private readonly _savedAngles: number[] = []; // History of previous angles...\n private _savedDistanceIndex = -1; // Current saved distance index for choosing next/previous value...\n private _savedAngleIndex = -1; // Current saved distance index for choosing next/previous value...\n /** @internal */\n public readonly baseAxes = new ThreeAxes(); // Used for \"context\" base rotation to hold arbitrary rotation w/o needing to change ACS...\n /** @internal */\n public readonly lastAxes = new ThreeAxes(); // Last result from UpdateRotation, replaces cM.rMatrix...\n private _lastDistance = 0; // previous saved distance or distance indexing tick\n private _tolerance = 0; // computed view based indexing tolerance\n private _percentChanged = 0; // Compass animation state\n private _threshold = 0; // Threshold for automatic x/y field focus change.\n private _lastSnapDetail?: { point: Point3d, matrix: Matrix3d, sourceId: Id64String, isTentative: boolean, deselect?: boolean, indexed?: true };\n /** @internal */\n public readonly planePt = new Point3d(); // same as origin unless non-zero locked z value\n private readonly _rawDelta = new Point2d(); // used by rect fix point\n private readonly _rawPoint = new Point3d(); // raw uor point passed to fix point\n private readonly _rawPointOnPlane = new Point3d(); // adjusted rawPoint by applying hard/soft construction plane\n /** @internal */\n public readonly point = new Point3d(); // current cursor point\n /** @internal */\n public readonly vector = Vector3d.unitZ(); // current/last good locked direction\n private _xIsNegative = false; // Last delta.x was negative\n private _yIsNegative = false; // Last delta.y was negative\n private _xIsExplicit = false; // Sign of delta.x established from user input input, don't allow +/- side flip.\n private _yIsExplicit = false; // Sign of delta.y established from user input input, don't allow +/- side flip.\n /** Disable automatic focus change when user is entering input. */\n public dontMoveFocus = false;\n /** Set input field to move focus to (X_Item or Y_Item) for automatic focus change. */\n public newFocus = ItemField.X_Item;\n private readonly _rMatrix = new Matrix3d();\n /** @internal */\n protected _acsPickId?: string;\n\n // Compass Display Preferences...\n /** @internal */\n protected _compassSizeInches = 0.44;\n /** @internal */\n protected _animationFrames = 12;\n /** @internal */\n protected _indexToleranceInches = 0.11;\n /** @internal */\n protected readonly _frameColor = ColorDef.create(ColorByName.lightGrey);\n /** @internal */\n protected readonly _fillColor = ColorDef.create(ColorByName.blue);\n /** @internal */\n protected readonly _xColor = ColorDef.create(ColorByName.red);\n /** @internal */\n protected readonly _yColor = ColorDef.create(ColorByName.green);\n /** @internal */\n protected readonly _indexColor = ColorDef.create(ColorByName.white);\n /** @internal */\n protected readonly _frameColorNoFocus = ColorDef.create(ColorByName.darkGrey);\n /** @internal */\n protected readonly _fillColorNoFocus = ColorDef.create(ColorByName.lightGrey);\n\n /** When true improve behavior for +/- input when cursor switches side and try to automatically manage focus */\n public smartKeyin = true;\n /** When true the compass follows the origin hint as opposed to remaining at a fixed location */\n public floatingOrigin = true;\n /** When true the z input field will remain locked with it's current value after a data button */\n public stickyZLock = false;\n /** When true the compass is always active and on screen instead of following the current tools request to activate */\n public alwaysShowCompass = false;\n /** When true all tool hints are applied as opposed to only selected hints */\n public contextSensitive = true;\n /** When true the current point is adjusted to the x and y axes when within a close tolerance */\n public axisIndexing = true;\n /** When true the current point is adjusted to the last locked distance value when within a close tolerance */\n public distanceIndexing = true;\n /** When true locking the angle also moves focus to the angle input field */\n public autoFocusFields = true;\n /** When true fully specifying a point by entering both distance and angle in polar mode or XY[Z] in rectangular mode, the point is automatically accepted */\n public autoPointPlacement = false;\n /** When true and axisIndexing is allowed the current point is adjusted to the tangent or binormal vector from the last snap when within a close tolerance\n * @beta\n */\n public snapIndexing = true;\n\n /** Get distance round off settings */\n public get distanceRoundOff(): RoundOff { return this._distanceRoundOff; }\n /** Get angle round off settings */\n public get angleRoundOff(): RoundOff { return this._angleRoundOff; }\n\n private static _tempRot = new Matrix3d();\n\n /** @internal */\n public onInitialized() { this.enableForSession(); }\n /** @internal */\n public getRotation(rMatrix?: Matrix3d): Matrix3d {\n if (!rMatrix)\n rMatrix = this._rMatrix;\n\n Matrix3d.createRows(this.axes.x, this.axes.y, this.axes.z, rMatrix);\n return rMatrix;\n }\n\n /** When true AccuDraw is enabled by the application and can be used by interactive tools */\n public get isEnabled(): boolean { return (this.currentState > CurrentState.NotEnabled); }\n /** When true the compass is displayed and adjusting input points for the current interactive tool */\n public get isActive(): boolean { return CurrentState.Active === this.currentState; }\n /** When true the compass is not displayed or adjusting points, but it can be automatically activated by the current interactive tool or via shortcuts */\n public get isInactive(): boolean { return (CurrentState.Inactive === this.currentState); }\n /** When true the compass is not displayed or adjusting points, the current interactive tool has disabled automatic activation, but can still be enabled via shortcuts */\n public get isDeactivated(): boolean { return (CurrentState.Deactivated === this.currentState); }\n\n /** Get the current lock state for the supplied input field */\n public getFieldLock(index: ItemField): boolean { return this._fieldLocked[index]; }\n /** @internal */\n public getKeyinStatus(index: ItemField): KeyinStatus { return this._keyinStatus[index]; }\n /** Get the current keyin status for the supplied input field */\n public isDynamicKeyinStatus(index: ItemField): boolean { return KeyinStatus.Dynamic === this.getKeyinStatus(index) }\n\n /** Get whether AccuDraw currently has input focus */\n public get hasInputFocus() { return true; }\n /** Called to request input focus be set to AccuDraw. Focus is managed by AccuDraw UI. */\n public grabInputFocus() { }\n /** Get default focus item for the current compass mode */\n public defaultFocusItem(): ItemField { return (CompassMode.Polar === this.compassMode ? ItemField.DIST_Item : this.newFocus); }\n\n /** @internal */\n public activate(): void {\n // Upgrade state to inactive so upgradeToActiveState knows it is ok to move to active...\n if (CurrentState.Deactivated === this.currentState)\n this.currentState = CurrentState.Inactive;\n this.upgradeToActiveState();\n }\n\n /** @internal */\n public deactivate() {\n this.downgradeInactiveState();\n // Don't allow compass to come back until user re-enables it...\n if (CurrentState.Inactive === this.currentState)\n this.currentState = CurrentState.Deactivated;\n }\n\n /** Whether to show Z input field in 3d. Sub-classes can override to restrict AccuDraw to 2d input when working in overlays where\n * depth is not important.\n * @note Intended to be used in conjunction with ViewState.allow3dManipulations returning false to also disable 3d rotation and\n * ToolAdmin.acsPlaneSnapLock set to true for projecting snapped points to the view's ACS plane.\n * @see [[ViewState.allow3dManipulations]][[ToolAdmin.acsPlaneSnapLock]]\n */\n public is3dCompass(viewport: Viewport): boolean {\n return viewport.view.is3d();\n }\n\n /** Change current compass input mode to either polar or rectangular */\n public setCompassMode(mode: CompassMode): void {\n if (mode === this.compassMode)\n return;\n\n this.compassMode = mode;\n this.onCompassModeChange();\n }\n\n /** Change current compass orientation */\n public setRotationMode(mode: RotationMode): void {\n if (mode === this.rotationMode)\n return;\n\n this.rotationMode = mode;\n this.onRotationModeChange();\n }\n\n /** Change the lock status for the supplied input field */\n public setFieldLock(index: ItemField, locked: boolean): void {\n if (locked === this._fieldLocked[index])\n return;\n\n this._fieldLocked[index] = locked;\n this.onFieldLockChange(index);\n }\n\n /** @internal */\n public setKeyinStatus(index: ItemField, status: KeyinStatus): void {\n if (status === this._keyinStatus[index])\n return;\n\n this._keyinStatus[index] = status;\n if (KeyinStatus.Dynamic !== status)\n this.dontMoveFocus = true;\n if (KeyinStatus.Partial === status)\n this._threshold = Math.abs(ItemField.X_Item === index ? this._rawDelta.y : this._rawDelta.x) + this._tolerance;\n\n this.onFieldKeyinStatusChange(index);\n }\n\n private needsRefresh(vp: Viewport): boolean {\n if (!this.isEnabled || this.isDeactivated)\n return false;\n\n // Get snap point from AccuSnap/Tentative or use raw point...\n let distance = 0.0;\n let snapPt = this._rawPoint;\n const ptP = this.point;\n const snap = TentativeOrAccuSnap.getCurrentSnap();\n\n if (snap) {\n snapPt = snap.snapPoint;\n distance = ptP.distance(snapPt);\n }\n\n const isRectMode = (CompassMode.Rectangular === this.compassMode);\n const offsetSnap = ((TentativeOrAccuSnap.isHot || IModelApp.tentativePoint.isActive) && ((this.locked) || (distance > 0.0)));\n\n // XY Offset:\n if (offsetSnap) {\n if (isRectMode) {\n let xIsOffset = false, yIsOffset = false;\n\n const vec = ptP.vectorTo(this._rawPointOnPlane);\n const xOffset = vec.dotProduct(this.axes.x);\n const yOffset = vec.dotProduct(this.axes.y);\n\n xIsOffset = (Math.abs(xOffset) > 1.0);\n yIsOffset = (Math.abs(yOffset) > 1.0);\n\n if (xIsOffset || yIsOffset)\n return true;\n }\n }\n\n const isOnCompassPlane = (!vp.view.is3d() || this.flags.pointIsOnPlane || this.isZLocked(vp));\n\n // Z Offset:\n if (offsetSnap) {\n if (isOnCompassPlane) {\n const zOffset = snapPt.distance(this._rawPointOnPlane);\n if (zOffset > Constants.SMALL_ANGLE || zOffset < -Constants.SMALL_ANGLE)\n return true;\n }\n }\n\n // Fat Point:\n if (offsetSnap)\n return true;\n\n let axisIsIndexed = false;\n\n // Axis Indexing:\n if (isRectMode) {\n if ((this.indexed & LockedStates.XY_BM) && (this.flags.pointIsOnPlane || this._fieldLocked[ItemField.Z_Item]))\n axisIsIndexed = true;\n } else {\n if ((this.indexed & LockedStates.ANGLE_BM || this.locked & LockedStates.ANGLE_BM) && (this.flags.pointIsOnPlane || this._fieldLocked[ItemField.Z_Item]))\n axisIsIndexed = true;\n }\n\n if (axisIsIndexed)\n return true;\n\n // Distance Indexing:\n if (this.indexed & LockedStates.DIST_BM)\n return true;\n\n // XY Lock:\n if (isRectMode) {\n const locked = this.locked & LockedStates.XY_BM;\n\n if ((0 !== locked) && isOnCompassPlane) {\n switch (locked) {\n case LockedStates.X_BM:\n case LockedStates.Y_BM:\n case LockedStates.XY_BM:\n return true;\n }\n }\n }\n\n return false;\n }\n\n private updateLastSnapDetail(vp: ScreenViewport, fromSnap: boolean): void {\n if (!this.snapIndexing || !this.axisIndexing || this.flags.indexLocked || LockedStates.NONE_LOCKED !== this.locked) {\n this._lastSnapDetail = undefined;\n return;\n }\n\n if (!fromSnap) {\n if (this._lastSnapDetail?.deselect)\n this._lastSnapDetail = undefined;\n else if (this._lastSnapDetail)\n this._lastSnapDetail.deselect = false; // Allow moving cursor back to previous snap to clear it...\n return;\n }\n\n const snap = TentativeOrAccuSnap.getCurrentSnap();\n if (undefined === snap || this.origin.isAlmostEqual(snap.getPoint()))\n return;\n\n if (this._lastSnapDetail && this._lastSnapDetail.sourceId === snap.sourceId && this._lastSnapDetail.point.isAlmostEqual(snap.getPoint())) {\n if (false === this._lastSnapDetail.deselect)\n this._lastSnapDetail.deselect = true; // Stop indexing to previous snap...\n return; // Don't compute rotation if location hasn't changed...\n }\n\n const isTentative = IModelApp.tentativePoint.isSnapped;\n if (this._lastSnapDetail?.isTentative && !isTentative)\n return; // Don't update snap from tentative unless it's another tentative to support holding a snap location in a dense drawing...\n\n const rotation = AccuDraw.getSnapRotation(snap, vp);\n if (undefined === rotation)\n return;\n\n this._lastSnapDetail = { point: snap.getPoint().clone(), matrix: rotation, sourceId: snap.sourceId, isTentative };\n }\n\n /** @internal */\n public adjustPoint(pointActive: Point3d, vp: ScreenViewport, fromSnap: boolean): boolean {\n if (!this.isEnabled)\n return false;\n\n const lastWasIndexed = (0 !== this.indexed);\n let pointChanged = false, handled = false;\n\n if (0.0 !== pointActive.z && !vp.isPointAdjustmentRequired)\n pointActive.z = 0.0;\n\n if (1.0 !== vp.view.getAspectRatioSkew())\n this.downgradeInactiveState(); // Disable AccuDraw if skew is applied with AccuDraw already active...\n\n if (this.isInactive) {\n this.point.setFrom(pointActive);\n this.currentView = vp;\n this.fixPoint(pointActive, vp);\n\n if (!fromSnap && IModelApp.accuSnap.currHit)\n this.flags.redrawCompass = true;\n } else if (this.isActive) {\n this.updateLastSnapDetail(vp, fromSnap);\n\n const lastPt = this.point.clone();\n this.fixPoint(pointActive, vp);\n\n pointChanged = !lastPt.isExactEqual(this.point);\n this.processHints();\n handled = true;\n } else {\n this.currentView = vp; // Keep view up to date...\n }\n\n // If redraw of compass isn't required (yet!) check if needed...\n if (!this.flags.redrawCompass && this.isActive) {\n // Redraw required to erase/draw old/new indexing geometry...\n if (pointChanged && (lastWasIndexed || this.needsRefresh(vp)))\n this.flags.redrawCompass = true;\n }\n // Redraw is necessary, force decorators to be called...\n if (this.flags.redrawCompass)\n vp.invalidateDecorations();\n\n return handled;\n }\n\n private setDefaultOrigin(vp?: Viewport): void {\n if (!vp || this.locked || this._fieldLocked[ItemField.Z_Item])\n return;\n\n const view = vp.view;\n const rMatrix = view.getRotation();\n const acsOrigin = vp.getAuxCoordOrigin();\n rMatrix.multiplyVectorInPlace(acsOrigin);\n\n const origin = view.getCenter();\n view.getRotation().multiplyVectorInPlace(origin);\n origin.z = acsOrigin.z;\n view.getRotation().multiplyTransposeVectorInPlace(origin);\n\n this.origin.setFrom(origin); // View center at acs z...\n this.planePt.setFrom(origin);\n }\n\n /** @internal */\n public isZLocked(vp: Viewport): boolean {\n if (this._fieldLocked[ItemField.Z_Item])\n return true;\n if (vp.isSnapAdjustmentRequired && TentativeOrAccuSnap.isHot)\n return true;\n\n return false;\n }\n\n /** @internal */\n public accountForAuxRotationPlane(rot: ThreeAxes, plane: RotationMode): void {\n // ACS mode now can have \"front\" and \"side\" variations...\n switch (plane) {\n case RotationMode.Top:\n return;\n\n case RotationMode.Front:\n const temp = rot.y.clone();\n rot.y.setFrom(rot.z);\n temp.scale(-1.0, rot.z);\n return;\n\n case RotationMode.Side:\n const temp0 = rot.x.clone();\n rot.x.setFrom(rot.y);\n rot.y.setFrom(rot.z);\n rot.z.setFrom(temp0);\n }\n }\n\n private accountForACSContextLock(vec: Vector3d): void {\n // Base rotation is relative to ACS when ACS context lock is enabled...\n if (!this.currentView || !this.currentView.isContextRotationRequired)\n return;\n\n const rMatrix = AccuDraw.getStandardRotation(StandardViewId.Top, this.currentView, true);\n rMatrix.multiplyTransposeVectorInPlace(vec);\n }\n\n private static useACSContextRotation(vp: Viewport, isSnap: boolean): boolean {\n if (isSnap) {\n if (!vp.isSnapAdjustmentRequired)\n return false;\n } else {\n if (!vp.isContextRotationRequired)\n return false;\n }\n return true;\n }\n\n /** Gets X, Y or Z vector from top, front, (right) side, ACS, or View. */\n private getStandardVector(whichVec: number): Vector3d {\n const vp = this.currentView;\n let rMatrix: Matrix3d;\n let myAxes: ThreeAxes;\n const vecP = Vector3d.createZero();\n switch (this.flags.baseRotation) {\n case RotationMode.Top:\n switch (whichVec) {\n case 0: vecP.x = 1.0; break;\n case 1: vecP.y = 1.0; break;\n case 2: vecP.z = 1.0; break;\n }\n this.accountForACSContextLock(vecP);\n break;\n\n case RotationMode.Front:\n switch (whichVec) {\n case 0: vecP.x = 1.0; break;\n case 1: vecP.z = 1.0; break;\n case 2: vecP.y = -1.0; break;\n }\n this.accountForACSContextLock(vecP);\n break;\n\n case RotationMode.Side:\n switch (whichVec) {\n case 0: vecP.y = 1.0; break;\n case 1: vecP.z = 1.0; break;\n case 2: vecP.x = 1.0; break;\n }\n this.accountForACSContextLock(vecP);\n break;\n\n case RotationMode.ACS:\n rMatrix = vp ? vp.getAuxCoordRotation() : Matrix3d.createIdentity();\n myAxes = ThreeAxes.createFromMatrix3d(rMatrix);\n this.accountForAuxRotationPlane(myAxes, this.flags.auxRotationPlane);\n switch (whichVec) {\n case 0: vecP.setFrom(myAxes.x); break;\n case 1: vecP.setFrom(myAxes.y); break;\n case 2: vecP.setFrom(myAxes.z); break;\n }\n break;\n\n case RotationMode.View:\n rMatrix = vp ? vp.rotation : Matrix3d.createIdentity();\n rMatrix.getRow(whichVec, vecP);\n break;\n\n case RotationMode.Context:\n myAxes = this.baseAxes.clone();\n this.accountForAuxRotationPlane(myAxes, this.flags.auxRotationPlane);\n switch (whichVec) {\n case 0: vecP.setFrom(myAxes.x); break;\n case 1: vecP.setFrom(myAxes.y); break;\n case 2: vecP.setFrom(myAxes.z); break;\n }\n break;\n }\n\n return vecP;\n }\n\n private getBestViewedRotationFromXVector(rotation: ThreeAxes, vp: Viewport): void {\n const viewZ = vp.rotation.getRow(2);\n const vec1 = this.getStandardVector(2);\n const vec2 = this.getStandardVector(1);\n const vec3 = this.getStandardVector(0);\n const rot1 = vec1.crossProduct(rotation.x);\n const rot2 = vec2.crossProduct(rotation.x);\n const rot3 = vec3.crossProduct(rotation.x);\n const useRot1 = (rot1.normalizeWithLength(rot1).mag > 0.00001);\n const useRot2 = (rot2.normalizeWithLength(rot2).mag > 0.00001);\n const useRot3 = (rot3.normalizeWithLength(rot3).mag > 0.00001);\n const dot1 = (useRot1 ? Math.abs(rotation.x.crossProduct(rot1).dotProduct(viewZ)) : -1.0);\n const dot2 = (useRot2 ? Math.abs(rotation.x.crossProduct(rot2).dotProduct(viewZ)) : -1.0);\n const dot3 = (useRot3 ? Math.abs(rotation.x.crossProduct(rot3).dotProduct(viewZ)) : -1.0);\n const max = Math.max(dot1, dot2, dot3);\n\n if (Geometry.isDistanceWithinTol(dot1 - dot2, 0.1) && (max !== dot3))\n rotation.y.setFrom(rot1);\n else if (max === dot1)\n rotation.y.setFrom(rot1);\n else if (max === dot2)\n rotation.y.setFrom(rot2);\n else\n rotation.y.setFrom(rot3);\n\n rotation.z.setFrom(rotation.x.crossProduct(rotation.y));\n }\n\n private getRotationFromVector(rotation: ThreeAxes, whichVec: number): void {\n let vec: Vector3d;\n switch (whichVec) {\n case 0:\n vec = this.getStandardVector(2);\n vec.crossProduct(rotation.x, rotation.y);\n\n if (rotation.y.normalizeWithLength(rotation.y).mag < .00001) {\n vec = this.getStandardVector(1);\n vec.crossProduct(rotation.x, rotation.y);\n rotation.y.normalizeInPlace();\n }\n\n rotation.x.crossProduct(rotation.y, rotation.z);\n break;\n\n case 1:\n vec = this.getStandardVector(2);\n vec.crossProduct(rotation.y, rotation.x);\n\n if (rotation.x.normalizeWithLength(rotation.x).mag < .00001) {\n vec = this.getStandardVector(0);\n vec.crossProduct(rotation.y, rotation.x);\n rotation.x.normalizeInPlace();\n }\n\n rotation.x.crossProduct(rotation.y, rotation.z);\n break;\n\n case 2:\n vec = this.getStandardVector(0);\n rotation.z.crossProduct(vec, rotation.y);\n\n if (rotation.y.normalizeWithLength(rotation.y).mag < .00001) {\n vec = this.getStandardVector(1);\n vec.crossProduct(rotation.z, rotation.x);\n rotation.x.normalizeInPlace();\n rotation.z.crossProduct(rotation.x, rotation.y);\n } else {\n rotation.y.crossProduct(rotation.z, rotation.x);\n }\n break;\n }\n }\n\n /** @internal */\n public updateRotation(animate: boolean = false, newRotationIn?: Matrix3d): void {\n let clearLocks = true;\n const oldRotation = this.axes.clone();\n let rMatrix: Matrix3d;\n let newRotation: ThreeAxes;\n\n if (!newRotationIn)\n newRotation = this.axes.clone(); // for axis based\n else\n newRotation = ThreeAxes.createFromMatrix3d(newRotationIn); // for animating context rotation change...\n\n const vp = this.currentView;\n const useACS = vp ? vp.isContextRotationRequired : false;\n\n switch (this.rotationMode) {\n case RotationMode.Top:\n // Get standard rotation relative to ACS when ACS context lock is enabled...\n newRotation.fromMatrix3d(AccuDraw.getStandardRotation(StandardViewId.Top, vp, useACS));\n this.flags.lockedRotation = true;\n break;\n\n case RotationMode.Front:\n // Get standard rotation relative to ACS when ACS context lock is enabled...\n newRotation.fromMatrix3d(AccuDraw.getStandardRotation(StandardViewId.Front, vp, useACS));\n this.flags.lockedRotation = true;\n break;\n\n case RotationMode.Side:\n // Get standard rotation relative to ACS when ACS context lock is enabled...\n newRotation.fromMatrix3d(AccuDraw.getStandardRotation(StandardViewId.Right, vp, useACS));\n this.flags.lockedRotation = true;\n break;\n\n case RotationMode.ACS:\n rMatrix = vp ? vp.getAuxCoordRotation() : Matrix3d.createIdentity();\n newRotation.fromMatrix3d(rMatrix);\n this.accountForAuxRotationPlane(newRotation, this.flags.auxRotationPlane);\n this.flags.lockedRotation = true;\n break;\n\n case RotationMode.View:\n rMatrix = vp ? vp.rotation : Matrix3d.createIdentity();\n newRotation.fromMatrix3d(rMatrix);\n this.flags.lockedRotation = false;\n break;\n\n case RotationMode.Context:\n switch (this.flags.contextRotMode) {\n case ContextMode.XAxis:\n this.getRotationFromVector(newRotation, 0);\n clearLocks = (LockedStates.Y_BM !== this.locked || !oldRotation.x.isExactEqual(newRotation.x)); // Try to keep locked axis when tool being unsuspended...\n break;\n\n case ContextMode.XAxis2:\n if (vp)\n this.getBestViewedRotationFromXVector(newRotation, vp); // Use base rotation axis that results in compass being most closely aligned to view direction....\n else\n this.getRotationFromVector(newRotation, 0);\n clearLocks = (LockedStates.Y_BM !== this.locked || !oldRotation.x.isExactEqual(newRotation.x)); // Try to keep locked axis when tool being unsuspended...\n break;\n\n case ContextMode.YAxis:\n this.getRotationFromVector(newRotation, 1);\n clearLocks = (LockedStates.X_BM !== this.locked || !oldRotation.y.isExactEqual(newRotation.y)); // Try to keep locked axis when tool being unsuspended...\n break;\n\n case ContextMode.ZAxis:\n this.getRotationFromVector(newRotation, 2);\n break;\n\n case ContextMode.Locked:\n break;\n }\n break;\n }\n\n const isChanged = !oldRotation.equals(newRotation);\n\n // unlock stuff if rotation has changed\n if (isChanged && clearLocks && (CompassMode.Rectangular === this.compassMode || !this._fieldLocked[ItemField.DIST_Item] || animate)) {\n this.locked = this.indexed = LockedStates.NONE_LOCKED;\n this.unlockAllFields();\n }\n\n this.axes.setFrom(newRotation);\n this.lastAxes.setFrom(newRotation);\n this.flags.redrawCompass = true;\n\n // If animate frame preference is set...\n if (!animate || !vp)\n return;\n\n // AccuDrawAnimatorPtr animator = AccuDrawAnimator:: Create();\n // viewport -> SetAnimator(* animator);\n // animator -> ChangeOfRotation(Matrix3d:: FromColumnVectors(oldRotation[0], oldRotation[1], oldRotation[2]));\n }\n\n /**\n * Enable AccuDraw so that it can be used by interactive tools.\n * This method is public to allow applications to provide a user interface to enable/disable AccuDraw.\n * @note Should not be called by interactive tools, those should use [[AccuDrawHintBuilder]]. AccuDraw is enabled for applications by default.\n * @see [[disableForSession]]\n */\n public enableForSession(): void {\n if (CurrentState.NotEnabled === this.currentState)\n this.currentState = CurrentState.Inactive;\n }\n\n /**\n * Disable AccuDraw so that it can not be used by interactive tools.\n * This method is public to allow applications to provide a user interface to enable/disable AccuDraw.\n * @note Should not be called by interactive tools, those should use [[AccuDrawHintBuilder]]. AccuDraw is enabled for applications by default.\n * @see [[enableForSession]]\n */\n public disableForSession(): void {\n this.currentState = CurrentState.NotEnabled;\n this.flags.redrawCompass = true; // Make sure decorators are called so we don't draw (i.e. erase AccuDraw compass)\n }\n\n /** @internal */\n public setLastPoint(pt: Point3d): void {\n const viewport = this.currentView;\n if (!viewport)\n return;\n\n const ev = new BeButtonEvent({ point: pt, rawPoint: pt, viewPoint: viewport.worldToView(pt), viewport });\n IModelApp.toolAdmin.setAdjustedDataPoint(ev);\n }\n\n /** Emulate a mouse click at the specified location in the supplied view by sending button down/up events. */\n public async sendDataPoint(pt: Point3d, viewport: ScreenViewport): Promise<void> {\n const ev = new BeButtonEvent({ point: pt, rawPoint: pt, viewPoint: viewport.worldToView(pt), viewport, inputSource: InputSource.Mouse, isDown: true });\n\n // Send both down and up events...\n await IModelApp.toolAdmin.sendButtonEvent(ev);\n ev.isDown = false;\n return IModelApp.toolAdmin.sendButtonEvent(ev);\n }\n\n /** @internal */\n public clearTentative(): boolean {\n if (!IModelApp.tentativePoint.isActive)\n return false;\n\n const wasSnapped = IModelApp.tentativePoint.isSnapped;\n IModelApp.tentativePoint.clear(true);\n return wasSnapped;\n }\n\n /** @internal */\n public async doAutoPoint(index: ItemField, mode: CompassMode): Promise<void> {\n const vp = this.currentView;\n if (!vp)\n return;\n\n if (CompassMode.Polar === mode) {\n if (!this.autoPointPlacement)\n return;\n\n if (this._fieldLocked[ItemField.DIST_Item] && (this._fieldLocked[ItemField.ANGLE_Item] || this.indexed & LockedStates.ANGLE_BM) && KeyinStatus.Dynamic === this._keyinStatus[index]) {\n this.fixPointPolar(vp);\n return this.sendDataPoint(this.point, vp);\n }\n\n return;\n }\n\n if (this._fieldLocked[ItemField.X_Item] && this._fieldLocked[ItemField.Y_Item]) {\n if (!this.isActive) {\n if (!vp.view.is3d() || this._fieldLocked[ItemField.Z_Item]) {\n const globalOrigin = new Point3d();\n\n if (vp.view.isSpatialView())\n globalOrigin.setFrom(vp.view.iModel.globalOrigin);\n\n return this.sendDataPoint(globalOrigin.plus(this.delta), vp);\n }\n\n return;\n }\n\n if (!this.autoPointPlacement || KeyinStatus.Dynamic !== this._keyinStatus[index])\n return;\n\n this.origin.plus3Scaled(this.axes.x, this.delta.x, this.axes.y, this.delta.y, this.axes.z, this.delta.z, this.point);\n return this.sendDataPoint(this.point, vp);\n }\n\n if (!this.autoPointPlacement || KeyinStatus.Dynamic !== this._keyinStatus[index])\n return;\n\n if ((ItemField.X_Item === index && this._fieldLocked[ItemField.X_Item] && (this.indexed & LockedStates.Y_BM)) || (ItemField.Y_Item === index && this._fieldLocked[ItemField.Y_Item] && (this.indexed & LockedStates.X_BM))) {\n this.origin.plus3Scaled(this.axes.x, this.delta.x, this.axes.y, this.delta.y, this.axes.z, this.delta.z, this.point);\n return this.sendDataPoint(this.point, vp);\n }\n }\n\n /** Get the current value for the supplied input field */\n public getValueByIndex(index: ItemField): number {\n switch (index) {\n case ItemField.X_Item: return this.delta.x;\n case ItemField.Y_Item: return this.delta.y;\n case ItemField.Z_Item: return this.delta.z;\n case ItemField.DIST_Item: return this._distance;\n case ItemField.ANGLE_Item: return this._angle;\n default:\n return 0.0;\n }\n }\n\n /** Set the current value for the supplied input field */\n public setValueByIndex(index: ItemField, value: number): void {\n switch (index) {\n case ItemField.X_Item:\n this.delta.x = value;\n break;\n case ItemField.Y_Item:\n this.delta.y = value;\n break;\n case ItemField.Z_Item:\n this.delta.z = value;\n break;\n case ItemField.DIST_Item:\n this._distance = value;\n break;\n case ItemField.ANGLE_Item:\n this._angle = value;\n break;\n }\n }\n\n private updateVector(angle: number): void {\n this.vector.set(Math.cos(angle), Math.sin(angle), 0.0);\n const rMatrix = this.getRotation();\n rMatrix.multiplyTransposeVectorInPlace(this.vector);\n }\n\n /** Allow the AccuDraw user interface to supply the distance parser */\n public getLengthParser(): ParserSpec | undefined {\n return IModelApp.quantityFormatter.findParserSpecByQuantityType(QuantityType.Length);\n }\n\n /** Allow the AccuDraw user interface to supply the distance parser */\n public getLengthFormatter(): FormatterSpec | undefined {\n return IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\n }\n\n private stringToDistance(str: string): QuantityParseResult {\n const parserSpec = this.getLengthParser();\n if (parserSpec)\n return parserSpec.parseToQuantityValue(str);\n return { ok: false, error: ParseError.InvalidParserSpec };\n }\n\n private stringFromDistance(distance: number): string {\n const formatterSpec = this.getLengthFormatter();\n let formattedValue = distance.toString();\n if (formatterSpec)\n formattedValue = IModelApp.quantityFormatter.formatQuantity(distance, formatterSpec);\n return formattedValue;\n }\n\n /** Allow the AccuDraw user interface to specify bearing */\n public get isBearingMode(): boolean { return this.getAngleParser()?.format.type === FormatType.Bearing; }\n\n /** Allow the AccuDraw user interface to specify bearing directions are always in xy plane */\n public get bearingFixedToPlane2d() { return this.flags.bearingFixToPlane2D; }\n public set bearingFixedToPlane2d(enable: boolean) { this.flags.bearingFixToPlane2D = enable; }\n\n /** Allow the AccuDraw user interface to supply the angle/direction parser */\n public getAngleParser(): ParserSpec | undefined {\n return IModelApp.quantityFormatter.findParserSpecByQuantityType(QuantityType.Angle);\n }\n\n /** Allow the AccuDraw user interface to supply the angle/direction formatter */\n public getAngleFormatter(): FormatterSpec | undefined {\n return IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Angle);\n }\n\n private stringToAngle(inString: string): QuantityParseResult {\n const parserSpec = this.getAngleParser();\n if (parserSpec)\n return parserSpec.parseToQuantityValue(inString);\n return { ok: false, error: ParseError.InvalidParserSpec };\n }\n\n private stringFromAngle(angle: number): string {\n if (this.isBearingMode && this.flags.bearingFixToPlane2D) {\n const point = Vector3d.create(this.axes.x.x, this.axes.x.y, 0.0);\n const matrix = Matrix3d.createRows(this.axes.x, this.axes.y, this.axes.z);\n if (matrix.determinant() < 0)\n angle = -angle; // Account for left handed rotations...\n\n point.normalizeInPlace();\n let adjustment = Math.acos(point.x);\n\n if (point.y < 0.0)\n adjustment = -adjustment;\n angle += adjustment; // This is the angle measured from design x...\n angle = (Math.PI / 2) - angle; // Account for bearing direction convention...\n\n if (angle < 0)\n angle = (Math.PI * 2) + angle; // Negative bearings aren't valid?\n }\n\n const formatterSpec = this.getAngleFormatter();\n let formattedValue = angle.toString();\n if (formatterSpec)\n formattedValue = IModelApp.quantityFormatter.formatQuantity(angle, formatterSpec);\n return formattedValue;\n }\n\n /** Can be called by sub-classes to get a formatted value to display for an AccuDraw input field\n * @see [[onFieldValueChange]]\n */\n public getFormattedValueByIndex(index: ItemField): string {\n const value = IModelApp.accuDraw.getValueByIndex(index);\n if (ItemField.ANGLE_Item === index)\n return this.stringFromAngle(value);\n return this.stringFromDistance(value);\n }\n\n private updateFieldValue(index: ItemField, input: string): BentleyStatus {\n if (input.length === 0)\n return BentleyStatus.ERROR;\n\n if (input.length === 1)\n switch (input) {\n case \":\":\n case \"-\":\n case \"+\":\n case \".\":\n return BentleyStatus.ERROR;\n }\n\n let parseResult;\n\n switch (index) {\n case ItemField.DIST_Item:\n parseResult = this.stringToDistance(input);\n if (Parser.isParsedQuantity(parseResult)) {\n this._distance = parseResult.value;\n break;\n }\n return BentleyStatus.ERROR;\n\n case ItemField.ANGLE_Item:\n parseResult = this.stringToAngle(input);\n if (Parser.isParsedQuantity(parseResult)) {\n if (this.isBearingMode && this.flags.bearingFixToPlane2D)\n this._angle = (Math.PI / 2) - parseResult.value;\n else\n this._angle = parseResult.value;\n break;\n }\n return BentleyStatus.ERROR;\n\n case ItemField.X_Item:\n parseResult = this.stringToDistance(input);\n if (Parser.isParsedQuantity(parseResult)) {\n this.delta.x = parseResult.value;\n\n this._xIsExplicit = (input[0] === \"+\" || input[0] === \"-\");\n if (!this._xIsExplicit) {\n if (this.smartKeyin && this.isActive && this._xIsNegative === (this.delta.x >= 0.0))\n this.delta.x = -this.delta.x;\n }\n break;\n }\n return BentleyStatus.ERROR;\n\n case ItemField.Y_Item:\n parseResult = this.stringToDistance(input);\n if (Parser.isParsedQuantity(parseResult)) {\n this.delta.y = parseResult.value;\n\n this._yIsExplicit = (input[0] === \"+\" || input[0] === \"-\");\n if (!this._yIsExplicit) {\n if (this.smartKeyin && this.isActive && this._yIsNegative === (this.delta.y >= 0.0))\n this.delta.y = -this.delta.y;\n }\n break;\n }\n return BentleyStatus.ERROR;\n\n case ItemField.Z_Item:\n parseResult = this.stringToDistance(input);\n if (Parser.isParsedQuantity(parseResult)) {\n this.delta.z = parseResult.value;\n break;\n }\n return BentleyStatus.ERROR;\n }\n\n return BentleyStatus.SUCCESS;\n }\n\n /** @internal */\n public unlockAllFields(): void {\n this.locked = LockedStates.NONE_LOCKED;;\n\n if (CompassMode.Polar === this.compassMode) {\n if (this._fieldLocked[ItemField.DIST_Item])\n this.setFieldLock(ItemField.DIST_Item, false);\n\n if (this._fieldLocked[ItemField.ANGLE_Item])\n this.setFieldLock(ItemField.ANGLE_Item, false);\n } else {\n if (this._fieldLocked[ItemField.X_Item])\n this.setFieldLock(ItemField.X_Item, false);\n\n if (this._fieldLocked[ItemField.Y_Item])\n this.setFieldLock(ItemField.Y_Item, false);\n }\n\n if (this._fieldLocked[ItemField.Z_Item]) {\n if (this.stickyZLock)\n this.delta.z = 0.0;\n else\n this.setFieldLock(ItemField.Z_Item, false);\n }\n\n this.setKeyinStatus(ItemField.DIST_Item, KeyinStatus.Dynamic);\n this.setKeyinStatus(ItemField.ANGLE_Item, KeyinStatus.Dynamic);\n this.setKeyinStatus(ItemField.X_Item, KeyinStatus.Dynamic);\n this.setKeyinStatus(ItemField.Y_Item, KeyinStatus.Dynamic);\n this.setKeyinStatus(ItemField.Z_Item, KeyinStatus.Dynamic);\n\n if (!this.smartKeyin)\n this.setFocusItem(CompassMode.Polar === this.compassMode ? ItemField.DIST_Item : ItemField.X_Item);\n\n this.dontMoveFocus = false;\n }\n\n /** produces the normal vector of the closest plane to the view which\n * contains inVec (uses true view rotation, never auxiliary)\n */\n private planeByVectorAndView(normalVec: Vector3d, inVec: Vector3d, vp: Viewport): boolean {\n if (!vp.view.is3d()) {\n normalVec.setFrom(Vector3d.unitZ());\n return true;\n }\n\n const viewNormal = vp.rotation.getRow(2);\n const yVec = viewNormal.crossProduct(inVec);\n\n if (!yVec.normalizeInPlace()) {\n normalVec.setFrom(viewNormal);\n return false;\n }\n\n inVec.crossProduct(yVec, normalVec);\n return true;\n }\n\n private _acosWithLimitCheck(value: number): number {\n if (value >= 1.0)\n return 0.0;\n if (value <= -1.0)\n return Math.PI;\n return Math.acos(value);\n }\n\n private handleDegeneratePolarCase(): void {\n if (!(this.locked & LockedStates.DIST_BM))\n this._distance = 0.0;\n\n if (this.locked & LockedStates.VEC_BM) {\n this._angle = this._acosWithLimitCheck(this.vector.dotProduct(this.axes.x));\n } else if (this.locked & LockedStates.Y_BM) {\n this.vector.setFrom(this.axes.y);\n this._angle = Math.PI / 2.0;\n this.indexed = this.locked;\n } else if (this.locked & LockedStates.X_BM) {\n this.vector.setFrom(this.axes.x);\n this._angle = 0.0;\n this.indexed = this.locked;\n } else {\n // use last good vector\n this._angle = this._acosWithLimitCheck(this.vector.dotProduct(this.axes.x));\n }\n this.origin.plusScaled(this.vector, this._distance, this.point);\n }\n\n private rawDeltaIsValid(rawDelta: number): boolean {\n /* Cursor Distance (*(+/-)) sense testing is not valid when raw delta is\n meaningless (0.0)...to make this change safer only reject the\n raw delta if unit or grid lock is also on. */\n if (0.0 !== rawDelta)\n return true;\n\n // The \"I don't want grid lock\" flag can be set by tools to override the default behavior...\n if (0 === (IModelApp.toolAdmin.toolState.coordLockOvr & CoordinateLockOverrides.Grid))\n return true;\n\n return (!IModelApp.toolAdmin.gridLock);\n }\n\n /** Call from an AccuDraw UI event to check if key is valid for updating the input field value. */\n protected itemFieldInputIsValid(key: string, item: ItemField): boolean {\n if (1 !== key.length)\n return false;\n\n switch (key) {\n case \".\":\n case \",\":\n return true;\n\n case \"'\": // feet/minutes...\n case \"\\\"\": // inches/seconds...\n return true;\n\n case \"°\": // degrees...\n return (ItemField.ANGLE_Item === item); // Allowed for angle input...\n\n case \"N\":\n case \"S\":\n case \"E\":\n case \"W\":\n case \"n\":\n case \"s\":\n case \"e\":\n case \"w\":\n return (ItemField.ANGLE_Item === item && this.isBearingMode); // Allowed for bearing direction input, trumps shortcuts...\n }\n\n if (!Number.isNaN(parseInt(key, 10)))\n return true; // Accept numeric input...\n\n if (key.toLowerCase() !== key.toUpperCase())\n return false; // Treat unhandled letters as potential shortcuts...\n\n // Let parser deal with anything else, like +-/*, etc.\n return true;\n }\n\n /** Call from an AccuDraw UI event to sync the supplied input field value */\n public async processFieldInput(index: ItemField, input: string, synchText: boolean): Promise<void> {\n if (BentleyStatus.SUCCESS !== this.updateFieldValue(index, input)) {\n this._unlockFieldInternal(index); // Don't want keyin status to change when entering '.', etc.\n return;\n }\n\n switch (index) {\n case ItemField.DIST_Item:\n this.distanceLock(synchText, false); // Don't save distance here, partial input...\n await this.doAutoPoint(index, CompassMode.Polar);\n break;\n\n case ItemField.ANGLE_Item:\n this.setFieldLock(index, true);\n\n if (synchText) {\n this.onFieldValueChange(index);\n this.setKeyinStatus(index, KeyinStatus.Dynamic);\n }\n\n if (!this.isBearingMode || !this.flags.bearingFixToPlane2D)\n this.updateVector(this._angle);\n else\n this.vector.set(Math.cos(this._angle), Math.sin(this._angle), 0.0);\n\n this.locked |= LockedStates.VEC_BM;\n await this.doAutoPoint(index, CompassMode.Polar);\n break;\n\n case ItemField.X_Item:\n case ItemField.Y_Item:\n this.locked |= (ItemField.X_Item === index) ? LockedStates.X_BM : LockedStates.Y_BM;\n\n // falls through\n case ItemField.Z_Item:\n this.setFieldLock(index, true);\n if (synchText) {\n this.onFieldValueChange(index);\n this.setKeyinStatus(index, KeyinStatus.Dynamic);\n }\n\n await this.doAutoPoint(index, this.compassMode);\n break;\n }\n\n this.refreshDecorationsAndDynamics();\n }\n\n private _lockFieldInternal(index: ItemField): void {\n if (this._fieldLocked[index])\n return;\n\n this.setFieldLock(index, true);\n\n switch (index) {\n case ItemField.DIST_Item:\n this.distanceLock(true, false);\n break;\n\n case ItemField.ANGLE_Item:\n this.angleLock();\n break;\n\n case ItemField.X_Item:\n this.locked |= LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n this.locked |= LockedStates.Y_BM;\n break;\n\n case ItemField.Z_Item:\n break;\n }\n }\n\n private _unlockFieldInternal(index: ItemField): void {\n switch (index) {\n case ItemField.DIST_Item:\n this.locked &= ~LockedStates.DIST_BM;\n break;\n\n case ItemField.ANGLE_Item:\n this.locked &= ~LockedStates.VEC_BM;\n break;\n\n case ItemField.X_Item:\n this.locked &= ~LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n this.locked &= ~LockedStates.Y_BM;\n break;\n }\n\n if (index !== ItemField.Z_Item || !this.stickyZLock)\n this.setFieldLock(index, false);\n }\n\n /** @internal */\n public updateFieldLock(index: ItemField, locked: boolean): void {\n if (locked) {\n this._lockFieldInternal(index);\n return;\n }\n\n this._unlockFieldInternal(index);\n this.setKeyinStatus(index, KeyinStatus.Dynamic);\n }\n\n /** @internal */\n public static getSnapRotation(snap: SnapDetail, currentVp: Viewport | undefined, out?: Matrix3d): Matrix3d | undefined {\n const vp = (undefined !== currentVp) ? currentVp : snap.viewport;\n const snapDetail = snap.primitive?.closestPoint(snap.snapPoint, false);\n const frame = snapDetail?.curve?.fractionToFrenetFrame(snapDetail.fraction);\n\n if (undefined === frame && undefined === snap.normal)\n return undefined;\n\n const zVec = (vp.view.allow3dManipulations() ? (snap.normal?.clone() ?? frame?.matrix.columnZ()) : Vector3d.unitZ());\n if (undefined === zVec)\n return undefined;\n\n const rotation = out ? out : new Matrix3d();\n const viewZ = vp.rotation.rowZ();\n\n zVec.normalizeInPlace();\n if (zVec.dotProduct(viewZ) < 0.0)\n zVec.negate(zVec);\n\n if (frame) {\n const xVec = frame.matrix.columnX();\n xVec.normalizeInPlace();\n const yVec = zVec.unitCrossProduct(xVec);\n\n if (undefined !== yVec) {\n rotation.setColumns(xVec, yVec, zVec);\n rotation.makeRigid();\n rotation.transposeInPlace();\n return rotation;\n }\n }\n\n Matrix3d.createRigidHeadsUp(zVec, undefined, rotation);\n rotation.transposeInPlace();\n return rotation;\n }\n\n /** @internal */\n public static getStandardRotation(nStandard: StandardViewId, vp: Viewport | undefined, useACS: boolean, out?: Matrix3d): Matrix3d {\n const rMatrix = out ? out : new Matrix3d();\n rMatrix.setFrom(ViewState.getStandardViewMatrix(nStandard));\n const useVp = vp ? vp : IModelApp.viewManager.selectedView;\n\n if (!useACS) {\n const globeToWorld = vp?.view.getGlobeRotation();\n if (globeToWorld)\n rMatrix.multiplyMatrixMatrix(globeToWorld, rMatrix);\n }\n\n if (!useACS || !useVp)\n return rMatrix;\n\n rMatrix.multiplyMatrixMatrix(useVp.getAuxCoordRotation(AccuDraw._tempRot), rMatrix);\n return rMatrix;\n }\n\n /** @internal */\n public static getCurrentOrientation(vp: Viewport, checkAccuDraw: boolean, checkACS: boolean, rMatrix?: Matrix3d): Matrix3d | undefined {\n if (checkAccuDraw && IModelApp.accuDraw.isActive)\n return IModelApp.accuDraw.getRotation(rMatrix);\n\n const useVp = vp ? vp : IModelApp.viewManager.selectedView;\n if (!useVp)\n return Matrix3d.createIdentity(rMatrix);\n\n if (checkACS && useVp.isContextRotationRequired)\n return useVp.getAuxCoordRotation(rMatrix);\n\n return useVp.rotation;\n }\n\n /** @internal */\n public static updateAuxCoordinateSystem(acs: AuxCoordSystemState, vp: Viewport, allViews: boolean = true): void {\n // When modeling with multiple spatial views open, you'd typically want the same ACS in all views...\n if (allViews && vp.view.isSpatialView()) {\n for (const otherVp of IModelApp.viewManager) {\n if (otherVp !== vp && otherVp.view.isSpatialView())\n otherVp.view.setAuxiliaryCoordinateSystem(acs);\n }\n }\n\n vp.view.setAuxiliaryCoordinateSystem(acs);\n\n // NOTE: Change AccuDraw's base rotation to ACS.\n IModelApp.accuDraw.setContext(AccuDrawFlags.OrientACS);\n }\n\n /** @internal */\n public distanceLock(synchText: boolean, saveInHistory: boolean): void {\n this.locked |= LockedStates.DIST_BM;\n\n if (!this._fieldLocked[ItemField.DIST_Item])\n this.setFieldLock(ItemField.DIST_Item, true);\n\n if (saveInHistory)\n this.saveCoordinate(ItemField.DIST_Item, this._distance);\n\n if (synchText) {\n this.onFieldValueChange(ItemField.DIST_Item);\n this.setKeyinStatus(ItemField.DIST_Item, KeyinStatus.Dynamic);\n }\n }\n\n /** @internal */\n public angleLock(): void {\n if (this.indexed & LockedStates.Y_BM)\n this.locked |= LockedStates.Y_BM;\n else if (this.indexed & LockedStates.X_BM)\n this.locked |= LockedStates.X_BM;\n else\n this.locked |= LockedStates.VEC_BM;\n\n this.clearTentative();\n\n if (!this._fieldLocked[ItemField.ANGLE_Item]) {\n this.setFieldLock(ItemField.ANGLE_Item, true);\n this.setKeyinStatus(ItemField.ANGLE_Item, KeyinStatus.Dynamic);\n }\n\n this.flags.lockedRotation = true;\n this.flags.softAngleLock = false;\n }\n\n /** @internal */\n public doLockAngle(isSnapped: boolean): void {\n if (CompassMode.Polar !== this.compassMode) {\n this.locked = LockedStates.NONE_LOCKED;\n this._rawPoint.setFrom(this.point);\n\n const vp = this.currentView;\n if (vp)\n this.fixPointPolar(vp);\n\n this.changeCompassMode(true);\n }\n\n this.setFieldLock(ItemField.ANGLE_Item, !this._fieldLocked[ItemField.ANGLE_Item]);\n\n if (this._fieldLocked[ItemField.ANGLE_Item]) {\n // Move focus to angle field...\n if (!isSnapped && this.autoFocusFields)\n this.setFocusItem(ItemField.ANGLE_Item);\n\n this.angleLock();\n\n if (!isSnapped)\n this.flags.softAngleLock = true;\n } else {\n this.locked &= ~LockedStates.ANGLE_BM;\n this.saveCoordinate(ItemField.ANGLE_Item, this._angle);\n this.setKeyinStatus(ItemField.ANGLE_Item, KeyinStatus.Dynamic);\n }\n }\n\n private saveAngle(value: number): void {\n if (Geometry.isAlmostEqualNumber(value, 0.0) || Geometry.isAlmostEqualNumber(Math.abs(value), Math.PI) || Geometry.isAlmostEqualNumber(Math.abs(value), (Math.PI / 2.0)))\n return; // Don't accept 0, 90, -90, 180 and -180 degrees...\n\n const foundIndex = this._savedAngles.findIndex(angle => Geometry.isAlmostEqualNumber(angle, value));\n if (-1 !== foundIndex) {\n this._savedAngleIndex = foundIndex; // Set index to existing entry with matching value...\n return;\n }\n\n this._savedAngleIndex++;\n if (this._savedAngleIndex >= Constants.MAX_SAVED_VALUES)\n this._savedAngleIndex = 0;\n\n this._savedAngles[this._savedAngleIndex] = value;\n }\n\n private saveDistance(value: number): void {\n if (Geometry.isAlmostEqualNumber(value, 0.0))\n return; // Don't accept zero or nearly zero...\n\n value = Math.abs(value); // Only save positive distance...\n const foundIndex = this._savedDistances.findIndex(distance => Geometry.isAlmostEqualNumber(distance, value));\n if (-1 !== foundIndex) {\n this._savedDistanceIndex = foundIndex; // Set index to existing entry with matching value...\n return;\n }\n\n this._savedDistanceIndex++;\n if (this._savedDistanceIndex >= Constants.MAX_SAVED_VALUES)\n this._savedDistanceIndex = 0;\n\n this._savedDistances[this._savedDistanceIndex] = value;\n this._lastDistance = value;\n }\n\n /** @internal */\n public saveCoordinate(index: ItemField, value: number): void {\n if (ItemField.ANGLE_Item === index)\n this.saveAngle(value);\n else\n this.saveDistance(value);\n }\n\n private getSavedAngle(next: boolean): number | undefined {\n if (-1 === this._savedAngleIndex || 0 === this._savedAngles.length)\n return undefined;\n\n const value = this._savedAngles[this._savedAngleIndex];\n\n if (next) {\n this._savedAngleIndex++;\n if (this._savedAngleIndex >= this._savedAngles.length)\n this._savedAngleIndex = 0;\n }\n else {\n this._savedAngleIndex--;\n if (this._savedAngleIndex < 0)\n this._savedAngleIndex = this._savedAngles.length - 1;\n }\n\n return value;\n }\n\n private getSavedDistance(next: boolean): number | undefined {\n if (-1 === this._savedDistanceIndex || 0 === this._savedDistances.length)\n return undefined;\n\n const value = this._savedDistances[this._savedDistanceIndex];\n\n if (next) {\n this._savedDistanceIndex++;\n if (this._savedDistanceIndex >= this._savedDistances.length)\n this._savedDistanceIndex = 0;\n }\n else {\n this._savedDistanceIndex--;\n if (this._savedDistanceIndex < 0)\n this._savedDistanceIndex = this._savedDistances.length - 1;\n }\n\n return value;\n }\n\n /** @internal */\n public getSavedValue(index: ItemField, next: boolean): void {\n const isAngle = (ItemField.ANGLE_Item === index);\n const savedValue = (isAngle ? this.getSavedAngle(next) : this.getSavedDistance(next));\n if (undefined === savedValue)\n return;\n\n if (!isAngle)\n this._lastDistance = savedValue;\n\n const currValue = this.getValueByIndex(index);\n this.setValueByIndex(index, currValue < 0.0 ? -savedValue : savedValue);\n\n switch (index) {\n case ItemField.X_Item:\n this.setFieldLock(ItemField.X_Item, true);\n this.onFieldValueChange(ItemField.X_Item);\n this.locked |= LockedStates.X_BM;\n break;\n\n case ItemField.Y_Item:\n this.setFieldLock(ItemField.Y_Item, true);\n this.onFieldValueChange(ItemField.Y_Item);\n this.locked |= LockedStates.Y_BM;\n break;\n\n case ItemField.Z_Item:\n this.setFieldLock(ItemField.Z_Item, true);\n this.onFieldValueChange(ItemField.Z_Item);\n break;\n\n case ItemField.DIST_Item:\n this.distanceLock(true, false);\n break;\n\n case ItemField.ANGLE_Item:\n this.locked &= ~LockedStates.XY_BM;\n this.updateVector(this._angle);\n this.angleLock();\n break;\n }\n }\n\n /** @internal */\n public clearSavedValues(): void {\n this._savedDistances.length = this._savedAngles.length = 0;\n this._savedDistanceIndex = this._savedAngleIndex = -1;\n }\n\n /** @internal */\n public changeCompassMode(animate: boolean = false): void {\n this.unlockAllFields(); // Clear locks for the current mode and send change notifications...\n this.setCompassMode(CompassMode.Polar === this.compassMode ? CompassMode.Rectangular : CompassMode.Polar);\n\n const viewport = this.currentView;\n if (!animate || !viewport)\n return;\n\n // AccuDrawAnimatorPtr animator = AccuDrawAnimator:: Create();\n // viewport.setAnimator(* animator);\n // animator -> ChangeOfMode();\n }\n\n /** @internal */\n public changeBaseRotationMode(mode: RotationMode): void {\n if (mode > RotationMode.Context)\n return;\n\n if (RotationMode.Context === mode) {\n // See if it is better to stay with the current base rotation (only care about z)...\n if (RotationMode.Context !== this.flags.baseRotation) {\n const baseRMatrix = this.getBaseRotation();\n const baseZ = baseRMatrix.getRow(2);\n\n if (baseZ.isParallelTo(this.axes.z, true))\n return;\n }\n\n this.baseAxes.setFrom(this.axes);\n this.flags.auxRotationPlane = RotationMode.Top;\n }\n\n this.flags.baseRotation = mode;\n }\n\n private getBaseRotation(): Matrix3d {\n const vp = this.currentView;\n let baseRMatrix: Matrix3d;\n const useAcs = vp ? vp.isContextRotationRequired : false;\n switch (this.flags.baseRotation) {\n case RotationMode.Top: {\n baseRMatrix = AccuDraw.getStandardRotation(StandardViewId.Top, vp, useAcs)!;\n break;\n }\n\n case RotationMode.Front: {\n baseRMatrix = AccuDraw.getStandardRotation(StandardViewId.Front, vp, useAcs)!;\n break;\n }\n\n case RotationMode.Side: {\n baseRMatrix = AccuDraw.getStandardRotation(StandardViewId.Right, vp, useAcs)!;\n break;\n }\n\n case RotationMode.ACS: {\n baseRMatrix = vp ? vp.getAuxCoordRotation() : Matrix3d.createIdentity();\n const axes = ThreeAxes.createFromMatrix3d(baseRMatrix);\n this.accountForAuxRotationPlane(axes, this.flags.auxRotationPlane);\n axes.toMatrix3d(baseRMatrix);\n break;\n }\n\n case RotationMode.View: {\n baseRMatrix = vp ? vp.rotation : Matrix3d.createIdentity();\n break;\n }\n\n case RotationMode.Context: {\n const axes = new ThreeAxes();\n axes.setFrom(this.baseAxes);\n this.accountForAuxRotationPlane(axes, this.flags.auxRotationPlane);\n baseRMatrix = axes.toMatrix3d();\n break;\n }\n\n default: {\n baseRMatrix = Matrix3d.createIdentity();\n break;\n }\n }\n return baseRMatrix;\n }\n\n /** @internal */\n public setContextRotation(rMatrix: Matrix3d, locked: boolean, animate: boolean): void {\n this.flags.lockedRotation = locked;\n this.flags.contextRotMode = locked ? ContextMode.Locked : ContextMode.None;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation(animate, rMatrix);\n }\n\n private clearContext(): void {\n this.published.flags = 0;\n this.flags.rotationNeedsUpdate = true;\n this.flags.fixedOrg = false;\n\n this.newFocus = ItemField.X_Item;\n this.unlockAllFields();\n\n if (this.rotationMode !== this.flags.baseRotation)\n this.setRotationMode(this.flags.baseRotation);\n\n if (this.compassMode !== this.flags.baseMode)\n this.setCompassMode(this.flags.baseMode);\n }\n\n /** @internal */\n public setContext(flags: AccuDrawFlags, originP?: Point3d, orientationP?: Matrix3d | Vector3d, deltaP?: Vector3d, distanceP?: number, angleP?: number, transP?: Transform): BentleyStatus {\n this.published.flags |= flags;\n\n if (flags & AccuDrawFlags.SetOrigin && originP) {\n this.published.origin.setFrom(originP);\n\n if (transP)\n transP.multiplyPoint3d(this.published.origin, this.published.origin);\n }\n\n if (deltaP) {\n this.published.delta.setFrom(deltaP);\n\n if (transP)\n this.published.delta.scaleInPlace(transP.matrix.columnX().magnitude());\n }\n\n if (typeof distanceP === \"number\") {\n this.published.distance = distanceP;\n\n if (transP)\n this.published.distance *= transP.matrix.columnX().magnitude();\n }\n\n if (typeof angleP === \"number\")\n this.published.angle = angleP;\n\n if (orientationP) {\n if (flags & AccuDrawFlags.SetXAxis || flags & AccuDrawFlags.SetNormal || flags & AccuDrawFlags.SetXAxis2) {\n this.published.vector.setFrom(orientationP as Vector3d);\n\n if (transP)\n transP.matrix.multiplyVectorInPlace(this.published.vector);\n\n this.published.vector.normalizeInPlace();\n } else if (flags & AccuDrawFlags.SetRMatrix) {\n this.published.rMatrix.setFrom(orientationP as Matrix3d);\n\n if (transP) {\n this.published.rMatrix.multiplyMatrixMatrix(transP.matrix, this.published.rMatrix);\n this.published.rMatrix.normalizeColumnsInPlace();\n }\n }\n }\n\n if (flags) {\n this.onEventCommon();\n if (!this.flags.haveValidOrigin)\n this.setDefaultOrigin(this.currentView);\n }\n\n return this.isEnabled ? BentleyStatus.SUCCESS : BentleyStatus.ERROR;\n }\n\n private onEventCommon(): void {\n if (this.published.flags & AccuDrawFlags.RedrawCompass) {\n this.flags.indexLocked = true;\n this.flags.redrawCompass = true;\n }\n\n if (this.published.flags & AccuDrawFlags.UpdateRotation) {\n this.flags.indexLocked = true;\n this.flags.contextRotMode = ContextMode.XAxis;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n this.flags.indexLocked = true;\n }\n }\n\n /** @internal */\n public onPrimitiveToolInstall(): boolean {\n this._lastSnapDetail = undefined;\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n this.saveLockedCoords();\n // Setup default starting tool state...\n this.currentState = CurrentState.Inactive;\n this.clearContext();\n if (this.alwaysShowCompass)\n this.activate();\n\n return false;\n }\n\n /** @internal */\n public onViewToolInstall(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n\n const tool = IModelApp.toolAdmin.activeTool;\n if (tool && !(tool instanceof ViewTool))\n this.saveState(this.savedStateViewTool); // Save AccuDraw state of tool being suspended...\n\n this.currentState = CurrentState.Deactivated; // Default to disabled for view tools.\n return false;\n }\n\n /** @internal */\n public onViewToolExit(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n this.restoreState(this.savedStateViewTool); // Restore AccuDraw state of suspended tool...\n return false;\n }\n\n /** @internal */\n public onInputCollectorInstall(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n\n const tool = IModelApp.toolAdmin.activeTool;\n if (tool && !(tool instanceof InputCollector))\n this.saveState(this.savedStateInputCollector); // Save AccuDraw state of tool being suspended...\n\n this.currentState = CurrentState.Inactive; // Default to inactive for input collectors.\n return false;\n }\n\n /** @internal */\n public onInputCollectorExit(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n this.restoreState(this.savedStateInputCollector); // Restore AccuDraw state of suspended tool...\n return false;\n }\n\n /** @internal */\n public saveState(stateBuffer: SavedState): void {\n stateBuffer.state = this.currentState;\n stateBuffer.mode = this.compassMode;\n stateBuffer.rotationMode = this.rotationMode;\n stateBuffer.axes.setFrom(this.axes);\n stateBuffer.origin.setFrom(this.origin);\n stateBuffer.auxRotationPlane = this.flags.auxRotationPlane;\n stateBuffer.contextRotMode = this.flags.contextRotMode;\n stateBuffer.fixedOrg = this.flags.fixedOrg;\n stateBuffer.ignoreDataButton = true;\n stateBuffer.ignoreFlags = 0;\n }\n\n /** @internal */\n public restoreState(stateBuffer: SavedState): void {\n if (0 === (stateBuffer.ignoreFlags & AccuDrawFlags.Disable)) {\n this.currentState = stateBuffer.state;\n }\n\n if (0 === (stateBuffer.ignoreFlags & AccuDrawFlags.SetOrigin)) {\n this.origin.setFrom(stateBuffer.origin);\n this.planePt.setFrom(stateBuffer.origin);\n }\n\n if (0 === (stateBuffer.ignoreFlags & AccuDrawFlags.SetRMatrix)) {\n this.axes.setFrom(stateBuffer.axes);\n this.setRotationMode(stateBuffer.rotationMode);\n this.flags.auxRotationPlane = stateBuffer.auxRotationPlane;\n this.flags.contextRotMode = stateBuffer.contextRotMode;\n }\n\n this.flags.fixedOrg = stateBuffer.fixedOrg;\n this.setCompassMode(stateBuffer.mode);\n this.updateRotation();\n\n if (stateBuffer.ignoreDataButton)\n this.flags.ignoreDataButton = (this.flags.inDataPoint ? true : false);\n }\n\n private getCompassPlanePoint(point: Point3d, vp: Viewport): boolean {\n point.setFrom(this.origin); // Isn't this just planePt?!? Maybe at display time it is not setup yet?!?\n if (this._fieldLocked[ItemField.Z_Item] && vp.view.is3d()) {\n if (0.0 !== this.delta.z && !(this.delta.z < Constants.SMALL_ANGLE && this.delta.z > -Constants.SMALL_ANGLE)) {\n point.addScaledInPlace(this.axes.z, this.delta.z);\n return true;\n }\n }\n return false;\n }\n\n private getDisplayTransform(vp: Viewport): Transform {\n const rMatrix = (!this.flags.animateRotation || 0.0 === this._percentChanged) ? this.axes.toMatrix3d() : this.lastAxes.toMatrix3d();\n const origin = new Point3d(); // Compass origin is adjusted by active z-lock...\n this.getCompassPlanePoint(origin, vp);\n const scale = vp.pixelsFromInches(this._compassSizeInches) * vp.getPixelSizeAtPoint(origin);\n\n rMatrix.transposeInPlace();\n rMatrix.scaleColumns(scale, scale, scale, rMatrix);\n return Transform.createRefs(origin, rMatrix);\n }\n\n private setIndexingTolerance(vp: Viewport) {\n const origin = new Point3d(); // Compass origin is adjusted by active z-lock...\n this.getCompassPlanePoint(origin, vp);\n this._tolerance = vp.pixelsFromInches(this._indexToleranceInches) * vp.getPixelSizeAtPoint(origin);\n if (Constants.SMALL_ANGLE > this._tolerance)\n this._tolerance = Constants.SMALL_ANGLE;\n }\n\n private displayAlignments(graphic: GraphicBuilder, vp: Viewport): void {\n const bgColor = vp.view.backgroundColor;\n const colorIndex = this._indexColor.adjustedForContrast(bgColor, 130);\n const origin = new Point3d(); // Compass origin is adjusted by active z-lock...\n // For non-zero Z value draw indicator line from plane point to compass origin...\n if (this.getCompassPlanePoint(origin, vp)) {\n const colorZ = this._frameColor.adjustedForContrast(bgColor, 155);\n graphic.setSymbology(colorZ, colorZ, 2);\n graphic.addLineString([origin, this.origin]);\n graphic.setSymbology(colorZ, colorZ, 4);\n graphic.addPointString([this.origin]);\n }\n\n // Get snap point from AccuSnap/Tentative or use raw point...\n let distance = 0.0;\n let snapPt = this._rawPoint;\n\n const snap = TentativeOrAccuSnap.getCurrentSnap();\n if (snap) {\n snapPt = snap.snapPoint;\n distance = this.point.distance(snapPt);\n }\n\n const isRectMode = (CompassMode.Rectangular === this.compassMode);\n const offsetSnap = ((TentativeOrAccuSnap.isHot || IModelApp.tentativePoint.isActive) && ((this.locked) || (distance > 0.0)));\n\n // XY Offset:\n if (offsetSnap) {\n if (isRectMode) {\n const vec = this.point.vectorTo(this._rawPointOnPlane);\n const xOffset = vec.dotProduct(this.axes.x);\n const yOffset = vec.dotProduct(this.axes.y);\n const xIsOffset = (Math.abs(xOffset) > 1.0);\n const yIsOffset = (Math.abs(yOffset) > 1.0);\n\n if (xIsOffset) {\n if (yIsOffset) { /* both */\n const pts: Point3d[] = [\n this.point,\n this.point.plusScaled(this.axes.y, yOffset),\n this._rawPointOnPlane,\n this.point.plusScaled(this.axes.x, xOffset)];\n pts[4] = pts[0];\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString(pts);\n } else { /* just X */\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this.point, this._rawPointOnPlane]);\n }\n } else if (yIsOffset) { /* just Y */\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this.point, this._rawPointOnPlane]);\n }\n }\n }\n\n const isOnCompassPlane = (!vp.view.is3d() || this.flags.pointIsOnPlane || this.isZLocked(vp));\n\n // Z Offset:\n if (offsetSnap) {\n if (isOnCompassPlane) {\n if (isRectMode) {\n const zOffset = snapPt.distance(this._rawPointOnPlane);\n if (zOffset > Constants.SMALL_ANGLE || zOffset < -Constants.SMALL_ANGLE) {\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this._rawPointOnPlane, this._rawPoint]);\n }\n } else {\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this.point, this._rawPoint]);\n }\n }\n }\n\n // Fat Point:\n if (offsetSnap) {\n graphic.setSymbology(colorIndex, colorIndex, 8);\n graphic.addPointString([this.point]);\n }\n\n let axisIsIndexed = false;\n\n // Axis Indexing:\n if (isRectMode) {\n if ((this.indexed & LockedStates.XY_BM) && (this.flags.pointIsOnPlane || this._fieldLocked[ItemField.Z_Item]))\n axisIsIndexed = true;\n } else {\n if ((this.indexed & LockedStates.ANGLE_BM || this.locked & LockedStates.ANGLE_BM) && (this.flags.pointIsOnPlane || this._fieldLocked[ItemField.Z_Item]))\n axisIsIndexed = true;\n }\n\n if (axisIsIndexed) {\n graphic.setSymbology(colorIndex, colorIndex, 4);\n graphic.addLineString([this.point, this.planePt]);\n }\n\n // Distance Indexing:\n if (this.indexed & LockedStates.DIST_BM) {\n const len = this._tolerance; // Show tick mark based on _GetIndexToleranceInches for length...\n let vec: Vector3d;\n\n if (isRectMode) {\n let index = this.indexed & LockedStates.XY_BM;\n\n if (!index)\n index = this.locked & LockedStates.XY_BM;\n\n vec = (index === LockedStates.X_BM) ? this.axes.x : this.axes.y;\n } else {\n const deltaVec = this.origin.vectorTo(this.point);\n vec = this.axes.z.crossProduct(deltaVec);\n vec.normalizeInPlace();\n }\n\n graphic.setSymbology(colorIndex, colorIndex, 3);\n graphic.addLineString([this.point.plusScaled(vec, len), this.point.plusScaled(vec, -len)]);\n }\n\n // XY Lock:\n if (isRectMode && !axisIsIndexed) {\n const locked = this.locked & LockedStates.XY_BM;\n\n if ((0 !== locked) && isOnCompassPlane) {\n const pts: Point3d[] = [this.point, this.point, this.point];\n\n if (locked & LockedStates.X_BM)\n pts[2].setFrom(this.planePt.plusScaled(this.axes.x, this.delta.x));\n\n if (locked & LockedStates.Y_BM)\n pts[0].setFrom(this.planePt.plusScaled(this.axes.y, this.delta.y));\n\n switch (locked) {\n case LockedStates.X_BM:\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([pts[1], pts[2]]);\n break;\n\n case LockedStates.Y_BM:\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([pts[0], pts[1]]);\n break;\n\n case LockedStates.XY_BM:\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString(pts);\n break;\n }\n }\n }\n\n if (undefined !== this._lastSnapDetail && undefined === snap) {\n if (this._lastSnapDetail.indexed) {\n graphic.setSymbology(colorIndex, colorIndex, 2, LinePixels.Code5);\n graphic.addLineString([this.point, this._lastSnapDetail.point]);\n }\n\n graphic.setSymbology(colorIndex, colorIndex, 8, LinePixels.Solid);\n graphic.addPointString([this._lastSnapDetail.point]);\n }\n }\n\n /** @internal */\n public testDecorationHit(id: string): boolean { return id === this._acsPickId; }\n /** @internal */\n public getDecorationGeometry(hit: HitDetail): GeometryStreamProps | undefined {\n if (!hit.viewport.viewFlags.acsTriad)\n return undefined;\n const geomData = GeomJson.Writer.toIModelJson(PointString3d.create(hit.viewport.view.auxiliaryCoordinateSystem.getOrigin()));\n if (undefined === geomData)\n return undefined;\n const acsGeom: GeometryStreamProps = [geomData];\n return acsGeom;\n }\n\n /** @internal */\n public decorate(context: DecorateContext) {\n if (context.viewport.viewFlags.acsTriad) {\n context.viewport.view.auxiliaryCoordinateSystem.display(context, (ACSDisplayOptions.CheckVisible | ACSDisplayOptions.Active));\n if (undefined === this._acsPickId)\n this._acsPickId = context.viewport.iModel.transientIds.getNext();\n const acsPickBuilder = context.createGraphicBuilder(GraphicType.WorldDecoration, undefined, this._acsPickId);\n const color = ColorDef.blue.adjustedForContrast(context.viewport.view.backgroundColor, 50);\n acsPickBuilder.setSymbology(color, color, 6);\n acsPickBuilder.addPointString([context.viewport.view.auxiliaryCoordinateSystem.getOrigin()]);\n context.addDecorationFromBuilder(acsPickBuilder);\n }\n\n // Make sure this is cleared even if we do nothing...redraw might have been to make compass go away...\n this.flags.redrawCompass = false;\n\n // Check that AccuDraw is enabled...\n if (!this.isActive)\n return;\n\n const vp = context.viewport;\n if (this.currentView !== vp) // Do nothing if AccuDraw is not enabled for this view...\n return;\n\n this.setIndexingTolerance(vp);\n\n // Display indexing lines, distance locks, etc. without compass transform...\n let builder = context.createGraphicBuilder(GraphicType.WorldOverlay);\n this.displayAlignments(builder, vp);\n context.addDecorationFromBuilder(builder);\n\n // Create a new graphics with the compass transform and scale so that compass size is 1.0...\n builder = context.createGraphicBuilder(GraphicType.WorldOverlay, this.getDisplayTransform(vp));\n\n const hasFocus = this.hasInputFocus;\n const bgColor = vp.view.backgroundColor;\n const frameColor = (hasFocus ? this._frameColor : this._frameColorNoFocus).adjustedForContrast(bgColor, 155);\n const fillColor = (hasFocus ? this._fillColor : this._fillColorNoFocus).adjustedForContrast(bgColor, 75);\n const xColor = (hasFocus ? this._xColor : this._frameColorNoFocus).adjustedForContrast(bgColor, 155);\n const yColor = (hasFocus ? this._yColor : this._frameColorNoFocus).adjustedForContrast(bgColor, 155);\n const shadowColor = frameColor;\n\n // Display compass frame...\n builder.setSymbology(shadowColor, fillColor, 1);\n const center = Point3d.createZero();\n\n if (this.flags.animateRotation || 0.0 === this._percentChanged) {\n if (CompassMode.Polar === this.compassMode) {\n const ellipse = Arc3d.createXYEllipse(center, 1, 1);\n builder.addArc(ellipse, true, true);\n builder.addArc(ellipse, false, false);\n } else {\n const pts: Point3d[] = [\n new Point3d(-1.0, 1.0, 0.0),\n new Point3d(1.0, 1.0, 0.0),\n new Point3d(1.0, -1.0, 0.0),\n new Point3d(-1.0, -1.0, 0.0)];\n pts[4] = pts[0].clone();\n builder.addShape(pts);\n builder.addLineString(pts);\n }\n } else {\n let nSides, radius;\n const minSides = 7, maxSides = 24, factor = 1.0 / 5.0;\n\n // if currently animating change to polar need to get larger radius...go between 1.0 && 1.0 * sqrt (2.0)\n if (CompassMode.Polar === this.compassMode) {\n nSides = minSides + Math.floor(maxSides * this._percentChanged);\n radius = 1.0 + factor - (factor * this._percentChanged);\n } else {\n nSides = (maxSides - Math.floor(maxSides * this._percentChanged)) + minSides;\n radius = 1.0 + (factor * this._percentChanged);\n }\n\n let angle = 0.0;\n const delta = (Math.PI * 2) / nSides;\n const pts: Point3d[] = [];\n\n for (let iSide = 0; iSide < nSides; iSide++, angle += delta)\n pts[iSide] = new Point3d(radius * Math.cos(angle), radius * Math.sin(angle), 0.0);\n pts[nSides] = pts[0].clone();\n\n builder.addShape(pts);\n builder.addLineString(pts);\n }\n\n // Display sticky z-lock indicator as frame inset...\n if (this._fieldLocked[ItemField.Z_Item] && this.stickyZLock && vp.view.is3d()) {\n builder.setSymbology(frameColor, fillColor, 1);\n\n if (CompassMode.Polar === this.compassMode) {\n const ellipse = Arc3d.createXYEllipse(center, .5, .5);\n builder.addArc(ellipse, false, false);\n } else {\n const pts: Point3d[] = [\n new Point3d(-0.5, 0.5, 0.0),\n new Point3d(0.5, 0.5, 0.0),\n new Point3d(0.5, -0.5, 0.0),\n new Point3d(-0.5, -0.5, 0.0)];\n pts[4] = pts[0].clone();\n builder.addLineString(pts);\n }\n }\n\n // Display compass center mark...\n builder.setSymbology(frameColor, frameColor, 8);\n builder.addPointString([center]);\n\n // Display positive \"X\" tick...\n builder.setSymbology(xColor, xColor, 4);\n builder.addLineString([new Point3d(1.2, 0.0, 0.0), new Point3d(0.8, 0.0, 0.0)]);\n\n // Display negative \"X\" tick...\n builder.setSymbology(frameColor, frameColor, 1);\n builder.addLineString([new Point3d(-1.2, 0.0, 0.0), new Point3d(-0.8, 0.0, 0.0)]);\n\n // Display positive \"Y\" tick...\n builder.setSymbology(yColor, yColor, 4);\n builder.addLineString([new Point3d(0.0, 1.2, 0.0), new Point3d(0.0, 0.8, 0.0)]);\n\n // Display negative \"Y\" tick...\n builder.setSymbology(frameColor, frameColor, 1);\n builder.addLineString([new Point3d(0.0, -1.2, 0.0), new Point3d(0.0, -0.8, 0.0)]);\n\n context.addDecorationFromBuilder(builder); // add compass as world overlay decorator\n }\n\n private checkRotation(): void {\n this.updateRotation();\n\n if (RotationMode.View === this.rotationMode || !this.flags.lockedRotation)\n return;\n\n const vp = this.currentView;\n if (!vp || vp.isCameraOn)\n return;\n\n const viewZRoot = vp.rotation.getRow(2);\n if (!this.axes.z.isPerpendicularTo(viewZRoot))\n return;\n\n const preferY = (Math.abs(this.axes.x.dotProduct(viewZRoot)) < Math.abs(this.axes.y.dotProduct(viewZRoot)));\n\n // NOTE: Cycle rotation to get one that isn't edge-on...\n switch (this.rotationMode) {\n case RotationMode.Top:\n this.setRotationMode(preferY ? RotationMode.Front : RotationMode.Side);\n break;\n case RotationMode.Front:\n this.setRotationMode(preferY ? RotationMode.Top : RotationMode.Side);\n break;\n case RotationMode.Side:\n this.setRotationMode(preferY ? RotationMode.Top : RotationMode.Front);\n break;\n case RotationMode.ACS:\n switch (this.flags.auxRotationPlane) {\n case RotationMode.Top:\n this.flags.auxRotationPlane = preferY ? RotationMode.Front : RotationMode.Side;\n break;\n case RotationMode.Front:\n this.flags.auxRotationPlane = preferY ? RotationMode.Top : RotationMode.Side;\n break;\n case RotationMode.Side:\n this.flags.auxRotationPlane = preferY ? RotationMode.Top : RotationMode.Front;\n break;\n default:\n return;\n }\n break;\n default:\n return;\n }\n\n this.updateRotation();\n this.flags.baseRotation = this.rotationMode;\n }\n\n private saveLockedCoords(): void {\n if (CompassMode.Polar === this.compassMode) {\n if (this._fieldLocked[ItemField.DIST_Item])\n this.saveCoordinate(ItemField.DIST_Item, this._distance);\n if (this._fieldLocked[ItemField.ANGLE_Item])\n this.saveCoordinate(ItemField.ANGLE_Item, this._angle);\n } else {\n if (this._fieldLocked[ItemField.X_Item])\n this.saveCoordinate(ItemField.X_Item, this.delta.x);\n if (this._fieldLocked[ItemField.Y_Item])\n this.saveCoordinate(ItemField.Y_Item, this.delta.y);\n }\n\n const vp = this.currentView;\n if (vp && vp.view.is3d()) {\n if (this._fieldLocked[ItemField.Z_Item])\n this.saveCoordinate(ItemField.Z_Item, this.delta.z);\n }\n }\n\n /** Called after compass state is changed between the active state and one of the disabled states */\n public onCompassDisplayChange(_state: \"show\" | \"hide\"): void { }\n /** Called after compass mode is changed between polar and rectangular */\n public onCompassModeChange(): void { }\n /** Called after compass rotation is changed */\n public onRotationModeChange(): void { }\n /** Called after input field locked state is changed */\n public onFieldLockChange(_index: ItemField) { }\n /** Called after input field value changes */\n public onFieldValueChange(_index: ItemField) { }\n /** Called after input field keyin status changes */\n public onFieldKeyinStatusChange(_index: ItemField) { }\n /** Called to request focus change to the specified input field */\n public setFocusItem(_index: ItemField) { }\n /** Called to get the item field that currently has input focus */\n public getFocusItem(): ItemField | undefined { return undefined; }\n\n private static getMinPolarMag(origin: Point3d): number {\n return (1.0e-12 * (1.0 + origin.magnitude()));\n }\n\n /** projects cursor onto plane in view, or returns an error */\n private constructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, perpendicular: boolean): BentleyStatus {\n let fromPtP: Point3d;\n let dotProduct: number;\n let distance: number;\n let projectionVector = new Vector3d();\n\n if (perpendicular) {\n if (AccuDraw.useACSContextRotation(vp, true)) { // Project along ACS axis to AccuDraw plane...\n const rMatrix = vp.getAuxCoordRotation(AccuDraw._tempRot);\n const axes = ThreeAxes.createFromMatrix3d(rMatrix);\n this.accountForAuxRotationPlane(axes, this.flags.auxRotationPlane);\n linePlaneIntersect(outPtP, inPtP, axes.z, pointOnPlaneP, normalVectorP, false);\n } else {\n projectionVector = inPtP.vectorTo(pointOnPlaneP);\n distance = projectionVector.dotProduct(normalVectorP);\n inPtP.plusScaled(normalVectorP, distance, outPtP);\n }\n } else {\n const isCamera = vp.isCameraOn;\n if (vp.view.is3d() && isCamera) {\n const cameraPos = vp.view.getEyePoint();\n fromPtP = cameraPos;\n fromPtP.vectorTo(inPtP, projectionVector).normalizeInPlace();\n } else {\n const rMatrix = vp.rotation;\n fromPtP = inPtP;\n rMatrix.getRow(2, projectionVector);\n }\n\n dotProduct = projectionVector.dotProduct(normalVectorP);\n\n if (Math.abs(dotProduct) < Constants.SMALL_DELTA)\n return BentleyStatus.ERROR; // PARALLEL;\n\n distance = (normalVectorP.dotProduct(pointOnPlaneP) - normalVectorP.dotProduct(fromPtP)) / dotProduct;\n\n if (isCamera && distance < Constants.SMALL_DELTA)\n return BentleyStatus.ERROR; // BEHIND_EYE_POINT;\n\n fromPtP.plusScaled(projectionVector, distance, outPtP);\n }\n\n return BentleyStatus.SUCCESS;\n }\n\n /** @internal */\n public softConstructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, isSnap: boolean): boolean {\n if (!vp.isPointAdjustmentRequired) {\n outPtP.setFrom(inPtP);\n return true;\n }\n\n if (isSnap) {\n outPtP.setFrom(inPtP);\n const delta = pointOnPlaneP.vectorTo(outPtP);\n return (Math.abs(normalVectorP.dotProduct(delta)) < Constants.SMALL_DELTA);\n }\n if (BentleyStatus.SUCCESS !== this.constructionPlane(outPtP, inPtP, pointOnPlaneP, normalVectorP, vp, false)) {\n const viewNormal = vp.rotation.getRow(2);\n this.constructionPlane(outPtP, inPtP, pointOnPlaneP, viewNormal, vp, false);\n this.constructionPlane(outPtP, outPtP, pointOnPlaneP, normalVectorP, vp, true);\n return false;\n }\n return true;\n }\n\n /** @internal */\n public hardConstructionPlane(outPtP: Point3d, inPtP: Point3d, pointOnPlaneP: Point3d, normalVectorP: Vector3d, vp: Viewport, isSnap: boolean): boolean {\n if (!vp.isPointAdjustmentRequired) {\n outPtP.setFrom(inPtP);\n return true;\n }\n\n if (BentleyStatus.SUCCESS !== this.constructionPlane(outPtP, inPtP, pointOnPlaneP, normalVectorP, vp, isSnap)) {\n const viewNormal = vp.rotation.getRow(2);\n this.constructionPlane(outPtP, inPtP, pointOnPlaneP, viewNormal, vp, false);\n this.constructionPlane(outPtP, outPtP, pointOnPlaneP, normalVectorP, vp, true);\n }\n\n return true;\n }\n\n private static allowAxisIndexing(pointIsOnPlane: boolean): boolean {\n // NOTE: Normally we don't want indexing overriding a hot snap location. The\n // exception to this is nearest snap. If the nearest snap is in the plane\n // of the AccuDraw compass, it is confusing not having axis indexing.\n if (!TentativeOrAccuSnap.isHot)\n return true;\n\n if (!pointIsOnPlane)\n return false;\n\n const snapDetail = IModelApp.accuSnap.getCurrSnapDetail();\n return (undefined !== snapDetail && (SnapMode.Nearest === snapDetail.snapMode));\n }\n\n private applyDistanceRoundOff(distance: number, vp: Viewport): number | undefined {\n if (!this._distanceRoundOff.active || !this._distanceRoundOff.units.size)\n return undefined;\n\n let roundValue = this._distanceRoundOff.units.values().next().value!;\n\n if (this._distanceRoundOff.units.size > 1) {\n // NOTE: Set isn't ordered, find smallest entry...\n this._distanceRoundOff.units.forEach((thisRoundValue) => {\n if (thisRoundValue < roundValue)\n roundValue = thisRoundValue;\n });\n\n if (vp.viewDelta.magnitudeXY() < roundValue)\n return undefined; // Smallest rounding value is larger than view...don't use...\n\n const smallScreenDist = 0.0787402; // ~2 mm...\n const pixelSize = vp.getPixelSizeAtPoint(this.origin);\n const screenDist = vp.pixelsFromInches(smallScreenDist) * pixelSize;\n\n this._distanceRoundOff.units.forEach((thisRoundValue) => {\n if (thisRoundValue > roundValue && thisRoundValue < screenDist)\n roundValue = thisRoundValue;\n });\n }\n\n if (roundValue <= 0.0)\n return undefined;\n\n return roundValue * Math.floor((distance / roundValue) + 0.5);\n }\n\n private applyAngleRoundOff(angle: number, distance: number, vp: Viewport): number | undefined {\n if (!this._angleRoundOff.active || !this._angleRoundOff.units.size)\n return undefined;\n\n let roundValue = this._angleRoundOff.units.values().next().value!;\n\n if (this._angleRoundOff.units.size > 1) {\n // NOTE: Set isn't ordered, find smallest entry...\n this._angleRoundOff.units.forEach((thisRoundValue) => {\n if (thisRoundValue < roundValue)\n roundValue = thisRoundValue;\n });\n\n const circumference = 2.0 * Math.PI * distance;\n const roundDist = circumference / ((2.0 * Math.PI) / roundValue);\n\n if (vp.viewDelta.magnitudeXY() < roundDist)\n return undefined; // Smallest rounding value is larger than view...don't use...\n\n const smallScreenDist = 0.0787402; // ~2 mm...\n const pixelSize = vp.getPixelSizeAtPoint(this.origin);\n const screenDist = vp.pixelsFromInches(smallScreenDist) * pixelSize;\n\n this._angleRoundOff.units.forEach((thisRoundValue) => {\n const thisRoundDist = circumference / ((2.0 * Math.PI) / thisRoundValue);\n if (thisRoundValue > roundValue && thisRoundDist < screenDist)\n roundValue = thisRoundValue;\n });\n }\n\n if (roundValue <= 0.0)\n return undefined;\n\n return roundValue * Math.floor((angle / roundValue) + 0.5);\n }\n\n /** @internal */\n public fixPointPolar(vp: Viewport): void {\n let angleChanged = false;\n let distChanged = false;\n const zLocked = this.isZLocked(vp);\n const xyCorrection = new Point3d();\n\n this.planePt.setFrom(this.origin);\n\n if (zLocked && !(this.delta.z < Constants.SMALL_ANGLE && this.delta.z > -Constants.SMALL_ANGLE))\n this.planePt.addScaledInPlace(this.axes.z, this.delta.z);\n\n if (this.locked & LockedStates.VEC_BM) {\n if (!TentativeOrAccuSnap.isHot) {\n const normVec = new Vector3d();\n this.planeByVectorAndView(normVec, this.vector, vp);\n this.softConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.planePt, normVec, vp, false);\n } else {\n this._rawPointOnPlane.setFrom(this._rawPoint);\n this.flags.pointIsOnPlane = false;\n }\n } else {\n if (zLocked) {\n this.hardConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.planePt, this.axes.z, vp, TentativeOrAccuSnap.isHot);\n this.flags.pointIsOnPlane = true;\n } else {\n this.flags.pointIsOnPlane = (this.softConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.planePt, this.axes.z, vp, TentativeOrAccuSnap.isHot) || !!(this.locked & LockedStates.XY_BM));\n }\n }\n\n let delta: Vector3d;\n if (zLocked)\n delta = this.planePt.vectorTo(this._rawPointOnPlane);\n else\n delta = this.origin.vectorTo(this._rawPointOnPlane);\n\n const minPolarMag = AccuDraw.getMinPolarMag(this.origin);\n\n let mag: number;\n if (this.locked & LockedStates.VEC_BM) {\n mag = delta.dotProduct(this.vector);\n xyCorrection.x -= delta.x - mag * this.vector.x;\n xyCorrection.y -= delta.y - mag * this.vector.y;\n xyCorrection.z -= delta.z - mag * this.vector.z;\n this.vector.scale(mag, delta);\n if (mag < 0.0)\n mag = -mag;\n if (mag < minPolarMag) {\n this.handleDegeneratePolarCase();\n return;\n }\n\n this.flags.pointIsOnPlane = (Math.abs(this.axes.z.dotProduct(delta)) < Constants.SMALL_DELTA);\n } else {\n mag = delta.magnitude();\n if (mag < minPolarMag) {\n this.handleDegeneratePolarCase();\n return;\n }\n }\n\n const newPt = this._rawPointOnPlane.plus(xyCorrection);\n xyCorrection.setZero();\n\n // measure angle\n const rotVec = new Point3d();\n rotVec.x = this.axes.x.dotProduct(delta);\n\n // NOTE: Always return angle relative to compass plane...used to return \"angle out of plane\" for points off plane.\n rotVec.y = this.axes.y.dotProduct(delta);\n this._angle = Math.atan2(rotVec.y, rotVec.x);\n\n // constrain angle\n if (this.flags.pointIsOnPlane && !(this.locked & LockedStates.VEC_BM)) {\n if (!TentativeOrAccuSnap.isHot) {\n const newAngle = this.applyAngleRoundOff(this._angle, mag, vp);\n if (undefined !== newAngle) {\n angleChanged = true;\n this._angle = newAngle;\n xyCorrection.x += Math.cos(this._angle) * mag - rotVec.x;\n xyCorrection.y += Math.sin(this._angle) * mag - rotVec.y;\n rotVec.x = Math.cos(this._angle) * mag;\n rotVec.y = Math.sin(this._angle) * mag;\n }\n }\n\n if (this.locked & LockedStates.X_BM || (AccuDraw.allowAxisIndexing(this.flags.pointIsOnPlane) && (rotVec.x < this._tolerance && rotVec.x > - this._tolerance) && !this.flags.indexLocked && this.axisIndexing)) {\n this.indexed |= LockedStates.X_BM; // indexed in X\n\n xyCorrection.x -= rotVec.x;\n rotVec.x = 0.0;\n\n if (TentativeOrAccuSnap.isHot)\n xyCorrection.z -= delta.dotProduct(this.axes.z);\n\n this._angle = (rotVec.y < 0.0) ? -Math.PI / 2.0 : Math.PI / 2.0;\n angleChanged = true;\n }\n\n if (this.locked & LockedStates.Y_BM || (AccuDraw.allowAxisIndexing(this.flags.pointIsOnPlane) && (rotVec.y < this._tolerance && rotVec.y > -this._tolerance) && !this.flags.indexLocked && this.axisIndexing)) {\n if (this.indexed & LockedStates.X_BM) { // both indexed\n this.handleDegeneratePolarCase();\n return;\n }\n\n this.indexed |= LockedStates.Y_BM; // indexed in Y\n xyCorrection.y -= rotVec.y;\n\n if (TentativeOrAccuSnap.isHot)\n xyCorrection.z -= delta.dotProduct(this.axes.z);\n\n rotVec.y = 0.0;\n this._angle = (rotVec.x < 0.0) ? Math.PI : 0.0;\n angleChanged = true;\n }\n\n if (angleChanged) {\n this.axes.x.scale(rotVec.x, delta);\n delta.addScaledInPlace(this.axes.y, rotVec.y);\n mag = delta.magnitude();\n if (mag < minPolarMag) {\n this.handleDegeneratePolarCase();\n return;\n }\n }\n }\n\n // constrain distance\n const oldMag = mag;\n\n if (this.locked & LockedStates.DIST_BM) { // distance locked\n mag = this._distance;\n distChanged = true;\n this.indexed &= ~LockedStates.DIST_BM;\n } else if (!TentativeOrAccuSnap.isHot) { // if non-snap, try rounding and aligning\n const newDist = this.applyDistanceRoundOff(mag, vp);\n if (undefined !== newDist) {\n distChanged = true;\n mag = newDist;\n }\n\n if (Geometry.isDistanceWithinTol(mag - this._lastDistance, this._tolerance) && !this.flags.indexLocked && this.distanceIndexing) {\n this.indexed |= LockedStates.DIST_BM; // distance indexed\n mag = this._lastDistance;\n distChanged = true;\n }\n }\n\n // project to corrected point\n newPt.plus3Scaled(this.axes.x, xyCorrection.x, this.axes.y, xyCorrection.y, this.axes.z, xyCorrection.z, newPt);\n\n // display index highlight even if snapped\n if (TentativeOrAccuSnap.isHot && this.flags.pointIsOnPlane) {\n if (Math.abs(rotVec.x) < Constants.SMALL_ANGLE)\n this.indexed |= LockedStates.X_BM;\n else if (Math.abs(rotVec.y) < Constants.SMALL_ANGLE)\n this.indexed |= LockedStates.Y_BM;\n }\n\n if (distChanged) {\n if (mag < minPolarMag && mag > -minPolarMag) {\n this.handleDegeneratePolarCase();\n return;\n }\n\n // adjust corrected point for distance indexing\n newPt.addScaledInPlace(delta, mag / oldMag - 1.0);\n delta.scaleInPlace(mag / oldMag);\n }\n\n // save corrected point\n this.point.setFrom(newPt);\n\n // finish up\n this._distance = mag;\n\n if (!(this.locked & LockedStates.VEC_BM))\n delta.scale(1.0 / mag, this.vector);\n\n if (this.locked & LockedStates.XY_BM)\n this.indexed |= this.locked;\n\n if (!zLocked)\n this.delta.z = (this.flags.pointIsOnPlane) ? 0.0 : delta.dotProduct(this.axes.z);\n }\n\n /** @internal */\n public fixPointRectangular(vp: Viewport): void {\n const zLocked = this.isZLocked(vp);\n const xyCorrection = new Vector3d();\n\n this.planePt.setFrom(this.origin);\n this.indexed = 0;\n\n if (zLocked) {\n this.flags.pointIsOnPlane = (this.delta.z < Constants.SMALL_ANGLE && this.delta.z > -Constants.SMALL_ANGLE);\n if (!this.flags.pointIsOnPlane)\n this.planePt.addScaledInPlace(this.axes.z, this.delta.z);\n this.hardConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.planePt, this.axes.z, vp, TentativeOrAccuSnap.isHot);\n } else {\n this.flags.pointIsOnPlane = this.softConstructionPlane(this._rawPointOnPlane, this._rawPoint, this.origin, this.axes.z, vp, TentativeOrAccuSnap.isHot);\n }\n\n const trueDelta = this.origin.vectorTo(this._rawPointOnPlane);\n this._rawDelta.x = trueDelta.dotProduct(this.axes.x);\n this._xIsNegative = (this._rawDelta.x < -Constants.SMALL_ANGLE);\n\n this._rawDelta.y = trueDelta.dotProduct(this.axes.y);\n this._yIsNegative = (this._rawDelta.y < -Constants.SMALL_ANGLE);\n\n if (!zLocked)\n this.delta.z = (this.flags.pointIsOnPlane) ? 0.0 : trueDelta.dotProduct(this.axes.z);\n\n if (AccuDraw.allowAxisIndexing(this.flags.pointIsOnPlane)) {\n if (!(this.locked & LockedStates.X_BM)) { // not locked in x\n const roundedDeltaX = this.applyDistanceRoundOff(this._rawDelta.x, vp); // round x\n if (undefined !== roundedDeltaX) {\n xyCorrection.x = roundedDeltaX - this._rawDelta.x;\n this._rawDelta.x = roundedDeltaX;\n }\n\n if (this._rawDelta.x < this._tolerance && this._rawDelta.x > -this._tolerance &&\n !this.flags.indexLocked && this.axisIndexing) { // index x\n this.indexed |= LockedStates.X_BM; // indexed in X\n xyCorrection.x -= this._rawDelta.x;\n this._rawDelta.x = 0.0;\n }\n }\n if (!(this.locked & LockedStates.Y_BM)) {\n const roundedDeltaY = this.applyDistanceRoundOff(this._rawDelta.y, vp); // round y\n if (undefined !== roundedDeltaY) {\n xyCorrection.y = roundedDeltaY - this._rawDelta.y;\n this._rawDelta.y = roundedDeltaY;\n }\n\n if (this._rawDelta.y < this._tolerance && this._rawDelta.y > -this._tolerance &&\n !this.flags.indexLocked && this.axisIndexing) { // index y\n this.indexed |= LockedStates.Y_BM; // indexed in Y\n xyCorrection.y -= this._rawDelta.y;\n this._rawDelta.y = 0.0;\n }\n }\n }\n\n if (this.locked & LockedStates.X_BM) {\n if (this.rawDeltaIsValid(this._rawDelta.x)) {\n // cursor changed sides, reverse value\n if ((this.delta.x < -Constants.SMALL_ANGLE) !== this._xIsNegative &&\n this.smartKeyin && this._keyinStatus[ItemField.X_Item] === KeyinStatus.Partial &&\n !this._xIsExplicit)\n this.delta.x = -this.delta.x;\n }\n\n xyCorrection.x = this.delta.x - this._rawDelta.x;\n } else {\n const lastDist = (this._rawDelta.x < 0.0) ? (-this._lastDistance) : this._lastDistance;\n\n if (!TentativeOrAccuSnap.isHot && ((this.locked & LockedStates.Y_BM) || (this.indexed & LockedStates.Y_BM)) && !(this.indexed & LockedStates.X_BM) &&\n Geometry.isDistanceWithinTol(this._rawDelta.x - lastDist, this._tolerance) &&\n !this.flags.indexLocked && this.distanceIndexing) {\n xyCorrection.x += lastDist - this._rawDelta.x;\n this.delta.x = lastDist;\n this.indexed |= LockedStates.DIST_BM;\n } else {\n this.delta.x = this._rawDelta.x;\n }\n }\n\n if (this.locked & LockedStates.Y_BM) {\n if (this.rawDeltaIsValid(this._rawDelta.y)) {\n // cursor changed sides, reverse value\n if ((this.delta.y < -Constants.SMALL_ANGLE) !== this._yIsNegative &&\n this.smartKeyin && this._keyinStatus[ItemField.Y_Item] === KeyinStatus.Partial &&\n !this._yIsExplicit)\n this.delta.y = -this.delta.y;\n }\n\n xyCorrection.y = this.delta.y - this._rawDelta.y;\n } else {\n const lastDist = (this._rawDelta.y < Constants.SMALL_ANGLE) ? - this._lastDistance : this._lastDistance;\n\n if (!TentativeOrAccuSnap.isHot && ((this.locked & LockedStates.X_BM) || (this.indexed & LockedStates.X_BM)) && !(this.indexed & LockedStates.Y_BM) &&\n Geometry.isDistanceWithinTol(this._rawDelta.y - lastDist, this._tolerance) &&\n !this.flags.indexLocked && this.distanceIndexing) {\n xyCorrection.y += lastDist - this._rawDelta.y;\n this.delta.y = lastDist;\n this.indexed |= LockedStates.DIST_BM;\n } else {\n this.delta.y = this._rawDelta.y;\n }\n }\n\n this._rawPointOnPlane.plus2Scaled(this.axes.x, xyCorrection.x, this.axes.y, xyCorrection.y, this.point);\n\n if (zLocked && !this.flags.pointIsOnPlane)\n this.hardConstructionPlane(this.point, this.point, this.planePt, this.axes.z, vp, TentativeOrAccuSnap.isHot);\n\n if ((this.locked & LockedStates.X_BM && this.delta.x === 0.0) || (this.locked & LockedStates.Y_BM && this.delta.y === 0.0)) {\n this.indexed |= this.locked; // to display index highlight\n } else if (TentativeOrAccuSnap.isHot) {\n if (Math.abs(this.delta.x) < Constants.SMALL_ANGLE)\n this.indexed |= LockedStates.X_BM;\n else if (Math.abs(this.delta.y) < Constants.SMALL_ANGLE)\n this.indexed |= LockedStates.Y_BM;\n }\n\n const lock = this.locked & LockedStates.XY_BM;\n const index = this.indexed & LockedStates.XY_BM;\n\n if (lock === LockedStates.Y_BM && index !== LockedStates.X_BM) {\n if (this._keyinStatus[ItemField.Y_Item] !== KeyinStatus.Dynamic) {\n if (Math.abs(this._rawDelta.x) < this._threshold)\n return;\n }\n\n this.newFocus = ItemField.X_Item;\n this.dontMoveFocus = false;\n } else if (lock === LockedStates.X_BM && index !== LockedStates.Y_BM) {\n if (this._keyinStatus[ItemField.X_Item] !== KeyinStatus.Dynamic) {\n if (Math.abs(this._rawDelta.y) < this._threshold)\n return;\n }\n\n this.newFocus = ItemField.Y_Item;\n this.dontMoveFocus = false;\n } else {\n this.newFocus = ((Math.abs(this._rawDelta.x) > Math.abs(this._rawDelta.y)) ? ItemField.X_Item : ItemField.Y_Item);\n }\n }\n\n private fixPointLastSnapDetail(vp: ScreenViewport): void {\n if (undefined === this._lastSnapDetail)\n return;\n\n this._lastSnapDetail.indexed = undefined;\n if (!this.axisIndexing || this.flags.indexLocked || LockedStates.NONE_LOCKED !== this.locked || this.indexed & LockedStates.DIST_BM || TentativeOrAccuSnap.isHot)\n return; // Don't adjust point if already adjusted or indexing is disabled...\n\n const minMag = AccuDraw.getMinPolarMag(this.point);\n const tmpVec = Vector3d.createStartEnd(this.planePt, this.point);\n if (tmpVec.magnitude() < minMag)\n return; // Current point is at compass origin...\n\n if (!this.hardConstructionPlane(this._rawPointOnPlane, this._lastSnapDetail.point, this.point, this.axes.z, vp, true))\n return;\n\n const snapDelta = this._rawPointOnPlane.vectorTo(this.point);\n if (snapDelta.magnitude() < minMag)\n return; // Haven't moved far enough away from snap point...\n\n const snapRayX = Ray3d.createCapture(this._rawPointOnPlane, this._lastSnapDetail.matrix.rowX());\n const snapRayY = Ray3d.createCapture(this._rawPointOnPlane, this._lastSnapDetail.matrix.rowY());\n const snapDeltaX = snapDelta.dotProduct(snapRayX.direction);\n const snapDeltaY = snapDelta.dotProduct(snapRayY.direction);\n\n let rayS;\n if (snapDeltaX < this._tolerance && snapDeltaX > -this._tolerance)\n rayS = snapRayY;\n else if (snapDeltaY < this._tolerance && snapDeltaY > -this._tolerance)\n rayS = snapRayX;\n else\n return;\n\n const rayA = Ray3d.createCapture(this.planePt, tmpVec);\n const detail = Ray3d.closestApproachRay3dRay3d(rayA, rayS);\n if (CurveCurveApproachType.Intersection !== detail.approachType)\n return;\n\n this.planePt.vectorTo(detail.detailA.point, tmpVec);\n Point2d.create(tmpVec.dotProduct(this.axes.x), tmpVec.dotProduct(this.axes.y), this._rawDelta);\n const xyCorrection = new Vector2d();\n\n if (this.indexed & LockedStates.X_BM) {\n xyCorrection.x -= this._rawDelta.x;\n this._rawDelta.x = 0.0;\n } else if (this.indexed & LockedStates.Y_BM) {\n xyCorrection.y -= this._rawDelta.y;\n this._rawDelta.y = 0.0;\n }\n\n if (this._rawDelta.magnitude() < minMag)\n return; // Don't accept adjustment back to compass origin...\n\n detail.detailA.point.plus2Scaled(this.axes.x, xyCorrection.x, this.axes.y, xyCorrection.y, this._rawPointOnPlane);\n if (this.point.distance(this._rawPointOnPlane) > (1.5 * this._tolerance))\n return; // Don't accept adjustment if distance is too great such as from nearly parallel vectors...\n\n if (CompassMode.Polar === this.compassMode) {\n this._distance = this.origin.distance(this._rawPointOnPlane);\n } else {\n this.delta.x = this._rawDelta.x;\n this.delta.y = this._rawDelta.y;\n }\n\n this.point.setFrom(this._rawPointOnPlane);\n this._lastSnapDetail.indexed = true;\n }\n\n private fixPoint(pointActive: Point3d, vp: ScreenViewport): void {\n if (this.isActive && ((vp !== this.currentView) || this.flags.rotationNeedsUpdate)) {\n this.currentView = vp;\n\n if (!(this.locked & LockedStates.ANGLE_BM || this._fieldLocked[ItemField.Z_Item])) {\n // origin not locked down...may change when vie changes...\n if (!this.flags.haveValidOrigin)\n this.setDefaultOrigin(vp);\n\n // in a view based rotation, and the view has changed, so update the rotation...\n if (!this.flags.lockedRotation) {\n this.updateRotation();\n this.flags.rotationNeedsUpdate = false;\n }\n }\n }\n if (this.isInactive || this.isDeactivated) {\n this.point.setFrom(pointActive);\n this.currentView = vp;\n this.processHints();\n return;\n }\n if (this.isActive) {\n this._rawPoint.setFrom(pointActive);\n this.currentView = vp;\n this.flags.dialogNeedsUpdate = true;\n\n if (TentativeOrAccuSnap.isHot && CompassMode.Polar === this.compassMode)\n this.indexed = this.locked;\n else\n this.indexed = LockedStates.NONE_LOCKED;\n\n if (CompassMode.Polar === this.compassMode)\n this.fixPointPolar(vp);\n else\n this.fixPointRectangular(vp);\n\n this.fixPointLastSnapDetail(vp);\n\n pointActive.setFrom(this.point);\n } else if (CompassMode.Rectangular === this.compassMode) {\n if (this._fieldLocked[ItemField.X_Item])\n pointActive.x = this.delta.x;\n\n if (this._fieldLocked[ItemField.Y_Item])\n pointActive.y = this.delta.y;\n\n if (this._fieldLocked[ItemField.Z_Item])\n pointActive.z = this.delta.z;\n }\n }\n\n /** @internal */\n public refreshDecorationsAndDynamics(): void {\n // Immediately process hints and show dynamics using adjusted point when not called from button down...\n if (!this.flags.inDataPoint)\n this.processHints();\n\n // Make sure AccuDraw updates its decorations...\n if (undefined !== this.currentView)\n this.currentView.invalidateDecorations();\n\n // Make sure active tool updates its dynamics. NOTE: Need point adjusted for new locks, etc.\n IModelApp.toolAdmin.updateDynamics(undefined, undefined, true);\n }\n\n /** @internal */\n public upgradeToActiveState(): boolean {\n if (!this.isEnabled)\n return false;\n\n this.onEventCommon();\n\n if (!this.isInactive)\n return false;\n\n const vp = this.currentView;\n if (!vp || 1.0 !== vp.view.getAspectRatioSkew())\n return false; // Disallow AccuDraw being enabled for exaggerated views...\n\n // NOTE: If ACS Plane lock setup initial and base rotation to ACS...\n if (vp && AccuDraw.useACSContextRotation(vp, false)) {\n this.setRotationMode(RotationMode.ACS);\n this.flags.baseRotation = RotationMode.ACS;\n this.flags.auxRotationPlane = RotationMode.Top;\n }\n\n if (this.published.flags & AccuDrawFlags.SmartRotation) {\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined !== snap) {\n const rotation = AccuDraw.getSnapRotation(snap, vp);\n if (undefined !== rotation) {\n this.setContextRotation(rotation, true, false);\n this.changeBaseRotationMode(RotationMode.Context);\n }\n }\n }\n\n this.checkRotation();\n\n // Compass will jump to correct location when fixPoint is called...but we don't want to see the jump...\n if (!this.flags.haveValidOrigin)\n this.setDefaultOrigin(vp);\n\n // Initialize rawPoint data...invalid for alignments until next fixPoint...\n this._rawPoint.setFrom(this.point);\n this._rawPointOnPlane.setFrom(this.point);\n\n // Upgrade state to enabled...want compass to display...\n this.currentState = CurrentState.Active;\n\n return false;\n }\n\n /** @internal */\n public downgradeInactiveState(): boolean {\n if (!this.isEnabled)\n return false;\n this.onEventCommon();\n if (!this.isActive)\n return false;\n // Downgrade state back to inactive...\n this.currentState = CurrentState.Inactive;\n return false;\n }\n\n /** @internal */\n public onBeginDynamics(): boolean { return this.upgradeToActiveState(); }\n /** @internal */\n public onEndDynamics(): boolean { return this.downgradeInactiveState(); }\n\n /** Can be called by sub-classes as the default implementation of onMotion.\n * @see [[onMotion]]\n * @note Input fields are expected to call [[AccuDrawShortcuts.itemFieldNewInput]] when the user enters a value that is not a shortcut\n * and call [[AccuDrawShortcuts.itemFieldCompletedInput]] when a value is accepted, such as when focusing out of the field. This is\n * required for processMotion to correctly handle updating dynamic field values to reflect the current cursor location.\n */\n public processMotion(): void {\n if (this.flags.dialogNeedsUpdate || !this.isActive) {\n if (this.isActive && this.smartKeyin) {\n // NOTE: fixPointRectangular sets newFocus to either x or y based on which axis is closer to the input point...\n if (CompassMode.Rectangular === this.compassMode && !this.dontMoveFocus && !this.getFieldLock(this.newFocus) && this.hasInputFocus)\n this.setFocusItem(this.newFocus);\n }\n\n const sendDynamicFieldValueChange = (item: ItemField): void => {\n if (KeyinStatus.Dynamic === this.getKeyinStatus(item))\n this.onFieldValueChange(item);\n };\n\n // NOTE: Shows the current deltas for rectangular mode when active and current coordinate when not active...\n sendDynamicFieldValueChange(ItemField.X_Item);\n sendDynamicFieldValueChange(ItemField.Y_Item);\n sendDynamicFieldValueChange(ItemField.Z_Item);\n sendDynamicFieldValueChange(ItemField.ANGLE_Item);\n sendDynamicFieldValueChange(ItemField.DIST_Item);\n }\n }\n\n /** Implemented by sub-classes to update ui fields to show current deltas or coordinates when inactive.\n * Should also choose active x or y input field in rectangular mode based on cursor position when\n * axis isn't locked to support \"smart lock\".\n * @see [[processMotion]]\n */\n public onMotion(_ev: BeButtonEvent): void { }\n\n /** @internal */\n public onPreButtonEvent(ev: BeButtonEvent): boolean {\n if (BeButton.Reset === ev.button && !ev.isDown && !ev.isDragging) {\n if (IModelApp.tentativePoint.isActive && this.isActive) {\n IModelApp.tentativePoint.clear(true);\n this.refreshDecorationsAndDynamics();\n return true;\n }\n\n if (this.isEnabled)\n this.onEventCommon();\n return false;\n }\n\n if (BeButton.Data !== ev.button || !ev.isDown || !this.isEnabled)\n return false;\n\n this.onEventCommon();\n this.flags.inDataPoint = true;\n if (this.currentState < CurrentState.Inactive)\n return false;\n if (!this.currentView)\n this.currentView = ev.viewport;\n this.updateRotation();\n return false;\n }\n\n /** @internal */\n public onPostButtonEvent(ev: BeButtonEvent): boolean {\n if (BeButton.Data !== ev.button || !ev.isDown || !this.isEnabled) {\n this._lastSnapDetail = undefined;\n return false;\n }\n\n this.onEventCommon();\n\n if (this.flags.ignoreDataButton) {\n // NOTE: Ignore this data point, was used to terminate a viewing command or input collector...\n this.flags.ignoreDataButton = false;\n } else if (!this.flags.fixedOrg && this.currentState >= CurrentState.Inactive) {\n /* set origin to last point placed unless its being set elsewhere */\n if (((!this.contextSensitive &&\n !(this.published.flags & (AccuDrawFlags.AlwaysSetOrigin ^ AccuDrawFlags.SetOrigin))) ||\n !(this.published.flags & AccuDrawFlags.SetOrigin))) {\n this.published.flags |= AccuDrawFlags.SetOrigin;\n\n if (this.currentState >= CurrentState.Inactive)\n this.published.origin.setFrom(ev.point);\n else\n this.published.origin.setFrom(this.point);\n }\n\n this.saveLockedCoords();\n this.processHints();\n\n if (this.currentState >= CurrentState.Inactive)\n this.updateRotation();\n }\n\n this.flags.inDataPoint = false;\n this.flags.indexLocked = false;\n return false;\n }\n\n /** @internal */\n public onTentative(): boolean {\n if (this.isActive || this.isInactive)\n this.grabInputFocus(); // AccuDraw gets input focus on a tentative\n\n return false;\n }\n\n private intersectXYCurve(snap: SnapDetail, curve: CurvePrimitive, usePointOnSnap: boolean) {\n if (undefined === this.currentView)\n return;\n\n const curveSegment = snap.getCurvePrimitive(); // Get single segment of linestring/shape...\n if (undefined === curveSegment)\n return;\n\n const worldToView = this.currentView.worldToViewMap.transform0;\n const detail = CurveCurve.intersectionProjectedXYPairs(worldToView, usePointOnSnap ? curveSegment : curve, true, usePointOnSnap ? curve : curveSegment, true);\n if (0 === detail.length)\n return;\n\n let closeIndex = 0;\n if (detail.length > 1) {\n const snapPt = worldToView.multiplyPoint3d(snap.getPoint(), 1);\n let lastDist: number | undefined;\n\n for (let i = 0; i < detail.length; i++) {\n const testPt = worldToView.multiplyPoint3d(detail[i].detailA.point, 1);\n const testDist = snapPt.realDistanceXY(testPt);\n\n if (undefined !== testDist && (undefined === lastDist || testDist < lastDist)) {\n lastDist = testDist;\n closeIndex = i;\n }\n }\n }\n\n snap.setSnapPoint(detail[closeIndex].detailA.point, SnapHeat.NotInRange);\n }\n\n private intersectLine(snap: SnapDetail, linePt: Point3d, unitVec: Vector3d) {\n const vec = Vector3d.createStartEnd(linePt, snap.getPoint());\n const endPt = linePt.plusScaled(unitVec, vec.dotProduct(unitVec));\n const cpLine = LineSegment3d.create(linePt, endPt);\n this.intersectXYCurve(snap, cpLine, true); // Get point on snapped curve, not AccuDraw axis. Snap point isn't required to be in AccuDraw plane when Z isn't locked.\n }\n\n private intersectCircle(snap: SnapDetail, center: Point3d, normal: Vector3d, radius: number) {\n const matrix = Matrix3d.createRigidHeadsUp(normal);\n const vector0 = matrix.columnX();\n const vector90 = matrix.columnY();\n vector0.scaleToLength(radius, vector0);\n vector90.scaleToLength(radius, vector90);\n const cpArc = Arc3d.create(center, vector0, vector90);\n this.intersectXYCurve(snap, cpArc, false); // Get point on AccuDraw distance circle, not snapped curve. Want to preserve distance constraint with apparent intersection in XY.\n }\n\n /** @internal */\n public onSnap(snap: SnapDetail): boolean {\n // If accudraw is locked, adjust near snap point to be the nearest point on this element, CONSTRAINED by the accudraw lock.\n if (!this.isActive || !this.locked)\n return false;\n\n if (SnapMode.Nearest !== snap.snapMode)\n return false;\n\n if (!snap.primitive)\n return false;\n\n switch (this.locked) {\n case LockedStates.VEC_BM: {\n this.intersectLine(snap, this.origin, this.vector);\n break;\n }\n\n case LockedStates.X_BM: {\n const refPt = (CompassMode.Rectangular === this.compassMode) ? this.planePt.plusScaled(this.axes.x, this.delta.x) : this.origin;\n this.intersectLine(snap, refPt, this.axes.y);\n break;\n }\n\n case LockedStates.Y_BM: {\n const refPt = (CompassMode.Rectangular === this.compassMode) ? this.planePt.plusScaled(this.axes.y, this.delta.y) : this.origin;\n this.intersectLine(snap, refPt, this.axes.x);\n break;\n }\n\n case LockedStates.DIST_BM: {\n this.intersectCircle(snap, this.origin, this.axes.z, this._distance);\n break;\n }\n }\n\n return false;\n }\n\n /** @internal */\n public onSelectedViewportChanged(previous: ScreenViewport | undefined, current: ScreenViewport | undefined): void {\n // In case previous is closing, always update AccuDraw to current view...\n if (undefined !== this.currentView && this.currentView === previous)\n this.currentView = current;\n\n // Reset AccuDraw when iModel or view type changes...\n if (undefined !== current && undefined !== previous &&\n (current.view.classFullName === previous.view.classFullName) &&\n (current.view.iModel === previous.view.iModel))\n return;\n\n this._acsPickId = undefined;\n this.currentView = undefined;\n this.flags.redrawCompass = false;\n\n this.flags.baseRotation = RotationMode.View;\n this.flags.auxRotationPlane = RotationMode.Top;\n this.flags.rotationNeedsUpdate = true;\n\n this.flags.haveValidOrigin = false;\n this.flags.indexLocked = false;\n this.flags.bearingFixToPlane2D = false;\n\n this.setRotationMode(RotationMode.View);\n this.updateRotation();\n\n this.saveState(this.savedStateViewTool);\n this.saveState(this.savedStateInputCollector);\n }\n\n private doProcessHints(): void {\n if (!this.floatingOrigin) {\n if (this.published.flags & AccuDrawFlags.SetOrigin)\n this.unlockAllFields();\n return;\n }\n\n // Set Context Origin\n if (this.published.flags & AccuDrawFlags.SetOrigin) {\n if (this.floatingOrigin) {\n this.origin.setFrom(this.published.origin);\n this.point.setFrom(this.origin);\n this.planePt.setFrom(this.origin);\n }\n this.flags.haveValidOrigin = true;\n this.setLastPoint(this.origin);\n this.unlockAllFields();\n this.updateRotation();\n }\n\n if (!this.contextSensitive)\n return;\n\n // Mode -- Polar or Rectangular\n if (this.published.flags & (AccuDrawFlags.SetModePolar | AccuDrawFlags.SetModeRect)) {\n if (this.compassMode !== ((this.published.flags & AccuDrawFlags.SetModePolar) ? CompassMode.Polar : CompassMode.Rectangular))\n this.changeCompassMode();\n }\n\n // Fixed Origin\n if (this.published.flags & AccuDrawFlags.FixedOrigin)\n this.flags.fixedOrg = true;\n\n // Save Distance\n if (this.published.flags & (AccuDrawFlags.SetDistance | AccuDrawFlags.LockDistance))\n this.saveCoordinate(ItemField.DIST_Item, this.published.distance);\n\n const vp = this.currentView;\n // Do Context Rotation\n if (this.published.flags & AccuDrawFlags.SetRMatrix) {\n this.axes.fromMatrix3d(this.published.rMatrix);\n this.flags.lockedRotation = true;\n this.flags.contextRotMode = ContextMode.Locked;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n } else if (this.published.flags & AccuDrawFlags.SetXAxis) {\n this.axes.x.setFrom(this.published.vector);\n this.flags.contextRotMode = ContextMode.XAxis;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n } else if (this.published.flags & AccuDrawFlags.SetXAxis2) {\n this.axes.x.setFrom(this.published.vector);\n this.flags.contextRotMode = ContextMode.XAxis2;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n } else if (this.published.flags & AccuDrawFlags.SetNormal) {\n if (vp && vp.view.is3d()) {\n this.axes.z.setFrom(this.published.vector);\n this.flags.contextRotMode = ContextMode.ZAxis;\n this.setRotationMode(RotationMode.Context);\n this.updateRotation();\n }\n } else if (this.published.flags & AccuDrawFlags.OrientACS) {\n this.flags.lockedRotation = true;\n this.flags.baseRotation = RotationMode.ACS;\n this.setRotationMode(RotationMode.ACS);\n this.updateRotation();\n } else if (this.isInactive || (this.published.flags & AccuDrawFlags.OrientDefault)) {\n this.setRotationMode(this.flags.baseRotation);\n this.updateRotation();\n }\n\n // Lock Items\n switch (this.compassMode) {\n case CompassMode.Polar:\n if (this.published.flags & AccuDrawFlags.LockDistance) {\n this._distance = this.published.distance;\n this.distanceLock(true, true);\n }\n\n if (this.published.flags & AccuDrawFlags.LockAngle) {\n this.updateVector(this.published.angle);\n this.indexed = LockedStates.NONE_LOCKED;\n this.angleLock();\n this.saveCoordinate(ItemField.ANGLE_Item, this.published.angle);\n }\n break;\n\n case CompassMode.Rectangular:\n if ((this.published.flags & AccuDrawFlags.Lock_X)) {\n this.locked |= LockedStates.X_BM;\n this.delta.x = this.published.delta.x;\n this.setFieldLock(ItemField.X_Item, true);\n this.saveCoordinate(ItemField.X_Item, this.published.delta.x);\n }\n\n if ((this.published.flags & AccuDrawFlags.Lock_Y)) {\n this.locked |= LockedStates.Y_BM;\n this.delta.y = this.published.delta.y;\n this.setFieldLock(ItemField.Y_Item, true);\n this.saveCoordinate(ItemField.Y_Item, this.published.delta.y);\n }\n\n if ((this.published.flags & AccuDrawFlags.Lock_Z)) {\n if (vp && vp.view.is3d()) {\n this.delta.z = this.published.delta.z;\n this.setFieldLock(ItemField.Z_Item, true);\n this.saveCoordinate(ItemField.Z_Item, this.published.delta.z);\n }\n }\n break;\n }\n }\n\n /** @internal */\n public processHints(): void {\n if (!this.published.flags || !this.isEnabled)\n return;\n\n if (this.published.flags & AccuDrawFlags.Disable) {\n this.published.flags = 0;\n this.currentState = CurrentState.Deactivated;\n return;\n }\n const setFocus: boolean = !!(this.published.flags & AccuDrawFlags.SetFocus);\n const smartRotation: boolean = !!(this.published.flags & AccuDrawFlags.SmartRotation);\n this.doProcessHints();\n this.published.zero();\n if (smartRotation && this.isInactive) // Preserve smart rotation hint until when/if AccuDraw is enabled for the current tool...\n this.published.flags = AccuDrawFlags.SmartRotation;\n if (this.isEnabled || setFocus)\n this.grabInputFocus();\n }\n}\n\n/** Specify the rotation to return from [[AccuDrawHintBuilder.getContextRotation]].\n * @public\n * @extensions\n */\nexport enum ContextRotationId { Top, Front, Left, Bottom, Back, Right, View, Face }\n\n/** [[AccuDrawHintBuilder]] is an [[InteractiveTool]] helper class that facilitates AccuDraw interaction.\n * Accudraw is an aide for entering coordinate data.\n * A tool does not directly change the current AccuDraw state; the tool's job is merely\n * to supply \"hints\" to AccuDraw regarding its preferred AccuDraw configuration for the\n * current tool state. User settings such as \"Context Sensitivity\" and \"Floating Origin\"\n * affect how and which hints are applied. Additionally the user can drive AccuDraw\n * through keyboard shortcuts.\n * @see [Using AccuDraw]($docs/learning/frontend/primitivetools.md#AccuDraw)*\n * @public\n * @extensions\n */\nexport class AccuDrawHintBuilder {\n private _flagOrigin = false;\n private _flagNormal = false;\n private _flagRotation = false;\n private _flagXAxis = false;\n private _flagXAxis2 = false;\n private _flagDistance = false;\n private _flagAngle = false;\n private _flagModePolar = false;\n private _flagModeRectangular = false;\n private _origin?: Point3d;\n private _axis?: Vector3d;\n private _rMatrix?: Matrix3d;\n private _distance = 0;\n private _angle = 0;\n\n /** Don't automatically set compass origin to point from data button events */\n public setOriginFixed = false;\n /** Override \"fixed\" and \"floating\" origin settings for [[setOrigin] hint */\n public setOriginAlways = false;\n /** Lock current distance value in polar mode */\n public setLockDistance = false;\n /** Lock current angle value in polar mode */\n public setLockAngle = false;\n /** Lock current x delta value in rectangular mode */\n public setLockX = false;\n /** Lock current y delta value in rectangular mode */\n public setLockY = false;\n /** Lock current z delta value in 3d views */\n public setLockZ = false;\n /** Set the initial compass orientation from the current [[SnapDetail]] when activating */\n public enableSmartRotation = false;\n\n /** Add hint to specify a new compass origin */\n public setOrigin(origin: Point3d): void {\n this._origin = origin.clone();\n this._flagOrigin = true;\n }\n\n /** Add hint to fully specify compass orientation from a Matrix3d */\n public setMatrix(matrix: Matrix3d): boolean {\n const invMatrix = matrix.inverse();\n if (undefined === invMatrix)\n return false;\n this.setRotation(invMatrix);\n return true;\n }\n\n /** @internal Add hint to fully specify compass orientation from a Matrix3d in row format */\n public setRotation(rowMatrix: Matrix3d): void {\n this._rMatrix = rowMatrix.clone();\n this._flagRotation = true;\n this._flagXAxis = this._flagNormal = false;\n }\n\n /** Add hint to change compass orientation by combining the supplied x axis direction with the current base rotation */\n public setXAxis(xAxis: Vector3d): void {\n this._axis = xAxis.clone();\n this._flagXAxis = true;\n this._flagRotation = this._flagNormal = this._flagXAxis2 = false;\n }\n\n /** Add hint to change compass orientation by combining the supplied x axis direction with the current base rotation preferring the result most closely aligned to the view */\n public setXAxis2(xAxis: Vector3d): void {\n this._axis = xAxis.clone();\n this._flagXAxis2 = true;\n this._flagRotation = this._flagNormal = this._flagXAxis = false;\n }\n\n /** Add hint to change compass orientation by combining the supplied z axis direction with the current base rotation */\n public setNormal(normal: Vector3d): void {\n this._axis = normal.clone();\n this._flagNormal = true;\n this._flagRotation = this._flagXAxis = this._flagXAxis2 = false;\n }\n\n /** Add hint to change compass to polar mode */\n public setModePolar(): void {\n this._flagModePolar = true;\n this._flagModeRectangular = false;\n }\n\n /** Add hint to change compass to rectangular mode */\n public setModeRectangular(): void {\n this._flagModeRectangular = true;\n this._flagModePolar = false;\n }\n\n /** Set current distance value in polar mode */\n public setDistance(distance: number): void {\n this._distance = distance;\n this._flagDistance = true;\n }\n\n /** Set current angle value in polar mode */\n public setAngle(angle: number): void {\n this._angle = angle;\n this._flagAngle = true;\n }\n\n /** Enable AccuDraw for the current tool without sending any hints */\n public static activate(): void { IModelApp.accuDraw.activate(); }\n\n /** Disable AccuDraw for the current tool */\n public static deactivate(): void { IModelApp.accuDraw.deactivate(); }\n\n /** Whether AccuDraw is enabled by the host application this session and can be used */\n public static get isEnabled(): boolean { return IModelApp.accuDraw.isEnabled; }\n\n /** Whether AccuDraw compass is currently displayed and points are being adjusted */\n public static get isActive(): boolean { return IModelApp.accuDraw.isActive; }\n\n /**\n * Immediately process pending hints and update tool dynamics using the adjusted point when not called from a button down event.\n * @note Provided to help with exceptions cases, such as starting an InputCollector from the active tool's drag event, that are not handled by normal hint processing.\n * A typical interactive tool should not call this method and should only be calling sendHints.\n * @see [[sendHints]]\n */\n public static processHintsImmediate(): void { return IModelApp.accuDraw.refreshDecorationsAndDynamics(); }\n\n /**\n * Provide hints to AccuDraw using the current builder state.\n * @return true if hints were successfully sent.\n */\n public sendHints(activate = true): boolean {\n let flags = 0;\n if (this._flagOrigin)\n flags |= AccuDrawFlags.SetOrigin;\n if (this.setOriginFixed)\n flags |= AccuDrawFlags.FixedOrigin;\n if (this.setOriginAlways)\n flags |= AccuDrawFlags.AlwaysSetOrigin;\n if (this._flagRotation)\n flags |= AccuDrawFlags.SetRMatrix;\n if (this._flagXAxis)\n flags |= AccuDrawFlags.SetXAxis;\n if (this._flagXAxis2)\n flags |= AccuDrawFlags.SetXAxis2;\n if (this._flagNormal)\n flags |= AccuDrawFlags.SetNormal;\n if (this._flagModePolar)\n flags |= AccuDrawFlags.SetModePolar;\n if (this._flagModeRectangular)\n flags |= AccuDrawFlags.SetModeRect;\n if (this.setLockDistance)\n flags |= AccuDrawFlags.LockDistance;\n if (this.setLockAngle)\n flags |= AccuDrawFlags.LockAngle;\n if (this.setLockX)\n flags |= AccuDrawFlags.Lock_X;\n if (this.setLockY)\n flags |= AccuDrawFlags.Lock_Y;\n if (this.setLockZ)\n flags |= AccuDrawFlags.Lock_Z;\n if (this.enableSmartRotation)\n flags |= AccuDrawFlags.SmartRotation;\n\n const accuDraw = IModelApp.accuDraw;\n if (BentleyStatus.SUCCESS !== accuDraw.setContext(flags, this._origin, this._flagRotation ? this._rMatrix : this._axis, undefined, this._flagDistance ? this._distance : undefined, this._flagAngle ? this._angle : undefined))\n return false; // Not enabled for this session...\n\n if (activate)\n accuDraw.activate(); // If not already enabled (ex. dynamics not started) most/all callers would want to enable it now (optional activate arg provided just in case)...\n\n return true;\n }\n\n /** Adjust the location of the last data button. If dynamics are enabled on this event, [[InteractiveTool.onDynamicFrame]] is called with this location. */\n public setLastPoint(ev: BeButtonEvent): void {\n IModelApp.toolAdmin.setAdjustedDataPoint(ev);\n }\n\n /** Create a [[Ray3d]] whose origin is the supplied space point and direction is into the view */\n public static getBoresite(spacePt: Point3d, vp: Viewport, checkAccuDraw: boolean = false, checkACS: boolean = false): Ray3d {\n if (checkAccuDraw && IModelApp.accuDraw.isActive)\n return Ray3d.create(spacePt, IModelApp.accuDraw.getRotation().getRow(2).negate());\n\n if (checkACS && vp.isContextRotationRequired)\n return Ray3d.create(spacePt, vp.getAuxCoordRotation().getRow(2).negate());\n\n const eyePoint = vp.worldToViewMap.transform1.columnZ();\n const direction = Vector3d.createFrom(eyePoint);\n const aa = Geometry.conditionalDivideFraction(1, eyePoint.w);\n if (aa !== undefined) {\n const xyzEye = direction.scale(aa);\n direction.setFrom(spacePt.vectorTo(xyzEye));\n }\n direction.scaleToLength(-1.0, direction);\n return Ray3d.create(spacePt, direction);\n }\n\n /** Return ray intersection with a plane defined by a point and normal\n * @see [[getBoresite]]\n */\n public static projectPointToPlaneInView(spacePt: Point3d, planePt: Point3d, planeNormal: Vector3d, vp: Viewport, checkAccuDraw: boolean = false, checkACS: boolean = false): Point3d | undefined {\n const plane = Plane3dByOriginAndUnitNormal.create(planePt, planeNormal);\n if (undefined === plane)\n return undefined;\n const rayToEye = AccuDrawHintBuilder.getBoresite(spacePt, vp, checkAccuDraw, checkACS);\n const projectedPt = Point3d.createZero();\n if (undefined === rayToEye.intersectionWithPlane(plane, projectedPt))\n return undefined;\n return projectedPt;\n }\n\n /** Return ray intersection with a line defined by a point and direction\n * @see [[getBoresite]]\n */\n public static projectPointToLineInView(spacePt: Point3d, linePt: Point3d, lineDirection: Vector3d, vp: Viewport, checkAccuDraw: boolean = false, checkACS: boolean = false): Point3d | undefined {\n const lineRay = Ray3d.create(linePt, lineDirection);\n const rayToEye = AccuDrawHintBuilder.getBoresite(spacePt, vp, checkAccuDraw, checkACS);\n if (rayToEye.direction.isParallelTo(lineRay.direction, true))\n return lineRay.projectPointToRay(spacePt);\n const matrix = Matrix3d.createRigidFromColumns(lineRay.direction, rayToEye.direction, AxisOrder.XZY);\n if (undefined === matrix)\n return undefined;\n const plane = Plane3dByOriginAndUnitNormal.create(linePt, matrix.columnZ());\n if (undefined === plane)\n return undefined;\n const projectedPt = Point3d.createZero();\n if (undefined === rayToEye.intersectionWithPlane(plane, projectedPt))\n return undefined;\n return lineRay.projectPointToRay(projectedPt);\n }\n\n /** Return a [[Matrix3d]] representing the current working plane specified by AccuDraw, [[Viewport.auxCoordSystem]], or [[Viewport.rotation]]. */\n public static getCurrentRotation(vp: Viewport, checkAccuDraw: boolean, checkACS: boolean, matrix?: Matrix3d): Matrix3d | undefined {\n const current = AccuDraw.getCurrentOrientation(vp, checkAccuDraw, checkACS, matrix);\n return (undefined !== current ? current.inverse() : undefined);\n }\n\n /** Return a [[Matrix3d]] from a [[SnapDetail]].\n * Uses [[SnapDetail.normal]] and [[SnapDetail.primitive]] when available to create the most well defined rotation for the given snap location.\n */\n public static getSnapRotation(snap: SnapDetail, matrix?: Matrix3d): Matrix3d | undefined {\n const out = AccuDraw.getSnapRotation(snap, undefined, matrix);\n return (undefined !== out ? out.inverse() : undefined);\n }\n\n /** Return a [[Matrix3d]] corresponding to the supplied [[ContextRotationId]].\n * A [[ContextRotationId]] that corresponds to a standard view, \"Top\", \"Front\", etc. will return a [[Matrix3d]] that\n * is relative to the current [[Viewport.auxCoordSystem]] when ACS context lock is enabled.\n * @see [[ToolAdmin.acsContextLock]]\n */\n public static getContextRotation(id: ContextRotationId, vp: Viewport): Matrix3d | undefined {\n switch (id) {\n case ContextRotationId.Top:\n return AccuDraw.getStandardRotation(StandardViewId.Top, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Front:\n return AccuDraw.getStandardRotation(StandardViewId.Front, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Left:\n return AccuDraw.getStandardRotation(StandardViewId.Left, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Bottom:\n return AccuDraw.getStandardRotation(StandardViewId.Bottom, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Back:\n return AccuDraw.getStandardRotation(StandardViewId.Back, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.Right:\n return AccuDraw.getStandardRotation(StandardViewId.Right, vp, vp.isContextRotationRequired).inverse();\n case ContextRotationId.View:\n return vp.view.getRotation().inverse();\n case ContextRotationId.Face:\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\n if (undefined === snap || undefined === snap.normal)\n return undefined;\n const normal = Vector3d.createZero();\n const boresite = this.getBoresite(snap.hitPoint, vp);\n if (snap.normal.dotProduct(boresite.direction) < 0.0)\n normal.setFrom(snap.normal);\n else\n snap.normal.negate(normal);\n return Matrix3d.createRigidHeadsUp(normal);\n }\n }\n}\n"]}
|