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.
Files changed (213) hide show
  1. package/README.md +5 -1
  2. package/changelog.md +50 -0
  3. package/dist/index.esm.js +999 -510
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.esm.min.js +1 -1
  6. package/dist/index.esm.min.js.map +1 -1
  7. package/dist/plotboilerplate.browser.min.js +1 -1
  8. package/dist/plotboilerplate.browser.min.js.map +1 -1
  9. package/dist/plotboilerplate.js +1013 -509
  10. package/dist/plotboilerplate.min.js +1 -1
  11. package/package.json +1 -1
  12. package/src/cjs/BezierPath.d.ts +45 -2
  13. package/src/cjs/BezierPath.js +114 -18
  14. package/src/cjs/BezierPath.js.map +1 -1
  15. package/src/cjs/Circle.d.ts +25 -10
  16. package/src/cjs/Circle.js +38 -33
  17. package/src/cjs/Circle.js.map +1 -1
  18. package/src/cjs/CircleSector.d.ts +27 -13
  19. package/src/cjs/CircleSector.js +38 -23
  20. package/src/cjs/CircleSector.js.map +1 -1
  21. package/src/cjs/CubicBezierCurve.d.ts +17 -1
  22. package/src/cjs/CubicBezierCurve.js +78 -79
  23. package/src/cjs/CubicBezierCurve.js.map +1 -1
  24. package/src/cjs/KeyHandler.d.ts +10 -3
  25. package/src/cjs/KeyHandler.js +28 -23
  26. package/src/cjs/KeyHandler.js.map +1 -1
  27. package/src/cjs/Line.d.ts +2 -1
  28. package/src/cjs/Line.js +19 -18
  29. package/src/cjs/Line.js.map +1 -1
  30. package/src/cjs/MouseHandler.js +43 -53
  31. package/src/cjs/MouseHandler.js.map +1 -1
  32. package/src/cjs/PBImage.d.ts +16 -1
  33. package/src/cjs/PBImage.js +13 -3
  34. package/src/cjs/PBImage.js.map +1 -1
  35. package/src/cjs/PBText.d.ts +130 -0
  36. package/src/cjs/PBText.js +76 -0
  37. package/src/cjs/PBText.js.map +1 -0
  38. package/src/cjs/PlotBoilerplate.d.ts +2 -1
  39. package/src/cjs/PlotBoilerplate.js +44 -16
  40. package/src/cjs/PlotBoilerplate.js.map +1 -1
  41. package/src/cjs/Polygon.d.ts +37 -1
  42. package/src/cjs/Polygon.js +131 -54
  43. package/src/cjs/Polygon.js.map +1 -1
  44. package/src/cjs/Triangle.d.ts +16 -1
  45. package/src/cjs/Triangle.js +50 -54
  46. package/src/cjs/Triangle.js.map +1 -1
  47. package/src/cjs/VEllipse.d.ts +16 -1
  48. package/src/cjs/VEllipse.js +25 -12
  49. package/src/cjs/VEllipse.js.map +1 -1
  50. package/src/cjs/VEllipseSector.d.ts +15 -1
  51. package/src/cjs/VEllipseSector.js +11 -1
  52. package/src/cjs/VEllipseSector.js.map +1 -1
  53. package/src/cjs/Vector.d.ts +3 -1
  54. package/src/cjs/Vector.js +32 -36
  55. package/src/cjs/Vector.js.map +1 -1
  56. package/src/cjs/VertTuple.d.ts +15 -1
  57. package/src/cjs/VertTuple.js +14 -19
  58. package/src/cjs/VertTuple.js.map +1 -1
  59. package/src/cjs/Vertex.d.ts +66 -4
  60. package/src/cjs/Vertex.js +99 -17
  61. package/src/cjs/Vertex.js.map +1 -1
  62. package/src/cjs/VertexListeners.d.ts +12 -8
  63. package/src/cjs/VertexListeners.js +18 -25
  64. package/src/cjs/VertexListeners.js.map +1 -1
  65. package/src/cjs/draw.d.ts +30 -2
  66. package/src/cjs/draw.js +51 -6
  67. package/src/cjs/draw.js.map +1 -1
  68. package/src/cjs/drawgl.d.ts +29 -2
  69. package/src/cjs/drawgl.js +21 -4
  70. package/src/cjs/drawgl.js.map +1 -1
  71. package/src/cjs/drawutilssvg.d.ts +25 -7
  72. package/src/cjs/drawutilssvg.js +62 -14
  73. package/src/cjs/drawutilssvg.js.map +1 -1
  74. package/src/cjs/entry.js +1 -0
  75. package/src/cjs/index.d.ts +1 -0
  76. package/src/cjs/index.js +1 -0
  77. package/src/cjs/index.js.map +1 -1
  78. package/src/cjs/interfaces/DrawLib.d.ts +27 -6
  79. package/src/cjs/interfaces/DrawLib.js +3 -0
  80. package/src/cjs/interfaces/DrawLib.js.map +1 -1
  81. package/src/cjs/interfaces/core.d.ts +9 -1
  82. package/src/cjs/interfaces/core.js +1 -0
  83. package/src/cjs/interfaces/core.js.map +1 -1
  84. package/src/cjs/utils/creategui.js +1 -1
  85. package/src/cjs/utils/findInVertexArray.d.ts +19 -0
  86. package/src/cjs/utils/findInVertexArray.js +29 -0
  87. package/src/cjs/utils/findInVertexArray.js.map +1 -0
  88. package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
  89. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +55 -28
  90. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  91. package/src/cjs/utils/io/DndFileHandler.d.ts +63 -0
  92. package/src/cjs/utils/io/DndFileHandler.js +112 -0
  93. package/src/cjs/utils/io/DndFileHandler.js.map +1 -0
  94. package/src/cjs/utils/io/FileDrop.d.ts +98 -0
  95. package/src/cjs/utils/io/FileDrop.js +142 -0
  96. package/src/cjs/utils/io/FileDrop.js.map +1 -0
  97. package/src/esm/BezierPath.d.ts +45 -2
  98. package/src/esm/BezierPath.js +114 -18
  99. package/src/esm/BezierPath.js.map +1 -1
  100. package/src/esm/Circle.d.ts +25 -10
  101. package/src/esm/Circle.js +38 -33
  102. package/src/esm/Circle.js.map +1 -1
  103. package/src/esm/CircleSector.d.ts +27 -13
  104. package/src/esm/CircleSector.js +38 -23
  105. package/src/esm/CircleSector.js.map +1 -1
  106. package/src/esm/CubicBezierCurve.d.ts +17 -1
  107. package/src/esm/CubicBezierCurve.js +78 -79
  108. package/src/esm/CubicBezierCurve.js.map +1 -1
  109. package/src/esm/KeyHandler.d.ts +10 -3
  110. package/src/esm/KeyHandler.js +28 -23
  111. package/src/esm/KeyHandler.js.map +1 -1
  112. package/src/esm/Line.d.ts +2 -1
  113. package/src/esm/Line.js +19 -18
  114. package/src/esm/Line.js.map +1 -1
  115. package/src/esm/MouseHandler.js +43 -53
  116. package/src/esm/MouseHandler.js.map +1 -1
  117. package/src/esm/PBImage.d.ts +16 -1
  118. package/src/esm/PBImage.js +13 -3
  119. package/src/esm/PBImage.js.map +1 -1
  120. package/src/esm/PBText.d.ts +130 -0
  121. package/src/esm/PBText.js +71 -0
  122. package/src/esm/PBText.js.map +1 -0
  123. package/src/esm/PlotBoilerplate.d.ts +2 -1
  124. package/src/esm/PlotBoilerplate.js +44 -16
  125. package/src/esm/PlotBoilerplate.js.map +1 -1
  126. package/src/esm/Polygon.d.ts +37 -1
  127. package/src/esm/Polygon.js +131 -54
  128. package/src/esm/Polygon.js.map +1 -1
  129. package/src/esm/Triangle.d.ts +16 -1
  130. package/src/esm/Triangle.js +50 -54
  131. package/src/esm/Triangle.js.map +1 -1
  132. package/src/esm/VEllipse.d.ts +16 -1
  133. package/src/esm/VEllipse.js +25 -12
  134. package/src/esm/VEllipse.js.map +1 -1
  135. package/src/esm/VEllipseSector.d.ts +15 -1
  136. package/src/esm/VEllipseSector.js +11 -1
  137. package/src/esm/VEllipseSector.js.map +1 -1
  138. package/src/esm/Vector.d.ts +3 -1
  139. package/src/esm/Vector.js +32 -36
  140. package/src/esm/Vector.js.map +1 -1
  141. package/src/esm/VertTuple.d.ts +15 -1
  142. package/src/esm/VertTuple.js +14 -19
  143. package/src/esm/VertTuple.js.map +1 -1
  144. package/src/esm/Vertex.d.ts +66 -4
  145. package/src/esm/Vertex.js +99 -17
  146. package/src/esm/Vertex.js.map +1 -1
  147. package/src/esm/VertexListeners.d.ts +12 -8
  148. package/src/esm/VertexListeners.js +18 -25
  149. package/src/esm/VertexListeners.js.map +1 -1
  150. package/src/esm/draw.d.ts +30 -2
  151. package/src/esm/draw.js +51 -6
  152. package/src/esm/draw.js.map +1 -1
  153. package/src/esm/drawgl.d.ts +29 -2
  154. package/src/esm/drawgl.js +21 -4
  155. package/src/esm/drawgl.js.map +1 -1
  156. package/src/esm/drawutilssvg.d.ts +25 -7
  157. package/src/esm/drawutilssvg.js +62 -14
  158. package/src/esm/drawutilssvg.js.map +1 -1
  159. package/src/esm/entry.js +1 -0
  160. package/src/esm/index.d.ts +1 -0
  161. package/src/esm/index.js +1 -0
  162. package/src/esm/index.js.map +1 -1
  163. package/src/esm/interfaces/DrawLib.d.ts +27 -6
  164. package/src/esm/interfaces/DrawLib.js +3 -0
  165. package/src/esm/interfaces/DrawLib.js.map +1 -1
  166. package/src/esm/interfaces/core.d.ts +9 -1
  167. package/src/esm/interfaces/core.js +1 -0
  168. package/src/esm/interfaces/core.js.map +1 -1
  169. package/src/esm/utils/findInVertexArray.d.ts +19 -0
  170. package/src/esm/utils/findInVertexArray.js +25 -0
  171. package/src/esm/utils/findInVertexArray.js.map +1 -0
  172. package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
  173. package/src/esm/utils/helpers/BezierPathInteractionHelper.js +54 -28
  174. package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  175. package/src/esm/utils/io/DndFileHandler.d.ts +63 -0
  176. package/src/esm/utils/io/DndFileHandler.js +106 -0
  177. package/src/esm/utils/io/DndFileHandler.js.map +1 -0
  178. package/src/esm/utils/io/FileDrop.d.ts +98 -0
  179. package/src/esm/utils/io/FileDrop.js +136 -0
  180. package/src/esm/utils/io/FileDrop.js.map +1 -0
  181. package/src/ts/BezierPath.ts +133 -16
  182. package/src/ts/Circle.ts +213 -200
  183. package/src/ts/CircleSector.ts +171 -141
  184. package/src/ts/CubicBezierCurve.ts +777 -810
  185. package/src/ts/KeyHandler.ts +221 -212
  186. package/src/ts/Line.ts +77 -80
  187. package/src/ts/MouseHandler.ts +356 -368
  188. package/src/ts/PBImage.ts +81 -68
  189. package/src/ts/PBText.ts +166 -0
  190. package/src/ts/PlotBoilerplate.ts +48 -20
  191. package/src/ts/Polygon.ts +519 -451
  192. package/src/ts/Triangle.ts +484 -489
  193. package/src/ts/VEllipse.ts +36 -11
  194. package/src/ts/VEllipseSector.ts +20 -1
  195. package/src/ts/Vector.ts +164 -160
  196. package/src/ts/VertTuple.ts +333 -338
  197. package/src/ts/Vertex.ts +117 -16
  198. package/src/ts/VertexListeners.ts +248 -266
  199. package/src/ts/draw.ts +71 -8
  200. package/src/ts/drawgl.ts +48 -8
  201. package/src/ts/drawutilssvg.ts +94 -17
  202. package/src/ts/index.ts +1 -0
  203. package/src/ts/interfaces/DrawLib.ts +30 -4
  204. package/src/ts/interfaces/core.ts +9 -0
  205. package/src/ts/utils/findInVertexArray.ts +28 -0
  206. package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -30
  207. package/src/ts/utils/io/FileDrop.ts +178 -0
  208. package/dist/plotboilerplate.browser.min.js.LICENSE.txt +0 -8
  209. package/src/ts/utils/algorithms/clearPolygonDuplicateVertices.ts~ +0 -5
  210. package/src/ts/utils/algorithms/findPolygonSelfIntersections.ts~ +0 -45
  211. package/src/ts/utils/algorithms/sh-tmp.ts~ +0 -59
  212. package/src/ts/utils/algorithms/splitPolygonToNonIntersecting.ts~ +0 -113
  213. 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
- * @version 1.1.0
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
- * Required to generate proper CSS classes and other class related IDs.
34
- **/
35
- readonly className : string = "PBImage";
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
- * The UID of this drawable object.
40
- *
41
- * @member {UID}
42
- * @memberof PBImage
43
- * @instance
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
- * @member {Vertex}
51
- * @memberof PBImage
52
- * @instance
53
- */
54
- image:HTMLImageElement;
66
+ /**
67
+ * @member isDestroyed
68
+ * @memberof PBImage
69
+ * @type {boolean}
70
+ * @instance
71
+ */
72
+ isDestroyed: boolean;
55
73
 
56
- /**
57
- * @member {Vertex}
58
- * @memberof PBImage
59
- * @instance
60
- */
61
- upperLeft:Vertex;
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
- * @member {Vertex}
65
- * @memberof PBImage
66
- * @instance
67
- */
68
- lowerRight:Vertex;
69
-
70
-
71
- /**
72
- * The constructor.
73
- *
74
- * @constructor
75
- * @name PBImage
76
- * @param {Image} image - The actual image.
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
- * Convert this vertex to SVG code.
90
- *
91
- * @deprecated DEPRECATION Please use the drawutilssvg library and an XMLSerializer instead.
92
- * @method toSVGString
93
- * @param {object=} options - An optional set of options, like 'className'.
94
- * @return {string} A string representing the SVG code for this vertex.
95
- * @instance
96
- * @memberof PBImage
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
  }
@@ -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
- * @version 1.14.0
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"] != "function")
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
- // for( var i in drawable.vertices )
810
- for (var i = 0; i < drawable.vertices.length; i++) this.vertices.push(drawable.vertices[i]);
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) this.vertices.push(bezierPath.bezierCurves[i].startPoint);
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) this.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") return this.vertices[p.vindex];
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 new AlloyFinger(this.eventCatcher ? this.eventCatcher : this.canvas, afProps);
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);