flo-mat 2.0.1 → 2.0.3
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/.eslintrc.cjs +69 -0
- package/README.md +9 -27
- package/browser/index.js +29604 -7008
- package/browser/index.min.js +1 -2
- package/node/circle.d.ts +20 -20
- package/node/circle.js +31 -31
- package/node/circle.js.map +1 -1
- package/node/compare-curvatures-at-interface.d.ts +19 -19
- package/node/compare-curvatures-at-interface.js +124 -124
- package/node/compare-curvatures-at-interface.js.map +1 -1
- package/node/contact-point.d.ts +26 -26
- package/node/contact-point.js +25 -25
- package/node/cp-node/clone.d.ts +8 -8
- package/node/cp-node/clone.js +31 -31
- package/node/cp-node/clone.js.map +1 -1
- package/node/cp-node/remove.d.ts +9 -9
- package/node/cp-node/remove.js +19 -19
- package/node/cp-node/remove.js.map +1 -1
- package/node/cp-node.d.ts +202 -202
- package/node/cp-node.js +320 -320
- package/node/cp-node.js.map +1 -1
- package/node/curve.d.ts +46 -46
- package/node/curve.js +88 -88
- package/node/curve.js.map +1 -1
- package/node/debug/cp-node-for-debugging.d.ts +11 -11
- package/node/debug/cp-node-for-debugging.js +1 -1
- package/node/debug/debug-elem-types.d.ts +32 -32
- package/node/debug/debug-elem-types.js +1 -1
- package/node/debug/debug.d.ts +50 -50
- package/node/debug/debug.js +75 -75
- package/node/debug/functions/draw-elem/bounding-hull.d.ts +3 -3
- package/node/debug/functions/draw-elem/bounding-hull.js +7 -7
- package/node/debug/functions/draw-elem/bounding-hull.js.map +1 -1
- package/node/debug/functions/draw-elem/branch.d.ts +4 -4
- package/node/debug/functions/draw-elem/branch.js +22 -22
- package/node/debug/functions/draw-elem/branch.js.map +1 -1
- package/node/debug/functions/draw-elem/culls.d.ts +4 -4
- package/node/debug/functions/draw-elem/culls.js +21 -21
- package/node/debug/functions/draw-elem/culls.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-circle-percent.d.ts +3 -3
- package/node/debug/functions/draw-elem/draw-circle-percent.js +12 -12
- package/node/debug/functions/draw-elem/draw-circle-percent.js.map +1 -1
- package/node/debug/functions/draw-elem/draw-elem.d.ts +8 -8
- package/node/debug/functions/draw-elem/draw-elem.js +45 -45
- package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
- package/node/debug/functions/draw-elem/dull-corner.d.ts +4 -4
- package/node/debug/functions/draw-elem/dull-corner.js +10 -10
- package/node/debug/functions/draw-elem/dull-corner.js.map +1 -1
- package/node/debug/functions/draw-elem/leaves.d.ts +4 -4
- package/node/debug/functions/draw-elem/leaves.js +12 -12
- package/node/debug/functions/draw-elem/leaves.js.map +1 -1
- package/node/debug/functions/draw-elem/loop.d.ts +4 -4
- package/node/debug/functions/draw-elem/loop.js +11 -11
- package/node/debug/functions/draw-elem/loops.d.ts +4 -4
- package/node/debug/functions/draw-elem/loops.js +6 -6
- package/node/debug/functions/draw-elem/loose-bounding-box.d.ts +3 -3
- package/node/debug/functions/draw-elem/loose-bounding-box.js +9 -9
- package/node/debug/functions/draw-elem/loose-bounding-box.js.map +1 -1
- package/node/debug/functions/draw-elem/mat.d.ts +4 -4
- package/node/debug/functions/draw-elem/mat.js +30 -30
- package/node/debug/functions/draw-elem/mat.js.map +1 -1
- package/node/debug/functions/draw-elem/max-vertex.d.ts +4 -4
- package/node/debug/functions/draw-elem/max-vertex.js +8 -8
- package/node/debug/functions/draw-elem/max-vertex.js.map +1 -1
- package/node/debug/functions/draw-elem/min-y.d.ts +4 -4
- package/node/debug/functions/draw-elem/min-y.js +13 -13
- package/node/debug/functions/draw-elem/min-y.js.map +1 -1
- package/node/debug/functions/draw-elem/one-prong-at-dull-corner.d.ts +4 -4
- package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js +12 -12
- package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js.map +1 -1
- package/node/debug/functions/draw-elem/one-prong.d.ts +4 -4
- package/node/debug/functions/draw-elem/one-prong.js +16 -16
- package/node/debug/functions/draw-elem/one-prong.js.map +1 -1
- package/node/debug/functions/draw-elem/sharp-corner.d.ts +4 -4
- package/node/debug/functions/draw-elem/sharp-corner.js +9 -9
- package/node/debug/functions/draw-elem/sharp-corner.js.map +1 -1
- package/node/debug/functions/draw-elem/three-prong.d.ts +4 -4
- package/node/debug/functions/draw-elem/three-prong.js +16 -16
- package/node/debug/functions/draw-elem/three-prong.js.map +1 -1
- package/node/debug/functions/draw-elem/tight-bounding-box.d.ts +3 -3
- package/node/debug/functions/draw-elem/tight-bounding-box.js +7 -7
- package/node/debug/functions/draw-elem/tight-bounding-box.js.map +1 -1
- package/node/debug/functions/draw-elem/two-prong.d.ts +4 -4
- package/node/debug/functions/draw-elem/two-prong.js +36 -36
- package/node/debug/functions/draw-elem/two-prong.js.map +1 -1
- package/node/debug/functions/draw-elem/vertex.d.ts +4 -4
- package/node/debug/functions/draw-elem/vertex.js +27 -27
- package/node/debug/functions/draw-elem/vertex.js.map +1 -1
- package/node/debug/functions/general.d.ts +48 -48
- package/node/debug/functions/general.js +52 -52
- package/node/debug/functions/general.js.map +1 -1
- package/node/debug/functions/three-prong.d.ts +11 -11
- package/node/debug/functions/three-prong.js +184 -184
- package/node/debug/functions/three-prong.js.map +1 -1
- package/node/debug/functions/two-prong.d.ts +13 -13
- package/node/debug/functions/two-prong.js +117 -117
- package/node/debug/functions/two-prong.js.map +1 -1
- package/node/debug/three-prong-for-debugging.d.ts +31 -31
- package/node/debug/three-prong-for-debugging.js +20 -20
- package/node/debug/two-prong-for-debugging.d.ts +26 -26
- package/node/debug/two-prong-for-debugging.js +1 -1
- package/node/find-mats.d.ts +26 -26
- package/node/find-mats.js +122 -125
- package/node/find-mats.js.map +1 -1
- package/node/get-boundary-bezier-parts-to-next.d.ts +9 -9
- package/node/get-boundary-bezier-parts-to-next.js +42 -42
- package/node/get-boundary-bezier-parts-to-next.js.map +1 -1
- package/node/get-boundary-beziers-to-next.d.ts +8 -8
- package/node/get-boundary-beziers-to-next.js +44 -44
- package/node/get-boundary-beziers-to-next.js.map +1 -1
- package/node/get-bounding-box-.d.ts +2 -2
- package/node/get-bounding-box-.js +4 -4
- package/node/get-branches.d.ts +12 -12
- package/node/get-branches.js +68 -68
- package/node/get-branches.js.map +1 -1
- package/node/get-curve/get-curve-between.d.ts +9 -9
- package/node/get-curve/get-curve-between.js +56 -56
- package/node/get-curve/get-curve-between.js.map +1 -1
- package/node/get-curve/get-edge-direction.d.ts +9 -9
- package/node/get-curve/get-edge-direction.js +53 -53
- package/node/get-curve/get-edge-direction.js.map +1 -1
- package/node/get-curve-to-next.d.ts +9 -9
- package/node/get-curve-to-next.js +11 -11
- package/node/get-interface-ccw.d.ts +24 -24
- package/node/get-interface-ccw.js +97 -97
- package/node/get-interface-ccw.js.map +1 -1
- package/node/index.d.ts +36 -36
- package/node/index.js +32 -32
- package/node/loop/get-max-coordinate.d.ts +10 -10
- package/node/loop/get-max-coordinate.js +43 -43
- package/node/loop/get-max-coordinate.js.map +1 -1
- package/node/loop.d.ts +16 -16
- package/node/loop.js +34 -34
- package/node/loop.js.map +1 -1
- package/node/mat/add-to-cp-graph.d.ts +16 -16
- package/node/mat/add-to-cp-graph.js +30 -30
- package/node/mat/add-to-cp-graph.js.map +1 -1
- package/node/mat/bezier-piece.d.ts +12 -12
- package/node/mat/bezier-piece.js +1 -1
- package/node/mat/closest-boundary-point/closest-points-on-curve.d.ts +14 -14
- package/node/mat/closest-boundary-point/closest-points-on-curve.js +72 -73
- package/node/mat/closest-boundary-point/closest-points-on-curve.js.map +1 -1
- package/node/mat/closest-boundary-point/cull-bezier-pieces.d.ts +9 -9
- package/node/mat/closest-boundary-point/cull-bezier-pieces.js +19 -19
- package/node/mat/closest-boundary-point/cull-bezier-pieces.js.map +1 -1
- package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.d.ts +11 -11
- package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js +24 -24
- package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
- package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.d.ts +11 -11
- package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js +26 -26
- package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js.map +1 -1
- package/node/mat/closest-boundary-point/get-best-distance-squared.d.ts +8 -8
- package/node/mat/closest-boundary-point/get-best-distance-squared.js +24 -24
- package/node/mat/closest-boundary-point/get-best-distance-squared.js.map +1 -1
- package/node/mat/closest-boundary-point/get-close-boundary-points.d.ts +17 -17
- package/node/mat/closest-boundary-point/get-close-boundary-points.js +80 -80
- package/node/mat/closest-boundary-point/get-close-boundary-points.js.map +1 -1
- package/node/mat/closest-boundary-point/get-closest-boundary-point.d.ts +18 -18
- package/node/mat/closest-boundary-point/get-closest-boundary-point.js +40 -40
- package/node/mat/closest-boundary-point/get-closest-boundary-point.js.map +1 -1
- package/node/mat/corner.d.ts +37 -37
- package/node/mat/corner.js +1 -1
- package/node/mat/create-new-cp-tree.d.ts +9 -9
- package/node/mat/create-new-cp-tree.js +23 -23
- package/node/mat/create-new-cp-tree.js.map +1 -1
- package/node/mat/elem-type-two-prong.d.ts +3 -3
- package/node/mat/elem-type-two-prong.js +1 -1
- package/node/mat/find-mat/add-1-prong.d.ts +12 -12
- package/node/mat/find-mat/add-1-prong.js +42 -42
- package/node/mat/find-mat/add-1-prong.js.map +1 -1
- package/node/mat/find-mat/add-2-prong.d.ts +21 -21
- package/node/mat/find-mat/add-2-prong.js +192 -192
- package/node/mat/find-mat/add-2-prong.js.map +1 -1
- package/node/mat/find-mat/add-3-prong.d.ts +19 -19
- package/node/mat/find-mat/add-3-prong.js +54 -54
- package/node/mat/find-mat/add-3-prong.js.map +1 -1
- package/node/mat/find-mat/add-debug-info.d.ts +9 -9
- package/node/mat/find-mat/add-debug-info.js +67 -69
- package/node/mat/find-mat/add-debug-info.js.map +1 -1
- package/node/mat/find-mat/create-get-interesting-points-on-loop.d.ts +11 -11
- package/node/mat/find-mat/create-get-interesting-points-on-loop.js +51 -51
- package/node/mat/find-mat/create-get-interesting-points-on-loop.js.map +1 -1
- package/node/mat/find-mat/create-initial-cp-graph.d.ts +12 -12
- package/node/mat/find-mat/create-initial-cp-graph.js +40 -40
- package/node/mat/find-mat/create-initial-cp-graph.js.map +1 -1
- package/node/mat/find-mat/find-2-prong/add-debug-info.d.ts +8 -8
- package/node/mat/find-mat/find-2-prong/add-debug-info.js +21 -21
- package/node/mat/find-mat/find-2-prong/add-debug-info.js.map +1 -1
- package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.d.ts +11 -11
- package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js +29 -29
- package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js.map +1 -1
- package/node/mat/find-mat/find-2-prong/find-2-prong.d.ts +37 -37
- package/node/mat/find-mat/find-2-prong/find-2-prong.js +232 -232
- package/node/mat/find-mat/find-2-prong/find-2-prong.js.map +1 -1
- package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.d.ts +9 -9
- package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js +39 -39
- package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js.map +1 -1
- package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.d.ts +11 -11
- package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js +37 -37
- package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
- package/node/mat/find-mat/find-2-prong/x-for-debugging.d.ts +9 -9
- package/node/mat/find-mat/find-2-prong/x-for-debugging.js +1 -1
- package/node/mat/find-mat/find-3-prong/calc-better-x.d.ts +19 -19
- package/node/mat/find-mat/find-3-prong/calc-better-x.js +36 -36
- package/node/mat/find-mat/find-3-prong/calc-better-x.js.map +1 -1
- package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.d.ts +13 -13
- package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js +25 -25
- package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js.map +1 -1
- package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.d.ts +22 -22
- package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js +159 -159
- package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js.map +1 -1
- package/node/mat/find-mat/find-3-prong/find-3-prong.d.ts +16 -16
- package/node/mat/find-mat/find-3-prong/find-3-prong.js +76 -76
- package/node/mat/find-mat/find-3-prong/find-3-prong.js.map +1 -1
- package/node/mat/find-mat/find-3-prong/get-closest-points.d.ts +9 -9
- package/node/mat/find-mat/find-3-prong/get-closest-points.js +16 -16
- package/node/mat/find-mat/find-3-prong/get-closest-points.js.map +1 -1
- package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.d.ts +15 -15
- package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js +20 -20
- package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js.map +1 -1
- package/node/mat/find-mat/find-and-add-2-prongs.d.ts +16 -16
- package/node/mat/find-mat/find-and-add-2-prongs.js +73 -74
- package/node/mat/find-mat/find-and-add-2-prongs.js.map +1 -1
- package/node/mat/find-mat/find-and-add-3-prongs.d.ts +13 -13
- package/node/mat/find-mat/find-and-add-3-prongs.js +146 -147
- package/node/mat/find-mat/find-and-add-3-prongs.js.map +1 -1
- package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.d.ts +14 -14
- package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js +33 -33
- package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js.map +1 -1
- package/node/mat/find-mat/get-potential-2-prongs.d.ts +4 -4
- package/node/mat/find-mat/get-potential-2-prongs.js +16 -16
- package/node/mat/find-mat/get-potential-2-prongs.js.map +1 -1
- package/node/mat/find-mat/get-sharp-corners.d.ts +4 -4
- package/node/mat/find-mat/get-sharp-corners.js +17 -17
- package/node/mat/find-mat/get-sharp-corners.js.map +1 -1
- package/node/mat/geometry/get-closest-square-distance-to-rect.d.ts +5 -5
- package/node/mat/geometry/get-closest-square-distance-to-rect.js +49 -49
- package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.d.ts +5 -5
- package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js +15 -15
- package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
- package/node/mat/get-boundary-piece-beziers.d.ts +11 -11
- package/node/mat/get-boundary-piece-beziers.js +58 -58
- package/node/mat/get-boundary-piece-beziers.js.map +1 -1
- package/node/mat/get-contact-circles-at-interface.d.ts +8 -8
- package/node/mat/get-contact-circles-at-interface.js +20 -20
- package/node/mat/get-contact-circles-at-interface.js.map +1 -1
- package/node/mat/get-largest-vertex.d.ts +4 -4
- package/node/mat/get-largest-vertex.js +9 -9
- package/node/mat/get-leaves.d.ts +4 -4
- package/node/mat/get-leaves.js +12 -12
- package/node/mat/get-leaves.js.map +1 -1
- package/node/mat/get-neighboring-cps.d.ts +14 -14
- package/node/mat/get-neighboring-cps.js +30 -30
- package/node/mat/get-neighboring-cps.js.map +1 -1
- package/node/mat/get-two-prong-type.d.ts +5 -5
- package/node/mat/get-two-prong-type.js +8 -8
- package/node/mat/is-another-cp-closeby.d.ts +20 -20
- package/node/mat/is-another-cp-closeby.js +55 -55
- package/node/mat/is-another-cp-closeby.js.map +1 -1
- package/node/mat/simplify-mat-map-only.d.ts +23 -23
- package/node/mat/simplify-mat-map-only.js +80 -80
- package/node/mat/simplify-mat-map-only.js.map +1 -1
- package/node/mat/to-scale-axis/add-debug-info.d.ts +7 -7
- package/node/mat/to-scale-axis/add-debug-info.js +13 -13
- package/node/mat/to-scale-axis/add-debug-info.js.map +1 -1
- package/node/mat/to-scale-axis/cull-non-cycles.d.ts +9 -9
- package/node/mat/to-scale-axis/cull-non-cycles.js +51 -51
- package/node/mat/to-scale-axis/cull-non-cycles.js.map +1 -1
- package/node/mat/to-scale-axis/cull.d.ts +12 -12
- package/node/mat/to-scale-axis/cull.js +132 -132
- package/node/mat/to-scale-axis/cull.js.map +1 -1
- package/node/mat/trim-mat.d.ts +8 -8
- package/node/mat/trim-mat.js +16 -16
- package/node/mat/trim-mat.js.map +1 -1
- package/node/mat.d.ts +22 -22
- package/node/mat.js +1 -1
- package/node/point-on-shape.d.ts +73 -73
- package/node/point-on-shape.js +167 -167
- package/node/point-on-shape.js.map +1 -1
- package/node/simplify-mat.d.ts +16 -16
- package/node/simplify-mat.js +71 -71
- package/node/simplify-mat.js.map +1 -1
- package/node/svg/get-loop-bounds.d.ts +12 -12
- package/node/svg/get-loop-bounds.js +80 -80
- package/node/svg/get-loop-bounds.js.map +1 -1
- package/node/svg/get-min-y-pos.d.ts +8 -8
- package/node/svg/get-min-y-pos.js +9 -9
- package/node/svg/get-shape-bounds.d.ts +9 -9
- package/node/svg/get-shape-bounds.js +35 -35
- package/node/svg/get-shape-bounds.js.map +1 -1
- package/node/sweep-line/sweep-line.d.ts +18 -18
- package/node/sweep-line/sweep-line.js +72 -72
- package/node/sweep-line/sweep-line.js.map +1 -1
- package/node/to-scale-axis.d.ts +16 -16
- package/node/to-scale-axis.js +74 -73
- package/node/to-scale-axis.js.map +1 -1
- package/node/traverse-edges.d.ts +10 -10
- package/node/traverse-edges.js +21 -21
- package/node/traverse-edges.js.map +1 -1
- package/node/traverse-vertices.d.ts +12 -12
- package/node/traverse-vertices.js +27 -27
- package/node/traverse-vertices.js.map +1 -1
- package/package.json +29 -24
- package/src/circle.ts +3 -3
- package/src/compare-curvatures-at-interface.ts +36 -36
- package/src/cp-node/clone.ts +6 -6
- package/src/cp-node/remove.ts +4 -4
- package/src/cp-node.ts +20 -20
- package/src/curve.ts +19 -19
- package/src/debug/functions/draw-elem/bounding-hull.ts +2 -2
- package/src/debug/functions/draw-elem/branch.ts +4 -4
- package/src/debug/functions/draw-elem/culls.ts +4 -4
- package/src/debug/functions/draw-elem/draw-circle-percent.ts +2 -2
- package/src/debug/functions/draw-elem/draw-elem.ts +1 -1
- package/src/debug/functions/draw-elem/dull-corner.ts +3 -3
- package/src/debug/functions/draw-elem/leaves.ts +4 -4
- package/src/debug/functions/draw-elem/loose-bounding-box.ts +2 -2
- package/src/debug/functions/draw-elem/mat.ts +4 -4
- package/src/debug/functions/draw-elem/max-vertex.ts +2 -2
- package/src/debug/functions/draw-elem/min-y.ts +3 -3
- package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +4 -4
- package/src/debug/functions/draw-elem/one-prong.ts +4 -4
- package/src/debug/functions/draw-elem/sharp-corner.ts +2 -2
- package/src/debug/functions/draw-elem/three-prong.ts +7 -7
- package/src/debug/functions/draw-elem/tight-bounding-box.ts +1 -1
- package/src/debug/functions/draw-elem/two-prong.ts +1 -1
- package/src/debug/functions/draw-elem/vertex.ts +20 -14
- package/src/debug/functions/general.ts +3 -3
- package/src/debug/functions/three-prong.ts +37 -37
- package/src/debug/functions/two-prong.ts +15 -15
- package/src/find-mats.ts +19 -19
- package/src/get-boundary-bezier-parts-to-next.ts +8 -8
- package/src/get-boundary-beziers-to-next.ts +8 -8
- package/src/get-branches.ts +7 -7
- package/src/get-curve/get-curve-between.ts +21 -21
- package/src/get-curve/get-edge-direction.ts +13 -14
- package/src/get-interface-ccw.ts +12 -12
- package/src/loop/get-max-coordinate.ts +7 -7
- package/src/loop.ts +4 -4
- package/src/mat/add-to-cp-graph.ts +8 -8
- package/src/mat/closest-boundary-point/closest-points-on-curve.ts +5 -6
- package/src/mat/closest-boundary-point/cull-bezier-pieces.ts +1 -1
- package/src/mat/closest-boundary-point/cull-by-loose-bounding-box.ts +5 -5
- package/src/mat/closest-boundary-point/cull-by-tight-boundary-box.ts +5 -5
- package/src/mat/closest-boundary-point/get-best-distance-squared.ts +5 -5
- package/src/mat/closest-boundary-point/get-close-boundary-points.ts +15 -15
- package/src/mat/closest-boundary-point/get-closest-boundary-point.ts +4 -4
- package/src/mat/cmp-cp-on-delta.ts +5 -5
- package/src/mat/create-new-cp-tree.ts +3 -3
- package/src/mat/find-mat/add-1-prong.ts +5 -5
- package/src/mat/find-mat/add-2-prong.ts +42 -42
- package/src/mat/find-mat/add-3-prong.ts +1 -1
- package/src/mat/find-mat/add-debug-info.ts +18 -20
- package/src/mat/find-mat/create-get-interesting-points-on-loop.ts +4 -4
- package/src/mat/find-mat/create-initial-cp-graph.ts +11 -11
- package/src/mat/find-mat/find-2-prong/add-debug-info.ts +4 -4
- package/src/mat/find-mat/find-2-prong/cull-bezier-pieces.ts +5 -5
- package/src/mat/find-mat/find-2-prong/find-2-prong.ts +27 -27
- package/src/mat/find-mat/find-2-prong/find-equidistant-point-on-line.ts +7 -7
- package/src/mat/find-mat/find-2-prong/get-initial-bezier-pieces.ts +4 -4
- package/src/mat/find-mat/find-3-prong/calc-better-x.ts +4 -4
- package/src/mat/find-mat/find-3-prong/calc-initial-3-prong-center.ts +3 -3
- package/src/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.ts +37 -37
- package/src/mat/find-mat/find-3-prong/find-3-prong.ts +16 -16
- package/src/mat/find-mat/find-3-prong/get-closest-points.ts +1 -1
- package/src/mat/find-mat/find-and-add-2-prongs-on-all-paths.ts +2 -2
- package/src/mat/find-mat/find-and-add-2-prongs.ts +14 -16
- package/src/mat/find-mat/find-and-add-3-prongs.ts +19 -19
- package/src/mat/find-mat/find-and-add-hole-closing-2-prongs.ts +6 -6
- package/src/mat/find-mat/get-potential-2-prongs.ts +4 -4
- package/src/mat/find-mat/get-sharp-corners.ts +4 -4
- package/src/mat/find-mat/get-total-abs-curvature.ts +1 -1
- package/src/mat/geometry/get-closest-squared-distance-to-rotated-rect.ts +3 -3
- package/src/mat/get-boundary-piece-beziers.ts +5 -5
- package/src/mat/get-contact-circles-at-interface.ts +1 -1
- package/src/mat/get-edges-as-array.ts +2 -2
- package/src/mat/get-leaves.ts +2 -2
- package/src/mat/get-neighboring-cps.ts +1 -1
- package/src/mat/is-another-cp-closeby.ts +9 -9
- package/src/mat/simplify-mat-map-only.ts +15 -15
- package/src/mat/to-scale-axis/add-debug-info.ts +6 -3
- package/src/mat/to-scale-axis/add-to-tree.ts +10 -10
- package/src/mat/to-scale-axis/calc-groups.ts +19 -19
- package/src/mat/to-scale-axis/create-spacial-tree.ts +4 -4
- package/src/mat/to-scale-axis/cull-non-cycles.ts +5 -5
- package/src/mat/to-scale-axis/cull.ts +5 -5
- package/src/mat/to-scale-axis/get-engulfed-vertices.ts +18 -18
- package/src/mat/trim-mat.ts +1 -1
- package/src/point-on-shape.ts +16 -16
- package/src/simplify-mat.ts +10 -10
- package/src/svg/get-curvature-at-interface.ts +6 -8
- package/src/svg/get-extreme.ts +1 -1
- package/src/svg/get-loop-bounds.ts +13 -13
- package/src/svg/get-shape-bounds.ts +4 -4
- package/src/sweep-line/are-boxes-intersecting.ts +4 -4
- package/src/sweep-line/sweep-line.ts +8 -8
- package/src/to-scale-axis.ts +18 -17
- package/src/traverse-edges.ts +2 -2
- package/src/traverse-vertices.ts +2 -2
- package/tsconfig.json +0 -1
- package/webpack.config.cjs +12 -63
- package/browser/index.min.js.LICENSE.txt +0 -2819
- package/browser/index.module.js +0 -7149
- package/browser/index.module.min.js +0 -2
- package/browser/index.module.min.js.LICENSE.txt +0 -2819
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** @
|
|
2
|
-
declare
|
|
1
|
+
/** @internal */
|
|
2
|
+
declare const _debug_: Debug;
|
|
3
3
|
|
|
4
4
|
import { fromTo } from 'flo-bezier3';
|
|
5
5
|
import { Debug } from '../../../debug/debug.js';
|
|
@@ -19,18 +19,18 @@ import { getBoundaryPieceBeziers } from '../../get-boundary-piece-beziers.js';
|
|
|
19
19
|
* tolerances.
|
|
20
20
|
*/
|
|
21
21
|
function find3Prong(δs: CpNode[][], extreme: number) {
|
|
22
|
-
|
|
22
|
+
const bezierPiecess = δs.map(getBoundaryPieceBeziers);
|
|
23
23
|
|
|
24
24
|
if (typeof _debug_ !== 'undefined') {
|
|
25
|
-
|
|
25
|
+
const threeProngs = _debug_.generated.elems.threeProng;
|
|
26
26
|
threeProngs.push(createEmptyThreeProngForDebugging());
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
const d = threeProngs[threeProngs.length-1];
|
|
29
29
|
d.boundaries = [];
|
|
30
|
-
for (
|
|
31
|
-
|
|
30
|
+
for (const bezierPieces of bezierPiecess) {
|
|
31
|
+
const boundary: number[][][] = [];
|
|
32
32
|
d.boundaries.push(boundary);
|
|
33
|
-
for (
|
|
33
|
+
for (const bezierPiece of bezierPieces) {
|
|
34
34
|
/* qqq
|
|
35
35
|
let bezier = fromTo(bezierPiece.curve.ps)(
|
|
36
36
|
bezierPiece.ts[0], bezierPiece.ts[1]
|
|
@@ -46,7 +46,7 @@ function find3Prong(δs: CpNode[][], extreme: number) {
|
|
|
46
46
|
d.traces = [];
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
const candidateThreeProngs = [];
|
|
50
50
|
|
|
51
51
|
// The best candidate amongst the different 'permutations' of the given δs.
|
|
52
52
|
let threeProng: {
|
|
@@ -59,17 +59,17 @@ function find3Prong(δs: CpNode[][], extreme: number) {
|
|
|
59
59
|
for (let i=1; i<δs.length-1; i++) {
|
|
60
60
|
for (let k=0; k<3; k++) {
|
|
61
61
|
if (typeof _debug_ !== 'undefined') {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
const threeProngs = _debug_.generated.elems.threeProng;
|
|
63
|
+
const d = threeProngs[threeProngs.length-1];
|
|
64
|
+
const trace: number[][] = [];
|
|
65
65
|
d.traces.push(trace);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
const threeProngInfo =
|
|
69
69
|
find3ProngForDelta3s(δs, i, k, bezierPiecess, extreme);
|
|
70
70
|
if (!threeProngInfo) { continue; }
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
const { circle, ps, error, δ3s } = threeProngInfo;
|
|
73
73
|
|
|
74
74
|
if (typeof _debug_ !== 'undefined') {
|
|
75
75
|
candidateThreeProngs.push({ circle, ps });
|
|
@@ -87,8 +87,8 @@ function find3Prong(δs: CpNode[][], extreme: number) {
|
|
|
87
87
|
//threeProng.δ3s = [δs[0], δs[bestIndx+1], δs[δs.length-1]];
|
|
88
88
|
|
|
89
89
|
if (typeof _debug_ !== 'undefined') {
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
const threeProngs = _debug_.generated.elems.threeProng;
|
|
91
|
+
const d = threeProngs[threeProngs.length-1];
|
|
92
92
|
|
|
93
93
|
d.generated = _debug_.generated;
|
|
94
94
|
d.circle = threeProng.circle;
|
|
@@ -23,8 +23,8 @@ function findAndAdd2ProngsOnAllPaths(
|
|
|
23
23
|
let cpNode;
|
|
24
24
|
|
|
25
25
|
for (let k=0; k<for2Prongss.length; k++) {
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
const for2Prongs = for2Prongss[k];
|
|
27
|
+
const _cpNode = findAndAdd2Prongs(loops, cpGraphs, k, for2Prongs, extreme);
|
|
28
28
|
cpNode = cpNode || _cpNode;
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** @
|
|
2
|
-
declare
|
|
1
|
+
/** @internal */
|
|
2
|
+
declare const _debug_: Debug;
|
|
3
3
|
|
|
4
4
|
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
5
5
|
import { Debug } from '../../debug/debug.js';
|
|
@@ -29,28 +29,26 @@ function findAndAdd2Prongs(
|
|
|
29
29
|
for2Prongs: IPointOnShape[],
|
|
30
30
|
extreme: number) {
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
//
|
|
32
|
+
const len = for2Prongs.length;
|
|
33
|
+
const index = indexLinear(len);
|
|
34
|
+
//const index = indexInterlaced(len); // Keep for possible future use.
|
|
35
35
|
let cpNode_;
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
const bounds = getShapeBounds(loops);
|
|
38
|
+
const squaredDiagonalLength =
|
|
39
39
|
(bounds.maxX.p[0] - bounds.minX.p[0])**2 +
|
|
40
40
|
(bounds.maxY.p[1] - bounds.minY.p[1])**2;
|
|
41
41
|
|
|
42
42
|
for (let i=0; i<len; i++) {
|
|
43
|
-
|
|
43
|
+
const pos = for2Prongs[index[i]];
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
twoProngInfo = find2Prong(
|
|
45
|
+
const twoProngInfo: { circle: Circle, zs: { pos: IPointOnShape, d: number }[] } = find2Prong(
|
|
48
46
|
loops, extreme, squaredDiagonalLength, cpGraphs, pos, false, k
|
|
49
47
|
);
|
|
50
48
|
|
|
51
49
|
if (twoProngInfo) {
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
const { circle, zs } = twoProngInfo;
|
|
51
|
+
const cpNode = add2Prong(cpGraphs, circle, pos, zs, false, extreme);
|
|
54
52
|
cpNode_ = cpNode_ || cpNode;
|
|
55
53
|
}
|
|
56
54
|
|
|
@@ -71,7 +69,7 @@ function findAndAdd2Prongs(
|
|
|
71
69
|
* @param n
|
|
72
70
|
*/
|
|
73
71
|
function indexLinear(n: number) {
|
|
74
|
-
|
|
72
|
+
const arr = [];
|
|
75
73
|
for (let i=0; i<n; i++) {
|
|
76
74
|
arr.push(i);
|
|
77
75
|
}
|
|
@@ -86,8 +84,8 @@ function indexLinear(n: number) {
|
|
|
86
84
|
* @param n
|
|
87
85
|
*/
|
|
88
86
|
function indexInterlaced(n: number) {
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
const source: { [index:number]: boolean } = {};
|
|
88
|
+
const arr = [];
|
|
91
89
|
// l is the lowest power of 2 so that 2^l > n
|
|
92
90
|
let l = Math.pow(2, Math.floor(Math.log2(n)));
|
|
93
91
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** @
|
|
2
|
-
declare
|
|
1
|
+
/** @internal */
|
|
2
|
+
declare const _debug_: Debug;
|
|
3
3
|
|
|
4
4
|
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
5
5
|
import { Debug } from '../../debug/debug.js';
|
|
@@ -27,22 +27,22 @@ function findAndAddAll3Prongs(
|
|
|
27
27
|
// Don't change this function to be recursive, the call stack may overflow
|
|
28
28
|
// if there are too many two-prongs.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
const visitedEdges = new Map<CpNode, Set<CpNode>>();
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
const edgesToCheck = [{ fromCpNode: undefined as CpNode, cpStart }];
|
|
33
33
|
|
|
34
34
|
while (edgesToCheck.length) {
|
|
35
|
-
|
|
35
|
+
const { fromCpNode, cpStart } = edgesToCheck.shift();
|
|
36
36
|
|
|
37
37
|
markEdgeAsTaken(visitedEdges, fromCpNode, cpStart);
|
|
38
38
|
|
|
39
|
-
for (
|
|
39
|
+
for (const cpNode of cpStart.getCpNodesOnCircle()) {
|
|
40
40
|
|
|
41
41
|
//if (!PointOnShape.isSharpCorner(cpNode.cp.pointOnShape)) {
|
|
42
42
|
if (!isPosSharpCorner(cpNode.cp.pointOnShape)) {
|
|
43
43
|
if (findAndAdd3Prongs(cpGraphs, cpNode, extreme) === undefined) {
|
|
44
44
|
return; // only for debugging purposes
|
|
45
|
-
}
|
|
45
|
+
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
if (hasEdgeBeenTaken(visitedEdges, cpNode, cpNode.next)) {
|
|
@@ -89,10 +89,10 @@ function hasEdgeBeenTaken(
|
|
|
89
89
|
let cps: Set<CpNode>;
|
|
90
90
|
|
|
91
91
|
cps = visitedEdges.get(cp1);
|
|
92
|
-
|
|
92
|
+
const takenForward = cps && cps.has(cp2);
|
|
93
93
|
|
|
94
94
|
cps = visitedEdges.get(cp2);
|
|
95
|
-
|
|
95
|
+
const takenBackwards = cps && cps.has(cp1);
|
|
96
96
|
|
|
97
97
|
return takenForward || takenBackwards;
|
|
98
98
|
}
|
|
@@ -112,11 +112,11 @@ function traverseShape(cpStart: CpNode) {
|
|
|
112
112
|
return [cpNode];
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
const visitedCps = [];
|
|
116
116
|
do {
|
|
117
117
|
visitedCps.push(cpNode);
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
const next = cpNode.next.prevOnCircle;
|
|
120
120
|
cpNode = cpNode === next
|
|
121
121
|
? cpNode = cpNode.next.next // Terminal vertex
|
|
122
122
|
: cpNode = next // Take last exit
|
|
@@ -179,14 +179,14 @@ function findAndAdd3Prong(
|
|
|
179
179
|
visitedCps : CpNode[],
|
|
180
180
|
extreme : number) {
|
|
181
181
|
|
|
182
|
-
|
|
183
|
-
for (
|
|
182
|
+
const δs = [];
|
|
183
|
+
for (const visitedCp of visitedCps) {
|
|
184
184
|
δs.push([visitedCp, visitedCp.next]);
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
|
|
187
|
+
const threeProng = find3Prong(δs, extreme);
|
|
188
188
|
|
|
189
|
-
|
|
189
|
+
const orders = [];
|
|
190
190
|
for (let i=0; i<3; i++) {
|
|
191
191
|
orders.push(
|
|
192
192
|
//PointOnShape.calcOrder(threeProng.circle, threeProng.ps[i])
|
|
@@ -194,7 +194,7 @@ function findAndAdd3Prong(
|
|
|
194
194
|
);
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
const circle = add3Prong(cpGraphs, orders, threeProng);
|
|
198
198
|
|
|
199
199
|
if (typeof _debug_ !== 'undefined') {
|
|
200
200
|
add3ProngDebugInfo(circle, visitedCps);
|
|
@@ -207,9 +207,9 @@ function add3ProngDebugInfo(
|
|
|
207
207
|
circle: Circle,
|
|
208
208
|
visitedCps: CpNode[]) {
|
|
209
209
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
210
|
+
const threeProngs = _debug_.generated.elems.threeProng;
|
|
211
|
+
const len = threeProngs.length;
|
|
212
|
+
const data = threeProngs[len-1];
|
|
213
213
|
data.visitedCps = visitedCps;
|
|
214
214
|
data.circle = circle;
|
|
215
215
|
}
|
|
@@ -21,19 +21,19 @@ function findAndAddHoleClosing2Prongs(
|
|
|
21
21
|
cpTrees: Map<Loop,LlRbTree<CpNode>>,
|
|
22
22
|
extreme: number) {
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const bounds = getShapeBounds(loops);
|
|
25
|
+
const squaredDiagonalLength =
|
|
26
26
|
(bounds.maxX.p[0] - bounds.minX.p[0])**2 +
|
|
27
27
|
(bounds.maxY.p[1] - bounds.minY.p[1])**2;
|
|
28
28
|
|
|
29
29
|
// Find the topmost points on each loop.
|
|
30
|
-
|
|
30
|
+
const minYs = loops.map(getMinYPos);
|
|
31
31
|
|
|
32
32
|
// We start at 1 since 0 is the outer (root) loop
|
|
33
33
|
for (let k=1; k<minYs.length; k++) {
|
|
34
|
-
|
|
34
|
+
const posSource = minYs[k];
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
const holeClosingTwoProng = find2Prong(
|
|
37
37
|
loops, extreme, squaredDiagonalLength, cpTrees, posSource, true, k
|
|
38
38
|
);
|
|
39
39
|
|
|
@@ -43,7 +43,7 @@ function findAndAddHoleClosing2Prongs(
|
|
|
43
43
|
|
|
44
44
|
// TODO important - handle case of n-prong, i.e. more than one antipode
|
|
45
45
|
// - currently we only handle case of single antipode (the general case)
|
|
46
|
-
|
|
46
|
+
const { circle, zs: posAntipodes } = holeClosingTwoProng;
|
|
47
47
|
|
|
48
48
|
add2Prong(cpTrees, circle, posSource, [posAntipodes[0]], true, extreme);
|
|
49
49
|
}
|
|
@@ -3,12 +3,12 @@ import { IPointOnShape, isPosQuiteSharpCorner } from '../../point-on-shape.js';
|
|
|
3
3
|
|
|
4
4
|
/** @hidden */
|
|
5
5
|
function getPotential2Prongs(possPerLoop: IPointOnShape[][]) {
|
|
6
|
-
|
|
6
|
+
const for2ProngsArray = [];
|
|
7
7
|
|
|
8
|
-
for (
|
|
9
|
-
|
|
8
|
+
for (const poss of possPerLoop) {
|
|
9
|
+
const for2Prongs = [];
|
|
10
10
|
|
|
11
|
-
for (
|
|
11
|
+
for (const pos of poss) {
|
|
12
12
|
if (!isPosQuiteSharpCorner(pos)) {
|
|
13
13
|
for2Prongs.push(pos);
|
|
14
14
|
}
|
|
@@ -3,12 +3,12 @@ import { IPointOnShape, isPosQuiteSharpCorner } from '../../point-on-shape.js';
|
|
|
3
3
|
|
|
4
4
|
/** @hidden */
|
|
5
5
|
function getSharpCorners(possPerLoop: IPointOnShape[][]) {
|
|
6
|
-
|
|
6
|
+
const sharpCornersPerLoop = [];
|
|
7
7
|
|
|
8
|
-
for (
|
|
9
|
-
|
|
8
|
+
for (const poss of possPerLoop) {
|
|
9
|
+
const sharpCorners = [];
|
|
10
10
|
|
|
11
|
-
for (
|
|
11
|
+
for (const pos of poss) {
|
|
12
12
|
//if (PointOnShape.isQuiteSharpCorner(pos)) {
|
|
13
13
|
if (isPosQuiteSharpCorner(pos)) {
|
|
14
14
|
sharpCorners.push(pos);
|
|
@@ -6,7 +6,7 @@ import { getTotalBy } from './get-total-by.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* @hidden
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
const getTotalAbsoluteCurvature = getTotalBy(
|
|
10
10
|
curve => (
|
|
11
11
|
totalAbsoluteCurvature(curve.ps, [0,1]) +
|
|
12
12
|
Math.abs(getCurvatureAtInterface(curve))
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
* @hidden
|
|
8
8
|
*/
|
|
9
9
|
function getClosestSquaredDistanceToRotatedRect(ps: number[][], p: number[]) {
|
|
10
|
-
|
|
10
|
+
const ds = [0,1,2,3].map(i => squaredDistanceBetweenPointAndLineSegment(
|
|
11
11
|
p,
|
|
12
12
|
[ps[i], ps[(i+1) % 4]]
|
|
13
13
|
)
|
|
14
14
|
);
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const width = squaredDistanceBetween(ps[0], ps[1]);
|
|
17
|
+
const height = squaredDistanceBetween(ps[0], ps[3]);
|
|
18
18
|
|
|
19
19
|
if (ds[0] <= height && ds[2] <= height &&
|
|
20
20
|
ds[1] <= width && ds[3] <= width) {
|
|
@@ -14,9 +14,9 @@ import { compareCps } from '../contact-point.js';
|
|
|
14
14
|
*/
|
|
15
15
|
function getBoundaryPieceBeziers(cpNodes: CpNode[]): BezierPiece[] {
|
|
16
16
|
let cpThis = cpNodes[0];
|
|
17
|
-
|
|
17
|
+
const cpEnd = cpNodes[1];
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
const bezierPieces = [];
|
|
20
20
|
|
|
21
21
|
// As opposed to going around the circle and taking the last exit
|
|
22
22
|
let goStraight = true;
|
|
@@ -29,8 +29,8 @@ function getBoundaryPieceBeziers(cpNodes: CpNode[]): BezierPiece[] {
|
|
|
29
29
|
|
|
30
30
|
goStraight = false;
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
const posThis = cpThis .cp.pointOnShape;
|
|
33
|
+
const posNext = cpThis.next.cp.pointOnShape;
|
|
34
34
|
|
|
35
35
|
if (posNext.curve === posThis.curve &&
|
|
36
36
|
//PointOnShape.isQuiteSharpCorner(posThis) &&
|
|
@@ -81,7 +81,7 @@ function addSkippedBeziers(
|
|
|
81
81
|
let curveThis = curveStart;
|
|
82
82
|
do {
|
|
83
83
|
curveThis = curveThis.next;
|
|
84
|
-
|
|
84
|
+
const tEnd = curveThis === curveEnd ? t1 : 1;
|
|
85
85
|
bezierPieces.push({ curve: curveThis, ts: [0, tEnd] });
|
|
86
86
|
} while (curveThis !== curveEnd);
|
|
87
87
|
}
|
|
@@ -8,7 +8,7 @@ import { IPointOnShape } from '../point-on-shape.js';
|
|
|
8
8
|
* @param curve
|
|
9
9
|
*/
|
|
10
10
|
function getContactCirclesAtInterface(curve: Curve): IPointOnShape[] {
|
|
11
|
-
|
|
11
|
+
const { isQuiteSharp, isQuiteDull } = getCornerAtEnd(curve);
|
|
12
12
|
|
|
13
13
|
if (isQuiteSharp) {
|
|
14
14
|
return [new PointOnShape(curve, 1)];
|
|
@@ -2,9 +2,9 @@ import { CpNode } from '../cp-node.js';
|
|
|
2
2
|
import { traverseEdges } from '../traverse-edges.js';
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
/** @
|
|
5
|
+
/** @internal */
|
|
6
6
|
function getEdgesAsArray(cpNode: CpNode) {
|
|
7
|
-
|
|
7
|
+
const cpNodes: CpNode[] = [];
|
|
8
8
|
|
|
9
9
|
traverseEdges(
|
|
10
10
|
cpNode,
|
package/src/mat/get-leaves.ts
CHANGED
|
@@ -3,9 +3,9 @@ import { CpNode } from '../cp-node.js';
|
|
|
3
3
|
|
|
4
4
|
/** @hidden */
|
|
5
5
|
function getLeaves(cpNode: CpNode) {
|
|
6
|
-
|
|
6
|
+
const leaves: CpNode[] = [];
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
const cps = cpNode.getAllOnLoop();
|
|
9
9
|
cps.forEach(function(cp) {
|
|
10
10
|
if (cp.isTerminating()) {
|
|
11
11
|
leaves.push(cp);
|
|
@@ -48,28 +48,28 @@ function isAnotherCpCloseby(
|
|
|
48
48
|
// It seems this can be zero else the ordering should be correct
|
|
49
49
|
//const DISTANCE_THRESHOLD = 0;
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
const cpTree = cpTrees.get(pos.curve.loop);
|
|
52
|
+
const cpNodes = getNeighbouringPoints(cpTree, pos, order, order2);
|
|
53
53
|
if (!cpNodes[0]) { return false }
|
|
54
54
|
|
|
55
|
-
for (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
for (const cpNode of cpNodes) {
|
|
56
|
+
const pos2 = cpNode.cp.pointOnShape;
|
|
57
|
+
const p1 = pos.p;
|
|
58
|
+
const p2 = pos2.p;
|
|
59
59
|
|
|
60
60
|
if (distanceBetween(p1,p2) > DISTANCE_THRESHOLD) {
|
|
61
61
|
continue;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
const v1 = toUnitVector(fromTo(
|
|
65
65
|
cpNode.cp.pointOnShape.p,
|
|
66
66
|
cpNode.cp.circle.center
|
|
67
67
|
));
|
|
68
|
-
|
|
68
|
+
const v2 = toUnitVector(fromTo(
|
|
69
69
|
p1,
|
|
70
70
|
circle.center
|
|
71
71
|
));
|
|
72
|
-
|
|
72
|
+
const cosTheta = dot(v1,v2);
|
|
73
73
|
|
|
74
74
|
if (cosTheta > ANGLE_THRESHOLD) {
|
|
75
75
|
//console.log(`%c${cosTheta} - ${distanceBetween(p1,p2)}`, `color: ${color}`);
|
|
@@ -25,29 +25,29 @@ function simplifyMatMapOnly(
|
|
|
25
25
|
hausdorffTolerance = 1e-1,
|
|
26
26
|
hausdorffSpacing = 1e0) {
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
const simpleMap: Map<CpNode, { ps: number[][], ts: number[] }> = new Map();
|
|
29
29
|
|
|
30
30
|
// Start from a leaf
|
|
31
31
|
while (!cpNode.isTerminating()) {
|
|
32
32
|
cpNode = cpNode.next;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
const branches = getBranches(cpNode, anlgeTolerance);
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
const canDeletes: CpNode[] = [];
|
|
38
38
|
for (let k=0; k<branches.length; k++) {
|
|
39
|
-
|
|
39
|
+
const branch = branches[k];
|
|
40
40
|
|
|
41
41
|
// Try to remove some
|
|
42
42
|
let j = 0;
|
|
43
43
|
while (j < branch.length) {
|
|
44
|
-
|
|
44
|
+
const i = j;
|
|
45
45
|
while (true) {
|
|
46
46
|
j++;
|
|
47
47
|
|
|
48
48
|
if (j === branch.length) { break; }
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
const hd = getTotalHausdorffDistance(i, j, branch, hausdorffSpacing);
|
|
51
51
|
|
|
52
52
|
if (hd > hausdorffTolerance) {
|
|
53
53
|
break;
|
|
@@ -59,17 +59,17 @@ function simplifyMatMapOnly(
|
|
|
59
59
|
if (i+1 === j) {
|
|
60
60
|
// no simplification occured
|
|
61
61
|
} else {
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
const branStart = branch[i];
|
|
63
|
+
const branEnd = branch[j-1];
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
const medial = toCubic(getCurveBetween(branStart, branEnd.next));
|
|
66
|
+
const rev = medial.slice().reverse();
|
|
67
67
|
let curCpNode = branStart;
|
|
68
68
|
let prevT = 0;
|
|
69
69
|
while (curCpNode !== branEnd) {
|
|
70
|
-
|
|
70
|
+
const t = closestPointOnBezier(medial, curCpNode.next.cp.circle.center).t;
|
|
71
71
|
simpleMap.set(curCpNode, { ps: medial, ts: [prevT, t] });
|
|
72
|
-
|
|
72
|
+
const oppositeCpNode = curCpNode.nextOnCircle.prev;
|
|
73
73
|
simpleMap.set(oppositeCpNode, { ps: rev, ts: [1-t, 1-prevT] });
|
|
74
74
|
|
|
75
75
|
prevT = t;
|
|
@@ -77,7 +77,7 @@ function simplifyMatMapOnly(
|
|
|
77
77
|
}
|
|
78
78
|
simpleMap.set(curCpNode, { ps: medial, ts: [prevT, 1] });
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
const oppositeCpNode = curCpNode.nextOnCircle.prev;
|
|
81
81
|
simpleMap.set(oppositeCpNode, { ps: rev, ts: [0, 1-prevT] });
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -93,8 +93,8 @@ function getTotalHausdorffDistance(
|
|
|
93
93
|
branch: CpNode[],
|
|
94
94
|
hausdorffSpacing: number) {
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
const hds: number[] = [];
|
|
97
|
+
const longCurve = getCurveBetween(branch[i], branch[j].next);
|
|
98
98
|
for (let m=i; m<j+1; m++) {
|
|
99
99
|
hds.push(hausdorffDistance(
|
|
100
100
|
getCurveToNext(branch[m]),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare
|
|
1
|
+
declare const _debug_: Debug;
|
|
2
2
|
|
|
3
3
|
import { Debug } from '../../debug/debug.js';
|
|
4
4
|
import { Mat } from '../../mat.js';
|
|
@@ -8,12 +8,15 @@ import { Mat } from '../../mat.js';
|
|
|
8
8
|
* @hidden
|
|
9
9
|
* @param sat
|
|
10
10
|
*/
|
|
11
|
-
function addDebugInfo(
|
|
11
|
+
function addDebugInfo(
|
|
12
|
+
sat: Mat,
|
|
13
|
+
timingStart: number) {
|
|
14
|
+
|
|
12
15
|
if (typeof _debug_ === 'undefined') { return; }
|
|
13
16
|
|
|
14
17
|
_debug_.generated.elems.sat.push(sat);
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
const timing = _debug_.generated.timing;
|
|
17
20
|
timing.sats = performance.now() - timingStart;
|
|
18
21
|
}
|
|
19
22
|
|
|
@@ -25,7 +25,7 @@ function addToTree(
|
|
|
25
25
|
circle: Circle,
|
|
26
26
|
depth: number) {
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
const { groups, newLimits } = calcGroups(
|
|
29
29
|
s,
|
|
30
30
|
coordinate,
|
|
31
31
|
limits,
|
|
@@ -34,15 +34,15 @@ function addToTree(
|
|
|
34
34
|
|
|
35
35
|
// Create new edge if it does not exist yet.
|
|
36
36
|
if (groups.length === 1 && depth !== DEPTH_LIMIT) {
|
|
37
|
-
|
|
37
|
+
const group = groups[0];
|
|
38
38
|
|
|
39
|
-
if (!tree.trees
|
|
40
|
-
tree.trees
|
|
39
|
+
if (!tree.trees!.get(group)) {
|
|
40
|
+
tree.trees!.set(group, { trees: new Map(), circles: new Set() } );
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
const t = tree.trees!.get(group)!;
|
|
43
43
|
|
|
44
44
|
// Flip coordinates
|
|
45
|
-
|
|
45
|
+
const newCoordinate = coordinate ? 0 : 1;
|
|
46
46
|
addToTree(
|
|
47
47
|
s,
|
|
48
48
|
t,
|
|
@@ -55,11 +55,11 @@ function addToTree(
|
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
if (!tree.trees
|
|
59
|
-
tree.trees
|
|
58
|
+
if (!tree.trees!.get(5)) {
|
|
59
|
+
tree.trees!.set(5, { trees: new Map(), circles: new Set() } );
|
|
60
60
|
}
|
|
61
|
-
|
|
62
|
-
vertices
|
|
61
|
+
const vertices = tree.trees!.get(5)!.circles;
|
|
62
|
+
vertices!.add(circle);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
|