@itwin/core-frontend 4.8.0-dev.39 → 4.8.0-dev.40
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/lib/cjs/SubCategoriesCache.js +1 -1
- package/lib/cjs/SubCategoriesCache.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +2 -2
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +2 -2
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.d.ts +21 -0
- package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.js +93 -1
- package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
- package/lib/esm/SubCategoriesCache.js +1 -1
- package/lib/esm/SubCategoriesCache.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +2 -2
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tools/AccuDrawTool.d.ts +21 -0
- package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawTool.js +89 -0
- package/lib/esm/tools/AccuDrawTool.js.map +1 -1
- package/lib/public/locales/en/CoreTools.json +15 -0
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccuDrawTool.js","sourceRoot":"","sources":["../../../src/tools/AccuDrawTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { Geometry, Matrix3d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { AccuDraw, AccuDrawFlags, CompassMode, ContextMode, ItemField, KeyinStatus, LockedStates, RotationMode, ThreeAxes } from \"../AccuDraw\";\r\nimport { TentativeOrAccuSnap } from \"../AccuSnap\";\r\nimport { ACSDisplayOptions, AuxCoordSystemState } from \"../AuxCoordSys\";\r\nimport { SnapDetail } from \"../HitDetail\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { DecorateContext } from \"../ViewContext\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { BeButtonEvent, CoordinateLockOverrides, CoreTools, EventHandled, InputCollector, Tool } from \"./Tool\";\r\n\r\n// cSpell:ignore dont unlockedz\r\n\r\nfunction normalizedDifference(point1: Point3d, point2: Point3d, out: Vector3d): number {\r\n return point2.vectorTo(point1).normalizeWithLength(out).mag;\r\n}\r\n\r\nfunction normalizedCrossProduct(vec1: Vector3d, vec2: Vector3d, out: Vector3d): number {\r\n return vec1.crossProduct(vec2, out).normalizeWithLength(out).mag;\r\n}\r\n\r\n/**\r\n * A shortcut may require no user input (immediate) or it may install a tool to collect the needed input. AccuDrawShortcuts are how users control AccuDraw.\r\n * A tool implementor should not use this class to setup AccuDraw, instead use AccuDrawHintBuilder to provide hints.\r\n * @alpha\r\n */\r\nexport class AccuDrawShortcuts {\r\n public static rotateAxesByPoint(isSnapped: boolean, aboutCurrentZ: boolean): boolean {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return false;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return false;\r\n\r\n const point = accudraw.point;\r\n if (!vp.view.is3d())\r\n point.z = 0.0;\r\n\r\n if (aboutCurrentZ)\r\n accudraw.hardConstructionPlane(point, point, accudraw.planePt, accudraw.axes.z, vp, isSnapped);\r\n else\r\n accudraw.softConstructionPlane(point, point, accudraw.planePt, accudraw.axes.z, vp, isSnapped);\r\n\r\n // Snap point and compass origin coincide...\r\n const xVec = new Vector3d();\r\n if (normalizedDifference(point, accudraw.planePt, xVec) < Geometry.smallAngleRadians)\r\n return false;\r\n\r\n accudraw.axes.x.setFrom(xVec);\r\n\r\n if (RotationMode.Context !== accudraw.rotationMode)\r\n accudraw.setRotationMode(RotationMode.Context);\r\n\r\n accudraw.flags.contextRotMode = ContextMode.XAxis;\r\n accudraw.flags.lockedRotation = false;\r\n\r\n accudraw.updateRotation();\r\n\r\n // Always want index line to display for x-Axis...changing rotation clears this...so it flashes...\r\n accudraw.indexed |= LockedStates.X_BM;\r\n return true;\r\n }\r\n\r\n public static updateACSByPoints(acs: AuxCoordSystemState, vp: Viewport, points: Point3d[], isDynamics: boolean): boolean {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return false;\r\n\r\n let accept = false;\r\n const vec = [new Vector3d(), new Vector3d(), new Vector3d()];\r\n acs.setOrigin(points[0]);\r\n switch (points.length) {\r\n case 1:\r\n acs.setRotation(vp.rotation);\r\n if (!isDynamics) {\r\n accudraw.published.origin.setFrom(points[0]);\r\n accudraw.published.flags = AccuDrawFlags.SetOrigin;\r\n accudraw.flags.fixedOrg = true;\r\n }\r\n break;\r\n\r\n case 2:\r\n if (normalizedDifference(points[1], points[0], vec[0]) < 0.00001) {\r\n accept = true;\r\n break;\r\n }\r\n\r\n if (vp.view.is3d()) {\r\n if (normalizedCrossProduct(accudraw.axes.y, vec[0], vec[1]) < 0.00001) {\r\n vec[2].set(0.0, 0.0, 1.0);\r\n\r\n if (normalizedCrossProduct(vec[2], vec[0], vec[1]) < 0.00001) {\r\n vec[2].set(0.0, 1.0, 0.0);\r\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\r\n }\r\n }\r\n\r\n normalizedCrossProduct(vec[0], vec[1], vec[2]);\r\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\r\n\r\n if (!isDynamics) {\r\n accudraw.published.origin.setFrom(points[0]);\r\n accudraw.published.flags = AccuDrawFlags.SetOrigin | AccuDrawFlags.SetNormal;\r\n accudraw.published.vector.setFrom(vec[0]);\r\n }\r\n break;\r\n }\r\n\r\n vec[2].set(0.0, 0.0, 1.0);\r\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\r\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\r\n accept = true;\r\n break;\r\n\r\n case 3:\r\n if (normalizedDifference(points[1], points[0], vec[0]) < 0.00001 ||\r\n normalizedDifference(points[2], points[0], vec[1]) < 0.00001 ||\r\n normalizedCrossProduct(vec[0], vec[1], vec[2]) < 0.00001) {\r\n accept = true;\r\n break;\r\n }\r\n\r\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\r\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\r\n accept = true;\r\n break;\r\n }\r\n\r\n return accept;\r\n }\r\n\r\n public static processPendingHints() { IModelApp.accuDraw.processHints(); }\r\n\r\n public static requestInputFocus() {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n accudraw.grabInputFocus();\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n // Helper method for GUI implementation...\r\n public static async itemFieldNavigate(index: ItemField, str: string, forward: boolean): Promise<void> {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (accudraw.getFieldLock(index))\r\n accudraw.saveCoordinate(index, accudraw.getValueByIndex(index));\r\n\r\n if (!accudraw.isActive && KeyinStatus.Partial === accudraw.getKeyinStatus(index)) {\r\n await accudraw.processFieldInput(index, str, true);\r\n } else {\r\n accudraw.setKeyinStatus(index, KeyinStatus.Dynamic);\r\n accudraw.onFieldValueChange(index);\r\n }\r\n\r\n const vp = accudraw.currentView;\r\n const is3d = vp ? vp.view.is3d() : false;\r\n const isPolar = (CompassMode.Polar === accudraw.compassMode);\r\n switch (index) {\r\n case ItemField.DIST_Item:\r\n index = ((is3d && !forward) ? ItemField.Z_Item : ItemField.ANGLE_Item);\r\n break;\r\n\r\n case ItemField.ANGLE_Item:\r\n index = ((is3d && forward) ? ItemField.Z_Item : ItemField.DIST_Item);\r\n break;\r\n\r\n case ItemField.X_Item:\r\n index = ((is3d && !forward) ? ItemField.Z_Item : ItemField.Y_Item);\r\n break;\r\n\r\n case ItemField.Y_Item:\r\n index = ((is3d && forward) ? ItemField.Z_Item : ItemField.X_Item);\r\n break;\r\n\r\n case ItemField.Z_Item:\r\n index = (forward ? (isPolar ? ItemField.DIST_Item : ItemField.X_Item) : (isPolar ? ItemField.ANGLE_Item : ItemField.Y_Item));\r\n break;\r\n }\r\n\r\n accudraw.setKeyinStatus(index, KeyinStatus.Partial);\r\n accudraw.setFocusItem(index);\r\n accudraw.dontMoveFocus = true;\r\n }\r\n\r\n public static itemFieldNewInput(index: ItemField): void { IModelApp.accuDraw.setKeyinStatus(index, KeyinStatus.Partial); }\r\n\r\n public static async itemFieldAcceptInput(index: ItemField, str: string): Promise<void> {\r\n const accudraw = IModelApp.accuDraw;\r\n await accudraw.processFieldInput(index, str, true);\r\n accudraw.setKeyinStatus(index, KeyinStatus.Dynamic);\r\n\r\n if (accudraw.getFieldLock(index))\r\n accudraw.saveCoordinate(index, accudraw.getValueByIndex(index));\r\n\r\n const vp = accudraw.currentView;\r\n if (accudraw.isActive) {\r\n if (!vp)\r\n return;\r\n\r\n if (CompassMode.Polar === accudraw.compassMode)\r\n accudraw.fixPointPolar(vp);\r\n else\r\n accudraw.fixPointRectangular(vp);\r\n\r\n accudraw.flags.dialogNeedsUpdate = true;\r\n return;\r\n }\r\n\r\n const is3d = vp ? vp.view.is3d() : false;\r\n const isPolar = (CompassMode.Polar === accudraw.compassMode);\r\n switch (index) {\r\n case ItemField.DIST_Item:\r\n index = ItemField.ANGLE_Item;\r\n break;\r\n\r\n case ItemField.ANGLE_Item:\r\n index = (is3d ? ItemField.Z_Item : ItemField.DIST_Item);\r\n break;\r\n\r\n case ItemField.X_Item:\r\n index = ItemField.Y_Item;\r\n break;\r\n\r\n case ItemField.Y_Item:\r\n index = (is3d ? ItemField.Z_Item : ItemField.X_Item);\r\n break;\r\n\r\n case ItemField.Z_Item:\r\n index = (isPolar ? ItemField.DIST_Item : ItemField.X_Item);\r\n break;\r\n }\r\n accudraw.setFocusItem(index);\r\n }\r\n\r\n public static itemFieldLockToggle(index: ItemField): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (accudraw.getFieldLock(index)) {\r\n switch (index) {\r\n case ItemField.DIST_Item:\r\n accudraw.distanceLock(true, false);\r\n break;\r\n\r\n case ItemField.ANGLE_Item:\r\n accudraw.angleLock();\r\n break;\r\n\r\n case ItemField.X_Item:\r\n accudraw.clearTentative();\r\n accudraw.locked |= LockedStates.X_BM;\r\n break;\r\n\r\n case ItemField.Y_Item:\r\n accudraw.clearTentative();\r\n accudraw.locked |= LockedStates.Y_BM;\r\n break;\r\n\r\n case ItemField.Z_Item:\r\n accudraw.clearTentative();\r\n break;\r\n }\r\n\r\n return;\r\n }\r\n\r\n switch (index) {\r\n case ItemField.DIST_Item:\r\n accudraw.locked &= ~LockedStates.DIST_BM;\r\n break;\r\n\r\n case ItemField.ANGLE_Item:\r\n accudraw.locked &= ~LockedStates.ANGLE_BM;\r\n break;\r\n\r\n case ItemField.X_Item:\r\n accudraw.locked &= ~LockedStates.X_BM;\r\n break;\r\n\r\n case ItemField.Y_Item:\r\n accudraw.locked &= ~LockedStates.Y_BM;\r\n break;\r\n\r\n case ItemField.Z_Item:\r\n break;\r\n }\r\n\r\n accudraw.dontMoveFocus = false;\r\n accudraw.clearTentative();\r\n }\r\n\r\n public static itemRotationModeChange(rotation: RotationMode): void {\r\n const accudraw = IModelApp.accuDraw;\r\n const vp = accudraw.currentView;\r\n const is3d = vp ? vp.view.is3d() : true;\r\n\r\n if (!is3d && (RotationMode.Front === rotation || RotationMode.Side === rotation))\r\n accudraw.setRotationMode(RotationMode.Top);\r\n\r\n accudraw.flags.baseRotation = rotation;\r\n accudraw.updateRotation(true);\r\n }\r\n\r\n // Shortcut implementations for GUI entry points...\r\n public static setOrigin(explicitOrigin?: Point3d): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (explicitOrigin) {\r\n accudraw.published.origin.setFrom(explicitOrigin);\r\n accudraw.flags.haveValidOrigin = true;\r\n } else if (accudraw.isInactive || accudraw.isDeactivated) {\r\n // If AccuSnap is active use adjusted snap point, otherwise use last data point...\r\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\r\n if (undefined !== snap) {\r\n accudraw.published.origin.setFrom(snap.isPointAdjusted ? snap.adjustedPoint : snap.getPoint());\r\n accudraw.flags.haveValidOrigin = true;\r\n } else {\r\n const ev = new BeButtonEvent();\r\n IModelApp.toolAdmin.fillEventFromLastDataButton(ev);\r\n\r\n if (ev.viewport) {\r\n accudraw.published.origin.setFrom(ev.point);\r\n accudraw.flags.haveValidOrigin = true;\r\n } else {\r\n // NOTE: If current point isn't valid setDefaultOrigin will be called...\r\n accudraw.published.origin.setFrom(accudraw.point);\r\n }\r\n }\r\n } else {\r\n accudraw.published.origin.setFrom(accudraw.point);\r\n accudraw.flags.haveValidOrigin = true;\r\n accudraw.setLastPoint(accudraw.published.origin);\r\n }\r\n\r\n accudraw.clearTentative();\r\n const vp = accudraw.currentView;\r\n\r\n // NOTE: _AdjustPoint should have been called to have setup currentView...\r\n if (vp && !vp.view.is3d())\r\n accudraw.published.origin.z = 0.0;\r\n\r\n accudraw.origin.setFrom(accudraw.published.origin);\r\n accudraw.point.setFrom(accudraw.published.origin);\r\n accudraw.planePt.setFrom(accudraw.published.origin);\r\n accudraw.published.flags |= AccuDrawFlags.SetOrigin;\r\n accudraw.activate();\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static changeCompassMode(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n let axisLockStatus = accudraw.locked & LockedStates.XY_BM;\r\n\r\n if (axisLockStatus) {\r\n if (CompassMode.Rectangular === accudraw.compassMode) {\r\n if (axisLockStatus & LockedStates.X_BM && accudraw.delta.x !== 0.0)\r\n axisLockStatus &= ~LockedStates.X_BM;\r\n\r\n if (axisLockStatus & LockedStates.Y_BM && accudraw.delta.y !== 0.0)\r\n axisLockStatus &= ~LockedStates.Y_BM;\r\n }\r\n }\r\n\r\n accudraw.changeCompassMode(true);\r\n if (axisLockStatus) {\r\n if (CompassMode.Rectangular === accudraw.compassMode) {\r\n accudraw.delta.x = accudraw.delta.y = 0.0;\r\n\r\n if (axisLockStatus & LockedStates.X_BM)\r\n accudraw.setFieldLock(ItemField.X_Item, true);\r\n else if (axisLockStatus & LockedStates.Y_BM)\r\n accudraw.setFieldLock(ItemField.Y_Item, true);\r\n } else {\r\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\r\n }\r\n accudraw.locked = axisLockStatus;\r\n }\r\n accudraw.flags.baseMode = accudraw.compassMode;\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockSmart(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const accuSnap = IModelApp.accuSnap;\r\n\r\n // Don't want AccuSnap to influence axis or Z...\r\n if (accuSnap.isHot) {\r\n accuSnap.clear();\r\n\r\n const vp = accudraw.currentView;\r\n if (vp) {\r\n if (CompassMode.Polar === accudraw.compassMode)\r\n accudraw.fixPointPolar(vp);\r\n else\r\n accudraw.fixPointRectangular(vp);\r\n }\r\n }\r\n\r\n if (CompassMode.Polar === accudraw.compassMode) {\r\n const isSnapped = accudraw.clearTentative();\r\n if (accudraw.locked & LockedStates.ANGLE_BM) { // angle locked (unlock it)\r\n accudraw.setFieldLock(ItemField.ANGLE_Item, false);\r\n accudraw.locked &= ~LockedStates.ANGLE_BM;\r\n } else if (accudraw.getFieldLock(ItemField.DIST_Item)) { // distance locked (unlock it)\r\n accudraw.setFieldLock(ItemField.DIST_Item, false);\r\n accudraw.locked &= ~LockedStates.DIST_BM;\r\n } else if (isSnapped) {\r\n accudraw.doLockAngle(isSnapped);\r\n } else if (accudraw.indexed & LockedStates.ANGLE_BM) { // angle indexed (lock it)\r\n accudraw.angleLock();\r\n } else {\r\n if (Math.abs(accudraw.vector.dotProduct(accudraw.axes.x)) > Math.abs(accudraw.vector.dotProduct(accudraw.axes.y)))\r\n accudraw.indexed |= LockedStates.Y_BM;\r\n else\r\n accudraw.indexed |= LockedStates.X_BM;\r\n accudraw.angleLock();\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n return;\r\n }\r\n\r\n if (accudraw.locked) { // if locked, unlock\r\n accudraw.clearTentative();\r\n accudraw.locked &= ~LockedStates.XY_BM;\r\n accudraw.setFieldLock(ItemField.X_Item, false);\r\n accudraw.setFieldLock(ItemField.Y_Item, false);\r\n if (accudraw.getFieldLock(ItemField.Z_Item) && accudraw.delta.z === 0.0 && !accudraw.stickyZLock)\r\n accudraw.setFieldLock(ItemField.Z_Item, false);\r\n } else { // lock to nearest axis\r\n if (accudraw.clearTentative()) {\r\n if (Math.abs(accudraw.delta.x) >= Geometry.smallAngleRadians && Math.abs(accudraw.delta.y) >= Geometry.smallAngleRadians) {\r\n accudraw.doLockAngle(false);\r\n return;\r\n }\r\n }\r\n\r\n const vp = accudraw.currentView;\r\n if (Math.abs(accudraw.delta.x) > Math.abs(accudraw.delta.y)) {\r\n accudraw.delta.y = 0.0;\r\n accudraw.onFieldValueChange(ItemField.Y_Item);\r\n accudraw.locked |= LockedStates.Y_BM;\r\n accudraw.locked &= ~LockedStates.X_BM;\r\n accudraw.setFieldLock(ItemField.X_Item, false);\r\n accudraw.setFieldLock(ItemField.Y_Item, true);\r\n accudraw.setFieldLock(ItemField.Z_Item, vp ? vp.view.is3d() : false);\r\n } else {\r\n accudraw.delta.x = 0.0;\r\n accudraw.onFieldValueChange(ItemField.X_Item);\r\n accudraw.locked |= LockedStates.X_BM;\r\n accudraw.locked &= ~LockedStates.Y_BM;\r\n accudraw.setFieldLock(ItemField.Y_Item, false);\r\n accudraw.setFieldLock(ItemField.X_Item, true);\r\n accudraw.setFieldLock(ItemField.Z_Item, vp ? vp.view.is3d() : false);\r\n }\r\n\r\n if (!accudraw.flags.lockedRotation) {\r\n accudraw.flags.lockedRotation = true;\r\n accudraw.flags.contextRotMode = ContextMode.Locked;\r\n accudraw.setRotationMode(RotationMode.Context);\r\n }\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockX(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n accudraw.clearTentative();\r\n\r\n if (CompassMode.Rectangular !== accudraw.compassMode) {\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return;\r\n\r\n accudraw.fixPointRectangular(vp);\r\n accudraw.changeCompassMode(true);\r\n }\r\n\r\n if (accudraw.getFieldLock(ItemField.X_Item)) {\r\n accudraw.setFieldLock(ItemField.X_Item, false);\r\n accudraw.locked = accudraw.locked & ~LockedStates.X_BM;\r\n } else {\r\n accudraw.saveCoordinate(ItemField.X_Item, accudraw.delta.x);\r\n accudraw.setFieldLock(ItemField.X_Item, true);\r\n accudraw.locked = accudraw.locked | LockedStates.X_BM;\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockY(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n accudraw.clearTentative();\r\n\r\n if (CompassMode.Rectangular !== accudraw.compassMode) {\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return;\r\n\r\n accudraw.fixPointRectangular(vp);\r\n accudraw.changeCompassMode(true);\r\n }\r\n\r\n if (accudraw.getFieldLock(ItemField.Y_Item)) {\r\n accudraw.setFieldLock(ItemField.Y_Item, false);\r\n accudraw.locked = accudraw.locked & ~LockedStates.Y_BM;\r\n } else {\r\n accudraw.saveCoordinate(ItemField.Y_Item, accudraw.delta.y);\r\n accudraw.setFieldLock(ItemField.Y_Item, true);\r\n accudraw.locked = accudraw.locked | LockedStates.Y_BM;\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockZ(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp || !vp.view.is3d())\r\n return;\r\n\r\n const isSnapped = accudraw.clearTentative();\r\n\r\n if (accudraw.getFieldLock(ItemField.Z_Item)) {\r\n accudraw.setFieldLock(ItemField.Z_Item, false);\r\n } else {\r\n // Move focus to Z field...\r\n if (!isSnapped && accudraw.autoFocusFields) {\r\n accudraw.setFocusItem(ItemField.Z_Item);\r\n accudraw.dontMoveFocus = true;\r\n }\r\n accudraw.setFieldLock(ItemField.Z_Item, true);\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockDistance(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const isSnapped = accudraw.clearTentative();\r\n\r\n if (CompassMode.Polar !== accudraw.compassMode) {\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return;\r\n\r\n accudraw.locked = 0;\r\n accudraw.fixPointPolar(vp);\r\n accudraw.changeCompassMode(true);\r\n }\r\n\r\n if (accudraw.getFieldLock(ItemField.DIST_Item)) {\r\n accudraw.setFieldLock(ItemField.DIST_Item, false);\r\n accudraw.locked &= ~LockedStates.DIST_BM;\r\n\r\n accudraw.setKeyinStatus(ItemField.DIST_Item, KeyinStatus.Dynamic); // Need to clear partial status if locked by entering distance since focus stays in distance field...\r\n } else {\r\n // Move focus to distance field...\r\n if (!isSnapped && accudraw.autoFocusFields)\r\n accudraw.setFocusItem(ItemField.DIST_Item);\r\n accudraw.distanceLock(true, true);\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockAngle(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n accudraw.doLockAngle(accudraw.clearTentative());\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public lockIndex(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (accudraw.flags.indexLocked) {\r\n if (accudraw.locked)\r\n AccuDrawShortcuts.lockSmart();\r\n\r\n accudraw.flags.indexLocked = false;\r\n } else {\r\n if (CompassMode.Polar === accudraw.compassMode) {\r\n if (accudraw.indexed & LockedStates.XY_BM) {\r\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\r\n accudraw.angleLock();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n AccuDrawShortcuts.lockDistance();\r\n } else {\r\n if (accudraw.indexed & LockedStates.X_BM) {\r\n AccuDrawShortcuts.lockX();\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n AccuDrawShortcuts.lockY();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.Y_BM) {\r\n AccuDrawShortcuts.lockY();\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n AccuDrawShortcuts.lockX();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM && !(accudraw.indexed & LockedStates.XY_BM)) {\r\n if (accudraw.locked & LockedStates.X_BM)\r\n AccuDrawShortcuts.lockY();\r\n else\r\n AccuDrawShortcuts.lockX();\r\n }\r\n }\r\n\r\n accudraw.flags.indexLocked = true;\r\n }\r\n\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static setStandardRotation(rotation: RotationMode): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (RotationMode.Context === rotation) {\r\n const axes = accudraw.baseAxes.clone();\r\n accudraw.accountForAuxRotationPlane(axes, accudraw.flags.auxRotationPlane);\r\n accudraw.setContextRotation(axes.toMatrix3d(), false, true);\r\n accudraw.refreshDecorationsAndDynamics();\r\n return;\r\n } else {\r\n accudraw.flags.baseRotation = rotation;\r\n accudraw.setRotationMode(rotation);\r\n }\r\n accudraw.updateRotation(true);\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static alignView(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return;\r\n\r\n const newMatrix = accudraw.getRotation();\r\n if (newMatrix.isExactEqual(vp.rotation))\r\n return;\r\n\r\n const targetMatrix = newMatrix.multiplyMatrixMatrix(vp.rotation);\r\n const rotateTransform = Transform.createFixedPointAndMatrix(vp.view.getTargetPoint(), targetMatrix);\r\n const newFrustum = vp.getFrustum();\r\n newFrustum.multiply(rotateTransform);\r\n\r\n vp.view.setupFromFrustum(newFrustum);\r\n vp.synchWithView();\r\n vp.animateFrustumChange();\r\n\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static rotateToBase(): void { this.setStandardRotation(IModelApp.accuDraw.flags.baseRotation); }\r\n\r\n public static rotateToACS(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n // NOTE: Match current ACS orientation..reset auxRotationPlane to top!\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n this.setStandardRotation(RotationMode.ACS);\r\n }\r\n\r\n public static rotateCycle(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp || !vp.view.is3d())\r\n return;\r\n\r\n let rotation: RotationMode;\r\n switch (accudraw.rotationMode) {\r\n case RotationMode.View:\r\n case RotationMode.Side:\r\n rotation = RotationMode.Top;\r\n break;\r\n\r\n case RotationMode.Top:\r\n rotation = RotationMode.Front;\r\n break;\r\n\r\n case RotationMode.Front:\r\n rotation = RotationMode.Side;\r\n break;\r\n\r\n case RotationMode.Context:\r\n rotation = RotationMode.Context;\r\n\r\n if (rotation !== accudraw.flags.baseRotation) {\r\n accudraw.baseAxes.setFrom(accudraw.axes);\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n accudraw.flags.baseRotation = rotation;\r\n } else {\r\n const axes = accudraw.baseAxes.clone();\r\n accudraw.accountForAuxRotationPlane(axes, accudraw.flags.auxRotationPlane);\r\n if (!accudraw.axes.equals(axes))\r\n accudraw.changeBaseRotationMode(rotation);\r\n }\r\n\r\n switch (accudraw.flags.auxRotationPlane) {\r\n case RotationMode.Front:\r\n accudraw.flags.auxRotationPlane = RotationMode.Side;\r\n break;\r\n\r\n case RotationMode.Side:\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n break;\r\n\r\n case RotationMode.Top:\r\n accudraw.flags.auxRotationPlane = RotationMode.Front;\r\n break;\r\n }\r\n break;\r\n\r\n case RotationMode.ACS:\r\n rotation = RotationMode.ACS;\r\n switch (accudraw.flags.auxRotationPlane) {\r\n case RotationMode.Front:\r\n accudraw.flags.auxRotationPlane = RotationMode.Side;\r\n break;\r\n case RotationMode.Side:\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n break;\r\n case RotationMode.Top:\r\n accudraw.flags.auxRotationPlane = RotationMode.Front;\r\n break;\r\n }\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n this.setStandardRotation(rotation);\r\n }\r\n\r\n public static rotate90(axis: number): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const newRotation = new ThreeAxes();\r\n\r\n accudraw.locked = accudraw.indexed = 0;\r\n accudraw.unlockAllFields();\r\n\r\n switch (axis) {\r\n case 0:\r\n newRotation.x.setFrom(accudraw.axes.x);\r\n newRotation.z.setFrom(accudraw.axes.y);\r\n newRotation.z.crossProduct(newRotation.x, newRotation.y);\r\n break;\r\n\r\n case 1:\r\n newRotation.x.setFrom(accudraw.axes.z);\r\n newRotation.y.setFrom(accudraw.axes.y);\r\n newRotation.x.crossProduct(newRotation.y, newRotation.z);\r\n break;\r\n\r\n case 2:\r\n newRotation.x.setFrom(accudraw.axes.y);\r\n newRotation.z.setFrom(accudraw.axes.z);\r\n newRotation.z.crossProduct(newRotation.x, newRotation.y);\r\n break;\r\n }\r\n\r\n accudraw.setContextRotation(newRotation.toMatrix3d(), true, true);\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static async rotateAxes(aboutCurrentZ: boolean) {\r\n return IModelApp.tools.run(\"AccuDraw.RotateAxes\", aboutCurrentZ);\r\n }\r\n\r\n public static async rotateToElement() {\r\n return IModelApp.tools.run(\"AccuDraw.RotateElement\");\r\n }\r\n\r\n public static async defineACSByElement() {\r\n return IModelApp.tools.run(\"AccuDraw.DefineACSByElement\");\r\n }\r\n\r\n public static async defineACSByPoints() {\r\n return IModelApp.tools.run(\"AccuDraw.DefineACSByPoints\");\r\n }\r\n\r\n public static getACS(acsName: string | undefined, useOrigin: boolean, useRotation: boolean): BentleyStatus {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return BentleyStatus.ERROR;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return BentleyStatus.ERROR;\r\n\r\n let currRotation = 0, currBaseRotation = 0;\r\n const axes = new ThreeAxes();\r\n\r\n if (!useRotation) {\r\n // Save current rotation, event listener on ACS change will orient AccuDraw to ACS...\r\n currRotation = accudraw.rotationMode;\r\n currBaseRotation = accudraw.flags.baseRotation;\r\n axes.setFrom(accudraw.axes);\r\n }\r\n\r\n if (acsName && \"\" !== acsName) {\r\n // // See if this ACS already exists...\r\n // DgnCode acsCode = AuxCoordSystem:: CreateCode(vp -> GetViewControllerR().GetViewDefinition(), acsName);\r\n // DgnElementId acsId = vp -> GetViewController().GetDgnDb().Elements().QueryElementIdByCode(acsCode);\r\n\r\n // if (!acsId.IsValid())\r\n // return ERROR;\r\n\r\n // AuxCoordSystemCPtr auxElm = vp -> GetViewController().GetDgnDb().Elements().Get<AuxCoordSystem>(acsId);\r\n\r\n // if (!auxElm.IsValid())\r\n // return ERROR;\r\n\r\n // AuxCoordSystemPtr acsPtr = auxElm -> MakeCopy<AuxCoordSystem>();\r\n\r\n // if (!acsPtr.IsValid())\r\n // return ERROR;\r\n\r\n // AuxCoordSystemCR oldACS = vp -> GetViewController().GetAuxCoordinateSystem();\r\n\r\n // if (!useOrigin)\r\n // acsPtr -> SetOrigin(oldACS.GetOrigin());\r\n\r\n // if (!useRotation)\r\n // acsPtr -> SetRotation(oldACS.GetRotation());\r\n\r\n // AccuDraw:: UpdateAuxCoordinateSystem(* acsPtr, * vp);\r\n }\r\n\r\n const currentACS = vp.view.auxiliaryCoordinateSystem;\r\n\r\n if (useOrigin) {\r\n accudraw.origin.setFrom(currentACS.getOrigin());\r\n accudraw.point.setFrom(accudraw.origin);\r\n accudraw.planePt.setFrom(accudraw.origin);\r\n }\r\n\r\n if (useRotation) {\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n this.setStandardRotation(RotationMode.ACS);\r\n } else {\r\n this.itemFieldUnlockAll();\r\n\r\n accudraw.setRotationMode(currRotation);\r\n accudraw.flags.baseRotation = currBaseRotation;\r\n accudraw.axes.setFrom(axes);\r\n\r\n if (RotationMode.ACS === accudraw.flags.baseRotation) {\r\n const acs = currentACS.clone();\r\n\r\n const rMatrix = accudraw.getRotation();\r\n acs.setRotation(rMatrix);\r\n\r\n AccuDraw.updateAuxCoordinateSystem(acs, vp);\r\n }\r\n\r\n accudraw.published.flags &= ~AccuDrawFlags.OrientACS;\r\n }\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n public static writeACS(_acsName: string): BentleyStatus {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return BentleyStatus.ERROR;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return BentleyStatus.ERROR;\r\n\r\n // const origin = accudraw.origin;\r\n // const rMatrix = accudraw.getRotation();\r\n // AuxCoordSystemPtr acsPtr = AuxCoordSystem:: CreateFrom(vp -> GetViewController().GetAuxCoordinateSystem());\r\n // acsPtr -> SetOrigin(origin);\r\n // acsPtr -> SetRotation(rMatrix);\r\n // acsPtr -> SetType(CompassMode.Polar == accudraw.getCompassMode() ? ACSType :: Cylindrical : ACSType:: Rectangular);\r\n // acsPtr -> SetCode(AuxCoordSystem:: CreateCode(vp -> GetViewControllerR().GetViewDefinition(), nullptr != acsName ? acsName : \"\"));\r\n // acsPtr -> SetDescription(\"\");\r\n\r\n // if (acsName && '\\0' != acsName[0]) {\r\n // DgnDbStatus status;\r\n // acsPtr -> Insert(& status);\r\n\r\n // if (DgnDbStatus:: Success != status)\r\n // return BentleyStatus.ERROR;\r\n // }\r\n\r\n // AccuDraw:: UpdateAuxCoordinateSystem(* acsPtr, * vp);\r\n\r\n // accudraw.flags.baseRotation = RotationMode.ACS;\r\n // accudraw.SetRotationMode(RotationMode.ACS);\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n public static itemFieldUnlockAll(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (accudraw.isEnabled)\r\n accudraw.unlockAllFields();\r\n }\r\n\r\n /** @internal Temporary keyboard shortcuts. */\r\n public static async processShortcutKey(keyEvent: KeyboardEvent) {\r\n switch (keyEvent.key.toLowerCase()) {\r\n case \"enter\":\r\n AccuDrawShortcuts.lockSmart();\r\n return true;\r\n case \"x\":\r\n AccuDrawShortcuts.lockX();\r\n return true;\r\n case \"y\":\r\n AccuDrawShortcuts.lockY();\r\n return true;\r\n case \"z\":\r\n AccuDrawShortcuts.lockZ();\r\n return true;\r\n case \"a\":\r\n AccuDrawShortcuts.lockAngle();\r\n return true;\r\n case \"d\":\r\n AccuDrawShortcuts.lockDistance();\r\n return true;\r\n case \"m\":\r\n AccuDrawShortcuts.changeCompassMode();\r\n return true;\r\n case \"t\":\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Top);\r\n return true;\r\n case \"f\":\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Front);\r\n return true;\r\n case \"s\":\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Side);\r\n return true;\r\n case \"v\":\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.View);\r\n return true;\r\n case \"o\":\r\n AccuDrawShortcuts.setOrigin();\r\n return true;\r\n case \"c\":\r\n AccuDrawShortcuts.rotateCycle();\r\n return true;\r\n case \"q\":\r\n return AccuDrawShortcuts.rotateAxes(true);\r\n case \"e\":\r\n return AccuDrawShortcuts.rotateToElement();\r\n case \"r\":\r\n return AccuDrawShortcuts.defineACSByPoints();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetOriginTool extends Tool {\r\n public static override toolId = \"AccuDraw.SetOrigin\";\r\n public override async run() {\r\n AccuDrawShortcuts.setOrigin();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockSmartTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockSmart\";\r\n public override async run() {\r\n AccuDrawShortcuts.lockSmart();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockXTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockX\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockX();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockYTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockY\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockY();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockZTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockZ\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockZ();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockDistanceTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockDistance\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockDistance();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockAngleTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockAngle\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockAngle();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawChangeModeTool extends Tool {\r\n public static override toolId = \"AccuDraw.ChangeMode\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.changeCompassMode();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateCycleTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateCycle\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.rotateCycle();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateTopTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateTop\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Top);\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateFrontTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateFront\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Front);\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateSideTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateSide\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Side);\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateViewTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateView\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.View);\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nabstract class AccuDrawShortcutsTool extends InputCollector {\r\n private _cancel: boolean;\r\n public constructor() {\r\n super();\r\n this._cancel = true;\r\n }\r\n\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.initLocateElements(false, true, undefined, CoordinateLockOverrides.None);\r\n this.doManipulationStart();\r\n } // NOTE: InputCollector inherits suspended primitive's state, set everything...\r\n\r\n public override async onCleanup() { this.doManipulationStop(this._cancel); }\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (this.doManipulation(ev, false)) {\r\n this._cancel = false;\r\n await this.exitTool();\r\n }\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> { this.doManipulation(ev, true); }\r\n public override async exitTool() {\r\n await super.exitTool();\r\n AccuDrawShortcuts.requestInputFocus();\r\n } // re-grab focus when auto-focus tool setting set...\r\n\r\n public activateAccuDrawOnStart() { return true; }\r\n public doManipulationStart() {\r\n if (this.activateAccuDrawOnStart())\r\n IModelApp.accuDraw.activate();\r\n\r\n this.doManipulation(undefined, true);\r\n }\r\n\r\n public doManipulationStop(cancel: boolean) {\r\n if (!cancel)\r\n IModelApp.accuDraw.savedStateInputCollector.ignoreFlags = this.onManipulationComplete();\r\n }\r\n\r\n public onManipulationComplete(): AccuDrawFlags { return 0; }\r\n public abstract doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {\r\n public static override toolId = \"AccuDraw.RotateAxes\";\r\n public static override get maxArgs(): number { return 1; }\r\n protected _immediateMode: boolean = false;\r\n public constructor(public aboutCurrentZ: boolean = true) { super(); }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isActive)\r\n return false; // Require compass to already be active for this shortcut...\r\n\r\n if (this.aboutCurrentZ)\r\n accudraw.changeBaseRotationMode(RotationMode.Context); // Establish current orientation as base; base Z is used when defining compass rotation by x axis...\r\n\r\n if (accudraw.clearTentative() || IModelApp.accuSnap.isHot ||\r\n (CompassMode.Polar === accudraw.compassMode && accudraw.getFieldLock(ItemField.ANGLE_Item)) ||\r\n (CompassMode.Polar !== accudraw.compassMode && accudraw.getFieldLock(ItemField.X_Item) && accudraw.getFieldLock(ItemField.Y_Item))) {\r\n if (AccuDrawShortcuts.rotateAxesByPoint(true, this.aboutCurrentZ)) {\r\n AccuDrawShortcuts.itemFieldUnlockAll();\r\n accudraw.refreshDecorationsAndDynamics();\r\n this._immediateMode = true;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n public override async onPostInstall() {\r\n if (this._immediateMode) {\r\n await this.exitTool();\r\n return;\r\n }\r\n return super.onPostInstall();\r\n }\r\n\r\n public override onManipulationComplete(): AccuDrawFlags { return AccuDrawFlags.SetRMatrix; }\r\n public override doManipulationStart(): void {\r\n super.doManipulationStart();\r\n CoreTools.outputPromptByKey(\"AccuDraw.RotateAxes.Prompts.FirstPoint\");\r\n }\r\n\r\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\r\n const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;\r\n if (!vp)\r\n return true;\r\n AccuDrawShortcuts.rotateAxesByPoint(TentativeOrAccuSnap.isHot, this.aboutCurrentZ);\r\n vp.invalidateDecorations();\r\n if (!isMotion)\r\n AccuDrawShortcuts.itemFieldUnlockAll();\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: any[]): Promise<boolean> {\r\n for (const arg of args) {\r\n if (arg.toLowerCase() === \"unlockedz\")\r\n this.aboutCurrentZ = false;\r\n }\r\n return this.run(args);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateElementTool extends AccuDrawShortcutsTool {\r\n public static override toolId = \"AccuDraw.RotateElement\";\r\n public moveOrigin: boolean = !IModelApp.accuDraw.isActive; // By default use current origin if AccuDraw is already enabled...\r\n public override async onInstall(): Promise<boolean> { return IModelApp.accuDraw.isEnabled; } // Require compass to be enabled for this session...\r\n\r\n public override onManipulationComplete(): AccuDrawFlags {\r\n let ignoreFlags = AccuDrawFlags.SetRMatrix | AccuDrawFlags.Disable; // If AccuDraw wasn't active when the shortcut started, let it remain active for suspended tool when shortcut completes...\r\n if (this.moveOrigin)\r\n ignoreFlags |= AccuDrawFlags.SetOrigin;\r\n return ignoreFlags;\r\n }\r\n\r\n public override doManipulationStart(): void {\r\n super.doManipulationStart();\r\n CoreTools.outputPromptByKey(\"AccuDraw.RotateElement.Prompts.FirstPoint\");\r\n }\r\n\r\n public updateOrientation(snap: SnapDetail, vp: Viewport): boolean {\r\n const accudraw = IModelApp.accuDraw;\r\n const rMatrix = AccuDraw.getSnapRotation(snap, vp);\r\n if (undefined === rMatrix)\r\n return false;\r\n const origin = this.moveOrigin ? snap.snapPoint : accudraw.origin;\r\n accudraw.setContext(AccuDrawFlags.AlwaysSetOrigin | AccuDrawFlags.SetRMatrix, origin, rMatrix);\r\n return true;\r\n }\r\n\r\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\r\n const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;\r\n if (!vp)\r\n return true;\r\n\r\n const snapDetail = TentativeOrAccuSnap.getCurrentSnap(false);\r\n if (undefined === snapDetail || !this.updateOrientation(snapDetail, vp))\r\n return true;\r\n\r\n if (undefined === ev)\r\n AccuDrawShortcuts.processPendingHints();\r\n if (!isMotion)\r\n IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Hold temporary rotation for tool duration when not updating ACS...\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class DefineACSByElementTool extends AccuDrawShortcutsTool {\r\n public static override toolId = \"AccuDraw.DefineACSByElement\";\r\n private _origin = Point3d.create();\r\n private _rMatrix = Matrix3d.createIdentity();\r\n private _acs?: AuxCoordSystemState;\r\n\r\n public override activateAccuDrawOnStart(): boolean { return false; }\r\n public override onManipulationComplete(): AccuDrawFlags { return AccuDrawFlags.SetRMatrix; }\r\n\r\n public override doManipulationStart(): void {\r\n super.doManipulationStart();\r\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByElement.Prompts.FirstPoint\");\r\n }\r\n\r\n public updateOrientation(snap: SnapDetail, vp: Viewport): boolean {\r\n const rMatrix = AccuDraw.getSnapRotation(snap, vp);\r\n if (undefined === rMatrix)\r\n return false;\r\n this._origin = snap.snapPoint;\r\n this._rMatrix = rMatrix;\r\n return true;\r\n }\r\n\r\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\r\n const vp = ev ? ev.viewport : undefined;\r\n if (!vp)\r\n return true;\r\n\r\n const snapDetail = TentativeOrAccuSnap.getCurrentSnap(false);\r\n if (undefined === snapDetail || !this.updateOrientation(snapDetail, vp))\r\n return true;\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n if (isMotion)\r\n return true;\r\n\r\n if (!this._acs)\r\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\r\n this._acs.setOrigin(this._origin);\r\n this._acs.setRotation(this._rMatrix);\r\n AccuDraw.updateAuxCoordinateSystem(this._acs, vp);\r\n AccuDrawShortcuts.rotateToACS();\r\n return true;\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n const vp = context.viewport;\r\n if (!this._acs)\r\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\r\n this._acs.setOrigin(this._origin);\r\n this._acs.setRotation(this._rMatrix);\r\n this._acs.display(context, ACSDisplayOptions.Active | ACSDisplayOptions.Dynamics);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class DefineACSByPointsTool extends AccuDrawShortcutsTool {\r\n public static override toolId = \"AccuDraw.DefineACSByPoints\";\r\n private readonly _points: Point3d[] = [];\r\n private _acs?: AuxCoordSystemState;\r\n\r\n public override activateAccuDrawOnStart(): boolean { return false; }\r\n public override onManipulationComplete(): AccuDrawFlags { return AccuDrawFlags.SetRMatrix; }\r\n\r\n public override doManipulationStart(): void {\r\n super.doManipulationStart();\r\n const tentativePoint = IModelApp.tentativePoint;\r\n if (!tentativePoint.isActive) {\r\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.FirstPoint\");\r\n return;\r\n }\r\n\r\n const origin = tentativePoint.getPoint().clone();\r\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.SecondPoint\");\r\n IModelApp.accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, origin);\r\n this._points.push(origin);\r\n tentativePoint.clear(true);\r\n }\r\n\r\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\r\n if (!ev || !ev.viewport)\r\n return true;\r\n\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n if (isMotion)\r\n return false;\r\n\r\n IModelApp.accuDraw.activate();\r\n this._points.push(ev.point.clone());\r\n\r\n const vp = ev.viewport;\r\n if (!this._acs)\r\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\r\n\r\n if (AccuDrawShortcuts.updateACSByPoints(this._acs, vp, this._points, false)) {\r\n AccuDraw.updateAuxCoordinateSystem(this._acs, vp);\r\n AccuDrawShortcuts.rotateToACS();\r\n return true;\r\n }\r\n\r\n CoreTools.outputPromptByKey(`AccuDraw.DefineACSByPoints.Prompts${1 === this._points.length ? \".SecondPoint\" : \".NextPoint\"}`);\r\n return false;\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n const tmpPoints: Point3d[] = [];\r\n this._points.forEach((pt) => tmpPoints.push(pt));\r\n\r\n const ev = new BeButtonEvent();\r\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\r\n tmpPoints.push(ev.point);\r\n\r\n const vp = context.viewport;\r\n if (!this._acs)\r\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\r\n\r\n AccuDrawShortcuts.updateACSByPoints(this._acs, vp, tmpPoints, true);\r\n this._acs.display(context, ACSDisplayOptions.Active | ACSDisplayOptions.Dynamics);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"AccuDrawTool.js","sourceRoot":"","sources":["../../../src/tools/AccuDrawTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tools\r\n */\r\n\r\nimport { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { Geometry, Matrix3d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { AccuDraw, AccuDrawFlags, CompassMode, ContextMode, ItemField, KeyinStatus, LockedStates, RotationMode, ThreeAxes } from \"../AccuDraw\";\r\nimport { TentativeOrAccuSnap } from \"../AccuSnap\";\r\nimport { ACSDisplayOptions, AuxCoordSystemState } from \"../AuxCoordSys\";\r\nimport { SnapDetail } from \"../HitDetail\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { DecorateContext } from \"../ViewContext\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { BeButtonEvent, CoordinateLockOverrides, CoreTools, EventHandled, InputCollector, Tool } from \"./Tool\";\r\n\r\n// cSpell:ignore dont unlockedz\r\n\r\nfunction normalizedDifference(point1: Point3d, point2: Point3d, out: Vector3d): number {\r\n return point2.vectorTo(point1).normalizeWithLength(out).mag;\r\n}\r\n\r\nfunction normalizedCrossProduct(vec1: Vector3d, vec2: Vector3d, out: Vector3d): number {\r\n return vec1.crossProduct(vec2, out).normalizeWithLength(out).mag;\r\n}\r\n\r\n/**\r\n * A shortcut may require no user input (immediate) or it may install a tool to collect the needed input. AccuDrawShortcuts are how users control AccuDraw.\r\n * A tool implementor should not use this class to setup AccuDraw, instead use AccuDrawHintBuilder to provide hints.\r\n * @alpha\r\n */\r\nexport class AccuDrawShortcuts {\r\n /** Disable/Enable AccuDraw for the session */\r\n public static sessionToggle(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n\r\n if (accudraw.isEnabled)\r\n accudraw.disableForSession();\r\n else\r\n accudraw.enableForSession();\r\n }\r\n\r\n /** Suspend/Unsuspend AccuDraw for the active tool */\r\n public static suspendToggle(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (accudraw.isActive)\r\n accudraw.deactivate();\r\n else\r\n accudraw.activate();\r\n\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static rotateAxesByPoint(isSnapped: boolean, aboutCurrentZ: boolean): boolean {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return false;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return false;\r\n\r\n const point = accudraw.point;\r\n if (!vp.view.is3d())\r\n point.z = 0.0;\r\n\r\n if (aboutCurrentZ)\r\n accudraw.hardConstructionPlane(point, point, accudraw.planePt, accudraw.axes.z, vp, isSnapped);\r\n else\r\n accudraw.softConstructionPlane(point, point, accudraw.planePt, accudraw.axes.z, vp, isSnapped);\r\n\r\n // Snap point and compass origin coincide...\r\n const xVec = new Vector3d();\r\n if (normalizedDifference(point, accudraw.planePt, xVec) < Geometry.smallAngleRadians)\r\n return false;\r\n\r\n accudraw.axes.x.setFrom(xVec);\r\n\r\n if (RotationMode.Context !== accudraw.rotationMode)\r\n accudraw.setRotationMode(RotationMode.Context);\r\n\r\n accudraw.flags.contextRotMode = ContextMode.XAxis;\r\n accudraw.flags.lockedRotation = false;\r\n\r\n accudraw.updateRotation();\r\n\r\n // Always want index line to display for x-Axis...changing rotation clears this...so it flashes...\r\n accudraw.indexed |= LockedStates.X_BM;\r\n return true;\r\n }\r\n\r\n public static updateACSByPoints(acs: AuxCoordSystemState, vp: Viewport, points: Point3d[], isDynamics: boolean): boolean {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return false;\r\n\r\n let accept = false;\r\n const vec = [new Vector3d(), new Vector3d(), new Vector3d()];\r\n acs.setOrigin(points[0]);\r\n switch (points.length) {\r\n case 1:\r\n acs.setRotation(vp.rotation);\r\n if (!isDynamics) {\r\n accudraw.published.origin.setFrom(points[0]);\r\n accudraw.published.flags = AccuDrawFlags.SetOrigin;\r\n accudraw.flags.fixedOrg = true;\r\n }\r\n break;\r\n\r\n case 2:\r\n if (normalizedDifference(points[1], points[0], vec[0]) < 0.00001) {\r\n accept = true;\r\n break;\r\n }\r\n\r\n if (vp.view.is3d()) {\r\n if (normalizedCrossProduct(accudraw.axes.y, vec[0], vec[1]) < 0.00001) {\r\n vec[2].set(0.0, 0.0, 1.0);\r\n\r\n if (normalizedCrossProduct(vec[2], vec[0], vec[1]) < 0.00001) {\r\n vec[2].set(0.0, 1.0, 0.0);\r\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\r\n }\r\n }\r\n\r\n normalizedCrossProduct(vec[0], vec[1], vec[2]);\r\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\r\n\r\n if (!isDynamics) {\r\n accudraw.published.origin.setFrom(points[0]);\r\n accudraw.published.flags = AccuDrawFlags.SetOrigin | AccuDrawFlags.SetNormal;\r\n accudraw.published.vector.setFrom(vec[0]);\r\n }\r\n break;\r\n }\r\n\r\n vec[2].set(0.0, 0.0, 1.0);\r\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\r\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\r\n accept = true;\r\n break;\r\n\r\n case 3:\r\n if (normalizedDifference(points[1], points[0], vec[0]) < 0.00001 ||\r\n normalizedDifference(points[2], points[0], vec[1]) < 0.00001 ||\r\n normalizedCrossProduct(vec[0], vec[1], vec[2]) < 0.00001) {\r\n accept = true;\r\n break;\r\n }\r\n\r\n normalizedCrossProduct(vec[2], vec[0], vec[1]);\r\n acs.setRotation(Matrix3d.createRows(vec[0], vec[1], vec[2]));\r\n accept = true;\r\n break;\r\n }\r\n\r\n return accept;\r\n }\r\n\r\n public static processPendingHints() { IModelApp.accuDraw.processHints(); }\r\n\r\n public static requestInputFocus() {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n accudraw.grabInputFocus();\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n // Helper method for GUI implementation...\r\n public static async itemFieldNavigate(index: ItemField, str: string, forward: boolean): Promise<void> {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (accudraw.getFieldLock(index))\r\n accudraw.saveCoordinate(index, accudraw.getValueByIndex(index));\r\n\r\n if (!accudraw.isActive && KeyinStatus.Partial === accudraw.getKeyinStatus(index)) {\r\n await accudraw.processFieldInput(index, str, true);\r\n } else {\r\n accudraw.setKeyinStatus(index, KeyinStatus.Dynamic);\r\n accudraw.onFieldValueChange(index);\r\n }\r\n\r\n const vp = accudraw.currentView;\r\n const is3d = vp ? vp.view.is3d() : false;\r\n const isPolar = (CompassMode.Polar === accudraw.compassMode);\r\n switch (index) {\r\n case ItemField.DIST_Item:\r\n index = ((is3d && !forward) ? ItemField.Z_Item : ItemField.ANGLE_Item);\r\n break;\r\n\r\n case ItemField.ANGLE_Item:\r\n index = ((is3d && forward) ? ItemField.Z_Item : ItemField.DIST_Item);\r\n break;\r\n\r\n case ItemField.X_Item:\r\n index = ((is3d && !forward) ? ItemField.Z_Item : ItemField.Y_Item);\r\n break;\r\n\r\n case ItemField.Y_Item:\r\n index = ((is3d && forward) ? ItemField.Z_Item : ItemField.X_Item);\r\n break;\r\n\r\n case ItemField.Z_Item:\r\n index = (forward ? (isPolar ? ItemField.DIST_Item : ItemField.X_Item) : (isPolar ? ItemField.ANGLE_Item : ItemField.Y_Item));\r\n break;\r\n }\r\n\r\n accudraw.setKeyinStatus(index, KeyinStatus.Partial);\r\n accudraw.setFocusItem(index);\r\n accudraw.dontMoveFocus = true;\r\n }\r\n\r\n public static itemFieldNewInput(index: ItemField): void { IModelApp.accuDraw.setKeyinStatus(index, KeyinStatus.Partial); }\r\n\r\n public static async itemFieldAcceptInput(index: ItemField, str: string): Promise<void> {\r\n const accudraw = IModelApp.accuDraw;\r\n await accudraw.processFieldInput(index, str, true);\r\n accudraw.setKeyinStatus(index, KeyinStatus.Dynamic);\r\n\r\n if (accudraw.getFieldLock(index))\r\n accudraw.saveCoordinate(index, accudraw.getValueByIndex(index));\r\n\r\n const vp = accudraw.currentView;\r\n if (accudraw.isActive) {\r\n if (!vp)\r\n return;\r\n\r\n if (CompassMode.Polar === accudraw.compassMode)\r\n accudraw.fixPointPolar(vp);\r\n else\r\n accudraw.fixPointRectangular(vp);\r\n\r\n accudraw.flags.dialogNeedsUpdate = true;\r\n return;\r\n }\r\n\r\n const is3d = vp ? vp.view.is3d() : false;\r\n const isPolar = (CompassMode.Polar === accudraw.compassMode);\r\n switch (index) {\r\n case ItemField.DIST_Item:\r\n index = ItemField.ANGLE_Item;\r\n break;\r\n\r\n case ItemField.ANGLE_Item:\r\n index = (is3d ? ItemField.Z_Item : ItemField.DIST_Item);\r\n break;\r\n\r\n case ItemField.X_Item:\r\n index = ItemField.Y_Item;\r\n break;\r\n\r\n case ItemField.Y_Item:\r\n index = (is3d ? ItemField.Z_Item : ItemField.X_Item);\r\n break;\r\n\r\n case ItemField.Z_Item:\r\n index = (isPolar ? ItemField.DIST_Item : ItemField.X_Item);\r\n break;\r\n }\r\n accudraw.setFocusItem(index);\r\n }\r\n\r\n public static itemFieldLockToggle(index: ItemField): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (accudraw.getFieldLock(index)) {\r\n switch (index) {\r\n case ItemField.DIST_Item:\r\n accudraw.distanceLock(true, false);\r\n break;\r\n\r\n case ItemField.ANGLE_Item:\r\n accudraw.angleLock();\r\n break;\r\n\r\n case ItemField.X_Item:\r\n accudraw.clearTentative();\r\n accudraw.locked |= LockedStates.X_BM;\r\n break;\r\n\r\n case ItemField.Y_Item:\r\n accudraw.clearTentative();\r\n accudraw.locked |= LockedStates.Y_BM;\r\n break;\r\n\r\n case ItemField.Z_Item:\r\n accudraw.clearTentative();\r\n break;\r\n }\r\n\r\n return;\r\n }\r\n\r\n switch (index) {\r\n case ItemField.DIST_Item:\r\n accudraw.locked &= ~LockedStates.DIST_BM;\r\n break;\r\n\r\n case ItemField.ANGLE_Item:\r\n accudraw.locked &= ~LockedStates.ANGLE_BM;\r\n break;\r\n\r\n case ItemField.X_Item:\r\n accudraw.locked &= ~LockedStates.X_BM;\r\n break;\r\n\r\n case ItemField.Y_Item:\r\n accudraw.locked &= ~LockedStates.Y_BM;\r\n break;\r\n\r\n case ItemField.Z_Item:\r\n break;\r\n }\r\n\r\n accudraw.dontMoveFocus = false;\r\n accudraw.clearTentative();\r\n }\r\n\r\n public static itemRotationModeChange(rotation: RotationMode): void {\r\n const accudraw = IModelApp.accuDraw;\r\n const vp = accudraw.currentView;\r\n const is3d = vp ? vp.view.is3d() : true;\r\n\r\n if (!is3d && (RotationMode.Front === rotation || RotationMode.Side === rotation))\r\n accudraw.setRotationMode(RotationMode.Top);\r\n\r\n accudraw.flags.baseRotation = rotation;\r\n accudraw.updateRotation(true);\r\n }\r\n\r\n // Shortcut implementations for GUI entry points...\r\n public static setOrigin(explicitOrigin?: Point3d): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (explicitOrigin) {\r\n accudraw.published.origin.setFrom(explicitOrigin);\r\n accudraw.flags.haveValidOrigin = true;\r\n } else if (accudraw.isInactive || accudraw.isDeactivated) {\r\n // If AccuSnap is active use adjusted snap point, otherwise use last data point...\r\n const snap = TentativeOrAccuSnap.getCurrentSnap(false);\r\n if (undefined !== snap) {\r\n accudraw.published.origin.setFrom(snap.isPointAdjusted ? snap.adjustedPoint : snap.getPoint());\r\n accudraw.flags.haveValidOrigin = true;\r\n } else {\r\n const ev = new BeButtonEvent();\r\n IModelApp.toolAdmin.fillEventFromLastDataButton(ev);\r\n\r\n if (ev.viewport) {\r\n accudraw.published.origin.setFrom(ev.point);\r\n accudraw.flags.haveValidOrigin = true;\r\n } else {\r\n // NOTE: If current point isn't valid setDefaultOrigin will be called...\r\n accudraw.published.origin.setFrom(accudraw.point);\r\n }\r\n }\r\n } else {\r\n accudraw.published.origin.setFrom(accudraw.point);\r\n accudraw.flags.haveValidOrigin = true;\r\n accudraw.setLastPoint(accudraw.published.origin);\r\n }\r\n\r\n accudraw.clearTentative();\r\n const vp = accudraw.currentView;\r\n\r\n // NOTE: _AdjustPoint should have been called to have setup currentView...\r\n if (vp && !vp.view.is3d())\r\n accudraw.published.origin.z = 0.0;\r\n\r\n accudraw.origin.setFrom(accudraw.published.origin);\r\n accudraw.point.setFrom(accudraw.published.origin);\r\n accudraw.planePt.setFrom(accudraw.published.origin);\r\n accudraw.published.flags |= AccuDrawFlags.SetOrigin;\r\n accudraw.activate();\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static changeCompassMode(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n let axisLockStatus = accudraw.locked & LockedStates.XY_BM;\r\n\r\n if (axisLockStatus) {\r\n if (CompassMode.Rectangular === accudraw.compassMode) {\r\n if (axisLockStatus & LockedStates.X_BM && accudraw.delta.x !== 0.0)\r\n axisLockStatus &= ~LockedStates.X_BM;\r\n\r\n if (axisLockStatus & LockedStates.Y_BM && accudraw.delta.y !== 0.0)\r\n axisLockStatus &= ~LockedStates.Y_BM;\r\n }\r\n }\r\n\r\n accudraw.changeCompassMode(true);\r\n if (axisLockStatus) {\r\n if (CompassMode.Rectangular === accudraw.compassMode) {\r\n accudraw.delta.x = accudraw.delta.y = 0.0;\r\n\r\n if (axisLockStatus & LockedStates.X_BM)\r\n accudraw.setFieldLock(ItemField.X_Item, true);\r\n else if (axisLockStatus & LockedStates.Y_BM)\r\n accudraw.setFieldLock(ItemField.Y_Item, true);\r\n } else {\r\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\r\n }\r\n accudraw.locked = axisLockStatus;\r\n }\r\n accudraw.flags.baseMode = accudraw.compassMode;\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockSmart(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const accuSnap = IModelApp.accuSnap;\r\n\r\n // Don't want AccuSnap to influence axis or Z...\r\n if (accuSnap.isHot) {\r\n accuSnap.clear();\r\n\r\n const vp = accudraw.currentView;\r\n if (vp) {\r\n if (CompassMode.Polar === accudraw.compassMode)\r\n accudraw.fixPointPolar(vp);\r\n else\r\n accudraw.fixPointRectangular(vp);\r\n }\r\n }\r\n\r\n if (CompassMode.Polar === accudraw.compassMode) {\r\n const isSnapped = accudraw.clearTentative();\r\n if (accudraw.locked & LockedStates.ANGLE_BM) { // angle locked (unlock it)\r\n accudraw.setFieldLock(ItemField.ANGLE_Item, false);\r\n accudraw.locked &= ~LockedStates.ANGLE_BM;\r\n } else if (accudraw.getFieldLock(ItemField.DIST_Item)) { // distance locked (unlock it)\r\n accudraw.setFieldLock(ItemField.DIST_Item, false);\r\n accudraw.locked &= ~LockedStates.DIST_BM;\r\n } else if (isSnapped) {\r\n accudraw.doLockAngle(isSnapped);\r\n } else if (accudraw.indexed & LockedStates.ANGLE_BM) { // angle indexed (lock it)\r\n accudraw.angleLock();\r\n } else {\r\n if (Math.abs(accudraw.vector.dotProduct(accudraw.axes.x)) > Math.abs(accudraw.vector.dotProduct(accudraw.axes.y)))\r\n accudraw.indexed |= LockedStates.Y_BM;\r\n else\r\n accudraw.indexed |= LockedStates.X_BM;\r\n accudraw.angleLock();\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n return;\r\n }\r\n\r\n if (accudraw.locked) { // if locked, unlock\r\n accudraw.clearTentative();\r\n accudraw.locked &= ~LockedStates.XY_BM;\r\n accudraw.setFieldLock(ItemField.X_Item, false);\r\n accudraw.setFieldLock(ItemField.Y_Item, false);\r\n if (accudraw.getFieldLock(ItemField.Z_Item) && accudraw.delta.z === 0.0 && !accudraw.stickyZLock)\r\n accudraw.setFieldLock(ItemField.Z_Item, false);\r\n } else { // lock to nearest axis\r\n if (accudraw.clearTentative()) {\r\n if (Math.abs(accudraw.delta.x) >= Geometry.smallAngleRadians && Math.abs(accudraw.delta.y) >= Geometry.smallAngleRadians) {\r\n accudraw.doLockAngle(false);\r\n return;\r\n }\r\n }\r\n\r\n const vp = accudraw.currentView;\r\n if (Math.abs(accudraw.delta.x) > Math.abs(accudraw.delta.y)) {\r\n accudraw.delta.y = 0.0;\r\n accudraw.onFieldValueChange(ItemField.Y_Item);\r\n accudraw.locked |= LockedStates.Y_BM;\r\n accudraw.locked &= ~LockedStates.X_BM;\r\n accudraw.setFieldLock(ItemField.X_Item, false);\r\n accudraw.setFieldLock(ItemField.Y_Item, true);\r\n accudraw.setFieldLock(ItemField.Z_Item, vp ? vp.view.is3d() : false);\r\n } else {\r\n accudraw.delta.x = 0.0;\r\n accudraw.onFieldValueChange(ItemField.X_Item);\r\n accudraw.locked |= LockedStates.X_BM;\r\n accudraw.locked &= ~LockedStates.Y_BM;\r\n accudraw.setFieldLock(ItemField.Y_Item, false);\r\n accudraw.setFieldLock(ItemField.X_Item, true);\r\n accudraw.setFieldLock(ItemField.Z_Item, vp ? vp.view.is3d() : false);\r\n }\r\n\r\n if (!accudraw.flags.lockedRotation) {\r\n accudraw.flags.lockedRotation = true;\r\n accudraw.flags.contextRotMode = ContextMode.Locked;\r\n accudraw.setRotationMode(RotationMode.Context);\r\n }\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n /** Disable indexing when not currently indexed; if indexed, enable respective lock. */\r\n public static lockIndex(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (accudraw.flags.indexLocked) {\r\n if (accudraw.locked)\r\n this.lockSmart();\r\n\r\n accudraw.flags.indexLocked = false;\r\n } else {\r\n if (CompassMode.Polar === accudraw.compassMode) {\r\n if (accudraw.indexed & LockedStates.XY_BM) {\r\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\r\n accudraw.angleLock();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n this.lockDistance();\r\n } else {\r\n if (accudraw.indexed & LockedStates.X_BM) {\r\n this.lockX();\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n this.lockY();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.Y_BM) {\r\n this.lockY();\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n this.lockX();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM && !(accudraw.indexed & LockedStates.XY_BM)) {\r\n if (accudraw.locked & LockedStates.X_BM)\r\n this.lockY();\r\n else\r\n this.lockX();\r\n }\r\n }\r\n\r\n accudraw.flags.indexLocked = true;\r\n }\r\n }\r\n\r\n public static lockX(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n accudraw.clearTentative();\r\n\r\n if (CompassMode.Rectangular !== accudraw.compassMode) {\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return;\r\n\r\n accudraw.fixPointRectangular(vp);\r\n accudraw.changeCompassMode(true);\r\n }\r\n\r\n if (accudraw.getFieldLock(ItemField.X_Item)) {\r\n accudraw.setFieldLock(ItemField.X_Item, false);\r\n accudraw.locked = accudraw.locked & ~LockedStates.X_BM;\r\n } else {\r\n accudraw.saveCoordinate(ItemField.X_Item, accudraw.delta.x);\r\n accudraw.setFieldLock(ItemField.X_Item, true);\r\n accudraw.locked = accudraw.locked | LockedStates.X_BM;\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockY(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n accudraw.clearTentative();\r\n\r\n if (CompassMode.Rectangular !== accudraw.compassMode) {\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return;\r\n\r\n accudraw.fixPointRectangular(vp);\r\n accudraw.changeCompassMode(true);\r\n }\r\n\r\n if (accudraw.getFieldLock(ItemField.Y_Item)) {\r\n accudraw.setFieldLock(ItemField.Y_Item, false);\r\n accudraw.locked = accudraw.locked & ~LockedStates.Y_BM;\r\n } else {\r\n accudraw.saveCoordinate(ItemField.Y_Item, accudraw.delta.y);\r\n accudraw.setFieldLock(ItemField.Y_Item, true);\r\n accudraw.locked = accudraw.locked | LockedStates.Y_BM;\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockZ(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp || !vp.view.is3d())\r\n return;\r\n\r\n const isSnapped = accudraw.clearTentative();\r\n\r\n if (accudraw.getFieldLock(ItemField.Z_Item)) {\r\n accudraw.setFieldLock(ItemField.Z_Item, false);\r\n } else {\r\n // Move focus to Z field...\r\n if (!isSnapped && accudraw.autoFocusFields) {\r\n accudraw.setFocusItem(ItemField.Z_Item);\r\n accudraw.dontMoveFocus = true;\r\n }\r\n accudraw.setFieldLock(ItemField.Z_Item, true);\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockDistance(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const isSnapped = accudraw.clearTentative();\r\n\r\n if (CompassMode.Polar !== accudraw.compassMode) {\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return;\r\n\r\n accudraw.locked = 0;\r\n accudraw.fixPointPolar(vp);\r\n accudraw.changeCompassMode(true);\r\n }\r\n\r\n if (accudraw.getFieldLock(ItemField.DIST_Item)) {\r\n accudraw.setFieldLock(ItemField.DIST_Item, false);\r\n accudraw.locked &= ~LockedStates.DIST_BM;\r\n\r\n accudraw.setKeyinStatus(ItemField.DIST_Item, KeyinStatus.Dynamic); // Need to clear partial status if locked by entering distance since focus stays in distance field...\r\n } else {\r\n // Move focus to distance field...\r\n if (!isSnapped && accudraw.autoFocusFields)\r\n accudraw.setFocusItem(ItemField.DIST_Item);\r\n accudraw.distanceLock(true, true);\r\n }\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static lockAngle(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n accudraw.doLockAngle(accudraw.clearTentative());\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public lockIndex(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (accudraw.flags.indexLocked) {\r\n if (accudraw.locked)\r\n AccuDrawShortcuts.lockSmart();\r\n\r\n accudraw.flags.indexLocked = false;\r\n } else {\r\n if (CompassMode.Polar === accudraw.compassMode) {\r\n if (accudraw.indexed & LockedStates.XY_BM) {\r\n accudraw.setFieldLock(ItemField.ANGLE_Item, true);\r\n accudraw.angleLock();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n AccuDrawShortcuts.lockDistance();\r\n } else {\r\n if (accudraw.indexed & LockedStates.X_BM) {\r\n AccuDrawShortcuts.lockX();\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n AccuDrawShortcuts.lockY();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.Y_BM) {\r\n AccuDrawShortcuts.lockY();\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM)\r\n AccuDrawShortcuts.lockX();\r\n }\r\n\r\n if (accudraw.indexed & LockedStates.DIST_BM && !(accudraw.indexed & LockedStates.XY_BM)) {\r\n if (accudraw.locked & LockedStates.X_BM)\r\n AccuDrawShortcuts.lockY();\r\n else\r\n AccuDrawShortcuts.lockX();\r\n }\r\n }\r\n\r\n accudraw.flags.indexLocked = true;\r\n }\r\n\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static setStandardRotation(rotation: RotationMode): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n if (RotationMode.Context === rotation) {\r\n const axes = accudraw.baseAxes.clone();\r\n accudraw.accountForAuxRotationPlane(axes, accudraw.flags.auxRotationPlane);\r\n accudraw.setContextRotation(axes.toMatrix3d(), false, true);\r\n accudraw.refreshDecorationsAndDynamics();\r\n return;\r\n } else {\r\n accudraw.flags.baseRotation = rotation;\r\n accudraw.setRotationMode(rotation);\r\n }\r\n accudraw.updateRotation(true);\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static alignView(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return;\r\n\r\n const newMatrix = accudraw.getRotation();\r\n if (newMatrix.isExactEqual(vp.rotation))\r\n return;\r\n\r\n const targetMatrix = newMatrix.multiplyMatrixMatrix(vp.rotation);\r\n const rotateTransform = Transform.createFixedPointAndMatrix(vp.view.getTargetPoint(), targetMatrix);\r\n const newFrustum = vp.getFrustum();\r\n newFrustum.multiply(rotateTransform);\r\n\r\n vp.view.setupFromFrustum(newFrustum);\r\n vp.synchWithView();\r\n vp.animateFrustumChange();\r\n\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static rotateToBase(): void { this.setStandardRotation(IModelApp.accuDraw.flags.baseRotation); }\r\n\r\n public static rotateToACS(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n // NOTE: Match current ACS orientation..reset auxRotationPlane to top!\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n this.setStandardRotation(RotationMode.ACS);\r\n }\r\n\r\n public static rotateCycle(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp || !vp.view.is3d())\r\n return;\r\n\r\n let rotation: RotationMode;\r\n switch (accudraw.rotationMode) {\r\n case RotationMode.View:\r\n case RotationMode.Side:\r\n rotation = RotationMode.Top;\r\n break;\r\n\r\n case RotationMode.Top:\r\n rotation = RotationMode.Front;\r\n break;\r\n\r\n case RotationMode.Front:\r\n rotation = RotationMode.Side;\r\n break;\r\n\r\n case RotationMode.Context:\r\n rotation = RotationMode.Context;\r\n\r\n if (rotation !== accudraw.flags.baseRotation) {\r\n accudraw.baseAxes.setFrom(accudraw.axes);\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n accudraw.flags.baseRotation = rotation;\r\n } else {\r\n const axes = accudraw.baseAxes.clone();\r\n accudraw.accountForAuxRotationPlane(axes, accudraw.flags.auxRotationPlane);\r\n if (!accudraw.axes.equals(axes))\r\n accudraw.changeBaseRotationMode(rotation);\r\n }\r\n\r\n switch (accudraw.flags.auxRotationPlane) {\r\n case RotationMode.Front:\r\n accudraw.flags.auxRotationPlane = RotationMode.Side;\r\n break;\r\n\r\n case RotationMode.Side:\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n break;\r\n\r\n case RotationMode.Top:\r\n accudraw.flags.auxRotationPlane = RotationMode.Front;\r\n break;\r\n }\r\n break;\r\n\r\n case RotationMode.ACS:\r\n rotation = RotationMode.ACS;\r\n switch (accudraw.flags.auxRotationPlane) {\r\n case RotationMode.Front:\r\n accudraw.flags.auxRotationPlane = RotationMode.Side;\r\n break;\r\n case RotationMode.Side:\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n break;\r\n case RotationMode.Top:\r\n accudraw.flags.auxRotationPlane = RotationMode.Front;\r\n break;\r\n }\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n this.setStandardRotation(rotation);\r\n }\r\n\r\n public static rotate90(axis: number): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return;\r\n\r\n const newRotation = new ThreeAxes();\r\n\r\n accudraw.locked = accudraw.indexed = 0;\r\n accudraw.unlockAllFields();\r\n\r\n switch (axis) {\r\n case 0:\r\n newRotation.x.setFrom(accudraw.axes.x);\r\n newRotation.z.setFrom(accudraw.axes.y);\r\n newRotation.z.crossProduct(newRotation.x, newRotation.y);\r\n break;\r\n\r\n case 1:\r\n newRotation.x.setFrom(accudraw.axes.z);\r\n newRotation.y.setFrom(accudraw.axes.y);\r\n newRotation.x.crossProduct(newRotation.y, newRotation.z);\r\n break;\r\n\r\n case 2:\r\n newRotation.x.setFrom(accudraw.axes.y);\r\n newRotation.z.setFrom(accudraw.axes.z);\r\n newRotation.z.crossProduct(newRotation.x, newRotation.y);\r\n break;\r\n }\r\n\r\n accudraw.setContextRotation(newRotation.toMatrix3d(), true, true);\r\n accudraw.refreshDecorationsAndDynamics();\r\n }\r\n\r\n public static async rotateAxes(aboutCurrentZ: boolean) {\r\n return IModelApp.tools.run(\"AccuDraw.RotateAxes\", aboutCurrentZ);\r\n }\r\n\r\n public static async rotateToElement() {\r\n return IModelApp.tools.run(\"AccuDraw.RotateElement\");\r\n }\r\n\r\n public static async defineACSByElement() {\r\n return IModelApp.tools.run(\"AccuDraw.DefineACSByElement\");\r\n }\r\n\r\n public static async defineACSByPoints() {\r\n return IModelApp.tools.run(\"AccuDraw.DefineACSByPoints\");\r\n }\r\n\r\n public static getACS(acsName: string | undefined, useOrigin: boolean, useRotation: boolean): BentleyStatus {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return BentleyStatus.ERROR;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return BentleyStatus.ERROR;\r\n\r\n let currRotation = 0, currBaseRotation = 0;\r\n const axes = new ThreeAxes();\r\n\r\n if (!useRotation) {\r\n // Save current rotation, event listener on ACS change will orient AccuDraw to ACS...\r\n currRotation = accudraw.rotationMode;\r\n currBaseRotation = accudraw.flags.baseRotation;\r\n axes.setFrom(accudraw.axes);\r\n }\r\n\r\n if (acsName && \"\" !== acsName) {\r\n // // See if this ACS already exists...\r\n // DgnCode acsCode = AuxCoordSystem:: CreateCode(vp -> GetViewControllerR().GetViewDefinition(), acsName);\r\n // DgnElementId acsId = vp -> GetViewController().GetDgnDb().Elements().QueryElementIdByCode(acsCode);\r\n\r\n // if (!acsId.IsValid())\r\n // return ERROR;\r\n\r\n // AuxCoordSystemCPtr auxElm = vp -> GetViewController().GetDgnDb().Elements().Get<AuxCoordSystem>(acsId);\r\n\r\n // if (!auxElm.IsValid())\r\n // return ERROR;\r\n\r\n // AuxCoordSystemPtr acsPtr = auxElm -> MakeCopy<AuxCoordSystem>();\r\n\r\n // if (!acsPtr.IsValid())\r\n // return ERROR;\r\n\r\n // AuxCoordSystemCR oldACS = vp -> GetViewController().GetAuxCoordinateSystem();\r\n\r\n // if (!useOrigin)\r\n // acsPtr -> SetOrigin(oldACS.GetOrigin());\r\n\r\n // if (!useRotation)\r\n // acsPtr -> SetRotation(oldACS.GetRotation());\r\n\r\n // AccuDraw:: UpdateAuxCoordinateSystem(* acsPtr, * vp);\r\n }\r\n\r\n const currentACS = vp.view.auxiliaryCoordinateSystem;\r\n\r\n if (useOrigin) {\r\n accudraw.origin.setFrom(currentACS.getOrigin());\r\n accudraw.point.setFrom(accudraw.origin);\r\n accudraw.planePt.setFrom(accudraw.origin);\r\n }\r\n\r\n if (useRotation) {\r\n accudraw.flags.auxRotationPlane = RotationMode.Top;\r\n this.setStandardRotation(RotationMode.ACS);\r\n } else {\r\n this.itemFieldUnlockAll();\r\n\r\n accudraw.setRotationMode(currRotation);\r\n accudraw.flags.baseRotation = currBaseRotation;\r\n accudraw.axes.setFrom(axes);\r\n\r\n if (RotationMode.ACS === accudraw.flags.baseRotation) {\r\n const acs = currentACS.clone();\r\n\r\n const rMatrix = accudraw.getRotation();\r\n acs.setRotation(rMatrix);\r\n\r\n AccuDraw.updateAuxCoordinateSystem(acs, vp);\r\n }\r\n\r\n accudraw.published.flags &= ~AccuDrawFlags.OrientACS;\r\n }\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n public static writeACS(_acsName: string): BentleyStatus {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isEnabled)\r\n return BentleyStatus.ERROR;\r\n\r\n const vp = accudraw.currentView;\r\n if (!vp)\r\n return BentleyStatus.ERROR;\r\n\r\n // const origin = accudraw.origin;\r\n // const rMatrix = accudraw.getRotation();\r\n // AuxCoordSystemPtr acsPtr = AuxCoordSystem:: CreateFrom(vp -> GetViewController().GetAuxCoordinateSystem());\r\n // acsPtr -> SetOrigin(origin);\r\n // acsPtr -> SetRotation(rMatrix);\r\n // acsPtr -> SetType(CompassMode.Polar == accudraw.getCompassMode() ? ACSType :: Cylindrical : ACSType:: Rectangular);\r\n // acsPtr -> SetCode(AuxCoordSystem:: CreateCode(vp -> GetViewControllerR().GetViewDefinition(), nullptr != acsName ? acsName : \"\"));\r\n // acsPtr -> SetDescription(\"\");\r\n\r\n // if (acsName && '\\0' != acsName[0]) {\r\n // DgnDbStatus status;\r\n // acsPtr -> Insert(& status);\r\n\r\n // if (DgnDbStatus:: Success != status)\r\n // return BentleyStatus.ERROR;\r\n // }\r\n\r\n // AccuDraw:: UpdateAuxCoordinateSystem(* acsPtr, * vp);\r\n\r\n // accudraw.flags.baseRotation = RotationMode.ACS;\r\n // accudraw.SetRotationMode(RotationMode.ACS);\r\n\r\n return BentleyStatus.SUCCESS;\r\n }\r\n\r\n public static itemFieldUnlockAll(): void {\r\n const accudraw = IModelApp.accuDraw;\r\n if (accudraw.isEnabled)\r\n accudraw.unlockAllFields();\r\n }\r\n\r\n /** @internal Temporary keyboard shortcuts. */\r\n public static async processShortcutKey(keyEvent: KeyboardEvent) {\r\n switch (keyEvent.key.toLowerCase()) {\r\n case \"enter\":\r\n AccuDrawShortcuts.lockSmart();\r\n return true;\r\n case \"x\":\r\n AccuDrawShortcuts.lockX();\r\n return true;\r\n case \"y\":\r\n AccuDrawShortcuts.lockY();\r\n return true;\r\n case \"z\":\r\n AccuDrawShortcuts.lockZ();\r\n return true;\r\n case \"a\":\r\n AccuDrawShortcuts.lockAngle();\r\n return true;\r\n case \"d\":\r\n AccuDrawShortcuts.lockDistance();\r\n return true;\r\n case \"h\":\r\n AccuDrawShortcuts.suspendToggle();\r\n return true;\r\n case \"l\":\r\n AccuDrawShortcuts.lockIndex();\r\n return true;\r\n case \"m\":\r\n AccuDrawShortcuts.changeCompassMode();\r\n return true;\r\n case \"t\":\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Top);\r\n return true;\r\n case \"f\":\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Front);\r\n return true;\r\n case \"s\":\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Side);\r\n return true;\r\n case \"v\":\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.View);\r\n return true;\r\n case \"o\":\r\n AccuDrawShortcuts.setOrigin();\r\n return true;\r\n case \"c\":\r\n AccuDrawShortcuts.rotateCycle();\r\n return true;\r\n case \"q\":\r\n return AccuDrawShortcuts.rotateAxes(true);\r\n case \"e\":\r\n return AccuDrawShortcuts.rotateToElement();\r\n case \"r\":\r\n return AccuDrawShortcuts.defineACSByPoints();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSessionToggleTool extends Tool {\r\n public static override toolId = \"AccuDraw.SessionToggle\";\r\n public override async run() {\r\n AccuDrawShortcuts.sessionToggle();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSuspendToggleTool extends Tool {\r\n public static override toolId = \"AccuDraw.SuspendToggle\";\r\n public override async run() {\r\n AccuDrawShortcuts.suspendToggle();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetOriginTool extends Tool {\r\n public static override toolId = \"AccuDraw.SetOrigin\";\r\n public override async run() {\r\n AccuDrawShortcuts.setOrigin();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockSmartTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockSmart\";\r\n public override async run() {\r\n AccuDrawShortcuts.lockSmart();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockIndexTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockIndex\";\r\n public override async run() {\r\n AccuDrawShortcuts.lockIndex();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockXTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockX\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockX();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockYTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockY\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockY();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockZTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockZ\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockZ();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockDistanceTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockDistance\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockDistance();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawSetLockAngleTool extends Tool {\r\n public static override toolId = \"AccuDraw.LockAngle\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.lockAngle();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawChangeModeTool extends Tool {\r\n public static override toolId = \"AccuDraw.ChangeMode\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.changeCompassMode();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateCycleTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateCycle\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.rotateCycle();\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateTopTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateTop\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Top);\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateFrontTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateFront\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Front);\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateSideTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateSide\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.Side);\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateViewTool extends Tool {\r\n public static override toolId = \"AccuDraw.RotateView\";\r\n public override async run(): Promise<boolean> {\r\n AccuDrawShortcuts.setStandardRotation(RotationMode.View);\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nabstract class AccuDrawShortcutsTool extends InputCollector {\r\n private _cancel: boolean;\r\n public constructor() {\r\n super();\r\n this._cancel = true;\r\n }\r\n\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.initLocateElements(false, true, undefined, CoordinateLockOverrides.None);\r\n this.doManipulationStart();\r\n } // NOTE: InputCollector inherits suspended primitive's state, set everything...\r\n\r\n public override async onCleanup() { this.doManipulationStop(this._cancel); }\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (this.doManipulation(ev, false)) {\r\n this._cancel = false;\r\n await this.exitTool();\r\n }\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> { this.doManipulation(ev, true); }\r\n public override async exitTool() {\r\n await super.exitTool();\r\n AccuDrawShortcuts.requestInputFocus();\r\n } // re-grab focus when auto-focus tool setting set...\r\n\r\n public activateAccuDrawOnStart() { return true; }\r\n public doManipulationStart() {\r\n if (this.activateAccuDrawOnStart())\r\n IModelApp.accuDraw.activate();\r\n\r\n this.doManipulation(undefined, true);\r\n }\r\n\r\n public doManipulationStop(cancel: boolean) {\r\n if (!cancel)\r\n IModelApp.accuDraw.savedStateInputCollector.ignoreFlags = this.onManipulationComplete();\r\n }\r\n\r\n public onManipulationComplete(): AccuDrawFlags { return 0; }\r\n public abstract doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {\r\n public static override toolId = \"AccuDraw.RotateAxes\";\r\n public static override get maxArgs(): number { return 1; }\r\n protected _immediateMode: boolean = false;\r\n public constructor(public aboutCurrentZ: boolean = true) { super(); }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n const accudraw = IModelApp.accuDraw;\r\n if (!accudraw.isActive)\r\n return false; // Require compass to already be active for this shortcut...\r\n\r\n if (this.aboutCurrentZ)\r\n accudraw.changeBaseRotationMode(RotationMode.Context); // Establish current orientation as base; base Z is used when defining compass rotation by x axis...\r\n\r\n if (accudraw.clearTentative() || IModelApp.accuSnap.isHot ||\r\n (CompassMode.Polar === accudraw.compassMode && accudraw.getFieldLock(ItemField.ANGLE_Item)) ||\r\n (CompassMode.Polar !== accudraw.compassMode && accudraw.getFieldLock(ItemField.X_Item) && accudraw.getFieldLock(ItemField.Y_Item))) {\r\n if (AccuDrawShortcuts.rotateAxesByPoint(true, this.aboutCurrentZ)) {\r\n AccuDrawShortcuts.itemFieldUnlockAll();\r\n accudraw.refreshDecorationsAndDynamics();\r\n this._immediateMode = true;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n public override async onPostInstall() {\r\n if (this._immediateMode) {\r\n await this.exitTool();\r\n return;\r\n }\r\n return super.onPostInstall();\r\n }\r\n\r\n public override onManipulationComplete(): AccuDrawFlags { return AccuDrawFlags.SetRMatrix; }\r\n public override doManipulationStart(): void {\r\n super.doManipulationStart();\r\n CoreTools.outputPromptByKey(\"AccuDraw.RotateAxes.Prompts.FirstPoint\");\r\n }\r\n\r\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\r\n const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;\r\n if (!vp)\r\n return true;\r\n AccuDrawShortcuts.rotateAxesByPoint(TentativeOrAccuSnap.isHot, this.aboutCurrentZ);\r\n vp.invalidateDecorations();\r\n if (!isMotion)\r\n AccuDrawShortcuts.itemFieldUnlockAll();\r\n return true;\r\n }\r\n\r\n public override async parseAndRun(...args: any[]): Promise<boolean> {\r\n for (const arg of args) {\r\n if (arg.toLowerCase() === \"unlockedz\")\r\n this.aboutCurrentZ = false;\r\n }\r\n return this.run(args);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AccuDrawRotateElementTool extends AccuDrawShortcutsTool {\r\n public static override toolId = \"AccuDraw.RotateElement\";\r\n public moveOrigin: boolean = !IModelApp.accuDraw.isActive; // By default use current origin if AccuDraw is already enabled...\r\n public override async onInstall(): Promise<boolean> { return IModelApp.accuDraw.isEnabled; } // Require compass to be enabled for this session...\r\n\r\n public override onManipulationComplete(): AccuDrawFlags {\r\n let ignoreFlags = AccuDrawFlags.SetRMatrix | AccuDrawFlags.Disable; // If AccuDraw wasn't active when the shortcut started, let it remain active for suspended tool when shortcut completes...\r\n if (this.moveOrigin)\r\n ignoreFlags |= AccuDrawFlags.SetOrigin;\r\n return ignoreFlags;\r\n }\r\n\r\n public override doManipulationStart(): void {\r\n super.doManipulationStart();\r\n CoreTools.outputPromptByKey(\"AccuDraw.RotateElement.Prompts.FirstPoint\");\r\n }\r\n\r\n public updateOrientation(snap: SnapDetail, vp: Viewport): boolean {\r\n const accudraw = IModelApp.accuDraw;\r\n const rMatrix = AccuDraw.getSnapRotation(snap, vp);\r\n if (undefined === rMatrix)\r\n return false;\r\n const origin = this.moveOrigin ? snap.snapPoint : accudraw.origin;\r\n accudraw.setContext(AccuDrawFlags.AlwaysSetOrigin | AccuDrawFlags.SetRMatrix, origin, rMatrix);\r\n return true;\r\n }\r\n\r\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\r\n const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;\r\n if (!vp)\r\n return true;\r\n\r\n const snapDetail = TentativeOrAccuSnap.getCurrentSnap(false);\r\n if (undefined === snapDetail || !this.updateOrientation(snapDetail, vp))\r\n return true;\r\n\r\n if (undefined === ev)\r\n AccuDrawShortcuts.processPendingHints();\r\n if (!isMotion)\r\n IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Hold temporary rotation for tool duration when not updating ACS...\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class DefineACSByElementTool extends AccuDrawShortcutsTool {\r\n public static override toolId = \"AccuDraw.DefineACSByElement\";\r\n private _origin = Point3d.create();\r\n private _rMatrix = Matrix3d.createIdentity();\r\n private _acs?: AuxCoordSystemState;\r\n\r\n public override activateAccuDrawOnStart(): boolean { return false; }\r\n public override onManipulationComplete(): AccuDrawFlags { return AccuDrawFlags.SetRMatrix; }\r\n\r\n public override doManipulationStart(): void {\r\n super.doManipulationStart();\r\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByElement.Prompts.FirstPoint\");\r\n }\r\n\r\n public updateOrientation(snap: SnapDetail, vp: Viewport): boolean {\r\n const rMatrix = AccuDraw.getSnapRotation(snap, vp);\r\n if (undefined === rMatrix)\r\n return false;\r\n this._origin = snap.snapPoint;\r\n this._rMatrix = rMatrix;\r\n return true;\r\n }\r\n\r\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\r\n const vp = ev ? ev.viewport : undefined;\r\n if (!vp)\r\n return true;\r\n\r\n const snapDetail = TentativeOrAccuSnap.getCurrentSnap(false);\r\n if (undefined === snapDetail || !this.updateOrientation(snapDetail, vp))\r\n return true;\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n if (isMotion)\r\n return true;\r\n\r\n if (!this._acs)\r\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\r\n this._acs.setOrigin(this._origin);\r\n this._acs.setRotation(this._rMatrix);\r\n AccuDraw.updateAuxCoordinateSystem(this._acs, vp);\r\n AccuDrawShortcuts.rotateToACS();\r\n return true;\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n const vp = context.viewport;\r\n if (!this._acs)\r\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\r\n this._acs.setOrigin(this._origin);\r\n this._acs.setRotation(this._rMatrix);\r\n this._acs.display(context, ACSDisplayOptions.Active | ACSDisplayOptions.Dynamics);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class DefineACSByPointsTool extends AccuDrawShortcutsTool {\r\n public static override toolId = \"AccuDraw.DefineACSByPoints\";\r\n private readonly _points: Point3d[] = [];\r\n private _acs?: AuxCoordSystemState;\r\n\r\n public override activateAccuDrawOnStart(): boolean { return false; }\r\n public override onManipulationComplete(): AccuDrawFlags { return AccuDrawFlags.SetRMatrix; }\r\n\r\n public override doManipulationStart(): void {\r\n super.doManipulationStart();\r\n const tentativePoint = IModelApp.tentativePoint;\r\n if (!tentativePoint.isActive) {\r\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.FirstPoint\");\r\n return;\r\n }\r\n\r\n const origin = tentativePoint.getPoint().clone();\r\n CoreTools.outputPromptByKey(\"AccuDraw.DefineACSByPoints.Prompts.SecondPoint\");\r\n IModelApp.accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, origin);\r\n this._points.push(origin);\r\n tentativePoint.clear(true);\r\n }\r\n\r\n public doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean {\r\n if (!ev || !ev.viewport)\r\n return true;\r\n\r\n IModelApp.viewManager.invalidateDecorationsAllViews();\r\n if (isMotion)\r\n return false;\r\n\r\n IModelApp.accuDraw.activate();\r\n this._points.push(ev.point.clone());\r\n\r\n const vp = ev.viewport;\r\n if (!this._acs)\r\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\r\n\r\n if (AccuDrawShortcuts.updateACSByPoints(this._acs, vp, this._points, false)) {\r\n AccuDraw.updateAuxCoordinateSystem(this._acs, vp);\r\n AccuDrawShortcuts.rotateToACS();\r\n return true;\r\n }\r\n\r\n CoreTools.outputPromptByKey(`AccuDraw.DefineACSByPoints.Prompts${1 === this._points.length ? \".SecondPoint\" : \".NextPoint\"}`);\r\n return false;\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n const tmpPoints: Point3d[] = [];\r\n this._points.forEach((pt) => tmpPoints.push(pt));\r\n\r\n const ev = new BeButtonEvent();\r\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\r\n tmpPoints.push(ev.point);\r\n\r\n const vp = context.viewport;\r\n if (!this._acs)\r\n this._acs = vp.view.auxiliaryCoordinateSystem.clone();\r\n\r\n AccuDrawShortcuts.updateACSByPoints(this._acs, vp, tmpPoints, true);\r\n this._acs.display(context, ACSDisplayOptions.Active | ACSDisplayOptions.Dynamics);\r\n }\r\n}\r\n"]}
|
|
@@ -93,7 +93,7 @@ export class SubCategoriesCache {
|
|
|
93
93
|
if (undefined === set)
|
|
94
94
|
this._byCategoryId.set(categoryId, set = new Set());
|
|
95
95
|
set.add(subCategoryId);
|
|
96
|
-
if (override)
|
|
96
|
+
if (override || !this._appearances.has(subCategoryId))
|
|
97
97
|
this._appearances.set(subCategoryId, appearance);
|
|
98
98
|
}
|
|
99
99
|
async getCategoryInfo(inputCategoryIds) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubCategoriesCache.js","sourceRoot":"","sources":["../../src/SubCategoriesCache.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, CompressedId64Set, Id64, Id64Arg, Id64Set, Id64String, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { SubCategoryAppearance, SubCategoryResultRow } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\n\r\n/** A cancelable paginated request for subcategory information.\r\n * @see SubCategoriesCache\r\n * @internal\r\n */\r\nexport interface SubCategoriesRequest {\r\n /** The Ids of any categories which were requested but were not yet loaded. */\r\n readonly missingCategoryIds: Id64Set;\r\n /** A promise which resolves to true when all of the requested categories have been loaded, or to false if not all categories were loaded.\r\n * Categories may fail to load if the request is explicitly canceled or if the IModelConnection is closed before all categories are loaded.\r\n */\r\n readonly promise: Promise<boolean>;\r\n /** Cancels the request. */\r\n cancel(): void;\r\n}\r\n\r\nconst invalidCategoryIdEntry = new Set<string>();\r\n\r\n/** A cache of information about the subcategories contained within an [[IModelConnection]]. It is populated on demand.\r\n * @internal\r\n */\r\nexport class SubCategoriesCache {\r\n private readonly _byCategoryId = new Map<string, Id64Set>();\r\n private readonly _appearances = new Map<string, SubCategoryAppearance>();\r\n private readonly _imodel: IModelConnection;\r\n private _missingAtTimeOfPreload: Id64Set | undefined;\r\n\r\n public constructor(imodel: IModelConnection) { this._imodel = imodel; }\r\n\r\n /** Get the Ids of all subcategories belonging to the category with the specified Id, or undefined if no such information is present. */\r\n public getSubCategories(categoryId: string): Id64Set | undefined { return this._byCategoryId.get(categoryId); }\r\n\r\n /** Get the base appearance of the subcategory with the specified Id, or undefined if no such information is present. */\r\n public getSubCategoryAppearance(subCategoryId: Id64String): SubCategoryAppearance | undefined { return this._appearances.get(subCategoryId.toString()); }\r\n\r\n /** Request that the subcategory information for all of the specified categories is loaded.\r\n * If all such information has already been loaded, returns undefined.\r\n * Otherwise, dispatches an asynchronous request to load those categories which are not already loaded and returns a cancellable request object\r\n * containing the corresponding promise and the set of categories still to be loaded.\r\n */\r\n public load(categoryIds: Id64Arg): SubCategoriesRequest | undefined {\r\n const missing = this.getMissing(categoryIds);\r\n if (undefined === missing)\r\n return undefined;\r\n\r\n const request = new SubCategoriesCache.Request(missing, this._imodel);\r\n const promise = request.dispatch().then((result?: SubCategoriesCache.Result) => {\r\n if (undefined !== result)\r\n this.processResults(result, missing);\r\n\r\n return !request.wasCanceled;\r\n });\r\n return {\r\n missingCategoryIds: missing,\r\n promise,\r\n cancel: () => request.cancel(),\r\n };\r\n }\r\n\r\n /** Load all subcategories that come from used spatial categories of the iModel into the cache. */\r\n public async loadAllUsedSpatialSubCategories(): Promise<void> {\r\n try {\r\n const results = await this._imodel.queryAllUsedSpatialSubCategories();\r\n if (undefined !== results){\r\n this.processResults(results, new Set<string>(), false);\r\n }\r\n } catch (e) {\r\n // In case of a truncated response, gracefully handle the error and exit.\r\n }\r\n\r\n }\r\n /** Given categoryIds, return which of these are not cached. */\r\n private getMissing(categoryIds: Id64Arg): Id64Set | undefined {\r\n let missing: Id64Set | undefined;\r\n for (const catId of Id64.iterable(categoryIds)) {\r\n if (undefined === this._byCategoryId.get(catId)) {\r\n if (undefined === missing)\r\n missing = new Set<string>();\r\n\r\n missing.add(catId);\r\n }\r\n }\r\n\r\n return missing;\r\n }\r\n\r\n public clear(): void {\r\n this._byCategoryId.clear();\r\n this._appearances.clear();\r\n }\r\n\r\n public onIModelConnectionClose(): void {\r\n this.clear();\r\n }\r\n\r\n private static createSubCategoryAppearance(json?: any) {\r\n let props: SubCategoryAppearance.Props | undefined;\r\n if (\"string\" === typeof json && 0 < json.length)\r\n props = JSON.parse(json);\r\n\r\n return new SubCategoryAppearance(props);\r\n }\r\n\r\n private processResults(result: SubCategoriesCache.Result, missing: Id64Set, override: boolean = true): void {\r\n for (const row of result){\r\n this.add(row.parentId, row.id, SubCategoriesCache.createSubCategoryAppearance(row.appearance), override);\r\n }\r\n\r\n // Ensure that any category Ids which returned no results (e.g., non-existent category, invalid Id, etc) are still recorded so they are not repeatedly re-requested\r\n for (const id of missing)\r\n if (undefined === this._byCategoryId.get(id))\r\n this._byCategoryId.set(id, invalidCategoryIdEntry);\r\n }\r\n\r\n /** Exposed strictly for tests.\r\n * @internal\r\n */\r\n public add(categoryId: string, subCategoryId: string, appearance: SubCategoryAppearance, override: boolean) {\r\n let set = this._byCategoryId.get(categoryId);\r\n if (undefined === set)\r\n this._byCategoryId.set(categoryId, set = new Set<string>());\r\n\r\n set.add(subCategoryId);\r\n if (override)\r\n this._appearances.set(subCategoryId, appearance);\r\n }\r\n\r\n public async getCategoryInfo(inputCategoryIds: Id64String | Iterable<Id64String>): Promise<Map<Id64String, IModelConnection.Categories.CategoryInfo>> {\r\n // Eliminate duplicates...\r\n const categoryIds = new Set<string>(typeof inputCategoryIds === \"string\" ? [inputCategoryIds] : inputCategoryIds);\r\n const req = this.load(categoryIds);\r\n if (req)\r\n await req.promise;\r\n\r\n const map = new Map<Id64String, IModelConnection.Categories.CategoryInfo>();\r\n for (const categoryId of categoryIds) {\r\n const subCategoryIds = this._byCategoryId.get(categoryId);\r\n if (!subCategoryIds)\r\n continue;\r\n\r\n const subCategories = this.mapSubCategoryInfos(categoryId, subCategoryIds);\r\n map.set(categoryId, { id: categoryId, subCategories });\r\n }\r\n\r\n return map;\r\n }\r\n\r\n public async getSubCategoryInfo(categoryId: Id64String, inputSubCategoryIds: Id64String | Iterable<Id64String>): Promise<Map<Id64String, IModelConnection.Categories.SubCategoryInfo>> {\r\n // Eliminate duplicates...\r\n const subCategoryIds = new Set<string>(typeof inputSubCategoryIds === \"string\" ? [inputSubCategoryIds] : inputSubCategoryIds);\r\n const req = this.load(categoryId);\r\n if (req)\r\n await req.promise;\r\n\r\n return this.mapSubCategoryInfos(categoryId, subCategoryIds);\r\n }\r\n\r\n private mapSubCategoryInfos(categoryId: Id64String, subCategoryIds: Set<Id64String>): Map<Id64String, IModelConnection.Categories.SubCategoryInfo> {\r\n const map = new Map<Id64String, IModelConnection.Categories.SubCategoryInfo>();\r\n for (const id of subCategoryIds) {\r\n const appearance = this._appearances.get(id);\r\n if (appearance)\r\n map.set(id, { id, categoryId, appearance });\r\n }\r\n\r\n return map;\r\n }\r\n}\r\n\r\n/** This namespace and the types within it are exported strictly for use in tests.\r\n * @internal\r\n */\r\nexport namespace SubCategoriesCache { // eslint-disable-line no-redeclare\r\n export type Result = SubCategoryResultRow[];\r\n\r\n export class Request {\r\n private readonly _imodel: IModelConnection;\r\n private readonly _categoryIds: CompressedId64Set[] = [];\r\n private readonly _result: Result = [];\r\n private _canceled = false;\r\n private _curCategoryIdsIndex = 0;\r\n\r\n public get wasCanceled() { return this._canceled || this._imodel.isClosed; }\r\n\r\n public constructor(categoryIds: Set<string>, imodel: IModelConnection, maxCategoriesPerQuery = 2500) {\r\n this._imodel = imodel;\r\n\r\n const catIds = [...categoryIds];\r\n OrderedId64Iterable.sortArray(catIds); // sort categories, so that given the same set of categoryIds we will always create the same batches.\r\n while (catIds.length !== 0) {\r\n const end = (catIds.length > maxCategoriesPerQuery) ? maxCategoriesPerQuery : catIds.length;\r\n const compressedIds = CompressedId64Set.compressArray(catIds.splice(0, end));\r\n this._categoryIds.push(compressedIds);\r\n }\r\n }\r\n\r\n public cancel() { this._canceled = true; }\r\n\r\n public async dispatch(): Promise<Result | undefined> {\r\n if (this.wasCanceled || this._curCategoryIdsIndex >= this._categoryIds.length) // handle case of empty category Id set...\r\n return undefined;\r\n\r\n try {\r\n const catIds = this._categoryIds[this._curCategoryIdsIndex];\r\n const result = await this._imodel.querySubCategories(catIds);\r\n this._result.push(...result);\r\n if (this.wasCanceled)\r\n return undefined;\r\n } catch {\r\n // ###TODO: detect cases in which retry is warranted\r\n // Note that currently, if we succeed in obtaining some pages of results and fail to retrieve another page, we will end up processing the\r\n // incomplete results. Since we're not retrying, that's the best we can do.\r\n }\r\n\r\n // Finished with current batch of categoryIds. Dispatch the next batch if one exists.\r\n if (++this._curCategoryIdsIndex < this._categoryIds.length) {\r\n if (this.wasCanceled)\r\n return undefined;\r\n else\r\n return this.dispatch();\r\n }\r\n\r\n // Even if we were canceled, we've retrieved all the rows. Might as well process them to prevent another request for some of the same rows from being enqueued.\r\n return this._result;\r\n }\r\n }\r\n\r\n export type QueueFunc = () => void;\r\n\r\n export class QueueEntry {\r\n public readonly categoryIds: Id64Set;\r\n public readonly funcs: QueueFunc[];\r\n\r\n public constructor(categoryIds: Id64Set, func: QueueFunc) {\r\n this.categoryIds = categoryIds;\r\n this.funcs = [func];\r\n }\r\n }\r\n\r\n /** A \"queue\" of SubCategoriesRequests, which consists of between 0 and 2 entries. Each entry specifies the set of category IDs to be loaded and a list of functions to be executed\r\n * when loading is completed. This is used to enforce ordering of operations upon subcategories despite the need to asynchronously load them. It incidentally also provides an\r\n * opportunity to reduce the number of backend requests by batching consecutive requests.\r\n * Chiefly used by [[Viewport]].\r\n * @internal\r\n */\r\n export class Queue {\r\n /* NB: Members marked protected for use in tests only. */\r\n protected _current?: QueueEntry;\r\n protected _next?: QueueEntry;\r\n protected _request?: SubCategoriesRequest;\r\n protected _disposed = false;\r\n\r\n /** Push a request onto the queue. The requested categories will be loaded if necessary, and then\r\n * the supplied function will be invoked. Any previously-pushed requests are guaranteed to be processed before this one.\r\n */\r\n public push(cache: SubCategoriesCache, categoryIds: Id64Arg, func: QueueFunc): void {\r\n if (this._disposed)\r\n return;\r\n else if (undefined === this._current)\r\n this.pushCurrent(cache, categoryIds, func);\r\n else\r\n this.pushNext(categoryIds, func);\r\n }\r\n\r\n /** Cancel all requests and empty the queue. */\r\n public dispose(): void {\r\n if (undefined !== this._request) {\r\n assert(undefined !== this._current);\r\n this._request.cancel();\r\n this._request = undefined;\r\n }\r\n\r\n this._current = this._next = undefined;\r\n this._disposed = true;\r\n }\r\n\r\n public get isEmpty(): boolean {\r\n return undefined === this._current && undefined === this._next;\r\n }\r\n\r\n private pushCurrent(cache: SubCategoriesCache, categoryIds: Id64Arg, func: QueueFunc): void {\r\n assert(undefined === this._next);\r\n assert(undefined === this._current);\r\n assert(undefined === this._request);\r\n\r\n this._request = cache.load(categoryIds);\r\n if (undefined === this._request) {\r\n // All requested categories are already loaded.\r\n func();\r\n return;\r\n } else {\r\n // We need to load the requested categories before invoking the function.\r\n this.processCurrent(cache, new QueueEntry(Id64.toIdSet(categoryIds, true), func));\r\n }\r\n }\r\n\r\n private processCurrent(cache: SubCategoriesCache, entry: QueueEntry): void {\r\n assert(undefined !== this._request);\r\n assert(undefined === this._current);\r\n assert(undefined === this._next);\r\n\r\n this._current = entry;\r\n this._request.promise.then((completed: boolean) => { // eslint-disable-line @typescript-eslint/no-floating-promises\r\n if (this._disposed)\r\n return;\r\n\r\n // Invoke all the functions which were awaiting this set of IModelConnection.Categories.\r\n assert(undefined !== this._current);\r\n if (completed)\r\n for (const func of this._current.funcs)\r\n func();\r\n\r\n this._request = undefined;\r\n this._current = undefined;\r\n\r\n // If we have more requests, process them.\r\n const next = this._next;\r\n this._next = undefined;\r\n if (undefined !== next) {\r\n this._request = cache.load(next.categoryIds);\r\n if (undefined === this._request) {\r\n // All categories loaded.\r\n for (const func of next.funcs)\r\n func();\r\n } else {\r\n // We need to load the requested categories before invoking the pending functions.\r\n this.processCurrent(cache, next);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private pushNext(categoryIds: Id64Arg, func: QueueFunc): void {\r\n assert(undefined !== this._current);\r\n assert(undefined !== this._request);\r\n\r\n if (undefined === this._next) {\r\n // We have a request currently in process and none pending.\r\n // We could potentially determine that this request doesn't require any categories that are not already loaded or being loaded by the current request.\r\n // But we will find that out (synchronously) when current request completes, unless more requests come in. Probably not worth it.\r\n this._next = new QueueEntry(Id64.toIdSet(categoryIds, true), func);\r\n } else {\r\n // We have a request currently in process, and one or more pending. Append this one to the pending.\r\n this._next.funcs.push(func);\r\n for (const categoryId of Id64.iterable(categoryIds))\r\n this._next.categoryIds.add(categoryId);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SubCategoriesCache.js","sourceRoot":"","sources":["../../src/SubCategoriesCache.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAgC,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzH,OAAO,EAAE,qBAAqB,EAAwB,MAAM,oBAAoB,CAAC;AAkBjF,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;AAEjD;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAM7B,YAAmB,MAAwB;QAL1B,kBAAa,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC3C,iBAAY,GAAG,IAAI,GAAG,EAAiC,CAAC;QAI1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAAC,CAAC;IAEvE,wIAAwI;IACjI,gBAAgB,CAAC,UAAkB,IAAyB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAE/G,wHAAwH;IACjH,wBAAwB,CAAC,aAAyB,IAAuC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAEzJ;;;;OAIG;IACI,IAAI,CAAC,WAAoB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,SAAS,CAAC;QAEnB,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,MAAkC,EAAE,EAAE;YAC7E,IAAI,SAAS,KAAK,MAAM;gBACtB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEvC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,OAAO;YACL,kBAAkB,EAAE,OAAO;YAC3B,OAAO;YACP,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE;SAC/B,CAAC;IACJ,CAAC;IAED,kGAAkG;IAC3F,KAAK,CAAC,+BAA+B;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAC;YACtE,IAAI,SAAS,KAAK,OAAO,EAAC,CAAC;gBACzB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,GAAG,EAAU,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,yEAAyE;QAC3E,CAAC;IAEH,CAAC;IACD,+DAA+D;IACvD,UAAU,CAAC,WAAoB;QACrC,IAAI,OAA4B,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/C,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,IAAI,SAAS,KAAK,OAAO;oBACvB,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;gBAE9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAEM,uBAAuB;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,2BAA2B,CAAC,IAAU;QACnD,IAAI,KAA8C,CAAC;QACnD,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;YAC7C,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3B,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAEO,cAAc,CAAC,MAAiC,EAAE,OAAgB,EAAE,WAAoB,IAAI;QAClG,KAAK,MAAM,GAAG,IAAI,MAAM,EAAC,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC3G,CAAC;QAED,mKAAmK;QACnK,KAAK,MAAM,EAAE,IAAI,OAAO;YACtB,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACI,GAAG,CAAC,UAAkB,EAAE,aAAqB,EAAE,UAAiC,EAAE,QAAiB;QACxG,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,GAAG;YACnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC;QAE9D,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvB,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC;YACnD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,gBAAmD;QAC9E,0BAA0B;QAC1B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAClH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,GAAG;YACL,MAAM,GAAG,CAAC,OAAO,CAAC;QAEpB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAwD,CAAC;QAC5E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,CAAC,cAAc;gBACjB,SAAS;YAEX,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAC3E,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,UAAsB,EAAE,mBAAsD;QAC5G,0BAA0B;QAC1B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,OAAO,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAC9H,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,GAAG;YACL,MAAM,GAAG,CAAC,OAAO,CAAC;QAEpB,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC;IAEO,mBAAmB,CAAC,UAAsB,EAAE,cAA+B;QACjF,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2D,CAAC;QAC/E,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,UAAU;gBACZ,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED;;GAEG;AACH,WAAiB,kBAAkB;IAGjC,MAAa,OAAO;QAOlB,IAAW,WAAW,KAAK,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE5E,YAAmB,WAAwB,EAAE,MAAwB,EAAE,qBAAqB,GAAG,IAAI;YAPlF,iBAAY,GAAwB,EAAE,CAAC;YACvC,YAAO,GAAW,EAAE,CAAC;YAC9B,cAAS,GAAG,KAAK,CAAC;YAClB,yBAAoB,GAAG,CAAC,CAAC;YAK/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YAEtB,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;YAChC,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,qGAAqG;YAC5I,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5F,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC7E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAEM,MAAM,KAAK,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;QAEnC,KAAK,CAAC,QAAQ;YACnB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,0CAA0C;gBACvH,OAAO,SAAS,CAAC;YAEnB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAC7B,IAAI,IAAI,CAAC,WAAW;oBAClB,OAAO,SAAS,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;gBACpD,yIAAyI;gBACzI,2EAA2E;YAC7E,CAAC;YAED,qFAAqF;YACrF,IAAI,EAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC3D,IAAI,IAAI,CAAC,WAAW;oBAClB,OAAO,SAAS,CAAC;;oBAEjB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YAED,+JAA+J;YAC/J,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;KACF;IAlDY,0BAAO,UAkDnB,CAAA;IAID,MAAa,UAAU;QAIrB,YAAmB,WAAoB,EAAE,IAAe;YACtD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;KACF;IARY,6BAAU,aAQtB,CAAA;IAED;;;;;OAKG;IACH,MAAa,KAAK;QAAlB;YAKY,cAAS,GAAG,KAAK,CAAC;QAkG9B,CAAC;QAhGC;;WAEG;QACI,IAAI,CAAC,KAAyB,EAAE,WAAoB,EAAE,IAAe;YAC1E,IAAI,IAAI,CAAC,SAAS;gBAChB,OAAO;iBACJ,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ;gBAClC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;;gBAE3C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,+CAA+C;QACxC,OAAO;YACZ,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,IAAW,OAAO;YAChB,OAAO,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;QACjE,CAAC;QAEO,WAAW,CAAC,KAAyB,EAAE,WAAoB,EAAE,IAAe;YAClF,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEpC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,+CAA+C;gBAC/C,IAAI,EAAE,CAAC;gBACP,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,yEAAyE;gBACzE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAEO,cAAc,CAAC,KAAyB,EAAE,KAAiB;YACjE,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;YAEjC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAkB,EAAE,EAAE;gBAChD,IAAI,IAAI,CAAC,SAAS;oBAChB,OAAO;gBAET,wFAAwF;gBACxF,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,SAAS;oBACX,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK;wBACpC,IAAI,EAAE,CAAC;gBAEX,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAE1B,0CAA0C;gBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;gBACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACvB,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACvB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC7C,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAChC,yBAAyB;wBACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;4BAC3B,IAAI,EAAE,CAAC;oBACX,CAAC;yBAAM,CAAC;wBACN,kFAAkF;wBAClF,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAEO,QAAQ,CAAC,WAAoB,EAAE,IAAe;YACpD,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEpC,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC7B,2DAA2D;gBAC3D,sJAAsJ;gBACtJ,iIAAiI;gBACjI,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,mGAAmG;gBACnG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACjD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;KACF;IAvGY,wBAAK,QAuGjB,CAAA;AACH,CAAC,EAjLgB,kBAAkB,KAAlB,kBAAkB,QAiLlC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, CompressedId64Set, Id64, Id64Arg, Id64Set, Id64String, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { SubCategoryAppearance, SubCategoryResultRow } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\n\r\n/** A cancelable paginated request for subcategory information.\r\n * @see SubCategoriesCache\r\n * @internal\r\n */\r\nexport interface SubCategoriesRequest {\r\n /** The Ids of any categories which were requested but were not yet loaded. */\r\n readonly missingCategoryIds: Id64Set;\r\n /** A promise which resolves to true when all of the requested categories have been loaded, or to false if not all categories were loaded.\r\n * Categories may fail to load if the request is explicitly canceled or if the IModelConnection is closed before all categories are loaded.\r\n */\r\n readonly promise: Promise<boolean>;\r\n /** Cancels the request. */\r\n cancel(): void;\r\n}\r\n\r\nconst invalidCategoryIdEntry = new Set<string>();\r\n\r\n/** A cache of information about the subcategories contained within an [[IModelConnection]]. It is populated on demand.\r\n * @internal\r\n */\r\nexport class SubCategoriesCache {\r\n private readonly _byCategoryId = new Map<string, Id64Set>();\r\n private readonly _appearances = new Map<string, SubCategoryAppearance>();\r\n private readonly _imodel: IModelConnection;\r\n private _missingAtTimeOfPreload: Id64Set | undefined;\r\n\r\n public constructor(imodel: IModelConnection) { this._imodel = imodel; }\r\n\r\n /** Get the Ids of all subcategories belonging to the category with the specified Id, or undefined if no such information is present. */\r\n public getSubCategories(categoryId: string): Id64Set | undefined { return this._byCategoryId.get(categoryId); }\r\n\r\n /** Get the base appearance of the subcategory with the specified Id, or undefined if no such information is present. */\r\n public getSubCategoryAppearance(subCategoryId: Id64String): SubCategoryAppearance | undefined { return this._appearances.get(subCategoryId.toString()); }\r\n\r\n /** Request that the subcategory information for all of the specified categories is loaded.\r\n * If all such information has already been loaded, returns undefined.\r\n * Otherwise, dispatches an asynchronous request to load those categories which are not already loaded and returns a cancellable request object\r\n * containing the corresponding promise and the set of categories still to be loaded.\r\n */\r\n public load(categoryIds: Id64Arg): SubCategoriesRequest | undefined {\r\n const missing = this.getMissing(categoryIds);\r\n if (undefined === missing)\r\n return undefined;\r\n\r\n const request = new SubCategoriesCache.Request(missing, this._imodel);\r\n const promise = request.dispatch().then((result?: SubCategoriesCache.Result) => {\r\n if (undefined !== result)\r\n this.processResults(result, missing);\r\n\r\n return !request.wasCanceled;\r\n });\r\n return {\r\n missingCategoryIds: missing,\r\n promise,\r\n cancel: () => request.cancel(),\r\n };\r\n }\r\n\r\n /** Load all subcategories that come from used spatial categories of the iModel into the cache. */\r\n public async loadAllUsedSpatialSubCategories(): Promise<void> {\r\n try {\r\n const results = await this._imodel.queryAllUsedSpatialSubCategories();\r\n if (undefined !== results){\r\n this.processResults(results, new Set<string>(), false);\r\n }\r\n } catch (e) {\r\n // In case of a truncated response, gracefully handle the error and exit.\r\n }\r\n\r\n }\r\n /** Given categoryIds, return which of these are not cached. */\r\n private getMissing(categoryIds: Id64Arg): Id64Set | undefined {\r\n let missing: Id64Set | undefined;\r\n for (const catId of Id64.iterable(categoryIds)) {\r\n if (undefined === this._byCategoryId.get(catId)) {\r\n if (undefined === missing)\r\n missing = new Set<string>();\r\n\r\n missing.add(catId);\r\n }\r\n }\r\n\r\n return missing;\r\n }\r\n\r\n public clear(): void {\r\n this._byCategoryId.clear();\r\n this._appearances.clear();\r\n }\r\n\r\n public onIModelConnectionClose(): void {\r\n this.clear();\r\n }\r\n\r\n private static createSubCategoryAppearance(json?: any) {\r\n let props: SubCategoryAppearance.Props | undefined;\r\n if (\"string\" === typeof json && 0 < json.length)\r\n props = JSON.parse(json);\r\n\r\n return new SubCategoryAppearance(props);\r\n }\r\n\r\n private processResults(result: SubCategoriesCache.Result, missing: Id64Set, override: boolean = true): void {\r\n for (const row of result){\r\n this.add(row.parentId, row.id, SubCategoriesCache.createSubCategoryAppearance(row.appearance), override);\r\n }\r\n\r\n // Ensure that any category Ids which returned no results (e.g., non-existent category, invalid Id, etc) are still recorded so they are not repeatedly re-requested\r\n for (const id of missing)\r\n if (undefined === this._byCategoryId.get(id))\r\n this._byCategoryId.set(id, invalidCategoryIdEntry);\r\n }\r\n\r\n /** Exposed strictly for tests.\r\n * @internal\r\n */\r\n public add(categoryId: string, subCategoryId: string, appearance: SubCategoryAppearance, override: boolean) {\r\n let set = this._byCategoryId.get(categoryId);\r\n if (undefined === set)\r\n this._byCategoryId.set(categoryId, set = new Set<string>());\r\n\r\n set.add(subCategoryId);\r\n if (override || !this._appearances.has(subCategoryId))\r\n this._appearances.set(subCategoryId, appearance);\r\n }\r\n\r\n public async getCategoryInfo(inputCategoryIds: Id64String | Iterable<Id64String>): Promise<Map<Id64String, IModelConnection.Categories.CategoryInfo>> {\r\n // Eliminate duplicates...\r\n const categoryIds = new Set<string>(typeof inputCategoryIds === \"string\" ? [inputCategoryIds] : inputCategoryIds);\r\n const req = this.load(categoryIds);\r\n if (req)\r\n await req.promise;\r\n\r\n const map = new Map<Id64String, IModelConnection.Categories.CategoryInfo>();\r\n for (const categoryId of categoryIds) {\r\n const subCategoryIds = this._byCategoryId.get(categoryId);\r\n if (!subCategoryIds)\r\n continue;\r\n\r\n const subCategories = this.mapSubCategoryInfos(categoryId, subCategoryIds);\r\n map.set(categoryId, { id: categoryId, subCategories });\r\n }\r\n\r\n return map;\r\n }\r\n\r\n public async getSubCategoryInfo(categoryId: Id64String, inputSubCategoryIds: Id64String | Iterable<Id64String>): Promise<Map<Id64String, IModelConnection.Categories.SubCategoryInfo>> {\r\n // Eliminate duplicates...\r\n const subCategoryIds = new Set<string>(typeof inputSubCategoryIds === \"string\" ? [inputSubCategoryIds] : inputSubCategoryIds);\r\n const req = this.load(categoryId);\r\n if (req)\r\n await req.promise;\r\n\r\n return this.mapSubCategoryInfos(categoryId, subCategoryIds);\r\n }\r\n\r\n private mapSubCategoryInfos(categoryId: Id64String, subCategoryIds: Set<Id64String>): Map<Id64String, IModelConnection.Categories.SubCategoryInfo> {\r\n const map = new Map<Id64String, IModelConnection.Categories.SubCategoryInfo>();\r\n for (const id of subCategoryIds) {\r\n const appearance = this._appearances.get(id);\r\n if (appearance)\r\n map.set(id, { id, categoryId, appearance });\r\n }\r\n\r\n return map;\r\n }\r\n}\r\n\r\n/** This namespace and the types within it are exported strictly for use in tests.\r\n * @internal\r\n */\r\nexport namespace SubCategoriesCache { // eslint-disable-line no-redeclare\r\n export type Result = SubCategoryResultRow[];\r\n\r\n export class Request {\r\n private readonly _imodel: IModelConnection;\r\n private readonly _categoryIds: CompressedId64Set[] = [];\r\n private readonly _result: Result = [];\r\n private _canceled = false;\r\n private _curCategoryIdsIndex = 0;\r\n\r\n public get wasCanceled() { return this._canceled || this._imodel.isClosed; }\r\n\r\n public constructor(categoryIds: Set<string>, imodel: IModelConnection, maxCategoriesPerQuery = 2500) {\r\n this._imodel = imodel;\r\n\r\n const catIds = [...categoryIds];\r\n OrderedId64Iterable.sortArray(catIds); // sort categories, so that given the same set of categoryIds we will always create the same batches.\r\n while (catIds.length !== 0) {\r\n const end = (catIds.length > maxCategoriesPerQuery) ? maxCategoriesPerQuery : catIds.length;\r\n const compressedIds = CompressedId64Set.compressArray(catIds.splice(0, end));\r\n this._categoryIds.push(compressedIds);\r\n }\r\n }\r\n\r\n public cancel() { this._canceled = true; }\r\n\r\n public async dispatch(): Promise<Result | undefined> {\r\n if (this.wasCanceled || this._curCategoryIdsIndex >= this._categoryIds.length) // handle case of empty category Id set...\r\n return undefined;\r\n\r\n try {\r\n const catIds = this._categoryIds[this._curCategoryIdsIndex];\r\n const result = await this._imodel.querySubCategories(catIds);\r\n this._result.push(...result);\r\n if (this.wasCanceled)\r\n return undefined;\r\n } catch {\r\n // ###TODO: detect cases in which retry is warranted\r\n // Note that currently, if we succeed in obtaining some pages of results and fail to retrieve another page, we will end up processing the\r\n // incomplete results. Since we're not retrying, that's the best we can do.\r\n }\r\n\r\n // Finished with current batch of categoryIds. Dispatch the next batch if one exists.\r\n if (++this._curCategoryIdsIndex < this._categoryIds.length) {\r\n if (this.wasCanceled)\r\n return undefined;\r\n else\r\n return this.dispatch();\r\n }\r\n\r\n // Even if we were canceled, we've retrieved all the rows. Might as well process them to prevent another request for some of the same rows from being enqueued.\r\n return this._result;\r\n }\r\n }\r\n\r\n export type QueueFunc = () => void;\r\n\r\n export class QueueEntry {\r\n public readonly categoryIds: Id64Set;\r\n public readonly funcs: QueueFunc[];\r\n\r\n public constructor(categoryIds: Id64Set, func: QueueFunc) {\r\n this.categoryIds = categoryIds;\r\n this.funcs = [func];\r\n }\r\n }\r\n\r\n /** A \"queue\" of SubCategoriesRequests, which consists of between 0 and 2 entries. Each entry specifies the set of category IDs to be loaded and a list of functions to be executed\r\n * when loading is completed. This is used to enforce ordering of operations upon subcategories despite the need to asynchronously load them. It incidentally also provides an\r\n * opportunity to reduce the number of backend requests by batching consecutive requests.\r\n * Chiefly used by [[Viewport]].\r\n * @internal\r\n */\r\n export class Queue {\r\n /* NB: Members marked protected for use in tests only. */\r\n protected _current?: QueueEntry;\r\n protected _next?: QueueEntry;\r\n protected _request?: SubCategoriesRequest;\r\n protected _disposed = false;\r\n\r\n /** Push a request onto the queue. The requested categories will be loaded if necessary, and then\r\n * the supplied function will be invoked. Any previously-pushed requests are guaranteed to be processed before this one.\r\n */\r\n public push(cache: SubCategoriesCache, categoryIds: Id64Arg, func: QueueFunc): void {\r\n if (this._disposed)\r\n return;\r\n else if (undefined === this._current)\r\n this.pushCurrent(cache, categoryIds, func);\r\n else\r\n this.pushNext(categoryIds, func);\r\n }\r\n\r\n /** Cancel all requests and empty the queue. */\r\n public dispose(): void {\r\n if (undefined !== this._request) {\r\n assert(undefined !== this._current);\r\n this._request.cancel();\r\n this._request = undefined;\r\n }\r\n\r\n this._current = this._next = undefined;\r\n this._disposed = true;\r\n }\r\n\r\n public get isEmpty(): boolean {\r\n return undefined === this._current && undefined === this._next;\r\n }\r\n\r\n private pushCurrent(cache: SubCategoriesCache, categoryIds: Id64Arg, func: QueueFunc): void {\r\n assert(undefined === this._next);\r\n assert(undefined === this._current);\r\n assert(undefined === this._request);\r\n\r\n this._request = cache.load(categoryIds);\r\n if (undefined === this._request) {\r\n // All requested categories are already loaded.\r\n func();\r\n return;\r\n } else {\r\n // We need to load the requested categories before invoking the function.\r\n this.processCurrent(cache, new QueueEntry(Id64.toIdSet(categoryIds, true), func));\r\n }\r\n }\r\n\r\n private processCurrent(cache: SubCategoriesCache, entry: QueueEntry): void {\r\n assert(undefined !== this._request);\r\n assert(undefined === this._current);\r\n assert(undefined === this._next);\r\n\r\n this._current = entry;\r\n this._request.promise.then((completed: boolean) => { // eslint-disable-line @typescript-eslint/no-floating-promises\r\n if (this._disposed)\r\n return;\r\n\r\n // Invoke all the functions which were awaiting this set of IModelConnection.Categories.\r\n assert(undefined !== this._current);\r\n if (completed)\r\n for (const func of this._current.funcs)\r\n func();\r\n\r\n this._request = undefined;\r\n this._current = undefined;\r\n\r\n // If we have more requests, process them.\r\n const next = this._next;\r\n this._next = undefined;\r\n if (undefined !== next) {\r\n this._request = cache.load(next.categoryIds);\r\n if (undefined === this._request) {\r\n // All categories loaded.\r\n for (const func of next.funcs)\r\n func();\r\n } else {\r\n // We need to load the requested categories before invoking the pending functions.\r\n this.processCurrent(cache, next);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private pushNext(categoryIds: Id64Arg, func: QueueFunc): void {\r\n assert(undefined !== this._current);\r\n assert(undefined !== this._request);\r\n\r\n if (undefined === this._next) {\r\n // We have a request currently in process and none pending.\r\n // We could potentially determine that this request doesn't require any categories that are not already loaded or being loaded by the current request.\r\n // But we will find that out (synchronously) when current request completes, unless more requests come in. Probably not worth it.\r\n this._next = new QueueEntry(Id64.toIdSet(categoryIds, true), func);\r\n } else {\r\n // We have a request currently in process, and one or more pending. Append this one to the pending.\r\n this._next.funcs.push(func);\r\n for (const categoryId of Id64.iterable(categoryIds))\r\n this._next.categoryIds.add(categoryId);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -230,10 +230,10 @@ export class ArcGisUtilities {
|
|
|
230
230
|
await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, { mapLayerUrl: new URL(url), userName, password });
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
|
-
let response = await fetch(tmpUrl
|
|
233
|
+
let response = await fetch(tmpUrl, { method: "GET" });
|
|
234
234
|
if (response.status === 401 && !requireToken && headersIncludeAuthMethod(response.headers, ["ntlm", "negotiate"])) {
|
|
235
235
|
// We got a http 401 challenge, lets try again with SSO enabled (i.e. Windows Authentication)
|
|
236
|
-
response = await fetch(
|
|
236
|
+
response = await fetch(tmpUrl, { method: "GET", credentials: "include" });
|
|
237
237
|
}
|
|
238
238
|
// Append security token when corresponding error code is returned by ArcGIS service
|
|
239
239
|
let errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);
|