plotboilerplate 1.15.0 → 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/changelog.md +24 -0
- package/dist/index.esm.js +574 -428
- 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 +574 -428
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +1 -1
- package/src/cjs/BezierPath.d.ts +33 -1
- package/src/cjs/BezierPath.js +80 -13
- 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 +15 -1
- package/src/cjs/PBText.js +11 -1
- package/src/cjs/PBText.js.map +1 -1
- package/src/cjs/PlotBoilerplate.js +1 -1
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +16 -1
- package/src/cjs/Polygon.js +37 -23
- 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 +25 -1
- package/src/cjs/Vertex.js +38 -11
- 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/utils/creategui.js +1 -1
- 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 +33 -1
- package/src/esm/BezierPath.js +80 -13
- 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 +15 -1
- package/src/esm/PBText.js +11 -1
- package/src/esm/PBText.js.map +1 -1
- package/src/esm/PlotBoilerplate.js +1 -1
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +16 -1
- package/src/esm/Polygon.js +37 -23
- 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 +25 -1
- package/src/esm/Vertex.js +38 -11
- 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/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 +96 -11
- 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 +20 -1
- package/src/ts/PlotBoilerplate.ts +1 -1
- package/src/ts/Polygon.ts +48 -22
- 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 +52 -10
- package/src/ts/VertexListeners.ts +248 -266
- package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -30
- package/src/ts/utils/io/FileDrop.ts +178 -0
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
|
*
|
|
@@ -411,16 +421,31 @@ export class VEllipse implements SVGSerializable {
|
|
|
411
421
|
* @return string The SVG string
|
|
412
422
|
*/
|
|
413
423
|
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("");
|
|
424
|
+
// options = options || {};
|
|
425
|
+
// var buffer: Array<string> = [];
|
|
426
|
+
// buffer.push("<ellipse");
|
|
427
|
+
// if (options.className) buffer.push(' class="' + options.className + '"');
|
|
428
|
+
// buffer.push(' cx="' + this.center.x + '"');
|
|
429
|
+
// buffer.push(' cy="' + this.center.y + '"');
|
|
430
|
+
// buffer.push(' rx="' + this.axis.x + '"');
|
|
431
|
+
// buffer.push(' ry="' + this.axis.y + '"');
|
|
432
|
+
// buffer.push(" />");
|
|
433
|
+
// return buffer.join("");
|
|
434
|
+
console.warn(
|
|
435
|
+
"[Deprecation] Warning: the VEllipse.toSVGString method is deprecated and does not return and valid SVG data any more. Please use `drawutilssvg` instead."
|
|
436
|
+
);
|
|
437
|
+
return "";
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* This function should invalidate any installed listeners and invalidate this object.
|
|
442
|
+
* After calling this function the object might not hold valid data any more and
|
|
443
|
+
* should not be used.
|
|
444
|
+
*/
|
|
445
|
+
destroy() {
|
|
446
|
+
this.center.destroy();
|
|
447
|
+
this.axis.destroy();
|
|
448
|
+
this.isDestroyed = true;
|
|
424
449
|
}
|
|
425
450
|
|
|
426
451
|
/**
|
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,177 @@ 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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
/**
|
|
120
|
+
* Create an SVG representation of this line.
|
|
121
|
+
*
|
|
122
|
+
* @deprecated DEPRECATION Please use the drawutilssvg library and an XMLSerializer instead.
|
|
123
|
+
* @method toSVGString
|
|
124
|
+
* @override
|
|
125
|
+
* @param {object=} options - A set of options, like 'className'.
|
|
126
|
+
* @return {string} The SVG string representation.
|
|
127
|
+
* @instance
|
|
128
|
+
* @memberof Vector
|
|
129
|
+
**/
|
|
130
|
+
toSVGString(options: { className?: string }) {
|
|
131
|
+
// options = options || {};
|
|
132
|
+
// var buffer = [];
|
|
133
|
+
// var vertices = Vector.utils.buildArrowHead(this.a, this.b, 8, 1.0, 1.0);
|
|
134
|
+
// buffer.push("<g");
|
|
135
|
+
// if (options.className) buffer.push(' class="' + options.className + '"');
|
|
136
|
+
// buffer.push(">");
|
|
137
|
+
// buffer.push(" <line");
|
|
138
|
+
// buffer.push(' x1="' + this.a.x + '"');
|
|
139
|
+
// buffer.push(' y1="' + this.a.y + '"');
|
|
140
|
+
// buffer.push(' x2="' + vertices[0].x + '"');
|
|
141
|
+
// buffer.push(' y2="' + vertices[0].y + '"');
|
|
142
|
+
// buffer.push(" />");
|
|
143
|
+
// // Add arrow head
|
|
144
|
+
|
|
145
|
+
// buffer.push(' <polygon points="');
|
|
146
|
+
// for (var i = 0; i < vertices.length; i++) {
|
|
147
|
+
// if (i > 0) buffer.push(" ");
|
|
148
|
+
// buffer.push("" + vertices[i].x + "," + vertices[i].y);
|
|
149
|
+
// }
|
|
150
|
+
// buffer.push('"/>');
|
|
151
|
+
// buffer.push("</g>");
|
|
152
|
+
// return buffer.join("");
|
|
153
|
+
console.warn(
|
|
154
|
+
"[Deprecation] Warning: the Vector.toSVGString method is deprecated and does not return and valid SVG data any more. Please use `drawutilssvg` instead."
|
|
155
|
+
);
|
|
156
|
+
return "";
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
static utils = {
|
|
126
160
|
/**
|
|
127
|
-
*
|
|
161
|
+
* Generate a four-point arrow head, starting at the vector end minus the
|
|
162
|
+
* arrow head length.
|
|
163
|
+
*
|
|
164
|
+
* The first vertex in the returned array is guaranteed to be the located
|
|
165
|
+
* at the vector line end minus the arrow head length.
|
|
128
166
|
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
167
|
+
*
|
|
168
|
+
* Due to performance all params are required.
|
|
169
|
+
*
|
|
170
|
+
* The params scaleX and scaleY are required for the case that the scaling is not uniform (x and y
|
|
171
|
+
* scaling different). Arrow heads should not look distored on non-uniform scaling.
|
|
172
|
+
*
|
|
173
|
+
* If unsure use 1.0 for scaleX and scaleY (=no distortion).
|
|
174
|
+
* For headlen use 8, it's a good arrow head size.
|
|
175
|
+
*
|
|
176
|
+
* Example:
|
|
177
|
+
* buildArrowHead( new Vertex(0,0), new Vertex(50,100), 8, 1.0, 1.0 )
|
|
178
|
+
*
|
|
179
|
+
* @param {Vertex} zA - The start vertex of the vector to calculate the arrow head for.
|
|
180
|
+
* @param {Vertex} zB - The end vertex of the vector.
|
|
181
|
+
* @param {number} headlen - The length of the arrow head (along the vector direction. A good value is 12).
|
|
182
|
+
* @param {number} scaleX - The horizontal scaling during draw.
|
|
183
|
+
* @param {number} scaleY - the vertical scaling during draw.
|
|
136
184
|
**/
|
|
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)) );
|
|
185
|
+
buildArrowHead: (zA: Vertex, zB: Vertex, headlen: number, scaleX: number, scaleY: number) => {
|
|
186
|
+
var angle = Math.atan2((zB.y - zA.y) * scaleY, (zB.x - zA.x) * scaleX);
|
|
187
|
+
var vertices = [];
|
|
188
|
+
vertices.push(new Vertex(zB.x * scaleX - headlen * Math.cos(angle), zB.y * scaleY - headlen * Math.sin(angle)));
|
|
189
|
+
vertices.push(
|
|
190
|
+
new Vertex(
|
|
191
|
+
zB.x * scaleX - headlen * 1.35 * Math.cos(angle - Math.PI / 8),
|
|
192
|
+
zB.y * scaleY - headlen * 1.35 * Math.sin(angle - Math.PI / 8)
|
|
193
|
+
)
|
|
194
|
+
);
|
|
195
|
+
vertices.push(new Vertex(zB.x * scaleX, zB.y * scaleY));
|
|
196
|
+
vertices.push(
|
|
197
|
+
new Vertex(
|
|
198
|
+
zB.x * scaleX - headlen * 1.35 * Math.cos(angle + Math.PI / 8),
|
|
199
|
+
zB.y * scaleY - headlen * 1.35 * Math.sin(angle + Math.PI / 8)
|
|
200
|
+
)
|
|
201
|
+
);
|
|
197
202
|
|
|
198
|
-
|
|
199
|
-
}
|
|
203
|
+
return vertices;
|
|
200
204
|
}
|
|
201
|
-
|
|
205
|
+
};
|
|
202
206
|
}
|