plotboilerplate 1.15.0 → 1.17.1

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 (237) hide show
  1. package/README.md +1 -0
  2. package/changelog.md +65 -0
  3. package/dist/index.esm.js +760 -667
  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 +765 -571
  10. package/dist/plotboilerplate.min.js +1 -1
  11. package/package.json +1 -1
  12. package/src/cjs/BezierPath.d.ts +32 -14
  13. package/src/cjs/BezierPath.js +65 -24
  14. package/src/cjs/BezierPath.js.map +1 -1
  15. package/src/cjs/Bounds.d.ts +33 -1
  16. package/src/cjs/Bounds.js +38 -1
  17. package/src/cjs/Bounds.js.map +1 -1
  18. package/src/cjs/Circle.d.ts +15 -13
  19. package/src/cjs/Circle.js +16 -34
  20. package/src/cjs/Circle.js.map +1 -1
  21. package/src/cjs/CircleSector.d.ts +17 -16
  22. package/src/cjs/CircleSector.js +12 -24
  23. package/src/cjs/CircleSector.js.map +1 -1
  24. package/src/cjs/CubicBezierCurve.d.ts +16 -15
  25. package/src/cjs/CubicBezierCurve.js +57 -94
  26. package/src/cjs/CubicBezierCurve.js.map +1 -1
  27. package/src/cjs/KeyHandler.d.ts +10 -3
  28. package/src/cjs/KeyHandler.js +28 -23
  29. package/src/cjs/KeyHandler.js.map +1 -1
  30. package/src/cjs/Line.d.ts +2 -15
  31. package/src/cjs/Line.js +6 -31
  32. package/src/cjs/Line.js.map +1 -1
  33. package/src/cjs/MouseHandler.js +43 -53
  34. package/src/cjs/MouseHandler.js.map +1 -1
  35. package/src/cjs/PBImage.d.ts +15 -13
  36. package/src/cjs/PBImage.js +11 -15
  37. package/src/cjs/PBImage.js.map +1 -1
  38. package/src/cjs/PBText.d.ts +13 -12
  39. package/src/cjs/PBText.js +8 -12
  40. package/src/cjs/PBText.js.map +1 -1
  41. package/src/cjs/PlotBoilerplate.d.ts +3 -1
  42. package/src/cjs/PlotBoilerplate.js +9 -2
  43. package/src/cjs/PlotBoilerplate.js.map +1 -1
  44. package/src/cjs/Polygon.d.ts +23 -14
  45. package/src/cjs/Polygon.js +22 -35
  46. package/src/cjs/Polygon.js.map +1 -1
  47. package/src/cjs/Triangle.d.ts +15 -13
  48. package/src/cjs/Triangle.js +23 -64
  49. package/src/cjs/Triangle.js.map +1 -1
  50. package/src/cjs/VEllipse.d.ts +14 -9
  51. package/src/cjs/VEllipse.js +10 -18
  52. package/src/cjs/VEllipse.js.map +1 -1
  53. package/src/cjs/VEllipseSector.d.ts +15 -1
  54. package/src/cjs/VEllipseSector.js +11 -1
  55. package/src/cjs/VEllipseSector.js.map +1 -1
  56. package/src/cjs/Vector.d.ts +3 -15
  57. package/src/cjs/Vector.js +9 -49
  58. package/src/cjs/Vector.js.map +1 -1
  59. package/src/cjs/VertTuple.d.ts +15 -1
  60. package/src/cjs/VertTuple.js +14 -19
  61. package/src/cjs/VertTuple.js.map +1 -1
  62. package/src/cjs/Vertex.d.ts +23 -13
  63. package/src/cjs/Vertex.js +24 -22
  64. package/src/cjs/Vertex.js.map +1 -1
  65. package/src/cjs/VertexListeners.d.ts +12 -8
  66. package/src/cjs/VertexListeners.js +18 -25
  67. package/src/cjs/VertexListeners.js.map +1 -1
  68. package/src/cjs/draw.d.ts +45 -3
  69. package/src/cjs/draw.js +149 -6
  70. package/src/cjs/draw.js.map +1 -1
  71. package/src/cjs/drawgl.d.ts +41 -3
  72. package/src/cjs/drawgl.js +45 -3
  73. package/src/cjs/drawgl.js.map +1 -1
  74. package/src/cjs/drawutilssvg.d.ts +69 -4
  75. package/src/cjs/drawutilssvg.js +147 -16
  76. package/src/cjs/drawutilssvg.js.map +1 -1
  77. package/src/cjs/index.d.ts +0 -1
  78. package/src/cjs/index.js +0 -1
  79. package/src/cjs/index.js.map +1 -1
  80. package/src/cjs/interfaces/DrawLib.d.ts +64 -27
  81. package/src/cjs/interfaces/DrawLib.js +3 -0
  82. package/src/cjs/interfaces/DrawLib.js.map +1 -1
  83. package/src/cjs/interfaces/core.d.ts +2 -12
  84. package/src/cjs/interfaces/core.js +1 -0
  85. package/src/cjs/interfaces/core.js.map +1 -1
  86. package/src/cjs/module.d.ts +1 -3
  87. package/src/cjs/module.js +2 -5
  88. package/src/cjs/module.js.map +1 -1
  89. package/src/cjs/utils/creategui.js +16 -2
  90. package/src/cjs/utils/datastructures/Color.d.ts +3 -1
  91. package/src/cjs/utils/datastructures/Color.js +17 -6
  92. package/src/cjs/utils/datastructures/Color.js.map +1 -1
  93. package/src/cjs/utils/datastructures/Girih.d.ts +5 -0
  94. package/src/cjs/utils/datastructures/Girih.js +18 -14
  95. package/src/cjs/utils/datastructures/Girih.js.map +1 -1
  96. package/src/cjs/utils/datastructures/GirihPenroseRhombus.js +42 -25
  97. package/src/cjs/utils/datastructures/GirihPenroseRhombus.js.map +1 -1
  98. package/src/cjs/utils/datastructures/GirihTile.js +2 -13
  99. package/src/cjs/utils/datastructures/GirihTile.js.map +1 -1
  100. package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +17 -1
  101. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +50 -32
  102. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  103. package/src/cjs/utils/io/DndFileHandler.d.ts +63 -0
  104. package/src/cjs/utils/io/DndFileHandler.js +112 -0
  105. package/src/cjs/utils/io/DndFileHandler.js.map +1 -0
  106. package/src/cjs/utils/io/FileDrop.d.ts +98 -0
  107. package/src/cjs/utils/io/FileDrop.js +142 -0
  108. package/src/cjs/utils/io/FileDrop.js.map +1 -0
  109. package/src/esm/BezierPath.d.ts +32 -14
  110. package/src/esm/BezierPath.js +65 -24
  111. package/src/esm/BezierPath.js.map +1 -1
  112. package/src/esm/Bounds.d.ts +33 -1
  113. package/src/esm/Bounds.js +38 -1
  114. package/src/esm/Bounds.js.map +1 -1
  115. package/src/esm/Circle.d.ts +15 -13
  116. package/src/esm/Circle.js +16 -34
  117. package/src/esm/Circle.js.map +1 -1
  118. package/src/esm/CircleSector.d.ts +17 -16
  119. package/src/esm/CircleSector.js +12 -24
  120. package/src/esm/CircleSector.js.map +1 -1
  121. package/src/esm/CubicBezierCurve.d.ts +16 -15
  122. package/src/esm/CubicBezierCurve.js +57 -94
  123. package/src/esm/CubicBezierCurve.js.map +1 -1
  124. package/src/esm/KeyHandler.d.ts +10 -3
  125. package/src/esm/KeyHandler.js +28 -23
  126. package/src/esm/KeyHandler.js.map +1 -1
  127. package/src/esm/Line.d.ts +2 -15
  128. package/src/esm/Line.js +6 -31
  129. package/src/esm/Line.js.map +1 -1
  130. package/src/esm/MouseHandler.js +43 -53
  131. package/src/esm/MouseHandler.js.map +1 -1
  132. package/src/esm/PBImage.d.ts +15 -13
  133. package/src/esm/PBImage.js +11 -15
  134. package/src/esm/PBImage.js.map +1 -1
  135. package/src/esm/PBText.d.ts +13 -12
  136. package/src/esm/PBText.js +8 -12
  137. package/src/esm/PBText.js.map +1 -1
  138. package/src/esm/PlotBoilerplate.d.ts +3 -1
  139. package/src/esm/PlotBoilerplate.js +9 -2
  140. package/src/esm/PlotBoilerplate.js.map +1 -1
  141. package/src/esm/Polygon.d.ts +23 -14
  142. package/src/esm/Polygon.js +22 -35
  143. package/src/esm/Polygon.js.map +1 -1
  144. package/src/esm/Triangle.d.ts +15 -13
  145. package/src/esm/Triangle.js +23 -64
  146. package/src/esm/Triangle.js.map +1 -1
  147. package/src/esm/VEllipse.d.ts +14 -9
  148. package/src/esm/VEllipse.js +10 -18
  149. package/src/esm/VEllipse.js.map +1 -1
  150. package/src/esm/VEllipseSector.d.ts +15 -1
  151. package/src/esm/VEllipseSector.js +11 -1
  152. package/src/esm/VEllipseSector.js.map +1 -1
  153. package/src/esm/Vector.d.ts +3 -15
  154. package/src/esm/Vector.js +9 -49
  155. package/src/esm/Vector.js.map +1 -1
  156. package/src/esm/VertTuple.d.ts +15 -1
  157. package/src/esm/VertTuple.js +14 -19
  158. package/src/esm/VertTuple.js.map +1 -1
  159. package/src/esm/Vertex.d.ts +23 -13
  160. package/src/esm/Vertex.js +24 -22
  161. package/src/esm/Vertex.js.map +1 -1
  162. package/src/esm/VertexListeners.d.ts +12 -8
  163. package/src/esm/VertexListeners.js +18 -25
  164. package/src/esm/VertexListeners.js.map +1 -1
  165. package/src/esm/draw.d.ts +45 -3
  166. package/src/esm/draw.js +147 -6
  167. package/src/esm/draw.js.map +1 -1
  168. package/src/esm/drawgl.d.ts +41 -3
  169. package/src/esm/drawgl.js +44 -3
  170. package/src/esm/drawgl.js.map +1 -1
  171. package/src/esm/drawutilssvg.d.ts +69 -4
  172. package/src/esm/drawutilssvg.js +146 -16
  173. package/src/esm/drawutilssvg.js.map +1 -1
  174. package/src/esm/index.d.ts +0 -1
  175. package/src/esm/index.js +0 -1
  176. package/src/esm/index.js.map +1 -1
  177. package/src/esm/interfaces/DrawLib.d.ts +64 -27
  178. package/src/esm/interfaces/DrawLib.js +3 -0
  179. package/src/esm/interfaces/DrawLib.js.map +1 -1
  180. package/src/esm/interfaces/core.d.ts +2 -12
  181. package/src/esm/interfaces/core.js +1 -0
  182. package/src/esm/interfaces/core.js.map +1 -1
  183. package/src/esm/module.d.ts +1 -3
  184. package/src/esm/module.js +5 -4
  185. package/src/esm/module.js.map +1 -1
  186. package/src/esm/utils/datastructures/Color.d.ts +3 -1
  187. package/src/esm/utils/datastructures/Color.js +17 -6
  188. package/src/esm/utils/datastructures/Color.js.map +1 -1
  189. package/src/esm/utils/datastructures/Girih.d.ts +5 -0
  190. package/src/esm/utils/datastructures/Girih.js +18 -14
  191. package/src/esm/utils/datastructures/Girih.js.map +1 -1
  192. package/src/esm/utils/datastructures/GirihPenroseRhombus.js +42 -25
  193. package/src/esm/utils/datastructures/GirihPenroseRhombus.js.map +1 -1
  194. package/src/esm/utils/datastructures/GirihTile.js +2 -13
  195. package/src/esm/utils/datastructures/GirihTile.js.map +1 -1
  196. package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +17 -1
  197. package/src/esm/utils/helpers/BezierPathInteractionHelper.js +49 -32
  198. package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  199. package/src/esm/utils/io/DndFileHandler.d.ts +63 -0
  200. package/src/esm/utils/io/DndFileHandler.js +106 -0
  201. package/src/esm/utils/io/DndFileHandler.js.map +1 -0
  202. package/src/esm/utils/io/FileDrop.d.ts +98 -0
  203. package/src/esm/utils/io/FileDrop.js +136 -0
  204. package/src/esm/utils/io/FileDrop.js.map +1 -0
  205. package/src/ts/BezierPath.ts +78 -22
  206. package/src/ts/Bounds.ts +40 -1
  207. package/src/ts/Circle.ts +187 -200
  208. package/src/ts/CircleSector.ts +141 -141
  209. package/src/ts/CubicBezierCurve.ts +738 -810
  210. package/src/ts/KeyHandler.ts +221 -212
  211. package/src/ts/Line.ts +48 -80
  212. package/src/ts/MouseHandler.ts +356 -368
  213. package/src/ts/PBImage.ts +67 -69
  214. package/src/ts/PBText.ts +16 -14
  215. package/src/ts/PlotBoilerplate.ts +9 -2
  216. package/src/ts/Polygon.ts +34 -34
  217. package/src/ts/Triangle.ts +444 -489
  218. package/src/ts/VEllipse.ts +18 -17
  219. package/src/ts/VEllipseSector.ts +20 -1
  220. package/src/ts/Vector.ts +124 -160
  221. package/src/ts/VertTuple.ts +333 -338
  222. package/src/ts/Vertex.ts +35 -21
  223. package/src/ts/VertexListeners.ts +248 -266
  224. package/src/ts/draw.ts +201 -6
  225. package/src/ts/drawgl.ts +47 -3
  226. package/src/ts/drawutilssvg.ts +187 -16
  227. package/src/ts/index.ts +0 -1
  228. package/src/ts/interfaces/DrawLib.ts +72 -27
  229. package/src/ts/interfaces/core.ts +3 -13
  230. package/src/ts/module.ts +2 -4
  231. package/src/ts/utils/datastructures/Color.ts +17 -6
  232. package/src/ts/utils/datastructures/Girih.ts +204 -209
  233. package/src/ts/utils/datastructures/GirihPenroseRhombus.ts +170 -152
  234. package/src/ts/utils/datastructures/GirihTile.ts +394 -419
  235. package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +56 -34
  236. package/src/ts/utils/io/FileDrop.ts +178 -0
  237. package/src/ts/SVGBuilder.ts +0 -109
@@ -13,7 +13,9 @@
13
13
  * @modified 2021-03-10 Added the `toCubicBezier` method.
14
14
  * @modified 2021-03-15 Added `VEllipse.quarterSegmentCount` and `VEllipse.scale` functions.
15
15
  * @modified 2021-03-19 Added the `VEllipse.rotate` function.
16
- * @version 1.2.2
16
+ * @modified 2022-02-02 Added the `destroy` method.
17
+ * @modified 2022-02-02 Cleared the `VEllipse.toSVGString` function (deprecated). Use `drawutilssvg` instead.
18
+ * @version 1.3.0
17
19
  *
18
20
  * @file VEllipse
19
21
  * @fileoverview Ellipses with a center and an x- and a y-axis (stored as a vertex).
@@ -71,6 +73,14 @@ export class VEllipse implements SVGSerializable {
71
73
  */
72
74
  rotation: number;
73
75
 
76
+ /**
77
+ * @member isDestroyed
78
+ * @memberof VEllipse
79
+ * @type {boolean}
80
+ * @instance
81
+ */
82
+ isDestroyed: boolean;
83
+
74
84
  /**
75
85
  * The constructor.
76
86
  *
@@ -404,23 +414,14 @@ export class VEllipse implements SVGSerializable {
404
414
  }
405
415
 
406
416
  /**
407
- * Create an SVG representation of this ellipse.
408
- *
409
- * @deprecated DEPRECATION Please use the drawutilssvg library and an XMLSerializer instead.
410
- * @param {object} options { className?:string }
411
- * @return string The SVG string
417
+ * This function should invalidate any installed listeners and invalidate this object.
418
+ * After calling this function the object might not hold valid data any more and
419
+ * should not be used.
412
420
  */
413
- toSVGString(options: { className?: string }) {
414
- options = options || {};
415
- var buffer: Array<string> = [];
416
- buffer.push("<ellipse");
417
- if (options.className) buffer.push(' class="' + options.className + '"');
418
- buffer.push(' cx="' + this.center.x + '"');
419
- buffer.push(' cy="' + this.center.y + '"');
420
- buffer.push(' rx="' + this.axis.x + '"');
421
- buffer.push(' ry="' + this.axis.y + '"');
422
- buffer.push(" />");
423
- return buffer.join("");
421
+ destroy() {
422
+ this.center.destroy();
423
+ this.axis.destroy();
424
+ this.isDestroyed = true;
424
425
  }
425
426
 
426
427
  /**
@@ -4,7 +4,8 @@
4
4
  *
5
5
  * @author Ikaros Kappler
6
6
  * @date 2021-02-26
7
- * @version 1.0.0
7
+ * @modified 2022-02-02 Added the `destroy` method.
8
+ * @version 1.1.0
8
9
  */
9
10
 
10
11
  import { CubicBezierCurve } from "./CubicBezierCurve";
@@ -64,6 +65,14 @@ export class VEllipseSector {
64
65
  */
65
66
  endAngle: number;
66
67
 
68
+ /**
69
+ * @member isDestroyed
70
+ * @memberof VEllipseSector
71
+ * @type {boolean}
72
+ * @instance
73
+ */
74
+ isDestroyed: boolean;
75
+
67
76
  /**
68
77
  * Create a new elliptic sector from the given ellipse and two angles.
69
78
  *
@@ -150,6 +159,16 @@ export class VEllipseSector {
150
159
  return curves;
151
160
  }
152
161
 
162
+ /**
163
+ * This function should invalidate any installed listeners and invalidate this object.
164
+ * After calling this function the object might not hold valid data any more and
165
+ * should not be used.
166
+ */
167
+ destroy() {
168
+ this.ellipse.destroy();
169
+ this.isDestroyed = true;
170
+ }
171
+
153
172
  static ellipseSectorUtils = {
154
173
  /**
155
174
  * Helper function to convert an elliptic section to SVG arc params (for the `d` attribute).
package/src/ts/Vector.ts CHANGED
@@ -9,7 +9,9 @@
9
9
  * @modified 2019-12-04 Added the Vector.inv() function.
10
10
  * @modified 2020-03-23 Ported to Typescript from JS.
11
11
  * @modified 2021-01-20 Added UID.
12
- * @version 1.3.0
12
+ * @modified 2022-02-02 Added the `destroy` method.
13
+ * @modified 2022-02-02 Cleared the `Vector.toSVGString` function (deprecated). Use `drawutilssvg` instead.
14
+ * @version 1.4.0
13
15
  *
14
16
  * @file Vector
15
17
  * @public
@@ -17,7 +19,7 @@
17
19
 
18
20
  import { VertTuple } from "./VertTuple";
19
21
  import { Vertex } from "./Vertex";
20
- import { SVGSerializable } from "./interfaces";
22
+ import { SVGSerializable } from "./interfaces";
21
23
 
22
24
  /**
23
25
  * @classdesc A vector (Vertex,Vertex) is a line with a visible direction.<br>
@@ -28,175 +30,137 @@ import { SVGSerializable } from "./interfaces";
28
30
  * @requires VertTuple
29
31
  * @requires Vertex
30
32
  **/
31
- export class Vector extends VertTuple<Vector> implements SVGSerializable {
33
+ export class Vector extends VertTuple<Vector> implements SVGSerializable {
34
+ /**
35
+ * Required to generate proper CSS classes and other class related IDs.
36
+ **/
37
+ readonly className: string = "Vector";
32
38
 
33
- /**
34
- * Required to generate proper CSS classes and other class related IDs.
35
- **/
36
- readonly className : string = "Vector";
37
-
38
- /**
39
- * The constructor.
40
- *
41
- * @constructor
42
- * @name Vector
43
- * @extends Line
44
- * @param {Vertex} vertA - The start vertex of the vector.
45
- * @param {Vertex} vertB - The end vertex of the vector.
46
- **/
47
- constructor( vertA:Vertex, vertB:Vertex ) {
48
- super(vertA,vertB,(a:Vertex,b:Vertex)=>new Vector(a,b));
49
- };
39
+ /**
40
+ * The constructor.
41
+ *
42
+ * @constructor
43
+ * @name Vector
44
+ * @extends Line
45
+ * @param {Vertex} vertA - The start vertex of the vector.
46
+ * @param {Vertex} vertB - The end vertex of the vector.
47
+ **/
48
+ constructor(vertA: Vertex, vertB: Vertex) {
49
+ super(vertA, vertB, (a: Vertex, b: Vertex) => new Vector(a, b));
50
+ }
50
51
 
52
+ /**
53
+ * Get the perpendicular of this vector which is located at a.
54
+ *
55
+ * @param {Number} t The position on the vector.
56
+ * @return {Vector} A new vector being the perpendicular of this vector sitting on a.
57
+ **/
58
+ perp(): Vector {
59
+ var v: Vector = this.clone();
60
+ v.sub(this.a);
61
+ v = new Vector(new Vertex(), new Vertex(-v.b.y, v.b.x));
62
+ v.a.add(this.a);
63
+ v.b.add(this.a);
64
+ return v;
65
+ }
51
66
 
52
-
53
- /**
54
- * Get the perpendicular of this vector which is located at a.
55
- *
56
- * @param {Number} t The position on the vector.
57
- * @return {Vector} A new vector being the perpendicular of this vector sitting on a.
58
- **/
59
- perp():Vector {
60
- var v : Vector = this.clone();
61
- v.sub( this.a );
62
- v = new Vector( new Vertex(), new Vertex(-v.b.y,v.b.x) );
63
- v.a.add( this.a );
64
- v.b.add( this.a );
65
- return v;
66
- };
67
+ /**
68
+ * The inverse of a vector is a vector witht the same magnitude but oppose direction.
69
+ *
70
+ * Please not that the origin of this vector changes here: a->b becomes b->a.
71
+ *
72
+ * @return {Vector}
73
+ **/
74
+ inverse(): Vector {
75
+ var tmp = this.a;
76
+ this.a = this.b;
77
+ this.b = tmp;
78
+ return this;
79
+ }
67
80
 
68
-
69
- /**
70
- * The inverse of a vector is a vector witht the same magnitude but oppose direction.
71
- *
72
- * Please not that the origin of this vector changes here: a->b becomes b->a.
73
- *
74
- * @return {Vector}
75
- **/
76
- inverse():Vector {
77
- var tmp = this.a;
78
- this.a = this.b;
79
- this.b = tmp;
80
- return this;
81
- };
82
-
81
+ /**
82
+ * This function computes the inverse of the vector, which means 'a' stays untouched.
83
+ *
84
+ * @return {Vector} this for chaining.
85
+ **/
86
+ inv(): Vector {
87
+ this.b.x = this.a.x - (this.b.x - this.a.x);
88
+ this.b.y = this.a.y - (this.b.y - this.a.y);
89
+ return this;
90
+ }
83
91
 
84
- /**
85
- * This function computes the inverse of the vector, which means 'a' stays untouched.
86
- *
87
- * @return {Vector} this for chaining.
88
- **/
89
- inv():Vector {
90
- this.b.x = this.a.x-(this.b.x-this.a.x);
91
- this.b.y = this.a.y-(this.b.y-this.a.y);
92
- return this;
93
- };
92
+ /**
93
+ * Get the intersection if this vector and the specified vector.
94
+ *
95
+ * @method intersection
96
+ * @param {Vector} line The second vector.
97
+ * @return {Vertex} The intersection (may lie outside the end-points).
98
+ * @instance
99
+ * @memberof Line
100
+ **/
101
+ intersection(line: Vector): Vertex | null {
102
+ var denominator = this.denominator(line);
103
+ if (denominator == 0) return null;
94
104
 
105
+ var a = this.a.y - line.a.y;
106
+ var b = this.a.x - line.a.x;
107
+ var numerator1 = (line.b.x - line.a.x) * a - (line.b.y - line.a.y) * b;
108
+ var numerator2 = (this.b.x - this.a.x) * a - (this.b.y - this.a.y) * b;
109
+ a = numerator1 / denominator; // NaN if parallel lines
110
+ b = numerator2 / denominator;
95
111
 
96
- /**
97
- * Get the intersection if this vector and the specified vector.
98
- *
99
- * @method intersection
100
- * @param {Vector} line The second vector.
101
- * @return {Vertex} The intersection (may lie outside the end-points).
102
- * @instance
103
- * @memberof Line
104
- **/
105
- intersection( line:Vector ):Vertex|null {
106
- var denominator = this.denominator(line);
107
- if( denominator == 0 )
108
- return null;
109
-
110
- var a = this.a.y - line.a.y;
111
- var b = this.a.x - line.a.x;
112
- var numerator1 = ((line.b.x - line.a.x) * a) - ((line.b.y - line.a.y) * b);
113
- var numerator2 = ((this.b.x - this.a.x) * a) - ((this.b.y - this.a.y) * b);
114
- a = numerator1 / denominator; // NaN if parallel lines
115
- b = numerator2 / denominator;
112
+ // TODO:
113
+ // FOR A VECTOR THE LINE-INTERSECTION MUST BE ON BOTH VECTORS
114
+
115
+ // if we cast these lines infinitely in both directions, they intersect here:
116
+ return new Vertex(this.a.x + a * (this.b.x - this.a.x), this.a.y + a * (this.b.y - this.a.y));
117
+ }
116
118
 
117
- // TODO:
118
- // FOR A VECTOR THE LINE-INTERSECTION MUST BE ON BOTH VECTORS
119
-
120
- // if we cast these lines infinitely in both directions, they intersect here:
121
- return new Vertex( this.a.x + (a * (this.b.x - this.a.x)),
122
- this.a.y + (a * (this.b.y - this.a.y)) );
123
- };
124
-
125
-
119
+ static utils = {
126
120
  /**
127
- * Create an SVG representation of this line.
121
+ * Generate a four-point arrow head, starting at the vector end minus the
122
+ * arrow head length.
123
+ *
124
+ * The first vertex in the returned array is guaranteed to be the located
125
+ * at the vector line end minus the arrow head length.
128
126
  *
129
- * @deprecated DEPRECATION Please use the drawutilssvg library and an XMLSerializer instead.
130
- * @method toSVGString
131
- * @override
132
- * @param {object=} options - A set of options, like 'className'.
133
- * @return {string} The SVG string representation.
134
- * @instance
135
- * @memberof Vector
127
+ *
128
+ * Due to performance all params are required.
129
+ *
130
+ * The params scaleX and scaleY are required for the case that the scaling is not uniform (x and y
131
+ * scaling different). Arrow heads should not look distored on non-uniform scaling.
132
+ *
133
+ * If unsure use 1.0 for scaleX and scaleY (=no distortion).
134
+ * For headlen use 8, it's a good arrow head size.
135
+ *
136
+ * Example:
137
+ * buildArrowHead( new Vertex(0,0), new Vertex(50,100), 8, 1.0, 1.0 )
138
+ *
139
+ * @param {Vertex} zA - The start vertex of the vector to calculate the arrow head for.
140
+ * @param {Vertex} zB - The end vertex of the vector.
141
+ * @param {number} headlen - The length of the arrow head (along the vector direction. A good value is 12).
142
+ * @param {number} scaleX - The horizontal scaling during draw.
143
+ * @param {number} scaleY - the vertical scaling during draw.
136
144
  **/
137
- toSVGString( options:{className?:string} ) {
138
- options = options || {};
139
- var buffer = [];
140
- var vertices = Vector.utils.buildArrowHead( this.a, this.b, 8, 1.0, 1.0 );
141
- buffer.push( '<g' );
142
- if( options.className )
143
- buffer.push( ' class="' + options.className + '"' );
144
- buffer.push( '>' );
145
- buffer.push( ' <line' );
146
- buffer.push( ' x1="' + this.a.x + '"' );
147
- buffer.push( ' y1="' + this.a.y + '"' );
148
- buffer.push( ' x2="' + vertices[0].x + '"' );
149
- buffer.push( ' y2="' + vertices[0].y + '"' );
150
- buffer.push( ' />' );
151
- // Add arrow head
152
-
153
- buffer.push( ' <polygon points="' );
154
- for( var i = 0; i < vertices.length; i++ ) {
155
- if( i > 0 )
156
- buffer.push( ' ' );
157
- buffer.push( '' + vertices[i].x + ',' + vertices[i].y );
158
- }
159
- buffer.push( '"/>' );
160
- buffer.push( '</g>' );
161
- return buffer.join('');
162
- };
163
-
164
- static utils = {
165
- /**
166
- * Generate a four-point arrow head, starting at the vector end minus the
167
- * arrow head length.
168
- *
169
- * The first vertex in the returned array is guaranteed to be the located
170
- * at the vector line end minus the arrow head length.
171
- *
172
- *
173
- * Due to performance all params are required.
174
- *
175
- * The params scaleX and scaleY are required for the case that the scaling is not uniform (x and y
176
- * scaling different). Arrow heads should not look distored on non-uniform scaling.
177
- *
178
- * If unsure use 1.0 for scaleX and scaleY (=no distortion).
179
- * For headlen use 8, it's a good arrow head size.
180
- *
181
- * Example:
182
- * buildArrowHead( new Vertex(0,0), new Vertex(50,100), 8, 1.0, 1.0 )
183
- *
184
- * @param {Vertex} zA - The start vertex of the vector to calculate the arrow head for.
185
- * @param {Vertex} zB - The end vertex of the vector.
186
- * @param {number} headlen - The length of the arrow head (along the vector direction. A good value is 12).
187
- * @param {number} scaleX - The horizontal scaling during draw.
188
- * @param {number} scaleY - the vertical scaling during draw.
189
- **/
190
- buildArrowHead : ( zA:Vertex, zB:Vertex, headlen:number, scaleX:number, scaleY:number ) => {
191
- var angle = Math.atan2( (zB.y-zA.y)*scaleY, (zB.x-zA.x)*scaleX );
192
- var vertices = [];
193
- vertices.push( new Vertex(zB.x*scaleX-(headlen)*Math.cos(angle), zB.y*scaleY-(headlen)*Math.sin(angle)) );
194
- vertices.push( new Vertex(zB.x*scaleX-(headlen*1.35)*Math.cos(angle-Math.PI/8), zB.y*scaleY-(headlen*1.35)*Math.sin(angle-Math.PI/8) ) );
195
- vertices.push( new Vertex(zB.x*scaleX, zB.y*scaleY) );
196
- vertices.push( new Vertex(zB.x*scaleX-(headlen*1.35)*Math.cos(angle+Math.PI/8), zB.y*scaleY-(headlen*1.35)*Math.sin(angle+Math.PI/8)) );
145
+ buildArrowHead: (zA: Vertex, zB: Vertex, headlen: number, scaleX: number, scaleY: number) => {
146
+ var angle = Math.atan2((zB.y - zA.y) * scaleY, (zB.x - zA.x) * scaleX);
147
+ var vertices = [];
148
+ vertices.push(new Vertex(zB.x * scaleX - headlen * Math.cos(angle), zB.y * scaleY - headlen * Math.sin(angle)));
149
+ vertices.push(
150
+ new Vertex(
151
+ zB.x * scaleX - headlen * 1.35 * Math.cos(angle - Math.PI / 8),
152
+ zB.y * scaleY - headlen * 1.35 * Math.sin(angle - Math.PI / 8)
153
+ )
154
+ );
155
+ vertices.push(new Vertex(zB.x * scaleX, zB.y * scaleY));
156
+ vertices.push(
157
+ new Vertex(
158
+ zB.x * scaleX - headlen * 1.35 * Math.cos(angle + Math.PI / 8),
159
+ zB.y * scaleY - headlen * 1.35 * Math.sin(angle + Math.PI / 8)
160
+ )
161
+ );
197
162
 
198
- return vertices;
199
- }
163
+ return vertices;
200
164
  }
201
-
165
+ };
202
166
  }