@itwin/editor-frontend 5.11.0-dev.8 → 5.12.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -1
- package/lib/cjs/ProjectLocation/ProjectGeolocation.d.ts.map +1 -1
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js +16 -4
- package/lib/cjs/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/lib/esm/ProjectLocation/ProjectGeolocation.d.ts.map +1 -1
- package/lib/esm/ProjectLocation/ProjectGeolocation.js +17 -5
- package/lib/esm/ProjectLocation/ProjectGeolocation.js.map +1 -1
- package/package.json +14 -14
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# Change Log - @itwin/editor-frontend
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Tue, 16 Jun 2026 13:00:23 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 5.10.3
|
|
6
|
+
Tue, 16 Jun 2026 12:58:32 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
9
|
+
|
|
10
|
+
## 5.10.2
|
|
11
|
+
Thu, 11 Jun 2026 21:09:38 GMT
|
|
12
|
+
|
|
13
|
+
_Version update only_
|
|
4
14
|
|
|
5
15
|
## 5.10.1
|
|
6
16
|
Mon, 08 Jun 2026 18:45:58 GMT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectGeolocation.d.ts","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"ProjectGeolocation.d.ts","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,7 +88,10 @@ class ProjectGeolocationPointTool extends core_frontend_1.PrimitiveTool {
|
|
|
88
88
|
_latitudeProperty;
|
|
89
89
|
get latitudeProperty() {
|
|
90
90
|
if (!this._latitudeProperty)
|
|
91
|
-
this._latitudeProperty = new appui_abstract_1.DialogProperty(
|
|
91
|
+
this._latitudeProperty = new appui_abstract_1.DialogProperty((0, core_frontend_1.createQuantityDescription)({
|
|
92
|
+
name: "latitude", displayLabel: translateMessage("Latitude"),
|
|
93
|
+
kindOfQuantityName: "DefaultToolsUnits.ANGLE", persistenceUnitName: "Units.RAD",
|
|
94
|
+
}), 0.0);
|
|
92
95
|
return this._latitudeProperty;
|
|
93
96
|
}
|
|
94
97
|
get latitude() { return this.latitudeProperty.value; }
|
|
@@ -96,7 +99,10 @@ class ProjectGeolocationPointTool extends core_frontend_1.PrimitiveTool {
|
|
|
96
99
|
_longitudeProperty;
|
|
97
100
|
get longitudeProperty() {
|
|
98
101
|
if (!this._longitudeProperty)
|
|
99
|
-
this._longitudeProperty = new appui_abstract_1.DialogProperty(
|
|
102
|
+
this._longitudeProperty = new appui_abstract_1.DialogProperty((0, core_frontend_1.createQuantityDescription)({
|
|
103
|
+
name: "longitude", displayLabel: translateMessage("Longitude"),
|
|
104
|
+
kindOfQuantityName: "DefaultToolsUnits.ANGLE", persistenceUnitName: "Units.RAD",
|
|
105
|
+
}), 0.0);
|
|
100
106
|
return this._longitudeProperty;
|
|
101
107
|
}
|
|
102
108
|
get longitude() { return this.longitudeProperty.value; }
|
|
@@ -104,7 +110,10 @@ class ProjectGeolocationPointTool extends core_frontend_1.PrimitiveTool {
|
|
|
104
110
|
_altitudeProperty;
|
|
105
111
|
get altitudeProperty() {
|
|
106
112
|
if (!this._altitudeProperty)
|
|
107
|
-
this._altitudeProperty = new appui_abstract_1.DialogProperty(
|
|
113
|
+
this._altitudeProperty = new appui_abstract_1.DialogProperty((0, core_frontend_1.createQuantityDescription)({
|
|
114
|
+
name: "altitude", displayLabel: core_frontend_1.CoreTools.translate("Measure.Labels.Altitude"),
|
|
115
|
+
kindOfQuantityName: "DefaultToolsUnits.LENGTH", persistenceUnitName: "Units.M",
|
|
116
|
+
}), 0.0);
|
|
108
117
|
return this._altitudeProperty;
|
|
109
118
|
}
|
|
110
119
|
get altitude() { return this.altitudeProperty.value; }
|
|
@@ -112,7 +121,10 @@ class ProjectGeolocationPointTool extends core_frontend_1.PrimitiveTool {
|
|
|
112
121
|
_northProperty;
|
|
113
122
|
get northProperty() {
|
|
114
123
|
if (!this._northProperty)
|
|
115
|
-
this._northProperty = new appui_abstract_1.DialogProperty(
|
|
124
|
+
this._northProperty = new appui_abstract_1.DialogProperty((0, core_frontend_1.createQuantityDescription)({
|
|
125
|
+
name: "north", displayLabel: translateMessage("North"),
|
|
126
|
+
kindOfQuantityName: "DefaultToolsUnits.ANGLE", persistenceUnitName: "Units.RAD",
|
|
127
|
+
}), 0.0);
|
|
116
128
|
return this._northProperty;
|
|
117
129
|
}
|
|
118
130
|
get north() { return this.northProperty.value; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectGeolocation.js","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { AccuDrawHintBuilder, AngleDescription, BeButtonEvent, CanvasDecoration, CoreTools, DecorateContext, EventHandled, GraphicType, IModelApp, LengthDescription, PrimitiveTool, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport } from \"@itwin/core-frontend\";\r\nimport { Angle, Matrix3d, Point3d, Ray3d, Vector3d, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { Cartographic, ColorDef, LinePixels } from \"@itwin/core-common\";\r\nimport { ProjectExtentsClipDecoration } from \"./ProjectExtentsDecoration\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem } from \"@itwin/appui-abstract\";\r\nimport { EditTools } from \"../EditTool\";\r\n\r\nfunction translatePrompt(key: string) {\r\n return EditTools.translate(`ProjectLocation:Prompts.${key}`);\r\n}\r\nfunction translateMessage(key: string) {\r\n return EditTools.translate(`ProjectLocation:Message.${key}`);\r\n}\r\n\r\n/** @internal */\r\nclass LabelDecoration implements CanvasDecoration {\r\n public worldLocation = new Point3d();\r\n public position = new Point3d();\r\n public label: string;\r\n\r\n constructor(worldLocation: XYAndZ, label: string) {\r\n this.worldLocation.setFrom(worldLocation);\r\n this.label = label;\r\n }\r\n\r\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\r\n ctx.font = \"16px san-serif\";\r\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\r\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"white\";\r\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\r\n ctx.shadowColor = \"black\";\r\n ctx.shadowBlur = 10;\r\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n\r\n ctx.fillStyle = \"white\";\r\n ctx.shadowBlur = 0;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(this.label, 0, 0);\r\n }\r\n\r\n public setPosition(vp: Viewport): boolean {\r\n vp.worldToView(this.worldLocation, this.position);\r\n this.position.y -= Math.floor(vp.pixelsFromInches(0.45)) + 0.5; // Offset from world location...\r\n return vp.viewRect.containsPoint(this.position);\r\n }\r\n\r\n public addDecoration(context: DecorateContext) {\r\n if (this.setPosition(context.viewport))\r\n context.addCanvasDecoration(this);\r\n }\r\n}\r\n\r\n/** Change or update geolocation for project.\r\n * To show tool settings for specifying lat/long, make sure formatting and parsing data are cached before the tool starts\r\n * by calling QuantityFormatter.onInitialized at app startup.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationPointTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.Point\";\r\n public static override iconSpec = \"icon-globe\"; // <== Tool button should use whatever icon you have here...\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 4; } // latitude, longitude, altitude, north direction...\r\n\r\n protected _haveToolSettings = false;\r\n protected _cartographicFromArgs = false;\r\n\r\n protected _accept = false;\r\n protected _scale = 1.0;\r\n protected _origin?: Point3d;\r\n protected _labelDeco?: LabelDecoration;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n\r\n public async onRestartTool() { return this.exitTool(); }\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n private _latitudeProperty: DialogProperty<number> | undefined;\r\n public get latitudeProperty() {\r\n if (!this._latitudeProperty)\r\n this._latitudeProperty = new DialogProperty<number>(new AngleDescription(\"latitude\", translateMessage(\"Latitude\")), 0.0);\r\n return this._latitudeProperty;\r\n }\r\n\r\n public get latitude(): number { return this.latitudeProperty.value; }\r\n public set latitude(value: number) { this.latitudeProperty.value = value; }\r\n\r\n private _longitudeProperty: DialogProperty<number> | undefined;\r\n public get longitudeProperty() {\r\n if (!this._longitudeProperty)\r\n this._longitudeProperty = new DialogProperty<number>(new AngleDescription(\"longitude\", translateMessage(\"Longitude\")), 0.0);\r\n return this._longitudeProperty;\r\n }\r\n\r\n public get longitude(): number { return this.longitudeProperty.value; }\r\n public set longitude(value: number) { this.longitudeProperty.value = value; }\r\n\r\n private _altitudeProperty: DialogProperty<number> | undefined;\r\n public get altitudeProperty() {\r\n if (!this._altitudeProperty)\r\n this._altitudeProperty = new DialogProperty<number>(new LengthDescription(\"altitude\", CoreTools.translate(\"Measure.Labels.Altitude\")), 0.0);\r\n return this._altitudeProperty;\r\n }\r\n\r\n public get altitude(): number { return this.altitudeProperty.value; }\r\n public set altitude(value: number) { this.altitudeProperty.value = value; }\r\n\r\n private _northProperty: DialogProperty<number> | undefined;\r\n public get northProperty() {\r\n if (!this._northProperty)\r\n this._northProperty = new DialogProperty<number>(new AngleDescription(\"north\", translateMessage(\"North\")), 0.0);\r\n return this._northProperty;\r\n }\r\n\r\n public get north(): number { return this.northProperty.value; }\r\n public set north(value: number) { this.northProperty.value = value; }\r\n\r\n private syncToolSettingsCoordinates(): void {\r\n this.syncToolSettingsProperties([this.latitudeProperty.syncItem, this.longitudeProperty.syncItem, this.altitudeProperty.syncItem, this.northProperty.syncItem]);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this._haveToolSettings = true;\r\n const toolSettings = new Array<DialogItem>();\r\n toolSettings.push(this.latitudeProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n toolSettings.push(this.longitudeProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\r\n toolSettings.push(this.altitudeProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\r\n toolSettings.push(this.northProperty.toDialogItem({ rowPriority: 4, columnIndex: 2 }));\r\n return toolSettings;\r\n }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(undefined === this._origin ? \"ElementSet.Inputs.AcceptPoint\" : \"ElementSet.Inputs.Accept\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyKnownLocation\" : \"ConfirmCoordinates\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(undefined === this._origin);\r\n this.provideToolAssistance();\r\n }\r\n\r\n private pulseDecoration() {\r\n if (!this._accept)\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n this._scale += 0.1;\r\n if (this._scale > 1.6)\r\n this._scale = 1.0;\r\n\r\n deco.viewport.invalidateDecorations();\r\n setTimeout(() => this.pulseDecoration(), 100);\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._origin || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n deco.drawMonumentPoint(context, this._origin, this._scale);\r\n\r\n if (undefined !== this._labelDeco)\r\n this._labelDeco.addDecoration(context);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || this._accept)\r\n return;\r\n\r\n this._origin = ev.point.clone();\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n protected acceptDefaultLocation(): void {\r\n // Greenwich is better default when testing control handle w/o tool settings support...\r\n this.latitude = Angle.createDegrees(51.4934).radians;\r\n this.longitude = Angle.createDegrees(0.0098).radians;\r\n this.altitude = 50.0;\r\n this.north = 0.0;\r\n }\r\n\r\n public acceptKnownLocation(ev: BeButtonEvent): void {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n this._accept = true; // Require explicit accept to give user a chance to change values...\r\n this._origin = ev.point.clone();\r\n this._labelDeco = new LabelDecoration(this._origin, translatePrompt(\"SpecifyCoordinates\"));\r\n\r\n if (!this._cartographicFromArgs) {\r\n if (this.iModel.isGeoLocated) {\r\n const cartographic = this.iModel.spatialToCartographicFromEcef(this._origin);\r\n this.latitude = cartographic.latitude;\r\n this.longitude = cartographic.longitude;\r\n this.altitude = cartographic.height;\r\n this.north = deco.getClockwiseAngleToNorth().radians;\r\n } else if (!this._haveToolSettings) {\r\n this.acceptDefaultLocation();\r\n }\r\n }\r\n\r\n this.syncToolSettingsCoordinates();\r\n this.pulseDecoration(); // Pulse to indicate that we are waiting for user input...\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n public async acceptCoordinates(): Promise<void> {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const origin = Cartographic.fromRadians({ longitude: this.longitude, latitude: this.latitude, height: this.altitude });\r\n if (!deco.updateEcefLocation(origin, this._origin, Angle.createRadians(this.north)))\r\n return;\r\n\r\n return this.onReinitialize(); // Calls onRestartTool to exit...\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n const haveKnownLocation = this._accept;\r\n if (!haveKnownLocation)\r\n this.acceptKnownLocation(ev);\r\n\r\n const needAcceptPoint = !haveKnownLocation && this._haveToolSettings;\r\n if (!needAcceptPoint)\r\n await this.acceptCoordinates();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (!ProjectExtentsClipDecoration.allowEcefLocationChange(false))\r\n return false;\r\n\r\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\r\n this.initializeToolSettingPropertyValues([this.latitudeProperty, this.longitudeProperty, this.altitudeProperty, this.northProperty]);\r\n\r\n return true;\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `latitude=number` Latitude of accept point in degrees.\r\n * - `longitude=number` Longitude of accept point in degrees.\r\n * - `altitude=number` Height above ellipsoid of accept point.\r\n * - `north=number` North direction in degrees of accept point.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"la\")) {\r\n const latitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(latitude)) {\r\n this.saveToolSettingPropertyValue(this.latitudeProperty, { value: Angle.createDegrees(latitude).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"lo\")) {\r\n const longitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(longitude)) {\r\n this.saveToolSettingPropertyValue(this.longitudeProperty, { value: Angle.createDegrees(longitude).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"al\")) {\r\n const altitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(altitude)) {\r\n this.saveToolSettingPropertyValue(this.altitudeProperty, { value: altitude });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"no\")) {\r\n const north = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(north)) {\r\n this.saveToolSettingPropertyValue(this.northProperty, { value: Angle.createDegrees(north).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n }\r\n }\r\n\r\n return this.run();\r\n }\r\n\r\n public static async startTool(): Promise<boolean> { return new ProjectGeolocationPointTool().run(); }\r\n}\r\n\r\n/** Change or update geolocation direction to true north.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationNorthTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.North\";\r\n public static override iconSpec = \"icon-sort-up\"; // <== Tool button should use whatever icon you have here...\r\n protected _origin?: Point3d;\r\n protected _northDir?: Ray3d;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n public async onRestartTool() { return this.exitTool(); }\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineAngle\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.provideToolAssistance();\r\n\r\n if (undefined === this._origin)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setMatrix(Matrix3d.createIdentity());\r\n hints.setOrigin(this._origin);\r\n hints.setModePolar();\r\n hints.setOriginFixed = true;\r\n hints.setLockZ = true;\r\n hints.sendHints();\r\n }\r\n\r\n private getAdjustedPoint(ev: BeButtonEvent): Point3d | undefined {\r\n if (undefined === this._origin || undefined === ev.viewport)\r\n return undefined;\r\n return AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, this._origin, Vector3d.unitZ(), ev.viewport, true);\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n private updateNorthVector(ev: BeButtonEvent): void {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n if (undefined === this._northDir)\r\n this._northDir = Ray3d.create(ev.point, Vector3d.unitY());\r\n else\r\n this._northDir.origin.setFrom(undefined !== this._origin ? this._origin : ev.point);\r\n\r\n const dirPt = this.getAdjustedPoint(ev);\r\n if (undefined === dirPt)\r\n return;\r\n\r\n this._northDir.direction.setStartEnd(this._northDir.origin, dirPt);\r\n if (this._northDir.direction.magnitude() < 1.0e-6)\r\n this._northDir.direction.setFrom(Vector3d.unitY());\r\n\r\n this._northDir.direction.z = 0.0;\r\n this._northDir.direction.normalizeInPlace();\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._northDir || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n deco.drawNorthArrow(context, this._northDir);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n this.updateNorthVector(ev);\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n if (undefined === this._origin) {\r\n this._origin = ev.point.clone();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n this.updateNorthVector(ev);\r\n\r\n if (undefined !== this._northDir) {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.updateNorthDirection(this._northDir);\r\n }\r\n\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\r\n\r\n public static async startTool() { return new ProjectGeolocationNorthTool().run(); }\r\n}\r\n\r\n/** Move a geolocated model by specifying two points to define the offset.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationMoveTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.Move\";\r\n public static override iconSpec = \"icon-move\"; // <== Tool button should use whatever icon you have here...\r\n protected _origin?: Point3d;\r\n protected _current?: Point3d;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n public async onRestartTool() {\r\n const tool = new ProjectGeolocationMoveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineOffset\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.provideToolAssistance();\r\n\r\n if (undefined === this._origin)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setMatrix(Matrix3d.createIdentity());\r\n hints.setOrigin(this._origin);\r\n hints.setModePolar();\r\n hints.setOriginFixed = true;\r\n hints.sendHints();\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n private async acceptOffset(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || undefined === this._origin)\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const origin = this.iModel.spatialToCartographicFromEcef(ev.point);\r\n if (!deco.updateEcefLocation(origin, this._origin))\r\n return;\r\n\r\n return this.onReinitialize(); // Calls onRestartTool to exit...\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._origin || undefined === this._current || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n const colorAccHid = colorAccVis.withAlpha(100);\r\n\r\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\r\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\r\n\r\n const extents = this.iModel.projectExtents.cloneTranslated(Vector3d.createStartEnd(this._origin, this._current));\r\n\r\n builderAccVis.addRangeBox(extents);\r\n builderAccHid.addRangeBox(extents);\r\n builderAccHid.addLineString([this._origin, this._current]);\r\n\r\n context.addDecorationFromBuilder(builderAccVis);\r\n context.addDecorationFromBuilder(builderAccHid);\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n this._current = ev.point;\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === this._origin)\r\n await this.exitTool(); // exit to select tool if we haven't gotten first point...\r\n else\r\n await this.onReinitialize(); // Calls onRestartTool...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n if (undefined === this._origin) {\r\n this._origin = ev.point.clone();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n await this.acceptOffset(ev);\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\r\n\r\n public static async startTool() { return new ProjectGeolocationMoveTool().run(); }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"ProjectGeolocation.js","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { AccuDrawHintBuilder, BeButtonEvent, CanvasDecoration, CoreTools, createQuantityDescription, DecorateContext, EventHandled, GraphicType, IModelApp, PrimitiveTool, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport } from \"@itwin/core-frontend\";\r\nimport { Angle, Matrix3d, Point3d, Ray3d, Vector3d, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { Cartographic, ColorDef, LinePixels } from \"@itwin/core-common\";\r\nimport { ProjectExtentsClipDecoration } from \"./ProjectExtentsDecoration\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem } from \"@itwin/appui-abstract\";\r\nimport { EditTools } from \"../EditTool\";\r\n\r\nfunction translatePrompt(key: string) {\r\n return EditTools.translate(`ProjectLocation:Prompts.${key}`);\r\n}\r\nfunction translateMessage(key: string) {\r\n return EditTools.translate(`ProjectLocation:Message.${key}`);\r\n}\r\n\r\n/** @internal */\r\nclass LabelDecoration implements CanvasDecoration {\r\n public worldLocation = new Point3d();\r\n public position = new Point3d();\r\n public label: string;\r\n\r\n constructor(worldLocation: XYAndZ, label: string) {\r\n this.worldLocation.setFrom(worldLocation);\r\n this.label = label;\r\n }\r\n\r\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\r\n ctx.font = \"16px san-serif\";\r\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\r\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"white\";\r\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\r\n ctx.shadowColor = \"black\";\r\n ctx.shadowBlur = 10;\r\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n\r\n ctx.fillStyle = \"white\";\r\n ctx.shadowBlur = 0;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(this.label, 0, 0);\r\n }\r\n\r\n public setPosition(vp: Viewport): boolean {\r\n vp.worldToView(this.worldLocation, this.position);\r\n this.position.y -= Math.floor(vp.pixelsFromInches(0.45)) + 0.5; // Offset from world location...\r\n return vp.viewRect.containsPoint(this.position);\r\n }\r\n\r\n public addDecoration(context: DecorateContext) {\r\n if (this.setPosition(context.viewport))\r\n context.addCanvasDecoration(this);\r\n }\r\n}\r\n\r\n/** Change or update geolocation for project.\r\n * To show tool settings for specifying lat/long, make sure formatting and parsing data are cached before the tool starts\r\n * by calling QuantityFormatter.onInitialized at app startup.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationPointTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.Point\";\r\n public static override iconSpec = \"icon-globe\"; // <== Tool button should use whatever icon you have here...\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 4; } // latitude, longitude, altitude, north direction...\r\n\r\n protected _haveToolSettings = false;\r\n protected _cartographicFromArgs = false;\r\n\r\n protected _accept = false;\r\n protected _scale = 1.0;\r\n protected _origin?: Point3d;\r\n protected _labelDeco?: LabelDecoration;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n\r\n public async onRestartTool() { return this.exitTool(); }\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n private _latitudeProperty: DialogProperty<number> | undefined;\r\n public get latitudeProperty() {\r\n if (!this._latitudeProperty)\r\n this._latitudeProperty = new DialogProperty<number>(createQuantityDescription({\r\n name: \"latitude\", displayLabel: translateMessage(\"Latitude\"),\r\n kindOfQuantityName: \"DefaultToolsUnits.ANGLE\", persistenceUnitName: \"Units.RAD\",\r\n }), 0.0);\r\n return this._latitudeProperty;\r\n }\r\n\r\n public get latitude(): number { return this.latitudeProperty.value; }\r\n public set latitude(value: number) { this.latitudeProperty.value = value; }\r\n\r\n private _longitudeProperty: DialogProperty<number> | undefined;\r\n public get longitudeProperty() {\r\n if (!this._longitudeProperty)\r\n this._longitudeProperty = new DialogProperty<number>(createQuantityDescription({\r\n name: \"longitude\", displayLabel: translateMessage(\"Longitude\"),\r\n kindOfQuantityName: \"DefaultToolsUnits.ANGLE\", persistenceUnitName: \"Units.RAD\",\r\n }), 0.0);\r\n return this._longitudeProperty;\r\n }\r\n\r\n public get longitude(): number { return this.longitudeProperty.value; }\r\n public set longitude(value: number) { this.longitudeProperty.value = value; }\r\n\r\n private _altitudeProperty: DialogProperty<number> | undefined;\r\n public get altitudeProperty() {\r\n if (!this._altitudeProperty)\r\n this._altitudeProperty = new DialogProperty<number>(createQuantityDescription({\r\n name: \"altitude\", displayLabel: CoreTools.translate(\"Measure.Labels.Altitude\"),\r\n kindOfQuantityName: \"DefaultToolsUnits.LENGTH\", persistenceUnitName: \"Units.M\",\r\n }), 0.0);\r\n return this._altitudeProperty;\r\n }\r\n\r\n public get altitude(): number { return this.altitudeProperty.value; }\r\n public set altitude(value: number) { this.altitudeProperty.value = value; }\r\n\r\n private _northProperty: DialogProperty<number> | undefined;\r\n public get northProperty() {\r\n if (!this._northProperty)\r\n this._northProperty = new DialogProperty<number>(createQuantityDescription({\r\n name: \"north\", displayLabel: translateMessage(\"North\"),\r\n kindOfQuantityName: \"DefaultToolsUnits.ANGLE\", persistenceUnitName: \"Units.RAD\",\r\n }), 0.0);\r\n return this._northProperty;\r\n }\r\n\r\n public get north(): number { return this.northProperty.value; }\r\n public set north(value: number) { this.northProperty.value = value; }\r\n\r\n private syncToolSettingsCoordinates(): void {\r\n this.syncToolSettingsProperties([this.latitudeProperty.syncItem, this.longitudeProperty.syncItem, this.altitudeProperty.syncItem, this.northProperty.syncItem]);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this._haveToolSettings = true;\r\n const toolSettings = new Array<DialogItem>();\r\n toolSettings.push(this.latitudeProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n toolSettings.push(this.longitudeProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\r\n toolSettings.push(this.altitudeProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\r\n toolSettings.push(this.northProperty.toDialogItem({ rowPriority: 4, columnIndex: 2 }));\r\n return toolSettings;\r\n }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(undefined === this._origin ? \"ElementSet.Inputs.AcceptPoint\" : \"ElementSet.Inputs.Accept\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyKnownLocation\" : \"ConfirmCoordinates\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(undefined === this._origin);\r\n this.provideToolAssistance();\r\n }\r\n\r\n private pulseDecoration() {\r\n if (!this._accept)\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n this._scale += 0.1;\r\n if (this._scale > 1.6)\r\n this._scale = 1.0;\r\n\r\n deco.viewport.invalidateDecorations();\r\n setTimeout(() => this.pulseDecoration(), 100);\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._origin || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n deco.drawMonumentPoint(context, this._origin, this._scale);\r\n\r\n if (undefined !== this._labelDeco)\r\n this._labelDeco.addDecoration(context);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || this._accept)\r\n return;\r\n\r\n this._origin = ev.point.clone();\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n protected acceptDefaultLocation(): void {\r\n // Greenwich is better default when testing control handle w/o tool settings support...\r\n this.latitude = Angle.createDegrees(51.4934).radians;\r\n this.longitude = Angle.createDegrees(0.0098).radians;\r\n this.altitude = 50.0;\r\n this.north = 0.0;\r\n }\r\n\r\n public acceptKnownLocation(ev: BeButtonEvent): void {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n this._accept = true; // Require explicit accept to give user a chance to change values...\r\n this._origin = ev.point.clone();\r\n this._labelDeco = new LabelDecoration(this._origin, translatePrompt(\"SpecifyCoordinates\"));\r\n\r\n if (!this._cartographicFromArgs) {\r\n if (this.iModel.isGeoLocated) {\r\n const cartographic = this.iModel.spatialToCartographicFromEcef(this._origin);\r\n this.latitude = cartographic.latitude;\r\n this.longitude = cartographic.longitude;\r\n this.altitude = cartographic.height;\r\n this.north = deco.getClockwiseAngleToNorth().radians;\r\n } else if (!this._haveToolSettings) {\r\n this.acceptDefaultLocation();\r\n }\r\n }\r\n\r\n this.syncToolSettingsCoordinates();\r\n this.pulseDecoration(); // Pulse to indicate that we are waiting for user input...\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n public async acceptCoordinates(): Promise<void> {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const origin = Cartographic.fromRadians({ longitude: this.longitude, latitude: this.latitude, height: this.altitude });\r\n if (!deco.updateEcefLocation(origin, this._origin, Angle.createRadians(this.north)))\r\n return;\r\n\r\n return this.onReinitialize(); // Calls onRestartTool to exit...\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n const haveKnownLocation = this._accept;\r\n if (!haveKnownLocation)\r\n this.acceptKnownLocation(ev);\r\n\r\n const needAcceptPoint = !haveKnownLocation && this._haveToolSettings;\r\n if (!needAcceptPoint)\r\n await this.acceptCoordinates();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (!ProjectExtentsClipDecoration.allowEcefLocationChange(false))\r\n return false;\r\n\r\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\r\n this.initializeToolSettingPropertyValues([this.latitudeProperty, this.longitudeProperty, this.altitudeProperty, this.northProperty]);\r\n\r\n return true;\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `latitude=number` Latitude of accept point in degrees.\r\n * - `longitude=number` Longitude of accept point in degrees.\r\n * - `altitude=number` Height above ellipsoid of accept point.\r\n * - `north=number` North direction in degrees of accept point.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"la\")) {\r\n const latitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(latitude)) {\r\n this.saveToolSettingPropertyValue(this.latitudeProperty, { value: Angle.createDegrees(latitude).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"lo\")) {\r\n const longitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(longitude)) {\r\n this.saveToolSettingPropertyValue(this.longitudeProperty, { value: Angle.createDegrees(longitude).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"al\")) {\r\n const altitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(altitude)) {\r\n this.saveToolSettingPropertyValue(this.altitudeProperty, { value: altitude });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"no\")) {\r\n const north = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(north)) {\r\n this.saveToolSettingPropertyValue(this.northProperty, { value: Angle.createDegrees(north).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n }\r\n }\r\n\r\n return this.run();\r\n }\r\n\r\n public static async startTool(): Promise<boolean> { return new ProjectGeolocationPointTool().run(); }\r\n}\r\n\r\n/** Change or update geolocation direction to true north.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationNorthTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.North\";\r\n public static override iconSpec = \"icon-sort-up\"; // <== Tool button should use whatever icon you have here...\r\n protected _origin?: Point3d;\r\n protected _northDir?: Ray3d;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n public async onRestartTool() { return this.exitTool(); }\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineAngle\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.provideToolAssistance();\r\n\r\n if (undefined === this._origin)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setMatrix(Matrix3d.createIdentity());\r\n hints.setOrigin(this._origin);\r\n hints.setModePolar();\r\n hints.setOriginFixed = true;\r\n hints.setLockZ = true;\r\n hints.sendHints();\r\n }\r\n\r\n private getAdjustedPoint(ev: BeButtonEvent): Point3d | undefined {\r\n if (undefined === this._origin || undefined === ev.viewport)\r\n return undefined;\r\n return AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, this._origin, Vector3d.unitZ(), ev.viewport, true);\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n private updateNorthVector(ev: BeButtonEvent): void {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n if (undefined === this._northDir)\r\n this._northDir = Ray3d.create(ev.point, Vector3d.unitY());\r\n else\r\n this._northDir.origin.setFrom(undefined !== this._origin ? this._origin : ev.point);\r\n\r\n const dirPt = this.getAdjustedPoint(ev);\r\n if (undefined === dirPt)\r\n return;\r\n\r\n this._northDir.direction.setStartEnd(this._northDir.origin, dirPt);\r\n if (this._northDir.direction.magnitude() < 1.0e-6)\r\n this._northDir.direction.setFrom(Vector3d.unitY());\r\n\r\n this._northDir.direction.z = 0.0;\r\n this._northDir.direction.normalizeInPlace();\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._northDir || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n deco.drawNorthArrow(context, this._northDir);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n this.updateNorthVector(ev);\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n if (undefined === this._origin) {\r\n this._origin = ev.point.clone();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n this.updateNorthVector(ev);\r\n\r\n if (undefined !== this._northDir) {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.updateNorthDirection(this._northDir);\r\n }\r\n\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\r\n\r\n public static async startTool() { return new ProjectGeolocationNorthTool().run(); }\r\n}\r\n\r\n/** Move a geolocated model by specifying two points to define the offset.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationMoveTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.Move\";\r\n public static override iconSpec = \"icon-move\"; // <== Tool button should use whatever icon you have here...\r\n protected _origin?: Point3d;\r\n protected _current?: Point3d;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n public async onRestartTool() {\r\n const tool = new ProjectGeolocationMoveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineOffset\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.provideToolAssistance();\r\n\r\n if (undefined === this._origin)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setMatrix(Matrix3d.createIdentity());\r\n hints.setOrigin(this._origin);\r\n hints.setModePolar();\r\n hints.setOriginFixed = true;\r\n hints.sendHints();\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n private async acceptOffset(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || undefined === this._origin)\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const origin = this.iModel.spatialToCartographicFromEcef(ev.point);\r\n if (!deco.updateEcefLocation(origin, this._origin))\r\n return;\r\n\r\n return this.onReinitialize(); // Calls onRestartTool to exit...\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._origin || undefined === this._current || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n const colorAccHid = colorAccVis.withAlpha(100);\r\n\r\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\r\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\r\n\r\n const extents = this.iModel.projectExtents.cloneTranslated(Vector3d.createStartEnd(this._origin, this._current));\r\n\r\n builderAccVis.addRangeBox(extents);\r\n builderAccHid.addRangeBox(extents);\r\n builderAccHid.addLineString([this._origin, this._current]);\r\n\r\n context.addDecorationFromBuilder(builderAccVis);\r\n context.addDecorationFromBuilder(builderAccHid);\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n this._current = ev.point;\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === this._origin)\r\n await this.exitTool(); // exit to select tool if we haven't gotten first point...\r\n else\r\n await this.onReinitialize(); // Calls onRestartTool...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n if (undefined === this._origin) {\r\n this._origin = ev.point.clone();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n await this.acceptOffset(ev);\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\r\n\r\n public static async startTool() { return new ProjectGeolocationMoveTool().run(); }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectGeolocation.d.ts","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"ProjectGeolocation.d.ts","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module Editing
|
|
7
7
|
*/
|
|
8
|
-
import { AccuDrawHintBuilder,
|
|
8
|
+
import { AccuDrawHintBuilder, CoreTools, createQuantityDescription, EventHandled, GraphicType, IModelApp, PrimitiveTool, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod } from "@itwin/core-frontend";
|
|
9
9
|
import { Angle, Matrix3d, Point3d, Ray3d, Vector3d } from "@itwin/core-geometry";
|
|
10
10
|
import { Cartographic, ColorDef, LinePixels } from "@itwin/core-common";
|
|
11
11
|
import { ProjectExtentsClipDecoration } from "./ProjectExtentsDecoration";
|
|
@@ -85,7 +85,10 @@ export class ProjectGeolocationPointTool extends PrimitiveTool {
|
|
|
85
85
|
_latitudeProperty;
|
|
86
86
|
get latitudeProperty() {
|
|
87
87
|
if (!this._latitudeProperty)
|
|
88
|
-
this._latitudeProperty = new DialogProperty(
|
|
88
|
+
this._latitudeProperty = new DialogProperty(createQuantityDescription({
|
|
89
|
+
name: "latitude", displayLabel: translateMessage("Latitude"),
|
|
90
|
+
kindOfQuantityName: "DefaultToolsUnits.ANGLE", persistenceUnitName: "Units.RAD",
|
|
91
|
+
}), 0.0);
|
|
89
92
|
return this._latitudeProperty;
|
|
90
93
|
}
|
|
91
94
|
get latitude() { return this.latitudeProperty.value; }
|
|
@@ -93,7 +96,10 @@ export class ProjectGeolocationPointTool extends PrimitiveTool {
|
|
|
93
96
|
_longitudeProperty;
|
|
94
97
|
get longitudeProperty() {
|
|
95
98
|
if (!this._longitudeProperty)
|
|
96
|
-
this._longitudeProperty = new DialogProperty(
|
|
99
|
+
this._longitudeProperty = new DialogProperty(createQuantityDescription({
|
|
100
|
+
name: "longitude", displayLabel: translateMessage("Longitude"),
|
|
101
|
+
kindOfQuantityName: "DefaultToolsUnits.ANGLE", persistenceUnitName: "Units.RAD",
|
|
102
|
+
}), 0.0);
|
|
97
103
|
return this._longitudeProperty;
|
|
98
104
|
}
|
|
99
105
|
get longitude() { return this.longitudeProperty.value; }
|
|
@@ -101,7 +107,10 @@ export class ProjectGeolocationPointTool extends PrimitiveTool {
|
|
|
101
107
|
_altitudeProperty;
|
|
102
108
|
get altitudeProperty() {
|
|
103
109
|
if (!this._altitudeProperty)
|
|
104
|
-
this._altitudeProperty = new DialogProperty(
|
|
110
|
+
this._altitudeProperty = new DialogProperty(createQuantityDescription({
|
|
111
|
+
name: "altitude", displayLabel: CoreTools.translate("Measure.Labels.Altitude"),
|
|
112
|
+
kindOfQuantityName: "DefaultToolsUnits.LENGTH", persistenceUnitName: "Units.M",
|
|
113
|
+
}), 0.0);
|
|
105
114
|
return this._altitudeProperty;
|
|
106
115
|
}
|
|
107
116
|
get altitude() { return this.altitudeProperty.value; }
|
|
@@ -109,7 +118,10 @@ export class ProjectGeolocationPointTool extends PrimitiveTool {
|
|
|
109
118
|
_northProperty;
|
|
110
119
|
get northProperty() {
|
|
111
120
|
if (!this._northProperty)
|
|
112
|
-
this._northProperty = new DialogProperty(
|
|
121
|
+
this._northProperty = new DialogProperty(createQuantityDescription({
|
|
122
|
+
name: "north", displayLabel: translateMessage("North"),
|
|
123
|
+
kindOfQuantityName: "DefaultToolsUnits.ANGLE", persistenceUnitName: "Units.RAD",
|
|
124
|
+
}), 0.0);
|
|
113
125
|
return this._northProperty;
|
|
114
126
|
}
|
|
115
127
|
get north() { return this.northProperty.value; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectGeolocation.js","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { AccuDrawHintBuilder, AngleDescription, BeButtonEvent, CanvasDecoration, CoreTools, DecorateContext, EventHandled, GraphicType, IModelApp, LengthDescription, PrimitiveTool, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport } from \"@itwin/core-frontend\";\r\nimport { Angle, Matrix3d, Point3d, Ray3d, Vector3d, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { Cartographic, ColorDef, LinePixels } from \"@itwin/core-common\";\r\nimport { ProjectExtentsClipDecoration } from \"./ProjectExtentsDecoration\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem } from \"@itwin/appui-abstract\";\r\nimport { EditTools } from \"../EditTool\";\r\n\r\nfunction translatePrompt(key: string) {\r\n return EditTools.translate(`ProjectLocation:Prompts.${key}`);\r\n}\r\nfunction translateMessage(key: string) {\r\n return EditTools.translate(`ProjectLocation:Message.${key}`);\r\n}\r\n\r\n/** @internal */\r\nclass LabelDecoration implements CanvasDecoration {\r\n public worldLocation = new Point3d();\r\n public position = new Point3d();\r\n public label: string;\r\n\r\n constructor(worldLocation: XYAndZ, label: string) {\r\n this.worldLocation.setFrom(worldLocation);\r\n this.label = label;\r\n }\r\n\r\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\r\n ctx.font = \"16px san-serif\";\r\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\r\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"white\";\r\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\r\n ctx.shadowColor = \"black\";\r\n ctx.shadowBlur = 10;\r\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n\r\n ctx.fillStyle = \"white\";\r\n ctx.shadowBlur = 0;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(this.label, 0, 0);\r\n }\r\n\r\n public setPosition(vp: Viewport): boolean {\r\n vp.worldToView(this.worldLocation, this.position);\r\n this.position.y -= Math.floor(vp.pixelsFromInches(0.45)) + 0.5; // Offset from world location...\r\n return vp.viewRect.containsPoint(this.position);\r\n }\r\n\r\n public addDecoration(context: DecorateContext) {\r\n if (this.setPosition(context.viewport))\r\n context.addCanvasDecoration(this);\r\n }\r\n}\r\n\r\n/** Change or update geolocation for project.\r\n * To show tool settings for specifying lat/long, make sure formatting and parsing data are cached before the tool starts\r\n * by calling QuantityFormatter.onInitialized at app startup.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationPointTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.Point\";\r\n public static override iconSpec = \"icon-globe\"; // <== Tool button should use whatever icon you have here...\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 4; } // latitude, longitude, altitude, north direction...\r\n\r\n protected _haveToolSettings = false;\r\n protected _cartographicFromArgs = false;\r\n\r\n protected _accept = false;\r\n protected _scale = 1.0;\r\n protected _origin?: Point3d;\r\n protected _labelDeco?: LabelDecoration;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n\r\n public async onRestartTool() { return this.exitTool(); }\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n private _latitudeProperty: DialogProperty<number> | undefined;\r\n public get latitudeProperty() {\r\n if (!this._latitudeProperty)\r\n this._latitudeProperty = new DialogProperty<number>(new AngleDescription(\"latitude\", translateMessage(\"Latitude\")), 0.0);\r\n return this._latitudeProperty;\r\n }\r\n\r\n public get latitude(): number { return this.latitudeProperty.value; }\r\n public set latitude(value: number) { this.latitudeProperty.value = value; }\r\n\r\n private _longitudeProperty: DialogProperty<number> | undefined;\r\n public get longitudeProperty() {\r\n if (!this._longitudeProperty)\r\n this._longitudeProperty = new DialogProperty<number>(new AngleDescription(\"longitude\", translateMessage(\"Longitude\")), 0.0);\r\n return this._longitudeProperty;\r\n }\r\n\r\n public get longitude(): number { return this.longitudeProperty.value; }\r\n public set longitude(value: number) { this.longitudeProperty.value = value; }\r\n\r\n private _altitudeProperty: DialogProperty<number> | undefined;\r\n public get altitudeProperty() {\r\n if (!this._altitudeProperty)\r\n this._altitudeProperty = new DialogProperty<number>(new LengthDescription(\"altitude\", CoreTools.translate(\"Measure.Labels.Altitude\")), 0.0);\r\n return this._altitudeProperty;\r\n }\r\n\r\n public get altitude(): number { return this.altitudeProperty.value; }\r\n public set altitude(value: number) { this.altitudeProperty.value = value; }\r\n\r\n private _northProperty: DialogProperty<number> | undefined;\r\n public get northProperty() {\r\n if (!this._northProperty)\r\n this._northProperty = new DialogProperty<number>(new AngleDescription(\"north\", translateMessage(\"North\")), 0.0);\r\n return this._northProperty;\r\n }\r\n\r\n public get north(): number { return this.northProperty.value; }\r\n public set north(value: number) { this.northProperty.value = value; }\r\n\r\n private syncToolSettingsCoordinates(): void {\r\n this.syncToolSettingsProperties([this.latitudeProperty.syncItem, this.longitudeProperty.syncItem, this.altitudeProperty.syncItem, this.northProperty.syncItem]);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this._haveToolSettings = true;\r\n const toolSettings = new Array<DialogItem>();\r\n toolSettings.push(this.latitudeProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n toolSettings.push(this.longitudeProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\r\n toolSettings.push(this.altitudeProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\r\n toolSettings.push(this.northProperty.toDialogItem({ rowPriority: 4, columnIndex: 2 }));\r\n return toolSettings;\r\n }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(undefined === this._origin ? \"ElementSet.Inputs.AcceptPoint\" : \"ElementSet.Inputs.Accept\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyKnownLocation\" : \"ConfirmCoordinates\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(undefined === this._origin);\r\n this.provideToolAssistance();\r\n }\r\n\r\n private pulseDecoration() {\r\n if (!this._accept)\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n this._scale += 0.1;\r\n if (this._scale > 1.6)\r\n this._scale = 1.0;\r\n\r\n deco.viewport.invalidateDecorations();\r\n setTimeout(() => this.pulseDecoration(), 100);\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._origin || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n deco.drawMonumentPoint(context, this._origin, this._scale);\r\n\r\n if (undefined !== this._labelDeco)\r\n this._labelDeco.addDecoration(context);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || this._accept)\r\n return;\r\n\r\n this._origin = ev.point.clone();\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n protected acceptDefaultLocation(): void {\r\n // Greenwich is better default when testing control handle w/o tool settings support...\r\n this.latitude = Angle.createDegrees(51.4934).radians;\r\n this.longitude = Angle.createDegrees(0.0098).radians;\r\n this.altitude = 50.0;\r\n this.north = 0.0;\r\n }\r\n\r\n public acceptKnownLocation(ev: BeButtonEvent): void {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n this._accept = true; // Require explicit accept to give user a chance to change values...\r\n this._origin = ev.point.clone();\r\n this._labelDeco = new LabelDecoration(this._origin, translatePrompt(\"SpecifyCoordinates\"));\r\n\r\n if (!this._cartographicFromArgs) {\r\n if (this.iModel.isGeoLocated) {\r\n const cartographic = this.iModel.spatialToCartographicFromEcef(this._origin);\r\n this.latitude = cartographic.latitude;\r\n this.longitude = cartographic.longitude;\r\n this.altitude = cartographic.height;\r\n this.north = deco.getClockwiseAngleToNorth().radians;\r\n } else if (!this._haveToolSettings) {\r\n this.acceptDefaultLocation();\r\n }\r\n }\r\n\r\n this.syncToolSettingsCoordinates();\r\n this.pulseDecoration(); // Pulse to indicate that we are waiting for user input...\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n public async acceptCoordinates(): Promise<void> {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const origin = Cartographic.fromRadians({ longitude: this.longitude, latitude: this.latitude, height: this.altitude });\r\n if (!deco.updateEcefLocation(origin, this._origin, Angle.createRadians(this.north)))\r\n return;\r\n\r\n return this.onReinitialize(); // Calls onRestartTool to exit...\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n const haveKnownLocation = this._accept;\r\n if (!haveKnownLocation)\r\n this.acceptKnownLocation(ev);\r\n\r\n const needAcceptPoint = !haveKnownLocation && this._haveToolSettings;\r\n if (!needAcceptPoint)\r\n await this.acceptCoordinates();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (!ProjectExtentsClipDecoration.allowEcefLocationChange(false))\r\n return false;\r\n\r\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\r\n this.initializeToolSettingPropertyValues([this.latitudeProperty, this.longitudeProperty, this.altitudeProperty, this.northProperty]);\r\n\r\n return true;\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `latitude=number` Latitude of accept point in degrees.\r\n * - `longitude=number` Longitude of accept point in degrees.\r\n * - `altitude=number` Height above ellipsoid of accept point.\r\n * - `north=number` North direction in degrees of accept point.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"la\")) {\r\n const latitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(latitude)) {\r\n this.saveToolSettingPropertyValue(this.latitudeProperty, { value: Angle.createDegrees(latitude).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"lo\")) {\r\n const longitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(longitude)) {\r\n this.saveToolSettingPropertyValue(this.longitudeProperty, { value: Angle.createDegrees(longitude).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"al\")) {\r\n const altitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(altitude)) {\r\n this.saveToolSettingPropertyValue(this.altitudeProperty, { value: altitude });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"no\")) {\r\n const north = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(north)) {\r\n this.saveToolSettingPropertyValue(this.northProperty, { value: Angle.createDegrees(north).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n }\r\n }\r\n\r\n return this.run();\r\n }\r\n\r\n public static async startTool(): Promise<boolean> { return new ProjectGeolocationPointTool().run(); }\r\n}\r\n\r\n/** Change or update geolocation direction to true north.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationNorthTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.North\";\r\n public static override iconSpec = \"icon-sort-up\"; // <== Tool button should use whatever icon you have here...\r\n protected _origin?: Point3d;\r\n protected _northDir?: Ray3d;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n public async onRestartTool() { return this.exitTool(); }\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineAngle\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.provideToolAssistance();\r\n\r\n if (undefined === this._origin)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setMatrix(Matrix3d.createIdentity());\r\n hints.setOrigin(this._origin);\r\n hints.setModePolar();\r\n hints.setOriginFixed = true;\r\n hints.setLockZ = true;\r\n hints.sendHints();\r\n }\r\n\r\n private getAdjustedPoint(ev: BeButtonEvent): Point3d | undefined {\r\n if (undefined === this._origin || undefined === ev.viewport)\r\n return undefined;\r\n return AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, this._origin, Vector3d.unitZ(), ev.viewport, true);\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n private updateNorthVector(ev: BeButtonEvent): void {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n if (undefined === this._northDir)\r\n this._northDir = Ray3d.create(ev.point, Vector3d.unitY());\r\n else\r\n this._northDir.origin.setFrom(undefined !== this._origin ? this._origin : ev.point);\r\n\r\n const dirPt = this.getAdjustedPoint(ev);\r\n if (undefined === dirPt)\r\n return;\r\n\r\n this._northDir.direction.setStartEnd(this._northDir.origin, dirPt);\r\n if (this._northDir.direction.magnitude() < 1.0e-6)\r\n this._northDir.direction.setFrom(Vector3d.unitY());\r\n\r\n this._northDir.direction.z = 0.0;\r\n this._northDir.direction.normalizeInPlace();\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._northDir || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n deco.drawNorthArrow(context, this._northDir);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n this.updateNorthVector(ev);\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n if (undefined === this._origin) {\r\n this._origin = ev.point.clone();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n this.updateNorthVector(ev);\r\n\r\n if (undefined !== this._northDir) {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.updateNorthDirection(this._northDir);\r\n }\r\n\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\r\n\r\n public static async startTool() { return new ProjectGeolocationNorthTool().run(); }\r\n}\r\n\r\n/** Move a geolocated model by specifying two points to define the offset.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationMoveTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.Move\";\r\n public static override iconSpec = \"icon-move\"; // <== Tool button should use whatever icon you have here...\r\n protected _origin?: Point3d;\r\n protected _current?: Point3d;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n public async onRestartTool() {\r\n const tool = new ProjectGeolocationMoveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineOffset\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.provideToolAssistance();\r\n\r\n if (undefined === this._origin)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setMatrix(Matrix3d.createIdentity());\r\n hints.setOrigin(this._origin);\r\n hints.setModePolar();\r\n hints.setOriginFixed = true;\r\n hints.sendHints();\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n private async acceptOffset(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || undefined === this._origin)\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const origin = this.iModel.spatialToCartographicFromEcef(ev.point);\r\n if (!deco.updateEcefLocation(origin, this._origin))\r\n return;\r\n\r\n return this.onReinitialize(); // Calls onRestartTool to exit...\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._origin || undefined === this._current || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n const colorAccHid = colorAccVis.withAlpha(100);\r\n\r\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\r\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\r\n\r\n const extents = this.iModel.projectExtents.cloneTranslated(Vector3d.createStartEnd(this._origin, this._current));\r\n\r\n builderAccVis.addRangeBox(extents);\r\n builderAccHid.addRangeBox(extents);\r\n builderAccHid.addLineString([this._origin, this._current]);\r\n\r\n context.addDecorationFromBuilder(builderAccVis);\r\n context.addDecorationFromBuilder(builderAccHid);\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n this._current = ev.point;\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === this._origin)\r\n await this.exitTool(); // exit to select tool if we haven't gotten first point...\r\n else\r\n await this.onReinitialize(); // Calls onRestartTool...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n if (undefined === this._origin) {\r\n this._origin = ev.point.clone();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n await this.acceptOffset(ev);\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\r\n\r\n public static async startTool() { return new ProjectGeolocationMoveTool().run(); }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"ProjectGeolocation.js","sourceRoot":"","sources":["../../../src/ProjectLocation/ProjectGeolocation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { AccuDrawHintBuilder, BeButtonEvent, CanvasDecoration, CoreTools, createQuantityDescription, DecorateContext, EventHandled, GraphicType, IModelApp, PrimitiveTool, ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection, Viewport } from \"@itwin/core-frontend\";\r\nimport { Angle, Matrix3d, Point3d, Ray3d, Vector3d, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { Cartographic, ColorDef, LinePixels } from \"@itwin/core-common\";\r\nimport { ProjectExtentsClipDecoration } from \"./ProjectExtentsDecoration\";\r\nimport { DialogItem, DialogProperty, DialogPropertySyncItem } from \"@itwin/appui-abstract\";\r\nimport { EditTools } from \"../EditTool\";\r\n\r\nfunction translatePrompt(key: string) {\r\n return EditTools.translate(`ProjectLocation:Prompts.${key}`);\r\n}\r\nfunction translateMessage(key: string) {\r\n return EditTools.translate(`ProjectLocation:Message.${key}`);\r\n}\r\n\r\n/** @internal */\r\nclass LabelDecoration implements CanvasDecoration {\r\n public worldLocation = new Point3d();\r\n public position = new Point3d();\r\n public label: string;\r\n\r\n constructor(worldLocation: XYAndZ, label: string) {\r\n this.worldLocation.setFrom(worldLocation);\r\n this.label = label;\r\n }\r\n\r\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\r\n ctx.font = \"16px san-serif\";\r\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\r\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\r\n\r\n ctx.lineWidth = 1;\r\n ctx.strokeStyle = \"white\";\r\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\r\n ctx.shadowColor = \"black\";\r\n ctx.shadowBlur = 10;\r\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\r\n\r\n ctx.fillStyle = \"white\";\r\n ctx.shadowBlur = 0;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(this.label, 0, 0);\r\n }\r\n\r\n public setPosition(vp: Viewport): boolean {\r\n vp.worldToView(this.worldLocation, this.position);\r\n this.position.y -= Math.floor(vp.pixelsFromInches(0.45)) + 0.5; // Offset from world location...\r\n return vp.viewRect.containsPoint(this.position);\r\n }\r\n\r\n public addDecoration(context: DecorateContext) {\r\n if (this.setPosition(context.viewport))\r\n context.addCanvasDecoration(this);\r\n }\r\n}\r\n\r\n/** Change or update geolocation for project.\r\n * To show tool settings for specifying lat/long, make sure formatting and parsing data are cached before the tool starts\r\n * by calling QuantityFormatter.onInitialized at app startup.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationPointTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.Point\";\r\n public static override iconSpec = \"icon-globe\"; // <== Tool button should use whatever icon you have here...\r\n\r\n public static override get minArgs() { return 0; }\r\n public static override get maxArgs() { return 4; } // latitude, longitude, altitude, north direction...\r\n\r\n protected _haveToolSettings = false;\r\n protected _cartographicFromArgs = false;\r\n\r\n protected _accept = false;\r\n protected _scale = 1.0;\r\n protected _origin?: Point3d;\r\n protected _labelDeco?: LabelDecoration;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n\r\n public async onRestartTool() { return this.exitTool(); }\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n private _latitudeProperty: DialogProperty<number> | undefined;\r\n public get latitudeProperty() {\r\n if (!this._latitudeProperty)\r\n this._latitudeProperty = new DialogProperty<number>(createQuantityDescription({\r\n name: \"latitude\", displayLabel: translateMessage(\"Latitude\"),\r\n kindOfQuantityName: \"DefaultToolsUnits.ANGLE\", persistenceUnitName: \"Units.RAD\",\r\n }), 0.0);\r\n return this._latitudeProperty;\r\n }\r\n\r\n public get latitude(): number { return this.latitudeProperty.value; }\r\n public set latitude(value: number) { this.latitudeProperty.value = value; }\r\n\r\n private _longitudeProperty: DialogProperty<number> | undefined;\r\n public get longitudeProperty() {\r\n if (!this._longitudeProperty)\r\n this._longitudeProperty = new DialogProperty<number>(createQuantityDescription({\r\n name: \"longitude\", displayLabel: translateMessage(\"Longitude\"),\r\n kindOfQuantityName: \"DefaultToolsUnits.ANGLE\", persistenceUnitName: \"Units.RAD\",\r\n }), 0.0);\r\n return this._longitudeProperty;\r\n }\r\n\r\n public get longitude(): number { return this.longitudeProperty.value; }\r\n public set longitude(value: number) { this.longitudeProperty.value = value; }\r\n\r\n private _altitudeProperty: DialogProperty<number> | undefined;\r\n public get altitudeProperty() {\r\n if (!this._altitudeProperty)\r\n this._altitudeProperty = new DialogProperty<number>(createQuantityDescription({\r\n name: \"altitude\", displayLabel: CoreTools.translate(\"Measure.Labels.Altitude\"),\r\n kindOfQuantityName: \"DefaultToolsUnits.LENGTH\", persistenceUnitName: \"Units.M\",\r\n }), 0.0);\r\n return this._altitudeProperty;\r\n }\r\n\r\n public get altitude(): number { return this.altitudeProperty.value; }\r\n public set altitude(value: number) { this.altitudeProperty.value = value; }\r\n\r\n private _northProperty: DialogProperty<number> | undefined;\r\n public get northProperty() {\r\n if (!this._northProperty)\r\n this._northProperty = new DialogProperty<number>(createQuantityDescription({\r\n name: \"north\", displayLabel: translateMessage(\"North\"),\r\n kindOfQuantityName: \"DefaultToolsUnits.ANGLE\", persistenceUnitName: \"Units.RAD\",\r\n }), 0.0);\r\n return this._northProperty;\r\n }\r\n\r\n public get north(): number { return this.northProperty.value; }\r\n public set north(value: number) { this.northProperty.value = value; }\r\n\r\n private syncToolSettingsCoordinates(): void {\r\n this.syncToolSettingsProperties([this.latitudeProperty.syncItem, this.longitudeProperty.syncItem, this.altitudeProperty.syncItem, this.northProperty.syncItem]);\r\n }\r\n\r\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\r\n return this.changeToolSettingPropertyValue(updatedValue);\r\n }\r\n\r\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\r\n this._haveToolSettings = true;\r\n const toolSettings = new Array<DialogItem>();\r\n toolSettings.push(this.latitudeProperty.toDialogItem({ rowPriority: 1, columnIndex: 2 }));\r\n toolSettings.push(this.longitudeProperty.toDialogItem({ rowPriority: 2, columnIndex: 2 }));\r\n toolSettings.push(this.altitudeProperty.toDialogItem({ rowPriority: 3, columnIndex: 2 }));\r\n toolSettings.push(this.northProperty.toDialogItem({ rowPriority: 4, columnIndex: 2 }));\r\n return toolSettings;\r\n }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(undefined === this._origin ? \"ElementSet.Inputs.AcceptPoint\" : \"ElementSet.Inputs.Accept\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyKnownLocation\" : \"ConfirmCoordinates\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(undefined === this._origin);\r\n this.provideToolAssistance();\r\n }\r\n\r\n private pulseDecoration() {\r\n if (!this._accept)\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n this._scale += 0.1;\r\n if (this._scale > 1.6)\r\n this._scale = 1.0;\r\n\r\n deco.viewport.invalidateDecorations();\r\n setTimeout(() => this.pulseDecoration(), 100);\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._origin || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n deco.drawMonumentPoint(context, this._origin, this._scale);\r\n\r\n if (undefined !== this._labelDeco)\r\n this._labelDeco.addDecoration(context);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || this._accept)\r\n return;\r\n\r\n this._origin = ev.point.clone();\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n protected acceptDefaultLocation(): void {\r\n // Greenwich is better default when testing control handle w/o tool settings support...\r\n this.latitude = Angle.createDegrees(51.4934).radians;\r\n this.longitude = Angle.createDegrees(0.0098).radians;\r\n this.altitude = 50.0;\r\n this.north = 0.0;\r\n }\r\n\r\n public acceptKnownLocation(ev: BeButtonEvent): void {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n this._accept = true; // Require explicit accept to give user a chance to change values...\r\n this._origin = ev.point.clone();\r\n this._labelDeco = new LabelDecoration(this._origin, translatePrompt(\"SpecifyCoordinates\"));\r\n\r\n if (!this._cartographicFromArgs) {\r\n if (this.iModel.isGeoLocated) {\r\n const cartographic = this.iModel.spatialToCartographicFromEcef(this._origin);\r\n this.latitude = cartographic.latitude;\r\n this.longitude = cartographic.longitude;\r\n this.altitude = cartographic.height;\r\n this.north = deco.getClockwiseAngleToNorth().radians;\r\n } else if (!this._haveToolSettings) {\r\n this.acceptDefaultLocation();\r\n }\r\n }\r\n\r\n this.syncToolSettingsCoordinates();\r\n this.pulseDecoration(); // Pulse to indicate that we are waiting for user input...\r\n this.setupAndPromptForNextAction();\r\n }\r\n\r\n public async acceptCoordinates(): Promise<void> {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const origin = Cartographic.fromRadians({ longitude: this.longitude, latitude: this.latitude, height: this.altitude });\r\n if (!deco.updateEcefLocation(origin, this._origin, Angle.createRadians(this.north)))\r\n return;\r\n\r\n return this.onReinitialize(); // Calls onRestartTool to exit...\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n const haveKnownLocation = this._accept;\r\n if (!haveKnownLocation)\r\n this.acceptKnownLocation(ev);\r\n\r\n const needAcceptPoint = !haveKnownLocation && this._haveToolSettings;\r\n if (!needAcceptPoint)\r\n await this.acceptCoordinates();\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (!ProjectExtentsClipDecoration.allowEcefLocationChange(false))\r\n return false;\r\n\r\n // Setup initial values here instead of supplyToolSettingsProperties to support keyin args w/o appui-react...\r\n this.initializeToolSettingPropertyValues([this.latitudeProperty, this.longitudeProperty, this.altitudeProperty, this.northProperty]);\r\n\r\n return true;\r\n }\r\n\r\n /** The keyin takes the following arguments, all of which are optional:\r\n * - `latitude=number` Latitude of accept point in degrees.\r\n * - `longitude=number` Longitude of accept point in degrees.\r\n * - `altitude=number` Height above ellipsoid of accept point.\r\n * - `north=number` North direction in degrees of accept point.\r\n */\r\n public override async parseAndRun(...inputArgs: string[]): Promise<boolean> {\r\n for (const arg of inputArgs) {\r\n const parts = arg.split(\"=\");\r\n if (2 !== parts.length)\r\n continue;\r\n\r\n if (parts[0].toLowerCase().startsWith(\"la\")) {\r\n const latitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(latitude)) {\r\n this.saveToolSettingPropertyValue(this.latitudeProperty, { value: Angle.createDegrees(latitude).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"lo\")) {\r\n const longitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(longitude)) {\r\n this.saveToolSettingPropertyValue(this.longitudeProperty, { value: Angle.createDegrees(longitude).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"al\")) {\r\n const altitude = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(altitude)) {\r\n this.saveToolSettingPropertyValue(this.altitudeProperty, { value: altitude });\r\n this._cartographicFromArgs = true;\r\n }\r\n } else if (parts[0].toLowerCase().startsWith(\"no\")) {\r\n const north = Number.parseFloat(parts[1]);\r\n if (!Number.isNaN(north)) {\r\n this.saveToolSettingPropertyValue(this.northProperty, { value: Angle.createDegrees(north).radians });\r\n this._cartographicFromArgs = true;\r\n }\r\n }\r\n }\r\n\r\n return this.run();\r\n }\r\n\r\n public static async startTool(): Promise<boolean> { return new ProjectGeolocationPointTool().run(); }\r\n}\r\n\r\n/** Change or update geolocation direction to true north.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationNorthTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.North\";\r\n public static override iconSpec = \"icon-sort-up\"; // <== Tool button should use whatever icon you have here...\r\n protected _origin?: Point3d;\r\n protected _northDir?: Ray3d;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n public async onRestartTool() { return this.exitTool(); }\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineAngle\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.provideToolAssistance();\r\n\r\n if (undefined === this._origin)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setMatrix(Matrix3d.createIdentity());\r\n hints.setOrigin(this._origin);\r\n hints.setModePolar();\r\n hints.setOriginFixed = true;\r\n hints.setLockZ = true;\r\n hints.sendHints();\r\n }\r\n\r\n private getAdjustedPoint(ev: BeButtonEvent): Point3d | undefined {\r\n if (undefined === this._origin || undefined === ev.viewport)\r\n return undefined;\r\n return AccuDrawHintBuilder.projectPointToPlaneInView(ev.point, this._origin, Vector3d.unitZ(), ev.viewport, true);\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n private updateNorthVector(ev: BeButtonEvent): void {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n if (undefined === this._northDir)\r\n this._northDir = Ray3d.create(ev.point, Vector3d.unitY());\r\n else\r\n this._northDir.origin.setFrom(undefined !== this._origin ? this._origin : ev.point);\r\n\r\n const dirPt = this.getAdjustedPoint(ev);\r\n if (undefined === dirPt)\r\n return;\r\n\r\n this._northDir.direction.setStartEnd(this._northDir.origin, dirPt);\r\n if (this._northDir.direction.magnitude() < 1.0e-6)\r\n this._northDir.direction.setFrom(Vector3d.unitY());\r\n\r\n this._northDir.direction.z = 0.0;\r\n this._northDir.direction.normalizeInPlace();\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._northDir || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n deco.drawNorthArrow(context, this._northDir);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n this.updateNorthVector(ev);\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n if (undefined === this._origin) {\r\n this._origin = ev.point.clone();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n this.updateNorthVector(ev);\r\n\r\n if (undefined !== this._northDir) {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.updateNorthDirection(this._northDir);\r\n }\r\n\r\n await this.onReinitialize(); // Calls onRestartTool to exit...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\r\n\r\n public static async startTool() { return new ProjectGeolocationNorthTool().run(); }\r\n}\r\n\r\n/** Move a geolocated model by specifying two points to define the offset.\r\n * @beta\r\n */\r\nexport class ProjectGeolocationMoveTool extends PrimitiveTool {\r\n public static override toolId = \"ProjectLocation.Geolocation.Move\";\r\n public static override iconSpec = \"icon-move\"; // <== Tool button should use whatever icon you have here...\r\n protected _origin?: Point3d;\r\n protected _current?: Point3d;\r\n\r\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && vp.view.isSpatialView()); }\r\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; } // Allow snapping to terrain, etc. outside project extents...\r\n public override requireWriteableTarget(): boolean { return false; } // Tool doesn't modify the imodel...\r\n public override async onPostInstall() {\r\n await super.onPostInstall();\r\n this.setupAndPromptForNextAction();\r\n }\r\n public override async onCleanup() {\r\n await super.onCleanup();\r\n this.unsuspendDecorations();\r\n }\r\n public async onRestartTool() {\r\n const tool = new ProjectGeolocationMoveTool();\r\n if (!await tool.run())\r\n return this.exitTool();\r\n }\r\n\r\n public override async onUnsuspend() { this.provideToolAssistance(); }\r\n\r\n protected provideToolAssistance(): void {\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Cancel\");\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, translatePrompt(undefined === this._origin ? \"IdentifyRefPoint\" : \"DefineOffset\"));\r\n const sections: ToolAssistanceSection[] = [];\r\n\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\r\n\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\r\n\r\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\r\n IModelApp.notifications.setToolAssistance(instructions);\r\n }\r\n\r\n protected setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n this.provideToolAssistance();\r\n\r\n if (undefined === this._origin)\r\n return;\r\n\r\n const hints = new AccuDrawHintBuilder();\r\n hints.setMatrix(Matrix3d.createIdentity());\r\n hints.setOrigin(this._origin);\r\n hints.setModePolar();\r\n hints.setOriginFixed = true;\r\n hints.sendHints();\r\n }\r\n\r\n private unsuspendDecorations() {\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined !== deco)\r\n deco.suspendGeolocationDecorations = false;\r\n }\r\n\r\n private async acceptOffset(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || undefined === this._origin)\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const origin = this.iModel.spatialToCartographicFromEcef(ev.point);\r\n if (!deco.updateEcefLocation(origin, this._origin))\r\n return;\r\n\r\n return this.onReinitialize(); // Calls onRestartTool to exit...\r\n }\r\n\r\n public override decorate(context: DecorateContext): void {\r\n if (undefined === this._origin || undefined === this._current || !context.viewport.view.isSpatialView())\r\n return;\r\n\r\n const deco = ProjectExtentsClipDecoration.get();\r\n if (undefined === deco)\r\n return;\r\n\r\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\r\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\r\n const colorAccHid = colorAccVis.withAlpha(100);\r\n\r\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\r\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\r\n\r\n const extents = this.iModel.projectExtents.cloneTranslated(Vector3d.createStartEnd(this._origin, this._current));\r\n\r\n builderAccVis.addRangeBox(extents);\r\n builderAccHid.addRangeBox(extents);\r\n builderAccHid.addLineString([this._origin, this._current]);\r\n\r\n context.addDecorationFromBuilder(builderAccVis);\r\n context.addDecorationFromBuilder(builderAccHid);\r\n\r\n deco.suspendGeolocationDecorations = true;\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport)\r\n return;\r\n\r\n this._current = ev.point;\r\n ev.viewport.invalidateDecorations();\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === this._origin)\r\n await this.exitTool(); // exit to select tool if we haven't gotten first point...\r\n else\r\n await this.onReinitialize(); // Calls onRestartTool...\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport)\r\n return EventHandled.No; // Shouldn't really happen...\r\n\r\n if (undefined === this._origin) {\r\n this._origin = ev.point.clone();\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n await this.acceptOffset(ev);\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onInstall(): Promise<boolean> { return ProjectExtentsClipDecoration.allowEcefLocationChange(true); }\r\n\r\n public static async startTool() { return new ProjectGeolocationMoveTool().run(); }\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/editor-frontend",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.12.0-dev.1",
|
|
4
4
|
"description": "iTwin.js frontend components",
|
|
5
5
|
"main": "lib/cjs/editor-frontend.js",
|
|
6
6
|
"module": "lib/esm/editor-frontend.js",
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
"url": "http://www.bentley.com"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@itwin/
|
|
27
|
-
"@itwin/core-
|
|
28
|
-
"@itwin/
|
|
29
|
-
"@itwin/core-
|
|
30
|
-
"@itwin/core-
|
|
26
|
+
"@itwin/appui-abstract": "5.12.0-dev.1",
|
|
27
|
+
"@itwin/core-bentley": "5.12.0-dev.1",
|
|
28
|
+
"@itwin/core-frontend": "5.12.0-dev.1",
|
|
29
|
+
"@itwin/core-common": "5.12.0-dev.1",
|
|
30
|
+
"@itwin/core-geometry": "5.12.0-dev.1"
|
|
31
31
|
},
|
|
32
32
|
"//devDependencies": [
|
|
33
33
|
"NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install",
|
|
@@ -39,20 +39,20 @@
|
|
|
39
39
|
"eslint": "^9.31.0",
|
|
40
40
|
"rimraf": "^6.0.1",
|
|
41
41
|
"typescript": "~5.6.2",
|
|
42
|
-
"@itwin/
|
|
43
|
-
"@itwin/
|
|
44
|
-
"@itwin/
|
|
45
|
-
"@itwin/core-common": "5.
|
|
46
|
-
"@itwin/core-
|
|
47
|
-
"@itwin/
|
|
48
|
-
"@itwin/
|
|
42
|
+
"@itwin/build-tools": "5.12.0-dev.1",
|
|
43
|
+
"@itwin/appui-abstract": "5.12.0-dev.1",
|
|
44
|
+
"@itwin/core-geometry": "5.12.0-dev.1",
|
|
45
|
+
"@itwin/core-common": "5.12.0-dev.1",
|
|
46
|
+
"@itwin/core-bentley": "5.12.0-dev.1",
|
|
47
|
+
"@itwin/core-frontend": "5.12.0-dev.1",
|
|
48
|
+
"@itwin/certa": "5.12.0-dev.1"
|
|
49
49
|
},
|
|
50
50
|
"//dependencies": [
|
|
51
51
|
"NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API",
|
|
52
52
|
"NOTE: editor-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"
|
|
53
53
|
],
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@itwin/editor-common": "5.
|
|
55
|
+
"@itwin/editor-common": "5.12.0-dev.1"
|
|
56
56
|
},
|
|
57
57
|
"scripts": {
|
|
58
58
|
"build": "npm run -s copy:locale && npm run -s build:cjs && npm run -s build:esm",
|