@revideo/2d 0.2.0 → 0.2.1

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 (195) hide show
  1. package/lib/code/CodeCursor.d.ts +74 -74
  2. package/lib/code/CodeCursor.js +352 -286
  3. package/lib/code/CodeDiffer.d.ts +21 -16
  4. package/lib/code/CodeDiffer.js +39 -41
  5. package/lib/code/CodeFragment.d.ts +16 -8
  6. package/lib/code/CodeFragment.js +36 -36
  7. package/lib/code/CodeHighlighter.d.ts +59 -59
  8. package/lib/code/CodeHighlighter.js +1 -1
  9. package/lib/code/CodeMetrics.d.ts +12 -8
  10. package/lib/code/CodeMetrics.js +26 -24
  11. package/lib/code/CodeRange.d.ts +21 -5
  12. package/lib/code/CodeRange.js +131 -124
  13. package/lib/code/CodeScope.d.ts +18 -8
  14. package/lib/code/CodeScope.js +59 -61
  15. package/lib/code/CodeSelection.d.ts +9 -4
  16. package/lib/code/CodeSelection.js +8 -8
  17. package/lib/code/CodeSignal.d.ts +74 -47
  18. package/lib/code/CodeSignal.js +206 -189
  19. package/lib/code/CodeTokenizer.d.ts +1 -1
  20. package/lib/code/CodeTokenizer.js +41 -41
  21. package/lib/code/DefaultHighlightStyle.d.ts +2 -2
  22. package/lib/code/DefaultHighlightStyle.js +96 -96
  23. package/lib/code/LezerHighlighter.d.ts +21 -19
  24. package/lib/code/LezerHighlighter.js +101 -101
  25. package/lib/code/diff.d.ts +12 -9
  26. package/lib/code/diff.js +218 -205
  27. package/lib/code/extractRange.d.ts +7 -4
  28. package/lib/code/extractRange.js +79 -71
  29. package/lib/code/index.d.ts +1 -1
  30. package/lib/code/index.js +1 -1
  31. package/lib/components/Audio.d.ts +11 -11
  32. package/lib/components/Audio.js +115 -109
  33. package/lib/components/Bezier.d.ts +18 -18
  34. package/lib/components/Bezier.js +86 -75
  35. package/lib/components/Circle.d.ts +95 -90
  36. package/lib/components/Circle.js +85 -74
  37. package/lib/components/Code.d.ts +244 -211
  38. package/lib/components/Code.js +317 -269
  39. package/lib/components/CodeBlock.d.ts +109 -67
  40. package/lib/components/CodeBlock.js +414 -373
  41. package/lib/components/CubicBezier.d.ts +36 -36
  42. package/lib/components/CubicBezier.js +52 -49
  43. package/lib/components/Curve.d.ts +208 -198
  44. package/lib/components/Curve.js +270 -269
  45. package/lib/components/Grid.d.ts +47 -42
  46. package/lib/components/Grid.js +63 -56
  47. package/lib/components/Icon.d.ts +55 -50
  48. package/lib/components/Icon.js +58 -50
  49. package/lib/components/Img.d.ts +86 -79
  50. package/lib/components/Img.js +193 -181
  51. package/lib/components/Knot.d.ts +97 -78
  52. package/lib/components/Knot.js +81 -60
  53. package/lib/components/Latex.d.ts +12 -12
  54. package/lib/components/Latex.js +77 -65
  55. package/lib/components/Layout.d.ts +455 -413
  56. package/lib/components/Layout.js +666 -681
  57. package/lib/components/Line.d.ts +61 -49
  58. package/lib/components/Line.js +216 -193
  59. package/lib/components/Media.d.ts +35 -35
  60. package/lib/components/Media.js +135 -134
  61. package/lib/components/Node.d.ts +875 -830
  62. package/lib/components/Node.js +1383 -1314
  63. package/lib/components/Path.d.ts +35 -14
  64. package/lib/components/Path.js +100 -89
  65. package/lib/components/Polygon.d.ts +60 -55
  66. package/lib/components/Polygon.js +71 -66
  67. package/lib/components/QuadBezier.d.ts +29 -29
  68. package/lib/components/QuadBezier.js +50 -45
  69. package/lib/components/Ray.d.ts +28 -28
  70. package/lib/components/Ray.js +71 -64
  71. package/lib/components/Rect.d.ts +115 -108
  72. package/lib/components/Rect.js +78 -72
  73. package/lib/components/SVG.d.ts +165 -139
  74. package/lib/components/SVG.js +609 -541
  75. package/lib/components/Shape.d.ts +44 -35
  76. package/lib/components/Shape.js +112 -127
  77. package/lib/components/Spline.d.ts +46 -40
  78. package/lib/components/Spline.js +190 -175
  79. package/lib/components/Txt.d.ts +55 -44
  80. package/lib/components/Txt.js +156 -155
  81. package/lib/components/TxtLeaf.d.ts +20 -16
  82. package/lib/components/TxtLeaf.js +177 -158
  83. package/lib/components/Video.d.ts +41 -41
  84. package/lib/components/Video.js +138 -135
  85. package/lib/components/View2D.d.ts +21 -21
  86. package/lib/components/View2D.js +98 -85
  87. package/lib/components/index.d.ts +1 -1
  88. package/lib/components/index.js +1 -1
  89. package/lib/components/types.d.ts +22 -9
  90. package/lib/components/types.js +1 -1
  91. package/lib/curves/ArcSegment.d.ts +36 -24
  92. package/lib/curves/ArcSegment.js +145 -94
  93. package/lib/curves/CircleSegment.d.ts +26 -16
  94. package/lib/curves/CircleSegment.js +56 -49
  95. package/lib/curves/CubicBezierSegment.d.ts +18 -13
  96. package/lib/curves/CubicBezierSegment.js +79 -46
  97. package/lib/curves/CurveDrawingInfo.d.ts +9 -9
  98. package/lib/curves/CurveDrawingInfo.js +1 -1
  99. package/lib/curves/CurvePoint.d.ts +13 -13
  100. package/lib/curves/CurvePoint.js +1 -1
  101. package/lib/curves/CurveProfile.d.ts +5 -5
  102. package/lib/curves/CurveProfile.js +1 -1
  103. package/lib/curves/KnotInfo.d.ts +8 -8
  104. package/lib/curves/KnotInfo.js +1 -1
  105. package/lib/curves/LineSegment.d.ts +19 -14
  106. package/lib/curves/LineSegment.js +42 -42
  107. package/lib/curves/Polynomial.d.ts +110 -110
  108. package/lib/curves/Polynomial.js +249 -239
  109. package/lib/curves/Polynomial2D.d.ts +20 -20
  110. package/lib/curves/Polynomial2D.js +46 -42
  111. package/lib/curves/PolynomialSegment.d.ts +42 -37
  112. package/lib/curves/PolynomialSegment.js +83 -81
  113. package/lib/curves/QuadBezierSegment.d.ts +12 -12
  114. package/lib/curves/QuadBezierSegment.js +71 -41
  115. package/lib/curves/Segment.d.ts +12 -7
  116. package/lib/curves/Segment.js +2 -3
  117. package/lib/curves/UniformPolynomialCurveSampler.d.ts +34 -34
  118. package/lib/curves/UniformPolynomialCurveSampler.js +68 -62
  119. package/lib/curves/createCurveProfileLerp.d.ts +17 -6
  120. package/lib/curves/createCurveProfileLerp.js +211 -208
  121. package/lib/curves/getBezierSplineProfile.d.ts +8 -4
  122. package/lib/curves/getBezierSplineProfile.js +145 -101
  123. package/lib/curves/getCircleProfile.d.ts +10 -4
  124. package/lib/curves/getCircleProfile.js +72 -40
  125. package/lib/curves/getPathProfile.d.ts +2 -2
  126. package/lib/curves/getPathProfile.js +135 -112
  127. package/lib/curves/getPointAtDistance.d.ts +7 -4
  128. package/lib/curves/getPointAtDistance.js +12 -12
  129. package/lib/curves/getPolylineProfile.d.ts +8 -4
  130. package/lib/curves/getPolylineProfile.js +67 -54
  131. package/lib/curves/getRectProfile.d.ts +9 -4
  132. package/lib/curves/getRectProfile.js +117 -52
  133. package/lib/curves/index.d.ts +1 -1
  134. package/lib/curves/index.js +1 -1
  135. package/lib/decorators/canvasStyleSignal.d.ts +3 -3
  136. package/lib/decorators/canvasStyleSignal.js +10 -10
  137. package/lib/decorators/colorSignal.d.ts +1 -1
  138. package/lib/decorators/colorSignal.js +7 -7
  139. package/lib/decorators/compound.d.ts +4 -2
  140. package/lib/decorators/compound.js +43 -23
  141. package/lib/decorators/computed.d.ts +1 -1
  142. package/lib/decorators/computed.js +9 -9
  143. package/lib/decorators/defaultStyle.d.ts +5 -2
  144. package/lib/decorators/defaultStyle.js +11 -11
  145. package/lib/decorators/filtersSignal.d.ts +28 -8
  146. package/lib/decorators/filtersSignal.js +87 -64
  147. package/lib/decorators/index.d.ts +1 -1
  148. package/lib/decorators/index.js +1 -1
  149. package/lib/decorators/initializers.d.ts +5 -2
  150. package/lib/decorators/initializers.js +18 -19
  151. package/lib/decorators/nodeName.d.ts +1 -1
  152. package/lib/decorators/nodeName.js +4 -4
  153. package/lib/decorators/signal.d.ts +40 -20
  154. package/lib/decorators/signal.js +113 -104
  155. package/lib/decorators/spacingSignal.d.ts +1 -1
  156. package/lib/decorators/spacingSignal.js +13 -13
  157. package/lib/decorators/vector2Signal.d.ts +13 -7
  158. package/lib/decorators/vector2Signal.js +15 -13
  159. package/lib/index.d.ts +1 -1
  160. package/lib/index.js +1 -1
  161. package/lib/jsx-dev-runtime.d.ts +3 -3
  162. package/lib/jsx-dev-runtime.js +3 -3
  163. package/lib/jsx-runtime.d.ts +19 -9
  164. package/lib/jsx-runtime.js +18 -18
  165. package/lib/partials/Filter.d.ts +24 -16
  166. package/lib/partials/Filter.js +69 -69
  167. package/lib/partials/Gradient.d.ts +30 -24
  168. package/lib/partials/Gradient.js +69 -58
  169. package/lib/partials/Pattern.d.ts +14 -9
  170. package/lib/partials/Pattern.js +30 -24
  171. package/lib/partials/ShaderConfig.d.ts +81 -74
  172. package/lib/partials/ShaderConfig.js +22 -23
  173. package/lib/partials/index.d.ts +1 -1
  174. package/lib/partials/index.js +1 -1
  175. package/lib/partials/types.d.ts +19 -6
  176. package/lib/partials/types.js +1 -1
  177. package/lib/scenes/Scene2D.d.ts +42 -23
  178. package/lib/scenes/Scene2D.js +161 -151
  179. package/lib/scenes/index.d.ts +1 -1
  180. package/lib/scenes/index.js +1 -1
  181. package/lib/scenes/makeScene2D.d.ts +7 -5
  182. package/lib/scenes/makeScene2D.js +10 -10
  183. package/lib/scenes/useScene2D.d.ts +2 -2
  184. package/lib/scenes/useScene2D.js +3 -3
  185. package/lib/utils/CanvasUtils.d.ts +93 -21
  186. package/lib/utils/CanvasUtils.js +186 -105
  187. package/lib/utils/diff.d.ts +25 -18
  188. package/lib/utils/diff.js +84 -87
  189. package/lib/utils/index.d.ts +1 -1
  190. package/lib/utils/index.js +1 -1
  191. package/lib/utils/is.d.ts +4 -2
  192. package/lib/utils/is.js +2 -2
  193. package/lib/utils/makeSignalExtensions.d.ts +11 -4
  194. package/lib/utils/makeSignalExtensions.js +17 -17
  195. package/package.json +4 -4
@@ -1,21 +1,21 @@
1
- import { Vector2 } from '@revideo/core';
2
- import { LineSegment } from './LineSegment';
3
- import { getPointAtDistance } from './getPointAtDistance';
4
- import { getPolylineProfile } from './getPolylineProfile';
1
+ import {Vector2} from '@revideo/core';
2
+ import {LineSegment} from './LineSegment';
3
+ import {getPointAtDistance} from './getPointAtDistance';
4
+ import {getPolylineProfile} from './getPolylineProfile';
5
5
  /**
6
6
  * Split segments of polygon until distance between adjacent point is less than or equal maxLength. This function mutate original points.
7
7
  * @param points - Polygon points
8
8
  * @param maxLength - max distance between two point
9
9
  */
10
10
  function bisect(points, maxLength) {
11
- for (let i = 0; i < points.length - 1; i++) {
12
- const a = points[i];
13
- let b = points[i + 1];
14
- while (a.sub(b).magnitude > maxLength) {
15
- b = Vector2.lerp(a, b, 0.5);
16
- points.splice(i + 1, 0, b);
17
- }
11
+ for (let i = 0; i < points.length - 1; i++) {
12
+ const a = points[i];
13
+ let b = points[i + 1];
14
+ while (a.sub(b).magnitude > maxLength) {
15
+ b = Vector2.lerp(a, b, 0.5);
16
+ points.splice(i + 1, 0, b);
18
17
  }
18
+ }
19
19
  }
20
20
  /**
21
21
  * Convert curve which only contain LineSegment into polygon.
@@ -24,20 +24,18 @@ function bisect(points, maxLength) {
24
24
  * @returns - null if curve contain segment other than LineSegment
25
25
  */
26
26
  function exactPolygonPoints(curve, maxLength) {
27
- const points = [];
28
- let endPoint = null;
29
- for (const segment of curve.segments) {
30
- if (!(segment instanceof LineSegment))
31
- return null;
32
- points.push(segment.from);
33
- endPoint = segment.to;
34
- }
35
- if (endPoint)
36
- points.push(endPoint);
37
- if (!Number.isNaN(maxLength) && maxLength > 0) {
38
- bisect(points, maxLength);
39
- }
40
- return points;
27
+ const points = [];
28
+ let endPoint = null;
29
+ for (const segment of curve.segments) {
30
+ if (!(segment instanceof LineSegment)) return null;
31
+ points.push(segment.from);
32
+ endPoint = segment.to;
33
+ }
34
+ if (endPoint) points.push(endPoint);
35
+ if (!Number.isNaN(maxLength) && maxLength > 0) {
36
+ bisect(points, maxLength);
37
+ }
38
+ return points;
41
39
  }
42
40
  /**
43
41
  * Calculate area of polygon
@@ -45,10 +43,12 @@ function exactPolygonPoints(curve, maxLength) {
45
43
  * @returns - area of polygon
46
44
  */
47
45
  function polygonArea(points) {
48
- return (points.reduce((area, a, i) => {
49
- const b = points[(i + 1) % points.length];
50
- return area + (a.y * b.x - a.x * b.y);
51
- }, 0) / 2);
46
+ return (
47
+ points.reduce((area, a, i) => {
48
+ const b = points[(i + 1) % points.length];
49
+ return area + (a.y * b.x - a.x * b.y);
50
+ }, 0) / 2
51
+ );
52
52
  }
53
53
  /**
54
54
  * Convert curve into polygon by sampling curve profile
@@ -57,18 +57,20 @@ function polygonArea(points) {
57
57
  * @returns - always return polygon points
58
58
  */
59
59
  function approximatePolygonPoints(curve, maxLength) {
60
- const points = [];
61
- let numPoints = 3;
62
- if (!Number.isNaN(maxLength) && maxLength > 0) {
63
- numPoints = Math.max(numPoints, Math.ceil(curve.arcLength / maxLength));
64
- }
65
- for (let i = 0; i < numPoints; i += 1) {
66
- const point = getPointAtDistance(curve, curve.arcLength * (i / (numPoints - 1)));
67
- points.push(point.position);
68
- }
69
- if (polygonArea(points) > 0)
70
- points.reverse();
71
- return points;
60
+ const points = [];
61
+ let numPoints = 3;
62
+ if (!Number.isNaN(maxLength) && maxLength > 0) {
63
+ numPoints = Math.max(numPoints, Math.ceil(curve.arcLength / maxLength));
64
+ }
65
+ for (let i = 0; i < numPoints; i += 1) {
66
+ const point = getPointAtDistance(
67
+ curve,
68
+ curve.arcLength * (i / (numPoints - 1)),
69
+ );
70
+ points.push(point.position);
71
+ }
72
+ if (polygonArea(points) > 0) points.reverse();
73
+ return points;
72
74
  }
73
75
  /**
74
76
  * Split curve into subpaths
@@ -76,37 +78,38 @@ function approximatePolygonPoints(curve, maxLength) {
76
78
  * @returns - subpaths of curve
77
79
  */
78
80
  function splitCurve(curve) {
79
- if (curve.segments.length === 0)
80
- return [];
81
- let current = {
81
+ if (curve.segments.length === 0) return [];
82
+ let current = {
83
+ arcLength: 0,
84
+ minSin: 0,
85
+ segments: [],
86
+ closed: false,
87
+ };
88
+ let endPoint = null;
89
+ const composite = [current];
90
+ for (const segment of curve.segments) {
91
+ const start = segment.getPoint(0).position;
92
+ if (endPoint && !start.equals(endPoint)) {
93
+ current = {
82
94
  arcLength: 0,
83
95
  minSin: 0,
84
96
  segments: [],
85
97
  closed: false,
86
- };
87
- let endPoint = null;
88
- const composite = [current];
89
- for (const segment of curve.segments) {
90
- const start = segment.getPoint(0).position;
91
- if (endPoint && !start.equals(endPoint)) {
92
- current = {
93
- arcLength: 0,
94
- minSin: 0,
95
- segments: [],
96
- closed: false,
97
- };
98
- composite.push(current);
99
- }
100
- current.segments.push(segment);
101
- current.arcLength += segment.arcLength;
102
- endPoint = segment.getPoint(1).position;
103
- }
104
- for (const sub of composite) {
105
- sub.closed = sub.segments[0]
106
- .getPoint(0)
107
- .position.equals(sub.segments[sub.segments.length - 1].getPoint(1).position);
98
+ };
99
+ composite.push(current);
108
100
  }
109
- return composite;
101
+ current.segments.push(segment);
102
+ current.arcLength += segment.arcLength;
103
+ endPoint = segment.getPoint(1).position;
104
+ }
105
+ for (const sub of composite) {
106
+ sub.closed = sub.segments[0]
107
+ .getPoint(0)
108
+ .position.equals(
109
+ sub.segments[sub.segments.length - 1].getPoint(1).position,
110
+ );
111
+ }
112
+ return composite;
110
113
  }
111
114
  /**
112
115
  * Convert curve into polygon use best possible method
@@ -115,12 +118,13 @@ function splitCurve(curve) {
115
118
  * @returns - polgon points
116
119
  */
117
120
  function subcurveToPolygon(curve, maxLength) {
118
- const points = exactPolygonPoints(curve, maxLength) ||
119
- approximatePolygonPoints(curve, maxLength);
120
- return {
121
- points: [...points],
122
- closed: curve.closed,
123
- };
121
+ const points =
122
+ exactPolygonPoints(curve, maxLength) ||
123
+ approximatePolygonPoints(curve, maxLength);
124
+ return {
125
+ points: [...points],
126
+ closed: curve.closed,
127
+ };
124
128
  }
125
129
  /**
126
130
  * Calculate polygon perimeter
@@ -128,11 +132,10 @@ function subcurveToPolygon(curve, maxLength) {
128
132
  * @returns - perimeter of polygon
129
133
  */
130
134
  export function polygonLength(points) {
131
- return points.reduce((length, point, i) => {
132
- if (i)
133
- return length + points[i - 1].sub(point).magnitude;
134
- return 0;
135
- }, 0);
135
+ return points.reduce((length, point, i) => {
136
+ if (i) return length + points[i - 1].sub(point).magnitude;
137
+ return 0;
138
+ }, 0);
136
139
  }
137
140
  /**s
138
141
  * Sample additional points for polygon to better match its pair. This will mutate original points.
@@ -140,26 +143,29 @@ export function polygonLength(points) {
140
143
  * @param numPoints - number of points to be added
141
144
  */
142
145
  function addPoints(points, numPoints) {
143
- const desiredLength = points.length + numPoints;
144
- const step = polygonLength(points) / numPoints;
145
- let i = 0;
146
- let cursor = 0;
147
- let insertAt = step / 2;
148
- while (points.length < desiredLength) {
149
- const a = points[i];
150
- const b = points[(i + 1) % points.length];
151
- const length = a.sub(b).magnitude;
152
- if (insertAt <= cursor + length) {
153
- points.splice(i + 1, 0, length
154
- ? Vector2.lerp(a, b, (insertAt - cursor) / length)
155
- : new Vector2(a));
156
- insertAt += step;
157
- }
158
- else {
159
- cursor += length;
160
- i += 1;
161
- }
146
+ const desiredLength = points.length + numPoints;
147
+ const step = polygonLength(points) / numPoints;
148
+ let i = 0;
149
+ let cursor = 0;
150
+ let insertAt = step / 2;
151
+ while (points.length < desiredLength) {
152
+ const a = points[i];
153
+ const b = points[(i + 1) % points.length];
154
+ const length = a.sub(b).magnitude;
155
+ if (insertAt <= cursor + length) {
156
+ points.splice(
157
+ i + 1,
158
+ 0,
159
+ length
160
+ ? Vector2.lerp(a, b, (insertAt - cursor) / length)
161
+ : new Vector2(a),
162
+ );
163
+ insertAt += step;
164
+ } else {
165
+ cursor += length;
166
+ i += 1;
162
167
  }
168
+ }
163
169
  }
164
170
  /**
165
171
  * Calculate total moving point distance when morphing between polygon points
@@ -169,14 +175,14 @@ function addPoints(points, numPoints) {
169
175
  * @returns
170
176
  */
171
177
  export function calculateLerpDistance(points, reference, offset) {
172
- const len = points.length;
173
- let sumOfSquares = 0;
174
- for (let i = 0; i < reference.length; i += 1) {
175
- const a = points[(offset + i) % len];
176
- const b = reference[i];
177
- sumOfSquares += a.sub(b).squaredMagnitude;
178
- }
179
- return sumOfSquares;
178
+ const len = points.length;
179
+ let sumOfSquares = 0;
180
+ for (let i = 0; i < reference.length; i += 1) {
181
+ const a = points[(offset + i) % len];
182
+ const b = reference[i];
183
+ sumOfSquares += a.sub(b).squaredMagnitude;
184
+ }
185
+ return sumOfSquares;
180
186
  }
181
187
  /**
182
188
  * Rotate polygon in order to minimize moving points.
@@ -184,44 +190,45 @@ export function calculateLerpDistance(points, reference, offset) {
184
190
  * @param reference - polygon to be reference
185
191
  */
186
192
  function rotatePolygon(polygon, reference) {
187
- const { points, closed } = polygon;
188
- const len = points.length;
189
- if (!closed) {
190
- const originalDistance = calculateLerpDistance(points, reference.points, 0);
191
- const reversedPoints = [...points].reverse();
192
- const reversedDistance = calculateLerpDistance(reversedPoints, reference.points, 0);
193
- if (reversedDistance < originalDistance)
194
- polygon.points = reversedPoints;
193
+ const {points, closed} = polygon;
194
+ const len = points.length;
195
+ if (!closed) {
196
+ const originalDistance = calculateLerpDistance(points, reference.points, 0);
197
+ const reversedPoints = [...points].reverse();
198
+ const reversedDistance = calculateLerpDistance(
199
+ reversedPoints,
200
+ reference.points,
201
+ 0,
202
+ );
203
+ if (reversedDistance < originalDistance) polygon.points = reversedPoints;
204
+ } else {
205
+ let minDistance = Infinity;
206
+ let bestOffset = 0;
207
+ const last = points.pop();
208
+ // Closed polygon first point must equal last point
209
+ // When we rotate polygon, first point is changed which mean last point also must changed
210
+ // When we remove last point, calculateLerpDistance will assume last point is equal first point
211
+ // Proof:
212
+ // len = points.length = reference.length - 1
213
+ // When i = 0:
214
+ // (offset + i) % len = offset % len
215
+ // When i = reference.length - 1 or i = len
216
+ // (offset + i) % len = (offset + len) % len = offset % len
217
+ for (let offset = 0; offset < len; offset += 1) {
218
+ const distance = calculateLerpDistance(points, reference.points, offset);
219
+ if (distance < minDistance) {
220
+ minDistance = distance;
221
+ bestOffset = offset;
222
+ }
195
223
  }
196
- else {
197
- let minDistance = Infinity;
198
- let bestOffset = 0;
199
- const last = points.pop();
200
- // Closed polygon first point must equal last point
201
- // When we rotate polygon, first point is changed which mean last point also must changed
202
- // When we remove last point, calculateLerpDistance will assume last point is equal first point
203
- // Proof:
204
- // len = points.length = reference.length - 1
205
- // When i = 0:
206
- // (offset + i) % len = offset % len
207
- // When i = reference.length - 1 or i = len
208
- // (offset + i) % len = (offset + len) % len = offset % len
209
- for (let offset = 0; offset < len; offset += 1) {
210
- const distance = calculateLerpDistance(points, reference.points, offset);
211
- if (distance < minDistance) {
212
- minDistance = distance;
213
- bestOffset = offset;
214
- }
215
- }
216
- if (last)
217
- points.push(last);
218
- if (bestOffset) {
219
- points.pop();
220
- const spliced = points.splice(0, bestOffset);
221
- points.splice(points.length, 0, ...spliced);
222
- points.push(points[0]);
223
- }
224
+ if (last) points.push(last);
225
+ if (bestOffset) {
226
+ points.pop();
227
+ const spliced = points.splice(0, bestOffset);
228
+ points.splice(points.length, 0, ...spliced);
229
+ points.push(points[0]);
224
230
  }
231
+ }
225
232
  }
226
233
  /**
227
234
  * Round polygon's points coordinate to a specified amount of decimal
@@ -229,15 +236,15 @@ function rotatePolygon(polygon, reference) {
229
236
  * @param round - amount of decimal
230
237
  * @returns - new polygon point
231
238
  */
232
- function roundPolygon({ points, ...rest }, round) {
233
- const pow = round >= 1 ? 10 ** round : 1;
234
- return {
235
- points: points.map(point => {
236
- const [x, y] = [point.x, point.y].map(n => Math.round(n * pow) / pow);
237
- return new Vector2(x, y);
238
- }),
239
- ...rest,
240
- };
239
+ function roundPolygon({points, ...rest}, round) {
240
+ const pow = round >= 1 ? 10 ** round : 1;
241
+ return {
242
+ points: points.map(point => {
243
+ const [x, y] = [point.x, point.y].map(n => Math.round(n * pow) / pow);
244
+ return new Vector2(x, y);
245
+ }),
246
+ ...rest,
247
+ };
241
248
  }
242
249
  /**
243
250
  * Create two polygon to tween between sub curve/path
@@ -248,20 +255,18 @@ function roundPolygon({ points, ...rest }, round) {
248
255
  * @returns two polygon ready to tween
249
256
  */
250
257
  function getSubcurveInterpolationPolygon(from, to, precision, round) {
251
- const morphPrecision = precision;
252
- const fromRing = subcurveToPolygon(from, morphPrecision);
253
- const toRing = subcurveToPolygon(to, morphPrecision);
254
- const diff = fromRing.points.length - toRing.points.length;
255
- addPoints(fromRing.points, diff < 0 ? diff * -1 : 0);
256
- addPoints(toRing.points, diff > 0 ? diff : 0);
257
- if (!from.closed && to.closed)
258
- rotatePolygon(toRing, fromRing);
259
- else
260
- rotatePolygon(fromRing, toRing);
261
- return {
262
- from: roundPolygon(fromRing, round),
263
- to: roundPolygon(toRing, round),
264
- };
258
+ const morphPrecision = precision;
259
+ const fromRing = subcurveToPolygon(from, morphPrecision);
260
+ const toRing = subcurveToPolygon(to, morphPrecision);
261
+ const diff = fromRing.points.length - toRing.points.length;
262
+ addPoints(fromRing.points, diff < 0 ? diff * -1 : 0);
263
+ addPoints(toRing.points, diff > 0 ? diff : 0);
264
+ if (!from.closed && to.closed) rotatePolygon(toRing, fromRing);
265
+ else rotatePolygon(fromRing, toRing);
266
+ return {
267
+ from: roundPolygon(fromRing, round),
268
+ to: roundPolygon(toRing, round),
269
+ };
265
270
  }
266
271
  /**
267
272
  * Make two sub curve list have equal length
@@ -269,15 +274,15 @@ function getSubcurveInterpolationPolygon(from, to, precision, round) {
269
274
  * @param reference - Reference list
270
275
  */
271
276
  function balanceSubcurves(subcurves, reference) {
272
- for (let i = subcurves.length; i < reference.length; i++) {
273
- const point = reference[i].segments[0].getPoint(0).position;
274
- subcurves.push({
275
- arcLength: 0,
276
- closed: false,
277
- minSin: 0,
278
- segments: [new LineSegment(point, point)],
279
- });
280
- }
277
+ for (let i = subcurves.length; i < reference.length; i++) {
278
+ const point = reference[i].segments[0].getPoint(0).position;
279
+ subcurves.push({
280
+ arcLength: 0,
281
+ closed: false,
282
+ minSin: 0,
283
+ segments: [new LineSegment(point, point)],
284
+ });
285
+ }
281
286
  }
282
287
  /**
283
288
  * Create two polygon to tween between curve
@@ -288,13 +293,13 @@ function balanceSubcurves(subcurves, reference) {
288
293
  * @returns list that contain list of polygon before and after tween
289
294
  */
290
295
  function getInterpolationPolygon(from, to, precision, round) {
291
- const fromSub = splitCurve(from);
292
- const toSub = splitCurve(to);
293
- if (fromSub.length < toSub.length)
294
- balanceSubcurves(fromSub, toSub);
295
- else
296
- balanceSubcurves(toSub, fromSub);
297
- return fromSub.map((sub, i) => getSubcurveInterpolationPolygon(sub, toSub[i], precision, round));
296
+ const fromSub = splitCurve(from);
297
+ const toSub = splitCurve(to);
298
+ if (fromSub.length < toSub.length) balanceSubcurves(fromSub, toSub);
299
+ else balanceSubcurves(toSub, fromSub);
300
+ return fromSub.map((sub, i) =>
301
+ getSubcurveInterpolationPolygon(sub, toSub[i], precision, round),
302
+ );
298
303
  }
299
304
  /**
300
305
  * Add curve into another curve
@@ -302,10 +307,10 @@ function getInterpolationPolygon(from, to, precision, round) {
302
307
  * @param source - curve to add
303
308
  */
304
309
  function addCurveToCurve(target, source) {
305
- const { segments, arcLength, minSin } = source;
306
- target.segments.push(...segments);
307
- target.arcLength += arcLength;
308
- target.minSin = Math.min(target.minSin, minSin);
310
+ const {segments, arcLength, minSin} = source;
311
+ target.segments.push(...segments);
312
+ target.arcLength += arcLength;
313
+ target.minSin = Math.min(target.minSin, minSin);
309
314
  }
310
315
  /**
311
316
  * Interpolate between two polygon points.
@@ -315,17 +320,15 @@ function addCurveToCurve(target, source) {
315
320
  * @returns - new polygon points
316
321
  */
317
322
  export function polygonPointsLerp(from, to, value) {
318
- const points = [];
319
- if (value === 0)
320
- return [...from];
321
- if (value === 1)
322
- return [...to];
323
- for (let i = 0; i < from.length; i++) {
324
- const a = from[i];
325
- const b = to[i];
326
- points.push(Vector2.lerp(a, b, value));
327
- }
328
- return points;
323
+ const points = [];
324
+ if (value === 0) return [...from];
325
+ if (value === 1) return [...to];
326
+ for (let i = 0; i < from.length; i++) {
327
+ const a = from[i];
328
+ const b = to[i];
329
+ points.push(Vector2.lerp(a, b, value));
330
+ }
331
+ return points;
329
332
  }
330
333
  /**
331
334
  * Create interpolator to tween between two curve
@@ -334,18 +337,18 @@ export function polygonPointsLerp(from, to, value) {
334
337
  * @returns - curve interpolator
335
338
  */
336
339
  export function createCurveProfileLerp(a, b) {
337
- const interpolations = getInterpolationPolygon(a, b, 5, 4);
338
- return (progress) => {
339
- const curve = {
340
- segments: [],
341
- arcLength: 0,
342
- minSin: 1,
343
- };
344
- for (const { from, to } of interpolations) {
345
- const points = polygonPointsLerp(from.points, to.points, progress);
346
- addCurveToCurve(curve, getPolylineProfile(points, 0, false));
347
- }
348
- return curve;
340
+ const interpolations = getInterpolationPolygon(a, b, 5, 4);
341
+ return progress => {
342
+ const curve = {
343
+ segments: [],
344
+ arcLength: 0,
345
+ minSin: 1,
349
346
  };
347
+ for (const {from, to} of interpolations) {
348
+ const points = polygonPointsLerp(from.points, to.points, progress);
349
+ addCurveToCurve(curve, getPolylineProfile(points, 0, false));
350
+ }
351
+ return curve;
352
+ };
350
353
  }
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VydmVQcm9maWxlTGVycC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3VydmVzL2NyZWF0ZUN1cnZlUHJvZmlsZUxlcnAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBZ0J4RDs7OztHQUlHO0FBRUgsU0FBUyxNQUFNLENBQUMsTUFBaUIsRUFBRSxTQUFpQjtJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUVILFNBQVMsa0JBQWtCLENBQ3pCLEtBQXNCLEVBQ3RCLFNBQWlCO0lBRWpCLE1BQU0sTUFBTSxHQUFjLEVBQUUsQ0FBQztJ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
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VydmVQcm9maWxlTGVycC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3VydmVzL2NyZWF0ZUN1cnZlUHJvZmlsZUxlcnAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBZ0J4RDs7OztHQUlHO0FBRUgsU0FBUyxNQUFNLENBQUMsTUFBaUIsRUFBRSxTQUFpQjtJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUVILFNBQVMsa0JBQWtCLENBQ3pCLEtBQXNCLEVBQ3RCLFNBQWlCO0lBRWpCLE1BQU0sTUFBTSxHQUFjLEVBQUUsQ0FBQztJQUU3QixJQUFJLFFBQVEsR0FBbUIsSUFBSSxDQUFDO0lBQ3BDLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxDQUFDLE9BQU8sWUFBWSxXQUFXLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVuRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQixRQUFRLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFFSCxTQUFTLFdBQVcsQ0FBQyxNQUFpQjtJQUNwQyxPQUFPLENBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDM0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNWLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFFSCxTQUFTLHdCQUF3QixDQUMvQixLQUFzQixFQUN0QixTQUFpQjtJQUVqQixNQUFNLE1BQU0sR0FBYyxFQUFFLENBQUM7SUFFN0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUM5QixLQUFLLEVBQ0wsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUN4QyxDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFOUMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFFSCxTQUFTLFVBQVUsQ0FBQyxLQUFtQjtJQUNyQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUUzQyxJQUFJLE9BQU8sR0FBb0I7UUFDN0IsU0FBUyxFQUFFLENBQUM7UUFDWixNQUFNLEVBQUUsQ0FBQztRQUNULFFBQVEsRUFBRSxFQUFFO1FBQ1osTUFBTSxFQUFFLEtBQUs7S0FDZCxDQUFDO0lBRUYsSUFBSSxRQUFRLEdBQW1CLElBQUksQ0FBQztJQUVwQyxNQUFNLFNBQVMsR0FBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQyxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUUzQyxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPLEdBQUc7Z0JBQ1IsU0FBUyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxFQUFFLENBQUM7Z0JBQ1QsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEtBQUs7YUFDZCxDQUFDO1lBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMxQyxDQUFDO0lBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM1QixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ3pCLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDWCxRQUFRLENBQUMsTUFBTSxDQUNkLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDM0QsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFFSCxTQUFTLGlCQUFpQixDQUN4QixLQUFzQixFQUN0QixTQUFpQjtJQUVqQixNQUFNLE1BQU0sR0FDVixrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBQ3BDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3QyxPQUFPO1FBQ0wsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDbkIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO0tBQ3JCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUVILE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBaUI7SUFDN0MsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxJQUFJLENBQUM7WUFBRSxPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDMUQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQ7Ozs7R0FJRztBQUVILFNBQVMsU0FBUyxDQUFDLE1BQWlCLEVBQUUsU0FBaUI7SUFDckQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDaEQsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUUvQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVsQyxJQUFJLFFBQVEsSUFBSSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FDWCxDQUFDLEdBQUcsQ0FBQyxFQUNMLENBQUMsRUFDRCxNQUFNO2dCQUNKLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNsRCxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ25CLENBQUM7WUFDRixRQUFRLElBQUksSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLE1BQU0sQ0FBQztZQUNqQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBRUgsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUFpQixFQUNqQixTQUFvQixFQUNwQixNQUFjO0lBRWQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMxQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7SUFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsWUFBWSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7SUFDNUMsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7OztHQUlHO0FBRUgsU0FBUyxhQUFhLENBQUMsT0FBdUIsRUFBRSxTQUF5QjtJQUN2RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQyxHQUFHLE9BQU8sQ0FBQztJQUNqQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRTFCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdDLE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQzVDLGNBQWMsRUFDZCxTQUFTLENBQUMsTUFBTSxFQUNoQixDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUksZ0JBQWdCLEdBQUcsZ0JBQWdCO1lBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7SUFDM0UsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDM0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUUxQixtREFBbUQ7UUFDbkQseUZBQXlGO1FBQ3pGLCtGQUErRjtRQUMvRixTQUFTO1FBQ1QsNkNBQTZDO1FBQzdDLGNBQWM7UUFDZCxvQ0FBb0M7UUFDcEMsMkNBQTJDO1FBQzNDLDJEQUEyRDtRQUUzRCxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6RSxJQUFJLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztnQkFDM0IsV0FBVyxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBRUgsU0FBUyxZQUFZLENBQ25CLEVBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFpQixFQUNqQyxLQUFhO0lBRWIsTUFBTSxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU87UUFDTCxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdEUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxJQUFJO0tBQ1IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBRUgsU0FBUywrQkFBK0IsQ0FDdEMsSUFBcUIsRUFDckIsRUFBbUIsRUFDbkIsU0FBaUIsRUFDakIsS0FBYTtJQUViLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDekQsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRTNELFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTTtRQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7O1FBQzFELGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFckMsT0FBTztRQUNMLElBQUksRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztRQUNuQyxFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7S0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBRUgsU0FBUyxnQkFBZ0IsQ0FDdkIsU0FBNEIsRUFDNUIsU0FBNEI7SUFFNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzVELFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDYixTQUFTLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTSxFQUFFLENBQUM7WUFDVCxRQUFRLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBRUgsU0FBUyx1QkFBdUIsQ0FDOUIsSUFBa0IsRUFDbEIsRUFBZ0IsRUFDaEIsU0FBaUIsRUFDakIsS0FBYTtJQUViLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFN0IsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNO1FBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDOztRQUMvRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFdEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQzVCLCtCQUErQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUNqRSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFFSCxTQUFTLGVBQWUsQ0FBQyxNQUFvQixFQUFFLE1BQW9CO0lBQ2pFLE1BQU0sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUM3QyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFFSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLElBQWUsRUFDZixFQUFhLEVBQ2IsS0FBYTtJQUViLE1BQU0sTUFBTSxHQUFjLEVBQUUsQ0FBQztJQUM3QixJQUFJLEtBQUssS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEMsSUFBSSxLQUFLLEtBQUssQ0FBQztRQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRWhDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFFSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsQ0FBZSxFQUFFLENBQWU7SUFDckUsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFM0QsT0FBTyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtRQUMxQixNQUFNLEtBQUssR0FBaUI7WUFDMUIsUUFBUSxFQUFFLEVBQUU7WUFDWixTQUFTLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQztRQUNGLEtBQUssTUFBTSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN4QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkUsZUFBZSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
@@ -1,5 +1,5 @@
1
- import { CurveProfile } from './CurveProfile';
2
- import { KnotInfo } from './KnotInfo';
1
+ import {CurveProfile} from './CurveProfile';
2
+ import {KnotInfo} from './KnotInfo';
3
3
  /**
4
4
  * Calculate the curve profile of a spline based on a set of knots.
5
5
  *
@@ -8,5 +8,9 @@ import { KnotInfo } from './KnotInfo';
8
8
  * @param smoothness - The desired smoothness of the spline when using auto
9
9
  * calculated handles.
10
10
  */
11
- export declare function getBezierSplineProfile(knots: KnotInfo[], closed: boolean, smoothness: number): CurveProfile;
12
- //# sourceMappingURL=getBezierSplineProfile.d.ts.map
11
+ export declare function getBezierSplineProfile(
12
+ knots: KnotInfo[],
13
+ closed: boolean,
14
+ smoothness: number,
15
+ ): CurveProfile;
16
+ //# sourceMappingURL=getBezierSplineProfile.d.ts.map