plotboilerplate 1.20.2 → 1.22.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/dist/index.esm.js +2012 -1366
- 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 +1199 -541
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +3 -2
- package/src/cjs/BezierPath.d.ts +27 -49
- package/src/cjs/BezierPath.js +67 -234
- package/src/cjs/BezierPath.js.map +1 -1
- package/src/cjs/Bounds.d.ts +14 -1
- package/src/cjs/Bounds.js +21 -1
- package/src/cjs/Bounds.js.map +1 -1
- package/src/cjs/CubicBezierCurve.d.ts +70 -1
- package/src/cjs/CubicBezierCurve.js +130 -12
- package/src/cjs/CubicBezierCurve.js.map +1 -1
- package/src/cjs/Line.d.ts +2 -1
- package/src/cjs/Line.js +1 -0
- package/src/cjs/Line.js.map +1 -1
- package/src/cjs/PBText.d.ts +2 -1
- package/src/cjs/PBText.js +10 -9
- package/src/cjs/PBText.js.map +1 -1
- package/src/cjs/PlotBoilerplate.d.ts +4 -13
- package/src/cjs/PlotBoilerplate.js +61 -15
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +47 -1
- package/src/cjs/Polygon.js +116 -1
- package/src/cjs/Polygon.js.map +1 -1
- package/src/cjs/VEllipse.js +1 -1
- package/src/cjs/VEllipse.js.map +1 -1
- package/src/cjs/Vector.d.ts +4 -4
- package/src/cjs/Vector.js +2 -2
- package/src/cjs/Vector.js.map +1 -1
- package/src/cjs/VertTuple.d.ts +2 -1
- package/src/cjs/VertTuple.js +4 -3
- package/src/cjs/VertTuple.js.map +1 -1
- package/src/cjs/Vertex.d.ts +14 -3
- package/src/cjs/Vertex.js +18 -3
- package/src/cjs/Vertex.js.map +1 -1
- package/src/cjs/draw.d.ts +154 -75
- package/src/cjs/draw.js +308 -137
- package/src/cjs/draw.js.map +1 -1
- package/src/cjs/drawgl.d.ts +87 -50
- package/src/cjs/drawgl.js +86 -31
- package/src/cjs/drawgl.js.map +1 -1
- package/src/cjs/drawutilssvg.d.ts +226 -53
- package/src/cjs/drawutilssvg.js +374 -92
- package/src/cjs/drawutilssvg.js.map +1 -1
- package/src/cjs/interfaces/DrawLib.d.ts +157 -79
- package/src/cjs/interfaces/DrawLib.js +6 -0
- package/src/cjs/interfaces/DrawLib.js.map +1 -1
- package/src/cjs/interfaces/core.d.ts +13 -2
- package/src/cjs/interfaces/core.js +1 -0
- package/src/cjs/interfaces/core.js.map +1 -1
- package/src/cjs/utils/Params.d.ts +15 -0
- package/src/cjs/utils/Params.js +49 -0
- package/src/cjs/utils/Params.js.map +1 -0
- package/src/cjs/utils/algorithms/ContourLineDetection.d.ts +150 -0
- package/src/cjs/utils/algorithms/ContourLineDetection.js +367 -0
- package/src/cjs/utils/algorithms/ContourLineDetection.js.map +1 -0
- package/src/cjs/utils/algorithms/clearDuplicateVertices.d.ts +21 -0
- package/src/cjs/utils/algorithms/clearDuplicateVertices.js +48 -0
- package/src/cjs/utils/algorithms/clearDuplicateVertices.js.map +1 -0
- package/src/cjs/utils/creategui.js +16 -10
- package/src/cjs/utils/datastructures/DataGrid2d.d.ts +47 -0
- package/src/cjs/utils/datastructures/DataGrid2d.js +20 -0
- package/src/cjs/utils/datastructures/DataGrid2d.js.map +1 -0
- package/src/cjs/utils/datastructures/DataGrid2dListAdapter.d.ts +65 -0
- package/src/cjs/utils/datastructures/DataGrid2dListAdapter.js +84 -0
- package/src/cjs/utils/datastructures/DataGrid2dListAdapter.js.map +1 -0
- package/src/cjs/utils/datastructures/GenericPath.d.ts +14 -3
- package/src/cjs/utils/datastructures/GenericPath.js +20 -3
- package/src/cjs/utils/datastructures/GenericPath.js.map +1 -1
- package/src/cjs/utils/detectDarkMode.d.ts +10 -0
- package/src/cjs/utils/detectDarkMode.js +32 -0
- package/src/cjs/utils/detectDarkMode.js.map +1 -0
- package/src/esm/BezierPath.d.ts +27 -49
- package/src/esm/BezierPath.js +67 -234
- package/src/esm/BezierPath.js.map +1 -1
- package/src/esm/Bounds.d.ts +14 -1
- package/src/esm/Bounds.js +19 -1
- package/src/esm/Bounds.js.map +1 -1
- package/src/esm/CubicBezierCurve.d.ts +70 -1
- package/src/esm/CubicBezierCurve.js +130 -12
- package/src/esm/CubicBezierCurve.js.map +1 -1
- package/src/esm/Line.d.ts +2 -1
- package/src/esm/Line.js +1 -0
- package/src/esm/Line.js.map +1 -1
- package/src/esm/PBText.d.ts +2 -1
- package/src/esm/PBText.js +10 -9
- package/src/esm/PBText.js.map +1 -1
- package/src/esm/PlotBoilerplate.d.ts +4 -13
- package/src/esm/PlotBoilerplate.js +62 -16
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +47 -1
- package/src/esm/Polygon.js +114 -1
- package/src/esm/Polygon.js.map +1 -1
- package/src/esm/VEllipse.js +1 -1
- package/src/esm/VEllipse.js.map +1 -1
- package/src/esm/Vector.d.ts +4 -4
- package/src/esm/Vector.js +2 -2
- package/src/esm/Vector.js.map +1 -1
- package/src/esm/VertTuple.d.ts +2 -1
- package/src/esm/VertTuple.js +4 -3
- package/src/esm/VertTuple.js.map +1 -1
- package/src/esm/Vertex.d.ts +14 -3
- package/src/esm/Vertex.js +18 -3
- package/src/esm/Vertex.js.map +1 -1
- package/src/esm/draw.d.ts +154 -75
- package/src/esm/draw.js +304 -135
- package/src/esm/draw.js.map +1 -1
- package/src/esm/drawgl.d.ts +87 -50
- package/src/esm/drawgl.js +86 -31
- package/src/esm/drawgl.js.map +1 -1
- package/src/esm/drawutilssvg.d.ts +226 -53
- package/src/esm/drawutilssvg.js +369 -92
- package/src/esm/drawutilssvg.js.map +1 -1
- package/src/esm/interfaces/DrawLib.d.ts +157 -79
- package/src/esm/interfaces/DrawLib.js +6 -0
- package/src/esm/interfaces/DrawLib.js.map +1 -1
- package/src/esm/interfaces/core.d.ts +13 -2
- package/src/esm/interfaces/core.js +1 -0
- package/src/esm/interfaces/core.js.map +1 -1
- package/src/esm/utils/Params.d.ts +15 -0
- package/src/esm/utils/Params.js +44 -0
- package/src/esm/utils/Params.js.map +1 -0
- package/src/esm/utils/algorithms/ContourLineDetection.d.ts +150 -0
- package/src/esm/utils/algorithms/ContourLineDetection.js +362 -0
- package/src/esm/utils/algorithms/ContourLineDetection.js.map +1 -0
- package/src/esm/utils/algorithms/clearDuplicateVertices.d.ts +21 -0
- package/src/esm/utils/algorithms/clearDuplicateVertices.js +44 -0
- package/src/esm/utils/algorithms/clearDuplicateVertices.js.map +1 -0
- package/src/esm/utils/datastructures/DataGrid2d.d.ts +47 -0
- package/src/esm/utils/datastructures/DataGrid2d.js +19 -0
- package/src/esm/utils/datastructures/DataGrid2d.js.map +1 -0
- package/src/esm/utils/datastructures/DataGrid2dListAdapter.d.ts +65 -0
- package/src/esm/utils/datastructures/DataGrid2dListAdapter.js +79 -0
- package/src/esm/utils/datastructures/DataGrid2dListAdapter.js.map +1 -0
- package/src/esm/utils/datastructures/GenericPath.d.ts +14 -3
- package/src/esm/utils/datastructures/GenericPath.js +20 -3
- package/src/esm/utils/datastructures/GenericPath.js.map +1 -1
- package/src/esm/utils/detectDarkMode.d.ts +10 -0
- package/src/esm/utils/detectDarkMode.js +28 -0
- package/src/esm/utils/detectDarkMode.js.map +1 -0
- package/src/ts/BezierPath.ts +72 -241
- package/src/ts/Bounds.ts +25 -1
- package/src/ts/CubicBezierCurve.ts +139 -12
- package/src/ts/Line.ts +2 -1
- package/src/ts/PBText.ts +10 -9
- package/src/ts/PlotBoilerplate.ts +56 -19
- package/src/ts/Polygon.ts +121 -1
- package/src/ts/VEllipse.ts +2 -2
- package/src/ts/Vector.ts +4 -4
- package/src/ts/VertTuple.ts +4 -3
- package/src/ts/Vertex.ts +20 -4
- package/src/ts/draw.ts +311 -115
- package/src/ts/drawgl.ts +133 -71
- package/src/ts/drawutilssvg.ts +543 -121
- package/src/ts/interfaces/DrawLib.ts +219 -83
- package/src/ts/interfaces/core.ts +14 -2
- package/src/ts/utils/Params.ts +47 -0
- package/src/ts/utils/algorithms/ContourLineDetection.ts +485 -0
- package/src/ts/utils/algorithms/clearDuplicateVertices.ts +49 -0
- package/src/ts/utils/datastructures/DataGrid2d.ts +54 -0
- package/src/ts/utils/datastructures/DataGrid2dListAdapter.ts +121 -0
- package/src/ts/utils/datastructures/GenericPath.ts +21 -3
- package/src/ts/utils/detectDarkMode.ts +30 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A DataGrid2d implementation on a linear array of triplets/Vector3.
|
|
3
|
+
*
|
|
4
|
+
* @author Ikaros Kappler
|
|
5
|
+
* @date 2023-10-28
|
|
6
|
+
* @modified 2023-11-04 Converted to a Typescript class.
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
**/
|
|
9
|
+
|
|
10
|
+
import { DataGridFace4, IDataGrid2d } from "./DataGrid2d";
|
|
11
|
+
|
|
12
|
+
type Triplet<T> = {
|
|
13
|
+
x: T;
|
|
14
|
+
y: T;
|
|
15
|
+
z: T;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
type RasterPosition = {
|
|
19
|
+
xIndex: number;
|
|
20
|
+
yIndex: number;
|
|
21
|
+
xRel?: number;
|
|
22
|
+
yRel?: number;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export class DataGrid2dListAdapter<T> implements IDataGrid2d<T> {
|
|
26
|
+
/**
|
|
27
|
+
* @override
|
|
28
|
+
*/
|
|
29
|
+
readonly xSegmentCount: number;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @override
|
|
33
|
+
*/
|
|
34
|
+
readonly ySegmentCount: number;
|
|
35
|
+
|
|
36
|
+
minDataValue: T;
|
|
37
|
+
maxDataValue: T;
|
|
38
|
+
minXValue: T;
|
|
39
|
+
maxXValue: T;
|
|
40
|
+
minYValue: T;
|
|
41
|
+
maxYValue: T;
|
|
42
|
+
private _dataList: Array<Triplet<T>>;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Create a new DataGrid2d from the given
|
|
46
|
+
* @throws Error if xSegmentCount*ySegmentCount is larger than the capacity of the array/list.
|
|
47
|
+
* @param list
|
|
48
|
+
* @param xSegmentCount
|
|
49
|
+
* @param ySegmentCount
|
|
50
|
+
*/
|
|
51
|
+
constructor(list: Array<Triplet<T>>, xSegmentCount: number, ySegmentCount: number) {
|
|
52
|
+
if (xSegmentCount * ySegmentCount > list.length) {
|
|
53
|
+
throw `Cannot create DataGrid2dListAdapter, the list (length ${list.length}) does not provide enough items for ${xSegmentCount}x${ySegmentCount} required entries.`;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// this.canvas = document.getElementById(canvasId);
|
|
57
|
+
this.xSegmentCount = xSegmentCount;
|
|
58
|
+
this.ySegmentCount = ySegmentCount;
|
|
59
|
+
|
|
60
|
+
this._dataList = list;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
getIndicesFromBufferIndex(bufferIndex: number): RasterPosition {
|
|
64
|
+
return { xIndex: Math.floor(bufferIndex % this.xSegmentCount), yIndex: Math.floor(bufferIndex / this.xSegmentCount) };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
getCoordsFromBufferIndex(bufferIndex: number): RasterPosition {
|
|
68
|
+
var index = this.getIndicesFromBufferIndex(bufferIndex);
|
|
69
|
+
// Note that the xSegmentCount and ySegmentCount counts plane squares, each consisting of four vertices
|
|
70
|
+
index.xRel = index.xIndex / (this.xSegmentCount - 1);
|
|
71
|
+
index.yRel = index.yIndex / (this.ySegmentCount - 1);
|
|
72
|
+
return index;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
coordinateIndicesToBufferIndex(xIndex: number, yIndex: number): number {
|
|
76
|
+
return yIndex * this.xSegmentCount + xIndex;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @override
|
|
81
|
+
*/
|
|
82
|
+
getMinDataValue(): T {
|
|
83
|
+
return this.minDataValue;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @override
|
|
88
|
+
*/
|
|
89
|
+
getMaxDataValue(): T {
|
|
90
|
+
return this.maxDataValue;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @override
|
|
95
|
+
*/
|
|
96
|
+
getDataValueAt(xIndex: number, yIndex: number, isDebug?: boolean): T | null {
|
|
97
|
+
// var bufferIndex = yIndex * this.xSegmentCount + xIndex;
|
|
98
|
+
var bufferIndex = this.coordinateIndicesToBufferIndex(xIndex, yIndex);
|
|
99
|
+
if (isDebug) {
|
|
100
|
+
console.log("xIndex", xIndex, "yIndex", yIndex, "bufferIndex", bufferIndex);
|
|
101
|
+
}
|
|
102
|
+
if (bufferIndex > this._dataList.length) {
|
|
103
|
+
console.error("ERR buffer index is out of bounds! xIndex", xIndex, "yIndex", yIndex, "bufferIndex", bufferIndex);
|
|
104
|
+
}
|
|
105
|
+
if (!this._dataList[bufferIndex]) {
|
|
106
|
+
console.error("ERR buffer element is null! xIndex", xIndex, "yIndex", yIndex, "bufferIndex", bufferIndex);
|
|
107
|
+
}
|
|
108
|
+
return this._dataList && bufferIndex < this._dataList.length ? this._dataList[bufferIndex].z : null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @override
|
|
113
|
+
*/
|
|
114
|
+
getDataFace4At(xIndex: number, yIndex: number, buffer: DataGridFace4<T>) {
|
|
115
|
+
// buffer: array[2][2]
|
|
116
|
+
buffer[0][0] = this.getDataValueAt(xIndex, yIndex);
|
|
117
|
+
buffer[1][0] = this.getDataValueAt(xIndex + 1, yIndex);
|
|
118
|
+
buffer[1][1] = this.getDataValueAt(xIndex + 1, yIndex + 1);
|
|
119
|
+
buffer[0][1] = this.getDataValueAt(xIndex, yIndex + 1);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @author
|
|
3
|
-
* @version
|
|
4
|
-
* @date
|
|
2
|
+
* @author Ikaros Kappler
|
|
3
|
+
* @version 1.1.0
|
|
4
|
+
* @date 2022-10-17
|
|
5
|
+
* @modified 2023-11-27 Added the `GenericPath.getAllStartEndPoints()` function.
|
|
5
6
|
*/
|
|
6
7
|
|
|
7
8
|
import { Path, PathSegment } from "../../interfaces/additionals";
|
|
@@ -110,4 +111,21 @@ export class GenericPath implements Path {
|
|
|
110
111
|
getEndTangent(): Vertex {
|
|
111
112
|
return this.segments[this.segments.length - 1].getEndTangent();
|
|
112
113
|
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Get the sequence of all start/end points of this path.
|
|
117
|
+
* Assumption is: each path segment's end point is located on the next segment's start point
|
|
118
|
+
* to shape a full connected path.
|
|
119
|
+
*
|
|
120
|
+
* No arcs are considered here, just plain linear segments.
|
|
121
|
+
*
|
|
122
|
+
* @returns {Array<Vertex>}
|
|
123
|
+
*/
|
|
124
|
+
getAllStartEndPoints(): Array<Vertex> {
|
|
125
|
+
const verts: Array<Vertex> = [this.segments[0].getStartPoint()];
|
|
126
|
+
this.segments.forEach((segment: PathSegment) => {
|
|
127
|
+
verts.push(segment.getEndPoint());
|
|
128
|
+
});
|
|
129
|
+
return verts;
|
|
130
|
+
}
|
|
113
131
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Ikaros Kappler
|
|
3
|
+
* @date 2021-11-07
|
|
4
|
+
* @modified 2023-09-25 Ported to Typescript and added system darkmode detection.
|
|
5
|
+
* @version 1.1.0
|
|
6
|
+
*
|
|
7
|
+
* @param {Record<string,string>} GUP
|
|
8
|
+
* @returns {boolean}
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import PlotBoilerplate from "../PlotBoilerplate";
|
|
12
|
+
|
|
13
|
+
export const detectDarkMode = (GUP?: Record<string, string>) => {
|
|
14
|
+
// Respect overrides
|
|
15
|
+
if (typeof GUP !== "undefined" && GUP.hasOwnProperty("darkmode") && GUP["darkmode"]) {
|
|
16
|
+
// const overrideValue = PlotBoilerplate.utils.fetch.bool(GUP, "darkmode", null);
|
|
17
|
+
const overrideValue = !!JSON.parse(GUP["darkmode"]);
|
|
18
|
+
if (overrideValue !== null) {
|
|
19
|
+
return overrideValue;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (globalThis.matchMedia && globalThis.matchMedia("(prefers-color-scheme: dark)").matches) {
|
|
23
|
+
// dark mode by system
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
// else: dark mode by daytime
|
|
27
|
+
const hours = new Date().getHours();
|
|
28
|
+
const isDayTime = hours > 6 && hours < 18;
|
|
29
|
+
return !isDayTime;
|
|
30
|
+
};
|