@itwin/core-markup 4.6.0-dev.9 → 4.7.0-dev.3
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/Markup.d.ts +1 -0
- package/lib/cjs/Markup.d.ts.map +1 -1
- package/lib/cjs/Markup.js +1 -1
- package/lib/cjs/Markup.js.map +1 -1
- package/lib/cjs/MarkupTool.d.ts +1 -0
- package/lib/cjs/MarkupTool.d.ts.map +1 -1
- package/lib/cjs/MarkupTool.js +1 -1
- package/lib/cjs/MarkupTool.js.map +1 -1
- package/lib/cjs/RedlineTool.d.ts +1 -0
- package/lib/cjs/RedlineTool.d.ts.map +1 -1
- package/lib/cjs/RedlineTool.js +10 -10
- package/lib/cjs/RedlineTool.js.map +1 -1
- package/lib/cjs/SelectTool.d.ts +1 -0
- package/lib/cjs/SelectTool.d.ts.map +1 -1
- package/lib/cjs/SelectTool.js +1 -1
- package/lib/cjs/SelectTool.js.map +1 -1
- package/lib/cjs/SvgJsExt.js.map +1 -1
- package/lib/cjs/TextEdit.d.ts +1 -0
- package/lib/cjs/TextEdit.d.ts.map +1 -1
- package/lib/cjs/TextEdit.js +2 -2
- package/lib/cjs/TextEdit.js.map +1 -1
- package/lib/cjs/Undo.d.ts +1 -0
- package/lib/cjs/Undo.d.ts.map +1 -1
- package/lib/esm/Markup.d.ts +1 -0
- package/lib/esm/Markup.d.ts.map +1 -1
- package/lib/esm/Markup.js +1 -2
- package/lib/esm/Markup.js.map +1 -1
- package/lib/esm/MarkupTool.d.ts +1 -0
- package/lib/esm/MarkupTool.d.ts.map +1 -1
- package/lib/esm/MarkupTool.js +1 -2
- package/lib/esm/MarkupTool.js.map +1 -1
- package/lib/esm/RedlineTool.d.ts +1 -0
- package/lib/esm/RedlineTool.d.ts.map +1 -1
- package/lib/esm/RedlineTool.js +10 -20
- package/lib/esm/RedlineTool.js.map +1 -1
- package/lib/esm/SelectTool.d.ts +1 -0
- package/lib/esm/SelectTool.d.ts.map +1 -1
- package/lib/esm/SelectTool.js +1 -2
- package/lib/esm/SelectTool.js.map +1 -1
- package/lib/esm/SvgJsExt.js.map +1 -1
- package/lib/esm/TextEdit.d.ts +1 -0
- package/lib/esm/TextEdit.d.ts.map +1 -1
- package/lib/esm/TextEdit.js +2 -4
- package/lib/esm/TextEdit.js.map +1 -1
- package/lib/esm/Undo.d.ts +1 -0
- package/lib/esm/Undo.d.ts.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedlineTool.d.ts","sourceRoot":"","sources":["../../src/RedlineTool.ts"],"names":[],"mappings":"AAIA;;GAEG
|
|
1
|
+
{"version":3,"file":"RedlineTool.d.ts","sourceRoot":"","sources":["../../src/RedlineTool.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/RedlineTool.js
CHANGED
|
@@ -86,7 +86,7 @@ export class RedlineTool extends MarkupTool {
|
|
|
86
86
|
/** Tool for placing Markup Lines
|
|
87
87
|
* @public
|
|
88
88
|
*/
|
|
89
|
-
class LineTool extends RedlineTool {
|
|
89
|
+
export class LineTool extends RedlineTool {
|
|
90
90
|
showPrompt() { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartPoint" : "ElementSet.Prompts.EndPoint")); }
|
|
91
91
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
92
92
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -101,11 +101,10 @@ class LineTool extends RedlineTool {
|
|
|
101
101
|
}
|
|
102
102
|
LineTool.toolId = "Markup.Line";
|
|
103
103
|
LineTool.iconSpec = "icon-line";
|
|
104
|
-
export { LineTool };
|
|
105
104
|
/** Tool for placing Markup Rectangles
|
|
106
105
|
* @public
|
|
107
106
|
*/
|
|
108
|
-
class RectangleTool extends RedlineTool {
|
|
107
|
+
export class RectangleTool extends RedlineTool {
|
|
109
108
|
constructor(_cornerRadius) {
|
|
110
109
|
super();
|
|
111
110
|
this._cornerRadius = _cornerRadius;
|
|
@@ -132,11 +131,10 @@ class RectangleTool extends RedlineTool {
|
|
|
132
131
|
}
|
|
133
132
|
RectangleTool.toolId = "Markup.Rectangle";
|
|
134
133
|
RectangleTool.iconSpec = "icon-rectangle";
|
|
135
|
-
export { RectangleTool };
|
|
136
134
|
/** Tool for placing Markup Polygons
|
|
137
135
|
* @public
|
|
138
136
|
*/
|
|
139
|
-
class PolygonTool extends RedlineTool {
|
|
137
|
+
export class PolygonTool extends RedlineTool {
|
|
140
138
|
constructor(_numSides) {
|
|
141
139
|
super();
|
|
142
140
|
this._numSides = _numSides;
|
|
@@ -184,11 +182,10 @@ class PolygonTool extends RedlineTool {
|
|
|
184
182
|
}
|
|
185
183
|
PolygonTool.toolId = "Markup.Polygon";
|
|
186
184
|
PolygonTool.iconSpec = "icon-polygon";
|
|
187
|
-
export { PolygonTool };
|
|
188
185
|
/** Tool for placing Markup Clouds
|
|
189
186
|
* @public
|
|
190
187
|
*/
|
|
191
|
-
class CloudTool extends RedlineTool {
|
|
188
|
+
export class CloudTool extends RedlineTool {
|
|
192
189
|
showPrompt() { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartCorner" : "ElementSet.Prompts.OppositeCorner")); }
|
|
193
190
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
194
191
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -221,11 +218,10 @@ class CloudTool extends RedlineTool {
|
|
|
221
218
|
}
|
|
222
219
|
CloudTool.toolId = "Markup.Cloud";
|
|
223
220
|
CloudTool.iconSpec = "icon-cloud";
|
|
224
|
-
export { CloudTool };
|
|
225
221
|
/** Tool for placing Markup Circles
|
|
226
222
|
* @public
|
|
227
223
|
*/
|
|
228
|
-
class CircleTool extends RedlineTool {
|
|
224
|
+
export class CircleTool extends RedlineTool {
|
|
229
225
|
showPrompt() { this.provideToolAssistance(MarkupTool.toolKey + (0 === this._points.length ? "Circle.Prompts.FirstPoint" : "Circle.Prompts.NextPoint")); }
|
|
230
226
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
231
227
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -243,11 +239,10 @@ class CircleTool extends RedlineTool {
|
|
|
243
239
|
}
|
|
244
240
|
CircleTool.toolId = "Markup.Circle";
|
|
245
241
|
CircleTool.iconSpec = "icon-circle";
|
|
246
|
-
export { CircleTool };
|
|
247
242
|
/** Tool for placing Markup Ellipses
|
|
248
243
|
* @public
|
|
249
244
|
*/
|
|
250
|
-
class EllipseTool extends RedlineTool {
|
|
245
|
+
export class EllipseTool extends RedlineTool {
|
|
251
246
|
showPrompt() { this.provideToolAssistance(CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartCorner" : "ElementSet.Prompts.OppositeCorner")); }
|
|
252
247
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
253
248
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -268,11 +263,10 @@ class EllipseTool extends RedlineTool {
|
|
|
268
263
|
}
|
|
269
264
|
EllipseTool.toolId = "Markup.Ellipse";
|
|
270
265
|
EllipseTool.iconSpec = "icon-ellipse";
|
|
271
|
-
export { EllipseTool };
|
|
272
266
|
/** Tool for placing Markup Arrows
|
|
273
267
|
* @public
|
|
274
268
|
*/
|
|
275
|
-
class ArrowTool extends RedlineTool {
|
|
269
|
+
export class ArrowTool extends RedlineTool {
|
|
276
270
|
/** ctor for ArrowTool
|
|
277
271
|
* @param _arrowPos "start", "end", or "both". If undefined = "end".
|
|
278
272
|
*/
|
|
@@ -308,11 +302,10 @@ class ArrowTool extends RedlineTool {
|
|
|
308
302
|
}
|
|
309
303
|
ArrowTool.toolId = "Markup.Arrow";
|
|
310
304
|
ArrowTool.iconSpec = "icon-callout";
|
|
311
|
-
export { ArrowTool };
|
|
312
305
|
/** Tool for measuring distances and placing Markups of them
|
|
313
306
|
* @public
|
|
314
307
|
*/
|
|
315
|
-
class DistanceTool extends ArrowTool {
|
|
308
|
+
export class DistanceTool extends ArrowTool {
|
|
316
309
|
constructor() {
|
|
317
310
|
super(...arguments);
|
|
318
311
|
this._startPointWorld = new Point3d();
|
|
@@ -372,11 +365,10 @@ class DistanceTool extends ArrowTool {
|
|
|
372
365
|
}
|
|
373
366
|
DistanceTool.toolId = "Markup.Distance";
|
|
374
367
|
DistanceTool.iconSpec = "icon-distance";
|
|
375
|
-
export { DistanceTool };
|
|
376
368
|
/** Tool for placing Markup freehand sketches
|
|
377
369
|
* @public
|
|
378
370
|
*/
|
|
379
|
-
class SketchTool extends RedlineTool {
|
|
371
|
+
export class SketchTool extends RedlineTool {
|
|
380
372
|
constructor() {
|
|
381
373
|
super(...arguments);
|
|
382
374
|
this._minDistSquared = 100;
|
|
@@ -410,11 +402,10 @@ class SketchTool extends RedlineTool {
|
|
|
410
402
|
}
|
|
411
403
|
SketchTool.toolId = "Markup.Sketch";
|
|
412
404
|
SketchTool.iconSpec = "icon-draw";
|
|
413
|
-
export { SketchTool };
|
|
414
405
|
/** Tool for placing SVG symbols on a Markup
|
|
415
406
|
* @public
|
|
416
407
|
*/
|
|
417
|
-
class SymbolTool extends RedlineTool {
|
|
408
|
+
export class SymbolTool extends RedlineTool {
|
|
418
409
|
constructor(_symbolData, _applyCurrentStyle) {
|
|
419
410
|
super();
|
|
420
411
|
this._symbolData = _symbolData;
|
|
@@ -491,5 +482,4 @@ class SymbolTool extends RedlineTool {
|
|
|
491
482
|
}
|
|
492
483
|
SymbolTool.toolId = "Markup.Symbol";
|
|
493
484
|
SymbolTool.iconSpec = "icon-symbol";
|
|
494
|
-
export { SymbolTool };
|
|
495
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":["/*---------------------------------------------------------------------------------------------\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"]}
|
package/lib/esm/SelectTool.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module MarkupTools
|
|
3
3
|
*/
|
|
4
|
+
/// <reference path="SvgJsExt.d.ts" />
|
|
4
5
|
import { BeEvent } from "@itwin/core-bentley";
|
|
5
6
|
import { Point2d, Transform, XAndY } from "@itwin/core-geometry";
|
|
6
7
|
import { BeButtonEvent, BeModifierKeys, BeTouchEvent, EventHandled } from "@itwin/core-frontend";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTool.d.ts","sourceRoot":"","sources":["../../src/SelectTool.ts"],"names":[],"mappings":"AAIA;;GAEG
|
|
1
|
+
{"version":3,"file":"SelectTool.d.ts","sourceRoot":"","sources":["../../src/SelectTool.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/SelectTool.js
CHANGED
|
@@ -450,7 +450,7 @@ export class MarkupSelected {
|
|
|
450
450
|
/** Provides UI for selection, delete, move, copy, bring-to-front, send-to-back, etc. for Markup SVG elements
|
|
451
451
|
* @public
|
|
452
452
|
*/
|
|
453
|
-
class SelectTool extends MarkupTool {
|
|
453
|
+
export class SelectTool extends MarkupTool {
|
|
454
454
|
constructor() {
|
|
455
455
|
super(...arguments);
|
|
456
456
|
this._dragging = [];
|
|
@@ -732,5 +732,4 @@ class SelectTool extends MarkupTool {
|
|
|
732
732
|
}
|
|
733
733
|
SelectTool.toolId = "Markup.Select";
|
|
734
734
|
SelectTool.iconSpec = "icon-cursor";
|
|
735
|
-
export { SelectTool };
|
|
736
735
|
//# sourceMappingURL=SelectTool.js.map
|