flo-mat 2.0.0 → 2.0.2

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 (289) hide show
  1. package/.eslintrc.cjs +69 -0
  2. package/README.md +9 -27
  3. package/browser/index.js +29720 -7345
  4. package/browser/index.min.js +1 -2
  5. package/node/circle.js +3 -3
  6. package/node/circle.js.map +1 -1
  7. package/node/compare-curvatures-at-interface.js +36 -36
  8. package/node/compare-curvatures-at-interface.js.map +1 -1
  9. package/node/cp-node/clone.js +6 -6
  10. package/node/cp-node/clone.js.map +1 -1
  11. package/node/cp-node/remove.js +4 -4
  12. package/node/cp-node/remove.js.map +1 -1
  13. package/node/cp-node.js +18 -18
  14. package/node/cp-node.js.map +1 -1
  15. package/node/curve.d.ts +1 -1
  16. package/node/curve.js +19 -19
  17. package/node/curve.js.map +1 -1
  18. package/node/debug/debug.d.ts +1 -1
  19. package/node/debug/functions/draw-elem/bounding-hull.js +1 -1
  20. package/node/debug/functions/draw-elem/bounding-hull.js.map +1 -1
  21. package/node/debug/functions/draw-elem/branch.js +4 -4
  22. package/node/debug/functions/draw-elem/branch.js.map +1 -1
  23. package/node/debug/functions/draw-elem/culls.js +4 -4
  24. package/node/debug/functions/draw-elem/culls.js.map +1 -1
  25. package/node/debug/functions/draw-elem/draw-circle-percent.js +1 -1
  26. package/node/debug/functions/draw-elem/draw-circle-percent.js.map +1 -1
  27. package/node/debug/functions/draw-elem/draw-elem.d.ts +2 -2
  28. package/node/debug/functions/draw-elem/draw-elem.js +1 -1
  29. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  30. package/node/debug/functions/draw-elem/dull-corner.js +3 -3
  31. package/node/debug/functions/draw-elem/dull-corner.js.map +1 -1
  32. package/node/debug/functions/draw-elem/leaves.js +4 -4
  33. package/node/debug/functions/draw-elem/leaves.js.map +1 -1
  34. package/node/debug/functions/draw-elem/loose-bounding-box.js +2 -2
  35. package/node/debug/functions/draw-elem/loose-bounding-box.js.map +1 -1
  36. package/node/debug/functions/draw-elem/mat.js +4 -4
  37. package/node/debug/functions/draw-elem/mat.js.map +1 -1
  38. package/node/debug/functions/draw-elem/max-vertex.js +2 -2
  39. package/node/debug/functions/draw-elem/max-vertex.js.map +1 -1
  40. package/node/debug/functions/draw-elem/min-y.js +3 -3
  41. package/node/debug/functions/draw-elem/min-y.js.map +1 -1
  42. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js +4 -4
  43. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js.map +1 -1
  44. package/node/debug/functions/draw-elem/one-prong.js +4 -4
  45. package/node/debug/functions/draw-elem/one-prong.js.map +1 -1
  46. package/node/debug/functions/draw-elem/sharp-corner.js +2 -2
  47. package/node/debug/functions/draw-elem/sharp-corner.js.map +1 -1
  48. package/node/debug/functions/draw-elem/three-prong.js +7 -7
  49. package/node/debug/functions/draw-elem/three-prong.js.map +1 -1
  50. package/node/debug/functions/draw-elem/tight-bounding-box.js +1 -1
  51. package/node/debug/functions/draw-elem/tight-bounding-box.js.map +1 -1
  52. package/node/debug/functions/draw-elem/two-prong.js +1 -1
  53. package/node/debug/functions/draw-elem/two-prong.js.map +1 -1
  54. package/node/debug/functions/draw-elem/vertex.js +13 -13
  55. package/node/debug/functions/draw-elem/vertex.js.map +1 -1
  56. package/node/debug/functions/general.d.ts +1 -1
  57. package/node/debug/functions/general.js +1 -1
  58. package/node/debug/functions/general.js.map +1 -1
  59. package/node/debug/functions/three-prong.d.ts +1 -1
  60. package/node/debug/functions/three-prong.js +37 -37
  61. package/node/debug/functions/three-prong.js.map +1 -1
  62. package/node/debug/functions/two-prong.d.ts +1 -1
  63. package/node/debug/functions/two-prong.js +15 -15
  64. package/node/debug/functions/two-prong.js.map +1 -1
  65. package/node/find-mats.js +16 -19
  66. package/node/find-mats.js.map +1 -1
  67. package/node/get-boundary-bezier-parts-to-next.js +8 -8
  68. package/node/get-boundary-bezier-parts-to-next.js.map +1 -1
  69. package/node/get-boundary-beziers-to-next.js +8 -8
  70. package/node/get-boundary-beziers-to-next.js.map +1 -1
  71. package/node/get-branches.js +7 -7
  72. package/node/get-branches.js.map +1 -1
  73. package/node/get-curve/get-curve-between.js +21 -21
  74. package/node/get-curve/get-curve-between.js.map +1 -1
  75. package/node/get-curve/get-edge-direction.js +13 -13
  76. package/node/get-curve/get-edge-direction.js.map +1 -1
  77. package/node/get-interface-ccw.js +12 -12
  78. package/node/get-interface-ccw.js.map +1 -1
  79. package/node/loop/get-max-coordinate.js +9 -9
  80. package/node/loop/get-max-coordinate.js.map +1 -1
  81. package/node/loop.js +4 -4
  82. package/node/loop.js.map +1 -1
  83. package/node/mat/add-to-cp-graph.js +8 -8
  84. package/node/mat/add-to-cp-graph.js.map +1 -1
  85. package/node/mat/closest-boundary-point/closest-points-on-curve.js +5 -6
  86. package/node/mat/closest-boundary-point/closest-points-on-curve.js.map +1 -1
  87. package/node/mat/closest-boundary-point/cull-bezier-pieces.js +1 -1
  88. package/node/mat/closest-boundary-point/cull-bezier-pieces.js.map +1 -1
  89. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js +5 -5
  90. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
  91. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js +5 -5
  92. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js.map +1 -1
  93. package/node/mat/closest-boundary-point/get-best-distance-squared.js +5 -5
  94. package/node/mat/closest-boundary-point/get-best-distance-squared.js.map +1 -1
  95. package/node/mat/closest-boundary-point/get-close-boundary-points.js +15 -15
  96. package/node/mat/closest-boundary-point/get-close-boundary-points.js.map +1 -1
  97. package/node/mat/closest-boundary-point/get-closest-boundary-point.js +4 -4
  98. package/node/mat/closest-boundary-point/get-closest-boundary-point.js.map +1 -1
  99. package/node/mat/create-new-cp-tree.js +3 -3
  100. package/node/mat/create-new-cp-tree.js.map +1 -1
  101. package/node/mat/elem-type-two-prong.d.ts +1 -1
  102. package/node/mat/find-mat/add-1-prong.js +3 -3
  103. package/node/mat/find-mat/add-1-prong.js.map +1 -1
  104. package/node/mat/find-mat/add-2-prong.js +40 -40
  105. package/node/mat/find-mat/add-2-prong.js.map +1 -1
  106. package/node/mat/find-mat/add-3-prong.js +1 -1
  107. package/node/mat/find-mat/add-3-prong.js.map +1 -1
  108. package/node/mat/find-mat/add-debug-info.js +16 -18
  109. package/node/mat/find-mat/add-debug-info.js.map +1 -1
  110. package/node/mat/find-mat/create-get-interesting-points-on-loop.js +4 -4
  111. package/node/mat/find-mat/create-get-interesting-points-on-loop.js.map +1 -1
  112. package/node/mat/find-mat/create-initial-cp-graph.js +11 -11
  113. package/node/mat/find-mat/create-initial-cp-graph.js.map +1 -1
  114. package/node/mat/find-mat/find-2-prong/add-debug-info.js +2 -2
  115. package/node/mat/find-mat/find-2-prong/add-debug-info.js.map +1 -1
  116. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js +5 -5
  117. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js.map +1 -1
  118. package/node/mat/find-mat/find-2-prong/find-2-prong.js +25 -25
  119. package/node/mat/find-mat/find-2-prong/find-2-prong.js.map +1 -1
  120. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js +7 -7
  121. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js.map +1 -1
  122. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js +4 -4
  123. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
  124. package/node/mat/find-mat/find-2-prong/x-for-debugging.d.ts +1 -1
  125. package/node/mat/find-mat/find-3-prong/calc-better-x.js +4 -4
  126. package/node/mat/find-mat/find-3-prong/calc-better-x.js.map +1 -1
  127. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js +3 -3
  128. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js.map +1 -1
  129. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js +35 -35
  130. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js.map +1 -1
  131. package/node/mat/find-mat/find-3-prong/find-3-prong.js +14 -14
  132. package/node/mat/find-mat/find-3-prong/find-3-prong.js.map +1 -1
  133. package/node/mat/find-mat/find-3-prong/get-closest-points.js +1 -1
  134. package/node/mat/find-mat/find-3-prong/get-closest-points.js.map +1 -1
  135. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js +2 -2
  136. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js.map +1 -1
  137. package/node/mat/find-mat/find-and-add-2-prongs.js +12 -13
  138. package/node/mat/find-mat/find-and-add-2-prongs.js.map +1 -1
  139. package/node/mat/find-mat/find-and-add-3-prongs.js +16 -17
  140. package/node/mat/find-mat/find-and-add-3-prongs.js.map +1 -1
  141. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js +6 -6
  142. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js.map +1 -1
  143. package/node/mat/find-mat/get-potential-2-prongs.js +4 -4
  144. package/node/mat/find-mat/get-potential-2-prongs.js.map +1 -1
  145. package/node/mat/find-mat/get-sharp-corners.js +4 -4
  146. package/node/mat/find-mat/get-sharp-corners.js.map +1 -1
  147. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js +3 -3
  148. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  149. package/node/mat/get-boundary-piece-beziers.js +5 -5
  150. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  151. package/node/mat/get-contact-circles-at-interface.js +1 -1
  152. package/node/mat/get-contact-circles-at-interface.js.map +1 -1
  153. package/node/mat/get-leaves.js +2 -2
  154. package/node/mat/get-leaves.js.map +1 -1
  155. package/node/mat/get-neighboring-cps.js +1 -1
  156. package/node/mat/get-neighboring-cps.js.map +1 -1
  157. package/node/mat/is-another-cp-closeby.js +9 -9
  158. package/node/mat/is-another-cp-closeby.js.map +1 -1
  159. package/node/mat/simplify-mat-map-only.js +15 -15
  160. package/node/mat/simplify-mat-map-only.js.map +1 -1
  161. package/node/mat/to-scale-axis/add-debug-info.js +1 -1
  162. package/node/mat/to-scale-axis/add-debug-info.js.map +1 -1
  163. package/node/mat/to-scale-axis/cull-non-cycles.js +5 -5
  164. package/node/mat/to-scale-axis/cull-non-cycles.js.map +1 -1
  165. package/node/mat/to-scale-axis/cull.js +5 -5
  166. package/node/mat/to-scale-axis/cull.js.map +1 -1
  167. package/node/mat/trim-mat.js +1 -1
  168. package/node/mat/trim-mat.js.map +1 -1
  169. package/node/point-on-shape.d.ts +4 -4
  170. package/node/point-on-shape.js +16 -16
  171. package/node/point-on-shape.js.map +1 -1
  172. package/node/simplify-mat.js +10 -10
  173. package/node/simplify-mat.js.map +1 -1
  174. package/node/svg/get-loop-bounds.d.ts +1 -1
  175. package/node/svg/get-loop-bounds.js +13 -13
  176. package/node/svg/get-loop-bounds.js.map +1 -1
  177. package/node/svg/get-shape-bounds.d.ts +2 -2
  178. package/node/svg/get-shape-bounds.js +4 -4
  179. package/node/svg/get-shape-bounds.js.map +1 -1
  180. package/node/sweep-line/sweep-line.js +8 -8
  181. package/node/sweep-line/sweep-line.js.map +1 -1
  182. package/node/to-scale-axis.js +16 -15
  183. package/node/to-scale-axis.js.map +1 -1
  184. package/node/traverse-edges.js +2 -2
  185. package/node/traverse-edges.js.map +1 -1
  186. package/node/traverse-vertices.js +2 -2
  187. package/node/traverse-vertices.js.map +1 -1
  188. package/package.json +30 -25
  189. package/src/circle.ts +3 -3
  190. package/src/compare-curvatures-at-interface.ts +36 -36
  191. package/src/cp-node/clone.ts +6 -6
  192. package/src/cp-node/remove.ts +4 -4
  193. package/src/cp-node.ts +20 -20
  194. package/src/curve.ts +19 -19
  195. package/src/debug/functions/draw-elem/bounding-hull.ts +2 -2
  196. package/src/debug/functions/draw-elem/branch.ts +4 -4
  197. package/src/debug/functions/draw-elem/culls.ts +4 -4
  198. package/src/debug/functions/draw-elem/draw-circle-percent.ts +2 -2
  199. package/src/debug/functions/draw-elem/draw-elem.ts +1 -1
  200. package/src/debug/functions/draw-elem/dull-corner.ts +3 -3
  201. package/src/debug/functions/draw-elem/leaves.ts +4 -4
  202. package/src/debug/functions/draw-elem/loose-bounding-box.ts +2 -2
  203. package/src/debug/functions/draw-elem/mat.ts +4 -4
  204. package/src/debug/functions/draw-elem/max-vertex.ts +2 -2
  205. package/src/debug/functions/draw-elem/min-y.ts +3 -3
  206. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +4 -4
  207. package/src/debug/functions/draw-elem/one-prong.ts +4 -4
  208. package/src/debug/functions/draw-elem/sharp-corner.ts +2 -2
  209. package/src/debug/functions/draw-elem/three-prong.ts +7 -7
  210. package/src/debug/functions/draw-elem/tight-bounding-box.ts +1 -1
  211. package/src/debug/functions/draw-elem/two-prong.ts +1 -1
  212. package/src/debug/functions/draw-elem/vertex.ts +20 -14
  213. package/src/debug/functions/general.ts +3 -3
  214. package/src/debug/functions/three-prong.ts +37 -37
  215. package/src/debug/functions/two-prong.ts +15 -15
  216. package/src/find-mats.ts +19 -19
  217. package/src/get-boundary-bezier-parts-to-next.ts +8 -8
  218. package/src/get-boundary-beziers-to-next.ts +8 -8
  219. package/src/get-branches.ts +7 -7
  220. package/src/get-curve/get-curve-between.ts +21 -21
  221. package/src/get-curve/get-edge-direction.ts +13 -14
  222. package/src/get-interface-ccw.ts +12 -12
  223. package/src/loop/get-max-coordinate.ts +7 -7
  224. package/src/loop.ts +4 -4
  225. package/src/mat/add-to-cp-graph.ts +8 -8
  226. package/src/mat/closest-boundary-point/closest-points-on-curve.ts +5 -6
  227. package/src/mat/closest-boundary-point/cull-bezier-pieces.ts +1 -1
  228. package/src/mat/closest-boundary-point/cull-by-loose-bounding-box.ts +5 -5
  229. package/src/mat/closest-boundary-point/cull-by-tight-boundary-box.ts +5 -5
  230. package/src/mat/closest-boundary-point/get-best-distance-squared.ts +5 -5
  231. package/src/mat/closest-boundary-point/get-close-boundary-points.ts +15 -15
  232. package/src/mat/closest-boundary-point/get-closest-boundary-point.ts +4 -4
  233. package/src/mat/cmp-cp-on-delta.ts +5 -5
  234. package/src/mat/create-new-cp-tree.ts +3 -3
  235. package/src/mat/find-mat/add-1-prong.ts +5 -5
  236. package/src/mat/find-mat/add-2-prong.ts +42 -42
  237. package/src/mat/find-mat/add-3-prong.ts +1 -1
  238. package/src/mat/find-mat/add-debug-info.ts +18 -20
  239. package/src/mat/find-mat/create-get-interesting-points-on-loop.ts +4 -4
  240. package/src/mat/find-mat/create-initial-cp-graph.ts +11 -11
  241. package/src/mat/find-mat/find-2-prong/add-debug-info.ts +4 -4
  242. package/src/mat/find-mat/find-2-prong/cull-bezier-pieces.ts +5 -5
  243. package/src/mat/find-mat/find-2-prong/find-2-prong.ts +27 -27
  244. package/src/mat/find-mat/find-2-prong/find-equidistant-point-on-line.ts +7 -7
  245. package/src/mat/find-mat/find-2-prong/get-initial-bezier-pieces.ts +4 -4
  246. package/src/mat/find-mat/find-3-prong/calc-better-x.ts +4 -4
  247. package/src/mat/find-mat/find-3-prong/calc-initial-3-prong-center.ts +3 -3
  248. package/src/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.ts +37 -37
  249. package/src/mat/find-mat/find-3-prong/find-3-prong.ts +16 -16
  250. package/src/mat/find-mat/find-3-prong/get-closest-points.ts +1 -1
  251. package/src/mat/find-mat/find-and-add-2-prongs-on-all-paths.ts +2 -2
  252. package/src/mat/find-mat/find-and-add-2-prongs.ts +14 -16
  253. package/src/mat/find-mat/find-and-add-3-prongs.ts +19 -19
  254. package/src/mat/find-mat/find-and-add-hole-closing-2-prongs.ts +6 -6
  255. package/src/mat/find-mat/get-potential-2-prongs.ts +4 -4
  256. package/src/mat/find-mat/get-sharp-corners.ts +4 -4
  257. package/src/mat/find-mat/get-total-abs-curvature.ts +1 -1
  258. package/src/mat/geometry/get-closest-squared-distance-to-rotated-rect.ts +3 -3
  259. package/src/mat/get-boundary-piece-beziers.ts +5 -5
  260. package/src/mat/get-contact-circles-at-interface.ts +1 -1
  261. package/src/mat/get-edges-as-array.ts +2 -2
  262. package/src/mat/get-leaves.ts +2 -2
  263. package/src/mat/get-neighboring-cps.ts +1 -1
  264. package/src/mat/is-another-cp-closeby.ts +9 -9
  265. package/src/mat/simplify-mat-map-only.ts +15 -15
  266. package/src/mat/to-scale-axis/add-debug-info.ts +6 -3
  267. package/src/mat/to-scale-axis/add-to-tree.ts +10 -10
  268. package/src/mat/to-scale-axis/calc-groups.ts +19 -19
  269. package/src/mat/to-scale-axis/create-spacial-tree.ts +4 -4
  270. package/src/mat/to-scale-axis/cull-non-cycles.ts +5 -5
  271. package/src/mat/to-scale-axis/cull.ts +5 -5
  272. package/src/mat/to-scale-axis/get-engulfed-vertices.ts +18 -18
  273. package/src/mat/trim-mat.ts +1 -1
  274. package/src/point-on-shape.ts +16 -16
  275. package/src/simplify-mat.ts +10 -10
  276. package/src/svg/get-curvature-at-interface.ts +6 -8
  277. package/src/svg/get-extreme.ts +1 -1
  278. package/src/svg/get-loop-bounds.ts +13 -13
  279. package/src/svg/get-shape-bounds.ts +4 -4
  280. package/src/sweep-line/are-boxes-intersecting.ts +4 -4
  281. package/src/sweep-line/sweep-line.ts +8 -8
  282. package/src/to-scale-axis.ts +18 -17
  283. package/src/traverse-edges.ts +2 -2
  284. package/src/traverse-vertices.ts +2 -2
  285. package/webpack.config.cjs +12 -63
  286. package/browser/index.min.js.LICENSE.txt +0 -2907
  287. package/browser/index.module.js +0 -7369
  288. package/browser/index.module.min.js +0 -2
  289. package/browser/index.module.min.js.LICENSE.txt +0 -2907
@@ -26,15 +26,15 @@ function getBranches(
26
26
  cpNode = cpNode.next;
27
27
  }
28
28
 
29
- let branches: CpNode[][] = [];
29
+ const branches: CpNode[][] = [];
30
30
 
31
31
  // Since the tree is unrooted we must iterate in all directions from the
32
32
  // given vertex.
33
- let cps = [cpNode.prevOnCircle];
33
+ const cps = [cpNode.prevOnCircle];
34
34
 
35
35
  let branchCpNodes: CpNode[] = [];
36
36
  while (cps.length) {
37
- let cp = cps.pop();
37
+ const cp = cps.pop();
38
38
  branchCpNodes.push(cp);
39
39
 
40
40
  let children = cp.getChildren();
@@ -68,17 +68,17 @@ function getBranches(
68
68
  continue;
69
69
  }
70
70
 
71
- let backPointingTan = toUnitVector(tangent(
71
+ const backPointingTan = toUnitVector(tangent(
72
72
  getCurveToNext(cp.next.prevOnCircle),
73
73
  0
74
74
  ));
75
- let forwardPointingTan = toUnitVector(tangent(
75
+ const forwardPointingTan = toUnitVector(tangent(
76
76
  getCurveToNext(children[0]),
77
77
  0
78
78
  ));
79
79
 
80
- let cross_ = cross(backPointingTan, forwardPointingTan);
81
- let angle = Math.abs(Math.asin( cross_ ) * (180/Math.PI));
80
+ const cross_ = cross(backPointingTan, forwardPointingTan);
81
+ const angle = Math.abs(Math.asin( cross_ ) * (180/Math.PI));
82
82
 
83
83
  if (angle > tolerance) {
84
84
  branches.push(branchCpNodes);
@@ -22,22 +22,22 @@ function getCurveBetween(
22
22
  cpNodeFrom: CpNode,
23
23
  cpNodeTo: CpNode) {
24
24
 
25
- let fromCc = cpNodeFrom.cp.circle.center;
26
- let fromL = getEdgeDirection(cpNodeFrom);
25
+ const fromCc = cpNodeFrom.cp.circle.center;
26
+ const fromL = getEdgeDirection(cpNodeFrom);
27
27
 
28
- let toCc = cpNodeTo.cp.circle.center;
29
- let toL = getEdgeDirection(cpNodeTo.prevOnCircle);
28
+ const toCc = cpNodeTo.cp.circle.center;
29
+ const toL = getEdgeDirection(cpNodeTo.prevOnCircle);
30
30
 
31
- let mid = lineLineIntersection(fromL, toL);
31
+ const mid = lineLineIntersection(fromL, toL);
32
32
 
33
- let c = fromTo(fromCc,toCc);
33
+ const c = fromTo(fromCc,toCc);
34
34
 
35
35
  let twisted: boolean;
36
36
  if (!mid) {
37
37
  twisted = true;
38
38
  } else {
39
- let a = fromTo(fromCc, mid);
40
- let b = fromTo(toCc, mid);
39
+ const a = fromTo(fromCc, mid);
40
+ const b = fromTo(toCc, mid);
41
41
 
42
42
  twisted = dot(a,c) < 0 || dot(b,c) > 0;
43
43
  }
@@ -46,12 +46,12 @@ function getCurveBetween(
46
46
  return [fromCc, mid, toCc];
47
47
  }
48
48
 
49
- let r = rotate90Degrees(c);
50
- let w1 = fromTo(fromL[0], fromL[1]); // This is a unit vector
51
- let w2 = fromTo(toL[0], toL[1]); // This is a unit vector
49
+ const r = rotate90Degrees(c);
50
+ const w1 = fromTo(fromL[0], fromL[1]); // This is a unit vector
51
+ const w2 = fromTo(toL[0], toL[1]); // This is a unit vector
52
52
 
53
- let d1 = Math.abs(cross(c, w1)) / (3*3);
54
- let d2 = Math.abs(cross(c, w2)) / (3*3);
53
+ const d1 = Math.abs(cross(c, w1)) / (3*3);
54
+ const d2 = Math.abs(cross(c, w2)) / (3*3);
55
55
 
56
56
  if (d1 > TOLERANCE_ADD_2PRONG || d2 > TOLERANCE_ADD_2PRONG) {
57
57
  // TODO - not within tolerance - must add additional 2-prong
@@ -60,14 +60,14 @@ function getCurveBetween(
60
60
 
61
61
  if (d1 > TOLERANCE_USE_LINE || d2 > TOLERANCE_USE_LINE) {
62
62
  // approximate with cubic bezier
63
- let m1 = interpolate(fromCc,toCc,1/3);
64
- let m2 = interpolate(fromCc,toCc,2/3);
65
- let v1 = translate(r, m1);
66
- let v2 = translate(r, m2);
67
- let l1 = [m1,v1];
68
- let l2 = [m2,v2];
69
- let mid1 = lineLineIntersection(fromL, l1);
70
- let mid2 = lineLineIntersection(toL, l2);
63
+ const m1 = interpolate(fromCc,toCc,1/3);
64
+ const m2 = interpolate(fromCc,toCc,2/3);
65
+ const v1 = translate(r, m1);
66
+ const v2 = translate(r, m2);
67
+ const l1 = [m1,v1];
68
+ const l2 = [m2,v2];
69
+ const mid1 = lineLineIntersection(fromL, l1);
70
+ const mid2 = lineLineIntersection(toL, l2);
71
71
 
72
72
  return [fromCc, mid1, mid2, toCc];
73
73
  }
@@ -13,17 +13,16 @@ import { isPosSharpCorner } from '../point-on-shape.js';
13
13
  * @param cpNode
14
14
  */
15
15
  function getEdgeDirection(cpNode: CpNode) {
16
+ const circleCenter = cpNode.cp.circle.center;
16
17
 
17
- let circleCenter = cpNode.cp.circle.center;
18
+ const cp1 = cpNode;
19
+ const cp2 = cpNode.nextOnCircle;
18
20
 
19
- let cp1 = cpNode;
20
- let cp2 = cpNode.nextOnCircle;
21
+ const pos1 = cp1.cp.pointOnShape;
22
+ const pos2 = cp2.cp.pointOnShape;
21
23
 
22
- let pos1 = cp1.cp.pointOnShape;
23
- let pos2 = cp2.cp.pointOnShape;
24
-
25
- let p1 = pos1.p;
26
- let p2 = pos2.p;
24
+ const p1 = pos1.p;
25
+ const p2 = pos2.p;
27
26
 
28
27
  let vDir;
29
28
 
@@ -46,20 +45,20 @@ function getEdgeDirection(cpNode: CpNode) {
46
45
  curve2 = pos1.curve;
47
46
  }
48
47
 
49
- let tan1 = toUnitVector(tangent(curve1.ps, 0));
50
- let tan2 = reverse( toUnitVector(tangent(curve2.ps, 1)) );
48
+ const tan1 = toUnitVector(tangent(curve1.ps, 0));
49
+ const tan2 = reverse( toUnitVector(tangent(curve2.ps, 1)) );
51
50
 
52
- let x = dot(tan1, tan2);
51
+ const x = dot(tan1, tan2);
53
52
  // Recall the identities sin(acos(x)) = sqrt(1-x^2), etc. Also
54
53
  // recall the half angle formulas. Then the rotation matrix, R, can
55
54
  // be calculated.
56
- let cosθ = Math.sqrt((1+x)/2);
57
- let sinθ = Math.sqrt((1-x)/2);
55
+ const cosθ = Math.sqrt((1+x)/2);
56
+ const sinθ = Math.sqrt((1-x)/2);
58
57
 
59
58
  vDir = rotate(sinθ, cosθ, tan2);
60
59
  }
61
60
 
62
- let v = translate(
61
+ const v = translate(
63
62
  toUnitVector(vDir),
64
63
  circleCenter
65
64
  );
@@ -27,14 +27,14 @@ import { compareCurvaturesAtInterface } from "./compare-curvatures-at-interface.
27
27
  */
28
28
  // TODO - improve and make at least 46-bitlength precondition
29
29
  function getInterfaceCcw(psI: number[][], psO: number[][]) {
30
- let lenI = psI.length;
30
+ const lenI = psI.length;
31
31
 
32
32
  // second last control point of incoming curve
33
- let p0 = psI[lenI-2];
33
+ const p0 = psI[lenI-2];
34
34
  // last control point of incoming curve / first control point of outgoing
35
- let p1 = psO[0];
35
+ const p1 = psO[0];
36
36
  // second control point of outgoing curve
37
- let p2 = psO[1];
37
+ const p2 = psO[1];
38
38
 
39
39
  /*
40
40
  if (typeof _bez_debug_ !== 'undefined') {
@@ -63,18 +63,18 @@ function getInterfaceCcw(psI: number[][], psO: number[][]) {
63
63
  */
64
64
 
65
65
  // Max one bit can be added in the calculations below due to bit-alignment
66
- let xE = p1[0] - p0[0]; // tangent x-coordinate
67
- let yE = p1[1] - p0[1]; // tangent y-coordinate
68
- let xS = p2[0] - p1[0]; // tangent x-coordinate
69
- let yS = p2[1] - p1[1]; // tangent y-coordinate
66
+ const xE = p1[0] - p0[0]; // tangent x-coordinate
67
+ const yE = p1[1] - p0[1]; // tangent y-coordinate
68
+ const xS = p2[0] - p1[0]; // tangent x-coordinate
69
+ const yS = p2[1] - p1[1]; // tangent y-coordinate
70
70
 
71
71
  // If the tangent is to be found at t === 0 or t === 1 then using a basic
72
72
  // property of bezier curves we can find the tangents easily as below
73
73
 
74
74
  // (non-normalized) tangent of incoming curve at t === 1
75
- let tangentAtEnd = [xE,yE];
75
+ const tangentAtEnd = [xE,yE];
76
76
  // (non-normalized) tangent of outgoing curve at t === 0
77
- let tangentAtStart = [xS,yS];
77
+ const tangentAtStart = [xS,yS];
78
78
 
79
79
  // The cross calculated below will have a max bitlength of
80
80
  // (2*(maxBitLength+1))+1 === e.g. (2*(25+1)) + 1 === 53
@@ -82,7 +82,7 @@ function getInterfaceCcw(psI: number[][], psO: number[][]) {
82
82
  //let crossTangents = cross(tangentAtEnd, tangentAtStart);
83
83
 
84
84
  // The cross below is exact by adaptive infinite precision
85
- let crossTangents = orient2d(p0, p1, p2);
85
+ const crossTangents = orient2d(p0, p1, p2);
86
86
 
87
87
  if (crossTangents !== 0) {
88
88
  return crossTangents;
@@ -91,7 +91,7 @@ function getInterfaceCcw(psI: number[][], psO: number[][]) {
91
91
  // The dot calculated below will have a max bitlength of
92
92
  // (2*(maxBitLength+1))+1 === e.g. (2*(25+1)) + 1 === 53
93
93
  // If the preconditions are met it is exact
94
- let dotTangents = dot(tangentAtEnd, tangentAtStart);
94
+ const dotTangents = dot(tangentAtEnd, tangentAtStart);
95
95
  if (dotTangents > 0) {
96
96
  // Curves go in same direction at interface - neither clock or
97
97
  // anti-clockwise.
@@ -17,10 +17,10 @@ function getLoopsMetrics(loops: number[][][][]): {
17
17
  let minY = Number.POSITIVE_INFINITY;
18
18
  let maxY = Number.NEGATIVE_INFINITY;
19
19
 
20
- for (let loop of loops) { for (let ps of loop) { for (let p of ps) {
21
- let x = p[0];
22
- let y = p[1];
23
- let c = max(abs(x), abs(y));
20
+ for (const loop of loops) { for (const ps of loop) { for (const p of ps) {
21
+ const x = p[0];
22
+ const y = p[1];
23
+ const c = max(abs(x), abs(y));
24
24
  if (c > maxCoordinate) { maxCoordinate = c; }
25
25
  if (x < minX) { minX = x; }
26
26
  if (x > maxX) { maxX = x; }
@@ -28,9 +28,9 @@ function getLoopsMetrics(loops: number[][][][]): {
28
28
  if (y > maxY) { maxY = y; }
29
29
  } } }
30
30
 
31
- let width = maxX - minX;
32
- let height = maxY - minY;
33
- let maxRadius = max(width, height);
31
+ const width = maxX - minX;
32
+ const height = maxY - minY;
33
+ const maxRadius = max(width, height);
34
34
 
35
35
  return { maxCoordinate, maxRadius };
36
36
  }
package/src/loop.ts CHANGED
@@ -17,9 +17,9 @@ interface Loop {
17
17
  * @param beziers A pre-ordered array of bezier curves to add initially.
18
18
  */
19
19
  function loopFromBeziers(beziers: number[][][] = []) {
20
- let curves: Curve[] = [];
20
+ const curves: Curve[] = [];
21
21
 
22
- let loop: Loop = {
22
+ const loop: Loop = {
23
23
  beziers,
24
24
  curves
25
25
  };
@@ -30,7 +30,7 @@ function loopFromBeziers(beziers: number[][][] = []) {
30
30
 
31
31
  for (let i=0; i<beziers.length; i++) {
32
32
 
33
- let curve: Curve = {
33
+ const curve: Curve = {
34
34
  loop,
35
35
  ps: beziers[i],
36
36
  prev,
@@ -45,7 +45,7 @@ function loopFromBeziers(beziers: number[][][] = []) {
45
45
  }
46
46
 
47
47
  // close loop
48
- let lastCurve = curves[curves.length-1];
48
+ const lastCurve = curves[curves.length-1];
49
49
  curves[0].prev = lastCurve;
50
50
  lastCurve.next = curves[0];
51
51
 
@@ -23,16 +23,16 @@ function addToCpGraph(
23
23
  poss : IPointOnShape[],
24
24
  neighbors? : CpNode[][]) {
25
25
 
26
- let newCps = poss.map((pos, i) => {
27
- let cpTree = cpTrees.get(pos.curve.loop);
26
+ const newCps = poss.map((pos, i) => {
27
+ const cpTree = cpTrees.get(pos.curve.loop);
28
28
 
29
- let newCp_: ContactPoint = { pointOnShape: pos, circle, order: orders[i], order2: 0 };
29
+ const newCp_: ContactPoint = { pointOnShape: pos, circle, order: orders[i], order2: 0 };
30
30
 
31
- let neighboringCp = neighbors
31
+ const neighboringCp = neighbors
32
32
  ? neighbors[i]
33
33
  : getNeighbouringPoints(cpTree, pos, orders[i], 0);
34
34
 
35
- let newCp = CpNode.insert(
35
+ const newCp = CpNode.insert(
36
36
  false,
37
37
  false,
38
38
  cpTree,
@@ -43,10 +43,10 @@ function addToCpGraph(
43
43
  return newCp;
44
44
  });
45
45
 
46
- let len = poss.length;
46
+ const len = poss.length;
47
47
  for (let i=0; i<len; i++) {
48
- let indxPrev = i === 0 ? len-1 : i-1;
49
- let indxNext = i === len-1 ? 0 : i+1;
48
+ const indxPrev = i === 0 ? len-1 : i-1;
49
+ const indxNext = i === len-1 ? 0 : i+1;
50
50
 
51
51
  newCps[i].prevOnCircle = newCps[indxPrev];
52
52
  newCps[i].nextOnCircle = newCps[indxNext];
@@ -33,8 +33,7 @@ function closestPointsOnCurve(
33
33
  : _poly;
34
34
 
35
35
  // let roots: Omit<RootInterval,'multiplicity'>[] = allRootsMultiWithErrBounds(
36
- let roots: Omit<RootInterval,'multiplicity'>[];
37
- roots = allRootsCertified(poly, tS, tE);
36
+ const roots: Omit<RootInterval,'multiplicity'>[] = allRootsCertified(poly, tS, tE);
38
37
 
39
38
  // Also test the endpoints
40
39
  let push0 = true;
@@ -64,12 +63,12 @@ function closestPointsOnCurve(
64
63
  roots.push({ tS: tE, tE: tE });
65
64
  }
66
65
 
67
- let ps = roots.map(
66
+ const ps = roots.map(
68
67
  root => {
69
- let tS = root.tS;
70
- let tE = root.tE;
68
+ const tS = root.tS;
69
+ const tE = root.tE;
71
70
  // TODO - tS, tE should always stay within [0,1] - modify findRootsMulti
72
- let t = tS < 0
71
+ const t = tS < 0
73
72
  ? 0
74
73
  : tE > 1 ? 1 : (tS + tE)/2;
75
74
  // TODO - why does evalDeCasteljau not work here?
@@ -17,7 +17,7 @@ function cullBezierPieces(
17
17
  const CULL_THRESHOLD = 0;
18
18
 
19
19
  if (bezierPieces.length > CULL_THRESHOLD) {
20
- let bestSquaredDistance = getBestDistanceSquared(
20
+ const bestSquaredDistance = getBestDistanceSquared(
21
21
  bezierPieces, p
22
22
  );
23
23
  bezierPieces = cullByLooseBoundingBox(
@@ -16,15 +16,15 @@ function cullByLooseBoundingBox(
16
16
  p: number[],
17
17
  dSquared: number) {
18
18
 
19
- let candidateBezierPieces = [];
19
+ const candidateBezierPieces = [];
20
20
 
21
21
  for (let i=0; i<bezierPieces.length; i++) {
22
- let bezierPiece = bezierPieces[i];
23
- let ps = bezierPiece.curve.ps;
22
+ const bezierPiece = bezierPieces[i];
23
+ const ps = bezierPiece.curve.ps;
24
24
 
25
- let boundingBox = getBoundingBox_(ps);
25
+ const boundingBox = getBoundingBox_(ps);
26
26
 
27
- let d = getClosestSquareDistanceToRect(
27
+ const d = getClosestSquareDistanceToRect(
28
28
  boundingBox,
29
29
  p
30
30
  );
@@ -20,14 +20,14 @@ function cullByTightBoundingBox(
20
20
  p: number[],
21
21
  bestSquaredDistance: number) {
22
22
 
23
- let candidateBezierPieces = [];
23
+ const candidateBezierPieces = [];
24
24
 
25
25
  for (let i=0; i<bezierPieces.length; i++) {
26
- let bezierPiece = bezierPieces[i];
27
- let ps = bezierPiece.curve.ps;
26
+ const bezierPiece = bezierPieces[i];
27
+ const ps = bezierPiece.curve.ps;
28
28
 
29
- let tightBoundingBox = getBoundingBoxTight_(ps);
30
- let d = getClosestSquaredDistanceToRotatedRect(
29
+ const tightBoundingBox = getBoundingBoxTight_(ps);
30
+ const d = getClosestSquaredDistanceToRotatedRect(
31
31
  tightBoundingBox,
32
32
  p
33
33
  );
@@ -14,14 +14,14 @@ function getBestDistanceSquared(
14
14
 
15
15
  let bestSquaredDistance = Number.POSITIVE_INFINITY;
16
16
  for (let i=0; i<bezierPieces.length; i++) {
17
- let bezierPiece = bezierPieces[i];
17
+ const bezierPiece = bezierPieces[i];
18
18
 
19
- let ps = bezierPiece.curve.ps;
19
+ const ps = bezierPiece.curve.ps;
20
20
 
21
- let p1 = evalDeCasteljau(ps, bezierPiece.ts[0]);
22
- let p2 = evalDeCasteljau(ps, bezierPiece.ts[1]);
21
+ const p1 = evalDeCasteljau(ps, bezierPiece.ts[0]);
22
+ const p2 = evalDeCasteljau(ps, bezierPiece.ts[1]);
23
23
 
24
- let d = Math.min(
24
+ const d = Math.min(
25
25
  squaredDistanceBetween(p, p1),
26
26
  squaredDistanceBetween(p, p2)
27
27
  );
@@ -21,20 +21,20 @@ function getCloseBoundaryPoints(
21
21
  y: IPointOnShape,
22
22
  distance: number) {
23
23
 
24
- let touchedCurve = y.curve;
25
- let t = y.t;
26
- let p_ = y.p;
24
+ const touchedCurve = y.curve;
25
+ const t = y.t;
26
+ const p_ = y.p;
27
27
 
28
28
  bezierPieces = cullBezierPieces(bezierPieces, point);
29
29
 
30
30
  // TODO - integrate with is-another-cp-closeby - we MUST check angle too!
31
- let DISTANCE_TOLERANCE = 1e-9;
32
- let posInfos: { pos: IPointOnShape; d: number }[] = [];
31
+ const DISTANCE_TOLERANCE = 1e-9;
32
+ const posInfos: { pos: IPointOnShape; d: number }[] = [];
33
33
  for (let i=0; i<bezierPieces.length; i++) {
34
- let bezierPiece = bezierPieces[i];
34
+ const bezierPiece = bezierPieces[i];
35
35
 
36
36
  // TOOD - important - should be able to return multiple points
37
- let ps = closestPointsOnCurve(
37
+ const ps = closestPointsOnCurve(
38
38
  bezierPiece.curve,
39
39
  point,
40
40
  bezierPiece.ts,
@@ -45,8 +45,8 @@ function getCloseBoundaryPoints(
45
45
  //if (ps === undefined) { continue; }
46
46
 
47
47
  for (let j=0; j<ps.length; j++) {
48
- let p = ps[j];
49
- let d = distanceBetween(p.p, point);
48
+ const p = ps[j];
49
+ const d = distanceBetween(p.p, point);
50
50
 
51
51
  let curve = bezierPiece.curve;
52
52
  let t_= p.t;
@@ -67,23 +67,23 @@ function getCloseBoundaryPoints(
67
67
  // TODO - in future remove all these checks and join n-prongs when they
68
68
  // are being added - much simpler and more symmetric. Remeber order when
69
69
  // comparing closeness!
70
- let indexesToCheck: number[] = [];
70
+ const indexesToCheck: number[] = [];
71
71
  for (let i=0; i<posInfos.length; i++) {
72
- let pi = posInfos[i];
72
+ const pi = posInfos[i];
73
73
  // Only check if they are close to the edges. Why??
74
74
  //if (pi.pos.t < 1e-2 || 1-pi.pos.t < 1e-2) {
75
75
  indexesToCheck.push(i);
76
76
  //}
77
77
  }
78
- let indexesToRemove: number[] = [];
78
+ const indexesToRemove: number[] = [];
79
79
  for (let i=0; i<indexesToCheck.length; i++) {
80
80
  for (let j=i+1; j<indexesToCheck.length; j++) {
81
81
  if (i === j) { continue; }
82
- let p1 = posInfos[indexesToCheck[i]].pos.p;
83
- let p2 = posInfos[indexesToCheck[j]].pos.p;
82
+ const p1 = posInfos[indexesToCheck[i]].pos.p;
83
+ const p2 = posInfos[indexesToCheck[j]].pos.p;
84
84
  // Below checks for source point too - similar to
85
85
  // isAnotherCpCloseBy
86
- let p3 = p_;
86
+ const p3 = p_;
87
87
  if ((Math.abs(p1[0] - p2[0]) < 1e-6 &&
88
88
  Math.abs(p1[1] - p2[1]) < 1e-6) ||
89
89
 
@@ -27,9 +27,9 @@ function getClosestBoundaryPoint(
27
27
  let bestDistance = Number.POSITIVE_INFINITY;
28
28
  let posInfo: { pos: IPointOnShape; d: number };
29
29
  for (let i=0; i<bezierPieces.length; i++) {
30
- let bezierPiece = bezierPieces[i];
30
+ const bezierPiece = bezierPieces[i];
31
31
 
32
- let ps = closestPointsOnCurve(
32
+ const ps = closestPointsOnCurve(
33
33
  bezierPiece.curve,
34
34
  point,
35
35
  bezierPiece.ts,
@@ -37,11 +37,11 @@ function getClosestBoundaryPoint(
37
37
  t
38
38
  );
39
39
 
40
- let p = getObjClosestTo(point, ps, p => p.p)
40
+ const p = getObjClosestTo(point, ps, p => p.p)
41
41
 
42
42
  if (p === undefined) { continue; }
43
43
 
44
- let d = distanceBetween(p.p, point);
44
+ const d = distanceBetween(p.p, point);
45
45
 
46
46
  let curve = bezierPiece.curve;
47
47
  let t_= p.t;
@@ -20,12 +20,12 @@ function cmpCpOnδ(
20
20
  return 1;
21
21
  }
22
22
 
23
- let cpBef = δ[0].cp;
24
- let cpAft = δ[1].cp;
23
+ const cpBef = δ[0].cp;
24
+ const cpAft = δ[1].cp;
25
25
 
26
- let cmp = compareCps(cpBef, cpAft);
27
- let cmpPrev = compareCps(cpBef, cp);
28
- let cmpNext = compareCps(cp, cpAft);
26
+ const cmp = compareCps(cpBef, cpAft);
27
+ const cmpPrev = compareCps(cpBef, cp);
28
+ const cmpNext = compareCps(cp, cpAft);
29
29
 
30
30
  if (cmp < 0) {
31
31
  if (cmpPrev > 0 || cmpNext > 0) {
@@ -8,14 +8,14 @@ import { Loop } from '../loop.js';
8
8
  * @param cpNode
9
9
  */
10
10
  function createNewCpTree(cpNode: CpNode) {
11
- let newCpTrees: Map<Loop,LlRbTree<CpNode>> = new Map();
11
+ const newCpTrees: Map<Loop,LlRbTree<CpNode>> = new Map();
12
12
 
13
- let cps = cpNode.getAllOnLoop();
13
+ const cps = cpNode.getAllOnLoop();
14
14
 
15
15
  cps.forEach(f);
16
16
 
17
17
  function f(cpNode: CpNode) {
18
- let loop = cpNode.cp.pointOnShape.curve.loop;
18
+ const loop = cpNode.cp.pointOnShape.curve.loop;
19
19
  let cpTree = newCpTrees.get(loop);
20
20
  if (!cpTree) {
21
21
  // qqq cpTree = new LlRbTree(CpNode.comparator, [], true);
@@ -1,5 +1,5 @@
1
- /** @hidden */
2
- declare var _debug_: Debug;
1
+ /** @internal */
2
+ declare const _debug_: Debug;
3
3
 
4
4
  import { LlRbTree } from 'flo-ll-rb-tree';
5
5
  import { Debug } from '../../debug/debug.js';
@@ -44,10 +44,10 @@ function add1Prong(
44
44
  }
45
45
 
46
46
  //let circle = PointOnShape.getOsculatingCircle(maxOsculatingCircleRadius, pos);
47
- let circle = getOsculatingCircle(maxOsculatingCircleRadius, pos);
47
+ const circle = getOsculatingCircle(maxOsculatingCircleRadius, pos);
48
48
 
49
- //let order = PointOnShape.calcOrder(circle, pos);
50
- let order = calcPosOrder(circle, pos);
49
+ //const order = PointOnShape.calcOrder(circle, pos);
50
+ const order = calcPosOrder(circle, pos);
51
51
  // Make sure there isn't already a ContactPoint close by - it can cause
52
52
  // floating point stability issues.
53
53
  if (isAnotherCpCloseby(cpGraphs, pos, circle, order, 0, 1000, 'magenta')) {