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,56 +1,56 @@
1
- import { distanceBetween, toUnitVector, fromTo, dot } from 'flo-vector2d';
2
- import { getNeighbouringPoints } from './get-neighboring-cps.js';
3
- /** @hidden */
4
- //const ANGLE_THRESHOLD = Math.cos(3 * (Math.PI / 180)); // 3 degrees
5
- const ANGLE_THRESHOLD = 0.9986295347545738; // === Math.cos(3 degrees)
6
- //const ANGLE_THRESHOLD = 0.9848077530122080; // === Math.cos(10 degrees)
7
- //const ANGLE_THRESHOLD = 0.9998476951563913; // === Math.cos(1 degrees)
8
- //const ANGLE_THRESHOLD = 0.9999984769132877; // === Math.cos(0.1 degrees)
9
- //const ANGLE_THRESHOLD = 0.9999999847691291 // === Math.cos(0.01 degrees)
10
- /**
11
- * @hidden
12
- * Returns true if another CpNode is close to the given implied (via pos, order
13
- * and order2) CpNode.
14
- * @param cpTrees
15
- * @param pos
16
- * @param circle
17
- * @param order
18
- * @param order2
19
- * @param extreme The maximum coordinate value used to calculate floating point
20
- * tolerances.
21
- * @param color Used for debugging only
22
- */
23
- function isAnotherCpCloseby(cpTrees, pos, circle, order, order2, extreme, color) {
24
- //console.log(extreme)
25
- //const DISTANCE_THRESHOLD = extreme * 1e-1;
26
- //const DISTANCE_THRESHOLD = extreme * 1e-1;
27
- const DISTANCE_THRESHOLD = extreme * 1e-4;
28
- //const DISTANCE_THRESHOLD = extreme * 1e-4; - was this
29
- //const DISTANCE_THRESHOLD = extreme * 1e-6;
30
- //const DISTANCE_THRESHOLD = extreme * 1e-12;
31
- // It seems this can be zero else the ordering should be correct
32
- //const DISTANCE_THRESHOLD = 0;
33
- const cpTree = cpTrees.get(pos.curve.loop);
34
- const cpNodes = getNeighbouringPoints(cpTree, pos, order, order2);
35
- if (!cpNodes[0]) {
36
- return false;
37
- }
38
- for (const cpNode of cpNodes) {
39
- const pos2 = cpNode.cp.pointOnShape;
40
- const p1 = pos.p;
41
- const p2 = pos2.p;
42
- if (distanceBetween(p1, p2) > DISTANCE_THRESHOLD) {
43
- continue;
44
- }
45
- const v1 = toUnitVector(fromTo(cpNode.cp.pointOnShape.p, cpNode.cp.circle.center));
46
- const v2 = toUnitVector(fromTo(p1, circle.center));
47
- const cosTheta = dot(v1, v2);
48
- if (cosTheta > ANGLE_THRESHOLD) {
49
- //console.log(`%c${cosTheta} - ${distanceBetween(p1,p2)}`, `color: ${color}`);
50
- return true;
51
- }
52
- }
53
- return false;
54
- }
55
- export { isAnotherCpCloseby };
1
+ import { distanceBetween, toUnitVector, fromTo, dot } from 'flo-vector2d';
2
+ import { getNeighbouringPoints } from './get-neighboring-cps.js';
3
+ /** @hidden */
4
+ //const ANGLE_THRESHOLD = Math.cos(3 * (Math.PI / 180)); // 3 degrees
5
+ const ANGLE_THRESHOLD = 0.9986295347545738; // === Math.cos(3 degrees)
6
+ //const ANGLE_THRESHOLD = 0.9848077530122080; // === Math.cos(10 degrees)
7
+ //const ANGLE_THRESHOLD = 0.9998476951563913; // === Math.cos(1 degrees)
8
+ //const ANGLE_THRESHOLD = 0.9999984769132877; // === Math.cos(0.1 degrees)
9
+ //const ANGLE_THRESHOLD = 0.9999999847691291 // === Math.cos(0.01 degrees)
10
+ /**
11
+ * @hidden
12
+ * Returns true if another CpNode is close to the given implied (via pos, order
13
+ * and order2) CpNode.
14
+ * @param cpTrees
15
+ * @param pos
16
+ * @param circle
17
+ * @param order
18
+ * @param order2
19
+ * @param extreme The maximum coordinate value used to calculate floating point
20
+ * tolerances.
21
+ * @param color Used for debugging only
22
+ */
23
+ function isAnotherCpCloseby(cpTrees, pos, circle, order, order2, extreme, color) {
24
+ //console.log(extreme)
25
+ //const DISTANCE_THRESHOLD = extreme * 1e-1;
26
+ //const DISTANCE_THRESHOLD = extreme * 1e-1;
27
+ const DISTANCE_THRESHOLD = extreme * 1e-4;
28
+ //const DISTANCE_THRESHOLD = extreme * 1e-4; - was this
29
+ //const DISTANCE_THRESHOLD = extreme * 1e-6;
30
+ //const DISTANCE_THRESHOLD = extreme * 1e-12;
31
+ // It seems this can be zero else the ordering should be correct
32
+ //const DISTANCE_THRESHOLD = 0;
33
+ const cpTree = cpTrees.get(pos.curve.loop);
34
+ const cpNodes = getNeighbouringPoints(cpTree, pos, order, order2);
35
+ if (!cpNodes[0]) {
36
+ return false;
37
+ }
38
+ for (const cpNode of cpNodes) {
39
+ const pos2 = cpNode.cp.pointOnShape;
40
+ const p1 = pos.p;
41
+ const p2 = pos2.p;
42
+ if (distanceBetween(p1, p2) > DISTANCE_THRESHOLD) {
43
+ continue;
44
+ }
45
+ const v1 = toUnitVector(fromTo(cpNode.cp.pointOnShape.p, cpNode.cp.circle.center));
46
+ const v2 = toUnitVector(fromTo(p1, circle.center));
47
+ const cosTheta = dot(v1, v2);
48
+ if (cosTheta > ANGLE_THRESHOLD) {
49
+ //console.log(`%c${cosTheta} - ${distanceBetween(p1,p2)}`, `color: ${color}`);
50
+ return true;
51
+ }
52
+ }
53
+ return false;
54
+ }
55
+ export { isAnotherCpCloseby };
56
56
  //# sourceMappingURL=is-another-cp-closeby.js.map
@@ -1,23 +1,23 @@
1
- import { CpNode } from '../cp-node.js';
2
- /**
3
- * Simplifies the given MAT by replacing the piecewise quad beziers composing
4
- * the MAT with fewer ones to within a given tolerance. Returns the map of
5
- * to be deleted nodes only - does not actually delete them. Use simplifyMat
6
- * instead if you want to delete the nodes.
7
- * @param cpNode A representation of the MAT
8
- * @param anlgeTolerance Tolerance given as the degrees difference of the unit
9
- * direction vectors at the interface between curves. A tolerance of zero means
10
- * perfect smoothness is required - defaults to 15.
11
- * @param hausdorffTolerance The approximate maximum Hausdorff Distance tolerance -
12
- * defaults to 0.1
13
- * @param hausdorffSpacing The spacing on the curves used to calculate the Hausdorff
14
- * Distance - defaults to 1
15
- */
16
- declare function simplifyMatMapOnly(cpNode: CpNode, anlgeTolerance?: number, hausdorffTolerance?: number, hausdorffSpacing?: number): {
17
- simpleMap: Map<CpNode, {
18
- ps: number[][];
19
- ts: number[];
20
- }>;
21
- cpNode: CpNode;
22
- };
23
- export { simplifyMatMapOnly };
1
+ import { CpNode } from '../cp-node.js';
2
+ /**
3
+ * Simplifies the given MAT by replacing the piecewise quad beziers composing
4
+ * the MAT with fewer ones to within a given tolerance. Returns the map of
5
+ * to be deleted nodes only - does not actually delete them. Use simplifyMat
6
+ * instead if you want to delete the nodes.
7
+ * @param cpNode A representation of the MAT
8
+ * @param anlgeTolerance Tolerance given as the degrees difference of the unit
9
+ * direction vectors at the interface between curves. A tolerance of zero means
10
+ * perfect smoothness is required - defaults to 15.
11
+ * @param hausdorffTolerance The approximate maximum Hausdorff Distance tolerance -
12
+ * defaults to 0.1
13
+ * @param hausdorffSpacing The spacing on the curves used to calculate the Hausdorff
14
+ * Distance - defaults to 1
15
+ */
16
+ declare function simplifyMatMapOnly(cpNode: CpNode, anlgeTolerance?: number, hausdorffTolerance?: number, hausdorffSpacing?: number): {
17
+ simpleMap: Map<CpNode, {
18
+ ps: number[][];
19
+ ts: number[];
20
+ }>;
21
+ cpNode: CpNode;
22
+ };
23
+ export { simplifyMatMapOnly };
@@ -1,81 +1,81 @@
1
- import { closestPointOnBezier, hausdorffDistance, toCubic } from 'flo-bezier3';
2
- import { getBranches } from '../get-branches.js';
3
- import { getCurveToNext } from '../get-curve-to-next.js';
4
- import { getCurveBetween } from '../get-curve/get-curve-between.js';
5
- /**
6
- * Simplifies the given MAT by replacing the piecewise quad beziers composing
7
- * the MAT with fewer ones to within a given tolerance. Returns the map of
8
- * to be deleted nodes only - does not actually delete them. Use simplifyMat
9
- * instead if you want to delete the nodes.
10
- * @param cpNode A representation of the MAT
11
- * @param anlgeTolerance Tolerance given as the degrees difference of the unit
12
- * direction vectors at the interface between curves. A tolerance of zero means
13
- * perfect smoothness is required - defaults to 15.
14
- * @param hausdorffTolerance The approximate maximum Hausdorff Distance tolerance -
15
- * defaults to 0.1
16
- * @param hausdorffSpacing The spacing on the curves used to calculate the Hausdorff
17
- * Distance - defaults to 1
18
- */
19
- function simplifyMatMapOnly(cpNode, anlgeTolerance = 15, hausdorffTolerance = 1e-1, hausdorffSpacing = 1e0) {
20
- const simpleMap = new Map();
21
- // Start from a leaf
22
- while (!cpNode.isTerminating()) {
23
- cpNode = cpNode.next;
24
- }
25
- const branches = getBranches(cpNode, anlgeTolerance);
26
- const canDeletes = [];
27
- for (let k = 0; k < branches.length; k++) {
28
- const branch = branches[k];
29
- // Try to remove some
30
- let j = 0;
31
- while (j < branch.length) {
32
- const i = j;
33
- while (true) {
34
- j++;
35
- if (j === branch.length) {
36
- break;
37
- }
38
- const hd = getTotalHausdorffDistance(i, j, branch, hausdorffSpacing);
39
- if (hd > hausdorffTolerance) {
40
- break;
41
- }
42
- else {
43
- canDeletes.push(branch[j]);
44
- }
45
- }
46
- if (i + 1 === j) {
47
- // no simplification occured
48
- }
49
- else {
50
- const branStart = branch[i];
51
- const branEnd = branch[j - 1];
52
- const medial = toCubic(getCurveBetween(branStart, branEnd.next));
53
- const rev = medial.slice().reverse();
54
- let curCpNode = branStart;
55
- let prevT = 0;
56
- while (curCpNode !== branEnd) {
57
- const t = closestPointOnBezier(medial, curCpNode.next.cp.circle.center).t;
58
- simpleMap.set(curCpNode, { ps: medial, ts: [prevT, t] });
59
- const oppositeCpNode = curCpNode.nextOnCircle.prev;
60
- simpleMap.set(oppositeCpNode, { ps: rev, ts: [1 - t, 1 - prevT] });
61
- prevT = t;
62
- curCpNode = curCpNode.next;
63
- }
64
- simpleMap.set(curCpNode, { ps: medial, ts: [prevT, 1] });
65
- const oppositeCpNode = curCpNode.nextOnCircle.prev;
66
- simpleMap.set(oppositeCpNode, { ps: rev, ts: [0, 1 - prevT] });
67
- }
68
- }
69
- }
70
- return { simpleMap, cpNode };
71
- }
72
- function getTotalHausdorffDistance(i, j, branch, hausdorffSpacing) {
73
- const hds = [];
74
- const longCurve = getCurveBetween(branch[i], branch[j].next);
75
- for (let m = i; m < j + 1; m++) {
76
- hds.push(hausdorffDistance(getCurveToNext(branch[m]), longCurve, hausdorffSpacing));
77
- }
78
- return Math.max(...hds);
79
- }
80
- export { simplifyMatMapOnly };
1
+ import { closestPointOnBezier, hausdorffDistance, toCubic } from 'flo-bezier3';
2
+ import { getBranches } from '../get-branches.js';
3
+ import { getCurveToNext } from '../get-curve-to-next.js';
4
+ import { getCurveBetween } from '../get-curve/get-curve-between.js';
5
+ /**
6
+ * Simplifies the given MAT by replacing the piecewise quad beziers composing
7
+ * the MAT with fewer ones to within a given tolerance. Returns the map of
8
+ * to be deleted nodes only - does not actually delete them. Use simplifyMat
9
+ * instead if you want to delete the nodes.
10
+ * @param cpNode A representation of the MAT
11
+ * @param anlgeTolerance Tolerance given as the degrees difference of the unit
12
+ * direction vectors at the interface between curves. A tolerance of zero means
13
+ * perfect smoothness is required - defaults to 15.
14
+ * @param hausdorffTolerance The approximate maximum Hausdorff Distance tolerance -
15
+ * defaults to 0.1
16
+ * @param hausdorffSpacing The spacing on the curves used to calculate the Hausdorff
17
+ * Distance - defaults to 1
18
+ */
19
+ function simplifyMatMapOnly(cpNode, anlgeTolerance = 15, hausdorffTolerance = 1e-1, hausdorffSpacing = 1e0) {
20
+ const simpleMap = new Map();
21
+ // Start from a leaf
22
+ while (!cpNode.isTerminating()) {
23
+ cpNode = cpNode.next;
24
+ }
25
+ const branches = getBranches(cpNode, anlgeTolerance);
26
+ const canDeletes = [];
27
+ for (let k = 0; k < branches.length; k++) {
28
+ const branch = branches[k];
29
+ // Try to remove some
30
+ let j = 0;
31
+ while (j < branch.length) {
32
+ const i = j;
33
+ while (true) {
34
+ j++;
35
+ if (j === branch.length) {
36
+ break;
37
+ }
38
+ const hd = getTotalHausdorffDistance(i, j, branch, hausdorffSpacing);
39
+ if (hd > hausdorffTolerance) {
40
+ break;
41
+ }
42
+ else {
43
+ canDeletes.push(branch[j]);
44
+ }
45
+ }
46
+ if (i + 1 === j) {
47
+ // no simplification occured
48
+ }
49
+ else {
50
+ const branStart = branch[i];
51
+ const branEnd = branch[j - 1];
52
+ const medial = toCubic(getCurveBetween(branStart, branEnd.next));
53
+ const rev = medial.slice().reverse();
54
+ let curCpNode = branStart;
55
+ let prevT = 0;
56
+ while (curCpNode !== branEnd) {
57
+ const t = closestPointOnBezier(medial, curCpNode.next.cp.circle.center).t;
58
+ simpleMap.set(curCpNode, { ps: medial, ts: [prevT, t] });
59
+ const oppositeCpNode = curCpNode.nextOnCircle.prev;
60
+ simpleMap.set(oppositeCpNode, { ps: rev, ts: [1 - t, 1 - prevT] });
61
+ prevT = t;
62
+ curCpNode = curCpNode.next;
63
+ }
64
+ simpleMap.set(curCpNode, { ps: medial, ts: [prevT, 1] });
65
+ const oppositeCpNode = curCpNode.nextOnCircle.prev;
66
+ simpleMap.set(oppositeCpNode, { ps: rev, ts: [0, 1 - prevT] });
67
+ }
68
+ }
69
+ }
70
+ return { simpleMap, cpNode };
71
+ }
72
+ function getTotalHausdorffDistance(i, j, branch, hausdorffSpacing) {
73
+ const hds = [];
74
+ const longCurve = getCurveBetween(branch[i], branch[j].next);
75
+ for (let m = i; m < j + 1; m++) {
76
+ hds.push(hausdorffDistance(getCurveToNext(branch[m]), longCurve, hausdorffSpacing));
77
+ }
78
+ return Math.max(...hds);
79
+ }
80
+ export { simplifyMatMapOnly };
81
81
  //# sourceMappingURL=simplify-mat-map-only.js.map
@@ -1,7 +1,7 @@
1
- import { Mat } from '../../mat.js';
2
- /**
3
- * @hidden
4
- * @param sat
5
- */
6
- declare function addDebugInfo(sat: Mat, timingStart: number): void;
7
- export { addDebugInfo };
1
+ import { Mat } from '../../mat.js';
2
+ /**
3
+ * @hidden
4
+ * @param sat
5
+ */
6
+ declare function addDebugInfo(sat: Mat, timingStart: number): void;
7
+ export { addDebugInfo };
@@ -1,14 +1,14 @@
1
- /**
2
- * @hidden
3
- * @param sat
4
- */
5
- function addDebugInfo(sat, timingStart) {
6
- if (typeof _debug_ === 'undefined') {
7
- return;
8
- }
9
- _debug_.generated.elems.sat.push(sat);
10
- const timing = _debug_.generated.timing;
11
- timing.sats = performance.now() - timingStart;
12
- }
13
- export { addDebugInfo };
1
+ /**
2
+ * @hidden
3
+ * @param sat
4
+ */
5
+ function addDebugInfo(sat, timingStart) {
6
+ if (typeof _debug_ === 'undefined') {
7
+ return;
8
+ }
9
+ _debug_.generated.elems.sat.push(sat);
10
+ const timing = _debug_.generated.timing;
11
+ timing.sats = performance.now() - timingStart;
12
+ }
13
+ export { addDebugInfo };
14
14
  //# sourceMappingURL=add-debug-info.js.map
@@ -1,9 +1,9 @@
1
- import { CpNode } from '../../cp-node.js';
2
- /**
3
- * @hidden
4
- * Cull all edges not part of a cycle in the MAT planar graph.
5
- * @param cpStart The start CpNode which must reprsesent the maximal 3-prong
6
- * vertex.
7
- */
8
- declare function cullNonCycles(cpStart: CpNode): CpNode;
9
- export { cullNonCycles };
1
+ import { CpNode } from '../../cp-node.js';
2
+ /**
3
+ * @hidden
4
+ * Cull all edges not part of a cycle in the MAT planar graph.
5
+ * @param cpStart The start CpNode which must reprsesent the maximal 3-prong
6
+ * vertex.
7
+ */
8
+ declare function cullNonCycles(cpStart: CpNode): CpNode;
9
+ export { cullNonCycles };
@@ -1,52 +1,52 @@
1
- import { getLeaves } from '../get-leaves.js';
2
- import { CpNode } from '../../cp-node.js';
3
- /**
4
- * @hidden
5
- * Cull all edges not part of a cycle in the MAT planar graph.
6
- * @param cpStart The start CpNode which must reprsesent the maximal 3-prong
7
- * vertex.
8
- */
9
- function cullNonCycles(cpStart) {
10
- let cpNodeKept = cpStart;
11
- const leaves = getLeaves(cpStart);
12
- while (leaves.length) {
13
- const leaf = leaves.pop();
14
- // Preserve topology - keep cycles.
15
- if (leaf.isHoleClosing || leaf.isIntersection) {
16
- continue;
17
- }
18
- let cpNode = leaf.next; // Turn around
19
- while (true) {
20
- cpNode = cpNode.next;
21
- let cut = false;
22
- const cp1 = cpNode.prevOnCircle;
23
- if (cpNode.getProngCount() > 2) {
24
- //const cp2 = cp1.prevOnCircle;
25
- const cp2 = cpNode.nextOnCircle;
26
- //if (cpStart === cpNode || cpStart === cp1 || cpStart === cp2) {
27
- if (CpNode.isOnSameCircle(cpNode, cpStart)) {
28
- cut = true; // We are at the max disk - cut whole edge
29
- }
30
- else if (cpNode.next === cp2) {
31
- cpNode = cp2;
32
- }
33
- else if (cp2.next !== cp1) {
34
- cut = true; // Cut whole edge
35
- }
36
- }
37
- else if (cpNode.isTerminating() && !cpNode.isIntersection) {
38
- cpNodeKept = cpNode;
39
- return undefined;
40
- }
41
- if (cut) {
42
- cp1.next = cpNode;
43
- cpNode.prev = cp1;
44
- cpNodeKept = cpNode;
45
- break;
46
- }
47
- }
48
- }
49
- return cpNodeKept;
50
- }
51
- export { cullNonCycles };
1
+ import { getLeaves } from '../get-leaves.js';
2
+ import { CpNode } from '../../cp-node.js';
3
+ /**
4
+ * @hidden
5
+ * Cull all edges not part of a cycle in the MAT planar graph.
6
+ * @param cpStart The start CpNode which must reprsesent the maximal 3-prong
7
+ * vertex.
8
+ */
9
+ function cullNonCycles(cpStart) {
10
+ let cpNodeKept = cpStart;
11
+ const leaves = getLeaves(cpStart);
12
+ while (leaves.length) {
13
+ const leaf = leaves.pop();
14
+ // Preserve topology - keep cycles.
15
+ if (leaf.isHoleClosing || leaf.isIntersection) {
16
+ continue;
17
+ }
18
+ let cpNode = leaf.next; // Turn around
19
+ while (true) {
20
+ cpNode = cpNode.next;
21
+ let cut = false;
22
+ const cp1 = cpNode.prevOnCircle;
23
+ if (cpNode.getProngCount() > 2) {
24
+ //const cp2 = cp1.prevOnCircle;
25
+ const cp2 = cpNode.nextOnCircle;
26
+ //if (cpStart === cpNode || cpStart === cp1 || cpStart === cp2) {
27
+ if (CpNode.isOnSameCircle(cpNode, cpStart)) {
28
+ cut = true; // We are at the max disk - cut whole edge
29
+ }
30
+ else if (cpNode.next === cp2) {
31
+ cpNode = cp2;
32
+ }
33
+ else if (cp2.next !== cp1) {
34
+ cut = true; // Cut whole edge
35
+ }
36
+ }
37
+ else if (cpNode.isTerminating() && !cpNode.isIntersection) {
38
+ cpNodeKept = cpNode;
39
+ return undefined;
40
+ }
41
+ if (cut) {
42
+ cp1.next = cpNode;
43
+ cpNode.prev = cp1;
44
+ cpNodeKept = cpNode;
45
+ break;
46
+ }
47
+ }
48
+ }
49
+ return cpNodeKept;
50
+ }
51
+ export { cullNonCycles };
52
52
  //# sourceMappingURL=cull-non-cycles.js.map
@@ -1,12 +1,12 @@
1
- import { Circle } from '../../circle.js';
2
- import { CpNode } from '../../cp-node.js';
3
- /**
4
- * @hidden
5
- * Returns the set of Vertices passing the following test: walk the MAT tree and
6
- * keep all Vertices not in the current cull set and any Vertices that have a
7
- * non-culled node further down the line toward the tree leaves.
8
- * @param culls The CpNodes (referred to by circles) that should be culled.
9
- * @param maxCpNode The start CpNode which must reprsesent the maximal vertex.
10
- */
11
- declare function cull(culls: Set<Circle>, maxCpNode: CpNode): void;
12
- export { cull };
1
+ import { Circle } from '../../circle.js';
2
+ import { CpNode } from '../../cp-node.js';
3
+ /**
4
+ * @hidden
5
+ * Returns the set of Vertices passing the following test: walk the MAT tree and
6
+ * keep all Vertices not in the current cull set and any Vertices that have a
7
+ * non-culled node further down the line toward the tree leaves.
8
+ * @param culls The CpNodes (referred to by circles) that should be culled.
9
+ * @param maxCpNode The start CpNode which must reprsesent the maximal vertex.
10
+ */
11
+ declare function cull(culls: Set<Circle>, maxCpNode: CpNode): void;
12
+ export { cull };