flo-mat 2.0.2 → 2.0.3

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 +8230 -8229
  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 +11 -11
  216. package/tsconfig.json +0 -1
@@ -1,81 +1,81 @@
1
- import { distanceBetween } from 'flo-vector2d';
2
- import { PointOnShape } from '../../point-on-shape.js';
3
- import { cullBezierPieces } from './cull-bezier-pieces.js';
4
- import { closestPointsOnCurve } from './closest-points-on-curve.js';
5
- /**
6
- * @hidden
7
- * Returns the closest boundary point to the given point, limited to the given
8
- * bezier pieces, including the beziers actually checked after culling.
9
- * @param bezierPieces
10
- * @param point
11
- * @param touchedCurve
12
- * @param t
13
- * @param extreme
14
- */
15
- function getCloseBoundaryPoints(bezierPieces, point, y, distance) {
16
- const touchedCurve = y.curve;
17
- const t = y.t;
18
- const p_ = y.p;
19
- bezierPieces = cullBezierPieces(bezierPieces, point);
20
- // TODO - integrate with is-another-cp-closeby - we MUST check angle too!
21
- const DISTANCE_TOLERANCE = 1e-9;
22
- const posInfos = [];
23
- for (let i = 0; i < bezierPieces.length; i++) {
24
- const bezierPiece = bezierPieces[i];
25
- // TOOD - important - should be able to return multiple points
26
- const ps = closestPointsOnCurve(bezierPiece.curve, point, bezierPiece.ts, touchedCurve, t);
27
- //if (ps === undefined) { continue; }
28
- for (let j = 0; j < ps.length; j++) {
29
- const p = ps[j];
30
- const d = distanceBetween(p.p, point);
31
- let curve = bezierPiece.curve;
32
- let t_ = p.t;
33
- if (Math.abs(d - distance) < DISTANCE_TOLERANCE) {
34
- if (t_ === 0) {
35
- t_ = 1;
36
- curve = bezierPiece.curve.prev;
37
- }
38
- posInfos.push({ pos: new PointOnShape(curve, t_), d });
39
- }
40
- }
41
- }
42
- if (posInfos.length > 1) {
43
- // Remove ones that are too close together.
44
- // TODO - in future remove all these checks and join n-prongs when they
45
- // are being added - much simpler and more symmetric. Remeber order when
46
- // comparing closeness!
47
- const indexesToCheck = [];
48
- for (let i = 0; i < posInfos.length; i++) {
49
- const pi = posInfos[i];
50
- // Only check if they are close to the edges. Why??
51
- //if (pi.pos.t < 1e-2 || 1-pi.pos.t < 1e-2) {
52
- indexesToCheck.push(i);
53
- //}
54
- }
55
- const indexesToRemove = [];
56
- for (let i = 0; i < indexesToCheck.length; i++) {
57
- for (let j = i + 1; j < indexesToCheck.length; j++) {
58
- if (i === j) {
59
- continue;
60
- }
61
- const p1 = posInfos[indexesToCheck[i]].pos.p;
62
- const p2 = posInfos[indexesToCheck[j]].pos.p;
63
- // Below checks for source point too - similar to
64
- // isAnotherCpCloseBy
65
- const p3 = p_;
66
- if ((Math.abs(p1[0] - p2[0]) < 1e-6 &&
67
- Math.abs(p1[1] - p2[1]) < 1e-6) ||
68
- (Math.abs(p1[0] - p3[0]) < 1e-6 &&
69
- Math.abs(p1[1] - p3[1]) < 1e-6)) {
70
- indexesToRemove.push(indexesToCheck[i]);
71
- }
72
- }
73
- }
74
- for (let i = indexesToRemove.length - 1; i >= 0; i--) {
75
- posInfos.splice(indexesToRemove[i], 1);
76
- }
77
- }
78
- return posInfos;
79
- }
80
- export { getCloseBoundaryPoints };
1
+ import { distanceBetween } from 'flo-vector2d';
2
+ import { PointOnShape } from '../../point-on-shape.js';
3
+ import { cullBezierPieces } from './cull-bezier-pieces.js';
4
+ import { closestPointsOnCurve } from './closest-points-on-curve.js';
5
+ /**
6
+ * @hidden
7
+ * Returns the closest boundary point to the given point, limited to the given
8
+ * bezier pieces, including the beziers actually checked after culling.
9
+ * @param bezierPieces
10
+ * @param point
11
+ * @param touchedCurve
12
+ * @param t
13
+ * @param extreme
14
+ */
15
+ function getCloseBoundaryPoints(bezierPieces, point, y, distance) {
16
+ const touchedCurve = y.curve;
17
+ const t = y.t;
18
+ const p_ = y.p;
19
+ bezierPieces = cullBezierPieces(bezierPieces, point);
20
+ // TODO - integrate with is-another-cp-closeby - we MUST check angle too!
21
+ const DISTANCE_TOLERANCE = 1e-9;
22
+ const posInfos = [];
23
+ for (let i = 0; i < bezierPieces.length; i++) {
24
+ const bezierPiece = bezierPieces[i];
25
+ // TOOD - important - should be able to return multiple points
26
+ const ps = closestPointsOnCurve(bezierPiece.curve, point, bezierPiece.ts, touchedCurve, t);
27
+ //if (ps === undefined) { continue; }
28
+ for (let j = 0; j < ps.length; j++) {
29
+ const p = ps[j];
30
+ const d = distanceBetween(p.p, point);
31
+ let curve = bezierPiece.curve;
32
+ let t_ = p.t;
33
+ if (Math.abs(d - distance) < DISTANCE_TOLERANCE) {
34
+ if (t_ === 0) {
35
+ t_ = 1;
36
+ curve = bezierPiece.curve.prev;
37
+ }
38
+ posInfos.push({ pos: new PointOnShape(curve, t_), d });
39
+ }
40
+ }
41
+ }
42
+ if (posInfos.length > 1) {
43
+ // Remove ones that are too close together.
44
+ // TODO - in future remove all these checks and join n-prongs when they
45
+ // are being added - much simpler and more symmetric. Remeber order when
46
+ // comparing closeness!
47
+ const indexesToCheck = [];
48
+ for (let i = 0; i < posInfos.length; i++) {
49
+ const pi = posInfos[i];
50
+ // Only check if they are close to the edges. Why??
51
+ //if (pi.pos.t < 1e-2 || 1-pi.pos.t < 1e-2) {
52
+ indexesToCheck.push(i);
53
+ //}
54
+ }
55
+ const indexesToRemove = [];
56
+ for (let i = 0; i < indexesToCheck.length; i++) {
57
+ for (let j = i + 1; j < indexesToCheck.length; j++) {
58
+ if (i === j) {
59
+ continue;
60
+ }
61
+ const p1 = posInfos[indexesToCheck[i]].pos.p;
62
+ const p2 = posInfos[indexesToCheck[j]].pos.p;
63
+ // Below checks for source point too - similar to
64
+ // isAnotherCpCloseBy
65
+ const p3 = p_;
66
+ if ((Math.abs(p1[0] - p2[0]) < 1e-6 &&
67
+ Math.abs(p1[1] - p2[1]) < 1e-6) ||
68
+ (Math.abs(p1[0] - p3[0]) < 1e-6 &&
69
+ Math.abs(p1[1] - p3[1]) < 1e-6)) {
70
+ indexesToRemove.push(indexesToCheck[i]);
71
+ }
72
+ }
73
+ }
74
+ for (let i = indexesToRemove.length - 1; i >= 0; i--) {
75
+ posInfos.splice(indexesToRemove[i], 1);
76
+ }
77
+ }
78
+ return posInfos;
79
+ }
80
+ export { getCloseBoundaryPoints };
81
81
  //# sourceMappingURL=get-close-boundary-points.js.map
@@ -1,18 +1,18 @@
1
- import { Curve } from '../../curve.js';
2
- import { IPointOnShape } from '../../point-on-shape.js';
3
- import { BezierPiece } from '../bezier-piece.js';
4
- /**
5
- * @hidden
6
- * Returns the closest boundary point to the given point, limited to the given
7
- * bezier pieces, including the beziers actually checked after culling.
8
- * @param bezierPieces
9
- * @param point
10
- * @param touchedCurve
11
- * @param t
12
- * @param extreme
13
- */
14
- declare function getClosestBoundaryPoint(bezierPieces: BezierPiece[], point: number[], touchedCurve: Curve, t: number): {
15
- pos: IPointOnShape;
16
- d: number;
17
- };
18
- export { getClosestBoundaryPoint };
1
+ import { Curve } from '../../curve.js';
2
+ import { IPointOnShape } from '../../point-on-shape.js';
3
+ import { BezierPiece } from '../bezier-piece.js';
4
+ /**
5
+ * @hidden
6
+ * Returns the closest boundary point to the given point, limited to the given
7
+ * bezier pieces, including the beziers actually checked after culling.
8
+ * @param bezierPieces
9
+ * @param point
10
+ * @param touchedCurve
11
+ * @param t
12
+ * @param extreme
13
+ */
14
+ declare function getClosestBoundaryPoint(bezierPieces: BezierPiece[], point: number[], touchedCurve: Curve, t: number): {
15
+ pos: IPointOnShape;
16
+ d: number;
17
+ };
18
+ export { getClosestBoundaryPoint };
@@ -1,41 +1,41 @@
1
- import { distanceBetween, getObjClosestTo } from 'flo-vector2d';
2
- import { PointOnShape } from '../../point-on-shape.js';
3
- import { cullBezierPieces } from './cull-bezier-pieces.js';
4
- import { closestPointsOnCurve } from './closest-points-on-curve.js';
5
- /**
6
- * @hidden
7
- * Returns the closest boundary point to the given point, limited to the given
8
- * bezier pieces, including the beziers actually checked after culling.
9
- * @param bezierPieces
10
- * @param point
11
- * @param touchedCurve
12
- * @param t
13
- * @param extreme
14
- */
15
- function getClosestBoundaryPoint(bezierPieces, point, touchedCurve, t) {
16
- bezierPieces = cullBezierPieces(bezierPieces, point);
17
- let bestDistance = Number.POSITIVE_INFINITY;
18
- let posInfo;
19
- for (let i = 0; i < bezierPieces.length; i++) {
20
- const bezierPiece = bezierPieces[i];
21
- const ps = closestPointsOnCurve(bezierPiece.curve, point, bezierPiece.ts, touchedCurve, t);
22
- const p = getObjClosestTo(point, ps, p => p.p);
23
- if (p === undefined) {
24
- continue;
25
- }
26
- const d = distanceBetween(p.p, point);
27
- let curve = bezierPiece.curve;
28
- let t_ = p.t;
29
- if (d < bestDistance) {
30
- if (t_ === 0) {
31
- t_ = 1;
32
- curve = bezierPiece.curve.prev;
33
- }
34
- posInfo = { pos: new PointOnShape(curve, t_), d };
35
- bestDistance = d;
36
- }
37
- }
38
- return posInfo;
39
- }
40
- export { getClosestBoundaryPoint };
1
+ import { distanceBetween, getObjClosestTo } from 'flo-vector2d';
2
+ import { PointOnShape } from '../../point-on-shape.js';
3
+ import { cullBezierPieces } from './cull-bezier-pieces.js';
4
+ import { closestPointsOnCurve } from './closest-points-on-curve.js';
5
+ /**
6
+ * @hidden
7
+ * Returns the closest boundary point to the given point, limited to the given
8
+ * bezier pieces, including the beziers actually checked after culling.
9
+ * @param bezierPieces
10
+ * @param point
11
+ * @param touchedCurve
12
+ * @param t
13
+ * @param extreme
14
+ */
15
+ function getClosestBoundaryPoint(bezierPieces, point, touchedCurve, t) {
16
+ bezierPieces = cullBezierPieces(bezierPieces, point);
17
+ let bestDistance = Number.POSITIVE_INFINITY;
18
+ let posInfo;
19
+ for (let i = 0; i < bezierPieces.length; i++) {
20
+ const bezierPiece = bezierPieces[i];
21
+ const ps = closestPointsOnCurve(bezierPiece.curve, point, bezierPiece.ts, touchedCurve, t);
22
+ const p = getObjClosestTo(point, ps, p => p.p);
23
+ if (p === undefined) {
24
+ continue;
25
+ }
26
+ const d = distanceBetween(p.p, point);
27
+ let curve = bezierPiece.curve;
28
+ let t_ = p.t;
29
+ if (d < bestDistance) {
30
+ if (t_ === 0) {
31
+ t_ = 1;
32
+ curve = bezierPiece.curve.prev;
33
+ }
34
+ posInfo = { pos: new PointOnShape(curve, t_), d };
35
+ bestDistance = d;
36
+ }
37
+ }
38
+ return posInfo;
39
+ }
40
+ export { getClosestBoundaryPoint };
41
41
  //# sourceMappingURL=get-closest-boundary-point.js.map
@@ -1,37 +1,37 @@
1
- /**
2
- * @hidden
3
- * Represents a corner on the shape boundary, i.e. a point where two bezier
4
- * curves meet. Typically used internally only.
5
- */
6
- interface Corner {
7
- /**
8
- * The unit tangents at the points t === 1 of the first curve and at
9
- * t === 0 of the second respectively.
10
- */
11
- tangents: number[][];
12
- /** The cross of the unit tangents. */
13
- crossTangents: number;
14
- /**
15
- * True if the corner is sharp, i.e. > 0 radians as one goes in a positive
16
- * direction around the shape boundary.
17
- */
18
- isSharp: boolean;
19
- /**
20
- * True if the corner is dull, i.e. < 0 radians as one goes in a positive
21
- * direction around the shape boundary.
22
- */
23
- isDull: boolean;
24
- /**
25
- * True if the corner is quite sharp, i.e. > δ radians as one goes in a
26
- * positive direction around the shape boundary where δ is some
27
- * pre-determined parameter.
28
- */
29
- isQuiteSharp: boolean;
30
- /**
31
- * True if the corner is quite dull, i.e. < δ radians as one goes in a
32
- * positive direction around the shape boundary where δ is some
33
- * pre-determined parameter.
34
- */
35
- isQuiteDull: boolean;
36
- }
37
- export { Corner };
1
+ /**
2
+ * @hidden
3
+ * Represents a corner on the shape boundary, i.e. a point where two bezier
4
+ * curves meet. Typically used internally only.
5
+ */
6
+ interface Corner {
7
+ /**
8
+ * The unit tangents at the points t === 1 of the first curve and at
9
+ * t === 0 of the second respectively.
10
+ */
11
+ tangents: number[][];
12
+ /** The cross of the unit tangents. */
13
+ crossTangents: number;
14
+ /**
15
+ * True if the corner is sharp, i.e. > 0 radians as one goes in a positive
16
+ * direction around the shape boundary.
17
+ */
18
+ isSharp: boolean;
19
+ /**
20
+ * True if the corner is dull, i.e. < 0 radians as one goes in a positive
21
+ * direction around the shape boundary.
22
+ */
23
+ isDull: boolean;
24
+ /**
25
+ * True if the corner is quite sharp, i.e. > δ radians as one goes in a
26
+ * positive direction around the shape boundary where δ is some
27
+ * pre-determined parameter.
28
+ */
29
+ isQuiteSharp: boolean;
30
+ /**
31
+ * True if the corner is quite dull, i.e. < δ radians as one goes in a
32
+ * positive direction around the shape boundary where δ is some
33
+ * pre-determined parameter.
34
+ */
35
+ isQuiteDull: boolean;
36
+ }
37
+ export { Corner };
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=corner.js.map
@@ -1,9 +1,9 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { CpNode } from '../cp-node.js';
3
- import { Loop } from '../loop.js';
4
- /**
5
- * @hidden
6
- * @param cpNode
7
- */
8
- declare function createNewCpTree(cpNode: CpNode): Map<Loop, LlRbTree<CpNode>>;
9
- export { createNewCpTree };
1
+ import { LlRbTree } from 'flo-ll-rb-tree';
2
+ import { CpNode } from '../cp-node.js';
3
+ import { Loop } from '../loop.js';
4
+ /**
5
+ * @hidden
6
+ * @param cpNode
7
+ */
8
+ declare function createNewCpTree(cpNode: CpNode): Map<Loop, LlRbTree<CpNode>>;
9
+ export { createNewCpTree };
@@ -1,24 +1,24 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { CpNode } from '../cp-node.js';
3
- /**
4
- * @hidden
5
- * @param cpNode
6
- */
7
- function createNewCpTree(cpNode) {
8
- const newCpTrees = new Map();
9
- const cps = cpNode.getAllOnLoop();
10
- cps.forEach(f);
11
- function f(cpNode) {
12
- const loop = cpNode.cp.pointOnShape.curve.loop;
13
- let cpTree = newCpTrees.get(loop);
14
- if (!cpTree) {
15
- // qqq cpTree = new LlRbTree(CpNode.comparator, [], true);
16
- cpTree = new LlRbTree(CpNode.comparator, false);
17
- newCpTrees.set(loop, cpTree);
18
- }
19
- cpTree.insert(cpNode);
20
- }
21
- return newCpTrees;
22
- }
23
- export { createNewCpTree };
1
+ import { LlRbTree } from 'flo-ll-rb-tree';
2
+ import { CpNode } from '../cp-node.js';
3
+ /**
4
+ * @hidden
5
+ * @param cpNode
6
+ */
7
+ function createNewCpTree(cpNode) {
8
+ const newCpTrees = new Map();
9
+ const cps = cpNode.getAllOnLoop();
10
+ cps.forEach(f);
11
+ function f(cpNode) {
12
+ const loop = cpNode.cp.pointOnShape.curve.loop;
13
+ let cpTree = newCpTrees.get(loop);
14
+ if (!cpTree) {
15
+ // qqq cpTree = new LlRbTree(CpNode.comparator, [], true);
16
+ cpTree = new LlRbTree(CpNode.comparator, false);
17
+ newCpTrees.set(loop, cpTree);
18
+ }
19
+ cpTree.insert(cpNode);
20
+ }
21
+ return newCpTrees;
22
+ }
23
+ export { createNewCpTree };
24
24
  //# sourceMappingURL=create-new-cp-tree.js.map
@@ -1,3 +1,3 @@
1
- /** @hidden */
2
- type ElemType_TwoProng = 'twoProng_regular' | 'twoProng_holeClosing';
3
- export { ElemType_TwoProng };
1
+ /** @hidden */
2
+ type ElemType_TwoProng = 'twoProng_regular' | 'twoProng_holeClosing';
3
+ export { ElemType_TwoProng };
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=elem-type-two-prong.js.map
@@ -1,12 +1,12 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { Loop } from '../../loop.js';
3
- import { IPointOnShape } from '../../point-on-shape.js';
4
- import { CpNode } from '../../cp-node.js';
5
- /**
6
- * @hidden
7
- * Add a 1-prong to the MAT.
8
- * @param cpGraphs
9
- * @param pos
10
- */
11
- declare function add1Prong(maxOsculatingCircleRadius: number, cpGraphs: Map<Loop, LlRbTree<CpNode>>, pos: IPointOnShape): void;
12
- export { add1Prong };
1
+ import { LlRbTree } from 'flo-ll-rb-tree';
2
+ import { Loop } from '../../loop.js';
3
+ import { IPointOnShape } from '../../point-on-shape.js';
4
+ import { CpNode } from '../../cp-node.js';
5
+ /**
6
+ * @hidden
7
+ * Add a 1-prong to the MAT.
8
+ * @param cpGraphs
9
+ * @param pos
10
+ */
11
+ declare function add1Prong(maxOsculatingCircleRadius: number, cpGraphs: Map<Loop, LlRbTree<CpNode>>, pos: IPointOnShape): void;
12
+ export { add1Prong };
@@ -1,43 +1,43 @@
1
- import { getOsculatingCircle, calcPosOrder, isPosDullCorner } from '../../point-on-shape.js';
2
- import { addToCpGraph } from '../add-to-cp-graph.js';
3
- import { isAnotherCpCloseby } from '../is-another-cp-closeby.js';
4
- /**
5
- * @hidden
6
- * Add a 1-prong to the MAT.
7
- * @param cpGraphs
8
- * @param pos
9
- */
10
- function add1Prong(maxOsculatingCircleRadius, cpGraphs, pos) {
11
- //if (PointOnShape.isDullCorner(pos)) {
12
- if (isPosDullCorner(pos)) {
13
- // This is a 1-prong at a dull corner.
14
- // TODO IMPORTANT
15
- // Remove this line, uncomment piece below it and implement the
16
- // following strategy to find the 3-prongs: if deltas are conjoined due
17
- // to dull corner, split the conjoinment by inserting successively
18
- // closer (binary division) 2-prongs. If a 2-prong actually fails,
19
- // simply remove the 1-prong at the dull corner. In this way **all**
20
- // terminal points are found, e.g. zoom in on top left leg of ant.
21
- // Afterthought: there is a better way - split points by two prongs.
22
- //toRemove.push(posNode); // this!
23
- if (typeof _debug_ !== 'undefined') {
24
- _debug_.generated.elems.oneProngAtDullCorner.push(pos);
25
- }
26
- return;
27
- }
28
- //let circle = PointOnShape.getOsculatingCircle(maxOsculatingCircleRadius, pos);
29
- const circle = getOsculatingCircle(maxOsculatingCircleRadius, pos);
30
- //const order = PointOnShape.calcOrder(circle, pos);
31
- const order = calcPosOrder(circle, pos);
32
- // Make sure there isn't already a ContactPoint close by - it can cause
33
- // floating point stability issues.
34
- if (isAnotherCpCloseby(cpGraphs, pos, circle, order, 0, 1000, 'magenta')) {
35
- return;
36
- }
37
- addToCpGraph(circle, [-0.5, +0.5], cpGraphs, [pos, pos]);
38
- if (typeof _debug_ !== 'undefined') {
39
- _debug_.generated.elems.oneProng.push(pos);
40
- }
41
- }
42
- export { add1Prong };
1
+ import { getOsculatingCircle, calcPosOrder, isPosDullCorner } from '../../point-on-shape.js';
2
+ import { addToCpGraph } from '../add-to-cp-graph.js';
3
+ import { isAnotherCpCloseby } from '../is-another-cp-closeby.js';
4
+ /**
5
+ * @hidden
6
+ * Add a 1-prong to the MAT.
7
+ * @param cpGraphs
8
+ * @param pos
9
+ */
10
+ function add1Prong(maxOsculatingCircleRadius, cpGraphs, pos) {
11
+ //if (PointOnShape.isDullCorner(pos)) {
12
+ if (isPosDullCorner(pos)) {
13
+ // This is a 1-prong at a dull corner.
14
+ // TODO IMPORTANT
15
+ // Remove this line, uncomment piece below it and implement the
16
+ // following strategy to find the 3-prongs: if deltas are conjoined due
17
+ // to dull corner, split the conjoinment by inserting successively
18
+ // closer (binary division) 2-prongs. If a 2-prong actually fails,
19
+ // simply remove the 1-prong at the dull corner. In this way **all**
20
+ // terminal points are found, e.g. zoom in on top left leg of ant.
21
+ // Afterthought: there is a better way - split points by two prongs.
22
+ //toRemove.push(posNode); // this!
23
+ if (typeof _debug_ !== 'undefined') {
24
+ _debug_.generated.elems.oneProngAtDullCorner.push(pos);
25
+ }
26
+ return;
27
+ }
28
+ //let circle = PointOnShape.getOsculatingCircle(maxOsculatingCircleRadius, pos);
29
+ const circle = getOsculatingCircle(maxOsculatingCircleRadius, pos);
30
+ //const order = PointOnShape.calcOrder(circle, pos);
31
+ const order = calcPosOrder(circle, pos);
32
+ // Make sure there isn't already a ContactPoint close by - it can cause
33
+ // floating point stability issues.
34
+ if (isAnotherCpCloseby(cpGraphs, pos, circle, order, 0, 1000, 'magenta')) {
35
+ return;
36
+ }
37
+ addToCpGraph(circle, [-0.5, +0.5], cpGraphs, [pos, pos]);
38
+ if (typeof _debug_ !== 'undefined') {
39
+ _debug_.generated.elems.oneProng.push(pos);
40
+ }
41
+ }
42
+ export { add1Prong };
43
43
  //# sourceMappingURL=add-1-prong.js.map
@@ -1,21 +1,21 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { Loop } from '../../loop.js';
3
- import { CpNode } from '../../cp-node.js';
4
- import { Circle } from '../../circle.js';
5
- import { IPointOnShape } from '../../point-on-shape.js';
6
- /**
7
- * @hidden
8
- * Adds a 2-prong contact circle to the shape.
9
- * @param cpGraphs
10
- * @param circle Circle containing the 2 contact points
11
- * @param posSource The source point on shape
12
- * @param posAntipode The found antipodal point on shape
13
- * @param holeClosing True if this is a hole-closing 2-prong, false otherwise
14
- * @param extreme The maximum coordinate value used to calculate floating point
15
- * tolerances.
16
- */
17
- declare function add2Prong(cpGraphs: Map<Loop, LlRbTree<CpNode>>, circle: Circle, posSource: IPointOnShape, posAntipodes: {
18
- pos: IPointOnShape;
19
- d: number;
20
- }[], holeClosing: boolean, extreme: number): CpNode;
21
- export { add2Prong };
1
+ import { LlRbTree } from 'flo-ll-rb-tree';
2
+ import { Loop } from '../../loop.js';
3
+ import { CpNode } from '../../cp-node.js';
4
+ import { Circle } from '../../circle.js';
5
+ import { IPointOnShape } from '../../point-on-shape.js';
6
+ /**
7
+ * @hidden
8
+ * Adds a 2-prong contact circle to the shape.
9
+ * @param cpGraphs
10
+ * @param circle Circle containing the 2 contact points
11
+ * @param posSource The source point on shape
12
+ * @param posAntipode The found antipodal point on shape
13
+ * @param holeClosing True if this is a hole-closing 2-prong, false otherwise
14
+ * @param extreme The maximum coordinate value used to calculate floating point
15
+ * tolerances.
16
+ */
17
+ declare function add2Prong(cpGraphs: Map<Loop, LlRbTree<CpNode>>, circle: Circle, posSource: IPointOnShape, posAntipodes: {
18
+ pos: IPointOnShape;
19
+ d: number;
20
+ }[], holeClosing: boolean, extreme: number): CpNode;
21
+ export { add2Prong };