flo-mat 3.0.0 → 3.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.
- package/.mocharc.cjs +1 -1
- package/README.md +7 -7
- package/browser/index.min.js +1 -1
- package/newdocs/README.md +41 -0
- package/newdocs/babel.config.js +3 -0
- package/newdocs/blog/2019-05-28-first-blog-post.md +12 -0
- package/newdocs/blog/2019-05-29-long-blog-post.md +44 -0
- package/newdocs/blog/2021-08-01-mdx-blog-post.mdx +20 -0
- package/newdocs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
- package/newdocs/blog/2021-08-26-welcome/index.md +25 -0
- package/newdocs/blog/authors.yml +17 -0
- package/newdocs/docs/Introduction.md +78 -0
- package/newdocs/docs/aaa.md +23 -0
- package/newdocs/docusaurus.config.js +139 -0
- package/newdocs/package-lock.json +12697 -0
- package/newdocs/package.json +46 -0
- package/newdocs/sidebars.js +33 -0
- package/newdocs/src/components/HomepageFeatures/index.tsx +46 -0
- package/newdocs/src/components/HomepageFeatures/styles.module.css +11 -0
- package/newdocs/src/css/custom.css +30 -0
- package/newdocs/src/pages/index.module.css +23 -0
- package/newdocs/src/pages/index.tsx +43 -0
- package/newdocs/src/pages/markdown-page.md +7 -0
- package/newdocs/static/.nojekyll +0 -0
- package/newdocs/static/img/docusaurus-social-card.jpg +0 -0
- package/newdocs/static/img/docusaurus.png +0 -0
- package/newdocs/static/img/favicon.ico +0 -0
- package/newdocs/static/img/favicon1.ico +0 -0
- package/newdocs/static/img/favicon_io/android-chrome-192x192.png +0 -0
- package/newdocs/static/img/favicon_io/android-chrome-512x512.png +0 -0
- package/newdocs/static/img/favicon_io/apple-touch-icon.png +0 -0
- package/newdocs/static/img/favicon_io/favicon-16x16.png +0 -0
- package/newdocs/static/img/favicon_io/favicon-32x32.png +0 -0
- package/newdocs/static/img/favicon_io/favicon.ico +0 -0
- package/newdocs/static/img/favicon_io/site.webmanifest +1 -0
- package/newdocs/static/img/favicon_io.zip +0 -0
- package/newdocs/static/img/logo.png +0 -0
- package/newdocs/static/img/logo.svg +1 -0
- package/newdocs/static/img/undraw_books_re_8gea.svg +1 -0
- package/newdocs/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/newdocs/static/img/undraw_docusaurus_react.svg +170 -0
- package/newdocs/static/img/undraw_docusaurus_tree.svg +40 -0
- package/newdocs/tsconfig.json +7 -0
- package/node/add-n-prong.ts/join-spokes.d.ts +4 -0
- package/node/add-n-prong.ts/join-spokes.js +24 -0
- package/node/add-n-prong.ts/join-spokes.js.map +1 -0
- package/node/bezier/fit-quads-to-cubic.d.ts +19 -0
- package/node/bezier/fit-quads-to-cubic.js +83 -0
- package/node/bezier/fit-quads-to-cubic.js.map +1 -0
- package/node/bezier/total-curvature.d.ts +2 -0
- package/node/bezier/total-curvature.js +5 -0
- package/node/bezier/total-curvature.js.map +1 -0
- package/node/bezier/total-length.d.ts +2 -0
- package/node/bezier/total-length.js +5 -0
- package/node/bezier/total-length.js.map +1 -0
- package/node/closest-boundary-point/cull-bezier-pieces.d.ts +2 -2
- package/node/closest-boundary-point/cull-bezier-pieces.js.map +1 -1
- package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +2 -2
- package/node/closest-boundary-point/cull-by-loose-bounding-box.js +2 -2
- package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
- package/node/closest-boundary-point/cull-by-tight-boundary-box.d.ts +2 -2
- package/node/closest-boundary-point/cull-by-tight-boundary-box.js.map +1 -1
- package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +1 -1
- package/node/closest-boundary-point/foot-and-endpoint-info.d.ts +1 -1
- package/node/closest-boundary-point/get-best-distance-squared.d.ts +2 -2
- package/node/closest-boundary-point/get-best-distance-squared.js.map +1 -1
- package/node/closest-boundary-point/get-close-boundary-points-certified.d.ts +6 -3
- package/node/closest-boundary-point/get-close-boundary-points-certified.js +6 -3
- package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
- package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.d.ts +5 -1
- package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +22 -5
- package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -1
- package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +1 -1
- package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +13 -8
- package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -1
- package/node/contact-point/contact-point.js.map +1 -1
- package/node/corner/compare-curvatures-at-interface.js +37 -54
- package/node/corner/compare-curvatures-at-interface.js.map +1 -1
- package/node/corner/corner.d.ts +0 -1
- package/node/corner/get-corner.d.ts +1 -1
- package/node/corner/get-corner.js +9 -21
- package/node/corner/get-corner.js.map +1 -1
- package/node/corner/get-interface-ccw.d.ts +6 -7
- package/node/corner/get-interface-ccw.js +63 -46
- package/node/corner/get-interface-ccw.js.map +1 -1
- package/node/cp-node/cp-node-fs.d.ts +225 -0
- package/node/cp-node/cp-node-fs.js +228 -0
- package/node/cp-node/cp-node-fs.js.map +1 -0
- package/node/cp-node/cp-node.d.ts +22 -128
- package/node/cp-node/cp-node.js +1 -248
- package/node/cp-node/cp-node.js.map +1 -1
- package/node/cp-node/{clone.d.ts → fs/clone.d.ts} +1 -1
- package/node/cp-node/{clone.js → fs/clone.js} +14 -5
- package/node/cp-node/fs/clone.js.map +1 -0
- package/node/cp-node/fs/cp-nodes-to-boundary-beziers.d.ts +3 -0
- package/node/cp-node/fs/cp-nodes-to-boundary-beziers.js +6 -0
- package/node/cp-node/fs/cp-nodes-to-boundary-beziers.js.map +1 -0
- package/node/cp-node/{enhance-cp-node.d.ts → fs/enhance-cp-node.d.ts} +14 -4
- package/node/cp-node/{enhance-cp-node.js → fs/enhance-cp-node.js} +8 -1
- package/node/cp-node/fs/enhance-cp-node.js.map +1 -0
- package/node/cp-node/fs/find-first.d.ts +3 -0
- package/node/cp-node/fs/find-first.js +16 -0
- package/node/cp-node/fs/find-first.js.map +1 -0
- package/node/cp-node/fs/get-all-between.d.ts +17 -0
- package/node/cp-node/fs/get-all-between.js +31 -0
- package/node/cp-node/fs/get-all-between.js.map +1 -0
- package/node/cp-node/fs/get-all-on-circle.d.ts +3 -0
- package/node/cp-node/fs/get-all-on-circle.js +14 -0
- package/node/cp-node/fs/get-all-on-circle.js.map +1 -0
- package/node/cp-node/fs/get-all-on-loop.d.ts +3 -0
- package/node/cp-node/fs/get-all-on-loop.js +12 -0
- package/node/cp-node/fs/get-all-on-loop.js.map +1 -0
- package/node/cp-node/fs/get-all-vertices.d.ts +3 -0
- package/node/cp-node/fs/get-all-vertices.js +10 -0
- package/node/cp-node/fs/get-all-vertices.js.map +1 -0
- package/node/cp-node/fs/get-angle-between-mat-curves.d.ts +9 -0
- package/node/cp-node/fs/get-angle-between-mat-curves.js +18 -0
- package/node/cp-node/fs/get-angle-between-mat-curves.js.map +1 -0
- package/node/cp-node/{get-boundary-bezier-parts-to-next.d.ts → fs/get-boundary-bezier-parts-to-next.d.ts} +1 -6
- package/node/cp-node/{get-boundary-bezier-parts-to-next.js → fs/get-boundary-bezier-parts-to-next.js} +0 -5
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js.map +1 -0
- package/node/cp-node/fs/get-boundary-beziers-between.d.ts +17 -0
- package/node/cp-node/fs/get-boundary-beziers-between.js +22 -0
- package/node/cp-node/fs/get-boundary-beziers-between.js.map +1 -0
- package/node/cp-node/fs/get-boundary-beziers-to-next.d.ts +3 -0
- package/node/cp-node/{get-boundary-beziers-to-next.js → fs/get-boundary-beziers-to-next.js} +2 -7
- package/node/cp-node/fs/get-boundary-beziers-to-next.js.map +1 -0
- package/node/cp-node/fs/get-branch-beziers.d.ts +8 -0
- package/node/cp-node/fs/get-branch-beziers.js +12 -0
- package/node/cp-node/fs/get-branch-beziers.js.map +1 -0
- package/node/cp-node/fs/get-branch.d.ts +10 -0
- package/node/cp-node/fs/get-branch.js +33 -0
- package/node/cp-node/fs/get-branch.js.map +1 -0
- package/node/cp-node/fs/get-children.d.ts +3 -0
- package/node/cp-node/fs/get-children.js +12 -0
- package/node/cp-node/fs/get-children.js.map +1 -0
- package/node/cp-node/{get-cp-node-ordering.d.ts → fs/get-cp-node-ordering.d.ts} +5 -1
- package/node/cp-node/{get-cp-node-ordering.js → fs/get-cp-node-ordering.js} +4 -0
- package/node/cp-node/fs/get-cp-node-ordering.js.map +1 -0
- package/node/cp-node/fs/get-distance-to-next.d.ts +4 -0
- package/node/cp-node/fs/get-distance-to-next.js +11 -0
- package/node/cp-node/fs/get-distance-to-next.js.map +1 -0
- package/node/cp-node/fs/get-edge-direction.d.ts +3 -0
- package/node/{get-curve → cp-node/fs}/get-edge-direction.js +1 -7
- package/node/cp-node/fs/get-edge-direction.js.map +1 -0
- package/node/cp-node/fs/get-first-exit.d.ts +3 -0
- package/node/cp-node/fs/get-first-exit.js +15 -0
- package/node/cp-node/fs/get-first-exit.js.map +1 -0
- package/node/cp-node/fs/get-hole-closers.d.ts +3 -0
- package/node/cp-node/fs/get-hole-closers.js +7 -0
- package/node/cp-node/fs/get-hole-closers.js.map +1 -0
- package/node/cp-node/fs/get-implied-boundary-bezier-between.d.ts +3 -0
- package/node/cp-node/fs/get-implied-boundary-bezier-between.js +58 -0
- package/node/cp-node/fs/get-implied-boundary-bezier-between.js.map +1 -0
- package/node/cp-node/fs/get-mat-curve-between.d.ts +3 -0
- package/node/{get-curve/get-curve-between.js → cp-node/fs/get-mat-curve-between.js} +3 -9
- package/node/cp-node/fs/get-mat-curve-between.js.map +1 -0
- package/node/cp-node/fs/get-mat-curve-to-next.d.ts +4 -0
- package/node/cp-node/fs/get-mat-curve-to-next.js +8 -0
- package/node/cp-node/fs/get-mat-curve-to-next.js.map +1 -0
- package/node/cp-node/fs/get-mat-curves-between.d.ts +3 -0
- package/node/cp-node/fs/get-mat-curves-between.js +13 -0
- package/node/cp-node/fs/get-mat-curves-between.js.map +1 -0
- package/node/cp-node/fs/get-non-terminating-on-circle.d.ts +3 -0
- package/node/cp-node/fs/get-non-terminating-on-circle.js +15 -0
- package/node/cp-node/fs/get-non-terminating-on-circle.js.map +1 -0
- package/node/cp-node/fs/get-prong-count.d.ts +3 -0
- package/node/cp-node/fs/get-prong-count.js +12 -0
- package/node/cp-node/fs/get-prong-count.js.map +1 -0
- package/node/cp-node/fs/get-real-prong-count.d.ts +3 -0
- package/node/cp-node/fs/get-real-prong-count.js +9 -0
- package/node/cp-node/fs/get-real-prong-count.js.map +1 -0
- package/node/cp-node/fs/get-salience.d.ts +7 -0
- package/node/cp-node/fs/get-salience.js +20 -0
- package/node/cp-node/fs/get-salience.js.map +1 -0
- package/node/cp-node/fs/get-smoothed-speed.d.ts +3 -0
- package/node/cp-node/fs/get-smoothed-speed.js +75 -0
- package/node/cp-node/fs/get-smoothed-speed.js.map +1 -0
- package/node/cp-node/fs/get-speed.d.ts +4 -0
- package/node/cp-node/fs/get-speed.js +40 -0
- package/node/cp-node/fs/get-speed.js.map +1 -0
- package/node/cp-node/fs/get-vertex-forward-children.d.ts +3 -0
- package/node/cp-node/fs/get-vertex-forward-children.js +15 -0
- package/node/cp-node/fs/get-vertex-forward-children.js.map +1 -0
- package/node/cp-node/fs/insert-cp-node.d.ts +5 -0
- package/node/cp-node/fs/insert-cp-node.js +21 -0
- package/node/cp-node/fs/insert-cp-node.js.map +1 -0
- package/node/cp-node/fs/is-fully-terminating.d.ts +3 -0
- package/node/cp-node/fs/is-fully-terminating.js +8 -0
- package/node/cp-node/fs/is-fully-terminating.js.map +1 -0
- package/node/cp-node/fs/is-on-same-circle.d.ts +3 -0
- package/node/cp-node/fs/is-on-same-circle.js +8 -0
- package/node/cp-node/fs/is-on-same-circle.js.map +1 -0
- package/node/cp-node/fs/is-one-prong.d.ts +3 -0
- package/node/cp-node/fs/is-one-prong.js +13 -0
- package/node/cp-node/fs/is-one-prong.js.map +1 -0
- package/node/cp-node/fs/is-order-correct.d.ts +5 -0
- package/node/cp-node/fs/is-order-correct.js +26 -0
- package/node/cp-node/fs/is-order-correct.js.map +1 -0
- package/node/cp-node/fs/is-sharp.d.ts +3 -0
- package/node/cp-node/fs/is-sharp.js +5 -0
- package/node/cp-node/fs/is-sharp.js.map +1 -0
- package/node/cp-node/fs/is-special.d.ts +3 -0
- package/node/cp-node/fs/is-special.js +9 -0
- package/node/cp-node/fs/is-special.js.map +1 -0
- package/node/cp-node/fs/is-terminating.d.ts +3 -0
- package/node/cp-node/fs/is-terminating.js +5 -0
- package/node/cp-node/fs/is-terminating.js.map +1 -0
- package/node/cp-node/fs/is-trivial.d.ts +6 -0
- package/node/cp-node/fs/is-trivial.js +10 -0
- package/node/cp-node/fs/is-trivial.js.map +1 -0
- package/node/cp-node/fs/is-two-prong.d.ts +3 -0
- package/node/cp-node/fs/is-two-prong.js +6 -0
- package/node/cp-node/fs/is-two-prong.js.map +1 -0
- package/node/cp-node/fs/is-vertex-special.d.ts +2 -0
- package/node/cp-node/fs/is-vertex-special.js +5 -0
- package/node/cp-node/fs/is-vertex-special.js.map +1 -0
- package/node/cp-node/fs/is-vertex.d.ts +3 -0
- package/node/cp-node/fs/is-vertex.js +6 -0
- package/node/cp-node/fs/is-vertex.js.map +1 -0
- package/node/cp-node/fs/remove-cp-node.d.ts +5 -0
- package/node/cp-node/fs/remove-cp-node.js +10 -0
- package/node/cp-node/fs/remove-cp-node.js.map +1 -0
- package/node/cp-node/fs/traverse-cp.d.ts +3 -0
- package/node/cp-node/{traverse-cp.js → fs/traverse-cp.js} +2 -10
- package/node/cp-node/fs/traverse-cp.js.map +1 -0
- package/node/cp-node/fs/traverse-edges.d.ts +5 -0
- package/node/cp-node/fs/traverse-edges.js +47 -0
- package/node/cp-node/fs/traverse-edges.js.map +1 -0
- package/node/cp-node/fs/traverse-vertices.d.ts +3 -0
- package/node/cp-node/fs/traverse-vertices.js +21 -0
- package/node/cp-node/fs/traverse-vertices.js.map +1 -0
- package/node/curve/curve.d.ts +1 -8
- package/node/curve/curve.js +1 -13
- package/node/curve/curve.js.map +1 -1
- package/node/debug/debug-elem-types.d.ts +24 -29
- package/node/debug/debug-elem-types.js +22 -1
- package/node/debug/debug-elem-types.js.map +1 -1
- package/node/debug/debug.d.ts +4 -8
- package/node/debug/debug.js +16 -17
- package/node/debug/debug.js.map +1 -1
- package/node/debug/functions/draw/draw-beziers-as-single-path.d.ts +2 -0
- package/node/debug/functions/draw/draw-beziers-as-single-path.js +30 -0
- package/node/debug/functions/draw/draw-beziers-as-single-path.js.map +1 -0
- package/node/debug/functions/draw/xmlns.d.ts +2 -0
- package/node/debug/functions/draw/xmlns.js +3 -0
- package/node/debug/functions/draw/xmlns.js.map +1 -0
- package/node/debug/functions/draw-elem/draw-branch.d.ts +4 -0
- package/node/debug/functions/draw-elem/draw-branch.js +26 -0
- package/node/debug/functions/draw-elem/draw-branch.js.map +1 -0
- package/node/debug/functions/draw-elem/draw-cp-node.d.ts +4 -0
- package/node/debug/functions/draw-elem/draw-cp-node.js +26 -0
- package/node/debug/functions/draw-elem/draw-cp-node.js.map +1 -0
- package/node/debug/functions/draw-elem/draw-cull.d.ts +3 -0
- package/node/debug/functions/draw-elem/draw-cull.js +9 -0
- package/node/debug/functions/draw-elem/draw-cull.js.map +1 -0
- package/node/debug/functions/draw-elem/{dull-corner.js → draw-dull-corner.js} +1 -1
- package/node/debug/functions/draw-elem/draw-dull-corner.js.map +1 -0
- package/node/debug/functions/draw-elem/draw-elem.d.ts +7 -5
- package/node/debug/functions/draw-elem/draw-elem.js +33 -36
- package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-leaves.d.ts +4 -0
- package/node/debug/functions/draw-elem/draw-leaves.js +34 -0
- package/node/debug/functions/draw-elem/draw-leaves.js.map +1 -0
- package/node/debug/functions/draw-elem/{loop.js → draw-loop.js} +1 -1
- package/node/debug/functions/draw-elem/draw-loop.js.map +1 -0
- package/node/debug/functions/draw-elem/{loops.js → draw-loops.js} +1 -1
- package/node/debug/functions/draw-elem/draw-loops.js.map +1 -0
- package/node/debug/functions/draw-elem/{loose-bounding-box.js → draw-loose-bounding-box.js} +1 -1
- package/node/debug/functions/draw-elem/draw-loose-bounding-box.js.map +1 -0
- package/node/debug/functions/draw-elem/draw-mat.d.ts +4 -0
- package/node/debug/functions/draw-elem/draw-mat.js +38 -0
- package/node/debug/functions/draw-elem/draw-mat.js.map +1 -0
- package/node/debug/functions/draw-elem/{max-vertex.js → draw-max-vertex.js} +1 -1
- package/node/debug/functions/draw-elem/draw-max-vertex.js.map +1 -0
- package/node/debug/functions/draw-elem/{min-y.js → draw-min-y.js} +1 -1
- package/node/debug/functions/draw-elem/draw-min-y.js.map +1 -0
- package/node/debug/functions/draw-elem/{one-prong-at-dull-corner.js → draw-one-prong-at-dull-corner.js} +1 -1
- package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js.map +1 -0
- package/node/debug/functions/draw-elem/{one-prong.js → draw-one-prong.js} +1 -1
- package/node/debug/functions/draw-elem/draw-one-prong.js.map +1 -0
- package/node/debug/functions/draw-elem/{sharp-corner.js → draw-sharp-corner.js} +1 -1
- package/node/debug/functions/draw-elem/draw-sharp-corner.js.map +1 -0
- package/node/debug/functions/draw-elem/draw-speed.d.ts +4 -0
- package/node/debug/functions/draw-elem/draw-speed.js +21 -0
- package/node/debug/functions/draw-elem/draw-speed.js.map +1 -0
- package/node/debug/functions/draw-elem/draw-three-prong.d.ts +4 -0
- package/node/debug/functions/draw-elem/draw-three-prong.js +26 -0
- package/node/debug/functions/draw-elem/draw-three-prong.js.map +1 -0
- package/node/debug/functions/draw-elem/{tight-bounding-box.js → draw-tight-bounding-box.js} +1 -1
- package/node/debug/functions/draw-elem/draw-tight-bounding-box.js.map +1 -0
- package/node/debug/functions/draw-elem/draw-two-prong.d.ts +4 -0
- package/node/debug/functions/draw-elem/draw-two-prong.js +48 -0
- package/node/debug/functions/draw-elem/draw-two-prong.js.map +1 -0
- package/node/debug/functions/draw-elem/{vertex.d.ts → draw-vertex.d.ts} +1 -2
- package/node/debug/functions/draw-elem/draw-vertex.js +15 -0
- package/node/debug/functions/draw-elem/draw-vertex.js.map +1 -0
- package/node/find-2-prong/add-1-prong.d.ts +3 -5
- package/node/find-2-prong/add-1-prong.js +15 -16
- package/node/find-2-prong/add-1-prong.js.map +1 -1
- package/node/find-2-prong/add-2-prong.d.ts +6 -6
- package/node/find-2-prong/add-2-prong.js +45 -124
- package/node/find-2-prong/add-2-prong.js.map +1 -1
- package/node/find-2-prong/calc-seperation-tolerance.d.ts +2 -0
- package/node/find-2-prong/calc-seperation-tolerance.js +86 -0
- package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -0
- package/node/find-2-prong/cull-bezier-pieces.d.ts +2 -2
- package/node/find-2-prong/cull-bezier-pieces.js +2 -2
- package/node/find-2-prong/cull-bezier-pieces.js.map +1 -1
- package/node/find-2-prong/find-2-prong.d.ts +4 -6
- package/node/find-2-prong/find-2-prong.js +70 -59
- package/node/find-2-prong/find-2-prong.js.map +1 -1
- package/node/find-2-prong/find-and-add-2-prong.d.ts +11 -0
- package/node/find-2-prong/find-and-add-2-prong.js +19 -0
- package/node/find-2-prong/find-and-add-2-prong.js.map +1 -0
- package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.d.ts +14 -0
- package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.js +21 -0
- package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.js.map +1 -0
- package/node/find-2-prong/find-and-add-2-prongs.d.ts +5 -9
- package/node/find-2-prong/find-and-add-2-prongs.js +17 -21
- package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -1
- package/node/find-2-prong/find-and-add-hole-closing-2-prongs.d.ts +3 -4
- package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js +8 -8
- package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js.map +1 -1
- package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +1 -1
- package/node/find-2-prong/get-initial-bezier-pieces.d.ts +2 -8
- package/node/find-2-prong/get-initial-bezier-pieces.js +13 -21
- package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
- package/node/find-2-prong/reduce-radius.d.ts +2 -2
- package/node/find-2-prong/reduce-radius.js +10 -19
- package/node/find-2-prong/reduce-radius.js.map +1 -1
- package/node/find-3-prong.ts/calc-better-x.d.ts +3 -3
- package/node/find-3-prong.ts/calc-better-x.js +4 -4
- package/node/find-3-prong.ts/calc-better-x.js.map +1 -1
- package/node/find-3-prong.ts/calc-initial-3-prong-center.d.ts +2 -2
- package/node/find-3-prong.ts/calc-initial-3-prong-center.js +6 -3
- package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +1 -1
- package/node/find-3-prong.ts/find-3-prong-for-delta3s.d.ts +4 -4
- package/node/find-3-prong.ts/find-3-prong-for-delta3s.js +24 -33
- package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +1 -1
- package/node/find-3-prong.ts/find-3-prong.d.ts +1 -1
- package/node/find-3-prong.ts/find-3-prong.js +2 -61
- package/node/find-3-prong.ts/find-3-prong.js.map +1 -1
- package/node/find-3-prong.ts/find-and-add-3-prong.d.ts +15 -0
- package/node/find-3-prong.ts/find-and-add-3-prong.js +43 -0
- package/node/find-3-prong.ts/find-and-add-3-prong.js.map +1 -0
- package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.d.ts +11 -0
- package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.js +63 -0
- package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.js.map +1 -0
- package/node/find-3-prong.ts/find-and-add-3-prongs.d.ts +22 -3
- package/node/find-3-prong.ts/find-and-add-3-prongs.js +28 -55
- package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +1 -1
- package/node/find-3-prong.ts/get-closest-points.d.ts +2 -2
- package/node/find-3-prong.ts/get-closest-points.js +2 -1
- package/node/find-3-prong.ts/get-closest-points.js.map +1 -1
- package/node/find-mat/clip-options.d.ts +3 -0
- package/node/find-mat/clip-options.js +32 -0
- package/node/find-mat/clip-options.js.map +1 -0
- package/node/find-mat/{create-initial-cp-graph.d.ts → create-initial-cp-tree.d.ts} +5 -2
- package/node/find-mat/{create-initial-cp-graph.js → create-initial-cp-tree.js} +11 -10
- package/node/find-mat/create-initial-cp-tree.js.map +1 -0
- package/node/find-mat/find-mat.d.ts +7 -2
- package/node/find-mat/find-mat.js +34 -22
- package/node/find-mat/find-mat.js.map +1 -1
- package/node/find-mat/find-mats.d.ts +4 -2
- package/node/find-mat/find-mats.js +27 -10
- package/node/find-mat/find-mats.js.map +1 -1
- package/node/find-mat/{get-dull-corners.js → get-dull-corners-on-loop.js} +3 -3
- package/node/find-mat/get-dull-corners-on-loop.js.map +1 -0
- package/node/find-mat/get-for-1-prongs-on-loop.js +15 -5
- package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -1
- package/node/find-mat/get-for-2-prongs-on-loop.js +14 -10
- package/node/find-mat/get-for-2-prongs-on-loop.js.map +1 -1
- package/node/find-mat/get-meta.d.ts +11 -0
- package/node/find-mat/get-meta.js +82 -0
- package/node/find-mat/get-meta.js.map +1 -0
- package/node/find-mat/get-sharp-corners.js +3 -2
- package/node/find-mat/get-sharp-corners.js.map +1 -1
- package/node/find-mat/mat-options.d.ts +88 -0
- package/node/find-mat/mat-options.js +36 -0
- package/node/find-mat/mat-options.js.map +1 -0
- package/node/floyd-warshall/floyd-warshall.d.ts +7 -0
- package/node/floyd-warshall/floyd-warshall.js +67 -0
- package/node/floyd-warshall/floyd-warshall.js.map +1 -0
- package/node/floyd-warshall/get-graph.d.ts +3 -0
- package/node/floyd-warshall/get-graph.js +54 -0
- package/node/floyd-warshall/get-graph.js.map +1 -0
- package/node/floyd-warshall/get-hole-closer-pairs.d.ts +3 -0
- package/node/floyd-warshall/get-hole-closer-pairs.js +19 -0
- package/node/floyd-warshall/get-hole-closer-pairs.js.map +1 -0
- package/node/geometry/circle.js.map +1 -1
- package/node/geometry/get-bounding-box-.d.ts +2 -2
- package/node/geometry/get-bounding-box-.js +2 -2
- package/node/geometry/get-bounding-box-.js.map +1 -1
- package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
- package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
- package/node/index.d.ts +50 -40
- package/node/index.js +34 -37
- package/node/index.js.map +1 -1
- package/node/loop/get-max-coordinate.js.map +1 -1
- package/node/mat/{add-to-cp-graph.d.ts → add-to-cp-tree.d.ts} +6 -4
- package/node/mat/add-to-cp-tree.js +34 -0
- package/node/mat/add-to-cp-tree.js.map +1 -0
- package/node/mat/connect-hole-closers.d.ts +3 -0
- package/node/mat/connect-hole-closers.js +5 -0
- package/node/mat/connect-hole-closers.js.map +1 -0
- package/node/mat/create-new-cp-tree.d.ts +1 -1
- package/node/mat/create-new-cp-tree.js +2 -1
- package/node/mat/create-new-cp-tree.js.map +1 -1
- package/node/mat/{bezier-piece.d.ts → curve-piece.d.ts} +2 -2
- package/node/mat/curve-piece.js +2 -0
- package/node/mat/curve-piece.js.map +1 -0
- package/node/mat/get-boundary-piece-beziers.d.ts +3 -2
- package/node/mat/get-boundary-piece-beziers.js +2 -3
- package/node/mat/get-boundary-piece-beziers.js.map +1 -1
- package/node/mat/get-branches.d.ts +1 -10
- package/node/mat/get-branches.js +23 -60
- package/node/mat/get-branches.js.map +1 -1
- package/node/mat/get-closeby-cp-if-exist.d.ts +17 -0
- package/node/mat/{is-another-cp-closeby.js → get-closeby-cp-if-exist.js} +17 -13
- package/node/mat/get-closeby-cp-if-exist.js.map +1 -0
- package/node/mat/get-cp-node-to-left-or-same.d.ts +18 -0
- package/node/mat/get-cp-node-to-left-or-same.js +29 -0
- package/node/mat/get-cp-node-to-left-or-same.js.map +1 -0
- package/node/mat/get-largest-vertex.d.ts +1 -1
- package/node/mat/get-largest-vertex.js +3 -1
- package/node/mat/get-largest-vertex.js.map +1 -1
- package/node/mat/mat-meta.d.ts +24 -0
- package/node/mat/mat-meta.js +2 -0
- package/node/mat/mat-meta.js.map +1 -0
- package/node/mat/mat.d.ts +6 -6
- package/node/mat/simplify-mat.d.ts +2 -2
- package/node/mat/simplify-mat.js +31 -20
- package/node/mat/simplify-mat.js.map +1 -1
- package/node/mat/trim-mat.js +8 -2
- package/node/mat/trim-mat.js.map +1 -1
- package/node/memoize-primitive.d.ts +11 -0
- package/node/memoize-primitive.js +25 -0
- package/node/memoize-primitive.js.map +1 -0
- package/node/point-on-shape/calc-pos-order.js +1 -2
- package/node/point-on-shape/calc-pos-order.js.map +1 -1
- package/node/point-on-shape/compare-poss.js.map +1 -1
- package/node/point-on-shape/create-pos.d.ts +1 -1
- package/node/point-on-shape/create-pos.js +2 -3
- package/node/point-on-shape/create-pos.js.map +1 -1
- package/node/point-on-shape/get-osculating-circle.d.ts +3 -1
- package/node/point-on-shape/get-osculating-circle.js +6 -2
- package/node/point-on-shape/get-osculating-circle.js.map +1 -1
- package/node/point-on-shape/get-pos-corner.js +4 -2
- package/node/point-on-shape/get-pos-corner.js.map +1 -1
- package/node/point-on-shape/is-pos-quite-sharp-corner.js.map +1 -1
- package/node/point-on-shape/is-pos-sharp-corner.js.map +1 -1
- package/node/point-on-shape/point-on-shape.d.ts +1 -1
- package/node/sat/add-debug-info.d.ts +1 -2
- package/node/sat/add-debug-info.js +1 -2
- package/node/sat/add-debug-info.js.map +1 -1
- package/node/sat/cull-non-cycles.js +2 -2
- package/node/sat/cull-non-cycles.js.map +1 -1
- package/node/sat/cull.d.ts +2 -2
- package/node/sat/cull.js +40 -95
- package/node/sat/cull.js.map +1 -1
- package/node/sat/get-leaves.js +6 -4
- package/node/sat/get-leaves.js.map +1 -1
- package/node/sat/get-sat-culls.d.ts +4 -0
- package/node/sat/get-sat-culls.js +33 -0
- package/node/sat/get-sat-culls.js.map +1 -0
- package/node/sat/to-scale-axis.d.ts +1 -2
- package/node/sat/to-scale-axis.js +14 -52
- package/node/sat/to-scale-axis.js.map +1 -1
- package/node/svg/get-loop-bounds.js.map +1 -1
- package/node/svg/get-min-y-pos.d.ts +1 -1
- package/node/svg/get-shape-bounds.js.map +1 -1
- package/node/sweep-line/sweep-line.js.map +1 -1
- package/node/utils/dual-set.d.ts +27 -0
- package/node/utils/dual-set.js +55 -0
- package/node/utils/dual-set.js.map +1 -0
- package/node/utils/sleep.d.ts +2 -0
- package/node/utils/sleep.js +5 -0
- package/node/utils/sleep.js.map +1 -0
- package/node/utils/sum.d.ts +2 -0
- package/node/utils/sum.js +9 -0
- package/node/utils/sum.js.map +1 -0
- package/node/utils/tri-map.d.ts +27 -0
- package/node/utils/tri-map.js +49 -0
- package/node/utils/tri-map.js.map +1 -0
- package/node/vertex/remove-vertex.d.ts +5 -0
- package/node/vertex/remove-vertex.js +12 -0
- package/node/vertex/remove-vertex.js.map +1 -0
- package/package.json +21 -25
- package/src/add-n-prong.ts/join-spokes.ts +39 -0
- package/src/bezier/fit-quads-to-cubic.ts +103 -0
- package/src/bezier/total-curvature.ts +8 -0
- package/src/bezier/total-length.ts +8 -0
- package/src/closest-boundary-point/closest-points-on-curve-precise.ts +62 -62
- package/src/closest-boundary-point/cull-bezier-pieces.ts +2 -2
- package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +4 -4
- package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +2 -2
- package/src/closest-boundary-point/foot-and-endpoint-info.ts +2 -2
- package/src/closest-boundary-point/get-best-distance-squared.ts +2 -2
- package/src/closest-boundary-point/get-close-boundary-points-certified.ts +8 -3
- package/src/closest-boundary-point/get-closest-boundary-point-certified.ts +56 -56
- package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +24 -6
- package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +12 -6
- package/src/corner/compare-curvatures-at-interface.ts +49 -69
- package/src/corner/corner.ts +1 -1
- package/src/corner/get-corner.ts +9 -23
- package/src/corner/get-interface-ccw.ts +96 -60
- package/src/cp-node/cp-node-fs.ts +234 -0
- package/src/cp-node/cp-node.ts +27 -348
- package/src/cp-node/fs/add-distance-from.ts +50 -0
- package/src/cp-node/{clone.ts → fs/clone.ts} +27 -17
- package/src/cp-node/fs/cp-nodes-to-boundary-beziers.ts +10 -0
- package/src/cp-node/fs/create-cp-node.ts +21 -0
- package/src/cp-node/{enhance-cp-node.ts → fs/enhance-cp-node.ts} +10 -4
- package/src/cp-node/fs/find-first.ts +25 -0
- package/src/cp-node/fs/get-all-between.ts +44 -0
- package/src/cp-node/fs/get-all-on-circle.ts +23 -0
- package/src/cp-node/fs/get-all-on-loop.ts +18 -0
- package/src/cp-node/fs/get-all-vertices.ts +17 -0
- package/src/cp-node/fs/get-angle-between-mat-curves.ts +33 -0
- package/src/cp-node/fs/get-avg-speed.ts +31 -0
- package/src/cp-node/{get-boundary-bezier-parts-to-next.ts → fs/get-boundary-bezier-parts-to-next.ts} +2 -9
- package/src/cp-node/fs/get-boundary-beziers-between.ts +31 -0
- package/src/cp-node/{get-boundary-beziers-to-next.ts → fs/get-boundary-beziers-to-next.ts} +5 -10
- package/src/cp-node/fs/get-boundary-distance-to-next.ts +16 -0
- package/src/cp-node/fs/get-branch-beziers.ts +18 -0
- package/src/cp-node/fs/get-branch.ts +43 -0
- package/src/cp-node/fs/get-children.ts +18 -0
- package/src/cp-node/{get-cp-node-ordering.ts → fs/get-cp-node-ordering.ts} +5 -1
- package/src/cp-node/fs/get-distance-between.ts +16 -0
- package/src/cp-node/fs/get-distance-to-next.ts +19 -0
- package/src/cp-node/fs/get-edge-direction.ts +64 -0
- package/src/cp-node/fs/get-first-exit.ts +22 -0
- package/src/cp-node/fs/get-hole-closers.ts +13 -0
- package/src/cp-node/fs/get-implied-boundary-bezier-between.ts +78 -0
- package/src/cp-node/fs/get-mat-curve-between.ts +74 -0
- package/src/cp-node/fs/get-mat-curve-to-next.ts +13 -0
- package/src/cp-node/fs/get-mat-curves-between.ts +22 -0
- package/src/cp-node/fs/get-non-terminating-on-circle.ts +24 -0
- package/src/cp-node/fs/get-prong-count.ts +18 -0
- package/src/cp-node/fs/get-real-prong-count.ts +14 -0
- package/src/cp-node/fs/get-salience.ts +28 -0
- package/src/cp-node/fs/get-smoothed-speed.ts +97 -0
- package/src/cp-node/fs/get-smoothed.ts +62 -0
- package/src/cp-node/fs/get-speed.ts +61 -0
- package/src/cp-node/fs/get-terminating-on-circle.ts +24 -0
- package/src/cp-node/fs/get-vertex-forward-children.ts +22 -0
- package/src/cp-node/fs/insert-cp-node.ts +40 -0
- package/src/cp-node/fs/is-fully-terminating.ts +13 -0
- package/src/cp-node/fs/is-on-same-circle.ts +16 -0
- package/src/cp-node/fs/is-one-prong.ts +21 -0
- package/src/cp-node/fs/is-order-correct.ts +36 -0
- package/src/cp-node/fs/is-sharp.ts +9 -0
- package/src/cp-node/fs/is-single-3-prong.ts +15 -0
- package/src/cp-node/fs/is-special.ts +16 -0
- package/src/cp-node/fs/is-terminating.ts +9 -0
- package/src/cp-node/fs/is-trivial.ts +16 -0
- package/src/cp-node/fs/is-two-prong.ts +10 -0
- package/src/cp-node/fs/is-vertex-special.ts +8 -0
- package/src/cp-node/fs/is-vertex.ts +12 -0
- package/src/cp-node/fs/iterate-all-on-loop.ts +15 -0
- package/src/cp-node/fs/remove-cp-node.ts +20 -0
- package/src/cp-node/fs/traverse-all-forward.ts +24 -0
- package/src/cp-node/{traverse-cp.ts → fs/traverse-cp.ts} +3 -11
- package/src/cp-node/fs/traverse-edges.ts +71 -0
- package/src/cp-node/fs/traverse-vertices.ts +32 -0
- package/src/curve/curve.ts +1 -16
- package/src/dbscan/dbscan.ts +91 -0
- package/src/debug/debug-elem-types.ts +37 -29
- package/src/debug/debug.ts +20 -25
- package/src/debug/functions/check-ordering.ts +97 -0
- package/src/debug/functions/cmp-cp-on-delta.ts +54 -0
- package/src/debug/functions/draw/draw-bezier-pieces.ts +35 -0
- package/src/debug/functions/draw/draw-beziers-as-single-path.ts +40 -0
- package/src/debug/functions/draw/draw-disk.ts +34 -0
- package/src/debug/functions/draw/xmlns.ts +5 -0
- package/src/debug/functions/draw-elem/branch.ts +0 -1
- package/src/debug/functions/draw-elem/draw-branch.ts +39 -0
- package/src/debug/functions/draw-elem/draw-cp-node.ts +47 -0
- package/src/debug/functions/draw-elem/draw-cull.ts +21 -0
- package/src/debug/functions/draw-elem/draw-dull-corner.ts +21 -0
- package/src/debug/functions/draw-elem/draw-elem.ts +51 -48
- package/src/debug/functions/draw-elem/draw-leaves.ts +51 -0
- package/src/debug/functions/draw-elem/draw-loop.ts +16 -0
- package/src/debug/functions/draw-elem/draw-loops.ts +10 -0
- package/src/debug/functions/draw-elem/draw-loose-bounding-box.ts +21 -0
- package/src/debug/functions/draw-elem/draw-mat.ts +53 -0
- package/src/debug/functions/draw-elem/draw-max-vertex.ts +15 -0
- package/src/debug/functions/draw-elem/draw-min-y.ts +18 -0
- package/src/debug/functions/draw-elem/draw-one-prong-at-dull-corner.ts +26 -0
- package/src/debug/functions/draw-elem/draw-one-prong.ts +23 -0
- package/src/debug/functions/draw-elem/draw-sharp-corner.ts +20 -0
- package/src/debug/functions/draw-elem/draw-speed.ts +35 -0
- package/src/debug/functions/draw-elem/draw-three-prong.ts +44 -0
- package/src/debug/functions/draw-elem/draw-tight-bounding-box.ts +18 -0
- package/src/debug/functions/draw-elem/draw-two-prong.ts +67 -0
- package/src/debug/functions/draw-elem/draw-vertex.ts +30 -0
- package/src/debug/two-prong-for-debugging.ts +2 -2
- package/src/dijkstra/dijkstra.ts +418 -0
- package/src/find-2-prong/add-1-prong.ts +15 -22
- package/src/find-2-prong/add-2-prong.ts +68 -173
- package/src/find-2-prong/add-debug-info.ts +21 -25
- package/src/find-2-prong/calc-seperation-tolerance.ts +121 -0
- package/src/find-2-prong/cull-bezier-pieces.ts +4 -4
- package/src/find-2-prong/find-2-prong.ts +87 -71
- package/src/find-2-prong/find-and-add-2-prong.ts +30 -0
- package/src/find-2-prong/find-and-add-2-prongs-on-all-loops.ts +37 -0
- package/src/find-2-prong/find-and-add-2-prongs.ts +20 -33
- package/src/find-2-prong/find-and-add-hole-closing-2-prongs.ts +13 -14
- package/src/find-2-prong/get-initial-bezier-pieces.ts +23 -31
- package/src/find-2-prong/reduce-radius.ts +13 -24
- package/src/find-3-prong.ts/array-set.ts +47 -0
- package/src/find-3-prong.ts/calc-better-x.ts +7 -7
- package/src/find-3-prong.ts/calc-initial-3-prong-center.ts +8 -3
- package/src/find-3-prong.ts/find-3-prong-for-delta3s.ts +28 -42
- package/src/find-3-prong.ts/find-3-prong.ts +7 -107
- package/src/find-3-prong.ts/find-and-add-3-prong.ts +61 -0
- package/src/find-3-prong.ts/find-and-add-3-prongs-on-loop.ts +89 -0
- package/src/find-3-prong.ts/find-and-add-3-prongs.ts +31 -81
- package/src/find-3-prong.ts/get-closest-points.ts +3 -3
- package/src/find-mat/add-2-prongs-by-error.ts +122 -0
- package/src/find-mat/clip-options.ts +38 -0
- package/src/find-mat/cp-node-for-insertion.ts +13 -0
- package/src/find-mat/create-initial-cp-tree.ts +59 -0
- package/src/find-mat/find-mat.ts +50 -38
- package/src/find-mat/find-mats.ts +39 -22
- package/src/find-mat/get-dull-corners-on-loop.ts +34 -0
- package/src/find-mat/get-for-1-prongs-on-loop.ts +25 -6
- package/src/find-mat/get-for-2-prongs-on-loop.ts +16 -8
- package/src/find-mat/get-half-angles.ts +95 -0
- package/src/find-mat/get-meta.ts +115 -0
- package/src/find-mat/get-sharp-corners.ts +3 -2
- package/src/find-mat/get-total-by.ts +5 -5
- package/src/find-mat/mat-options.ts +140 -0
- package/src/floyd-warshall/floyd-warshall.ts +89 -0
- package/src/floyd-warshall/get-graph.ts +73 -0
- package/src/floyd-warshall/get-hole-closer-pairs.ts +27 -0
- package/src/geometry/get-bounding-box-.ts +3 -2
- package/src/heap/heap.ts +96 -0
- package/src/index.ts +52 -133
- package/src/mat/add-to-cp-tree.ts +56 -0
- package/src/mat/clone-mat.ts +14 -0
- package/src/mat/clone-meta.ts +17 -0
- package/src/mat/connect-hole-closers.ts +9 -0
- package/src/mat/create-new-cp-tree.ts +4 -1
- package/src/mat/{bezier-piece.ts → curve-piece.ts} +2 -2
- package/src/mat/get-boundary-piece-beziers.ts +10 -11
- package/src/mat/get-branches.ts +25 -75
- package/src/mat/get-closeby-cp-if-exist.ts +75 -0
- package/src/mat/get-cp-node-to-left-or-same.ts +43 -0
- package/src/mat/get-edges-as-array.ts +12 -12
- package/src/mat/get-largest-3-prong.ts +21 -0
- package/src/mat/get-largest-vertex.ts +4 -1
- package/src/mat/mat-meta.ts +31 -0
- package/src/mat/mat.ts +7 -7
- package/src/mat/simplify-mat.ts +39 -23
- package/src/mat/trim-mat.ts +8 -2
- package/src/memoize-primitive.ts +31 -0
- package/src/point-on-shape/calc-pos-order.ts +1 -2
- package/src/point-on-shape/create-pos.ts +2 -3
- package/src/point-on-shape/get-osculating-circle.ts +4 -1
- package/src/point-on-shape/get-pos-corner.ts +10 -6
- package/src/point-on-shape/is-pos-dull-corner.ts +6 -4
- package/src/point-on-shape/point-on-shape.ts +1 -1
- package/src/sat/add-debug-info.ts +0 -4
- package/src/sat/cull-by-salience.ts +115 -0
- package/src/sat/cull-non-cycles.ts +4 -2
- package/src/sat/cull.ts +48 -99
- package/src/sat/get-leaves.ts +9 -4
- package/src/sat/get-sat-culls.ts +46 -0
- package/src/sat/to-scale-axis.ts +14 -70
- package/src/svg/get-extreme.ts +1 -1
- package/src/utils/bezier-piece-to-bezier.ts +13 -0
- package/src/utils/deg-to-rad.ts +7 -0
- package/src/utils/dual-map.ts +55 -0
- package/src/utils/dual-set.ts +82 -0
- package/src/utils/rad-to-deg.ts +7 -0
- package/src/utils/rotate.ts +17 -0
- package/src/utils/sleep.ts +7 -0
- package/src/utils/sum.ts +12 -0
- package/src/utils/tri-map.ts +76 -0
- package/src/vertex/remove-vertex.ts +22 -0
- package/webpack.config.cjs +38 -36
- package/browser/index.js +0 -33670
- package/node/closest-boundary-point/get-closest-boundary-point-certified.d.ts +0 -15
- package/node/closest-boundary-point/get-closest-boundary-point-certified.js +0 -42
- package/node/closest-boundary-point/get-closest-boundary-point-certified.js.map +0 -1
- package/node/cp-node/clone.js.map +0 -1
- package/node/cp-node/create-cp-node.d.ts +0 -4
- package/node/cp-node/create-cp-node.js +0 -8
- package/node/cp-node/create-cp-node.js.map +0 -1
- package/node/cp-node/enhance-cp-node.js.map +0 -1
- package/node/cp-node/get-boundary-bezier-parts-to-next.js.map +0 -1
- package/node/cp-node/get-boundary-beziers-to-next.d.ts +0 -8
- package/node/cp-node/get-boundary-beziers-to-next.js.map +0 -1
- package/node/cp-node/get-cp-node-ordering.js.map +0 -1
- package/node/cp-node/get-curve-to-next.d.ts +0 -9
- package/node/cp-node/get-curve-to-next.js +0 -12
- package/node/cp-node/get-curve-to-next.js.map +0 -1
- package/node/cp-node/remove.d.ts +0 -9
- package/node/cp-node/remove.js +0 -20
- package/node/cp-node/remove.js.map +0 -1
- package/node/cp-node/traverse-cp.d.ts +0 -12
- package/node/cp-node/traverse-cp.js.map +0 -1
- package/node/cp-node/traverse-edges.d.ts +0 -10
- package/node/cp-node/traverse-edges.js +0 -23
- package/node/cp-node/traverse-edges.js.map +0 -1
- package/node/cp-node/traverse-vertices.d.ts +0 -12
- package/node/cp-node/traverse-vertices.js +0 -29
- package/node/cp-node/traverse-vertices.js.map +0 -1
- package/node/debug/functions/draw-elem/branch.d.ts +0 -4
- package/node/debug/functions/draw-elem/branch.js +0 -24
- package/node/debug/functions/draw-elem/branch.js.map +0 -1
- package/node/debug/functions/draw-elem/culls.d.ts +0 -4
- package/node/debug/functions/draw-elem/culls.js +0 -22
- package/node/debug/functions/draw-elem/culls.js.map +0 -1
- package/node/debug/functions/draw-elem/dull-corner.js.map +0 -1
- package/node/debug/functions/draw-elem/leaves.d.ts +0 -4
- package/node/debug/functions/draw-elem/leaves.js +0 -13
- package/node/debug/functions/draw-elem/leaves.js.map +0 -1
- package/node/debug/functions/draw-elem/loop.js.map +0 -1
- package/node/debug/functions/draw-elem/loops.js.map +0 -1
- package/node/debug/functions/draw-elem/loose-bounding-box.js.map +0 -1
- package/node/debug/functions/draw-elem/mat.d.ts +0 -4
- package/node/debug/functions/draw-elem/mat.js +0 -33
- package/node/debug/functions/draw-elem/mat.js.map +0 -1
- package/node/debug/functions/draw-elem/max-vertex.js.map +0 -1
- package/node/debug/functions/draw-elem/min-y.js.map +0 -1
- package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js.map +0 -1
- package/node/debug/functions/draw-elem/one-prong.js.map +0 -1
- package/node/debug/functions/draw-elem/sharp-corner.js.map +0 -1
- package/node/debug/functions/draw-elem/three-prong.d.ts +0 -4
- package/node/debug/functions/draw-elem/three-prong.js +0 -15
- package/node/debug/functions/draw-elem/three-prong.js.map +0 -1
- package/node/debug/functions/draw-elem/tight-bounding-box.js.map +0 -1
- package/node/debug/functions/draw-elem/two-prong.d.ts +0 -4
- package/node/debug/functions/draw-elem/two-prong.js +0 -36
- package/node/debug/functions/draw-elem/two-prong.js.map +0 -1
- package/node/debug/functions/draw-elem/vertex.js +0 -30
- package/node/debug/functions/draw-elem/vertex.js.map +0 -1
- package/node/debug/functions/three-prong.d.ts +0 -11
- package/node/debug/functions/three-prong.js +0 -182
- package/node/debug/functions/three-prong.js.map +0 -1
- package/node/debug/functions/two-prong.d.ts +0 -24
- package/node/debug/functions/two-prong.js +0 -116
- package/node/debug/functions/two-prong.js.map +0 -1
- package/node/debug/three-prong-for-debugging.d.ts +0 -31
- package/node/debug/three-prong-for-debugging.js +0 -21
- package/node/debug/three-prong-for-debugging.js.map +0 -1
- package/node/debug/two-prong-for-debugging.d.ts +0 -26
- package/node/debug/two-prong-for-debugging.js +0 -2
- package/node/debug/two-prong-for-debugging.js.map +0 -1
- package/node/find-2-prong/add-debug-info.d.ts +0 -8
- package/node/find-2-prong/add-debug-info.js +0 -23
- package/node/find-2-prong/add-debug-info.js.map +0 -1
- package/node/find-2-prong/find-and-add-2-prongs-on-all-paths.d.ts +0 -15
- package/node/find-2-prong/find-and-add-2-prongs-on-all-paths.js +0 -22
- package/node/find-2-prong/find-and-add-2-prongs-on-all-paths.js.map +0 -1
- package/node/find-2-prong/x-for-debugging.d.ts +0 -9
- package/node/find-2-prong/x-for-debugging.js +0 -2
- package/node/find-2-prong/x-for-debugging.js.map +0 -1
- package/node/find-3-prong.ts/add-3-prong.d.ts +0 -24
- package/node/find-3-prong.ts/add-3-prong.js +0 -82
- package/node/find-3-prong.ts/add-3-prong.js.map +0 -1
- package/node/find-3-prong.ts/find-and-add-all-3-prongs.d.ts +0 -13
- package/node/find-3-prong.ts/find-and-add-all-3-prongs.js +0 -66
- package/node/find-3-prong.ts/find-and-add-all-3-prongs.js.map +0 -1
- package/node/find-mat/add-debug-info.d.ts +0 -9
- package/node/find-mat/add-debug-info.js +0 -68
- package/node/find-mat/add-debug-info.js.map +0 -1
- package/node/find-mat/create-initial-cp-graph.js.map +0 -1
- package/node/find-mat/fix-ordering.d.ts +0 -8
- package/node/find-mat/fix-ordering.js +0 -59
- package/node/find-mat/fix-ordering.js.map +0 -1
- package/node/find-mat/get-dull-corners.js.map +0 -1
- package/node/find-mat/get-size-params.d.ts +0 -7
- package/node/find-mat/get-size-params.js +0 -33
- package/node/find-mat/get-size-params.js.map +0 -1
- package/node/get-curve/get-curve-between.d.ts +0 -9
- package/node/get-curve/get-curve-between.js.map +0 -1
- package/node/get-curve/get-edge-direction.d.ts +0 -9
- package/node/get-curve/get-edge-direction.js.map +0 -1
- package/node/mat/add-to-cp-graph.js +0 -33
- package/node/mat/add-to-cp-graph.js.map +0 -1
- package/node/mat/bezier-piece.js +0 -2
- package/node/mat/bezier-piece.js.map +0 -1
- package/node/mat/elem-type-two-prong.d.ts +0 -3
- package/node/mat/elem-type-two-prong.js +0 -2
- package/node/mat/elem-type-two-prong.js.map +0 -1
- package/node/mat/get-neighboring-cps.d.ts +0 -16
- package/node/mat/get-neighboring-cps.js +0 -33
- package/node/mat/get-neighboring-cps.js.map +0 -1
- package/node/mat/get-two-prong-type.d.ts +0 -5
- package/node/mat/get-two-prong-type.js +0 -9
- package/node/mat/get-two-prong-type.js.map +0 -1
- package/node/mat/is-another-cp-closeby.d.ts +0 -21
- package/node/mat/is-another-cp-closeby.js.map +0 -1
- package/node/mat/simplify-mat-map-only.d.ts +0 -23
- package/node/mat/simplify-mat-map-only.js +0 -82
- package/node/mat/simplify-mat-map-only.js.map +0 -1
- package/node/point-on-shape/is-pos-dull-corner.d.ts +0 -6
- package/node/point-on-shape/is-pos-dull-corner.js +0 -14
- package/node/point-on-shape/is-pos-dull-corner.js.map +0 -1
- package/src/cp-node/create-cp-node.ts +0 -21
- package/src/cp-node/get-curve-to-next.ts +0 -16
- package/src/cp-node/remove.ts +0 -27
- package/src/cp-node/traverse-edges.ts +0 -29
- package/src/cp-node/traverse-vertices.ts +0 -37
- package/src/sat/t-tree.ts +0 -8
- package/src/sat/traverse-spacial-tree.ts +0 -34
- /package/{test → __tests__}/lib-load.spec.ts +0 -0
- /package/node/debug/functions/draw-elem/{dull-corner.d.ts → draw-dull-corner.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{loop.d.ts → draw-loop.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{loops.d.ts → draw-loops.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{loose-bounding-box.d.ts → draw-loose-bounding-box.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{max-vertex.d.ts → draw-max-vertex.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{min-y.d.ts → draw-min-y.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{one-prong-at-dull-corner.d.ts → draw-one-prong-at-dull-corner.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{one-prong.d.ts → draw-one-prong.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{sharp-corner.d.ts → draw-sharp-corner.d.ts} +0 -0
- /package/node/debug/functions/draw-elem/{tight-bounding-box.d.ts → draw-tight-bounding-box.d.ts} +0 -0
- /package/node/find-mat/{get-dull-corners.d.ts → get-dull-corners-on-loop.d.ts} +0 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { compareCps } from "../contact-point/contact-point.js";
|
|
2
|
+
import { CpNode } from "./cp-node.js";
|
|
3
|
+
import { getHoleClosers } from "./fs/get-hole-closers.js";
|
|
4
|
+
import { getSpeed } from "./fs/get-speed.js";
|
|
5
|
+
import { getSmoothedSpeed$ } from "./fs/get-smoothed-speed.js";
|
|
6
|
+
import { enhanceCpNode } from "./fs/enhance-cp-node.js";
|
|
7
|
+
import { traverseCp } from './fs/traverse-cp.js';
|
|
8
|
+
import { traverseEdges } from './fs/traverse-edges.js';
|
|
9
|
+
import { traverseVertices } from './fs/traverse-vertices.js';
|
|
10
|
+
import { clone } from './fs/clone.js';
|
|
11
|
+
import { getBoundaryBezierPartsToNext } from './fs/get-boundary-bezier-parts-to-next.js';
|
|
12
|
+
import { getBoundaryBeziersToNext } from './fs/get-boundary-beziers-to-next.js';
|
|
13
|
+
import { removeVertex } from '../vertex/remove-vertex.js';
|
|
14
|
+
import { getProngCount } from './fs/get-prong-count.js';
|
|
15
|
+
import { getChildren } from './fs/get-children.js';
|
|
16
|
+
import { getAllOnLoop } from './fs/get-all-on-loop.js';
|
|
17
|
+
import { getAllOnCircle } from './fs/get-all-on-circle.js';
|
|
18
|
+
import { getMatCurveToNext } from './fs/get-mat-curve-to-next.js';
|
|
19
|
+
import { getFirstExit } from './fs/get-first-exit.js';
|
|
20
|
+
import { getRealProngCount } from './fs/get-real-prong-count.js';
|
|
21
|
+
import { isFullyTerminating } from './fs/is-fully-terminating.js';
|
|
22
|
+
import { isOnSameCircle } from './fs/is-on-same-circle.js';
|
|
23
|
+
import { isOneProng } from './fs/is-one-prong.js';
|
|
24
|
+
import { isSharp } from './fs/is-sharp.js';
|
|
25
|
+
import { isTerminating } from './fs/is-terminating.js';
|
|
26
|
+
import { getVertexForwardChildren } from './fs/get-vertex-forward-children.js';
|
|
27
|
+
import { isTwoProng } from './fs/is-two-prong.js';
|
|
28
|
+
import { getBranch } from './fs/get-branch.js';
|
|
29
|
+
import { getBranchBeziers } from './fs/get-branch-beziers.js';
|
|
30
|
+
import { getSalience } from './fs/get-salience.js';
|
|
31
|
+
import { getMatCurveBetween } from './fs/get-mat-curve-between.js';
|
|
32
|
+
import { getEdgeDirection } from './fs/get-edge-direction.js';
|
|
33
|
+
import { getBoundaryBeziersBetween } from './fs/get-boundary-beziers-between.js';
|
|
34
|
+
import { getMatCurvesBetween } from './fs/get-mat-curves-between.js';
|
|
35
|
+
import { getInitialDegAngleBetweenMatCurves } from "./fs/get-angle-between-mat-curves.js";
|
|
36
|
+
import { getAllVertices } from "./fs/get-all-vertices.js";
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
const cpNodeComparator = (a: CpNode, b: CpNode) => compareCps(a.cp, b.cp);
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
const CpNodeFs = {
|
|
43
|
+
/**
|
|
44
|
+
* Returns the children of this [[CpNode]] when seen as a MAT edge. Only
|
|
45
|
+
* children in a 'forward' direction are returned. These include all edges
|
|
46
|
+
* except the 'backward' edge given by [[prevOnCircle]], even terminating
|
|
47
|
+
* edges.
|
|
48
|
+
*/
|
|
49
|
+
getChildren,
|
|
50
|
+
/**
|
|
51
|
+
* Similar to [[getChildren]] but returns the child nodes of the tree when
|
|
52
|
+
* [[CpNode]] is seen as a MAT vertex point (as opposed to edge). In this
|
|
53
|
+
* way the dual graph of the tree can easily be traversed - see e.g.
|
|
54
|
+
* [[traverseVertices]]. Generally, however, traversing the edges is
|
|
55
|
+
* preferred as it returns the entire Medial Axis (by utilizing
|
|
56
|
+
* [[getMatCurveToNext]] on each returned edge).
|
|
57
|
+
*/
|
|
58
|
+
getVertexForwardChildren,
|
|
59
|
+
/**
|
|
60
|
+
* Returns all [[CpNode]]s on the MAT that this [[CpNode]] is part of
|
|
61
|
+
* starting from the current one and going anti-clockwise around the shape.
|
|
62
|
+
*/
|
|
63
|
+
getAllOnLoop,
|
|
64
|
+
/**
|
|
65
|
+
* Return this (except if exclThis is truthy) and the the other CpNodes
|
|
66
|
+
* around the maximal disk vertex circle in an anti-clockwise order.
|
|
67
|
+
* @param exclThis If true the returned array does not include this
|
|
68
|
+
* [[CpNode]].
|
|
69
|
+
*/
|
|
70
|
+
getAllOnCircle,
|
|
71
|
+
/**
|
|
72
|
+
* Returns true if the 2 given [[CpNode]]s are on the same maximal disk
|
|
73
|
+
* circle.
|
|
74
|
+
* @param cpNode1 A [[CpNode]].
|
|
75
|
+
* @param cpNode2 Another [[CpNode]]
|
|
76
|
+
*/
|
|
77
|
+
isOnSameCircle,
|
|
78
|
+
/**
|
|
79
|
+
* Returns true if this [[CpNode]] is terminating, i.e. implies a leaf MAT
|
|
80
|
+
* vertex.
|
|
81
|
+
*
|
|
82
|
+
* This is always the case for sharp corners and maximal disks with
|
|
83
|
+
* a single contact point. Note, however, that even in these cases there are
|
|
84
|
+
* two contact points stored (sitting 'on top' of each other) for the
|
|
85
|
+
* maximal disk. It can be seen as a limiting case of a two-prong where the
|
|
86
|
+
* distance between two of the contact points tend to zero. One point
|
|
87
|
+
* (represented by a [[CpNode]] of course) will be terminating with the
|
|
88
|
+
* other point being its [[next]], whereas the other point will *not* be
|
|
89
|
+
* terminating and 'points' back into the shape.
|
|
90
|
+
*/
|
|
91
|
+
isTerminating,
|
|
92
|
+
/**
|
|
93
|
+
* Like isTerminating() but only returns true if all cpNodes on the circle
|
|
94
|
+
* (except this.prevOnCircle) is terminating.
|
|
95
|
+
*/
|
|
96
|
+
isFullyTerminating,
|
|
97
|
+
/**
|
|
98
|
+
* Returns the first [[CpNode]] (from this one by successively applying
|
|
99
|
+
* .nextOnCircle) that exits the circle.
|
|
100
|
+
*/
|
|
101
|
+
getFirstExit,
|
|
102
|
+
/**
|
|
103
|
+
* Returns true if this [[CpNode]] represents a sharp corner, i.e. the
|
|
104
|
+
* limiting case of a two-prong having zero radius.
|
|
105
|
+
*
|
|
106
|
+
* Note that two [[CpNode]]s are stored for each sharp corner, one being
|
|
107
|
+
* terminating and one not. See [[isTerminating]] for more details.
|
|
108
|
+
*/
|
|
109
|
+
isSharp,
|
|
110
|
+
/**
|
|
111
|
+
* Returns true if this [[CpNode]]'s maximal disk has only one contact point
|
|
112
|
+
* on the shape boundary (up to planar coordinates). These includes sharp
|
|
113
|
+
* corners.
|
|
114
|
+
*
|
|
115
|
+
* Note, however, that two [[CpNode]]s are stored for each such point to
|
|
116
|
+
* preserve symmetry - see [[isTerminating]] for more details.
|
|
117
|
+
*/
|
|
118
|
+
isOneProng,
|
|
119
|
+
/**
|
|
120
|
+
* Returns the number of contact points on the maximal disk circle implied
|
|
121
|
+
* by this [[CpNode]].
|
|
122
|
+
*
|
|
123
|
+
* Note, however, that even one-prongs and sharp corners will return 2 (see
|
|
124
|
+
* [[isTerminating]] for more details); if this is not desired use
|
|
125
|
+
* [[getRealProngCount]] instead which will return 1 in these cases.
|
|
126
|
+
*/
|
|
127
|
+
getProngCount,
|
|
128
|
+
/**
|
|
129
|
+
* Returns the number of contact points (up to planar coordinates) on the
|
|
130
|
+
* maximal disk circle implied by this [[CpNode]].
|
|
131
|
+
*
|
|
132
|
+
* See also [[getProngCount]].
|
|
133
|
+
*/
|
|
134
|
+
getRealProngCount,
|
|
135
|
+
/**
|
|
136
|
+
* Primarily for internal use.
|
|
137
|
+
*
|
|
138
|
+
* Compares the order of two [[CpNode]]s. The order is cyclic and depends
|
|
139
|
+
* on a [[CpNode]]'s relative position along the shape boundary.
|
|
140
|
+
*/
|
|
141
|
+
cpNodeComparator,
|
|
142
|
+
/**
|
|
143
|
+
* For debugging
|
|
144
|
+
* @param cpNode
|
|
145
|
+
*/
|
|
146
|
+
enhanceCpNode,
|
|
147
|
+
/**
|
|
148
|
+
* @internal
|
|
149
|
+
*
|
|
150
|
+
* Traverses the shape from the given `CpNode` going around the shortest path
|
|
151
|
+
* so that only a piece of the shape is traversed and returns the visited
|
|
152
|
+
* `CpNode`s (starting from the given `CpNode`).
|
|
153
|
+
*
|
|
154
|
+
* @param cpStart The `CpNode` from where to start the traversal.
|
|
155
|
+
*/
|
|
156
|
+
traverseCp,
|
|
157
|
+
/**
|
|
158
|
+
* Traverses all edges (depth first) of the given MAT tree starting at the given
|
|
159
|
+
* vertex (represented by a [[CpNode]]).
|
|
160
|
+
* @param cpNode Any [[CpNode]] representing the start vertex.
|
|
161
|
+
* @param traverseEdgesCallback A callback function for each CpNode representing the vertex at the
|
|
162
|
+
* start of an edge.
|
|
163
|
+
*/
|
|
164
|
+
traverseEdges,
|
|
165
|
+
/**
|
|
166
|
+
* Traverses the MAT tree and calls the given callback function for each vertex
|
|
167
|
+
* (represented by a [[CpNode]]) on the MAT.
|
|
168
|
+
*
|
|
169
|
+
* It is usually preferable to use [[traverseEdges]] as it allows for the
|
|
170
|
+
* traversal of all the smooth curves representing the MAT.
|
|
171
|
+
* @param cpNode Any [[CpNode]] representing the start vertex.
|
|
172
|
+
* @param traverseVerticesCallback A callback function taking a single [[CpNode]] as parameter.
|
|
173
|
+
*/
|
|
174
|
+
traverseVertices,
|
|
175
|
+
/**
|
|
176
|
+
* Returns a deep clone of this [[CpNode]]. Can be used to copy the MAT
|
|
177
|
+
* since cloning a single [[CpNode]] necessarily implies cloning all
|
|
178
|
+
* [[CpNode]]s on the same MAT tree.
|
|
179
|
+
*/
|
|
180
|
+
clone,
|
|
181
|
+
/**
|
|
182
|
+
* Returns the ordered bezier curves from this CpNode to the next CpNode
|
|
183
|
+
* on the boundary.
|
|
184
|
+
* @param cpNode
|
|
185
|
+
*/
|
|
186
|
+
getBoundaryBezierPartsToNext,
|
|
187
|
+
/**
|
|
188
|
+
* Returns the ordered bezier curves from this CpNode to the next CpNode
|
|
189
|
+
* on the boundary.
|
|
190
|
+
* @param cpNode
|
|
191
|
+
*/
|
|
192
|
+
getBoundaryBeziersToNext,
|
|
193
|
+
/**
|
|
194
|
+
* Removes a cpNode from the MAT.
|
|
195
|
+
* @param cpTree The tree graph holding the [[CpNodes]] of the MAT.
|
|
196
|
+
* @param cpNode The [[CpNode]] to remove.
|
|
197
|
+
*/
|
|
198
|
+
removeVertex,
|
|
199
|
+
/**
|
|
200
|
+
* Returns the bezier curve from the maximal disk of the given [[CpNode]] to the
|
|
201
|
+
* next [[CpNode]]'s maximal disk and thus directly represents a piece of the
|
|
202
|
+
* medial axis.
|
|
203
|
+
* @param cpNode
|
|
204
|
+
*/
|
|
205
|
+
getMatCurveToNext,
|
|
206
|
+
isTwoProng,
|
|
207
|
+
getBranch,
|
|
208
|
+
getBranchBeziers,
|
|
209
|
+
getSalience,
|
|
210
|
+
/**
|
|
211
|
+
* Returns the bezier curve from the maximal disk of one [[CpNode]] to another
|
|
212
|
+
* [[CpNode]]'s maximal disk.
|
|
213
|
+
* @param cpNodeFrom
|
|
214
|
+
* @param cpNodeTo
|
|
215
|
+
*/
|
|
216
|
+
getMatCurveBetween,
|
|
217
|
+
/**
|
|
218
|
+
* @internal
|
|
219
|
+
* Returns a line segment of unit length starting in the given Vertex center and
|
|
220
|
+
* pointing in the direction of the medial axis (viewed as a rooted tree).
|
|
221
|
+
* @param cpNode
|
|
222
|
+
*/
|
|
223
|
+
getEdgeDirection,
|
|
224
|
+
getBoundaryBeziersBetween,
|
|
225
|
+
getMatCurvesBetween,
|
|
226
|
+
getHoleClosers,
|
|
227
|
+
getSpeed,
|
|
228
|
+
getSmoothedSpeed$,
|
|
229
|
+
getInitialDegAngleBetweenMatCurves,
|
|
230
|
+
getAllVertices
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
export { CpNodeFs }
|
package/src/cp-node/cp-node.ts
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
declare const _debug_: Debug;
|
|
3
|
-
|
|
4
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
5
|
-
import { Debug } from '../debug/debug.js';
|
|
6
|
-
import { ContactPoint, compareCps } from '../contact-point/contact-point.js';
|
|
7
|
-
import { removeCpNode } from './remove.js';
|
|
8
|
-
import { getCurveToNext } from './get-curve-to-next.js';
|
|
9
|
-
import { createCpNode } from './create-cp-node.js';
|
|
1
|
+
import { ContactPoint } from '../contact-point/contact-point.js';
|
|
10
2
|
|
|
11
3
|
|
|
12
4
|
/**
|
|
@@ -32,7 +24,7 @@ import { createCpNode } from './create-cp-node.js';
|
|
|
32
24
|
* the CpNode to the next maximal disk contact point. This is equivalent to
|
|
33
25
|
* following other branches on the MAT.
|
|
34
26
|
*
|
|
35
|
-
* Call [[
|
|
27
|
+
* Call [[getMatCurveBetween]](cpNodeFrom, cpNodeTo) or getMatCurveToNext(cpNode)
|
|
36
28
|
* (replacing the older CpNode.[[matCurveToNextVertex]]) to get a bezier curve
|
|
37
29
|
* from the maximal disk of this [[CpNode]] to the next [[CpNode]]'s
|
|
38
30
|
* maximal disk and thus directly representing a piece of the medial axis.
|
|
@@ -45,12 +37,12 @@ import { createCpNode } from './create-cp-node.js';
|
|
|
45
37
|
* be the edges [[next]] and [[nextOnCircle]], etc. [[getChildren]] allows one to
|
|
46
38
|
* easily traverse the MAT tree - see e.g. the implementation of [[traverseEdges]].
|
|
47
39
|
*
|
|
48
|
-
* The getter, [[
|
|
40
|
+
* The getter, [[getVertexForwardChildren]], is similar to [[getChildren]] but returns the
|
|
49
41
|
* child nodes of the tree when [[CpNode]] is seen as a MAT vertex point (as
|
|
50
42
|
* opposed to edge). In this way the dual graph of the tree can easily be
|
|
51
43
|
* traversed - see e.g. [[traverseVertices]]. Generally, however, traversing the
|
|
52
44
|
* edges is preferred as it returns the entire Medial Axis (by utilizing
|
|
53
|
-
* [[
|
|
45
|
+
* [[getMatCurveToNext]] on each returned edge).
|
|
54
46
|
*
|
|
55
47
|
* It may be worth mentioning that by traversing from the CpNode by following
|
|
56
48
|
* [[next]] repeatedly until one is back at the same CpNode allows one
|
|
@@ -61,362 +53,49 @@ interface CpNode {
|
|
|
61
53
|
/** The shape boundary contact point, i.e. a [[CpNode]] without its edges. */
|
|
62
54
|
cp: ContactPoint;
|
|
63
55
|
/** If true, this [[CpNode]] belongs to a hole-closing maximal disk. */
|
|
64
|
-
isHoleClosing
|
|
56
|
+
isHoleClosing: boolean;
|
|
65
57
|
/** true if this cpNode is at a shape boundary intersection point, false otherwise */
|
|
66
|
-
isIntersection
|
|
58
|
+
isIntersection: boolean;
|
|
67
59
|
/** The previous (going clockwise around the boundary) contact point ([[CpNode]]).*/
|
|
68
|
-
prev
|
|
60
|
+
prev: CpNode;
|
|
69
61
|
/** The next (going anti-clockwise around the boundary) contact point ([[CpNode]]). */
|
|
70
|
-
next
|
|
62
|
+
next: CpNode;
|
|
71
63
|
/**
|
|
72
64
|
* The previous [[CpNode]] (going clockwise around the inscribed circle
|
|
73
65
|
* defined by the maximal disk).
|
|
74
66
|
*/
|
|
75
|
-
prevOnCircle
|
|
67
|
+
prevOnCircle: CpNode;
|
|
76
68
|
/**
|
|
77
69
|
* The next [[CpNode]] (going anti-clockwise around
|
|
78
70
|
* the inscribed circle defined by the maximal disk).
|
|
79
71
|
*/
|
|
80
|
-
nextOnCircle
|
|
81
|
-
|
|
72
|
+
nextOnCircle: CpNode;
|
|
82
73
|
/**
|
|
83
|
-
*
|
|
84
|
-
* @param cp The shape boundary contact point, i.e. a [[CpNode]] without its
|
|
85
|
-
* edges.
|
|
86
|
-
* @param isHoleClosing If true, this [[CpNode]] belongs to a hole-closing
|
|
87
|
-
* maximal disk.
|
|
88
|
-
* @param isIntersection true if this cpNode is at a shape boundary
|
|
89
|
-
* intersection point, false otherwise
|
|
90
|
-
* @param prev The previous (going clockwise around the boundary) contact
|
|
91
|
-
* point ([[CpNode]]).
|
|
92
|
-
* @param next The next (going anti-clockwise around the boundary) contact
|
|
93
|
-
* point ([[CpNode]]).
|
|
94
|
-
* @param prevOnCircle The previous [[CpNode]] (going clockwise around
|
|
95
|
-
* the inscribed circle defined by the maximal disk).
|
|
96
|
-
* @param nextOnCircle The next [[CpNode]] (going anti-clockwise around
|
|
97
|
-
* the inscribed circle defined by the maximal disk).
|
|
74
|
+
* For hole closers only - the next `CpNode` ignoring the hole closer
|
|
98
75
|
*/
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
* next [[CpNode]]'s maximal disk and thus directly represents a piece of the
|
|
105
|
-
* medial axis.
|
|
106
|
-
* @deprecated Use [[getCurveToNext]] instead
|
|
107
|
-
* @param cpNode
|
|
108
|
-
*/
|
|
109
|
-
function matCurveToNextVertex(cpNode: CpNode) {
|
|
110
|
-
return getCurveToNext(cpNode);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Primarily for internal use.
|
|
116
|
-
*
|
|
117
|
-
* Compares the order of two [[CpNode]]s. The order is cyclic and depends
|
|
118
|
-
* on a [[CpNode]]'s relative position along the shape boundary.
|
|
119
|
-
*/
|
|
120
|
-
const cpNodeComparator = (a: CpNode, b: CpNode) => compareCps(a.cp, b.cp);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Returns the children of this [[CpNode]] when seen as a MAT edge. Only
|
|
125
|
-
* children in a 'forward' direction are returned. These include all edges
|
|
126
|
-
* except the 'backward' edge given by [[prevOnCircle]], even terminating
|
|
127
|
-
* edges.
|
|
128
|
-
*/
|
|
129
|
-
function getChildren(cpNode: CpNode) {
|
|
130
|
-
const children: CpNode[] = [];
|
|
131
|
-
|
|
132
|
-
const cp = cpNode.next;
|
|
133
|
-
let cp_ = cp;
|
|
134
|
-
do {
|
|
135
|
-
children.push(cp_);
|
|
136
|
-
cp_ = cp_.nextOnCircle;
|
|
137
|
-
} while (cp_.nextOnCircle !== cp);
|
|
138
|
-
|
|
139
|
-
return children;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Similar to [[getChildren]] but returns the child nodes of the tree when
|
|
145
|
-
* [[CpNode]] is seen as a MAT vertex point (as opposed to edge). In this
|
|
146
|
-
* way the dual graph of the tree can easily be traversed - see e.g.
|
|
147
|
-
* [[traverseVertices]]. Generally, however, traversing the edges is
|
|
148
|
-
* preferred as it returns the entire Medial Axis (by utilizing
|
|
149
|
-
* [[getCurveToNext]] on each returned edge).
|
|
150
|
-
*/
|
|
151
|
-
function vertexChildren(cpNode: CpNode) {
|
|
152
|
-
if (isTerminating(cpNode)) { return []; }
|
|
153
|
-
|
|
154
|
-
const children: CpNode[] = [];
|
|
155
|
-
|
|
156
|
-
let cp_ = cpNode;
|
|
157
|
-
while (cp_ !== cpNode.prevOnCircle) {
|
|
158
|
-
if (!isTerminating(cp_)) { children.push(cp_.next); }
|
|
159
|
-
cp_ = cp_.nextOnCircle;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return children;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Returns all [[CpNode]]s on the MAT that this [[CpNode]] is part of
|
|
168
|
-
* starting from the current one and going anti-clockwise around the shape.
|
|
169
|
-
*/
|
|
170
|
-
function getAllOnLoop(cpNode: CpNode) {
|
|
171
|
-
const cpStart = cpNode;
|
|
172
|
-
const cpNodes: CpNode[] = [cpStart];
|
|
173
|
-
let cpNode_ = cpNode.next;
|
|
174
|
-
|
|
175
|
-
while (cpNode_ !== cpStart) {
|
|
176
|
-
cpNodes.push(cpNode_);
|
|
177
|
-
cpNode_ = cpNode_.next;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
return cpNodes;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Primarily for internal use.
|
|
186
|
-
*
|
|
187
|
-
* Insert a [[CpNode]] into the MAT tree graph after the specified point
|
|
188
|
-
* and returns the freshly inserted [[CpNode]].
|
|
189
|
-
* @param isHoleClosing True if this is a hole closing contact point.
|
|
190
|
-
* @param isIntersection True if this is a contact point at a shape boundary
|
|
191
|
-
* intersection point.
|
|
192
|
-
* @param cpTree The tree graph holding the [[CpNodes]] of the MAT.
|
|
193
|
-
* @param cp [[ContactPoint]] defining the [[CpNode]].
|
|
194
|
-
* @param prev_ Inserts the new [[CpNode]] right after this item if the
|
|
195
|
-
* loop is not empty, else insert the new [[CpNode]] as the only item in the
|
|
196
|
-
* loop.
|
|
197
|
-
*/
|
|
198
|
-
function insertCpNode(
|
|
199
|
-
isHoleClosing: boolean,
|
|
200
|
-
isIntersection: boolean,
|
|
201
|
-
cpTree: LlRbTree<CpNode>,
|
|
202
|
-
cp: ContactPoint,
|
|
203
|
-
prev_: CpNode) {
|
|
204
|
-
|
|
205
|
-
// const cpNode = new CpNode(cp, isHoleClosing, isIntersection);
|
|
206
|
-
const cpNode = createCpNode(cp, isHoleClosing, isIntersection);
|
|
207
|
-
if (typeof _debug_ !== 'undefined') {
|
|
208
|
-
_debug_.generated.elems.cpNode.push({
|
|
209
|
-
generated: _debug_.generated,
|
|
210
|
-
cpNode
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
let prev;
|
|
215
|
-
let next;
|
|
216
|
-
|
|
217
|
-
if (!prev_) {
|
|
218
|
-
prev = cpNode;
|
|
219
|
-
next = cpNode;
|
|
220
|
-
} else {
|
|
221
|
-
prev = prev_;
|
|
222
|
-
next = prev.next;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
next.prev = cpNode;
|
|
226
|
-
prev.next = cpNode;
|
|
227
|
-
|
|
228
|
-
cpNode.prev = prev;
|
|
229
|
-
cpNode.next = next;
|
|
230
|
-
|
|
231
|
-
cpTree.insert(cpNode);
|
|
232
|
-
|
|
233
|
-
return cpNode;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Return this (except if exclThis is truthy) and the the other CpNodes
|
|
239
|
-
* around the maximal disk vertex circle in an anti-clockwise order.
|
|
240
|
-
* @param exclThis If true the returned array does not include this
|
|
241
|
-
* [[CpNode]].
|
|
242
|
-
*/
|
|
243
|
-
function getCpNodesOnCircle(
|
|
244
|
-
cpNode: CpNode,
|
|
245
|
-
exclThis = false) {
|
|
246
|
-
|
|
247
|
-
// const startCp = this as CpNode;
|
|
248
|
-
const startCpNode = cpNode;
|
|
249
|
-
let cpNode_ = startCpNode;
|
|
250
|
-
|
|
251
|
-
const cpNodes: CpNode[] = [];
|
|
252
|
-
do {
|
|
253
|
-
if (exclThis) {
|
|
254
|
-
exclThis = false;
|
|
255
|
-
} else {
|
|
256
|
-
cpNodes.push(cpNode_);
|
|
257
|
-
}
|
|
258
|
-
cpNode_ = cpNode_.nextOnCircle;
|
|
259
|
-
} while (cpNode_ !== startCpNode)
|
|
260
|
-
|
|
261
|
-
return cpNodes;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Returns true if the 2 given [[CpNode]]s are on the same maximal disk
|
|
267
|
-
* circle.
|
|
268
|
-
* @param cpNode1 A [[CpNode]].
|
|
269
|
-
* @param cpNode2 Another [[CpNode]]
|
|
270
|
-
*/
|
|
271
|
-
function isOnSameCircle(cpNode1: CpNode, cpNode2: CpNode) {
|
|
272
|
-
const cpNodes = getCpNodesOnCircle(cpNode1, true);
|
|
273
|
-
|
|
274
|
-
return cpNodes.indexOf(cpNode2) >= 0;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* Returns true if this [[CpNode]] is terminating, i.e. implies a leaf MAT
|
|
280
|
-
* vertex.
|
|
281
|
-
*
|
|
282
|
-
* This is always the case for sharp corners and maximal disks with
|
|
283
|
-
* a single contact point. Note, however, that even in these cases there are
|
|
284
|
-
* two contact points stored (sitting 'on top' of each other) for the
|
|
285
|
-
* maximal disk. It can be seen as a limiting case of a two-prong where the
|
|
286
|
-
* distance between two of the contact points tend to zero. One point
|
|
287
|
-
* (represented by a [[CpNode]] of course) will be terminating with the
|
|
288
|
-
* other point being its [[next]], whereas the other point will *not* be
|
|
289
|
-
* terminating and 'points' back into the shape.
|
|
290
|
-
*/
|
|
291
|
-
function isTerminating(cpNode: CpNode) {
|
|
292
|
-
// return this === this.next.prevOnCircle;
|
|
293
|
-
return cpNode === cpNode.next.prevOnCircle;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Like isTerminating() but only returns true if all cpNodes on the circle
|
|
299
|
-
* (except this.prevOnCircle) is terminating.
|
|
300
|
-
*/
|
|
301
|
-
function isFullyTerminating(cpNode:CpNode) {
|
|
302
|
-
const otherOnCircle = getCpNodesOnCircle(cpNode.prevOnCircle, true);
|
|
303
|
-
const isFullyTerminating = otherOnCircle.every(cpn => isTerminating(cpn));
|
|
304
|
-
|
|
305
|
-
return isFullyTerminating;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Returns the first [[CpNode]] (from this one by successively applying
|
|
311
|
-
* .nextOnCircle) that exits the circle.
|
|
312
|
-
*/
|
|
313
|
-
function getFirstExit(cpNode: CpNode) {
|
|
314
|
-
// const startNode = this as CpNode;
|
|
315
|
-
const startNode = cpNode;
|
|
316
|
-
let cpNode_ = startNode;
|
|
317
|
-
|
|
318
|
-
while (cpNode_.next === cpNode_.prevOnCircle) {
|
|
319
|
-
cpNode_ = cpNode_.next;
|
|
320
|
-
|
|
321
|
-
if (cpNode_ === startNode) {
|
|
322
|
-
// The very special case the MAT is a single point.
|
|
323
|
-
return undefined;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
return cpNode_;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
* Returns true if this [[CpNode]] represents a sharp corner, i.e. the
|
|
333
|
-
* limiting case of a two-prong having zero radius.
|
|
334
|
-
*
|
|
335
|
-
* Note that two [[CpNode]]s are stored for each sharp corner, one being
|
|
336
|
-
* terminating and one not. See [[isTerminating]] for more details.
|
|
337
|
-
*/
|
|
338
|
-
function isSharp(cpNode: CpNode) {
|
|
339
|
-
return cpNode.cp.circle.radius === 0;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* Returns the number of contact points on the maximal disk circle implied
|
|
345
|
-
* by this [[CpNode]].
|
|
346
|
-
*
|
|
347
|
-
* Note, however, that even one-prongs and sharp corners will return 2 (see
|
|
348
|
-
* [[isTerminating]] for more details); if this is not desired use
|
|
349
|
-
* [[getRealProngCount]] instead which will return 1 in these cases.
|
|
350
|
-
*/
|
|
351
|
-
function getProngCount(cpNode: CpNode) {
|
|
352
|
-
// const startCp = this as CpNode;
|
|
353
|
-
const startCpNode = cpNode;
|
|
354
|
-
let cpNode_ = startCpNode;
|
|
355
|
-
|
|
356
|
-
let i = 0;
|
|
76
|
+
holeCloserNext?: CpNode | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* For hole closers only - the prev `CpNode` ignoring the hole closer
|
|
79
|
+
*/
|
|
80
|
+
holeCloserPrev?: CpNode | undefined;
|
|
357
81
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
cpNode_ = cpNode_.nextOnCircle;
|
|
361
|
-
} while (cpNode_ !== startCpNode)
|
|
82
|
+
/** Only used in export */
|
|
83
|
+
id?: number;
|
|
362
84
|
|
|
363
|
-
|
|
364
|
-
|
|
85
|
+
/** Only used in export */
|
|
86
|
+
children?: number[];
|
|
365
87
|
|
|
88
|
+
/** Only used in export */
|
|
89
|
+
isRoot?: boolean;
|
|
366
90
|
|
|
367
|
-
/**
|
|
368
|
-
|
|
369
|
-
* maximal disk circle implied by this [[CpNode]].
|
|
370
|
-
*
|
|
371
|
-
* See also [[getProngCount]].
|
|
372
|
-
*/
|
|
373
|
-
function getRealProngCount(cpNode: CpNode) {
|
|
374
|
-
if (isOneProng(cpNode)) { return 1; }
|
|
91
|
+
/** Only used in export */
|
|
92
|
+
parentId?: number;
|
|
375
93
|
|
|
376
|
-
|
|
94
|
+
/** Only used in export */
|
|
95
|
+
childId?: number;
|
|
377
96
|
}
|
|
378
97
|
|
|
379
98
|
|
|
380
|
-
|
|
381
|
-
* Returns true if this [[CpNode]]'s maximal disk has only one contact point
|
|
382
|
-
* on the shape boundary (up to planar coordinates). These includes sharp
|
|
383
|
-
* corners.
|
|
384
|
-
*
|
|
385
|
-
* Note, however, that two [[CpNode]]s are stored for each such point to
|
|
386
|
-
* preserve symmetry - see [[isTerminating]] for more details.
|
|
387
|
-
*/
|
|
388
|
-
function isOneProng(cpNode: CpNode) {
|
|
389
|
-
const cp1 = cpNode;
|
|
99
|
+
export { CpNode }
|
|
390
100
|
|
|
391
|
-
if (cp1.cp.circle.radius === 0) {
|
|
392
|
-
return true;
|
|
393
|
-
}
|
|
394
101
|
|
|
395
|
-
const cp2 = cp1.nextOnCircle;
|
|
396
|
-
|
|
397
|
-
const p1 = cp1.cp.pointOnShape.p;
|
|
398
|
-
const p2 = cp2.cp.pointOnShape.p;
|
|
399
|
-
|
|
400
|
-
return (p1[0] === p2[0] && p1[1] === p2[1]);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
export {
|
|
405
|
-
CpNode,
|
|
406
|
-
matCurveToNextVertex,
|
|
407
|
-
getChildren,
|
|
408
|
-
vertexChildren,
|
|
409
|
-
getAllOnLoop,
|
|
410
|
-
insertCpNode,
|
|
411
|
-
getCpNodesOnCircle,
|
|
412
|
-
isOnSameCircle,
|
|
413
|
-
isTerminating,
|
|
414
|
-
isFullyTerminating,
|
|
415
|
-
getFirstExit,
|
|
416
|
-
isSharp,
|
|
417
|
-
isOneProng,
|
|
418
|
-
getProngCount,
|
|
419
|
-
getRealProngCount,
|
|
420
|
-
cpNodeComparator,
|
|
421
|
-
removeCpNode
|
|
422
|
-
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getTAtLength, length } from "flo-bezier3";
|
|
2
|
+
import { createPos } from "../../point-on-shape/create-pos.js";
|
|
3
|
+
import { CpNode } from "../cp-node.js";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
function addDistanceFrom(
|
|
7
|
+
d: number,
|
|
8
|
+
cpNode: CpNode) {
|
|
9
|
+
|
|
10
|
+
const posS = cpNode.cp.pointOnShape;
|
|
11
|
+
const curveS = posS.curve;
|
|
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;
|
|
23
|
+
|
|
24
|
+
if (cumL < d) {
|
|
25
|
+
tS = 0;
|
|
26
|
+
dLeft -= dist;
|
|
27
|
+
curve = curve.next;
|
|
28
|
+
} else {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// const overshoot = cumL - d;
|
|
34
|
+
const lL = length([0,tS], curve.ps);
|
|
35
|
+
const l = lL + dLeft;
|
|
36
|
+
|
|
37
|
+
const t = getTAtLength(curve.ps, l);
|
|
38
|
+
|
|
39
|
+
const posE = createPos(curve, t);
|
|
40
|
+
|
|
41
|
+
return posE;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
export { addDistanceFrom }
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// TESTING
|
|
50
|
+
|