flo-mat 2.0.4 → 3.0.0

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 (652) hide show
  1. package/.quokka +4 -0
  2. package/browser/index.js +18434 -14538
  3. package/browser/index.min.js +1 -1
  4. package/node/closest-boundary-point/cull-bezier-pieces.d.ts +9 -0
  5. package/node/closest-boundary-point/cull-bezier-pieces.js +17 -0
  6. package/node/closest-boundary-point/cull-bezier-pieces.js.map +1 -0
  7. package/node/{mat/closest-boundary-point → closest-boundary-point}/cull-by-loose-bounding-box.d.ts +2 -2
  8. package/node/{mat/closest-boundary-point → closest-boundary-point}/cull-by-loose-bounding-box.js +2 -2
  9. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -0
  10. package/node/{mat/closest-boundary-point → closest-boundary-point}/cull-by-tight-boundary-box.d.ts +2 -2
  11. package/node/{mat/closest-boundary-point → closest-boundary-point}/cull-by-tight-boundary-box.js +1 -1
  12. package/node/closest-boundary-point/cull-by-tight-boundary-box.js.map +1 -0
  13. package/node/closest-boundary-point/dd-deflate-with-running-error.d.ts +25 -0
  14. package/node/closest-boundary-point/dd-deflate-with-running-error.js +68 -0
  15. package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +1 -0
  16. package/node/closest-boundary-point/foot-and-endpoint-info.d.ts +10 -0
  17. package/node/closest-boundary-point/foot-and-endpoint-info.js +2 -0
  18. package/node/closest-boundary-point/foot-and-endpoint-info.js.map +1 -0
  19. package/node/{mat/closest-boundary-point → closest-boundary-point}/get-best-distance-squared.d.ts +2 -2
  20. package/node/{mat/closest-boundary-point → closest-boundary-point}/get-best-distance-squared.js +2 -3
  21. package/node/closest-boundary-point/get-best-distance-squared.js.map +1 -0
  22. package/node/closest-boundary-point/get-close-boundary-points-certified.d.ts +15 -0
  23. package/node/closest-boundary-point/get-close-boundary-points-certified.js +40 -0
  24. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -0
  25. package/node/closest-boundary-point/get-closest-boundary-point-certified.d.ts +15 -0
  26. package/node/closest-boundary-point/get-closest-boundary-point-certified.js +42 -0
  27. package/node/closest-boundary-point/get-closest-boundary-point-certified.js.map +1 -0
  28. package/node/closest-boundary-point/get-p-from-box.d.ts +3 -0
  29. package/node/closest-boundary-point/get-p-from-box.js +11 -0
  30. package/node/closest-boundary-point/get-p-from-box.js.map +1 -0
  31. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.d.ts +12 -0
  32. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +93 -0
  33. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -0
  34. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +13 -0
  35. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +58 -0
  36. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -0
  37. package/node/{contact-point.d.ts → contact-point/contact-point.d.ts} +3 -3
  38. package/node/{contact-point.js → contact-point/contact-point.js} +1 -5
  39. package/node/contact-point/contact-point.js.map +1 -0
  40. package/node/{compare-curvatures-at-interface.js → corner/compare-curvatures-at-interface.js} +2 -2
  41. package/node/corner/compare-curvatures-at-interface.js.map +1 -0
  42. package/node/{mat → corner}/corner.d.ts +1 -1
  43. package/node/{mat → corner}/corner.js.map +1 -1
  44. package/node/corner/get-corner.d.ts +15 -0
  45. package/node/{curve.js → corner/get-corner.js} +6 -17
  46. package/node/corner/get-corner.js.map +1 -0
  47. package/node/{get-interface-ccw.js → corner/get-interface-ccw.js} +18 -33
  48. package/node/corner/get-interface-ccw.js.map +1 -0
  49. package/node/cp-node/clone.d.ts +1 -1
  50. package/node/cp-node/clone.js +6 -4
  51. package/node/cp-node/clone.js.map +1 -1
  52. package/node/cp-node/cp-node.d.ts +196 -0
  53. package/node/cp-node/cp-node.js +249 -0
  54. package/node/cp-node/cp-node.js.map +1 -0
  55. package/node/cp-node/create-cp-node.d.ts +4 -0
  56. package/node/cp-node/create-cp-node.js +8 -0
  57. package/node/cp-node/create-cp-node.js.map +1 -0
  58. package/node/cp-node/enhance-cp-node.d.ts +24 -0
  59. package/node/cp-node/enhance-cp-node.js +20 -0
  60. package/node/cp-node/enhance-cp-node.js.map +1 -0
  61. package/node/{get-boundary-bezier-parts-to-next.js → cp-node/get-boundary-bezier-parts-to-next.js} +1 -1
  62. package/node/cp-node/get-boundary-bezier-parts-to-next.js.map +1 -0
  63. package/node/{get-boundary-beziers-to-next.d.ts → cp-node/get-boundary-beziers-to-next.d.ts} +1 -1
  64. package/node/{get-boundary-beziers-to-next.js → cp-node/get-boundary-beziers-to-next.js} +1 -1
  65. package/node/cp-node/get-boundary-beziers-to-next.js.map +1 -0
  66. package/node/cp-node/get-cp-node-ordering.d.ts +8 -0
  67. package/node/cp-node/get-cp-node-ordering.js +12 -0
  68. package/node/cp-node/get-cp-node-ordering.js.map +1 -0
  69. package/node/{get-curve-to-next.js → cp-node/get-curve-to-next.js} +1 -1
  70. package/node/cp-node/get-curve-to-next.js.map +1 -0
  71. package/node/cp-node/remove.d.ts +1 -1
  72. package/node/cp-node/traverse-cp.d.ts +12 -0
  73. package/node/cp-node/traverse-cp.js +26 -0
  74. package/node/cp-node/traverse-cp.js.map +1 -0
  75. package/node/{traverse-edges.js → cp-node/traverse-edges.js} +4 -3
  76. package/node/cp-node/traverse-edges.js.map +1 -0
  77. package/node/{traverse-vertices.js → cp-node/traverse-vertices.js} +4 -3
  78. package/node/cp-node/traverse-vertices.js.map +1 -0
  79. package/node/{curve.d.ts → curve/curve.d.ts} +4 -17
  80. package/node/curve/curve.js +14 -0
  81. package/node/curve/curve.js.map +1 -0
  82. package/node/debug/cp-node-for-debugging.d.ts +2 -2
  83. package/node/debug/debug-elem-types.d.ts +8 -8
  84. package/node/debug/debug.d.ts +6 -6
  85. package/node/debug/debug.js +2 -2
  86. package/node/debug/debug.js.map +1 -1
  87. package/node/debug/functions/draw-elem/bounding-hull.d.ts +2 -2
  88. package/node/debug/functions/draw-elem/bounding-hull.js +3 -3
  89. package/node/debug/functions/draw-elem/bounding-hull.js.map +1 -1
  90. package/node/debug/functions/draw-elem/branch.d.ts +2 -2
  91. package/node/debug/functions/draw-elem/branch.js +4 -3
  92. package/node/debug/functions/draw-elem/branch.js.map +1 -1
  93. package/node/debug/functions/draw-elem/culls.d.ts +2 -2
  94. package/node/debug/functions/draw-elem/culls.js +2 -2
  95. package/node/debug/functions/draw-elem/culls.js.map +1 -1
  96. package/node/debug/functions/draw-elem/draw-circle-percent.d.ts +1 -1
  97. package/node/debug/functions/draw-elem/draw-circle-percent.js +1 -1
  98. package/node/debug/functions/draw-elem/draw-circle-percent.js.map +1 -1
  99. package/node/debug/functions/draw-elem/draw-elem.d.ts +3 -3
  100. package/node/debug/functions/draw-elem/draw-elem.js +3 -3
  101. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  102. package/node/debug/functions/draw-elem/dull-corner.d.ts +3 -3
  103. package/node/debug/functions/draw-elem/dull-corner.js +3 -4
  104. package/node/debug/functions/draw-elem/dull-corner.js.map +1 -1
  105. package/node/debug/functions/draw-elem/leaves.d.ts +2 -2
  106. package/node/debug/functions/draw-elem/leaves.js +1 -1
  107. package/node/debug/functions/draw-elem/leaves.js.map +1 -1
  108. package/node/debug/functions/draw-elem/loop.d.ts +2 -2
  109. package/node/debug/functions/draw-elem/loop.js +1 -2
  110. package/node/debug/functions/draw-elem/loop.js.map +1 -1
  111. package/node/debug/functions/draw-elem/loops.d.ts +1 -1
  112. package/node/debug/functions/draw-elem/loops.js +0 -1
  113. package/node/debug/functions/draw-elem/loops.js.map +1 -1
  114. package/node/debug/functions/draw-elem/loose-bounding-box.d.ts +2 -2
  115. package/node/debug/functions/draw-elem/loose-bounding-box.js +3 -3
  116. package/node/debug/functions/draw-elem/loose-bounding-box.js.map +1 -1
  117. package/node/debug/functions/draw-elem/mat.d.ts +3 -3
  118. package/node/debug/functions/draw-elem/mat.js +9 -7
  119. package/node/debug/functions/draw-elem/mat.js.map +1 -1
  120. package/node/debug/functions/draw-elem/max-vertex.d.ts +2 -2
  121. package/node/debug/functions/draw-elem/max-vertex.js +1 -1
  122. package/node/debug/functions/draw-elem/max-vertex.js.map +1 -1
  123. package/node/debug/functions/draw-elem/min-y.d.ts +3 -3
  124. package/node/debug/functions/draw-elem/min-y.js +2 -6
  125. package/node/debug/functions/draw-elem/min-y.js.map +1 -1
  126. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.d.ts +2 -2
  127. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js +2 -2
  128. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js.map +1 -1
  129. package/node/debug/functions/draw-elem/one-prong.d.ts +2 -2
  130. package/node/debug/functions/draw-elem/one-prong.js +6 -11
  131. package/node/debug/functions/draw-elem/one-prong.js.map +1 -1
  132. package/node/debug/functions/draw-elem/sharp-corner.d.ts +3 -3
  133. package/node/debug/functions/draw-elem/sharp-corner.js +3 -4
  134. package/node/debug/functions/draw-elem/sharp-corner.js.map +1 -1
  135. package/node/debug/functions/draw-elem/three-prong.d.ts +2 -2
  136. package/node/debug/functions/draw-elem/three-prong.js +8 -10
  137. package/node/debug/functions/draw-elem/three-prong.js.map +1 -1
  138. package/node/debug/functions/draw-elem/tight-bounding-box.d.ts +2 -2
  139. package/node/debug/functions/draw-elem/tight-bounding-box.js +3 -3
  140. package/node/debug/functions/draw-elem/tight-bounding-box.js.map +1 -1
  141. package/node/debug/functions/draw-elem/two-prong.d.ts +2 -2
  142. package/node/debug/functions/draw-elem/two-prong.js +7 -8
  143. package/node/debug/functions/draw-elem/two-prong.js.map +1 -1
  144. package/node/debug/functions/draw-elem/vertex.d.ts +4 -3
  145. package/node/debug/functions/draw-elem/vertex.js +11 -9
  146. package/node/debug/functions/draw-elem/vertex.js.map +1 -1
  147. package/node/debug/functions/general.d.ts +8 -8
  148. package/node/debug/functions/general.js +8 -8
  149. package/node/debug/functions/general.js.map +1 -1
  150. package/node/debug/functions/three-prong.d.ts +2 -2
  151. package/node/debug/functions/three-prong.js +10 -13
  152. package/node/debug/functions/three-prong.js.map +1 -1
  153. package/node/debug/functions/two-prong.d.ts +16 -5
  154. package/node/debug/functions/two-prong.js +56 -58
  155. package/node/debug/functions/two-prong.js.map +1 -1
  156. package/node/debug/three-prong-for-debugging.d.ts +6 -6
  157. package/node/debug/three-prong-for-debugging.js +1 -1
  158. package/node/debug/three-prong-for-debugging.js.map +1 -1
  159. package/node/debug/two-prong-for-debugging.d.ts +7 -7
  160. package/node/error-analysis/gamma.d.ts +26 -0
  161. package/node/error-analysis/gamma.js +35 -0
  162. package/node/error-analysis/gamma.js.map +1 -0
  163. package/node/find-2-prong/add-1-prong.d.ts +12 -0
  164. package/node/{mat/find-mat → find-2-prong}/add-1-prong.js +11 -11
  165. package/node/find-2-prong/add-1-prong.js.map +1 -0
  166. package/node/{mat/find-mat → find-2-prong}/add-2-prong.d.ts +6 -9
  167. package/node/{mat/find-mat → find-2-prong}/add-2-prong.js +26 -74
  168. package/node/find-2-prong/add-2-prong.js.map +1 -0
  169. package/node/find-2-prong/add-debug-info.d.ts +8 -0
  170. package/node/{mat/find-mat/find-2-prong → find-2-prong}/add-debug-info.js +5 -4
  171. package/node/find-2-prong/add-debug-info.js.map +1 -0
  172. package/node/find-2-prong/cull-bezier-pieces.d.ts +11 -0
  173. package/node/find-2-prong/cull-bezier-pieces.js +28 -0
  174. package/node/find-2-prong/cull-bezier-pieces.js.map +1 -0
  175. package/node/{mat/find-mat/find-2-prong → find-2-prong}/find-2-prong.d.ts +9 -13
  176. package/node/find-2-prong/find-2-prong.js +144 -0
  177. package/node/find-2-prong/find-2-prong.js.map +1 -0
  178. package/node/find-2-prong/find-and-add-2-prongs-on-all-paths.d.ts +15 -0
  179. package/node/{mat/find-mat → find-2-prong}/find-and-add-2-prongs-on-all-paths.js +5 -4
  180. package/node/find-2-prong/find-and-add-2-prongs-on-all-paths.js.map +1 -0
  181. package/node/{mat/find-mat → find-2-prong}/find-and-add-2-prongs.d.ts +5 -5
  182. package/node/find-2-prong/find-and-add-2-prongs.js +60 -0
  183. package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -0
  184. package/node/{mat/find-mat → find-2-prong}/find-and-add-hole-closing-2-prongs.d.ts +3 -3
  185. package/node/{mat/find-mat → find-2-prong}/find-and-add-hole-closing-2-prongs.js +5 -5
  186. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js.map +1 -0
  187. package/node/find-2-prong/find-equidistant-point-on-line-dd.d.ts +10 -0
  188. package/node/find-2-prong/find-equidistant-point-on-line-dd.js +56 -0
  189. package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +1 -0
  190. package/node/find-2-prong/get-initial-bezier-pieces.d.ts +15 -0
  191. package/node/find-2-prong/get-initial-bezier-pieces.js +40 -0
  192. package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -0
  193. package/node/find-2-prong/reduce-radius.d.ts +8 -0
  194. package/node/find-2-prong/reduce-radius.js +72 -0
  195. package/node/find-2-prong/reduce-radius.js.map +1 -0
  196. package/node/find-2-prong/squared-distance-between-dd.d.ts +2 -0
  197. package/node/find-2-prong/squared-distance-between-dd.js +17 -0
  198. package/node/find-2-prong/squared-distance-between-dd.js.map +1 -0
  199. package/node/find-2-prong/x-for-debugging.d.ts +9 -0
  200. package/node/find-2-prong/x-for-debugging.js.map +1 -0
  201. package/node/{mat/find-mat → find-3-prong.ts}/add-3-prong.d.ts +12 -7
  202. package/node/find-3-prong.ts/add-3-prong.js +82 -0
  203. package/node/find-3-prong.ts/add-3-prong.js.map +1 -0
  204. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-better-x.d.ts +4 -4
  205. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-better-x.js +1 -1
  206. package/node/find-3-prong.ts/calc-better-x.js.map +1 -0
  207. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-initial-3-prong-center.d.ts +3 -3
  208. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-initial-3-prong-center.js +5 -7
  209. package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +1 -0
  210. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong-for-delta3s.d.ts +6 -6
  211. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong-for-delta3s.js +11 -12
  212. package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +1 -0
  213. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong.d.ts +5 -5
  214. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong.js +52 -39
  215. package/node/find-3-prong.ts/find-3-prong.js.map +1 -0
  216. package/node/find-3-prong.ts/find-and-add-3-prongs.d.ts +5 -0
  217. package/node/find-3-prong.ts/find-and-add-3-prongs.js +74 -0
  218. package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +1 -0
  219. package/node/{mat/find-mat/find-and-add-3-prongs.d.ts → find-3-prong.ts/find-and-add-all-3-prongs.d.ts} +3 -3
  220. package/node/find-3-prong.ts/find-and-add-all-3-prongs.js +66 -0
  221. package/node/find-3-prong.ts/find-and-add-all-3-prongs.js.map +1 -0
  222. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/get-closest-points.d.ts +3 -3
  223. package/node/find-3-prong.ts/get-closest-points.js +14 -0
  224. package/node/find-3-prong.ts/get-closest-points.js.map +1 -0
  225. package/node/{mat/find-mat → find-mat}/add-debug-info.d.ts +4 -4
  226. package/node/{mat/find-mat → find-mat}/add-debug-info.js +6 -6
  227. package/node/find-mat/add-debug-info.js.map +1 -0
  228. package/node/{mat/find-mat → find-mat}/create-initial-cp-graph.d.ts +5 -5
  229. package/node/{mat/find-mat → find-mat}/create-initial-cp-graph.js +5 -6
  230. package/node/find-mat/create-initial-cp-graph.js.map +1 -0
  231. package/node/find-mat/find-mat.d.ts +10 -0
  232. package/node/find-mat/find-mat.js +57 -0
  233. package/node/find-mat/find-mat.js.map +1 -0
  234. package/node/{find-mats.d.ts → find-mat/find-mats.d.ts} +1 -1
  235. package/node/find-mat/find-mats.js +58 -0
  236. package/node/find-mat/find-mats.js.map +1 -0
  237. package/node/find-mat/fix-ordering.d.ts +8 -0
  238. package/node/find-mat/fix-ordering.js +59 -0
  239. package/node/find-mat/fix-ordering.js.map +1 -0
  240. package/node/find-mat/get-dull-corners.d.ts +5 -0
  241. package/node/find-mat/get-dull-corners.js +22 -0
  242. package/node/find-mat/get-dull-corners.js.map +1 -0
  243. package/node/find-mat/get-for-1-prongs-on-loop.d.ts +11 -0
  244. package/node/find-mat/get-for-1-prongs-on-loop.js +28 -0
  245. package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -0
  246. package/node/find-mat/get-for-2-prongs-on-loop.d.ts +11 -0
  247. package/node/find-mat/get-for-2-prongs-on-loop.js +30 -0
  248. package/node/find-mat/get-for-2-prongs-on-loop.js.map +1 -0
  249. package/node/find-mat/get-sharp-corners.d.ts +5 -0
  250. package/node/find-mat/get-sharp-corners.js +21 -0
  251. package/node/find-mat/get-sharp-corners.js.map +1 -0
  252. package/node/find-mat/get-size-params.d.ts +7 -0
  253. package/node/find-mat/get-size-params.js +33 -0
  254. package/node/find-mat/get-size-params.js.map +1 -0
  255. package/node/geometry/circle.js.map +1 -0
  256. package/node/geometry/get-bounding-box-.js.map +1 -0
  257. package/node/{mat/geometry → geometry}/get-closest-square-distance-to-rect.d.ts +1 -1
  258. package/node/{mat/geometry → geometry}/get-closest-square-distance-to-rect.js +1 -1
  259. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -0
  260. package/node/{mat/geometry → geometry}/get-closest-squared-distance-to-rotated-rect.d.ts +1 -1
  261. package/node/{mat/geometry → geometry}/get-closest-squared-distance-to-rotated-rect.js +1 -1
  262. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -0
  263. package/node/get-curve/get-curve-between.d.ts +1 -1
  264. package/node/get-curve/get-curve-between.js +2 -2
  265. package/node/get-curve/get-curve-between.js.map +1 -1
  266. package/node/get-curve/get-edge-direction.d.ts +2 -2
  267. package/node/get-curve/get-edge-direction.js +2 -4
  268. package/node/get-curve/get-edge-direction.js.map +1 -1
  269. package/node/index.d.ts +24 -20
  270. package/node/index.js +21 -16
  271. package/node/index.js.map +1 -1
  272. package/node/loop/get-max-coordinate.d.ts +1 -1
  273. package/node/loop/get-max-coordinate.js +1 -1
  274. package/node/mat/add-to-cp-graph.d.ts +8 -7
  275. package/node/mat/add-to-cp-graph.js +6 -4
  276. package/node/mat/add-to-cp-graph.js.map +1 -1
  277. package/node/mat/bezier-piece.d.ts +2 -2
  278. package/node/mat/create-new-cp-tree.d.ts +3 -3
  279. package/node/mat/create-new-cp-tree.js +5 -7
  280. package/node/mat/create-new-cp-tree.js.map +1 -1
  281. package/node/mat/elem-type-two-prong.d.ts +1 -1
  282. package/node/mat/get-boundary-piece-beziers.d.ts +2 -2
  283. package/node/mat/get-boundary-piece-beziers.js +4 -4
  284. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  285. package/node/{get-branches.d.ts → mat/get-branches.d.ts} +1 -1
  286. package/node/{get-branches.js → mat/get-branches.js} +7 -6
  287. package/node/mat/get-branches.js.map +1 -0
  288. package/node/mat/get-largest-vertex.d.ts +2 -2
  289. package/node/mat/get-largest-vertex.js +1 -1
  290. package/node/mat/get-largest-vertex.js.map +1 -1
  291. package/node/mat/get-neighboring-cps.d.ts +6 -4
  292. package/node/mat/get-neighboring-cps.js +5 -3
  293. package/node/mat/get-neighboring-cps.js.map +1 -1
  294. package/node/mat/get-two-prong-type.d.ts +1 -1
  295. package/node/mat/get-two-prong-type.js +1 -1
  296. package/node/mat/get-two-prong-type.js.map +1 -1
  297. package/node/mat/is-another-cp-closeby.d.ts +9 -8
  298. package/node/mat/is-another-cp-closeby.js +21 -29
  299. package/node/mat/is-another-cp-closeby.js.map +1 -1
  300. package/node/{mat.d.ts → mat/mat.d.ts} +2 -2
  301. package/node/mat/mat.js.map +1 -0
  302. package/node/mat/simplify-mat-map-only.d.ts +1 -1
  303. package/node/mat/simplify-mat-map-only.js +4 -3
  304. package/node/mat/simplify-mat-map-only.js.map +1 -1
  305. package/node/{simplify-mat.d.ts → mat/simplify-mat.d.ts} +3 -5
  306. package/node/{simplify-mat.js → mat/simplify-mat.js} +11 -13
  307. package/node/mat/simplify-mat.js.map +1 -0
  308. package/node/mat/trim-mat.d.ts +1 -1
  309. package/node/mat/trim-mat.js +1 -1
  310. package/node/mat/trim-mat.js.map +1 -1
  311. package/node/point-on-shape/calc-pos-order.d.ts +13 -0
  312. package/node/point-on-shape/calc-pos-order.js +27 -0
  313. package/node/point-on-shape/calc-pos-order.js.map +1 -0
  314. package/node/point-on-shape/compare-poss.d.ts +10 -0
  315. package/node/point-on-shape/compare-poss.js +18 -0
  316. package/node/point-on-shape/compare-poss.js.map +1 -0
  317. package/node/point-on-shape/create-pos.d.ts +4 -0
  318. package/node/point-on-shape/create-pos.js +12 -0
  319. package/node/point-on-shape/create-pos.js.map +1 -0
  320. package/node/point-on-shape/get-osculating-circle.d.ts +10 -0
  321. package/node/point-on-shape/get-osculating-circle.js +25 -0
  322. package/node/point-on-shape/get-osculating-circle.js.map +1 -0
  323. package/node/point-on-shape/get-pos-corner.d.ts +7 -0
  324. package/node/point-on-shape/get-pos-corner.js +9 -0
  325. package/node/point-on-shape/get-pos-corner.js.map +1 -0
  326. package/node/point-on-shape/is-pos-corner.d.ts +6 -0
  327. package/node/point-on-shape/is-pos-corner.js +8 -0
  328. package/node/point-on-shape/is-pos-corner.js.map +1 -0
  329. package/node/point-on-shape/is-pos-dull-corner.d.ts +6 -0
  330. package/node/point-on-shape/is-pos-dull-corner.js +14 -0
  331. package/node/point-on-shape/is-pos-dull-corner.js.map +1 -0
  332. package/node/point-on-shape/is-pos-quite-sharp-corner.d.ts +6 -0
  333. package/node/point-on-shape/is-pos-quite-sharp-corner.js +14 -0
  334. package/node/point-on-shape/is-pos-quite-sharp-corner.js.map +1 -0
  335. package/node/point-on-shape/is-pos-sharp-corner.d.ts +6 -0
  336. package/node/point-on-shape/is-pos-sharp-corner.js +14 -0
  337. package/node/point-on-shape/is-pos-sharp-corner.js.map +1 -0
  338. package/node/point-on-shape/point-on-shape.d.ts +11 -0
  339. package/node/point-on-shape/point-on-shape.js +2 -0
  340. package/node/point-on-shape/point-on-shape.js.map +1 -0
  341. package/node/point-on-shape/pos-to-human-string.d.ts +8 -0
  342. package/node/point-on-shape/pos-to-human-string.js +12 -0
  343. package/node/point-on-shape/pos-to-human-string.js.map +1 -0
  344. package/node/{mat/to-scale-axis → sat}/add-debug-info.d.ts +2 -2
  345. package/node/{mat/to-scale-axis → sat}/add-debug-info.js +1 -1
  346. package/node/sat/add-debug-info.js.map +1 -0
  347. package/node/{mat/to-scale-axis → sat}/cull-non-cycles.d.ts +3 -3
  348. package/node/{mat/to-scale-axis → sat}/cull-non-cycles.js +6 -6
  349. package/node/sat/cull-non-cycles.js.map +1 -0
  350. package/node/{mat/to-scale-axis → sat}/cull.d.ts +3 -3
  351. package/node/{mat/to-scale-axis → sat}/cull.js +4 -4
  352. package/node/sat/cull.js.map +1 -0
  353. package/node/{mat → sat}/get-leaves.d.ts +2 -2
  354. package/node/sat/get-leaves.js +14 -0
  355. package/node/sat/get-leaves.js.map +1 -0
  356. package/node/{to-scale-axis.d.ts → sat/to-scale-axis.d.ts} +2 -2
  357. package/node/{to-scale-axis.js → sat/to-scale-axis.js} +11 -10
  358. package/node/sat/to-scale-axis.js.map +1 -0
  359. package/node/svg/get-loop-bounds.d.ts +7 -7
  360. package/node/svg/get-loop-bounds.js +11 -7
  361. package/node/svg/get-loop-bounds.js.map +1 -1
  362. package/node/svg/get-min-y-pos.d.ts +4 -4
  363. package/node/svg/get-min-y-pos.js +1 -1
  364. package/node/svg/get-shape-bounds.d.ts +6 -5
  365. package/node/svg/get-shape-bounds.js +6 -2
  366. package/node/svg/get-shape-bounds.js.map +1 -1
  367. package/node/sweep-line/sweep-line.d.ts +1 -1
  368. package/node/sweep-line/sweep-line.js +4 -4
  369. package/node/sweep-line/sweep-line.js.map +1 -1
  370. package/package.json +10 -10
  371. package/src/closest-boundary-point/closest-points-on-curve-precise.ts +75 -0
  372. package/src/closest-boundary-point/closest-points-on-curve.ts +72 -0
  373. package/src/closest-boundary-point/cull-bezier-pieces.ts +35 -0
  374. package/src/{mat/closest-boundary-point → closest-boundary-point}/cull-by-loose-bounding-box.ts +4 -3
  375. package/src/{mat/closest-boundary-point → closest-boundary-point}/cull-by-tight-boundary-box.ts +2 -2
  376. package/src/closest-boundary-point/dd-deflate-with-running-error.ts +88 -0
  377. package/src/closest-boundary-point/foot-and-endpoint-info.ts +16 -0
  378. package/src/{mat/closest-boundary-point → closest-boundary-point}/get-best-distance-squared.ts +3 -4
  379. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +69 -0
  380. package/src/closest-boundary-point/get-closest-boundary-point-certified.ts +70 -0
  381. package/src/closest-boundary-point/get-p-from-box.ts +14 -0
  382. package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +122 -0
  383. package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +75 -0
  384. package/src/{contact-point.ts → contact-point/contact-point.ts} +4 -6
  385. package/src/{compare-curvatures-at-interface.ts → corner/compare-curvatures-at-interface.ts} +2 -2
  386. package/src/{mat → corner}/corner.ts +1 -1
  387. package/src/{curve.ts → corner/get-corner.ts} +10 -49
  388. package/src/{get-interface-ccw.ts → corner/get-interface-ccw.ts} +28 -35
  389. package/src/cp-node/clone.ts +17 -6
  390. package/src/cp-node/cp-node.ts +422 -0
  391. package/src/cp-node/create-cp-node.ts +21 -0
  392. package/src/cp-node/enhance-cp-node.ts +27 -0
  393. package/src/{get-boundary-bezier-parts-to-next.ts → cp-node/get-boundary-bezier-parts-to-next.ts} +3 -3
  394. package/src/{get-boundary-beziers-to-next.ts → cp-node/get-boundary-beziers-to-next.ts} +2 -2
  395. package/src/cp-node/get-cp-node-ordering.ts +17 -0
  396. package/src/{get-curve-to-next.ts → cp-node/get-curve-to-next.ts} +1 -1
  397. package/src/cp-node/remove.ts +1 -1
  398. package/src/cp-node/traverse-cp.ts +35 -0
  399. package/src/{traverse-edges.ts → cp-node/traverse-edges.ts} +5 -5
  400. package/src/{traverse-vertices.ts → cp-node/traverse-vertices.ts} +5 -5
  401. package/src/curve/curve.ts +46 -0
  402. package/src/debug/cp-node-for-debugging.ts +2 -2
  403. package/src/debug/debug-elem-types.ts +8 -8
  404. package/src/debug/debug.ts +11 -11
  405. package/src/debug/functions/draw-elem/bounding-hull.ts +5 -3
  406. package/src/debug/functions/draw-elem/branch.ts +4 -4
  407. package/src/debug/functions/draw-elem/culls.ts +3 -3
  408. package/src/debug/functions/draw-elem/draw-circle-percent.ts +1 -1
  409. package/src/debug/functions/draw-elem/draw-elem.ts +10 -6
  410. package/src/debug/functions/draw-elem/dull-corner.ts +10 -6
  411. package/src/debug/functions/draw-elem/leaves.ts +2 -2
  412. package/src/debug/functions/draw-elem/loop.ts +4 -3
  413. package/src/debug/functions/draw-elem/loops.ts +1 -2
  414. package/src/debug/functions/draw-elem/loose-bounding-box.ts +8 -3
  415. package/src/debug/functions/draw-elem/mat.ts +16 -8
  416. package/src/debug/functions/draw-elem/max-vertex.ts +2 -2
  417. package/src/debug/functions/draw-elem/min-y.ts +4 -9
  418. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +10 -2
  419. package/src/debug/functions/draw-elem/one-prong.ts +12 -15
  420. package/src/debug/functions/draw-elem/sharp-corner.ts +10 -6
  421. package/src/debug/functions/draw-elem/three-prong.ts +13 -11
  422. package/src/debug/functions/draw-elem/tight-bounding-box.ts +9 -3
  423. package/src/debug/functions/draw-elem/two-prong.ts +12 -8
  424. package/src/debug/functions/draw-elem/vertex.ts +12 -11
  425. package/src/debug/functions/general.ts +10 -10
  426. package/src/debug/functions/three-prong.ts +16 -20
  427. package/src/debug/functions/two-prong.ts +89 -77
  428. package/src/debug/three-prong-for-debugging.ts +17 -16
  429. package/src/debug/two-prong-for-debugging.ts +7 -7
  430. package/src/error-analysis/gamma.ts +41 -0
  431. package/src/{mat/find-mat → find-2-prong}/add-1-prong.ts +19 -16
  432. package/src/{mat/find-mat → find-2-prong}/add-2-prong.ts +45 -91
  433. package/src/find-2-prong/add-debug-info.ts +49 -0
  434. package/src/{mat/find-mat/find-2-prong → find-2-prong}/cull-bezier-pieces.ts +9 -11
  435. package/src/find-2-prong/find-2-prong.ts +191 -0
  436. package/src/{mat/find-mat → find-2-prong}/find-and-add-2-prongs-on-all-paths.ts +12 -9
  437. package/src/find-2-prong/find-and-add-2-prongs.ts +88 -0
  438. package/src/{mat/find-mat → find-2-prong}/find-and-add-hole-closing-2-prongs.ts +7 -7
  439. package/src/find-2-prong/find-equidistant-point-on-line-dd.ts +77 -0
  440. package/src/{mat/find-mat/find-2-prong → find-2-prong}/find-equidistant-point-on-line.ts +1 -1
  441. package/src/find-2-prong/get-initial-bezier-pieces.ts +61 -0
  442. package/src/find-2-prong/pyth-trips.ts +146 -0
  443. package/src/find-2-prong/reduce-radius.ts +98 -0
  444. package/src/find-2-prong/squared-distance-between-dd.ts +25 -0
  445. package/src/find-2-prong/x-for-debugging.ts +13 -0
  446. package/src/find-3-prong.ts/add-3-prong.ts +110 -0
  447. package/src/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-better-x.ts +5 -5
  448. package/src/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-initial-3-prong-center.ts +11 -12
  449. package/src/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong-for-delta3s.ts +28 -28
  450. package/src/find-3-prong.ts/find-3-prong.ts +148 -0
  451. package/src/find-3-prong.ts/find-and-add-3-prongs.ts +111 -0
  452. package/src/find-3-prong.ts/find-and-add-all-3-prongs.ts +109 -0
  453. package/src/find-3-prong.ts/get-closest-points.ts +24 -0
  454. package/src/{mat/find-mat → find-mat}/add-debug-info.ts +10 -10
  455. package/src/{mat/find-mat → find-mat}/create-initial-cp-graph.ts +11 -12
  456. package/src/find-mat/find-mat.ts +89 -0
  457. package/src/find-mat/find-mats.ts +83 -0
  458. package/src/find-mat/fix-ordering.ts +69 -0
  459. package/src/find-mat/get-dull-corners.ts +34 -0
  460. package/src/find-mat/get-for-1-prongs-on-loop.ts +40 -0
  461. package/src/find-mat/get-for-2-prongs-on-loop.ts +44 -0
  462. package/src/find-mat/get-sharp-corners.ts +33 -0
  463. package/src/find-mat/get-size-params.ts +34 -0
  464. package/src/{mat/find-mat → find-mat}/get-total-by.ts +4 -4
  465. package/src/{mat/geometry → geometry}/get-closest-square-distance-to-rect.ts +1 -1
  466. package/src/{mat/geometry → geometry}/get-closest-squared-distance-to-rotated-rect.ts +2 -2
  467. package/src/get-curve/get-curve-between.ts +7 -7
  468. package/src/get-curve/get-edge-direction.ts +11 -11
  469. package/src/index.ts +64 -21
  470. package/src/loop/get-max-coordinate.ts +1 -1
  471. package/src/mat/add-to-cp-graph.ts +15 -12
  472. package/src/mat/bezier-piece.ts +2 -2
  473. package/src/mat/cmp-cp-on-delta.ts +6 -3
  474. package/src/mat/create-new-cp-tree.ts +6 -9
  475. package/src/mat/elem-type-two-prong.ts +1 -1
  476. package/src/mat/get-boundary-piece-beziers.ts +7 -7
  477. package/src/{get-branches.ts → mat/get-branches.ts} +8 -8
  478. package/src/mat/get-edges-as-array.ts +2 -2
  479. package/src/mat/get-largest-three-prong.ts +3 -3
  480. package/src/mat/get-largest-vertex.ts +2 -2
  481. package/src/mat/get-neighboring-cps.ts +9 -6
  482. package/src/mat/get-two-prong-type.ts +1 -1
  483. package/src/mat/is-another-cp-closeby.ts +29 -44
  484. package/src/{mat.ts → mat/mat.ts} +2 -2
  485. package/src/mat/simplify-mat-map-only.ts +5 -5
  486. package/src/{simplify-mat.ts → mat/simplify-mat.ts} +12 -14
  487. package/src/mat/trim-mat.ts +3 -3
  488. package/src/point-on-shape/calc-pos-order.ts +35 -0
  489. package/src/point-on-shape/compare-poss.ts +26 -0
  490. package/src/point-on-shape/create-pos.ts +21 -0
  491. package/src/point-on-shape/get-osculating-circle.ts +39 -0
  492. package/src/point-on-shape/get-pos-corner.ts +16 -0
  493. package/src/point-on-shape/is-pos-corner.ts +12 -0
  494. package/src/point-on-shape/is-pos-dull-corner.ts +16 -0
  495. package/src/point-on-shape/is-pos-quite-dull-corner.ts +17 -0
  496. package/src/point-on-shape/is-pos-quite-sharp-corner.ts +17 -0
  497. package/src/point-on-shape/is-pos-sharp-corner.ts +17 -0
  498. package/src/point-on-shape/point-on-shape.ts +15 -0
  499. package/src/point-on-shape/pos-to-human-string.ts +16 -0
  500. package/src/{mat/to-scale-axis → sat}/add-debug-info.ts +3 -3
  501. package/src/{mat/to-scale-axis → sat}/cull-non-cycles.ts +7 -7
  502. package/src/{mat/to-scale-axis → sat}/cull.ts +6 -6
  503. package/src/{mat → sat}/get-leaves.ts +4 -4
  504. package/src/{mat/to-scale-axis → sat}/t-tree.ts +2 -2
  505. package/src/{to-scale-axis.ts → sat/to-scale-axis.ts} +16 -16
  506. package/src/{mat/to-scale-axis → sat}/traverse-spacial-tree.ts +5 -5
  507. package/src/svg/get-loop-bounds.ts +22 -17
  508. package/src/svg/get-min-y-pos.ts +3 -3
  509. package/src/svg/get-shape-bounds.ts +12 -9
  510. package/src/sweep-line/are-boxes-intersecting.ts +1 -1
  511. package/src/sweep-line/sweep-line.ts +7 -7
  512. package/tsconfig.json +3 -7
  513. package/wallaby.mjs +32 -0
  514. package/node/circle.js.map +0 -1
  515. package/node/compare-curvatures-at-interface.js.map +0 -1
  516. package/node/contact-point.js.map +0 -1
  517. package/node/cp-node.d.ts +0 -202
  518. package/node/cp-node.js +0 -321
  519. package/node/cp-node.js.map +0 -1
  520. package/node/curve.js.map +0 -1
  521. package/node/find-mats.js +0 -123
  522. package/node/find-mats.js.map +0 -1
  523. package/node/get-boundary-bezier-parts-to-next.js.map +0 -1
  524. package/node/get-boundary-beziers-to-next.js.map +0 -1
  525. package/node/get-bounding-box-.js.map +0 -1
  526. package/node/get-branches.js.map +0 -1
  527. package/node/get-curve-to-next.js.map +0 -1
  528. package/node/get-interface-ccw.js.map +0 -1
  529. package/node/loop.d.ts +0 -16
  530. package/node/loop.js +0 -35
  531. package/node/loop.js.map +0 -1
  532. package/node/mat/closest-boundary-point/closest-points-on-curve.d.ts +0 -14
  533. package/node/mat/closest-boundary-point/closest-points-on-curve.js +0 -73
  534. package/node/mat/closest-boundary-point/closest-points-on-curve.js.map +0 -1
  535. package/node/mat/closest-boundary-point/cull-bezier-pieces.d.ts +0 -9
  536. package/node/mat/closest-boundary-point/cull-bezier-pieces.js +0 -20
  537. package/node/mat/closest-boundary-point/cull-bezier-pieces.js.map +0 -1
  538. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js.map +0 -1
  539. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js.map +0 -1
  540. package/node/mat/closest-boundary-point/get-best-distance-squared.js.map +0 -1
  541. package/node/mat/closest-boundary-point/get-close-boundary-points.d.ts +0 -17
  542. package/node/mat/closest-boundary-point/get-close-boundary-points.js +0 -81
  543. package/node/mat/closest-boundary-point/get-close-boundary-points.js.map +0 -1
  544. package/node/mat/closest-boundary-point/get-closest-boundary-point.d.ts +0 -18
  545. package/node/mat/closest-boundary-point/get-closest-boundary-point.js +0 -41
  546. package/node/mat/closest-boundary-point/get-closest-boundary-point.js.map +0 -1
  547. package/node/mat/find-mat/add-1-prong.d.ts +0 -12
  548. package/node/mat/find-mat/add-1-prong.js.map +0 -1
  549. package/node/mat/find-mat/add-2-prong.js.map +0 -1
  550. package/node/mat/find-mat/add-3-prong.js +0 -55
  551. package/node/mat/find-mat/add-3-prong.js.map +0 -1
  552. package/node/mat/find-mat/add-debug-info.js.map +0 -1
  553. package/node/mat/find-mat/create-get-interesting-points-on-loop.d.ts +0 -11
  554. package/node/mat/find-mat/create-get-interesting-points-on-loop.js +0 -52
  555. package/node/mat/find-mat/create-get-interesting-points-on-loop.js.map +0 -1
  556. package/node/mat/find-mat/create-initial-cp-graph.js.map +0 -1
  557. package/node/mat/find-mat/find-2-prong/add-debug-info.d.ts +0 -8
  558. package/node/mat/find-mat/find-2-prong/add-debug-info.js.map +0 -1
  559. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.d.ts +0 -11
  560. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js +0 -30
  561. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js.map +0 -1
  562. package/node/mat/find-mat/find-2-prong/find-2-prong.js +0 -233
  563. package/node/mat/find-mat/find-2-prong/find-2-prong.js.map +0 -1
  564. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.d.ts +0 -9
  565. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js +0 -40
  566. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js.map +0 -1
  567. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.d.ts +0 -11
  568. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js +0 -38
  569. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js.map +0 -1
  570. package/node/mat/find-mat/find-2-prong/x-for-debugging.d.ts +0 -9
  571. package/node/mat/find-mat/find-2-prong/x-for-debugging.js.map +0 -1
  572. package/node/mat/find-mat/find-3-prong/calc-better-x.js.map +0 -1
  573. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js.map +0 -1
  574. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js.map +0 -1
  575. package/node/mat/find-mat/find-3-prong/find-3-prong.js.map +0 -1
  576. package/node/mat/find-mat/find-3-prong/get-closest-points.js +0 -17
  577. package/node/mat/find-mat/find-3-prong/get-closest-points.js.map +0 -1
  578. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.d.ts +0 -15
  579. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js.map +0 -1
  580. package/node/mat/find-mat/find-and-add-2-prongs.js +0 -74
  581. package/node/mat/find-mat/find-and-add-2-prongs.js.map +0 -1
  582. package/node/mat/find-mat/find-and-add-3-prongs.js +0 -147
  583. package/node/mat/find-mat/find-and-add-3-prongs.js.map +0 -1
  584. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js.map +0 -1
  585. package/node/mat/find-mat/get-potential-2-prongs.d.ts +0 -4
  586. package/node/mat/find-mat/get-potential-2-prongs.js +0 -17
  587. package/node/mat/find-mat/get-potential-2-prongs.js.map +0 -1
  588. package/node/mat/find-mat/get-sharp-corners.d.ts +0 -4
  589. package/node/mat/find-mat/get-sharp-corners.js +0 -18
  590. package/node/mat/find-mat/get-sharp-corners.js.map +0 -1
  591. package/node/mat/geometry/get-closest-square-distance-to-rect.js.map +0 -1
  592. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js.map +0 -1
  593. package/node/mat/get-contact-circles-at-interface.d.ts +0 -8
  594. package/node/mat/get-contact-circles-at-interface.js +0 -21
  595. package/node/mat/get-contact-circles-at-interface.js.map +0 -1
  596. package/node/mat/get-leaves.js +0 -13
  597. package/node/mat/get-leaves.js.map +0 -1
  598. package/node/mat/to-scale-axis/add-debug-info.js.map +0 -1
  599. package/node/mat/to-scale-axis/cull-non-cycles.js.map +0 -1
  600. package/node/mat/to-scale-axis/cull.js.map +0 -1
  601. package/node/mat.js.map +0 -1
  602. package/node/point-on-shape.d.ts +0 -73
  603. package/node/point-on-shape.js +0 -168
  604. package/node/point-on-shape.js.map +0 -1
  605. package/node/simplify-mat.js.map +0 -1
  606. package/node/to-scale-axis.js.map +0 -1
  607. package/node/traverse-edges.js.map +0 -1
  608. package/node/traverse-vertices.js.map +0 -1
  609. package/src/cp-node.ts +0 -388
  610. package/src/find-mats.ts +0 -171
  611. package/src/loop.ts +0 -56
  612. package/src/mat/closest-boundary-point/closest-point-on-curve-old.ts_ +0 -88
  613. package/src/mat/closest-boundary-point/closest-point-on-curve.ts_ +0 -95
  614. package/src/mat/closest-boundary-point/closest-points-on-curve.ts +0 -84
  615. package/src/mat/closest-boundary-point/cull-bezier-pieces.ts +0 -38
  616. package/src/mat/closest-boundary-point/get-close-boundary-points.ts +0 -107
  617. package/src/mat/closest-boundary-point/get-closest-boundary-point.ts +0 -64
  618. package/src/mat/find-mat/add-3-prong.ts +0 -75
  619. package/src/mat/find-mat/create-get-interesting-points-on-loop.ts +0 -73
  620. package/src/mat/find-mat/find-2-prong/add-debug-info.ts +0 -46
  621. package/src/mat/find-mat/find-2-prong/find-2-prong.ts +0 -316
  622. package/src/mat/find-mat/find-2-prong/get-initial-bezier-pieces.ts +0 -52
  623. package/src/mat/find-mat/find-2-prong/x-for-debugging.ts +0 -13
  624. package/src/mat/find-mat/find-3-prong/find-3-prong.ts +0 -106
  625. package/src/mat/find-mat/find-3-prong/get-closest-points.ts +0 -28
  626. package/src/mat/find-mat/find-and-add-2-prongs.ts +0 -108
  627. package/src/mat/find-mat/find-and-add-3-prongs.ts +0 -218
  628. package/src/mat/find-mat/get-potential-2-prongs.ts +0 -24
  629. package/src/mat/find-mat/get-sharp-corners.ts +0 -25
  630. package/src/mat/find-mat/get-total-abs-curvature.ts +0 -17
  631. package/src/mat/get-contact-circles-at-interface.ts +0 -26
  632. package/src/mat/to-scale-axis/add-to-tree.ts +0 -66
  633. package/src/mat/to-scale-axis/calc-groups.ts +0 -82
  634. package/src/mat/to-scale-axis/create-spacial-tree.ts +0 -41
  635. package/src/mat/to-scale-axis/get-engulfed-vertices.ts +0 -135
  636. package/src/point-on-shape.ts +0 -231
  637. package/src/svg/get-curvature-at-interface.ts +0 -55
  638. /package/node/{compare-curvatures-at-interface.d.ts → corner/compare-curvatures-at-interface.d.ts} +0 -0
  639. /package/node/{mat → corner}/corner.js +0 -0
  640. /package/node/{get-interface-ccw.d.ts → corner/get-interface-ccw.d.ts} +0 -0
  641. /package/node/{get-boundary-bezier-parts-to-next.d.ts → cp-node/get-boundary-bezier-parts-to-next.d.ts} +0 -0
  642. /package/node/{get-curve-to-next.d.ts → cp-node/get-curve-to-next.d.ts} +0 -0
  643. /package/node/{traverse-edges.d.ts → cp-node/traverse-edges.d.ts} +0 -0
  644. /package/node/{traverse-vertices.d.ts → cp-node/traverse-vertices.d.ts} +0 -0
  645. /package/node/{mat/find-mat/find-2-prong → find-2-prong}/x-for-debugging.js +0 -0
  646. /package/node/{circle.d.ts → geometry/circle.d.ts} +0 -0
  647. /package/node/{circle.js → geometry/circle.js} +0 -0
  648. /package/node/{get-bounding-box-.d.ts → geometry/get-bounding-box-.d.ts} +0 -0
  649. /package/node/{get-bounding-box-.js → geometry/get-bounding-box-.js} +0 -0
  650. /package/node/{mat.js → mat/mat.js} +0 -0
  651. /package/src/{circle.ts → geometry/circle.ts} +0 -0
  652. /package/src/{get-bounding-box-.ts → geometry/get-bounding-box-.ts} +0 -0
@@ -0,0 +1,422 @@
1
+ /** @internal */
2
+ declare const _debug_: Debug;
3
+
4
+ import { LlRbTree } from 'flo-ll-rb-tree';
5
+ import { Debug } from '../debug/debug.js';
6
+ import { ContactPoint, compareCps } from '../contact-point/contact-point.js';
7
+ import { removeCpNode } from './remove.js';
8
+ import { getCurveToNext } from './get-curve-to-next.js';
9
+ import { createCpNode } from './create-cp-node.js';
10
+
11
+
12
+ /**
13
+ * The primary interface of the library.
14
+ *
15
+ * Since the MAT is a full representation of the shape boundary an instance of
16
+ * this class contains both the information of a boundary point and a medial
17
+ * axis point (and edge to the next point(s)). It also contains edges to other
18
+ * [[CpNode]]s which allows for traversal of the MAT and thus implictly
19
+ * represents the entire MAT.
20
+ *
21
+ * To get the maximal disk circle (of which the center is on the medial axis)
22
+ * use [[cp]].circle.
23
+ *
24
+ * To get the boundary point, use [[cp]].pointOnShape.
25
+ *
26
+ * The edge [[next]] (resp. [[prev]]) allows one to move anti-clockwise (resp.
27
+ * clockwise) on the shape boundary to the next [[CpNode]]. This also imposes a
28
+ * direction of traversal of the MAT edges and vertices.
29
+ *
30
+ * The edge [[nextOnCircle]] (resp. [[prevOnCircle]]) allows one to go
31
+ * anti-clockwise (resp. clockwise) around the maximal disks implied by
32
+ * the CpNode to the next maximal disk contact point. This is equivalent to
33
+ * following other branches on the MAT.
34
+ *
35
+ * Call [[getCurveBetween]](cpNodeFrom, cpNodeTo) or getCurveToNext(cpNode)
36
+ * (replacing the older CpNode.[[matCurveToNextVertex]]) to get a bezier curve
37
+ * from the maximal disk of this [[CpNode]] to the next [[CpNode]]'s
38
+ * maximal disk and thus directly representing a piece of the medial axis.
39
+ *
40
+ * The function, [[getChildren]], returns the children of this [[CpNode]] when
41
+ * seen as a MAT edge. Only children in a 'forward' direction are returned. These
42
+ * include all edges except the 'backward' edge given by [[prevOnCircle]]. For
43
+ * [[CpNode]]s having a maximal disk with 2 contact points (a 2-prong, the usual
44
+ * case) the children will be the single edge [[next]]. For a 3-prong this will
45
+ * be the edges [[next]] and [[nextOnCircle]], etc. [[getChildren]] allows one to
46
+ * easily traverse the MAT tree - see e.g. the implementation of [[traverseEdges]].
47
+ *
48
+ * The getter, [[vertexChildren]], is similar to [[getChildren]] but returns the
49
+ * child nodes of the tree when [[CpNode]] is seen as a MAT vertex point (as
50
+ * opposed to edge). In this way the dual graph of the tree can easily be
51
+ * traversed - see e.g. [[traverseVertices]]. Generally, however, traversing the
52
+ * edges is preferred as it returns the entire Medial Axis (by utilizing
53
+ * [[getCurveToNext]] on each returned edge).
54
+ *
55
+ * It may be worth mentioning that by traversing from the CpNode by following
56
+ * [[next]] repeatedly until one is back at the same CpNode allows one
57
+ * to 'go around' the shape boundary and at the same time traverse the MAT twice
58
+ * in opposite directions.
59
+ */
60
+ interface CpNode {
61
+ /** The shape boundary contact point, i.e. a [[CpNode]] without its edges. */
62
+ cp: ContactPoint;
63
+ /** If true, this [[CpNode]] belongs to a hole-closing maximal disk. */
64
+ isHoleClosing : boolean;
65
+ /** true if this cpNode is at a shape boundary intersection point, false otherwise */
66
+ isIntersection : boolean;
67
+ /** The previous (going clockwise around the boundary) contact point ([[CpNode]]).*/
68
+ prev : CpNode;
69
+ /** The next (going anti-clockwise around the boundary) contact point ([[CpNode]]). */
70
+ next : CpNode;
71
+ /**
72
+ * The previous [[CpNode]] (going clockwise around the inscribed circle
73
+ * defined by the maximal disk).
74
+ */
75
+ prevOnCircle : CpNode;
76
+ /**
77
+ * The next [[CpNode]] (going anti-clockwise around
78
+ * the inscribed circle defined by the maximal disk).
79
+ */
80
+ nextOnCircle : CpNode;
81
+
82
+ /**
83
+ * Primarily for internal use.
84
+ * @param cp The shape boundary contact point, i.e. a [[CpNode]] without its
85
+ * edges.
86
+ * @param isHoleClosing If true, this [[CpNode]] belongs to a hole-closing
87
+ * maximal disk.
88
+ * @param isIntersection true if this cpNode is at a shape boundary
89
+ * intersection point, false otherwise
90
+ * @param prev The previous (going clockwise around the boundary) contact
91
+ * point ([[CpNode]]).
92
+ * @param next The next (going anti-clockwise around the boundary) contact
93
+ * point ([[CpNode]]).
94
+ * @param prevOnCircle The previous [[CpNode]] (going clockwise around
95
+ * the inscribed circle defined by the maximal disk).
96
+ * @param nextOnCircle The next [[CpNode]] (going anti-clockwise around
97
+ * the inscribed circle defined by the maximal disk).
98
+ */
99
+ }
100
+
101
+
102
+ /**
103
+ * Returns the bezier curve from the maximal disk of this [[CpNode]] to the
104
+ * next [[CpNode]]'s maximal disk and thus directly represents a piece of the
105
+ * medial axis.
106
+ * @deprecated Use [[getCurveToNext]] instead
107
+ * @param cpNode
108
+ */
109
+ function matCurveToNextVertex(cpNode: CpNode) {
110
+ return getCurveToNext(cpNode);
111
+ }
112
+
113
+
114
+ /**
115
+ * Primarily for internal use.
116
+ *
117
+ * Compares the order of two [[CpNode]]s. The order is cyclic and depends
118
+ * on a [[CpNode]]'s relative position along the shape boundary.
119
+ */
120
+ const cpNodeComparator = (a: CpNode, b: CpNode) => compareCps(a.cp, b.cp);
121
+
122
+
123
+ /**
124
+ * Returns the children of this [[CpNode]] when seen as a MAT edge. Only
125
+ * children in a 'forward' direction are returned. These include all edges
126
+ * except the 'backward' edge given by [[prevOnCircle]], even terminating
127
+ * edges.
128
+ */
129
+ function getChildren(cpNode: CpNode) {
130
+ const children: CpNode[] = [];
131
+
132
+ const cp = cpNode.next;
133
+ let cp_ = cp;
134
+ do {
135
+ children.push(cp_);
136
+ cp_ = cp_.nextOnCircle;
137
+ } while (cp_.nextOnCircle !== cp);
138
+
139
+ return children;
140
+ }
141
+
142
+
143
+ /**
144
+ * Similar to [[getChildren]] but returns the child nodes of the tree when
145
+ * [[CpNode]] is seen as a MAT vertex point (as opposed to edge). In this
146
+ * way the dual graph of the tree can easily be traversed - see e.g.
147
+ * [[traverseVertices]]. Generally, however, traversing the edges is
148
+ * preferred as it returns the entire Medial Axis (by utilizing
149
+ * [[getCurveToNext]] on each returned edge).
150
+ */
151
+ function vertexChildren(cpNode: CpNode) {
152
+ if (isTerminating(cpNode)) { return []; }
153
+
154
+ const children: CpNode[] = [];
155
+
156
+ let cp_ = cpNode;
157
+ while (cp_ !== cpNode.prevOnCircle) {
158
+ if (!isTerminating(cp_)) { children.push(cp_.next); }
159
+ cp_ = cp_.nextOnCircle;
160
+ }
161
+
162
+ return children;
163
+ }
164
+
165
+
166
+ /**
167
+ * Returns all [[CpNode]]s on the MAT that this [[CpNode]] is part of
168
+ * starting from the current one and going anti-clockwise around the shape.
169
+ */
170
+ function getAllOnLoop(cpNode: CpNode) {
171
+ const cpStart = cpNode;
172
+ const cpNodes: CpNode[] = [cpStart];
173
+ let cpNode_ = cpNode.next;
174
+
175
+ while (cpNode_ !== cpStart) {
176
+ cpNodes.push(cpNode_);
177
+ cpNode_ = cpNode_.next;
178
+ }
179
+
180
+ return cpNodes;
181
+ }
182
+
183
+
184
+ /**
185
+ * Primarily for internal use.
186
+ *
187
+ * Insert a [[CpNode]] into the MAT tree graph after the specified point
188
+ * and returns the freshly inserted [[CpNode]].
189
+ * @param isHoleClosing True if this is a hole closing contact point.
190
+ * @param isIntersection True if this is a contact point at a shape boundary
191
+ * intersection point.
192
+ * @param cpTree The tree graph holding the [[CpNodes]] of the MAT.
193
+ * @param cp [[ContactPoint]] defining the [[CpNode]].
194
+ * @param prev_ Inserts the new [[CpNode]] right after this item if the
195
+ * loop is not empty, else insert the new [[CpNode]] as the only item in the
196
+ * loop.
197
+ */
198
+ function insertCpNode(
199
+ isHoleClosing: boolean,
200
+ isIntersection: boolean,
201
+ cpTree: LlRbTree<CpNode>,
202
+ cp: ContactPoint,
203
+ prev_: CpNode) {
204
+
205
+ // const cpNode = new CpNode(cp, isHoleClosing, isIntersection);
206
+ const cpNode = createCpNode(cp, isHoleClosing, isIntersection);
207
+ if (typeof _debug_ !== 'undefined') {
208
+ _debug_.generated.elems.cpNode.push({
209
+ generated: _debug_.generated,
210
+ cpNode
211
+ });
212
+ }
213
+
214
+ let prev;
215
+ let next;
216
+
217
+ if (!prev_) {
218
+ prev = cpNode;
219
+ next = cpNode;
220
+ } else {
221
+ prev = prev_;
222
+ next = prev.next;
223
+ }
224
+
225
+ next.prev = cpNode;
226
+ prev.next = cpNode;
227
+
228
+ cpNode.prev = prev;
229
+ cpNode.next = next;
230
+
231
+ cpTree.insert(cpNode);
232
+
233
+ return cpNode;
234
+ }
235
+
236
+
237
+ /**
238
+ * Return this (except if exclThis is truthy) and the the other CpNodes
239
+ * around the maximal disk vertex circle in an anti-clockwise order.
240
+ * @param exclThis If true the returned array does not include this
241
+ * [[CpNode]].
242
+ */
243
+ function getCpNodesOnCircle(
244
+ cpNode: CpNode,
245
+ exclThis = false) {
246
+
247
+ // const startCp = this as CpNode;
248
+ const startCpNode = cpNode;
249
+ let cpNode_ = startCpNode;
250
+
251
+ const cpNodes: CpNode[] = [];
252
+ do {
253
+ if (exclThis) {
254
+ exclThis = false;
255
+ } else {
256
+ cpNodes.push(cpNode_);
257
+ }
258
+ cpNode_ = cpNode_.nextOnCircle;
259
+ } while (cpNode_ !== startCpNode)
260
+
261
+ return cpNodes;
262
+ }
263
+
264
+
265
+ /**
266
+ * Returns true if the 2 given [[CpNode]]s are on the same maximal disk
267
+ * circle.
268
+ * @param cpNode1 A [[CpNode]].
269
+ * @param cpNode2 Another [[CpNode]]
270
+ */
271
+ function isOnSameCircle(cpNode1: CpNode, cpNode2: CpNode) {
272
+ const cpNodes = getCpNodesOnCircle(cpNode1, true);
273
+
274
+ return cpNodes.indexOf(cpNode2) >= 0;
275
+ }
276
+
277
+
278
+ /**
279
+ * Returns true if this [[CpNode]] is terminating, i.e. implies a leaf MAT
280
+ * vertex.
281
+ *
282
+ * This is always the case for sharp corners and maximal disks with
283
+ * a single contact point. Note, however, that even in these cases there are
284
+ * two contact points stored (sitting 'on top' of each other) for the
285
+ * maximal disk. It can be seen as a limiting case of a two-prong where the
286
+ * distance between two of the contact points tend to zero. One point
287
+ * (represented by a [[CpNode]] of course) will be terminating with the
288
+ * other point being its [[next]], whereas the other point will *not* be
289
+ * terminating and 'points' back into the shape.
290
+ */
291
+ function isTerminating(cpNode: CpNode) {
292
+ // return this === this.next.prevOnCircle;
293
+ return cpNode === cpNode.next.prevOnCircle;
294
+ }
295
+
296
+
297
+ /**
298
+ * Like isTerminating() but only returns true if all cpNodes on the circle
299
+ * (except this.prevOnCircle) is terminating.
300
+ */
301
+ function isFullyTerminating(cpNode:CpNode) {
302
+ const otherOnCircle = getCpNodesOnCircle(cpNode.prevOnCircle, true);
303
+ const isFullyTerminating = otherOnCircle.every(cpn => isTerminating(cpn));
304
+
305
+ return isFullyTerminating;
306
+ }
307
+
308
+
309
+ /**
310
+ * Returns the first [[CpNode]] (from this one by successively applying
311
+ * .nextOnCircle) that exits the circle.
312
+ */
313
+ function getFirstExit(cpNode: CpNode) {
314
+ // const startNode = this as CpNode;
315
+ const startNode = cpNode;
316
+ let cpNode_ = startNode;
317
+
318
+ while (cpNode_.next === cpNode_.prevOnCircle) {
319
+ cpNode_ = cpNode_.next;
320
+
321
+ if (cpNode_ === startNode) {
322
+ // The very special case the MAT is a single point.
323
+ return undefined;
324
+ }
325
+ }
326
+
327
+ return cpNode_;
328
+ }
329
+
330
+
331
+ /**
332
+ * Returns true if this [[CpNode]] represents a sharp corner, i.e. the
333
+ * limiting case of a two-prong having zero radius.
334
+ *
335
+ * Note that two [[CpNode]]s are stored for each sharp corner, one being
336
+ * terminating and one not. See [[isTerminating]] for more details.
337
+ */
338
+ function isSharp(cpNode: CpNode) {
339
+ return cpNode.cp.circle.radius === 0;
340
+ }
341
+
342
+
343
+ /**
344
+ * Returns the number of contact points on the maximal disk circle implied
345
+ * by this [[CpNode]].
346
+ *
347
+ * Note, however, that even one-prongs and sharp corners will return 2 (see
348
+ * [[isTerminating]] for more details); if this is not desired use
349
+ * [[getRealProngCount]] instead which will return 1 in these cases.
350
+ */
351
+ function getProngCount(cpNode: CpNode) {
352
+ // const startCp = this as CpNode;
353
+ const startCpNode = cpNode;
354
+ let cpNode_ = startCpNode;
355
+
356
+ let i = 0;
357
+
358
+ do {
359
+ i++;
360
+ cpNode_ = cpNode_.nextOnCircle;
361
+ } while (cpNode_ !== startCpNode)
362
+
363
+ return i;
364
+ }
365
+
366
+
367
+ /**
368
+ * Returns the number of contact points (up to planar coordinates) on the
369
+ * maximal disk circle implied by this [[CpNode]].
370
+ *
371
+ * See also [[getProngCount]].
372
+ */
373
+ function getRealProngCount(cpNode: CpNode) {
374
+ if (isOneProng(cpNode)) { return 1; }
375
+
376
+ return getProngCount(cpNode);
377
+ }
378
+
379
+
380
+ /**
381
+ * Returns true if this [[CpNode]]'s maximal disk has only one contact point
382
+ * on the shape boundary (up to planar coordinates). These includes sharp
383
+ * corners.
384
+ *
385
+ * Note, however, that two [[CpNode]]s are stored for each such point to
386
+ * preserve symmetry - see [[isTerminating]] for more details.
387
+ */
388
+ function isOneProng(cpNode: CpNode) {
389
+ const cp1 = cpNode;
390
+
391
+ if (cp1.cp.circle.radius === 0) {
392
+ return true;
393
+ }
394
+
395
+ const cp2 = cp1.nextOnCircle;
396
+
397
+ const p1 = cp1.cp.pointOnShape.p;
398
+ const p2 = cp2.cp.pointOnShape.p;
399
+
400
+ return (p1[0] === p2[0] && p1[1] === p2[1]);
401
+ }
402
+
403
+
404
+ export {
405
+ CpNode,
406
+ matCurveToNextVertex,
407
+ getChildren,
408
+ vertexChildren,
409
+ getAllOnLoop,
410
+ insertCpNode,
411
+ getCpNodesOnCircle,
412
+ isOnSameCircle,
413
+ isTerminating,
414
+ isFullyTerminating,
415
+ getFirstExit,
416
+ isSharp,
417
+ isOneProng,
418
+ getProngCount,
419
+ getRealProngCount,
420
+ cpNodeComparator,
421
+ removeCpNode
422
+ }
@@ -0,0 +1,21 @@
1
+ import { ContactPoint } from '../contact-point/contact-point.js';
2
+ import { CpNode } from './cp-node.js';
3
+
4
+
5
+ function createCpNode(
6
+ cp: ContactPoint,
7
+ isHoleClosing : boolean,
8
+ isIntersection : boolean,
9
+ prev : CpNode = undefined!,
10
+ next : CpNode = undefined!,
11
+ prevOnCircle : CpNode = undefined!,
12
+ nextOnCircle : CpNode = undefined!): CpNode {
13
+
14
+ return {
15
+ cp, isHoleClosing, isIntersection,
16
+ prev, next, prevOnCircle, nextOnCircle
17
+ }
18
+ }
19
+
20
+
21
+ export { createCpNode }
@@ -0,0 +1,27 @@
1
+ import {
2
+ CpNode, getProngCount, getRealProngCount, isFullyTerminating,
3
+ isSharp, isTerminating
4
+ } from "./cp-node.js";
5
+ import { getCpNodeOrdering } from './get-cp-node-ordering.js';
6
+
7
+
8
+ function enhanceCpNode(cpNode: CpNode) {
9
+ const cp = cpNode.cp;
10
+ const pos = cp.pointOnShape;
11
+ const curve = pos.curve;
12
+
13
+ return {
14
+ ...cpNode,
15
+ isTerminating: isTerminating(cpNode),
16
+ isFullyTerminating: isFullyTerminating(cpNode),
17
+ isSharp: isSharp(cpNode),
18
+ prongCount: getProngCount(cpNode),
19
+ getRealProngCount: getRealProngCount(cpNode),
20
+ ordering: getCpNodeOrdering(cpNode),
21
+ curve,
22
+ loop: curve.loop
23
+ }
24
+ }
25
+
26
+
27
+ export { enhanceCpNode }
@@ -1,6 +1,6 @@
1
1
  import { BezierPiece } from 'flo-bezier3';
2
2
  import { CpNode } from './cp-node.js';
3
- import { Curve } from './curve.js';
3
+ import { Curve } from '../curve/curve.js';
4
4
 
5
5
 
6
6
  /**
@@ -21,7 +21,7 @@ function getBoundaryBezierPartsToNext(cpNode: CpNode): BezierPiece[] {
21
21
  if (curveThis.loop !== curveNext.loop) {
22
22
  // It is a hole-closer going over to the other loop - a kind of terminal
23
23
  // CpNode.
24
- return undefined;
24
+ return undefined!;
25
25
  }
26
26
 
27
27
  const bezierParts: BezierPiece[] = [];
@@ -48,7 +48,7 @@ function getBoundaryBezierPartsToNext(cpNode: CpNode): BezierPiece[] {
48
48
 
49
49
 
50
50
  /**
51
- * @hidden
51
+ * @internal
52
52
  * Adds pieces of skipped beziers.
53
53
  */
54
54
  function addSkippedBeziers(
@@ -1,7 +1,7 @@
1
1
  // qqq import { fromTo, fromTTo1, from0ToT } from 'flo-bezier3';
2
2
  import { fromTo } from 'flo-bezier3';
3
3
  import { CpNode } from './cp-node.js';
4
- import { Curve } from './curve.js';
4
+ import { Curve } from '../curve/curve.js';
5
5
 
6
6
 
7
7
  /**
@@ -50,7 +50,7 @@ function getBoundaryBeziersToNext(cpNode: CpNode) {
50
50
 
51
51
  /**
52
52
  * Adds pieces of skipped beziers.
53
- * @hidden
53
+ * @internal
54
54
  */
55
55
  function addSkippedBeziers(
56
56
  beziers : number[][][],
@@ -0,0 +1,17 @@
1
+ import { CpNode } from './cp-node.js';
2
+
3
+
4
+ function getCpNodeOrdering(cpNode: CpNode) {
5
+ const cp = cpNode.cp;
6
+ const pos = cp.pointOnShape;
7
+
8
+ return {
9
+ 'idx': pos.curve.idx,
10
+ 't': pos.t,
11
+ 'order': cp.order,
12
+ 'order2': cp.order2
13
+ };
14
+ }
15
+
16
+
17
+ export { getCpNodeOrdering }
@@ -1,5 +1,5 @@
1
1
  import { CpNode } from './cp-node.js';
2
- import { getCurveBetween } from './get-curve/get-curve-between.js';
2
+ import { getCurveBetween } from '../get-curve/get-curve-between.js';
3
3
 
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { CpNode } from "../cp-node.js";
2
+ import { CpNode } from "./cp-node.js";
3
3
 
4
4
 
5
5
  /**
@@ -0,0 +1,35 @@
1
+ import { CpNode } from "./cp-node";
2
+
3
+
4
+ /**
5
+ * @internal
6
+ *
7
+ * Traverses the shape from the given `CpNode` going around the shortest path
8
+ * so that only a piece of the shape is traversed and returns the visited
9
+ * `CpNode`s (starting from the given `CpNode`).
10
+ *
11
+ * @param cpStart The `CpNode` from where to start the traversal.
12
+ */
13
+ function traverseCp(cpStart: CpNode) {
14
+ let cpNode = cpStart;
15
+
16
+ if (cpNode === cpNode.next.prevOnCircle) {
17
+ return [cpNode]; // one-sharp corner
18
+ }
19
+
20
+ const visitedCps: CpNode[] = [];
21
+ do {
22
+ visitedCps.push(cpNode);
23
+
24
+ const next = cpNode.next.prevOnCircle;
25
+ cpNode = cpNode === next
26
+ ? cpNode = cpNode.next.next // Terminal vertex
27
+ : cpNode = next // Take last exit
28
+
29
+ } while (cpNode !== cpStart);
30
+
31
+ return visitedCps;
32
+ }
33
+
34
+
35
+ export { traverseCp }
@@ -1,4 +1,4 @@
1
- import { CpNode } from './cp-node.js';
1
+ import { CpNode, getChildren, getCpNodesOnCircle, isTerminating } from './cp-node.js';
2
2
 
3
3
 
4
4
  /**
@@ -14,14 +14,14 @@ function traverseEdges(
14
14
 
15
15
  // Since the tree is unrooted we must iterate in all directions from the
16
16
  // given vertex.
17
- const cps = cpNode.getCpNodesOnCircle();
17
+ const cps = getCpNodesOnCircle(cpNode);
18
18
 
19
19
  while (cps.length) {
20
- const cp = cps.pop();
20
+ const cp = cps.pop()!;
21
21
  f(cp);
22
22
 
23
- if (cp.isTerminating()) { continue; }
24
- cps.push(...cp.getChildren());
23
+ if (isTerminating(cp)) { continue; }
24
+ cps.push(...getChildren(cp));
25
25
  }
26
26
  }
27
27
 
@@ -1,4 +1,4 @@
1
- import { CpNode } from './cp-node.js';
1
+ import { CpNode, getCpNodesOnCircle, isTerminating, vertexChildren } from './cp-node.js';
2
2
 
3
3
 
4
4
  /**
@@ -18,17 +18,17 @@ function traverseVertices(
18
18
 
19
19
  // Since the tree is unrooted we must iterate in all directions from the
20
20
  // given cpNode.
21
- cpNode.getCpNodesOnCircle()
22
- .filter(cpNode => !cpNode.isTerminating())
21
+ getCpNodesOnCircle(cpNode)
22
+ .filter(cpNode => !isTerminating(cpNode))
23
23
  .map(cpNode => cpNode.next)
24
24
  .forEach(f_);
25
25
 
26
26
  function f_(cpNode: CpNode) {
27
27
  const cps = [cpNode];
28
28
  while (cps.length) {
29
- const cp = cps.pop();
29
+ const cp = cps.pop()!;
30
30
  f(cp);
31
- cps.push(...cp.vertexChildren);
31
+ cps.push(...vertexChildren(cp));
32
32
  }
33
33
  }
34
34
  }
@@ -0,0 +1,46 @@
1
+ import { memoize } from 'flo-memoize';
2
+ import { Loop } from 'flo-boolean';
3
+ import { getCorner } from '../corner/get-corner.js';
4
+
5
+
6
+ /**
7
+ * Represents a bezier curve on the shape boundary / loop.
8
+ */
9
+ interface Curve {
10
+
11
+ /**
12
+ * Primarily for internal use.
13
+ * @param loop The closed loop of bezier curves representing the shape
14
+ * boundary this curve belongs to.
15
+ * @param ps The bezier control points.
16
+ * @param prev The previous curve (when going in a negative direction around
17
+ * the shape boundary, i.e. clockwise for the outer shape and anti-clockwise
18
+ * for the holes (if any)).
19
+ * @param next The next curve (when going in a positive direction around
20
+ * the shape boundary, i.e. anti-clockwise for the outer shape and clockwise
21
+ * for the holes (if any)).
22
+ * @param idx The curve's ordered index in the loop. This imposes a cycling
23
+ * ordering of the curves in the loop.
24
+ */
25
+ loop : Loop;
26
+ ps : number[][];
27
+ prev : Curve;
28
+ next : Curve;
29
+ idx : number;
30
+ }
31
+
32
+
33
+ /**
34
+ * @internal
35
+ * Returns information about the corner created at the end of this curve
36
+ * (at t === 1) and the start of the next curve (at t === 0).
37
+ */
38
+ const getCornerAtEnd = memoize(function(curve: Curve) {
39
+ const psE = curve.ps;
40
+ const psS = curve.next.ps;
41
+
42
+ return getCorner(psE, psS);
43
+ });
44
+
45
+
46
+ export { Curve, getCorner, getCornerAtEnd }
@@ -1,9 +1,9 @@
1
- import { CpNode } from '../cp-node.js';
1
+ import { CpNode } from '../cp-node/cp-node.js';
2
2
  import { Generated } from './debug.js';
3
3
 
4
4
 
5
5
  /**
6
- * @hidden
6
+ * @internal
7
7
  * Used for debugging only.
8
8
  */
9
9
  interface ICpNodeForDebugging {