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
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A basic IO handler for file drop (Drag-and-drop).
|
|
3
|
+
*
|
|
4
|
+
* @author Ikaros Kappler
|
|
5
|
+
* @date 2021-10-13
|
|
6
|
+
* @modified 2022-01-31 (ported from the ngdg project, then generalized)
|
|
7
|
+
* @version 2.0.0
|
|
8
|
+
*/
|
|
9
|
+
export class ConfigIO {
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param {HTMLElement} element - The element you wish to operate as the drop zone (like <body/>).
|
|
13
|
+
*/
|
|
14
|
+
constructor(element) {
|
|
15
|
+
/**
|
|
16
|
+
* Internally handle a drop event.
|
|
17
|
+
*
|
|
18
|
+
* @param {DragEvent} event
|
|
19
|
+
* @returns {void}
|
|
20
|
+
*/
|
|
21
|
+
this.handleDropEvent = (event) => {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
event.stopPropagation();
|
|
24
|
+
this.element.style.opacity = "1.0";
|
|
25
|
+
if (!event.dataTransfer.files || event.dataTransfer.files.length === 0) {
|
|
26
|
+
// No files were dropped
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (event.dataTransfer.files.length > 1) {
|
|
30
|
+
// Multiple file drop is not nupported
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!this.fileDroppedCallbackJSON) {
|
|
34
|
+
// No handling callback defined.
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (event.dataTransfer.files[0]) {
|
|
38
|
+
const file = event.dataTransfer.files[0];
|
|
39
|
+
console.log("file", file);
|
|
40
|
+
if (file.type.match(/json.*/) && this.fileDroppedCallbackJSON) {
|
|
41
|
+
var reader = new FileReader();
|
|
42
|
+
reader.onload = (readEvent) => {
|
|
43
|
+
// Finished reading file data.
|
|
44
|
+
const jsonObject = JSON.parse(readEvent.target.result);
|
|
45
|
+
// TODO: what happens on fail?
|
|
46
|
+
this.fileDroppedCallbackJSON(jsonObject);
|
|
47
|
+
};
|
|
48
|
+
reader.readAsText(file); // start reading the file data.
|
|
49
|
+
}
|
|
50
|
+
else if (file.type.match(/text\/plain.*/) && this.fileDroppedCallbackText) {
|
|
51
|
+
var reader = new FileReader();
|
|
52
|
+
reader.onload = (readEvent) => {
|
|
53
|
+
// Finished reading file data.
|
|
54
|
+
this.fileDroppedCallbackText(readEvent.target.result);
|
|
55
|
+
};
|
|
56
|
+
reader.readAsText(file); // start reading the file data.
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
this.handleDragOverEvent = (event) => {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
event.stopPropagation();
|
|
63
|
+
this.element.style.opacity = "0.5";
|
|
64
|
+
};
|
|
65
|
+
this.handleDragLeaveEvent = (event) => {
|
|
66
|
+
event.preventDefault();
|
|
67
|
+
event.stopPropagation();
|
|
68
|
+
this.element.style.opacity = "1.0";
|
|
69
|
+
};
|
|
70
|
+
this.element = element;
|
|
71
|
+
// Init the drop listeners
|
|
72
|
+
element.addEventListener("drop", this.handleDropEvent.bind(this));
|
|
73
|
+
element.addEventListener("dragover", this.handleDragOverEvent.bind(this));
|
|
74
|
+
element.addEventListener("dragleave", this.handleDragLeaveEvent.bind(this));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Install the JSON (MIME type json*) file drop callback. Note than only one callback can be installed
|
|
78
|
+
* in this implementation. Calling this method multiple times will overwrite previously
|
|
79
|
+
* installed listeners.
|
|
80
|
+
*
|
|
81
|
+
* The callback will receive the dropped file content as an object (parsed JSON).
|
|
82
|
+
*
|
|
83
|
+
* @param {(data:object)=>void} callback
|
|
84
|
+
*/
|
|
85
|
+
onFileJSONDropped(callback) {
|
|
86
|
+
this.fileDroppedCallbackJSON = callback;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Install the text file (MIME type text/plain) drop callback. Note than only one callback can be installed
|
|
90
|
+
* in this implementation. Calling this method multiple times will overwrite previously
|
|
91
|
+
* installed listeners.
|
|
92
|
+
*
|
|
93
|
+
* The callback will receive the dropped file content as a string.
|
|
94
|
+
*
|
|
95
|
+
* @param {(data:object)=>void} callback
|
|
96
|
+
*/
|
|
97
|
+
onFileTextDropped(callback) {
|
|
98
|
+
this.fileDroppedCallbackText = callback;
|
|
99
|
+
}
|
|
100
|
+
destroy() {
|
|
101
|
+
this.element.removeEventListener("drop", this.handleDropEvent);
|
|
102
|
+
this.element.removeEventListener("dragover", this.handleDragOverEvent);
|
|
103
|
+
this.element.removeEventListener("dragleave", this.handleDragLeaveEvent);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=DndFileHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DndFileHandler.js","sourceRoot":"","sources":["../../../ts/utils/io/DndFileHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
*
|
|
@@ -1096,28 +1165,15 @@ export class BezierPath implements SVGSerializable {
|
|
|
1096
1165
|
}
|
|
1097
1166
|
|
|
1098
1167
|
/**
|
|
1099
|
-
*
|
|
1100
|
-
*
|
|
1101
|
-
*
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
* @memberof BezierPath
|
|
1107
|
-
* @return {string} The SVG string.
|
|
1108
|
-
**/
|
|
1109
|
-
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
|
-
if (c > 0) buffer.push(" ");
|
|
1117
|
-
buffer.push(this.bezierCurves[c].toSVGPathData());
|
|
1168
|
+
* This function should invalidate any installed listeners and invalidate this object.
|
|
1169
|
+
* After calling this function the object might not hold valid data any more and
|
|
1170
|
+
* should not be used.
|
|
1171
|
+
*/
|
|
1172
|
+
destroy() {
|
|
1173
|
+
for (var i = 0; i < this.bezierCurves.length; i++) {
|
|
1174
|
+
this.bezierCurves[i].destroy();
|
|
1118
1175
|
}
|
|
1119
|
-
|
|
1120
|
-
return buffer.join("");
|
|
1176
|
+
this.isDestroyed = true;
|
|
1121
1177
|
}
|
|
1122
1178
|
|
|
1123
1179
|
/**
|
package/src/ts/Bounds.ts
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* @modified 2020-11-19 Set min, max, width and height to private.
|
|
6
6
|
* @modified 2021-02-02 Added the `toPolygon` method.
|
|
7
7
|
* @modified 2021-06-21 (mid-summer) Added `getCenter` method.
|
|
8
|
-
* @
|
|
8
|
+
* @modified 2022-02-01 Added the `toString` function.
|
|
9
|
+
* @version 1.4.0
|
|
9
10
|
**/
|
|
10
11
|
|
|
11
12
|
import { Polygon } from "./Polygon";
|
|
@@ -82,10 +83,33 @@ export class Bounds implements IBounds, XYDimension {
|
|
|
82
83
|
);
|
|
83
84
|
}
|
|
84
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Get the center of this boinding box.
|
|
88
|
+
*
|
|
89
|
+
* @method getCenter
|
|
90
|
+
* @instance
|
|
91
|
+
* @memberof Bounds
|
|
92
|
+
* @returns {Vertex} The center of these bounds.
|
|
93
|
+
*/
|
|
85
94
|
getCenter(): Vertex {
|
|
86
95
|
return new Vertex(this.min.x + (this.max.x - this.min.x) / 2.0, this.min.y + (this.max.y - this.min.y) / 2);
|
|
87
96
|
}
|
|
88
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Convert these bounds to a human readable form.
|
|
100
|
+
*
|
|
101
|
+
* Note: the returned format might change in the future, so please do not
|
|
102
|
+
* rely on the returned string format.
|
|
103
|
+
*
|
|
104
|
+
* @method toString
|
|
105
|
+
* @instance
|
|
106
|
+
* @memberof Bounds
|
|
107
|
+
* @returns {string} Get these bounds in a human readable form.
|
|
108
|
+
*/
|
|
109
|
+
toString(): string {
|
|
110
|
+
return `{ min: ${this.min.toString()}, max : ${this.max.toString()}, width: ${this.width}, height : ${this.height} }`;
|
|
111
|
+
}
|
|
112
|
+
|
|
89
113
|
/**
|
|
90
114
|
* Compute the minimal bounding box for a given set of vertices.
|
|
91
115
|
*
|