flo-mat 3.0.14 → 4.0.1

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 (642) hide show
  1. package/__tests__/cp-node/check-clone-eql-calc.spec.ts +58 -0
  2. package/__tests__/cp-node/compare-cp-nodes-by-value.ts +37 -0
  3. package/__tests__/cp-node/compare-loops-by-value.ts +40 -0
  4. package/__tests__/cp-node/compare-poss-by-value.ts +25 -0
  5. package/__tests__/cp-node/fs/clone.spec.ts +19 -3
  6. package/__tests__/cp-node/fs/find-first.spec.ts +13 -3
  7. package/__tests__/cp-node/fs/get-all-between.spec.ts +20 -3
  8. package/__tests__/cp-node/fs/get-all-on-circle.spec.ts +10 -10
  9. package/__tests__/cp-node/fs/get-all-on-loop.spec.ts +16 -3
  10. package/__tests__/cp-node/fs/get-all-vertices.spec.ts +14 -3
  11. package/__tests__/cp-node/fs/get-children.spec.ts +18 -3
  12. package/__tests__/cp-node/fs/get-non-terminating-on-circle.spec.ts +14 -3
  13. package/__tests__/cp-node/fs/get-prong-count.spec.ts +16 -3
  14. package/__tests__/cp-node/fs/get-real-prong-count.spec.ts +11 -3
  15. package/__tests__/cp-node/fs/get-terminating-on-circle.spec.ts +20 -3
  16. package/__tests__/cp-node/fs/is-fully-terminating.spec.ts +16 -3
  17. package/__tests__/cp-node/fs/is-on-same-circle.spec.ts +20 -3
  18. package/__tests__/cp-node/fs/is-one-prong.spec.ts +16 -3
  19. package/__tests__/cp-node/fs/is-sharp.spec.ts +10 -3
  20. package/__tests__/cp-node/fs/is-single-3-prong.spec.ts +13 -3
  21. package/__tests__/cp-node/fs/is-special.spec.ts +12 -3
  22. package/__tests__/cp-node/fs/is-terminating.spec.ts +15 -3
  23. package/__tests__/cp-node/fs/is-trivial.spec.ts +13 -3
  24. package/__tests__/cp-node/fs/is-two-prong.spec.ts +11 -3
  25. package/__tests__/cp-node/fs/is-vertex-special.spec.ts +13 -3
  26. package/__tests__/cp-node/fs/is-vertex.spec.ts +14 -3
  27. package/__tests__/cp-node/fs/iterate-all-on-loop.spec.ts +13 -3
  28. package/__tests__/cp-node/fs/traverse-all-forward.spec.ts +10 -3
  29. package/__tests__/cp-node/fs/traverse-cp.spec.ts +9 -3
  30. package/__tests__/cp-node/fs/traverse-edges.spec.ts +13 -3
  31. package/__tests__/cp-node/fs/traverse-vertices.spec.ts +12 -3
  32. package/__tests__/cp-node/random-walk.ts +33 -0
  33. package/__tests__/cp-node/stringification/from-stringifyable.spec.ts +3 -0
  34. package/__tests__/cp-node/stringification/loop-from-stringifyable.spec.ts +4 -0
  35. package/__tests__/cp-node/stringification/loop-to-stringifyable.spec.ts +19 -0
  36. package/__tests__/cp-node/stringification/to-stringifyable.spec.ts +34 -0
  37. package/__tests__/get-mats1.ts +122 -0
  38. package/__tests__/helpers/close-to.ts +71 -0
  39. package/__tests__/helpers/jest-extend-nearly.ts +39 -0
  40. package/__tests__/helpers/jest.setup.ts +6 -0
  41. package/__tests__/helpers/obj-or-array.ts +8 -0
  42. package/__tests__/jest-extensions.d.ts +26 -0
  43. package/__tests__/jsog/check-jsog-eql-calc.spec.ts +47 -67
  44. package/__tests__/jsog/decode-jsog.ts +88 -85
  45. package/__tests__/jsog/mat-dummy-1.ts +19 -0
  46. package/__tests__/jsog/mat-dummys.ts +6197 -6195
  47. package/__tests__/jsog/to-jsog-breath-first.ts +110 -107
  48. package/__tests__/jsog/to-jsog-depth-first.ts +58 -55
  49. package/__tests__/lib-load.spec.ts +1 -1
  50. package/browser/index.js +21168 -17746
  51. package/browser/index.min.js +1 -1
  52. package/jest.config.cjs +2 -0
  53. package/node/add-n-prong.ts/join-spokes.d.ts +2 -2
  54. package/node/add-n-prong.ts/join-spokes.js +5 -4
  55. package/node/add-n-prong.ts/join-spokes.js.map +1 -1
  56. package/node/closest-boundary-point/cull-bezier-pieces-1.d.ts +9 -0
  57. package/node/closest-boundary-point/{cull-bezier-pieces.js → cull-bezier-pieces-1.js} +6 -7
  58. package/node/closest-boundary-point/cull-bezier-pieces-1.js.map +1 -0
  59. package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +7 -5
  60. package/node/closest-boundary-point/cull-by-loose-bounding-box.js +12 -10
  61. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
  62. package/node/closest-boundary-point/cull-by-tight-boundary-box.js +2 -2
  63. package/node/closest-boundary-point/foot-and-endpoint-info.d.ts +9 -9
  64. package/node/closest-boundary-point/get-best-distance-squared.d.ts +4 -3
  65. package/node/closest-boundary-point/get-best-distance-squared.js +11 -11
  66. package/node/closest-boundary-point/get-best-distance-squared.js.map +1 -1
  67. package/node/closest-boundary-point/get-close-boundary-points-certified.d.ts +6 -10
  68. package/node/closest-boundary-point/get-close-boundary-points-certified.js +22 -18
  69. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
  70. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.d.ts +6 -10
  71. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +12 -79
  72. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -1
  73. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +1 -1
  74. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +5 -5
  75. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -1
  76. package/node/corner/compare-curvatures-at-interface.d.ts +1 -1
  77. package/node/corner/compare-curvatures-at-interface.js +1 -1
  78. package/node/corner/corner.d.ts +7 -6
  79. package/node/corner/get-corner.d.ts +1 -6
  80. package/node/corner/get-corner.js +2 -9
  81. package/node/corner/get-corner.js.map +1 -1
  82. package/node/corner/get-interface-ccw.d.ts +2 -2
  83. package/node/corner/get-interface-ccw.js +4 -5
  84. package/node/corner/get-interface-ccw.js.map +1 -1
  85. package/node/cp-node/cp-node-fs.d.ts +0 -15
  86. package/node/cp-node/cp-node-fs.js +0 -4
  87. package/node/cp-node/cp-node-fs.js.map +1 -1
  88. package/node/cp-node/cp-node.d.ts +11 -11
  89. package/node/cp-node/fs/clone.js +3 -3
  90. package/node/cp-node/fs/clone.js.map +1 -1
  91. package/node/cp-node/fs/cp-node-comparator.js +2 -2
  92. package/node/cp-node/fs/cp-node-comparator.js.map +1 -1
  93. package/node/cp-node/fs/enhance-cp-node.d.ts +3 -3
  94. package/node/cp-node/fs/enhance-cp-node.js +5 -5
  95. package/node/cp-node/fs/enhance-cp-node.js.map +1 -1
  96. package/node/cp-node/fs/find-first.d.ts +9 -2
  97. package/node/cp-node/fs/find-first.js +12 -9
  98. package/node/cp-node/fs/find-first.js.map +1 -1
  99. package/node/cp-node/fs/get-all-on-loop.js +5 -6
  100. package/node/cp-node/fs/get-all-on-loop.js.map +1 -1
  101. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js +2 -2
  102. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js.map +1 -1
  103. package/node/cp-node/fs/get-cp-node-ordering.js +4 -4
  104. package/node/cp-node/fs/get-cp-node-ordering.js.map +1 -1
  105. package/node/cp-node/fs/get-edge-direction.d.ts +1 -1
  106. package/node/cp-node/fs/get-edge-direction.js +3 -3
  107. package/node/cp-node/fs/get-edge-direction.js.map +1 -1
  108. package/node/cp-node/fs/get-hole-closers.d.ts +1 -1
  109. package/node/cp-node/fs/get-implied-boundary-bezier-between.js +2 -2
  110. package/node/cp-node/fs/get-implied-boundary-bezier-between.js.map +1 -1
  111. package/node/cp-node/fs/get-mat-curve-between.d.ts +1 -1
  112. package/node/cp-node/fs/get-mat-curve-between.js +6 -5
  113. package/node/cp-node/fs/get-mat-curve-between.js.map +1 -1
  114. package/node/cp-node/fs/get-salience.d.ts +1 -1
  115. package/node/cp-node/fs/get-salience.js +3 -3
  116. package/node/cp-node/fs/get-salience.js.map +1 -1
  117. package/node/cp-node/fs/insert-cp-node.d.ts +3 -3
  118. package/node/cp-node/fs/insert-cp-node.js +3 -4
  119. package/node/cp-node/fs/insert-cp-node.js.map +1 -1
  120. package/node/cp-node/fs/is-on-same-circle.d.ts +1 -0
  121. package/node/cp-node/fs/is-on-same-circle.js +1 -0
  122. package/node/cp-node/fs/is-on-same-circle.js.map +1 -1
  123. package/node/cp-node/fs/is-one-prong.d.ts +1 -1
  124. package/node/cp-node/fs/is-one-prong.js +2 -9
  125. package/node/cp-node/fs/is-one-prong.js.map +1 -1
  126. package/node/cp-node/fs/is-order-correct.d.ts +2 -2
  127. package/node/cp-node/fs/is-order-correct.js +5 -8
  128. package/node/cp-node/fs/is-order-correct.js.map +1 -1
  129. package/node/cp-node/fs/is-sharp.js +1 -1
  130. package/node/cp-node/fs/is-sharp.js.map +1 -1
  131. package/node/cp-node/fs/remove-cp-node.js +1 -2
  132. package/node/cp-node/fs/remove-cp-node.js.map +1 -1
  133. package/node/debug/debug-elem-types.d.ts +1 -2
  134. package/node/debug/debug-elem-types.js +1 -2
  135. package/node/debug/debug-elem-types.js.map +1 -1
  136. package/node/debug/functions/draw-elem/draw-cp-node.js +2 -2
  137. package/node/debug/functions/draw-elem/draw-cp-node.js.map +1 -1
  138. package/node/debug/functions/draw-elem/draw-dull-corner.d.ts +1 -1
  139. package/node/debug/functions/draw-elem/draw-dull-corner.js +1 -1
  140. package/node/debug/functions/draw-elem/draw-dull-corner.js.map +1 -1
  141. package/node/debug/functions/draw-elem/draw-elem.js +1 -5
  142. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  143. package/node/debug/functions/draw-elem/draw-leaves.js +2 -2
  144. package/node/debug/functions/draw-elem/draw-leaves.js.map +1 -1
  145. package/node/debug/functions/draw-elem/draw-max-vertex.d.ts +1 -1
  146. package/node/debug/functions/draw-elem/draw-max-vertex.js +1 -1
  147. package/node/debug/functions/draw-elem/draw-max-vertex.js.map +1 -1
  148. package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js +12 -3
  149. package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js.map +1 -1
  150. package/node/debug/functions/draw-elem/draw-one-prong.d.ts +2 -2
  151. package/node/debug/functions/draw-elem/draw-one-prong.js +8 -7
  152. package/node/debug/functions/draw-elem/draw-one-prong.js.map +1 -1
  153. package/node/debug/functions/draw-elem/draw-sharp-corner.d.ts +1 -1
  154. package/node/debug/functions/draw-elem/draw-sharp-corner.js +2 -1
  155. package/node/debug/functions/draw-elem/draw-sharp-corner.js.map +1 -1
  156. package/node/debug/functions/draw-elem/draw-three-prong.js +2 -2
  157. package/node/debug/functions/draw-elem/draw-three-prong.js.map +1 -1
  158. package/node/debug/functions/draw-elem/draw-two-prong.js +4 -3
  159. package/node/debug/functions/draw-elem/draw-two-prong.js.map +1 -1
  160. package/node/debug/functions/draw-elem/draw-vertex.js +1 -1
  161. package/node/debug/functions/draw-elem/draw-vertex.js.map +1 -1
  162. package/node/debug/functions/general.js +1 -1
  163. package/node/debug/functions/general.js.map +1 -1
  164. package/node/find-2-prong/add-1-prong.d.ts +3 -3
  165. package/node/find-2-prong/add-1-prong.js +4 -4
  166. package/node/find-2-prong/add-1-prong.js.map +1 -1
  167. package/node/find-2-prong/add-2-prong.d.ts +10 -11
  168. package/node/find-2-prong/add-2-prong.js +42 -37
  169. package/node/find-2-prong/add-2-prong.js.map +1 -1
  170. package/node/find-2-prong/calc-seperation-tolerance.js +4 -7
  171. package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -1
  172. package/node/find-2-prong/cull-bezier-pieces.d.ts +9 -7
  173. package/node/find-2-prong/cull-bezier-pieces.js +30 -15
  174. package/node/find-2-prong/cull-bezier-pieces.js.map +1 -1
  175. package/node/find-2-prong/find-2-prong.d.ts +12 -13
  176. package/node/find-2-prong/find-2-prong.js +73 -116
  177. package/node/find-2-prong/find-2-prong.js.map +1 -1
  178. package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.d.ts +4 -4
  179. package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.js.map +1 -1
  180. package/node/find-2-prong/find-and-add-2-prongs.d.ts +5 -4
  181. package/node/find-2-prong/find-and-add-2-prongs.js +28 -24
  182. package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -1
  183. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.d.ts +6 -8
  184. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js +11 -12
  185. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js.map +1 -1
  186. package/node/find-2-prong/get-initial-bezier-pieces.d.ts +5 -6
  187. package/node/find-2-prong/get-initial-bezier-pieces.js +8 -11
  188. package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
  189. package/node/find-2-prong/get-initial-x.d.ts +12 -0
  190. package/node/find-2-prong/get-initial-x.js +35 -0
  191. package/node/find-2-prong/get-initial-x.js.map +1 -0
  192. package/node/find-2-prong/get-medial/antipodal-point.d.ts +8 -0
  193. package/node/find-2-prong/get-medial/antipodal-point.js +2 -0
  194. package/node/find-2-prong/get-medial/antipodal-point.js.map +1 -0
  195. package/node/find-2-prong/get-medial/get-antipodal-points.d.ts +18 -0
  196. package/node/find-2-prong/get-medial/get-antipodal-points.js +41 -0
  197. package/node/find-2-prong/get-medial/get-antipodal-points.js.map +1 -0
  198. package/node/find-2-prong/get-medial/get-closest-points.d.ts +15 -0
  199. package/node/find-2-prong/get-medial/get-closest-points.js +163 -0
  200. package/node/find-2-prong/get-medial/get-closest-points.js.map +1 -0
  201. package/node/find-2-prong/reduce-radius.d.ts +4 -4
  202. package/node/find-2-prong/reduce-radius.js +30 -50
  203. package/node/find-2-prong/reduce-radius.js.map +1 -1
  204. package/node/find-3-prong/calc-better-x.d.ts +22 -0
  205. package/node/{find-3-prong.ts → find-3-prong}/calc-better-x.js +8 -5
  206. package/node/find-3-prong/calc-better-x.js.map +1 -0
  207. package/node/find-3-prong/calc-initial-3-prong-center.d.ts +15 -0
  208. package/node/find-3-prong/calc-initial-3-prong-center.js +26 -0
  209. package/node/find-3-prong/calc-initial-3-prong-center.js.map +1 -0
  210. package/node/find-3-prong/find-3-prong-for-delta3s.d.ts +19 -0
  211. package/node/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.js +32 -34
  212. package/node/find-3-prong/find-3-prong-for-delta3s.js.map +1 -0
  213. package/node/find-3-prong/find-3-prong.d.ts +13 -0
  214. package/node/{find-3-prong.ts → find-3-prong}/find-3-prong.js +14 -9
  215. package/node/find-3-prong/find-3-prong.js.map +1 -0
  216. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.js +2 -2
  217. package/node/find-3-prong/find-and-add-3-prong.js.map +1 -0
  218. package/node/find-3-prong/find-and-add-3-prongs-on-loop.js.map +1 -0
  219. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.js +1 -1
  220. package/node/find-3-prong/find-and-add-3-prongs.js.map +1 -0
  221. package/node/find-3-prong/get-closest-points.d.ts +10 -0
  222. package/node/{find-3-prong.ts → find-3-prong}/get-closest-points.js +5 -5
  223. package/node/find-3-prong/get-closest-points.js.map +1 -0
  224. package/node/find-3-prong/three-prong-info.d.ts +9 -0
  225. package/node/find-3-prong/three-prong-info.js +2 -0
  226. package/node/find-3-prong/three-prong-info.js.map +1 -0
  227. package/node/find-mat/clip-options.d.ts +2 -2
  228. package/node/find-mat/clip-options.js +7 -14
  229. package/node/find-mat/clip-options.js.map +1 -1
  230. package/node/find-mat/create-initial-cp-tree.d.ts +8 -7
  231. package/node/find-mat/create-initial-cp-tree.js +16 -19
  232. package/node/find-mat/create-initial-cp-tree.js.map +1 -1
  233. package/node/find-mat/find-mat.d.ts +1 -1
  234. package/node/find-mat/find-mat.js +6 -12
  235. package/node/find-mat/find-mat.js.map +1 -1
  236. package/node/find-mat/find-mats.js +8 -8
  237. package/node/find-mat/find-mats.js.map +1 -1
  238. package/node/find-mat/get-dull-corners-on-loop.d.ts +3 -3
  239. package/node/find-mat/get-dull-corners-on-loop.js +5 -4
  240. package/node/find-mat/get-dull-corners-on-loop.js.map +1 -1
  241. package/node/find-mat/get-for-1-prongs-on-loop.d.ts +7 -7
  242. package/node/find-mat/get-for-1-prongs-on-loop.js +9 -21
  243. package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -1
  244. package/node/find-mat/get-for-2-prongs-on-loop.d.ts +5 -4
  245. package/node/find-mat/get-for-2-prongs-on-loop.js +4 -6
  246. package/node/find-mat/get-for-2-prongs-on-loop.js.map +1 -1
  247. package/node/find-mat/get-meta.d.ts +5 -5
  248. package/node/find-mat/get-meta.js +12 -12
  249. package/node/find-mat/get-meta.js.map +1 -1
  250. package/node/find-mat/get-sharp-corners.d.ts +3 -3
  251. package/node/find-mat/get-sharp-corners.js +2 -3
  252. package/node/find-mat/get-sharp-corners.js.map +1 -1
  253. package/node/find-mat/mat-options.d.ts +15 -15
  254. package/node/find-mat/mat-options.js +7 -4
  255. package/node/find-mat/mat-options.js.map +1 -1
  256. package/node/floyd-warshall/floyd-warshall.js +1 -1
  257. package/node/floyd-warshall/floyd-warshall.js.map +1 -1
  258. package/node/floyd-warshall/get-graph.js +2 -2
  259. package/node/floyd-warshall/get-graph.js.map +1 -1
  260. package/node/floyd-warshall/get-hole-closer-pairs.js +6 -6
  261. package/node/floyd-warshall/get-hole-closer-pairs.js.map +1 -1
  262. package/node/geometry/circle.d.ts +5 -3
  263. package/node/geometry/circle.js +1 -7
  264. package/node/geometry/circle.js.map +1 -1
  265. package/node/geometry/get-closest-square-distance-to-rect.js +1 -4
  266. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
  267. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js +2 -1
  268. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  269. package/node/index.d.ts +2 -9
  270. package/node/index.js +1 -5
  271. package/node/index.js.map +1 -1
  272. package/node/loop/get-max-coordinate.d.ts +2 -1
  273. package/node/loop/get-max-coordinate.js +6 -8
  274. package/node/loop/get-max-coordinate.js.map +1 -1
  275. package/node/mat/add-to-cp-tree.d.ts +3 -3
  276. package/node/mat/add-to-cp-tree.js +5 -5
  277. package/node/mat/add-to-cp-tree.js.map +1 -1
  278. package/node/mat/create-new-cp-trees.d.ts +10 -0
  279. package/node/mat/create-new-cp-trees.js +24 -0
  280. package/node/mat/create-new-cp-trees.js.map +1 -0
  281. package/node/mat/curve-piece.d.ts +4 -4
  282. package/node/mat/get-boundary-piece-beziers.d.ts +5 -5
  283. package/node/mat/get-boundary-piece-beziers.js +125 -20
  284. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  285. package/node/mat/get-branches.d.ts +1 -1
  286. package/node/mat/get-closeby-cp-if-exist.d.ts +5 -5
  287. package/node/mat/get-closeby-cp-if-exist.js +6 -5
  288. package/node/mat/get-closeby-cp-if-exist.js.map +1 -1
  289. package/node/mat/get-cp-node-to-left-or-same.d.ts +3 -3
  290. package/node/mat/get-cp-node-to-left-or-same.js +2 -2
  291. package/node/mat/get-cp-node-to-left-or-same.js.map +1 -1
  292. package/node/mat/get-largest-vertex.d.ts +1 -1
  293. package/node/mat/get-largest-vertex.js +1 -1
  294. package/node/mat/get-largest-vertex.js.map +1 -1
  295. package/node/mat/mat-meta.d.ts +5 -6
  296. package/node/mat/mat.d.ts +5 -5
  297. package/node/mat/simplify-mat.d.ts +10 -8
  298. package/node/mat/simplify-mat.js +17 -14
  299. package/node/mat/simplify-mat.js.map +1 -1
  300. package/node/mat/trim-mat.d.ts +3 -2
  301. package/node/mat/trim-mat.js +5 -3
  302. package/node/mat/trim-mat.js.map +1 -1
  303. package/node/point-on-shape/calc-pos-order.d.ts +8 -5
  304. package/node/point-on-shape/calc-pos-order.js +7 -7
  305. package/node/point-on-shape/calc-pos-order.js.map +1 -1
  306. package/node/point-on-shape/compare-poss.d.ts +4 -0
  307. package/node/point-on-shape/compare-poss.js +12 -0
  308. package/node/point-on-shape/compare-poss.js.map +1 -1
  309. package/node/point-on-shape/get-osculating-circle.d.ts +5 -6
  310. package/node/point-on-shape/get-osculating-circle.js +17 -20
  311. package/node/point-on-shape/get-osculating-circle.js.map +1 -1
  312. package/node/point-on-shape/get-pos-corner.d.ts +18 -4
  313. package/node/point-on-shape/get-pos-corner.js +6 -6
  314. package/node/point-on-shape/get-pos-corner.js.map +1 -1
  315. package/node/point-on-shape/is-pos-corner.d.ts +3 -2
  316. package/node/point-on-shape/is-pos-corner.js.map +1 -1
  317. package/node/point-on-shape/is-pos-sharp-corner.d.ts +1 -12
  318. package/node/point-on-shape/is-pos-sharp-corner.js +4 -5
  319. package/node/point-on-shape/is-pos-sharp-corner.js.map +1 -1
  320. package/node/point-on-shape/point-on-shape.d.ts +43 -10
  321. package/node/point-on-shape/pos-to-human-string.d.ts +1 -1
  322. package/node/point-on-shape/pos-to-human-string.js.map +1 -1
  323. package/node/point-on-shape/to-p.d.ts +9 -0
  324. package/node/point-on-shape/to-p.js +13 -0
  325. package/node/point-on-shape/to-p.js.map +1 -0
  326. package/node/sat/add-debug-info.d.ts +2 -1
  327. package/node/sat/add-debug-info.js +2 -1
  328. package/node/sat/add-debug-info.js.map +1 -1
  329. package/node/sat/cull-non-cycles.d.ts +2 -1
  330. package/node/sat/cull-non-cycles.js +5 -3
  331. package/node/sat/cull-non-cycles.js.map +1 -1
  332. package/node/sat/cull.js +3 -4
  333. package/node/sat/cull.js.map +1 -1
  334. package/node/sat/get-leaves.d.ts +1 -1
  335. package/node/sat/get-leaves.js +1 -2
  336. package/node/sat/get-leaves.js.map +1 -1
  337. package/node/sat/get-sat-culls.d.ts +2 -2
  338. package/node/sat/get-sat-culls.js +3 -3
  339. package/node/sat/get-sat-culls.js.map +1 -1
  340. package/node/sat/to-scale-axis.d.ts +1 -1
  341. package/node/sat/to-scale-axis.js +2 -2
  342. package/node/sat/to-scale-axis.js.map +1 -1
  343. package/node/svg/get-loop-bounds.d.ts +8 -8
  344. package/node/svg/get-loop-bounds.js +34 -71
  345. package/node/svg/get-loop-bounds.js.map +1 -1
  346. package/node/svg/get-min-y-pos.d.ts +2 -3
  347. package/node/svg/get-min-y-pos.js +2 -2
  348. package/node/svg/get-min-y-pos.js.map +1 -1
  349. package/node/svg/get-shape-bounds.d.ts +6 -6
  350. package/node/svg/get-shape-bounds.js +6 -6
  351. package/node/svg/get-shape-bounds.js.map +1 -1
  352. package/node/utils/mutable.d.ts +4 -0
  353. package/node/utils/mutable.js +2 -0
  354. package/node/utils/mutable.js.map +1 -0
  355. package/node/utils/sum.js.map +1 -1
  356. package/node/utils/time-function-call.d.ts +14 -0
  357. package/node/utils/time-function-call.js +32 -0
  358. package/node/utils/time-function-call.js.map +1 -0
  359. package/node/vertex/remove-vertex.d.ts +1 -0
  360. package/node/vertex/remove-vertex.js +1 -1
  361. package/node/vertex/remove-vertex.js.map +1 -1
  362. package/package.json +11 -13
  363. package/src/add-n-prong.ts/join-spokes.ts +8 -6
  364. package/src/closest-boundary-point/{cull-bezier-pieces.ts → cull-bezier-pieces-1.ts} +7 -7
  365. package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +15 -14
  366. package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +2 -2
  367. package/src/closest-boundary-point/foot-and-endpoint-info.ts +8 -10
  368. package/src/closest-boundary-point/get-best-distance-squared.ts +18 -15
  369. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +29 -33
  370. package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +15 -90
  371. package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +5 -5
  372. package/src/corner/compare-curvatures-at-interface.ts +1 -1
  373. package/src/corner/corner.ts +7 -6
  374. package/src/corner/get-corner.ts +4 -11
  375. package/src/corner/get-interface-ccw.ts +5 -5
  376. package/src/cp-node/cp-node-fs.ts +0 -5
  377. package/src/cp-node/cp-node.ts +19 -12
  378. package/src/cp-node/fs/add-distance-from.ts +36 -37
  379. package/src/cp-node/fs/clone.ts +5 -4
  380. package/src/cp-node/fs/cp-node-comparator.ts +2 -2
  381. package/src/cp-node/fs/enhance-cp-node.ts +5 -5
  382. package/src/cp-node/fs/find-first.ts +14 -11
  383. package/src/cp-node/fs/get-all-on-loop.ts +5 -6
  384. package/src/cp-node/fs/get-boundary-bezier-parts-to-next.ts +3 -3
  385. package/src/cp-node/fs/get-cp-node-ordering.ts +4 -4
  386. package/src/cp-node/fs/get-edge-direction.ts +6 -8
  387. package/src/cp-node/fs/get-hole-closers.ts +1 -1
  388. package/src/cp-node/fs/get-implied-boundary-bezier-between.ts +2 -2
  389. package/src/cp-node/fs/get-mat-curve-between.ts +8 -6
  390. package/src/cp-node/fs/get-salience.ts +4 -4
  391. package/src/cp-node/fs/insert-cp-node.ts +10 -10
  392. package/src/cp-node/fs/is-on-same-circle.ts +1 -0
  393. package/src/cp-node/fs/is-one-prong.ts +3 -14
  394. package/src/cp-node/fs/is-order-correct.ts +6 -8
  395. package/src/cp-node/fs/is-sharp.ts +1 -1
  396. package/src/cp-node/fs/remove-cp-node.ts +4 -6
  397. package/src/cp-node/stringification/cp-node-stringifyable.ts +59 -0
  398. package/src/cp-node/stringification/from-stringifyable.ts +57 -0
  399. package/src/cp-node/stringification/loop-from-stringifyable.ts +15 -0
  400. package/src/cp-node/stringification/loop-stringifyable.ts +8 -0
  401. package/src/cp-node/stringification/loop-to-stringifyable.ts +14 -0
  402. package/src/cp-node/stringification/to-stringifyable.ts +67 -0
  403. package/src/debug/debug-elem-types.ts +2 -3
  404. package/src/{mat → debug}/elem-type-two-prong.ts +1 -1
  405. package/src/debug/functions/check-ordering.ts +13 -16
  406. package/src/debug/functions/cmp-cp-on-delta.ts +3 -3
  407. package/src/debug/functions/draw-elem/draw-cp-node.ts +2 -2
  408. package/src/debug/functions/draw-elem/draw-dull-corner.ts +2 -2
  409. package/src/debug/functions/draw-elem/draw-elem.ts +1 -5
  410. package/src/debug/functions/draw-elem/draw-leaves.ts +2 -2
  411. package/src/debug/functions/draw-elem/draw-max-vertex.ts +3 -3
  412. package/src/debug/functions/draw-elem/draw-one-prong-at-dull-corner.ts +17 -3
  413. package/src/debug/functions/draw-elem/draw-one-prong.ts +10 -8
  414. package/src/debug/functions/draw-elem/draw-sharp-corner.ts +4 -3
  415. package/src/debug/functions/draw-elem/draw-three-prong.ts +2 -2
  416. package/src/debug/functions/draw-elem/draw-two-prong.ts +4 -3
  417. package/src/debug/functions/draw-elem/draw-vertex.ts +1 -1
  418. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +2 -2
  419. package/src/debug/functions/general.ts +1 -1
  420. package/src/debug/functions/three-prong.ts +220 -220
  421. package/src/find-2-prong/add-1-prong.ts +8 -8
  422. package/src/find-2-prong/add-2-prong.ts +64 -58
  423. package/src/find-2-prong/calc-seperation-tolerance.ts +4 -8
  424. package/src/find-2-prong/cull-bezier-pieces.ts +41 -21
  425. package/src/find-2-prong/find-2-prong.ts +102 -151
  426. package/src/find-2-prong/find-and-add-2-prong.ts +23 -23
  427. package/src/find-2-prong/find-and-add-2-prongs-on-all-loops.ts +4 -6
  428. package/src/find-2-prong/find-and-add-2-prongs.ts +44 -29
  429. package/src/find-2-prong/find-and-add-hole-closing-2-prongs.ts +15 -15
  430. package/src/find-2-prong/get-initial-bezier-pieces.ts +21 -24
  431. package/src/find-2-prong/get-initial-x.ts +52 -0
  432. package/src/find-2-prong/get-medial/antipodal-point.ts +12 -0
  433. package/src/find-2-prong/get-medial/get-antipodal-points.ts +63 -0
  434. package/src/find-2-prong/get-medial/get-closest-points.ts +213 -0
  435. package/src/find-2-prong/reduce-radius.ts +38 -61
  436. package/src/find-2-prong/x-for-debugging.ts +9 -9
  437. package/src/{find-3-prong.ts → find-3-prong}/calc-better-x.ts +18 -11
  438. package/src/{find-3-prong.ts → find-3-prong}/calc-initial-3-prong-center.ts +12 -14
  439. package/src/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.ts +46 -51
  440. package/src/find-3-prong/find-3-prong.ts +52 -0
  441. package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.ts +2 -2
  442. package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.ts +1 -1
  443. package/src/{find-3-prong.ts → find-3-prong}/get-closest-points.ts +8 -5
  444. package/src/find-3-prong/three-prong-info.ts +13 -0
  445. package/src/find-mat/clip-options.ts +11 -16
  446. package/src/find-mat/create-initial-cp-tree.ts +28 -33
  447. package/src/find-mat/find-mat.ts +10 -17
  448. package/src/find-mat/find-mats.ts +11 -9
  449. package/src/find-mat/fix-ordering.ts +58 -58
  450. package/src/find-mat/get-dull-corners-on-loop.ts +12 -10
  451. package/src/find-mat/get-for-1-prongs-on-loop.ts +11 -33
  452. package/src/find-mat/get-for-2-prongs-on-loop.ts +9 -12
  453. package/src/find-mat/get-meta.ts +22 -19
  454. package/src/find-mat/get-sharp-corners.ts +7 -8
  455. package/src/find-mat/mat-options.ts +22 -19
  456. package/src/floyd-warshall/floyd-warshall.ts +1 -1
  457. package/src/floyd-warshall/get-graph.ts +2 -2
  458. package/src/floyd-warshall/get-hole-closer-pairs.ts +6 -6
  459. package/src/geometry/circle.ts +6 -12
  460. package/src/geometry/get-closest-square-distance-to-rect.ts +3 -8
  461. package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +3 -2
  462. package/src/index.ts +3 -11
  463. package/src/loop/get-max-coordinate.ts +8 -9
  464. package/src/mat/add-to-cp-tree.ts +10 -11
  465. package/src/mat/clone-mat.ts +8 -4
  466. package/src/mat/clone-meta.ts +22 -10
  467. package/src/mat/create-new-cp-trees.ts +35 -0
  468. package/src/mat/curve-piece.ts +4 -4
  469. package/src/mat/get-boundary-piece-beziers.ts +156 -40
  470. package/src/mat/get-branches.ts +1 -1
  471. package/src/mat/get-closeby-cp-if-exist.ts +11 -12
  472. package/src/mat/get-cp-node-to-left-or-same.ts +5 -5
  473. package/src/mat/get-largest-3-prong.ts +2 -2
  474. package/src/mat/get-largest-vertex.ts +2 -2
  475. package/src/mat/mat-meta.ts +7 -6
  476. package/src/mat/mat.ts +5 -5
  477. package/src/mat/simplify-mat.ts +20 -17
  478. package/src/mat/trim-mat.ts +6 -4
  479. package/src/point-on-shape/calc-pos-order.ts +10 -11
  480. package/src/point-on-shape/compare-poss.ts +11 -1
  481. package/src/point-on-shape/get-osculating-circle.ts +25 -28
  482. package/src/point-on-shape/get-pos-corner.ts +14 -12
  483. package/src/point-on-shape/is-pos-corner.ts +1 -4
  484. package/src/point-on-shape/is-pos-dull-corner.ts +9 -9
  485. package/src/point-on-shape/is-pos-quite-dull-corner.ts +7 -6
  486. package/src/point-on-shape/is-pos-quite-sharp-corner.ts +7 -6
  487. package/src/point-on-shape/is-pos-sharp-corner.ts +6 -5
  488. package/src/point-on-shape/point-on-shape.ts +48 -10
  489. package/src/point-on-shape/pos-to-human-string.ts +4 -2
  490. package/src/point-on-shape/to-p.ts +19 -0
  491. package/src/sat/add-debug-info.ts +3 -3
  492. package/src/sat/cull-non-cycles.ts +8 -6
  493. package/src/sat/cull.ts +7 -8
  494. package/src/sat/get-leaves.ts +2 -4
  495. package/src/sat/get-sat-culls.ts +6 -5
  496. package/src/sat/to-scale-axis.ts +4 -5
  497. package/src/svg/get-loop-bounds.ts +63 -89
  498. package/src/svg/get-min-y-pos.ts +3 -4
  499. package/src/svg/get-shape-bounds.ts +12 -12
  500. package/src/sweep-line/are-boxes-intersecting.ts +3 -2
  501. package/src/utils/mutable.ts +7 -0
  502. package/src/utils/rad-to-deg.ts +1 -1
  503. package/src/utils/smart-log.ts +20 -0
  504. package/src/utils/sum.ts +3 -1
  505. package/src/utils/time-function-call.ts +53 -0
  506. package/src/vertex/remove-vertex.ts +1 -3
  507. package/.eslintrc.cjs +0 -69
  508. package/__tests__/cp-node/fs/add-distance-from.spec.ts +0 -7
  509. package/__tests__/cp-node/fs/cp-nodes-to-boundary-beziers.spec.ts +0 -7
  510. package/__tests__/cp-node/fs/create-cp-node.spec.ts +0 -7
  511. package/__tests__/cp-node/fs/enhance-cp-node.spec.ts +0 -7
  512. package/__tests__/cp-node/fs/get-avg-speed.spec.ts +0 -7
  513. package/__tests__/cp-node/fs/get-smoothed-speed.spec.ts +0 -7
  514. package/__tests__/cp-node/fs/get-smoothed.spec.ts +0 -7
  515. package/__tests__/cp-node/fs/get-speed.spec.ts +0 -7
  516. package/__tests__/cp-node/fs/is-order-correct.spec.ts +0 -7
  517. package/__tests__/jsog/get-mats1.ts +0 -41
  518. package/node/bezier/fit-quads-to-cubic.d.ts +0 -19
  519. package/node/bezier/fit-quads-to-cubic.js +0 -83
  520. package/node/bezier/fit-quads-to-cubic.js.map +0 -1
  521. package/node/bezier/total-curvature.d.ts +0 -14
  522. package/node/bezier/total-curvature.js +0 -5
  523. package/node/bezier/total-curvature.js.map +0 -1
  524. package/node/bezier/total-length.d.ts +0 -14
  525. package/node/bezier/total-length.js +0 -5
  526. package/node/bezier/total-length.js.map +0 -1
  527. package/node/closest-boundary-point/cull-bezier-pieces.d.ts +0 -10
  528. package/node/closest-boundary-point/cull-bezier-pieces.js.map +0 -1
  529. package/node/closest-boundary-point/dd-deflate-with-running-error.d.ts +0 -25
  530. package/node/closest-boundary-point/dd-deflate-with-running-error.js +0 -68
  531. package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +0 -1
  532. package/node/contact-point/contact-point.d.ts +0 -26
  533. package/node/contact-point/contact-point.js +0 -22
  534. package/node/contact-point/contact-point.js.map +0 -1
  535. package/node/cp-node/fs/get-smoothed-speed.d.ts +0 -14
  536. package/node/cp-node/fs/get-smoothed-speed.js +0 -75
  537. package/node/cp-node/fs/get-smoothed-speed.js.map +0 -1
  538. package/node/cp-node/fs/get-speed.d.ts +0 -15
  539. package/node/cp-node/fs/get-speed.js +0 -39
  540. package/node/cp-node/fs/get-speed.js.map +0 -1
  541. package/node/curve/curve.d.ts +0 -33
  542. package/node/curve/curve.js +0 -2
  543. package/node/curve/curve.js.map +0 -1
  544. package/node/debug/cp-node-for-debugging.d.ts +0 -11
  545. package/node/debug/cp-node-for-debugging.js +0 -2
  546. package/node/debug/cp-node-for-debugging.js.map +0 -1
  547. package/node/debug/functions/draw-elem/draw-speed.d.ts +0 -4
  548. package/node/debug/functions/draw-elem/draw-speed.js +0 -21
  549. package/node/debug/functions/draw-elem/draw-speed.js.map +0 -1
  550. package/node/error-analysis/gamma.d.ts +0 -26
  551. package/node/error-analysis/gamma.js +0 -35
  552. package/node/error-analysis/gamma.js.map +0 -1
  553. package/node/find-2-prong/find-and-add-2-prong.d.ts +0 -11
  554. package/node/find-2-prong/find-and-add-2-prong.js +0 -19
  555. package/node/find-2-prong/find-and-add-2-prong.js.map +0 -1
  556. package/node/find-2-prong/find-equidistant-point-on-line-dd.d.ts +0 -10
  557. package/node/find-2-prong/find-equidistant-point-on-line-dd.js +0 -56
  558. package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +0 -1
  559. package/node/find-3-prong.ts/calc-better-x.d.ts +0 -19
  560. package/node/find-3-prong.ts/calc-better-x.js.map +0 -1
  561. package/node/find-3-prong.ts/calc-initial-3-prong-center.d.ts +0 -13
  562. package/node/find-3-prong.ts/calc-initial-3-prong-center.js +0 -27
  563. package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +0 -1
  564. package/node/find-3-prong.ts/find-3-prong-for-delta3s.d.ts +0 -22
  565. package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +0 -1
  566. package/node/find-3-prong.ts/find-3-prong.d.ts +0 -16
  567. package/node/find-3-prong.ts/find-3-prong.js.map +0 -1
  568. package/node/find-3-prong.ts/find-and-add-3-prong.js.map +0 -1
  569. package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.js.map +0 -1
  570. package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +0 -1
  571. package/node/find-3-prong.ts/get-closest-points.d.ts +0 -9
  572. package/node/find-3-prong.ts/get-closest-points.js.map +0 -1
  573. package/node/mat/connect-hole-closers.d.ts +0 -3
  574. package/node/mat/connect-hole-closers.js +0 -5
  575. package/node/mat/connect-hole-closers.js.map +0 -1
  576. package/node/mat/create-new-cp-tree.d.ts +0 -9
  577. package/node/mat/create-new-cp-tree.js +0 -23
  578. package/node/mat/create-new-cp-tree.js.map +0 -1
  579. package/node/memoize-primitive.d.ts +0 -11
  580. package/node/memoize-primitive.js +0 -25
  581. package/node/memoize-primitive.js.map +0 -1
  582. package/node/point-on-shape/create-pos.d.ts +0 -4
  583. package/node/point-on-shape/create-pos.js +0 -11
  584. package/node/point-on-shape/create-pos.js.map +0 -1
  585. package/node/point-on-shape/is-pos-quite-sharp-corner.d.ts +0 -17
  586. package/node/point-on-shape/is-pos-quite-sharp-corner.js +0 -14
  587. package/node/point-on-shape/is-pos-quite-sharp-corner.js.map +0 -1
  588. package/src/bezier/fit-quads-to-cubic.ts +0 -103
  589. package/src/bezier/total-curvature.ts +0 -8
  590. package/src/bezier/total-length.ts +0 -8
  591. package/src/closest-boundary-point/closest-points-on-curve-precise.ts +0 -75
  592. package/src/closest-boundary-point/closest-points-on-curve.ts +0 -72
  593. package/src/closest-boundary-point/dd-deflate-with-running-error.ts +0 -88
  594. package/src/contact-point/contact-point.ts +0 -42
  595. package/src/cp-node/fs/get-avg-speed.ts +0 -31
  596. package/src/cp-node/fs/get-smoothed-speed.ts +0 -97
  597. package/src/cp-node/fs/get-smoothed.ts +0 -62
  598. package/src/cp-node/fs/get-speed.ts +0 -56
  599. package/src/curve/curve.ts +0 -37
  600. package/src/dbscan/dbscan.ts +0 -91
  601. package/src/debug/cp-node-for-debugging.ts +0 -15
  602. package/src/debug/functions/draw-elem/draw-speed.ts +0 -35
  603. package/src/debug/three-prong-for-debugging.ts +0 -58
  604. package/src/debug/two-prong-for-debugging.ts +0 -30
  605. package/src/dijkstra/dijkstra.ts +0 -418
  606. package/src/find-2-prong/find-and-add-2-prongs-on-all-paths.ts +0 -38
  607. package/src/find-2-prong/find-equidistant-point-on-line-dd.ts +0 -77
  608. package/src/find-2-prong/find-equidistant-point-on-line.ts +0 -40
  609. package/src/find-2-prong/pyth-trips.ts +0 -146
  610. package/src/find-3-prong.ts/add-3-prong.ts +0 -113
  611. package/src/find-3-prong.ts/array-set.ts +0 -47
  612. package/src/find-3-prong.ts/find-3-prong.ts +0 -48
  613. package/src/find-3-prong.ts/find-and-add-all-3-prongs.ts +0 -109
  614. package/src/find-mat/add-2-prongs-by-error.ts +0 -122
  615. package/src/find-mat/add-debug-info.ts +0 -93
  616. package/src/find-mat/cp-node-for-insertion.ts +0 -13
  617. package/src/find-mat/get-dull-corners.ts +0 -34
  618. package/src/find-mat/get-half-angles.ts +0 -95
  619. package/src/find-mat/get-size-params.ts +0 -34
  620. package/src/find-mat/get-total-by.ts +0 -27
  621. package/src/get-curve/get-curve-between.ts +0 -80
  622. package/src/get-curve/get-edge-direction.ts +0 -70
  623. package/src/mat/add-to-cp-graph.ts +0 -60
  624. package/src/mat/cmp-cp-on-delta.ts +0 -56
  625. package/src/mat/connect-hole-closers.ts +0 -9
  626. package/src/mat/create-new-cp-tree.ts +0 -32
  627. package/src/mat/get-edges-as-array.ts +0 -18
  628. package/src/mat/get-largest-three-prong.ts +0 -14
  629. package/src/mat/get-neighboring-cps.ts +0 -49
  630. package/src/mat/is-another-cp-closeby.ts +0 -69
  631. package/src/mat/simplify-mat-map-only.ts +0 -110
  632. package/src/memoize-primitive.ts +0 -31
  633. package/src/point-on-shape/create-pos.ts +0 -20
  634. package/src/sat/cull-by-salience.ts +0 -115
  635. package/src/svg/get-extreme.ts +0 -23
  636. package/src/utils/bezier-piece-to-bezier.ts +0 -13
  637. package/src/utils/sleep.ts +0 -7
  638. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.d.ts +0 -0
  639. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.d.ts +0 -0
  640. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.js +0 -0
  641. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.d.ts +0 -0
  642. /package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.ts +0 -0
@@ -1,58 +1,46 @@
1
- import { CurvePiece } from '../mat/curve-piece.js';
1
+ import type { CurvePiece } from '../mat/curve-piece.js';
2
+ import type { FootAndEndpointInfo } from './foot-and-endpoint-info.js';
3
+ import type { PrePointOnShape } from '../point-on-shape/point-on-shape.js';
2
4
  import { getPotentialClosestPointsOnCurveCertified } from './get-potential-closest-points-on-curve-certified.js';
3
- import { cullCurvePieces1 } from './cull-bezier-pieces.js';
4
- import { Curve } from '../curve/curve.js';
5
- import { FootAndEndpointInfo } from './foot-and-endpoint-info.js';
6
- import { PointOnShape } from '../point-on-shape/point-on-shape.js';
7
- import { createPos } from '../point-on-shape/create-pos.js';
5
+ import { cullCurvePieces1 } from './cull-bezier-pieces-1.js';
6
+ import { toP } from '../point-on-shape/to-p.js';
8
7
 
9
8
 
10
9
  /**
11
- * @internal
12
10
  * Returns the closest boundary point to the given point, limited to the given
13
11
  * bezier pieces, including the beziers actually checked after culling.
14
12
  *
15
- * @param pow
13
+ * @param maxCoordPowerOf2
16
14
  * @param curvePieces
17
15
  * @param x
18
- * @param touchedCurve
19
- * @param t
20
- * @param for1Prong defaults to `false`;
21
- * @param angle defaults to `0`
16
+ *
17
+ * @internal
22
18
  */
23
19
  function getCloseBoundaryPointsCertified(
24
- pow: number,
20
+ maxCoordPowerOf2: number,
25
21
  curvePieces: CurvePiece[],
26
- x: number[],
27
- touchedCurve: Curve | undefined = undefined,
28
- t: number | undefined = undefined,
29
- for1Prong = false,
30
- angle = 0): PointOnShape[] {
22
+ x: number[]): PrePointOnShape[] {
31
23
 
32
24
  curvePieces = cullCurvePieces1(curvePieces, x);
33
25
 
34
- const pInfoss: FootAndEndpointInfo[] = [];
26
+ const pInfos: FootAndEndpointInfo[] = [];
35
27
  for (let i=0; i<curvePieces.length; i++) {
36
28
  const curvePiece = curvePieces[i];
37
29
 
38
- const pInfos = getPotentialClosestPointsOnCurveCertified(
39
- pow,
30
+ const _pInfos = getPotentialClosestPointsOnCurveCertified(
31
+ maxCoordPowerOf2,
40
32
  curvePiece.curve,
41
33
  x,
42
- curvePiece.ts,
43
- touchedCurve,
44
- t,
45
- for1Prong,
46
- angle
34
+ curvePiece.ts as [number,number]
47
35
  );
48
36
 
49
- pInfoss.push(...pInfos);
37
+ pInfos.push(..._pInfos);
50
38
  }
51
39
 
52
40
  /** the minimum max interval value */
53
- let minMax = Number.POSITIVE_INFINITY;
54
- for (let i=0; i<pInfoss.length; i++) {
55
- const diMax = pInfoss[i].dSquaredI[1];
41
+ let minMax = Infinity;
42
+ for (let i=0; i<pInfos.length; i++) {
43
+ const diMax = pInfos[i].dSquaredI[1];
56
44
  if (diMax < minMax) {
57
45
  minMax = diMax;
58
46
  }
@@ -60,14 +48,22 @@ function getCloseBoundaryPointsCertified(
60
48
 
61
49
  const closestPointInfos: FootAndEndpointInfo[] = [];
62
50
 
63
- for (let i=0; i<pInfoss.length; i++) {
64
- const info = pInfoss[i];
51
+ for (let i=0; i<pInfos.length; i++) {
52
+ const info = pInfos[i];
65
53
  if (info.dSquaredI[0] <= minMax) {
66
54
  closestPointInfos.push(info);
67
55
  }
68
56
  }
69
57
 
70
- return closestPointInfos.map(info => createPos(info.curve, info.t, false));
58
+ return closestPointInfos.map(info => {
59
+ const { curve, t } = info;
60
+ const { ps } = curve;
61
+ const p = toP(ps, t);
62
+
63
+ return {
64
+ p, t, curve, isSource: false
65
+ };
66
+ });
71
67
  }
72
68
 
73
69
 
@@ -1,15 +1,9 @@
1
- import { allRootsCertified } from 'flo-poly';
1
+ import type { Curve } from "flo-boolean";
2
+ import type { FootAndEndpointInfo } from './foot-and-endpoint-info.js';
3
+ import { createRootExact, roots } from 'flo-poly';
2
4
  import { getFootPointsOnBezierPolysCertified, getIntervalBox } from 'flo-bezier3';
3
- import { Curve } from "../curve/curve.js";
4
- import { ddDeflateWithRunningError } from './dd-deflate-with-running-error.js';
5
- import { eDeflate } from 'flo-poly';
6
- import { γγ } from '../error-analysis/gamma.js';
7
5
  import { rootIntervalToDistanceSquaredInterval } from './root-interval-to-distance-squared-interval.js';
8
6
  import { getPFromBox } from './get-p-from-box.js';
9
- import { FootAndEndpointInfo } from './foot-and-endpoint-info.js';
10
-
11
-
12
- const γγ3 = γγ(3);
13
7
 
14
8
  const { sqrt } = Math;
15
9
 
@@ -17,106 +11,39 @@ const { sqrt } = Math;
17
11
  /**
18
12
  * @internal
19
13
  *
20
- * @param pow
21
- * @param curve The curve
22
- * @param x The point from which to check
14
+ * @param maxCoordPowerOf2
15
+ * @param curve the curve
16
+ * @param x the point from which to check
23
17
  * @param tRange The allowed t range
24
- * @param touchedCurve The bezier on which p is located
25
- * @param t The t value of the bezier that locates p
26
- * @param for1Prong defaults to `false;
27
- * @param angle defaults to `0`;
28
18
  */
29
19
  function getPotentialClosestPointsOnCurveCertified(
30
- pow: number,
20
+ maxCoordPowerOf2: number,
31
21
  curve: Curve,
32
22
  x: number[],
33
- tRange: number[] = [0,1],
34
- touchedCurve: Curve | undefined = undefined,
35
- t: number | undefined = undefined,
36
- for1Prong = false,
37
- angle = 0): FootAndEndpointInfo[] {
23
+ tRange: [number, number]): FootAndEndpointInfo[] {
38
24
 
39
25
  const [tS,tE] = tRange;
40
26
  const ps = curve.ps;
41
27
 
42
- const shouldDeflate = angle === 0 && curve === touchedCurve;
43
-
44
- let { polyDd: polyDdO, polyE: polyEO, getPolyExact: getPolyExactO } =
28
+ let { polyDd: pDd, polyE: pDd_, getPolyExact } =
45
29
  getFootPointsOnBezierPolysCertified(ps, x);
46
30
 
47
- const def = shouldDeflate
48
- ? ddDeflateWithRunningError(polyDdO, polyEO.map(e => e/γγ3), t!)
49
- : undefined;
50
-
51
- const def2 = for1Prong && shouldDeflate
52
- ? ddDeflateWithRunningError(def!.coeffs, def!.errBound.map(e => e/γγ3), t!)
53
- : undefined;
54
-
55
- const def3 = for1Prong && shouldDeflate
56
- ? ddDeflateWithRunningError(def2!.coeffs, def2!.errBound.map(e => e/γγ3), t!)
57
- : undefined;
58
-
59
- const { polyDd, polyE, getPolyExact } =
60
- def3 !== undefined
61
- ? {
62
- polyDd: def3.coeffs,
63
- polyE: def3.errBound,
64
- getPolyExact: () => eDeflate(eDeflate(eDeflate(getPolyExactO(), t!), t!), t!)
65
- }
66
- : def !== undefined
67
- ? {
68
- polyDd: def.coeffs,
69
- polyE: def.errBound,
70
- getPolyExact: () => eDeflate(getPolyExactO(), t!)
71
- }
72
- : {
73
- polyDd: polyDdO,
74
- polyE: polyEO,
75
- getPolyExact: getPolyExactO
76
- };
77
-
78
- const ris = allRootsCertified(polyDd, tS, tE, polyE, getPolyExact);
79
-
80
- const dontPush0 = (
81
- (t === 1 && curve === touchedCurve!.next) ||
82
- (t === 0 && curve === touchedCurve)
83
- );
84
- const dontPush1 = (
85
- (t === 0 && curve === touchedCurve!.prev) ||
86
- (t === 1 && curve === touchedCurve)
87
- );
31
+ const ris = roots(pDd, tS, tE, pDd_, getPolyExact) || [];
88
32
 
89
- if (tS === 0) {
90
- if (!dontPush0) { ris.push({ tS: 0, tE: 0, multiplicity: 1 }); }
91
- } else if (tS === 1) {
92
- if (!dontPush1) { ris.push({ tS: 1, tE: 1, multiplicity: 1 }); }
93
- } else {
94
- ris.push({ tS: tS, tE: tS, multiplicity: 1 });
95
- }
96
-
97
- if (tE === 0) {
98
- if (!dontPush0) { ris.push({ tS: 0, tE: 0, multiplicity: 1 }); }
99
- } else if (tE === 1) {
100
- if (!dontPush1) { ris.push({ tS: 1, tE: 1, multiplicity: 1 }); }
101
- } else {
102
- ris.push({ tS: tE, tE: tE, multiplicity: 1 });
103
- }
33
+ ris.push(createRootExact(tS));
34
+ ris.push(createRootExact(tE));
104
35
 
105
36
  const infos = ris
106
37
  .map(ri => {
107
38
  const { tS: ts, tE: te } = ri;
108
39
 
109
- if (te < tS || ts > tE) {
110
- return undefined;
111
- }
112
-
113
40
  const _t = (ts + te)/2;
114
41
  const t = _t < 0 ? 0 : _t > 1 ? 1 : _t;
115
42
 
116
43
  const box = getIntervalBox(ps, [ts, te]);
117
44
  const p_ = getPFromBox(box);
118
45
 
119
- const dSquaredI = rootIntervalToDistanceSquaredInterval(pow, box, x);
46
+ const dSquaredI = rootIntervalToDistanceSquaredInterval(maxCoordPowerOf2, box, x);
120
47
 
121
48
  const t_ = t === 0 ? 1 : t;
122
49
  const curve_ = t === 0 ? curve.prev : curve;
@@ -127,13 +54,11 @@ function getPotentialClosestPointsOnCurveCertified(
127
54
  t: t_,
128
55
  d: (sqrt(dSquaredI[0]) + sqrt(dSquaredI[1]))/2,
129
56
  dSquaredI,
130
- box,
57
+ box
131
58
  }
132
59
  });
133
60
 
134
- const infos_ = infos.filter(info => info !== undefined) as FootAndEndpointInfo[];
135
-
136
- return infos_;
61
+ return infos;
137
62
  }
138
63
 
139
64
 
@@ -25,7 +25,7 @@ const eps = Number.EPSILON;
25
25
  * @internal
26
26
  */
27
27
  function rootIntervalToDistanceSquaredInterval(
28
- pow: number,
28
+ maxCoordPowerOf2: number,
29
29
  box: number[][],
30
30
  p: number[]) {
31
31
 
@@ -39,8 +39,8 @@ function rootIntervalToDistanceSquaredInterval(
39
39
  const x = p[0]; // <0>
40
40
  const y = p[1]; // <0>
41
41
 
42
- let minDSquared = Number.POSITIVE_INFINITY;
43
- let maxDSquared = Number.NEGATIVE_INFINITY;
42
+ let minDSquared = +Infinity;
43
+ let maxDSquared = -Infinity;
44
44
 
45
45
  // for each corner of the interval box
46
46
  for (const [a,b] of [[minX,minY],[minX,maxY],[maxX,minY],[maxX,maxY]]) {
@@ -62,8 +62,8 @@ function rootIntervalToDistanceSquaredInterval(
62
62
  const dc1Dd = qaq(qmq(ax,ax),qmq(by,by)); // ax**2 + bx**2
63
63
  const dc1 = dc1Dd[1];
64
64
 
65
- const dc1Min = dc1*(1 - 2**pow*eps); // distance minus max error
66
- const dc1Max = dc1*(1 + 2**pow*eps); // distance plus max error
65
+ const dc1Min = dc1*(1 - 2**maxCoordPowerOf2*eps); // distance minus max error
66
+ const dc1Max = dc1*(1 + 2**maxCoordPowerOf2*eps); // distance plus max error
67
67
 
68
68
  if (dc1Min <= minDSquared) {
69
69
  minDSquared = dc1Min;
@@ -13,7 +13,7 @@ const { sign } = Math;
13
13
  * Precondition: The point psI evaluated at zero must === the point psO
14
14
  * evaluated at zero.
15
15
  *
16
- * // TODO - is this correct?
16
+ * // FUTURE - is this correct?
17
17
  * Exact: Returns the exact result if the bithlength of all
18
18
  * coordinates <= 53 - 5 === 48 and are bit-aligned.
19
19
  *
@@ -1,39 +1,40 @@
1
1
 
2
2
  /**
3
- * @internal
4
3
  * Represents a corner on the shape boundary, i.e. a point where two bezier
5
4
  * curves meet. Typically used internally only.
5
+ *
6
+ * @internal
6
7
  */
7
8
  interface Corner {
8
9
  /**
9
10
  * The unit tangents at the points t === 1 of the first curve and at
10
11
  * t === 0 of the second respectively.
11
12
  */
12
- tangents: number[][];
13
+ readonly tangents: number[][];
13
14
  /** The cross of the unit tangents. */
14
15
  // crossTangents: number;
15
16
  /**
16
17
  * True if the corner is sharp, i.e. > 0 radians as one goes in a positive
17
18
  * direction around the shape boundary.
18
19
  */
19
- isSharp: boolean;
20
+ readonly isSharp: boolean;
20
21
  /**
21
22
  * True if the corner is dull, i.e. < 0 radians as one goes in a positive
22
23
  * direction around the shape boundary.
23
24
  */
24
- isDull: boolean;
25
+ readonly isDull: boolean;
25
26
  /**
26
27
  * True if the corner is quite sharp, i.e. > δ radians as one goes in a
27
28
  * positive direction around the shape boundary where δ is some
28
29
  * pre-determined parameter.
29
30
  */
30
- isQuiteSharp: boolean;
31
+ readonly isQuiteSharp: boolean;
31
32
  /**
32
33
  * True if the corner is quite dull, i.e. < δ radians as one goes in a
33
34
  * positive direction around the shape boundary where δ is some
34
35
  * pre-determined parameter.
35
36
  */
36
- isQuiteDull: boolean;
37
+ readonly isQuiteDull: boolean;
37
38
  }
38
39
 
39
40
 
@@ -1,5 +1,5 @@
1
- import { cross, dot, toUnitVector } from "flo-vector2d";
2
- import { Corner } from "./corner.js";
1
+ import type { Corner } from "./corner.js";
2
+ import { cross, toUnitVector } from "flo-vector2d";
3
3
  import { getInterfaceCcw } from './get-interface-ccw.js';
4
4
 
5
5
 
@@ -26,11 +26,6 @@ const DEGREE_LIMIT = DEGREES[4];
26
26
  * @internal
27
27
  * Returns a new corner with properties.
28
28
  *
29
- * PRECONDITION: The beziers has control points with max bit-length of 26 and
30
- * aligned to a 'grid' to have the same exponent. This is so the vectors between
31
- * control points can be calculated exactly without resorting to adaptive
32
- * infinite precision floating point operations.
33
- *
34
29
  * @param psI The incoming bezier that ends in the corner
35
30
  * @param psO The outgoing bezier that starts at the corner
36
31
  */
@@ -38,8 +33,8 @@ function getCorner(
38
33
  psI: number[][],
39
34
  psO: number[][]): Corner {
40
35
 
41
- // getInterfaceCcw must return a number !== 0 if psI and psO are not the
42
- // same as seen as a curve extension with t ∈ [-∞,+∞]
36
+ // `getInterfaceCcw` must return a number !== 0 if `psI` and `psO` are not
37
+ // the same up to a curve extension with `t ∈ [-∞,+∞]`
43
38
  const { ccw, tangentI, tangentO, dotTangents } = getInterfaceCcw(psI, psO);
44
39
  const isSharp = ccw < 0;
45
40
  const isDull = ccw > 0;
@@ -56,7 +51,6 @@ function getCorner(
56
51
 
57
52
  let isQuiteSharp: boolean;
58
53
  let isQuiteDull: boolean;
59
- // const dotTangents = dot(tangentAtIncoming, tangentAtOutgoing);
60
54
  if (dotTangents > 0) {
61
55
  // Curves go in same direction
62
56
  isQuiteSharp = crossTangents < -DEGREE_LIMIT;
@@ -68,7 +62,6 @@ function getCorner(
68
62
 
69
63
  return {
70
64
  tangents: unitTangents,
71
- // crossTangents,
72
65
  isSharp,
73
66
  isDull,
74
67
  isQuiteSharp,
@@ -15,8 +15,8 @@ import { compareCurvaturesAtInterface } from "./compare-curvatures-at-interface.
15
15
  * Preconditions (for robustness):
16
16
  * * The bezier does not have infinite curvature at either endpoint
17
17
  *
18
- * @param psI The incoming bezier that ends at the interface
19
- * @param psO The outgoing bezier that starts at the interface
18
+ * @param psI the incoming bezier that ends at the interface
19
+ * @param psO the outgoing bezier that starts at the interface
20
20
  */
21
21
  function getInterfaceCcw(
22
22
  psI: number[][],
@@ -72,9 +72,9 @@ function getInterfaceCcw(
72
72
 
73
73
  // Look at curvature
74
74
 
75
- // TODO2
75
+ // FUTURE
76
76
  // The line below is probably not working correctly for infinite
77
- // curvature but it should be rare to get here - investiagte.
77
+ // curvature but it should be rare to get here - investigate.
78
78
  // Probably need to resort to length of tangents and then if this is
79
79
  // also the same simply look at the last point's ccw wrt the 1st or
80
80
  // the second?
@@ -82,7 +82,6 @@ function getInterfaceCcw(
82
82
  ccw: compareCurvaturesAtInterface(psI.slice().reverse(), psO),
83
83
  tangentI,
84
84
  tangentO,
85
- // crossTangents,
86
85
  dotTangents
87
86
  }
88
87
  }
@@ -95,6 +94,7 @@ function pointsEqual(
95
94
  return p1[0] === p2[0] && p1[1] === p2[1];
96
95
  }
97
96
 
97
+
98
98
  /**
99
99
  * The input is two exact double-double coefficient vectors
100
100
  *
@@ -1,7 +1,4 @@
1
- import { CpNode } from "./cp-node.js";
2
1
  import { getHoleClosers } from "./fs/get-hole-closers.js";
3
- import { getSpeed } from "./fs/get-speed.js";
4
- import { getSmoothedSpeed$ } from "./fs/get-smoothed-speed.js";
5
2
  import { enhanceCpNode } from "./fs/enhance-cp-node.js";
6
3
  import { traverseCp } from './fs/traverse-cp.js';
7
4
  import { traverseEdges } from './fs/traverse-edges.js';
@@ -221,8 +218,6 @@ const CpNodeFs = {
221
218
  getBoundaryBeziersBetween,
222
219
  getMatCurvesBetween,
223
220
  getHoleClosers,
224
- getSpeed,
225
- getSmoothedSpeed$,
226
221
  getInitialDegAngleBetweenMatCurves,
227
222
  getAllVertices
228
223
  }
@@ -1,4 +1,5 @@
1
- import { ContactPoint } from '../contact-point/contact-point.js';
1
+ // import { ContactPoint } from '../contact-point/contact-point.js';
2
+ import { PointOnShape } from '../point-on-shape/point-on-shape.js';
2
3
 
3
4
 
4
5
  /**
@@ -50,35 +51,41 @@ import { ContactPoint } from '../contact-point/contact-point.js';
50
51
  * in opposite directions.
51
52
  */
52
53
  interface CpNode {
54
+ /** For debugging / easy identification only */
55
+ readonly id: number;
56
+
53
57
  /** The shape boundary contact point, i.e. a `CpNode` without its edges. */
54
- cp: ContactPoint;
58
+ // cp: ContactPoint;
59
+ readonly pointOnShape: PointOnShape;
55
60
  /** If true, this `CpNode` belongs to a hole-closing maximal disk. */
56
- isHoleClosing: boolean;
61
+ readonly isHoleClosing: boolean;
57
62
  /** true if this `CpNode` is at a shape boundary intersection point, false otherwise */
58
- isIntersection: boolean;
63
+ readonly isIntersection: boolean;
64
+
65
+ //------------------------
66
+ // EDGES TO OTHER CpNodes
67
+ //------------------------
68
+
59
69
  /** The previous (going clockwise around the boundary) contact point `CpNode`. */
60
- prev: CpNode;
70
+ readonly prev: CpNode;
61
71
  /** The next (going anti-clockwise around the boundary) contact point `CpNode`. */
62
- next: CpNode;
72
+ readonly next: CpNode;
63
73
  /**
64
74
  * The previous `CpNode` (going clockwise around the inscribed circle
65
75
  * defined by the maximal disk).
66
76
  */
67
- prevOnCircle: CpNode;
77
+ readonly prevOnCircle: CpNode;
68
78
  /**
69
79
  * The next `CpNode` (going anti-clockwise around
70
80
  * the inscribed circle defined by the maximal disk).
71
81
  */
72
- nextOnCircle: CpNode;
82
+ readonly nextOnCircle: CpNode;
73
83
  /**
74
84
  * For hole closers only - the twin `CpNode` at the same point, e.g.
75
85
  * use `cpNode.holeCloserTwin.next` to skip the hole closer and get to the
76
86
  * next `CpNode` on the same loop.
77
87
  */
78
- holeCloserTwin?: CpNode | undefined;
79
-
80
- /** For debugging / easy identification only */
81
- id: number;
88
+ readonly holeCloserTwin?: CpNode | undefined;
82
89
  }
83
90
 
84
91
 
@@ -1,50 +1,49 @@
1
- import { getTAtLength, length } from "flo-bezier3";
2
- import { createPos } from "../../point-on-shape/create-pos.js";
3
- import { CpNode } from "../cp-node.js";
1
+ //------------------------------
2
+ // KEEP FOR POSSIBLE FUTURE USE
3
+ //------------------------------
4
4
 
5
+ // import { getTAtLength, length } from "flo-bezier3";
6
+ // import { CpNode } from "../cp-node.js";
5
7
 
6
- function addDistanceFrom(
7
- d: number,
8
- cpNode: CpNode) {
9
8
 
10
- const posS = cpNode.cp.pointOnShape;
11
- const curveS = posS.curve;
9
+ // function addDistanceFrom(
10
+ // d: number,
11
+ // cpNode: CpNode) {
12
12
 
13
- let tS = posS.t;
14
- let cumL = 0;
15
- let dist = 0;
16
- let curve = curveS;
17
- let ps;
18
- let dLeft = d;
19
- while (true) {
20
- ps = curve.ps;
21
- dist = length([tS,1], ps);
22
- cumL += dist;
13
+ // const posS = cpNode.cp.pointOnShape;
14
+ // const curveS = posS.curve;
23
15
 
24
- if (cumL < d) {
25
- tS = 0;
26
- dLeft -= dist;
27
- curve = curve.next;
28
- } else {
29
- break;
30
- }
31
- }
16
+ // let tS = posS.t;
17
+ // let cumL = 0;
18
+ // let dist = 0;
19
+ // let curve = curveS;
20
+ // let ps;
21
+ // let dLeft = d;
22
+ // while (true) {
23
+ // ps = curve.ps;
24
+ // dist = length([tS,1], ps);
25
+ // cumL += dist;
32
26
 
33
- // const overshoot = cumL - d;
34
- const lL = length([0,tS], curve.ps);
35
- const l = lL + dLeft;
27
+ // if (cumL < d) {
28
+ // tS = 0;
29
+ // dLeft -= dist;
30
+ // curve = curve.next;
31
+ // } else {
32
+ // break;
33
+ // }
34
+ // }
36
35
 
37
- const t = getTAtLength(curve.ps, l);
36
+ // // const overshoot = cumL - d;
37
+ // const lL = length([0,tS], curve.ps);
38
+ // const l = lL + dLeft;
38
39
 
39
- const posE = createPos(curve, t);
40
+ // const t = getTAtLength(curve.ps, l);
40
41
 
41
- return posE;
42
- }
42
+ // const posE: PrePointOnShape = { curve, t ;
43
43
 
44
+ // return posE;
45
+ // }
44
46
 
45
47
 
46
- export { addDistanceFrom }
47
-
48
-
49
- // TESTING
50
48
 
49
+ // export { addDistanceFrom }
@@ -1,3 +1,4 @@
1
+ import { Mutable } from "../../utils/mutable.js";
1
2
  import type { CpNode } from "../cp-node.js";
2
3
 
3
4
 
@@ -26,7 +27,7 @@ function clone(
26
27
  cpNode: CpNode): CpNode {
27
28
 
28
29
  // Don't change this function to be recursive, the call stack may
29
- // overflow if there are too many CpNodes.
30
+ // overflow if there are too many `CpNode`s.
30
31
 
31
32
  const nodeMap: Map<CpNode, CpNodeWithoutEdges> = new Map();
32
33
 
@@ -49,7 +50,7 @@ function clone(
49
50
  nodeMap.set(node, node_);
50
51
  cpStack.push({ cpNode: node, newCpNode: node_ });
51
52
  }
52
- (newCpNode as CpNode)[edge] = node_ as CpNode;
53
+ (newCpNode as Mutable<CpNode>)[edge] = node_ as CpNode;
53
54
  }
54
55
  }
55
56
 
@@ -58,7 +59,7 @@ function clone(
58
59
 
59
60
 
60
61
  function cloneWithoutEdges(cpNode: CpNode) {
61
- const newNode = {
62
+ const cpNode_ = {
62
63
  ...cpNode,
63
64
  ...{
64
65
  prev: undefined,
@@ -69,7 +70,7 @@ function cloneWithoutEdges(cpNode: CpNode) {
69
70
  }
70
71
  };
71
72
 
72
- return newNode;
73
+ return cpNode_;
73
74
  }
74
75
 
75
76
 
@@ -1,5 +1,5 @@
1
1
  import type { CpNode } from "../cp-node.js";
2
- import { compareCps } from "../../contact-point/contact-point.js";
2
+ import { comparePoss } from "../../point-on-shape/compare-poss.js";
3
3
 
4
4
 
5
5
  /**
@@ -12,7 +12,7 @@ function cpNodeComparator(
12
12
  a: CpNode,
13
13
  b: CpNode) {
14
14
 
15
- return compareCps(a.cp, b.cp);
15
+ return comparePoss(a.pointOnShape, b.pointOnShape);
16
16
  }
17
17
 
18
18
 
@@ -12,15 +12,15 @@ import { isTerminating } from "./is-terminating.js";
12
12
  * @param cpNode
13
13
  */
14
14
  function enhanceCpNode(cpNode: CpNode) {
15
- const cp = cpNode.cp;
16
- const pos = cp.pointOnShape;
15
+ // const cp = cpNode.cp;
16
+ const pos = cpNode.pointOnShape;
17
17
  const curve = pos.curve;
18
18
 
19
19
  return {
20
20
  ...cpNode,
21
- pos: cpNode.cp.pointOnShape,
22
- p: cpNode.cp.pointOnShape.p,
23
- t: cpNode.cp.pointOnShape.t,
21
+ pos,//: cpNode.cp.pointOnShape,
22
+ p: pos.p,
23
+ t: pos.t,
24
24
  isTerminating: isTerminating(cpNode),
25
25
  isFullyTerminating: isFullyTerminating(cpNode),
26
26
  isSharp: isSharp(cpNode),