flo-mat 2.0.2 → 2.0.4

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 (216) hide show
  1. package/browser/index.js +8409 -8358
  2. package/browser/index.min.js +1 -1
  3. package/node/circle.d.ts +20 -20
  4. package/node/circle.js +31 -31
  5. package/node/compare-curvatures-at-interface.d.ts +19 -19
  6. package/node/compare-curvatures-at-interface.js +124 -124
  7. package/node/contact-point.d.ts +26 -26
  8. package/node/contact-point.js +25 -25
  9. package/node/cp-node/clone.d.ts +8 -8
  10. package/node/cp-node/clone.js +31 -31
  11. package/node/cp-node/remove.d.ts +9 -9
  12. package/node/cp-node/remove.js +19 -19
  13. package/node/cp-node.d.ts +202 -202
  14. package/node/cp-node.js +320 -320
  15. package/node/curve.d.ts +46 -46
  16. package/node/curve.js +88 -88
  17. package/node/debug/cp-node-for-debugging.d.ts +11 -11
  18. package/node/debug/cp-node-for-debugging.js +1 -1
  19. package/node/debug/debug-elem-types.d.ts +32 -32
  20. package/node/debug/debug-elem-types.js +1 -1
  21. package/node/debug/debug.d.ts +50 -50
  22. package/node/debug/debug.js +75 -75
  23. package/node/debug/functions/draw-elem/bounding-hull.d.ts +3 -3
  24. package/node/debug/functions/draw-elem/bounding-hull.js +7 -7
  25. package/node/debug/functions/draw-elem/branch.d.ts +4 -4
  26. package/node/debug/functions/draw-elem/branch.js +22 -22
  27. package/node/debug/functions/draw-elem/culls.d.ts +4 -4
  28. package/node/debug/functions/draw-elem/culls.js +21 -21
  29. package/node/debug/functions/draw-elem/draw-circle-percent.d.ts +3 -3
  30. package/node/debug/functions/draw-elem/draw-circle-percent.js +12 -12
  31. package/node/debug/functions/draw-elem/draw-elem.d.ts +8 -8
  32. package/node/debug/functions/draw-elem/draw-elem.js +45 -45
  33. package/node/debug/functions/draw-elem/dull-corner.d.ts +4 -4
  34. package/node/debug/functions/draw-elem/dull-corner.js +10 -10
  35. package/node/debug/functions/draw-elem/leaves.d.ts +4 -4
  36. package/node/debug/functions/draw-elem/leaves.js +12 -12
  37. package/node/debug/functions/draw-elem/loop.d.ts +4 -4
  38. package/node/debug/functions/draw-elem/loop.js +11 -11
  39. package/node/debug/functions/draw-elem/loops.d.ts +4 -4
  40. package/node/debug/functions/draw-elem/loops.js +6 -6
  41. package/node/debug/functions/draw-elem/loose-bounding-box.d.ts +3 -3
  42. package/node/debug/functions/draw-elem/loose-bounding-box.js +9 -9
  43. package/node/debug/functions/draw-elem/mat.d.ts +4 -4
  44. package/node/debug/functions/draw-elem/mat.js +30 -30
  45. package/node/debug/functions/draw-elem/max-vertex.d.ts +4 -4
  46. package/node/debug/functions/draw-elem/max-vertex.js +8 -8
  47. package/node/debug/functions/draw-elem/min-y.d.ts +4 -4
  48. package/node/debug/functions/draw-elem/min-y.js +13 -13
  49. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.d.ts +4 -4
  50. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js +12 -12
  51. package/node/debug/functions/draw-elem/one-prong.d.ts +4 -4
  52. package/node/debug/functions/draw-elem/one-prong.js +16 -16
  53. package/node/debug/functions/draw-elem/sharp-corner.d.ts +4 -4
  54. package/node/debug/functions/draw-elem/sharp-corner.js +9 -9
  55. package/node/debug/functions/draw-elem/three-prong.d.ts +4 -4
  56. package/node/debug/functions/draw-elem/three-prong.js +16 -16
  57. package/node/debug/functions/draw-elem/tight-bounding-box.d.ts +3 -3
  58. package/node/debug/functions/draw-elem/tight-bounding-box.js +7 -7
  59. package/node/debug/functions/draw-elem/two-prong.d.ts +4 -4
  60. package/node/debug/functions/draw-elem/two-prong.js +36 -36
  61. package/node/debug/functions/draw-elem/vertex.d.ts +4 -4
  62. package/node/debug/functions/draw-elem/vertex.js +27 -27
  63. package/node/debug/functions/general.d.ts +48 -48
  64. package/node/debug/functions/general.js +52 -52
  65. package/node/debug/functions/three-prong.d.ts +11 -11
  66. package/node/debug/functions/three-prong.js +184 -184
  67. package/node/debug/functions/two-prong.d.ts +13 -13
  68. package/node/debug/functions/two-prong.js +117 -117
  69. package/node/debug/three-prong-for-debugging.d.ts +31 -31
  70. package/node/debug/three-prong-for-debugging.js +20 -20
  71. package/node/debug/two-prong-for-debugging.d.ts +26 -26
  72. package/node/debug/two-prong-for-debugging.js +1 -1
  73. package/node/find-mats.d.ts +26 -26
  74. package/node/find-mats.js +122 -122
  75. package/node/get-boundary-bezier-parts-to-next.d.ts +9 -9
  76. package/node/get-boundary-bezier-parts-to-next.js +42 -42
  77. package/node/get-boundary-beziers-to-next.d.ts +8 -8
  78. package/node/get-boundary-beziers-to-next.js +44 -44
  79. package/node/get-bounding-box-.d.ts +2 -2
  80. package/node/get-bounding-box-.js +4 -4
  81. package/node/get-branches.d.ts +12 -12
  82. package/node/get-branches.js +68 -68
  83. package/node/get-curve/get-curve-between.d.ts +9 -9
  84. package/node/get-curve/get-curve-between.js +56 -56
  85. package/node/get-curve/get-edge-direction.d.ts +9 -9
  86. package/node/get-curve/get-edge-direction.js +53 -53
  87. package/node/get-curve-to-next.d.ts +9 -9
  88. package/node/get-curve-to-next.js +11 -11
  89. package/node/get-interface-ccw.d.ts +24 -24
  90. package/node/get-interface-ccw.js +97 -97
  91. package/node/index.d.ts +36 -36
  92. package/node/index.js +32 -32
  93. package/node/loop/get-max-coordinate.d.ts +10 -10
  94. package/node/loop/get-max-coordinate.js +43 -43
  95. package/node/loop.d.ts +16 -16
  96. package/node/loop.js +34 -34
  97. package/node/mat/add-to-cp-graph.d.ts +16 -16
  98. package/node/mat/add-to-cp-graph.js +30 -30
  99. package/node/mat/bezier-piece.d.ts +12 -12
  100. package/node/mat/bezier-piece.js +1 -1
  101. package/node/mat/closest-boundary-point/closest-points-on-curve.d.ts +14 -14
  102. package/node/mat/closest-boundary-point/closest-points-on-curve.js +72 -72
  103. package/node/mat/closest-boundary-point/cull-bezier-pieces.d.ts +9 -9
  104. package/node/mat/closest-boundary-point/cull-bezier-pieces.js +19 -19
  105. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.d.ts +11 -11
  106. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js +24 -24
  107. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.d.ts +11 -11
  108. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js +26 -26
  109. package/node/mat/closest-boundary-point/get-best-distance-squared.d.ts +8 -8
  110. package/node/mat/closest-boundary-point/get-best-distance-squared.js +24 -24
  111. package/node/mat/closest-boundary-point/get-close-boundary-points.d.ts +17 -17
  112. package/node/mat/closest-boundary-point/get-close-boundary-points.js +80 -80
  113. package/node/mat/closest-boundary-point/get-closest-boundary-point.d.ts +18 -18
  114. package/node/mat/closest-boundary-point/get-closest-boundary-point.js +40 -40
  115. package/node/mat/corner.d.ts +37 -37
  116. package/node/mat/corner.js +1 -1
  117. package/node/mat/create-new-cp-tree.d.ts +9 -9
  118. package/node/mat/create-new-cp-tree.js +23 -23
  119. package/node/mat/elem-type-two-prong.d.ts +3 -3
  120. package/node/mat/elem-type-two-prong.js +1 -1
  121. package/node/mat/find-mat/add-1-prong.d.ts +12 -12
  122. package/node/mat/find-mat/add-1-prong.js +42 -42
  123. package/node/mat/find-mat/add-2-prong.d.ts +21 -21
  124. package/node/mat/find-mat/add-2-prong.js +192 -192
  125. package/node/mat/find-mat/add-3-prong.d.ts +19 -19
  126. package/node/mat/find-mat/add-3-prong.js +54 -54
  127. package/node/mat/find-mat/add-debug-info.d.ts +9 -9
  128. package/node/mat/find-mat/add-debug-info.js +67 -67
  129. package/node/mat/find-mat/create-get-interesting-points-on-loop.d.ts +11 -11
  130. package/node/mat/find-mat/create-get-interesting-points-on-loop.js +51 -51
  131. package/node/mat/find-mat/create-initial-cp-graph.d.ts +12 -12
  132. package/node/mat/find-mat/create-initial-cp-graph.js +40 -40
  133. package/node/mat/find-mat/find-2-prong/add-debug-info.d.ts +8 -8
  134. package/node/mat/find-mat/find-2-prong/add-debug-info.js +21 -21
  135. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.d.ts +11 -11
  136. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js +29 -29
  137. package/node/mat/find-mat/find-2-prong/find-2-prong.d.ts +37 -37
  138. package/node/mat/find-mat/find-2-prong/find-2-prong.js +232 -232
  139. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.d.ts +9 -9
  140. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js +39 -39
  141. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.d.ts +11 -11
  142. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js +37 -37
  143. package/node/mat/find-mat/find-2-prong/x-for-debugging.d.ts +9 -9
  144. package/node/mat/find-mat/find-2-prong/x-for-debugging.js +1 -1
  145. package/node/mat/find-mat/find-3-prong/calc-better-x.d.ts +19 -19
  146. package/node/mat/find-mat/find-3-prong/calc-better-x.js +36 -36
  147. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.d.ts +13 -13
  148. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js +25 -25
  149. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.d.ts +22 -22
  150. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js +159 -159
  151. package/node/mat/find-mat/find-3-prong/find-3-prong.d.ts +16 -16
  152. package/node/mat/find-mat/find-3-prong/find-3-prong.js +76 -76
  153. package/node/mat/find-mat/find-3-prong/get-closest-points.d.ts +9 -9
  154. package/node/mat/find-mat/find-3-prong/get-closest-points.js +16 -16
  155. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.d.ts +15 -15
  156. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js +20 -20
  157. package/node/mat/find-mat/find-and-add-2-prongs.d.ts +16 -16
  158. package/node/mat/find-mat/find-and-add-2-prongs.js +73 -73
  159. package/node/mat/find-mat/find-and-add-3-prongs.d.ts +13 -13
  160. package/node/mat/find-mat/find-and-add-3-prongs.js +146 -146
  161. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.d.ts +14 -14
  162. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js +33 -33
  163. package/node/mat/find-mat/get-potential-2-prongs.d.ts +4 -4
  164. package/node/mat/find-mat/get-potential-2-prongs.js +16 -16
  165. package/node/mat/find-mat/get-sharp-corners.d.ts +4 -4
  166. package/node/mat/find-mat/get-sharp-corners.js +17 -17
  167. package/node/mat/geometry/get-closest-square-distance-to-rect.d.ts +5 -5
  168. package/node/mat/geometry/get-closest-square-distance-to-rect.js +49 -49
  169. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.d.ts +5 -5
  170. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js +15 -15
  171. package/node/mat/get-boundary-piece-beziers.d.ts +11 -11
  172. package/node/mat/get-boundary-piece-beziers.js +58 -58
  173. package/node/mat/get-contact-circles-at-interface.d.ts +8 -8
  174. package/node/mat/get-contact-circles-at-interface.js +20 -20
  175. package/node/mat/get-largest-vertex.d.ts +4 -4
  176. package/node/mat/get-largest-vertex.js +9 -9
  177. package/node/mat/get-leaves.d.ts +4 -4
  178. package/node/mat/get-leaves.js +12 -12
  179. package/node/mat/get-neighboring-cps.d.ts +14 -14
  180. package/node/mat/get-neighboring-cps.js +30 -30
  181. package/node/mat/get-two-prong-type.d.ts +5 -5
  182. package/node/mat/get-two-prong-type.js +8 -8
  183. package/node/mat/is-another-cp-closeby.d.ts +20 -20
  184. package/node/mat/is-another-cp-closeby.js +55 -55
  185. package/node/mat/simplify-mat-map-only.d.ts +23 -23
  186. package/node/mat/simplify-mat-map-only.js +80 -80
  187. package/node/mat/to-scale-axis/add-debug-info.d.ts +7 -7
  188. package/node/mat/to-scale-axis/add-debug-info.js +13 -13
  189. package/node/mat/to-scale-axis/cull-non-cycles.d.ts +9 -9
  190. package/node/mat/to-scale-axis/cull-non-cycles.js +51 -51
  191. package/node/mat/to-scale-axis/cull.d.ts +12 -12
  192. package/node/mat/to-scale-axis/cull.js +132 -132
  193. package/node/mat/trim-mat.d.ts +8 -8
  194. package/node/mat/trim-mat.js +16 -16
  195. package/node/mat.d.ts +22 -22
  196. package/node/mat.js +1 -1
  197. package/node/point-on-shape.d.ts +73 -73
  198. package/node/point-on-shape.js +167 -167
  199. package/node/simplify-mat.d.ts +16 -16
  200. package/node/simplify-mat.js +71 -71
  201. package/node/svg/get-loop-bounds.d.ts +12 -12
  202. package/node/svg/get-loop-bounds.js +80 -80
  203. package/node/svg/get-min-y-pos.d.ts +8 -8
  204. package/node/svg/get-min-y-pos.js +9 -9
  205. package/node/svg/get-shape-bounds.d.ts +9 -9
  206. package/node/svg/get-shape-bounds.js +35 -35
  207. package/node/sweep-line/sweep-line.d.ts +18 -18
  208. package/node/sweep-line/sweep-line.js +72 -72
  209. package/node/to-scale-axis.d.ts +16 -16
  210. package/node/to-scale-axis.js +74 -74
  211. package/node/traverse-edges.d.ts +10 -10
  212. package/node/traverse-edges.js +21 -21
  213. package/node/traverse-vertices.d.ts +12 -12
  214. package/node/traverse-vertices.js +27 -27
  215. package/package.json +15 -15
  216. package/tsconfig.json +0 -1
package/node/curve.d.ts CHANGED
@@ -1,46 +1,46 @@
1
- import { Loop } from './loop.js';
2
- import { Corner } from './mat/corner.js';
3
- /**
4
- * Represents a bezier curve on the shape boundary / loop.
5
- */
6
- interface Curve {
7
- /**
8
- * Primarily for internal use.
9
- * @param loop The closed loop of bezier curves representing the shape
10
- * boundary this curve belongs to.
11
- * @param ps The bezier control points.
12
- * @param prev The previous curve (when going in a negative direction around
13
- * the shape boundary, i.e. clockwise for the outer shape and anti-clockwise
14
- * for the holes (if any)).
15
- * @param next The next curve (when going in a positive direction around
16
- * the shape boundary, i.e. anti-clockwise for the outer shape and clockwise
17
- * for the holes (if any)).
18
- * @param idx The curve's ordered index in the loop. This imposes a cycling
19
- * ordering of the curves in the loop.
20
- */
21
- loop: Loop;
22
- ps: number[][];
23
- prev: Curve;
24
- next: Curve;
25
- idx: number;
26
- }
27
- /**
28
- * @hidden
29
- * Returns a new corner with properties.
30
- *
31
- * PRECONDITION: The beziers has control points with max bit-length of 26 and
32
- * aligned to a 'grid' to have the same exponent. This is so the vectors between
33
- * control points can be calculated exactly without resorting to adaptive
34
- * infinite precision floating point operations.
35
- *
36
- * @param psI The incoming bezier that ends in the corner
37
- * @param psO The outgoing bezier that starts at the corner
38
- */
39
- declare function getCorner(psI: number[][], psO: number[][]): Corner;
40
- /**
41
- * @hidden
42
- * Returns information about the corner created at the end of this curve
43
- * (at t === 1) and the start of the next curve (at t === 0).
44
- */
45
- declare const getCornerAtEnd: (a: Curve) => Corner;
46
- export { Curve, getCorner, getCornerAtEnd };
1
+ import { Loop } from './loop.js';
2
+ import { Corner } from './mat/corner.js';
3
+ /**
4
+ * Represents a bezier curve on the shape boundary / loop.
5
+ */
6
+ interface Curve {
7
+ /**
8
+ * Primarily for internal use.
9
+ * @param loop The closed loop of bezier curves representing the shape
10
+ * boundary this curve belongs to.
11
+ * @param ps The bezier control points.
12
+ * @param prev The previous curve (when going in a negative direction around
13
+ * the shape boundary, i.e. clockwise for the outer shape and anti-clockwise
14
+ * for the holes (if any)).
15
+ * @param next The next curve (when going in a positive direction around
16
+ * the shape boundary, i.e. anti-clockwise for the outer shape and clockwise
17
+ * for the holes (if any)).
18
+ * @param idx The curve's ordered index in the loop. This imposes a cycling
19
+ * ordering of the curves in the loop.
20
+ */
21
+ loop: Loop;
22
+ ps: number[][];
23
+ prev: Curve;
24
+ next: Curve;
25
+ idx: number;
26
+ }
27
+ /**
28
+ * @hidden
29
+ * Returns a new corner with properties.
30
+ *
31
+ * PRECONDITION: The beziers has control points with max bit-length of 26 and
32
+ * aligned to a 'grid' to have the same exponent. This is so the vectors between
33
+ * control points can be calculated exactly without resorting to adaptive
34
+ * infinite precision floating point operations.
35
+ *
36
+ * @param psI The incoming bezier that ends in the corner
37
+ * @param psO The outgoing bezier that starts at the corner
38
+ */
39
+ declare function getCorner(psI: number[][], psO: number[][]): Corner;
40
+ /**
41
+ * @hidden
42
+ * Returns information about the corner created at the end of this curve
43
+ * (at t === 1) and the start of the next curve (at t === 0).
44
+ */
45
+ declare const getCornerAtEnd: (a: Curve) => Corner;
46
+ export { Curve, getCorner, getCornerAtEnd };
package/node/curve.js CHANGED
@@ -1,89 +1,89 @@
1
- import { memoize } from 'flo-memoize';
2
- import { cross, dot, toUnitVector } from 'flo-vector2d';
3
- import { getInterfaceCcw } from './get-interface-ccw.js';
4
- /**
5
- * @hidden
6
- * Angle in degrees to radians.
7
- */
8
- const DEGREES = {
9
- //'0' : 0.0000,
10
- 0.25: 0.0050,
11
- 1: 0.0167,
12
- 4: 0.0698,
13
- 16: 0.2756,
14
- };
15
- /** @hidden */
16
- //const DEGREE_LIMIT = DEGREES[1];
17
- const DEGREE_LIMIT = DEGREES[4];
18
- //const DEGREE_LIMIT = DEGREES[16];
19
- /**
20
- * @hidden
21
- * Returns a new corner with properties.
22
- *
23
- * PRECONDITION: The beziers has control points with max bit-length of 26 and
24
- * aligned to a 'grid' to have the same exponent. This is so the vectors between
25
- * control points can be calculated exactly without resorting to adaptive
26
- * infinite precision floating point operations.
27
- *
28
- * @param psI The incoming bezier that ends in the corner
29
- * @param psO The outgoing bezier that starts at the corner
30
- */
31
- function getCorner(psI, psO) {
32
- // getInterfaceCcw must return a number !== 0 if psI and psO are not the
33
- // same as seen as a curve extension with t ∈ [-∞,+∞]
34
- const ccw = getInterfaceCcw(psI, psO);
35
- const isSharp = ccw < 0;
36
- const isDull = ccw > 0;
37
- // Find (non-normalized) tangent of curve.ps at t === 1
38
- const p0E = psI[psI.length - 2];
39
- const p1E = psI[psI.length - 1];
40
- const xE = p1E[0] - p0E[0];
41
- const yE = p1E[1] - p0E[1];
42
- const tangentAtEnd = [xE, yE];
43
- // Find (non-normalized) tangent of curve.next.ps at t === 0
44
- const p0S = psO[0];
45
- const p1S = psO[1];
46
- const xS = p1S[0] - p0S[0];
47
- const yS = p1S[1] - p0S[1];
48
- const tangentAtStart = [xS, yS];
49
- // These use square root and are thus not exact
50
- const tangents_ = [
51
- toUnitVector(tangentAtEnd),
52
- toUnitVector(tangentAtStart),
53
- ];
54
- // The cross calculated below should be exact due to beziers having been
55
- // normalized!
56
- const crossTangents = cross(tangents_[0], tangents_[1]);
57
- let isQuiteSharp;
58
- let isQuiteDull;
59
- const dotTangents = dot(tangentAtEnd, tangentAtStart);
60
- if (dotTangents > 0) {
61
- // Curves go in same direction
62
- isQuiteSharp = crossTangents < -DEGREE_LIMIT;
63
- isQuiteDull = crossTangents > +DEGREE_LIMIT;
64
- }
65
- else {
66
- isQuiteSharp = isSharp;
67
- isQuiteDull = isDull;
68
- }
69
- return {
70
- tangents: tangents_,
71
- crossTangents,
72
- isSharp,
73
- isDull,
74
- isQuiteSharp,
75
- isQuiteDull
76
- };
77
- }
78
- /**
79
- * @hidden
80
- * Returns information about the corner created at the end of this curve
81
- * (at t === 1) and the start of the next curve (at t === 0).
82
- */
83
- const getCornerAtEnd = memoize(function (curve) {
84
- const psE = curve.ps;
85
- const psS = curve.next.ps;
86
- return getCorner(psE, psS);
87
- });
88
- export { getCorner, getCornerAtEnd };
1
+ import { memoize } from 'flo-memoize';
2
+ import { cross, dot, toUnitVector } from 'flo-vector2d';
3
+ import { getInterfaceCcw } from './get-interface-ccw.js';
4
+ /**
5
+ * @hidden
6
+ * Angle in degrees to radians.
7
+ */
8
+ const DEGREES = {
9
+ //'0' : 0.0000,
10
+ 0.25: 0.0050,
11
+ 1: 0.0167,
12
+ 4: 0.0698,
13
+ 16: 0.2756,
14
+ };
15
+ /** @hidden */
16
+ //const DEGREE_LIMIT = DEGREES[1];
17
+ const DEGREE_LIMIT = DEGREES[4];
18
+ //const DEGREE_LIMIT = DEGREES[16];
19
+ /**
20
+ * @hidden
21
+ * Returns a new corner with properties.
22
+ *
23
+ * PRECONDITION: The beziers has control points with max bit-length of 26 and
24
+ * aligned to a 'grid' to have the same exponent. This is so the vectors between
25
+ * control points can be calculated exactly without resorting to adaptive
26
+ * infinite precision floating point operations.
27
+ *
28
+ * @param psI The incoming bezier that ends in the corner
29
+ * @param psO The outgoing bezier that starts at the corner
30
+ */
31
+ function getCorner(psI, psO) {
32
+ // getInterfaceCcw must return a number !== 0 if psI and psO are not the
33
+ // same as seen as a curve extension with t ∈ [-∞,+∞]
34
+ const ccw = getInterfaceCcw(psI, psO);
35
+ const isSharp = ccw < 0;
36
+ const isDull = ccw > 0;
37
+ // Find (non-normalized) tangent of curve.ps at t === 1
38
+ const p0E = psI[psI.length - 2];
39
+ const p1E = psI[psI.length - 1];
40
+ const xE = p1E[0] - p0E[0];
41
+ const yE = p1E[1] - p0E[1];
42
+ const tangentAtEnd = [xE, yE];
43
+ // Find (non-normalized) tangent of curve.next.ps at t === 0
44
+ const p0S = psO[0];
45
+ const p1S = psO[1];
46
+ const xS = p1S[0] - p0S[0];
47
+ const yS = p1S[1] - p0S[1];
48
+ const tangentAtStart = [xS, yS];
49
+ // These use square root and are thus not exact
50
+ const tangents_ = [
51
+ toUnitVector(tangentAtEnd),
52
+ toUnitVector(tangentAtStart),
53
+ ];
54
+ // The cross calculated below should be exact due to beziers having been
55
+ // normalized!
56
+ const crossTangents = cross(tangents_[0], tangents_[1]);
57
+ let isQuiteSharp;
58
+ let isQuiteDull;
59
+ const dotTangents = dot(tangentAtEnd, tangentAtStart);
60
+ if (dotTangents > 0) {
61
+ // Curves go in same direction
62
+ isQuiteSharp = crossTangents < -DEGREE_LIMIT;
63
+ isQuiteDull = crossTangents > +DEGREE_LIMIT;
64
+ }
65
+ else {
66
+ isQuiteSharp = isSharp;
67
+ isQuiteDull = isDull;
68
+ }
69
+ return {
70
+ tangents: tangents_,
71
+ crossTangents,
72
+ isSharp,
73
+ isDull,
74
+ isQuiteSharp,
75
+ isQuiteDull
76
+ };
77
+ }
78
+ /**
79
+ * @hidden
80
+ * Returns information about the corner created at the end of this curve
81
+ * (at t === 1) and the start of the next curve (at t === 0).
82
+ */
83
+ const getCornerAtEnd = memoize(function (curve) {
84
+ const psE = curve.ps;
85
+ const psS = curve.next.ps;
86
+ return getCorner(psE, psS);
87
+ });
88
+ export { getCorner, getCornerAtEnd };
89
89
  //# sourceMappingURL=curve.js.map
@@ -1,11 +1,11 @@
1
- import { CpNode } from '../cp-node.js';
2
- import { Generated } from './debug.js';
3
- /**
4
- * @hidden
5
- * Used for debugging only.
6
- */
7
- interface ICpNodeForDebugging {
8
- generated: Generated;
9
- cpNode: CpNode;
10
- }
11
- export { ICpNodeForDebugging };
1
+ import { CpNode } from '../cp-node.js';
2
+ import { Generated } from './debug.js';
3
+ /**
4
+ * @hidden
5
+ * Used for debugging only.
6
+ */
7
+ interface ICpNodeForDebugging {
8
+ generated: Generated;
9
+ cpNode: CpNode;
10
+ }
11
+ export { ICpNodeForDebugging };
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=cp-node-for-debugging.js.map
@@ -1,32 +1,32 @@
1
- import { IPointOnShape } from '../point-on-shape.js';
2
- import { TwoProngForDebugging } from './two-prong-for-debugging.js';
3
- import { ThreeProngForDebugging } from './three-prong-for-debugging.js';
4
- import { Curve } from '../curve.js';
5
- import { Mat } from '../mat.js';
6
- import { CpNode } from '../cp-node.js';
7
- import { Circle } from '../circle.js';
8
- import { ICpNodeForDebugging } from './cp-node-for-debugging.js';
9
- /** @hidden */
10
- interface IDebugElems {
11
- oneProng: IPointOnShape;
12
- oneProngAtDullCorner: IPointOnShape;
13
- twoProng_regular: TwoProngForDebugging;
14
- twoProng_failed: TwoProngForDebugging;
15
- twoProng_notAdded: TwoProngForDebugging;
16
- twoProng_deleted: TwoProngForDebugging;
17
- twoProng_holeClosing: TwoProngForDebugging;
18
- threeProng: ThreeProngForDebugging;
19
- looseBoundingBox: number[][];
20
- tightBoundingBox: number[][];
21
- boundingHull: number[][];
22
- sharpCorner: Curve;
23
- dullCorner: Curve;
24
- vertex: CpNode;
25
- mat: Mat;
26
- sat: Mat;
27
- maxVertex: CpNode;
28
- leaves: CpNode[];
29
- culls: Circle[];
30
- cpNode: ICpNodeForDebugging;
31
- }
32
- export { IDebugElems };
1
+ import { IPointOnShape } from '../point-on-shape.js';
2
+ import { TwoProngForDebugging } from './two-prong-for-debugging.js';
3
+ import { ThreeProngForDebugging } from './three-prong-for-debugging.js';
4
+ import { Curve } from '../curve.js';
5
+ import { Mat } from '../mat.js';
6
+ import { CpNode } from '../cp-node.js';
7
+ import { Circle } from '../circle.js';
8
+ import { ICpNodeForDebugging } from './cp-node-for-debugging.js';
9
+ /** @hidden */
10
+ interface IDebugElems {
11
+ oneProng: IPointOnShape;
12
+ oneProngAtDullCorner: IPointOnShape;
13
+ twoProng_regular: TwoProngForDebugging;
14
+ twoProng_failed: TwoProngForDebugging;
15
+ twoProng_notAdded: TwoProngForDebugging;
16
+ twoProng_deleted: TwoProngForDebugging;
17
+ twoProng_holeClosing: TwoProngForDebugging;
18
+ threeProng: ThreeProngForDebugging;
19
+ looseBoundingBox: number[][];
20
+ tightBoundingBox: number[][];
21
+ boundingHull: number[][];
22
+ sharpCorner: Curve;
23
+ dullCorner: Curve;
24
+ vertex: CpNode;
25
+ mat: Mat;
26
+ sat: Mat;
27
+ maxVertex: CpNode;
28
+ leaves: CpNode[];
29
+ culls: Circle[];
30
+ cpNode: ICpNodeForDebugging;
31
+ }
32
+ export { IDebugElems };
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=debug-elem-types.js.map
@@ -1,50 +1,50 @@
1
- import { IGeneralDebugFunctions } from './functions/general.js';
2
- import { ITwoProngDebugFunctions } from './functions/two-prong.js';
3
- import { IThreeProngDebugFunctions } from './functions/three-prong.js';
4
- import { TDrawElemFunctions } from './functions/draw-elem/draw-elem.js';
5
- import { IDebugElems } from './debug-elem-types.js';
6
- /** @hidden */
7
- interface Debug {
8
- /** Generated by debug object for later inspection */
9
- generated: Generated;
10
- /**
11
- * These functions are meant to be used in the console, e.g. in the
12
- * console try typing d.fs.twoProng.traceConvergence(0);
13
- */
14
- fs: IDebugFunctions;
15
- directives: IDirectives;
16
- }
17
- /** @hidden */
18
- type GeneratedElems = {
19
- [T in keyof IDebugElems]: IDebugElems[T][];
20
- };
21
- /** @hidden */
22
- interface ITiming {
23
- holeClosers: number;
24
- oneAnd2Prongs: number;
25
- threeProngs: number;
26
- sats: number;
27
- simplifyMat: number;
28
- }
29
- /** @hidden */
30
- interface Generated {
31
- elems: GeneratedElems;
32
- timing: ITiming;
33
- }
34
- /** @hidden */
35
- interface IDebugFunctions extends IGeneralDebugFunctions {
36
- twoProng: ITwoProngDebugFunctions;
37
- threeProng: IThreeProngDebugFunctions;
38
- drawElem: TDrawElemFunctions;
39
- }
40
- /** @hidden */
41
- interface IDirectives {
42
- stopAfterHoleClosers: boolean;
43
- stopAfterHoleClosersNum: number;
44
- stopAfterTwoProngs: boolean;
45
- stopAfterTwoProngsNum: number;
46
- stopAfterThreeProngs: boolean;
47
- stopAfterThreeProngsNum: number;
48
- }
49
- declare function enableDebugForMat(debugOn: boolean): void;
50
- export { Debug, GeneratedElems, ITiming, Generated, IDebugFunctions, IDirectives, enableDebugForMat };
1
+ import { IGeneralDebugFunctions } from './functions/general.js';
2
+ import { ITwoProngDebugFunctions } from './functions/two-prong.js';
3
+ import { IThreeProngDebugFunctions } from './functions/three-prong.js';
4
+ import { TDrawElemFunctions } from './functions/draw-elem/draw-elem.js';
5
+ import { IDebugElems } from './debug-elem-types.js';
6
+ /** @hidden */
7
+ interface Debug {
8
+ /** Generated by debug object for later inspection */
9
+ generated: Generated;
10
+ /**
11
+ * These functions are meant to be used in the console, e.g. in the
12
+ * console try typing d.fs.twoProng.traceConvergence(0);
13
+ */
14
+ fs: IDebugFunctions;
15
+ directives: IDirectives;
16
+ }
17
+ /** @hidden */
18
+ type GeneratedElems = {
19
+ [T in keyof IDebugElems]: IDebugElems[T][];
20
+ };
21
+ /** @hidden */
22
+ interface ITiming {
23
+ holeClosers: number;
24
+ oneAnd2Prongs: number;
25
+ threeProngs: number;
26
+ sats: number;
27
+ simplifyMat: number;
28
+ }
29
+ /** @hidden */
30
+ interface Generated {
31
+ elems: GeneratedElems;
32
+ timing: ITiming;
33
+ }
34
+ /** @hidden */
35
+ interface IDebugFunctions extends IGeneralDebugFunctions {
36
+ twoProng: ITwoProngDebugFunctions;
37
+ threeProng: IThreeProngDebugFunctions;
38
+ drawElem: TDrawElemFunctions;
39
+ }
40
+ /** @hidden */
41
+ interface IDirectives {
42
+ stopAfterHoleClosers: boolean;
43
+ stopAfterHoleClosersNum: number;
44
+ stopAfterTwoProngs: boolean;
45
+ stopAfterTwoProngsNum: number;
46
+ stopAfterThreeProngs: boolean;
47
+ stopAfterThreeProngsNum: number;
48
+ }
49
+ declare function enableDebugForMat(debugOn: boolean): void;
50
+ export { Debug, GeneratedElems, ITiming, Generated, IDebugFunctions, IDirectives, enableDebugForMat };
@@ -1,76 +1,76 @@
1
- import { generalDebugFunctions } from './functions/general.js';
2
- import { twoProngDebugFunctions } from './functions/two-prong.js';
3
- import { threeProngDebugFunctions } from './functions/three-prong.js';
4
- import { drawElemFunctions } from './functions/draw-elem/draw-elem.js';
5
- function enableDebugForMat(debugOn) {
6
- if (!debugOn) {
7
- window._debug_ = undefined;
8
- return;
9
- }
10
- let debug = window._debug_;
11
- debug = {
12
- ...debug,
13
- generated: {
14
- //...debug?.generated,
15
- ...(!debug ? {} : !debug.generated ? {} : debug.generated),
16
- elems: {
17
- //...debug?.generated?.elems,
18
- ...(!debug ? {} : !debug.generated ? {} : !debug.generated.elems ? {} : debug.generated.elems),
19
- twoProng_regular: [],
20
- twoProng_failed: [],
21
- twoProng_notAdded: [],
22
- twoProng_deleted: [],
23
- twoProng_holeClosing: [],
24
- looseBoundingBox: [],
25
- tightBoundingBox: [],
26
- oneProng: [],
27
- oneProngAtDullCorner: [],
28
- sharpCorner: [],
29
- dullCorner: [],
30
- vertex: [],
31
- threeProng: [],
32
- boundingHull: [],
33
- mat: [],
34
- sat: [],
35
- cpNode: [],
36
- maxVertex: [],
37
- leaves: [],
38
- culls: [],
39
- },
40
- timing: {
41
- //...debug?.generated?.timing,
42
- ...(!debug ? {} : !debug.generated ? {} : !debug.generated.timing ? {} : debug.generated.timing),
43
- holeClosers: 0,
44
- oneAnd2Prongs: 0,
45
- threeProngs: 0,
46
- sats: 0,
47
- simplifyMat: 0,
48
- }
49
- },
50
- fs: {
51
- //...debug?.fs,
52
- ...(!debug ? {} : !debug.fs ? {} : debug.fs),
53
- drawElem: {
54
- //...debug?.fs?.drawElem,
55
- ...(!debug ? {} : !debug.fs ? {} : !debug.fs.drawElem ? {} : debug.fs.drawElem),
56
- ...drawElemFunctions
57
- },
58
- ...generalDebugFunctions,
59
- twoProng: twoProngDebugFunctions,
60
- threeProng: threeProngDebugFunctions,
61
- },
62
- directives: {
63
- //...debug?.directives,
64
- ...(!debug ? {} : !debug.directives ? {} : debug.directives),
65
- stopAfterHoleClosers: false,
66
- stopAfterHoleClosersNum: undefined,
67
- stopAfterTwoProngs: false,
68
- stopAfterTwoProngsNum: undefined,
69
- stopAfterThreeProngs: false,
70
- stopAfterThreeProngsNum: undefined,
71
- }
72
- };
73
- window._debug_ = debug;
74
- }
75
- export { enableDebugForMat };
1
+ import { generalDebugFunctions } from './functions/general.js';
2
+ import { twoProngDebugFunctions } from './functions/two-prong.js';
3
+ import { threeProngDebugFunctions } from './functions/three-prong.js';
4
+ import { drawElemFunctions } from './functions/draw-elem/draw-elem.js';
5
+ function enableDebugForMat(debugOn) {
6
+ if (!debugOn) {
7
+ window._debug_ = undefined;
8
+ return;
9
+ }
10
+ let debug = window._debug_;
11
+ debug = {
12
+ ...debug,
13
+ generated: {
14
+ //...debug?.generated,
15
+ ...(!debug ? {} : !debug.generated ? {} : debug.generated),
16
+ elems: {
17
+ //...debug?.generated?.elems,
18
+ ...(!debug ? {} : !debug.generated ? {} : !debug.generated.elems ? {} : debug.generated.elems),
19
+ twoProng_regular: [],
20
+ twoProng_failed: [],
21
+ twoProng_notAdded: [],
22
+ twoProng_deleted: [],
23
+ twoProng_holeClosing: [],
24
+ looseBoundingBox: [],
25
+ tightBoundingBox: [],
26
+ oneProng: [],
27
+ oneProngAtDullCorner: [],
28
+ sharpCorner: [],
29
+ dullCorner: [],
30
+ vertex: [],
31
+ threeProng: [],
32
+ boundingHull: [],
33
+ mat: [],
34
+ sat: [],
35
+ cpNode: [],
36
+ maxVertex: [],
37
+ leaves: [],
38
+ culls: [],
39
+ },
40
+ timing: {
41
+ //...debug?.generated?.timing,
42
+ ...(!debug ? {} : !debug.generated ? {} : !debug.generated.timing ? {} : debug.generated.timing),
43
+ holeClosers: 0,
44
+ oneAnd2Prongs: 0,
45
+ threeProngs: 0,
46
+ sats: 0,
47
+ simplifyMat: 0,
48
+ }
49
+ },
50
+ fs: {
51
+ //...debug?.fs,
52
+ ...(!debug ? {} : !debug.fs ? {} : debug.fs),
53
+ drawElem: {
54
+ //...debug?.fs?.drawElem,
55
+ ...(!debug ? {} : !debug.fs ? {} : !debug.fs.drawElem ? {} : debug.fs.drawElem),
56
+ ...drawElemFunctions
57
+ },
58
+ ...generalDebugFunctions,
59
+ twoProng: twoProngDebugFunctions,
60
+ threeProng: threeProngDebugFunctions,
61
+ },
62
+ directives: {
63
+ //...debug?.directives,
64
+ ...(!debug ? {} : !debug.directives ? {} : debug.directives),
65
+ stopAfterHoleClosers: false,
66
+ stopAfterHoleClosersNum: undefined,
67
+ stopAfterTwoProngs: false,
68
+ stopAfterTwoProngsNum: undefined,
69
+ stopAfterThreeProngs: false,
70
+ stopAfterThreeProngsNum: undefined,
71
+ }
72
+ };
73
+ window._debug_ = debug;
74
+ }
75
+ export { enableDebugForMat };
76
76
  //# sourceMappingURL=debug.js.map
@@ -1,3 +1,3 @@
1
- /** @hidden */
2
- declare function boundingHull(g: SVGGElement, hull: number[][], style?: string): SVGPathElement[];
3
- export { boundingHull };
1
+ /** @hidden */
2
+ declare function boundingHull(g: SVGGElement, hull: number[][], style?: string): SVGPathElement[];
3
+ export { boundingHull };
@@ -1,8 +1,8 @@
1
- import { drawFs } from 'flo-draw';
2
- /** @hidden */
3
- function boundingHull(g, hull, style = 'thin5 black nofill') {
4
- const $polygon = drawFs.polygon(g, hull, style);
5
- return $polygon;
6
- }
7
- export { boundingHull };
1
+ import { drawFs } from 'flo-draw';
2
+ /** @hidden */
3
+ function boundingHull(g, hull, style = 'thin5 black nofill') {
4
+ const $polygon = drawFs.polygon(g, hull, style);
5
+ return $polygon;
6
+ }
7
+ export { boundingHull };
8
8
  //# sourceMappingURL=bounding-hull.js.map
@@ -1,4 +1,4 @@
1
- import { CpNode } from '../../../cp-node.js';
2
- /** @hidden */
3
- declare function drawBranch(g: SVGGElement, branch: CpNode[], delay?: number): SVGElement[];
4
- export { drawBranch };
1
+ import { CpNode } from '../../../cp-node.js';
2
+ /** @hidden */
3
+ declare function drawBranch(g: SVGGElement, branch: CpNode[], delay?: number): SVGElement[];
4
+ export { drawBranch };