plotboilerplate 1.14.0 → 1.17.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 +2 -0
- package/changelog.md +57 -0
- package/dist/index.esm.js +856 -694
- 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 +858 -598
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +1 -1
- package/src/cjs/BezierPath.d.ts +32 -14
- package/src/cjs/BezierPath.js +65 -24
- package/src/cjs/BezierPath.js.map +1 -1
- package/src/cjs/Bounds.d.ts +22 -1
- package/src/cjs/Bounds.js +24 -1
- package/src/cjs/Bounds.js.map +1 -1
- package/src/cjs/Circle.d.ts +15 -13
- package/src/cjs/Circle.js +16 -34
- package/src/cjs/Circle.js.map +1 -1
- package/src/cjs/CircleSector.d.ts +17 -16
- package/src/cjs/CircleSector.js +12 -24
- package/src/cjs/CircleSector.js.map +1 -1
- package/src/cjs/CubicBezierCurve.d.ts +16 -15
- package/src/cjs/CubicBezierCurve.js +57 -94
- 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 -15
- package/src/cjs/Line.js +6 -31
- 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 +15 -13
- package/src/cjs/PBImage.js +11 -15
- package/src/cjs/PBImage.js.map +1 -1
- package/src/cjs/PBText.d.ts +13 -12
- package/src/cjs/PBText.js +8 -12
- package/src/cjs/PBText.js.map +1 -1
- package/src/cjs/PlotBoilerplate.js +3 -2
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +44 -14
- package/src/cjs/Polygon.js +116 -66
- package/src/cjs/Polygon.js.map +1 -1
- package/src/cjs/Triangle.d.ts +15 -13
- package/src/cjs/Triangle.js +23 -64
- package/src/cjs/Triangle.js.map +1 -1
- package/src/cjs/VEllipse.d.ts +14 -9
- package/src/cjs/VEllipse.js +10 -18
- 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 -15
- package/src/cjs/Vector.js +9 -49
- 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 +47 -13
- package/src/cjs/Vertex.js +62 -22
- 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 +41 -2
- package/src/cjs/draw.js +140 -3
- package/src/cjs/draw.js.map +1 -1
- package/src/cjs/drawgl.d.ts +38 -2
- package/src/cjs/drawgl.js +41 -2
- package/src/cjs/drawgl.js.map +1 -1
- package/src/cjs/drawutilssvg.d.ts +66 -3
- package/src/cjs/drawutilssvg.js +140 -15
- package/src/cjs/drawutilssvg.js.map +1 -1
- package/src/cjs/index.d.ts +0 -1
- package/src/cjs/index.js +0 -1
- package/src/cjs/index.js.map +1 -1
- package/src/cjs/interfaces/DrawLib.d.ts +61 -26
- package/src/cjs/interfaces/DrawLib.js +2 -0
- package/src/cjs/interfaces/DrawLib.js.map +1 -1
- package/src/cjs/interfaces/core.d.ts +0 -12
- package/src/cjs/module.d.ts +1 -3
- package/src/cjs/module.js +2 -5
- package/src/cjs/module.js.map +1 -1
- package/src/cjs/utils/creategui.js +16 -2
- package/src/cjs/utils/datastructures/Girih.d.ts +5 -0
- package/src/cjs/utils/datastructures/Girih.js +18 -14
- package/src/cjs/utils/datastructures/Girih.js.map +1 -1
- package/src/cjs/utils/datastructures/GirihPenroseRhombus.js +42 -25
- package/src/cjs/utils/datastructures/GirihPenroseRhombus.js.map +1 -1
- package/src/cjs/utils/datastructures/GirihTile.js +2 -13
- package/src/cjs/utils/datastructures/GirihTile.js.map +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 +17 -1
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +50 -32
- 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 +32 -14
- package/src/esm/BezierPath.js +65 -24
- package/src/esm/BezierPath.js.map +1 -1
- package/src/esm/Bounds.d.ts +22 -1
- package/src/esm/Bounds.js +24 -1
- package/src/esm/Bounds.js.map +1 -1
- package/src/esm/Circle.d.ts +15 -13
- package/src/esm/Circle.js +16 -34
- package/src/esm/Circle.js.map +1 -1
- package/src/esm/CircleSector.d.ts +17 -16
- package/src/esm/CircleSector.js +12 -24
- package/src/esm/CircleSector.js.map +1 -1
- package/src/esm/CubicBezierCurve.d.ts +16 -15
- package/src/esm/CubicBezierCurve.js +57 -94
- 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 -15
- package/src/esm/Line.js +6 -31
- 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 +15 -13
- package/src/esm/PBImage.js +11 -15
- package/src/esm/PBImage.js.map +1 -1
- package/src/esm/PBText.d.ts +13 -12
- package/src/esm/PBText.js +8 -12
- package/src/esm/PBText.js.map +1 -1
- package/src/esm/PlotBoilerplate.js +3 -2
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +44 -14
- package/src/esm/Polygon.js +116 -66
- package/src/esm/Polygon.js.map +1 -1
- package/src/esm/Triangle.d.ts +15 -13
- package/src/esm/Triangle.js +23 -64
- package/src/esm/Triangle.js.map +1 -1
- package/src/esm/VEllipse.d.ts +14 -9
- package/src/esm/VEllipse.js +10 -18
- 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 -15
- package/src/esm/Vector.js +9 -49
- 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 +47 -13
- package/src/esm/Vertex.js +62 -22
- 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 +41 -2
- package/src/esm/draw.js +139 -3
- package/src/esm/draw.js.map +1 -1
- package/src/esm/drawgl.d.ts +38 -2
- package/src/esm/drawgl.js +41 -2
- package/src/esm/drawgl.js.map +1 -1
- package/src/esm/drawutilssvg.d.ts +66 -3
- package/src/esm/drawutilssvg.js +140 -15
- package/src/esm/drawutilssvg.js.map +1 -1
- package/src/esm/index.d.ts +0 -1
- package/src/esm/index.js +0 -1
- package/src/esm/index.js.map +1 -1
- package/src/esm/interfaces/DrawLib.d.ts +61 -26
- package/src/esm/interfaces/DrawLib.js +2 -0
- package/src/esm/interfaces/DrawLib.js.map +1 -1
- package/src/esm/interfaces/core.d.ts +0 -12
- package/src/esm/module.d.ts +1 -3
- package/src/esm/module.js +5 -4
- package/src/esm/module.js.map +1 -1
- package/src/esm/utils/datastructures/Girih.d.ts +5 -0
- package/src/esm/utils/datastructures/Girih.js +18 -14
- package/src/esm/utils/datastructures/Girih.js.map +1 -1
- package/src/esm/utils/datastructures/GirihPenroseRhombus.js +42 -25
- package/src/esm/utils/datastructures/GirihPenroseRhombus.js.map +1 -1
- package/src/esm/utils/datastructures/GirihTile.js +2 -13
- package/src/esm/utils/datastructures/GirihTile.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 +17 -1
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js +49 -32
- 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 +78 -22
- package/src/ts/Bounds.ts +25 -1
- package/src/ts/Circle.ts +187 -200
- package/src/ts/CircleSector.ts +141 -141
- package/src/ts/CubicBezierCurve.ts +738 -810
- package/src/ts/KeyHandler.ts +221 -212
- package/src/ts/Line.ts +48 -80
- package/src/ts/MouseHandler.ts +356 -368
- package/src/ts/PBImage.ts +67 -69
- package/src/ts/PBText.ts +16 -14
- package/src/ts/PlotBoilerplate.ts +4 -2
- package/src/ts/Polygon.ts +493 -451
- package/src/ts/Triangle.ts +444 -489
- package/src/ts/VEllipse.ts +18 -17
- package/src/ts/VEllipseSector.ts +20 -1
- package/src/ts/Vector.ts +124 -160
- package/src/ts/VertTuple.ts +333 -338
- package/src/ts/Vertex.ts +75 -21
- package/src/ts/VertexListeners.ts +248 -266
- package/src/ts/draw.ts +192 -3
- package/src/ts/drawgl.ts +44 -2
- package/src/ts/drawutilssvg.ts +181 -15
- package/src/ts/index.ts +0 -1
- package/src/ts/interfaces/DrawLib.ts +69 -26
- package/src/ts/interfaces/core.ts +0 -11
- package/src/ts/module.ts +2 -4
- package/src/ts/utils/datastructures/Girih.ts +204 -209
- package/src/ts/utils/datastructures/GirihPenroseRhombus.ts +170 -152
- package/src/ts/utils/datastructures/GirihTile.ts +394 -419
- package/src/ts/utils/findInVertexArray.ts +28 -0
- package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +56 -34
- package/src/ts/utils/io/FileDrop.ts +178 -0
- package/src/ts/SVGBuilder.ts +0 -109
- package/src/ts/utils/algorithms/sh-tmp.ts~ +0 -59
package/src/ts/VEllipse.ts
CHANGED
|
@@ -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
|
-
* @
|
|
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
|
-
*
|
|
408
|
-
*
|
|
409
|
-
*
|
|
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
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
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
|
/**
|
package/src/ts/VEllipseSector.ts
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @author Ikaros Kappler
|
|
6
6
|
* @date 2021-02-26
|
|
7
|
-
* @
|
|
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
|
-
* @
|
|
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
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
199
|
-
}
|
|
163
|
+
return vertices;
|
|
200
164
|
}
|
|
201
|
-
|
|
165
|
+
};
|
|
202
166
|
}
|