@itwin/editor-frontend 5.0.0-dev.4 → 5.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectGeolocation.js","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { AccuDrawHintBuilder, AngleDescription, BeButtonEvent, CanvasDecoration, CoreTools, DecorateContext, EventHandled, GraphicType, IModelApp, LengthDescription, PrimitiveTool, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport } from \"@itwin/core-frontend\";\nimport { Angle, Matrix3d, Point3d, Ray3d, Vector3d, XYAndZ } from \"@itwin/core-geometry\";\nimport { Cartographic, ColorDef, LinePixels } from \"@itwin/core-common\";\nimport { ProjectExtentsClipDecoration } from \"./ProjectExtentsDecoration\";\nimport { DialogItem, DialogProperty, DialogPropertySyncItem } from \"@itwin/appui-abstract\";\nimport { EditTools } from \"../EditTool\";\n\nfunction translatePrompt(key: string) {\n return EditTools.translate(`ProjectLocation:Prompts.${key}`);\n}\nfunction translateMessage(key: string) {\n return EditTools.translate(`ProjectLocation:Message.${key}`);\n}\n\n/** @internal */\nclass LabelDecoration implements CanvasDecoration {\n public worldLocation = new Point3d();\n public position = new Point3d();\n public label: string;\n\n constructor(worldLocation: XYAndZ, label: string) {\n this.worldLocation.setFrom(worldLocation);\n this.label = label;\n }\n\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\n ctx.font = \"16px san-serif\";\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\n\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"white\";\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\n ctx.shadowColor = \"black\";\n ctx.shadowBlur = 10;\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\n\n ctx.fillStyle = \"white\";\n ctx.shadowBlur = 0;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.label, 0, 0);\n }\n\n public setPosition(vp: Viewport): boolean {\n vp.worldToView(this.worldLocation, this.position);\n this.position.y -= Math.floor(vp.pixelsFromInches(0.45)) + 0.5; // Offset from world location...\n return vp.viewRect.containsPoint(this.position);\n }\n\n public addDecoration(context: DecorateContext) {\n if (this.setPosition(context.viewport))\n context.addCanvasDecoration(this);\n }\n}\n\n/** Change or update geolocation for project.\n * To show tool settings for specifying lat/long, make sure formatting and parsing data are cached before the tool starts\n * by calling QuantityFormatter.onInitialized at app startup.\n * @beta\n */\nexport class ProjectGeolocationPointTool extends PrimitiveTool {\n public static override toolId = \"ProjectLocation.Geolocation.Point\";\n public static override iconSpec = \"icon-globe\"; // <== Tool button should use whatever icon you have here...\n\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 4; } // latitude, longitude, altitude, north direction...\n\n protected _haveToolSettings = false;\n protected _cartographicFromArgs = false;\n\n protected _accept = false;\n protected _scale = 1.0;\n protected _origin?: Point3d;\n protected _labelDeco?: LabelDecoration;\n\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n public override async onCleanup() {\n await super.onCleanup();\n this.unsuspendDecorations();\n }\n\n public async onRestartTool() { return this.exitTool(); }\n public override async onUnsuspend() { this.provideToolAssistance(); }\n\n private _latitudeProperty: DialogProperty<number> | undefined;\n public get latitudeProperty() {\n if (!this._latitudeProperty)\n this._latitudeProperty = new DialogProperty<number>(new AngleDescription(\"latitude\", translateMessage(\"Latitude\")), 0.0);\n return this._latitudeProperty;\n }\n\n public get latitude(): number { return this.latitudeProperty.value; }\n public set latitude(value: number) { this.latitudeProperty.value = value; }\n\n private _longitudeProperty: DialogProperty<number> | undefined;\n public get longitudeProperty() {\n if (!this._longitudeProperty)\n this._longitudeProperty = new DialogProperty<number>(new AngleDescription(\"longitude\", translateMessage(\"Longitude\")), 0.0);\n return this._longitudeProperty;\n }\n\n public get longitude(): number { return this.longitudeProperty.value; }\n public set longitude(value: number) { this.longitudeProperty.value = value; }\n\n private _altitudeProperty: DialogProperty<number> | undefined;\n public get altitudeProperty() {\n if (!this._altitudeProperty)\n this._altitudeProperty = new DialogProperty<number>(new LengthDescription(\"altitude\", CoreTools.translate(\"Measure.Labels.Altitude\")), 0.0);\n return this._altitudeProperty;\n }\n\n public get altitude(): number { return this.altitudeProperty.value; }\n public set altitude(value: number) { this.altitudeProperty.value = value; }\n\n private _northProperty: DialogProperty<number> | undefined;\n public get northProperty() {\n if (!this._northProperty)\n this._northProperty = new DialogProperty<number>(new AngleDescription(\"north\", translateMessage(\"North\")), 0.0);\n return this._northProperty;\n }\n\n public get north(): number { return this.northProperty.value; }\n public set north(value: number) { this.northProperty.value = value; }\n\n private syncToolSettingsCoordinates(): void {\n this.syncToolSettingsProperties([this.latitudeProperty.syncItem, this.longitudeProperty.syncItem, this.altitudeProperty.syncItem, this.northProperty.syncItem]);\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this._haveToolSettings = true;\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.latitudeProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\n toolSettings.push(this.longitudeProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\n toolSettings.push(this.altitudeProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\n toolSettings.push(this.northProperty.toDialogItem({ rowPriority: 4, columnIndex: 2 }));\n return toolSettings;\n }\n\n protected provideToolAssistance(): void {\n const acceptMsg = CoreTools.translate(undefined === this._origin ? \"ElementSet.Inputs.AcceptPoint\" : \"ElementSet.Inputs.Accept\");\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyKnownLocation\" : \"ConfirmCoordinates\"));\n const sections: ToolAssistanceSection[] = [];\n\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n\n const touchInstructions: ToolAssistanceInstruction[] = [];\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(undefined === this._origin);\n this.provideToolAssistance();\n }\n\n private pulseDecoration() {\n if (!this._accept)\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n this._scale += 0.1;\n if (this._scale > 1.6)\n this._scale = 1.0;\n\n deco.viewport.invalidateDecorations();\n setTimeout(() => this.pulseDecoration(), 100);\n }\n\n private unsuspendDecorations() {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined !== deco)\n deco.suspendGeolocationDecorations = false;\n }\n\n public override decorate(context: DecorateContext): void {\n if (undefined === this._origin || !context.viewport.view.isSpatialView())\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n deco.suspendGeolocationDecorations = true;\n deco.drawMonumentPoint(context, this._origin, this._scale);\n\n if (undefined !== this._labelDeco)\n this._labelDeco.addDecoration(context);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport || this._accept)\n return;\n\n this._origin = ev.point.clone();\n ev.viewport.invalidateDecorations();\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize(); // Calls onRestartTool to exit...\n return EventHandled.No;\n }\n\n protected acceptDefaultLocation(): void {\n // Greenwich is better default when testing control handle w/o tool settings support...\n this.latitude = Angle.createDegrees(51.4934).radians;\n this.longitude = Angle.createDegrees(0.0098).radians;\n this.altitude = 50.0;\n this.north = 0.0;\n }\n\n public acceptKnownLocation(ev: BeButtonEvent): void {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n this._accept = true; // Require explicit accept to give user a chance to change values...\n this._origin = ev.point.clone();\n this._labelDeco = new LabelDecoration(this._origin, translatePrompt(\"SpecifyCoordinates\"));\n\n if (!this._cartographicFromArgs) {\n if (this.iModel.isGeoLocated) {\n const cartographic = this.iModel.spatialToCartographicFromEcef(this._origin);\n this.latitude = cartographic.latitude;\n this.longitude = cartographic.longitude;\n this.altitude = cartographic.height;\n this.north = deco.getClockwiseAngleToNorth().radians;\n } else if (!this._haveToolSettings) {\n this.acceptDefaultLocation();\n }\n }\n\n this.syncToolSettingsCoordinates();\n this.pulseDecoration(); // Pulse to indicate that we are waiting for user input...\n this.setupAndPromptForNextAction();\n }\n\n public async acceptCoordinates(): Promise<void> {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n const origin = Cartographic.fromRadians({ longitude: this.longitude, latitude: this.latitude, height: this.altitude });\n if (!deco.updateEcefLocation(origin, this._origin, Angle.createRadians(this.north)))\n return;\n\n return this.onReinitialize(); // Calls onRestartTool to exit...\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === ev.viewport)\n return EventHandled.No; // Shouldn't really happen...\n\n const haveKnownLocation = this._accept;\n if (!haveKnownLocation)\n this.acceptKnownLocation(ev);\n\n const needAcceptPoint = !haveKnownLocation && this._haveToolSettings;\n if (!needAcceptPoint)\n await this.acceptCoordinates();\n\n return EventHandled.No;\n }\n\n public override async onInstall(): Promise<boolean> {\n if (!ProjectExtentsClipDecoration.allowEcefLocationChange(false))\n return false;\n\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\n this.initializeToolSettingPropertyValues([this.latitudeProperty, this.longitudeProperty, this.altitudeProperty, this.northProperty]);\n\n return true;\n }\n\n /** The keyin takes the following arguments, all of which are optional:\n * - `latitude=number` Latitude of accept point in degrees.\n * - `longitude=number` Longitude of accept point in degrees.\n * - `altitude=number` Height above ellipsoid of accept point.\n * - `north=number` North direction in degrees of accept point.\n */\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\n for (const arg of inputArgs) {\n const parts = arg.split(\"=\");\n if (2 !== parts.length)\n continue;\n\n if (parts[0].toLowerCase().startsWith(\"la\")) {\n const latitude = Number.parseFloat(parts[1]);\n if (!Number.isNaN(latitude)) {\n this.saveToolSettingPropertyValue(this.latitudeProperty, { value: Angle.createDegrees(latitude).radians });\n this._cartographicFromArgs = true;\n }\n } else if (parts[0].toLowerCase().startsWith(\"lo\")) {\n const longitude = Number.parseFloat(parts[1]);\n if (!Number.isNaN(longitude)) {\n this.saveToolSettingPropertyValue(this.longitudeProperty, { value: Angle.createDegrees(longitude).radians });\n this._cartographicFromArgs = true;\n }\n } else if (parts[0].toLowerCase().startsWith(\"al\")) {\n const altitude = Number.parseFloat(parts[1]);\n if (!Number.isNaN(altitude)) {\n this.saveToolSettingPropertyValue(this.altitudeProperty, { value: altitude });\n this._cartographicFromArgs = true;\n }\n } else if (parts[0].toLowerCase().startsWith(\"no\")) {\n const north = Number.parseFloat(parts[1]);\n if (!Number.isNaN(north)) {\n this.saveToolSettingPropertyValue(this.northProperty, { value: Angle.createDegrees(north).radians });\n this._cartographicFromArgs = true;\n }\n }\n }\n\n return this.run();\n }\n\n public static async startTool(): Promise<boolean> { return new ProjectGeolocationPointTool().run(); }\n}\n\n/** Change or update geolocation direction to true north.\n * @beta\n */\nexport class ProjectGeolocationNorthTool extends PrimitiveTool {\n public static override toolId = \"ProjectLocation.Geolocation.North\";\n public static override iconSpec = \"icon-sort-up\"; // <== Tool button should use whatever icon you have here...\n protected _origin?: Point3d;\n protected _northDir?: Ray3d;\n\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n public override async onCleanup() {\n await super.onCleanup();\n this.unsuspendDecorations();\n }\n public async onRestartTool() { return this.exitTool(); }\n public override async onUnsuspend() { this.provideToolAssistance(); }\n\n protected provideToolAssistance(): void {\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineAngle\"));\n const sections: ToolAssistanceSection[] = [];\n\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n\n const touchInstructions: ToolAssistanceInstruction[] = [];\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n this.provideToolAssistance();\n\n if (undefined === this._origin)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setMatrix(Matrix3d.createIdentity());\n hints.setOrigin(this._origin);\n hints.setModePolar();\n hints.setOriginFixed = true;\n hints.setLockZ = true;\n hints.sendHints();\n }\n\n private getAdjustedPoint(ev: BeButtonEvent): Point3d | undefined {\n if (undefined === this._origin)\n return undefined;\n return AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, this._origin, Vector3d.unitZ(), ev.viewport!, true);\n }\n\n private unsuspendDecorations() {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined !== deco)\n deco.suspendGeolocationDecorations = false;\n }\n\n private updateNorthVector(ev: BeButtonEvent): void {\n if (undefined === ev.viewport)\n return;\n\n if (undefined === this._northDir)\n this._northDir = Ray3d.create(ev.point, Vector3d.unitY());\n else\n this._northDir.origin.setFrom(undefined !== this._origin ? this._origin : ev.point);\n\n const dirPt = this.getAdjustedPoint(ev);\n if (undefined === dirPt)\n return;\n\n this._northDir.direction.setStartEnd(this._northDir.origin, dirPt);\n if (this._northDir.direction.magnitude() < 1.0e-6)\n this._northDir.direction.setFrom(Vector3d.unitY());\n\n this._northDir.direction.z = 0.0;\n this._northDir.direction.normalizeInPlace();\n }\n\n public override decorate(context: DecorateContext): void {\n if (undefined === this._northDir || !context.viewport.view.isSpatialView())\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n deco.suspendGeolocationDecorations = true;\n deco.drawNorthArrow(context, this._northDir);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport)\n return;\n\n this.updateNorthVector(ev);\n ev.viewport.invalidateDecorations();\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize(); // Calls onRestartTool to exit...\n return EventHandled.No;\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === ev.viewport)\n return EventHandled.No; // Shouldn't really happen...\n\n if (undefined === this._origin) {\n this._origin = ev.point.clone();\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n this.updateNorthVector(ev);\n\n if (undefined !== this._northDir) {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined !== deco)\n deco.updateNorthDirection(this._northDir);\n }\n\n await this.onReinitialize(); // Calls onRestartTool to exit...\n return EventHandled.No;\n }\n\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\n\n public static async startTool() { return new ProjectGeolocationNorthTool().run(); }\n}\n\n/** Move a geolocated model by specifying two points to define the offset.\n * @beta\n */\nexport class ProjectGeolocationMoveTool extends PrimitiveTool {\n public static override toolId = \"ProjectLocation.Geolocation.Move\";\n public static override iconSpec = \"icon-move\"; // <== Tool button should use whatever icon you have here...\n protected _origin?: Point3d;\n protected _current?: Point3d;\n\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n public override async onCleanup() {\n await super.onCleanup();\n this.unsuspendDecorations();\n }\n public async onRestartTool() {\n const tool = new ProjectGeolocationMoveTool();\n if (!await tool.run())\n return this.exitTool();\n }\n\n public override async onUnsuspend() { this.provideToolAssistance(); }\n\n protected provideToolAssistance(): void {\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineOffset\"));\n const sections: ToolAssistanceSection[] = [];\n\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n\n const touchInstructions: ToolAssistanceInstruction[] = [];\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n this.provideToolAssistance();\n\n if (undefined === this._origin)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setMatrix(Matrix3d.createIdentity());\n hints.setOrigin(this._origin);\n hints.setModePolar();\n hints.setOriginFixed = true;\n hints.sendHints();\n }\n\n private unsuspendDecorations() {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined !== deco)\n deco.suspendGeolocationDecorations = false;\n }\n\n private async acceptOffset(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport || undefined === this._origin)\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n const origin = this.iModel.spatialToCartographicFromEcef(ev.point);\n if (!deco.updateEcefLocation(origin, this._origin))\n return;\n\n return this.onReinitialize(); // Calls onRestartTool to exit...\n }\n\n public override decorate(context: DecorateContext): void {\n if (undefined === this._origin || undefined === this._current || !context.viewport.view.isSpatialView())\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n const colorAccHid = colorAccVis.withAlpha(100);\n\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\n\n const extents = this.iModel.projectExtents.cloneTranslated(Vector3d.createStartEnd(this._origin, this._current));\n\n builderAccVis.addRangeBox(extents);\n builderAccHid.addRangeBox(extents);\n builderAccHid.addLineString([this._origin, this._current]);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n\n deco.suspendGeolocationDecorations = true;\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport)\n return;\n\n this._current = ev.point;\n ev.viewport.invalidateDecorations();\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this._origin)\n await this.exitTool(); // exit to select tool if we haven't gotten first point...\n else\n await this.onReinitialize(); // Calls onRestartTool...\n return EventHandled.No;\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === ev.viewport)\n return EventHandled.No; // Shouldn't really happen...\n\n if (undefined === this._origin) {\n this._origin = ev.point.clone();\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n await this.acceptOffset(ev);\n return EventHandled.No;\n }\n\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\n\n public static async startTool() { return new ProjectGeolocationMoveTool().run(); }\n}\n\n"]}
1
+ {"version":3,"file":"ProjectGeolocation.js","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAA8U;AAC9U,wDAAyF;AACzF,oDAAwE;AACxE,yEAA0E;AAC1E,0DAA2F;AAC3F,0CAAwC;AAExC,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,oBAAS,CAAC,SAAS,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;AAC/D,CAAC;AACD,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,oBAAS,CAAC,SAAS,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,gBAAgB;AAChB,MAAM,eAAe;IAKnB,YAAY,aAAqB,EAAE,KAAa;QAJzC,kBAAa,GAAG,IAAI,uBAAO,EAAE,CAAC;QAC9B,aAAQ,GAAG,IAAI,uBAAO,EAAE,CAAC;QAI9B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,cAAc,CAAC,GAA6B;QACjD,GAAG,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC5B,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,qCAAqC;QACrF,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC;QAEnE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;QAC1B,GAAG,CAAC,SAAS,GAAG,gBAAgB,CAAC;QACjC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;QAC1B,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;QACpB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QAC3E,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QAE7E,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;QACxB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QACnB,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;QACzB,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;IAEM,WAAW,CAAC,EAAY;QAC7B,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,gCAAgC;QAChG,OAAO,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAEM,aAAa,CAAC,OAAwB;QAC3C,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAa,2BAA4B,SAAQ,6BAAa;IAA9D;;QAOY,sBAAiB,GAAG,KAAK,CAAC;QAC1B,0BAAqB,GAAG,KAAK,CAAC;QAE9B,YAAO,GAAG,KAAK,CAAC;QAChB,WAAM,GAAG,GAAG,CAAC;IA4QzB,CAAC;aAtRwB,WAAM,GAAG,mCAAmC,AAAtC,CAAuC;aAC7C,aAAQ,GAAG,YAAY,AAAf,CAAgB,GAAC,4DAA4D;IAErG,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAc,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,oDAAoD;IAUvF,oBAAoB,CAAC,EAAwB,EAAE,oBAA6B,IAAa,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,EAAE,oBAAoB,CAAC,IAAI,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACxM,eAAe,CAAC,GAAkB,EAAE,cAAuB,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,6DAA6D;IACpJ,sBAAsB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,oCAAoC;IACxF,KAAK,CAAC,aAAa;QACjC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAEe,KAAK,CAAC,SAAS;QAC7B,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;IAGrE,IAAW,gBAAgB;QACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,+BAAc,CAAS,IAAI,gCAAgB,CAAC,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3H,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,IAAW,QAAQ,CAAC,KAAa,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG3E,IAAW,iBAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,+BAAc,CAAS,IAAI,gCAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9H,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAW,SAAS,KAAa,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,IAAW,SAAS,CAAC,KAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG7E,IAAW,gBAAgB;QACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,+BAAc,CAAS,IAAI,iCAAiB,CAAC,UAAU,EAAE,yBAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9I,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,IAAW,QAAQ,CAAC,KAAa,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAG3E,IAAW,aAAa;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAS,IAAI,gCAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClH,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAW,KAAK,KAAa,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAW,KAAK,CAAC,KAAa,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAE7D,2BAA2B;QACjC,IAAI,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClK,CAAC;IAEe,KAAK,CAAC,8BAA8B,CAAC,YAAoC;QACvF,OAAO,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAEe,4BAA4B;QAC1C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,MAAM,YAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QAC7C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1F,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,YAAY,CAAC;IACtB,CAAC;IAES,qBAAqB;QAC7B,MAAM,SAAS,GAAG,yBAAS,CAAC,SAAS,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;QACjI,MAAM,SAAS,GAAG,yBAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG,8BAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtK,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAE7C,MAAM,iBAAiB,GAAgC,EAAE,CAAC;QAC1D,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3I,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5I,QAAQ,CAAC,IAAI,CAAC,8BAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,8BAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3F,MAAM,iBAAiB,GAAgC,EAAE,CAAC;QAC1D,IAAI,CAAC,8BAAc,CAAC,6BAA6B,CAAC,iBAAiB,CAAC;YAClE,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/I,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7I,QAAQ,CAAC,IAAI,CAAC,8BAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,8BAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3F,MAAM,YAAY,GAAG,8BAAc,CAAC,kBAAkB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAClF,yBAAS,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAES,2BAA2B;QACnC,yBAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO;YACf,OAAO;QAET,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO;QAET,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;YACnB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAEpB,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QACtC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAEO,oBAAoB;QAC1B,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;IAC/C,CAAC;IAEe,QAAQ,CAAC,OAAwB;QAC/C,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;YACtE,OAAO;QAET,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO;QAET,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3D,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YAC/B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAEe,KAAK,CAAC,aAAa,CAAC,EAAiB;QACnD,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;YAC3C,OAAO;QAET,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACtC,CAAC;IAEe,KAAK,CAAC,eAAe,CAAC,GAAkB;QACtD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iCAAiC;QAC9D,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAES,qBAAqB;QAC7B,uFAAuF;QACvF,IAAI,CAAC,QAAQ,GAAG,qBAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,qBAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,CAAC;IAEM,mBAAmB,CAAC,EAAiB;QAC1C,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO;QAET,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,oEAAoE;QACzF,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAE3F,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7E,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;gBACtC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;gBACxC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC;gBACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC;YACvD,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACnC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,0DAA0D;QAClF,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO;QAET,MAAM,MAAM,GAAG,0BAAY,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvH,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,qBAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjF,OAAO;QAET,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iCAAiC;IACjE,CAAC;IAEe,KAAK,CAAC,gBAAgB,CAAC,EAAiB;QACtD,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,OAAO,4BAAY,CAAC,EAAE,CAAC,CAAC,6BAA6B;QAEvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,iBAAiB;YACpB,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAE/B,MAAM,eAAe,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC;QACrE,IAAI,CAAC,eAAe;YAClB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEjC,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,SAAS;QAC7B,IAAI,CAAC,uDAA4B,CAAC,uBAAuB,CAAC,KAAK,CAAC;YAC9D,OAAO,KAAK,CAAC;QAEf,6GAA6G;QAC7G,IAAI,CAAC,mCAAmC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAErI,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACa,KAAK,CAAC,WAAW,CAAC,GAAG,SAAmB;QACtD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM;gBACpB,SAAS;YAEX,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,qBAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC3G,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,qBAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC7G,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC9E,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,qBAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBACrG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,SAAS,KAAuB,OAAO,IAAI,2BAA2B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;AAtRvG,kEAuRC;AAED;;GAEG;AACH,MAAa,2BAA4B,SAAQ,6BAAa;aACrC,WAAM,GAAG,mCAAmC,CAAC;aAC7C,aAAQ,GAAG,cAAc,CAAC,GAAC,4DAA4D;IAI9F,oBAAoB,CAAC,EAAwB,EAAE,oBAA6B,IAAa,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,EAAE,oBAAoB,CAAC,IAAI,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACxM,eAAe,CAAC,GAAkB,EAAE,cAAuB,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,6DAA6D;IACpJ,sBAAsB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,oCAAoC;IACxF,KAAK,CAAC,aAAa;QACjC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IACe,KAAK,CAAC,SAAS;QAC7B,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IACM,KAAK,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;IAE3D,qBAAqB;QAC7B,MAAM,SAAS,GAAG,yBAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,yBAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG,8BAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAC1J,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAE7C,MAAM,iBAAiB,GAAgC,EAAE,CAAC;QAC1D,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3I,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5I,QAAQ,CAAC,IAAI,CAAC,8BAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,8BAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3F,MAAM,iBAAiB,GAAgC,EAAE,CAAC;QAC1D,IAAI,CAAC,8BAAc,CAAC,6BAA6B,CAAC,iBAAiB,CAAC;YAClE,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/I,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7I,QAAQ,CAAC,IAAI,CAAC,8BAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,8BAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3F,MAAM,YAAY,GAAG,8BAAc,CAAC,kBAAkB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAClF,yBAAS,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAES,2BAA2B;QACnC,yBAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO;QAET,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QACxC,KAAK,CAAC,SAAS,CAAC,wBAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAEO,gBAAgB,CAAC,EAAiB;QACxC,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO,SAAS,CAAC;QACnB,OAAO,mCAAmB,CAAC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,wBAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,QAAS,EAAE,IAAI,CAAC,CAAC;IACrH,CAAC;IAEO,oBAAoB;QAC1B,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;IAC/C,CAAC;IAEO,iBAAiB,CAAC,EAAiB;QACzC,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,OAAO;QAET,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS;YAC9B,IAAI,CAAC,SAAS,GAAG,qBAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;;YAE1D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAEtF,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,SAAS,KAAK,KAAK;YACrB,OAAO;QAET,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,MAAM;YAC/C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,wBAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC;IAEe,QAAQ,CAAC,OAAwB;QAC/C,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;YACxE,OAAO;QAET,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO;QAET,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAEe,KAAK,CAAC,aAAa,CAAC,EAAiB;QACnD,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,OAAO;QAET,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC3B,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACtC,CAAC;IAEe,KAAK,CAAC,eAAe,CAAC,GAAkB;QACtD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iCAAiC;QAC9D,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,gBAAgB,CAAC,EAAiB;QACtD,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,OAAO,4BAAY,CAAC,EAAE,CAAC,CAAC,6BAA6B;QAEvD,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnC,OAAO,4BAAY,CAAC,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAE3B,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;YAChD,IAAI,SAAS,KAAK,IAAI;gBACpB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iCAAiC;QAC9D,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,SAAS,KAAuB,OAAO,uDAA4B,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnH,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,OAAO,IAAI,2BAA2B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;AA3IrF,kEA4IC;AAED;;GAEG;AACH,MAAa,0BAA2B,SAAQ,6BAAa;aACpC,WAAM,GAAG,kCAAkC,CAAC;aAC5C,aAAQ,GAAG,WAAW,CAAC,GAAC,4DAA4D;IAI3F,oBAAoB,CAAC,EAAwB,EAAE,oBAA6B,IAAa,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,EAAE,oBAAoB,CAAC,IAAI,SAAS,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IACxM,eAAe,CAAC,GAAkB,EAAE,cAAuB,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,6DAA6D;IACpJ,sBAAsB,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,oCAAoC;IACxF,KAAK,CAAC,aAAa;QACjC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IACe,KAAK,CAAC,SAAS;QAC7B,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IACM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,0BAA0B,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEe,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;IAE3D,qBAAqB;QAC7B,MAAM,SAAS,GAAG,yBAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,yBAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG,8BAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3J,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAE7C,MAAM,iBAAiB,GAAgC,EAAE,CAAC;QAC1D,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3I,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5I,QAAQ,CAAC,IAAI,CAAC,8BAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,8BAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3F,MAAM,iBAAiB,GAAgC,EAAE,CAAC;QAC1D,IAAI,CAAC,8BAAc,CAAC,6BAA6B,CAAC,iBAAiB,CAAC;YAClE,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/I,iBAAiB,CAAC,IAAI,CAAC,8BAAc,CAAC,iBAAiB,CAAC,mCAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,yCAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7I,QAAQ,CAAC,IAAI,CAAC,8BAAc,CAAC,aAAa,CAAC,iBAAiB,EAAE,8BAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3F,MAAM,YAAY,GAAG,8BAAc,CAAC,kBAAkB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAClF,yBAAS,CAAC,aAAa,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAES,2BAA2B;QACnC,yBAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,OAAO;QAET,MAAM,KAAK,GAAG,IAAI,mCAAmB,EAAE,CAAC;QACxC,KAAK,CAAC,SAAS,CAAC,wBAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,SAAS,EAAE,CAAC;IACpB,CAAC;IAEO,oBAAoB;QAC1B,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,EAAiB;QAC1C,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YACzD,OAAO;QAET,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO;QAET,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;YAChD,OAAO;QAET,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iCAAiC;IACjE,CAAC;IAEe,QAAQ,CAAC,OAAwB;QAC/C,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE;YACrG,OAAO;QAET,MAAM,IAAI,GAAG,uDAA4B,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO;QAET,MAAM,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,2BAAW,CAAC,eAAe,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,OAAO,CAAC,oBAAoB,CAAC,2BAAW,CAAC,YAAY,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,sBAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9F,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE/C,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,sBAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3D,aAAa,CAAC,YAAY,CAAC,WAAW,EAAE,sBAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,wBAAU,CAAC,KAAK,CAAC,CAAC;QAE7E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,wBAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEjH,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE3D,OAAO,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;QAEhD,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;IAC5C,CAAC;IAEe,KAAK,CAAC,aAAa,CAAC,EAAiB;QACnD,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,OAAO;QAET,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;QACzB,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IACtC,CAAC;IAEe,KAAK,CAAC,eAAe,CAAC,GAAkB;QACtD,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,0DAA0D;;YAEjF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,yBAAyB;QACxD,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,gBAAgB,CAAC,EAAiB;QACtD,IAAI,SAAS,KAAK,EAAE,CAAC,QAAQ;YAC3B,OAAO,4BAAY,CAAC,EAAE,CAAC,CAAC,6BAA6B;QAEvD,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnC,OAAO,4BAAY,CAAC,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,SAAS,KAAuB,OAAO,uDAA4B,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnH,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,OAAO,IAAI,0BAA0B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;AA9IpF,gEA+IC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { AccuDrawHintBuilder, AngleDescription, BeButtonEvent, CanvasDecoration, CoreTools, DecorateContext, EventHandled, GraphicType, IModelApp, LengthDescription, PrimitiveTool, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport } from \"@itwin/core-frontend\";\nimport { Angle, Matrix3d, Point3d, Ray3d, Vector3d, XYAndZ } from \"@itwin/core-geometry\";\nimport { Cartographic, ColorDef, LinePixels } from \"@itwin/core-common\";\nimport { ProjectExtentsClipDecoration } from \"./ProjectExtentsDecoration\";\nimport { DialogItem, DialogProperty, DialogPropertySyncItem } from \"@itwin/appui-abstract\";\nimport { EditTools } from \"../EditTool\";\n\nfunction translatePrompt(key: string) {\n return EditTools.translate(`ProjectLocation:Prompts.${key}`);\n}\nfunction translateMessage(key: string) {\n return EditTools.translate(`ProjectLocation:Message.${key}`);\n}\n\n/** @internal */\nclass LabelDecoration implements CanvasDecoration {\n public worldLocation = new Point3d();\n public position = new Point3d();\n public label: string;\n\n constructor(worldLocation: XYAndZ, label: string) {\n this.worldLocation.setFrom(worldLocation);\n this.label = label;\n }\n\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\n ctx.font = \"16px san-serif\";\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\n\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"white\";\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\n ctx.shadowColor = \"black\";\n ctx.shadowBlur = 10;\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\n\n ctx.fillStyle = \"white\";\n ctx.shadowBlur = 0;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.label, 0, 0);\n }\n\n public setPosition(vp: Viewport): boolean {\n vp.worldToView(this.worldLocation, this.position);\n this.position.y -= Math.floor(vp.pixelsFromInches(0.45)) + 0.5; // Offset from world location...\n return vp.viewRect.containsPoint(this.position);\n }\n\n public addDecoration(context: DecorateContext) {\n if (this.setPosition(context.viewport))\n context.addCanvasDecoration(this);\n }\n}\n\n/** Change or update geolocation for project.\n * To show tool settings for specifying lat/long, make sure formatting and parsing data are cached before the tool starts\n * by calling QuantityFormatter.onInitialized at app startup.\n * @beta\n */\nexport class ProjectGeolocationPointTool extends PrimitiveTool {\n public static override toolId = \"ProjectLocation.Geolocation.Point\";\n public static override iconSpec = \"icon-globe\"; // <== Tool button should use whatever icon you have here...\n\n public static override get minArgs() { return 0; }\n public static override get maxArgs() { return 4; } // latitude, longitude, altitude, north direction...\n\n protected _haveToolSettings = false;\n protected _cartographicFromArgs = false;\n\n protected _accept = false;\n protected _scale = 1.0;\n protected _origin?: Point3d;\n protected _labelDeco?: LabelDecoration;\n\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n public override async onCleanup() {\n await super.onCleanup();\n this.unsuspendDecorations();\n }\n\n public async onRestartTool() { return this.exitTool(); }\n public override async onUnsuspend() { this.provideToolAssistance(); }\n\n private _latitudeProperty: DialogProperty<number> | undefined;\n public get latitudeProperty() {\n if (!this._latitudeProperty)\n this._latitudeProperty = new DialogProperty<number>(new AngleDescription(\"latitude\", translateMessage(\"Latitude\")), 0.0);\n return this._latitudeProperty;\n }\n\n public get latitude(): number { return this.latitudeProperty.value; }\n public set latitude(value: number) { this.latitudeProperty.value = value; }\n\n private _longitudeProperty: DialogProperty<number> | undefined;\n public get longitudeProperty() {\n if (!this._longitudeProperty)\n this._longitudeProperty = new DialogProperty<number>(new AngleDescription(\"longitude\", translateMessage(\"Longitude\")), 0.0);\n return this._longitudeProperty;\n }\n\n public get longitude(): number { return this.longitudeProperty.value; }\n public set longitude(value: number) { this.longitudeProperty.value = value; }\n\n private _altitudeProperty: DialogProperty<number> | undefined;\n public get altitudeProperty() {\n if (!this._altitudeProperty)\n this._altitudeProperty = new DialogProperty<number>(new LengthDescription(\"altitude\", CoreTools.translate(\"Measure.Labels.Altitude\")), 0.0);\n return this._altitudeProperty;\n }\n\n public get altitude(): number { return this.altitudeProperty.value; }\n public set altitude(value: number) { this.altitudeProperty.value = value; }\n\n private _northProperty: DialogProperty<number> | undefined;\n public get northProperty() {\n if (!this._northProperty)\n this._northProperty = new DialogProperty<number>(new AngleDescription(\"north\", translateMessage(\"North\")), 0.0);\n return this._northProperty;\n }\n\n public get north(): number { return this.northProperty.value; }\n public set north(value: number) { this.northProperty.value = value; }\n\n private syncToolSettingsCoordinates(): void {\n this.syncToolSettingsProperties([this.latitudeProperty.syncItem, this.longitudeProperty.syncItem, this.altitudeProperty.syncItem, this.northProperty.syncItem]);\n }\n\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n return this.changeToolSettingPropertyValue(updatedValue);\n }\n\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n this._haveToolSettings = true;\n const toolSettings = new Array<DialogItem>();\n toolSettings.push(this.latitudeProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\n toolSettings.push(this.longitudeProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\n toolSettings.push(this.altitudeProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\n toolSettings.push(this.northProperty.toDialogItem({ rowPriority: 4, columnIndex: 2 }));\n return toolSettings;\n }\n\n protected provideToolAssistance(): void {\n const acceptMsg = CoreTools.translate(undefined === this._origin ? \"ElementSet.Inputs.AcceptPoint\" : \"ElementSet.Inputs.Accept\");\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyKnownLocation\" : \"ConfirmCoordinates\"));\n const sections: ToolAssistanceSection[] = [];\n\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n\n const touchInstructions: ToolAssistanceInstruction[] = [];\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(undefined === this._origin);\n this.provideToolAssistance();\n }\n\n private pulseDecoration() {\n if (!this._accept)\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n this._scale += 0.1;\n if (this._scale > 1.6)\n this._scale = 1.0;\n\n deco.viewport.invalidateDecorations();\n setTimeout(() => this.pulseDecoration(), 100);\n }\n\n private unsuspendDecorations() {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined !== deco)\n deco.suspendGeolocationDecorations = false;\n }\n\n public override decorate(context: DecorateContext): void {\n if (undefined === this._origin || !context.viewport.view.isSpatialView())\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n deco.suspendGeolocationDecorations = true;\n deco.drawMonumentPoint(context, this._origin, this._scale);\n\n if (undefined !== this._labelDeco)\n this._labelDeco.addDecoration(context);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport || this._accept)\n return;\n\n this._origin = ev.point.clone();\n ev.viewport.invalidateDecorations();\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize(); // Calls onRestartTool to exit...\n return EventHandled.No;\n }\n\n protected acceptDefaultLocation(): void {\n // Greenwich is better default when testing control handle w/o tool settings support...\n this.latitude = Angle.createDegrees(51.4934).radians;\n this.longitude = Angle.createDegrees(0.0098).radians;\n this.altitude = 50.0;\n this.north = 0.0;\n }\n\n public acceptKnownLocation(ev: BeButtonEvent): void {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n this._accept = true; // Require explicit accept to give user a chance to change values...\n this._origin = ev.point.clone();\n this._labelDeco = new LabelDecoration(this._origin, translatePrompt(\"SpecifyCoordinates\"));\n\n if (!this._cartographicFromArgs) {\n if (this.iModel.isGeoLocated) {\n const cartographic = this.iModel.spatialToCartographicFromEcef(this._origin);\n this.latitude = cartographic.latitude;\n this.longitude = cartographic.longitude;\n this.altitude = cartographic.height;\n this.north = deco.getClockwiseAngleToNorth().radians;\n } else if (!this._haveToolSettings) {\n this.acceptDefaultLocation();\n }\n }\n\n this.syncToolSettingsCoordinates();\n this.pulseDecoration(); // Pulse to indicate that we are waiting for user input...\n this.setupAndPromptForNextAction();\n }\n\n public async acceptCoordinates(): Promise<void> {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n const origin = Cartographic.fromRadians({ longitude: this.longitude, latitude: this.latitude, height: this.altitude });\n if (!deco.updateEcefLocation(origin, this._origin, Angle.createRadians(this.north)))\n return;\n\n return this.onReinitialize(); // Calls onRestartTool to exit...\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === ev.viewport)\n return EventHandled.No; // Shouldn't really happen...\n\n const haveKnownLocation = this._accept;\n if (!haveKnownLocation)\n this.acceptKnownLocation(ev);\n\n const needAcceptPoint = !haveKnownLocation && this._haveToolSettings;\n if (!needAcceptPoint)\n await this.acceptCoordinates();\n\n return EventHandled.No;\n }\n\n public override async onInstall(): Promise<boolean> {\n if (!ProjectExtentsClipDecoration.allowEcefLocationChange(false))\n return false;\n\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\n this.initializeToolSettingPropertyValues([this.latitudeProperty, this.longitudeProperty, this.altitudeProperty, this.northProperty]);\n\n return true;\n }\n\n /** The keyin takes the following arguments, all of which are optional:\n * - `latitude=number` Latitude of accept point in degrees.\n * - `longitude=number` Longitude of accept point in degrees.\n * - `altitude=number` Height above ellipsoid of accept point.\n * - `north=number` North direction in degrees of accept point.\n */\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\n for (const arg of inputArgs) {\n const parts = arg.split(\"=\");\n if (2 !== parts.length)\n continue;\n\n if (parts[0].toLowerCase().startsWith(\"la\")) {\n const latitude = Number.parseFloat(parts[1]);\n if (!Number.isNaN(latitude)) {\n this.saveToolSettingPropertyValue(this.latitudeProperty, { value: Angle.createDegrees(latitude).radians });\n this._cartographicFromArgs = true;\n }\n } else if (parts[0].toLowerCase().startsWith(\"lo\")) {\n const longitude = Number.parseFloat(parts[1]);\n if (!Number.isNaN(longitude)) {\n this.saveToolSettingPropertyValue(this.longitudeProperty, { value: Angle.createDegrees(longitude).radians });\n this._cartographicFromArgs = true;\n }\n } else if (parts[0].toLowerCase().startsWith(\"al\")) {\n const altitude = Number.parseFloat(parts[1]);\n if (!Number.isNaN(altitude)) {\n this.saveToolSettingPropertyValue(this.altitudeProperty, { value: altitude });\n this._cartographicFromArgs = true;\n }\n } else if (parts[0].toLowerCase().startsWith(\"no\")) {\n const north = Number.parseFloat(parts[1]);\n if (!Number.isNaN(north)) {\n this.saveToolSettingPropertyValue(this.northProperty, { value: Angle.createDegrees(north).radians });\n this._cartographicFromArgs = true;\n }\n }\n }\n\n return this.run();\n }\n\n public static async startTool(): Promise<boolean> { return new ProjectGeolocationPointTool().run(); }\n}\n\n/** Change or update geolocation direction to true north.\n * @beta\n */\nexport class ProjectGeolocationNorthTool extends PrimitiveTool {\n public static override toolId = \"ProjectLocation.Geolocation.North\";\n public static override iconSpec = \"icon-sort-up\"; // <== Tool button should use whatever icon you have here...\n protected _origin?: Point3d;\n protected _northDir?: Ray3d;\n\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n public override async onCleanup() {\n await super.onCleanup();\n this.unsuspendDecorations();\n }\n public async onRestartTool() { return this.exitTool(); }\n public override async onUnsuspend() { this.provideToolAssistance(); }\n\n protected provideToolAssistance(): void {\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineAngle\"));\n const sections: ToolAssistanceSection[] = [];\n\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n\n const touchInstructions: ToolAssistanceInstruction[] = [];\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n this.provideToolAssistance();\n\n if (undefined === this._origin)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setMatrix(Matrix3d.createIdentity());\n hints.setOrigin(this._origin);\n hints.setModePolar();\n hints.setOriginFixed = true;\n hints.setLockZ = true;\n hints.sendHints();\n }\n\n private getAdjustedPoint(ev: BeButtonEvent): Point3d | undefined {\n if (undefined === this._origin)\n return undefined;\n return AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, this._origin, Vector3d.unitZ(), ev.viewport!, true);\n }\n\n private unsuspendDecorations() {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined !== deco)\n deco.suspendGeolocationDecorations = false;\n }\n\n private updateNorthVector(ev: BeButtonEvent): void {\n if (undefined === ev.viewport)\n return;\n\n if (undefined === this._northDir)\n this._northDir = Ray3d.create(ev.point, Vector3d.unitY());\n else\n this._northDir.origin.setFrom(undefined !== this._origin ? this._origin : ev.point);\n\n const dirPt = this.getAdjustedPoint(ev);\n if (undefined === dirPt)\n return;\n\n this._northDir.direction.setStartEnd(this._northDir.origin, dirPt);\n if (this._northDir.direction.magnitude() < 1.0e-6)\n this._northDir.direction.setFrom(Vector3d.unitY());\n\n this._northDir.direction.z = 0.0;\n this._northDir.direction.normalizeInPlace();\n }\n\n public override decorate(context: DecorateContext): void {\n if (undefined === this._northDir || !context.viewport.view.isSpatialView())\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n deco.suspendGeolocationDecorations = true;\n deco.drawNorthArrow(context, this._northDir);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport)\n return;\n\n this.updateNorthVector(ev);\n ev.viewport.invalidateDecorations();\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize(); // Calls onRestartTool to exit...\n return EventHandled.No;\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === ev.viewport)\n return EventHandled.No; // Shouldn't really happen...\n\n if (undefined === this._origin) {\n this._origin = ev.point.clone();\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n this.updateNorthVector(ev);\n\n if (undefined !== this._northDir) {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined !== deco)\n deco.updateNorthDirection(this._northDir);\n }\n\n await this.onReinitialize(); // Calls onRestartTool to exit...\n return EventHandled.No;\n }\n\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\n\n public static async startTool() { return new ProjectGeolocationNorthTool().run(); }\n}\n\n/** Move a geolocated model by specifying two points to define the offset.\n * @beta\n */\nexport class ProjectGeolocationMoveTool extends PrimitiveTool {\n public static override toolId = \"ProjectLocation.Geolocation.Move\";\n public static override iconSpec = \"icon-move\"; // <== Tool button should use whatever icon you have here...\n protected _origin?: Point3d;\n protected _current?: Point3d;\n\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n public override async onCleanup() {\n await super.onCleanup();\n this.unsuspendDecorations();\n }\n public async onRestartTool() {\n const tool = new ProjectGeolocationMoveTool();\n if (!await tool.run())\n return this.exitTool();\n }\n\n public override async onUnsuspend() { this.provideToolAssistance(); }\n\n protected provideToolAssistance(): void {\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineOffset\"));\n const sections: ToolAssistanceSection[] = [];\n\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n\n const touchInstructions: ToolAssistanceInstruction[] = [];\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n this.provideToolAssistance();\n\n if (undefined === this._origin)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setMatrix(Matrix3d.createIdentity());\n hints.setOrigin(this._origin);\n hints.setModePolar();\n hints.setOriginFixed = true;\n hints.sendHints();\n }\n\n private unsuspendDecorations() {\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined !== deco)\n deco.suspendGeolocationDecorations = false;\n }\n\n private async acceptOffset(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport || undefined === this._origin)\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n const origin = this.iModel.spatialToCartographicFromEcef(ev.point);\n if (!deco.updateEcefLocation(origin, this._origin))\n return;\n\n return this.onReinitialize(); // Calls onRestartTool to exit...\n }\n\n public override decorate(context: DecorateContext): void {\n if (undefined === this._origin || undefined === this._current || !context.viewport.view.isSpatialView())\n return;\n\n const deco = ProjectExtentsClipDecoration.get();\n if (undefined === deco)\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n const colorAccHid = colorAccVis.withAlpha(100);\n\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\n\n const extents = this.iModel.projectExtents.cloneTranslated(Vector3d.createStartEnd(this._origin, this._current));\n\n builderAccVis.addRangeBox(extents);\n builderAccHid.addRangeBox(extents);\n builderAccHid.addLineString([this._origin, this._current]);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n\n deco.suspendGeolocationDecorations = true;\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport)\n return;\n\n this._current = ev.point;\n ev.viewport.invalidateDecorations();\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this._origin)\n await this.exitTool(); // exit to select tool if we haven't gotten first point...\n else\n await this.onReinitialize(); // Calls onRestartTool...\n return EventHandled.No;\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === ev.viewport)\n return EventHandled.No; // Shouldn't really happen...\n\n if (undefined === this._origin) {\n this._origin = ev.point.clone();\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n await this.acceptOffset(ev);\n return EventHandled.No;\n }\n\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\n\n public static async startTool() { return new ProjectGeolocationMoveTool().run(); }\n}\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TransformElementsTool.d.ts","sourceRoot":"","sources":["../../src/TransformElementsTool.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAsB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAA2F,SAAS,EAA4B,MAAM,oBAAoB,CAAC;AAClK,OAAO,EAAuB,aAAa,EAAE,eAAe,EAAE,cAAc,EAA4B,gBAAgB,EAAiG,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACzR,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKjD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,yBAAyB;IACpC,SAAgB,MAAM,EAAE,gBAAgB,CAAC;IACzC,SAAgB,IAAI,EAAE,qBAAqB,EAAE,CAAC;IAC9C,SAAgB,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACjD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IAClE,cAAc,SAAQ;gBAEjB,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM;IAOpD,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,iBAAiB;YAEX,aAAa;IAgC3B,OAAO,CAAC,iBAAiB;YAQX,qBAAqB;IAYnC;;KAEC;IACY,mBAAmB,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlE;;;;OAIG;IACI,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAoB9C;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAQ9F,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;CAWzE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,8BAAsB,qBAAsB,SAAQ,cAAc;IAChE,cAAuB,iBAAiB,IAAI,OAAO,CAAiB;IACpE,cAAuB,WAAW,IAAI,OAAO,CAAiB;IAC9D,cAAuB,eAAe,IAAI,OAAO,CAAiB;IAClE,cAAuB,4BAA4B,IAAI,OAAO,CAAiB;IAC/E,cAAuB,YAAY,IAAI,OAAO,CAAiB;IAC/D,cAAuB,YAAY,IAAI,OAAO,CAAiB;IAC/D,SAAS,KAAK,YAAY,IAAI,OAAO,CAAkB;IACvD,SAAS,KAAK,mBAAmB,IAAI,OAAO,CAAsD;IAClG,SAAS,CAAC,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IACxD,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE/B,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS;cAE/D,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;cAsBrD,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;cAO3B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;cAIjC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/D,SAAS,CAAC,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAKvE,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAOjF,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;cAY1C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;cAM/B,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;cAmBzD,sBAAsB,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;cAI3E,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9C,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,SAAS;CAIhC"}
1
+ {"version":3,"file":"TransformElementsTool.d.ts","sourceRoot":"","sources":["../../src/TransformElementsTool.ts"],"names":[],"mappings":"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"}
@@ -232,7 +232,7 @@ class TransformElementsTool extends core_frontend_1.ElementSetTool {
232
232
  async transformAgenda(transform) {
233
233
  try {
234
234
  this._startedCmd = await this.startCommand();
235
- if (core_common_1.IModelStatus.Success === await EditToolIpc_1.basicManipulationIpc.transformPlacement(this.agenda.compressIds(), transform.toJSON()))
235
+ if (core_bentley_1.IModelStatus.Success === await EditToolIpc_1.basicManipulationIpc.transformPlacement(this.agenda.compressIds(), transform.toJSON()))
236
236
  await this.saveChanges();
237
237
  }
238
238
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"TransformElementsTool.js","sourceRoot":"","sources":["../../src/TransformElementsTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { BentleyError, Id64, Id64Arg, Id64String } from \"@itwin/core-bentley\";\nimport { GeometricElementProps, IModelStatus, isPlacement2dProps, PersistentGraphicsRequestProps, Placement, Placement2d, Placement3d } from \"@itwin/core-common\";\nimport { AccuDrawHintBuilder, BeButtonEvent, DynamicsContext, ElementSetTool, GraphicBranch, IModelApp, IModelConnection, IpcApp, ModifyElementSource, NotifyMessageDetails, OutputMessagePriority, readElementGraphics, RenderGraphic, RenderGraphicOwner } from \"@itwin/core-frontend\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { editorBuiltInCmdIds } from \"@itwin/editor-common\";\nimport { EditTools } from \"./EditTool\";\nimport { basicManipulationIpc } from \"./EditToolIpc\";\n\n/** Geometric element id, placement, and RenderGraphic managed by [[TransformGraphicsProvider]].\n * @beta\n */\nexport interface TransformGraphicsData {\n id: Id64String;\n placement: Placement;\n graphic: RenderGraphicOwner;\n}\n\n/** A class for creating and managing RenderGraphics representing geometric elements for the purpose of interactive tool dynamics.\n * @beta\n */\nexport class TransformGraphicsProvider {\n public readonly iModel: IModelConnection;\n public readonly data: TransformGraphicsData[];\n public readonly pending: Map<Id64String, string>;\n public readonly prefix: string;\n /** Chord tolerance to use to stroke the element's geometry in meters. */\n public chordTolerance = 0.01;\n\n constructor(iModel: IModelConnection, prefix: string) {\n this.iModel = iModel;\n this.prefix = prefix;\n this.data = new Array<TransformGraphicsData>();\n this.pending = new Map<Id64String, string>();\n }\n\n private getRequestId(id: Id64String): string { return `${this.prefix}-${id}`; }\n private getToleranceLog10(): number { return Math.floor(Math.log10(this.chordTolerance)); }\n\n private async createRequest(id: Id64String): Promise<TransformGraphicsData | undefined> {\n const elementProps = (await this.iModel.elements.getProps(id)) as GeometricElementProps[];\n if (0 === elementProps.length)\n return;\n\n const placementProps = elementProps[0].placement;\n if (undefined === placementProps)\n return;\n\n const placement = isPlacement2dProps(placementProps) ? Placement2d.fromJSON(placementProps) : Placement3d.fromJSON(placementProps);\n if (!placement.isValid)\n return; // Ignore assembly parents w/o geometry, etc...\n\n const requestProps: PersistentGraphicsRequestProps = {\n id: this.getRequestId(id),\n elementId: id,\n toleranceLog10: this.getToleranceLog10(),\n };\n\n this.pending.set(id, requestProps.id); // keep track of requests so they can be cancelled...\n\n const graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\n if (undefined === graphicData)\n return;\n\n const graphic = await readElementGraphics(graphicData, this.iModel, elementProps[0].model, placement.is3d, { noFlash: true, noHilite: true });\n if (undefined === graphic)\n return;\n\n return { id, placement, graphic: IModelApp.renderSystem.createGraphicOwner(graphic) };\n }\n\n private disposeOfGraphics(): void {\n this.data.forEach((data) => {\n data.graphic.disposeGraphic();\n });\n\n this.data.length = 0;\n }\n\n private async cancelPendingRequests(): Promise<void> {\n const requests = new Array<string>();\n for (const [_key, id] of this.pending)\n requests.push(id);\n\n this.pending.clear();\n if (0 === requests.length)\n return;\n\n return IpcApp.appFunctionIpc.cancelElementGraphicsRequests(this.iModel.key, requests);\n }\n\n /** Call to request a RenderGraphic for the supplied element id.\n * @see [[cleanupGraphics]] Must be called when the tool exits.\n */\n public async createSingleGraphic(id: Id64String): Promise<boolean> {\n try {\n const info = await this.createRequest(id);\n\n if (undefined !== info?.id)\n this.pending.delete(info.id);\n\n if (undefined === info?.graphic)\n return false;\n\n this.data.push(info);\n return true;\n } catch {\n return false;\n }\n }\n\n /** Call to request RenderGraphics for the supplied element ids. Does not wait for results as\n * generating graphics for a large number of elements can take time. Instead an array of [[RenderGraphicOwner]]\n * is populated as requests are resolved and the current dynamics frame displays what is available.\n * @see [[cleanupGraphics]] Must be called when the tool exits.\n */\n public createGraphics(elements: Id64Arg): void {\n if (0 === Id64.sizeOf(elements))\n return;\n\n try {\n for (const id of Id64.iterable(elements)) {\n const promise = this.createRequest(id);\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n promise.then((info) => {\n if (undefined !== info?.id)\n this.pending.delete(info.id);\n\n if (undefined !== info?.graphic)\n this.data.push(info);\n });\n }\n } catch { }\n }\n\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]] and cancel requests that are still pending.\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\n */\n public async cleanupGraphics(): Promise<void> {\n await this.cancelPendingRequests();\n this.disposeOfGraphics();\n }\n\n public addSingleGraphic(graphic: RenderGraphic, transform: Transform, context: DynamicsContext): void {\n const branch = new GraphicBranch(false);\n branch.add(graphic);\n\n const branchGraphic = context.createBranch(branch, transform);\n context.addGraphic(branchGraphic);\n }\n\n public addGraphics(transform: Transform, context: DynamicsContext): void {\n if (0 === this.data.length)\n return;\n\n const branch = new GraphicBranch(false);\n for (const data of this.data)\n branch.add(data.graphic);\n\n const branchGraphic = context.createBranch(branch, transform);\n context.addGraphic(branchGraphic);\n }\n}\n\n/** Edit tool base class for applying a transform to element placements.\n * Example of a tool that would translate elements:\n * ```ts\n * class SampleMoveElementsTool extends TransformElementsTool {\n * public static override toolId = \"SampleMoveElements\";\n * public static override iconSpec = \"icon-move\";\n * protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\n * return (this.anchorPoint ? Transform.createTranslation(ev.point.minus(this.anchorPoint)) : undefined);\n * }\n * public async onRestartTool(): Promise<void> {\n * const tool = new SampleMoveElementsTool();\n * if (!await tool.run()) return this.exitTool();\n * }\n * }\n * ```\n * @beta\n */\nexport abstract class TransformElementsTool extends ElementSetTool {\n protected override get allowSelectionSet(): boolean { return true; }\n protected override get allowGroups(): boolean { return true; }\n protected override get allowDragSelect(): boolean { return true; }\n protected override get controlKeyContinuesSelection(): boolean { return true; }\n protected override get wantAccuSnap(): boolean { return true; }\n protected override get wantDynamics(): boolean { return true; }\n protected get wantMakeCopy(): boolean { return false; }\n protected get wantRepeatOperation(): boolean { return this.wantMakeCopy && !this.agenda.isEmpty; }\n protected _graphicsProvider?: TransformGraphicsProvider;\n protected _startedCmd?: string;\n\n protected abstract calculateTransform(ev: BeButtonEvent): Transform | undefined;\n\n protected async createAgendaGraphics(changed: boolean): Promise<void> {\n if (changed) {\n if (undefined === this._graphicsProvider)\n return; // Not yet needed...\n } else {\n if (undefined !== this._graphicsProvider)\n return; // Use existing graphics...\n }\n\n if (undefined === this._graphicsProvider)\n this._graphicsProvider = new TransformGraphicsProvider(this.iModel, this.toolId);\n else\n await this._graphicsProvider.cleanupGraphics();\n\n if (1 === this.agenda.length) {\n await this._graphicsProvider.createSingleGraphic(this.agenda.elements[0]);\n return;\n }\n\n this._graphicsProvider.createGraphics(this.agenda.elements);\n }\n\n protected async clearAgendaGraphics(): Promise<void> {\n if (undefined === this._graphicsProvider)\n return;\n await this._graphicsProvider.cleanupGraphics();\n this._graphicsProvider = undefined;\n }\n\n protected override async onAgendaModified(): Promise<void> {\n await this.createAgendaGraphics(true);\n }\n\n protected override async initAgendaDynamics(): Promise<boolean> {\n await this.createAgendaGraphics(false);\n return super.initAgendaDynamics();\n }\n\n protected transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\n if (undefined !== this._graphicsProvider)\n this._graphicsProvider.addGraphics(transform, context);\n }\n\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\n const transform = this.calculateTransform(ev);\n if (undefined === transform)\n return;\n this.transformAgendaDynamics(transform, context);\n }\n\n protected updateAnchorLocation(transform: Transform): void {\n // Update anchor point to support creating additional copies (repeat vs. restart)...\n if (undefined === this.anchorPoint)\n return;\n\n transform.multiplyPoint3d(this.anchorPoint, this.anchorPoint);\n\n const hints = new AccuDrawHintBuilder();\n hints.setOrigin(this.anchorPoint);\n hints.sendHints();\n }\n\n protected async startCommand(): Promise<string> {\n if (undefined !== this._startedCmd)\n return this._startedCmd;\n return EditTools.startCommand<string>({ commandId: editorBuiltInCmdIds.cmdBasicManipulation, iModelKey: this.iModel.key });\n }\n\n protected async replaceAgenda(newIds: Id64Arg | undefined): Promise<void> {\n this.agenda.clear();\n\n if (undefined !== newIds)\n this.agenda.add(newIds);\n\n if (this.isSelectionSetModify) {\n if (this.agenda.isEmpty)\n this.iModel.selectionSet.emptyAll();\n else\n this.iModel.selectionSet.replace(this.agenda.elements);\n\n this.agenda.setSource(ModifyElementSource.SelectionSet);\n this.setPreferredElementSource(); // Update \"use selection set\" flag...\n }\n\n return this.onAgendaModified();\n }\n\n protected async transformAndCopyAgenda(_transform: Transform): Promise<Id64Arg | undefined> {\n return undefined;\n }\n\n protected async transformAgenda(transform: Transform): Promise<void> {\n try {\n this._startedCmd = await this.startCommand();\n if (IModelStatus.Success === await basicManipulationIpc.transformPlacement(this.agenda.compressIds(), transform.toJSON()))\n await this.saveChanges();\n } catch (err) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\n }\n }\n\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\n const transform = this.calculateTransform(ev);\n if (undefined === transform)\n return;\n\n if (this.wantMakeCopy)\n await this.replaceAgenda(await this.transformAndCopyAgenda(transform));\n else\n await this.transformAgenda(transform);\n\n this.updateAnchorLocation(transform);\n }\n\n public override async onProcessComplete(): Promise<void> {\n if (this.wantRepeatOperation)\n return; // Continue with current agenda instead of restarting (ex. create additional copies)\n return super.onProcessComplete();\n }\n\n public override async onCleanup() {\n await this.clearAgendaGraphics();\n return super.onCleanup();\n }\n}\n\n"]}
1
+ {"version":3,"file":"TransformElementsTool.js","sourceRoot":"","sources":["../../src/TransformElementsTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { BentleyError, Id64, Id64Arg, Id64String, IModelStatus } from \"@itwin/core-bentley\";\nimport { GeometricElementProps, isPlacement2dProps, PersistentGraphicsRequestProps, Placement, Placement2d, Placement3d } from \"@itwin/core-common\";\nimport { AccuDrawHintBuilder, BeButtonEvent, DynamicsContext, ElementSetTool, GraphicBranch, IModelApp, IModelConnection, IpcApp, ModifyElementSource, NotifyMessageDetails, OutputMessagePriority, readElementGraphics, RenderGraphic, RenderGraphicOwner } from \"@itwin/core-frontend\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { editorBuiltInCmdIds } from \"@itwin/editor-common\";\nimport { EditTools } from \"./EditTool\";\nimport { basicManipulationIpc } from \"./EditToolIpc\";\n\n/** Geometric element id, placement, and RenderGraphic managed by [[TransformGraphicsProvider]].\n * @beta\n */\nexport interface TransformGraphicsData {\n id: Id64String;\n placement: Placement;\n graphic: RenderGraphicOwner;\n}\n\n/** A class for creating and managing RenderGraphics representing geometric elements for the purpose of interactive tool dynamics.\n * @beta\n */\nexport class TransformGraphicsProvider {\n public readonly iModel: IModelConnection;\n public readonly data: TransformGraphicsData[];\n public readonly pending: Map<Id64String, string>;\n public readonly prefix: string;\n /** Chord tolerance to use to stroke the element's geometry in meters. */\n public chordTolerance = 0.01;\n\n constructor(iModel: IModelConnection, prefix: string) {\n this.iModel = iModel;\n this.prefix = prefix;\n this.data = new Array<TransformGraphicsData>();\n this.pending = new Map<Id64String, string>();\n }\n\n private getRequestId(id: Id64String): string { return `${this.prefix}-${id}`; }\n private getToleranceLog10(): number { return Math.floor(Math.log10(this.chordTolerance)); }\n\n private async createRequest(id: Id64String): Promise<TransformGraphicsData | undefined> {\n const elementProps = (await this.iModel.elements.getProps(id)) as GeometricElementProps[];\n if (0 === elementProps.length)\n return;\n\n const placementProps = elementProps[0].placement;\n if (undefined === placementProps)\n return;\n\n const placement = isPlacement2dProps(placementProps) ? Placement2d.fromJSON(placementProps) : Placement3d.fromJSON(placementProps);\n if (!placement.isValid)\n return; // Ignore assembly parents w/o geometry, etc...\n\n const requestProps: PersistentGraphicsRequestProps = {\n id: this.getRequestId(id),\n elementId: id,\n toleranceLog10: this.getToleranceLog10(),\n };\n\n this.pending.set(id, requestProps.id); // keep track of requests so they can be cancelled...\n\n const graphicData = await IModelApp.tileAdmin.requestElementGraphics(this.iModel, requestProps);\n if (undefined === graphicData)\n return;\n\n const graphic = await readElementGraphics(graphicData, this.iModel, elementProps[0].model, placement.is3d, { noFlash: true, noHilite: true });\n if (undefined === graphic)\n return;\n\n return { id, placement, graphic: IModelApp.renderSystem.createGraphicOwner(graphic) };\n }\n\n private disposeOfGraphics(): void {\n this.data.forEach((data) => {\n data.graphic.disposeGraphic();\n });\n\n this.data.length = 0;\n }\n\n private async cancelPendingRequests(): Promise<void> {\n const requests = new Array<string>();\n for (const [_key, id] of this.pending)\n requests.push(id);\n\n this.pending.clear();\n if (0 === requests.length)\n return;\n\n return IpcApp.appFunctionIpc.cancelElementGraphicsRequests(this.iModel.key, requests);\n }\n\n /** Call to request a RenderGraphic for the supplied element id.\n * @see [[cleanupGraphics]] Must be called when the tool exits.\n */\n public async createSingleGraphic(id: Id64String): Promise<boolean> {\n try {\n const info = await this.createRequest(id);\n\n if (undefined !== info?.id)\n this.pending.delete(info.id);\n\n if (undefined === info?.graphic)\n return false;\n\n this.data.push(info);\n return true;\n } catch {\n return false;\n }\n }\n\n /** Call to request RenderGraphics for the supplied element ids. Does not wait for results as\n * generating graphics for a large number of elements can take time. Instead an array of [[RenderGraphicOwner]]\n * is populated as requests are resolved and the current dynamics frame displays what is available.\n * @see [[cleanupGraphics]] Must be called when the tool exits.\n */\n public createGraphics(elements: Id64Arg): void {\n if (0 === Id64.sizeOf(elements))\n return;\n\n try {\n for (const id of Id64.iterable(elements)) {\n const promise = this.createRequest(id);\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n promise.then((info) => {\n if (undefined !== info?.id)\n this.pending.delete(info.id);\n\n if (undefined !== info?.graphic)\n this.data.push(info);\n });\n }\n } catch { }\n }\n\n /** Call to dispose of [[RenderGraphic]] held by [[RenderGraphicOwner]] and cancel requests that are still pending.\n * @note Must be called when the tool exits to avoid leaks of graphics memory or other webgl resources.\n */\n public async cleanupGraphics(): Promise<void> {\n await this.cancelPendingRequests();\n this.disposeOfGraphics();\n }\n\n public addSingleGraphic(graphic: RenderGraphic, transform: Transform, context: DynamicsContext): void {\n const branch = new GraphicBranch(false);\n branch.add(graphic);\n\n const branchGraphic = context.createBranch(branch, transform);\n context.addGraphic(branchGraphic);\n }\n\n public addGraphics(transform: Transform, context: DynamicsContext): void {\n if (0 === this.data.length)\n return;\n\n const branch = new GraphicBranch(false);\n for (const data of this.data)\n branch.add(data.graphic);\n\n const branchGraphic = context.createBranch(branch, transform);\n context.addGraphic(branchGraphic);\n }\n}\n\n/** Edit tool base class for applying a transform to element placements.\n * Example of a tool that would translate elements:\n * ```ts\n * class SampleMoveElementsTool extends TransformElementsTool {\n * public static override toolId = \"SampleMoveElements\";\n * public static override iconSpec = \"icon-move\";\n * protected calculateTransform(ev: BeButtonEvent): Transform | undefined {\n * return (this.anchorPoint ? Transform.createTranslation(ev.point.minus(this.anchorPoint)) : undefined);\n * }\n * public async onRestartTool(): Promise<void> {\n * const tool = new SampleMoveElementsTool();\n * if (!await tool.run()) return this.exitTool();\n * }\n * }\n * ```\n * @beta\n */\nexport abstract class TransformElementsTool extends ElementSetTool {\n protected override get allowSelectionSet(): boolean { return true; }\n protected override get allowGroups(): boolean { return true; }\n protected override get allowDragSelect(): boolean { return true; }\n protected override get controlKeyContinuesSelection(): boolean { return true; }\n protected override get wantAccuSnap(): boolean { return true; }\n protected override get wantDynamics(): boolean { return true; }\n protected get wantMakeCopy(): boolean { return false; }\n protected get wantRepeatOperation(): boolean { return this.wantMakeCopy && !this.agenda.isEmpty; }\n protected _graphicsProvider?: TransformGraphicsProvider;\n protected _startedCmd?: string;\n\n protected abstract calculateTransform(ev: BeButtonEvent): Transform | undefined;\n\n protected async createAgendaGraphics(changed: boolean): Promise<void> {\n if (changed) {\n if (undefined === this._graphicsProvider)\n return; // Not yet needed...\n } else {\n if (undefined !== this._graphicsProvider)\n return; // Use existing graphics...\n }\n\n if (undefined === this._graphicsProvider)\n this._graphicsProvider = new TransformGraphicsProvider(this.iModel, this.toolId);\n else\n await this._graphicsProvider.cleanupGraphics();\n\n if (1 === this.agenda.length) {\n await this._graphicsProvider.createSingleGraphic(this.agenda.elements[0]);\n return;\n }\n\n this._graphicsProvider.createGraphics(this.agenda.elements);\n }\n\n protected async clearAgendaGraphics(): Promise<void> {\n if (undefined === this._graphicsProvider)\n return;\n await this._graphicsProvider.cleanupGraphics();\n this._graphicsProvider = undefined;\n }\n\n protected override async onAgendaModified(): Promise<void> {\n await this.createAgendaGraphics(true);\n }\n\n protected override async initAgendaDynamics(): Promise<boolean> {\n await this.createAgendaGraphics(false);\n return super.initAgendaDynamics();\n }\n\n protected transformAgendaDynamics(transform: Transform, context: DynamicsContext): void {\n if (undefined !== this._graphicsProvider)\n this._graphicsProvider.addGraphics(transform, context);\n }\n\n public override onDynamicFrame(ev: BeButtonEvent, context: DynamicsContext): void {\n const transform = this.calculateTransform(ev);\n if (undefined === transform)\n return;\n this.transformAgendaDynamics(transform, context);\n }\n\n protected updateAnchorLocation(transform: Transform): void {\n // Update anchor point to support creating additional copies (repeat vs. restart)...\n if (undefined === this.anchorPoint)\n return;\n\n transform.multiplyPoint3d(this.anchorPoint, this.anchorPoint);\n\n const hints = new AccuDrawHintBuilder();\n hints.setOrigin(this.anchorPoint);\n hints.sendHints();\n }\n\n protected async startCommand(): Promise<string> {\n if (undefined !== this._startedCmd)\n return this._startedCmd;\n return EditTools.startCommand<string>({ commandId: editorBuiltInCmdIds.cmdBasicManipulation, iModelKey: this.iModel.key });\n }\n\n protected async replaceAgenda(newIds: Id64Arg | undefined): Promise<void> {\n this.agenda.clear();\n\n if (undefined !== newIds)\n this.agenda.add(newIds);\n\n if (this.isSelectionSetModify) {\n if (this.agenda.isEmpty)\n this.iModel.selectionSet.emptyAll();\n else\n this.iModel.selectionSet.replace(this.agenda.elements);\n\n this.agenda.setSource(ModifyElementSource.SelectionSet);\n this.setPreferredElementSource(); // Update \"use selection set\" flag...\n }\n\n return this.onAgendaModified();\n }\n\n protected async transformAndCopyAgenda(_transform: Transform): Promise<Id64Arg | undefined> {\n return undefined;\n }\n\n protected async transformAgenda(transform: Transform): Promise<void> {\n try {\n this._startedCmd = await this.startCommand();\n if (IModelStatus.Success === await basicManipulationIpc.transformPlacement(this.agenda.compressIds(), transform.toJSON()))\n await this.saveChanges();\n } catch (err) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, BentleyError.getErrorMessage(err) || \"An unknown error occurred.\"));\n }\n }\n\n public override async processAgenda(ev: BeButtonEvent): Promise<void> {\n const transform = this.calculateTransform(ev);\n if (undefined === transform)\n return;\n\n if (this.wantMakeCopy)\n await this.replaceAgenda(await this.transformAndCopyAgenda(transform));\n else\n await this.transformAgenda(transform);\n\n this.updateAnchorLocation(transform);\n }\n\n public override async onProcessComplete(): Promise<void> {\n if (this.wantRepeatOperation)\n return; // Continue with current agenda instead of restarting (ex. create additional copies)\n return super.onProcessComplete();\n }\n\n public override async onCleanup() {\n await this.clearAgendaGraphics();\n return super.onCleanup();\n }\n}\n\n"]}
@@ -13,6 +13,7 @@ const core_frontend_1 = require("@itwin/core-frontend");
13
13
  * @beta
14
14
  */
15
15
  class UndoAllTool extends core_frontend_1.Tool {
16
+ static { this.toolId = "UndoAll"; }
16
17
  async run() {
17
18
  const imodel = core_frontend_1.IModelApp.viewManager.selectedView?.view.iModel;
18
19
  if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection)
@@ -22,27 +23,26 @@ class UndoAllTool extends core_frontend_1.Tool {
22
23
  }
23
24
  }
24
25
  exports.UndoAllTool = UndoAllTool;
25
- UndoAllTool.toolId = "UndoAll";
26
26
  /** Undo active tool steps, or element changes
27
27
  * @beta
28
28
  */
29
29
  class UndoTool extends core_frontend_1.Tool {
30
+ static { this.toolId = "Undo"; }
30
31
  async run() {
31
32
  await core_frontend_1.IModelApp.toolAdmin.doUndoOperation();
32
33
  return true;
33
34
  }
34
35
  }
35
36
  exports.UndoTool = UndoTool;
36
- UndoTool.toolId = "Undo";
37
37
  /** Redo active tool steps, or element changes
38
38
  * @beta
39
39
  */
40
40
  class RedoTool extends core_frontend_1.Tool {
41
+ static { this.toolId = "Redo"; }
41
42
  async run() {
42
43
  await core_frontend_1.IModelApp.toolAdmin.doRedoOperation();
43
44
  return true;
44
45
  }
45
46
  }
46
47
  exports.RedoTool = RedoTool;
47
- RedoTool.toolId = "Redo";
48
48
  //# sourceMappingURL=UndoRedoTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UndoRedoTool.js","sourceRoot":"","sources":["../../src/UndoRedoTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,wDAA+D;AAE/D;;GAEG;AACH,MAAa,WAAY,SAAQ,oBAAI;IAEnB,KAAK,CAAC,GAAG;QACvB,MAAM,MAAM,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;QAC/D,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,qBAAqB;YAC5E,OAAO,IAAI,CAAC;QAEd,MAAM,sBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;;AATH,kCAUC;AATwB,kBAAM,GAAG,SAAS,CAAC;AAW5C;;GAEG;AACH,MAAa,QAAS,SAAQ,oBAAI;IAEhB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AALH,4BAMC;AALwB,eAAM,GAAG,MAAM,CAAC;AAOzC;;GAEG;AACH,MAAa,QAAS,SAAQ,oBAAI;IAEhB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AALH,4BAMC;AALwB,eAAM,GAAG,MAAM,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { IModelApp, IpcApp, Tool } from \"@itwin/core-frontend\";\n\n/** Undo all element changes\n * @beta\n */\nexport class UndoAllTool extends Tool {\n public static override toolId = \"UndoAll\";\n public override async run(): Promise<boolean> {\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection)\n return true;\n\n await IpcApp.appFunctionIpc.reverseAllTxn(imodel.key);\n return true;\n }\n}\n\n/** Undo active tool steps, or element changes\n * @beta\n */\nexport class UndoTool extends Tool {\n public static override toolId = \"Undo\";\n public override async run(): Promise<boolean> {\n await IModelApp.toolAdmin.doUndoOperation();\n return true;\n }\n}\n\n/** Redo active tool steps, or element changes\n * @beta\n */\nexport class RedoTool extends Tool {\n public static override toolId = \"Redo\";\n public override async run(): Promise<boolean> {\n await IModelApp.toolAdmin.doRedoOperation();\n return true;\n }\n}\n\n"]}
1
+ {"version":3,"file":"UndoRedoTool.js","sourceRoot":"","sources":["../../src/UndoRedoTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,wDAA+D;AAE/D;;GAEG;AACH,MAAa,WAAY,SAAQ,oBAAI;aACZ,WAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,CAAC,GAAG;QACvB,MAAM,MAAM,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;QAC/D,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,qBAAqB;YAC5E,OAAO,IAAI,CAAC;QAEd,MAAM,sBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;;AATH,kCAUC;AAED;;GAEG;AACH,MAAa,QAAS,SAAQ,oBAAI;aACT,WAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AALH,4BAMC;AAED;;GAEG;AACH,MAAa,QAAS,SAAQ,oBAAI;aACT,WAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,GAAG;QACvB,MAAM,yBAAS,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;;AALH,4BAMC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { IModelApp, IpcApp, Tool } from \"@itwin/core-frontend\";\n\n/** Undo all element changes\n * @beta\n */\nexport class UndoAllTool extends Tool {\n public static override toolId = \"UndoAll\";\n public override async run(): Promise<boolean> {\n const imodel = IModelApp.viewManager.selectedView?.view.iModel;\n if (undefined === imodel || imodel.isReadonly || !imodel.isBriefcaseConnection)\n return true;\n\n await IpcApp.appFunctionIpc.reverseAllTxn(imodel.key);\n return true;\n }\n}\n\n/** Undo active tool steps, or element changes\n * @beta\n */\nexport class UndoTool extends Tool {\n public static override toolId = \"Undo\";\n public override async run(): Promise<boolean> {\n await IModelApp.toolAdmin.doUndoOperation();\n return true;\n }\n}\n\n/** Redo active tool steps, or element changes\n * @beta\n */\nexport class RedoTool extends Tool {\n public static override toolId = \"Redo\";\n public override async run(): Promise<boolean> {\n await IModelApp.toolAdmin.doRedoOperation();\n return true;\n }\n}\n\n"]}
@@ -16,6 +16,9 @@ import * as ProjectGeoLocation from "./ProjectLocation/ProjectGeolocation";
16
16
  * @beta
17
17
  */
18
18
  export class EditTools {
19
+ static { this.namespace = "Editor"; }
20
+ static { this.tools = "Editor:tools."; }
21
+ static { this._initialized = false; }
19
22
  static async startCommand(startArg, ...cmdArgs) {
20
23
  let attempt = 0;
21
24
  while (true) {
@@ -74,7 +77,4 @@ export class EditTools {
74
77
  this._initialized = false;
75
78
  }
76
79
  }
77
- EditTools.namespace = "Editor";
78
- EditTools.tools = "Editor:tools.";
79
- EditTools._initialized = false;
80
80
  //# sourceMappingURL=EditTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { _callIpcChannel, IModelApp, IpcApp } from \"@itwin/core-frontend\";\nimport { editorIpcStrings } from \"@itwin/editor-common\";\n\nimport * as UndoRedoTools from \"./UndoRedoTool\";\nimport * as ProjectLocation from \"./ProjectLocation/ProjectExtentsDecoration\";\nimport * as ProjectGeoLocation from \"./ProjectLocation/ProjectGeolocation\";\n\n/** @beta */\nexport namespace EditTools {\n export interface StartArgs {\n commandId: string;\n iModelKey: string;\n }\n /** handler for retries when an EditTool attempts to start but a backend command is busy and can't finish its work.\n * @param attempt the number of times this handler was previously called for this EditTool\n * @param msg the message about what's happening from the currently busy EditCommand.\n * @returns the delay (in milliseconds) before attempting again. If `undefined` use default (usually 1 second)\n */\n export type BusyRetry = (attempt: number, msg: string) => Promise<number | undefined>;\n}\n\n/**\n * Supports PrimitiveTool and InputCollector sub-classes.\n * @beta\n */\nexport class EditTools {\n public static readonly namespace = \"Editor\";\n public static readonly tools = \"Editor:tools.\";\n public static busyRetry?: EditTools.BusyRetry;\n private static _initialized = false;\n\n public static async startCommand<T>(startArg: EditTools.StartArgs, ...cmdArgs: any[]): Promise<T> {\n let attempt = 0;\n while (true) {\n try {\n return await (IpcApp[_callIpcChannel](editorIpcStrings.channel, \"startCommand\", startArg.commandId, startArg.iModelKey, ...cmdArgs) as Promise<T>);\n } catch (e: any) {\n if (e.name !== editorIpcStrings.commandBusy)\n throw e; // unknown backend error\n const delay = await this.busyRetry?.(attempt++, e.message) ?? 1000;\n await BeDuration.fromMilliseconds(delay).wait();\n }\n }\n }\n\n /** @internal */\n public static translate(prompt: string) {\n return IModelApp.localization.getLocalizedString(this.tools + prompt);\n }\n\n /** Call this before using the package (e.g., before attempting to use any of its tools.)\n * To initialize when starting up your app:\n * ```ts\n * IModelApp.startup();\n * await EditorTools.initialize();\n * ```\n * @note This registers tools for element undo and redo.\n */\n public static async initialize(): Promise<void> {\n if (this._initialized)\n return;\n\n this._initialized = true;\n\n // clean up if we're being shut down\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\n\n // Make sure current edit command finishes before starting a new primitive tool...\n IModelApp.toolAdmin.setEditCommandHandler(this);\n\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\n\n const tools = IModelApp.tools;\n tools.registerModule(UndoRedoTools, this.namespace);\n\n return namespacePromise;\n }\n\n /** Can be called after initialize to register tools for changing project extents and geolocation.\n * @note Requires backend to register BasicManipulationCommand with EditCommandAdmin.\n */\n public static registerProjectLocationTools(): void {\n if (!this._initialized)\n return;\n const tools = IModelApp.tools;\n tools.registerModule(ProjectLocation, this.namespace);\n tools.registerModule(ProjectGeoLocation, this.namespace);\n }\n\n /** @internal */\n public static async finishCommand(): Promise<string> {\n return this.startCommand<string>({ commandId: \"\", iModelKey: \"\" });\n }\n\n private static shutdown() {\n IModelApp.toolAdmin.setEditCommandHandler();\n this._initialized = false;\n }\n}\n"]}
1
+ {"version":3,"file":"EditTool.js","sourceRoot":"","sources":["../../src/EditTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { _callIpcChannel, IModelApp, IpcApp } from \"@itwin/core-frontend\";\nimport { editorIpcStrings } from \"@itwin/editor-common\";\n\nimport * as UndoRedoTools from \"./UndoRedoTool\";\nimport * as ProjectLocation from \"./ProjectLocation/ProjectExtentsDecoration\";\nimport * as ProjectGeoLocation from \"./ProjectLocation/ProjectGeolocation\";\n\n/** @beta */\nexport namespace EditTools {\n export interface StartArgs {\n commandId: string;\n iModelKey: string;\n }\n /** handler for retries when an EditTool attempts to start but a backend command is busy and can't finish its work.\n * @param attempt the number of times this handler was previously called for this EditTool\n * @param msg the message about what's happening from the currently busy EditCommand.\n * @returns the delay (in milliseconds) before attempting again. If `undefined` use default (usually 1 second)\n */\n export type BusyRetry = (attempt: number, msg: string) => Promise<number | undefined>;\n}\n\n/**\n * Supports PrimitiveTool and InputCollector sub-classes.\n * @beta\n */\nexport class EditTools {\n public static readonly namespace = \"Editor\";\n public static readonly tools = \"Editor:tools.\";\n public static busyRetry?: EditTools.BusyRetry;\n private static _initialized = false;\n\n public static async startCommand<T>(startArg: EditTools.StartArgs, ...cmdArgs: any[]): Promise<T> {\n let attempt = 0;\n while (true) {\n try {\n return await (IpcApp[_callIpcChannel](editorIpcStrings.channel, \"startCommand\", startArg.commandId, startArg.iModelKey, ...cmdArgs) as Promise<T>);\n } catch (e: any) {\n if (e.name !== editorIpcStrings.commandBusy)\n throw e; // unknown backend error\n const delay = await this.busyRetry?.(attempt++, e.message) ?? 1000;\n await BeDuration.fromMilliseconds(delay).wait();\n }\n }\n }\n\n /** @internal */\n public static translate(prompt: string) {\n return IModelApp.localization.getLocalizedString(this.tools + prompt);\n }\n\n /** Call this before using the package (e.g., before attempting to use any of its tools.)\n * To initialize when starting up your app:\n * ```ts\n * IModelApp.startup();\n * await EditorTools.initialize();\n * ```\n * @note This registers tools for element undo and redo.\n */\n public static async initialize(): Promise<void> {\n if (this._initialized)\n return;\n\n this._initialized = true;\n\n // clean up if we're being shut down\n IModelApp.onBeforeShutdown.addListener(() => this.shutdown());\n\n // Make sure current edit command finishes before starting a new primitive tool...\n IModelApp.toolAdmin.setEditCommandHandler(this);\n\n const namespacePromise = IModelApp.localization.registerNamespace(this.namespace);\n\n const tools = IModelApp.tools;\n tools.registerModule(UndoRedoTools, this.namespace);\n\n return namespacePromise;\n }\n\n /** Can be called after initialize to register tools for changing project extents and geolocation.\n * @note Requires backend to register BasicManipulationCommand with EditCommandAdmin.\n */\n public static registerProjectLocationTools(): void {\n if (!this._initialized)\n return;\n const tools = IModelApp.tools;\n tools.registerModule(ProjectLocation, this.namespace);\n tools.registerModule(ProjectGeoLocation, this.namespace);\n }\n\n /** @internal */\n public static async finishCommand(): Promise<string> {\n return this.startCommand<string>({ commandId: \"\", iModelKey: \"\" });\n }\n\n private static shutdown() {\n IModelApp.toolAdmin.setEditCommandHandler();\n this._initialized = false;\n }\n}\n"]}
@@ -100,7 +100,7 @@ export class ProjectExtentsClipDecoration extends EditManipulator.HandleProvider
100
100
  this.iModel.selectionSet.replace(this._clipId); // Always select decoration on create...
101
101
  }
102
102
  stop() {
103
- const selectedId = (undefined !== this._clipId && this.iModel.selectionSet.has(this._clipId)) ? this._clipId : undefined;
103
+ const selectedId = (undefined !== this._clipId && this.iModel.selectionSet.elements.has(this._clipId)) ? this._clipId : undefined;
104
104
  this._clipId = undefined; // Invalidate id so that decorator will be dropped...
105
105
  super.stop();
106
106
  if (undefined !== selectedId)
@@ -210,7 +210,7 @@ export class ProjectExtentsClipDecoration extends EditManipulator.HandleProvider
210
210
  }
211
211
  // Show controls if only range box and it's controls are selected, selection set doesn't include any other elements...
212
212
  let showControls = false;
213
- if (this.iModel.selectionSet.size <= this._controlIds.length + 1 && this.iModel.selectionSet.has(this._clipId)) {
213
+ if (this.iModel.selectionSet.size <= this._controlIds.length + 1 && this.iModel.selectionSet.elements.has(this._clipId)) {
214
214
  showControls = true;
215
215
  if (this.iModel.selectionSet.size > 1) {
216
216
  this.iModel.selectionSet.elements.forEach((val) => {
@@ -533,7 +533,7 @@ export class ProjectExtentsClipDecoration extends EditManipulator.HandleProvider
533
533
  const hidPts = shapePts.map((pt) => pt.clone());
534
534
  const arrowVisBuilder = context.createGraphicBuilder(GraphicType.WorldOverlay, transform, this._controlIds[iFace]);
535
535
  const arrowHidBuilder = context.createGraphicBuilder(GraphicType.WorldDecoration, transform);
536
- const isSelected = this.iModel.selectionSet.has(this._controlIds[iFace]);
536
+ const isSelected = this.iModel.selectionSet.elements.has(this._controlIds[iFace]);
537
537
  let outlineColorOvr = this._controls[iFace].outline;
538
538
  if (undefined !== outlineColorOvr) {
539
539
  outlineColorOvr = outlineColorOvr.adjustedForContrast(vp.view.backgroundColor);
@@ -725,6 +725,7 @@ export class ProjectExtentsClipDecoration extends EditManipulator.HandleProvider
725
725
  * @beta
726
726
  */
727
727
  export class ProjectLocationShowTool extends Tool {
728
+ static { this.toolId = "ProjectLocation.Show"; }
728
729
  async run() {
729
730
  const vp = IModelApp.viewManager.selectedView;
730
731
  if (undefined === vp || !ProjectExtentsClipDecoration.show(vp))
@@ -733,35 +734,35 @@ export class ProjectLocationShowTool extends Tool {
733
734
  return true;
734
735
  }
735
736
  }
736
- ProjectLocationShowTool.toolId = "ProjectLocation.Show";
737
737
  /** Hide project location decoration. Preserves changes to project extents view clip and geolocation.
738
738
  * @beta
739
739
  */
740
740
  export class ProjectLocationHideTool extends Tool {
741
+ static { this.toolId = "ProjectLocation.Hide"; }
741
742
  async run() {
742
743
  ProjectExtentsClipDecoration.hide();
743
744
  await IModelApp.toolAdmin.startDefaultTool();
744
745
  return true;
745
746
  }
746
747
  }
747
- ProjectLocationHideTool.toolId = "ProjectLocation.Hide";
748
748
  /** Clear project location decoration. Restore modified geolocation and remove view clip.
749
749
  * @beta
750
750
  */
751
751
  export class ProjectLocationCancelTool extends Tool {
752
+ static { this.toolId = "ProjectLocation.Cancel"; }
752
753
  async run() {
753
754
  ProjectExtentsClipDecoration.clear();
754
755
  await IModelApp.toolAdmin.startDefaultTool();
755
756
  return true;
756
757
  }
757
758
  }
758
- ProjectLocationCancelTool.toolId = "ProjectLocation.Cancel";
759
759
  /** Save modified project extents and geolocation. Updates decoration to reflect saved state.
760
760
  * @note Allowing this change to be undone is both problematic and undesirable.
761
761
  * Warns the user if called with previous changes to cancel restarting the TxnManager session.
762
762
  * @beta
763
763
  */
764
764
  export class ProjectLocationSaveTool extends Tool {
765
+ static { this.toolId = "ProjectLocation.Save"; }
765
766
  async allowRestartTxnSession(iModel) {
766
767
  if (!await iModel.txns.isUndoPossible())
767
768
  return true;
@@ -811,5 +812,4 @@ export class ProjectLocationSaveTool extends Tool {
811
812
  return true;
812
813
  }
813
814
  }
814
- ProjectLocationSaveTool.toolId = "ProjectLocation.Save";
815
815
  //# sourceMappingURL=ProjectExtentsDecoration.js.map