plotboilerplate 1.18.0 → 1.20.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 (155) hide show
  1. package/README.md +1 -1
  2. package/dist/index.esm.js +244 -63
  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 +243 -74
  9. package/dist/plotboilerplate.min.js +1 -1
  10. package/package.json +1 -1
  11. package/src/cjs/Bounds.d.ts +14 -5
  12. package/src/cjs/Bounds.js +18 -8
  13. package/src/cjs/Bounds.js.map +1 -1
  14. package/src/cjs/CubicBezierCurve.d.ts +20 -3
  15. package/src/cjs/CubicBezierCurve.js +25 -2
  16. package/src/cjs/CubicBezierCurve.js.map +1 -1
  17. package/src/cjs/Line.d.ts +46 -4
  18. package/src/cjs/Line.js +60 -3
  19. package/src/cjs/Line.js.map +1 -1
  20. package/src/cjs/PlotBoilerplate.d.ts +5 -2
  21. package/src/cjs/PlotBoilerplate.js +52 -30
  22. package/src/cjs/PlotBoilerplate.js.map +1 -1
  23. package/src/cjs/Polygon.js +1 -1
  24. package/src/cjs/Polygon.js.map +1 -1
  25. package/src/cjs/VEllipseSector.d.ts +4 -3
  26. package/src/cjs/VEllipseSector.js +15 -8
  27. package/src/cjs/VEllipseSector.js.map +1 -1
  28. package/src/cjs/Vector.d.ts +14 -3
  29. package/src/cjs/Vector.js +21 -2
  30. package/src/cjs/Vector.js.map +1 -1
  31. package/src/cjs/Vertex.d.ts +33 -1
  32. package/src/cjs/Vertex.js +43 -1
  33. package/src/cjs/Vertex.js.map +1 -1
  34. package/src/cjs/drawutilssvg.d.ts +2 -1
  35. package/src/cjs/drawutilssvg.js +7 -19
  36. package/src/cjs/drawutilssvg.js.map +1 -1
  37. package/src/cjs/entry.js +1 -0
  38. package/src/cjs/interfaces/additionals.d.ts +95 -0
  39. package/src/cjs/interfaces/additionals.js +3 -0
  40. package/src/cjs/interfaces/additionals.js.map +1 -0
  41. package/src/cjs/interfaces/core.d.ts +7 -0
  42. package/src/cjs/interfaces/core.js +2 -0
  43. package/src/cjs/interfaces/core.js.map +1 -1
  44. package/src/cjs/interfaces/index.d.ts +1 -0
  45. package/src/cjs/interfaces/index.js +1 -0
  46. package/src/cjs/interfaces/index.js.map +1 -1
  47. package/src/cjs/utils/algorithms/arrayShuffle.d.ts +8 -0
  48. package/src/cjs/utils/algorithms/arrayShuffle.js +15 -0
  49. package/src/cjs/utils/algorithms/arrayShuffle.js.map +1 -0
  50. package/src/cjs/utils/algorithms/detectPaths.d.ts +21 -0
  51. package/src/cjs/utils/algorithms/detectPaths.js +169 -0
  52. package/src/cjs/utils/algorithms/detectPaths.js.map +1 -0
  53. package/src/cjs/utils/creategui.js +7 -0
  54. package/src/cjs/utils/datastructures/Color.d.ts +1 -1
  55. package/src/cjs/utils/datastructures/Color.js +4 -2
  56. package/src/cjs/utils/datastructures/Color.js.map +1 -1
  57. package/src/cjs/utils/datastructures/GenericPath.d.ts +75 -0
  58. package/src/cjs/utils/datastructures/GenericPath.js +105 -0
  59. package/src/cjs/utils/datastructures/GenericPath.js.map +1 -0
  60. package/src/cjs/utils/datastructures/GirihTile.d.ts +1 -1
  61. package/src/cjs/utils/io/FileDrop.d.ts +11 -1
  62. package/src/cjs/utils/io/FileDrop.js +41 -10
  63. package/src/cjs/utils/io/FileDrop.js.map +1 -1
  64. package/src/cjs/utils/parsers/svg/parseSVGPathData.d.ts +26 -0
  65. package/src/cjs/utils/parsers/svg/parseSVGPathData.js +463 -0
  66. package/src/cjs/utils/parsers/svg/parseSVGPathData.js.map +1 -0
  67. package/src/cjs/utils/parsers/svg/splitSVGPathData.d.ts +20 -0
  68. package/src/cjs/utils/parsers/svg/splitSVGPathData.js +49 -0
  69. package/src/cjs/utils/parsers/svg/splitSVGPathData.js.map +1 -0
  70. package/src/cjs/utils/parsers/svg/types.d.ts +43 -0
  71. package/src/cjs/utils/parsers/svg/types.js +16 -0
  72. package/src/cjs/utils/parsers/svg/types.js.map +1 -0
  73. package/src/esm/Bounds.d.ts +14 -5
  74. package/src/esm/Bounds.js +18 -8
  75. package/src/esm/Bounds.js.map +1 -1
  76. package/src/esm/CubicBezierCurve.d.ts +20 -3
  77. package/src/esm/CubicBezierCurve.js +25 -2
  78. package/src/esm/CubicBezierCurve.js.map +1 -1
  79. package/src/esm/Line.d.ts +46 -4
  80. package/src/esm/Line.js +60 -3
  81. package/src/esm/Line.js.map +1 -1
  82. package/src/esm/PlotBoilerplate.d.ts +5 -2
  83. package/src/esm/PlotBoilerplate.js +52 -30
  84. package/src/esm/PlotBoilerplate.js.map +1 -1
  85. package/src/esm/Polygon.js +1 -1
  86. package/src/esm/Polygon.js.map +1 -1
  87. package/src/esm/VEllipseSector.d.ts +4 -3
  88. package/src/esm/VEllipseSector.js +15 -8
  89. package/src/esm/VEllipseSector.js.map +1 -1
  90. package/src/esm/Vector.d.ts +13 -2
  91. package/src/esm/Vector.js +23 -4
  92. package/src/esm/Vector.js.map +1 -1
  93. package/src/esm/Vertex.d.ts +33 -1
  94. package/src/esm/Vertex.js +43 -1
  95. package/src/esm/Vertex.js.map +1 -1
  96. package/src/esm/drawutilssvg.d.ts +2 -1
  97. package/src/esm/drawutilssvg.js +7 -19
  98. package/src/esm/drawutilssvg.js.map +1 -1
  99. package/src/esm/entry.js +1 -0
  100. package/src/esm/interfaces/additionals.d.ts +95 -0
  101. package/src/esm/interfaces/additionals.js +2 -0
  102. package/src/esm/interfaces/additionals.js.map +1 -0
  103. package/src/esm/interfaces/core.d.ts +7 -0
  104. package/src/esm/interfaces/core.js +2 -0
  105. package/src/esm/interfaces/core.js.map +1 -1
  106. package/src/esm/interfaces/index.d.ts +1 -0
  107. package/src/esm/interfaces/index.js +1 -0
  108. package/src/esm/interfaces/index.js.map +1 -1
  109. package/src/esm/utils/algorithms/arrayShuffle.d.ts +8 -0
  110. package/src/esm/utils/algorithms/arrayShuffle.js +11 -0
  111. package/src/esm/utils/algorithms/arrayShuffle.js.map +1 -0
  112. package/src/esm/utils/algorithms/detectPaths.d.ts +21 -0
  113. package/src/esm/utils/algorithms/detectPaths.js +165 -0
  114. package/src/esm/utils/algorithms/detectPaths.js.map +1 -0
  115. package/src/esm/utils/datastructures/Color.d.ts +1 -1
  116. package/src/esm/utils/datastructures/Color.js +4 -2
  117. package/src/esm/utils/datastructures/Color.js.map +1 -1
  118. package/src/esm/utils/datastructures/GenericPath.d.ts +75 -0
  119. package/src/esm/utils/datastructures/GenericPath.js +100 -0
  120. package/src/esm/utils/datastructures/GenericPath.js.map +1 -0
  121. package/src/esm/utils/datastructures/GirihTile.d.ts +1 -1
  122. package/src/esm/utils/io/FileDrop.d.ts +11 -1
  123. package/src/esm/utils/io/FileDrop.js +41 -10
  124. package/src/esm/utils/io/FileDrop.js.map +1 -1
  125. package/src/esm/utils/parsers/svg/parseSVGPathData.d.ts +26 -0
  126. package/src/esm/utils/parsers/svg/parseSVGPathData.js +459 -0
  127. package/src/esm/utils/parsers/svg/parseSVGPathData.js.map +1 -0
  128. package/src/esm/utils/parsers/svg/splitSVGPathData.d.ts +20 -0
  129. package/src/esm/utils/parsers/svg/splitSVGPathData.js +45 -0
  130. package/src/esm/utils/parsers/svg/splitSVGPathData.js.map +1 -0
  131. package/src/esm/utils/parsers/svg/types.d.ts +43 -0
  132. package/src/esm/utils/parsers/svg/types.js +15 -0
  133. package/src/esm/utils/parsers/svg/types.js.map +1 -0
  134. package/src/ts/Bounds.ts +19 -8
  135. package/src/ts/CubicBezierCurve.ts +29 -4
  136. package/src/ts/Line.ts +70 -6
  137. package/src/ts/PlotBoilerplate.ts +57 -35
  138. package/src/ts/Polygon.ts +1 -1
  139. package/src/ts/VEllipseSector.ts +22 -15
  140. package/src/ts/Vector.ts +24 -4
  141. package/src/ts/Vertex.ts +46 -1
  142. package/src/ts/drawutilssvg.ts +8 -19
  143. package/src/ts/interfaces/additionals.ts +105 -0
  144. package/src/ts/interfaces/core.ts +5 -0
  145. package/src/ts/interfaces/index.ts +1 -0
  146. package/src/ts/utils/algorithms/arrayShuffle.ts +11 -0
  147. package/src/ts/utils/algorithms/detectPaths.ts +195 -0
  148. package/src/ts/utils/datastructures/Color.ts +8 -4
  149. package/src/ts/utils/datastructures/GenericPath.ts +113 -0
  150. package/src/ts/utils/datastructures/GirihTile.ts +1 -1
  151. package/src/ts/utils/io/FileDrop.ts +51 -10
  152. package/src/ts/utils/parsers/svg/parseSVGPathData.ts +572 -0
  153. package/src/ts/utils/parsers/svg/splitSVGPathData.ts +50 -0
  154. package/src/ts/utils/parsers/svg/types.ts +70 -0
  155. package/changelog.md +0 -731
@@ -0,0 +1,463 @@
1
+ "use strict";
2
+ /**
3
+ * Parse SVG path data strings and convert to PlotBoilerplate path objects.
4
+ *
5
+ * As this parser function does not detect all possible path data strings it should cover the most daily use-cases.
6
+ *
7
+ * For more insight see
8
+ * https://www.w3.org/TR/SVG/paths.html
9
+ *
10
+ * @author Ikaros Kappler
11
+ * @date 2022-11-06
12
+ * @modified 2022-12-21 (winter solstice) Porting this to Typescript.
13
+ * @version 0.0.1-alpha
14
+ **/
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.parseSVGPathData = void 0;
17
+ var CubicBezierCurve_1 = require("../../../CubicBezierCurve");
18
+ var Line_1 = require("../../../Line");
19
+ var VEllipseSector_1 = require("../../../VEllipseSector");
20
+ var Vertex_1 = require("../../../Vertex");
21
+ var splitSVGPathData_1 = require("./splitSVGPathData");
22
+ var DEG_TO_RAD = Math.PI / 180;
23
+ /**
24
+ * Transform the given path data (translate and scale. rotating is not intended here).
25
+ *
26
+ * @date 2022-11-06
27
+ *
28
+ * @name parseSVGPathData
29
+ * @static
30
+ * @param {string} data - The data to parse.
31
+ * @return An array of straight line segments (Line) or curve segments (CubicBezierCurve) representing the path.
32
+ */
33
+ var parseSVGPathData = function (dataString) {
34
+ var dataElements = splitSVGPathData_1.splitSVGPathData(dataString);
35
+ if (!dataElements) {
36
+ return null;
37
+ }
38
+ // Array<PathSegments>
39
+ var result = [];
40
+ var i = 0;
41
+ var firstPoint = { x: NaN, y: NaN };
42
+ var lastPoint = { x: NaN, y: NaN };
43
+ var lastControlPoint = { x: NaN, y: NaN };
44
+ while (i < dataElements.length) {
45
+ // Could this also be SVGPathShorthandQuadraticCurveToCommand?
46
+ var data = dataElements[i];
47
+ var cmd = data[0];
48
+ // console.log("cmd", cmd, "data", data);
49
+ switch (data[0]) {
50
+ case "M":
51
+ // MoveTo: M|m x y
52
+ _handleMove(data, false, firstPoint, lastPoint, lastControlPoint, result);
53
+ break;
54
+ case "m":
55
+ // MoveTo: M|m x y
56
+ _handleMove(data, true, firstPoint, lastPoint, lastControlPoint, result);
57
+ break;
58
+ case "L":
59
+ // LineTo L|l x y
60
+ _handleLineTo(data, false, firstPoint, lastPoint, lastControlPoint, result);
61
+ break;
62
+ case "l":
63
+ // LineTo L|l x y
64
+ _handleLineTo(data, true, firstPoint, lastPoint, lastControlPoint, result);
65
+ break;
66
+ case "H":
67
+ // HorizontalLineTo: H|h x
68
+ _handleHorizontalLineTo(data, false, firstPoint, lastPoint, lastControlPoint, result);
69
+ break;
70
+ case "h":
71
+ // HorizontalLineTo: H|h x
72
+ _handleHorizontalLineTo(data, true, firstPoint, lastPoint, lastControlPoint, result);
73
+ break;
74
+ case "V":
75
+ // VerticalLineTo: V|v y
76
+ _handleVerticalLineTo(data, false, firstPoint, lastPoint, lastControlPoint, result);
77
+ break;
78
+ case "v":
79
+ // VerticalLineTo: V|v y
80
+ _handleVerticalLineTo(data, true, firstPoint, lastPoint, lastControlPoint, result);
81
+ break;
82
+ case "C":
83
+ // CurveTo: C|c x1 y1 x2 y2 x y
84
+ _handleCubicBezierTo(data, false, firstPoint, lastPoint, lastControlPoint, result);
85
+ break;
86
+ case "c":
87
+ // CurveTo: C|c x1 y1 x2 y2 x y
88
+ _handleCubicBezierTo(data, true, firstPoint, lastPoint, lastControlPoint, result);
89
+ break;
90
+ case "S":
91
+ _handleShorthandCubicCurveTo(data, false, firstPoint, lastPoint, lastControlPoint, result);
92
+ break;
93
+ case "s":
94
+ _handleShorthandCubicCurveTo(data, true, firstPoint, lastPoint, lastControlPoint, result);
95
+ break;
96
+ case "Q":
97
+ // QuadraticCurveTo: Q|q x1 y1 x y
98
+ _handleQuadraticCurveTo(data, false, firstPoint, lastPoint, lastControlPoint, result);
99
+ break;
100
+ case "q":
101
+ // QuadraticCurveTo: Q|q x1 y1 x y
102
+ _handleQuadraticCurveTo(data, true, firstPoint, lastPoint, lastControlPoint, result);
103
+ break;
104
+ case "A":
105
+ // EllipticalArcTo: A|a rx ry x-axis-rotation large-arc-flag sweep-flag x y
106
+ _handleArcTo(data, false, firstPoint, lastPoint, lastControlPoint, result);
107
+ break;
108
+ case "a":
109
+ // EllipticalArcTo: A|a rx ry x-axis-rotation large-arc-flag sweep-flag x y
110
+ _handleArcTo(data, true, firstPoint, lastPoint, lastControlPoint, result);
111
+ break;
112
+ case "z":
113
+ _handleClosePath(data, false, firstPoint, lastPoint, lastControlPoint, result);
114
+ break;
115
+ case "Z":
116
+ // ClosePath: Z|z (no arguments)
117
+ _handleClosePath(data, true, firstPoint, lastPoint, lastControlPoint, result);
118
+ // i++;
119
+ break;
120
+ default:
121
+ if (cmd === "T") {
122
+ throw "T command only allowed after q command.";
123
+ }
124
+ if (cmd === "t") {
125
+ throw "t command only allowed after q command.";
126
+ }
127
+ throw "Unknown SVG path command found: " + cmd + ".";
128
+ }
129
+ // Safepoint: continue reading token by token until something is recognized again
130
+ i++;
131
+ } // END while
132
+ return result;
133
+ }; // END parseSVGPathData
134
+ exports.parseSVGPathData = parseSVGPathData;
135
+ // Just update the current position
136
+ var _handleMove = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, _result) {
137
+ if (data.length < 3) {
138
+ throw "Unsufficient params for MOVE";
139
+ }
140
+ // result.push( new)
141
+ if (isRelative && !isNaN(lastPoint.x) && !isNaN(lastPoint.y)) {
142
+ lastPoint.x += Number(data[1]);
143
+ lastPoint.y += Number(data[2]);
144
+ lastControlPoint.x = lastPoint.x;
145
+ lastControlPoint.y = lastPoint.y;
146
+ }
147
+ else {
148
+ lastPoint.x = Number(data[1]);
149
+ lastPoint.y = Number(data[2]);
150
+ lastControlPoint.x = lastPoint.x;
151
+ lastControlPoint.y = lastPoint.y;
152
+ }
153
+ // console.log("AFTER MOVE", lastPoint);
154
+ if (isNaN(firstPoint.y)) {
155
+ firstPoint.x = lastPoint.x;
156
+ firstPoint.y = lastPoint.y;
157
+ }
158
+ };
159
+ // Draw a line segment from the current position
160
+ var _handleLineTo = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, result) {
161
+ // console.log("Handle LINETO", data);
162
+ if (data.length < 3) {
163
+ throw "Unsufficient params for LINETO";
164
+ }
165
+ // console.log("Y: ", Number(data[2]), "lastPoint", lastPoint);
166
+ // result.push( new)
167
+ var line = new Line_1.Line(new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint));
168
+ if (isRelative) {
169
+ line.b.x += Number(data[1]);
170
+ line.b.y += Number(data[2]);
171
+ }
172
+ else {
173
+ line.b.x = Number(data[1]);
174
+ line.b.y = Number(data[2]);
175
+ }
176
+ result.push(line);
177
+ lastPoint.x = line.b.x;
178
+ lastPoint.y = line.b.y;
179
+ lastControlPoint.x = line.b.x;
180
+ lastControlPoint.y = line.b.y;
181
+ if (isNaN(firstPoint.y)) {
182
+ firstPoint.x = line.a.x;
183
+ firstPoint.y = line.a.y;
184
+ }
185
+ };
186
+ var _handleHorizontalLineTo = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, result) {
187
+ // console.log("Handle HORIZONTALLINETO", data);
188
+ if (data.length < 2) {
189
+ throw "Unsufficient params for HORIZONTALLINETO";
190
+ }
191
+ // console.log("Y: ", Number(data[2]), "lastPoint", lastPoint);
192
+ // result.push( new)
193
+ var line = new Line_1.Line(new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint));
194
+ if (isRelative) {
195
+ line.b.x += Number(data[1]);
196
+ // line.b.y += Number(data[2]);
197
+ }
198
+ else {
199
+ line.b.x = Number(data[1]);
200
+ // line.b.y = Number(data[2]);
201
+ }
202
+ result.push(line);
203
+ lastPoint.x = line.b.x;
204
+ // lastPoint.y = line.b.y;
205
+ lastControlPoint.x = line.b.x;
206
+ if (isNaN(firstPoint.y)) {
207
+ firstPoint.x = line.a.x;
208
+ firstPoint.y = line.a.y;
209
+ }
210
+ };
211
+ var _handleVerticalLineTo = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, result) {
212
+ // console.log("Handle VERTICALLINETO", data);
213
+ if (data.length < 2) {
214
+ throw "Unsufficient params for VERTICALLINETO";
215
+ }
216
+ // console.log("Y: ", Number(data[2]), "lastPoint", lastPoint);
217
+ // result.push( new)
218
+ var line = new Line_1.Line(new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint));
219
+ if (isRelative) {
220
+ // line.b.x += Number(data[1]);
221
+ line.b.y += Number(data[1]);
222
+ }
223
+ else {
224
+ // line.b.x = Number(data[1]);
225
+ line.b.y = Number(data[1]);
226
+ }
227
+ result.push(line);
228
+ // lastPoint.x = line.b.x;
229
+ lastPoint.y = line.b.y;
230
+ lastControlPoint.y = line.b.y;
231
+ if (isNaN(firstPoint.y)) {
232
+ firstPoint.x = line.a.x;
233
+ firstPoint.y = line.a.y;
234
+ }
235
+ };
236
+ // CurveTo: C|c x1 y1 x2 y2 x y
237
+ var _handleCubicBezierTo = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, result) {
238
+ // console.log("Handle CUBICBEZIERTO", data);
239
+ if (data.length < 7) {
240
+ throw "Unsufficient params for CUBICBEZIERTO";
241
+ }
242
+ // console.log("Y: ", Number(data[2]), "lastPoint", lastPoint);
243
+ // result.push( new)
244
+ var curve = new CubicBezierCurve_1.CubicBezierCurve(new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint));
245
+ if (isRelative) {
246
+ curve.startControlPoint.x += Number(data[1]);
247
+ curve.startControlPoint.y += Number(data[2]);
248
+ curve.endControlPoint.x += Number(data[3]);
249
+ curve.endControlPoint.y += Number(data[4]);
250
+ curve.endPoint.x += Number(data[5]);
251
+ curve.endPoint.y += Number(data[6]);
252
+ }
253
+ else {
254
+ curve.startControlPoint.x = Number(data[1]);
255
+ curve.startControlPoint.y = Number(data[2]);
256
+ curve.endControlPoint.x = Number(data[3]);
257
+ curve.endControlPoint.y = Number(data[4]);
258
+ curve.endPoint.x = Number(data[5]);
259
+ curve.endPoint.y = Number(data[6]);
260
+ }
261
+ result.push(curve);
262
+ lastPoint.x = curve.endPoint.x;
263
+ lastPoint.y = curve.endPoint.y;
264
+ lastControlPoint.x = curve.endControlPoint.x;
265
+ lastControlPoint.y = curve.endControlPoint.y;
266
+ if (isNaN(firstPoint.x)) {
267
+ firstPoint.x = curve.startPoint.x;
268
+ firstPoint.y = curve.startPoint.y;
269
+ }
270
+ };
271
+ // QuadraticCurveTo: Q|q x1 y1 x y
272
+ var _handleQuadraticCurveTo = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, result) {
273
+ // console.log("Handle QUADRATICBEZIERTO", data);
274
+ if (data.length < 5) {
275
+ throw "Unsufficient params for QUADRATICBEZIERTO";
276
+ }
277
+ // console.log("Y: ", Number(data[2]), "lastPoint", lastPoint);
278
+ // result.push( new)
279
+ var curve = new CubicBezierCurve_1.CubicBezierCurve(new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint));
280
+ if (isRelative) {
281
+ curve.startControlPoint.x += curve.startPoint.x + (Number(data[1]) - curve.startControlPoint.x); // * 0.666;
282
+ curve.startControlPoint.y += curve.startPoint.y + (Number(data[2]) - curve.startControlPoint.y); // * 0.666;
283
+ curve.endPoint.x += Number(data[3]);
284
+ curve.endPoint.y += Number(data[4]);
285
+ curve.endControlPoint.x = curve.startControlPoint.x;
286
+ curve.endControlPoint.y = curve.startControlPoint.y;
287
+ }
288
+ else {
289
+ curve.startControlPoint.x = curve.startPoint.x + (Number(data[1]) - curve.startControlPoint.x); // * 0.666;
290
+ curve.startControlPoint.y = curve.startPoint.y + (Number(data[2]) - curve.startControlPoint.y); // * 0.666;
291
+ curve.endPoint.x = Number(data[3]);
292
+ curve.endPoint.y = Number(data[4]);
293
+ curve.endControlPoint.x = curve.startControlPoint.x;
294
+ curve.endControlPoint.y = curve.startControlPoint.y;
295
+ }
296
+ // var lastQuadraticControlPoint = { x: Number(data[1]), y: Number(data[2]) };
297
+ var lastQuadraticControlPoint = { x: curve.endControlPoint.x, y: curve.endControlPoint.y };
298
+ // Convert quadratic curve to cubic curve
299
+ curve.startControlPoint.x = curve.startPoint.x + (curve.startControlPoint.x - curve.startPoint.x) * 0.666;
300
+ curve.startControlPoint.y = curve.startPoint.y + (curve.startControlPoint.y - curve.startPoint.y) * 0.666;
301
+ curve.endControlPoint.x = curve.endPoint.x + (curve.endControlPoint.x - curve.endPoint.x) * 0.666;
302
+ curve.endControlPoint.y = curve.endPoint.y + (curve.endControlPoint.y - curve.endPoint.y) * 0.666;
303
+ result.push(curve);
304
+ lastPoint.x = curve.endPoint.x;
305
+ lastPoint.y = curve.endPoint.y;
306
+ lastControlPoint.x = curve.endControlPoint.x;
307
+ lastControlPoint.y = curve.endControlPoint.y;
308
+ if (isNaN(firstPoint.x)) {
309
+ firstPoint.x = curve.startPoint.x;
310
+ firstPoint.y = curve.startPoint.y;
311
+ }
312
+ // 'T' or 't' command may follow
313
+ if (data.length >= 8) {
314
+ // TODO: think about this type cast!
315
+ var subData = data.slice(5);
316
+ // var lastQuadraticControlPoint = { x: Number(data[1]), y: Number(data[2]) };
317
+ if (subData[0] === "T") {
318
+ // _handleShorthandQuadraticCurveTo(subData, false, firstPoint, lastPoint, lastControlPoint, result);
319
+ _handleShorthandQuadraticCurveTo(subData, false, firstPoint, lastPoint, lastQuadraticControlPoint, result);
320
+ }
321
+ else if (subData[0] === "t") {
322
+ // _handleShorthandQuadraticCurveTo(subData, true, firstPoint, lastPoint, lastControlPoint, result);
323
+ _handleShorthandQuadraticCurveTo(subData, true, firstPoint, lastPoint, lastQuadraticControlPoint, result);
324
+ }
325
+ }
326
+ };
327
+ // This is a helper function and works only in combination with Quadratic Bézier Curves
328
+ // T|t x y
329
+ var _handleShorthandQuadraticCurveTo = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, result) {
330
+ // console.log("Handle SHORTHANDQUADRATICCURVETO", data);
331
+ if (data.length < 3) {
332
+ throw "Unsufficient params for SHORTHANDQUADRATICCURVETO";
333
+ }
334
+ var curve = new CubicBezierCurve_1.CubicBezierCurve(new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint));
335
+ if (isRelative) {
336
+ curve.endPoint.x += Number(data[1]);
337
+ curve.endPoint.y += Number(data[2]);
338
+ curve.startControlPoint.x += curve.startPoint.x - (lastControlPoint.x - lastPoint.x);
339
+ curve.startControlPoint.y += curve.startPoint.y - (lastControlPoint.y - lastPoint.y);
340
+ }
341
+ else {
342
+ curve.endPoint.x = Number(data[1]);
343
+ curve.endPoint.y = Number(data[2]);
344
+ curve.startControlPoint.x = curve.startPoint.x - (lastControlPoint.x - lastPoint.x);
345
+ curve.startControlPoint.y = curve.startPoint.y - (lastControlPoint.y - lastPoint.y);
346
+ }
347
+ // First handle as symmetrical cubic curve
348
+ curve.endControlPoint.x = curve.startControlPoint.x;
349
+ curve.endControlPoint.y = curve.startControlPoint.y;
350
+ // Convert quadratic curve to cubic curve
351
+ curve.startControlPoint.x = curve.startPoint.x + (curve.startControlPoint.x - curve.startPoint.x) * 0.666;
352
+ curve.startControlPoint.y = curve.startPoint.y + (curve.startControlPoint.y - curve.startPoint.y) * 0.666;
353
+ curve.endControlPoint.x = curve.endPoint.x + (curve.endControlPoint.x - curve.endPoint.x) * 0.666;
354
+ curve.endControlPoint.y = curve.endPoint.y + (curve.endControlPoint.y - curve.endPoint.y) * 0.666;
355
+ // console.log("ADDING T CURVE", curve);
356
+ result.push(curve);
357
+ lastPoint.x = curve.endPoint.x;
358
+ lastPoint.y = curve.endPoint.y;
359
+ lastControlPoint.x = curve.endControlPoint.x;
360
+ lastControlPoint.y = curve.endControlPoint.y;
361
+ if (isNaN(firstPoint.x)) {
362
+ firstPoint.x = curve.startPoint.x;
363
+ firstPoint.y = curve.startPoint.y;
364
+ }
365
+ };
366
+ // The S|s x2 y2 x y
367
+ var _handleShorthandCubicCurveTo = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, result) {
368
+ // console.log("Handle SHORTHANDCUBICBEZIERTO", data);
369
+ if (data.length < 5) {
370
+ throw "Unsufficient params for SHORTHANDCUBICBEZIERTO";
371
+ }
372
+ var curve = new CubicBezierCurve_1.CubicBezierCurve(new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(lastPoint));
373
+ if (isRelative) {
374
+ curve.startControlPoint.x = lastPoint.x - (lastControlPoint.x - lastPoint.x);
375
+ curve.startControlPoint.y = lastPoint.y - (lastControlPoint.y - lastPoint.y);
376
+ curve.endControlPoint.x += Number(data[1]);
377
+ curve.endControlPoint.y += Number(data[2]);
378
+ curve.endPoint.x += Number(data[3]);
379
+ curve.endPoint.y += Number(data[4]);
380
+ }
381
+ else {
382
+ curve.startControlPoint.x = lastPoint.x - (lastControlPoint.x - lastPoint.x);
383
+ curve.startControlPoint.y = lastPoint.y - (lastControlPoint.y - lastPoint.y);
384
+ curve.endControlPoint.x = Number(data[1]);
385
+ curve.endControlPoint.y = Number(data[2]);
386
+ curve.endPoint.x = Number(data[3]);
387
+ curve.endPoint.y = Number(data[4]);
388
+ }
389
+ result.push(curve);
390
+ lastPoint.x = curve.endPoint.x;
391
+ lastPoint.y = curve.endPoint.y;
392
+ lastControlPoint.x = curve.endControlPoint.x;
393
+ lastControlPoint.y = curve.endControlPoint.y;
394
+ if (isNaN(firstPoint.x)) {
395
+ firstPoint.x = curve.startPoint.x;
396
+ firstPoint.y = curve.startPoint.y;
397
+ }
398
+ };
399
+ // EllipticalArcTo: A|a rx ry x-axis-rotation large-arc-flag sweep-flag x y
400
+ var _handleArcTo = function (data, isRelative, firstPoint, lastPoint, lastControlPoint, result) {
401
+ // console.log("Handle ARCTO", data);
402
+ if (data.length < 8) {
403
+ throw "Unsufficient params for ARCTO";
404
+ }
405
+ var arcEndPoint = { x: Number(data[6]), y: Number(data[7]) };
406
+ if (isRelative) {
407
+ arcEndPoint.x += lastPoint.x;
408
+ arcEndPoint.y += lastPoint.y;
409
+ }
410
+ // console.log(
411
+ // "lastPoint.x",
412
+ // lastPoint.x, // x1
413
+ // "lastPoint.y",
414
+ // lastPoint.y, // y1
415
+ // "data[1]",
416
+ // Number(data[1]), // rx
417
+ // "data[2]",
418
+ // Number(data[2]), // ry
419
+ // "data[3]",
420
+ // Number(data[3]), // phi: number,
421
+ // "data[4]",
422
+ // Boolean(data[4]), // fa: boolean,
423
+ // "data[5]",
424
+ // Boolean(data[5]), // fs: boolean,
425
+ // "data[6]",
426
+ // arcEndPoint.x, // Number(data[6]), // x2: number,
427
+ // "data[7]",
428
+ // arcEndPoint.y // Number(data[7]) // y2: number
429
+ // );
430
+ // A 5 4 0 1 1 -10 -5
431
+ // TODO: respect relative/absolute here
432
+ var ellipseSector = VEllipseSector_1.VEllipseSector.ellipseSectorUtils.endpointToCenterParameters(lastPoint.x, lastPoint.y, Number(data[1]), Number(data[2]), Number(data[3]) * DEG_TO_RAD, Boolean(data[4]), Boolean(data[5]), arcEndPoint.x, arcEndPoint.y // Number(data[7]) // y2: number
433
+ );
434
+ // console.log("ellipseSector", ellipseSector);
435
+ var curves = ellipseSector.toCubicBezier(4); // 4 segments already seems to be a good approximation
436
+ for (var i = 0; i < curves.length; i++) {
437
+ result.push(curves[i]); // Destruct!
438
+ }
439
+ // result.push(ellipseSector.ellipse);
440
+ if (curves.length > 0) {
441
+ // console.log("curves", curves);
442
+ var lastCurve = curves[curves.length - 1];
443
+ lastPoint.x = lastCurve.endPoint.x;
444
+ lastPoint.y = lastCurve.endPoint.y;
445
+ lastControlPoint.x = lastCurve.endControlPoint.x;
446
+ lastControlPoint.y = lastCurve.endControlPoint.y;
447
+ if (isNaN(firstPoint.x)) {
448
+ firstPoint.x = curves[0].startPoint.x;
449
+ firstPoint.y = curves[0].startPoint.y;
450
+ }
451
+ }
452
+ // TODO: track first/last/control point
453
+ };
454
+ var _handleClosePath = function (_data, _isRelative, firstPoint, lastPoint, lastControlPoint, result) {
455
+ // console.log("Handle CLOSEPATH", "lastPoint", lastPoint, "firstPoint", firstPoint);
456
+ var line = new Line_1.Line(new Vertex_1.Vertex(lastPoint), new Vertex_1.Vertex(firstPoint));
457
+ result.push(line);
458
+ lastPoint.x = line.b.x;
459
+ lastPoint.y = line.b.y;
460
+ lastControlPoint.x = line.b.x;
461
+ lastControlPoint.y = line.b.y;
462
+ };
463
+ //# sourceMappingURL=parseSVGPathData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseSVGPathData.js","sourceRoot":"","sources":["../../../../ts/utils/parsers/svg/parseSVGPathData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Split SVG path data `d` strings.
3
+ *
4
+ * As this helper function does not detect all possible path data strings it should cover the most daily use-cases.
5
+ *
6
+ * For more insight see
7
+ * https://www.w3.org/TR/SVG/paths.html
8
+ *
9
+ * @author Ikaros Kappler
10
+ * @date 2022-11-22
11
+ * @modified 2022-12-21 Ported to Typescript
12
+ * @version 0.0.1-alpha
13
+ */
14
+ import { SVGPathCommand } from "./types";
15
+ /**
16
+ * @name splitSVGPathData
17
+ * @static
18
+ * @param {string} dataString - The SVG path data to split. This should be some string
19
+ **/
20
+ export declare const splitSVGPathData: (dataString: string) => Array<SVGPathCommand> | null;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * Split SVG path data `d` strings.
4
+ *
5
+ * As this helper function does not detect all possible path data strings it should cover the most daily use-cases.
6
+ *
7
+ * For more insight see
8
+ * https://www.w3.org/TR/SVG/paths.html
9
+ *
10
+ * @author Ikaros Kappler
11
+ * @date 2022-11-22
12
+ * @modified 2022-12-21 Ported to Typescript
13
+ * @version 0.0.1-alpha
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.splitSVGPathData = void 0;
17
+ /**
18
+ * @name splitSVGPathData
19
+ * @static
20
+ * @param {string} dataString - The SVG path data to split. This should be some string
21
+ **/
22
+ var splitSVGPathData = function (dataString) {
23
+ // Source
24
+ // https://javascript.plainenglish.io/june-3-parsing-and-validating-svg-paths-with-regex-7bd0e245115
25
+ var validCommand = /([ml](\s?-?((\d+(\.\d+)?)|(\.\d+)))[,\s]?(-?((\d+(\.\d+)?)|(\.\d+))))|([hv](\s?-?((\d+(\.\d+)?)|(\.\d+))))|(c(\s?-?((\d+(\.\d+)?)|(\.\d+)))([,\s]?(-?((\d+(\.\d+)?)|(\.\d+)))){5})|(q(\s?-?((\d+(\.\d+)?)|(\.\d+)))([,\s]?(-?((\d+(\.\d+)?)|(\.\d+)))){3}(\s?t?(\s?-?((\d+(\.\d+)?)|(\.\d+)))[,\s]?(-?((\d+(\.\d+)?)|(\.\d+))))*)|(a(\s?-?((\d+(\.\d+)?)|(\.\d+)))([,\s]?(-?((\d+(\.\d+)?)|(\.\d+)))){2}[,\s]?[01][,\s]+[01][,\s]+([,\s]?(-?((\d+(\.\d+)?)|(\.\d+)))){2})|(s(\s?-?((\d+(\.\d+)?)|(\.\d+)))([,\s]?(-?((\d+(\.\d+)?)|(\.\d+)))){3})|z/gi;
26
+ var dataElements = dataString.match(validCommand);
27
+ // console.log("Splitted: ", dataElements);
28
+ if (!dataElements) {
29
+ return null;
30
+ }
31
+ var result = [];
32
+ var i = 0;
33
+ while (i < dataElements.length) {
34
+ var token = dataElements[i];
35
+ // Ctwheels comment was really useful here
36
+ // https://stackoverflow.com/questions/47801455/what-is-the-regex-that-properly-splits-svg-d-attributes-into-tokens
37
+ var dataRaw = token.match(/-?(?:\d*\.)?\d+|[a-z]/gi);
38
+ if (dataRaw) {
39
+ result.push(dataRaw);
40
+ }
41
+ else {
42
+ // throw Error?
43
+ }
44
+ i++;
45
+ }
46
+ return result;
47
+ }; // END splitSVGPathData
48
+ exports.splitSVGPathData = splitSVGPathData;
49
+ //# sourceMappingURL=splitSVGPathData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitSVGPathData.js","sourceRoot":"","sources":["../../../../ts/utils/parsers/svg/splitSVGPathData.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAIH;;;;IAII;AACG,IAAM,gBAAgB,GAAG,UAAC,UAAkB;IACjD,SAAS;IACT,uGAAuG;IACvG,IAAM,YAAY,GAChB,uhBAAuhB,CAAC;IAE1hB,IAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpD,2CAA2C;IAC3C,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,IAAI,CAAC;KACb;IAED,IAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE;QAC9B,IAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,0CAA0C;QAC1C,sHAAsH;QACtH,IAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE;YACX,MAAM,CAAC,IAAI,CAAC,OAAyB,CAAC,CAAC;SACxC;aAAM;YACL,eAAe;SAChB;QACD,CAAC,EAAE,CAAC;KACL;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC,uBAAuB;AA5Bb,QAAA,gBAAgB,oBA4B3B"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Defining some basic SVG command types.
3
+ *
4
+ * As these types do not define all very possible path data strings they should cover the most daily use-cases.
5
+ *
6
+ * For more insight see
7
+ * https://www.w3.org/TR/SVG/paths.html
8
+ *
9
+ *
10
+ * @author Ikaros Kappler
11
+ * @date 2022-12-21 (winter solstice night – yes the days & nights are dark and I have nothing else to do)
12
+ * @version 0.0.1-alpha
13
+ */
14
+ export declare type NumericString = `${number}`;
15
+ export declare type BooleanString = "0" | "1" | `${boolean}`;
16
+ export declare type SVGPathMoveToCommand = ["M" | "m", NumericString, NumericString];
17
+ export declare type SVGPathLineToCommand = ["L" | "l", NumericString, NumericString];
18
+ export declare type SVGPathVerticalLineToCommand = ["V" | "v", NumericString];
19
+ export declare type SVGPathHorizontalLineToCommand = ["H" | "h", NumericString];
20
+ export declare type SVGPathQuadraticCurveToCommand = ["Q" | "q", NumericString, NumericString, NumericString, NumericString] | ["Q" | "q", NumericString, NumericString, NumericString, NumericString, "T" | "t", NumericString, NumericString];
21
+ export declare type SVGPathCubicCurveToCommand = [
22
+ "C" | "c",
23
+ NumericString,
24
+ NumericString,
25
+ NumericString,
26
+ NumericString,
27
+ NumericString,
28
+ NumericString
29
+ ];
30
+ export declare type SVGPathShorthandCubicCurveToCommand = ["S" | "s", NumericString, NumericString, NumericString, NumericString];
31
+ export declare type SVGPathArcToCommand = [
32
+ "A" | "a",
33
+ NumericString,
34
+ NumericString,
35
+ NumericString,
36
+ BooleanString,
37
+ BooleanString,
38
+ NumericString,
39
+ NumericString
40
+ ];
41
+ export declare type SVGPathCloseCommand = ["Z" | "z"];
42
+ export declare type SVGPathShorthandQuadraticCurveToCommand = ["T" | "t", NumericString, NumericString];
43
+ export declare type SVGPathCommand = SVGPathMoveToCommand | SVGPathLineToCommand | SVGPathVerticalLineToCommand | SVGPathHorizontalLineToCommand | SVGPathQuadraticCurveToCommand | SVGPathCubicCurveToCommand | SVGPathShorthandCubicCurveToCommand | SVGPathArcToCommand | SVGPathCloseCommand;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * Defining some basic SVG command types.
4
+ *
5
+ * As these types do not define all very possible path data strings they should cover the most daily use-cases.
6
+ *
7
+ * For more insight see
8
+ * https://www.w3.org/TR/SVG/paths.html
9
+ *
10
+ *
11
+ * @author Ikaros Kappler
12
+ * @date 2022-12-21 (winter solstice night – yes the days & nights are dark and I have nothing else to do)
13
+ * @version 0.0.1-alpha
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../ts/utils/parsers/svg/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG"}