@itwin/core-markup 5.0.0-dev.5 → 5.0.0-dev.50

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.
@@ -87,6 +87,8 @@ export class RedlineTool extends MarkupTool {
87
87
  * @public
88
88
  */
89
89
  export class LineTool extends RedlineTool {
90
+ static { this.toolId = "Markup.Line"; }
91
+ static { this.iconSpec = "icon-line"; }
90
92
  showPrompt() { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartPoint" : "ElementSet.Prompts.EndPoint")); }
91
93
  createMarkup(svgMarkup, ev, isDynamics) {
92
94
  if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
@@ -99,12 +101,12 @@ export class LineTool extends RedlineTool {
99
101
  this.onAdded(element);
100
102
  }
101
103
  }
102
- LineTool.toolId = "Markup.Line";
103
- LineTool.iconSpec = "icon-line";
104
104
  /** Tool for placing Markup Rectangles
105
105
  * @public
106
106
  */
107
107
  export class RectangleTool extends RedlineTool {
108
+ static { this.toolId = "Markup.Rectangle"; }
109
+ static { this.iconSpec = "icon-rectangle"; }
108
110
  constructor(_cornerRadius) {
109
111
  super();
110
112
  this._cornerRadius = _cornerRadius;
@@ -129,12 +131,12 @@ export class RectangleTool extends RedlineTool {
129
131
  this.onAdded(element);
130
132
  }
131
133
  }
132
- RectangleTool.toolId = "Markup.Rectangle";
133
- RectangleTool.iconSpec = "icon-rectangle";
134
134
  /** Tool for placing Markup Polygons
135
135
  * @public
136
136
  */
137
137
  export class PolygonTool extends RedlineTool {
138
+ static { this.toolId = "Markup.Polygon"; }
139
+ static { this.iconSpec = "icon-polygon"; }
138
140
  constructor(_numSides) {
139
141
  super();
140
142
  this._numSides = _numSides;
@@ -180,12 +182,12 @@ export class PolygonTool extends RedlineTool {
180
182
  this.onAdded(element);
181
183
  }
182
184
  }
183
- PolygonTool.toolId = "Markup.Polygon";
184
- PolygonTool.iconSpec = "icon-polygon";
185
185
  /** Tool for placing Markup Clouds
186
186
  * @public
187
187
  */
188
188
  export class CloudTool extends RedlineTool {
189
+ static { this.toolId = "Markup.Cloud"; }
190
+ static { this.iconSpec = "icon-cloud"; }
189
191
  showPrompt() { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartCorner" : "ElementSet.Prompts.OppositeCorner")); }
190
192
  createMarkup(svgMarkup, ev, isDynamics) {
191
193
  if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
@@ -216,12 +218,12 @@ export class CloudTool extends RedlineTool {
216
218
  super.clearDynamicsMarkup(isDynamics); // For dynamics we don't create a new cloud each frame, we just set the width/height...
217
219
  }
218
220
  }
219
- CloudTool.toolId = "Markup.Cloud";
220
- CloudTool.iconSpec = "icon-cloud";
221
221
  /** Tool for placing Markup Circles
222
222
  * @public
223
223
  */
224
224
  export class CircleTool extends RedlineTool {
225
+ static { this.toolId = "Markup.Circle"; }
226
+ static { this.iconSpec = "icon-circle"; }
225
227
  showPrompt() { this.provideToolAssistance(MarkupTool.toolKey + (0 === this._points.length ? "Circle.Prompts.FirstPoint" : "Circle.Prompts.NextPoint")); }
226
228
  createMarkup(svgMarkup, ev, isDynamics) {
227
229
  if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
@@ -237,12 +239,12 @@ export class CircleTool extends RedlineTool {
237
239
  this.onAdded(element);
238
240
  }
239
241
  }
240
- CircleTool.toolId = "Markup.Circle";
241
- CircleTool.iconSpec = "icon-circle";
242
242
  /** Tool for placing Markup Ellipses
243
243
  * @public
244
244
  */
245
245
  export class EllipseTool extends RedlineTool {
246
+ static { this.toolId = "Markup.Ellipse"; }
247
+ static { this.iconSpec = "icon-ellipse"; }
246
248
  showPrompt() { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartCorner" : "ElementSet.Prompts.OppositeCorner")); }
247
249
  createMarkup(svgMarkup, ev, isDynamics) {
248
250
  if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
@@ -261,12 +263,12 @@ export class EllipseTool extends RedlineTool {
261
263
  this.onAdded(element);
262
264
  }
263
265
  }
264
- EllipseTool.toolId = "Markup.Ellipse";
265
- EllipseTool.iconSpec = "icon-ellipse";
266
266
  /** Tool for placing Markup Arrows
267
267
  * @public
268
268
  */
269
269
  export class ArrowTool extends RedlineTool {
270
+ static { this.toolId = "Markup.Arrow"; }
271
+ static { this.iconSpec = "icon-callout"; }
270
272
  /** ctor for ArrowTool
271
273
  * @param _arrowPos "start", "end", or "both". If undefined = "end".
272
274
  */
@@ -300,8 +302,6 @@ export class ArrowTool extends RedlineTool {
300
302
  this.onAdded(element);
301
303
  }
302
304
  }
303
- ArrowTool.toolId = "Markup.Arrow";
304
- ArrowTool.iconSpec = "icon-callout";
305
305
  /** Tool for measuring distances and placing Markups of them
306
306
  * @public
307
307
  */
@@ -310,6 +310,8 @@ export class DistanceTool extends ArrowTool {
310
310
  super(...arguments);
311
311
  this._startPointWorld = new Point3d();
312
312
  }
313
+ static { this.toolId = "Markup.Distance"; }
314
+ static { this.iconSpec = "icon-distance"; }
313
315
  showPrompt() { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartPoint" : "ElementSet.Prompts.EndPoint")); }
314
316
  setupAndPromptForNextAction() {
315
317
  IModelApp.accuSnap.enableSnap(true);
@@ -363,8 +365,6 @@ export class DistanceTool extends ArrowTool {
363
365
  return super.onDataButtonDown(ev);
364
366
  }
365
367
  }
366
- DistanceTool.toolId = "Markup.Distance";
367
- DistanceTool.iconSpec = "icon-distance";
368
368
  /** Tool for placing Markup freehand sketches
369
369
  * @public
370
370
  */
@@ -373,6 +373,8 @@ export class SketchTool extends RedlineTool {
373
373
  super(...arguments);
374
374
  this._minDistSquared = 100;
375
375
  }
376
+ static { this.toolId = "Markup.Sketch"; }
377
+ static { this.iconSpec = "icon-draw"; }
376
378
  showPrompt() { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartPoint" : "ElementSet.Prompts.EndPoint")); }
377
379
  createMarkup(svgMarkup, ev, isDynamics) {
378
380
  if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
@@ -400,12 +402,12 @@ export class SketchTool extends RedlineTool {
400
402
  return super.onMouseMotion(ev);
401
403
  }
402
404
  }
403
- SketchTool.toolId = "Markup.Sketch";
404
- SketchTool.iconSpec = "icon-draw";
405
405
  /** Tool for placing SVG symbols on a Markup
406
406
  * @public
407
407
  */
408
408
  export class SymbolTool extends RedlineTool {
409
+ static { this.toolId = "Markup.Symbol"; }
410
+ static { this.iconSpec = "icon-symbol"; }
409
411
  constructor(_symbolData, _applyCurrentStyle) {
410
412
  super();
411
413
  this._symbolData = _symbolData;
@@ -480,6 +482,4 @@ export class SymbolTool extends RedlineTool {
480
482
  super.clearDynamicsMarkup(isDynamics); // For dynamics we don't create a new symbol each frame, we just set the width/height...
481
483
  }
482
484
  }
483
- SymbolTool.toolId = "Markup.Symbol";
484
- SymbolTool.iconSpec = "icon-symbol";
485
485
  //# sourceMappingURL=RedlineTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RedlineTool.js","sourceRoot":"","sources":["../../src/RedlineTool.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 MarkupTools\r\n */\r\n\r\n// cspell:ignore rtmp stmp\r\n\r\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n BeButtonEvent, CoordinateLockOverrides, CoreTools, EventHandled, IModelApp, QuantityType, ToolAssistance, ToolAssistanceImage,\r\n ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection,\r\n} from \"@itwin/core-frontend\";\r\nimport { G, Marker, Element as MarkupElement } from \"@svgdotjs/svg.js\";\r\nimport { MarkupApp } from \"./Markup\";\r\nimport { MarkupTool } from \"./MarkupTool\";\r\n\r\n/** Base class for tools that place new Markup elements\r\n * @public\r\n */\r\nexport abstract class RedlineTool extends MarkupTool {\r\n protected _minPoints = 1;\r\n protected _nRequiredPoints = 2;\r\n protected readonly _points: Point3d[] = [];\r\n\r\n protected onAdded(el: MarkupElement) {\r\n const markup = this.markup;\r\n const undo = markup.undo;\r\n undo.performOperation(this.keyin, () => undo.onAdded(el));\r\n markup.selected.restart(el);\r\n }\r\n protected isComplete(_ev: BeButtonEvent) { return this._points.length >= this._nRequiredPoints; }\r\n protected override setupAndPromptForNextAction(): void {\r\n super.setupAndPromptForNextAction();\r\n this.markup.disablePick();\r\n IModelApp.toolAdmin.setCursor(0 === this._points.length ? IModelApp.viewManager.crossHairCursor : IModelApp.viewManager.dynamicsCursor);\r\n }\r\n\r\n protected createMarkup(_svgMarkup: G, _ev: BeButtonEvent, _isDynamics: boolean): void { }\r\n protected clearDynamicsMarkup(_isDynamics: boolean): void { this.markup.svgDynamics!.clear(); }\r\n\r\n public override async onRestartTool() { return this.exitTool(); } // Default to single shot and return control to select tool...\r\n public override async onCleanup() { this.clearDynamicsMarkup(false); }\r\n\r\n public override async onReinitialize() {\r\n this.clearDynamicsMarkup(false);\r\n return super.onReinitialize();\r\n }\r\n\r\n public override async onUndoPreviousStep(): Promise<boolean> {\r\n return (0 === this._points.length) ? false : (this.onReinitialize(), true);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n if (undefined === ev.viewport || this._points.length < this._minPoints)\r\n return;\r\n this.clearDynamicsMarkup(true);\r\n this.createMarkup(this.markup.svgDynamics!, ev, true);\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;\r\n\r\n this._points.push(MarkupApp.convertVpToVb(ev.viewPoint));\r\n if (!this.isComplete(ev)) {\r\n this.setupAndPromptForNextAction();\r\n return EventHandled.No;\r\n }\r\n\r\n this.createMarkup(this.markup.svgMarkup!, ev, false);\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n protected provideToolAssistance(mainInstrKey: string, singlePoint: boolean = false): void {\r\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, IModelApp.localization.getLocalizedString(mainInstrKey));\r\n const mouseInstructions: ToolAssistanceInstruction[] = [];\r\n const touchInstructions: ToolAssistanceInstruction[] = [];\r\n\r\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\r\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Exit\");\r\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\r\n touchInstructions.push(ToolAssistance.createInstruction(singlePoint ? ToolAssistanceImage.OneTouchTap : ToolAssistanceImage.OneTouchDrag, acceptMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\r\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\r\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\r\n\r\n const sections: ToolAssistanceSection[] = [];\r\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\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\r\n/** Tool for placing Markup Lines\r\n * @public\r\n */\r\nexport class LineTool extends RedlineTool {\r\n public static override toolId = \"Markup.Line\";\r\n public static override iconSpec = \"icon-line\";\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\")); }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const start = this._points[0];\r\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\r\n const element = svgMarkup.line(start.x, start.y, end.x, end.y);\r\n this.setCurrentStyle(element, false);\r\n if (!isDynamics)\r\n this.onAdded(element);\r\n }\r\n}\r\n\r\n/** Tool for placing Markup Rectangles\r\n * @public\r\n */\r\nexport class RectangleTool extends RedlineTool {\r\n public static override toolId = \"Markup.Rectangle\";\r\n public static override iconSpec = \"icon-rectangle\";\r\n\r\n constructor(protected _cornerRadius?: number) { super(); } // Specify radius to create a rectangle with rounded corners.\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartCorner\" : \"ElementSet.Prompts.OppositeCorner\")); }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const start = this._points[0];\r\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\r\n const vec = start.vectorTo(end);\r\n const width = Math.abs(vec.x);\r\n const height = Math.abs(vec.y);\r\n if (width < 1 || height < 1)\r\n return;\r\n const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points...\r\n const element = svgMarkup.rect(width, height).move(offset.x, offset.y);\r\n this.setCurrentStyle(element, true);\r\n if (undefined !== this._cornerRadius)\r\n element.radius(this._cornerRadius);\r\n if (!isDynamics)\r\n this.onAdded(element);\r\n }\r\n}\r\n\r\n/** Tool for placing Markup Polygons\r\n * @public\r\n */\r\nexport class PolygonTool extends RedlineTool {\r\n public static override toolId = \"Markup.Polygon\";\r\n public static override iconSpec = \"icon-polygon\";\r\n\r\n constructor(protected _numSides?: number) { super(); } // Specify number of polygon sides. Default if undefined is 5.\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(MarkupTool.toolKey + (0 === this._points.length ? \"Polygon.Prompts.FirstPoint\" : \"Polygon.Prompts.NextPoint\")); }\r\n\r\n protected getPoints(points: number[], center: Point3d, edge: Point3d, numSides: number, inscribe: boolean): boolean {\r\n if (numSides < 3 || numSides > 100)\r\n return false;\r\n let radius = center.distanceXY(edge);\r\n if (radius < 1)\r\n return false;\r\n const delta = (Math.PI * 2.0) / numSides;\r\n const vec = center.vectorTo(edge);\r\n let angle = Vector3d.unitX().planarRadiansTo(vec, Vector3d.unitZ());\r\n if (!inscribe) {\r\n const theta = delta * 0.5;\r\n angle -= theta;\r\n radius /= Math.cos(theta);\r\n }\r\n\r\n const rtmp = Point3d.create();\r\n const stmp = Point3d.create();\r\n for (let i = 0; i < numSides; i++, angle += delta) {\r\n rtmp.x = radius * Math.cos(angle);\r\n rtmp.y = radius * Math.sin(angle);\r\n rtmp.z = 0.0;\r\n center.plus(rtmp, stmp);\r\n points.push(stmp.x);\r\n points.push(stmp.y);\r\n }\r\n return true;\r\n }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const center = this._points[0];\r\n const edge = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\r\n const pts: number[] = [];\r\n if (!this.getPoints(pts, center, edge, undefined !== this._numSides ? this._numSides : 5, true))\r\n return;\r\n const element = svgMarkup.polygon(pts);\r\n this.setCurrentStyle(element, true);\r\n if (!isDynamics)\r\n this.onAdded(element);\r\n }\r\n}\r\n\r\n/** Tool for placing Markup Clouds\r\n * @public\r\n */\r\nexport class CloudTool extends RedlineTool {\r\n public static override toolId = \"Markup.Cloud\";\r\n public static override iconSpec = \"icon-cloud\";\r\n protected _cloud?: MarkupElement;\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartCorner\" : \"ElementSet.Prompts.OppositeCorner\")); }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const start = this._points[0];\r\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\r\n const vec = start.vectorTo(end);\r\n const width = Math.abs(vec.x);\r\n const height = Math.abs(vec.y);\r\n if (width < 10 || height < 10)\r\n return;\r\n if (undefined === this._cloud) {\r\n this._cloud = svgMarkup.path(MarkupApp.props.active.cloud.path);\r\n } else if (!isDynamics) {\r\n svgMarkup.add(this._cloud);\r\n }\r\n const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points...\r\n this._cloud.move(offset.x, offset.y);\r\n this._cloud.width(width);\r\n this._cloud.height(height);\r\n this.setCurrentStyle(this._cloud, true);\r\n if (!isDynamics)\r\n this.onAdded(this._cloud);\r\n }\r\n\r\n protected override clearDynamicsMarkup(isDynamics: boolean): void {\r\n if (!isDynamics)\r\n super.clearDynamicsMarkup(isDynamics); // For dynamics we don't create a new cloud each frame, we just set the width/height...\r\n }\r\n}\r\n\r\n/** Tool for placing Markup Circles\r\n * @public\r\n */\r\nexport class CircleTool extends RedlineTool {\r\n public static override toolId = \"Markup.Circle\";\r\n public static override iconSpec = \"icon-circle\";\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(MarkupTool.toolKey + (0 === this._points.length ? \"Circle.Prompts.FirstPoint\" : \"Circle.Prompts.NextPoint\")); }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const start = this._points[0];\r\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\r\n const radius = start.distanceXY(end);\r\n if (radius < 1)\r\n return;\r\n const element = svgMarkup.circle(radius * 2.0).center(start.x, start.y);\r\n this.setCurrentStyle(element, true);\r\n if (!isDynamics)\r\n this.onAdded(element);\r\n }\r\n}\r\n\r\n/** Tool for placing Markup Ellipses\r\n * @public\r\n */\r\nexport class EllipseTool extends RedlineTool {\r\n public static override toolId = \"Markup.Ellipse\";\r\n public static override iconSpec = \"icon-ellipse\";\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartCorner\" : \"ElementSet.Prompts.OppositeCorner\")); }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const start = this._points[0];\r\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\r\n const vec = start.vectorTo(end);\r\n const width = Math.abs(vec.x);\r\n const height = Math.abs(vec.y);\r\n if (width < 1 || height < 1)\r\n return;\r\n const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points...\r\n const element = svgMarkup.ellipse(width, height).move(offset.x, offset.y);\r\n this.setCurrentStyle(element, true);\r\n if (!isDynamics)\r\n this.onAdded(element);\r\n }\r\n}\r\n\r\n/** Tool for placing Markup Arrows\r\n * @public\r\n */\r\nexport class ArrowTool extends RedlineTool {\r\n public static override toolId = \"Markup.Arrow\";\r\n public static override iconSpec = \"icon-callout\";\r\n\r\n /** ctor for ArrowTool\r\n * @param _arrowPos \"start\", \"end\", or \"both\". If undefined = \"end\".\r\n */\r\n constructor(protected _arrowPos?: string) { super(); }\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\")); }\r\n\r\n protected getOrCreateArrowMarker(color: string): Marker {\r\n const arrowProps = MarkupApp.props.active.arrow;\r\n return this.markup.createArrowMarker(color, arrowProps.length, arrowProps.width);\r\n }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const start = this._points[0];\r\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\r\n const vec = start.vectorTo(end);\r\n if (!vec.normalizeInPlace())\r\n return;\r\n const element = svgMarkup.line(start.x, start.y, end.x, end.y);\r\n this.setCurrentStyle(element, false);\r\n const marker = this.getOrCreateArrowMarker(element.css(\"stroke\"));\r\n const addToStart = (\"start\" === this._arrowPos || \"both\" === this._arrowPos);\r\n const addToEnd = (\"end\" === this._arrowPos || \"both\" === this._arrowPos);\r\n if (addToStart)\r\n element.marker(\"start\", marker);\r\n if (addToEnd || !addToStart)\r\n element.marker(\"end\", marker);\r\n if (!isDynamics)\r\n this.onAdded(element);\r\n }\r\n}\r\n\r\n/** Tool for measuring distances and placing Markups of them\r\n * @public\r\n */\r\nexport class DistanceTool extends ArrowTool {\r\n public static override toolId = \"Markup.Distance\";\r\n public static override iconSpec = \"icon-distance\";\r\n protected readonly _startPointWorld = new Point3d();\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\")); }\r\n protected override setupAndPromptForNextAction(): void {\r\n IModelApp.accuSnap.enableSnap(true);\r\n IModelApp.toolAdmin.toolState.coordLockOvr = CoordinateLockOverrides.None;\r\n super.setupAndPromptForNextAction();\r\n }\r\n\r\n protected getFormattedDistance(distance: number): string | undefined {\r\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === formatterSpec)\r\n return undefined;\r\n return IModelApp.quantityFormatter.formatQuantity(distance, formatterSpec);\r\n }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const start = this._points[0];\r\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\r\n const vec = start.vectorTo(end);\r\n if (!vec.normalizeInPlace())\r\n return;\r\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\r\n if (undefined === formatterSpec)\r\n return;\r\n\r\n const distanceLine = svgMarkup.line(start.x, start.y, end.x, end.y);\r\n this.setCurrentStyle(distanceLine, false);\r\n const marker = this.getOrCreateArrowMarker(distanceLine.css(\"stroke\"));\r\n distanceLine.marker(\"start\", marker);\r\n distanceLine.marker(\"end\", marker);\r\n\r\n const loc = start.interpolate(0.5, end);\r\n const distance = IModelApp.quantityFormatter.formatQuantity(this._startPointWorld.distance(ev.point), formatterSpec);\r\n const text = svgMarkup.plain(distance).addClass(MarkupApp.textClass).attr(\"text-anchor\", \"middle\").translate(loc.x, loc.y);\r\n this.setCurrentTextStyle(text);\r\n const textWithBg = this.createBoxedText(svgMarkup, text);\r\n\r\n if (!isDynamics) {\r\n const markup = this.markup;\r\n const undo = markup.undo;\r\n undo.performOperation(this.keyin, () => {\r\n undo.onAdded(distanceLine);\r\n undo.onAdded(textWithBg);\r\n });\r\n\r\n markup.selected.restart(textWithBg); // Select text+box so that user can freely position relative to distance line...\r\n }\r\n }\r\n\r\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length)) {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n if (0 === this._points.length)\r\n this._startPointWorld.setFrom(ev.point);\r\n return super.onDataButtonDown(ev);\r\n }\r\n}\r\n\r\n/** Tool for placing Markup freehand sketches\r\n * @public\r\n */\r\nexport class SketchTool extends RedlineTool {\r\n public static override toolId = \"Markup.Sketch\";\r\n public static override iconSpec = \"icon-draw\";\r\n protected _minDistSquared = 100;\r\n\r\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\")); }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\r\n return;\r\n const pts: number[] = [];\r\n const evPt = MarkupApp.convertVpToVb(ev.viewPoint);\r\n this._points.forEach((pt) => {\r\n pts.push(pt.x);\r\n pts.push(pt.y);\r\n });\r\n\r\n if (isDynamics && !evPt.isAlmostEqualXY(this._points[this._points.length - 1])) {\r\n pts.push(evPt.x);\r\n pts.push(evPt.y);\r\n }\r\n\r\n const isClosed = (this._points.length > 2 && (this._points[0].distanceSquaredXY(isDynamics ? evPt : this._points[this._points.length - 1]) < this._minDistSquared * 2));\r\n const element = isClosed ? svgMarkup.polygon(pts) : svgMarkup.polyline(pts);\r\n this.setCurrentStyle(element, isClosed);\r\n if (!isDynamics)\r\n this.onAdded(element);\r\n }\r\n\r\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\r\n const evPt = MarkupApp.convertVpToVb(ev.viewPoint);\r\n if (undefined !== ev.viewport && this._points.length > 0 && evPt.distanceSquaredXY(this._points[this._points.length - 1]) > this._minDistSquared)\r\n this._points.push(evPt);\r\n\r\n return super.onMouseMotion(ev);\r\n }\r\n}\r\n\r\n/** Tool for placing SVG symbols on a Markup\r\n * @public\r\n */\r\nexport class SymbolTool extends RedlineTool {\r\n public static override toolId = \"Markup.Symbol\";\r\n public static override iconSpec = \"icon-symbol\";\r\n protected _symbol?: MarkupElement;\r\n\r\n constructor(protected _symbolData?: string, protected _applyCurrentStyle?: boolean) { super(); }\r\n\r\n public override async onInstall(): Promise<boolean> {\r\n if (undefined === this._symbolData)\r\n return false;\r\n return super.onInstall();\r\n }\r\n\r\n protected override showPrompt(): void {\r\n this.provideToolAssistance(0 === this._points.length ? (`${MarkupTool.toolKey}Symbol.Prompts.FirstPoint`) : `${CoreTools.tools}ElementSet.Prompts.OppositeCorner`, true);\r\n }\r\n\r\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\r\n if (undefined === this._symbolData)\r\n return;\r\n if (this._points.length < this._minPoints)\r\n return;\r\n const start = this._points[0];\r\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[this._points.length - 1];\r\n const vec = start.vectorTo(end);\r\n const width = Math.abs(vec.x);\r\n const height = Math.abs(vec.y);\r\n if ((width < 10 || height < 10) && (isDynamics || this._points.length !== this._minPoints))\r\n return;\r\n if (undefined === this._symbol) {\r\n const symbol = svgMarkup.group().svg(this._symbolData); // creating group instead of using symbol because of inability to flash/hilite multi-color symbol instance...\r\n if (0 === symbol.children().length) {\r\n symbol.remove();\r\n this._symbolData = undefined;\r\n }\r\n try {\r\n symbol.flatten(symbol);\r\n } catch { }\r\n\r\n this._symbol = symbol;\r\n } else if (!isDynamics) {\r\n svgMarkup.add(this._symbol);\r\n }\r\n const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points...\r\n if (!isDynamics && this._points.length === this._minPoints)\r\n this._symbol.size(ev.viewport!.viewRect.width * 0.1).center(offset.x, offset.y);\r\n else if (!ev.isShiftKey)\r\n this._symbol.size(width).move(offset.x, offset.y);\r\n else\r\n this._symbol.size(width, height).move(offset.x, offset.y);\r\n if (this._applyCurrentStyle) {\r\n const active = MarkupApp.props.active; // Apply color and transparency only; using active stroke-width, etc. for pre-defined symbols is likely undesirable...\r\n this._symbol.forElementsOfGroup((child) => {\r\n const css = window.getComputedStyle(child.node);\r\n const toValue = (val: string | null, newVal: string) => (!val || val === \"none\") ? \"none\" : newVal;\r\n child.css({ \"fill\": toValue(css.fill, active.element.fill), \"stroke\": toValue(css.stroke, active.element.stroke), \"fill-opacity\": active.element[\"fill-opacity\"], \"stroke-opacity\": active.element[\"stroke-opacity\"] });\r\n });\r\n }\r\n if (!isDynamics)\r\n this.onAdded(this._symbol);\r\n }\r\n\r\n public override async onDataButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\r\n if (undefined === ev.viewport || this._points.length !== this._minPoints)\r\n return EventHandled.No;\r\n\r\n this.createMarkup(this.markup.svgMarkup!, ev, false);\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n protected override clearDynamicsMarkup(isDynamics: boolean): void {\r\n if (!isDynamics)\r\n super.clearDynamicsMarkup(isDynamics); // For dynamics we don't create a new symbol each frame, we just set the width/height...\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RedlineTool.js","sourceRoot":"","sources":["../../src/RedlineTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module MarkupTools\n */\n\n// cspell:ignore rtmp stmp\n\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\nimport {\n BeButtonEvent, CoordinateLockOverrides, CoreTools, EventHandled, IModelApp, QuantityType, ToolAssistance, ToolAssistanceImage,\n ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection,\n} from \"@itwin/core-frontend\";\nimport { G, Marker, Element as MarkupElement } from \"@svgdotjs/svg.js\";\nimport { MarkupApp } from \"./Markup\";\nimport { MarkupTool } from \"./MarkupTool\";\n\n/** Base class for tools that place new Markup elements\n * @public\n */\nexport abstract class RedlineTool extends MarkupTool {\n protected _minPoints = 1;\n protected _nRequiredPoints = 2;\n protected readonly _points: Point3d[] = [];\n\n protected onAdded(el: MarkupElement) {\n const markup = this.markup;\n const undo = markup.undo;\n undo.performOperation(this.keyin, () => undo.onAdded(el));\n markup.selected.restart(el);\n }\n protected isComplete(_ev: BeButtonEvent) { return this._points.length >= this._nRequiredPoints; }\n protected override setupAndPromptForNextAction(): void {\n super.setupAndPromptForNextAction();\n this.markup.disablePick();\n IModelApp.toolAdmin.setCursor(0 === this._points.length ? IModelApp.viewManager.crossHairCursor : IModelApp.viewManager.dynamicsCursor);\n }\n\n protected createMarkup(_svgMarkup: G, _ev: BeButtonEvent, _isDynamics: boolean): void { }\n protected clearDynamicsMarkup(_isDynamics: boolean): void { this.markup.svgDynamics!.clear(); }\n\n public override async onRestartTool() { return this.exitTool(); } // Default to single shot and return control to select tool...\n public override async onCleanup() { this.clearDynamicsMarkup(false); }\n\n public override async onReinitialize() {\n this.clearDynamicsMarkup(false);\n return super.onReinitialize();\n }\n\n public override async onUndoPreviousStep(): Promise<boolean> {\n return (0 === this._points.length) ? false : (this.onReinitialize(), true);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (undefined === ev.viewport || this._points.length < this._minPoints)\n return;\n this.clearDynamicsMarkup(true);\n this.createMarkup(this.markup.svgDynamics!, ev, true);\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === ev.viewport)\n return EventHandled.No;\n\n this._points.push(MarkupApp.convertVpToVb(ev.viewPoint));\n if (!this.isComplete(ev)) {\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n this.createMarkup(this.markup.svgMarkup!, ev, false);\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n protected provideToolAssistance(mainInstrKey: string, singlePoint: boolean = false): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, IModelApp.localization.getLocalizedString(mainInstrKey));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n const acceptMsg = CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\");\n const rejectMsg = CoreTools.translate(\"ElementSet.Inputs.Exit\");\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(singlePoint ? ToolAssistanceImage.OneTouchTap : ToolAssistanceImage.OneTouchDrag, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, rejectMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, rejectMsg, false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n}\n\n/** Tool for placing Markup Lines\n * @public\n */\nexport class LineTool extends RedlineTool {\n public static override toolId = \"Markup.Line\";\n public static override iconSpec = \"icon-line\";\n\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\")); }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const start = this._points[0];\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\n const element = svgMarkup.line(start.x, start.y, end.x, end.y);\n this.setCurrentStyle(element, false);\n if (!isDynamics)\n this.onAdded(element);\n }\n}\n\n/** Tool for placing Markup Rectangles\n * @public\n */\nexport class RectangleTool extends RedlineTool {\n public static override toolId = \"Markup.Rectangle\";\n public static override iconSpec = \"icon-rectangle\";\n\n constructor(protected _cornerRadius?: number) { super(); } // Specify radius to create a rectangle with rounded corners.\n\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartCorner\" : \"ElementSet.Prompts.OppositeCorner\")); }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const start = this._points[0];\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\n const vec = start.vectorTo(end);\n const width = Math.abs(vec.x);\n const height = Math.abs(vec.y);\n if (width < 1 || height < 1)\n return;\n const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points...\n const element = svgMarkup.rect(width, height).move(offset.x, offset.y);\n this.setCurrentStyle(element, true);\n if (undefined !== this._cornerRadius)\n element.radius(this._cornerRadius);\n if (!isDynamics)\n this.onAdded(element);\n }\n}\n\n/** Tool for placing Markup Polygons\n * @public\n */\nexport class PolygonTool extends RedlineTool {\n public static override toolId = \"Markup.Polygon\";\n public static override iconSpec = \"icon-polygon\";\n\n constructor(protected _numSides?: number) { super(); } // Specify number of polygon sides. Default if undefined is 5.\n\n protected override showPrompt(): void { this.provideToolAssistance(MarkupTool.toolKey + (0 === this._points.length ? \"Polygon.Prompts.FirstPoint\" : \"Polygon.Prompts.NextPoint\")); }\n\n protected getPoints(points: number[], center: Point3d, edge: Point3d, numSides: number, inscribe: boolean): boolean {\n if (numSides < 3 || numSides > 100)\n return false;\n let radius = center.distanceXY(edge);\n if (radius < 1)\n return false;\n const delta = (Math.PI * 2.0) / numSides;\n const vec = center.vectorTo(edge);\n let angle = Vector3d.unitX().planarRadiansTo(vec, Vector3d.unitZ());\n if (!inscribe) {\n const theta = delta * 0.5;\n angle -= theta;\n radius /= Math.cos(theta);\n }\n\n const rtmp = Point3d.create();\n const stmp = Point3d.create();\n for (let i = 0; i < numSides; i++, angle += delta) {\n rtmp.x = radius * Math.cos(angle);\n rtmp.y = radius * Math.sin(angle);\n rtmp.z = 0.0;\n center.plus(rtmp, stmp);\n points.push(stmp.x);\n points.push(stmp.y);\n }\n return true;\n }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const center = this._points[0];\n const edge = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\n const pts: number[] = [];\n if (!this.getPoints(pts, center, edge, undefined !== this._numSides ? this._numSides : 5, true))\n return;\n const element = svgMarkup.polygon(pts);\n this.setCurrentStyle(element, true);\n if (!isDynamics)\n this.onAdded(element);\n }\n}\n\n/** Tool for placing Markup Clouds\n * @public\n */\nexport class CloudTool extends RedlineTool {\n public static override toolId = \"Markup.Cloud\";\n public static override iconSpec = \"icon-cloud\";\n protected _cloud?: MarkupElement;\n\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartCorner\" : \"ElementSet.Prompts.OppositeCorner\")); }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const start = this._points[0];\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\n const vec = start.vectorTo(end);\n const width = Math.abs(vec.x);\n const height = Math.abs(vec.y);\n if (width < 10 || height < 10)\n return;\n if (undefined === this._cloud) {\n this._cloud = svgMarkup.path(MarkupApp.props.active.cloud.path);\n } else if (!isDynamics) {\n svgMarkup.add(this._cloud);\n }\n const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points...\n this._cloud.move(offset.x, offset.y);\n this._cloud.width(width);\n this._cloud.height(height);\n this.setCurrentStyle(this._cloud, true);\n if (!isDynamics)\n this.onAdded(this._cloud);\n }\n\n protected override clearDynamicsMarkup(isDynamics: boolean): void {\n if (!isDynamics)\n super.clearDynamicsMarkup(isDynamics); // For dynamics we don't create a new cloud each frame, we just set the width/height...\n }\n}\n\n/** Tool for placing Markup Circles\n * @public\n */\nexport class CircleTool extends RedlineTool {\n public static override toolId = \"Markup.Circle\";\n public static override iconSpec = \"icon-circle\";\n\n protected override showPrompt(): void { this.provideToolAssistance(MarkupTool.toolKey + (0 === this._points.length ? \"Circle.Prompts.FirstPoint\" : \"Circle.Prompts.NextPoint\")); }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const start = this._points[0];\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\n const radius = start.distanceXY(end);\n if (radius < 1)\n return;\n const element = svgMarkup.circle(radius * 2.0).center(start.x, start.y);\n this.setCurrentStyle(element, true);\n if (!isDynamics)\n this.onAdded(element);\n }\n}\n\n/** Tool for placing Markup Ellipses\n * @public\n */\nexport class EllipseTool extends RedlineTool {\n public static override toolId = \"Markup.Ellipse\";\n public static override iconSpec = \"icon-ellipse\";\n\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartCorner\" : \"ElementSet.Prompts.OppositeCorner\")); }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const start = this._points[0];\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\n const vec = start.vectorTo(end);\n const width = Math.abs(vec.x);\n const height = Math.abs(vec.y);\n if (width < 1 || height < 1)\n return;\n const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points...\n const element = svgMarkup.ellipse(width, height).move(offset.x, offset.y);\n this.setCurrentStyle(element, true);\n if (!isDynamics)\n this.onAdded(element);\n }\n}\n\n/** Tool for placing Markup Arrows\n * @public\n */\nexport class ArrowTool extends RedlineTool {\n public static override toolId = \"Markup.Arrow\";\n public static override iconSpec = \"icon-callout\";\n\n /** ctor for ArrowTool\n * @param _arrowPos \"start\", \"end\", or \"both\". If undefined = \"end\".\n */\n constructor(protected _arrowPos?: string) { super(); }\n\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\")); }\n\n protected getOrCreateArrowMarker(color: string): Marker {\n const arrowProps = MarkupApp.props.active.arrow;\n return this.markup.createArrowMarker(color, arrowProps.length, arrowProps.width);\n }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const start = this._points[0];\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\n const vec = start.vectorTo(end);\n if (!vec.normalizeInPlace())\n return;\n const element = svgMarkup.line(start.x, start.y, end.x, end.y);\n this.setCurrentStyle(element, false);\n const marker = this.getOrCreateArrowMarker(element.css(\"stroke\"));\n const addToStart = (\"start\" === this._arrowPos || \"both\" === this._arrowPos);\n const addToEnd = (\"end\" === this._arrowPos || \"both\" === this._arrowPos);\n if (addToStart)\n element.marker(\"start\", marker);\n if (addToEnd || !addToStart)\n element.marker(\"end\", marker);\n if (!isDynamics)\n this.onAdded(element);\n }\n}\n\n/** Tool for measuring distances and placing Markups of them\n * @public\n */\nexport class DistanceTool extends ArrowTool {\n public static override toolId = \"Markup.Distance\";\n public static override iconSpec = \"icon-distance\";\n protected readonly _startPointWorld = new Point3d();\n\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\")); }\n protected override setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n IModelApp.toolAdmin.toolState.coordLockOvr = CoordinateLockOverrides.None;\n super.setupAndPromptForNextAction();\n }\n\n protected getFormattedDistance(distance: number): string | undefined {\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined === formatterSpec)\n return undefined;\n return IModelApp.quantityFormatter.formatQuantity(distance, formatterSpec);\n }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const start = this._points[0];\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[1];\n const vec = start.vectorTo(end);\n if (!vec.normalizeInPlace())\n return;\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined === formatterSpec)\n return;\n\n const distanceLine = svgMarkup.line(start.x, start.y, end.x, end.y);\n this.setCurrentStyle(distanceLine, false);\n const marker = this.getOrCreateArrowMarker(distanceLine.css(\"stroke\"));\n distanceLine.marker(\"start\", marker);\n distanceLine.marker(\"end\", marker);\n\n const loc = start.interpolate(0.5, end);\n const distance = IModelApp.quantityFormatter.formatQuantity(this._startPointWorld.distance(ev.point), formatterSpec);\n const text = svgMarkup.plain(distance).addClass(MarkupApp.textClass).attr(\"text-anchor\", \"middle\").translate(loc.x, loc.y);\n this.setCurrentTextStyle(text);\n const textWithBg = this.createBoxedText(svgMarkup, text);\n\n if (!isDynamics) {\n const markup = this.markup;\n const undo = markup.undo;\n undo.performOperation(this.keyin, () => {\n undo.onAdded(distanceLine);\n undo.onAdded(textWithBg);\n });\n\n markup.selected.restart(textWithBg); // Select text+box so that user can freely position relative to distance line...\n }\n }\n\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length)) {\n await this.onReinitialize();\n return EventHandled.No;\n }\n if (0 === this._points.length)\n this._startPointWorld.setFrom(ev.point);\n return super.onDataButtonDown(ev);\n }\n}\n\n/** Tool for placing Markup freehand sketches\n * @public\n */\nexport class SketchTool extends RedlineTool {\n public static override toolId = \"Markup.Sketch\";\n public static override iconSpec = \"icon-draw\";\n protected _minDistSquared = 100;\n\n protected override showPrompt(): void { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? \"ElementSet.Prompts.StartPoint\" : \"ElementSet.Prompts.EndPoint\")); }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))\n return;\n const pts: number[] = [];\n const evPt = MarkupApp.convertVpToVb(ev.viewPoint);\n this._points.forEach((pt) => {\n pts.push(pt.x);\n pts.push(pt.y);\n });\n\n if (isDynamics && !evPt.isAlmostEqualXY(this._points[this._points.length - 1])) {\n pts.push(evPt.x);\n pts.push(evPt.y);\n }\n\n const isClosed = (this._points.length > 2 && (this._points[0].distanceSquaredXY(isDynamics ? evPt : this._points[this._points.length - 1]) < this._minDistSquared * 2));\n const element = isClosed ? svgMarkup.polygon(pts) : svgMarkup.polyline(pts);\n this.setCurrentStyle(element, isClosed);\n if (!isDynamics)\n this.onAdded(element);\n }\n\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n const evPt = MarkupApp.convertVpToVb(ev.viewPoint);\n if (undefined !== ev.viewport && this._points.length > 0 && evPt.distanceSquaredXY(this._points[this._points.length - 1]) > this._minDistSquared)\n this._points.push(evPt);\n\n return super.onMouseMotion(ev);\n }\n}\n\n/** Tool for placing SVG symbols on a Markup\n * @public\n */\nexport class SymbolTool extends RedlineTool {\n public static override toolId = \"Markup.Symbol\";\n public static override iconSpec = \"icon-symbol\";\n protected _symbol?: MarkupElement;\n\n constructor(protected _symbolData?: string, protected _applyCurrentStyle?: boolean) { super(); }\n\n public override async onInstall(): Promise<boolean> {\n if (undefined === this._symbolData)\n return false;\n return super.onInstall();\n }\n\n protected override showPrompt(): void {\n this.provideToolAssistance(0 === this._points.length ? (`${MarkupTool.toolKey}Symbol.Prompts.FirstPoint`) : `${CoreTools.tools}ElementSet.Prompts.OppositeCorner`, true);\n }\n\n protected override createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void {\n if (undefined === this._symbolData)\n return;\n if (this._points.length < this._minPoints)\n return;\n const start = this._points[0];\n const end = isDynamics ? MarkupApp.convertVpToVb(ev.viewPoint) : this._points[this._points.length - 1];\n const vec = start.vectorTo(end);\n const width = Math.abs(vec.x);\n const height = Math.abs(vec.y);\n if ((width < 10 || height < 10) && (isDynamics || this._points.length !== this._minPoints))\n return;\n if (undefined === this._symbol) {\n const symbol = svgMarkup.group().svg(this._symbolData); // creating group instead of using symbol because of inability to flash/hilite multi-color symbol instance...\n if (0 === symbol.children().length) {\n symbol.remove();\n this._symbolData = undefined;\n }\n try {\n symbol.flatten(symbol);\n } catch { }\n\n this._symbol = symbol;\n } else if (!isDynamics) {\n svgMarkup.add(this._symbol);\n }\n const offset = Point3d.create(vec.x < 0 ? end.x : start.x, vec.y < 0 ? end.y : start.y); // define location by corner points...\n if (!isDynamics && this._points.length === this._minPoints)\n this._symbol.size(ev.viewport!.viewRect.width * 0.1).center(offset.x, offset.y);\n else if (!ev.isShiftKey)\n this._symbol.size(width).move(offset.x, offset.y);\n else\n this._symbol.size(width, height).move(offset.x, offset.y);\n if (this._applyCurrentStyle) {\n const active = MarkupApp.props.active; // Apply color and transparency only; using active stroke-width, etc. for pre-defined symbols is likely undesirable...\n this._symbol.forElementsOfGroup((child) => {\n const css = window.getComputedStyle(child.node);\n const toValue = (val: string | null, newVal: string) => (!val || val === \"none\") ? \"none\" : newVal;\n child.css({ \"fill\": toValue(css.fill, active.element.fill), \"stroke\": toValue(css.stroke, active.element.stroke), \"fill-opacity\": active.element[\"fill-opacity\"], \"stroke-opacity\": active.element[\"stroke-opacity\"] });\n });\n }\n if (!isDynamics)\n this.onAdded(this._symbol);\n }\n\n public override async onDataButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === ev.viewport || this._points.length !== this._minPoints)\n return EventHandled.No;\n\n this.createMarkup(this.markup.svgMarkup!, ev, false);\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n protected override clearDynamicsMarkup(isDynamics: boolean): void {\n if (!isDynamics)\n super.clearDynamicsMarkup(isDynamics); // For dynamics we don't create a new symbol each frame, we just set the width/height...\n }\n}\n"]}
@@ -457,6 +457,8 @@ export class SelectTool extends MarkupTool {
457
457
  this._dragging = [];
458
458
  this._isBoxSelect = false;
459
459
  }
460
+ static { this.toolId = "Markup.Select"; }
461
+ static { this.iconSpec = "icon-cursor"; }
460
462
  get flashedElement() { return this._flashedElement; }
461
463
  set flashedElement(el) {
462
464
  if (el === this._flashedElement)
@@ -731,6 +733,4 @@ export class SelectTool extends MarkupTool {
731
733
  return EventHandled.No;
732
734
  }
733
735
  }
734
- SelectTool.toolId = "Markup.Select";
735
- SelectTool.iconSpec = "icon-cursor";
736
736
  //# sourceMappingURL=SelectTool.js.map