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.
- package/README.md +1 -1
- package/__tests__/cp-node/compare-cp-nodes-by-value.ts +5 -3
- package/__tests__/cp-node/compare-poss-by-value.ts +7 -7
- package/__tests__/cp-node/fs/get-all-on-circle.spec.ts +8 -8
- package/__tests__/cp-node/fs/is-one-prong.spec.ts +3 -3
- package/__tests__/cp-node/fs/is-sharp.spec.ts +1 -1
- package/__tests__/find-2-prong/get-medial/get-closest-points.spec.ts +49 -0
- package/__tests__/get-mats1.ts +29 -32
- package/__tests__/helpers/close-to.ts +71 -0
- package/__tests__/helpers/jest-extend-nearly.ts +39 -0
- package/__tests__/helpers/jest.setup.ts +6 -0
- package/__tests__/helpers/obj-or-array.ts +8 -0
- package/__tests__/jest-extensions.d.ts +26 -0
- package/__tests__/lib-load.spec.ts +1 -1
- package/browser/index.js +20280 -17610
- package/browser/index.min.js +1 -1
- package/jest.config.cjs +1 -0
- package/node/add-n-prong.ts/join-spokes.d.ts +2 -2
- package/node/add-n-prong.ts/join-spokes.js +5 -4
- package/node/add-n-prong.ts/join-spokes.js.map +1 -1
- package/node/closest-boundary-point/cull-bezier-pieces-1.d.ts +9 -0
- package/node/closest-boundary-point/{cull-bezier-pieces.js → cull-bezier-pieces-1.js} +6 -7
- package/node/closest-boundary-point/cull-bezier-pieces-1.js.map +1 -0
- package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +7 -5
- package/node/closest-boundary-point/cull-by-loose-bounding-box.js +12 -10
- package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
- package/node/closest-boundary-point/cull-by-tight-boundary-box.js +2 -2
- package/node/closest-boundary-point/foot-and-endpoint-info.d.ts +6 -9
- package/node/closest-boundary-point/get-best-distance-squared.d.ts +4 -3
- package/node/closest-boundary-point/get-best-distance-squared.js +11 -11
- 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 +5 -9
- package/node/closest-boundary-point/get-close-boundary-points-certified.js +22 -18
- 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 +3 -8
- package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +34 -91
- 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 +8 -11
- package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -1
- package/node/corner/compare-curvatures-at-interface.d.ts +1 -1
- package/node/corner/compare-curvatures-at-interface.js +1 -1
- package/node/corner/corner.d.ts +7 -6
- package/node/corner/get-corner.d.ts +1 -6
- package/node/corner/get-corner.js +2 -9
- package/node/corner/get-corner.js.map +1 -1
- package/node/corner/get-interface-ccw.d.ts +2 -2
- package/node/corner/get-interface-ccw.js +4 -5
- package/node/corner/get-interface-ccw.js.map +1 -1
- package/node/cp-node/cp-node-fs.d.ts +0 -15
- package/node/cp-node/cp-node-fs.js +0 -4
- package/node/cp-node/cp-node-fs.js.map +1 -1
- package/node/cp-node/cp-node.d.ts +10 -10
- package/node/cp-node/fs/clone.js.map +1 -1
- package/node/cp-node/fs/cp-node-comparator.js +2 -2
- package/node/cp-node/fs/cp-node-comparator.js.map +1 -1
- package/node/cp-node/fs/enhance-cp-node.d.ts +1 -1
- package/node/cp-node/fs/enhance-cp-node.js +5 -5
- package/node/cp-node/fs/enhance-cp-node.js.map +1 -1
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js +2 -2
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js.map +1 -1
- package/node/cp-node/fs/get-cp-node-ordering.js +4 -4
- package/node/cp-node/fs/get-cp-node-ordering.js.map +1 -1
- package/node/cp-node/fs/get-edge-direction.js +3 -3
- package/node/cp-node/fs/get-edge-direction.js.map +1 -1
- package/node/cp-node/fs/get-hole-closers.d.ts +1 -1
- package/node/cp-node/fs/get-implied-boundary-bezier-between.js +2 -2
- package/node/cp-node/fs/get-implied-boundary-bezier-between.js.map +1 -1
- package/node/cp-node/fs/get-mat-curve-between.d.ts +1 -1
- package/node/cp-node/fs/get-mat-curve-between.js +6 -5
- package/node/cp-node/fs/get-mat-curve-between.js.map +1 -1
- package/node/cp-node/fs/get-salience.d.ts +1 -1
- package/node/cp-node/fs/get-salience.js +3 -3
- package/node/cp-node/fs/get-salience.js.map +1 -1
- package/node/cp-node/fs/insert-cp-node.d.ts +4 -4
- package/node/cp-node/fs/insert-cp-node.js +3 -4
- package/node/cp-node/fs/insert-cp-node.js.map +1 -1
- package/node/cp-node/fs/is-one-prong.d.ts +1 -1
- package/node/cp-node/fs/is-one-prong.js +2 -9
- package/node/cp-node/fs/is-one-prong.js.map +1 -1
- package/node/cp-node/fs/is-order-correct.d.ts +3 -3
- package/node/cp-node/fs/is-order-correct.js +5 -8
- package/node/cp-node/fs/is-order-correct.js.map +1 -1
- package/node/cp-node/fs/is-sharp.js +1 -1
- package/node/cp-node/fs/is-sharp.js.map +1 -1
- package/node/cp-node/fs/remove-cp-node.js +1 -2
- package/node/cp-node/fs/remove-cp-node.js.map +1 -1
- package/node/cp-node/fs/traverse-cp.js.map +1 -1
- package/node/cp-node/fs/traverse-vertices.d.ts +1 -1
- package/node/cp-node/fs/traverse-vertices.js.map +1 -1
- package/node/debug/debug-elem-types.d.ts +1 -2
- package/node/debug/debug-elem-types.js +1 -2
- package/node/debug/debug-elem-types.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-branch.d.ts +1 -1
- package/node/debug/functions/draw-elem/draw-branch.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-cp-node.d.ts +1 -1
- package/node/debug/functions/draw-elem/draw-cp-node.js +4 -4
- package/node/debug/functions/draw-elem/draw-cp-node.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-elem.js +1 -5
- package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-leaves.d.ts +1 -1
- package/node/debug/functions/draw-elem/draw-leaves.js +4 -4
- package/node/debug/functions/draw-elem/draw-leaves.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-mat.d.ts +1 -1
- package/node/debug/functions/draw-elem/draw-mat.js +1 -2
- package/node/debug/functions/draw-elem/draw-mat.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-max-vertex.d.ts +1 -1
- package/node/debug/functions/draw-elem/draw-max-vertex.js +1 -1
- package/node/debug/functions/draw-elem/draw-max-vertex.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-min-y.d.ts +1 -1
- package/node/debug/functions/draw-elem/draw-min-y.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js +12 -3
- package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-one-prong.d.ts +2 -2
- package/node/debug/functions/draw-elem/draw-one-prong.js +8 -7
- package/node/debug/functions/draw-elem/draw-one-prong.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-three-prong.d.ts +1 -1
- package/node/debug/functions/draw-elem/draw-three-prong.js +4 -4
- package/node/debug/functions/draw-elem/draw-three-prong.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-two-prong.js +4 -3
- package/node/debug/functions/draw-elem/draw-two-prong.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-vertex.d.ts +1 -1
- package/node/debug/functions/draw-elem/draw-vertex.js +1 -3
- package/node/debug/functions/draw-elem/draw-vertex.js.map +1 -1
- package/node/debug/functions/general.js +1 -1
- package/node/debug/functions/general.js.map +1 -1
- package/node/error-analysis/gamma.d.ts +7 -1
- package/node/error-analysis/gamma.js +6 -2
- package/node/error-analysis/gamma.js.map +1 -1
- package/node/find-2-prong/add-1-prong.d.ts +3 -3
- package/node/find-2-prong/add-1-prong.js +4 -4
- package/node/find-2-prong/add-1-prong.js.map +1 -1
- package/node/find-2-prong/add-2-prong.d.ts +10 -11
- package/node/find-2-prong/add-2-prong.js +42 -37
- package/node/find-2-prong/add-2-prong.js.map +1 -1
- package/node/find-2-prong/calc-seperation-tolerance.js +4 -7
- package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -1
- package/node/find-2-prong/cull-bezier-pieces.d.ts +9 -7
- package/node/find-2-prong/cull-bezier-pieces.js +30 -15
- package/node/find-2-prong/cull-bezier-pieces.js.map +1 -1
- package/node/find-2-prong/find-2-prong.d.ts +12 -13
- package/node/find-2-prong/find-2-prong.js +73 -116
- package/node/find-2-prong/find-2-prong.js.map +1 -1
- package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.d.ts +4 -4
- package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.js.map +1 -1
- package/node/find-2-prong/find-and-add-2-prongs.d.ts +5 -4
- package/node/find-2-prong/find-and-add-2-prongs.js +28 -24
- 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 +6 -8
- package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js +11 -12
- package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js.map +1 -1
- package/node/find-2-prong/get-initial-bezier-pieces.d.ts +5 -6
- package/node/find-2-prong/get-initial-bezier-pieces.js +8 -11
- package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
- package/node/find-2-prong/get-initial-x.d.ts +12 -0
- package/node/find-2-prong/get-initial-x.js +35 -0
- package/node/find-2-prong/get-initial-x.js.map +1 -0
- package/node/find-2-prong/get-medial/antipodal-point.d.ts +8 -0
- package/node/find-2-prong/get-medial/antipodal-point.js +2 -0
- package/node/find-2-prong/get-medial/antipodal-point.js.map +1 -0
- package/node/find-2-prong/get-medial/get-antipodal-points.d.ts +18 -0
- package/node/find-2-prong/get-medial/get-antipodal-points.js +41 -0
- package/node/find-2-prong/get-medial/get-antipodal-points.js.map +1 -0
- package/node/find-2-prong/get-medial/get-closest-points.d.ts +15 -0
- package/node/find-2-prong/get-medial/get-closest-points.js +167 -0
- package/node/find-2-prong/get-medial/get-closest-points.js.map +1 -0
- package/node/find-2-prong/reduce-radius.d.ts +4 -4
- package/node/find-2-prong/reduce-radius.js +30 -50
- package/node/find-2-prong/reduce-radius.js.map +1 -1
- package/node/{find-3-prong.ts → find-3-prong}/calc-better-x.d.ts +9 -6
- package/node/{find-3-prong.ts → find-3-prong}/calc-better-x.js +11 -6
- package/node/find-3-prong/calc-better-x.js.map +1 -0
- package/node/find-3-prong/calc-initial-3-prong-center.d.ts +15 -0
- package/node/find-3-prong/calc-initial-3-prong-center.js +27 -0
- package/node/find-3-prong/calc-initial-3-prong-center.js.map +1 -0
- package/node/find-3-prong/find-3-prong-for-delta3s.d.ts +19 -0
- package/node/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.js +47 -32
- package/node/find-3-prong/find-3-prong-for-delta3s.js.map +1 -0
- package/node/find-3-prong/find-3-prong.d.ts +13 -0
- package/node/{find-3-prong.ts → find-3-prong}/find-3-prong.js +14 -9
- package/node/find-3-prong/find-3-prong.js.map +1 -0
- package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.d.ts +2 -2
- package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.js +17 -2
- package/node/find-3-prong/find-and-add-3-prong.js.map +1 -0
- package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.js +8 -21
- package/node/find-3-prong/find-and-add-3-prongs-on-loop.js.map +1 -0
- package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.d.ts +1 -4
- package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.js +2 -3
- package/node/find-3-prong/find-and-add-3-prongs.js.map +1 -0
- package/node/find-3-prong/get-closest-points.d.ts +10 -0
- package/node/{find-3-prong.ts → find-3-prong}/get-closest-points.js +4 -4
- package/node/find-3-prong/get-closest-points.js.map +1 -0
- package/node/find-3-prong/three-prong-info.d.ts +9 -0
- package/node/find-3-prong/three-prong-info.js +2 -0
- package/node/find-3-prong/three-prong-info.js.map +1 -0
- package/node/find-3-prong/timed-cc.d.ts +3 -0
- package/node/find-3-prong/timed-cc.js +5 -0
- package/node/find-3-prong/timed-cc.js.map +1 -0
- package/node/find-mat/clip-options.d.ts +2 -2
- package/node/find-mat/clip-options.js +7 -14
- package/node/find-mat/clip-options.js.map +1 -1
- package/node/find-mat/create-initial-cp-tree.d.ts +9 -8
- package/node/find-mat/create-initial-cp-tree.js +17 -20
- package/node/find-mat/create-initial-cp-tree.js.map +1 -1
- package/node/find-mat/find-mat.d.ts +5 -5
- package/node/find-mat/find-mat.js +6 -12
- package/node/find-mat/find-mat.js.map +1 -1
- package/node/find-mat/find-mats.js +7 -12
- package/node/find-mat/find-mats.js.map +1 -1
- package/node/find-mat/get-dull-corners-on-loop.d.ts +3 -3
- package/node/find-mat/get-dull-corners-on-loop.js +5 -4
- package/node/find-mat/get-dull-corners-on-loop.js.map +1 -1
- package/node/find-mat/get-for-1-prongs-on-loop.d.ts +7 -7
- package/node/find-mat/get-for-1-prongs-on-loop.js +9 -21
- package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -1
- package/node/find-mat/get-for-2-prongs-on-loop.d.ts +5 -4
- package/node/find-mat/get-for-2-prongs-on-loop.js +4 -6
- package/node/find-mat/get-for-2-prongs-on-loop.js.map +1 -1
- package/node/find-mat/get-meta.d.ts +3 -3
- package/node/find-mat/get-meta.js +13 -12
- package/node/find-mat/get-meta.js.map +1 -1
- package/node/find-mat/get-sharp-corners.d.ts +3 -3
- package/node/find-mat/get-sharp-corners.js +2 -3
- package/node/find-mat/get-sharp-corners.js.map +1 -1
- package/node/find-mat/mat-options.d.ts +15 -15
- package/node/find-mat/mat-options.js +7 -4
- package/node/find-mat/mat-options.js.map +1 -1
- package/node/floyd-warshall/floyd-warshall.js +1 -1
- package/node/floyd-warshall/floyd-warshall.js.map +1 -1
- package/node/floyd-warshall/get-graph.js +2 -2
- package/node/floyd-warshall/get-graph.js.map +1 -1
- package/node/floyd-warshall/get-hole-closer-pairs.js +6 -6
- package/node/floyd-warshall/get-hole-closer-pairs.js.map +1 -1
- package/node/geometry/circle.d.ts +1 -0
- package/node/geometry/circle.js +1 -0
- package/node/geometry/circle.js.map +1 -1
- package/node/geometry/get-closest-square-distance-to-rect.js +1 -4
- package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
- package/node/geometry/get-closest-squared-distance-to-rotated-rect.js +2 -1
- package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
- package/node/index.d.ts +1 -7
- package/node/index.js +1 -5
- package/node/index.js.map +1 -1
- package/node/loop/get-max-coordinate.d.ts +2 -1
- package/node/loop/get-max-coordinate.js +6 -8
- package/node/loop/get-max-coordinate.js.map +1 -1
- package/node/mat/add-to-cp-tree.d.ts +3 -3
- package/node/mat/add-to-cp-tree.js +5 -5
- package/node/mat/add-to-cp-tree.js.map +1 -1
- package/node/mat/create-new-cp-trees.d.ts +10 -0
- package/node/mat/create-new-cp-trees.js +24 -0
- package/node/mat/create-new-cp-trees.js.map +1 -0
- package/node/mat/curve-piece.d.ts +1 -1
- package/node/mat/get-boundary-piece-beziers.d.ts +3 -3
- package/node/mat/get-boundary-piece-beziers.js +125 -20
- package/node/mat/get-boundary-piece-beziers.js.map +1 -1
- package/node/mat/get-branches.d.ts +1 -1
- package/node/mat/get-closeby-cp-if-exist.d.ts +5 -5
- package/node/mat/get-closeby-cp-if-exist.js +6 -5
- package/node/mat/get-closeby-cp-if-exist.js.map +1 -1
- package/node/mat/get-cp-node-to-left-or-same.d.ts +4 -4
- package/node/mat/get-cp-node-to-left-or-same.js +4 -3
- package/node/mat/get-cp-node-to-left-or-same.js.map +1 -1
- package/node/mat/get-largest-vertex.d.ts +1 -1
- package/node/mat/get-largest-vertex.js +1 -1
- package/node/mat/get-largest-vertex.js.map +1 -1
- package/node/mat/mat-meta.d.ts +4 -5
- package/node/mat/mat.d.ts +5 -5
- package/node/mat/simplify-mat.js +5 -4
- package/node/mat/simplify-mat.js.map +1 -1
- package/node/mat/trim-mat.d.ts +3 -2
- package/node/mat/trim-mat.js +5 -3
- package/node/mat/trim-mat.js.map +1 -1
- package/node/point-on-shape/calc-pos-order.d.ts +8 -5
- package/node/point-on-shape/calc-pos-order.js +7 -7
- package/node/point-on-shape/calc-pos-order.js.map +1 -1
- package/node/point-on-shape/compare-poss.d.ts +4 -0
- package/node/point-on-shape/compare-poss.js +12 -0
- package/node/point-on-shape/compare-poss.js.map +1 -1
- package/node/point-on-shape/get-osculating-circle.d.ts +5 -6
- package/node/point-on-shape/get-osculating-circle.js +18 -20
- package/node/point-on-shape/get-osculating-circle.js.map +1 -1
- package/node/point-on-shape/get-pos-corner.d.ts +18 -4
- package/node/point-on-shape/get-pos-corner.js +6 -6
- package/node/point-on-shape/get-pos-corner.js.map +1 -1
- package/node/point-on-shape/is-pos-corner.d.ts +3 -2
- package/node/point-on-shape/is-pos-corner.js.map +1 -1
- package/node/point-on-shape/is-pos-sharp-corner.d.ts +1 -12
- package/node/point-on-shape/is-pos-sharp-corner.js +4 -5
- package/node/point-on-shape/is-pos-sharp-corner.js.map +1 -1
- package/node/point-on-shape/point-on-shape.d.ts +39 -6
- package/node/point-on-shape/pos-to-human-string.d.ts +1 -1
- package/node/point-on-shape/pos-to-human-string.js.map +1 -1
- package/node/point-on-shape/to-p.d.ts +9 -0
- package/node/point-on-shape/to-p.js +13 -0
- package/node/point-on-shape/to-p.js.map +1 -0
- package/node/sat/add-debug-info.d.ts +2 -1
- package/node/sat/add-debug-info.js +2 -1
- package/node/sat/add-debug-info.js.map +1 -1
- package/node/sat/cull-non-cycles.d.ts +2 -1
- package/node/sat/cull-non-cycles.js +5 -3
- package/node/sat/cull-non-cycles.js.map +1 -1
- package/node/sat/cull.js +3 -4
- package/node/sat/cull.js.map +1 -1
- package/node/sat/get-leaves.d.ts +1 -1
- package/node/sat/get-leaves.js +1 -2
- package/node/sat/get-leaves.js.map +1 -1
- package/node/sat/get-sat-culls.d.ts +2 -2
- package/node/sat/get-sat-culls.js +3 -3
- package/node/sat/get-sat-culls.js.map +1 -1
- package/node/sat/to-scale-axis.d.ts +1 -1
- package/node/sat/to-scale-axis.js +2 -2
- package/node/sat/to-scale-axis.js.map +1 -1
- package/node/svg/get-loop-bounds.d.ts +7 -7
- package/node/svg/get-loop-bounds.js +33 -70
- package/node/svg/get-loop-bounds.js.map +1 -1
- package/node/svg/get-min-y-pos.d.ts +2 -3
- package/node/svg/get-min-y-pos.js +2 -2
- package/node/svg/get-min-y-pos.js.map +1 -1
- package/node/svg/get-shape-bounds.d.ts +6 -6
- package/node/svg/get-shape-bounds.js +6 -6
- package/node/svg/get-shape-bounds.js.map +1 -1
- package/node/utils/mutable.d.ts +4 -0
- package/node/utils/mutable.js +2 -0
- package/node/utils/mutable.js.map +1 -0
- package/node/utils/sum.js.map +1 -1
- package/node/utils/time-function-call.d.ts +14 -0
- package/node/utils/time-function-call.js +32 -0
- package/node/utils/time-function-call.js.map +1 -0
- package/node/vertex/remove-vertex.d.ts +1 -0
- package/node/vertex/remove-vertex.js +1 -1
- package/node/vertex/remove-vertex.js.map +1 -1
- package/package.json +6 -9
- package/src/add-n-prong.ts/join-spokes.ts +8 -6
- package/src/closest-boundary-point/{cull-bezier-pieces.ts → cull-bezier-pieces-1.ts} +7 -7
- package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +15 -14
- package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +2 -2
- package/src/closest-boundary-point/foot-and-endpoint-info.ts +5 -10
- package/src/closest-boundary-point/get-best-distance-squared.ts +18 -15
- package/src/closest-boundary-point/get-close-boundary-points-certified.ts +25 -31
- package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +41 -102
- package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +7 -12
- package/src/corner/compare-curvatures-at-interface.ts +1 -1
- package/src/corner/corner.ts +7 -6
- package/src/corner/get-corner.ts +4 -11
- package/src/corner/get-interface-ccw.ts +5 -5
- package/src/cp-node/cp-node-fs.ts +0 -5
- package/src/cp-node/cp-node.ts +12 -10
- package/src/cp-node/fs/add-distance-from.ts +1 -2
- package/src/cp-node/fs/clone.ts +2 -1
- package/src/cp-node/fs/cp-node-comparator.ts +2 -2
- package/src/cp-node/fs/enhance-cp-node.ts +5 -5
- package/src/cp-node/fs/get-boundary-bezier-parts-to-next.ts +2 -2
- package/src/cp-node/fs/get-cp-node-ordering.ts +4 -4
- package/src/cp-node/fs/get-edge-direction.ts +3 -3
- package/src/cp-node/fs/get-hole-closers.ts +1 -1
- package/src/cp-node/fs/get-implied-boundary-bezier-between.ts +2 -2
- package/src/cp-node/fs/get-mat-curve-between.ts +8 -6
- package/src/cp-node/fs/get-salience.ts +4 -4
- package/src/cp-node/fs/insert-cp-node.ts +12 -12
- package/src/cp-node/fs/is-one-prong.ts +3 -14
- package/src/cp-node/fs/is-order-correct.ts +8 -10
- package/src/cp-node/fs/is-sharp.ts +1 -1
- package/src/cp-node/fs/remove-cp-node.ts +4 -6
- package/src/cp-node/fs/traverse-cp.ts +1 -1
- package/src/cp-node/fs/traverse-vertices.ts +1 -2
- package/src/cp-node/stringification/cp-node-stringifyable.ts +7 -16
- package/src/cp-node/stringification/from-stringifyable.ts +6 -6
- package/src/cp-node/stringification/to-stringifyable.ts +5 -9
- package/src/debug/debug-elem-types.ts +2 -3
- package/src/{mat → debug}/elem-type-two-prong.ts +1 -1
- package/src/debug/functions/check-ordering.ts +13 -17
- package/src/debug/functions/cmp-cp-on-delta.ts +3 -3
- package/src/debug/functions/draw-elem/draw-branch.ts +1 -3
- package/src/debug/functions/draw-elem/draw-cp-node.ts +5 -6
- package/src/debug/functions/draw-elem/draw-elem.ts +1 -5
- package/src/debug/functions/draw-elem/draw-leaves.ts +5 -5
- package/src/debug/functions/draw-elem/draw-mat.ts +2 -5
- package/src/debug/functions/draw-elem/draw-max-vertex.ts +3 -3
- package/src/debug/functions/draw-elem/draw-min-y.ts +2 -2
- package/src/debug/functions/draw-elem/draw-one-prong-at-dull-corner.ts +17 -3
- package/src/debug/functions/draw-elem/draw-one-prong.ts +10 -8
- package/src/debug/functions/draw-elem/draw-three-prong.ts +5 -5
- package/src/debug/functions/draw-elem/draw-two-prong.ts +4 -3
- package/src/debug/functions/draw-elem/draw-vertex.ts +2 -5
- package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +2 -2
- package/src/debug/functions/general.ts +1 -1
- package/src/debug/functions/three-prong.ts +220 -220
- package/src/error-analysis/gamma.ts +9 -2
- package/src/find-2-prong/add-1-prong.ts +8 -8
- package/src/find-2-prong/add-2-prong.ts +64 -58
- package/src/find-2-prong/calc-seperation-tolerance.ts +4 -8
- package/src/find-2-prong/cull-bezier-pieces.ts +41 -21
- package/src/find-2-prong/find-2-prong.ts +105 -153
- package/src/find-2-prong/find-and-add-2-prong.ts +23 -23
- package/src/find-2-prong/find-and-add-2-prongs-on-all-loops.ts +4 -6
- package/src/find-2-prong/find-and-add-2-prongs.ts +44 -29
- package/src/find-2-prong/find-and-add-hole-closing-2-prongs.ts +15 -15
- package/src/find-2-prong/get-initial-bezier-pieces.ts +21 -24
- package/src/find-2-prong/get-initial-x.ts +52 -0
- package/src/find-2-prong/get-medial/antipodal-point.ts +12 -0
- package/src/find-2-prong/get-medial/get-antipodal-points.ts +63 -0
- package/src/find-2-prong/get-medial/get-closest-points.ts +211 -0
- package/src/find-2-prong/reduce-radius.ts +38 -61
- package/src/find-2-prong/x-for-debugging.ts +9 -9
- package/src/{find-3-prong.ts → find-3-prong}/calc-better-x.ts +23 -13
- package/src/{find-3-prong.ts → find-3-prong}/calc-initial-3-prong-center.ts +12 -15
- package/src/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.ts +64 -51
- package/src/find-3-prong/find-3-prong.ts +52 -0
- package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.ts +20 -6
- package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.ts +7 -23
- package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.ts +6 -4
- package/src/{find-3-prong.ts → find-3-prong}/get-closest-points.ts +6 -5
- package/src/find-3-prong/three-prong-info.ts +13 -0
- package/src/find-3-prong/timed-cc.ts +9 -0
- package/src/find-mat/clip-options.ts +11 -16
- package/src/find-mat/create-initial-cp-tree.ts +29 -34
- package/src/find-mat/find-mat.ts +15 -23
- package/src/find-mat/find-mats.ts +11 -13
- package/src/find-mat/fix-ordering.ts +58 -58
- package/src/find-mat/get-dull-corners-on-loop.ts +12 -10
- package/src/find-mat/get-for-1-prongs-on-loop.ts +11 -33
- package/src/find-mat/get-for-2-prongs-on-loop.ts +9 -12
- package/src/find-mat/get-meta.ts +18 -16
- package/src/find-mat/get-sharp-corners.ts +7 -8
- package/src/find-mat/mat-options.ts +22 -19
- package/src/floyd-warshall/floyd-warshall.ts +1 -1
- package/src/floyd-warshall/get-graph.ts +2 -2
- package/src/floyd-warshall/get-hole-closer-pairs.ts +6 -6
- package/src/geometry/circle.ts +1 -0
- package/src/geometry/get-closest-square-distance-to-rect.ts +3 -8
- package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +3 -2
- package/src/index.ts +2 -8
- package/src/loop/get-max-coordinate.ts +8 -9
- package/src/mat/add-to-cp-tree.ts +10 -11
- package/src/mat/clone-mat.ts +8 -4
- package/src/mat/clone-meta.ts +22 -10
- package/src/mat/create-new-cp-trees.ts +35 -0
- package/src/mat/curve-piece.ts +1 -1
- package/src/mat/get-boundary-piece-beziers.ts +153 -37
- package/src/mat/get-branches.ts +1 -1
- package/src/mat/get-closeby-cp-if-exist.ts +11 -12
- package/src/mat/get-cp-node-to-left-or-same.ts +9 -8
- package/src/mat/get-largest-3-prong.ts +2 -2
- package/src/mat/get-largest-vertex.ts +2 -2
- package/src/mat/mat-meta.ts +5 -4
- package/src/mat/mat.ts +5 -5
- package/src/mat/simplify-mat.ts +5 -4
- package/src/mat/trim-mat.ts +6 -4
- package/src/point-on-shape/calc-pos-order.ts +10 -11
- package/src/point-on-shape/compare-poss.ts +11 -1
- package/src/point-on-shape/get-osculating-circle.ts +26 -28
- package/src/point-on-shape/get-pos-corner.ts +14 -12
- package/src/point-on-shape/is-pos-corner.ts +1 -4
- package/src/point-on-shape/is-pos-dull-corner.ts +9 -9
- package/src/point-on-shape/is-pos-quite-dull-corner.ts +7 -6
- package/src/point-on-shape/is-pos-quite-sharp-corner.ts +7 -6
- package/src/point-on-shape/is-pos-sharp-corner.ts +6 -5
- package/src/point-on-shape/point-on-shape.ts +44 -6
- package/src/point-on-shape/pos-to-human-string.ts +4 -2
- package/src/point-on-shape/to-p.ts +19 -0
- package/src/sat/add-debug-info.ts +3 -3
- package/src/sat/cull-non-cycles.ts +8 -6
- package/src/sat/cull.ts +7 -8
- package/src/sat/get-leaves.ts +2 -4
- package/src/sat/get-sat-culls.ts +6 -5
- package/src/sat/to-scale-axis.ts +4 -5
- package/src/svg/get-loop-bounds.ts +61 -86
- package/src/svg/get-min-y-pos.ts +3 -4
- package/src/svg/get-shape-bounds.ts +12 -12
- package/src/sweep-line/are-boxes-intersecting.ts +3 -2
- package/src/utils/mutable.ts +7 -0
- package/src/utils/rad-to-deg.ts +1 -1
- package/src/utils/smart-log.ts +20 -0
- package/src/utils/sum.ts +3 -1
- package/src/utils/time-function-call.ts +53 -0
- package/src/vertex/remove-vertex.ts +1 -3
- package/wallaby.mjs +1 -0
- package/.eslintrc.cjs +0 -69
- package/__tests__/cp-node/fs/get-avg-speed.spec.ts +0 -7
- package/__tests__/cp-node/fs/get-smoothed-speed.spec.ts +0 -7
- package/__tests__/cp-node/fs/get-smoothed.spec.ts +0 -7
- package/__tests__/cp-node/fs/get-speed.spec.ts +0 -7
- package/__tests__/cp-node/fs/is-order-correct.spec.ts +0 -7
- package/node/bezier/fit-quads-to-cubic.d.ts +0 -19
- package/node/bezier/fit-quads-to-cubic.js +0 -83
- package/node/bezier/fit-quads-to-cubic.js.map +0 -1
- package/node/bezier/total-curvature.d.ts +0 -14
- package/node/bezier/total-curvature.js +0 -5
- package/node/bezier/total-curvature.js.map +0 -1
- package/node/bezier/total-length.d.ts +0 -14
- package/node/bezier/total-length.js +0 -5
- package/node/bezier/total-length.js.map +0 -1
- package/node/closest-boundary-point/cull-bezier-pieces.d.ts +0 -10
- package/node/closest-boundary-point/cull-bezier-pieces.js.map +0 -1
- package/node/closest-boundary-point/dd-deflate-with-running-error.d.ts +0 -25
- package/node/closest-boundary-point/dd-deflate-with-running-error.js +0 -68
- package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +0 -1
- package/node/closest-boundary-point/get-p-from-box.d.ts +0 -3
- package/node/closest-boundary-point/get-p-from-box.js +0 -11
- package/node/closest-boundary-point/get-p-from-box.js.map +0 -1
- package/node/contact-point/contact-point.d.ts +0 -26
- package/node/contact-point/contact-point.js +0 -22
- package/node/contact-point/contact-point.js.map +0 -1
- package/node/cp-node/fs/get-smoothed-speed.d.ts +0 -14
- package/node/cp-node/fs/get-smoothed-speed.js +0 -75
- package/node/cp-node/fs/get-smoothed-speed.js.map +0 -1
- package/node/cp-node/fs/get-speed.d.ts +0 -15
- package/node/cp-node/fs/get-speed.js +0 -39
- package/node/cp-node/fs/get-speed.js.map +0 -1
- package/node/debug/cp-node-for-debugging.d.ts +0 -11
- package/node/debug/cp-node-for-debugging.js +0 -2
- package/node/debug/cp-node-for-debugging.js.map +0 -1
- package/node/debug/functions/draw-elem/draw-speed.d.ts +0 -4
- package/node/debug/functions/draw-elem/draw-speed.js +0 -21
- package/node/debug/functions/draw-elem/draw-speed.js.map +0 -1
- package/node/find-2-prong/find-and-add-2-prong.d.ts +0 -11
- package/node/find-2-prong/find-and-add-2-prong.js +0 -19
- package/node/find-2-prong/find-and-add-2-prong.js.map +0 -1
- package/node/find-2-prong/find-equidistant-point-on-line-dd.d.ts +0 -10
- package/node/find-2-prong/find-equidistant-point-on-line-dd.js +0 -56
- package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +0 -1
- package/node/find-3-prong.ts/calc-better-x.js.map +0 -1
- package/node/find-3-prong.ts/calc-initial-3-prong-center.d.ts +0 -13
- package/node/find-3-prong.ts/calc-initial-3-prong-center.js +0 -27
- package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +0 -1
- package/node/find-3-prong.ts/find-3-prong-for-delta3s.d.ts +0 -22
- package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +0 -1
- package/node/find-3-prong.ts/find-3-prong.d.ts +0 -16
- package/node/find-3-prong.ts/find-3-prong.js.map +0 -1
- package/node/find-3-prong.ts/find-and-add-3-prong.js.map +0 -1
- package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.js.map +0 -1
- package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +0 -1
- package/node/find-3-prong.ts/get-closest-points.d.ts +0 -9
- package/node/find-3-prong.ts/get-closest-points.js.map +0 -1
- package/node/mat/connect-hole-closers.d.ts +0 -3
- package/node/mat/connect-hole-closers.js +0 -5
- package/node/mat/connect-hole-closers.js.map +0 -1
- package/node/mat/create-new-cp-tree.d.ts +0 -9
- package/node/mat/create-new-cp-tree.js +0 -23
- package/node/mat/create-new-cp-tree.js.map +0 -1
- package/node/memoize-primitive.d.ts +0 -11
- package/node/memoize-primitive.js +0 -25
- package/node/memoize-primitive.js.map +0 -1
- package/node/point-on-shape/create-pos.d.ts +0 -4
- package/node/point-on-shape/create-pos.js +0 -11
- package/node/point-on-shape/create-pos.js.map +0 -1
- package/node/point-on-shape/is-pos-quite-sharp-corner.d.ts +0 -17
- package/node/point-on-shape/is-pos-quite-sharp-corner.js +0 -14
- package/node/point-on-shape/is-pos-quite-sharp-corner.js.map +0 -1
- package/src/bezier/fit-quads-to-cubic.ts +0 -103
- package/src/bezier/total-curvature.ts +0 -8
- package/src/bezier/total-length.ts +0 -8
- package/src/closest-boundary-point/closest-points-on-curve-precise.ts +0 -75
- package/src/closest-boundary-point/closest-points-on-curve.ts +0 -72
- package/src/closest-boundary-point/dd-deflate-with-running-error.ts +0 -88
- package/src/contact-point/contact-point.ts +0 -42
- package/src/cp-node/fs/get-avg-speed.ts +0 -31
- package/src/cp-node/fs/get-smoothed-speed.ts +0 -97
- package/src/cp-node/fs/get-smoothed.ts +0 -62
- package/src/cp-node/fs/get-speed.ts +0 -56
- package/src/curve/curve.ts +0 -35
- package/src/dbscan/dbscan.ts +0 -91
- package/src/debug/cp-node-for-debugging.ts +0 -15
- package/src/debug/functions/draw-elem/draw-speed.ts +0 -35
- package/src/debug/three-prong-for-debugging.ts +0 -58
- package/src/debug/two-prong-for-debugging.ts +0 -30
- package/src/dijkstra/dijkstra.ts +0 -418
- package/src/find-2-prong/find-and-add-2-prongs-on-all-paths.ts +0 -38
- package/src/find-2-prong/find-equidistant-point-on-line-dd.ts +0 -77
- package/src/find-2-prong/find-equidistant-point-on-line.ts +0 -40
- package/src/find-2-prong/pyth-trips.ts +0 -146
- package/src/find-3-prong.ts/add-3-prong.ts +0 -113
- package/src/find-3-prong.ts/array-set.ts +0 -47
- package/src/find-3-prong.ts/find-3-prong.ts +0 -48
- package/src/find-3-prong.ts/find-and-add-all-3-prongs.ts +0 -109
- package/src/find-mat/add-2-prongs-by-error.ts +0 -122
- package/src/find-mat/add-debug-info.ts +0 -93
- package/src/find-mat/cp-node-for-insertion.ts +0 -13
- package/src/find-mat/get-dull-corners.ts +0 -34
- package/src/find-mat/get-half-angles.ts +0 -95
- package/src/find-mat/get-size-params.ts +0 -34
- package/src/find-mat/get-total-by.ts +0 -27
- package/src/get-curve/get-curve-between.ts +0 -80
- package/src/get-curve/get-edge-direction.ts +0 -70
- package/src/mat/add-to-cp-graph.ts +0 -60
- package/src/mat/cmp-cp-on-delta.ts +0 -56
- package/src/mat/connect-hole-closers.ts +0 -9
- package/src/mat/create-new-cp-tree.ts +0 -32
- package/src/mat/get-edges-as-array.ts +0 -18
- package/src/mat/get-largest-three-prong.ts +0 -14
- package/src/mat/get-neighboring-cps.ts +0 -49
- package/src/mat/is-another-cp-closeby.ts +0 -69
- package/src/mat/simplify-mat-map-only.ts +0 -110
- package/src/memoize-primitive.ts +0 -31
- package/src/point-on-shape/create-pos.ts +0 -20
- package/src/sat/cull-by-salience.ts +0 -115
- package/src/svg/get-extreme.ts +0 -23
- package/src/utils/bezier-piece-to-bezier.ts +0 -13
- package/src/utils/sleep.ts +0 -7
- /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.d.ts +0 -0
|
@@ -1,38 +1,41 @@
|
|
|
1
|
+
import type { CurvePiece } from "../mat/curve-piece.js";
|
|
1
2
|
import { evalDeCasteljau } from 'flo-bezier3';
|
|
2
3
|
import { squaredDistanceBetween } from 'flo-vector2d';
|
|
3
|
-
|
|
4
|
+
|
|
5
|
+
const { min } = Math;
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
const TOLERANCE = 1 + 2**-20;
|
|
4
9
|
|
|
5
10
|
|
|
6
11
|
/**
|
|
7
|
-
* @internal
|
|
8
12
|
* Finds an initial distance such that the closest point can not be further than
|
|
9
13
|
* this distance away.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
10
16
|
*/
|
|
11
17
|
function getBestDistanceSquared(
|
|
12
18
|
curvePieces: CurvePiece[],
|
|
13
|
-
|
|
19
|
+
xO: number[]) {
|
|
14
20
|
|
|
15
|
-
let bestSquaredDistance =
|
|
21
|
+
let bestSquaredDistance = Infinity;
|
|
16
22
|
for (let i=0; i<curvePieces.length; i++) {
|
|
17
23
|
const curvePiece = curvePieces[i];
|
|
18
24
|
|
|
19
|
-
const ps = curvePiece
|
|
25
|
+
const { curve: { ps }, ts } = curvePiece;
|
|
20
26
|
|
|
21
|
-
const p1 = evalDeCasteljau(ps,
|
|
22
|
-
const p2 = evalDeCasteljau(ps,
|
|
27
|
+
const p1 = evalDeCasteljau(ps, ts[0]);
|
|
28
|
+
const p2 = evalDeCasteljau(ps, ts[1]);
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
squaredDistanceBetween(
|
|
30
|
+
bestSquaredDistance = min(
|
|
31
|
+
bestSquaredDistance,
|
|
32
|
+
squaredDistanceBetween(xO, p1),
|
|
33
|
+
squaredDistanceBetween(xO, p2)
|
|
27
34
|
);
|
|
28
|
-
|
|
29
|
-
if (d < bestSquaredDistance) {
|
|
30
|
-
bestSquaredDistance = d;
|
|
31
|
-
}
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
// The extra multiplier is to account for floating point precision.
|
|
35
|
-
return
|
|
38
|
+
return TOLERANCE*bestSquaredDistance;
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
|
|
@@ -1,58 +1,44 @@
|
|
|
1
|
-
import type { Curve } from 'flo-boolean';
|
|
2
1
|
import type { CurvePiece } from '../mat/curve-piece.js';
|
|
3
2
|
import type { FootAndEndpointInfo } from './foot-and-endpoint-info.js';
|
|
4
|
-
import type {
|
|
5
|
-
import { createPos } from '../point-on-shape/create-pos.js';
|
|
3
|
+
import type { PrePointOnShape } from '../point-on-shape/point-on-shape.js';
|
|
6
4
|
import { getPotentialClosestPointsOnCurveCertified } from './get-potential-closest-points-on-curve-certified.js';
|
|
7
|
-
import { cullCurvePieces1 } from './cull-bezier-pieces.js';
|
|
5
|
+
import { cullCurvePieces1 } from './cull-bezier-pieces-1.js';
|
|
6
|
+
import { toP } from '../point-on-shape/to-p.js';
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
|
-
* @internal
|
|
12
10
|
* Returns the closest boundary point to the given point, limited to the given
|
|
13
11
|
* bezier pieces, including the beziers actually checked after culling.
|
|
14
12
|
*
|
|
15
|
-
* @param
|
|
13
|
+
* @param maxCoordPowerOf2
|
|
16
14
|
* @param curvePieces
|
|
17
15
|
* @param x
|
|
18
|
-
*
|
|
19
|
-
* @
|
|
20
|
-
* @param for1Prong defaults to `false`;
|
|
21
|
-
* @param angle defaults to `0`
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
22
18
|
*/
|
|
23
19
|
function getCloseBoundaryPointsCertified(
|
|
24
|
-
pow: number,
|
|
25
20
|
curvePieces: CurvePiece[],
|
|
26
|
-
x: number[]
|
|
27
|
-
touchedCurve: Curve | undefined = undefined,
|
|
28
|
-
t: number | undefined = undefined,
|
|
29
|
-
for1Prong = false,
|
|
30
|
-
angle = 0): PointOnShape[] {
|
|
21
|
+
x: number[]): PrePointOnShape[] {
|
|
31
22
|
|
|
32
23
|
curvePieces = cullCurvePieces1(curvePieces, x);
|
|
33
24
|
|
|
34
|
-
const
|
|
25
|
+
const pInfos: FootAndEndpointInfo[] = [];
|
|
35
26
|
for (let i=0; i<curvePieces.length; i++) {
|
|
36
27
|
const curvePiece = curvePieces[i];
|
|
37
28
|
|
|
38
|
-
const
|
|
39
|
-
pow,
|
|
29
|
+
const _pInfos = getPotentialClosestPointsOnCurveCertified(
|
|
40
30
|
curvePiece.curve,
|
|
41
31
|
x,
|
|
42
|
-
curvePiece.ts,
|
|
43
|
-
touchedCurve,
|
|
44
|
-
t,
|
|
45
|
-
for1Prong,
|
|
46
|
-
angle
|
|
32
|
+
curvePiece.ts as [number,number]
|
|
47
33
|
);
|
|
48
34
|
|
|
49
|
-
|
|
35
|
+
pInfos.push(..._pInfos);
|
|
50
36
|
}
|
|
51
37
|
|
|
52
38
|
/** the minimum max interval value */
|
|
53
|
-
let minMax =
|
|
54
|
-
for (let i=0; i<
|
|
55
|
-
const diMax =
|
|
39
|
+
let minMax = Infinity;
|
|
40
|
+
for (let i=0; i<pInfos.length; i++) {
|
|
41
|
+
const diMax = pInfos[i].dSquaredI[1];
|
|
56
42
|
if (diMax < minMax) {
|
|
57
43
|
minMax = diMax;
|
|
58
44
|
}
|
|
@@ -60,14 +46,22 @@ function getCloseBoundaryPointsCertified(
|
|
|
60
46
|
|
|
61
47
|
const closestPointInfos: FootAndEndpointInfo[] = [];
|
|
62
48
|
|
|
63
|
-
for (let i=0; i<
|
|
64
|
-
const info =
|
|
49
|
+
for (let i=0; i<pInfos.length; i++) {
|
|
50
|
+
const info = pInfos[i];
|
|
65
51
|
if (info.dSquaredI[0] <= minMax) {
|
|
66
52
|
closestPointInfos.push(info);
|
|
67
53
|
}
|
|
68
54
|
}
|
|
69
55
|
|
|
70
|
-
return closestPointInfos.map(info =>
|
|
56
|
+
return closestPointInfos.map(info => {
|
|
57
|
+
const { curve, t } = info;
|
|
58
|
+
const { ps } = curve;
|
|
59
|
+
const p = toP(ps, t);
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
p, t, curve, isSource: false
|
|
63
|
+
};
|
|
64
|
+
});
|
|
71
65
|
}
|
|
72
66
|
|
|
73
67
|
|
|
@@ -1,139 +1,78 @@
|
|
|
1
1
|
import type { Curve } from "flo-boolean";
|
|
2
2
|
import type { FootAndEndpointInfo } from './foot-and-endpoint-info.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { getFootPointsOnBezierPolysCertified, getIntervalBox } from 'flo-bezier3';
|
|
6
|
-
import { ddDeflateWithRunningError } from './dd-deflate-with-running-error.js';
|
|
7
|
-
import { γγ } from '../error-analysis/gamma.js';
|
|
3
|
+
import { roots } from 'flo-poly';
|
|
4
|
+
import { evalDeCasteljauDd, getFootPointsOnBezierPolysCertified, getIntervalBox } from 'flo-bezier3';
|
|
8
5
|
import { rootIntervalToDistanceSquaredInterval } from './root-interval-to-distance-squared-interval.js';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const γγ3 = γγ(3);
|
|
13
|
-
|
|
14
|
-
const { sqrt } = Math;
|
|
6
|
+
import { squaredDistanceBetweenDd } from "../find-2-prong/squared-distance-between-dd.js";
|
|
7
|
+
import { eps } from '../error-analysis/gamma.js';
|
|
15
8
|
|
|
16
9
|
|
|
17
10
|
/**
|
|
18
11
|
* @internal
|
|
19
12
|
*
|
|
20
|
-
* @param
|
|
21
|
-
* @param
|
|
22
|
-
* @param x The point from which to check
|
|
13
|
+
* @param curve the curve
|
|
14
|
+
* @param x the point from which to check
|
|
23
15
|
* @param tRange The allowed t range
|
|
24
|
-
* @param touchedCurve The bezier on which p is located
|
|
25
|
-
* @param t The t value of the bezier that locates p
|
|
26
|
-
* @param for1Prong defaults to `false;
|
|
27
|
-
* @param angle defaults to `0`;
|
|
28
16
|
*/
|
|
29
17
|
function getPotentialClosestPointsOnCurveCertified(
|
|
30
|
-
pow: number,
|
|
31
18
|
curve: Curve,
|
|
32
19
|
x: number[],
|
|
33
|
-
tRange: number
|
|
34
|
-
touchedCurve: Curve | undefined = undefined,
|
|
35
|
-
t: number | undefined = undefined,
|
|
36
|
-
for1Prong = false,
|
|
37
|
-
angle = 0): FootAndEndpointInfo[] {
|
|
20
|
+
tRange: [number, number]): FootAndEndpointInfo[] {
|
|
38
21
|
|
|
39
22
|
const [tS,tE] = tRange;
|
|
40
|
-
const ps = curve
|
|
23
|
+
const { ps } = curve;
|
|
41
24
|
|
|
42
|
-
const
|
|
25
|
+
const infos: FootAndEndpointInfo[] = [];
|
|
43
26
|
|
|
44
|
-
|
|
45
|
-
|
|
27
|
+
if (tS !== tE) {
|
|
28
|
+
const { polyDd: pDd, polyE: pDd_, getPolyExact } =
|
|
29
|
+
getFootPointsOnBezierPolysCertified(ps, x);
|
|
46
30
|
|
|
47
|
-
|
|
48
|
-
? ddDeflateWithRunningError(polyDdO, polyEO.map(e => e/γγ3), t!)
|
|
49
|
-
: undefined;
|
|
50
|
-
|
|
51
|
-
const def2 = for1Prong && shouldDeflate
|
|
52
|
-
? ddDeflateWithRunningError(def!.coeffs, def!.errBound.map(e => e/γγ3), t!)
|
|
53
|
-
: undefined;
|
|
31
|
+
const ris = roots(pDd, tS, tE, pDd_, getPolyExact) || [];
|
|
54
32
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
33
|
+
infos.push(...ris.map(ri => {
|
|
34
|
+
const { tS: ts, tE: te, t: _t } = ri;
|
|
35
|
+
|
|
36
|
+
const t = _t < 0 ? 0 : _t > 1 ? 1 : _t;
|
|
37
|
+
|
|
38
|
+
const box = getIntervalBox(ps, [ts, te]);
|
|
39
|
+
|
|
40
|
+
const dSquaredI = rootIntervalToDistanceSquaredInterval(box, x);
|
|
41
|
+
|
|
42
|
+
const t_ = t === 0 ? 1 : t;
|
|
43
|
+
const curve_ = t === 0 ? curve.prev : curve;
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
curve: curve_,
|
|
47
|
+
t: t_,
|
|
48
|
+
dSquaredI
|
|
71
49
|
}
|
|
72
|
-
|
|
73
|
-
polyDd: polyDdO,
|
|
74
|
-
polyE: polyEO,
|
|
75
|
-
getPolyExact: getPolyExactO
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const ris = allRootsCertified(polyDd, tS, tE, polyE, getPolyExact);
|
|
79
|
-
|
|
80
|
-
const dontPush0 = (
|
|
81
|
-
(t === 1 && curve === touchedCurve!.next) ||
|
|
82
|
-
(t === 0 && curve === touchedCurve)
|
|
83
|
-
);
|
|
84
|
-
const dontPush1 = (
|
|
85
|
-
(t === 0 && curve === touchedCurve!.prev) ||
|
|
86
|
-
(t === 1 && curve === touchedCurve)
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
if (tS === 0) {
|
|
90
|
-
if (!dontPush0) { ris.push({ t: 0, tS: 0, tE: 0, multiplicity: 1 }); }
|
|
91
|
-
} else if (tS === 1) {
|
|
92
|
-
if (!dontPush1) { ris.push({ t: 1, tS: 1, tE: 1, multiplicity: 1 }); }
|
|
93
|
-
} else {
|
|
94
|
-
ris.push({ t: tS, tS: tS, tE: tS, multiplicity: 1 });
|
|
50
|
+
}));
|
|
95
51
|
}
|
|
96
52
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if (!dontPush1) { ris.push({ t: 1, tS: 1, tE: 1, multiplicity: 1 }); }
|
|
101
|
-
} else {
|
|
102
|
-
ris.push({ t: tE, tS: tE, tE: tE, multiplicity: 1 });
|
|
53
|
+
const ts = tRange.slice();
|
|
54
|
+
if (tS === tE) {
|
|
55
|
+
ts.push(tS);
|
|
103
56
|
}
|
|
57
|
+
|
|
58
|
+
infos.push(...ts.map(t => {
|
|
59
|
+
const p = evalDeCasteljauDd(ps, [0,t]).map(v => v[0] + v[1]);
|
|
104
60
|
|
|
105
|
-
|
|
106
|
-
.map(ri => {
|
|
107
|
-
const { tS: ts, tE: te } = ri;
|
|
108
|
-
|
|
109
|
-
if (te < tS || ts > tE) {
|
|
110
|
-
return undefined;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const _t = (ts + te)/2;
|
|
114
|
-
const t = _t < 0 ? 0 : _t > 1 ? 1 : _t;
|
|
61
|
+
const d = squaredDistanceBetweenDd(p, x);
|
|
115
62
|
|
|
116
|
-
const
|
|
117
|
-
const p_ = getPFromBox(box);
|
|
118
|
-
|
|
119
|
-
const dSquaredI = rootIntervalToDistanceSquaredInterval(pow, box, x);
|
|
63
|
+
const dSquaredI = [d*(1 - eps), d*(1 + eps)];
|
|
120
64
|
|
|
121
65
|
const t_ = t === 0 ? 1 : t;
|
|
122
66
|
const curve_ = t === 0 ? curve.prev : curve;
|
|
123
67
|
|
|
124
68
|
return {
|
|
125
69
|
curve: curve_,
|
|
126
|
-
p: p_,
|
|
127
70
|
t: t_,
|
|
128
|
-
|
|
129
|
-
dSquaredI,
|
|
130
|
-
box,
|
|
71
|
+
dSquaredI
|
|
131
72
|
}
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
const infos_ = infos.filter(info => info !== undefined) as FootAndEndpointInfo[];
|
|
73
|
+
}));
|
|
135
74
|
|
|
136
|
-
return
|
|
75
|
+
return infos;
|
|
137
76
|
}
|
|
138
77
|
|
|
139
78
|
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
import { twoDiff,
|
|
2
|
-
import { ddMultDd, ddAddDd } from 'double-double';
|
|
1
|
+
import { twoDiff, ddMultDd, ddAddDd } from 'double-double';
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
// We *have* to do the below to improve performance with bundlers❗ The assignee is a getter❗ The assigned is a pure function❗
|
|
6
|
-
const estimate = eEstimate;
|
|
7
3
|
const td = twoDiff;
|
|
8
|
-
// const emult = eMult;
|
|
9
|
-
// const eadd = eAdd;
|
|
10
4
|
const qmq = ddMultDd;
|
|
11
5
|
const qaq = ddAddDd;
|
|
12
6
|
|
|
@@ -25,7 +19,6 @@ const eps = Number.EPSILON;
|
|
|
25
19
|
* @internal
|
|
26
20
|
*/
|
|
27
21
|
function rootIntervalToDistanceSquaredInterval(
|
|
28
|
-
pow: number,
|
|
29
22
|
box: number[][],
|
|
30
23
|
p: number[]) {
|
|
31
24
|
|
|
@@ -39,8 +32,8 @@ function rootIntervalToDistanceSquaredInterval(
|
|
|
39
32
|
const x = p[0]; // <0>
|
|
40
33
|
const y = p[1]; // <0>
|
|
41
34
|
|
|
42
|
-
let minDSquared =
|
|
43
|
-
let maxDSquared =
|
|
35
|
+
let minDSquared = +Infinity;
|
|
36
|
+
let maxDSquared = -Infinity;
|
|
44
37
|
|
|
45
38
|
// for each corner of the interval box
|
|
46
39
|
for (const [a,b] of [[minX,minY],[minX,maxY],[maxX,minY],[maxX,maxY]]) {
|
|
@@ -62,8 +55,10 @@ function rootIntervalToDistanceSquaredInterval(
|
|
|
62
55
|
const dc1Dd = qaq(qmq(ax,ax),qmq(by,by)); // ax**2 + bx**2
|
|
63
56
|
const dc1 = dc1Dd[1];
|
|
64
57
|
|
|
65
|
-
const dc1Min = dc1*(1 - 2**
|
|
66
|
-
const dc1Max = dc1*(1 + 2**
|
|
58
|
+
// const dc1Min = dc1*(1 - 2**maxCoordPowerOf2*eps); // distance minus max error
|
|
59
|
+
// const dc1Max = dc1*(1 + 2**maxCoordPowerOf2*eps); // distance plus max error
|
|
60
|
+
const dc1Min = dc1*(1 - eps); // distance minus max error
|
|
61
|
+
const dc1Max = dc1*(1 + eps); // distance plus max error
|
|
67
62
|
|
|
68
63
|
if (dc1Min <= minDSquared) {
|
|
69
64
|
minDSquared = dc1Min;
|
|
@@ -13,7 +13,7 @@ const { sign } = Math;
|
|
|
13
13
|
* Precondition: The point psI evaluated at zero must === the point psO
|
|
14
14
|
* evaluated at zero.
|
|
15
15
|
*
|
|
16
|
-
* //
|
|
16
|
+
* // FUTURE - is this correct?
|
|
17
17
|
* Exact: Returns the exact result if the bithlength of all
|
|
18
18
|
* coordinates <= 53 - 5 === 48 and are bit-aligned.
|
|
19
19
|
*
|
package/src/corner/corner.ts
CHANGED
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
|
-
* @internal
|
|
4
3
|
* Represents a corner on the shape boundary, i.e. a point where two bezier
|
|
5
4
|
* curves meet. Typically used internally only.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
6
7
|
*/
|
|
7
8
|
interface Corner {
|
|
8
9
|
/**
|
|
9
10
|
* The unit tangents at the points t === 1 of the first curve and at
|
|
10
11
|
* t === 0 of the second respectively.
|
|
11
12
|
*/
|
|
12
|
-
tangents: number[][];
|
|
13
|
+
readonly tangents: number[][];
|
|
13
14
|
/** The cross of the unit tangents. */
|
|
14
15
|
// crossTangents: number;
|
|
15
16
|
/**
|
|
16
17
|
* True if the corner is sharp, i.e. > 0 radians as one goes in a positive
|
|
17
18
|
* direction around the shape boundary.
|
|
18
19
|
*/
|
|
19
|
-
isSharp: boolean;
|
|
20
|
+
readonly isSharp: boolean;
|
|
20
21
|
/**
|
|
21
22
|
* True if the corner is dull, i.e. < 0 radians as one goes in a positive
|
|
22
23
|
* direction around the shape boundary.
|
|
23
24
|
*/
|
|
24
|
-
isDull: boolean;
|
|
25
|
+
readonly isDull: boolean;
|
|
25
26
|
/**
|
|
26
27
|
* True if the corner is quite sharp, i.e. > δ radians as one goes in a
|
|
27
28
|
* positive direction around the shape boundary where δ is some
|
|
28
29
|
* pre-determined parameter.
|
|
29
30
|
*/
|
|
30
|
-
isQuiteSharp: boolean;
|
|
31
|
+
readonly isQuiteSharp: boolean;
|
|
31
32
|
/**
|
|
32
33
|
* True if the corner is quite dull, i.e. < δ radians as one goes in a
|
|
33
34
|
* positive direction around the shape boundary where δ is some
|
|
34
35
|
* pre-determined parameter.
|
|
35
36
|
*/
|
|
36
|
-
isQuiteDull: boolean;
|
|
37
|
+
readonly isQuiteDull: boolean;
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
|
package/src/corner/get-corner.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { Corner } from "./corner.js";
|
|
2
|
+
import { cross, toUnitVector } from "flo-vector2d";
|
|
3
3
|
import { getInterfaceCcw } from './get-interface-ccw.js';
|
|
4
4
|
|
|
5
5
|
|
|
@@ -26,11 +26,6 @@ const DEGREE_LIMIT = DEGREES[4];
|
|
|
26
26
|
* @internal
|
|
27
27
|
* Returns a new corner with properties.
|
|
28
28
|
*
|
|
29
|
-
* PRECONDITION: The beziers has control points with max bit-length of 26 and
|
|
30
|
-
* aligned to a 'grid' to have the same exponent. This is so the vectors between
|
|
31
|
-
* control points can be calculated exactly without resorting to adaptive
|
|
32
|
-
* infinite precision floating point operations.
|
|
33
|
-
*
|
|
34
29
|
* @param psI The incoming bezier that ends in the corner
|
|
35
30
|
* @param psO The outgoing bezier that starts at the corner
|
|
36
31
|
*/
|
|
@@ -38,8 +33,8 @@ function getCorner(
|
|
|
38
33
|
psI: number[][],
|
|
39
34
|
psO: number[][]): Corner {
|
|
40
35
|
|
|
41
|
-
// getInterfaceCcw must return a number !== 0 if psI and psO are not
|
|
42
|
-
// same
|
|
36
|
+
// `getInterfaceCcw` must return a number !== 0 if `psI` and `psO` are not
|
|
37
|
+
// the same up to a curve extension with `t ∈ [-∞,+∞]`
|
|
43
38
|
const { ccw, tangentI, tangentO, dotTangents } = getInterfaceCcw(psI, psO);
|
|
44
39
|
const isSharp = ccw < 0;
|
|
45
40
|
const isDull = ccw > 0;
|
|
@@ -56,7 +51,6 @@ function getCorner(
|
|
|
56
51
|
|
|
57
52
|
let isQuiteSharp: boolean;
|
|
58
53
|
let isQuiteDull: boolean;
|
|
59
|
-
// const dotTangents = dot(tangentAtIncoming, tangentAtOutgoing);
|
|
60
54
|
if (dotTangents > 0) {
|
|
61
55
|
// Curves go in same direction
|
|
62
56
|
isQuiteSharp = crossTangents < -DEGREE_LIMIT;
|
|
@@ -68,7 +62,6 @@ function getCorner(
|
|
|
68
62
|
|
|
69
63
|
return {
|
|
70
64
|
tangents: unitTangents,
|
|
71
|
-
// crossTangents,
|
|
72
65
|
isSharp,
|
|
73
66
|
isDull,
|
|
74
67
|
isQuiteSharp,
|
|
@@ -15,8 +15,8 @@ import { compareCurvaturesAtInterface } from "./compare-curvatures-at-interface.
|
|
|
15
15
|
* Preconditions (for robustness):
|
|
16
16
|
* * The bezier does not have infinite curvature at either endpoint
|
|
17
17
|
*
|
|
18
|
-
* @param psI
|
|
19
|
-
* @param psO
|
|
18
|
+
* @param psI the incoming bezier that ends at the interface
|
|
19
|
+
* @param psO the outgoing bezier that starts at the interface
|
|
20
20
|
*/
|
|
21
21
|
function getInterfaceCcw(
|
|
22
22
|
psI: number[][],
|
|
@@ -72,9 +72,9 @@ function getInterfaceCcw(
|
|
|
72
72
|
|
|
73
73
|
// Look at curvature
|
|
74
74
|
|
|
75
|
-
//
|
|
75
|
+
// FUTURE
|
|
76
76
|
// The line below is probably not working correctly for infinite
|
|
77
|
-
// curvature but it should be rare to get here -
|
|
77
|
+
// curvature but it should be rare to get here - investigate.
|
|
78
78
|
// Probably need to resort to length of tangents and then if this is
|
|
79
79
|
// also the same simply look at the last point's ccw wrt the 1st or
|
|
80
80
|
// the second?
|
|
@@ -82,7 +82,6 @@ function getInterfaceCcw(
|
|
|
82
82
|
ccw: compareCurvaturesAtInterface(psI.slice().reverse(), psO),
|
|
83
83
|
tangentI,
|
|
84
84
|
tangentO,
|
|
85
|
-
// crossTangents,
|
|
86
85
|
dotTangents
|
|
87
86
|
}
|
|
88
87
|
}
|
|
@@ -95,6 +94,7 @@ function pointsEqual(
|
|
|
95
94
|
return p1[0] === p2[0] && p1[1] === p2[1];
|
|
96
95
|
}
|
|
97
96
|
|
|
97
|
+
|
|
98
98
|
/**
|
|
99
99
|
* The input is two exact double-double coefficient vectors
|
|
100
100
|
*
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { CpNode } from "./cp-node.js";
|
|
2
1
|
import { getHoleClosers } from "./fs/get-hole-closers.js";
|
|
3
|
-
import { getSpeed } from "./fs/get-speed.js";
|
|
4
|
-
import { getSmoothedSpeed$ } from "./fs/get-smoothed-speed.js";
|
|
5
2
|
import { enhanceCpNode } from "./fs/enhance-cp-node.js";
|
|
6
3
|
import { traverseCp } from './fs/traverse-cp.js';
|
|
7
4
|
import { traverseEdges } from './fs/traverse-edges.js';
|
|
@@ -221,8 +218,6 @@ const CpNodeFs = {
|
|
|
221
218
|
getBoundaryBeziersBetween,
|
|
222
219
|
getMatCurvesBetween,
|
|
223
220
|
getHoleClosers,
|
|
224
|
-
getSpeed,
|
|
225
|
-
getSmoothedSpeed$,
|
|
226
221
|
getInitialDegAngleBetweenMatCurves,
|
|
227
222
|
getAllVertices
|
|
228
223
|
}
|
package/src/cp-node/cp-node.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ContactPoint } from '../contact-point/contact-point.js';
|
|
1
|
+
// import { ContactPoint } from '../contact-point/contact-point.js';
|
|
2
|
+
import { PointOnShape } from '../point-on-shape/point-on-shape.js';
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -51,39 +52,40 @@ import { ContactPoint } from '../contact-point/contact-point.js';
|
|
|
51
52
|
*/
|
|
52
53
|
interface CpNode {
|
|
53
54
|
/** For debugging / easy identification only */
|
|
54
|
-
id: number;
|
|
55
|
+
readonly id: number;
|
|
55
56
|
|
|
56
57
|
/** The shape boundary contact point, i.e. a `CpNode` without its edges. */
|
|
57
|
-
cp: ContactPoint;
|
|
58
|
+
// cp: ContactPoint;
|
|
59
|
+
readonly pointOnShape: PointOnShape;
|
|
58
60
|
/** If true, this `CpNode` belongs to a hole-closing maximal disk. */
|
|
59
|
-
isHoleClosing: boolean;
|
|
61
|
+
readonly isHoleClosing: boolean;
|
|
60
62
|
/** true if this `CpNode` is at a shape boundary intersection point, false otherwise */
|
|
61
|
-
isIntersection: boolean;
|
|
63
|
+
readonly isIntersection: boolean;
|
|
62
64
|
|
|
63
65
|
//------------------------
|
|
64
66
|
// EDGES TO OTHER CpNodes
|
|
65
67
|
//------------------------
|
|
66
68
|
|
|
67
69
|
/** The previous (going clockwise around the boundary) contact point `CpNode`. */
|
|
68
|
-
prev: CpNode;
|
|
70
|
+
readonly prev: CpNode;
|
|
69
71
|
/** The next (going anti-clockwise around the boundary) contact point `CpNode`. */
|
|
70
|
-
next: CpNode;
|
|
72
|
+
readonly next: CpNode;
|
|
71
73
|
/**
|
|
72
74
|
* The previous `CpNode` (going clockwise around the inscribed circle
|
|
73
75
|
* defined by the maximal disk).
|
|
74
76
|
*/
|
|
75
|
-
prevOnCircle: CpNode;
|
|
77
|
+
readonly prevOnCircle: CpNode;
|
|
76
78
|
/**
|
|
77
79
|
* The next `CpNode` (going anti-clockwise around
|
|
78
80
|
* the inscribed circle defined by the maximal disk).
|
|
79
81
|
*/
|
|
80
|
-
nextOnCircle: CpNode;
|
|
82
|
+
readonly nextOnCircle: CpNode;
|
|
81
83
|
/**
|
|
82
84
|
* For hole closers only - the twin `CpNode` at the same point, e.g.
|
|
83
85
|
* use `cpNode.holeCloserTwin.next` to skip the hole closer and get to the
|
|
84
86
|
* next `CpNode` on the same loop.
|
|
85
87
|
*/
|
|
86
|
-
holeCloserTwin?: CpNode | undefined;
|
|
88
|
+
readonly holeCloserTwin?: CpNode | undefined;
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
//------------------------------
|
|
4
4
|
|
|
5
5
|
// import { getTAtLength, length } from "flo-bezier3";
|
|
6
|
-
// import { createPos } from "../../point-on-shape/create-pos.js";
|
|
7
6
|
// import { CpNode } from "../cp-node.js";
|
|
8
7
|
|
|
9
8
|
|
|
@@ -40,7 +39,7 @@
|
|
|
40
39
|
|
|
41
40
|
// const t = getTAtLength(curve.ps, l);
|
|
42
41
|
|
|
43
|
-
// const posE =
|
|
42
|
+
// const posE: PrePointOnShape = { curve, t ;
|
|
44
43
|
|
|
45
44
|
// return posE;
|
|
46
45
|
// }
|
package/src/cp-node/fs/clone.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Mutable } from "../../utils/mutable.js";
|
|
1
2
|
import type { CpNode } from "../cp-node.js";
|
|
2
3
|
|
|
3
4
|
|
|
@@ -49,7 +50,7 @@ function clone(
|
|
|
49
50
|
nodeMap.set(node, node_);
|
|
50
51
|
cpStack.push({ cpNode: node, newCpNode: node_ });
|
|
51
52
|
}
|
|
52
|
-
(newCpNode as CpNode)[edge] = node_ as CpNode;
|
|
53
|
+
(newCpNode as Mutable<CpNode>)[edge] = node_ as CpNode;
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CpNode } from "../cp-node.js";
|
|
2
|
-
import {
|
|
2
|
+
import { comparePoss } from "../../point-on-shape/compare-poss.js";
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -12,7 +12,7 @@ function cpNodeComparator(
|
|
|
12
12
|
a: CpNode,
|
|
13
13
|
b: CpNode) {
|
|
14
14
|
|
|
15
|
-
return
|
|
15
|
+
return comparePoss(a.pointOnShape, b.pointOnShape);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
|
|
@@ -12,15 +12,15 @@ import { isTerminating } from "./is-terminating.js";
|
|
|
12
12
|
* @param cpNode
|
|
13
13
|
*/
|
|
14
14
|
function enhanceCpNode(cpNode: CpNode) {
|
|
15
|
-
const cp = cpNode.cp;
|
|
16
|
-
const pos =
|
|
15
|
+
// const cp = cpNode.cp;
|
|
16
|
+
const pos = cpNode.pointOnShape;
|
|
17
17
|
const curve = pos.curve;
|
|
18
18
|
|
|
19
19
|
return {
|
|
20
20
|
...cpNode,
|
|
21
|
-
pos
|
|
22
|
-
p:
|
|
23
|
-
t:
|
|
21
|
+
pos,//: cpNode.cp.pointOnShape,
|
|
22
|
+
p: pos.p,
|
|
23
|
+
t: pos.t,
|
|
24
24
|
isTerminating: isTerminating(cpNode),
|
|
25
25
|
isFullyTerminating: isFullyTerminating(cpNode),
|
|
26
26
|
isSharp: isSharp(cpNode),
|