flo-mat 4.1.5 → 5.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 (356) hide show
  1. package/__tests__/closest-boundary-point/get-endpoint-info.spec.ts +140 -0
  2. package/__tests__/closest-boundary-point/root-interval-to-distance-squared-interval.spec.ts +87 -0
  3. package/__tests__/cp-node/fs/get-all-on-loop-by-loop.spec.ts +55 -0
  4. package/__tests__/cp-node/fs/get-angle-between-mat-curves.spec.ts +39 -3
  5. package/__tests__/cp-node/fs/get-boundary-bezier-parts-to-next.spec.ts +87 -3
  6. package/__tests__/cp-node/fs/get-boundary-beziers-between.spec.ts +68 -3
  7. package/__tests__/cp-node/fs/get-boundary-beziers-to-next.spec.ts +41 -3
  8. package/__tests__/cp-node/fs/get-boundary-distance-to-next.spec.ts +20 -3
  9. package/__tests__/cp-node/fs/get-branch-beziers.spec.ts +42 -3
  10. package/__tests__/cp-node/fs/get-branch.spec.ts +60 -3
  11. package/__tests__/cp-node/fs/get-cp-node-ordering.spec.ts +19 -3
  12. package/__tests__/cp-node/fs/get-distance-to-next.spec.ts +37 -4
  13. package/__tests__/cp-node/fs/get-edge-direction.spec.ts +50 -3
  14. package/__tests__/cp-node/fs/get-first-exit.spec.ts +78 -3
  15. package/__tests__/cp-node/fs/get-hole-closers.spec.ts +32 -3
  16. package/__tests__/cp-node/fs/get-implied-boundary-bezier-between.spec.ts +48 -3
  17. package/__tests__/cp-node/fs/get-mat-curve-between.spec.ts +77 -3
  18. package/__tests__/cp-node/fs/get-mat-curve-to-next.spec.ts +17 -4
  19. package/__tests__/cp-node/fs/get-mat-curves-between.spec.ts +38 -3
  20. package/__tests__/cp-node/fs/get-salience.spec.ts +68 -3
  21. package/__tests__/cp-node/fs/get-vertex-forward-children.spec.ts +40 -3
  22. package/__tests__/cp-node/fs/insert-cp-node.spec.ts +87 -3
  23. package/__tests__/cp-node/fs/is-special.spec.ts +1 -1
  24. package/__tests__/cp-node/fs/remove-cp-node.spec.ts +42 -3
  25. package/__tests__/find-2-prong/calc-seperation-tolerance.spec.ts +46 -0
  26. package/__tests__/find-2-prong/get-medial/get-closest-points.spec.ts +1 -1
  27. package/__tests__/floyd-warshall/get-graph.spec.ts +100 -0
  28. package/__tests__/get-mats-with-hole.ts +28 -0
  29. package/__tests__/get-mats1.spec.ts +61 -0
  30. package/__tests__/get-mats1.ts +75 -67
  31. package/__tests__/helpers/cp-node-by-id.ts +27 -0
  32. package/__tests__/helpers/expect-point-close.ts +42 -0
  33. package/__tests__/mat/hausdorff-distance-one-sided-exceeds.spec.ts +129 -0
  34. package/__tests__/mat/simplify-mat.spec.ts +85 -0
  35. package/__tests__/reconstruct-from-mat/reconstruct-from-mat.spec.ts +39 -0
  36. package/__tests__/specific-cases/test-svgs/achispado.svg +14 -0
  37. package/__tests__/utils/get-beziers-from-tangents.spec.ts +142 -0
  38. package/browser/index.js +12985 -9965
  39. package/browser/index.min.js +1 -1
  40. package/node/closest-boundary-point/cull-curve-pieces.d.ts +21 -0
  41. package/node/closest-boundary-point/cull-curve-pieces.js +40 -0
  42. package/node/closest-boundary-point/cull-curve-pieces.js.map +1 -0
  43. package/node/closest-boundary-point/get-close-boundary-points-certified.js +5 -2
  44. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
  45. package/node/closest-boundary-point/get-endpoint-info.d.ts +39 -0
  46. package/node/closest-boundary-point/get-endpoint-info.js +78 -0
  47. package/node/closest-boundary-point/get-endpoint-info.js.map +1 -0
  48. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +5 -19
  49. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -1
  50. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +17 -5
  51. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +37 -50
  52. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -1
  53. package/node/corner/get-corner.d.ts +18 -1
  54. package/node/corner/get-corner.js +8 -1
  55. package/node/corner/get-corner.js.map +1 -1
  56. package/node/corner/get-interface-ccw.js.map +1 -1
  57. package/node/cp-node/cp-node.d.ts +4 -3
  58. package/node/cp-node/fs/get-all-on-loop-by-loop.js +0 -4
  59. package/node/cp-node/fs/get-all-on-loop-by-loop.js.map +1 -1
  60. package/node/cp-node/fs/get-angle-between-mat-curves.js +6 -4
  61. package/node/cp-node/fs/get-angle-between-mat-curves.js.map +1 -1
  62. package/node/cp-node/fs/get-boundary-beziers-between.d.ts +6 -4
  63. package/node/cp-node/fs/get-boundary-beziers-between.js +6 -4
  64. package/node/cp-node/fs/get-boundary-beziers-between.js.map +1 -1
  65. package/node/cp-node/fs/get-branch-beziers.d.ts +2 -1
  66. package/node/cp-node/fs/get-branch-beziers.js +3 -2
  67. package/node/cp-node/fs/get-branch-beziers.js.map +1 -1
  68. package/node/cp-node/fs/get-branch.js +1 -2
  69. package/node/cp-node/fs/get-branch.js.map +1 -1
  70. package/node/cp-node/fs/get-distance-to-next.js +4 -2
  71. package/node/cp-node/fs/get-distance-to-next.js.map +1 -1
  72. package/node/cp-node/fs/get-first-exit.d.ts +7 -3
  73. package/node/cp-node/fs/get-first-exit.js +13 -11
  74. package/node/cp-node/fs/get-first-exit.js.map +1 -1
  75. package/node/cp-node/fs/get-implied-boundary-bezier-between.d.ts +9 -1
  76. package/node/cp-node/fs/get-implied-boundary-bezier-between.js +11 -55
  77. package/node/cp-node/fs/get-implied-boundary-bezier-between.js.map +1 -1
  78. package/node/cp-node/fs/get-mat-curve-between.d.ts +4 -3
  79. package/node/cp-node/fs/get-mat-curve-between.js +5 -49
  80. package/node/cp-node/fs/get-mat-curve-between.js.map +1 -1
  81. package/node/cp-node/fs/get-mat-curve-to-next.d.ts +1 -1
  82. package/node/cp-node/fs/get-mat-curves-between.d.ts +8 -0
  83. package/node/cp-node/fs/get-mat-curves-between.js +9 -2
  84. package/node/cp-node/fs/get-mat-curves-between.js.map +1 -1
  85. package/node/cp-node/fs/get-real-prong-count.d.ts +2 -1
  86. package/node/cp-node/fs/get-real-prong-count.js +11 -5
  87. package/node/cp-node/fs/get-real-prong-count.js.map +1 -1
  88. package/node/cp-node/fs/get-salience.d.ts +10 -0
  89. package/node/cp-node/fs/get-salience.js +17 -1
  90. package/node/cp-node/fs/get-salience.js.map +1 -1
  91. package/node/cp-node/fs/is-fully-terminating.d.ts +4 -2
  92. package/node/cp-node/fs/is-fully-terminating.js +6 -15
  93. package/node/cp-node/fs/is-fully-terminating.js.map +1 -1
  94. package/node/cp-node/fs/is-on-same-loop.d.ts +1 -1
  95. package/node/cp-node/fs/is-special.d.ts +7 -0
  96. package/node/cp-node/fs/is-special.js +9 -2
  97. package/node/cp-node/fs/is-special.js.map +1 -1
  98. package/node/cp-node/fs/is-vertex.d.ts +1 -1
  99. package/node/cp-node/fs/traverse-edges.d.ts +7 -3
  100. package/node/cp-node/fs/traverse-edges.js +7 -3
  101. package/node/cp-node/fs/traverse-edges.js.map +1 -1
  102. package/node/cp-node/stringification/from-stringifyable.d.ts +2 -2
  103. package/node/cp-node/stringification/from-stringifyable.js +1 -1
  104. package/node/cp-node/stringification/from-stringifyable.js.map +1 -1
  105. package/node/cp-node/stringification/to-stringifyable.d.ts +3 -3
  106. package/node/cp-node/stringification/to-stringifyable.js +3 -3
  107. package/node/debug/debug.d.ts +26 -3
  108. package/node/debug/debug.js +16 -5
  109. package/node/debug/debug.js.map +1 -1
  110. package/node/find-2-prong/add-2-prong.js +1 -7
  111. package/node/find-2-prong/add-2-prong.js.map +1 -1
  112. package/node/find-2-prong/calc-seperation-tolerance.d.ts +28 -5
  113. package/node/find-2-prong/calc-seperation-tolerance.js +32 -89
  114. package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -1
  115. package/node/find-2-prong/find-2-prong.js +8 -10
  116. package/node/find-2-prong/find-2-prong.js.map +1 -1
  117. package/node/find-2-prong/find-and-add-2-prongs.js +2 -2
  118. package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -1
  119. package/node/find-2-prong/get-medial/get-antipodal-points.d.ts +1 -2
  120. package/node/find-2-prong/get-medial/get-antipodal-points.js +2 -3
  121. package/node/find-2-prong/get-medial/get-antipodal-points.js.map +1 -1
  122. package/node/find-2-prong/get-medial/get-closest-points.d.ts +1 -8
  123. package/node/find-2-prong/get-medial/get-closest-points.js +4 -40
  124. package/node/find-2-prong/get-medial/get-closest-points.js.map +1 -1
  125. package/node/find-2-prong/reduce-radius.d.ts +1 -1
  126. package/node/find-2-prong/reduce-radius.js +6 -3
  127. package/node/find-2-prong/reduce-radius.js.map +1 -1
  128. package/node/find-3-prong/calc-better-x.js +1 -1
  129. package/node/find-3-prong/calc-better-x.js.map +1 -1
  130. package/node/find-3-prong/find-3-prong-for-delta3s.d.ts +3 -2
  131. package/node/find-3-prong/find-3-prong-for-delta3s.js +35 -41
  132. package/node/find-3-prong/find-3-prong-for-delta3s.js.map +1 -1
  133. package/node/find-3-prong/find-3-prong.js +3 -1
  134. package/node/find-3-prong/find-3-prong.js.map +1 -1
  135. package/node/find-3-prong/find-and-add-3-prongs.js +16 -0
  136. package/node/find-3-prong/find-and-add-3-prongs.js.map +1 -1
  137. package/node/find-mat/create-initial-cp-tree.js +2 -2
  138. package/node/find-mat/create-initial-cp-tree.js.map +1 -1
  139. package/node/find-mat/find-mat.js +3 -4
  140. package/node/find-mat/find-mat.js.map +1 -1
  141. package/node/find-mat/find-mats.d.ts +6 -12
  142. package/node/find-mat/find-mats.js +10 -27
  143. package/node/find-mat/find-mats.js.map +1 -1
  144. package/node/find-mat/get-dull-corners-on-loop.js +2 -2
  145. package/node/find-mat/get-dull-corners-on-loop.js.map +1 -1
  146. package/node/find-mat/get-for-1-prongs-on-loop.js +36 -8
  147. package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -1
  148. package/node/find-mat/get-meta.d.ts +14 -4
  149. package/node/find-mat/get-meta.js +30 -24
  150. package/node/find-mat/get-meta.js.map +1 -1
  151. package/node/find-mat/get-sharp-corners.js +2 -2
  152. package/node/find-mat/get-sharp-corners.js.map +1 -1
  153. package/node/find-mat/mat-options.d.ts +2 -2
  154. package/node/floyd-warshall/get-graph.d.ts +12 -1
  155. package/node/floyd-warshall/get-graph.js +41 -38
  156. package/node/floyd-warshall/get-graph.js.map +1 -1
  157. package/node/geometry/get-bounding-box-.d.ts +16 -2
  158. package/node/geometry/get-bounding-box-.js +5 -2
  159. package/node/geometry/get-bounding-box-.js.map +1 -1
  160. package/node/geometry/get-closest-square-distance-to-rect.d.ts +3 -0
  161. package/node/geometry/get-closest-square-distance-to-rect.js +7 -5
  162. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
  163. package/node/geometry/get-closest-squared-distance-to-rotated-rect.d.ts +4 -0
  164. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js +11 -5
  165. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  166. package/node/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.js +1 -2
  167. package/node/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.js.map +1 -1
  168. package/node/index.d.ts +3 -2
  169. package/node/index.js +2 -1
  170. package/node/index.js.map +1 -1
  171. package/node/mat/clone-mat.d.ts +9 -0
  172. package/node/mat/clone-mat.js +17 -0
  173. package/node/mat/clone-mat.js.map +1 -0
  174. package/node/mat/clone-meta.d.ts +12 -0
  175. package/node/mat/clone-meta.js +24 -0
  176. package/node/mat/clone-meta.js.map +1 -0
  177. package/node/mat/get-boundary-piece-beziers.d.ts +5 -0
  178. package/node/mat/get-boundary-piece-beziers.js +7 -93
  179. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  180. package/node/mat/get-largest-3-prong.d.ts +6 -0
  181. package/node/mat/get-largest-3-prong.js +8 -5
  182. package/node/mat/get-largest-3-prong.js.map +1 -1
  183. package/node/mat/get-largest-vertex.d.ts +15 -1
  184. package/node/mat/get-largest-vertex.js +20 -7
  185. package/node/mat/get-largest-vertex.js.map +1 -1
  186. package/node/mat/hausdorff-distance-one-sided-exceeds.d.ts +79 -0
  187. package/node/mat/hausdorff-distance-one-sided-exceeds.js +251 -0
  188. package/node/mat/hausdorff-distance-one-sided-exceeds.js.map +1 -0
  189. package/node/mat/mat-meta.d.ts +0 -6
  190. package/node/mat/simplify-mat.d.ts +25 -8
  191. package/node/mat/simplify-mat.js +182 -53
  192. package/node/mat/simplify-mat.js.map +1 -1
  193. package/node/mat/trim-mat.d.ts +4 -2
  194. package/node/mat/trim-mat.js +3 -1
  195. package/node/mat/trim-mat.js.map +1 -1
  196. package/node/point-on-shape/get-boundary-tangent-line.d.ts +19 -0
  197. package/node/point-on-shape/get-boundary-tangent-line.js +33 -0
  198. package/node/point-on-shape/get-boundary-tangent-line.js.map +1 -0
  199. package/node/point-on-shape/get-osculating-circle.d.ts +6 -4
  200. package/node/point-on-shape/get-osculating-circle.js +6 -4
  201. package/node/point-on-shape/get-osculating-circle.js.map +1 -1
  202. package/node/point-on-shape/get-pos-corner.js +2 -2
  203. package/node/point-on-shape/get-pos-corner.js.map +1 -1
  204. package/node/reconstruct-from-mat/reconstruct-from-mat.js +20 -80
  205. package/node/reconstruct-from-mat/reconstruct-from-mat.js.map +1 -1
  206. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.d.ts +4 -0
  207. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.js +4 -0
  208. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.js.map +1 -1
  209. package/node/sat/cull.d.ts +7 -6
  210. package/node/sat/cull.js +13 -16
  211. package/node/sat/cull.js.map +1 -1
  212. package/node/sat/get-sat-culls.d.ts +12 -2
  213. package/node/sat/get-sat-culls.js +21 -16
  214. package/node/sat/get-sat-culls.js.map +1 -1
  215. package/node/svg/get-shape-bounds.d.ts +1 -12
  216. package/node/svg/get-shape-bounds.js +2 -3
  217. package/node/svg/get-shape-bounds.js.map +1 -1
  218. package/node/sweep-line/sweep-line.js.map +1 -1
  219. package/node/utils/get-beziers-from-tangents.d.ts +28 -0
  220. package/node/utils/get-beziers-from-tangents.js +92 -0
  221. package/node/utils/get-beziers-from-tangents.js.map +1 -0
  222. package/node/vertex/remove-vertex.d.ts +5 -3
  223. package/node/vertex/remove-vertex.js +5 -3
  224. package/node/vertex/remove-vertex.js.map +1 -1
  225. package/package.json +9 -9
  226. package/qv-infinite-loop.md +120 -0
  227. package/src/closest-boundary-point/cull-curve-pieces.ts +49 -0
  228. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +5 -2
  229. package/src/closest-boundary-point/get-endpoint-info.ts +96 -0
  230. package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +5 -23
  231. package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +42 -60
  232. package/src/corner/get-corner.ts +10 -1
  233. package/src/corner/get-interface-ccw.ts +2 -2
  234. package/src/cp-node/cp-node.ts +4 -3
  235. package/src/cp-node/fs/get-all-on-loop-by-loop.ts +0 -4
  236. package/src/cp-node/fs/get-angle-between-mat-curves.ts +6 -4
  237. package/src/cp-node/fs/get-boundary-beziers-between.ts +10 -8
  238. package/src/cp-node/fs/get-branch-beziers.ts +3 -2
  239. package/src/cp-node/fs/get-branch.ts +1 -2
  240. package/src/cp-node/fs/get-distance-to-next.ts +4 -2
  241. package/src/cp-node/fs/get-first-exit.ts +15 -14
  242. package/src/cp-node/fs/get-implied-boundary-bezier-between.ts +17 -69
  243. package/src/cp-node/fs/get-mat-curve-between.ts +9 -67
  244. package/src/cp-node/fs/get-mat-curves-between.ts +9 -2
  245. package/src/cp-node/fs/get-real-prong-count.ts +11 -7
  246. package/src/cp-node/fs/get-salience.ts +15 -2
  247. package/src/cp-node/fs/is-fully-terminating.ts +6 -18
  248. package/src/cp-node/fs/is-on-same-loop.ts +2 -2
  249. package/src/cp-node/fs/is-special.ts +11 -6
  250. package/src/cp-node/fs/is-vertex.ts +1 -1
  251. package/src/cp-node/fs/traverse-edges.ts +8 -4
  252. package/src/cp-node/stringification/from-stringifyable.ts +75 -75
  253. package/src/cp-node/stringification/to-stringifyable.ts +3 -3
  254. package/src/debug/debug.ts +44 -8
  255. package/src/find-2-prong/add-2-prong.ts +2 -9
  256. package/src/find-2-prong/calc-seperation-tolerance.ts +34 -115
  257. package/src/find-2-prong/find-2-prong.ts +9 -11
  258. package/src/find-2-prong/find-and-add-2-prongs.ts +2 -2
  259. package/src/find-2-prong/get-medial/get-antipodal-points.ts +1 -3
  260. package/src/find-2-prong/get-medial/get-closest-points.ts +6 -51
  261. package/src/find-2-prong/reduce-radius.ts +6 -4
  262. package/src/find-3-prong/calc-better-x.ts +2 -2
  263. package/src/find-3-prong/find-3-prong-for-delta3s.ts +197 -214
  264. package/src/find-3-prong/find-3-prong.ts +54 -51
  265. package/src/find-3-prong/find-and-add-3-prongs.ts +20 -1
  266. package/src/find-mat/create-initial-cp-tree.ts +2 -2
  267. package/src/find-mat/find-mat.ts +4 -6
  268. package/src/find-mat/find-mats.ts +83 -105
  269. package/src/find-mat/get-dull-corners-on-loop.ts +2 -2
  270. package/src/find-mat/get-for-1-prongs-on-loop.ts +40 -8
  271. package/src/find-mat/get-meta.ts +34 -39
  272. package/src/find-mat/get-sharp-corners.ts +2 -2
  273. package/src/find-mat/mat-options.ts +2 -2
  274. package/src/floyd-warshall/get-graph.ts +46 -47
  275. package/src/geometry/get-bounding-box-.ts +5 -2
  276. package/src/geometry/get-closest-square-distance-to-rect.ts +7 -7
  277. package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +12 -10
  278. package/src/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.ts +1 -2
  279. package/src/index.ts +3 -2
  280. package/src/mat/clone-mat.ts +9 -3
  281. package/src/mat/clone-meta.ts +8 -0
  282. package/src/mat/get-boundary-piece-beziers.ts +16 -117
  283. package/src/mat/get-largest-3-prong.ts +9 -6
  284. package/src/mat/get-largest-vertex.ts +25 -9
  285. package/src/mat/hausdorff-distance-one-sided-exceeds.ts +314 -0
  286. package/src/mat/mat-meta.ts +0 -9
  287. package/src/mat/simplify-mat.ts +254 -116
  288. package/src/mat/trim-mat.ts +6 -4
  289. package/src/point-on-shape/get-boundary-tangent-line.ts +36 -0
  290. package/src/point-on-shape/get-osculating-circle.ts +7 -5
  291. package/src/point-on-shape/get-pos-corner.ts +2 -2
  292. package/src/reconstruct-from-mat/reconstruct-from-mat.ts +22 -111
  293. package/src/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.ts +4 -0
  294. package/src/sat/cull.ts +16 -20
  295. package/src/sat/get-sat-culls.ts +28 -23
  296. package/src/svg/get-shape-bounds.ts +2 -3
  297. package/src/sweep-line/sweep-line.ts +1 -1
  298. package/src/utils/get-beziers-from-tangents.ts +110 -0
  299. package/src/utils/map-map.ts +1 -1
  300. package/src/vertex/remove-vertex.ts +5 -3
  301. package/__tests__/cp-node/fs/get-distance-between.spec.ts +0 -7
  302. package/__tests__/cp-node/fs/get-terminating-on-circle.spec.ts +0 -24
  303. package/__tests__/cp-node/fs/is-single-3-prong.spec.ts +0 -17
  304. package/__tests__/cp-node/fs/iterate-all-on-loop.spec.ts +0 -17
  305. package/__tests__/cp-node/fs/traverse-all-forward.spec.ts +0 -14
  306. package/node/closest-boundary-point/cull-bezier-pieces-1.d.ts +0 -9
  307. package/node/closest-boundary-point/cull-bezier-pieces-1.js +0 -17
  308. package/node/closest-boundary-point/cull-bezier-pieces-1.js.map +0 -1
  309. package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +0 -13
  310. package/node/closest-boundary-point/cull-by-loose-bounding-box.js +0 -27
  311. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +0 -1
  312. package/node/closest-boundary-point/cull-by-tight-boundary-box.d.ts +0 -11
  313. package/node/closest-boundary-point/cull-by-tight-boundary-box.js +0 -27
  314. package/node/closest-boundary-point/cull-by-tight-boundary-box.js.map +0 -1
  315. package/node/cp-node/fs/find-first.d.ts +0 -10
  316. package/node/cp-node/fs/find-first.js +0 -19
  317. package/node/cp-node/fs/find-first.js.map +0 -1
  318. package/node/debug/functions/check-ordering.d.ts +0 -4
  319. package/node/debug/functions/check-ordering.js +0 -43
  320. package/node/debug/functions/check-ordering.js.map +0 -1
  321. package/node/find-2-prong/cull-bezier-pieces.d.ts +0 -13
  322. package/node/find-2-prong/cull-bezier-pieces.js +0 -43
  323. package/node/find-2-prong/cull-bezier-pieces.js.map +0 -1
  324. package/node/floyd-warshall/get-hole-closer-pairs.d.ts +0 -8
  325. package/node/floyd-warshall/get-hole-closer-pairs.js +0 -27
  326. package/node/floyd-warshall/get-hole-closer-pairs.js.map +0 -1
  327. package/node/utils/dual-set.d.ts +0 -27
  328. package/node/utils/dual-set.js +0 -55
  329. package/node/utils/dual-set.js.map +0 -1
  330. package/node/utils/tri-map.d.ts +0 -27
  331. package/node/utils/tri-map.js +0 -49
  332. package/node/utils/tri-map.js.map +0 -1
  333. package/src/closest-boundary-point/cull-bezier-pieces-1.ts +0 -36
  334. package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +0 -42
  335. package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +0 -43
  336. package/src/closest-boundary-point/get-p-from-box.ts +0 -14
  337. package/src/cp-node/fs/add-distance-from.ts +0 -49
  338. package/src/cp-node/fs/get-distance-between.ts +0 -16
  339. package/src/cp-node/fs/get-terminating-on-circle.ts +0 -24
  340. package/src/cp-node/fs/is-single-3-prong.ts +0 -15
  341. package/src/cp-node/fs/iterate-all-on-loop.ts +0 -15
  342. package/src/cp-node/fs/traverse-all-forward.ts +0 -24
  343. package/src/debug/functions/draw/draw-beziers-as-single-path.ts +0 -40
  344. package/src/debug/functions/draw/draw-disk.ts +0 -34
  345. package/src/debug/functions/draw/xmlns.ts +0 -5
  346. package/src/find-2-prong/cull-bezier-pieces.ts +0 -61
  347. package/src/find-2-prong/find-and-add-2-prong.ts +0 -30
  348. package/src/find-2-prong/get-medial/get-closest-points-d.ts +0 -213
  349. package/src/find-2-prong/x-for-debugging.ts +0 -13
  350. package/src/floyd-warshall/get-hole-closer-pairs.ts +0 -35
  351. package/src/mat/get-two-prong-type.ts +0 -13
  352. package/src/point-on-shape/is-pos-dull-corner.ts +0 -18
  353. package/src/point-on-shape/is-pos-quite-dull-corner.ts +0 -18
  354. package/src/point-on-shape/is-pos-quite-sharp-corner.ts +0 -18
  355. package/src/point-on-shape/pos-to-human-string.ts +0 -18
  356. package/src/sweep-line/are-boxes-intersecting.ts +0 -37
@@ -1 +1 @@
1
- {"version":3,"file":"get-closest-points.js","sourceRoot":"","sources":["../../../src/find-2-prong/get-medial/get-closest-points.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-closest-points.js","sourceRoot":"","sources":["../../../src/find-2-prong/get-medial/get-closest-points.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,5 @@ import type { CurvePiece } from '../mat/curve-piece.js';
6
6
  *
7
7
  * @internal
8
8
  */
9
- declare function reduceRadius(maxCoordPowerOf2: number, rO: number, curvePieces: CurvePiece[], y: number[], nnorm: number[]): number;
9
+ declare function reduceRadius(rO: number, curvePieces: CurvePiece[], y: number[], nnorm: number[]): number;
10
10
  export { reduceRadius };
@@ -1,6 +1,6 @@
1
1
  import { getMedialPointCoeffsBez0 } from "flo-bezier3";
2
2
  import { lengthSquared, squaredDistanceBetween } from "flo-vector2d";
3
- const { abs } = Math;
3
+ const { abs, sqrt } = Math;
4
4
  const TOLERANCE = 1 + 2 ** -20;
5
5
  /**
6
6
  * Reduces the circle radius initially as an optimization step.
@@ -9,9 +9,12 @@ const TOLERANCE = 1 + 2 ** -20;
9
9
  *
10
10
  * @internal
11
11
  */
12
- function reduceRadius(maxCoordPowerOf2, rO, curvePieces, y, nnorm) {
12
+ function reduceRadius(rO, curvePieces, y, nnorm) {
13
13
  let minRadiusSqrd = rO ** 2;
14
- let x = [y[0] + nnorm[0], y[1] + nnorm[1]];
14
+ // the center of the initial circle (radius `rO`) - `nnorm` is not
15
+ // necessarily of unit length so scale it
16
+ const s = rO / sqrt(lengthSquared(nnorm));
17
+ let x = [y[0] + s * nnorm[0], y[1] + s * nnorm[1]];
15
18
  for (let i = 0; i < curvePieces.length; i++) {
16
19
  const curvePiece = curvePieces[i];
17
20
  const { ps } = curvePiece.curve;
@@ -1 +1 @@
1
- {"version":3,"file":"reduce-radius.js","sourceRoot":"","sources":["../../src/find-2-prong/reduce-radius.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAGrB,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,CAAC;AAG7B;;;;;;GAMG;AACH,SAAS,YAAY,CACb,gBAAwB,EACxB,EAAU,EACV,WAAyB,EACzB,CAAW,EACX,KAAe;IAEnB,IAAI,aAAa,GAAG,EAAE,IAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC;QAEhC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE7B,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,EAAC,EAAE,CAAC,EAAE,CAAC;YACtB,IAAI,sBAAsB,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;gBAC9C,SAAS,CAAE,gBAAgB;YAC/B,CAAC;YAED,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,wBAAwB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAEzD,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,SAAS;YACb,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YAEnB,8CAA8C;YAC9C,IAAI,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAE7B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC;gBACpB,aAAa,GAAG,CAAC,CAAC;gBAClB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,OAAO,SAAS,GAAC,aAAa,CAAC;AACnC,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"reduce-radius.js","sourceRoot":"","sources":["../../src/find-2-prong/reduce-radius.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;AAG3B,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,CAAC;AAG7B;;;;;;GAMG;AACH,SAAS,YAAY,CACb,EAAU,EACV,WAAyB,EACzB,CAAW,EACX,KAAe;IAEnB,IAAI,aAAa,GAAG,EAAE,IAAE,CAAC,CAAC;IAC1B,kEAAkE;IAClE,yCAAyC;IACzC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC;QAEhC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE7B,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,EAAC,EAAE,CAAC,EAAE,CAAC;YACtB,IAAI,sBAAsB,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;gBAC9C,SAAS,CAAE,gBAAgB;YAC/B,CAAC;YAED,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,wBAAwB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAEzD,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,SAAS;YACb,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YAEnB,8CAA8C;YAC9C,IAAI,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAE7B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC;gBACpB,aAAa,GAAG,CAAC,CAAC;gBAClB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,OAAO,SAAS,GAAC,aAAa,CAAC;AACnC,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -25,7 +25,7 @@ function calcBetterX(curvePiece3s, x, vectorToZeroV) {
25
25
  do {
26
26
  const shift = scale(vectorToZeroV, nu);
27
27
  newX = translate(shift, x);
28
- newPoss = curvePiece3s.map(curvePieces => getCloseBoundaryPointsCertified(curvePieces, x)[0]);
28
+ newPoss = curvePiece3s.map(curvePieces => getCloseBoundaryPointsCertified(curvePieces, newX)[0]);
29
29
  // Point of zero V
30
30
  const newCircleCenter = circumCenter(newPoss.map(pos => pos.p));
31
31
  const newVectorToZeroV = fromTo(newX, newCircleCenter);
@@ -1 +1 @@
1
- {"version":3,"file":"calc-better-x.js","sourceRoot":"","sources":["../../src/find-3-prong/calc-better-x.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AAGnH;;;;;;;;;;;;;GAaG;AACH,SAAS,WAAW,CACZ,YAA4B,EAC5B,CAAW,EACX,aAAuB;IAM3B,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IAE7B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,MAAM,CAAC;IACX,IAAI,IAAI,CAAC;IACT,IAAI,OAA0B,CAAC;IAC/B,IAAI,IAAI,CAAC;IACT,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,YAAY;IACxB,GAAG,CAAC;QACA,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE3B,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CACrC,+BAA+B,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;QAEF,kBAAkB;QAClB,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACvD,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAE7B,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;QAElB,EAAE,GAAG,EAAE,GAAC,CAAC,CAAC;QAEV,CAAC,EAAE,CAAC;IACR,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;IAE3B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAClC,CAAC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"calc-better-x.js","sourceRoot":"","sources":["../../src/find-3-prong/calc-better-x.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AAGnH;;;;;;;;;;;;;GAaG;AACH,SAAS,WAAW,CACZ,YAA4B,EAC5B,CAAW,EACX,aAAuB;IAM3B,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IAE7B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,MAAM,CAAC;IACX,IAAI,IAAc,CAAC;IACnB,IAAI,OAA0B,CAAC;IAC/B,IAAI,IAAI,CAAC;IACT,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,YAAY;IACxB,GAAG,CAAC;QACA,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE3B,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CACrC,+BAA+B,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CACxD,CAAC;QAEF,kBAAkB;QAClB,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACvD,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAE7B,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;QAElB,EAAE,GAAG,EAAE,GAAC,CAAC,CAAC;QAEV,CAAC,EAAE,CAAC;IACR,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;IAE3B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAClC,CAAC;AAGD,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -7,12 +7,13 @@ import type { ThreeProngInfo } from './three-prong-info.js';
7
7
  * @param δs the boundary pieces
8
8
  * @param idx δ identifier
9
9
  * @param k δs identifier
10
- * @param curvePiecess
10
+ * @param curvePiecess the curve pieces of each boundary piece
11
+ * @param allCurvePieces all of the above flattened into one array
11
12
  * @param maxCoordPowerOf2
12
13
  *
13
14
  * @internal
14
15
  */
15
- declare function find3ProngForDelta3s(δs: [CpNode, CpNode][], idx: number, k: number, curvePiecess: CurvePiece[][], maxCoordPowerOf2: number): {
16
+ declare function find3ProngForDelta3s(δs: [CpNode, CpNode][], idx: number, k: number, curvePiecess: CurvePiece[][], allCurvePieces: CurvePiece[], maxCoordPowerOf2: number): {
16
17
  error: number;
17
18
  threeProngInfo: ThreeProngInfo;
18
19
  } | undefined;
@@ -4,47 +4,35 @@ import { calcInitial3ProngCenter } from './calc-initial-3-prong-center.js';
4
4
  import { getClosestPoints } from './get-closest-points.js';
5
5
  import { calcBetterX } from './calc-better-x.js';
6
6
  import { getCloseBoundaryPointsCertified } from '../closest-boundary-point/get-close-boundary-points-certified.js';
7
- import { getCorner } from '../corner/get-corner.js';
7
+ import { cullCurvePieces } from '../closest-boundary-point/cull-curve-pieces.js';
8
+ import { getCorner$ } from '../corner/get-corner.js';
8
9
  import { isPosCorner } from '../point-on-shape/is-pos-corner.js';
9
10
  import { getPosCorner$ } from '../point-on-shape/get-pos-corner.js';
10
11
  import { isSharp } from '../cp-node/fs/is-sharp.js';
11
- const { min, abs, asin } = Math;
12
+ const { abs, asin } = Math;
12
13
  /**
13
14
  * Finds a 3-prong using only the 3 given δs.
14
15
  *
15
16
  * @param δs the boundary pieces
16
17
  * @param idx δ identifier
17
18
  * @param k δs identifier
18
- * @param curvePiecess
19
+ * @param curvePiecess the curve pieces of each boundary piece
20
+ * @param allCurvePieces all of the above flattened into one array
19
21
  * @param maxCoordPowerOf2
20
22
  *
21
23
  * @internal
22
24
  */
23
- function find3ProngForDelta3s(δs, idx, k, curvePiecess, maxCoordPowerOf2) {
25
+ function find3ProngForDelta3s(δs, idx, k, curvePiecess, allCurvePieces, maxCoordPowerOf2) {
24
26
  const TOLERANCE = 2 ** (maxCoordPowerOf2 - 32);
25
27
  const MAX_ITERATIONS = 10;
26
- const δs_ = [
27
- δs[0],
28
- δs[idx],
29
- δs[δs.length - 1]
30
- ];
31
- const curvePieces_ = [
32
- curvePiecess[0],
33
- curvePiecess[idx],
34
- curvePiecess[δs.length - 1]
35
- ];
36
- const δ3ss = [
37
- [δs_[0], δs_[1], δs_[2]],
38
- [δs_[1], δs_[2], δs_[0]],
39
- [δs_[2], δs_[0], δs_[1]],
40
- ];
41
- const curvePiecess_ = [
42
- [curvePieces_[0], curvePieces_[1], curvePieces_[2]],
43
- [curvePieces_[1], curvePieces_[2], curvePieces_[0]],
44
- [curvePieces_[2], curvePieces_[0], curvePieces_[1]],
45
- ];
46
- const δ3s = δ3ss[k];
47
- const curvePiece3s = curvePiecess_[k];
28
+ // The three boundary pieces (and their curve pieces) with the first,
29
+ // the `idx`th and the last taken, rotated so that the one with index `k`
30
+ // comes first (the first one is treated specially below).
31
+ const δs_ = [δs[0], δs[idx], δs[δs.length - 1]];
32
+ const curvePieces_ = [curvePiecess[0], curvePiecess[idx], curvePiecess[δs.length - 1]];
33
+ const r = (i) => (k + i) % 3;
34
+ const δ3s = [δs_[r(0)], δs_[r(1)], δs_[r(2)]];
35
+ const curvePiece3s = [curvePieces_[r(0)], curvePieces_[r(1)], curvePieces_[r(2)]];
48
36
  if (isSharp(δ3s[0][0])) {
49
37
  return undefined;
50
38
  }
@@ -65,17 +53,18 @@ function find3ProngForDelta3s(δs, idx, k, curvePiecess, maxCoordPowerOf2) {
65
53
  let poss = undefined;
66
54
  let j = 0; // Safeguard for slow convergence
67
55
  let x = calcInitial3ProngCenter(δ3s, curvePiece3s);
56
+ if (!Number.isFinite(x[0]) || !Number.isFinite(x[1])) {
57
+ // FUTURE - the code can be cleaned up and sped up a lot if we don't
58
+ // use this function as is but instead use δs[0] and δs[2] as is
59
+ // and make δs[1] include all the rest of the beziers around the
60
+ // loop. This check, for instance, would be eliminated completely.
61
+ return undefined;
62
+ }
63
+ // the closest points on the three boundary pieces to the current center
64
+ poss = getClosestPoints(x, curvePiece3s);
68
65
  let tolerance = Infinity;
69
66
  while (tolerance > TOLERANCE && j < MAX_ITERATIONS) {
70
67
  j++;
71
- poss = getClosestPoints(x, curvePiece3s);
72
- if (!Number.isFinite(x[0]) || !Number.isFinite(x[1])) {
73
- // FUTURE - the code can be cleaned up and sped up a lot if we don't
74
- // use this function as is but instead use δs[0] and δs[2] as is
75
- // and make δs[1] include all the rest of the beziers around the
76
- // loop. This check, for instance, would be eliminated completely.
77
- return undefined;
78
- }
79
68
  const circumCenter = getCircumCenter(poss.map(x => x.p));
80
69
  const vectorToZeroV = fromTo(x, circumCenter);
81
70
  if (!Number.isFinite(vectorToZeroV[0]) || !Number.isFinite(vectorToZeroV[1])) {
@@ -87,6 +76,8 @@ function find3ProngForDelta3s(δs, idx, k, curvePiecess, maxCoordPowerOf2) {
87
76
  }
88
77
  const upds = calcBetterX(curvePiece3s, x, vectorToZeroV);
89
78
  x = upds.newX;
79
+ // `calcBetterX` already found the closest points at the new center -
80
+ // use them for the next iteration instead of searching again
90
81
  poss = upds.newPoss;
91
82
  const V = len(vectorToZeroV); // The 'potential'
92
83
  tolerance = abs(V - upds.newV);
@@ -112,7 +103,7 @@ function find3ProngForDelta3s(δs, idx, k, curvePiecess, maxCoordPowerOf2) {
112
103
  // Check if point is on dull crorner
113
104
  //-----------------------------------
114
105
  if (isPosCorner(pos) && getPosCorner$(pos).isDull) {
115
- const corner = getCorner(pos.curve.ps, pos.curve.next.ps);
106
+ const corner = getCorner$(pos.curve.ps, pos.curve.next.ps);
116
107
  const tans = corner.tangents;
117
108
  const perps = tans.map(rotate90Degrees);
118
109
  const angleError1 = asin(cross(perps[0], v));
@@ -145,12 +136,15 @@ function find3ProngForDelta3s(δs, idx, k, curvePiecess, maxCoordPowerOf2) {
145
136
  // point to the 3-prong. It should be around 0. If not, this is not a good
146
137
  // candidate for the 3-prong.
147
138
  //-------------------------------------------------------------------------
148
- const closestDs = [];
149
- for (let i = 0; i < curvePiecess.length; i++) {
150
- const pos = getCloseBoundaryPointsCertified(curvePiecess[i], x)[0];
151
- closestDs.push(distanceBetween(pos.p, x));
152
- }
153
- const closestD = min(...closestDs);
139
+ // Only boundary pieces that come within the radius of the center can be
140
+ // closer than the three touching pieces, so cull against the radius first
141
+ // (cheap, memoized bounding box tests) and run the (expensive) certified
142
+ // closest point search once on the survivors only. The touching pieces
143
+ // always survive (their distance is about the radius) so the result is
144
+ // the true closest distance over all the boundary pieces.
145
+ const nearCurvePieces = cullCurvePieces(allCurvePieces, x, (1 + 2 ** -20) * radius * radius);
146
+ const closestPos = getCloseBoundaryPointsCertified(nearCurvePieces, x)[0];
147
+ const closestD = closestPos === undefined ? radius : distanceBetween(closestPos.p, x);
154
148
  const radiusDelta = abs(radius - closestD);
155
149
  // Weights below still need to be optimized.
156
150
  const W1 = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"find-3-prong-for-delta3s.js","sourceRoot":"","sources":["../../src/find-3-prong/find-3-prong-for-delta3s.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-3-prong-for-delta3s.js","sourceRoot":"","sources":["../../src/find-3-prong/find-3-prong-for-delta3s.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,14 @@ function find3Prong(δs, maxCoordPowerOf2) {
14
14
  // to reduced the number of permutations required
15
15
  // if (δs.length > 3) { console.log(δs.length); }
16
16
  const curvePiecess = δs.map(getBoundaryPieceBeziers);
17
+ // all the curve pieces of all the boundary pieces (for culling against)
18
+ const allCurvePieces = curvePiecess.flat();
17
19
  // The best candidate amongst the different 'permutations' of the given δs.
18
20
  let threeProng;
19
21
  let smallestError = Infinity;
20
22
  for (let i = 1; i < δs.length - 1; i++) {
21
23
  for (let k = 0; k < 3; k++) {
22
- const r = find3ProngForDelta3s(δs, i, k, curvePiecess, maxCoordPowerOf2);
24
+ const r = find3ProngForDelta3s(δs, i, k, curvePiecess, allCurvePieces, maxCoordPowerOf2);
23
25
  if (r === undefined) {
24
26
  continue;
25
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"find-3-prong.js","sourceRoot":"","sources":["../../src/find-3-prong/find-3-prong.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E;;;;;;;;GAQG;AACH,SAAS,UAAU,CACX,EAAsB,EACtB,gBAAwB;IAE5B,4EAA4E;IAC5E,iDAAiD;IACjD,iDAAiD;IAEjD,MAAM,YAAY,GAAG,EAAE,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAErD,2EAA2E;IAC3E,IAAI,UAA0B,CAAC;IAE/B,IAAI,aAAa,GAAG,QAAQ,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,oBAAoB,CAC1B,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,gBAAgB,CAC3C,CAAC;YAEF,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAElC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YAEpC,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;gBACxB,aAAa,GAAG,KAAK,CAAC;gBACtB,UAAU,GAAG,cAAc,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,UAAW,CAAC;AACvB,CAAC;AAGD,OAAO,EAAE,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"find-3-prong.js","sourceRoot":"","sources":["../../src/find-3-prong/find-3-prong.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E;;;;;;;;GAQG;AAEH,SAAS,UAAU,CACX,EAAsB,EACtB,gBAAwB;IAE5B,4EAA4E;IAC5E,iDAAiD;IACjD,iDAAiD;IAEjD,MAAM,YAAY,GAAG,EAAE,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrD,wEAAwE;IACxE,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IAE3C,2EAA2E;IAC3E,IAAI,UAA0B,CAAC;IAE/B,IAAI,aAAa,GAAG,QAAQ,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,oBAAoB,CAC1B,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,CAC3D,CAAC;YAEF,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAElC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YAEpC,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;gBACxB,aAAa,GAAG,KAAK,CAAC;gBACtB,UAAU,GAAG,cAAc,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,UAAW,CAAC;AACvB,CAAC;AAGD,OAAO,EAAE,UAAU,EAAE,CAAA"}
@@ -21,6 +21,8 @@ function findAndAdd3Prongs(meta, cpStart) {
21
21
  return { closeBysFor3Prong: undefined, addedCpNodes: [] };
22
22
  }
23
23
  const addedCpNodes = [];
24
+ let maxIterations = undefined;
25
+ let iterations = 0;
24
26
  do {
25
27
  if (cpStart === undefined) {
26
28
  continue;
@@ -29,6 +31,20 @@ function findAndAdd3Prongs(meta, cpStart) {
29
31
  if (visitedCps.length <= 2) {
30
32
  break;
31
33
  }
34
+ // Each added 3-prong splits off a part of the traversed face so the
35
+ // number of iterations is bounded by the initial face size. If the
36
+ // face does not shrink (e.g. a geometrically invalid vertex causing the
37
+ // same 3-prong to be re-inserted again and again) fail loudly instead
38
+ // of looping forever.
39
+ if (maxIterations === undefined) {
40
+ maxIterations = 2 * visitedCps.length + 16;
41
+ }
42
+ if (++iterations > maxIterations) {
43
+ const pos = cpStart.pointOnShape;
44
+ throw new Error(`findAndAdd3Prongs: no convergence after ${iterations} iterations ` +
45
+ `(face with ${visitedCps.length} vertices, start CpNode id ${cpStart.id} ` +
46
+ `on curve ${pos.curve.idx} at t = ${pos.t}, radius ${pos.circle.radius})`);
47
+ }
32
48
  const { closeBysFor3Prong, cpNodes } = findAndAdd3Prong(meta, visitedCps);
33
49
  addedCpNodes.push(cpNodes);
34
50
  if (closeBysFor3Prong.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"find-and-add-3-prongs.js","sourceRoot":"","sources":["../../src/find-3-prong/find-and-add-3-prongs.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,IAAI,EAAE,GAAG,CAAC,CAAC;AACX;;;;;;;;;;;;;GAaG;AACH,SAAS,iBAAiB,CAClB,IAAa,EACb,OAAe;IAKnB,IAAI,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,YAAY,GAAe,EAAE,CAAC;IACpC,GAAG,CAAC;QACA,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACxC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAEvC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM;QAAC,CAAC;QAEtC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE1E,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;YACjC,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC;gBACtD,OAAO,SAAU,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC,QAAQ,IAAI,EAAE;IAEf,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAC1D,CAAC;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
1
+ {"version":3,"file":"find-and-add-3-prongs.js","sourceRoot":"","sources":["../../src/find-3-prong/find-and-add-3-prongs.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,IAAI,EAAE,GAAG,CAAC,CAAC;AACX;;;;;;;;;;;;;GAaG;AACH,SAAS,iBAAiB,CAClB,IAAa,EACb,OAAe;IAKnB,IAAI,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,YAAY,GAAe,EAAE,CAAC;IACpC,IAAI,aAAa,GAAuB,SAAS,CAAC;IAClD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC;QACA,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACxC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAEvC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM;QAAC,CAAC;QAEtC,oEAAoE;QACpE,mEAAmE;QACnE,wEAAwE;QACxE,sEAAsE;QACtE,sBAAsB;QACtB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAC9B,aAAa,GAAG,CAAC,GAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,EAAE,UAAU,GAAG,aAAa,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;YACjC,MAAM,IAAI,KAAK,CACX,2CAA2C,UAAU,cAAc;gBACnE,cAAc,UAAU,CAAC,MAAM,8BAA8B,OAAO,CAAC,EAAE,GAAG;gBAC1E,YAAY,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAC5E,CAAC;QACN,CAAC;QAED,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE1E,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;YACjC,IAAI,EAAE,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC;gBACtD,OAAO,SAAU,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC,QAAQ,IAAI,EAAE;IAEf,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAC1D,CAAC;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
@@ -26,8 +26,8 @@ function createInitialCpTree(loops, sharpCornerss, lastInsertId) {
26
26
  const { curve } = ppos;
27
27
  const pos1 = { ...ppos, curve, t: 1, circle, order: -1, order2: 0 };
28
28
  const pos2 = { ...ppos, curve: curve.next, t: 0, circle, order: +1, order2: 0 };
29
- cpNode1 = insertCpNode(true, false, false, cpTree, pos1, cpNode2, undefined, /* unused */ lastInsertId);
30
- cpNode2 = insertCpNode(true, false, false, cpTree, pos2, cpNode1, undefined, /* unused */ lastInsertId);
29
+ cpNode1 = insertCpNode(true, false, false, cpTree, pos1, cpNode2, undefined, lastInsertId);
30
+ cpNode2 = insertCpNode(true, false, false, cpTree, pos2, cpNode1, undefined, lastInsertId);
31
31
  cpNode1.prevOnCircle = cpNode2;
32
32
  cpNode2.prevOnCircle = cpNode1;
33
33
  cpNode1.nextOnCircle = cpNode2;
@@ -1 +1 @@
1
- {"version":3,"file":"create-initial-cp-tree.js","sourceRoot":"","sources":["../../src/find-mat/create-initial-cp-tree.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGvE;;;;;;;;;;;GAWG;AACH,SAAS,mBAAmB,CACpB,KAAa,EACb,aAAkC,EAClC,YAA4B;IAEhC,MAAM,OAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;IAErD,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAE9B,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,OAAO,GAAgC,SAAS,CAAC;QACrD,IAAI,OAAO,GAAgC,SAAS,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC7C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAEvB,MAAM,IAAI,GAAiB,EAAE,GAAG,IAAI,EAAE,KAAK,EAAc,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC9F,MAAM,IAAI,GAAiB,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAE9F,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,YAAY,CAAE,CAAC;YACzG,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,YAAY,CAAE,CAAC;YAEzG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;YAC/B,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;YAC/B,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;YAC/B,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;QACnC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAGD,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
1
+ {"version":3,"file":"create-initial-cp-tree.js","sourceRoot":"","sources":["../../src/find-mat/create-initial-cp-tree.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGvE;;;;;;;;;;;GAWG;AACH,SAAS,mBAAmB,CACpB,KAAa,EACb,aAAkC,EAClC,YAA4B;IAEhC,MAAM,OAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;IAErD,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAE9B,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,OAAO,GAAgC,SAAS,CAAC;QACrD,IAAI,OAAO,GAAgC,SAAS,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC7C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAEvB,MAAM,IAAI,GAAiB,EAAE,GAAG,IAAI,EAAE,KAAK,EAAc,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC9F,MAAM,IAAI,GAAiB,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAE9F,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAE,CAAC;YAC5F,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAE,CAAC;YAE5F,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;YAC/B,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;YAC/B,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;YAC/B,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;QACnC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAGD,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { findAndAdd3ProngsOnLoop } from '../find-3-prong/find-and-add-3-prongs-on-loop.js';
2
2
  import { createInitialCpTree } from './create-initial-cp-tree.js';
3
- import { getPartialMeta, addDebugInfo1, addDebugInfo2, addDebugInfo3, addDebugInfo4 } from './get-meta.js';
3
+ import { addDebugElems, addDebugInfo1, addDebugInfo2, addDebugInfo3, addDebugInfo4 } from './get-meta.js';
4
4
  import { getSharpCornersOnLoop } from './get-sharp-corners.js';
5
5
  import { getDullCornersOnLoop } from './get-dull-corners-on-loop.js';
6
6
  import { findAndAdd2ProngsOnAllLoops } from '../find-2-prong/find-and-add-2-prongs-on-all-loops.js';
@@ -16,6 +16,7 @@ import { getShapeBounds } from '../svg/get-shape-bounds.js';
16
16
  */
17
17
  function findMat(loops, maxCoordPowerOf2, options) {
18
18
  addDebugInfo1();
19
+ addDebugElems(loops);
19
20
  const { minBezLength, maxCurviness, maxLength, angleIncrement } = options;
20
21
  const getSharpCornersOnLoop_ = getSharpCornersOnLoop(minBezLength);
21
22
  const getDullCornersOnLoop_ = getDullCornersOnLoop(minBezLength);
@@ -27,10 +28,9 @@ function findMat(loops, maxCoordPowerOf2, options) {
27
28
  const sharpCornersPerLoop = loops.map(getSharpCornersOnLoop_);
28
29
  const lastInsertId = { id: 0 };
29
30
  const cpTrees = createInitialCpTree(loops, sharpCornersPerLoop, lastInsertId);
30
- const _meta = getPartialMeta(loops);
31
31
  const meta = {
32
32
  maxCoordPowerOf2, squaredDiagonalLength, loops, cpTrees, // pointToCpNode,
33
- lastInsertId, ..._meta
33
+ lastInsertId
34
34
  };
35
35
  let cpNode;
36
36
  cpNode = findAndAddHoleClosing2Prongs(meta);
@@ -61,7 +61,6 @@ function findMat(loops, maxCoordPowerOf2, options) {
61
61
  return { cpNode, meta };
62
62
  }
63
63
  }
64
- // if (cpNode !== undefined) { checkOrdering(meta, cpNode); }
65
64
  const mat = { cpNode, meta };
66
65
  addDebugInfo4();
67
66
  return mat;
@@ -1 +1 @@
1
- {"version":3,"file":"find-mat.js","sourceRoot":"","sources":["../../src/find-mat/find-mat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-mat.js","sourceRoot":"","sources":["../../src/find-mat/find-mat.ts"],"names":[],"mappings":"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"}
@@ -11,18 +11,12 @@ import { MatOptions } from './mat-options.js';
11
11
  * beziers respectively. Each point is a two-element array (ordered pair), the
12
12
  * first of which is the x-coordinate and the second the y-coordinate.
13
13
  *
14
- * @param maxCurviness The maximum value the 'curviness' of a curve can have
15
- * before an additional MAT point is inserted in between. Defaults to 0.4.
16
- * (Curviness is measured as the total angle in radians between the consecutive
17
- * vectors formed by the ordered control points of th bezier curve). The value
18
- * is clipped in the range `[0.01,3]`.
19
- *
20
- * @param maxLength The maximum length a curve can have before an additional MAT
21
- * point is inserted. This value is scaled to a reference 1024 x 1024
22
- * grid (e.g. if the shape fits in a 512 x 512 axis-aligned box the value will be
23
- * halved, e.g. from 10 to 5). Together with maxCurviness it represents a
24
- * tolerance for the accuracy of the MAT. Defaults to 4. The value is clipped
25
- * in [1,100].
14
+ * @param options the `MatOptions` (see there for a description of each option
15
+ * and its default), e.g. `maxCurviness` and `maxLength` together determine the
16
+ * accuracy of the MAT, `simplify` and `simplifyTolerance` control the
17
+ * simplification of the result and `applySat` and `satScale` whether and how
18
+ * the Scale Axis Transform is applied. Missing options take their defaults
19
+ * (`defaultMatOptions`) and all values are clipped to their allowed ranges.
26
20
  */
27
21
  declare function findMats(bezierLoops: number[][][][], options?: MatOptions): Mat[];
28
22
  export { findMats };
@@ -1,9 +1,10 @@
1
- import { beziersToSvgPathStr, simplifyPaths } from 'flo-boolean';
1
+ import { simplifyPaths } from 'flo-boolean';
2
2
  import { getLoopsMetrics } from '../loop/get-max-coordinate.js';
3
3
  import { simplifyMat } from '../mat/simplify-mat.js';
4
4
  import { toScaleAxis } from '../sat/to-scale-axis.js';
5
5
  import { clipOptions } from './clip-options.js';
6
6
  import { findMat } from './find-mat.js';
7
+ import { resetDebugElems } from './get-meta.js';
7
8
  import { defaultMatOptions } from './mat-options.js';
8
9
  const { ceil, log2 } = Math;
9
10
  /**
@@ -17,21 +18,16 @@ const { ceil, log2 } = Math;
17
18
  * beziers respectively. Each point is a two-element array (ordered pair), the
18
19
  * first of which is the x-coordinate and the second the y-coordinate.
19
20
  *
20
- * @param maxCurviness The maximum value the 'curviness' of a curve can have
21
- * before an additional MAT point is inserted in between. Defaults to 0.4.
22
- * (Curviness is measured as the total angle in radians between the consecutive
23
- * vectors formed by the ordered control points of th bezier curve). The value
24
- * is clipped in the range `[0.01,3]`.
25
- *
26
- * @param maxLength The maximum length a curve can have before an additional MAT
27
- * point is inserted. This value is scaled to a reference 1024 x 1024
28
- * grid (e.g. if the shape fits in a 512 x 512 axis-aligned box the value will be
29
- * halved, e.g. from 10 to 5). Together with maxCurviness it represents a
30
- * tolerance for the accuracy of the MAT. Defaults to 4. The value is clipped
31
- * in [1,100].
21
+ * @param options the `MatOptions` (see there for a description of each option
22
+ * and its default), e.g. `maxCurviness` and `maxLength` together determine the
23
+ * accuracy of the MAT, `simplify` and `simplifyTolerance` control the
24
+ * simplification of the result and `applySat` and `satScale` whether and how
25
+ * the Scale Axis Transform is applied. Missing options take their defaults
26
+ * (`defaultMatOptions`) and all values are clipped to their allowed ranges.
32
27
  */
33
28
  function findMats(bezierLoops, options) {
34
29
  // if (typeof _debug_ !== 'undefined') { var timingStart = performance.now(); }
30
+ resetDebugElems();
35
31
  const { maxCoordinate } = getLoopsMetrics(bezierLoops);
36
32
  const maxCoordPowerOf2 = ceil(log2(maxCoordinate));
37
33
  const options_ = clipOptions(maxCoordPowerOf2, {
@@ -42,7 +38,6 @@ function findMats(bezierLoops, options) {
42
38
  const loopss = simplifyPaths(bezierLoops, {
43
39
  forceOrientationNegative: true,
44
40
  });
45
- // console.log(loopsToSvgPathStr(bezierLoops));
46
41
  const mats = [];
47
42
  for (const loops of loopss) {
48
43
  let mat = findMat(loops, maxCoordPowerOf2, options_);
@@ -53,7 +48,7 @@ function findMats(bezierLoops, options) {
53
48
  mat = toScaleAxis(mat, satScale);
54
49
  }
55
50
  if (simplify) {
56
- mat = simplifyMat(mat, simplifyTolerance, 50);
51
+ mat = simplifyMat(mat, simplifyTolerance);
57
52
  }
58
53
  mats.push(mat);
59
54
  }
@@ -61,17 +56,5 @@ function findMats(bezierLoops, options) {
61
56
  // circumCenter.resetStats();
62
57
  return mats;
63
58
  }
64
- /**
65
- * Returns an SVG path string representation of the given bezier loops.
66
- * @param loops An array of loops having an array of bezier curves each given as
67
- * an array of control points.
68
- */
69
- function loopsToSvgPathStr(loops) {
70
- let str = '';
71
- for (const loop of loops) {
72
- str = str + beziersToSvgPathStr(loop) + '\n';
73
- }
74
- return str;
75
- }
76
59
  export { findMats };
77
60
  //# sourceMappingURL=find-mats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-mats.js","sourceRoot":"","sources":["../../src/find-mat/find-mats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAG,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAc,MAAM,kBAAkB,CAAC;AAGjE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;AAG5B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAS,QAAQ,CACT,WAA2B,EAC3B,OAAoB;IAExB,+EAA+E;IAC/E,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAyB,WAAW,CAC9C,gBAAgB,EAAE;QAClB,GAAG,iBAAiB;QACpB,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACrB,CAAC,CAAC;IAEH,MAAM,EACF,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,iBAAiB,EAC9B,GAAG,QAAQ,CAAC;IAGb,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE;QACtC,wBAAwB,EAAE,IAAI;KACjC,CAAC,CAAC;IAEH,+CAA+C;IAE/C,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAEpC,IAAI,QAAQ,EAAE,CAAC;YACX,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAA;QACjD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,yDAAyD;IACzD,6BAA6B;IAE7B,OAAO,IAAI,CAAC;AAChB,CAAC;AAID;;;;GAIG;AACH,SAAS,iBAAiB,CAClB,KAAqB;IAEzB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,GAAG,GAAG,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjD,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"find-mats.js","sourceRoot":"","sources":["../../src/find-mat/find-mats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAG,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAc,MAAM,kBAAkB,CAAC;AAGjE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;AAG5B;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,QAAQ,CACT,WAA2B,EAC3B,OAAoB;IAExB,+EAA+E;IAC/E,eAAe,EAAE,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAyB,WAAW,CAC9C,gBAAgB,EAAE;QAClB,GAAG,iBAAiB;QACpB,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACrB,CAAC,CAAC;IAEH,MAAM,EACF,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,iBAAiB,EAC9B,GAAG,QAAQ,CAAC;IAGb,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE;QACtC,wBAAwB,EAAE,IAAI;KACjC,CAAC,CAAC;IAGH,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAEpC,IAAI,QAAQ,EAAE,CAAC;YACX,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,yDAAyD;IACzD,6BAA6B;IAE7B,OAAO,IAAI,CAAC;AAChB,CAAC;AAID,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { controlPointLinesLength } from 'flo-bezier3';
2
- import { getCorner } from '../corner/get-corner.js';
2
+ import { getCorner$ } from '../corner/get-corner.js';
3
3
  /** @internal */
4
4
  function getDullCornersOnLoop(minBezLength) {
5
5
  return (loop) => {
@@ -10,7 +10,7 @@ function getDullCornersOnLoop(minBezLength) {
10
10
  continue;
11
11
  }
12
12
  const { next, ps } = curve;
13
- if (getCorner(ps, next.ps).isQuiteDull) {
13
+ if (getCorner$(ps, next.ps).isQuiteDull) {
14
14
  const p = ps[ps.length - 1];
15
15
  const pDd = [[0, p[0]], [0, p[1]]];
16
16
  dullCorners.push({ curve, t: 1, isSource: true, p, pDd });
@@ -1 +1 @@
1
- {"version":3,"file":"get-dull-corners-on-loop.js","sourceRoot":"","sources":["../../src/find-mat/get-dull-corners-on-loop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,gBAAgB;AAChB,SAAS,oBAAoB,CACrB,YAAoB;IAExB,OAAO,CAAC,IAAU,EAAqB,EAAE;QACrC,MAAM,WAAW,GAAsB,EAAE,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC;gBACnD,SAAS;YACb,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YAE3B,IAAI,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEjC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC1D,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACpE,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACvB,CAAC,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,oBAAoB,EAAE,CAAA"}
1
+ {"version":3,"file":"get-dull-corners-on-loop.js","sourceRoot":"","sources":["../../src/find-mat/get-dull-corners-on-loop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,gBAAgB;AAChB,SAAS,oBAAoB,CACrB,YAAoB;IAExB,OAAO,CAAC,IAAU,EAAqB,EAAE;QACrC,MAAM,WAAW,GAAsB,EAAE,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC;gBACnD,SAAS;YACb,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YAE3B,IAAI,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEjC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC1D,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACpE,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACvB,CAAC,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,oBAAoB,EAAE,CAAA"}