@itwin/core-markup 5.0.0-dev.7 → 5.0.0-dev.72
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 +31 -1
- package/lib/cjs/Markup.js +130 -113
- package/lib/cjs/Markup.js.map +1 -1
- package/lib/cjs/MarkupTool.js +2 -1
- package/lib/cjs/MarkupTool.js.map +1 -1
- package/lib/cjs/RedlineTool.js +32 -34
- package/lib/cjs/RedlineTool.js.map +1 -1
- package/lib/cjs/SelectTool.js +39 -12
- package/lib/cjs/SelectTool.js.map +1 -1
- package/lib/cjs/SvgJsExt.js.map +1 -1
- package/lib/cjs/TextEdit.js +12 -9
- package/lib/cjs/TextEdit.js.map +1 -1
- package/lib/cjs/Undo.js +20 -8
- package/lib/cjs/Undo.js.map +1 -1
- package/lib/cjs/core-markup.js.map +1 -1
- package/lib/esm/Markup.js +130 -113
- package/lib/esm/Markup.js.map +1 -1
- package/lib/esm/MarkupTool.js +2 -1
- package/lib/esm/MarkupTool.js.map +1 -1
- package/lib/esm/RedlineTool.js +32 -34
- package/lib/esm/RedlineTool.js.map +1 -1
- package/lib/esm/SelectTool.js +39 -12
- package/lib/esm/SelectTool.js.map +1 -1
- package/lib/esm/SvgJsExt.js.map +1 -1
- package/lib/esm/TextEdit.js +12 -9
- package/lib/esm/TextEdit.js.map +1 -1
- package/lib/esm/Undo.js +20 -8
- package/lib/esm/Undo.js.map +1 -1
- package/lib/esm/core-markup.js.map +1 -1
- package/lib/public/locales/en/MarkupTools.json +98 -98
- package/package.json +13 -13
package/lib/cjs/RedlineTool.js
CHANGED
|
@@ -17,12 +17,9 @@ const MarkupTool_1 = require("./MarkupTool");
|
|
|
17
17
|
* @public
|
|
18
18
|
*/
|
|
19
19
|
class RedlineTool extends MarkupTool_1.MarkupTool {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
this._nRequiredPoints = 2;
|
|
24
|
-
this._points = [];
|
|
25
|
-
}
|
|
20
|
+
_minPoints = 1;
|
|
21
|
+
_nRequiredPoints = 2;
|
|
22
|
+
_points = [];
|
|
26
23
|
onAdded(el) {
|
|
27
24
|
const markup = this.markup;
|
|
28
25
|
const undo = markup.undo;
|
|
@@ -91,6 +88,8 @@ exports.RedlineTool = RedlineTool;
|
|
|
91
88
|
* @public
|
|
92
89
|
*/
|
|
93
90
|
class LineTool extends RedlineTool {
|
|
91
|
+
static toolId = "Markup.Line";
|
|
92
|
+
static iconSpec = "icon-line";
|
|
94
93
|
showPrompt() { this.provideToolAssistance(core_frontend_1.CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartPoint" : "ElementSet.Prompts.EndPoint")); }
|
|
95
94
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
96
95
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -104,12 +103,13 @@ class LineTool extends RedlineTool {
|
|
|
104
103
|
}
|
|
105
104
|
}
|
|
106
105
|
exports.LineTool = LineTool;
|
|
107
|
-
LineTool.toolId = "Markup.Line";
|
|
108
|
-
LineTool.iconSpec = "icon-line";
|
|
109
106
|
/** Tool for placing Markup Rectangles
|
|
110
107
|
* @public
|
|
111
108
|
*/
|
|
112
109
|
class RectangleTool extends RedlineTool {
|
|
110
|
+
_cornerRadius;
|
|
111
|
+
static toolId = "Markup.Rectangle";
|
|
112
|
+
static iconSpec = "icon-rectangle";
|
|
113
113
|
constructor(_cornerRadius) {
|
|
114
114
|
super();
|
|
115
115
|
this._cornerRadius = _cornerRadius;
|
|
@@ -135,12 +135,13 @@ class RectangleTool extends RedlineTool {
|
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
exports.RectangleTool = RectangleTool;
|
|
138
|
-
RectangleTool.toolId = "Markup.Rectangle";
|
|
139
|
-
RectangleTool.iconSpec = "icon-rectangle";
|
|
140
138
|
/** Tool for placing Markup Polygons
|
|
141
139
|
* @public
|
|
142
140
|
*/
|
|
143
141
|
class PolygonTool extends RedlineTool {
|
|
142
|
+
_numSides;
|
|
143
|
+
static toolId = "Markup.Polygon";
|
|
144
|
+
static iconSpec = "icon-polygon";
|
|
144
145
|
constructor(_numSides) {
|
|
145
146
|
super();
|
|
146
147
|
this._numSides = _numSides;
|
|
@@ -187,12 +188,13 @@ class PolygonTool extends RedlineTool {
|
|
|
187
188
|
}
|
|
188
189
|
}
|
|
189
190
|
exports.PolygonTool = PolygonTool;
|
|
190
|
-
PolygonTool.toolId = "Markup.Polygon";
|
|
191
|
-
PolygonTool.iconSpec = "icon-polygon";
|
|
192
191
|
/** Tool for placing Markup Clouds
|
|
193
192
|
* @public
|
|
194
193
|
*/
|
|
195
194
|
class CloudTool extends RedlineTool {
|
|
195
|
+
static toolId = "Markup.Cloud";
|
|
196
|
+
static iconSpec = "icon-cloud";
|
|
197
|
+
_cloud;
|
|
196
198
|
showPrompt() { this.provideToolAssistance(core_frontend_1.CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartCorner" : "ElementSet.Prompts.OppositeCorner")); }
|
|
197
199
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
198
200
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -224,12 +226,12 @@ class CloudTool extends RedlineTool {
|
|
|
224
226
|
}
|
|
225
227
|
}
|
|
226
228
|
exports.CloudTool = CloudTool;
|
|
227
|
-
CloudTool.toolId = "Markup.Cloud";
|
|
228
|
-
CloudTool.iconSpec = "icon-cloud";
|
|
229
229
|
/** Tool for placing Markup Circles
|
|
230
230
|
* @public
|
|
231
231
|
*/
|
|
232
232
|
class CircleTool extends RedlineTool {
|
|
233
|
+
static toolId = "Markup.Circle";
|
|
234
|
+
static iconSpec = "icon-circle";
|
|
233
235
|
showPrompt() { this.provideToolAssistance(MarkupTool_1.MarkupTool.toolKey + (0 === this._points.length ? "Circle.Prompts.FirstPoint" : "Circle.Prompts.NextPoint")); }
|
|
234
236
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
235
237
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -246,12 +248,12 @@ class CircleTool extends RedlineTool {
|
|
|
246
248
|
}
|
|
247
249
|
}
|
|
248
250
|
exports.CircleTool = CircleTool;
|
|
249
|
-
CircleTool.toolId = "Markup.Circle";
|
|
250
|
-
CircleTool.iconSpec = "icon-circle";
|
|
251
251
|
/** Tool for placing Markup Ellipses
|
|
252
252
|
* @public
|
|
253
253
|
*/
|
|
254
254
|
class EllipseTool extends RedlineTool {
|
|
255
|
+
static toolId = "Markup.Ellipse";
|
|
256
|
+
static iconSpec = "icon-ellipse";
|
|
255
257
|
showPrompt() { this.provideToolAssistance(core_frontend_1.CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartCorner" : "ElementSet.Prompts.OppositeCorner")); }
|
|
256
258
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
257
259
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -271,12 +273,13 @@ class EllipseTool extends RedlineTool {
|
|
|
271
273
|
}
|
|
272
274
|
}
|
|
273
275
|
exports.EllipseTool = EllipseTool;
|
|
274
|
-
EllipseTool.toolId = "Markup.Ellipse";
|
|
275
|
-
EllipseTool.iconSpec = "icon-ellipse";
|
|
276
276
|
/** Tool for placing Markup Arrows
|
|
277
277
|
* @public
|
|
278
278
|
*/
|
|
279
279
|
class ArrowTool extends RedlineTool {
|
|
280
|
+
_arrowPos;
|
|
281
|
+
static toolId = "Markup.Arrow";
|
|
282
|
+
static iconSpec = "icon-callout";
|
|
280
283
|
/** ctor for ArrowTool
|
|
281
284
|
* @param _arrowPos "start", "end", or "both". If undefined = "end".
|
|
282
285
|
*/
|
|
@@ -311,16 +314,13 @@ class ArrowTool extends RedlineTool {
|
|
|
311
314
|
}
|
|
312
315
|
}
|
|
313
316
|
exports.ArrowTool = ArrowTool;
|
|
314
|
-
ArrowTool.toolId = "Markup.Arrow";
|
|
315
|
-
ArrowTool.iconSpec = "icon-callout";
|
|
316
317
|
/** Tool for measuring distances and placing Markups of them
|
|
317
318
|
* @public
|
|
318
319
|
*/
|
|
319
320
|
class DistanceTool extends ArrowTool {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}
|
|
321
|
+
static toolId = "Markup.Distance";
|
|
322
|
+
static iconSpec = "icon-distance";
|
|
323
|
+
_startPointWorld = new core_geometry_1.Point3d();
|
|
324
324
|
showPrompt() { this.provideToolAssistance(core_frontend_1.CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartPoint" : "ElementSet.Prompts.EndPoint")); }
|
|
325
325
|
setupAndPromptForNextAction() {
|
|
326
326
|
core_frontend_1.IModelApp.accuSnap.enableSnap(true);
|
|
@@ -375,16 +375,13 @@ class DistanceTool extends ArrowTool {
|
|
|
375
375
|
}
|
|
376
376
|
}
|
|
377
377
|
exports.DistanceTool = DistanceTool;
|
|
378
|
-
DistanceTool.toolId = "Markup.Distance";
|
|
379
|
-
DistanceTool.iconSpec = "icon-distance";
|
|
380
378
|
/** Tool for placing Markup freehand sketches
|
|
381
379
|
* @public
|
|
382
380
|
*/
|
|
383
381
|
class SketchTool extends RedlineTool {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
}
|
|
382
|
+
static toolId = "Markup.Sketch";
|
|
383
|
+
static iconSpec = "icon-draw";
|
|
384
|
+
_minDistSquared = 100;
|
|
388
385
|
showPrompt() { this.provideToolAssistance(core_frontend_1.CoreTools.tools + (0 === this._points.length ? "ElementSet.Prompts.StartPoint" : "ElementSet.Prompts.EndPoint")); }
|
|
389
386
|
createMarkup(svgMarkup, ev, isDynamics) {
|
|
390
387
|
if (this._points.length < (isDynamics ? this._nRequiredPoints - 1 : this._nRequiredPoints))
|
|
@@ -413,12 +410,15 @@ class SketchTool extends RedlineTool {
|
|
|
413
410
|
}
|
|
414
411
|
}
|
|
415
412
|
exports.SketchTool = SketchTool;
|
|
416
|
-
SketchTool.toolId = "Markup.Sketch";
|
|
417
|
-
SketchTool.iconSpec = "icon-draw";
|
|
418
413
|
/** Tool for placing SVG symbols on a Markup
|
|
419
414
|
* @public
|
|
420
415
|
*/
|
|
421
416
|
class SymbolTool extends RedlineTool {
|
|
417
|
+
_symbolData;
|
|
418
|
+
_applyCurrentStyle;
|
|
419
|
+
static toolId = "Markup.Symbol";
|
|
420
|
+
static iconSpec = "icon-symbol";
|
|
421
|
+
_symbol;
|
|
422
422
|
constructor(_symbolData, _applyCurrentStyle) {
|
|
423
423
|
super();
|
|
424
424
|
this._symbolData = _symbolData;
|
|
@@ -494,6 +494,4 @@ class SymbolTool extends RedlineTool {
|
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
496
|
exports.SymbolTool = SymbolTool;
|
|
497
|
-
SymbolTool.toolId = "Markup.Symbol";
|
|
498
|
-
SymbolTool.iconSpec = "icon-symbol";
|
|
499
497
|
//# 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"]}
|
package/lib/cjs/SelectTool.js
CHANGED
|
@@ -21,6 +21,8 @@ const TextEdit_1 = require("./TextEdit");
|
|
|
21
21
|
* @public
|
|
22
22
|
*/
|
|
23
23
|
class ModifyHandle {
|
|
24
|
+
handles;
|
|
25
|
+
vbToStartTrn;
|
|
24
26
|
constructor(handles) {
|
|
25
27
|
this.handles = handles;
|
|
26
28
|
}
|
|
@@ -69,6 +71,12 @@ exports.ModifyHandle = ModifyHandle;
|
|
|
69
71
|
* @public
|
|
70
72
|
*/
|
|
71
73
|
class StretchHandle extends ModifyHandle {
|
|
74
|
+
_circle;
|
|
75
|
+
posNpc;
|
|
76
|
+
startPos;
|
|
77
|
+
opposite;
|
|
78
|
+
startBox;
|
|
79
|
+
startCtm;
|
|
72
80
|
constructor(handles, xy, cursor) {
|
|
73
81
|
super(handles);
|
|
74
82
|
this.posNpc = new core_geometry_1.Point2d(xy[0], xy[1]);
|
|
@@ -124,6 +132,10 @@ class StretchHandle extends ModifyHandle {
|
|
|
124
132
|
* @public
|
|
125
133
|
*/
|
|
126
134
|
class RotateHandle extends ModifyHandle {
|
|
135
|
+
handles;
|
|
136
|
+
_line;
|
|
137
|
+
_circle;
|
|
138
|
+
location;
|
|
127
139
|
constructor(handles) {
|
|
128
140
|
super(handles);
|
|
129
141
|
this.handles = handles;
|
|
@@ -153,6 +165,10 @@ class RotateHandle extends ModifyHandle {
|
|
|
153
165
|
* @public
|
|
154
166
|
*/
|
|
155
167
|
class VertexHandle extends ModifyHandle {
|
|
168
|
+
handles;
|
|
169
|
+
_circle;
|
|
170
|
+
_x;
|
|
171
|
+
_y;
|
|
156
172
|
constructor(handles, index) {
|
|
157
173
|
super(handles);
|
|
158
174
|
this.handles = handles;
|
|
@@ -182,6 +198,10 @@ class VertexHandle extends ModifyHandle {
|
|
|
182
198
|
* @public
|
|
183
199
|
*/
|
|
184
200
|
class MoveHandle extends ModifyHandle {
|
|
201
|
+
handles;
|
|
202
|
+
_shape;
|
|
203
|
+
_outline;
|
|
204
|
+
_lastPos;
|
|
185
205
|
constructor(handles, showBBox) {
|
|
186
206
|
super(handles);
|
|
187
207
|
this.handles = handles;
|
|
@@ -234,11 +254,17 @@ class MoveHandle extends ModifyHandle {
|
|
|
234
254
|
* @public
|
|
235
255
|
*/
|
|
236
256
|
class Handles {
|
|
257
|
+
ss;
|
|
258
|
+
el;
|
|
259
|
+
handles = [];
|
|
260
|
+
active;
|
|
261
|
+
dragging = false;
|
|
262
|
+
group;
|
|
263
|
+
npcToVbTrn;
|
|
264
|
+
vbToBoxTrn;
|
|
237
265
|
constructor(ss, el) {
|
|
238
266
|
this.ss = ss;
|
|
239
267
|
this.el = el;
|
|
240
|
-
this.handles = [];
|
|
241
|
-
this.dragging = false;
|
|
242
268
|
this.group = ss.svg.group();
|
|
243
269
|
if (el instanceof svg_js_1.Line) {
|
|
244
270
|
this.handles.push(new MoveHandle(this, false));
|
|
@@ -339,6 +365,11 @@ exports.Handles = Handles;
|
|
|
339
365
|
* @public
|
|
340
366
|
*/
|
|
341
367
|
class MarkupSelected {
|
|
368
|
+
svg;
|
|
369
|
+
elements = new Set();
|
|
370
|
+
handles;
|
|
371
|
+
/** Called whenever elements are added or removed from this SelectionSet */
|
|
372
|
+
onChanged = new core_bentley_1.BeEvent();
|
|
342
373
|
get size() { return this.elements.size; }
|
|
343
374
|
get isEmpty() { return this.size === 0; }
|
|
344
375
|
has(el) { return this.elements.has(el); }
|
|
@@ -357,9 +388,6 @@ class MarkupSelected {
|
|
|
357
388
|
}
|
|
358
389
|
constructor(svg) {
|
|
359
390
|
this.svg = svg;
|
|
360
|
-
this.elements = new Set();
|
|
361
|
-
/** Called whenever elements are added or removed from this SelectionSet */
|
|
362
|
-
this.onChanged = new core_bentley_1.BeEvent();
|
|
363
391
|
}
|
|
364
392
|
clearEditors() {
|
|
365
393
|
if (this.handles) {
|
|
@@ -458,11 +486,12 @@ exports.MarkupSelected = MarkupSelected;
|
|
|
458
486
|
* @public
|
|
459
487
|
*/
|
|
460
488
|
class SelectTool extends MarkupTool_1.MarkupTool {
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
489
|
+
static toolId = "Markup.Select";
|
|
490
|
+
static iconSpec = "icon-cursor";
|
|
491
|
+
_flashedElement;
|
|
492
|
+
_dragging = [];
|
|
493
|
+
_anchorPt;
|
|
494
|
+
_isBoxSelect = false;
|
|
466
495
|
get flashedElement() { return this._flashedElement; }
|
|
467
496
|
set flashedElement(el) {
|
|
468
497
|
if (el === this._flashedElement)
|
|
@@ -738,6 +767,4 @@ class SelectTool extends MarkupTool_1.MarkupTool {
|
|
|
738
767
|
}
|
|
739
768
|
}
|
|
740
769
|
exports.SelectTool = SelectTool;
|
|
741
|
-
SelectTool.toolId = "Markup.Select";
|
|
742
|
-
SelectTool.iconSpec = "icon-cursor";
|
|
743
770
|
//# sourceMappingURL=SelectTool.js.map
|