plotboilerplate 1.29.0 → 1.31.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.
Files changed (80) hide show
  1. package/README.md +26 -13
  2. package/dist/index.esm.js +310 -57
  3. package/dist/index.esm.js.map +1 -1
  4. package/dist/index.esm.min.js +1 -1
  5. package/dist/index.esm.min.js.map +1 -1
  6. package/dist/plotboilerplate.browser.min.js +1 -1
  7. package/dist/plotboilerplate.browser.min.js.map +1 -1
  8. package/dist/plotboilerplate.js +266 -36
  9. package/dist/plotboilerplate.min.js +1 -1
  10. package/package.json +1 -1
  11. package/src/cjs/Circle.d.ts +17 -1
  12. package/src/cjs/Circle.js +21 -1
  13. package/src/cjs/Circle.js.map +1 -1
  14. package/src/cjs/CubicBezierCurve.d.ts +34 -3
  15. package/src/cjs/CubicBezierCurve.js +79 -12
  16. package/src/cjs/CubicBezierCurve.js.map +1 -1
  17. package/src/cjs/Line.d.ts +46 -1
  18. package/src/cjs/Line.js +80 -1
  19. package/src/cjs/Line.js.map +1 -1
  20. package/src/cjs/Polygon.d.ts +18 -4
  21. package/src/cjs/Polygon.js +56 -18
  22. package/src/cjs/Polygon.js.map +1 -1
  23. package/src/cjs/VertTuple.d.ts +24 -2
  24. package/src/cjs/VertTuple.js +28 -2
  25. package/src/cjs/VertTuple.js.map +1 -1
  26. package/src/cjs/Vertex.d.ts +2 -2
  27. package/src/cjs/Vertex.js +2 -2
  28. package/src/cjs/utils/algorithms/delaunay2voronoi.d.ts +2 -1
  29. package/src/cjs/utils/algorithms/delaunay2voronoi.js +8 -10
  30. package/src/cjs/utils/algorithms/delaunay2voronoi.js.map +1 -1
  31. package/src/cjs/utils/datastructures/PointSet.d.ts +63 -0
  32. package/src/cjs/utils/datastructures/PointSet.js +126 -0
  33. package/src/cjs/utils/datastructures/PointSet.js.map +1 -0
  34. package/src/cjs/utils/datastructures/VoronoiCell.d.ts +19 -2
  35. package/src/cjs/utils/datastructures/VoronoiCell.js +39 -12
  36. package/src/cjs/utils/datastructures/VoronoiCell.js.map +1 -1
  37. package/src/cjs/utils/renderers/VoronoiRenderer.d.ts +99 -0
  38. package/src/cjs/utils/renderers/VoronoiRenderer.js +147 -0
  39. package/src/cjs/utils/renderers/VoronoiRenderer.js.map +1 -0
  40. package/src/esm/Circle.d.ts +17 -1
  41. package/src/esm/Circle.js +21 -1
  42. package/src/esm/Circle.js.map +1 -1
  43. package/src/esm/CubicBezierCurve.d.ts +34 -3
  44. package/src/esm/CubicBezierCurve.js +79 -12
  45. package/src/esm/CubicBezierCurve.js.map +1 -1
  46. package/src/esm/Line.d.ts +46 -1
  47. package/src/esm/Line.js +80 -1
  48. package/src/esm/Line.js.map +1 -1
  49. package/src/esm/Polygon.d.ts +18 -4
  50. package/src/esm/Polygon.js +56 -18
  51. package/src/esm/Polygon.js.map +1 -1
  52. package/src/esm/VertTuple.d.ts +24 -2
  53. package/src/esm/VertTuple.js +28 -2
  54. package/src/esm/VertTuple.js.map +1 -1
  55. package/src/esm/Vertex.d.ts +2 -2
  56. package/src/esm/Vertex.js +2 -2
  57. package/src/esm/utils/algorithms/delaunay2voronoi.d.ts +2 -1
  58. package/src/esm/utils/algorithms/delaunay2voronoi.js +8 -10
  59. package/src/esm/utils/algorithms/delaunay2voronoi.js.map +1 -1
  60. package/src/esm/utils/datastructures/PointSet.d.ts +63 -0
  61. package/src/esm/utils/datastructures/PointSet.js +115 -0
  62. package/src/esm/utils/datastructures/PointSet.js.map +1 -0
  63. package/src/esm/utils/datastructures/VoronoiCell.d.ts +19 -2
  64. package/src/esm/utils/datastructures/VoronoiCell.js +39 -12
  65. package/src/esm/utils/datastructures/VoronoiCell.js.map +1 -1
  66. package/src/esm/utils/renderers/VoronoiRenderer.d.ts +99 -0
  67. package/src/esm/utils/renderers/VoronoiRenderer.js +142 -0
  68. package/src/esm/utils/renderers/VoronoiRenderer.js.map +1 -0
  69. package/src/index-gl.js +1 -2
  70. package/src/ts/Circle.ts +23 -1
  71. package/src/ts/CubicBezierCurve.ts +133 -48
  72. package/src/ts/Line.ts +84 -1
  73. package/src/ts/Polygon.ts +58 -18
  74. package/src/ts/VertTuple.ts +30 -2
  75. package/src/ts/Vertex.ts +2 -2
  76. package/src/ts/utils/_AppContext.ts_ +22 -0
  77. package/src/ts/utils/algorithms/delaunay2voronoi.ts +81 -88
  78. package/src/ts/utils/datastructures/PointSet.ts +135 -0
  79. package/src/ts/utils/datastructures/VoronoiCell.ts +198 -169
  80. package/src/ts/utils/renderers/VoronoiRenderer.ts +200 -0
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * A mutable point set datastructure for holding a finite but variable set of vertices.
4
+ *
5
+ * @date 2026-09-12
6
+ * @author Ikaros Kappler
7
+ * @version 1.0.0
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.PointSet = void 0;
11
+ var PointSet = /** @class */ (function () {
12
+ function PointSet(pb) {
13
+ this.dragListeners = [];
14
+ this.pb = pb;
15
+ this.points = [];
16
+ }
17
+ PointSet.prototype.fireDragEvent = function () {
18
+ this.dragListeners.forEach(function (listener) {
19
+ listener();
20
+ });
21
+ };
22
+ /**
23
+ * Adds a random point to the point list.
24
+ *
25
+ * @name addRandomPoint
26
+ * @instance
27
+ * @override
28
+ * @memberof PointSet
29
+ * @return {void}
30
+ */
31
+ PointSet.prototype.addRandomPoint = function (horizontalSafeArea, verticalSafeArea) {
32
+ if (horizontalSafeArea === void 0) { horizontalSafeArea = 0; }
33
+ if (verticalSafeArea === void 0) { verticalSafeArea = 0; }
34
+ // this.addVertex(Vertex.randomVertex(this.pb.viewport()).scale(0.5));
35
+ this.addVertex(this.pb.viewport().randomPoint(horizontalSafeArea, verticalSafeArea));
36
+ };
37
+ /**
38
+ * Adds the given point/vertex to the point list.
39
+ *
40
+ * @name addVertex
41
+ * @instance
42
+ * @override
43
+ * @memberof PointSet
44
+ * @param {Vertex} vert - The vertex to add.
45
+ * @return {void}
46
+ */
47
+ PointSet.prototype.addVertex = function (vert) {
48
+ this.points.push(vert);
49
+ this.pb.add(vert, false); // redraw=false
50
+ var _self = this;
51
+ vert.listeners.addDragListener(function () {
52
+ _self.fireDragEvent();
53
+ });
54
+ // vert.listeners.addDragListener(_self.fireDragEvent);
55
+ };
56
+ /**
57
+ * Remove all vertices from this set and from the plotboilerplate instance.
58
+ *
59
+ * @name clear
60
+ * @instance
61
+ * @override
62
+ * @memberof PointSet
63
+ * @return {void}
64
+ */
65
+ PointSet.prototype.clear = function () {
66
+ for (var i = 0; i < this.points.length; i++) {
67
+ this.pb.remove(this.points[i], false);
68
+ // TODO: How to remove drag listener?
69
+ // this.points[i].listeners.removeDragListener(this.fireDragEvent);
70
+ }
71
+ this.points = [];
72
+ };
73
+ /**
74
+ * Add or remove n random points; depends on the config settings.
75
+ *
76
+ * I have no idea how tired I was when I wrote this function but it seems working pretty well.
77
+ */
78
+ PointSet.prototype.randomPoints = function (pointCount, horizontalSafeArea, verticalSafeArea) {
79
+ if (horizontalSafeArea === void 0) { horizontalSafeArea = 0; }
80
+ if (verticalSafeArea === void 0) { verticalSafeArea = 0; }
81
+ // Generate random points.
82
+ for (var i = this.points.length; i < pointCount; i++) {
83
+ this.addRandomPoint(horizontalSafeArea, verticalSafeArea);
84
+ }
85
+ };
86
+ /**
87
+ * Add random points and be sure they cover the whole viewport.
88
+ *
89
+ * I have no idea how tired I was when I wrote this function but it seems working pretty well.
90
+ */
91
+ PointSet.prototype.randomFullCover = function (pointCount) {
92
+ this.clear();
93
+ this.randomPoints(pointCount - 4, 0.0, 0.0); //, true, true);
94
+ // Add 4 more points in the corners.
95
+ var viewport = this.pb.viewport();
96
+ this.addVertex(viewport.getNorthWestPoint());
97
+ this.addVertex(viewport.getNorthEastPoint());
98
+ this.addVertex(viewport.getSouthWestPoint());
99
+ this.addVertex(viewport.getSouthEastPoint());
100
+ };
101
+ /**
102
+ * Call when the desired number of points changes.
103
+ **/
104
+ PointSet.prototype.updatePointCount = function (newPointCount, horizontalSafeArea, verticalSafeArea) {
105
+ if (horizontalSafeArea === void 0) { horizontalSafeArea = 0; }
106
+ if (verticalSafeArea === void 0) { verticalSafeArea = 0; }
107
+ if (newPointCount > this.points.length) {
108
+ this.randomPoints(newPointCount, horizontalSafeArea, verticalSafeArea);
109
+ }
110
+ // Do not clear ; no full cover ; do rebuild
111
+ else if (newPointCount < this.points.length) {
112
+ // Remove n-m points
113
+ for (var i = newPointCount; i < this.points.length; i++) {
114
+ this.pb.remove(this.points[i]);
115
+ }
116
+ // TODO: MOVE THIS TO THE PointSet class.
117
+ this.points = this.points.slice(0, newPointCount);
118
+ // TODO: also remove listeners?
119
+ // updateAnimator();
120
+ // rebuild();
121
+ }
122
+ };
123
+ return PointSet;
124
+ }());
125
+ exports.PointSet = PointSet;
126
+ //# sourceMappingURL=PointSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PointSet.js","sourceRoot":"","sources":["../../../ts/utils/datastructures/PointSet.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,8 @@
16
16
  * @modified 2020-08-12 Ported this class from vanilla JS to TypeScript.
17
17
  * @modified 2020-08-17 Added some missing type declarations.
18
18
  * @modified 2021-01-20 Members `triangles` and `sharedVertex` are now public.
19
- * @version 1.1.3
19
+ * @modified 2026-09-15 Added the `VoronoiCell.sharedVertexIndex` attribute.
20
+ * @version 1.2.0
20
21
  *
21
22
  * @file VoronoiCell
22
23
  * @public
@@ -39,6 +40,10 @@ export declare class VoronoiCell {
39
40
  * @instance
40
41
  */
41
42
  sharedVertex: Vertex;
43
+ /**
44
+ *
45
+ */
46
+ sharedVertexIndex: number;
42
47
  /**
43
48
  * The constructor.
44
49
  *
@@ -49,7 +54,7 @@ export declare class VoronoiCell {
49
54
  * @param {Vertex} sharedVertex This is the 'center' of the voronoi cell; all triangles must share
50
55
  * that vertex.
51
56
  **/
52
- constructor(triangles: Array<Triangle>, sharedVertex: Vertex);
57
+ constructor(triangles: Array<Triangle>, sharedVertex: Vertex, sharedVertexIndex: number);
53
58
  /**
54
59
  * Check if the first and the last triangle in the path are NOT connected.
55
60
  *
@@ -71,6 +76,18 @@ export declare class VoronoiCell {
71
76
  * @return {Polygon}
72
77
  **/
73
78
  toPolygon(): Polygon;
79
+ /**
80
+ * Get all 'umbrella' triangles for this Voronoi cell.
81
+ *
82
+ * The 'umbrella' is that sequence of triangles that covers the whole Voronoi cell and
83
+ * meet in the cell's centroid.
84
+ *
85
+ * @method getUmbrellaTriangles
86
+ * @instance
87
+ * @memberof VoronoiCell
88
+ * @return {Array<Triangle>}
89
+ **/
90
+ getUmbrellaTriangles(): Array<Triangle>;
74
91
  /**
75
92
  * Convert the voronoi cell path data to an SVG polygon data string.
76
93
  *
@@ -17,7 +17,8 @@
17
17
  * @modified 2020-08-12 Ported this class from vanilla JS to TypeScript.
18
18
  * @modified 2020-08-17 Added some missing type declarations.
19
19
  * @modified 2021-01-20 Members `triangles` and `sharedVertex` are now public.
20
- * @version 1.1.3
20
+ * @modified 2026-09-15 Added the `VoronoiCell.sharedVertexIndex` attribute.
21
+ * @version 1.2.0
21
22
  *
22
23
  * @file VoronoiCell
23
24
  * @public
@@ -26,6 +27,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
27
  exports.VoronoiCell = void 0;
27
28
  var Line_1 = require("../../Line");
28
29
  var Polygon_1 = require("../../Polygon");
30
+ var Triangle_1 = require("../../Triangle");
29
31
  var Vertex_1 = require("../../Vertex");
30
32
  var VoronoiCell = /** @class */ (function () {
31
33
  /**
@@ -38,15 +40,15 @@ var VoronoiCell = /** @class */ (function () {
38
40
  * @param {Vertex} sharedVertex This is the 'center' of the voronoi cell; all triangles must share
39
41
  * that vertex.
40
42
  **/
41
- function VoronoiCell(triangles, sharedVertex) {
42
- if (typeof triangles === 'undefined')
43
+ function VoronoiCell(triangles, sharedVertex, sharedVertexIndex) {
44
+ if (typeof triangles === "undefined")
43
45
  triangles = [];
44
- if (typeof sharedVertex === 'undefined')
46
+ if (typeof sharedVertex === "undefined")
45
47
  sharedVertex = new Vertex_1.Vertex(0, 0);
46
48
  this.triangles = triangles;
47
49
  this.sharedVertex = sharedVertex;
50
+ this.sharedVertexIndex = sharedVertexIndex;
48
51
  }
49
- ;
50
52
  /**
51
53
  * Check if the first and the last triangle in the path are NOT connected.
52
54
  *
@@ -59,7 +61,6 @@ var VoronoiCell = /** @class */ (function () {
59
61
  // There must be at least three triangles
60
62
  return this.triangles.length < 3 || !this.triangles[0].isAdjacent(this.triangles[this.triangles.length - 1]);
61
63
  };
62
- ;
63
64
  /**
64
65
  * Convert this Voronoi cell to a path polygon, consisting of all Voronoi cell corner points.
65
66
  *
@@ -74,7 +75,32 @@ var VoronoiCell = /** @class */ (function () {
74
75
  VoronoiCell.prototype.toPolygon = function () {
75
76
  return new Polygon_1.Polygon(this.toPathArray(), this.isOpen());
76
77
  };
77
- ;
78
+ /**
79
+ * Get all 'umbrella' triangles for this Voronoi cell.
80
+ *
81
+ * The 'umbrella' is that sequence of triangles that covers the whole Voronoi cell and
82
+ * meet in the cell's centroid.
83
+ *
84
+ * @method getUmbrellaTriangles
85
+ * @instance
86
+ * @memberof VoronoiCell
87
+ * @return {Array<Triangle>}
88
+ **/
89
+ VoronoiCell.prototype.getUmbrellaTriangles = function () {
90
+ var tris = [];
91
+ // for (var i = 0; i < this.triangles.length; i++) {
92
+ // var delaunayTri = this.triangles[i];
93
+ // var tri = new Triangle(this.sharedVertex, delaunayTri.b, delaunayTri.c);
94
+ // tris.push(tri);
95
+ // }
96
+ var vertices = this.toPathArray();
97
+ var n = vertices.length;
98
+ for (var i = 0; i < n; i++) {
99
+ var tri = new Triangle_1.Triangle(this.sharedVertex, vertices[i], vertices[(i + 1) % n]);
100
+ tris.push(tri);
101
+ }
102
+ return tris;
103
+ };
78
104
  /**
79
105
  * Convert the voronoi cell path data to an SVG polygon data string.
80
106
  *
@@ -89,9 +115,12 @@ var VoronoiCell = /** @class */ (function () {
89
115
  if (this.triangles.length == 0)
90
116
  return "";
91
117
  var arr = this.toPathArray();
92
- return arr.map(function (vert) { return '' + vert.x + ',' + vert.y; }).join(' ');
118
+ return arr
119
+ .map(function (vert) {
120
+ return "" + vert.x + "," + vert.y;
121
+ })
122
+ .join(" ");
93
123
  };
94
- ;
95
124
  /**
96
125
  * Convert the voronoi cell path data to an array.
97
126
  *
@@ -146,7 +175,6 @@ var VoronoiCell = /** @class */ (function () {
146
175
  var openEdgePoint = new Vertex_1.Vertex(perpendicular.x + (center.x - perpendicular.x) * 1000, perpendicular.y + (center.y - perpendicular.y) * 1000);
147
176
  return openEdgePoint;
148
177
  };
149
- ;
150
178
  /**
151
179
  * A helper function.
152
180
  *
@@ -170,13 +198,12 @@ var VoronoiCell = /** @class */ (function () {
170
198
  return tri.a;
171
199
  }
172
200
  // Here:
173
- // tri.c.equals(sharedVertex)
201
+ // tri.c.equals(sharedVertex)
174
202
  if (neighbour.a.equals(tri.a) || neighbour.b.equals(tri.a) || neighbour.c.equals(tri.a))
175
203
  return tri.b;
176
204
  else
177
205
  return tri.a;
178
206
  };
179
- ;
180
207
  return VoronoiCell;
181
208
  }());
182
209
  exports.VoronoiCell = VoronoiCell;
@@ -1 +1 @@
1
- {"version":3,"file":"VoronoiCell.js","sourceRoot":"","sources":["../../../ts/utils/datastructures/VoronoiCell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VoronoiCell.js","sourceRoot":"","sources":["../../../ts/utils/datastructures/VoronoiCell.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;IAuBI;;;AAEJ,mCAAkC;AAClC,yCAAwC;AACxC,2CAA0C;AAC1C,uCAAsC;AAEtC;IAsBE;;;;;;;;;QASI;IACJ,qBAAY,SAA0B,EAAE,YAAoB,EAAE,iBAAyB;QACrF,IAAI,OAAO,SAAS,KAAK,WAAW;YAAE,SAAS,GAAG,EAAE,CAAC;QACrD,IAAI,OAAO,YAAY,KAAK,WAAW;YAAE,YAAY,GAAG,IAAI,eAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;IAED;;;;;;;QAOI;IACJ,4BAAM,GAAN;QACE,yCAAyC;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/G,CAAC;IAED;;;;;;;;;;QAUI;IACJ,+BAAS,GAAT;QACE,OAAO,IAAI,iBAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;;;;QAUI;IACJ,0CAAoB,GAApB;QACE,IAAI,IAAI,GAAoB,EAAE,CAAC;QAC/B,oDAAoD;QACpD,yCAAyC;QACzC,6EAA6E;QAC7E,oBAAoB;QACpB,IAAI;QACJ,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,GAAG,GAAG,IAAI,mBAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;QASI;IACJ,qCAAe,GAAf;QACE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,IAAM,GAAG,GAAkB,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9C,OAAO,GAAG;aACP,GAAG,CAAC,UAAC,IAAY;YAChB,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED;;;;;;;;;QASI;IACJ,iCAAW,GAAX;QACE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC;QACpF,IAAM,GAAG,GAAkB,EAAE,CAAC;QAE9B,yBAAyB;QACzB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAE9H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;YAC7C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAED,uCAAuC;QACvC;;UAED;QAEC,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;;;QAcI;IACW,8BAAkB,GAAjC,UAAkC,GAAa,EAAE,KAAe,EAAE,YAAoB;QACpF,IAAM,MAAM,GAAW,GAAG,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;QACpD,uCAAuC;QACvC,IAAM,SAAS,GAAW,WAAW,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACpF,yGAAyG;QACzG,IAAM,aAAa,GAAW,IAAI,WAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACxF,kEAAkE;QAClE,IAAM,aAAa,GAAW,IAAI,eAAM,CACtC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,EACrD,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CACtD,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;;;;QAQI;IACW,+BAAmB,GAAlC,UAAmC,GAAa,EAAE,SAAmB,EAAE,YAAoB;QACzF,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,CAAC,CAAC;;gBACjG,OAAO,GAAG,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,CAAC,CAAC;;gBACjG,OAAO,GAAG,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,QAAQ;QACR,gCAAgC;QAChC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC,CAAC,CAAC;;YACjG,OAAO,GAAG,CAAC,CAAC,CAAC;IACpB,CAAC;IACH,kBAAC;AAAD,CAAC,AAvMD,IAuMC;AAvMY,kCAAW"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Refactored all Voronoi helper functions for drawing the diagram (demo 07) into this class.
3
+ *
4
+ * @author Ikaros Kappler
5
+ * @date 2026-09-13
6
+ * @modified 2026-09-15 Ported to Typescript.
7
+ * @version 1.0.1
8
+ */
9
+ import { Polygon } from "../../Polygon";
10
+ import { Triangle } from "../../Triangle";
11
+ import { DrawLib } from "../../interfaces";
12
+ import { PointSet } from "../datastructures/PointSet";
13
+ import { VoronoiCell } from "../datastructures/VoronoiCell";
14
+ export interface IVoronoiConfig {
15
+ makeVoronoiDiagram: boolean;
16
+ drawPoints: boolean;
17
+ drawTriangles: boolean;
18
+ drawCircumCircles: boolean;
19
+ drawCubicCurves: boolean;
20
+ fillVoronoiCells: boolean;
21
+ voronoiOutlineColor: string;
22
+ voronoiCellColor: string;
23
+ voronoiCubicThreshold: number;
24
+ voronoiCellScale: number;
25
+ clipVoronoiCells: boolean;
26
+ drawClipBox: boolean;
27
+ drawUnclippedVoronoiCells: boolean;
28
+ drawVoronoiIncircles: boolean;
29
+ drawVoronoiOutlines: boolean;
30
+ pointCount: number;
31
+ horizontalSafeArea: number;
32
+ verticalSafeArea: number;
33
+ voronoiCellLineWidth: number;
34
+ }
35
+ export interface IVoronoiContext {
36
+ pointSet: PointSet;
37
+ triangles: Array<Triangle>;
38
+ voronoiCells: Array<VoronoiCell>;
39
+ config: IVoronoiConfig;
40
+ }
41
+ export declare class VoronoiRenderer {
42
+ voronoiContext: IVoronoiContext;
43
+ constructor(voronoiContext: IVoronoiContext);
44
+ /**
45
+ * Draw the given triangle with the specified (CSS-) color.
46
+ *
47
+ * @name draw
48
+ * @instance
49
+ * @memberof VoronoiRenderer
50
+ * @param {DrawLib} draw
51
+ * @param {Triangle} t
52
+ * @param {string} color
53
+ * @return {void}
54
+ */
55
+ draw(draw: DrawLib<any>, fill: DrawLib<any>): void;
56
+ /**
57
+ * Draw the given triangle with the specified (CSS-) color.
58
+ *
59
+ * @name _drawCell
60
+ * @instance
61
+ * @private
62
+ * @memberof VoronoiRenderer
63
+ * @param {DrawLib} draw
64
+ * @param {Polygon} clipBoxPolygon
65
+ * @param {VoronoiCell} cell
66
+ * @return {void}
67
+ */
68
+ private _drawCell;
69
+ /**
70
+ * A function for drawing the triangles.
71
+ *
72
+ * @static
73
+ */
74
+ drawTriangles(draw: DrawLib<any>): void;
75
+ /**
76
+ * Draw the given triangle with the specified (CSS-) color.
77
+ *
78
+ * @static
79
+ * @name drawTriangle
80
+ * @memberof VoronoiRenderer
81
+ * @param {DrawLib} draw
82
+ * @param {Triangle} tri
83
+ * @param {string} color
84
+ * @return {void}
85
+ */
86
+ static drawTriangle(draw: DrawLib<any>, tri: Triangle, color: string): void;
87
+ /**
88
+ * Draw the circumcircles of all triangles.
89
+ */
90
+ static drawCircumCircles(draw: DrawLib<any>, triangles: Array<Triangle>): void;
91
+ /**
92
+ * Clip the convex (!) cell polygon by the convex (!) clipping polygon.
93
+ *
94
+ * @param cellPolygon
95
+ * @param clipBoxPolygon
96
+ * @returns
97
+ */
98
+ static clipVoronoiPolygon(cellPolygon: Polygon, clipBoxPolygon: Polygon): Polygon;
99
+ }
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * Refactored all Voronoi helper functions for drawing the diagram (demo 07) into this class.
4
+ *
5
+ * @author Ikaros Kappler
6
+ * @date 2026-09-13
7
+ * @modified 2026-09-15 Ported to Typescript.
8
+ * @version 1.0.1
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.VoronoiRenderer = void 0;
12
+ var Bounds_1 = require("../../Bounds");
13
+ var Polygon_1 = require("../../Polygon");
14
+ var convexPolygonIncircle_1 = require("../algorithms/convexPolygonIncircle");
15
+ var sutherlandHodgman_1 = require("../algorithms/sutherlandHodgman");
16
+ var cloneVertexArray_1 = require("../cloneVertexArray");
17
+ var VoronoiRenderer = /** @class */ (function () {
18
+ function VoronoiRenderer(voronoiContext) {
19
+ this.voronoiContext = voronoiContext;
20
+ }
21
+ /**
22
+ * Draw the given triangle with the specified (CSS-) color.
23
+ *
24
+ * @name draw
25
+ * @instance
26
+ * @memberof VoronoiRenderer
27
+ * @param {DrawLib} draw
28
+ * @param {Triangle} t
29
+ * @param {string} color
30
+ * @return {void}
31
+ */
32
+ VoronoiRenderer.prototype.draw = function (draw, fill) {
33
+ // Draw circumcircles
34
+ if (this.voronoiContext.config.drawCircumCircles) {
35
+ VoronoiRenderer.drawCircumCircles(draw, this.voronoiContext.triangles);
36
+ }
37
+ // An array of VoronoiCells.
38
+ var clipBoxPolygon = Bounds_1.Bounds.computeFromVertices(this.voronoiContext.pointSet.points).toPolygon();
39
+ if (this.voronoiContext.config.drawClipBox) {
40
+ draw.polygon(clipBoxPolygon, "rgba(192,192,192,0.25)");
41
+ }
42
+ for (var v in this.voronoiContext.voronoiCells) {
43
+ var cell = this.voronoiContext.voronoiCells[v];
44
+ this._drawCell(draw, fill, clipBoxPolygon, cell);
45
+ }
46
+ };
47
+ /**
48
+ * Draw the given triangle with the specified (CSS-) color.
49
+ *
50
+ * @name _drawCell
51
+ * @instance
52
+ * @private
53
+ * @memberof VoronoiRenderer
54
+ * @param {DrawLib} draw
55
+ * @param {Polygon} clipBoxPolygon
56
+ * @param {VoronoiCell} cell
57
+ * @return {void}
58
+ */
59
+ VoronoiRenderer.prototype._drawCell = function (draw, fill, clipBoxPolygon, cell) {
60
+ var _a, _b;
61
+ var cellPolygon = cell.toPolygon();
62
+ cellPolygon.scale(this.voronoiContext.config.voronoiCellScale, cell.sharedVertex);
63
+ // Draw large (unclipped) Voronoi cell
64
+ if (this.voronoiContext.config.drawVoronoiOutlines &&
65
+ (!this.voronoiContext.config.clipVoronoiCells || this.voronoiContext.config.drawUnclippedVoronoiCells)) {
66
+ draw.polyline(cellPolygon.vertices, false, this.voronoiContext.config.clipVoronoiCells ? "rgba(128,128,128,0.333)" : this.voronoiContext.config.voronoiOutlineColor, (_a = this.voronoiContext.config.voronoiCellLineWidth) !== null && _a !== void 0 ? _a : 2.0);
67
+ }
68
+ // Apply clipping?
69
+ if (this.voronoiContext.config.clipVoronoiCells) {
70
+ // Clone the array here: convert Array<XYCoords> to Array<Vertex>
71
+ // polygon = new Polygon(cloneVertexArray(sutherlandHodgman(polygon.vertices, clipBoxPolygon.vertices)), false);
72
+ cellPolygon = VoronoiRenderer.clipVoronoiPolygon(cellPolygon, clipBoxPolygon);
73
+ }
74
+ if (this.voronoiContext.config.drawVoronoiOutlines && this.voronoiContext.config.clipVoronoiCells) {
75
+ draw.polygon(cellPolygon, this.voronoiContext.config.voronoiOutlineColor, (_b = this.voronoiContext.config.voronoiCellLineWidth) !== null && _b !== void 0 ? _b : 2.0);
76
+ }
77
+ if ((!cell.isOpen() || this.voronoiContext.config.clipVoronoiCells) && cell.triangles.length >= 3) {
78
+ if (this.voronoiContext.config.drawCubicCurves) {
79
+ var cbezier = cellPolygon.toCubicBezierData(this.voronoiContext.config.voronoiCubicThreshold);
80
+ if (this.voronoiContext.config.fillVoronoiCells) {
81
+ fill.cubicBezierPath(cbezier, this.voronoiContext.config.voronoiCellColor);
82
+ }
83
+ else {
84
+ draw.cubicBezierPath(cbezier, this.voronoiContext.config.voronoiCellColor);
85
+ }
86
+ }
87
+ if (this.voronoiContext.config.drawVoronoiIncircles) {
88
+ var result = (0, convexPolygonIncircle_1.convexPolygonIncircle)(cellPolygon);
89
+ var circle = result.circle;
90
+ // var triangle = result.triangle;
91
+ // Here we should have found the best inlying circle (and the corresponding triangle)
92
+ // inside the Voronoi cell.
93
+ draw.circle(circle.center, circle.radius, "rgba(255,192,0,1.0)", 2);
94
+ }
95
+ } // END cell is not open
96
+ };
97
+ /**
98
+ * A function for drawing the triangles.
99
+ *
100
+ * @static
101
+ */
102
+ VoronoiRenderer.prototype.drawTriangles = function (draw) {
103
+ for (var i in this.voronoiContext.triangles) {
104
+ var t = this.voronoiContext.triangles[i];
105
+ VoronoiRenderer.drawTriangle(draw, t, this.voronoiContext.config.makeVoronoiDiagram ? "rgba(0,128,224,0.33)" : "#0088d8");
106
+ }
107
+ };
108
+ /**
109
+ * Draw the given triangle with the specified (CSS-) color.
110
+ *
111
+ * @static
112
+ * @name drawTriangle
113
+ * @memberof VoronoiRenderer
114
+ * @param {DrawLib} draw
115
+ * @param {Triangle} tri
116
+ * @param {string} color
117
+ * @return {void}
118
+ */
119
+ VoronoiRenderer.drawTriangle = function (draw, tri, color) {
120
+ // draw.line(t.a, t.b, color);
121
+ // draw.line(t.b, t.c, color);
122
+ // draw.line(t.c, t.a, color);
123
+ draw.polyline([tri.a, tri.b, tri.c], false, color);
124
+ };
125
+ /**
126
+ * Draw the circumcircles of all triangles.
127
+ */
128
+ VoronoiRenderer.drawCircumCircles = function (draw, triangles) {
129
+ for (var t in triangles) {
130
+ var cc = triangles[t].getCircumcircle();
131
+ draw.circle(cc.center, cc.radius, "#e86800");
132
+ }
133
+ };
134
+ /**
135
+ * Clip the convex (!) cell polygon by the convex (!) clipping polygon.
136
+ *
137
+ * @param cellPolygon
138
+ * @param clipBoxPolygon
139
+ * @returns
140
+ */
141
+ VoronoiRenderer.clipVoronoiPolygon = function (cellPolygon, clipBoxPolygon) {
142
+ return new Polygon_1.Polygon((0, cloneVertexArray_1.cloneVertexArray)((0, sutherlandHodgman_1.sutherlandHodgman)(cellPolygon.vertices, clipBoxPolygon.vertices)), false);
143
+ };
144
+ return VoronoiRenderer;
145
+ }());
146
+ exports.VoronoiRenderer = VoronoiRenderer;
147
+ //# sourceMappingURL=VoronoiRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoronoiRenderer.js","sourceRoot":"","sources":["../../../ts/utils/renderers/VoronoiRenderer.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,8 @@
22
22
  * @modified 2026-07-08 Adding the `Circle.setRadius` method (for chaining).
23
23
  * @mofified 2026-07-31 Adding the `radicalAxis(Circle)` method. Added the `Circle.circleUtils.createRadicalAxisHelperCircle` and `.circleDistance` helper methods.
24
24
  * @modified 2026-08-03 Adding `Circle.tangentsFromPoint`.
25
- * @version 1.7.0
25
+ * @modified 2026-08-16 Adding the `Circle.sectorAngleByArcLength` method and the `Circle.circleUtils.sectorAngleByArcLength` helper method.
26
+ * @version 1.8.0
26
27
  **/
27
28
  import { Bounds } from "./Bounds";
28
29
  import { Line } from "./Line";
@@ -251,6 +252,13 @@ export declare class Circle implements IBounded, ICircle, Intersectable, SVGSeri
251
252
  * @return {[Vector,Vector]} The two tangent vector
252
253
  **/
253
254
  tangentsFromPoint(vert: Vertex): [Vector, Vector];
255
+ /**
256
+ * Calculate inner sector angle for this circle and a given circle arc length.
257
+ *
258
+ * @param {number} sectorArcLength - The desired arc length (in units).
259
+ * @returns The sector's inner angle (in radians).
260
+ */
261
+ sectorAngleByArcLength(sectorArcLength: number): number;
254
262
  /**
255
263
  * Create a deep copy of this circle.
256
264
  *
@@ -277,5 +285,13 @@ export declare class Circle implements IBounded, ICircle, Intersectable, SVGSeri
277
285
  * If the circles intersect then the distance in negative.
278
286
  */
279
287
  circleDistance: (circleA: Circle, circleB: Circle) => number;
288
+ /**
289
+ * Calculate the inner sector angle for a given circle arc length and radius.
290
+ *
291
+ * @param {number} sectorArcLength - The desired arc length.
292
+ * @param {number} circleRadius - The circle's radius.
293
+ * @returns The sector angle in radians.
294
+ */
295
+ sectorAngleByArcLength: (sectorArcLength: number, circleRadius: number) => number;
280
296
  };
281
297
  }
package/src/esm/Circle.js CHANGED
@@ -22,7 +22,8 @@
22
22
  * @modified 2026-07-08 Adding the `Circle.setRadius` method (for chaining).
23
23
  * @mofified 2026-07-31 Adding the `radicalAxis(Circle)` method. Added the `Circle.circleUtils.createRadicalAxisHelperCircle` and `.circleDistance` helper methods.
24
24
  * @modified 2026-08-03 Adding `Circle.tangentsFromPoint`.
25
- * @version 1.7.0
25
+ * @modified 2026-08-16 Adding the `Circle.sectorAngleByArcLength` method and the `Circle.circleUtils.sectorAngleByArcLength` helper method.
26
+ * @version 1.8.0
26
27
  **/
27
28
  import { Bounds } from "./Bounds";
28
29
  import { Line } from "./Line";
@@ -403,6 +404,15 @@ export class Circle {
403
404
  }
404
405
  return [new Vector(intersection.a, vert), new Vector(intersection.b, vert)];
405
406
  }
407
+ /**
408
+ * Calculate inner sector angle for this circle and a given circle arc length.
409
+ *
410
+ * @param {number} sectorArcLength - The desired arc length (in units).
411
+ * @returns The sector's inner angle (in radians).
412
+ */
413
+ sectorAngleByArcLength(sectorArcLength) {
414
+ return Circle.circleUtils.sectorAngleByArcLength(sectorArcLength, this.radius);
415
+ }
406
416
  /**
407
417
  * Create a deep copy of this circle.
408
418
  *
@@ -481,6 +491,16 @@ Circle.circleUtils = {
481
491
  */
482
492
  circleDistance: (circleA, circleB) => {
483
493
  return circleA.center.distance(circleB.center) - circleA.radius - circleB.radius;
494
+ },
495
+ /**
496
+ * Calculate the inner sector angle for a given circle arc length and radius.
497
+ *
498
+ * @param {number} sectorArcLength - The desired arc length.
499
+ * @param {number} circleRadius - The circle's radius.
500
+ * @returns The sector angle in radians.
501
+ */
502
+ sectorAngleByArcLength: (sectorArcLength, circleRadius) => {
503
+ return sectorArcLength / circleRadius;
484
504
  }
485
505
  };
486
506
  //# sourceMappingURL=Circle.js.map