plotboilerplate 1.25.0 → 1.27.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 +3 -0
- package/dist/index.esm.js +171 -43
- 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 +171 -43
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +6 -2
- package/src/cjs/Bounds.d.ts +79 -25
- package/src/cjs/Bounds.js +102 -29
- package/src/cjs/Bounds.js.map +1 -1
- package/src/cjs/CircleSector.d.ts +3 -0
- package/src/cjs/CircleSector.js +28 -1
- package/src/cjs/CircleSector.js.map +1 -1
- package/src/cjs/PlotBoilerplate.d.ts +4 -3
- package/src/cjs/PlotBoilerplate.js +2 -1
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/draw.d.ts +4 -2
- package/src/cjs/draw.js +9 -4
- package/src/cjs/draw.js.map +1 -1
- package/src/cjs/drawgl.d.ts +3 -2
- package/src/cjs/drawgl.js +2 -1
- package/src/cjs/drawgl.js.map +1 -1
- package/src/cjs/drawutilssvg.d.ts +10 -4
- package/src/cjs/drawutilssvg.js +28 -7
- package/src/cjs/drawutilssvg.js.map +1 -1
- package/src/cjs/interfaces/DrawLib.d.ts +2 -0
- package/src/cjs/interfaces/DrawLib.js +1 -0
- package/src/cjs/interfaces/DrawLib.js.map +1 -1
- package/src/cjs/utils/LissajousFigure.d.ts +34 -0
- package/src/cjs/utils/LissajousFigure.js +100 -0
- package/src/cjs/utils/LissajousFigure.js.map +1 -0
- package/src/cjs/utils/PerlinNoise.d.ts +19 -0
- package/src/cjs/utils/PerlinNoise.js +352 -0
- package/src/cjs/utils/PerlinNoise.js.map +1 -0
- package/src/cjs/utils/SVGPathUtils.d.ts +22 -0
- package/src/cjs/utils/SVGPathUtils.js +45 -0
- package/src/cjs/utils/SVGPathUtils.js.map +1 -0
- package/src/cjs/utils/WebColors.d.ts +2 -1
- package/src/cjs/utils/WebColors.js +14 -25
- package/src/cjs/utils/WebColors.js.map +1 -1
- package/src/cjs/utils/algorithms/PolygonTesselationOutlines.d.ts +145 -0
- package/src/cjs/utils/algorithms/PolygonTesselationOutlines.js +269 -0
- package/src/cjs/utils/algorithms/PolygonTesselationOutlines.js.map +1 -0
- package/src/cjs/utils/algorithms/pixelCornersToRoundPaths.d.ts +23 -0
- package/src/cjs/utils/algorithms/pixelCornersToRoundPaths.js +270 -0
- package/src/cjs/utils/algorithms/pixelCornersToRoundPaths.js.map +1 -0
- package/src/cjs/utils/datastructures/Color.js +0 -19
- package/src/cjs/utils/datastructures/Color.js.map +1 -1
- package/src/cjs/utils/datastructures/ColorGradient.d.ts +2 -0
- package/src/cjs/utils/datastructures/ColorGradient.js +5 -0
- package/src/cjs/utils/datastructures/ColorGradient.js.map +1 -1
- package/src/cjs/utils/datastructures/DataGrid2d.d.ts +6 -0
- package/src/cjs/utils/datastructures/DataGrid2dArrayMatrix.d.ts +88 -0
- package/src/cjs/utils/datastructures/DataGrid2dArrayMatrix.js +155 -0
- package/src/cjs/utils/datastructures/DataGrid2dArrayMatrix.js.map +1 -0
- package/src/cjs/utils/datastructures/DataGrid2dListAdapter.d.ts +1 -7
- package/src/cjs/utils/datastructures/DataGrid2dListAdapter.js +3 -3
- package/src/cjs/utils/datastructures/DataGrid2dListAdapter.js.map +1 -1
- package/src/cjs/utils/datastructures/GeometryMesh.d.ts +49 -0
- package/src/cjs/utils/datastructures/GeometryMesh.js +58 -0
- package/src/cjs/utils/datastructures/GeometryMesh.js.map +1 -0
- package/src/cjs/utils/datastructures/Girih.d.ts +38 -1
- package/src/cjs/utils/datastructures/Girih.js +71 -1
- package/src/cjs/utils/datastructures/Girih.js.map +1 -1
- package/src/cjs/utils/detectDarkMode.js +16 -7
- package/src/cjs/utils/detectDarkMode.js.map +1 -1
- package/src/cjs/utils/dom/components/ColorGradientPicker.d.ts +4 -3
- package/src/cjs/utils/dom/components/ColorGradientPicker.js +8 -8
- package/src/cjs/utils/dom/components/ColorGradientPicker.js.map +1 -1
- package/src/cjs/utils/dom/components/ColorGradientSelector.d.ts +1 -0
- package/src/cjs/utils/dom/components/ColorGradientSelector.js +4 -2
- package/src/cjs/utils/dom/components/ColorGradientSelector.js.map +1 -1
- package/src/cjs/utils/io/FileDrop.d.ts +2 -0
- package/src/cjs/utils/io/FileDrop.js +4 -0
- package/src/cjs/utils/io/FileDrop.js.map +1 -1
- package/src/cjs/utils/parsers/svg/types.d.ts +8 -8
- package/src/esm/Bounds.d.ts +79 -25
- package/src/esm/Bounds.js +102 -29
- package/src/esm/Bounds.js.map +1 -1
- package/src/esm/CircleSector.d.ts +3 -0
- package/src/esm/CircleSector.js +28 -1
- package/src/esm/CircleSector.js.map +1 -1
- package/src/esm/PlotBoilerplate.d.ts +4 -3
- package/src/esm/PlotBoilerplate.js +2 -1
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/draw.d.ts +4 -2
- package/src/esm/draw.js +9 -4
- package/src/esm/draw.js.map +1 -1
- package/src/esm/drawgl.d.ts +3 -2
- package/src/esm/drawgl.js +2 -1
- package/src/esm/drawgl.js.map +1 -1
- package/src/esm/drawutilssvg.d.ts +10 -4
- package/src/esm/drawutilssvg.js +28 -7
- package/src/esm/drawutilssvg.js.map +1 -1
- package/src/esm/interfaces/DrawLib.d.ts +2 -0
- package/src/esm/interfaces/DrawLib.js +1 -0
- package/src/esm/interfaces/DrawLib.js.map +1 -1
- package/src/esm/utils/LissajousFigure.d.ts +34 -0
- package/src/esm/utils/LissajousFigure.js +95 -0
- package/src/esm/utils/LissajousFigure.js.map +1 -0
- package/src/esm/utils/PerlinNoise.d.ts +19 -0
- package/src/esm/utils/PerlinNoise.js +346 -0
- package/src/esm/utils/PerlinNoise.js.map +1 -0
- package/src/esm/utils/SVGPathUtils.d.ts +22 -0
- package/src/esm/utils/SVGPathUtils.js +42 -0
- package/src/esm/utils/SVGPathUtils.js.map +1 -0
- package/src/esm/utils/WebColors.d.ts +2 -1
- package/src/esm/utils/WebColors.js +14 -25
- package/src/esm/utils/WebColors.js.map +1 -1
- package/src/esm/utils/algorithms/PolygonTesselationOutlines.d.ts +145 -0
- package/src/esm/utils/algorithms/PolygonTesselationOutlines.js +262 -0
- package/src/esm/utils/algorithms/PolygonTesselationOutlines.js.map +1 -0
- package/src/esm/utils/algorithms/pixelCornersToRoundPaths.d.ts +23 -0
- package/src/esm/utils/algorithms/pixelCornersToRoundPaths.js +266 -0
- package/src/esm/utils/algorithms/pixelCornersToRoundPaths.js.map +1 -0
- package/src/esm/utils/datastructures/Color.js +0 -19
- package/src/esm/utils/datastructures/Color.js.map +1 -1
- package/src/esm/utils/datastructures/ColorGradient.d.ts +2 -0
- package/src/esm/utils/datastructures/ColorGradient.js +5 -0
- package/src/esm/utils/datastructures/ColorGradient.js.map +1 -1
- package/src/esm/utils/datastructures/DataGrid2d.d.ts +6 -0
- package/src/esm/utils/datastructures/DataGrid2dArrayMatrix.d.ts +88 -0
- package/src/esm/utils/datastructures/DataGrid2dArrayMatrix.js +150 -0
- package/src/esm/utils/datastructures/DataGrid2dArrayMatrix.js.map +1 -0
- package/src/esm/utils/datastructures/DataGrid2dListAdapter.d.ts +1 -7
- package/src/esm/utils/datastructures/DataGrid2dListAdapter.js +3 -3
- package/src/esm/utils/datastructures/DataGrid2dListAdapter.js.map +1 -1
- package/src/esm/utils/datastructures/GeometryMesh.d.ts +49 -0
- package/src/esm/utils/datastructures/GeometryMesh.js +53 -0
- package/src/esm/utils/datastructures/GeometryMesh.js.map +1 -0
- package/src/esm/utils/datastructures/Girih.d.ts +38 -1
- package/src/esm/utils/datastructures/Girih.js +71 -1
- package/src/esm/utils/datastructures/Girih.js.map +1 -1
- package/src/esm/utils/detectDarkMode.js +16 -7
- package/src/esm/utils/detectDarkMode.js.map +1 -1
- package/src/esm/utils/dom/components/ColorGradientPicker.d.ts +4 -3
- package/src/esm/utils/dom/components/ColorGradientPicker.js +18 -7
- package/src/esm/utils/dom/components/ColorGradientPicker.js.map +1 -1
- package/src/esm/utils/dom/components/ColorGradientSelector.d.ts +1 -0
- package/src/esm/utils/dom/components/ColorGradientSelector.js +9 -2
- package/src/esm/utils/dom/components/ColorGradientSelector.js.map +1 -1
- package/src/esm/utils/io/FileDrop.d.ts +2 -0
- package/src/esm/utils/io/FileDrop.js +4 -0
- package/src/esm/utils/io/FileDrop.js.map +1 -1
- package/src/esm/utils/parsers/svg/types.d.ts +8 -8
- package/src/ts/Bounds.ts +107 -22
- package/src/ts/CircleSector.ts +39 -6
- package/src/ts/PlotBoilerplate.ts +4 -3
- package/src/ts/draw.ts +8 -3
- package/src/ts/drawgl.ts +3 -2
- package/src/ts/drawutilssvg.ts +34 -7
- package/src/ts/interfaces/DrawLib.ts +3 -0
- package/src/ts/utils/LissajousFigure.ts +110 -0
- package/src/ts/utils/PerlinNoise.ts +368 -0
- package/src/ts/utils/SVGPathUtils.ts +55 -0
- package/src/ts/utils/WebColors.ts +20 -33
- package/src/ts/utils/algorithms/PolygonTesselationOutlines.ts +296 -0
- package/src/ts/utils/algorithms/pixelCornersToRoundPaths.ts +379 -0
- package/src/ts/utils/datastructures/Color.ts +0 -19
- package/src/ts/utils/datastructures/ColorGradient.ts +6 -0
- package/src/ts/utils/datastructures/DataGrid2d.ts +7 -0
- package/src/ts/utils/datastructures/DataGrid2dArrayMatrix.ts +182 -0
- package/src/ts/utils/datastructures/DataGrid2dListAdapter.ts +4 -11
- package/src/ts/utils/datastructures/GeometryMesh.ts +79 -0
- package/src/ts/utils/datastructures/Girih.ts +78 -1
- package/src/ts/utils/datastructures/interfaces.ts +4 -4
- package/src/ts/utils/detectDarkMode.ts +17 -8
- package/src/ts/utils/dom/components/ColorGradientPicker.tsx +18 -6
- package/src/ts/utils/dom/components/ColorGradientSelector.tsx +9 -2
- package/src/ts/utils/io/FileDrop.ts +5 -0
- package/src/ts/utils/parsers/svg/types.ts +8 -8
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find the outer hull outlines of a (not necessarily full connected) polygon tesellation.
|
|
3
|
+
*
|
|
4
|
+
* The method `findAllOutlinesGraph` will return a simple graph containing all vertices and edges
|
|
5
|
+
* that belong to the outer hull.
|
|
6
|
+
*
|
|
7
|
+
* The method `findAllOutlinesPolygons` will detect connected paths inside the graph and return
|
|
8
|
+
* an array of Polygons.
|
|
9
|
+
*
|
|
10
|
+
*
|
|
11
|
+
* @require detectPaths
|
|
12
|
+
*
|
|
13
|
+
* @author Ikaros Kappler
|
|
14
|
+
* @date 2026-01-20
|
|
15
|
+
* @version 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
import { Polygon } from "../../Polygon";
|
|
18
|
+
import { Vertex } from "../../Vertex";
|
|
19
|
+
import { IndexPair } from "../datastructures/interfaces";
|
|
20
|
+
export interface PolygonTesselationOutlinesOptions {
|
|
21
|
+
tolerance?: number;
|
|
22
|
+
removeUnusedVertices?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface TesselationGraph {
|
|
25
|
+
vertices: Array<Vertex>;
|
|
26
|
+
edges: Array<IndexPair>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Convert any non-intersecting tesselation to a graph.
|
|
30
|
+
* Adjadent tiles (polygons) will result in duplicate edges.
|
|
31
|
+
*
|
|
32
|
+
* @param {Polygon[]} polygons - The polygon tesselation to use.
|
|
33
|
+
* @return {TesselationGraph} A tesselation graph.
|
|
34
|
+
*/
|
|
35
|
+
export declare const polygonTesselationToGraph: (polygons: Polygon[]) => TesselationGraph;
|
|
36
|
+
/**
|
|
37
|
+
* A class to calculate the tesselation's outer hull.
|
|
38
|
+
*/
|
|
39
|
+
export declare class PolygonTesselationOutlines {
|
|
40
|
+
static readonly DEFAULT_TOLERANCE = 0.01;
|
|
41
|
+
private readonly polygons;
|
|
42
|
+
private readonly tolerance;
|
|
43
|
+
private readonly removeUnusedVertices;
|
|
44
|
+
/**
|
|
45
|
+
* @constructor
|
|
46
|
+
* @param {Polygon[]} polygons - The polygon tesselation to use.
|
|
47
|
+
* @param {PolygonTesselationOutlinesOptions} options - (optional)
|
|
48
|
+
*/
|
|
49
|
+
constructor(polygons: Polygon[], options?: PolygonTesselationOutlinesOptions);
|
|
50
|
+
/**
|
|
51
|
+
* Clears duplicate edges.
|
|
52
|
+
*
|
|
53
|
+
* Note: this works only for duplicates. Triplets will not be removed.
|
|
54
|
+
*
|
|
55
|
+
* @name __eliminateDuplicateEdges
|
|
56
|
+
* @private
|
|
57
|
+
* @memberof TesselationGraph
|
|
58
|
+
* @instance
|
|
59
|
+
* @param {TesselationGraph} tesselationGraph - The tesselation graph to remove duplicate edges from.
|
|
60
|
+
* @return {TesselationGraph} A new tesselation graph with cleaned up edges.
|
|
61
|
+
*/
|
|
62
|
+
private __eliminateDuplicateEdges;
|
|
63
|
+
/**
|
|
64
|
+
* Locate some edge that adjacent to the given vertex index
|
|
65
|
+
*
|
|
66
|
+
* @name __locateEdgeWithVertIndex
|
|
67
|
+
* @private
|
|
68
|
+
* @memberof TesselationGraph
|
|
69
|
+
* @instance
|
|
70
|
+
* @param {number} vertIndex - The vertex index to find an edge for.
|
|
71
|
+
* @param {TesselationGraph} tesselationGraph - The tesselation graph to remove unused vertices from.
|
|
72
|
+
* @return {number} The edge index that's adjacent to the given vertex index.
|
|
73
|
+
* @return -1 if no such edge is found.
|
|
74
|
+
*/
|
|
75
|
+
private __locateEdgeWithVertIndex;
|
|
76
|
+
/**
|
|
77
|
+
* Removes all unused vertices from the graph and re-matps the edges.
|
|
78
|
+
*
|
|
79
|
+
* @name __removeUnusedVertices
|
|
80
|
+
* @private
|
|
81
|
+
* @memberof TesselationGraph
|
|
82
|
+
* @instance
|
|
83
|
+
* @param {TesselationGraph} tesselationGraph - The tesselation graph to remove unused vertices from.
|
|
84
|
+
* @return {TesselationGraph} A new tesselation graph.
|
|
85
|
+
*/
|
|
86
|
+
private __removeUnusedVertices;
|
|
87
|
+
/**
|
|
88
|
+
* Creates a tesselation graph and removes all inner edges.
|
|
89
|
+
*
|
|
90
|
+
* @name findAllOutlinesGraph
|
|
91
|
+
* @private
|
|
92
|
+
* @memberof PolygonTesselationOutlines
|
|
93
|
+
* @instance
|
|
94
|
+
* @return {TesselationGraph} A tesselation graph containing the outer hull edges only.
|
|
95
|
+
*/
|
|
96
|
+
findAllOutlinesGraph(): TesselationGraph;
|
|
97
|
+
/**
|
|
98
|
+
* Convert any generic path to a polygon. Each path segment (start point and end point)
|
|
99
|
+
* are interpreted as a linear segment here.
|
|
100
|
+
*
|
|
101
|
+
* @name __convertGenericPathToPolygon
|
|
102
|
+
* @private
|
|
103
|
+
* @memberof PolygonTesselationOutlines
|
|
104
|
+
* @instance
|
|
105
|
+
* @param {GenericPath} path - The path to convert.
|
|
106
|
+
*/
|
|
107
|
+
private __convertGenericPathToPolygon;
|
|
108
|
+
/**
|
|
109
|
+
* Creates a tesselation graph and removes all inner edges.
|
|
110
|
+
*
|
|
111
|
+
* @name findAllOutlinesPolygons
|
|
112
|
+
* @private
|
|
113
|
+
* @memberof PolygonTesselationOutlines
|
|
114
|
+
* @instance
|
|
115
|
+
* @param {TesselationGraph} tesselationGraph - Find all outlines on the tesselation graph.
|
|
116
|
+
*/
|
|
117
|
+
findAllOutlinesPolygons(tesselationGraph: TesselationGraph): Array<Polygon>;
|
|
118
|
+
/**
|
|
119
|
+
* Checks if two vertices are equal – regarding to the current tolerance setting.
|
|
120
|
+
*
|
|
121
|
+
* @name __isEqualPoint
|
|
122
|
+
* @private
|
|
123
|
+
* @memberof PolygonTesselationOutlines
|
|
124
|
+
* @instance
|
|
125
|
+
* @param {boolean} vertA - The first point.
|
|
126
|
+
* @param {boolean} vertB - The second point.
|
|
127
|
+
* @return True if the vertices are equal.
|
|
128
|
+
*/
|
|
129
|
+
private __isEqualPoint;
|
|
130
|
+
/**
|
|
131
|
+
* Checks if two edges (identified as two pairs of vertices) are equal – regarding to the
|
|
132
|
+
* current tolerance setting.
|
|
133
|
+
*
|
|
134
|
+
* @name __isEqualEdge
|
|
135
|
+
* @private
|
|
136
|
+
* @memberof PolygonTesselationOutlines
|
|
137
|
+
* @instance
|
|
138
|
+
* @param {boolean} edgeAvertA - The first edge's point A.
|
|
139
|
+
* @param {boolean} edgeAvertB - The first edge's point B.
|
|
140
|
+
* @param {boolean} edgeBvertA - The second edge's point A.
|
|
141
|
+
* @param {boolean} edgeBvertB - The second edge's point B.
|
|
142
|
+
* @return True if the edges are equal.
|
|
143
|
+
*/
|
|
144
|
+
private __isEqualEdge;
|
|
145
|
+
}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find the outer hull outlines of a (not necessarily full connected) polygon tesellation.
|
|
3
|
+
*
|
|
4
|
+
* The method `findAllOutlinesGraph` will return a simple graph containing all vertices and edges
|
|
5
|
+
* that belong to the outer hull.
|
|
6
|
+
*
|
|
7
|
+
* The method `findAllOutlinesPolygons` will detect connected paths inside the graph and return
|
|
8
|
+
* an array of Polygons.
|
|
9
|
+
*
|
|
10
|
+
*
|
|
11
|
+
* @require detectPaths
|
|
12
|
+
*
|
|
13
|
+
* @author Ikaros Kappler
|
|
14
|
+
* @date 2026-01-20
|
|
15
|
+
* @version 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
import { Line } from "../../Line";
|
|
18
|
+
import { Polygon } from "../../Polygon";
|
|
19
|
+
import { arrayFill } from "./arrayFill";
|
|
20
|
+
import { detectPaths } from "./detectPaths";
|
|
21
|
+
/**
|
|
22
|
+
* Convert any non-intersecting tesselation to a graph.
|
|
23
|
+
* Adjadent tiles (polygons) will result in duplicate edges.
|
|
24
|
+
*
|
|
25
|
+
* @param {Polygon[]} polygons - The polygon tesselation to use.
|
|
26
|
+
* @return {TesselationGraph} A tesselation graph.
|
|
27
|
+
*/
|
|
28
|
+
export const polygonTesselationToGraph = (polygons) => {
|
|
29
|
+
const vertices = [];
|
|
30
|
+
const edges = [];
|
|
31
|
+
// const vertexPolygonMapping: Array<number>[] = []; // Map polygon+vertex to graph vertices
|
|
32
|
+
for (var i = 0; i < polygons.length; i++) {
|
|
33
|
+
const polygon = polygons[i];
|
|
34
|
+
const polygonMapping = [];
|
|
35
|
+
// vertexPolygonMapping.push(polygonMapping);
|
|
36
|
+
// Add vertices
|
|
37
|
+
for (var j = 0; j < polygon.vertices.length; j++) {
|
|
38
|
+
const graphVertIndex = vertices.length;
|
|
39
|
+
vertices.push(polygon.vertices[j]);
|
|
40
|
+
polygonMapping.push(graphVertIndex);
|
|
41
|
+
}
|
|
42
|
+
// Now add edges
|
|
43
|
+
for (var j = 0; j < polygon.vertices.length; j++) {
|
|
44
|
+
const polyEdgeIndexA = j;
|
|
45
|
+
const polyEdgeIndexB = (j + 1) % polygon.vertices.length;
|
|
46
|
+
const grapgVertIndexA = polygonMapping[polyEdgeIndexA];
|
|
47
|
+
const grapgVertIndexB = polygonMapping[polyEdgeIndexB];
|
|
48
|
+
edges.push({ i: grapgVertIndexA, j: grapgVertIndexB });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { vertices, edges };
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* A class to calculate the tesselation's outer hull.
|
|
55
|
+
*/
|
|
56
|
+
export class PolygonTesselationOutlines {
|
|
57
|
+
/**
|
|
58
|
+
* @constructor
|
|
59
|
+
* @param {Polygon[]} polygons - The polygon tesselation to use.
|
|
60
|
+
* @param {PolygonTesselationOutlinesOptions} options - (optional)
|
|
61
|
+
*/
|
|
62
|
+
constructor(polygons, options) {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
this.polygons = polygons;
|
|
65
|
+
// this.tesselationGraph = tesselationToGraph(polygons);
|
|
66
|
+
this.tolerance = (_a = options === null || options === void 0 ? void 0 : options.tolerance) !== null && _a !== void 0 ? _a : PolygonTesselationOutlines.DEFAULT_TOLERANCE;
|
|
67
|
+
this.removeUnusedVertices = (_b = options === null || options === void 0 ? void 0 : options.removeUnusedVertices) !== null && _b !== void 0 ? _b : true;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Clears duplicate edges.
|
|
71
|
+
*
|
|
72
|
+
* Note: this works only for duplicates. Triplets will not be removed.
|
|
73
|
+
*
|
|
74
|
+
* @name __eliminateDuplicateEdges
|
|
75
|
+
* @private
|
|
76
|
+
* @memberof TesselationGraph
|
|
77
|
+
* @instance
|
|
78
|
+
* @param {TesselationGraph} tesselationGraph - The tesselation graph to remove duplicate edges from.
|
|
79
|
+
* @return {TesselationGraph} A new tesselation graph with cleaned up edges.
|
|
80
|
+
*/
|
|
81
|
+
__eliminateDuplicateEdges(tesselationGraph) {
|
|
82
|
+
const newEdges = [];
|
|
83
|
+
for (var e = 0; e < tesselationGraph.edges.length; e++) {
|
|
84
|
+
const curEdge = tesselationGraph.edges[e];
|
|
85
|
+
if (!curEdge) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const curA = tesselationGraph.vertices[curEdge.i];
|
|
89
|
+
const curB = tesselationGraph.vertices[curEdge.j];
|
|
90
|
+
for (var f = 0; f < tesselationGraph.edges.length; f++) {
|
|
91
|
+
if (e === f) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const otherEdge = tesselationGraph.edges[f];
|
|
95
|
+
if (!otherEdge) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const otherA = tesselationGraph.vertices[otherEdge.i];
|
|
99
|
+
const otherB = tesselationGraph.vertices[otherEdge.j];
|
|
100
|
+
if (this.__isEqualEdge(curA, curB, otherA, otherB)) {
|
|
101
|
+
// Both edges are equal -> remove both
|
|
102
|
+
tesselationGraph.edges[e] = null;
|
|
103
|
+
tesselationGraph.edges[f] = null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// return tesselationGraph; // TODO: create clean clone with new mapping
|
|
108
|
+
// Clear null-records.
|
|
109
|
+
return {
|
|
110
|
+
vertices: tesselationGraph.vertices,
|
|
111
|
+
edges: tesselationGraph.edges.filter((edge) => edge != null)
|
|
112
|
+
}; // TODO: create clean clone with new mapping
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Locate some edge that adjacent to the given vertex index
|
|
116
|
+
*
|
|
117
|
+
* @name __locateEdgeWithVertIndex
|
|
118
|
+
* @private
|
|
119
|
+
* @memberof TesselationGraph
|
|
120
|
+
* @instance
|
|
121
|
+
* @param {number} vertIndex - The vertex index to find an edge for.
|
|
122
|
+
* @param {TesselationGraph} tesselationGraph - The tesselation graph to remove unused vertices from.
|
|
123
|
+
* @return {number} The edge index that's adjacent to the given vertex index.
|
|
124
|
+
* @return -1 if no such edge is found.
|
|
125
|
+
*/
|
|
126
|
+
__locateEdgeWithVertIndex(vertIndex, tesselationGraph) {
|
|
127
|
+
return tesselationGraph.edges.findIndex((edge) => edge.i == vertIndex || edge.j == vertIndex);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Removes all unused vertices from the graph and re-matps the edges.
|
|
131
|
+
*
|
|
132
|
+
* @name __removeUnusedVertices
|
|
133
|
+
* @private
|
|
134
|
+
* @memberof TesselationGraph
|
|
135
|
+
* @instance
|
|
136
|
+
* @param {TesselationGraph} tesselationGraph - The tesselation graph to remove unused vertices from.
|
|
137
|
+
* @return {TesselationGraph} A new tesselation graph.
|
|
138
|
+
*/
|
|
139
|
+
__removeUnusedVertices(tesselationGraph) {
|
|
140
|
+
// First remove un-used vertices and re-map indices.
|
|
141
|
+
const newVertices = [];
|
|
142
|
+
const indexMapping = arrayFill(tesselationGraph.vertices.length, -1);
|
|
143
|
+
for (var j = 0; j < tesselationGraph.vertices.length; j++) {
|
|
144
|
+
const edgeIndex = this.__locateEdgeWithVertIndex(j, tesselationGraph);
|
|
145
|
+
if (edgeIndex === -1) {
|
|
146
|
+
// No adjacent edge found -> vertex is not in use
|
|
147
|
+
// Ignore; index mapping remains to -1
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Keep vertex
|
|
151
|
+
const newIndex = newVertices.length;
|
|
152
|
+
newVertices.push(tesselationGraph.vertices[j]);
|
|
153
|
+
indexMapping[j] = newIndex;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Now re-map the egdes
|
|
157
|
+
const newEdges = [];
|
|
158
|
+
for (var j = 0; j < tesselationGraph.edges.length; j++) {
|
|
159
|
+
const edge = tesselationGraph.edges[j];
|
|
160
|
+
newEdges.push({ i: indexMapping[edge.i], j: indexMapping[edge.j] });
|
|
161
|
+
}
|
|
162
|
+
return { vertices: newVertices, edges: newEdges };
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Creates a tesselation graph and removes all inner edges.
|
|
166
|
+
*
|
|
167
|
+
* @name findAllOutlinesGraph
|
|
168
|
+
* @private
|
|
169
|
+
* @memberof PolygonTesselationOutlines
|
|
170
|
+
* @instance
|
|
171
|
+
* @return {TesselationGraph} A tesselation graph containing the outer hull edges only.
|
|
172
|
+
*/
|
|
173
|
+
findAllOutlinesGraph() {
|
|
174
|
+
// First build tesselation graph from polygons, containing all edges and vertices.
|
|
175
|
+
const tesselationGraph = polygonTesselationToGraph(this.polygons);
|
|
176
|
+
// Now eliminate all duplicate edges. By construction only inner edges are duplicates.
|
|
177
|
+
const outerHull = this.__eliminateDuplicateEdges(tesselationGraph);
|
|
178
|
+
// Only of requested remove unused vertices.
|
|
179
|
+
if (this.removeUnusedVertices) {
|
|
180
|
+
const cleanOuterHull = this.__removeUnusedVertices(outerHull);
|
|
181
|
+
return cleanOuterHull;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
return outerHull;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Convert any generic path to a polygon. Each path segment (start point and end point)
|
|
189
|
+
* are interpreted as a linear segment here.
|
|
190
|
+
*
|
|
191
|
+
* @name __convertGenericPathToPolygon
|
|
192
|
+
* @private
|
|
193
|
+
* @memberof PolygonTesselationOutlines
|
|
194
|
+
* @instance
|
|
195
|
+
* @param {GenericPath} path - The path to convert.
|
|
196
|
+
*/
|
|
197
|
+
__convertGenericPathToPolygon(path) {
|
|
198
|
+
const vertices = [];
|
|
199
|
+
const n = path.getSegmentCount();
|
|
200
|
+
let isOpen = false;
|
|
201
|
+
for (var i = 0; i < n; i++) {
|
|
202
|
+
const segment = path.getSegmentAt(i);
|
|
203
|
+
vertices.push(segment.getStartPoint());
|
|
204
|
+
if (i > 0 && i + 1 >= n && !this.__isEqualPoint(segment.getEndPoint(), vertices[0])) {
|
|
205
|
+
isOpen = true;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return new Polygon(vertices, isOpen);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Creates a tesselation graph and removes all inner edges.
|
|
212
|
+
*
|
|
213
|
+
* @name findAllOutlinesPolygons
|
|
214
|
+
* @private
|
|
215
|
+
* @memberof PolygonTesselationOutlines
|
|
216
|
+
* @instance
|
|
217
|
+
* @param {TesselationGraph} tesselationGraph - Find all outlines on the tesselation graph.
|
|
218
|
+
*/
|
|
219
|
+
findAllOutlinesPolygons(tesselationGraph) {
|
|
220
|
+
// Convert to real line segments:
|
|
221
|
+
const lineSegments = tesselationGraph.edges.map((edge) => new Line(tesselationGraph.vertices[edge.i], tesselationGraph.vertices[edge.j]));
|
|
222
|
+
// Now run the path detection.
|
|
223
|
+
const paths = detectPaths(lineSegments, this.tolerance);
|
|
224
|
+
// And now convert the generic paths back to polygons
|
|
225
|
+
// (we have put in line segments, so line segments must have returned)
|
|
226
|
+
return paths.map((path) => this.__convertGenericPathToPolygon(path));
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Checks if two vertices are equal – regarding to the current tolerance setting.
|
|
230
|
+
*
|
|
231
|
+
* @name __isEqualPoint
|
|
232
|
+
* @private
|
|
233
|
+
* @memberof PolygonTesselationOutlines
|
|
234
|
+
* @instance
|
|
235
|
+
* @param {boolean} vertA - The first point.
|
|
236
|
+
* @param {boolean} vertB - The second point.
|
|
237
|
+
* @return True if the vertices are equal.
|
|
238
|
+
*/
|
|
239
|
+
__isEqualPoint(vertA, vertB) {
|
|
240
|
+
return vertA.distance(vertB) < this.tolerance;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Checks if two edges (identified as two pairs of vertices) are equal – regarding to the
|
|
244
|
+
* current tolerance setting.
|
|
245
|
+
*
|
|
246
|
+
* @name __isEqualEdge
|
|
247
|
+
* @private
|
|
248
|
+
* @memberof PolygonTesselationOutlines
|
|
249
|
+
* @instance
|
|
250
|
+
* @param {boolean} edgeAvertA - The first edge's point A.
|
|
251
|
+
* @param {boolean} edgeAvertB - The first edge's point B.
|
|
252
|
+
* @param {boolean} edgeBvertA - The second edge's point A.
|
|
253
|
+
* @param {boolean} edgeBvertB - The second edge's point B.
|
|
254
|
+
* @return True if the edges are equal.
|
|
255
|
+
*/
|
|
256
|
+
__isEqualEdge(edgeAvertA, edgeAvertB, edgeBvertA, edgeBvertB) {
|
|
257
|
+
return ((this.__isEqualPoint(edgeAvertA, edgeBvertA) && this.__isEqualPoint(edgeAvertB, edgeBvertB)) ||
|
|
258
|
+
(this.__isEqualPoint(edgeAvertA, edgeBvertB) && this.__isEqualPoint(edgeAvertB, edgeBvertA)));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
PolygonTesselationOutlines.DEFAULT_TOLERANCE = 0.01;
|
|
262
|
+
//# sourceMappingURL=PolygonTesselationOutlines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PolygonTesselationOutlines.js","sourceRoot":"","sources":["../../../ts/utils/algorithms/PolygonTesselationOutlines.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A script to convert any boolean matrix to rounded paths.
|
|
3
|
+
*
|
|
4
|
+
* @author Ikaros Kappler
|
|
5
|
+
* @date 2025-10-17 (ported to Typescript from a demo-script)
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import { SVGPathParams, XYCoords } from "../../interfaces";
|
|
9
|
+
import { DataGrid2dArrayMatrix } from "../datastructures/DataGrid2dArrayMatrix";
|
|
10
|
+
export type PixelCornerPathOptions = {
|
|
11
|
+
origin?: XYCoords;
|
|
12
|
+
squareSize?: number;
|
|
13
|
+
gapSize?: number;
|
|
14
|
+
curveFactor?: number;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Computes an array of paths from the given boolean matrix.
|
|
18
|
+
*
|
|
19
|
+
* @param {DataGrid2dArrayMatrix<boolean>} matrix
|
|
20
|
+
* @param {PixelCornerPathOptions} options
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
export declare const pixelCornersToRoundPaths: (matrix: DataGrid2dArrayMatrix<boolean>, options: PixelCornerPathOptions) => Array<SVGPathParams>;
|