flo-mat 2.0.1 → 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 -7125
  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 +28 -23
  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 -2819
  287. package/browser/index.module.js +0 -7149
  288. package/browser/index.module.min.js +0 -2
  289. package/browser/index.module.min.js.LICENSE.txt +0 -2819
@@ -25,29 +25,29 @@ function simplifyMatMapOnly(
25
25
  hausdorffTolerance = 1e-1,
26
26
  hausdorffSpacing = 1e0) {
27
27
 
28
- let simpleMap: Map<CpNode, { ps: number[][], ts: number[] }> = new Map();
28
+ const simpleMap: Map<CpNode, { ps: number[][], ts: number[] }> = new Map();
29
29
 
30
30
  // Start from a leaf
31
31
  while (!cpNode.isTerminating()) {
32
32
  cpNode = cpNode.next;
33
33
  }
34
34
 
35
- let branches = getBranches(cpNode, anlgeTolerance);
35
+ const branches = getBranches(cpNode, anlgeTolerance);
36
36
 
37
- let canDeletes: CpNode[] = [];
37
+ const canDeletes: CpNode[] = [];
38
38
  for (let k=0; k<branches.length; k++) {
39
- let branch = branches[k];
39
+ const branch = branches[k];
40
40
 
41
41
  // Try to remove some
42
42
  let j = 0;
43
43
  while (j < branch.length) {
44
- let i = j;
44
+ const i = j;
45
45
  while (true) {
46
46
  j++;
47
47
 
48
48
  if (j === branch.length) { break; }
49
49
 
50
- let hd = getTotalHausdorffDistance(i, j, branch, hausdorffSpacing);
50
+ const hd = getTotalHausdorffDistance(i, j, branch, hausdorffSpacing);
51
51
 
52
52
  if (hd > hausdorffTolerance) {
53
53
  break;
@@ -59,17 +59,17 @@ function simplifyMatMapOnly(
59
59
  if (i+1 === j) {
60
60
  // no simplification occured
61
61
  } else {
62
- let branStart = branch[i];
63
- let branEnd = branch[j-1];
62
+ const branStart = branch[i];
63
+ const branEnd = branch[j-1];
64
64
 
65
- let medial = toCubic(getCurveBetween(branStart, branEnd.next));
66
- let rev = medial.slice().reverse();
65
+ const medial = toCubic(getCurveBetween(branStart, branEnd.next));
66
+ const rev = medial.slice().reverse();
67
67
  let curCpNode = branStart;
68
68
  let prevT = 0;
69
69
  while (curCpNode !== branEnd) {
70
- let t = closestPointOnBezier(medial, curCpNode.next.cp.circle.center).t;
70
+ const t = closestPointOnBezier(medial, curCpNode.next.cp.circle.center).t;
71
71
  simpleMap.set(curCpNode, { ps: medial, ts: [prevT, t] });
72
- let oppositeCpNode = curCpNode.nextOnCircle.prev;
72
+ const oppositeCpNode = curCpNode.nextOnCircle.prev;
73
73
  simpleMap.set(oppositeCpNode, { ps: rev, ts: [1-t, 1-prevT] });
74
74
 
75
75
  prevT = t;
@@ -77,7 +77,7 @@ function simplifyMatMapOnly(
77
77
  }
78
78
  simpleMap.set(curCpNode, { ps: medial, ts: [prevT, 1] });
79
79
 
80
- let oppositeCpNode = curCpNode.nextOnCircle.prev;
80
+ const oppositeCpNode = curCpNode.nextOnCircle.prev;
81
81
  simpleMap.set(oppositeCpNode, { ps: rev, ts: [0, 1-prevT] });
82
82
  }
83
83
  }
@@ -93,8 +93,8 @@ function getTotalHausdorffDistance(
93
93
  branch: CpNode[],
94
94
  hausdorffSpacing: number) {
95
95
 
96
- let hds: number[] = [];
97
- let longCurve = getCurveBetween(branch[i], branch[j].next);
96
+ const hds: number[] = [];
97
+ const longCurve = getCurveBetween(branch[i], branch[j].next);
98
98
  for (let m=i; m<j+1; m++) {
99
99
  hds.push(hausdorffDistance(
100
100
  getCurveToNext(branch[m]),
@@ -1,4 +1,4 @@
1
- declare var _debug_: Debug;
1
+ declare const _debug_: Debug;
2
2
 
3
3
  import { Debug } from '../../debug/debug.js';
4
4
  import { Mat } from '../../mat.js';
@@ -8,12 +8,15 @@ import { Mat } from '../../mat.js';
8
8
  * @hidden
9
9
  * @param sat
10
10
  */
11
- function addDebugInfo(sat: Mat, timingStart: number) {
11
+ function addDebugInfo(
12
+ sat: Mat,
13
+ timingStart: number) {
14
+
12
15
  if (typeof _debug_ === 'undefined') { return; }
13
16
 
14
17
  _debug_.generated.elems.sat.push(sat);
15
18
 
16
- let timing = _debug_.generated.timing;
19
+ const timing = _debug_.generated.timing;
17
20
  timing.sats = performance.now() - timingStart;
18
21
  }
19
22
 
@@ -25,7 +25,7 @@ function addToTree(
25
25
  circle: Circle,
26
26
  depth: number) {
27
27
 
28
- let { groups, newLimits } = calcGroups(
28
+ const { groups, newLimits } = calcGroups(
29
29
  s,
30
30
  coordinate,
31
31
  limits,
@@ -34,15 +34,15 @@ function addToTree(
34
34
 
35
35
  // Create new edge if it does not exist yet.
36
36
  if (groups.length === 1 && depth !== DEPTH_LIMIT) {
37
- let group = groups[0];
37
+ const group = groups[0];
38
38
 
39
- if (!tree.trees.get(group)) {
40
- tree.trees.set(group, { trees: new Map(), circles: new Set() } );
39
+ if (!tree.trees!.get(group)) {
40
+ tree.trees!.set(group, { trees: new Map(), circles: new Set() } );
41
41
  }
42
- let t = tree.trees.get(group);
42
+ const t = tree.trees!.get(group)!;
43
43
 
44
44
  // Flip coordinates
45
- let newCoordinate = coordinate ? 0 : 1;
45
+ const newCoordinate = coordinate ? 0 : 1;
46
46
  addToTree(
47
47
  s,
48
48
  t,
@@ -55,11 +55,11 @@ function addToTree(
55
55
  return;
56
56
  }
57
57
 
58
- if (!tree.trees.get(5)) {
59
- tree.trees.set(5, { trees: new Map(), circles: new Set() } );
58
+ if (!tree.trees!.get(5)) {
59
+ tree.trees!.set(5, { trees: new Map(), circles: new Set() } );
60
60
  }
61
- let vertices = tree.trees.get(5).circles;
62
- vertices.add(circle);
61
+ const vertices = tree.trees!.get(5)!.circles;
62
+ vertices!.add(circle);
63
63
  }
64
64
 
65
65
 
@@ -29,47 +29,47 @@ function calcGroups(
29
29
  limits: number[][],
30
30
  circle: Circle) {
31
31
 
32
- let limit = limits[coordinate];
33
- let l1 = limit[0];
34
- let l2 = limit[1];
32
+ const limit = limits[coordinate];
33
+ const l1 = limit[0];
34
+ const l2 = limit[1];
35
35
 
36
36
  // Relevant cut-off lines.
37
- let q = (l2 - l1) / 4;
38
- let w = q+q;
37
+ const q = (l2 - l1) / 4;
38
+ const w = q+q;
39
39
 
40
40
  // Shift origin
41
- let r = circle.radius;
42
- let x = circle.center[coordinate] - l1;
43
- let x0 = x - (r * s);
44
- let x1 = x + (r * s);
41
+ const r = circle.radius;
42
+ const x = circle.center[coordinate] - l1;
43
+ const x0 = x - (r * s);
44
+ const x1 = x + (r * s);
45
45
 
46
- let newLimit: number[] = [,];
47
- let groups = []; // Group to which circle belongs;
46
+ let newLimit: (number | undefined)[] = [,];
47
+ const groups: number[] = []; // Group to which circle belongs;
48
48
 
49
- let qStart = Math.floor(x0/q);
50
- let qEnd = Math.floor(x1/q) + 1;
51
- let qDiff = qEnd - qStart;
49
+ const qStart = Math.floor(x0/q);
50
+ const qEnd = Math.floor(x1/q) + 1;
51
+ const qDiff = qEnd - qStart;
52
52
 
53
- let group;
53
+ let group: number;
54
54
  if (qDiff === 1) {
55
55
  // If contained in sliver.
56
56
  group = (2 * Math.floor(qStart/2)) + 1;
57
57
  groups.push(group);
58
58
 
59
- let lowerLimit = l1 + q*(group-1);
59
+ const lowerLimit = l1 + q*(group-1);
60
60
  newLimit = [lowerLimit, lowerLimit + w];
61
61
 
62
62
  } else if (qDiff === 2) {
63
63
  group = qStart + 1;
64
64
  groups.push(group);
65
65
 
66
- let lowerLimit = l1 + q*(group-1);
66
+ const lowerLimit = l1 + q*(group-1);
67
67
  newLimit = [lowerLimit, lowerLimit + w];
68
68
  }
69
69
 
70
- let newLimits: number[][] = [,];
70
+ const newLimits: ((number | undefined)[] | undefined)[] = [,];
71
71
  if (groups.length === 1) {
72
- let otherCoordinate = coordinate ? 0 : 1;
72
+ const otherCoordinate = coordinate ? 0 : 1;
73
73
 
74
74
  newLimits[otherCoordinate] = limits[otherCoordinate];
75
75
  newLimits[coordinate] = newLimit;
@@ -18,12 +18,12 @@ function createSpacialTree(
18
18
  s: number,
19
19
  circles: Circle[]) {
20
20
 
21
- let coordinate = 0;
22
- let limits = [[0, width], [0, height]];
21
+ const coordinate = 0;
22
+ const limits = [[0, width], [0, height]];
23
23
 
24
- let tree: TTree = { trees: new Map(), circles: new Set() };
24
+ const tree: TTree = { trees: new Map(), circles: new Set() };
25
25
 
26
- for (let circle of circles) {
26
+ for (const circle of circles) {
27
27
  addToTree(
28
28
  s,
29
29
  tree,
@@ -12,11 +12,11 @@ function cullNonCycles(cpStart: CpNode) {
12
12
 
13
13
  let cpNodeKept = cpStart;
14
14
 
15
- let leaves = getLeaves(cpStart);
15
+ const leaves = getLeaves(cpStart);
16
16
 
17
17
 
18
18
  while (leaves.length) {
19
- let leaf = leaves.pop();
19
+ const leaf = leaves.pop();
20
20
 
21
21
  // Preserve topology - keep cycles.
22
22
  if (leaf.isHoleClosing || leaf.isIntersection) { continue; }
@@ -26,11 +26,11 @@ function cullNonCycles(cpStart: CpNode) {
26
26
  while (true) {
27
27
  cpNode = cpNode.next;
28
28
  let cut = false;
29
- let cp1 = cpNode.prevOnCircle;
29
+ const cp1 = cpNode.prevOnCircle;
30
30
 
31
31
  if (cpNode.getProngCount() > 2) {
32
- //let cp2 = cp1.prevOnCircle;
33
- let cp2 = cpNode.nextOnCircle;
32
+ //const cp2 = cp1.prevOnCircle;
33
+ const cp2 = cpNode.nextOnCircle;
34
34
 
35
35
  //if (cpStart === cpNode || cpStart === cp1 || cpStart === cp2) {
36
36
  if (CpNode.isOnSameCircle(cpNode, cpStart)) {
@@ -15,12 +15,12 @@ function cull(
15
15
  culls: Set<Circle>,
16
16
  maxCpNode: CpNode) {
17
17
 
18
- let leaves = getLeaves(maxCpNode);
18
+ const leaves = getLeaves(maxCpNode);
19
19
 
20
20
  function getNonTrivialEdges(cpStart: CpNode) {
21
21
  let cp = cpStart;
22
22
 
23
- let cps: CpNode[] = [];
23
+ const cps: CpNode[] = [];
24
24
  do {
25
25
  if (cp.next !== cp.nextOnCircle) {
26
26
  cps.push(cp);
@@ -32,7 +32,7 @@ function cull(
32
32
  }
33
33
 
34
34
  while (leaves.length) {
35
- let leaf = leaves.pop();
35
+ const leaf = leaves.pop();
36
36
 
37
37
  // Preserve topology.
38
38
  if (leaf.isHoleClosing || leaf.isIntersection) { continue; }
@@ -46,7 +46,7 @@ function cull(
46
46
  while (true) {
47
47
  cpNode = cpNode.next;
48
48
  let cut = false;
49
- let cp1 = cpNode.prevOnCircle;
49
+ const cp1 = cpNode.prevOnCircle;
50
50
 
51
51
  if (!culls.has(cpNode.cp.circle)) {
52
52
  // Cut off the edge once a non-cull has been reached.
@@ -54,7 +54,7 @@ function cull(
54
54
  } else if (CpNode.isOnSameCircle(cpNode, maxCpNode)) {
55
55
  cut = true; // We are at the max disk - cut whole edge
56
56
  } else {
57
- let cps = getNonTrivialEdges(cpNode);
57
+ const cps = getNonTrivialEdges(cpNode);
58
58
 
59
59
  if (cps.length === 1) {
60
60
  cpNode = cps[0];
@@ -22,24 +22,24 @@ function getEngulfedVertices(
22
22
  tree: TTree,
23
23
  circle: Circle) {
24
24
 
25
- let c1 = scaleCircle(circle, s);
25
+ const c1 = scaleCircle(circle, s);
26
26
 
27
- let cullNodes: Set<Circle> = new Set();
27
+ const cullNodes: Set<Circle> = new Set();
28
28
 
29
- let limits = [[0, width], [0, height]];
29
+ const limits = [[0, width], [0, height]];
30
30
  f(tree, 0, limits, 0);
31
31
 
32
32
  return cullNodes;
33
33
 
34
34
 
35
35
  function cullBranch5(tree: TTree) {
36
- let t = tree.trees.get(5);
36
+ const t = tree.trees!.get(5);
37
37
  if (!t) { return; }
38
38
 
39
- let circles = t.circles;
39
+ const circles = t.circles!;
40
40
 
41
41
  circles.forEach(function(circle, key) {
42
- let c2 = scaleCircle(circle, s);
42
+ const c2 = scaleCircle(circle, s);
43
43
  if (engulfsCircle(c1, c2)) {
44
44
  cullNodes.add(circle);
45
45
  circles.delete(key);
@@ -51,7 +51,7 @@ function getEngulfedVertices(
51
51
  function f(
52
52
  tree: TTree,
53
53
  coordinate: number,
54
- limits: number[][],
54
+ limits: number[][] | null,
55
55
  depth: number) {
56
56
 
57
57
  if (limits === null) {
@@ -60,7 +60,7 @@ function getEngulfedVertices(
60
60
  cullBranch5(tree);
61
61
 
62
62
  for (let i=0; i<=4; i++) {
63
- let t = tree.trees.get(i);
63
+ const t = tree.trees!.get(i);
64
64
  if (t) {
65
65
  f(t, 0, null, depth+1);
66
66
  }
@@ -69,7 +69,7 @@ function getEngulfedVertices(
69
69
  return;
70
70
  }
71
71
 
72
- let { groups, newLimits } = calcGroups(
72
+ const { groups, newLimits } = calcGroups(
73
73
  s,
74
74
  coordinate,
75
75
  limits,
@@ -79,13 +79,13 @@ function getEngulfedVertices(
79
79
  if (groups.length === 1) {
80
80
  cullBranch5(tree);
81
81
 
82
- let group = groups[0];
83
- let newCoordinate = coordinate ? 0 : 1;
82
+ const group = groups[0];
83
+ const newCoordinate = coordinate ? 0 : 1;
84
84
 
85
85
  if (group === 1 || group === 3) {
86
86
  // One of the higher priority left/top or
87
87
  // right/bottom half groups.
88
- let t = tree.trees.get(group);
88
+ const t = tree.trees!.get(group);
89
89
 
90
90
  if (t) {
91
91
  f(
@@ -98,12 +98,12 @@ function getEngulfedVertices(
98
98
  } else {
99
99
  // One of the lower priority even groups (0,2 or 4).
100
100
 
101
- let branches = [];
102
- branches.push(tree.trees.get(group));
103
- if (group > 0) { branches.push(tree.trees.get(group-1)); }
104
- if (group < 4) { branches.push(tree.trees.get(group+1)); }
101
+ const branches: TTree[] = [];
102
+ branches.push(tree.trees!.get(group)!);
103
+ if (group > 0) { branches.push(tree.trees!.get(group-1)!); }
104
+ if (group < 4) { branches.push(tree.trees!.get(group+1)!); }
105
105
 
106
- for (let branch of branches) {
106
+ for (const branch of branches) {
107
107
  if (branch) {
108
108
  f(
109
109
  branch,
@@ -123,7 +123,7 @@ function getEngulfedVertices(
123
123
  // Circle spans multiple groups at this level of the tree. Check all
124
124
  // circles in all branches.
125
125
  for (let i=0; i<=4; i++) {
126
- let t = tree.trees.get(i);
126
+ const t = tree.trees!.get(i);
127
127
  if (!t) { continue; }
128
128
 
129
129
  f(t, 0, null, depth+1);
@@ -10,7 +10,7 @@ import { clone } from '../cp-node/clone.js';
10
10
  * @param mat The MAT to trim.
11
11
  */
12
12
  function trimMat(mat: Mat): Mat {
13
- let cpNode = cullNonCycles(clone(mat.cpNode));
13
+ const cpNode = cullNonCycles(clone(mat.cpNode));
14
14
 
15
15
  if (!cpNode) { return undefined; }
16
16
 
@@ -65,7 +65,7 @@ function getPosCorner(pos: IPointOnShape) {
65
65
  /**
66
66
  * @hidden
67
67
  */
68
- let isPosSharpCorner = memoize((pos: IPointOnShape) => {
68
+ const isPosSharpCorner = memoize((pos: IPointOnShape) => {
69
69
  if (!isPosCorner(pos)) { return false; }
70
70
 
71
71
  return getPosCorner(pos).isSharp;
@@ -75,7 +75,7 @@ let isPosSharpCorner = memoize((pos: IPointOnShape) => {
75
75
  /**
76
76
  * @hidden
77
77
  */
78
- let isPosDullCorner = memoize((pos: IPointOnShape) => {
78
+ const isPosDullCorner = memoize((pos: IPointOnShape) => {
79
79
  if (!isPosCorner(pos)) { return false; }
80
80
 
81
81
  return getPosCorner(pos).isDull;
@@ -85,7 +85,7 @@ let isPosDullCorner = memoize((pos: IPointOnShape) => {
85
85
  /**
86
86
  * @hidden
87
87
  */
88
- let isPosQuiteSharpCorner = memoize((pos: IPointOnShape) => {
88
+ const isPosQuiteSharpCorner = memoize((pos: IPointOnShape) => {
89
89
  if (!isPosCorner(pos)) { return false; }
90
90
 
91
91
  return getPosCorner(pos).isQuiteSharp;
@@ -95,7 +95,7 @@ let isPosQuiteSharpCorner = memoize((pos: IPointOnShape) => {
95
95
  /**
96
96
  * @hidden
97
97
  */
98
- let isPosQuiteDullCorner = memoize((pos: IPointOnShape) => {
98
+ const isPosQuiteDullCorner = memoize((pos: IPointOnShape) => {
99
99
  if (!isPosCorner(pos)) { return false; }
100
100
 
101
101
  return getPosCorner(pos).isQuiteDull;
@@ -128,10 +128,10 @@ function calcPosOrder(
128
128
  if (!isPosDullCorner(pos)) { return 0; }
129
129
  //if (!isPosDullCorner(pos)) { return 0; }
130
130
 
131
- let corner = getPosCorner(pos);
131
+ const corner = getPosCorner(pos);
132
132
 
133
- let n = rotateNeg90Degrees(corner.tangents[0]);
134
- let v = toUnitVector( fromTo(pos.p, circle.center) );
133
+ const n = rotateNeg90Degrees(corner.tangents[0]);
134
+ const v = toUnitVector( fromTo(pos.p, circle.center) );
135
135
 
136
136
  return -dot(n, v);
137
137
  }
@@ -168,11 +168,11 @@ function comparePoss(a: IPointOnShape, b: IPointOnShape) {
168
168
  * @param t
169
169
  * @hidden
170
170
  */
171
- let calcOsculatingCircleRadius = memoize((pos: IPointOnShape) => {
172
- let ps = pos.curve.ps;
173
- let t = pos.t;
171
+ const calcOsculatingCircleRadius = memoize((pos: IPointOnShape) => {
172
+ const ps = pos.curve.ps;
173
+ const t = pos.t;
174
174
 
175
- let c = -curvature(ps, t);
175
+ const c = -curvature(ps, t);
176
176
 
177
177
  // c > 0 => bending inwards
178
178
 
@@ -202,13 +202,13 @@ function getOsculatingCircle(
202
202
  maxOsculatingCircleRadius
203
203
  );
204
204
 
205
- let ps = pos.curve.ps;
206
- let t = pos.t;
205
+ const ps = pos.curve.ps;
206
+ const t = pos.t;
207
207
 
208
208
  const tangent_ = tangent(ps,t);
209
- let normal_ = toUnitVector([-tangent_[1],tangent_[0]]);
210
- let p = evalDeCasteljau(ps,t);
211
- let circleCenter = [
209
+ const normal_ = toUnitVector([-tangent_[1],tangent_[0]]);
210
+ const p = evalDeCasteljau(ps,t);
211
+ const circleCenter = [
212
212
  p[0] - normal_[0]*radius,
213
213
  p[1] - normal_[1]*radius
214
214
  ];
@@ -30,22 +30,22 @@ function simplifyMat(
30
30
  // Start from a leaf
31
31
  while (!cpNode.isTerminating()) { cpNode = cpNode.next; }
32
32
 
33
- let branches = getBranches(cpNode, anlgeTolerance);
33
+ const branches = getBranches(cpNode, anlgeTolerance);
34
34
 
35
- let canDeletes: CpNode[] = [];
35
+ const canDeletes: CpNode[] = [];
36
36
  for (let k=0; k<branches.length; k++) {
37
- let branch = branches[k];
37
+ const branch = branches[k];
38
38
 
39
39
  // Try to remove some
40
40
  let j = 0;
41
41
  while (j < branch.length) {
42
- let i = j;
42
+ const i = j;
43
43
  while (true) {
44
44
  j++;
45
45
 
46
46
  if (j === branch.length) { break; }
47
47
 
48
- let hd = getTotalHausdorffDistance(i, j, branch, maxIterations);
48
+ const hd = getTotalHausdorffDistance(i, j, branch, maxIterations);
49
49
 
50
50
  if (hd > hausdorffTolerance) {
51
51
  break;
@@ -61,9 +61,9 @@ function simplifyMat(
61
61
  }
62
62
  }
63
63
 
64
- for (let cpNode of canDeletes) {
65
- let isTerminating = cpNode.isTerminating();
66
- let onCircleCount = cpNode.getCpNodesOnCircle().length;
64
+ for (const cpNode of canDeletes) {
65
+ const isTerminating = cpNode.isTerminating();
66
+ const onCircleCount = cpNode.getCpNodesOnCircle().length;
67
67
  if (isTerminating || onCircleCount !== 2) {
68
68
  continue;
69
69
  }
@@ -82,8 +82,8 @@ function getTotalHausdorffDistance(
82
82
  branch: CpNode[],
83
83
  hausdorffSpacing: number) {
84
84
 
85
- let hds: number[] = [];
86
- let longCurve = getCurveBetween(branch[i], branch[j].next);
85
+ const hds: number[] = [];
86
+ const longCurve = getCurveBetween(branch[i], branch[j].next);
87
87
  for (; i<j+1; i++) {
88
88
  hds.push(hausdorffDistance(
89
89
  getCurveToNext(branch[i]),
@@ -11,24 +11,22 @@ import { Curve } from '../curve.js';
11
11
  * @param curve
12
12
  */
13
13
  function getCurvatureAtInterface(curve: Curve) {
14
- const ts = [1,0];
15
-
16
- let pss = [
14
+ const pss = [
17
15
  curve.ps,
18
16
  curve.next.ps
19
17
  ];
20
18
 
21
- let tans = [
19
+ const tans = [
22
20
  toUnitVector(tangent(pss[0], 1)),
23
21
  toUnitVector(tangent(pss[0], 0))
24
22
  ];
25
23
 
26
24
  // The integral of a kind of Dirac Delta function.
27
- let cosθ = dot (tans[0], tans[1]);
28
- let sinθ = cross(tans[0], tans[1]);
29
- let θ = acos(cosθ);
25
+ const cosθ = dot (tans[0], tans[1]);
26
+ const sinθ = cross(tans[0], tans[1]);
27
+ const θ = acos(cosθ);
30
28
 
31
- let result = sinθ >= 0 ? θ : -θ;
29
+ const result = sinθ >= 0 ? θ : -θ;
32
30
 
33
31
  return result;
34
32
  }
@@ -9,7 +9,7 @@ import { getShapeBounds } from './get-shape-bounds.js';
9
9
  * @param loops
10
10
  */
11
11
  function getExtreme(loops: Loop[]) {
12
- let bounds = getShapeBounds(loops);
12
+ const bounds = getShapeBounds(loops);
13
13
 
14
14
  return Math.max(
15
15
  Math.abs(bounds.minX.p[0]),
@@ -12,13 +12,13 @@ const INF = Number.POSITIVE_INFINITY;
12
12
  /**
13
13
  * @hidden
14
14
  */
15
- let getLoopBounds = memoize(function(loop: Loop): {
15
+ const getLoopBounds = memoize(function(loop: Loop): {
16
16
  minX: IPointOnShape;
17
17
  minY: IPointOnShape;
18
18
  maxX: IPointOnShape;
19
19
  maxY: IPointOnShape } {
20
20
 
21
- let extremes: {
21
+ const extremes: {
22
22
  bezier: Curve,
23
23
  t: number,
24
24
  val: number
@@ -34,15 +34,15 @@ let getLoopBounds = memoize(function(loop: Loop): {
34
34
  ];
35
35
 
36
36
  loop.curves.forEach(function(curve: Curve): void {
37
- let ps = curve.ps;
38
- // let bounds = getBounds_(ps);
39
- let bounds = getBounds(ps);
37
+ const ps = curve.ps;
38
+ // const bounds = getBounds_(ps);
39
+ const bounds = getBounds(ps);
40
40
 
41
41
 
42
42
  {
43
43
  {
44
- let v = bounds.box[0][0];
45
- let x = extremes[0][0].val;
44
+ const v = bounds.box[0][0];
45
+ const x = extremes[0][0].val;
46
46
  if (v < x || (v === x && bounds.ts[0][0] > extremes[0][0].t)) {
47
47
  extremes[0][0] = {
48
48
  bezier : curve,
@@ -53,8 +53,8 @@ let getLoopBounds = memoize(function(loop: Loop): {
53
53
  }
54
54
 
55
55
  {
56
- let v = bounds.box[0][1];
57
- let x = extremes[0][1].val;
56
+ const v = bounds.box[0][1];
57
+ const x = extremes[0][1].val;
58
58
  if (v < x || (v === x && bounds.ts[0][1] > extremes[0][1].t)) {
59
59
  extremes[0][1] = {
60
60
  bezier : curve,
@@ -67,8 +67,8 @@ let getLoopBounds = memoize(function(loop: Loop): {
67
67
 
68
68
  {
69
69
  {
70
- let v = bounds.box[1][0];
71
- let x = extremes[1][0].val;
70
+ const v = bounds.box[1][0];
71
+ const x = extremes[1][0].val;
72
72
  if (v > x || (v === x && bounds.ts[1][0] > extremes[1][0].t)) {
73
73
  extremes[1][0] = {
74
74
  bezier : curve,
@@ -79,8 +79,8 @@ let getLoopBounds = memoize(function(loop: Loop): {
79
79
  }
80
80
 
81
81
  {
82
- let v = bounds.box[1][1];
83
- let x = extremes[1][1].val;
82
+ const v = bounds.box[1][1];
83
+ const x = extremes[1][1].val;
84
84
  if (v > x || (v === x && bounds.ts[1][1] > extremes[1][1].t)) {
85
85
  extremes[1][1] = {
86
86
  bezier : curve,