flo-mat 3.0.15 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) hide show
  1. package/README.md +1 -1
  2. package/__tests__/cp-node/compare-cp-nodes-by-value.ts +5 -3
  3. package/__tests__/cp-node/compare-poss-by-value.ts +7 -7
  4. package/__tests__/cp-node/fs/get-all-on-circle.spec.ts +8 -8
  5. package/__tests__/cp-node/fs/is-one-prong.spec.ts +3 -3
  6. package/__tests__/cp-node/fs/is-sharp.spec.ts +1 -1
  7. package/__tests__/find-2-prong/get-medial/get-closest-points.spec.ts +49 -0
  8. package/__tests__/get-mats1.ts +29 -32
  9. package/__tests__/helpers/close-to.ts +71 -0
  10. package/__tests__/helpers/jest-extend-nearly.ts +39 -0
  11. package/__tests__/helpers/jest.setup.ts +6 -0
  12. package/__tests__/helpers/obj-or-array.ts +8 -0
  13. package/__tests__/jest-extensions.d.ts +26 -0
  14. package/__tests__/lib-load.spec.ts +1 -1
  15. package/browser/index.js +20280 -17610
  16. package/browser/index.min.js +1 -1
  17. package/jest.config.cjs +1 -0
  18. package/node/add-n-prong.ts/join-spokes.d.ts +2 -2
  19. package/node/add-n-prong.ts/join-spokes.js +5 -4
  20. package/node/add-n-prong.ts/join-spokes.js.map +1 -1
  21. package/node/closest-boundary-point/cull-bezier-pieces-1.d.ts +9 -0
  22. package/node/closest-boundary-point/{cull-bezier-pieces.js → cull-bezier-pieces-1.js} +6 -7
  23. package/node/closest-boundary-point/cull-bezier-pieces-1.js.map +1 -0
  24. package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +7 -5
  25. package/node/closest-boundary-point/cull-by-loose-bounding-box.js +12 -10
  26. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
  27. package/node/closest-boundary-point/cull-by-tight-boundary-box.js +2 -2
  28. package/node/closest-boundary-point/foot-and-endpoint-info.d.ts +6 -9
  29. package/node/closest-boundary-point/get-best-distance-squared.d.ts +4 -3
  30. package/node/closest-boundary-point/get-best-distance-squared.js +11 -11
  31. package/node/closest-boundary-point/get-best-distance-squared.js.map +1 -1
  32. package/node/closest-boundary-point/get-close-boundary-points-certified.d.ts +5 -9
  33. package/node/closest-boundary-point/get-close-boundary-points-certified.js +22 -18
  34. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
  35. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.d.ts +3 -8
  36. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +34 -91
  37. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -1
  38. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +1 -1
  39. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +8 -11
  40. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -1
  41. package/node/corner/compare-curvatures-at-interface.d.ts +1 -1
  42. package/node/corner/compare-curvatures-at-interface.js +1 -1
  43. package/node/corner/corner.d.ts +7 -6
  44. package/node/corner/get-corner.d.ts +1 -6
  45. package/node/corner/get-corner.js +2 -9
  46. package/node/corner/get-corner.js.map +1 -1
  47. package/node/corner/get-interface-ccw.d.ts +2 -2
  48. package/node/corner/get-interface-ccw.js +4 -5
  49. package/node/corner/get-interface-ccw.js.map +1 -1
  50. package/node/cp-node/cp-node-fs.d.ts +0 -15
  51. package/node/cp-node/cp-node-fs.js +0 -4
  52. package/node/cp-node/cp-node-fs.js.map +1 -1
  53. package/node/cp-node/cp-node.d.ts +10 -10
  54. package/node/cp-node/fs/clone.js.map +1 -1
  55. package/node/cp-node/fs/cp-node-comparator.js +2 -2
  56. package/node/cp-node/fs/cp-node-comparator.js.map +1 -1
  57. package/node/cp-node/fs/enhance-cp-node.d.ts +1 -1
  58. package/node/cp-node/fs/enhance-cp-node.js +5 -5
  59. package/node/cp-node/fs/enhance-cp-node.js.map +1 -1
  60. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js +2 -2
  61. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js.map +1 -1
  62. package/node/cp-node/fs/get-cp-node-ordering.js +4 -4
  63. package/node/cp-node/fs/get-cp-node-ordering.js.map +1 -1
  64. package/node/cp-node/fs/get-edge-direction.js +3 -3
  65. package/node/cp-node/fs/get-edge-direction.js.map +1 -1
  66. package/node/cp-node/fs/get-hole-closers.d.ts +1 -1
  67. package/node/cp-node/fs/get-implied-boundary-bezier-between.js +2 -2
  68. package/node/cp-node/fs/get-implied-boundary-bezier-between.js.map +1 -1
  69. package/node/cp-node/fs/get-mat-curve-between.d.ts +1 -1
  70. package/node/cp-node/fs/get-mat-curve-between.js +6 -5
  71. package/node/cp-node/fs/get-mat-curve-between.js.map +1 -1
  72. package/node/cp-node/fs/get-salience.d.ts +1 -1
  73. package/node/cp-node/fs/get-salience.js +3 -3
  74. package/node/cp-node/fs/get-salience.js.map +1 -1
  75. package/node/cp-node/fs/insert-cp-node.d.ts +4 -4
  76. package/node/cp-node/fs/insert-cp-node.js +3 -4
  77. package/node/cp-node/fs/insert-cp-node.js.map +1 -1
  78. package/node/cp-node/fs/is-one-prong.d.ts +1 -1
  79. package/node/cp-node/fs/is-one-prong.js +2 -9
  80. package/node/cp-node/fs/is-one-prong.js.map +1 -1
  81. package/node/cp-node/fs/is-order-correct.d.ts +3 -3
  82. package/node/cp-node/fs/is-order-correct.js +5 -8
  83. package/node/cp-node/fs/is-order-correct.js.map +1 -1
  84. package/node/cp-node/fs/is-sharp.js +1 -1
  85. package/node/cp-node/fs/is-sharp.js.map +1 -1
  86. package/node/cp-node/fs/remove-cp-node.js +1 -2
  87. package/node/cp-node/fs/remove-cp-node.js.map +1 -1
  88. package/node/cp-node/fs/traverse-cp.js.map +1 -1
  89. package/node/cp-node/fs/traverse-vertices.d.ts +1 -1
  90. package/node/cp-node/fs/traverse-vertices.js.map +1 -1
  91. package/node/debug/debug-elem-types.d.ts +1 -2
  92. package/node/debug/debug-elem-types.js +1 -2
  93. package/node/debug/debug-elem-types.js.map +1 -1
  94. package/node/debug/functions/draw-elem/draw-branch.d.ts +1 -1
  95. package/node/debug/functions/draw-elem/draw-branch.js.map +1 -1
  96. package/node/debug/functions/draw-elem/draw-cp-node.d.ts +1 -1
  97. package/node/debug/functions/draw-elem/draw-cp-node.js +4 -4
  98. package/node/debug/functions/draw-elem/draw-cp-node.js.map +1 -1
  99. package/node/debug/functions/draw-elem/draw-elem.js +1 -5
  100. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  101. package/node/debug/functions/draw-elem/draw-leaves.d.ts +1 -1
  102. package/node/debug/functions/draw-elem/draw-leaves.js +4 -4
  103. package/node/debug/functions/draw-elem/draw-leaves.js.map +1 -1
  104. package/node/debug/functions/draw-elem/draw-mat.d.ts +1 -1
  105. package/node/debug/functions/draw-elem/draw-mat.js +1 -2
  106. package/node/debug/functions/draw-elem/draw-mat.js.map +1 -1
  107. package/node/debug/functions/draw-elem/draw-max-vertex.d.ts +1 -1
  108. package/node/debug/functions/draw-elem/draw-max-vertex.js +1 -1
  109. package/node/debug/functions/draw-elem/draw-max-vertex.js.map +1 -1
  110. package/node/debug/functions/draw-elem/draw-min-y.d.ts +1 -1
  111. package/node/debug/functions/draw-elem/draw-min-y.js.map +1 -1
  112. package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js +12 -3
  113. package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js.map +1 -1
  114. package/node/debug/functions/draw-elem/draw-one-prong.d.ts +2 -2
  115. package/node/debug/functions/draw-elem/draw-one-prong.js +8 -7
  116. package/node/debug/functions/draw-elem/draw-one-prong.js.map +1 -1
  117. package/node/debug/functions/draw-elem/draw-three-prong.d.ts +1 -1
  118. package/node/debug/functions/draw-elem/draw-three-prong.js +4 -4
  119. package/node/debug/functions/draw-elem/draw-three-prong.js.map +1 -1
  120. package/node/debug/functions/draw-elem/draw-two-prong.js +4 -3
  121. package/node/debug/functions/draw-elem/draw-two-prong.js.map +1 -1
  122. package/node/debug/functions/draw-elem/draw-vertex.d.ts +1 -1
  123. package/node/debug/functions/draw-elem/draw-vertex.js +1 -3
  124. package/node/debug/functions/draw-elem/draw-vertex.js.map +1 -1
  125. package/node/debug/functions/general.js +1 -1
  126. package/node/debug/functions/general.js.map +1 -1
  127. package/node/error-analysis/gamma.d.ts +7 -1
  128. package/node/error-analysis/gamma.js +6 -2
  129. package/node/error-analysis/gamma.js.map +1 -1
  130. package/node/find-2-prong/add-1-prong.d.ts +3 -3
  131. package/node/find-2-prong/add-1-prong.js +4 -4
  132. package/node/find-2-prong/add-1-prong.js.map +1 -1
  133. package/node/find-2-prong/add-2-prong.d.ts +10 -11
  134. package/node/find-2-prong/add-2-prong.js +42 -37
  135. package/node/find-2-prong/add-2-prong.js.map +1 -1
  136. package/node/find-2-prong/calc-seperation-tolerance.js +4 -7
  137. package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -1
  138. package/node/find-2-prong/cull-bezier-pieces.d.ts +9 -7
  139. package/node/find-2-prong/cull-bezier-pieces.js +30 -15
  140. package/node/find-2-prong/cull-bezier-pieces.js.map +1 -1
  141. package/node/find-2-prong/find-2-prong.d.ts +12 -13
  142. package/node/find-2-prong/find-2-prong.js +73 -116
  143. package/node/find-2-prong/find-2-prong.js.map +1 -1
  144. package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.d.ts +4 -4
  145. package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.js.map +1 -1
  146. package/node/find-2-prong/find-and-add-2-prongs.d.ts +5 -4
  147. package/node/find-2-prong/find-and-add-2-prongs.js +28 -24
  148. package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -1
  149. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.d.ts +6 -8
  150. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js +11 -12
  151. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js.map +1 -1
  152. package/node/find-2-prong/get-initial-bezier-pieces.d.ts +5 -6
  153. package/node/find-2-prong/get-initial-bezier-pieces.js +8 -11
  154. package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
  155. package/node/find-2-prong/get-initial-x.d.ts +12 -0
  156. package/node/find-2-prong/get-initial-x.js +35 -0
  157. package/node/find-2-prong/get-initial-x.js.map +1 -0
  158. package/node/find-2-prong/get-medial/antipodal-point.d.ts +8 -0
  159. package/node/find-2-prong/get-medial/antipodal-point.js +2 -0
  160. package/node/find-2-prong/get-medial/antipodal-point.js.map +1 -0
  161. package/node/find-2-prong/get-medial/get-antipodal-points.d.ts +18 -0
  162. package/node/find-2-prong/get-medial/get-antipodal-points.js +41 -0
  163. package/node/find-2-prong/get-medial/get-antipodal-points.js.map +1 -0
  164. package/node/find-2-prong/get-medial/get-closest-points.d.ts +15 -0
  165. package/node/find-2-prong/get-medial/get-closest-points.js +167 -0
  166. package/node/find-2-prong/get-medial/get-closest-points.js.map +1 -0
  167. package/node/find-2-prong/reduce-radius.d.ts +4 -4
  168. package/node/find-2-prong/reduce-radius.js +30 -50
  169. package/node/find-2-prong/reduce-radius.js.map +1 -1
  170. package/node/{find-3-prong.ts → find-3-prong}/calc-better-x.d.ts +9 -6
  171. package/node/{find-3-prong.ts → find-3-prong}/calc-better-x.js +11 -6
  172. package/node/find-3-prong/calc-better-x.js.map +1 -0
  173. package/node/find-3-prong/calc-initial-3-prong-center.d.ts +15 -0
  174. package/node/find-3-prong/calc-initial-3-prong-center.js +27 -0
  175. package/node/find-3-prong/calc-initial-3-prong-center.js.map +1 -0
  176. package/node/find-3-prong/find-3-prong-for-delta3s.d.ts +19 -0
  177. package/node/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.js +47 -32
  178. package/node/find-3-prong/find-3-prong-for-delta3s.js.map +1 -0
  179. package/node/find-3-prong/find-3-prong.d.ts +13 -0
  180. package/node/{find-3-prong.ts → find-3-prong}/find-3-prong.js +14 -9
  181. package/node/find-3-prong/find-3-prong.js.map +1 -0
  182. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.d.ts +2 -2
  183. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.js +17 -2
  184. package/node/find-3-prong/find-and-add-3-prong.js.map +1 -0
  185. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.js +8 -21
  186. package/node/find-3-prong/find-and-add-3-prongs-on-loop.js.map +1 -0
  187. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.d.ts +1 -4
  188. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.js +2 -3
  189. package/node/find-3-prong/find-and-add-3-prongs.js.map +1 -0
  190. package/node/find-3-prong/get-closest-points.d.ts +10 -0
  191. package/node/{find-3-prong.ts → find-3-prong}/get-closest-points.js +4 -4
  192. package/node/find-3-prong/get-closest-points.js.map +1 -0
  193. package/node/find-3-prong/three-prong-info.d.ts +9 -0
  194. package/node/find-3-prong/three-prong-info.js +2 -0
  195. package/node/find-3-prong/three-prong-info.js.map +1 -0
  196. package/node/find-3-prong/timed-cc.d.ts +3 -0
  197. package/node/find-3-prong/timed-cc.js +5 -0
  198. package/node/find-3-prong/timed-cc.js.map +1 -0
  199. package/node/find-mat/clip-options.d.ts +2 -2
  200. package/node/find-mat/clip-options.js +7 -14
  201. package/node/find-mat/clip-options.js.map +1 -1
  202. package/node/find-mat/create-initial-cp-tree.d.ts +9 -8
  203. package/node/find-mat/create-initial-cp-tree.js +17 -20
  204. package/node/find-mat/create-initial-cp-tree.js.map +1 -1
  205. package/node/find-mat/find-mat.d.ts +5 -5
  206. package/node/find-mat/find-mat.js +6 -12
  207. package/node/find-mat/find-mat.js.map +1 -1
  208. package/node/find-mat/find-mats.js +7 -12
  209. package/node/find-mat/find-mats.js.map +1 -1
  210. package/node/find-mat/get-dull-corners-on-loop.d.ts +3 -3
  211. package/node/find-mat/get-dull-corners-on-loop.js +5 -4
  212. package/node/find-mat/get-dull-corners-on-loop.js.map +1 -1
  213. package/node/find-mat/get-for-1-prongs-on-loop.d.ts +7 -7
  214. package/node/find-mat/get-for-1-prongs-on-loop.js +9 -21
  215. package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -1
  216. package/node/find-mat/get-for-2-prongs-on-loop.d.ts +5 -4
  217. package/node/find-mat/get-for-2-prongs-on-loop.js +4 -6
  218. package/node/find-mat/get-for-2-prongs-on-loop.js.map +1 -1
  219. package/node/find-mat/get-meta.d.ts +3 -3
  220. package/node/find-mat/get-meta.js +13 -12
  221. package/node/find-mat/get-meta.js.map +1 -1
  222. package/node/find-mat/get-sharp-corners.d.ts +3 -3
  223. package/node/find-mat/get-sharp-corners.js +2 -3
  224. package/node/find-mat/get-sharp-corners.js.map +1 -1
  225. package/node/find-mat/mat-options.d.ts +15 -15
  226. package/node/find-mat/mat-options.js +7 -4
  227. package/node/find-mat/mat-options.js.map +1 -1
  228. package/node/floyd-warshall/floyd-warshall.js +1 -1
  229. package/node/floyd-warshall/floyd-warshall.js.map +1 -1
  230. package/node/floyd-warshall/get-graph.js +2 -2
  231. package/node/floyd-warshall/get-graph.js.map +1 -1
  232. package/node/floyd-warshall/get-hole-closer-pairs.js +6 -6
  233. package/node/floyd-warshall/get-hole-closer-pairs.js.map +1 -1
  234. package/node/geometry/circle.d.ts +1 -0
  235. package/node/geometry/circle.js +1 -0
  236. package/node/geometry/circle.js.map +1 -1
  237. package/node/geometry/get-closest-square-distance-to-rect.js +1 -4
  238. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
  239. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js +2 -1
  240. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  241. package/node/index.d.ts +1 -7
  242. package/node/index.js +1 -5
  243. package/node/index.js.map +1 -1
  244. package/node/loop/get-max-coordinate.d.ts +2 -1
  245. package/node/loop/get-max-coordinate.js +6 -8
  246. package/node/loop/get-max-coordinate.js.map +1 -1
  247. package/node/mat/add-to-cp-tree.d.ts +3 -3
  248. package/node/mat/add-to-cp-tree.js +5 -5
  249. package/node/mat/add-to-cp-tree.js.map +1 -1
  250. package/node/mat/create-new-cp-trees.d.ts +10 -0
  251. package/node/mat/create-new-cp-trees.js +24 -0
  252. package/node/mat/create-new-cp-trees.js.map +1 -0
  253. package/node/mat/curve-piece.d.ts +1 -1
  254. package/node/mat/get-boundary-piece-beziers.d.ts +3 -3
  255. package/node/mat/get-boundary-piece-beziers.js +125 -20
  256. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  257. package/node/mat/get-branches.d.ts +1 -1
  258. package/node/mat/get-closeby-cp-if-exist.d.ts +5 -5
  259. package/node/mat/get-closeby-cp-if-exist.js +6 -5
  260. package/node/mat/get-closeby-cp-if-exist.js.map +1 -1
  261. package/node/mat/get-cp-node-to-left-or-same.d.ts +4 -4
  262. package/node/mat/get-cp-node-to-left-or-same.js +4 -3
  263. package/node/mat/get-cp-node-to-left-or-same.js.map +1 -1
  264. package/node/mat/get-largest-vertex.d.ts +1 -1
  265. package/node/mat/get-largest-vertex.js +1 -1
  266. package/node/mat/get-largest-vertex.js.map +1 -1
  267. package/node/mat/mat-meta.d.ts +4 -5
  268. package/node/mat/mat.d.ts +5 -5
  269. package/node/mat/simplify-mat.js +5 -4
  270. package/node/mat/simplify-mat.js.map +1 -1
  271. package/node/mat/trim-mat.d.ts +3 -2
  272. package/node/mat/trim-mat.js +5 -3
  273. package/node/mat/trim-mat.js.map +1 -1
  274. package/node/point-on-shape/calc-pos-order.d.ts +8 -5
  275. package/node/point-on-shape/calc-pos-order.js +7 -7
  276. package/node/point-on-shape/calc-pos-order.js.map +1 -1
  277. package/node/point-on-shape/compare-poss.d.ts +4 -0
  278. package/node/point-on-shape/compare-poss.js +12 -0
  279. package/node/point-on-shape/compare-poss.js.map +1 -1
  280. package/node/point-on-shape/get-osculating-circle.d.ts +5 -6
  281. package/node/point-on-shape/get-osculating-circle.js +18 -20
  282. package/node/point-on-shape/get-osculating-circle.js.map +1 -1
  283. package/node/point-on-shape/get-pos-corner.d.ts +18 -4
  284. package/node/point-on-shape/get-pos-corner.js +6 -6
  285. package/node/point-on-shape/get-pos-corner.js.map +1 -1
  286. package/node/point-on-shape/is-pos-corner.d.ts +3 -2
  287. package/node/point-on-shape/is-pos-corner.js.map +1 -1
  288. package/node/point-on-shape/is-pos-sharp-corner.d.ts +1 -12
  289. package/node/point-on-shape/is-pos-sharp-corner.js +4 -5
  290. package/node/point-on-shape/is-pos-sharp-corner.js.map +1 -1
  291. package/node/point-on-shape/point-on-shape.d.ts +39 -6
  292. package/node/point-on-shape/pos-to-human-string.d.ts +1 -1
  293. package/node/point-on-shape/pos-to-human-string.js.map +1 -1
  294. package/node/point-on-shape/to-p.d.ts +9 -0
  295. package/node/point-on-shape/to-p.js +13 -0
  296. package/node/point-on-shape/to-p.js.map +1 -0
  297. package/node/sat/add-debug-info.d.ts +2 -1
  298. package/node/sat/add-debug-info.js +2 -1
  299. package/node/sat/add-debug-info.js.map +1 -1
  300. package/node/sat/cull-non-cycles.d.ts +2 -1
  301. package/node/sat/cull-non-cycles.js +5 -3
  302. package/node/sat/cull-non-cycles.js.map +1 -1
  303. package/node/sat/cull.js +3 -4
  304. package/node/sat/cull.js.map +1 -1
  305. package/node/sat/get-leaves.d.ts +1 -1
  306. package/node/sat/get-leaves.js +1 -2
  307. package/node/sat/get-leaves.js.map +1 -1
  308. package/node/sat/get-sat-culls.d.ts +2 -2
  309. package/node/sat/get-sat-culls.js +3 -3
  310. package/node/sat/get-sat-culls.js.map +1 -1
  311. package/node/sat/to-scale-axis.d.ts +1 -1
  312. package/node/sat/to-scale-axis.js +2 -2
  313. package/node/sat/to-scale-axis.js.map +1 -1
  314. package/node/svg/get-loop-bounds.d.ts +7 -7
  315. package/node/svg/get-loop-bounds.js +33 -70
  316. package/node/svg/get-loop-bounds.js.map +1 -1
  317. package/node/svg/get-min-y-pos.d.ts +2 -3
  318. package/node/svg/get-min-y-pos.js +2 -2
  319. package/node/svg/get-min-y-pos.js.map +1 -1
  320. package/node/svg/get-shape-bounds.d.ts +6 -6
  321. package/node/svg/get-shape-bounds.js +6 -6
  322. package/node/svg/get-shape-bounds.js.map +1 -1
  323. package/node/utils/mutable.d.ts +4 -0
  324. package/node/utils/mutable.js +2 -0
  325. package/node/utils/mutable.js.map +1 -0
  326. package/node/utils/sum.js.map +1 -1
  327. package/node/utils/time-function-call.d.ts +14 -0
  328. package/node/utils/time-function-call.js +32 -0
  329. package/node/utils/time-function-call.js.map +1 -0
  330. package/node/vertex/remove-vertex.d.ts +1 -0
  331. package/node/vertex/remove-vertex.js +1 -1
  332. package/node/vertex/remove-vertex.js.map +1 -1
  333. package/package.json +6 -9
  334. package/src/add-n-prong.ts/join-spokes.ts +8 -6
  335. package/src/closest-boundary-point/{cull-bezier-pieces.ts → cull-bezier-pieces-1.ts} +7 -7
  336. package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +15 -14
  337. package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +2 -2
  338. package/src/closest-boundary-point/foot-and-endpoint-info.ts +5 -10
  339. package/src/closest-boundary-point/get-best-distance-squared.ts +18 -15
  340. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +25 -31
  341. package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +41 -102
  342. package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +7 -12
  343. package/src/corner/compare-curvatures-at-interface.ts +1 -1
  344. package/src/corner/corner.ts +7 -6
  345. package/src/corner/get-corner.ts +4 -11
  346. package/src/corner/get-interface-ccw.ts +5 -5
  347. package/src/cp-node/cp-node-fs.ts +0 -5
  348. package/src/cp-node/cp-node.ts +12 -10
  349. package/src/cp-node/fs/add-distance-from.ts +1 -2
  350. package/src/cp-node/fs/clone.ts +2 -1
  351. package/src/cp-node/fs/cp-node-comparator.ts +2 -2
  352. package/src/cp-node/fs/enhance-cp-node.ts +5 -5
  353. package/src/cp-node/fs/get-boundary-bezier-parts-to-next.ts +2 -2
  354. package/src/cp-node/fs/get-cp-node-ordering.ts +4 -4
  355. package/src/cp-node/fs/get-edge-direction.ts +3 -3
  356. package/src/cp-node/fs/get-hole-closers.ts +1 -1
  357. package/src/cp-node/fs/get-implied-boundary-bezier-between.ts +2 -2
  358. package/src/cp-node/fs/get-mat-curve-between.ts +8 -6
  359. package/src/cp-node/fs/get-salience.ts +4 -4
  360. package/src/cp-node/fs/insert-cp-node.ts +12 -12
  361. package/src/cp-node/fs/is-one-prong.ts +3 -14
  362. package/src/cp-node/fs/is-order-correct.ts +8 -10
  363. package/src/cp-node/fs/is-sharp.ts +1 -1
  364. package/src/cp-node/fs/remove-cp-node.ts +4 -6
  365. package/src/cp-node/fs/traverse-cp.ts +1 -1
  366. package/src/cp-node/fs/traverse-vertices.ts +1 -2
  367. package/src/cp-node/stringification/cp-node-stringifyable.ts +7 -16
  368. package/src/cp-node/stringification/from-stringifyable.ts +6 -6
  369. package/src/cp-node/stringification/to-stringifyable.ts +5 -9
  370. package/src/debug/debug-elem-types.ts +2 -3
  371. package/src/{mat → debug}/elem-type-two-prong.ts +1 -1
  372. package/src/debug/functions/check-ordering.ts +13 -17
  373. package/src/debug/functions/cmp-cp-on-delta.ts +3 -3
  374. package/src/debug/functions/draw-elem/draw-branch.ts +1 -3
  375. package/src/debug/functions/draw-elem/draw-cp-node.ts +5 -6
  376. package/src/debug/functions/draw-elem/draw-elem.ts +1 -5
  377. package/src/debug/functions/draw-elem/draw-leaves.ts +5 -5
  378. package/src/debug/functions/draw-elem/draw-mat.ts +2 -5
  379. package/src/debug/functions/draw-elem/draw-max-vertex.ts +3 -3
  380. package/src/debug/functions/draw-elem/draw-min-y.ts +2 -2
  381. package/src/debug/functions/draw-elem/draw-one-prong-at-dull-corner.ts +17 -3
  382. package/src/debug/functions/draw-elem/draw-one-prong.ts +10 -8
  383. package/src/debug/functions/draw-elem/draw-three-prong.ts +5 -5
  384. package/src/debug/functions/draw-elem/draw-two-prong.ts +4 -3
  385. package/src/debug/functions/draw-elem/draw-vertex.ts +2 -5
  386. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +2 -2
  387. package/src/debug/functions/general.ts +1 -1
  388. package/src/debug/functions/three-prong.ts +220 -220
  389. package/src/error-analysis/gamma.ts +9 -2
  390. package/src/find-2-prong/add-1-prong.ts +8 -8
  391. package/src/find-2-prong/add-2-prong.ts +64 -58
  392. package/src/find-2-prong/calc-seperation-tolerance.ts +4 -8
  393. package/src/find-2-prong/cull-bezier-pieces.ts +41 -21
  394. package/src/find-2-prong/find-2-prong.ts +105 -153
  395. package/src/find-2-prong/find-and-add-2-prong.ts +23 -23
  396. package/src/find-2-prong/find-and-add-2-prongs-on-all-loops.ts +4 -6
  397. package/src/find-2-prong/find-and-add-2-prongs.ts +44 -29
  398. package/src/find-2-prong/find-and-add-hole-closing-2-prongs.ts +15 -15
  399. package/src/find-2-prong/get-initial-bezier-pieces.ts +21 -24
  400. package/src/find-2-prong/get-initial-x.ts +52 -0
  401. package/src/find-2-prong/get-medial/antipodal-point.ts +12 -0
  402. package/src/find-2-prong/get-medial/get-antipodal-points.ts +63 -0
  403. package/src/find-2-prong/get-medial/get-closest-points.ts +211 -0
  404. package/src/find-2-prong/reduce-radius.ts +38 -61
  405. package/src/find-2-prong/x-for-debugging.ts +9 -9
  406. package/src/{find-3-prong.ts → find-3-prong}/calc-better-x.ts +23 -13
  407. package/src/{find-3-prong.ts → find-3-prong}/calc-initial-3-prong-center.ts +12 -15
  408. package/src/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.ts +64 -51
  409. package/src/find-3-prong/find-3-prong.ts +52 -0
  410. package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.ts +20 -6
  411. package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.ts +7 -23
  412. package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.ts +6 -4
  413. package/src/{find-3-prong.ts → find-3-prong}/get-closest-points.ts +6 -5
  414. package/src/find-3-prong/three-prong-info.ts +13 -0
  415. package/src/find-3-prong/timed-cc.ts +9 -0
  416. package/src/find-mat/clip-options.ts +11 -16
  417. package/src/find-mat/create-initial-cp-tree.ts +29 -34
  418. package/src/find-mat/find-mat.ts +15 -23
  419. package/src/find-mat/find-mats.ts +11 -13
  420. package/src/find-mat/fix-ordering.ts +58 -58
  421. package/src/find-mat/get-dull-corners-on-loop.ts +12 -10
  422. package/src/find-mat/get-for-1-prongs-on-loop.ts +11 -33
  423. package/src/find-mat/get-for-2-prongs-on-loop.ts +9 -12
  424. package/src/find-mat/get-meta.ts +18 -16
  425. package/src/find-mat/get-sharp-corners.ts +7 -8
  426. package/src/find-mat/mat-options.ts +22 -19
  427. package/src/floyd-warshall/floyd-warshall.ts +1 -1
  428. package/src/floyd-warshall/get-graph.ts +2 -2
  429. package/src/floyd-warshall/get-hole-closer-pairs.ts +6 -6
  430. package/src/geometry/circle.ts +1 -0
  431. package/src/geometry/get-closest-square-distance-to-rect.ts +3 -8
  432. package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +3 -2
  433. package/src/index.ts +2 -8
  434. package/src/loop/get-max-coordinate.ts +8 -9
  435. package/src/mat/add-to-cp-tree.ts +10 -11
  436. package/src/mat/clone-mat.ts +8 -4
  437. package/src/mat/clone-meta.ts +22 -10
  438. package/src/mat/create-new-cp-trees.ts +35 -0
  439. package/src/mat/curve-piece.ts +1 -1
  440. package/src/mat/get-boundary-piece-beziers.ts +153 -37
  441. package/src/mat/get-branches.ts +1 -1
  442. package/src/mat/get-closeby-cp-if-exist.ts +11 -12
  443. package/src/mat/get-cp-node-to-left-or-same.ts +9 -8
  444. package/src/mat/get-largest-3-prong.ts +2 -2
  445. package/src/mat/get-largest-vertex.ts +2 -2
  446. package/src/mat/mat-meta.ts +5 -4
  447. package/src/mat/mat.ts +5 -5
  448. package/src/mat/simplify-mat.ts +5 -4
  449. package/src/mat/trim-mat.ts +6 -4
  450. package/src/point-on-shape/calc-pos-order.ts +10 -11
  451. package/src/point-on-shape/compare-poss.ts +11 -1
  452. package/src/point-on-shape/get-osculating-circle.ts +26 -28
  453. package/src/point-on-shape/get-pos-corner.ts +14 -12
  454. package/src/point-on-shape/is-pos-corner.ts +1 -4
  455. package/src/point-on-shape/is-pos-dull-corner.ts +9 -9
  456. package/src/point-on-shape/is-pos-quite-dull-corner.ts +7 -6
  457. package/src/point-on-shape/is-pos-quite-sharp-corner.ts +7 -6
  458. package/src/point-on-shape/is-pos-sharp-corner.ts +6 -5
  459. package/src/point-on-shape/point-on-shape.ts +44 -6
  460. package/src/point-on-shape/pos-to-human-string.ts +4 -2
  461. package/src/point-on-shape/to-p.ts +19 -0
  462. package/src/sat/add-debug-info.ts +3 -3
  463. package/src/sat/cull-non-cycles.ts +8 -6
  464. package/src/sat/cull.ts +7 -8
  465. package/src/sat/get-leaves.ts +2 -4
  466. package/src/sat/get-sat-culls.ts +6 -5
  467. package/src/sat/to-scale-axis.ts +4 -5
  468. package/src/svg/get-loop-bounds.ts +61 -86
  469. package/src/svg/get-min-y-pos.ts +3 -4
  470. package/src/svg/get-shape-bounds.ts +12 -12
  471. package/src/sweep-line/are-boxes-intersecting.ts +3 -2
  472. package/src/utils/mutable.ts +7 -0
  473. package/src/utils/rad-to-deg.ts +1 -1
  474. package/src/utils/smart-log.ts +20 -0
  475. package/src/utils/sum.ts +3 -1
  476. package/src/utils/time-function-call.ts +53 -0
  477. package/src/vertex/remove-vertex.ts +1 -3
  478. package/wallaby.mjs +1 -0
  479. package/.eslintrc.cjs +0 -69
  480. package/__tests__/cp-node/fs/get-avg-speed.spec.ts +0 -7
  481. package/__tests__/cp-node/fs/get-smoothed-speed.spec.ts +0 -7
  482. package/__tests__/cp-node/fs/get-smoothed.spec.ts +0 -7
  483. package/__tests__/cp-node/fs/get-speed.spec.ts +0 -7
  484. package/__tests__/cp-node/fs/is-order-correct.spec.ts +0 -7
  485. package/node/bezier/fit-quads-to-cubic.d.ts +0 -19
  486. package/node/bezier/fit-quads-to-cubic.js +0 -83
  487. package/node/bezier/fit-quads-to-cubic.js.map +0 -1
  488. package/node/bezier/total-curvature.d.ts +0 -14
  489. package/node/bezier/total-curvature.js +0 -5
  490. package/node/bezier/total-curvature.js.map +0 -1
  491. package/node/bezier/total-length.d.ts +0 -14
  492. package/node/bezier/total-length.js +0 -5
  493. package/node/bezier/total-length.js.map +0 -1
  494. package/node/closest-boundary-point/cull-bezier-pieces.d.ts +0 -10
  495. package/node/closest-boundary-point/cull-bezier-pieces.js.map +0 -1
  496. package/node/closest-boundary-point/dd-deflate-with-running-error.d.ts +0 -25
  497. package/node/closest-boundary-point/dd-deflate-with-running-error.js +0 -68
  498. package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +0 -1
  499. package/node/closest-boundary-point/get-p-from-box.d.ts +0 -3
  500. package/node/closest-boundary-point/get-p-from-box.js +0 -11
  501. package/node/closest-boundary-point/get-p-from-box.js.map +0 -1
  502. package/node/contact-point/contact-point.d.ts +0 -26
  503. package/node/contact-point/contact-point.js +0 -22
  504. package/node/contact-point/contact-point.js.map +0 -1
  505. package/node/cp-node/fs/get-smoothed-speed.d.ts +0 -14
  506. package/node/cp-node/fs/get-smoothed-speed.js +0 -75
  507. package/node/cp-node/fs/get-smoothed-speed.js.map +0 -1
  508. package/node/cp-node/fs/get-speed.d.ts +0 -15
  509. package/node/cp-node/fs/get-speed.js +0 -39
  510. package/node/cp-node/fs/get-speed.js.map +0 -1
  511. package/node/debug/cp-node-for-debugging.d.ts +0 -11
  512. package/node/debug/cp-node-for-debugging.js +0 -2
  513. package/node/debug/cp-node-for-debugging.js.map +0 -1
  514. package/node/debug/functions/draw-elem/draw-speed.d.ts +0 -4
  515. package/node/debug/functions/draw-elem/draw-speed.js +0 -21
  516. package/node/debug/functions/draw-elem/draw-speed.js.map +0 -1
  517. package/node/find-2-prong/find-and-add-2-prong.d.ts +0 -11
  518. package/node/find-2-prong/find-and-add-2-prong.js +0 -19
  519. package/node/find-2-prong/find-and-add-2-prong.js.map +0 -1
  520. package/node/find-2-prong/find-equidistant-point-on-line-dd.d.ts +0 -10
  521. package/node/find-2-prong/find-equidistant-point-on-line-dd.js +0 -56
  522. package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +0 -1
  523. package/node/find-3-prong.ts/calc-better-x.js.map +0 -1
  524. package/node/find-3-prong.ts/calc-initial-3-prong-center.d.ts +0 -13
  525. package/node/find-3-prong.ts/calc-initial-3-prong-center.js +0 -27
  526. package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +0 -1
  527. package/node/find-3-prong.ts/find-3-prong-for-delta3s.d.ts +0 -22
  528. package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +0 -1
  529. package/node/find-3-prong.ts/find-3-prong.d.ts +0 -16
  530. package/node/find-3-prong.ts/find-3-prong.js.map +0 -1
  531. package/node/find-3-prong.ts/find-and-add-3-prong.js.map +0 -1
  532. package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.js.map +0 -1
  533. package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +0 -1
  534. package/node/find-3-prong.ts/get-closest-points.d.ts +0 -9
  535. package/node/find-3-prong.ts/get-closest-points.js.map +0 -1
  536. package/node/mat/connect-hole-closers.d.ts +0 -3
  537. package/node/mat/connect-hole-closers.js +0 -5
  538. package/node/mat/connect-hole-closers.js.map +0 -1
  539. package/node/mat/create-new-cp-tree.d.ts +0 -9
  540. package/node/mat/create-new-cp-tree.js +0 -23
  541. package/node/mat/create-new-cp-tree.js.map +0 -1
  542. package/node/memoize-primitive.d.ts +0 -11
  543. package/node/memoize-primitive.js +0 -25
  544. package/node/memoize-primitive.js.map +0 -1
  545. package/node/point-on-shape/create-pos.d.ts +0 -4
  546. package/node/point-on-shape/create-pos.js +0 -11
  547. package/node/point-on-shape/create-pos.js.map +0 -1
  548. package/node/point-on-shape/is-pos-quite-sharp-corner.d.ts +0 -17
  549. package/node/point-on-shape/is-pos-quite-sharp-corner.js +0 -14
  550. package/node/point-on-shape/is-pos-quite-sharp-corner.js.map +0 -1
  551. package/src/bezier/fit-quads-to-cubic.ts +0 -103
  552. package/src/bezier/total-curvature.ts +0 -8
  553. package/src/bezier/total-length.ts +0 -8
  554. package/src/closest-boundary-point/closest-points-on-curve-precise.ts +0 -75
  555. package/src/closest-boundary-point/closest-points-on-curve.ts +0 -72
  556. package/src/closest-boundary-point/dd-deflate-with-running-error.ts +0 -88
  557. package/src/contact-point/contact-point.ts +0 -42
  558. package/src/cp-node/fs/get-avg-speed.ts +0 -31
  559. package/src/cp-node/fs/get-smoothed-speed.ts +0 -97
  560. package/src/cp-node/fs/get-smoothed.ts +0 -62
  561. package/src/cp-node/fs/get-speed.ts +0 -56
  562. package/src/curve/curve.ts +0 -35
  563. package/src/dbscan/dbscan.ts +0 -91
  564. package/src/debug/cp-node-for-debugging.ts +0 -15
  565. package/src/debug/functions/draw-elem/draw-speed.ts +0 -35
  566. package/src/debug/three-prong-for-debugging.ts +0 -58
  567. package/src/debug/two-prong-for-debugging.ts +0 -30
  568. package/src/dijkstra/dijkstra.ts +0 -418
  569. package/src/find-2-prong/find-and-add-2-prongs-on-all-paths.ts +0 -38
  570. package/src/find-2-prong/find-equidistant-point-on-line-dd.ts +0 -77
  571. package/src/find-2-prong/find-equidistant-point-on-line.ts +0 -40
  572. package/src/find-2-prong/pyth-trips.ts +0 -146
  573. package/src/find-3-prong.ts/add-3-prong.ts +0 -113
  574. package/src/find-3-prong.ts/array-set.ts +0 -47
  575. package/src/find-3-prong.ts/find-3-prong.ts +0 -48
  576. package/src/find-3-prong.ts/find-and-add-all-3-prongs.ts +0 -109
  577. package/src/find-mat/add-2-prongs-by-error.ts +0 -122
  578. package/src/find-mat/add-debug-info.ts +0 -93
  579. package/src/find-mat/cp-node-for-insertion.ts +0 -13
  580. package/src/find-mat/get-dull-corners.ts +0 -34
  581. package/src/find-mat/get-half-angles.ts +0 -95
  582. package/src/find-mat/get-size-params.ts +0 -34
  583. package/src/find-mat/get-total-by.ts +0 -27
  584. package/src/get-curve/get-curve-between.ts +0 -80
  585. package/src/get-curve/get-edge-direction.ts +0 -70
  586. package/src/mat/add-to-cp-graph.ts +0 -60
  587. package/src/mat/cmp-cp-on-delta.ts +0 -56
  588. package/src/mat/connect-hole-closers.ts +0 -9
  589. package/src/mat/create-new-cp-tree.ts +0 -32
  590. package/src/mat/get-edges-as-array.ts +0 -18
  591. package/src/mat/get-largest-three-prong.ts +0 -14
  592. package/src/mat/get-neighboring-cps.ts +0 -49
  593. package/src/mat/is-another-cp-closeby.ts +0 -69
  594. package/src/mat/simplify-mat-map-only.ts +0 -110
  595. package/src/memoize-primitive.ts +0 -31
  596. package/src/point-on-shape/create-pos.ts +0 -20
  597. package/src/sat/cull-by-salience.ts +0 -115
  598. package/src/svg/get-extreme.ts +0 -23
  599. package/src/utils/bezier-piece-to-bezier.ts +0 -13
  600. package/src/utils/sleep.ts +0 -7
  601. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.d.ts +0 -0
@@ -1,51 +1,61 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { Loop } from 'flo-boolean';
3
- import { CpNode } from '../cp-node/cp-node.js';
4
- import { Circle } from '../geometry/circle.js';
5
- import { PointOnShape } from '../point-on-shape/point-on-shape.js';
1
+ import type { CpNode } from '../cp-node/cp-node.js';
2
+ import type { Circle } from '../geometry/circle.js';
3
+ import type { PointOnShape, PrePointOnShape } from '../point-on-shape/point-on-shape.js';
4
+ import type { MatMeta } from '../mat/mat-meta.js';
5
+ import type { Mutable } from '../utils/mutable.js';
6
6
  import { calcPosOrder } from '../point-on-shape/calc-pos-order.js';
7
- import { createPos } from '../point-on-shape/create-pos.js';
8
7
  import { getCloseByCpIfExist } from '../mat/get-closeby-cp-if-exist.js';
9
- import { MatMeta } from '../mat/mat-meta.js';
10
8
  import { insertCpNode } from '../cp-node/fs/insert-cp-node.js';
11
9
  import { addToCpTree } from '../mat/add-to-cp-tree.js';
12
10
  import { removeCpNode } from '../cp-node/fs/remove-cp-node.js';
13
11
 
14
12
 
15
13
  /**
16
- * @internal
17
14
  * Adds a 2-prong contact circle to the shape.
18
15
  *
19
- * @param cpTrees
16
+ * @param meta
20
17
  * @param circle Circle containing the 2 contact points
21
- * @param posSource The source point on shape
22
- * @param posAntipode The found antipodal point on shape
18
+ * @param pposSource The source point on shape
19
+ * @param pposAntipode The found antipodal point on shape
23
20
  * @param isHoleClosing True if this is a hole-closing 2-prong, false otherwise
24
- * @param maxCoordinate The maximum coordinate value used to calculate floating point
25
- * tolerances.
21
+ *
22
+ * @internal
26
23
  */
27
24
  function add2Prong(
28
25
  meta: MatMeta,
29
26
  circle: Circle,
30
- poss: PointOnShape[],
27
+ pposSource: PrePointOnShape,
28
+ pposAntipode: PrePointOnShape,
31
29
  isHoleClosing: boolean): CpNode | undefined {
32
30
 
33
- poss[0] = poss[0].t === 0
34
- ? createPos(poss[0].curve.prev, 1, true)
35
- : poss[0];
31
+ pposSource = pposSource.t === 0
32
+ ? { ...pposSource, curve: pposSource.curve.prev, t: 1 }
33
+ : pposSource;
36
34
 
37
- const orders = poss.map(pos => calcPosOrder(circle, pos));
35
+ const orderSource = calcPosOrder(circle.center, pposSource);
36
+ const orderAntipode = calcPosOrder(circle.center, pposAntipode);
37
+
38
+ const posAntipode: PointOnShape = {
39
+ ...pposAntipode, circle, order: orderAntipode, order2: 0
40
+ };
41
+ const posSource: PointOnShape = {
42
+ ...pposSource, circle, order: orderSource, order2: 0
43
+ }
38
44
 
39
45
  // Make sure there isn't already a ContactPoint close by - it can cause
40
46
  // floating point stability issues.
41
- for (let i=0; i<poss.length; i++) {
42
- if (!!getCloseByCpIfExist(meta, poss[i], circle, orders[i], 0, 2)) {
43
- return undefined;
44
- }
47
+ if (!!getCloseByCpIfExist(meta, pposSource, circle, orderSource, 0, 2)) {
48
+ return undefined;
49
+ }
50
+ if (!!getCloseByCpIfExist(meta, pposAntipode, circle, orderAntipode, 0, 2)) {
51
+ return undefined;
45
52
  }
46
53
 
47
54
  const { anyFailed, cpNodes } = addToCpTree(
48
- isHoleClosing, isHoleClosing, circle, orders, meta, poss
55
+ isHoleClosing, isHoleClosing, circle,
56
+ [orderSource, orderAntipode],
57
+ meta,
58
+ [posSource, posAntipode]
49
59
  );
50
60
 
51
61
  if (anyFailed) {
@@ -57,9 +67,6 @@ function add2Prong(
57
67
  return undefined;
58
68
  }
59
69
 
60
- // Get points ordered according to their angle with the x-axis
61
- // joinSpokes(circle, cpNodes);
62
-
63
70
  if (isHoleClosing) {
64
71
  closeHole(meta, cpNodes as CpNode[]);
65
72
  }
@@ -74,44 +81,43 @@ function closeHole(
74
81
 
75
82
  const { cpTrees } = meta;
76
83
 
77
- const [cpNodeA, cpNodeB] = cpNodes;
78
- // Duplicate ContactPoints
79
- // const antipodeCpNode = cpNodeB[0];
80
- const cpAntipode = cpNodeB.cp;
81
-
82
- const cpNodeB2 = insertCpNode(
83
- true,
84
- true, false,
85
- cpTrees.get(cpAntipode.pointOnShape.curve.loop)!,
86
- { ...cpAntipode, order2: +1 },
87
- cpNodeB,
84
+ const [cpNodeSource, cpNodeAntipode] = cpNodes as Mutable<CpNode>[];
85
+
86
+ // Antipode - create and insert twin
87
+ const posAntipode = cpNodeAntipode.pointOnShape;
88
+ const cpNodeAntipodeTwin = insertCpNode(
89
+ true, true, false,
90
+ cpTrees.get(posAntipode.curve.loop)!,
91
+ { ...posAntipode, order2: +1 },
92
+ cpNodeAntipode,
88
93
  meta.lastInsertId
89
- )!;
90
- cpNodeB2.holeCloserTwin = cpNodeB;
91
- cpNodeB.holeCloserTwin = cpNodeB2;
92
-
93
- const cpNodeB1 = insertCpNode(
94
- true,
95
- true, false,
96
- cpTrees.get(cpNodeA.cp.pointOnShape.curve.loop)!,
97
- { ...cpNodeA.cp, order2: -1 },
98
- cpNodeA.prev,
94
+ )! as Mutable<CpNode>;
95
+ cpNodeAntipodeTwin.holeCloserTwin = cpNodeAntipode;
96
+ cpNodeAntipode.holeCloserTwin = cpNodeAntipodeTwin;
97
+
98
+ // Source - create and insert twin
99
+ const posSource = cpNodeSource.pointOnShape;
100
+ const cpNodeSourceTwin = insertCpNode(
101
+ true, true, false,
102
+ cpTrees.get(posSource.curve.loop)!,
103
+ { ...cpNodeSource.pointOnShape!, order2: -1 },
104
+ cpNodeSource.prev,
99
105
  meta.lastInsertId
100
- )!;
101
- cpNodeB1.holeCloserTwin = cpNodeA;
102
- cpNodeA.holeCloserTwin = cpNodeB1;
106
+ )! as Mutable<CpNode>;
107
+ cpNodeSourceTwin.holeCloserTwin = cpNodeSource;
108
+ cpNodeSource.holeCloserTwin = cpNodeSourceTwin;
103
109
 
104
110
  // Connect graph
105
- cpNodeB1.prevOnCircle = cpNodeB2;
106
- cpNodeB1.nextOnCircle = cpNodeB2;
107
- cpNodeB2.prevOnCircle = cpNodeB1;
108
- cpNodeB2.nextOnCircle = cpNodeB1;
111
+ cpNodeSourceTwin.prevOnCircle = cpNodeAntipodeTwin;
112
+ cpNodeSourceTwin.nextOnCircle = cpNodeAntipodeTwin;
113
+ cpNodeAntipodeTwin.prevOnCircle = cpNodeSourceTwin;
114
+ cpNodeAntipodeTwin.nextOnCircle = cpNodeSourceTwin;
109
115
 
110
- cpNodeB.next = cpNodeA;
111
- cpNodeA.prev = cpNodeB;
116
+ cpNodeAntipode.next = cpNodeSource;
117
+ cpNodeSource.prev = cpNodeAntipode;
112
118
 
113
- cpNodeB1.next = cpNodeB2;
114
- cpNodeB2.prev = cpNodeB1;
119
+ cpNodeSourceTwin.next = cpNodeAntipodeTwin;
120
+ cpNodeAntipodeTwin.prev = cpNodeSourceTwin;
115
121
  }
116
122
 
117
123
 
@@ -1,14 +1,11 @@
1
- import { ddAddDd, ddMultDd, twoSum, twoProduct, ddDiffDd, ddDivDd, twoDiff, ddMultDouble1 } from 'double-double';
1
+ import { ddAddDd, twoProduct, ddDiffDd, ddDivDd, twoDiff, ddMultDouble1 } from 'double-double';
2
2
 
3
- const ts = twoSum;
4
3
  const tp = twoProduct;
5
- const td = twoDiff;
6
4
  const qaq = ddAddDd;
7
- const qmq = ddMultDd;
8
5
  const qdq = ddDiffDd;
9
6
  const qmd = ddMultDouble1;
10
7
 
11
- const { asin, acos, cos, sqrt, PI: π } = Math;
8
+ const { acos } = Math;
12
9
 
13
10
 
14
11
  /**
@@ -25,10 +22,9 @@ function calcSeperationTolerance(
25
22
 
26
23
  const a = r + δ;
27
24
  if (a >= R) {
28
- return Number.POSITIVE_INFINITY;
25
+ return Infinity;
29
26
  }
30
27
 
31
-
32
28
  const R_r_ = twoDiff(R,r);
33
29
  const A_ = qmd(r,R_r_);
34
30
  const N_ = qdq(qdq(A_, tp(r,δ)), tp(δ,δ/2));
@@ -70,7 +66,7 @@ export { calcSeperationTolerance }
70
66
 
71
67
  // const a = r + δ;
72
68
  // if (a >= R) {
73
- // return Number.POSITIVE_INFINITY;
69
+ // return Infinity;
74
70
  // }
75
71
 
76
72
  // const b = R - r;
@@ -1,41 +1,61 @@
1
+ import type { CurvePiece } from '../mat/curve-piece.js';
1
2
  import { getClosestSquareDistanceToRect } from '../geometry/get-closest-square-distance-to-rect.js';
2
- import { CurvePiece } from '../mat/curve-piece.js';
3
3
  import { getBoundingBox$ } from '../geometry/get-bounding-box-.js';
4
+ import { memoize } from 'flo-memoize';
5
+ import { getBoundingBoxTight } from 'flo-bezier3';
6
+ import { getClosestSquaredDistanceToRotatedRect } from '../geometry/get-closest-squared-distance-to-rotated-rect.js';
7
+
8
+
9
+ const TOLERANCE = 1 + 2**-20;
10
+ const getBoundingBoxTight$ = memoize(getBoundingBoxTight);
4
11
 
5
12
 
6
13
  /**
7
- * @internal
8
- * Cull all curvePieces not within given radius of a given point.
14
+ * Cull all `curvePieces` not within the given radius of a given point.
15
+ *
9
16
  * @param extreme
10
17
  * @param curvePieces
11
- * @param p
12
- * @param rSquared
18
+ * @param xO
19
+ * @param xy2
20
+ *
21
+ * @internal
13
22
  */
14
- function cullCurvePieces2(
23
+ function cullCurvePieces(
15
24
  curvePieces: CurvePiece[],
16
- p: number[],
17
- rSquared: number) {
25
+ xO: number[],
26
+ xy2: number): CurvePiece[] {
18
27
 
19
- const TOLERANCE = 1 + 2**-10;
20
-
21
- if (curvePieces.length <= 1) {
22
- return curvePieces;
28
+ if (curvePieces.length <= 2) {
29
+ // Curve pieces can never be less than 2 at this stage since a curve
30
+ // endpoint will be shared between 2 curves
31
+ return curvePieces as CurvePiece[];
23
32
  }
24
33
 
25
-
26
- const newPieces = [];
27
- for (const curvePiece of curvePieces) {
28
- const ps = curvePiece.curve.ps;
34
+ let lastIdx = 0;
35
+ for (let i=0; i<curvePieces.length; i++) {
36
+ const curvePiece = curvePieces[i];
37
+ const { ps } = curvePiece.curve;
29
38
 
30
39
  const rect = getBoundingBox$(ps);
31
- const bd = getClosestSquareDistanceToRect(rect, p);
32
- if (bd <= TOLERANCE*rSquared) {
33
- newPieces.push(curvePiece);
40
+ const d = getClosestSquareDistanceToRect(rect, xO);
41
+ if (d <= TOLERANCE*xy2) {
42
+ const tightBoundingBox = getBoundingBoxTight$(ps);
43
+ const d2 = getClosestSquaredDistanceToRotatedRect(
44
+ tightBoundingBox,
45
+ xO
46
+ );
47
+
48
+ if (d2 <= TOLERANCE*xy2) {
49
+ curvePieces[lastIdx] = curvePiece;
50
+ lastIdx++;
51
+ }
34
52
  }
35
53
  }
36
54
 
37
- return newPieces;
55
+ curvePieces.length = lastIdx;
56
+
57
+ return curvePieces;
38
58
  }
39
59
 
40
60
 
41
- export { cullCurvePieces2 }
61
+ export { cullCurvePieces }
@@ -1,24 +1,24 @@
1
- import { distanceBetween, fromTo, interpolate, rotate, translate } from 'flo-vector2d';
2
- import { Circle } from '../geometry/circle.js';
3
- import { PointOnShape } from '../point-on-shape/point-on-shape.js';
4
- import { getOsculatingCircle } from '../point-on-shape/get-osculating-circle.js';
5
- import { findEquidistantPointOnLineDd } from './find-equidistant-point-on-line-dd.js';
1
+ import type { Circle } from '../geometry/circle.js';
2
+ import type { PrePointOnShape } from '../point-on-shape/point-on-shape.js';
3
+ import type { MatMeta } from '../mat/mat-meta.js';
4
+ import type { AntipodalPoint } from './get-medial/antipodal-point.js';
6
5
  import { getInitialCurvePieces } from './get-initial-bezier-pieces.js';
7
- import { getCloseBoundaryPointsCertified } from '../closest-boundary-point/get-close-boundary-points-certified.js';
6
+ import { getAntipodalPoints } from './get-medial/get-antipodal-points.js';
8
7
  import { reduceRadius } from './reduce-radius.js';
9
8
  import { squaredDistanceBetweenDd } from './squared-distance-between-dd.js';
10
- import { cullCurvePieces2 } from './cull-bezier-pieces.js';
9
+ import { cullCurvePieces } from './cull-bezier-pieces.js';
11
10
  import { add1Prong } from './add-1-prong.js';
12
- import { createPos } from '../point-on-shape/create-pos.js';
13
- import { MatMeta } from '../mat/mat-meta.js';
11
+ import { toP } from '../point-on-shape/to-p.js';
14
12
  import { calcSeperationTolerance } from './calc-seperation-tolerance.js';
13
+ import { getInitialX } from './get-initial-x.js';
14
+ import { ddNormal } from 'flo-bezier3';
15
+ import { rotate } from 'flo-vector2d';
15
16
 
16
17
 
17
- const { ceil, log2, max, sqrt, abs, sin, cos } = Math;
18
+ const { sin, cos, max, sqrt } = Math;
18
19
 
19
20
 
20
21
  /**
21
- * @internal
22
22
  * Adds a 2-prong to the MAT. The first point on the shape boundary is given and
23
23
  * the second one is found by the algorithm.
24
24
  *
@@ -33,175 +33,127 @@ const { ceil, log2, max, sqrt, abs, sin, cos } = Math;
33
33
  * d of dΩ as in Fig. 19."
34
34
  * In fact, we (and they) start by fixing one point on the boundary beforehand.
35
35
  *
36
- * @param loops A shape represented by path loops
37
- * @param maxCoordinate The extreme coordinate value of the shape
38
- * @param squaredDiagonalLength The squared diagonal length of the shape
39
- * bounding box.
40
- * @param y The source point of the 2-prong to be found
41
- * @param isHoleClosing True if this is a hole-closing two-prong, false otherwise
42
- * @param loopIdx The loop array index
36
+ * @param meta
37
+ * @param isHoleClosing `true` if this is a hole-closing two-prong, `false` otherwise
38
+ * @param for1Prong
39
+ * @param angle
40
+ * @param yPos the source point of the 2-prong to be found
41
+ *
42
+ * @internal
43
43
  */
44
44
  function find2Prong(
45
- meta: MatMeta,
46
- isHoleClosing: boolean,
47
- for1Prong: boolean,
48
- angle: number,
49
- y: PointOnShape): { circle: Circle, zs: PointOnShape[] } | undefined {
50
-
51
- const { loops, maxCoordinate, squaredDiagonalLength } = meta;
45
+ meta: MatMeta) {
52
46
 
53
- const loop = y.curve.loop;
47
+ const { loops, maxCoordPowerOf2, squaredDiagonalLength } = meta;
54
48
 
55
- const MAX_ITERATIONS = 25;
56
- const minSquaredSeperationTolerance = ((2**-21)*maxCoordinate)**2;
57
- const errorTolerance = (2**-46)*maxCoordinate;
58
- // const errorTolerance = (2**-28)*maxCoordinate;
49
+ //----------------------------
50
+ // Initialize some tolerances
51
+ //----------------------------
52
+ const minSquaredSeperationTolerance = (2**(maxCoordPowerOf2 - 21))**2;
53
+ const errorTolerance = 2**(maxCoordPowerOf2 - 46);
59
54
  const maxOsculatingCircleRadius = sqrt(squaredDiagonalLength);
60
- const minCurvature = 1/maxOsculatingCircleRadius;
61
- const oneProngTolerance = (2**-16)*maxCoordinate;
62
-
63
- const [xO,rO] = getO(
64
- angle, isHoleClosing, maxOsculatingCircleRadius, minCurvature, y
65
- );
66
-
67
- const p = y.p;
68
-
69
- // The boundary piece that should contain the other point of
70
- // the 2-prong circle. (Defined by start and end points).
71
- let curvePieces = getInitialCurvePieces(
72
- angle, isHoleClosing, loop, loops, meta, y, { center: xO, radius: rO }
73
- );
74
- // console.log(curvePieces.length);
75
-
76
- /** The center of the two-prong (successively refined) */
77
- let x = xO;
78
-
79
- // The lines below is an optimization.
80
- const r_ = sqrt(reduceRadius(maxCoordinate, curvePieces, p, xO));
81
- if (rO > r_) {
82
- x = interpolate(p, xO, r_/rO);
83
- }
84
-
85
- /** The antipode of the two-prong (successively refined) */
86
- let zs: PointOnShape[] = undefined!;
87
- let z: PointOnShape = undefined!;
88
-
89
- let i = 0;
90
- while (i < MAX_ITERATIONS) {
91
- const xy = squaredDistanceBetweenDd(x, y.p);
92
-
93
- if (i < 2) { curvePieces = cullCurvePieces2(curvePieces, x, xy); }
94
- const pow = max(0,ceil(log2(maxCoordinate/xy))) + 1; // determines accuracy
95
- // console.log(pow);
96
- const _zs = getCloseBoundaryPointsCertified(
97
- pow, curvePieces, x, y.curve, y.t,
98
- for1Prong && i == 0 && rO !== 1/minCurvature,
99
- angle
100
- ).map(info => createPos(info.curve, info.t, false));
101
-
102
- let maxD = Number.NEGATIVE_INFINITY;
103
- let maxPos: PointOnShape = undefined!;
104
- zs = [];
105
- for (const z of _zs) {
106
- if (z === undefined) { continue; }
107
- const _yz = squaredDistanceBetweenDd(y.p, z.p);
108
- if (_yz > maxD) {
109
- maxD = _yz;
110
- maxPos = z;
111
- }
112
- if (_yz !== 0) {
113
- zs.push(z);
55
+ const oneProngTolerance = 2**(maxCoordPowerOf2 - 32);
56
+
57
+ return function find2ProngInner(
58
+ isHoleClosing: boolean,
59
+ for1Prong: boolean,
60
+ angle: number,
61
+ yPos: PrePointOnShape): { circle: Circle, z: PrePointOnShape } | undefined {
62
+
63
+ const { curve: { loop, ps }, t, p: y } = yPos;
64
+ const normDd = ddNormal(ps, t);
65
+ const _nnorm = [-normDd[0][1], -normDd[1][1]]; // Left-handed system (sorry)
66
+ const nnorm = isHoleClosing
67
+ ? [0, -maxOsculatingCircleRadius]
68
+ : (angle !== 0 ? rotate(sin(angle), cos(angle))(_nnorm) : _nnorm);
69
+
70
+ // Get initial kissing circle guess
71
+ let [xO,rO] = getInitialX(
72
+ angle, isHoleClosing, maxOsculatingCircleRadius, yPos, nnorm
73
+ );
74
+
75
+
76
+ // The boundary piece that should contain the other point of
77
+ // the 2-prong circle. (Defined by start and end points).
78
+ const curvePieces = getInitialCurvePieces(
79
+ angle, isHoleClosing, loop, loops, meta, yPos, xO
80
+ );
81
+
82
+ // The lines below is an optimization.
83
+ const xy2 = reduceRadius(maxCoordPowerOf2, curvePieces, y, nnorm);
84
+ const xy = sqrt(xy2);
85
+
86
+ const l = sqrt(nnorm[0]**2 + nnorm[1]**2);
87
+ xO = [y[0] + nnorm[0]/l*xy, y[1] + nnorm[1]/l*xy];
88
+
89
+ cullCurvePieces(curvePieces, xO, xy2);
90
+
91
+ const antipodalPoints = getAntipodalPoints(
92
+ maxCoordPowerOf2, nnorm, yPos,
93
+ for1Prong, angle,
94
+ curvePieces
95
+ );
96
+
97
+ if (antipodalPoints.length !== 1) {
98
+ if (antipodalPoints.length === 0) { return undefined; }
99
+ if (!areAllAntipodesSame(antipodalPoints)) {
100
+ // At this point there is multiple antipodal points (zs) for the given
101
+ // source point so do not add the 2-prong, it will be caught when
102
+ // adding 3+-prongs.
103
+ return undefined;
114
104
  }
115
105
  }
116
- // z = zs[0];
117
- const yz = maxD;
118
- z = maxPos;
119
106
 
120
- if (z === undefined || yz === 0) {
121
- // addDebugInfo2(isHoleClosing);
107
+ const { x, d, curve, s } = antipodalPoints[0];
108
+
109
+ if (for1Prong && rO < (1 - oneProngTolerance)*d) {
110
+ add1Prong(meta, rO, xO, yPos);
122
111
  return undefined;
123
112
  }
124
113
 
125
- const xz = squaredDistanceBetweenDd(x, z.p);
114
+ const z: PrePointOnShape = {
115
+ curve, t: s, isSource: false,
116
+ p: toP(curve.ps, s)
117
+ };
126
118
 
127
- // if on first try
128
- if (i === 0) {
129
- if (rO < (1 - oneProngTolerance)*sqrt(xz)) {
130
- // console.log('1prong');
131
- add1Prong(meta, rO, xO, y);
132
- return undefined;
133
- }
134
- }
135
-
136
- // if (typeof _debug_ !== 'undefined') { xs.push({ x, y, z: createPos(z.curve, z.t, false), t: y.t }); }
119
+ const circle = { center: x, radius: d };
120
+
121
+ const yz = squaredDistanceBetweenDd(yPos.p, z.p);
122
+ const xz = squaredDistanceBetweenDd(x, z.p);
137
123
 
138
-
139
124
  if (!isHoleClosing) {
140
- const squaredSeperationTolerance = max(calcSeperationTolerance(
141
- rO, sqrt(xz), 2**2*errorTolerance
142
- ), minSquaredSeperationTolerance);
125
+ if (yz === 0) { return undefined; }
126
+
127
+ // The lines below eliminate cases where the found 2-prong is too
128
+ // close to a one-prong
129
+ const squaredSeperationTolerance = max(
130
+ calcSeperationTolerance(rO, sqrt(xz), (2**2)*errorTolerance),
131
+ minSquaredSeperationTolerance
132
+ );
143
133
  if (yz <= squaredSeperationTolerance) {
144
- // if (typeof _debug_ !== 'undefined') { console.log(`failed: seperation too small - ${sqrt(yz)}`); }
145
134
  return undefined;
146
135
  }
147
136
  }
148
137
 
149
- // Find the point on the line connecting y with x that is
150
- // equidistant from y and z. This will be our next x.
151
- const nextX = findEquidistantPointOnLineDd(x, y.p, z.p);
152
- const error = abs(sqrt(xy) - sqrt(xz));
153
- // if (xy < xz) { return undefined; }
154
-
155
- x = nextX;
156
-
157
- if (error < errorTolerance) {
158
- break;
159
- }
160
-
161
- i++;
162
-
163
- if (i === MAX_ITERATIONS) {
164
- // Convergence was too slow.
165
- // if (typeof _debug_ !== 'undefined') { console.log('failed (slow): max iterations reached'); }
166
- return undefined;
167
- }
138
+ return { circle, z };
168
139
  }
140
+ }
169
141
 
170
- const circle = { center: x, radius: distanceBetween(x, z.p) };
171
-
172
- // if (typeof _debug_ !== 'undefined') { addDebugInfo(curvePieces, false, x, y, z, circle!, δ!, xs, isHoleClosing); }
173
142
 
174
- // return { circle, zs };
175
- // zs = zs.filter(z => z !== undefined)
176
- return { circle, zs: [z] };
177
- }
143
+ /** @internal */
144
+ function areAllAntipodesSame(
145
+ app: AntipodalPoint[]): boolean {
178
146
 
147
+ const { curve, s: t } = app[0];
148
+ for (let i=1; i<app.length; i++) {
149
+ const { curve: curve_, s: t_ } = app[i];
179
150
 
180
- function getO(
181
- angle: number,
182
- isHoleClosing: boolean,
183
- maxOsculatingCircleRadius: number,
184
- minCurvature: number,
185
- y: PointOnShape) {
186
-
187
- let xO: number[]; // the original x to mitigate drift
188
- const p = y.p;
189
- let rO: number;
190
- if (isHoleClosing) {
191
- xO = [p[0], p[1] - maxOsculatingCircleRadius];
192
- rO = maxOsculatingCircleRadius;
193
- } else {
194
- if (angle === 0) {
195
- ({ center: xO, radius: rO } = getOsculatingCircle(minCurvature, y));
196
- } else {
197
- ({ center: xO, radius: rO } = getOsculatingCircle(minCurvature, y, true));
198
- const v = fromTo(y.p, xO);
199
- const v_ = rotate(sin(angle), cos(angle))(v);
200
- xO = translate(y.p)(v_);
151
+ if (curve !== curve_ || t !== t_) {
152
+ return false;
201
153
  }
202
154
  }
203
155
 
204
- return [xO,rO] as [number[],number];
156
+ return true;
205
157
  }
206
158
 
207
159
 
@@ -1,30 +1,30 @@
1
- import { CpNode } from "../cp-node/cp-node.js";
2
- import { MatMeta } from "../mat/mat-meta.js";
3
- import { PointOnShape } from "../point-on-shape/point-on-shape.js";
4
- import { add2Prong } from "./add-2-prong.js";
5
- import { find2Prong } from "./find-2-prong.js";
1
+ // import type { CpNode } from "../cp-node/cp-node.js";
2
+ // import type { MatMeta } from "../mat/mat-meta.js";
3
+ // import type { PrePointOnShape } from "../point-on-shape/point-on-shape.js";
4
+ // import { add2Prong } from "./add-2-prong.js";
5
+ // import { find2Prong } from "./find-2-prong.js";
6
6
 
7
7
 
8
- /**
9
- * Just to simplify `find2Prong` a bit.
10
- *
11
- * * Cannot be used with holeClosers or angles other than 0
12
- * * Can be used after the mat has been found
13
- */
14
- function findAndAdd2Prong(
15
- meta: MatMeta,
16
- y: PointOnShape): CpNode | undefined {
8
+ // /**
9
+ // * Just to simplify `find2Prong` a bit.
10
+ // *
11
+ // * * Cannot be used with holeClosers or angles other than 0
12
+ // * * Can be used after the mat has been found
13
+ // */
14
+ // function findAndAdd2Prong(
15
+ // meta: MatMeta,
16
+ // y: PrePointOnShape): CpNode | undefined {
17
17
 
18
- const twoProngInfo = find2Prong(meta, false, false, 0, y);
19
- if (twoProngInfo === undefined) {
20
- return undefined;
21
- }
18
+ // const twoProngInfo = find2Prong(meta, false, false, 0, y);
19
+ // if (twoProngInfo === undefined) {
20
+ // return undefined;
21
+ // }
22
22
 
23
- const { circle, zs } = twoProngInfo;
24
- const cpNode = add2Prong(meta, circle, [y, ...zs], false);
23
+ // const { circle, z } = twoProngInfo;
24
+ // const cpNode = add2Prong(meta, circle, y, z, false);
25
25
 
26
- return cpNode;
27
- }
26
+ // return cpNode;
27
+ // }
28
28
 
29
29
 
30
- export { findAndAdd2Prong }
30
+ // export { findAndAdd2Prong }