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,68 +1,68 @@
1
- import { getBoundingHull, getBoundingBoxTight } from 'flo-bezier3';
2
- import { getCornerAtEnd } from '../../curve.js';
3
- import { getBoundingBox_ } from '../../get-bounding-box-.js';
4
- let timingStart;
5
- /** @hidden */
6
- function addDebugInfo1(loops) {
7
- if (typeof _debug_ === 'undefined') {
8
- return;
9
- }
10
- timingStart = performance.now();
11
- for (const loop of loops) {
12
- _debug_.fs.nameObj(loop, 'l|');
13
- }
14
- const generated = _debug_.generated;
15
- //generated.elems.loop.push(...loops);
16
- //generated.elems.loops.push(loops);
17
- for (const loop of loops) {
18
- let i = 0;
19
- loop.curves.forEach(function (curve) {
20
- const ps = curve.ps;
21
- const hull = getBoundingHull(ps);
22
- generated.elems.boundingHull.push(hull);
23
- const looseBoundingBox = getBoundingBox_(ps);
24
- generated.elems.looseBoundingBox.push(looseBoundingBox);
25
- const tightBoundingBox = getBoundingBoxTight(ps);
26
- generated.elems.tightBoundingBox.push(tightBoundingBox);
27
- const corner = getCornerAtEnd(curve);
28
- if (corner.isSharp) {
29
- generated.elems.sharpCorner.push(curve);
30
- }
31
- else if (corner.isDull) {
32
- generated.elems.dullCorner.push(curve);
33
- }
34
- i++;
35
- });
36
- }
37
- }
38
- /** @hidden */
39
- function addDebugInfo2() {
40
- if (typeof _debug_ === 'undefined') {
41
- return;
42
- }
43
- const timing = _debug_.generated.timing;
44
- const now = performance.now();
45
- timing.holeClosers += now - timingStart;
46
- timingStart = now;
47
- }
48
- function addDebugInfo3() {
49
- if (typeof _debug_ === 'undefined') {
50
- return;
51
- }
52
- const generated = _debug_.generated;
53
- const timing = generated.timing;
54
- const now = performance.now();
55
- timing.oneAnd2Prongs += now - timingStart;
56
- timingStart = now;
57
- }
58
- function addDebugInfo4(mat) {
59
- if (typeof _debug_ === 'undefined') {
60
- return;
61
- }
62
- const generated = _debug_.generated;
63
- const timing = generated.timing;
64
- generated.elems.mat.push(mat);
65
- timing.threeProngs += performance.now() - timingStart;
66
- }
67
- export { addDebugInfo1, addDebugInfo2, addDebugInfo3, addDebugInfo4 };
1
+ import { getBoundingHull, getBoundingBoxTight } from 'flo-bezier3';
2
+ import { getCornerAtEnd } from '../../curve.js';
3
+ import { getBoundingBox_ } from '../../get-bounding-box-.js';
4
+ let timingStart;
5
+ /** @hidden */
6
+ function addDebugInfo1(loops) {
7
+ if (typeof _debug_ === 'undefined') {
8
+ return;
9
+ }
10
+ timingStart = performance.now();
11
+ for (const loop of loops) {
12
+ _debug_.fs.nameObj(loop, 'l|');
13
+ }
14
+ const generated = _debug_.generated;
15
+ //generated.elems.loop.push(...loops);
16
+ //generated.elems.loops.push(loops);
17
+ for (const loop of loops) {
18
+ let i = 0;
19
+ loop.curves.forEach(function (curve) {
20
+ const ps = curve.ps;
21
+ const hull = getBoundingHull(ps);
22
+ generated.elems.boundingHull.push(hull);
23
+ const looseBoundingBox = getBoundingBox_(ps);
24
+ generated.elems.looseBoundingBox.push(looseBoundingBox);
25
+ const tightBoundingBox = getBoundingBoxTight(ps);
26
+ generated.elems.tightBoundingBox.push(tightBoundingBox);
27
+ const corner = getCornerAtEnd(curve);
28
+ if (corner.isSharp) {
29
+ generated.elems.sharpCorner.push(curve);
30
+ }
31
+ else if (corner.isDull) {
32
+ generated.elems.dullCorner.push(curve);
33
+ }
34
+ i++;
35
+ });
36
+ }
37
+ }
38
+ /** @hidden */
39
+ function addDebugInfo2() {
40
+ if (typeof _debug_ === 'undefined') {
41
+ return;
42
+ }
43
+ const timing = _debug_.generated.timing;
44
+ const now = performance.now();
45
+ timing.holeClosers += now - timingStart;
46
+ timingStart = now;
47
+ }
48
+ function addDebugInfo3() {
49
+ if (typeof _debug_ === 'undefined') {
50
+ return;
51
+ }
52
+ const generated = _debug_.generated;
53
+ const timing = generated.timing;
54
+ const now = performance.now();
55
+ timing.oneAnd2Prongs += now - timingStart;
56
+ timingStart = now;
57
+ }
58
+ function addDebugInfo4(mat) {
59
+ if (typeof _debug_ === 'undefined') {
60
+ return;
61
+ }
62
+ const generated = _debug_.generated;
63
+ const timing = generated.timing;
64
+ generated.elems.mat.push(mat);
65
+ timing.threeProngs += performance.now() - timingStart;
66
+ }
67
+ export { addDebugInfo1, addDebugInfo2, addDebugInfo3, addDebugInfo4 };
68
68
  //# sourceMappingURL=add-debug-info.js.map
@@ -1,11 +1,11 @@
1
- import { Loop } from '../../loop.js';
2
- import { IPointOnShape } from '../../point-on-shape.js';
3
- /**
4
- * @hidden
5
- * Get useful points on the shape - these incude points of maximum curvature and
6
- * points at the bezier-bezier interfaces.
7
- * @param loop
8
- * @param additionalPointCount
9
- */
10
- declare function getInterestingPointsOnLoop(minBezLength: number, maxCurviness: number, maxLength: number): (loop: Loop) => IPointOnShape[];
11
- export { getInterestingPointsOnLoop };
1
+ import { Loop } from '../../loop.js';
2
+ import { IPointOnShape } from '../../point-on-shape.js';
3
+ /**
4
+ * @hidden
5
+ * Get useful points on the shape - these incude points of maximum curvature and
6
+ * points at the bezier-bezier interfaces.
7
+ * @param loop
8
+ * @param additionalPointCount
9
+ */
10
+ declare function getInterestingPointsOnLoop(minBezLength: number, maxCurviness: number, maxLength: number): (loop: Loop) => IPointOnShape[];
11
+ export { getInterestingPointsOnLoop };
@@ -1,52 +1,52 @@
1
- import { getCurvatureExtrema, splitByCurvatureAndLength, controlPointLinesLength } from 'flo-bezier3';
2
- import { getContactCirclesAtInterface } from '../get-contact-circles-at-interface.js';
3
- import { PointOnShape, comparePoss } from '../../point-on-shape.js';
4
- /**
5
- * @hidden
6
- * Get useful points on the shape - these incude points of maximum curvature and
7
- * points at the bezier-bezier interfaces.
8
- * @param loop
9
- * @param additionalPointCount
10
- */
11
- function getInterestingPointsOnLoop(minBezLength, maxCurviness, maxLength) {
12
- return function (loop) {
13
- const allPoints = [];
14
- for (let i = 0; i < loop.curves.length; i++) {
15
- const curve = loop.curves[i];
16
- // qqq if (lengthSquaredUpperBound(curve.ps) < minBezLength) {
17
- if (controlPointLinesLength(curve.ps) < minBezLength) {
18
- continue;
19
- }
20
- /*
21
- let { maxCurvatureTs, maxNegativeCurvatureTs } =
22
- getCurvatureExtrema(curve.ps);
23
- let maxCurvatures = maxCurvatureTs.map(t => new PointOnShape(curve, t));
24
- let maxNegativeCurvatures = maxNegativeCurvatureTs.map(t => new PointOnShape(curve, t));
25
-
26
- allPoints.push(
27
- ...getContactCirclesAtInterface(curve),
28
- ...maxCurvatures,
29
- ...maxNegativeCurvatures
30
- );
31
- */
32
- // let { maxima } = getCurvatureExtrema(curve.ps);
33
- // qqq let { maxCurvatureTs, maxNegativeCurvatureTs } = getCurvatureExtrema(curve.ps);
34
- const { maxima } = getCurvatureExtrema(curve.ps);
35
- // let maxAbsCurvatures = maxima.map(t => new PointOnShape(curve, t));
36
- // qqq let maxAbsCurvatures = [...maxCurvatureTs, ...maxNegativeCurvatureTs].map(t => new PointOnShape(curve, t));
37
- const maxAbsCurvatures = [...maxima].map(t => new PointOnShape(curve, t));
38
- allPoints.push(...getContactCirclesAtInterface(curve), ...maxAbsCurvatures);
39
- let ts = splitByCurvatureAndLength(curve.ps, maxCurviness, maxLength);
40
- if (ts.length === 2) {
41
- ts = [0, 0.5, 1];
42
- }
43
- for (let i = 1; i < ts.length - 1; i++) {
44
- allPoints.push(new PointOnShape(curve, ts[i]));
45
- }
46
- }
47
- allPoints.sort(comparePoss);
48
- return allPoints;
49
- };
50
- }
51
- export { getInterestingPointsOnLoop };
1
+ import { getCurvatureExtrema, splitByCurvatureAndLength, controlPointLinesLength } from 'flo-bezier3';
2
+ import { getContactCirclesAtInterface } from '../get-contact-circles-at-interface.js';
3
+ import { PointOnShape, comparePoss } from '../../point-on-shape.js';
4
+ /**
5
+ * @hidden
6
+ * Get useful points on the shape - these incude points of maximum curvature and
7
+ * points at the bezier-bezier interfaces.
8
+ * @param loop
9
+ * @param additionalPointCount
10
+ */
11
+ function getInterestingPointsOnLoop(minBezLength, maxCurviness, maxLength) {
12
+ return function (loop) {
13
+ const allPoints = [];
14
+ for (let i = 0; i < loop.curves.length; i++) {
15
+ const curve = loop.curves[i];
16
+ // qqq if (lengthSquaredUpperBound(curve.ps) < minBezLength) {
17
+ if (controlPointLinesLength(curve.ps) < minBezLength) {
18
+ continue;
19
+ }
20
+ /*
21
+ let { maxCurvatureTs, maxNegativeCurvatureTs } =
22
+ getCurvatureExtrema(curve.ps);
23
+ let maxCurvatures = maxCurvatureTs.map(t => new PointOnShape(curve, t));
24
+ let maxNegativeCurvatures = maxNegativeCurvatureTs.map(t => new PointOnShape(curve, t));
25
+
26
+ allPoints.push(
27
+ ...getContactCirclesAtInterface(curve),
28
+ ...maxCurvatures,
29
+ ...maxNegativeCurvatures
30
+ );
31
+ */
32
+ // let { maxima } = getCurvatureExtrema(curve.ps);
33
+ // qqq let { maxCurvatureTs, maxNegativeCurvatureTs } = getCurvatureExtrema(curve.ps);
34
+ const { maxima } = getCurvatureExtrema(curve.ps);
35
+ // let maxAbsCurvatures = maxima.map(t => new PointOnShape(curve, t));
36
+ // qqq let maxAbsCurvatures = [...maxCurvatureTs, ...maxNegativeCurvatureTs].map(t => new PointOnShape(curve, t));
37
+ const maxAbsCurvatures = [...maxima].map(t => new PointOnShape(curve, t));
38
+ allPoints.push(...getContactCirclesAtInterface(curve), ...maxAbsCurvatures);
39
+ let ts = splitByCurvatureAndLength(curve.ps, maxCurviness, maxLength);
40
+ if (ts.length === 2) {
41
+ ts = [0, 0.5, 1];
42
+ }
43
+ for (let i = 1; i < ts.length - 1; i++) {
44
+ allPoints.push(new PointOnShape(curve, ts[i]));
45
+ }
46
+ }
47
+ allPoints.sort(comparePoss);
48
+ return allPoints;
49
+ };
50
+ }
51
+ export { getInterestingPointsOnLoop };
52
52
  //# sourceMappingURL=create-get-interesting-points-on-loop.js.map
@@ -1,12 +1,12 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { Loop } from '../../loop.js';
3
- import { CpNode } from '../../cp-node.js';
4
- import { IPointOnShape } from '../../point-on-shape.js';
5
- /**
6
- * @hidden
7
- * Creates the initial ContactPoint loops from the given sharp corners.
8
- * @param shape
9
- * @param sharpCornerss
10
- */
11
- declare function createInitialCpGraph(loops: Loop[], cpTrees: Map<Loop, LlRbTree<CpNode>>, sharpCornerss: IPointOnShape[][]): CpNode;
12
- export { createInitialCpGraph };
1
+ import { LlRbTree } from 'flo-ll-rb-tree';
2
+ import { Loop } from '../../loop.js';
3
+ import { CpNode } from '../../cp-node.js';
4
+ import { IPointOnShape } from '../../point-on-shape.js';
5
+ /**
6
+ * @hidden
7
+ * Creates the initial ContactPoint loops from the given sharp corners.
8
+ * @param shape
9
+ * @param sharpCornerss
10
+ */
11
+ declare function createInitialCpGraph(loops: Loop[], cpTrees: Map<Loop, LlRbTree<CpNode>>, sharpCornerss: IPointOnShape[][]): CpNode;
12
+ export { createInitialCpGraph };
@@ -1,41 +1,41 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { CpNode } from '../../cp-node.js';
3
- /**
4
- * @hidden
5
- * Creates the initial ContactPoint loops from the given sharp corners.
6
- * @param shape
7
- * @param sharpCornerss
8
- */
9
- function createInitialCpGraph(loops, cpTrees, sharpCornerss /*,
10
- xMap: Map<number[][],{ ps: number[][] }>*/) {
11
- let cpNode;
12
- for (let k = 0; k < sharpCornerss.length; k++) {
13
- const sharpCorners = sharpCornerss[k];
14
- // qqq const cpTree = new LlRbTree(CpNode.comparator, [], true);
15
- const cpTree = new LlRbTree(CpNode.comparator, false);
16
- let cpNode1 = undefined;
17
- let cpNode2 = undefined;
18
- for (const pos of sharpCorners) {
19
- const ps = pos.curve.next.ps;
20
- //const x = xMap.get(ps);
21
- //const isIntersection = !!x;
22
- const circle = { center: pos.p, radius: 0 };
23
- const cp1 = { pointOnShape: pos, circle, order: -1, order2: 0 };
24
- const cp2 = { pointOnShape: pos, circle, order: +1, order2: 0 };
25
- cpNode1 = CpNode.insert(false, /*isIntersection*/ false, cpTree, cp1, cpNode2);
26
- cpNode2 = CpNode.insert(false, /*isIntersection*/ false, cpTree, cp2, cpNode1);
27
- cpNode1.prevOnCircle = cpNode2;
28
- cpNode2.prevOnCircle = cpNode1;
29
- cpNode1.nextOnCircle = cpNode2;
30
- cpNode2.nextOnCircle = cpNode1;
31
- }
32
- if (!cpNode) {
33
- cpNode = cpNode1;
34
- }
35
- const loop = loops[k];
36
- cpTrees.set(loop, cpTree);
37
- }
38
- return cpNode;
39
- }
40
- export { createInitialCpGraph };
1
+ import { LlRbTree } from 'flo-ll-rb-tree';
2
+ import { CpNode } from '../../cp-node.js';
3
+ /**
4
+ * @hidden
5
+ * Creates the initial ContactPoint loops from the given sharp corners.
6
+ * @param shape
7
+ * @param sharpCornerss
8
+ */
9
+ function createInitialCpGraph(loops, cpTrees, sharpCornerss /*,
10
+ xMap: Map<number[][],{ ps: number[][] }>*/) {
11
+ let cpNode;
12
+ for (let k = 0; k < sharpCornerss.length; k++) {
13
+ const sharpCorners = sharpCornerss[k];
14
+ // qqq const cpTree = new LlRbTree(CpNode.comparator, [], true);
15
+ const cpTree = new LlRbTree(CpNode.comparator, false);
16
+ let cpNode1 = undefined;
17
+ let cpNode2 = undefined;
18
+ for (const pos of sharpCorners) {
19
+ const ps = pos.curve.next.ps;
20
+ //const x = xMap.get(ps);
21
+ //const isIntersection = !!x;
22
+ const circle = { center: pos.p, radius: 0 };
23
+ const cp1 = { pointOnShape: pos, circle, order: -1, order2: 0 };
24
+ const cp2 = { pointOnShape: pos, circle, order: +1, order2: 0 };
25
+ cpNode1 = CpNode.insert(false, /*isIntersection*/ false, cpTree, cp1, cpNode2);
26
+ cpNode2 = CpNode.insert(false, /*isIntersection*/ false, cpTree, cp2, cpNode1);
27
+ cpNode1.prevOnCircle = cpNode2;
28
+ cpNode2.prevOnCircle = cpNode1;
29
+ cpNode1.nextOnCircle = cpNode2;
30
+ cpNode2.nextOnCircle = cpNode1;
31
+ }
32
+ if (!cpNode) {
33
+ cpNode = cpNode1;
34
+ }
35
+ const loop = loops[k];
36
+ cpTrees.set(loop, cpTree);
37
+ }
38
+ return cpNode;
39
+ }
40
+ export { createInitialCpGraph };
41
41
  //# sourceMappingURL=create-initial-cp-graph.js.map
@@ -1,8 +1,8 @@
1
- import { IPointOnShape } from '../../../point-on-shape.js';
2
- import { Circle } from '../../../circle.js';
3
- import { CpNode } from '../../../cp-node.js';
4
- import { BezierPiece } from '../../bezier-piece.js';
5
- import { TXForDebugging } from './x-for-debugging.js';
6
- /** @hidden */
7
- declare function addDebugInfo(bezierPieces: BezierPiece[], failed: boolean, pos: IPointOnShape, circle: Circle, z: IPointOnShape, δ: CpNode[], xs: TXForDebugging[], holeClosing: boolean): void;
8
- export { addDebugInfo };
1
+ import { IPointOnShape } from '../../../point-on-shape.js';
2
+ import { Circle } from '../../../circle.js';
3
+ import { CpNode } from '../../../cp-node.js';
4
+ import { BezierPiece } from '../../bezier-piece.js';
5
+ import { TXForDebugging } from './x-for-debugging.js';
6
+ /** @hidden */
7
+ declare function addDebugInfo(bezierPieces: BezierPiece[], failed: boolean, pos: IPointOnShape, circle: Circle, z: IPointOnShape, δ: CpNode[], xs: TXForDebugging[], holeClosing: boolean): void;
8
+ export { addDebugInfo };
@@ -1,22 +1,22 @@
1
- import { getTwoProngType } from '../../get-two-prong-type.js';
2
- /** @hidden */
3
- function addDebugInfo(bezierPieces, failed, pos, circle, z, δ, xs, holeClosing) {
4
- const twoProng = {
5
- generated: _debug_.generated,
6
- bezierPieces,
7
- pos,
8
- δ,
9
- z: z ? z.p : undefined,
10
- circle,
11
- xs,
12
- failed,
13
- holeClosing,
14
- notAdded: false,
15
- deleted: false,
16
- cpNode: undefined
17
- };
18
- const twoProngType = getTwoProngType(twoProng);
19
- _debug_.generated.elems[twoProngType].push(twoProng);
20
- }
21
- export { addDebugInfo };
1
+ import { getTwoProngType } from '../../get-two-prong-type.js';
2
+ /** @hidden */
3
+ function addDebugInfo(bezierPieces, failed, pos, circle, z, δ, xs, holeClosing) {
4
+ const twoProng = {
5
+ generated: _debug_.generated,
6
+ bezierPieces,
7
+ pos,
8
+ δ,
9
+ z: z ? z.p : undefined,
10
+ circle,
11
+ xs,
12
+ failed,
13
+ holeClosing,
14
+ notAdded: false,
15
+ deleted: false,
16
+ cpNode: undefined
17
+ };
18
+ const twoProngType = getTwoProngType(twoProng);
19
+ _debug_.generated.elems[twoProngType].push(twoProng);
20
+ }
21
+ export { addDebugInfo };
22
22
  //# sourceMappingURL=add-debug-info.js.map
@@ -1,11 +1,11 @@
1
- import { BezierPiece } from '../../bezier-piece.js';
2
- /**
3
- * @hidden
4
- * Cull all bezierPieces not within given radius of a given point.
5
- * @param extreme
6
- * @param bezierPieces
7
- * @param p
8
- * @param rSquared
9
- */
10
- declare function cullBezierPieces(bezierPieces: BezierPiece[], p: number[], rSquared: number): BezierPiece[];
11
- export { cullBezierPieces };
1
+ import { BezierPiece } from '../../bezier-piece.js';
2
+ /**
3
+ * @hidden
4
+ * Cull all bezierPieces not within given radius of a given point.
5
+ * @param extreme
6
+ * @param bezierPieces
7
+ * @param p
8
+ * @param rSquared
9
+ */
10
+ declare function cullBezierPieces(bezierPieces: BezierPiece[], p: number[], rSquared: number): BezierPiece[];
11
+ export { cullBezierPieces };
@@ -1,30 +1,30 @@
1
- import { getClosestSquareDistanceToRect } from '../../geometry/get-closest-square-distance-to-rect.js';
2
- import { getBoundingBox_ } from '../../../get-bounding-box-.js';
3
- /**
4
- * @hidden
5
- * Cull all bezierPieces not within given radius of a given point.
6
- * @param extreme
7
- * @param bezierPieces
8
- * @param p
9
- * @param rSquared
10
- */
11
- function cullBezierPieces(bezierPieces, p, rSquared) {
12
- const CULL_THRESHOLD = 5;
13
- // TODO - base delta on theory
14
- const TOLERANCE = 1 + 1e-3;
15
- if (bezierPieces.length <= CULL_THRESHOLD) {
16
- return bezierPieces;
17
- }
18
- const newPieces = [];
19
- for (const bezierPiece of bezierPieces) {
20
- const ps = bezierPiece.curve.ps;
21
- const rect = getBoundingBox_(ps);
22
- const bd = getClosestSquareDistanceToRect(rect, p);
23
- if (bd <= rSquared * TOLERANCE) {
24
- newPieces.push(bezierPiece);
25
- }
26
- }
27
- return newPieces;
28
- }
29
- export { cullBezierPieces };
1
+ import { getClosestSquareDistanceToRect } from '../../geometry/get-closest-square-distance-to-rect.js';
2
+ import { getBoundingBox_ } from '../../../get-bounding-box-.js';
3
+ /**
4
+ * @hidden
5
+ * Cull all bezierPieces not within given radius of a given point.
6
+ * @param extreme
7
+ * @param bezierPieces
8
+ * @param p
9
+ * @param rSquared
10
+ */
11
+ function cullBezierPieces(bezierPieces, p, rSquared) {
12
+ const CULL_THRESHOLD = 5;
13
+ // TODO - base delta on theory
14
+ const TOLERANCE = 1 + 1e-3;
15
+ if (bezierPieces.length <= CULL_THRESHOLD) {
16
+ return bezierPieces;
17
+ }
18
+ const newPieces = [];
19
+ for (const bezierPiece of bezierPieces) {
20
+ const ps = bezierPiece.curve.ps;
21
+ const rect = getBoundingBox_(ps);
22
+ const bd = getClosestSquareDistanceToRect(rect, p);
23
+ if (bd <= rSquared * TOLERANCE) {
24
+ newPieces.push(bezierPiece);
25
+ }
26
+ }
27
+ return newPieces;
28
+ }
29
+ export { cullBezierPieces };
30
30
  //# sourceMappingURL=cull-bezier-pieces.js.map
@@ -1,37 +1,37 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { CpNode } from '../../../cp-node.js';
3
- import { Loop } from '../../../loop.js';
4
- import { Circle } from '../../../circle.js';
5
- import { IPointOnShape } from '../../../point-on-shape.js';
6
- /**
7
- * @hidden
8
- * Adds a 2-prong to the MAT. The first point on the shape boundary is given and
9
- * the second one is found by the algorithm.
10
- *
11
- * A 2-prong is defined as a MAT circle that touches the shape at exactly 2
12
- * points.
13
- *
14
- * Before any 2-prongs are added the entire shape is our δΩ (1-prongs do not
15
- * reduce the boundary).
16
- *
17
- * As per the paper by Choi, Choi, Moon and Wee:
18
- * "The starting point of this algorithm is a choice of a circle Br(x)
19
- * centered at an interior point x which contains two boundary portions c and
20
- * d of dΩ as in Fig. 19."
21
- * In fact, we (and they) start by fixing one point on the boundary beforehand.
22
- * @param loops A shape represented by path loops
23
- * @param extreme The extreme coordinate value of the shape
24
- * @param squaredDiagonalLength The squared diagonal length of the shape
25
- * bounding box.
26
- * @param y The source point of the 2-prong to be found
27
- * @param isHoleClosing True if this is a hole-closing two-prong, false otherwise
28
- * @param k The loop array index
29
- */
30
- declare function find2Prong(loops: Loop[], extreme: number, squaredDiagonalLength: number, cpTrees: Map<Loop, LlRbTree<CpNode>>, y: IPointOnShape, isHoleClosing: boolean, k: number): {
31
- circle: Circle;
32
- zs: {
33
- pos: IPointOnShape;
34
- d: number;
35
- }[];
36
- };
37
- export { find2Prong };
1
+ import { LlRbTree } from 'flo-ll-rb-tree';
2
+ import { CpNode } from '../../../cp-node.js';
3
+ import { Loop } from '../../../loop.js';
4
+ import { Circle } from '../../../circle.js';
5
+ import { IPointOnShape } from '../../../point-on-shape.js';
6
+ /**
7
+ * @hidden
8
+ * Adds a 2-prong to the MAT. The first point on the shape boundary is given and
9
+ * the second one is found by the algorithm.
10
+ *
11
+ * A 2-prong is defined as a MAT circle that touches the shape at exactly 2
12
+ * points.
13
+ *
14
+ * Before any 2-prongs are added the entire shape is our δΩ (1-prongs do not
15
+ * reduce the boundary).
16
+ *
17
+ * As per the paper by Choi, Choi, Moon and Wee:
18
+ * "The starting point of this algorithm is a choice of a circle Br(x)
19
+ * centered at an interior point x which contains two boundary portions c and
20
+ * d of dΩ as in Fig. 19."
21
+ * In fact, we (and they) start by fixing one point on the boundary beforehand.
22
+ * @param loops A shape represented by path loops
23
+ * @param extreme The extreme coordinate value of the shape
24
+ * @param squaredDiagonalLength The squared diagonal length of the shape
25
+ * bounding box.
26
+ * @param y The source point of the 2-prong to be found
27
+ * @param isHoleClosing True if this is a hole-closing two-prong, false otherwise
28
+ * @param k The loop array index
29
+ */
30
+ declare function find2Prong(loops: Loop[], extreme: number, squaredDiagonalLength: number, cpTrees: Map<Loop, LlRbTree<CpNode>>, y: IPointOnShape, isHoleClosing: boolean, k: number): {
31
+ circle: Circle;
32
+ zs: {
33
+ pos: IPointOnShape;
34
+ d: number;
35
+ }[];
36
+ };
37
+ export { find2Prong };