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
|
@@ -16,300 +16,282 @@ import { Vertex } from "./Vertex";
|
|
|
16
16
|
import { XMouseParams, XMouseEvent } from "./MouseHandler";
|
|
17
17
|
|
|
18
18
|
export interface VertEventParams extends XMouseParams {
|
|
19
|
-
|
|
19
|
+
vertex: Vertex;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export interface VertEvent {
|
|
23
|
-
|
|
23
|
+
params: VertEventParams;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export type VertListener = (e:VertEvent) => void;
|
|
27
|
-
|
|
26
|
+
export type VertListener = (e: VertEvent) => void;
|
|
28
27
|
|
|
29
28
|
/**
|
|
30
|
-
* @classdesc An event listeners wrapper. This is just a set of three listener
|
|
29
|
+
* @classdesc An event listeners wrapper. This is just a set of three listener
|
|
31
30
|
* queues (drag, dragStart, dragEnd) and their respective firing
|
|
32
31
|
* functions.
|
|
33
32
|
*
|
|
34
33
|
*/
|
|
35
34
|
export class VertexListeners {
|
|
35
|
+
private click: Array<VertListener>;
|
|
36
|
+
private drag: Array<VertListener>;
|
|
37
|
+
private dragStart: Array<VertListener>;
|
|
38
|
+
private dragEnd: Array<VertListener>;
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
private drag:Array<VertListener>;
|
|
39
|
-
private dragStart:Array<VertListener>;
|
|
40
|
-
private dragEnd:Array<VertListener>;
|
|
41
|
-
|
|
42
|
-
private vertex:Vertex;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* The constructor.
|
|
47
|
-
*
|
|
48
|
-
* @constructor
|
|
49
|
-
* @name VertexListeners
|
|
50
|
-
* @param {Vertex} vertex - The vertex to use these listeners on (just a backward reference).
|
|
51
|
-
**/
|
|
52
|
-
constructor( vertex:Vertex ) {
|
|
53
|
-
this.click = [];
|
|
54
|
-
this.drag = [];
|
|
55
|
-
this.dragStart = [];
|
|
56
|
-
this.dragEnd = [];
|
|
57
|
-
this.vertex = vertex;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Add a click listener.
|
|
63
|
-
*
|
|
64
|
-
* @method addClickListener
|
|
65
|
-
* @param {VertexListeners~dragListener} listener - The click listener to add (a callback).
|
|
66
|
-
* @return {VertexListeners} this (for chaining)
|
|
67
|
-
* @instance
|
|
68
|
-
* @memberof VertexListeners
|
|
69
|
-
**/
|
|
70
|
-
addClickListener( listener:VertListener ) : VertexListeners {
|
|
71
|
-
VertexListeners._addListener( this.click, listener );
|
|
72
|
-
return this;
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* The click listener is a function with a single drag event param.
|
|
76
|
-
* @callback VertexListeners~clickListener
|
|
77
|
-
* @param {Event} e - The (extended) click event.
|
|
78
|
-
*/
|
|
79
|
-
|
|
40
|
+
private vertex: Vertex;
|
|
80
41
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
* The click listener is a function with a single drag event param.
|
|
96
|
-
* @callback VertexListeners~clickListener
|
|
97
|
-
* @param {Event} e - The (extended) click event.
|
|
98
|
-
*/
|
|
99
|
-
|
|
42
|
+
/**
|
|
43
|
+
* The constructor.
|
|
44
|
+
*
|
|
45
|
+
* @constructor
|
|
46
|
+
* @name VertexListeners
|
|
47
|
+
* @param {Vertex} vertex - The vertex to use these listeners on (just a backward reference).
|
|
48
|
+
**/
|
|
49
|
+
constructor(vertex: Vertex) {
|
|
50
|
+
this.click = [];
|
|
51
|
+
this.drag = [];
|
|
52
|
+
this.dragStart = [];
|
|
53
|
+
this.dragEnd = [];
|
|
54
|
+
this.vertex = vertex;
|
|
55
|
+
}
|
|
100
56
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Add a click listener.
|
|
59
|
+
*
|
|
60
|
+
* @method addClickListener
|
|
61
|
+
* @param {VertexListeners~dragListener} listener - The click listener to add (a callback).
|
|
62
|
+
* @return {VertexListeners} this (for chaining)
|
|
63
|
+
* @instance
|
|
64
|
+
* @memberof VertexListeners
|
|
65
|
+
**/
|
|
66
|
+
addClickListener(listener: VertListener): VertexListeners {
|
|
67
|
+
VertexListeners._addListener(this.click, listener);
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The click listener is a function with a single drag event param.
|
|
72
|
+
* @callback VertexListeners~clickListener
|
|
73
|
+
* @param {Event} e - The (extended) click event.
|
|
74
|
+
*/
|
|
120
75
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
* @method addDragListener
|
|
140
|
-
* @param {VertexListeners~dragStartListener} listener - The drag-start listener to add (a callback).
|
|
141
|
-
* @return {VertexListeners} this (for chaining)
|
|
142
|
-
* @instance
|
|
143
|
-
* @memberof VertexListeners
|
|
144
|
-
**/
|
|
145
|
-
addDragStartListener( listener:VertListener) : VertexListeners {
|
|
146
|
-
VertexListeners._addListener( this.dragStart, listener );
|
|
147
|
-
return this;
|
|
148
|
-
};
|
|
149
|
-
/**
|
|
150
|
-
* The drag-start listener is a function with a single drag event param.
|
|
151
|
-
* @callback VertexListeners~dragStartListener
|
|
152
|
-
* @param {Event} e - The (extended) drag event.
|
|
153
|
-
*/
|
|
76
|
+
/**
|
|
77
|
+
* Remove a drag listener.
|
|
78
|
+
*
|
|
79
|
+
* @method removeDragListener
|
|
80
|
+
* @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
|
|
81
|
+
* @return {VertexListeners} this (for chaining)
|
|
82
|
+
* @instance
|
|
83
|
+
* @memberof VertexListeners
|
|
84
|
+
**/
|
|
85
|
+
removeClickListener(listener: VertListener): VertexListeners {
|
|
86
|
+
this.click = VertexListeners._removeListener(this.click, listener);
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The click listener is a function with a single drag event param.
|
|
91
|
+
* @callback VertexListeners~clickListener
|
|
92
|
+
* @param {Event} e - The (extended) click event.
|
|
93
|
+
*/
|
|
154
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Add a drag listener.
|
|
97
|
+
*
|
|
98
|
+
* @method addDragListener
|
|
99
|
+
* @param {VertexListeners~dragListener} listener - The drag listener to add (a callback).
|
|
100
|
+
* @return {VertexListeners} this (for chaining)
|
|
101
|
+
* @instance
|
|
102
|
+
* @memberof VertexListeners
|
|
103
|
+
**/
|
|
104
|
+
addDragListener(listener: VertListener): VertexListeners {
|
|
105
|
+
VertexListeners._addListener(this.drag, listener);
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* The drag listener is a function with a single drag event param.
|
|
110
|
+
* @callback VertexListeners~dragListener
|
|
111
|
+
* @param {Event} e - The (extended) drag event.
|
|
112
|
+
*/
|
|
155
113
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Add a dragEnd listener.
|
|
173
|
-
*
|
|
174
|
-
* @method addDragListener
|
|
175
|
-
* @param {VertexListeners~dragEndListener} listener - The drag-end listener to add (a callback).
|
|
176
|
-
* @return {VertexListeners} this (for chaining)
|
|
177
|
-
* @instance
|
|
178
|
-
* @memberof VertexListeners
|
|
179
|
-
**/
|
|
180
|
-
addDragEndListener( listener:(e:VertEvent)=>void ) : VertexListeners {
|
|
181
|
-
// this.dragEnd.push( listener );
|
|
182
|
-
VertexListeners._addListener( this.dragEnd, listener );
|
|
183
|
-
return this;
|
|
184
|
-
};
|
|
185
|
-
/**
|
|
186
|
-
* The drag-end listener is a function with a single drag event param.
|
|
187
|
-
* @callback VertexListeners~dragEndListener
|
|
188
|
-
* @param {Event} e - The (extended) drag event.
|
|
189
|
-
*/
|
|
114
|
+
/**
|
|
115
|
+
* Remove a drag listener.
|
|
116
|
+
*
|
|
117
|
+
* @method removeDragListener
|
|
118
|
+
* @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
|
|
119
|
+
* @return {VertexListeners} this (for chaining)
|
|
120
|
+
* @instance
|
|
121
|
+
* @memberof VertexListeners
|
|
122
|
+
**/
|
|
123
|
+
removeDragListener(listener: VertListener): VertexListeners {
|
|
124
|
+
this.drag = VertexListeners._removeListener(this.drag, listener);
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
190
127
|
|
|
128
|
+
/**
|
|
129
|
+
* Add a dragStart listener.
|
|
130
|
+
*
|
|
131
|
+
* @method addDragListener
|
|
132
|
+
* @param {VertexListeners~dragStartListener} listener - The drag-start listener to add (a callback).
|
|
133
|
+
* @return {VertexListeners} this (for chaining)
|
|
134
|
+
* @instance
|
|
135
|
+
* @memberof VertexListeners
|
|
136
|
+
**/
|
|
137
|
+
addDragStartListener(listener: VertListener): VertexListeners {
|
|
138
|
+
VertexListeners._addListener(this.dragStart, listener);
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The drag-start listener is a function with a single drag event param.
|
|
143
|
+
* @callback VertexListeners~dragStartListener
|
|
144
|
+
* @param {Event} e - The (extended) drag event.
|
|
145
|
+
*/
|
|
191
146
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
};
|
|
147
|
+
/**
|
|
148
|
+
* Remove a dragStart listener.
|
|
149
|
+
*
|
|
150
|
+
* @method addDragStartListener
|
|
151
|
+
* @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
|
|
152
|
+
* @return {VertexListeners} this (for chaining)
|
|
153
|
+
* @instance
|
|
154
|
+
* @memberof VertexListeners
|
|
155
|
+
**/
|
|
156
|
+
removeDragStartListener(listener: VertListener): VertexListeners {
|
|
157
|
+
this.dragStart = VertexListeners._removeListener(this.dragStart, listener);
|
|
158
|
+
return this;
|
|
159
|
+
}
|
|
206
160
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Add a dragEnd listener.
|
|
163
|
+
*
|
|
164
|
+
* @method addDragListener
|
|
165
|
+
* @param {VertexListeners~dragEndListener} listener - The drag-end listener to add (a callback).
|
|
166
|
+
* @return {VertexListeners} this (for chaining)
|
|
167
|
+
* @instance
|
|
168
|
+
* @memberof VertexListeners
|
|
169
|
+
**/
|
|
170
|
+
addDragEndListener(listener: (e: VertEvent) => void): VertexListeners {
|
|
171
|
+
// this.dragEnd.push( listener );
|
|
172
|
+
VertexListeners._addListener(this.dragEnd, listener);
|
|
173
|
+
return this;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The drag-end listener is a function with a single drag event param.
|
|
177
|
+
* @callback VertexListeners~dragEndListener
|
|
178
|
+
* @param {Event} e - The (extended) drag event.
|
|
179
|
+
*/
|
|
222
180
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
181
|
+
/**
|
|
182
|
+
* Remove a drag listener.
|
|
183
|
+
*
|
|
184
|
+
* @method removeDragEndListener
|
|
185
|
+
* @param {VertexListeners~clickListener} listener - The drag listener to remove (a callback).
|
|
186
|
+
* @return {VertexListeners} this (for chaining)
|
|
187
|
+
* @instance
|
|
188
|
+
* @memberof VertexListeners
|
|
189
|
+
**/
|
|
190
|
+
removeDragEndListener(listener: (e: VertEvent) => void): VertexListeners {
|
|
191
|
+
// this.drag.push( listener );
|
|
192
|
+
this.dragEnd = VertexListeners._removeListener(this.dragEnd, listener);
|
|
193
|
+
return this;
|
|
194
|
+
}
|
|
237
195
|
|
|
196
|
+
/**
|
|
197
|
+
* Fire a click event with the given event instance to all
|
|
198
|
+
* installed click listeners.
|
|
199
|
+
*
|
|
200
|
+
* @method fireClickEvent
|
|
201
|
+
* @param {VertEvent|XMouseEvent} e - The click event itself to be fired to all installed drag listeners.
|
|
202
|
+
* @return {void}
|
|
203
|
+
* @instance
|
|
204
|
+
* @memberof VertexListeners
|
|
205
|
+
**/
|
|
206
|
+
fireClickEvent(e: VertEvent | XMouseEvent) {
|
|
207
|
+
VertexListeners._fireEvent(this, this.click, e);
|
|
208
|
+
}
|
|
238
209
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
};
|
|
210
|
+
/**
|
|
211
|
+
* Fire a drag event with the given event instance to all
|
|
212
|
+
* installed drag listeners.
|
|
213
|
+
*
|
|
214
|
+
* @method fireDragEvent
|
|
215
|
+
* @param {VertEvent|XMouseEvent} e - The drag event itself to be fired to all installed drag listeners.
|
|
216
|
+
* @return {void}
|
|
217
|
+
* @instance
|
|
218
|
+
* @memberof VertexListeners
|
|
219
|
+
**/
|
|
220
|
+
fireDragEvent(e: VertEvent | XMouseEvent) {
|
|
221
|
+
VertexListeners._fireEvent(this, this.drag, e);
|
|
222
|
+
}
|
|
253
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Fire a dragStart event with the given event instance to all
|
|
226
|
+
* installed drag-start listeners.
|
|
227
|
+
*
|
|
228
|
+
* @method fireDragStartEvent
|
|
229
|
+
* @param {VertEvent|XMouseEvent} e - The drag-start event itself to be fired to all installed dragStart listeners.
|
|
230
|
+
* @return {void}
|
|
231
|
+
* @instance
|
|
232
|
+
* @memberof VertexListeners
|
|
233
|
+
**/
|
|
234
|
+
fireDragStartEvent(e: VertEvent | XMouseEvent) {
|
|
235
|
+
VertexListeners._fireEvent(this, this.dragStart, e);
|
|
236
|
+
}
|
|
254
237
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
};
|
|
238
|
+
/**
|
|
239
|
+
* Fire a dragEnd event with the given event instance to all
|
|
240
|
+
* installed drag-end listeners.
|
|
241
|
+
*
|
|
242
|
+
* @method fireDragEndEvent
|
|
243
|
+
* @param {VertEvent|XMouseEvent} e - The drag-end event itself to be fired to all installed dragEnd listeners.
|
|
244
|
+
* @return {void}
|
|
245
|
+
* @instance
|
|
246
|
+
* @memberof VertexListeners
|
|
247
|
+
**/
|
|
248
|
+
fireDragEndEvent(e: VertEvent | XMouseEvent) {
|
|
249
|
+
VertexListeners._fireEvent(this, this.dragEnd, e);
|
|
250
|
+
}
|
|
269
251
|
|
|
252
|
+
/**
|
|
253
|
+
* Removes all listeners from this listeners object.
|
|
254
|
+
*/
|
|
255
|
+
removeAllListeners() {
|
|
256
|
+
this.click = [];
|
|
257
|
+
this.drag = [];
|
|
258
|
+
this.dragStart = [];
|
|
259
|
+
this.dragEnd = [];
|
|
260
|
+
}
|
|
270
261
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
else
|
|
283
|
-
ve.params.vertex = _self.vertex;
|
|
284
|
-
for( var i in listeners ) {
|
|
285
|
-
listeners[i]( ve );
|
|
286
|
-
}
|
|
287
|
-
};
|
|
262
|
+
/**
|
|
263
|
+
* @private
|
|
264
|
+
**/
|
|
265
|
+
private static _fireEvent(_self: VertexListeners, listeners: Array<(e: VertEvent) => void>, e: VertEvent | XMouseEvent): void {
|
|
266
|
+
const ve: VertEvent = e as unknown as VertEvent;
|
|
267
|
+
if (typeof ve.params == "undefined") ve.params = { vertex: _self.vertex } as unknown as VertEventParams;
|
|
268
|
+
else ve.params.vertex = _self.vertex;
|
|
269
|
+
for (var i in listeners) {
|
|
270
|
+
listeners[i](ve);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
288
273
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
listeners.push( newListener );
|
|
300
|
-
return true;
|
|
301
|
-
};
|
|
274
|
+
/**
|
|
275
|
+
* @private
|
|
276
|
+
*/
|
|
277
|
+
private static _addListener(listeners: Array<(e: VertEvent) => void>, newListener: (e: VertEvent) => void): boolean {
|
|
278
|
+
for (var i in listeners) {
|
|
279
|
+
if (listeners[i] == newListener) return false;
|
|
280
|
+
}
|
|
281
|
+
listeners.push(newListener);
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
302
284
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
285
|
+
/**
|
|
286
|
+
* @private
|
|
287
|
+
*/
|
|
288
|
+
private static _removeListener(
|
|
289
|
+
listeners: Array<(e: VertEvent) => void>,
|
|
290
|
+
oldListener: (e: VertEvent) => void
|
|
291
|
+
): Array<(e: VertEvent) => void> {
|
|
292
|
+
for (var i = 0; i < listeners.length; i++) {
|
|
293
|
+
if (listeners[i] == oldListener) return listeners.splice(i, 1);
|
|
294
|
+
}
|
|
295
|
+
return listeners;
|
|
296
|
+
}
|
|
315
297
|
}
|
package/src/ts/draw.ts
CHANGED
|
@@ -37,13 +37,15 @@
|
|
|
37
37
|
* @modified 2021-02-22 Added the `path` drawing function to draw SVG path data.
|
|
38
38
|
* @modified 2021-03-31 Added the `endDrawCycle` function from `DrawLib`.
|
|
39
39
|
* @modified 2021-05-31 Added the `setConfiguration` function from `DrawLib`.
|
|
40
|
-
* @
|
|
40
|
+
* @modified 2021-11-12 Adding more parameters tot the `text()` function: fontSize, textAlign, fontFamily, lineHeight.
|
|
41
|
+
* @modified 2021-11-19 Added the `color` param to the `label(...)` function.
|
|
42
|
+
* @version 1.10.0
|
|
41
43
|
**/
|
|
42
44
|
|
|
43
45
|
import { CubicBezierCurve } from "./CubicBezierCurve";
|
|
44
46
|
import { Polygon } from "./Polygon";
|
|
45
47
|
import { Vertex } from "./Vertex";
|
|
46
|
-
import { DrawLib, SVGPathParams, XYCoords, UID, DrawLibConfiguration } from "./interfaces";
|
|
48
|
+
import { DrawLib, SVGPathParams, XYCoords, UID, DrawLibConfiguration, FontStyle, FontWeight } from "./interfaces";
|
|
47
49
|
import { drawutilssvg } from "./drawutilssvg";
|
|
48
50
|
|
|
49
51
|
// Todo: rename this class to Drawutils?
|
|
@@ -845,19 +847,77 @@ export class drawutils implements DrawLib<void> {
|
|
|
845
847
|
this.ctx.restore();
|
|
846
848
|
}
|
|
847
849
|
|
|
848
|
-
|
|
850
|
+
/**
|
|
851
|
+
* Draw a text at the given relative position.
|
|
852
|
+
*
|
|
853
|
+
* @method text
|
|
854
|
+
* @param {string} text - The text to draw.
|
|
855
|
+
* @param {number} x - The x-position to draw the text at.
|
|
856
|
+
* @param {number} y - The y-position to draw the text at.
|
|
857
|
+
* @param {string=} options.color - The Color to use.
|
|
858
|
+
* @param {string=} options.fontFamily - The font family to use.
|
|
859
|
+
* @param {number=} options.fontSize - The font size (in pixels) to use.
|
|
860
|
+
* @param {FontStyle=} options.fontStyle - The font style to use.
|
|
861
|
+
* @param {FontWeight=} options.fontWeight - The font weight to use.
|
|
862
|
+
* @param {number=} options.lineHeight - The line height (in pixels) to use.
|
|
863
|
+
* @param {number=} options.rotation - The (optional) rotation in radians.
|
|
864
|
+
* @param {string=} options.textAlign - The text align to use. According to the specifiactions (https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/textAlign) valid values are `"left" || "right" || "center" || "start" || "end"`.
|
|
865
|
+
* @return {void}
|
|
866
|
+
* @instance
|
|
867
|
+
* @memberof drawutils
|
|
868
|
+
*/
|
|
869
|
+
text(
|
|
870
|
+
text: string,
|
|
871
|
+
x: number,
|
|
872
|
+
y: number,
|
|
873
|
+
options?: {
|
|
874
|
+
color?: string;
|
|
875
|
+
fontFamily?: string;
|
|
876
|
+
fontSize?: number;
|
|
877
|
+
fontStyle?: FontStyle;
|
|
878
|
+
fontWeight?: FontWeight;
|
|
879
|
+
lineHeight?: number;
|
|
880
|
+
textAlign?: CanvasRenderingContext2D["textAlign"];
|
|
881
|
+
rotation?: number;
|
|
882
|
+
}
|
|
883
|
+
) {
|
|
884
|
+
// See https://stackoverflow.com/a/23523697
|
|
885
|
+
|
|
849
886
|
options = options || {};
|
|
850
887
|
this.ctx.save();
|
|
851
|
-
|
|
852
|
-
|
|
888
|
+
let relX = this.offset.x + x * this.scale.x;
|
|
889
|
+
let relY = this.offset.y + y * this.scale.y;
|
|
853
890
|
const color: string = options.color || "black";
|
|
891
|
+
if (options.fontSize || options.fontFamily) {
|
|
892
|
+
// Scaling of text only works in uniform mode
|
|
893
|
+
this.ctx.font =
|
|
894
|
+
(options.fontWeight ? options.fontWeight + " " : "") +
|
|
895
|
+
(options.fontStyle ? options.fontStyle + " " : "") +
|
|
896
|
+
(options.fontSize ? options.fontSize * this.scale.x + "px " : " ") +
|
|
897
|
+
(options.fontFamily
|
|
898
|
+
? options.fontFamily.indexOf(" ") === -1
|
|
899
|
+
? options.fontFamily
|
|
900
|
+
: `"${options.fontFamily}"`
|
|
901
|
+
: "Arial");
|
|
902
|
+
}
|
|
903
|
+
if (options.textAlign) {
|
|
904
|
+
this.ctx.textAlign = options.textAlign;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
const rotation = options.rotation ?? 0.0;
|
|
908
|
+
const lineHeight = (options.lineHeight ?? options.fontSize ?? 0) * this.scale.x;
|
|
909
|
+
this.ctx.translate(relX, relY);
|
|
910
|
+
this.ctx.rotate(rotation);
|
|
911
|
+
|
|
854
912
|
if (this.fillShapes) {
|
|
855
913
|
this.ctx.fillStyle = color;
|
|
856
|
-
this.ctx.fillText(text,
|
|
914
|
+
this.ctx.fillText(text, 0, lineHeight / 2);
|
|
857
915
|
} else {
|
|
858
916
|
this.ctx.strokeStyle = color;
|
|
859
|
-
this.ctx.strokeText(text,
|
|
917
|
+
this.ctx.strokeText(text, 0, lineHeight / 2);
|
|
860
918
|
}
|
|
919
|
+
// this.ctx.translate(-relX, -relY);
|
|
920
|
+
// this.ctx.rotate(-rotation); // is this necessary before 'restore()'?
|
|
861
921
|
this.ctx.restore();
|
|
862
922
|
}
|
|
863
923
|
|
|
@@ -878,8 +938,11 @@ export class drawutils implements DrawLib<void> {
|
|
|
878
938
|
*/
|
|
879
939
|
label(text: string, x: number, y: number, rotation?: number, color?: string) {
|
|
880
940
|
this.ctx.save();
|
|
941
|
+
|
|
942
|
+
this.ctx.font = "lighter 9pt Arial";
|
|
943
|
+
|
|
881
944
|
this.ctx.translate(x, y);
|
|
882
|
-
if (typeof rotation
|
|
945
|
+
if (typeof rotation !== "undefined") this.ctx.rotate(rotation);
|
|
883
946
|
this.ctx.fillStyle = color || "black";
|
|
884
947
|
if (this.fillShapes) {
|
|
885
948
|
this.ctx.fillText(text, 0, 0);
|