plotboilerplate 1.19.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 (94) hide show
  1. package/README.md +1 -1
  2. package/dist/index.esm.js +81 -27
  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 +81 -39
  9. package/dist/plotboilerplate.min.js +1 -1
  10. package/package.json +1 -1
  11. package/src/cjs/Bounds.d.ts +4 -5
  12. package/src/cjs/Bounds.js +6 -8
  13. package/src/cjs/Bounds.js.map +1 -1
  14. package/src/cjs/PlotBoilerplate.d.ts +2 -1
  15. package/src/cjs/PlotBoilerplate.js +9 -3
  16. package/src/cjs/PlotBoilerplate.js.map +1 -1
  17. package/src/cjs/VEllipseSector.d.ts +4 -3
  18. package/src/cjs/VEllipseSector.js +15 -8
  19. package/src/cjs/VEllipseSector.js.map +1 -1
  20. package/src/cjs/Vertex.d.ts +33 -1
  21. package/src/cjs/Vertex.js +43 -1
  22. package/src/cjs/Vertex.js.map +1 -1
  23. package/src/cjs/drawutilssvg.d.ts +2 -1
  24. package/src/cjs/drawutilssvg.js +7 -19
  25. package/src/cjs/drawutilssvg.js.map +1 -1
  26. package/src/cjs/entry.js +1 -0
  27. package/src/cjs/interfaces/core.d.ts +3 -0
  28. package/src/cjs/interfaces/core.js +1 -0
  29. package/src/cjs/interfaces/core.js.map +1 -1
  30. package/src/cjs/utils/algorithms/detectPaths.d.ts +3 -2
  31. package/src/cjs/utils/creategui.js +7 -0
  32. package/src/cjs/utils/datastructures/Color.d.ts +1 -1
  33. package/src/cjs/utils/datastructures/Color.js +4 -2
  34. package/src/cjs/utils/datastructures/Color.js.map +1 -1
  35. package/src/cjs/utils/io/FileDrop.d.ts +11 -1
  36. package/src/cjs/utils/io/FileDrop.js +41 -10
  37. package/src/cjs/utils/io/FileDrop.js.map +1 -1
  38. package/src/cjs/utils/parsers/svg/parseSVGPathData.d.ts +26 -0
  39. package/src/cjs/utils/parsers/svg/parseSVGPathData.js +463 -0
  40. package/src/cjs/utils/parsers/svg/parseSVGPathData.js.map +1 -0
  41. package/src/cjs/utils/parsers/svg/splitSVGPathData.d.ts +20 -0
  42. package/src/cjs/utils/parsers/svg/splitSVGPathData.js +49 -0
  43. package/src/cjs/utils/parsers/svg/splitSVGPathData.js.map +1 -0
  44. package/src/cjs/utils/parsers/svg/types.d.ts +43 -0
  45. package/src/cjs/utils/parsers/svg/types.js +16 -0
  46. package/src/cjs/utils/parsers/svg/types.js.map +1 -0
  47. package/src/esm/Bounds.d.ts +4 -5
  48. package/src/esm/Bounds.js +6 -8
  49. package/src/esm/Bounds.js.map +1 -1
  50. package/src/esm/PlotBoilerplate.d.ts +2 -1
  51. package/src/esm/PlotBoilerplate.js +10 -4
  52. package/src/esm/PlotBoilerplate.js.map +1 -1
  53. package/src/esm/VEllipseSector.d.ts +4 -3
  54. package/src/esm/VEllipseSector.js +15 -8
  55. package/src/esm/VEllipseSector.js.map +1 -1
  56. package/src/esm/Vertex.d.ts +33 -1
  57. package/src/esm/Vertex.js +43 -1
  58. package/src/esm/Vertex.js.map +1 -1
  59. package/src/esm/drawutilssvg.d.ts +2 -1
  60. package/src/esm/drawutilssvg.js +7 -19
  61. package/src/esm/drawutilssvg.js.map +1 -1
  62. package/src/esm/entry.js +1 -0
  63. package/src/esm/interfaces/core.d.ts +3 -0
  64. package/src/esm/interfaces/core.js +1 -0
  65. package/src/esm/interfaces/core.js.map +1 -1
  66. package/src/esm/utils/algorithms/detectPaths.d.ts +3 -2
  67. package/src/esm/utils/algorithms/detectPaths.js.map +1 -1
  68. package/src/esm/utils/datastructures/Color.d.ts +1 -1
  69. package/src/esm/utils/datastructures/Color.js +4 -2
  70. package/src/esm/utils/datastructures/Color.js.map +1 -1
  71. package/src/esm/utils/io/FileDrop.d.ts +11 -1
  72. package/src/esm/utils/io/FileDrop.js +41 -10
  73. package/src/esm/utils/io/FileDrop.js.map +1 -1
  74. package/src/esm/utils/parsers/svg/parseSVGPathData.d.ts +26 -0
  75. package/src/esm/utils/parsers/svg/parseSVGPathData.js +459 -0
  76. package/src/esm/utils/parsers/svg/parseSVGPathData.js.map +1 -0
  77. package/src/esm/utils/parsers/svg/splitSVGPathData.d.ts +20 -0
  78. package/src/esm/utils/parsers/svg/splitSVGPathData.js +45 -0
  79. package/src/esm/utils/parsers/svg/splitSVGPathData.js.map +1 -0
  80. package/src/esm/utils/parsers/svg/types.d.ts +43 -0
  81. package/src/esm/utils/parsers/svg/types.js +15 -0
  82. package/src/esm/utils/parsers/svg/types.js.map +1 -0
  83. package/src/ts/Bounds.ts +6 -8
  84. package/src/ts/PlotBoilerplate.ts +11 -4
  85. package/src/ts/VEllipseSector.ts +22 -15
  86. package/src/ts/Vertex.ts +46 -1
  87. package/src/ts/drawutilssvg.ts +8 -19
  88. package/src/ts/interfaces/core.ts +3 -0
  89. package/src/ts/utils/algorithms/detectPaths.ts +1 -1
  90. package/src/ts/utils/datastructures/Color.ts +8 -4
  91. package/src/ts/utils/io/FileDrop.ts +51 -10
  92. package/src/ts/utils/parsers/svg/parseSVGPathData.ts +572 -0
  93. package/src/ts/utils/parsers/svg/splitSVGPathData.ts +50 -0
  94. package/src/ts/utils/parsers/svg/types.ts +70 -0
@@ -14,7 +14,8 @@
14
14
  * @author Ikaros Kappler
15
15
  * @date 2021-10-13
16
16
  * @modified 2022-01-31 (ported from the ngdg project, then generalized)
17
- * @version 2.0.0
17
+ * @modified 2023-01-03 Fixing some minor type issues and adding SVG reading capabilities.
18
+ * @version 2.1.0
18
19
  */
19
20
  Object.defineProperty(exports, "__esModule", { value: true });
20
21
  exports.FileDrop = void 0;
@@ -35,7 +36,7 @@ var FileDrop = /** @class */ (function () {
35
36
  event.preventDefault();
36
37
  event.stopPropagation();
37
38
  _this.element.style.opacity = "1.0";
38
- if (!event.dataTransfer.files || event.dataTransfer.files.length === 0) {
39
+ if (!event.dataTransfer || !event.dataTransfer.files || event.dataTransfer.files.length === 0) {
39
40
  // No files were dropped
40
41
  return;
41
42
  }
@@ -43,39 +44,66 @@ var FileDrop = /** @class */ (function () {
43
44
  // Multiple file drop is not nupported
44
45
  return;
45
46
  }
46
- if (!_this.fileDroppedCallbackJSON) {
47
- // No handling callback defined.
48
- return;
49
- }
47
+ // if (!this.fileDroppedCallbackJSON) {
48
+ // // No handling callback defined.
49
+ // return;
50
+ // }
50
51
  if (event.dataTransfer.files[0]) {
51
52
  var file_1 = event.dataTransfer.files[0];
52
53
  // console.log("file", file);
53
- if (file_1.type.match(/json.*/) && _this.fileDroppedCallbackJSON) {
54
+ if (file_1.type.match(/json.*/) && _this.fileDroppedCallbackJSON !== null) {
54
55
  var reader = new FileReader();
55
56
  reader.onload = function (readEvent) {
57
+ if (!readEvent.target) {
58
+ console.warn("Cannot process JSON ProgressEvent data: target is null.");
59
+ return;
60
+ }
56
61
  // Finished reading file data.
57
62
  var jsonObject = JSON.parse(readEvent.target.result);
58
63
  // TODO: what happens on fail?
59
- _this.fileDroppedCallbackJSON(jsonObject);
64
+ _this.fileDroppedCallbackJSON && _this.fileDroppedCallbackJSON(jsonObject);
60
65
  };
61
66
  reader.readAsText(file_1); // start reading the file data.
62
67
  }
63
68
  else if (file_1.type.match(/text\/plain.*/) && _this.fileDroppedCallbackText) {
64
69
  var reader = new FileReader();
65
70
  reader.onload = function (readEvent) {
71
+ if (!readEvent.target) {
72
+ console.warn("Cannot process Text ProgressEvent data: target is null.");
73
+ return;
74
+ }
66
75
  // Finished reading file data.
67
- _this.fileDroppedCallbackText(readEvent.target.result);
76
+ _this.fileDroppedCallbackText && _this.fileDroppedCallbackText(readEvent.target.result);
68
77
  };
69
78
  reader.readAsText(file_1); // start reading the file data.
70
79
  }
71
80
  else if (_this.fileDroppedCallbackBinary) {
72
81
  var reader = new FileReader();
73
82
  reader.onload = function (readEvent) {
83
+ if (!readEvent.target) {
84
+ console.warn("Cannot process Binary ProgressEvent data: target is null.");
85
+ return;
86
+ }
74
87
  // Finished reading file data.
75
- _this.fileDroppedCallbackBinary(new Blob([readEvent.target.result]), file_1);
88
+ _this.fileDroppedCallbackBinary &&
89
+ _this.fileDroppedCallbackBinary(new Blob([readEvent.target.result]), file_1);
76
90
  };
77
91
  reader.readAsBinaryString(file_1); // start reading the file data.
78
92
  }
93
+ else if (_this.fileDroppedCallbackSVG) {
94
+ var reader = new FileReader();
95
+ reader.onload = function (readEvent) {
96
+ if (!readEvent.target) {
97
+ console.warn("Cannot process SVG ProgressEvent data: target is null.");
98
+ return;
99
+ }
100
+ var parser = new DOMParser();
101
+ var doc = parser.parseFromString(readEvent.target.result, "image/svg+xml");
102
+ // Finished reading file data.
103
+ _this.fileDroppedCallbackSVG && _this.fileDroppedCallbackSVG(doc);
104
+ };
105
+ reader.readAsText(file_1); // start reading the file data.
106
+ }
79
107
  }
80
108
  };
81
109
  /**
@@ -128,6 +156,9 @@ var FileDrop = /** @class */ (function () {
128
156
  FileDrop.prototype.onFileTextDropped = function (callback) {
129
157
  this.fileDroppedCallbackText = callback;
130
158
  };
159
+ FileDrop.prototype.onFileSVGDropped = function (callback) {
160
+ this.fileDroppedCallbackSVG = callback;
161
+ };
131
162
  /**
132
163
  * Removes all listeners (drop, dragover and dragleave).
133
164
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FileDrop.js","sourceRoot":"","sources":["../../../ts/utils/io/FileDrop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileDrop.js","sourceRoot":"","sources":["../../../ts/utils/io/FileDrop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Parse SVG path data strings and convert to PlotBoilerplate path objects.
3
+ *
4
+ * As this parser 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-06
11
+ * @modified 2022-12-21 (winter solstice) Porting this to Typescript.
12
+ * @version 0.0.1-alpha
13
+ **/
14
+ import { CubicBezierCurve } from "../../../CubicBezierCurve";
15
+ import { Line } from "../../../Line";
16
+ /**
17
+ * Transform the given path data (translate and scale. rotating is not intended here).
18
+ *
19
+ * @date 2022-11-06
20
+ *
21
+ * @name parseSVGPathData
22
+ * @static
23
+ * @param {string} data - The data to parse.
24
+ * @return An array of straight line segments (Line) or curve segments (CubicBezierCurve) representing the path.
25
+ */
26
+ export declare const parseSVGPathData: (dataString: string) => Array<Line | CubicBezierCurve> | null;
@@ -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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"}