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
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A basic IO handler for file drop (Drag-and-drop).
|
|
3
|
+
*
|
|
4
|
+
* Example use:
|
|
5
|
+
* ```javascript
|
|
6
|
+
* var body = document.getElememtByTagName("body")[0];
|
|
7
|
+
* var fileDrop = new FileDrop(body);
|
|
8
|
+
* fileDrop.onFileJSONDropped(function (jsonObject) {
|
|
9
|
+
* console.log("jsonObject", jsonObject);
|
|
10
|
+
* });
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @author Ikaros Kappler
|
|
14
|
+
* @date 2021-10-13
|
|
15
|
+
* @modified 2022-01-31 (ported from the ngdg project, then generalized)
|
|
16
|
+
* @version 2.0.0
|
|
17
|
+
*/
|
|
18
|
+
declare type IDroppedCallbackJSON = (jsonData: object) => void;
|
|
19
|
+
declare type IDroppedCallbackText = (textData: string) => void;
|
|
20
|
+
export declare class FileDrop {
|
|
21
|
+
/**
|
|
22
|
+
* The 'dropzone' element.
|
|
23
|
+
* @private
|
|
24
|
+
* @memberof FileDrop
|
|
25
|
+
* @member {HTMLElement}
|
|
26
|
+
*/
|
|
27
|
+
private element;
|
|
28
|
+
/**
|
|
29
|
+
* The JSON file drop callback.
|
|
30
|
+
* @private
|
|
31
|
+
* @memberof FileDrop
|
|
32
|
+
* @member {HTMLElement}
|
|
33
|
+
*/
|
|
34
|
+
private fileDroppedCallbackJSON;
|
|
35
|
+
/**
|
|
36
|
+
* The text file drop callback.
|
|
37
|
+
* @private
|
|
38
|
+
* @memberof FileDrop
|
|
39
|
+
* @member {HTMLElement}
|
|
40
|
+
*/
|
|
41
|
+
private fileDroppedCallbackText;
|
|
42
|
+
/**
|
|
43
|
+
* The binary file drop callback.
|
|
44
|
+
* @private
|
|
45
|
+
* @memberof FileDrop
|
|
46
|
+
* @member {HTMLElement}
|
|
47
|
+
*/
|
|
48
|
+
private fileDroppedCallbackBinary;
|
|
49
|
+
/**
|
|
50
|
+
*
|
|
51
|
+
* @param {HTMLElement} element - The element you wish to operate as the drop zone (like <body/>).
|
|
52
|
+
*/
|
|
53
|
+
constructor(element: HTMLElement);
|
|
54
|
+
/**
|
|
55
|
+
* Install the JSON (MIME type json*) file drop callback. Note than only one callback can be installed
|
|
56
|
+
* in this implementation. Calling this method multiple times will overwrite previously
|
|
57
|
+
* installed listeners.
|
|
58
|
+
*
|
|
59
|
+
* The callback will receive the dropped file content as an object (parsed JSON).
|
|
60
|
+
*
|
|
61
|
+
* @param {(data:object)=>void} callback
|
|
62
|
+
*/
|
|
63
|
+
onFileJSONDropped(callback: IDroppedCallbackJSON): void;
|
|
64
|
+
/**
|
|
65
|
+
* Install the text file (MIME type text/plain) drop callback. Note than only one callback can be installed
|
|
66
|
+
* in this implementation. Calling this method multiple times will overwrite previously
|
|
67
|
+
* installed listeners.
|
|
68
|
+
*
|
|
69
|
+
* The callback will receive the dropped file content as a string.
|
|
70
|
+
*
|
|
71
|
+
* @param {(data:object)=>void} callback
|
|
72
|
+
*/
|
|
73
|
+
onFileTextDropped(callback: IDroppedCallbackText): void;
|
|
74
|
+
/**
|
|
75
|
+
* Internally handle a drop event.
|
|
76
|
+
*
|
|
77
|
+
* @param {DragEvent} event
|
|
78
|
+
* @returns {void}
|
|
79
|
+
*/
|
|
80
|
+
private handleDropEvent;
|
|
81
|
+
/**
|
|
82
|
+
* Toggles the drop sensitive element's opacity to 0.5.
|
|
83
|
+
*
|
|
84
|
+
* @param {DragEvent} event - The event.
|
|
85
|
+
*/
|
|
86
|
+
private handleDragOverEvent;
|
|
87
|
+
/**
|
|
88
|
+
* Restored the drop sensitive element's opacity back to 1.0.
|
|
89
|
+
*
|
|
90
|
+
* @param {DragEvent} event - The event.
|
|
91
|
+
*/
|
|
92
|
+
private handleDragLeaveEvent;
|
|
93
|
+
/**
|
|
94
|
+
* Removes all listeners (drop, dragover and dragleave).
|
|
95
|
+
*/
|
|
96
|
+
destroy(): void;
|
|
97
|
+
}
|
|
98
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A basic IO handler for file drop (Drag-and-drop).
|
|
3
|
+
*
|
|
4
|
+
* Example use:
|
|
5
|
+
* ```javascript
|
|
6
|
+
* var body = document.getElememtByTagName("body")[0];
|
|
7
|
+
* var fileDrop = new FileDrop(body);
|
|
8
|
+
* fileDrop.onFileJSONDropped(function (jsonObject) {
|
|
9
|
+
* console.log("jsonObject", jsonObject);
|
|
10
|
+
* });
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @author Ikaros Kappler
|
|
14
|
+
* @date 2021-10-13
|
|
15
|
+
* @modified 2022-01-31 (ported from the ngdg project, then generalized)
|
|
16
|
+
* @version 2.0.0
|
|
17
|
+
*/
|
|
18
|
+
export class FileDrop {
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
* @param {HTMLElement} element - The element you wish to operate as the drop zone (like <body/>).
|
|
22
|
+
*/
|
|
23
|
+
constructor(element) {
|
|
24
|
+
/**
|
|
25
|
+
* Internally handle a drop event.
|
|
26
|
+
*
|
|
27
|
+
* @param {DragEvent} event
|
|
28
|
+
* @returns {void}
|
|
29
|
+
*/
|
|
30
|
+
this.handleDropEvent = (event) => {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
event.stopPropagation();
|
|
33
|
+
this.element.style.opacity = "1.0";
|
|
34
|
+
if (!event.dataTransfer.files || event.dataTransfer.files.length === 0) {
|
|
35
|
+
// No files were dropped
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (event.dataTransfer.files.length > 1) {
|
|
39
|
+
// Multiple file drop is not nupported
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!this.fileDroppedCallbackJSON) {
|
|
43
|
+
// No handling callback defined.
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (event.dataTransfer.files[0]) {
|
|
47
|
+
const file = event.dataTransfer.files[0];
|
|
48
|
+
// console.log("file", file);
|
|
49
|
+
if (file.type.match(/json.*/) && this.fileDroppedCallbackJSON) {
|
|
50
|
+
var reader = new FileReader();
|
|
51
|
+
reader.onload = (readEvent) => {
|
|
52
|
+
// Finished reading file data.
|
|
53
|
+
const jsonObject = JSON.parse(readEvent.target.result);
|
|
54
|
+
// TODO: what happens on fail?
|
|
55
|
+
this.fileDroppedCallbackJSON(jsonObject);
|
|
56
|
+
};
|
|
57
|
+
reader.readAsText(file); // start reading the file data.
|
|
58
|
+
}
|
|
59
|
+
else if (file.type.match(/text\/plain.*/) && this.fileDroppedCallbackText) {
|
|
60
|
+
var reader = new FileReader();
|
|
61
|
+
reader.onload = (readEvent) => {
|
|
62
|
+
// Finished reading file data.
|
|
63
|
+
this.fileDroppedCallbackText(readEvent.target.result);
|
|
64
|
+
};
|
|
65
|
+
reader.readAsText(file); // start reading the file data.
|
|
66
|
+
}
|
|
67
|
+
else if (this.fileDroppedCallbackBinary) {
|
|
68
|
+
var reader = new FileReader();
|
|
69
|
+
reader.onload = (readEvent) => {
|
|
70
|
+
// Finished reading file data.
|
|
71
|
+
this.fileDroppedCallbackBinary(new Blob([readEvent.target.result]), file);
|
|
72
|
+
};
|
|
73
|
+
reader.readAsBinaryString(file); // start reading the file data.
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Toggles the drop sensitive element's opacity to 0.5.
|
|
79
|
+
*
|
|
80
|
+
* @param {DragEvent} event - The event.
|
|
81
|
+
*/
|
|
82
|
+
this.handleDragOverEvent = (event) => {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
event.stopPropagation();
|
|
85
|
+
this.element.style.opacity = "0.5";
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Restored the drop sensitive element's opacity back to 1.0.
|
|
89
|
+
*
|
|
90
|
+
* @param {DragEvent} event - The event.
|
|
91
|
+
*/
|
|
92
|
+
this.handleDragLeaveEvent = (event) => {
|
|
93
|
+
event.preventDefault();
|
|
94
|
+
event.stopPropagation();
|
|
95
|
+
this.element.style.opacity = "1.0";
|
|
96
|
+
};
|
|
97
|
+
this.element = element;
|
|
98
|
+
// Init the drop listeners
|
|
99
|
+
element.addEventListener("drop", this.handleDropEvent.bind(this));
|
|
100
|
+
element.addEventListener("dragover", this.handleDragOverEvent.bind(this));
|
|
101
|
+
element.addEventListener("dragleave", this.handleDragLeaveEvent.bind(this));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Install the JSON (MIME type json*) file drop callback. Note than only one callback can be installed
|
|
105
|
+
* in this implementation. Calling this method multiple times will overwrite previously
|
|
106
|
+
* installed listeners.
|
|
107
|
+
*
|
|
108
|
+
* The callback will receive the dropped file content as an object (parsed JSON).
|
|
109
|
+
*
|
|
110
|
+
* @param {(data:object)=>void} callback
|
|
111
|
+
*/
|
|
112
|
+
onFileJSONDropped(callback) {
|
|
113
|
+
this.fileDroppedCallbackJSON = callback;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Install the text file (MIME type text/plain) drop callback. Note than only one callback can be installed
|
|
117
|
+
* in this implementation. Calling this method multiple times will overwrite previously
|
|
118
|
+
* installed listeners.
|
|
119
|
+
*
|
|
120
|
+
* The callback will receive the dropped file content as a string.
|
|
121
|
+
*
|
|
122
|
+
* @param {(data:object)=>void} callback
|
|
123
|
+
*/
|
|
124
|
+
onFileTextDropped(callback) {
|
|
125
|
+
this.fileDroppedCallbackText = callback;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Removes all listeners (drop, dragover and dragleave).
|
|
129
|
+
*/
|
|
130
|
+
destroy() {
|
|
131
|
+
this.element.removeEventListener("drop", this.handleDropEvent);
|
|
132
|
+
this.element.removeEventListener("dragover", this.handleDragOverEvent);
|
|
133
|
+
this.element.removeEventListener("dragleave", this.handleDragLeaveEvent);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=FileDrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileDrop.js","sourceRoot":"","sources":["../../../ts/utils/io/FileDrop.ts"],"names":[],"mappings":"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"}
|
package/src/ts/BezierPath.ts
CHANGED
|
@@ -20,7 +20,10 @@
|
|
|
20
20
|
* @modified 2020-07-24 Added the getClosestT(Vertex) function.
|
|
21
21
|
* @modified 2020-12-29 Constructor is now private (no explicit use intended).
|
|
22
22
|
* @modified 2021-05-25 Added BezierPath.fromReducedList( Array<number> ).
|
|
23
|
-
* @
|
|
23
|
+
* @modified 2022-01-31 Added `BezierPath.getEvenDistributionVertices(number)`.
|
|
24
|
+
* @modified 2022-02-02 Added the `destroy` method.
|
|
25
|
+
* @modified 2022-02-02 Cleared the `toSVGString` function (deprecated). Use `drawutilssvg` instead.
|
|
26
|
+
* @version 2.5.0
|
|
24
27
|
*
|
|
25
28
|
* @file BezierPath
|
|
26
29
|
* @public
|
|
@@ -96,6 +99,14 @@ export class BezierPath implements SVGSerializable {
|
|
|
96
99
|
*/
|
|
97
100
|
bezierCurves: Array<CubicBezierCurve>;
|
|
98
101
|
|
|
102
|
+
/**
|
|
103
|
+
* @member {boolean}
|
|
104
|
+
* @memberof BezierPath
|
|
105
|
+
* @type {boolean}
|
|
106
|
+
* @instance
|
|
107
|
+
*/
|
|
108
|
+
isDestroyed: boolean;
|
|
109
|
+
|
|
99
110
|
// +---------------------------------------------------------------------------------
|
|
100
111
|
// | These constants equal the values from CubicBezierCurve.
|
|
101
112
|
// +-------------------------------
|
|
@@ -1054,6 +1065,64 @@ export class BezierPath implements SVGSerializable {
|
|
|
1054
1065
|
return new Bounds(min, max);
|
|
1055
1066
|
}
|
|
1056
1067
|
|
|
1068
|
+
/**
|
|
1069
|
+
* Get n 'equally' distributed vertices along this Bézier path.
|
|
1070
|
+
*
|
|
1071
|
+
* As the changing curvature of the B slines makes prediction of distances difficult, the
|
|
1072
|
+
* returned vertices' distances are only relatively equal:
|
|
1073
|
+
* - the distance grows where curvature is large.
|
|
1074
|
+
* - the distance shrinks where curvature is small.
|
|
1075
|
+
*
|
|
1076
|
+
* Only the distance mean of all consecutive is 1/n-th of the total arc length.
|
|
1077
|
+
*
|
|
1078
|
+
* Usually this approximation is good enough for most use cases.
|
|
1079
|
+
*
|
|
1080
|
+
* @param {number} pointCount - (must be at least 2) The number of desired points (start and end point included).
|
|
1081
|
+
* @return {Array<Vertex>}
|
|
1082
|
+
*/
|
|
1083
|
+
getEvenDistributionVertices(pointCount: number): Array<Vertex> {
|
|
1084
|
+
if (pointCount < 2) {
|
|
1085
|
+
throw new Error("pointCount must be larger than one; is " + pointCount + ".");
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
const result: Array<Vertex> = [];
|
|
1089
|
+
if (this.bezierCurves.length === 0) {
|
|
1090
|
+
return result;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
// Fetch and add the start point from the source polygon
|
|
1094
|
+
var polygonPoint = new Vertex(this.bezierCurves[0].startPoint);
|
|
1095
|
+
result.push(polygonPoint);
|
|
1096
|
+
// if (this.bezierCurves.length === 1) {
|
|
1097
|
+
// return result;
|
|
1098
|
+
// }
|
|
1099
|
+
|
|
1100
|
+
const perimeter: number = this.totalArcLength;
|
|
1101
|
+
const stepSize: number = perimeter / (pointCount - 1);
|
|
1102
|
+
const n: number = this.bezierCurves.length;
|
|
1103
|
+
|
|
1104
|
+
let curveIndex: number = 0;
|
|
1105
|
+
let segmentLength: number = this.bezierCurves[0].arcLength;
|
|
1106
|
+
let curSegmentU: number = stepSize;
|
|
1107
|
+
let i: number = 1;
|
|
1108
|
+
while (i < pointCount && curveIndex < n) {
|
|
1109
|
+
// Check if next eq point is inside this segment
|
|
1110
|
+
if (curSegmentU < segmentLength) {
|
|
1111
|
+
var newPoint = this.bezierCurves[curveIndex].getPoint(curSegmentU);
|
|
1112
|
+
result.push(newPoint);
|
|
1113
|
+
curSegmentU += stepSize;
|
|
1114
|
+
i++;
|
|
1115
|
+
} else {
|
|
1116
|
+
curveIndex++;
|
|
1117
|
+
curSegmentU = curSegmentU - segmentLength;
|
|
1118
|
+
segmentLength = curveIndex < n ? this.bezierCurves[curveIndex].arcLength : 0;
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
result.push(new Vertex(this.bezierCurves[n - 1].endPoint));
|
|
1123
|
+
return result;
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1057
1126
|
/**
|
|
1058
1127
|
* Clone this BezierPath (deep clone).
|
|
1059
1128
|
*
|
|
@@ -1107,17 +1176,33 @@ export class BezierPath implements SVGSerializable {
|
|
|
1107
1176
|
* @return {string} The SVG string.
|
|
1108
1177
|
**/
|
|
1109
1178
|
toSVGString(options: { className?: string }): string {
|
|
1110
|
-
options = options || {};
|
|
1111
|
-
var buffer: Array<string> = [];
|
|
1112
|
-
buffer.push("<path");
|
|
1113
|
-
if (options.className) buffer.push(' class="' + options.className + '"');
|
|
1114
|
-
buffer.push(' d="');
|
|
1115
|
-
for (var c = 0; c < this.bezierCurves.length; c++) {
|
|
1116
|
-
|
|
1117
|
-
|
|
1179
|
+
// options = options || {};
|
|
1180
|
+
// var buffer: Array<string> = [];
|
|
1181
|
+
// buffer.push("<path");
|
|
1182
|
+
// if (options.className) buffer.push(' class="' + options.className + '"');
|
|
1183
|
+
// buffer.push(' d="');
|
|
1184
|
+
// for (var c = 0; c < this.bezierCurves.length; c++) {
|
|
1185
|
+
// if (c > 0) buffer.push(" ");
|
|
1186
|
+
// buffer.push(this.bezierCurves[c].toSVGPathData());
|
|
1187
|
+
// }
|
|
1188
|
+
// buffer.push('" />');
|
|
1189
|
+
// return buffer.join("");
|
|
1190
|
+
console.warn(
|
|
1191
|
+
"[Deprecation] Warning: the BezierPath.toSVGString method is deprecated and does not return and valid SVG data any more. Please use `drawutilssvg` instead."
|
|
1192
|
+
);
|
|
1193
|
+
return "";
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
/**
|
|
1197
|
+
* This function should invalidate any installed listeners and invalidate this object.
|
|
1198
|
+
* After calling this function the object might not hold valid data any more and
|
|
1199
|
+
* should not be used.
|
|
1200
|
+
*/
|
|
1201
|
+
destroy() {
|
|
1202
|
+
for (var i = 0; i < this.bezierCurves.length; i++) {
|
|
1203
|
+
this.bezierCurves[i].destroy();
|
|
1118
1204
|
}
|
|
1119
|
-
|
|
1120
|
-
return buffer.join("");
|
|
1205
|
+
this.isDestroyed = true;
|
|
1121
1206
|
}
|
|
1122
1207
|
|
|
1123
1208
|
/**
|