plotboilerplate 1.12.10 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/changelog.md +50 -0
- package/dist/index.esm.js +999 -510
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/plotboilerplate.browser.min.js +1 -1
- package/dist/plotboilerplate.browser.min.js.map +1 -1
- package/dist/plotboilerplate.js +1013 -509
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +1 -1
- package/src/cjs/BezierPath.d.ts +45 -2
- package/src/cjs/BezierPath.js +114 -18
- package/src/cjs/BezierPath.js.map +1 -1
- package/src/cjs/Circle.d.ts +25 -10
- package/src/cjs/Circle.js +38 -33
- package/src/cjs/Circle.js.map +1 -1
- package/src/cjs/CircleSector.d.ts +27 -13
- package/src/cjs/CircleSector.js +38 -23
- package/src/cjs/CircleSector.js.map +1 -1
- package/src/cjs/CubicBezierCurve.d.ts +17 -1
- package/src/cjs/CubicBezierCurve.js +78 -79
- package/src/cjs/CubicBezierCurve.js.map +1 -1
- package/src/cjs/KeyHandler.d.ts +10 -3
- package/src/cjs/KeyHandler.js +28 -23
- package/src/cjs/KeyHandler.js.map +1 -1
- package/src/cjs/Line.d.ts +2 -1
- package/src/cjs/Line.js +19 -18
- package/src/cjs/Line.js.map +1 -1
- package/src/cjs/MouseHandler.js +43 -53
- package/src/cjs/MouseHandler.js.map +1 -1
- package/src/cjs/PBImage.d.ts +16 -1
- package/src/cjs/PBImage.js +13 -3
- package/src/cjs/PBImage.js.map +1 -1
- package/src/cjs/PBText.d.ts +130 -0
- package/src/cjs/PBText.js +76 -0
- package/src/cjs/PBText.js.map +1 -0
- package/src/cjs/PlotBoilerplate.d.ts +2 -1
- package/src/cjs/PlotBoilerplate.js +44 -16
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +37 -1
- package/src/cjs/Polygon.js +131 -54
- package/src/cjs/Polygon.js.map +1 -1
- package/src/cjs/Triangle.d.ts +16 -1
- package/src/cjs/Triangle.js +50 -54
- package/src/cjs/Triangle.js.map +1 -1
- package/src/cjs/VEllipse.d.ts +16 -1
- package/src/cjs/VEllipse.js +25 -12
- package/src/cjs/VEllipse.js.map +1 -1
- package/src/cjs/VEllipseSector.d.ts +15 -1
- package/src/cjs/VEllipseSector.js +11 -1
- package/src/cjs/VEllipseSector.js.map +1 -1
- package/src/cjs/Vector.d.ts +3 -1
- package/src/cjs/Vector.js +32 -36
- package/src/cjs/Vector.js.map +1 -1
- package/src/cjs/VertTuple.d.ts +15 -1
- package/src/cjs/VertTuple.js +14 -19
- package/src/cjs/VertTuple.js.map +1 -1
- package/src/cjs/Vertex.d.ts +66 -4
- package/src/cjs/Vertex.js +99 -17
- package/src/cjs/Vertex.js.map +1 -1
- package/src/cjs/VertexListeners.d.ts +12 -8
- package/src/cjs/VertexListeners.js +18 -25
- package/src/cjs/VertexListeners.js.map +1 -1
- package/src/cjs/draw.d.ts +30 -2
- package/src/cjs/draw.js +51 -6
- package/src/cjs/draw.js.map +1 -1
- package/src/cjs/drawgl.d.ts +29 -2
- package/src/cjs/drawgl.js +21 -4
- package/src/cjs/drawgl.js.map +1 -1
- package/src/cjs/drawutilssvg.d.ts +25 -7
- package/src/cjs/drawutilssvg.js +62 -14
- package/src/cjs/drawutilssvg.js.map +1 -1
- package/src/cjs/entry.js +1 -0
- package/src/cjs/index.d.ts +1 -0
- package/src/cjs/index.js +1 -0
- package/src/cjs/index.js.map +1 -1
- package/src/cjs/interfaces/DrawLib.d.ts +27 -6
- package/src/cjs/interfaces/DrawLib.js +3 -0
- package/src/cjs/interfaces/DrawLib.js.map +1 -1
- package/src/cjs/interfaces/core.d.ts +9 -1
- package/src/cjs/interfaces/core.js +1 -0
- package/src/cjs/interfaces/core.js.map +1 -1
- package/src/cjs/utils/creategui.js +1 -1
- package/src/cjs/utils/findInVertexArray.d.ts +19 -0
- package/src/cjs/utils/findInVertexArray.js +29 -0
- package/src/cjs/utils/findInVertexArray.js.map +1 -0
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +55 -28
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/cjs/utils/io/DndFileHandler.d.ts +63 -0
- package/src/cjs/utils/io/DndFileHandler.js +112 -0
- package/src/cjs/utils/io/DndFileHandler.js.map +1 -0
- package/src/cjs/utils/io/FileDrop.d.ts +98 -0
- package/src/cjs/utils/io/FileDrop.js +142 -0
- package/src/cjs/utils/io/FileDrop.js.map +1 -0
- package/src/esm/BezierPath.d.ts +45 -2
- package/src/esm/BezierPath.js +114 -18
- package/src/esm/BezierPath.js.map +1 -1
- package/src/esm/Circle.d.ts +25 -10
- package/src/esm/Circle.js +38 -33
- package/src/esm/Circle.js.map +1 -1
- package/src/esm/CircleSector.d.ts +27 -13
- package/src/esm/CircleSector.js +38 -23
- package/src/esm/CircleSector.js.map +1 -1
- package/src/esm/CubicBezierCurve.d.ts +17 -1
- package/src/esm/CubicBezierCurve.js +78 -79
- package/src/esm/CubicBezierCurve.js.map +1 -1
- package/src/esm/KeyHandler.d.ts +10 -3
- package/src/esm/KeyHandler.js +28 -23
- package/src/esm/KeyHandler.js.map +1 -1
- package/src/esm/Line.d.ts +2 -1
- package/src/esm/Line.js +19 -18
- package/src/esm/Line.js.map +1 -1
- package/src/esm/MouseHandler.js +43 -53
- package/src/esm/MouseHandler.js.map +1 -1
- package/src/esm/PBImage.d.ts +16 -1
- package/src/esm/PBImage.js +13 -3
- package/src/esm/PBImage.js.map +1 -1
- package/src/esm/PBText.d.ts +130 -0
- package/src/esm/PBText.js +71 -0
- package/src/esm/PBText.js.map +1 -0
- package/src/esm/PlotBoilerplate.d.ts +2 -1
- package/src/esm/PlotBoilerplate.js +44 -16
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +37 -1
- package/src/esm/Polygon.js +131 -54
- package/src/esm/Polygon.js.map +1 -1
- package/src/esm/Triangle.d.ts +16 -1
- package/src/esm/Triangle.js +50 -54
- package/src/esm/Triangle.js.map +1 -1
- package/src/esm/VEllipse.d.ts +16 -1
- package/src/esm/VEllipse.js +25 -12
- package/src/esm/VEllipse.js.map +1 -1
- package/src/esm/VEllipseSector.d.ts +15 -1
- package/src/esm/VEllipseSector.js +11 -1
- package/src/esm/VEllipseSector.js.map +1 -1
- package/src/esm/Vector.d.ts +3 -1
- package/src/esm/Vector.js +32 -36
- package/src/esm/Vector.js.map +1 -1
- package/src/esm/VertTuple.d.ts +15 -1
- package/src/esm/VertTuple.js +14 -19
- package/src/esm/VertTuple.js.map +1 -1
- package/src/esm/Vertex.d.ts +66 -4
- package/src/esm/Vertex.js +99 -17
- package/src/esm/Vertex.js.map +1 -1
- package/src/esm/VertexListeners.d.ts +12 -8
- package/src/esm/VertexListeners.js +18 -25
- package/src/esm/VertexListeners.js.map +1 -1
- package/src/esm/draw.d.ts +30 -2
- package/src/esm/draw.js +51 -6
- package/src/esm/draw.js.map +1 -1
- package/src/esm/drawgl.d.ts +29 -2
- package/src/esm/drawgl.js +21 -4
- package/src/esm/drawgl.js.map +1 -1
- package/src/esm/drawutilssvg.d.ts +25 -7
- package/src/esm/drawutilssvg.js +62 -14
- package/src/esm/drawutilssvg.js.map +1 -1
- package/src/esm/entry.js +1 -0
- package/src/esm/index.d.ts +1 -0
- package/src/esm/index.js +1 -0
- package/src/esm/index.js.map +1 -1
- package/src/esm/interfaces/DrawLib.d.ts +27 -6
- package/src/esm/interfaces/DrawLib.js +3 -0
- package/src/esm/interfaces/DrawLib.js.map +1 -1
- package/src/esm/interfaces/core.d.ts +9 -1
- package/src/esm/interfaces/core.js +1 -0
- package/src/esm/interfaces/core.js.map +1 -1
- package/src/esm/utils/findInVertexArray.d.ts +19 -0
- package/src/esm/utils/findInVertexArray.js +25 -0
- package/src/esm/utils/findInVertexArray.js.map +1 -0
- package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js +54 -28
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/esm/utils/io/DndFileHandler.d.ts +63 -0
- package/src/esm/utils/io/DndFileHandler.js +106 -0
- package/src/esm/utils/io/DndFileHandler.js.map +1 -0
- package/src/esm/utils/io/FileDrop.d.ts +98 -0
- package/src/esm/utils/io/FileDrop.js +136 -0
- package/src/esm/utils/io/FileDrop.js.map +1 -0
- package/src/ts/BezierPath.ts +133 -16
- package/src/ts/Circle.ts +213 -200
- package/src/ts/CircleSector.ts +171 -141
- package/src/ts/CubicBezierCurve.ts +777 -810
- package/src/ts/KeyHandler.ts +221 -212
- package/src/ts/Line.ts +77 -80
- package/src/ts/MouseHandler.ts +356 -368
- package/src/ts/PBImage.ts +81 -68
- package/src/ts/PBText.ts +166 -0
- package/src/ts/PlotBoilerplate.ts +48 -20
- package/src/ts/Polygon.ts +519 -451
- package/src/ts/Triangle.ts +484 -489
- package/src/ts/VEllipse.ts +36 -11
- package/src/ts/VEllipseSector.ts +20 -1
- package/src/ts/Vector.ts +164 -160
- package/src/ts/VertTuple.ts +333 -338
- package/src/ts/Vertex.ts +117 -16
- package/src/ts/VertexListeners.ts +248 -266
- package/src/ts/draw.ts +71 -8
- package/src/ts/drawgl.ts +48 -8
- package/src/ts/drawutilssvg.ts +94 -17
- package/src/ts/index.ts +1 -0
- package/src/ts/interfaces/DrawLib.ts +30 -4
- package/src/ts/interfaces/core.ts +9 -0
- package/src/ts/utils/findInVertexArray.ts +28 -0
- package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -30
- package/src/ts/utils/io/FileDrop.ts +178 -0
- package/dist/plotboilerplate.browser.min.js.LICENSE.txt +0 -8
- package/src/ts/utils/algorithms/clearPolygonDuplicateVertices.ts~ +0 -5
- package/src/ts/utils/algorithms/findPolygonSelfIntersections.ts~ +0 -45
- package/src/ts/utils/algorithms/sh-tmp.ts~ +0 -59
- package/src/ts/utils/algorithms/splitPolygonToNonIntersecting.ts~ +0 -113
- package/src/ts/utils/algorithms/sutherlandHodgman.ts~ +0 -88
package/src/ts/CircleSector.ts
CHANGED
|
@@ -6,12 +6,10 @@
|
|
|
6
6
|
* @version 1.1.1
|
|
7
7
|
**/
|
|
8
8
|
|
|
9
|
-
|
|
10
9
|
import { Circle } from "./Circle";
|
|
11
10
|
import { UIDGenerator } from "./UIDGenerator";
|
|
12
11
|
import { SVGPathParams, SVGSerializable, UID, XYCoords } from "./interfaces";
|
|
13
12
|
|
|
14
|
-
|
|
15
13
|
/**
|
|
16
14
|
* @classdesc A simple circle sector: circle, start- and end-angle.
|
|
17
15
|
*
|
|
@@ -22,151 +20,183 @@ import { SVGPathParams, SVGSerializable, UID, XYCoords } from "./interfaces";
|
|
|
22
20
|
* @requires XYCoords
|
|
23
21
|
**/
|
|
24
22
|
export class CircleSector implements SVGSerializable {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Required to generate proper CSS classes and other class related IDs.
|
|
25
|
+
**/
|
|
26
|
+
readonly className: string = "CircleSector";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The UID of this drawable object.
|
|
30
|
+
*
|
|
31
|
+
* @member {UID}
|
|
32
|
+
* @memberof CircleSector
|
|
33
|
+
* @instance
|
|
34
|
+
* @readonly
|
|
35
|
+
*/
|
|
36
|
+
readonly uid: UID;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @member {Circle}
|
|
40
|
+
* @memberof CircleSector
|
|
41
|
+
* @instance
|
|
42
|
+
*/
|
|
43
|
+
circle: Circle;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @member {number}
|
|
47
|
+
* @memberof CircleSector
|
|
48
|
+
* @instance
|
|
49
|
+
*/
|
|
50
|
+
startAngle: number;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @member {number}
|
|
54
|
+
* @memberof CircleSector
|
|
55
|
+
* @instance
|
|
56
|
+
*/
|
|
57
|
+
endAngle: number;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @member isDestroyed
|
|
61
|
+
* @memberof CircleSector
|
|
62
|
+
* @type {boolean}
|
|
63
|
+
* @instance
|
|
64
|
+
*/
|
|
65
|
+
isDestroyed: boolean;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Create a new circle sector with given circle, start- and end-angle.
|
|
69
|
+
*
|
|
70
|
+
* @constructor
|
|
71
|
+
* @name CircleSector
|
|
72
|
+
* @param {Circle} circle - The circle.
|
|
73
|
+
* @param {number} startAngle - The start angle of the sector.
|
|
74
|
+
* @param {number} endAngle - The end angle of the sector.
|
|
75
|
+
*/
|
|
76
|
+
constructor(circle: Circle, startAngle: number, endAngle: number) {
|
|
77
|
+
this.uid = UIDGenerator.next();
|
|
78
|
+
this.circle = circle;
|
|
79
|
+
this.startAngle = startAngle;
|
|
80
|
+
this.endAngle = endAngle;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Create an SVG representation of this circle.
|
|
85
|
+
*
|
|
86
|
+
* @deprecated DEPRECATION Please use the drawutilssvg library and an XMLSerializer instead.
|
|
87
|
+
* @method toSVGString
|
|
88
|
+
* @param {object=} options - An optional set of options, like 'className'.
|
|
89
|
+
* @return {string} A string representing the SVG code for this vertex.
|
|
90
|
+
* @instance
|
|
91
|
+
* @memberof Circle
|
|
92
|
+
*/
|
|
93
|
+
toSVGString(options: { className?: string }) {
|
|
94
|
+
// options = options || {};
|
|
95
|
+
// var buffer: Array<string> = [];
|
|
96
|
+
// buffer.push("<path ");
|
|
97
|
+
// if (options.className) buffer.push(' class="' + options.className + '"');
|
|
98
|
+
// const data: SVGPathParams = CircleSector.circleSectorUtils.describeSVGArc(
|
|
99
|
+
// this.circle.center.x,
|
|
100
|
+
// this.circle.center.y,
|
|
101
|
+
// this.circle.radius,
|
|
102
|
+
// this.startAngle,
|
|
103
|
+
// this.endAngle
|
|
104
|
+
// );
|
|
105
|
+
// buffer.push(' d="' + data.join(" ") + '" />');
|
|
106
|
+
// return buffer.join("");
|
|
107
|
+
console.warn(
|
|
108
|
+
"[Deprecation] Warning: the CircleSector.toSVGString method is deprecated and does not return and valid SVG data any more. Please use `drawutilssvg` instead."
|
|
109
|
+
);
|
|
110
|
+
return "";
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* This function should invalidate any installed listeners and invalidate this object.
|
|
115
|
+
* After calling this function the object might not hold valid data any more and
|
|
116
|
+
* should not be used.
|
|
117
|
+
*/
|
|
118
|
+
destroy() {
|
|
119
|
+
this.circle.destroy();
|
|
120
|
+
this.isDestroyed = true;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
static circleSectorUtils = {
|
|
32
124
|
/**
|
|
33
|
-
*
|
|
125
|
+
* Helper function to convert polar circle coordinates to cartesian coordinates.
|
|
34
126
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* @
|
|
38
|
-
* @readonly
|
|
39
|
-
*/
|
|
40
|
-
readonly uid : UID;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* @member {Circle}
|
|
45
|
-
* @memberof CircleSector
|
|
46
|
-
* @instance
|
|
47
|
-
*/
|
|
48
|
-
circle:Circle;
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* @member {number}
|
|
52
|
-
* @memberof CircleSector
|
|
53
|
-
* @instance
|
|
54
|
-
*/
|
|
55
|
-
startAngle:number;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* @member {number}
|
|
59
|
-
* @memberof CircleSector
|
|
60
|
-
* @instance
|
|
127
|
+
* TODO: generalize for ellipses (two radii).
|
|
128
|
+
*
|
|
129
|
+
* @param {number} angle - The angle in radians.
|
|
61
130
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
131
|
+
polarToCartesian: (centerX: number, centerY: number, radius: number, angle: number): XYCoords => {
|
|
132
|
+
return {
|
|
133
|
+
x: centerX + radius * Math.cos(angle),
|
|
134
|
+
y: centerY + radius * Math.sin(angle)
|
|
135
|
+
};
|
|
136
|
+
},
|
|
64
137
|
|
|
65
138
|
/**
|
|
66
|
-
*
|
|
139
|
+
* Helper function to convert a circle section as SVG arc params (for the `d` attribute).
|
|
140
|
+
* Found at: https://stackoverflow.com/questions/5736398/how-to-calculate-the-svg-path-for-an-arc-of-a-circle
|
|
67
141
|
*
|
|
68
|
-
*
|
|
69
|
-
* @name CircleSector
|
|
70
|
-
* @param {Circle} circle - The circle.
|
|
71
|
-
* @param {number} startAngle - The start angle of the sector.
|
|
72
|
-
* @param {number} endAngle - The end angle of the sector.
|
|
73
|
-
*/
|
|
74
|
-
constructor( circle:Circle, startAngle:number, endAngle:number ) {
|
|
75
|
-
this.uid = UIDGenerator.next();
|
|
76
|
-
this.circle = circle;
|
|
77
|
-
this.startAngle = startAngle;
|
|
78
|
-
this.endAngle = endAngle;
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Create an SVG representation of this circle.
|
|
142
|
+
* TODO: generalize for ellipses (two radii).
|
|
86
143
|
*
|
|
87
|
-
* @
|
|
88
|
-
* @
|
|
89
|
-
* @return {string} A string representing the SVG code for this vertex.
|
|
90
|
-
* @instance
|
|
91
|
-
* @memberof Circle
|
|
144
|
+
* @param {boolean} options.moveToStart - If false (default=true) the initial 'Move' command will not be used.
|
|
145
|
+
* @return [ 'A', radiusx, radiusy, rotation=0, largeArcFlag=1|0, sweepFlag=0, endx, endy ]
|
|
92
146
|
*/
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return firstHalf.concat( secondHalf );
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// Boolean stored as integers (0|1).
|
|
152
|
-
const diff : number = endAngle-startAngle;
|
|
153
|
-
var largeArcFlag : number;
|
|
154
|
-
var sweepFlag : number;
|
|
155
|
-
if( diff < 0 ) {
|
|
156
|
-
largeArcFlag = Math.abs(diff) < Math.PI ? 1 : 0;
|
|
157
|
-
sweepFlag = 1;
|
|
158
|
-
} else {
|
|
159
|
-
largeArcFlag = Math.abs(diff) > Math.PI ? 1 : 0;
|
|
160
|
-
sweepFlag = 1;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
const pathData = [];
|
|
164
|
-
if( options.moveToStart ) {
|
|
165
|
-
pathData.push('M', start.x, start.y );
|
|
166
|
-
}
|
|
167
|
-
pathData.push("A", radius, radius, 0, largeArcFlag, sweepFlag, end.x, end.y );
|
|
168
|
-
return pathData;
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
|
|
147
|
+
describeSVGArc: (
|
|
148
|
+
x: number,
|
|
149
|
+
y: number,
|
|
150
|
+
radius: number,
|
|
151
|
+
startAngle: number,
|
|
152
|
+
endAngle: number,
|
|
153
|
+
options?: { moveToStart: boolean }
|
|
154
|
+
): SVGPathParams => {
|
|
155
|
+
if (typeof options === "undefined") options = { moveToStart: true };
|
|
156
|
+
|
|
157
|
+
const end: XYCoords = CircleSector.circleSectorUtils.polarToCartesian(x, y, radius, endAngle);
|
|
158
|
+
const start: XYCoords = CircleSector.circleSectorUtils.polarToCartesian(x, y, radius, startAngle);
|
|
159
|
+
|
|
160
|
+
// Split full circles into two halves.
|
|
161
|
+
// Some browsers have problems to render full circles (described by start==end).
|
|
162
|
+
if (Math.PI * 2 - Math.abs(startAngle - endAngle) < 0.001) {
|
|
163
|
+
const firstHalf: SVGPathParams = CircleSector.circleSectorUtils.describeSVGArc(
|
|
164
|
+
x,
|
|
165
|
+
y,
|
|
166
|
+
radius,
|
|
167
|
+
startAngle,
|
|
168
|
+
startAngle + (endAngle - startAngle) / 2,
|
|
169
|
+
options
|
|
170
|
+
);
|
|
171
|
+
const secondHalf: SVGPathParams = CircleSector.circleSectorUtils.describeSVGArc(
|
|
172
|
+
x,
|
|
173
|
+
y,
|
|
174
|
+
radius,
|
|
175
|
+
startAngle + (endAngle - startAngle) / 2,
|
|
176
|
+
endAngle,
|
|
177
|
+
options
|
|
178
|
+
);
|
|
179
|
+
return firstHalf.concat(secondHalf);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Boolean stored as integers (0|1).
|
|
183
|
+
const diff: number = endAngle - startAngle;
|
|
184
|
+
var largeArcFlag: number;
|
|
185
|
+
var sweepFlag: number;
|
|
186
|
+
if (diff < 0) {
|
|
187
|
+
largeArcFlag = Math.abs(diff) < Math.PI ? 1 : 0;
|
|
188
|
+
sweepFlag = 1;
|
|
189
|
+
} else {
|
|
190
|
+
largeArcFlag = Math.abs(diff) > Math.PI ? 1 : 0;
|
|
191
|
+
sweepFlag = 1;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const pathData = [];
|
|
195
|
+
if (options.moveToStart) {
|
|
196
|
+
pathData.push("M", start.x, start.y);
|
|
197
|
+
}
|
|
198
|
+
pathData.push("A", radius, radius, 0, largeArcFlag, sweepFlag, end.x, end.y);
|
|
199
|
+
return pathData;
|
|
200
|
+
}
|
|
201
|
+
};
|
|
172
202
|
} // END class
|