flo-mat 3.0.15 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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__/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 +14846 -12124
- 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 +9 -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 +4 -8
- package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +12 -79
- 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 +5 -5
- 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 +3 -3
- 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 +2 -2
- 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/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-cp-node.js +2 -2
- 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.js +2 -2
- package/node/debug/functions/draw-elem/draw-leaves.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-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.js +2 -2
- 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.js +1 -1
- 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/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 +163 -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/calc-better-x.d.ts +22 -0
- package/node/{find-3-prong.ts → find-3-prong}/calc-better-x.js +8 -5
- 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 +26 -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 +32 -34
- 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.js +2 -2
- package/node/find-3-prong/find-and-add-3-prong.js.map +1 -0
- 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.js +1 -1
- 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 +5 -5
- 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-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 +8 -7
- package/node/find-mat/create-initial-cp-tree.js +16 -19
- package/node/find-mat/create-initial-cp-tree.js.map +1 -1
- package/node/find-mat/find-mat.d.ts +1 -1
- 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 +1 -1
- package/node/find-mat/get-meta.js +12 -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 +0 -7
- package/node/index.js +0 -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 +3 -3
- package/node/mat/get-cp-node-to-left-or-same.js +2 -2
- 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 +2 -3
- 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 +17 -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 +3 -5
- 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 +8 -10
- package/src/closest-boundary-point/get-best-distance-squared.ts +18 -15
- package/src/closest-boundary-point/get-close-boundary-points-certified.ts +27 -31
- package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +13 -88
- package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +5 -5
- 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 +10 -10
- package/src/cp-node/fs/is-one-prong.ts +3 -14
- package/src/cp-node/fs/is-order-correct.ts +6 -8
- 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/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 -16
- package/src/debug/functions/cmp-cp-on-delta.ts +3 -3
- package/src/debug/functions/draw-elem/draw-cp-node.ts +2 -2
- package/src/debug/functions/draw-elem/draw-elem.ts +1 -5
- package/src/debug/functions/draw-elem/draw-leaves.ts +2 -2
- package/src/debug/functions/draw-elem/draw-max-vertex.ts +3 -3
- 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 +2 -2
- package/src/debug/functions/draw-elem/draw-two-prong.ts +4 -3
- package/src/debug/functions/draw-elem/draw-vertex.ts +1 -1
- 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/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 +102 -151
- 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 +213 -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 +18 -11
- package/src/{find-3-prong.ts → find-3-prong}/calc-initial-3-prong-center.ts +12 -14
- package/src/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.ts +46 -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 +2 -2
- package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.ts +1 -1
- package/src/{find-3-prong.ts → find-3-prong}/get-closest-points.ts +8 -5
- package/src/find-3-prong/three-prong-info.ts +13 -0
- package/src/find-mat/clip-options.ts +11 -16
- package/src/find-mat/create-initial-cp-tree.ts +28 -33
- package/src/find-mat/find-mat.ts +10 -17
- package/src/find-mat/find-mats.ts +9 -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 +16 -14
- 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 +0 -7
- 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 +5 -5
- 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 +3 -2
- 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 +25 -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/.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/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/error-analysis/gamma.d.ts +0 -26
- package/node/error-analysis/gamma.js +0 -35
- package/node/error-analysis/gamma.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.d.ts +0 -19
- 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-prong.d.ts +0 -0
- /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.d.ts +0 -0
- /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.js +0 -0
- /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.d.ts +0 -0
- /package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.ts +0 -0
|
@@ -1,40 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { CurvePiece } from '../mat/curve-piece.js';
|
|
1
|
+
import type { CurvePiece } from '../mat/curve-piece.js';
|
|
3
2
|
import { getClosestSquareDistanceToRect } from '../geometry/get-closest-square-distance-to-rect.js';
|
|
4
3
|
import { getBoundingBox$ } from '../geometry/get-bounding-box-.js';
|
|
5
4
|
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
|
-
* @internal
|
|
9
7
|
* When checking distances, ignore all those with closest possible distance
|
|
10
8
|
* further than 'bestSquaredDistance', i.e. cull them.
|
|
9
|
+
*
|
|
11
10
|
* @param curvePieces
|
|
12
|
-
* @param
|
|
13
|
-
* @param
|
|
11
|
+
* @param xO
|
|
12
|
+
* @param xy2
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
14
15
|
*/
|
|
15
16
|
function cullByLooseBoundingBox(
|
|
16
17
|
curvePieces: CurvePiece[],
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
xO: number[],
|
|
19
|
+
xy2: number) {
|
|
19
20
|
|
|
20
|
-
const
|
|
21
|
+
const curvePieces_ = [];
|
|
21
22
|
|
|
22
23
|
for (let i=0; i<curvePieces.length; i++) {
|
|
23
24
|
const curvePiece = curvePieces[i];
|
|
24
|
-
const ps = curvePiece.curve
|
|
25
|
+
const { ps } = curvePiece.curve;
|
|
25
26
|
|
|
26
27
|
const boundingBox = getBoundingBox$(ps);
|
|
27
28
|
|
|
28
29
|
const d = getClosestSquareDistanceToRect(
|
|
29
30
|
boundingBox,
|
|
30
|
-
|
|
31
|
+
xO
|
|
31
32
|
);
|
|
32
|
-
if (d <=
|
|
33
|
-
|
|
34
|
-
}
|
|
33
|
+
if (d <= xy2) {
|
|
34
|
+
curvePieces_.push(curvePiece);
|
|
35
|
+
}
|
|
35
36
|
}
|
|
36
37
|
|
|
37
|
-
return
|
|
38
|
+
return curvePieces_;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
|
|
@@ -4,7 +4,7 @@ import { CurvePiece } from "../mat/curve-piece.js";
|
|
|
4
4
|
import { getClosestSquaredDistanceToRotatedRect } from '../geometry/get-closest-squared-distance-to-rotated-rect.js';
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const getBoundingBoxTight$ = memoize(getBoundingBoxTight);
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -26,7 +26,7 @@ function cullByTightBoundingBox(
|
|
|
26
26
|
const curvePiece = curvePieces[i];
|
|
27
27
|
const ps = curvePiece.curve.ps;
|
|
28
28
|
|
|
29
|
-
const tightBoundingBox =
|
|
29
|
+
const tightBoundingBox = getBoundingBoxTight$(ps);
|
|
30
30
|
const d = getClosestSquaredDistanceToRotatedRect(
|
|
31
31
|
tightBoundingBox,
|
|
32
32
|
p
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
import { Curve } from "flo-boolean";
|
|
1
|
+
import type { Curve } from "flo-boolean";
|
|
3
2
|
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
curve: Curve;
|
|
7
|
-
p: number[];
|
|
8
|
-
t: number;
|
|
9
|
-
d: number;
|
|
10
|
-
box: number[][];
|
|
11
|
-
|
|
12
|
-
dSquaredI: number[];
|
|
4
|
+
interface FootAndEndpointInfo {
|
|
5
|
+
readonly curve: Curve;
|
|
6
|
+
readonly p: number[];
|
|
7
|
+
readonly t: number;
|
|
8
|
+
readonly d: number;
|
|
9
|
+
readonly box: number[][];
|
|
10
|
+
readonly dSquaredI: number[];
|
|
13
11
|
}
|
|
14
12
|
|
|
15
13
|
|
|
@@ -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,46 @@
|
|
|
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
|
-
|
|
20
|
+
maxCoordPowerOf2: number,
|
|
25
21
|
curvePieces: CurvePiece[],
|
|
26
|
-
x: number[]
|
|
27
|
-
touchedCurve: Curve | undefined = undefined,
|
|
28
|
-
t: number | undefined = undefined,
|
|
29
|
-
for1Prong = false,
|
|
30
|
-
angle = 0): PointOnShape[] {
|
|
22
|
+
x: number[]): PrePointOnShape[] {
|
|
31
23
|
|
|
32
24
|
curvePieces = cullCurvePieces1(curvePieces, x);
|
|
33
25
|
|
|
34
|
-
const
|
|
26
|
+
const pInfos: FootAndEndpointInfo[] = [];
|
|
35
27
|
for (let i=0; i<curvePieces.length; i++) {
|
|
36
28
|
const curvePiece = curvePieces[i];
|
|
37
29
|
|
|
38
|
-
const
|
|
39
|
-
|
|
30
|
+
const _pInfos = getPotentialClosestPointsOnCurveCertified(
|
|
31
|
+
maxCoordPowerOf2,
|
|
40
32
|
curvePiece.curve,
|
|
41
33
|
x,
|
|
42
|
-
curvePiece.ts,
|
|
43
|
-
touchedCurve,
|
|
44
|
-
t,
|
|
45
|
-
for1Prong,
|
|
46
|
-
angle
|
|
34
|
+
curvePiece.ts as [number,number]
|
|
47
35
|
);
|
|
48
36
|
|
|
49
|
-
|
|
37
|
+
pInfos.push(..._pInfos);
|
|
50
38
|
}
|
|
51
39
|
|
|
52
40
|
/** the minimum max interval value */
|
|
53
|
-
let minMax =
|
|
54
|
-
for (let i=0; i<
|
|
55
|
-
const diMax =
|
|
41
|
+
let minMax = Infinity;
|
|
42
|
+
for (let i=0; i<pInfos.length; i++) {
|
|
43
|
+
const diMax = pInfos[i].dSquaredI[1];
|
|
56
44
|
if (diMax < minMax) {
|
|
57
45
|
minMax = diMax;
|
|
58
46
|
}
|
|
@@ -60,14 +48,22 @@ function getCloseBoundaryPointsCertified(
|
|
|
60
48
|
|
|
61
49
|
const closestPointInfos: FootAndEndpointInfo[] = [];
|
|
62
50
|
|
|
63
|
-
for (let i=0; i<
|
|
64
|
-
const info =
|
|
51
|
+
for (let i=0; i<pInfos.length; i++) {
|
|
52
|
+
const info = pInfos[i];
|
|
65
53
|
if (info.dSquaredI[0] <= minMax) {
|
|
66
54
|
closestPointInfos.push(info);
|
|
67
55
|
}
|
|
68
56
|
}
|
|
69
57
|
|
|
70
|
-
return closestPointInfos.map(info =>
|
|
58
|
+
return closestPointInfos.map(info => {
|
|
59
|
+
const { curve, t } = info;
|
|
60
|
+
const { ps } = curve;
|
|
61
|
+
const p = toP(ps, t);
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
p, t, curve, isSource: false
|
|
65
|
+
};
|
|
66
|
+
});
|
|
71
67
|
}
|
|
72
68
|
|
|
73
69
|
|
|
@@ -1,122 +1,49 @@
|
|
|
1
1
|
import type { Curve } from "flo-boolean";
|
|
2
2
|
import type { FootAndEndpointInfo } from './foot-and-endpoint-info.js';
|
|
3
|
-
import {
|
|
4
|
-
import { eDeflate } from 'flo-poly';
|
|
3
|
+
import { createRootExact, roots } from 'flo-poly';
|
|
5
4
|
import { getFootPointsOnBezierPolysCertified, getIntervalBox } from 'flo-bezier3';
|
|
6
|
-
import { ddDeflateWithRunningError } from './dd-deflate-with-running-error.js';
|
|
7
|
-
import { γγ } from '../error-analysis/gamma.js';
|
|
8
5
|
import { rootIntervalToDistanceSquaredInterval } from './root-interval-to-distance-squared-interval.js';
|
|
9
6
|
import { getPFromBox } from './get-p-from-box.js';
|
|
10
7
|
|
|
11
|
-
|
|
12
|
-
const γγ3 = γγ(3);
|
|
13
|
-
|
|
14
8
|
const { sqrt } = Math;
|
|
15
9
|
|
|
16
10
|
|
|
17
11
|
/**
|
|
18
12
|
* @internal
|
|
19
13
|
*
|
|
20
|
-
* @param
|
|
21
|
-
* @param curve
|
|
22
|
-
* @param x
|
|
14
|
+
* @param maxCoordPowerOf2
|
|
15
|
+
* @param curve the curve
|
|
16
|
+
* @param x the point from which to check
|
|
23
17
|
* @param tRange The allowed t range
|
|
24
|
-
* @param touchedCurve The bezier on which p is located
|
|
25
|
-
* @param t The t value of the bezier that locates p
|
|
26
|
-
* @param for1Prong defaults to `false;
|
|
27
|
-
* @param angle defaults to `0`;
|
|
28
18
|
*/
|
|
29
19
|
function getPotentialClosestPointsOnCurveCertified(
|
|
30
|
-
|
|
20
|
+
maxCoordPowerOf2: number,
|
|
31
21
|
curve: Curve,
|
|
32
22
|
x: number[],
|
|
33
|
-
tRange: number
|
|
34
|
-
touchedCurve: Curve | undefined = undefined,
|
|
35
|
-
t: number | undefined = undefined,
|
|
36
|
-
for1Prong = false,
|
|
37
|
-
angle = 0): FootAndEndpointInfo[] {
|
|
23
|
+
tRange: [number, number]): FootAndEndpointInfo[] {
|
|
38
24
|
|
|
39
25
|
const [tS,tE] = tRange;
|
|
40
26
|
const ps = curve.ps;
|
|
41
27
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
let { polyDd: polyDdO, polyE: polyEO, getPolyExact: getPolyExactO } =
|
|
28
|
+
let { polyDd: pDd, polyE: pDd_, getPolyExact } =
|
|
45
29
|
getFootPointsOnBezierPolysCertified(ps, x);
|
|
46
30
|
|
|
47
|
-
const
|
|
48
|
-
? ddDeflateWithRunningError(polyDdO, polyEO.map(e => e/γγ3), t!)
|
|
49
|
-
: undefined;
|
|
50
|
-
|
|
51
|
-
const def2 = for1Prong && shouldDeflate
|
|
52
|
-
? ddDeflateWithRunningError(def!.coeffs, def!.errBound.map(e => e/γγ3), t!)
|
|
53
|
-
: undefined;
|
|
54
|
-
|
|
55
|
-
const def3 = for1Prong && shouldDeflate
|
|
56
|
-
? ddDeflateWithRunningError(def2!.coeffs, def2!.errBound.map(e => e/γγ3), t!)
|
|
57
|
-
: undefined;
|
|
58
|
-
|
|
59
|
-
const { polyDd, polyE, getPolyExact } =
|
|
60
|
-
def3 !== undefined
|
|
61
|
-
? {
|
|
62
|
-
polyDd: def3.coeffs,
|
|
63
|
-
polyE: def3.errBound,
|
|
64
|
-
getPolyExact: () => eDeflate(eDeflate(eDeflate(getPolyExactO(), t!), t!), t!)
|
|
65
|
-
}
|
|
66
|
-
: def !== undefined
|
|
67
|
-
? {
|
|
68
|
-
polyDd: def.coeffs,
|
|
69
|
-
polyE: def.errBound,
|
|
70
|
-
getPolyExact: () => eDeflate(getPolyExactO(), t!)
|
|
71
|
-
}
|
|
72
|
-
: {
|
|
73
|
-
polyDd: polyDdO,
|
|
74
|
-
polyE: polyEO,
|
|
75
|
-
getPolyExact: getPolyExactO
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const ris = allRootsCertified(polyDd, tS, tE, polyE, getPolyExact);
|
|
79
|
-
|
|
80
|
-
const dontPush0 = (
|
|
81
|
-
(t === 1 && curve === touchedCurve!.next) ||
|
|
82
|
-
(t === 0 && curve === touchedCurve)
|
|
83
|
-
);
|
|
84
|
-
const dontPush1 = (
|
|
85
|
-
(t === 0 && curve === touchedCurve!.prev) ||
|
|
86
|
-
(t === 1 && curve === touchedCurve)
|
|
87
|
-
);
|
|
31
|
+
const ris = roots(pDd, tS, tE, pDd_, getPolyExact) || [];
|
|
88
32
|
|
|
89
|
-
|
|
90
|
-
|
|
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 });
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (tE === 0) {
|
|
98
|
-
if (!dontPush0) { ris.push({ t: 0, tS: 0, tE: 0, multiplicity: 1 }); }
|
|
99
|
-
} else if (tE === 1) {
|
|
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 });
|
|
103
|
-
}
|
|
33
|
+
ris.push(createRootExact(tS));
|
|
34
|
+
ris.push(createRootExact(tE));
|
|
104
35
|
|
|
105
36
|
const infos = ris
|
|
106
37
|
.map(ri => {
|
|
107
38
|
const { tS: ts, tE: te } = ri;
|
|
108
39
|
|
|
109
|
-
if (te < tS || ts > tE) {
|
|
110
|
-
return undefined;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
40
|
const _t = (ts + te)/2;
|
|
114
41
|
const t = _t < 0 ? 0 : _t > 1 ? 1 : _t;
|
|
115
42
|
|
|
116
43
|
const box = getIntervalBox(ps, [ts, te]);
|
|
117
44
|
const p_ = getPFromBox(box);
|
|
118
45
|
|
|
119
|
-
const dSquaredI = rootIntervalToDistanceSquaredInterval(
|
|
46
|
+
const dSquaredI = rootIntervalToDistanceSquaredInterval(maxCoordPowerOf2, box, x);
|
|
120
47
|
|
|
121
48
|
const t_ = t === 0 ? 1 : t;
|
|
122
49
|
const curve_ = t === 0 ? curve.prev : curve;
|
|
@@ -127,13 +54,11 @@ function getPotentialClosestPointsOnCurveCertified(
|
|
|
127
54
|
t: t_,
|
|
128
55
|
d: (sqrt(dSquaredI[0]) + sqrt(dSquaredI[1]))/2,
|
|
129
56
|
dSquaredI,
|
|
130
|
-
box
|
|
57
|
+
box
|
|
131
58
|
}
|
|
132
59
|
});
|
|
133
60
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return infos_;
|
|
61
|
+
return infos;
|
|
137
62
|
}
|
|
138
63
|
|
|
139
64
|
|
|
@@ -25,7 +25,7 @@ const eps = Number.EPSILON;
|
|
|
25
25
|
* @internal
|
|
26
26
|
*/
|
|
27
27
|
function rootIntervalToDistanceSquaredInterval(
|
|
28
|
-
|
|
28
|
+
maxCoordPowerOf2: number,
|
|
29
29
|
box: number[][],
|
|
30
30
|
p: number[]) {
|
|
31
31
|
|
|
@@ -39,8 +39,8 @@ function rootIntervalToDistanceSquaredInterval(
|
|
|
39
39
|
const x = p[0]; // <0>
|
|
40
40
|
const y = p[1]; // <0>
|
|
41
41
|
|
|
42
|
-
let minDSquared =
|
|
43
|
-
let maxDSquared =
|
|
42
|
+
let minDSquared = +Infinity;
|
|
43
|
+
let maxDSquared = -Infinity;
|
|
44
44
|
|
|
45
45
|
// for each corner of the interval box
|
|
46
46
|
for (const [a,b] of [[minX,minY],[minX,maxY],[maxX,minY],[maxX,maxY]]) {
|
|
@@ -62,8 +62,8 @@ function rootIntervalToDistanceSquaredInterval(
|
|
|
62
62
|
const dc1Dd = qaq(qmq(ax,ax),qmq(by,by)); // ax**2 + bx**2
|
|
63
63
|
const dc1 = dc1Dd[1];
|
|
64
64
|
|
|
65
|
-
const dc1Min = dc1*(1 - 2**
|
|
66
|
-
const dc1Max = dc1*(1 + 2**
|
|
65
|
+
const dc1Min = dc1*(1 - 2**maxCoordPowerOf2*eps); // distance minus max error
|
|
66
|
+
const dc1Max = dc1*(1 + 2**maxCoordPowerOf2*eps); // distance plus max error
|
|
67
67
|
|
|
68
68
|
if (dc1Min <= minDSquared) {
|
|
69
69
|
minDSquared = dc1Min;
|
|
@@ -13,7 +13,7 @@ const { sign } = Math;
|
|
|
13
13
|
* Precondition: The point psI evaluated at zero must === the point psO
|
|
14
14
|
* evaluated at zero.
|
|
15
15
|
*
|
|
16
|
-
* //
|
|
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
|
// }
|