plotboilerplate 1.12.10 → 1.16.0
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/README.md +5 -1
- package/changelog.md +50 -0
- package/dist/index.esm.js +999 -510
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/plotboilerplate.browser.min.js +1 -1
- package/dist/plotboilerplate.browser.min.js.map +1 -1
- package/dist/plotboilerplate.js +1013 -509
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +1 -1
- package/src/cjs/BezierPath.d.ts +45 -2
- package/src/cjs/BezierPath.js +114 -18
- package/src/cjs/BezierPath.js.map +1 -1
- package/src/cjs/Circle.d.ts +25 -10
- package/src/cjs/Circle.js +38 -33
- package/src/cjs/Circle.js.map +1 -1
- package/src/cjs/CircleSector.d.ts +27 -13
- package/src/cjs/CircleSector.js +38 -23
- package/src/cjs/CircleSector.js.map +1 -1
- package/src/cjs/CubicBezierCurve.d.ts +17 -1
- package/src/cjs/CubicBezierCurve.js +78 -79
- package/src/cjs/CubicBezierCurve.js.map +1 -1
- package/src/cjs/KeyHandler.d.ts +10 -3
- package/src/cjs/KeyHandler.js +28 -23
- package/src/cjs/KeyHandler.js.map +1 -1
- package/src/cjs/Line.d.ts +2 -1
- package/src/cjs/Line.js +19 -18
- package/src/cjs/Line.js.map +1 -1
- package/src/cjs/MouseHandler.js +43 -53
- package/src/cjs/MouseHandler.js.map +1 -1
- package/src/cjs/PBImage.d.ts +16 -1
- package/src/cjs/PBImage.js +13 -3
- package/src/cjs/PBImage.js.map +1 -1
- package/src/cjs/PBText.d.ts +130 -0
- package/src/cjs/PBText.js +76 -0
- package/src/cjs/PBText.js.map +1 -0
- package/src/cjs/PlotBoilerplate.d.ts +2 -1
- package/src/cjs/PlotBoilerplate.js +44 -16
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +37 -1
- package/src/cjs/Polygon.js +131 -54
- package/src/cjs/Polygon.js.map +1 -1
- package/src/cjs/Triangle.d.ts +16 -1
- package/src/cjs/Triangle.js +50 -54
- package/src/cjs/Triangle.js.map +1 -1
- package/src/cjs/VEllipse.d.ts +16 -1
- package/src/cjs/VEllipse.js +25 -12
- package/src/cjs/VEllipse.js.map +1 -1
- package/src/cjs/VEllipseSector.d.ts +15 -1
- package/src/cjs/VEllipseSector.js +11 -1
- package/src/cjs/VEllipseSector.js.map +1 -1
- package/src/cjs/Vector.d.ts +3 -1
- package/src/cjs/Vector.js +32 -36
- package/src/cjs/Vector.js.map +1 -1
- package/src/cjs/VertTuple.d.ts +15 -1
- package/src/cjs/VertTuple.js +14 -19
- package/src/cjs/VertTuple.js.map +1 -1
- package/src/cjs/Vertex.d.ts +66 -4
- package/src/cjs/Vertex.js +99 -17
- package/src/cjs/Vertex.js.map +1 -1
- package/src/cjs/VertexListeners.d.ts +12 -8
- package/src/cjs/VertexListeners.js +18 -25
- package/src/cjs/VertexListeners.js.map +1 -1
- package/src/cjs/draw.d.ts +30 -2
- package/src/cjs/draw.js +51 -6
- package/src/cjs/draw.js.map +1 -1
- package/src/cjs/drawgl.d.ts +29 -2
- package/src/cjs/drawgl.js +21 -4
- package/src/cjs/drawgl.js.map +1 -1
- package/src/cjs/drawutilssvg.d.ts +25 -7
- package/src/cjs/drawutilssvg.js +62 -14
- package/src/cjs/drawutilssvg.js.map +1 -1
- package/src/cjs/entry.js +1 -0
- package/src/cjs/index.d.ts +1 -0
- package/src/cjs/index.js +1 -0
- package/src/cjs/index.js.map +1 -1
- package/src/cjs/interfaces/DrawLib.d.ts +27 -6
- package/src/cjs/interfaces/DrawLib.js +3 -0
- package/src/cjs/interfaces/DrawLib.js.map +1 -1
- package/src/cjs/interfaces/core.d.ts +9 -1
- package/src/cjs/interfaces/core.js +1 -0
- package/src/cjs/interfaces/core.js.map +1 -1
- package/src/cjs/utils/creategui.js +1 -1
- package/src/cjs/utils/findInVertexArray.d.ts +19 -0
- package/src/cjs/utils/findInVertexArray.js +29 -0
- package/src/cjs/utils/findInVertexArray.js.map +1 -0
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +55 -28
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/cjs/utils/io/DndFileHandler.d.ts +63 -0
- package/src/cjs/utils/io/DndFileHandler.js +112 -0
- package/src/cjs/utils/io/DndFileHandler.js.map +1 -0
- package/src/cjs/utils/io/FileDrop.d.ts +98 -0
- package/src/cjs/utils/io/FileDrop.js +142 -0
- package/src/cjs/utils/io/FileDrop.js.map +1 -0
- package/src/esm/BezierPath.d.ts +45 -2
- package/src/esm/BezierPath.js +114 -18
- package/src/esm/BezierPath.js.map +1 -1
- package/src/esm/Circle.d.ts +25 -10
- package/src/esm/Circle.js +38 -33
- package/src/esm/Circle.js.map +1 -1
- package/src/esm/CircleSector.d.ts +27 -13
- package/src/esm/CircleSector.js +38 -23
- package/src/esm/CircleSector.js.map +1 -1
- package/src/esm/CubicBezierCurve.d.ts +17 -1
- package/src/esm/CubicBezierCurve.js +78 -79
- package/src/esm/CubicBezierCurve.js.map +1 -1
- package/src/esm/KeyHandler.d.ts +10 -3
- package/src/esm/KeyHandler.js +28 -23
- package/src/esm/KeyHandler.js.map +1 -1
- package/src/esm/Line.d.ts +2 -1
- package/src/esm/Line.js +19 -18
- package/src/esm/Line.js.map +1 -1
- package/src/esm/MouseHandler.js +43 -53
- package/src/esm/MouseHandler.js.map +1 -1
- package/src/esm/PBImage.d.ts +16 -1
- package/src/esm/PBImage.js +13 -3
- package/src/esm/PBImage.js.map +1 -1
- package/src/esm/PBText.d.ts +130 -0
- package/src/esm/PBText.js +71 -0
- package/src/esm/PBText.js.map +1 -0
- package/src/esm/PlotBoilerplate.d.ts +2 -1
- package/src/esm/PlotBoilerplate.js +44 -16
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +37 -1
- package/src/esm/Polygon.js +131 -54
- package/src/esm/Polygon.js.map +1 -1
- package/src/esm/Triangle.d.ts +16 -1
- package/src/esm/Triangle.js +50 -54
- package/src/esm/Triangle.js.map +1 -1
- package/src/esm/VEllipse.d.ts +16 -1
- package/src/esm/VEllipse.js +25 -12
- package/src/esm/VEllipse.js.map +1 -1
- package/src/esm/VEllipseSector.d.ts +15 -1
- package/src/esm/VEllipseSector.js +11 -1
- package/src/esm/VEllipseSector.js.map +1 -1
- package/src/esm/Vector.d.ts +3 -1
- package/src/esm/Vector.js +32 -36
- package/src/esm/Vector.js.map +1 -1
- package/src/esm/VertTuple.d.ts +15 -1
- package/src/esm/VertTuple.js +14 -19
- package/src/esm/VertTuple.js.map +1 -1
- package/src/esm/Vertex.d.ts +66 -4
- package/src/esm/Vertex.js +99 -17
- package/src/esm/Vertex.js.map +1 -1
- package/src/esm/VertexListeners.d.ts +12 -8
- package/src/esm/VertexListeners.js +18 -25
- package/src/esm/VertexListeners.js.map +1 -1
- package/src/esm/draw.d.ts +30 -2
- package/src/esm/draw.js +51 -6
- package/src/esm/draw.js.map +1 -1
- package/src/esm/drawgl.d.ts +29 -2
- package/src/esm/drawgl.js +21 -4
- package/src/esm/drawgl.js.map +1 -1
- package/src/esm/drawutilssvg.d.ts +25 -7
- package/src/esm/drawutilssvg.js +62 -14
- package/src/esm/drawutilssvg.js.map +1 -1
- package/src/esm/entry.js +1 -0
- package/src/esm/index.d.ts +1 -0
- package/src/esm/index.js +1 -0
- package/src/esm/index.js.map +1 -1
- package/src/esm/interfaces/DrawLib.d.ts +27 -6
- package/src/esm/interfaces/DrawLib.js +3 -0
- package/src/esm/interfaces/DrawLib.js.map +1 -1
- package/src/esm/interfaces/core.d.ts +9 -1
- package/src/esm/interfaces/core.js +1 -0
- package/src/esm/interfaces/core.js.map +1 -1
- package/src/esm/utils/findInVertexArray.d.ts +19 -0
- package/src/esm/utils/findInVertexArray.js +25 -0
- package/src/esm/utils/findInVertexArray.js.map +1 -0
- package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js +54 -28
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/esm/utils/io/DndFileHandler.d.ts +63 -0
- package/src/esm/utils/io/DndFileHandler.js +106 -0
- package/src/esm/utils/io/DndFileHandler.js.map +1 -0
- package/src/esm/utils/io/FileDrop.d.ts +98 -0
- package/src/esm/utils/io/FileDrop.js +136 -0
- package/src/esm/utils/io/FileDrop.js.map +1 -0
- package/src/ts/BezierPath.ts +133 -16
- package/src/ts/Circle.ts +213 -200
- package/src/ts/CircleSector.ts +171 -141
- package/src/ts/CubicBezierCurve.ts +777 -810
- package/src/ts/KeyHandler.ts +221 -212
- package/src/ts/Line.ts +77 -80
- package/src/ts/MouseHandler.ts +356 -368
- package/src/ts/PBImage.ts +81 -68
- package/src/ts/PBText.ts +166 -0
- package/src/ts/PlotBoilerplate.ts +48 -20
- package/src/ts/Polygon.ts +519 -451
- package/src/ts/Triangle.ts +484 -489
- package/src/ts/VEllipse.ts +36 -11
- package/src/ts/VEllipseSector.ts +20 -1
- package/src/ts/Vector.ts +164 -160
- package/src/ts/VertTuple.ts +333 -338
- package/src/ts/Vertex.ts +117 -16
- package/src/ts/VertexListeners.ts +248 -266
- package/src/ts/draw.ts +71 -8
- package/src/ts/drawgl.ts +48 -8
- package/src/ts/drawutilssvg.ts +94 -17
- package/src/ts/index.ts +1 -0
- package/src/ts/interfaces/DrawLib.ts +30 -4
- package/src/ts/interfaces/core.ts +9 -0
- package/src/ts/utils/findInVertexArray.ts +28 -0
- package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -30
- package/src/ts/utils/io/FileDrop.ts +178 -0
- package/dist/plotboilerplate.browser.min.js.LICENSE.txt +0 -8
- package/src/ts/utils/algorithms/clearPolygonDuplicateVertices.ts~ +0 -5
- package/src/ts/utils/algorithms/findPolygonSelfIntersections.ts~ +0 -45
- package/src/ts/utils/algorithms/sh-tmp.ts~ +0 -59
- package/src/ts/utils/algorithms/splitPolygonToNonIntersecting.ts~ +0 -113
- package/src/ts/utils/algorithms/sutherlandHodgman.ts~ +0 -88
package/src/ts/PBImage.ts
CHANGED
|
@@ -4,20 +4,20 @@
|
|
|
4
4
|
* @modified 2019-03-23 Added JSDoc tags.
|
|
5
5
|
* @modified 2020-03-25 Ported this class from vanilla-JS to Typescript.
|
|
6
6
|
* @modified 2021-01-20 Added UID.
|
|
7
|
-
* @
|
|
7
|
+
* @modified 2022-02-02 Added the `destroy` method.
|
|
8
|
+
* @modified 2022-02-02 Cleared the `PBImage.toSVGString` function (deprecated). Use `drawutilssvg` instead.
|
|
9
|
+
* @version 1.2.0
|
|
8
10
|
*
|
|
9
11
|
* @file PBImage
|
|
10
|
-
* @fileoverview As native Image objects have only a position and with
|
|
12
|
+
* @fileoverview As native Image objects have only a position and with
|
|
11
13
|
* and height thei are not suitable for UI dragging interfaces.
|
|
12
14
|
* @public
|
|
13
15
|
**/
|
|
14
16
|
|
|
15
|
-
|
|
16
17
|
import { Vertex } from "./Vertex";
|
|
17
18
|
import { UIDGenerator } from "./UIDGenerator";
|
|
18
19
|
import { SVGSerializable, UID } from "./interfaces";
|
|
19
20
|
|
|
20
|
-
|
|
21
21
|
/**
|
|
22
22
|
* @classdesc A wrapper for image objects. Has an upper left and a lower right corner point.
|
|
23
23
|
*
|
|
@@ -27,76 +27,89 @@ import { SVGSerializable, UID } from "./interfaces";
|
|
|
27
27
|
* @requires UIDGenerator
|
|
28
28
|
*/
|
|
29
29
|
export class PBImage implements SVGSerializable {
|
|
30
|
+
/**
|
|
31
|
+
* Required to generate proper CSS classes and other class related IDs.
|
|
32
|
+
**/
|
|
33
|
+
readonly className: string = "PBImage";
|
|
30
34
|
|
|
35
|
+
/**
|
|
36
|
+
* The UID of this drawable object.
|
|
37
|
+
*
|
|
38
|
+
* @member {UID}
|
|
39
|
+
* @memberof PBImage
|
|
40
|
+
* @instance
|
|
41
|
+
* @readonly
|
|
42
|
+
*/
|
|
43
|
+
readonly uid: UID;
|
|
31
44
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
45
|
+
/**
|
|
46
|
+
* @member {Vertex}
|
|
47
|
+
* @memberof PBImage
|
|
48
|
+
* @instance
|
|
49
|
+
*/
|
|
50
|
+
image: HTMLImageElement;
|
|
36
51
|
|
|
52
|
+
/**
|
|
53
|
+
* @member {Vertex}
|
|
54
|
+
* @memberof PBImage
|
|
55
|
+
* @instance
|
|
56
|
+
*/
|
|
57
|
+
upperLeft: Vertex;
|
|
37
58
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
* @readonly
|
|
45
|
-
*/
|
|
46
|
-
readonly uid : UID;
|
|
47
|
-
|
|
59
|
+
/**
|
|
60
|
+
* @member {Vertex}
|
|
61
|
+
* @memberof PBImage
|
|
62
|
+
* @instance
|
|
63
|
+
*/
|
|
64
|
+
lowerRight: Vertex;
|
|
48
65
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
66
|
+
/**
|
|
67
|
+
* @member isDestroyed
|
|
68
|
+
* @memberof PBImage
|
|
69
|
+
* @type {boolean}
|
|
70
|
+
* @instance
|
|
71
|
+
*/
|
|
72
|
+
isDestroyed: boolean;
|
|
55
73
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
74
|
+
/**
|
|
75
|
+
* The constructor.
|
|
76
|
+
*
|
|
77
|
+
* @constructor
|
|
78
|
+
* @name PBImage
|
|
79
|
+
* @param {Image} image - The actual image.
|
|
80
|
+
* @param {Vertex} upperLeft - The upper left corner.
|
|
81
|
+
* @param {Vertex} lowerRight - The lower right corner.
|
|
82
|
+
**/
|
|
83
|
+
constructor(image: HTMLImageElement, upperLeft: Vertex, lowerRight: Vertex) {
|
|
84
|
+
this.uid = UIDGenerator.next();
|
|
85
|
+
this.image = image;
|
|
86
|
+
this.upperLeft = upperLeft;
|
|
87
|
+
this.lowerRight = lowerRight;
|
|
88
|
+
}
|
|
62
89
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
* @param {Vertex} upperLeft - The upper left corner.
|
|
78
|
-
* @param {Vertex} lowerRight - The lower right corner.
|
|
79
|
-
**/
|
|
80
|
-
constructor( image:HTMLImageElement, upperLeft:Vertex, lowerRight:Vertex ) {
|
|
81
|
-
this.uid = UIDGenerator.next();
|
|
82
|
-
this.image = image;
|
|
83
|
-
this.upperLeft = upperLeft;
|
|
84
|
-
this.lowerRight = lowerRight;
|
|
85
|
-
};
|
|
90
|
+
/**
|
|
91
|
+
* Convert this vertex to SVG code.
|
|
92
|
+
*
|
|
93
|
+
* @deprecated DEPRECATION Please use the drawutilssvg library and an XMLSerializer instead.
|
|
94
|
+
* @method toSVGString
|
|
95
|
+
* @param {object=} options - An optional set of options, like 'className'.
|
|
96
|
+
* @return {string} A string representing the SVG code for this vertex.
|
|
97
|
+
* @instance
|
|
98
|
+
* @memberof PBImage
|
|
99
|
+
**/
|
|
100
|
+
toSVGString(options: { className?: string }): string {
|
|
101
|
+
console.warn("PBImage is not yet SVG serializable. Returning empty SVG string.");
|
|
102
|
+
return "";
|
|
103
|
+
}
|
|
86
104
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
**/
|
|
98
|
-
toSVGString( options:{ className?:string } ) : string {
|
|
99
|
-
console.warn( "PBImage is not yet SVG serializable. Returning empty SVG string." );
|
|
100
|
-
return "";
|
|
101
|
-
};
|
|
105
|
+
/**
|
|
106
|
+
* This function should invalidate any installed listeners and invalidate this object.
|
|
107
|
+
* After calling this function the object might not hold valid data any more and
|
|
108
|
+
* should not be used.
|
|
109
|
+
*/
|
|
110
|
+
destroy() {
|
|
111
|
+
this.upperLeft.destroy();
|
|
112
|
+
this.lowerRight.destroy();
|
|
113
|
+
this.isDestroyed = true;
|
|
114
|
+
}
|
|
102
115
|
}
|
package/src/ts/PBText.ts
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Ikaros Kappler
|
|
3
|
+
* @date 2021-11-16
|
|
4
|
+
* @modified 2022-02-02 Added the `destroy` method.
|
|
5
|
+
* @version 1.1.0
|
|
6
|
+
**/
|
|
7
|
+
|
|
8
|
+
import { UIDGenerator } from "./UIDGenerator";
|
|
9
|
+
import { Vertex } from "./Vertex";
|
|
10
|
+
import { FontOptions, FontStyle, FontWeight, SVGSerializable, UID } from "./interfaces";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @classdesc A simple text element: position, fontSize, fontFamily, color, textAlign, lineHeight and rotation.
|
|
14
|
+
*
|
|
15
|
+
* @requires FontOptions
|
|
16
|
+
* @requires FontSize
|
|
17
|
+
* @requires FontStyle
|
|
18
|
+
* @requires FontWeight
|
|
19
|
+
* @requires Vertex
|
|
20
|
+
* @requires SVGSerializale
|
|
21
|
+
* @requires UID
|
|
22
|
+
* @requires UIDGenerator
|
|
23
|
+
**/
|
|
24
|
+
export class PBText implements SVGSerializable, FontOptions {
|
|
25
|
+
/**
|
|
26
|
+
* Required to generate proper CSS classes and other class related IDs.
|
|
27
|
+
**/
|
|
28
|
+
readonly className: string = "PBText";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The UID of this drawable object.
|
|
32
|
+
*
|
|
33
|
+
* @member {UID}
|
|
34
|
+
* @memberof PBText
|
|
35
|
+
* @instance
|
|
36
|
+
* @readonly
|
|
37
|
+
*/
|
|
38
|
+
readonly uid: UID;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @member {string}
|
|
42
|
+
* @memberof PBText
|
|
43
|
+
* @instance
|
|
44
|
+
*/
|
|
45
|
+
text: string;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @member {Vertex}
|
|
49
|
+
* @memberof PBText
|
|
50
|
+
* @instance
|
|
51
|
+
*/
|
|
52
|
+
anchor: Vertex;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @member {number}
|
|
56
|
+
* @memberof PBText
|
|
57
|
+
* @instance
|
|
58
|
+
*/
|
|
59
|
+
fontSize: number | undefined;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @member {number}
|
|
63
|
+
* @memberof PBText
|
|
64
|
+
* @instance
|
|
65
|
+
*/
|
|
66
|
+
lineHeight: number | undefined;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @member {FontWeight}
|
|
70
|
+
* @memberof PBText
|
|
71
|
+
* @instance
|
|
72
|
+
*/
|
|
73
|
+
fontWeight: FontWeight | undefined;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @member {FontStyle}
|
|
77
|
+
* @memberof PBText
|
|
78
|
+
* @instance
|
|
79
|
+
*/
|
|
80
|
+
fontStyle: FontStyle | undefined;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @member {CanvasRenderingContext2D["textAlign"]}
|
|
84
|
+
* @memberof PBText
|
|
85
|
+
* @instance
|
|
86
|
+
*/
|
|
87
|
+
textAlign: CanvasRenderingContext2D["textAlign"] | undefined;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @member {number}
|
|
91
|
+
* @memberof PBText
|
|
92
|
+
* @instance
|
|
93
|
+
*/
|
|
94
|
+
rotation: number | undefined;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @member {number}
|
|
98
|
+
* @memberof PBText
|
|
99
|
+
* @instance
|
|
100
|
+
*/
|
|
101
|
+
fontFamily: string | undefined;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @member {number}
|
|
105
|
+
* @memberof PBText
|
|
106
|
+
* @instance
|
|
107
|
+
*/
|
|
108
|
+
color: string | undefined;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @member isDestroyed
|
|
112
|
+
* @memberof PBText
|
|
113
|
+
* @type {boolean}
|
|
114
|
+
* @instance
|
|
115
|
+
*/
|
|
116
|
+
isDestroyed: boolean;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Create a new circle with given center point and radius.
|
|
120
|
+
*
|
|
121
|
+
* @constructor
|
|
122
|
+
* @name Circle
|
|
123
|
+
* @param {Vertex} center - The center point of the circle.
|
|
124
|
+
* @param {number} radius - The radius of the circle.
|
|
125
|
+
*/
|
|
126
|
+
constructor(text: string, anchor?: Vertex, options?: FontOptions) {
|
|
127
|
+
this.uid = UIDGenerator.next();
|
|
128
|
+
this.text = text;
|
|
129
|
+
this.anchor = anchor ?? new Vertex();
|
|
130
|
+
this.color = options.color;
|
|
131
|
+
this.fontFamily = options.fontFamily;
|
|
132
|
+
this.fontSize = options.fontSize;
|
|
133
|
+
this.fontStyle = options.fontStyle;
|
|
134
|
+
this.fontWeight = options.fontWeight;
|
|
135
|
+
this.lineHeight = options.lineHeight;
|
|
136
|
+
this.textAlign = options.textAlign;
|
|
137
|
+
this.rotation = options.rotation;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Create an SVG representation of this circle.
|
|
142
|
+
*
|
|
143
|
+
* @deprecated DEPRECATION Please use the drawutilssvg library and an XMLSerializer instead.
|
|
144
|
+
* @method toSVGString
|
|
145
|
+
* @param {object=} options - An optional set of options, like 'className'.
|
|
146
|
+
* @return {string} A string representing the SVG code for this vertex.
|
|
147
|
+
* @instance
|
|
148
|
+
* @memberof Circle
|
|
149
|
+
*/
|
|
150
|
+
toSVGString(options: { className?: string }) {
|
|
151
|
+
console.warn(
|
|
152
|
+
"[PBText.toSVGString()] This function is not implemented as it defines a deprecated method. Use the 'drawutilssvg.text()' method instead."
|
|
153
|
+
);
|
|
154
|
+
return "";
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* This function should invalidate any installed listeners and invalidate this object.
|
|
159
|
+
* After calling this function the object might not hold valid data any more and
|
|
160
|
+
* should not be used.
|
|
161
|
+
*/
|
|
162
|
+
destroy() {
|
|
163
|
+
this.anchor.destroy();
|
|
164
|
+
this.isDestroyed = true;
|
|
165
|
+
}
|
|
166
|
+
} // END class
|
|
@@ -73,7 +73,8 @@
|
|
|
73
73
|
* @modified 2021-03-03 Added the `VEllipseSector` drawable.
|
|
74
74
|
* @modified 2021-03-29 Clearing `currentClassName` and `currentId` after drawing each drawable.
|
|
75
75
|
* @modified 2021-04-25 Extending `remove` to accept arrays of drawables.
|
|
76
|
-
* @
|
|
76
|
+
* @modified 2021-11-16 Adding the `PBText` drawable.
|
|
77
|
+
* @version 1.15.0
|
|
77
78
|
*
|
|
78
79
|
* @file PlotBoilerplate
|
|
79
80
|
* @fileoverview The main class.
|
|
@@ -118,6 +119,8 @@ import {
|
|
|
118
119
|
XYDimension,
|
|
119
120
|
DatGuiProps
|
|
120
121
|
} from "./interfaces";
|
|
122
|
+
import { PBText } from "./PBText";
|
|
123
|
+
import { AlloyFingerOptions } from "alloyfinger-typescript/src/cjs/alloy_finger";
|
|
121
124
|
|
|
122
125
|
/**
|
|
123
126
|
* @classdesc The main class of the PlotBoilerplate.
|
|
@@ -521,6 +524,12 @@ export class PlotBoilerplate {
|
|
|
521
524
|
image: {
|
|
522
525
|
color: "#a8a8a8",
|
|
523
526
|
lineWidth: 1
|
|
527
|
+
},
|
|
528
|
+
text: {
|
|
529
|
+
color: "rgba(192,0,128,0.5)",
|
|
530
|
+
lineWidth: 1,
|
|
531
|
+
fill: true,
|
|
532
|
+
anchor: true
|
|
524
533
|
}
|
|
525
534
|
}; // END drawConfig
|
|
526
535
|
|
|
@@ -656,7 +665,7 @@ export class PlotBoilerplate {
|
|
|
656
665
|
var blob = new Blob([svgCode], { type: "image/svg;charset=utf-8" });
|
|
657
666
|
// See documentation for FileSaver.js for usage.
|
|
658
667
|
// https://github.com/eligrey/FileSaver.js
|
|
659
|
-
if (typeof globalThis["saveAs"]
|
|
668
|
+
if (typeof globalThis["saveAs"] !== "function")
|
|
660
669
|
throw "Cannot save file; did you load the ./utils/savefile helper function and the eligrey/SaveFile library?";
|
|
661
670
|
var _saveAs = globalThis["saveAs"];
|
|
662
671
|
_saveAs(blob, "plotboilerplate.svg");
|
|
@@ -768,7 +777,6 @@ export class PlotBoilerplate {
|
|
|
768
777
|
add(drawable: Drawable | Array<Drawable>, redraw?: boolean) {
|
|
769
778
|
if (Array.isArray(drawable)) {
|
|
770
779
|
const arr: Array<Drawable> = drawable as Array<Drawable>;
|
|
771
|
-
// for( var i in arr )
|
|
772
780
|
for (var i = 0; i < arr.length; i++) {
|
|
773
781
|
this.add(arr[i], false);
|
|
774
782
|
}
|
|
@@ -806,8 +814,9 @@ export class PlotBoilerplate {
|
|
|
806
814
|
this.drawables.push(drawable);
|
|
807
815
|
} else if (drawable instanceof Polygon) {
|
|
808
816
|
this.drawables.push(drawable);
|
|
809
|
-
|
|
810
|
-
|
|
817
|
+
for (var i = 0; i < drawable.vertices.length; i++) {
|
|
818
|
+
this.vertices.push(drawable.vertices[i]);
|
|
819
|
+
}
|
|
811
820
|
} else if (drawable instanceof Triangle) {
|
|
812
821
|
this.drawables.push(drawable);
|
|
813
822
|
this.vertices.push(drawable.a);
|
|
@@ -817,7 +826,9 @@ export class PlotBoilerplate {
|
|
|
817
826
|
this.drawables.push(drawable);
|
|
818
827
|
const bezierPath: BezierPath = drawable as BezierPath;
|
|
819
828
|
for (var i = 0; i < bezierPath.bezierCurves.length; i++) {
|
|
820
|
-
if (!drawable.adjustCircular && i == 0)
|
|
829
|
+
if (!drawable.adjustCircular && i == 0) {
|
|
830
|
+
this.vertices.push(bezierPath.bezierCurves[i].startPoint);
|
|
831
|
+
}
|
|
821
832
|
this.vertices.push(bezierPath.bezierCurves[i].endPoint);
|
|
822
833
|
this.vertices.push(bezierPath.bezierCurves[i].startControlPoint);
|
|
823
834
|
this.vertices.push(bezierPath.bezierCurves[i].endControlPoint);
|
|
@@ -834,6 +845,10 @@ export class PlotBoilerplate {
|
|
|
834
845
|
drawable.lowerRight.add(e.params.dragAmount);
|
|
835
846
|
});
|
|
836
847
|
drawable.lowerRight.attr.selectable = false;
|
|
848
|
+
} else if (drawable instanceof PBText) {
|
|
849
|
+
this.vertices.push(drawable.anchor);
|
|
850
|
+
this.drawables.push(drawable);
|
|
851
|
+
drawable.anchor.attr.selectable = false;
|
|
837
852
|
} else {
|
|
838
853
|
throw "Cannot add drawable of unrecognized type: " + typeof drawable + ".";
|
|
839
854
|
}
|
|
@@ -882,7 +897,7 @@ export class PlotBoilerplate {
|
|
|
882
897
|
}
|
|
883
898
|
}
|
|
884
899
|
for (var i = 0; i < this.drawables.length; i++) {
|
|
885
|
-
if (this.drawables[i] === drawable) {
|
|
900
|
+
if (this.drawables[i] === drawable || this.drawables[i].uid === drawable.uid) {
|
|
886
901
|
this.drawables.splice(i, 1);
|
|
887
902
|
|
|
888
903
|
if (removeWithVertices) {
|
|
@@ -923,6 +938,8 @@ export class PlotBoilerplate {
|
|
|
923
938
|
} else if (drawable instanceof PBImage) {
|
|
924
939
|
this.removeVertex(drawable.upperLeft, false);
|
|
925
940
|
this.removeVertex(drawable.lowerRight, false);
|
|
941
|
+
} else if (drawable instanceof PBText) {
|
|
942
|
+
this.removeVertex(drawable.anchor, false);
|
|
926
943
|
}
|
|
927
944
|
} // END removeWithVertices
|
|
928
945
|
|
|
@@ -947,7 +964,9 @@ export class PlotBoilerplate {
|
|
|
947
964
|
for (var i = 0; i < this.vertices.length; i++) {
|
|
948
965
|
if (this.vertices[i] === vert) {
|
|
949
966
|
this.vertices.splice(i, 1);
|
|
950
|
-
if (redraw)
|
|
967
|
+
if (redraw) {
|
|
968
|
+
this.redraw();
|
|
969
|
+
}
|
|
951
970
|
return;
|
|
952
971
|
}
|
|
953
972
|
}
|
|
@@ -987,7 +1006,9 @@ export class PlotBoilerplate {
|
|
|
987
1006
|
this.transformMousePosition(pixelPosition.x, pixelPosition.y),
|
|
988
1007
|
pixelTolerance / Math.min(this.config.cssScaleX, this.config.cssScaleY)
|
|
989
1008
|
);
|
|
990
|
-
if (p && p.typeName == "vertex")
|
|
1009
|
+
if (p && p.typeName == "vertex") {
|
|
1010
|
+
return this.vertices[p.vindex];
|
|
1011
|
+
}
|
|
991
1012
|
return undefined;
|
|
992
1013
|
}
|
|
993
1014
|
|
|
@@ -1320,6 +1341,15 @@ export class PlotBoilerplate {
|
|
|
1320
1341
|
draw.circleHandle(d.lowerRight, 3, this.drawConfig.image.color);
|
|
1321
1342
|
d.lowerRight.attr.renderTime = renderTime;
|
|
1322
1343
|
}
|
|
1344
|
+
} else if (d instanceof PBText) {
|
|
1345
|
+
fill.setCurrentId(d.uid);
|
|
1346
|
+
fill.text(d.text, d.anchor.x, d.anchor.y, d);
|
|
1347
|
+
if (this.drawConfig.text.anchor) {
|
|
1348
|
+
draw.setCurrentId(`${d.uid}_a0`);
|
|
1349
|
+
draw.setCurrentClassName(`${d.className}-anchor`);
|
|
1350
|
+
(this.drawConfig.text.fill ? fill : draw).point(d.anchor, this.drawConfig.text.color);
|
|
1351
|
+
}
|
|
1352
|
+
d.anchor.attr.renderTime = renderTime;
|
|
1323
1353
|
} else {
|
|
1324
1354
|
console.error("Cannot draw object. Unknown class.");
|
|
1325
1355
|
}
|
|
@@ -1617,7 +1647,6 @@ export class PlotBoilerplate {
|
|
|
1617
1647
|
// Apply the zoom (the tolerant area should not shrink or grow when zooming)
|
|
1618
1648
|
tolerance /= _self.draw.scale.x;
|
|
1619
1649
|
// Search in vertices
|
|
1620
|
-
// for( var vindex in _self.vertices ) {
|
|
1621
1650
|
for (var vindex = 0; vindex < _self.vertices.length; vindex++) {
|
|
1622
1651
|
var vert: Vertex = _self.vertices[vindex];
|
|
1623
1652
|
if ((vert.attr.draggable || vert.attr.selectable) && vert.distance(point) < tolerance) {
|
|
@@ -1638,10 +1667,7 @@ export class PlotBoilerplate {
|
|
|
1638
1667
|
* @return {void}
|
|
1639
1668
|
**/
|
|
1640
1669
|
private handleClick(e: XMouseEvent) {
|
|
1641
|
-
// x:number,y:number) {
|
|
1642
1670
|
const _self: PlotBoilerplate = this;
|
|
1643
|
-
// const x:number = e.params.pos.x;
|
|
1644
|
-
//const y:number = e.params.pos.y;
|
|
1645
1671
|
var p: IDraggable = this.locatePointNear(
|
|
1646
1672
|
_self.transformMousePosition(e.params.pos.x, e.params.pos.y),
|
|
1647
1673
|
PlotBoilerplate.DEFAULT_CLICK_TOLERANCE / Math.min(_self.config.cssScaleX, _self.config.cssScaleY)
|
|
@@ -1657,9 +1683,7 @@ export class PlotBoilerplate {
|
|
|
1657
1683
|
if (vert.attr.selectable) vert.attr.isSelected = !vert.attr.isSelected;
|
|
1658
1684
|
}
|
|
1659
1685
|
_self.redraw();
|
|
1660
|
-
} else if (
|
|
1661
|
-
this.keyHandler.isDown("y") /* && p.type=='bpath' && (p.pid==BezierPath.START_POINT || p.pid==BezierPath.END_POINT) */
|
|
1662
|
-
) {
|
|
1686
|
+
} else if (this.keyHandler.isDown("y")) {
|
|
1663
1687
|
_self.vertices[p.vindex].attr.bezierAutoAdjust = !_self.vertices[p.vindex].attr.bezierAutoAdjust;
|
|
1664
1688
|
_self.redraw();
|
|
1665
1689
|
}
|
|
@@ -1961,7 +1985,8 @@ export class PlotBoilerplate {
|
|
|
1961
1985
|
multiTouchStartScale = null;
|
|
1962
1986
|
_self.draggedElements = [];
|
|
1963
1987
|
};
|
|
1964
|
-
const afProps = {
|
|
1988
|
+
const afProps: AlloyFingerOptions = {
|
|
1989
|
+
// touchStart: (evt: TouchEvent) => {
|
|
1965
1990
|
touchStart: (evt: TouchEvent) => {
|
|
1966
1991
|
if (evt.touches.length == 1) {
|
|
1967
1992
|
touchMovePos = new Vertex(relPos({ x: evt.touches[0].clientX, y: evt.touches[0].clientY }));
|
|
@@ -2065,10 +2090,13 @@ export class PlotBoilerplate {
|
|
|
2065
2090
|
_self.setZoom(multiTouchStartScale.x * evt.zoom, multiTouchStartScale.y * evt.zoom, center);
|
|
2066
2091
|
_self.redraw();
|
|
2067
2092
|
}
|
|
2068
|
-
}; // END afProps
|
|
2069
|
-
if (window["createAlloyFinger"])
|
|
2093
|
+
} as unknown as AlloyFingerOptions; // END afProps
|
|
2094
|
+
if (window["createAlloyFinger"]) {
|
|
2070
2095
|
window["createAlloyFinger"](this.eventCatcher ? this.eventCatcher : this.canvas, afProps);
|
|
2071
|
-
else
|
|
2096
|
+
} else {
|
|
2097
|
+
/* tslint:disable-next-line */
|
|
2098
|
+
new AlloyFinger(this.eventCatcher ? this.eventCatcher : this.canvas, afProps);
|
|
2099
|
+
}
|
|
2072
2100
|
} catch (e) {
|
|
2073
2101
|
console.error("Failed to initialize AlloyFinger!");
|
|
2074
2102
|
console.error(e);
|