flo-mat 2.0.2 → 2.0.4
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/browser/index.js +8409 -8358
- package/browser/index.min.js +1 -1
- package/node/circle.d.ts +20 -20
- package/node/circle.js +31 -31
- package/node/compare-curvatures-at-interface.d.ts +19 -19
- package/node/compare-curvatures-at-interface.js +124 -124
- 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/remove.d.ts +9 -9
- package/node/cp-node/remove.js +19 -19
- package/node/cp-node.d.ts +202 -202
- package/node/cp-node.js +320 -320
- package/node/curve.d.ts +46 -46
- package/node/curve.js +88 -88
- 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/branch.d.ts +4 -4
- package/node/debug/functions/draw-elem/branch.js +22 -22
- 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/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-elem.d.ts +8 -8
- package/node/debug/functions/draw-elem/draw-elem.js +45 -45
- 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/leaves.d.ts +4 -4
- package/node/debug/functions/draw-elem/leaves.js +12 -12
- 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/mat.d.ts +4 -4
- package/node/debug/functions/draw-elem/mat.js +30 -30
- 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/min-y.d.ts +4 -4
- package/node/debug/functions/draw-elem/min-y.js +13 -13
- 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.d.ts +4 -4
- package/node/debug/functions/draw-elem/one-prong.js +16 -16
- 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/three-prong.d.ts +4 -4
- package/node/debug/functions/draw-elem/three-prong.js +16 -16
- 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/two-prong.d.ts +4 -4
- package/node/debug/functions/draw-elem/two-prong.js +36 -36
- 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/general.d.ts +48 -48
- package/node/debug/functions/general.js +52 -52
- package/node/debug/functions/three-prong.d.ts +11 -11
- package/node/debug/functions/three-prong.js +184 -184
- package/node/debug/functions/two-prong.d.ts +13 -13
- package/node/debug/functions/two-prong.js +117 -117
- 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 -122
- 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-beziers-to-next.d.ts +8 -8
- package/node/get-boundary-beziers-to-next.js +44 -44
- 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-curve/get-curve-between.d.ts +9 -9
- package/node/get-curve/get-curve-between.js +56 -56
- 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-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/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.d.ts +16 -16
- package/node/loop.js +34 -34
- package/node/mat/add-to-cp-graph.d.ts +16 -16
- package/node/mat/add-to-cp-graph.js +30 -30
- 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 -72
- 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-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-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/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-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-closest-boundary-point.d.ts +18 -18
- package/node/mat/closest-boundary-point/get-closest-boundary-point.js +40 -40
- 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/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-2-prong.d.ts +21 -21
- package/node/mat/find-mat/add-2-prong.js +192 -192
- 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-debug-info.d.ts +9 -9
- package/node/mat/find-mat/add-debug-info.js +67 -67
- 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-initial-cp-graph.d.ts +12 -12
- package/node/mat/find-mat/create-initial-cp-graph.js +40 -40
- 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/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/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-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/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/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-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/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.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/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-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.d.ts +16 -16
- package/node/mat/find-mat/find-and-add-2-prongs.js +73 -73
- 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 -146
- 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/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-sharp-corners.d.ts +4 -4
- package/node/mat/find-mat/get-sharp-corners.js +17 -17
- 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/get-boundary-piece-beziers.d.ts +11 -11
- package/node/mat/get-boundary-piece-beziers.js +58 -58
- 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-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-neighboring-cps.d.ts +14 -14
- package/node/mat/get-neighboring-cps.js +30 -30
- 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/simplify-mat-map-only.d.ts +23 -23
- package/node/mat/simplify-mat-map-only.js +80 -80
- 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/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.d.ts +12 -12
- package/node/mat/to-scale-axis/cull.js +132 -132
- package/node/mat/trim-mat.d.ts +8 -8
- package/node/mat/trim-mat.js +16 -16
- 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/simplify-mat.d.ts +16 -16
- package/node/simplify-mat.js +71 -71
- package/node/svg/get-loop-bounds.d.ts +12 -12
- package/node/svg/get-loop-bounds.js +80 -80
- 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/sweep-line/sweep-line.d.ts +18 -18
- package/node/sweep-line/sweep-line.js +72 -72
- package/node/to-scale-axis.d.ts +16 -16
- package/node/to-scale-axis.js +74 -74
- package/node/traverse-edges.d.ts +10 -10
- package/node/traverse-edges.js +21 -21
- package/node/traverse-vertices.d.ts +12 -12
- package/node/traverse-vertices.js +27 -27
- package/package.json +15 -15
- package/tsconfig.json +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Curve } from '../curve.js';
|
|
2
|
-
/**
|
|
3
|
-
* @hidden
|
|
4
|
-
* Represents a part of a bezier within the shape boundary.
|
|
5
|
-
*/
|
|
6
|
-
interface BezierPiece {
|
|
7
|
-
/** A bezier curve within the shape boundary. */
|
|
8
|
-
curve: Curve;
|
|
9
|
-
/** The start and end t parameter values of the bezier curve. */
|
|
10
|
-
ts: number[];
|
|
11
|
-
}
|
|
12
|
-
export { BezierPiece };
|
|
1
|
+
import { Curve } from '../curve.js';
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
* Represents a part of a bezier within the shape boundary.
|
|
5
|
+
*/
|
|
6
|
+
interface BezierPiece {
|
|
7
|
+
/** A bezier curve within the shape boundary. */
|
|
8
|
+
curve: Curve;
|
|
9
|
+
/** The start and end t parameter values of the bezier curve. */
|
|
10
|
+
ts: number[];
|
|
11
|
+
}
|
|
12
|
+
export { BezierPiece };
|
package/node/mat/bezier-piece.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=bezier-piece.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { Curve } from "../../curve.js";
|
|
2
|
-
/**
|
|
3
|
-
* @hidden
|
|
4
|
-
* @param curve The curve
|
|
5
|
-
* @param p The point from which to check
|
|
6
|
-
* @param tRange The allowed t range
|
|
7
|
-
* @param touchedCurve The bezier on which p is located
|
|
8
|
-
* @param t The t value of the bezier that locates p
|
|
9
|
-
*/
|
|
10
|
-
declare function closestPointsOnCurve(curve: Curve, p: number[], [tS, tE]: number[], touchedCurve: Curve, t: number): {
|
|
11
|
-
p: number[];
|
|
12
|
-
t: number;
|
|
13
|
-
}[];
|
|
14
|
-
export { closestPointsOnCurve };
|
|
1
|
+
import { Curve } from "../../curve.js";
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
* @param curve The curve
|
|
5
|
+
* @param p The point from which to check
|
|
6
|
+
* @param tRange The allowed t range
|
|
7
|
+
* @param touchedCurve The bezier on which p is located
|
|
8
|
+
* @param t The t value of the bezier that locates p
|
|
9
|
+
*/
|
|
10
|
+
declare function closestPointsOnCurve(curve: Curve, p: number[], [tS, tE]: number[], touchedCurve: Curve, t: number): {
|
|
11
|
+
p: number[];
|
|
12
|
+
t: number;
|
|
13
|
+
}[];
|
|
14
|
+
export { closestPointsOnCurve };
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
// qqq import { deflateQuad, allRootsMultiWithErrBounds, RootInterval } from 'flo-poly';
|
|
2
|
-
// qqq import { getTangentPolyFromPointExact, evalDeCasteljau, evaluate, getFootpointPolyExact } from 'flo-bezier3';
|
|
3
|
-
import { ddDeflate, allRootsCertified } from 'flo-poly';
|
|
4
|
-
import { evaluate, getFootpointPolyDd } from 'flo-bezier3';
|
|
5
|
-
/**
|
|
6
|
-
* @hidden
|
|
7
|
-
* @param curve The curve
|
|
8
|
-
* @param p The point from which to check
|
|
9
|
-
* @param tRange The allowed t range
|
|
10
|
-
* @param touchedCurve The bezier on which p is located
|
|
11
|
-
* @param t The t value of the bezier that locates p
|
|
12
|
-
*/
|
|
13
|
-
function closestPointsOnCurve(curve, p, [tS, tE] = [0, 1], touchedCurve, t) {
|
|
14
|
-
// qqq let poly = getTangentPolyFromPointExact(curve.ps, p);
|
|
15
|
-
const _poly = getFootpointPolyDd(curve.ps, p);
|
|
16
|
-
// qqq poly = deflateQuad(poly, t);
|
|
17
|
-
const poly = curve === touchedCurve
|
|
18
|
-
? ddDeflate(_poly, t)
|
|
19
|
-
: _poly;
|
|
20
|
-
// let roots: Omit<RootInterval,'multiplicity'>[] = allRootsMultiWithErrBounds(
|
|
21
|
-
const roots = allRootsCertified(poly, tS, tE);
|
|
22
|
-
// Also test the endpoints
|
|
23
|
-
let push0 = true;
|
|
24
|
-
let push1 = true;
|
|
25
|
-
if ((t === 1 && curve === touchedCurve.next) ||
|
|
26
|
-
(t === 0 && curve === touchedCurve)) {
|
|
27
|
-
push0 = false;
|
|
28
|
-
}
|
|
29
|
-
if ((t === 0 && curve === touchedCurve.prev) ||
|
|
30
|
-
(t === 1 && curve === touchedCurve)) {
|
|
31
|
-
push1 = false;
|
|
32
|
-
}
|
|
33
|
-
if (tS === 0) {
|
|
34
|
-
if (push0) {
|
|
35
|
-
roots.push({ tS: 0, tE: 0 });
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else if (tS === 1) {
|
|
39
|
-
if (push1) {
|
|
40
|
-
roots.push({ tS: 1, tE: 1 });
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
roots.push({ tS: tS, tE: tS });
|
|
45
|
-
}
|
|
46
|
-
if (tE === 0) {
|
|
47
|
-
if (push0) {
|
|
48
|
-
roots.push({ tS: 0, tE: 0 });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
else if (tE === 1) {
|
|
52
|
-
if (push1) {
|
|
53
|
-
roots.push({ tS: 1, tE: 1 });
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
roots.push({ tS: tE, tE: tE });
|
|
58
|
-
}
|
|
59
|
-
const ps = roots.map(root => {
|
|
60
|
-
const tS = root.tS;
|
|
61
|
-
const tE = root.tE;
|
|
62
|
-
// TODO - tS, tE should always stay within [0,1] - modify findRootsMulti
|
|
63
|
-
const t = tS < 0
|
|
64
|
-
? 0
|
|
65
|
-
: tE > 1 ? 1 : (tS + tE) / 2;
|
|
66
|
-
// TODO - why does evalDeCasteljau not work here?
|
|
67
|
-
return { p: evaluate(curve.ps, t), t };
|
|
68
|
-
//return { p: evalDeCasteljau(curve.ps,t), t }
|
|
69
|
-
});
|
|
70
|
-
return ps;
|
|
71
|
-
}
|
|
72
|
-
export { closestPointsOnCurve };
|
|
1
|
+
// qqq import { deflateQuad, allRootsMultiWithErrBounds, RootInterval } from 'flo-poly';
|
|
2
|
+
// qqq import { getTangentPolyFromPointExact, evalDeCasteljau, evaluate, getFootpointPolyExact } from 'flo-bezier3';
|
|
3
|
+
import { ddDeflate, allRootsCertified } from 'flo-poly';
|
|
4
|
+
import { evaluate, getFootpointPolyDd } from 'flo-bezier3';
|
|
5
|
+
/**
|
|
6
|
+
* @hidden
|
|
7
|
+
* @param curve The curve
|
|
8
|
+
* @param p The point from which to check
|
|
9
|
+
* @param tRange The allowed t range
|
|
10
|
+
* @param touchedCurve The bezier on which p is located
|
|
11
|
+
* @param t The t value of the bezier that locates p
|
|
12
|
+
*/
|
|
13
|
+
function closestPointsOnCurve(curve, p, [tS, tE] = [0, 1], touchedCurve, t) {
|
|
14
|
+
// qqq let poly = getTangentPolyFromPointExact(curve.ps, p);
|
|
15
|
+
const _poly = getFootpointPolyDd(curve.ps, p);
|
|
16
|
+
// qqq poly = deflateQuad(poly, t);
|
|
17
|
+
const poly = curve === touchedCurve
|
|
18
|
+
? ddDeflate(_poly, t)
|
|
19
|
+
: _poly;
|
|
20
|
+
// let roots: Omit<RootInterval,'multiplicity'>[] = allRootsMultiWithErrBounds(
|
|
21
|
+
const roots = allRootsCertified(poly, tS, tE);
|
|
22
|
+
// Also test the endpoints
|
|
23
|
+
let push0 = true;
|
|
24
|
+
let push1 = true;
|
|
25
|
+
if ((t === 1 && curve === touchedCurve.next) ||
|
|
26
|
+
(t === 0 && curve === touchedCurve)) {
|
|
27
|
+
push0 = false;
|
|
28
|
+
}
|
|
29
|
+
if ((t === 0 && curve === touchedCurve.prev) ||
|
|
30
|
+
(t === 1 && curve === touchedCurve)) {
|
|
31
|
+
push1 = false;
|
|
32
|
+
}
|
|
33
|
+
if (tS === 0) {
|
|
34
|
+
if (push0) {
|
|
35
|
+
roots.push({ tS: 0, tE: 0 });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (tS === 1) {
|
|
39
|
+
if (push1) {
|
|
40
|
+
roots.push({ tS: 1, tE: 1 });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
roots.push({ tS: tS, tE: tS });
|
|
45
|
+
}
|
|
46
|
+
if (tE === 0) {
|
|
47
|
+
if (push0) {
|
|
48
|
+
roots.push({ tS: 0, tE: 0 });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (tE === 1) {
|
|
52
|
+
if (push1) {
|
|
53
|
+
roots.push({ tS: 1, tE: 1 });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
roots.push({ tS: tE, tE: tE });
|
|
58
|
+
}
|
|
59
|
+
const ps = roots.map(root => {
|
|
60
|
+
const tS = root.tS;
|
|
61
|
+
const tE = root.tE;
|
|
62
|
+
// TODO - tS, tE should always stay within [0,1] - modify findRootsMulti
|
|
63
|
+
const t = tS < 0
|
|
64
|
+
? 0
|
|
65
|
+
: tE > 1 ? 1 : (tS + tE) / 2;
|
|
66
|
+
// TODO - why does evalDeCasteljau not work here?
|
|
67
|
+
return { p: evaluate(curve.ps, t), t };
|
|
68
|
+
//return { p: evalDeCasteljau(curve.ps,t), t }
|
|
69
|
+
});
|
|
70
|
+
return ps;
|
|
71
|
+
}
|
|
72
|
+
export { closestPointsOnCurve };
|
|
73
73
|
//# sourceMappingURL=closest-points-on-curve.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { BezierPiece } from '../bezier-piece.js';
|
|
2
|
-
/**
|
|
3
|
-
* @hidden
|
|
4
|
-
* @param bezierPieces
|
|
5
|
-
* @param p
|
|
6
|
-
* @param extreme
|
|
7
|
-
*/
|
|
8
|
-
declare function cullBezierPieces(bezierPieces: BezierPiece[], p: number[]): BezierPiece[];
|
|
9
|
-
export { cullBezierPieces };
|
|
1
|
+
import { BezierPiece } from '../bezier-piece.js';
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
* @param bezierPieces
|
|
5
|
+
* @param p
|
|
6
|
+
* @param extreme
|
|
7
|
+
*/
|
|
8
|
+
declare function cullBezierPieces(bezierPieces: BezierPiece[], p: number[]): BezierPiece[];
|
|
9
|
+
export { cullBezierPieces };
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { getBestDistanceSquared } from './get-best-distance-squared.js';
|
|
2
|
-
import { cullByLooseBoundingBox } from './cull-by-loose-bounding-box.js';
|
|
3
|
-
import { cullByTightBoundingBox } from './cull-by-tight-boundary-box.js';
|
|
4
|
-
/**
|
|
5
|
-
* @hidden
|
|
6
|
-
* @param bezierPieces
|
|
7
|
-
* @param p
|
|
8
|
-
* @param extreme
|
|
9
|
-
*/
|
|
10
|
-
function cullBezierPieces(bezierPieces, p) {
|
|
11
|
-
const CULL_THRESHOLD = 0;
|
|
12
|
-
if (bezierPieces.length > CULL_THRESHOLD) {
|
|
13
|
-
const bestSquaredDistance = getBestDistanceSquared(bezierPieces, p);
|
|
14
|
-
bezierPieces = cullByLooseBoundingBox(bezierPieces, p, bestSquaredDistance);
|
|
15
|
-
bezierPieces = cullByTightBoundingBox(bezierPieces, p, bestSquaredDistance);
|
|
16
|
-
}
|
|
17
|
-
return bezierPieces;
|
|
18
|
-
}
|
|
19
|
-
export { cullBezierPieces };
|
|
1
|
+
import { getBestDistanceSquared } from './get-best-distance-squared.js';
|
|
2
|
+
import { cullByLooseBoundingBox } from './cull-by-loose-bounding-box.js';
|
|
3
|
+
import { cullByTightBoundingBox } from './cull-by-tight-boundary-box.js';
|
|
4
|
+
/**
|
|
5
|
+
* @hidden
|
|
6
|
+
* @param bezierPieces
|
|
7
|
+
* @param p
|
|
8
|
+
* @param extreme
|
|
9
|
+
*/
|
|
10
|
+
function cullBezierPieces(bezierPieces, p) {
|
|
11
|
+
const CULL_THRESHOLD = 0;
|
|
12
|
+
if (bezierPieces.length > CULL_THRESHOLD) {
|
|
13
|
+
const bestSquaredDistance = getBestDistanceSquared(bezierPieces, p);
|
|
14
|
+
bezierPieces = cullByLooseBoundingBox(bezierPieces, p, bestSquaredDistance);
|
|
15
|
+
bezierPieces = cullByTightBoundingBox(bezierPieces, p, bestSquaredDistance);
|
|
16
|
+
}
|
|
17
|
+
return bezierPieces;
|
|
18
|
+
}
|
|
19
|
+
export { cullBezierPieces };
|
|
20
20
|
//# sourceMappingURL=cull-bezier-pieces.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { BezierPiece } from '../bezier-piece.js';
|
|
2
|
-
/**
|
|
3
|
-
* @hidden
|
|
4
|
-
* When checking distances, ignore all those with closest possible distance
|
|
5
|
-
* further than 'bestSquaredDistance', i.e. cull them.
|
|
6
|
-
* @param bezierPieces
|
|
7
|
-
* @param p
|
|
8
|
-
* @param dSquared
|
|
9
|
-
*/
|
|
10
|
-
declare function cullByLooseBoundingBox(bezierPieces: BezierPiece[], p: number[], dSquared: number): BezierPiece[];
|
|
11
|
-
export { cullByLooseBoundingBox };
|
|
1
|
+
import { BezierPiece } from '../bezier-piece.js';
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
* When checking distances, ignore all those with closest possible distance
|
|
5
|
+
* further than 'bestSquaredDistance', i.e. cull them.
|
|
6
|
+
* @param bezierPieces
|
|
7
|
+
* @param p
|
|
8
|
+
* @param dSquared
|
|
9
|
+
*/
|
|
10
|
+
declare function cullByLooseBoundingBox(bezierPieces: BezierPiece[], p: number[], dSquared: number): BezierPiece[];
|
|
11
|
+
export { cullByLooseBoundingBox };
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { getBoundingBox_ } from '../../get-bounding-box-.js';
|
|
2
|
-
import { getClosestSquareDistanceToRect } from '../geometry/get-closest-square-distance-to-rect.js';
|
|
3
|
-
/**
|
|
4
|
-
* @hidden
|
|
5
|
-
* When checking distances, ignore all those with closest possible distance
|
|
6
|
-
* further than 'bestSquaredDistance', i.e. cull them.
|
|
7
|
-
* @param bezierPieces
|
|
8
|
-
* @param p
|
|
9
|
-
* @param dSquared
|
|
10
|
-
*/
|
|
11
|
-
function cullByLooseBoundingBox(bezierPieces, p, dSquared) {
|
|
12
|
-
const candidateBezierPieces = [];
|
|
13
|
-
for (let i = 0; i < bezierPieces.length; i++) {
|
|
14
|
-
const bezierPiece = bezierPieces[i];
|
|
15
|
-
const ps = bezierPiece.curve.ps;
|
|
16
|
-
const boundingBox = getBoundingBox_(ps);
|
|
17
|
-
const d = getClosestSquareDistanceToRect(boundingBox, p);
|
|
18
|
-
if (d <= dSquared) {
|
|
19
|
-
candidateBezierPieces.push(bezierPiece);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return candidateBezierPieces;
|
|
23
|
-
}
|
|
24
|
-
export { cullByLooseBoundingBox };
|
|
1
|
+
import { getBoundingBox_ } from '../../get-bounding-box-.js';
|
|
2
|
+
import { getClosestSquareDistanceToRect } from '../geometry/get-closest-square-distance-to-rect.js';
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
* When checking distances, ignore all those with closest possible distance
|
|
6
|
+
* further than 'bestSquaredDistance', i.e. cull them.
|
|
7
|
+
* @param bezierPieces
|
|
8
|
+
* @param p
|
|
9
|
+
* @param dSquared
|
|
10
|
+
*/
|
|
11
|
+
function cullByLooseBoundingBox(bezierPieces, p, dSquared) {
|
|
12
|
+
const candidateBezierPieces = [];
|
|
13
|
+
for (let i = 0; i < bezierPieces.length; i++) {
|
|
14
|
+
const bezierPiece = bezierPieces[i];
|
|
15
|
+
const ps = bezierPiece.curve.ps;
|
|
16
|
+
const boundingBox = getBoundingBox_(ps);
|
|
17
|
+
const d = getClosestSquareDistanceToRect(boundingBox, p);
|
|
18
|
+
if (d <= dSquared) {
|
|
19
|
+
candidateBezierPieces.push(bezierPiece);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return candidateBezierPieces;
|
|
23
|
+
}
|
|
24
|
+
export { cullByLooseBoundingBox };
|
|
25
25
|
//# sourceMappingURL=cull-by-loose-bounding-box.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { BezierPiece } from "../bezier-piece.js";
|
|
2
|
-
/**
|
|
3
|
-
* @hidden
|
|
4
|
-
* When checking distances, ignore all those with closest possible distance
|
|
5
|
-
* further than 'bestSquaredDistance', i.e. cull them.
|
|
6
|
-
* @param bezierPieces
|
|
7
|
-
* @param p
|
|
8
|
-
* @param bestSquaredDistance
|
|
9
|
-
*/
|
|
10
|
-
declare function cullByTightBoundingBox(bezierPieces: BezierPiece[], p: number[], bestSquaredDistance: number): BezierPiece[];
|
|
11
|
-
export { cullByTightBoundingBox };
|
|
1
|
+
import { BezierPiece } from "../bezier-piece.js";
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
* When checking distances, ignore all those with closest possible distance
|
|
5
|
+
* further than 'bestSquaredDistance', i.e. cull them.
|
|
6
|
+
* @param bezierPieces
|
|
7
|
+
* @param p
|
|
8
|
+
* @param bestSquaredDistance
|
|
9
|
+
*/
|
|
10
|
+
declare function cullByTightBoundingBox(bezierPieces: BezierPiece[], p: number[], bestSquaredDistance: number): BezierPiece[];
|
|
11
|
+
export { cullByTightBoundingBox };
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { getBoundingBoxTight } from "flo-bezier3";
|
|
2
|
-
import { memoize } from "flo-memoize";
|
|
3
|
-
import { getClosestSquaredDistanceToRotatedRect } from '../geometry/get-closest-squared-distance-to-rotated-rect.js';
|
|
4
|
-
const getBoundingBoxTight_ = memoize(getBoundingBoxTight);
|
|
5
|
-
/**
|
|
6
|
-
* @hidden
|
|
7
|
-
* When checking distances, ignore all those with closest possible distance
|
|
8
|
-
* further than 'bestSquaredDistance', i.e. cull them.
|
|
9
|
-
* @param bezierPieces
|
|
10
|
-
* @param p
|
|
11
|
-
* @param bestSquaredDistance
|
|
12
|
-
*/
|
|
13
|
-
function cullByTightBoundingBox(bezierPieces, p, bestSquaredDistance) {
|
|
14
|
-
const candidateBezierPieces = [];
|
|
15
|
-
for (let i = 0; i < bezierPieces.length; i++) {
|
|
16
|
-
const bezierPiece = bezierPieces[i];
|
|
17
|
-
const ps = bezierPiece.curve.ps;
|
|
18
|
-
const tightBoundingBox = getBoundingBoxTight_(ps);
|
|
19
|
-
const d = getClosestSquaredDistanceToRotatedRect(tightBoundingBox, p);
|
|
20
|
-
if (d <= bestSquaredDistance) {
|
|
21
|
-
candidateBezierPieces.push(bezierPiece);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return candidateBezierPieces;
|
|
25
|
-
}
|
|
26
|
-
export { cullByTightBoundingBox };
|
|
1
|
+
import { getBoundingBoxTight } from "flo-bezier3";
|
|
2
|
+
import { memoize } from "flo-memoize";
|
|
3
|
+
import { getClosestSquaredDistanceToRotatedRect } from '../geometry/get-closest-squared-distance-to-rotated-rect.js';
|
|
4
|
+
const getBoundingBoxTight_ = memoize(getBoundingBoxTight);
|
|
5
|
+
/**
|
|
6
|
+
* @hidden
|
|
7
|
+
* When checking distances, ignore all those with closest possible distance
|
|
8
|
+
* further than 'bestSquaredDistance', i.e. cull them.
|
|
9
|
+
* @param bezierPieces
|
|
10
|
+
* @param p
|
|
11
|
+
* @param bestSquaredDistance
|
|
12
|
+
*/
|
|
13
|
+
function cullByTightBoundingBox(bezierPieces, p, bestSquaredDistance) {
|
|
14
|
+
const candidateBezierPieces = [];
|
|
15
|
+
for (let i = 0; i < bezierPieces.length; i++) {
|
|
16
|
+
const bezierPiece = bezierPieces[i];
|
|
17
|
+
const ps = bezierPiece.curve.ps;
|
|
18
|
+
const tightBoundingBox = getBoundingBoxTight_(ps);
|
|
19
|
+
const d = getClosestSquaredDistanceToRotatedRect(tightBoundingBox, p);
|
|
20
|
+
if (d <= bestSquaredDistance) {
|
|
21
|
+
candidateBezierPieces.push(bezierPiece);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return candidateBezierPieces;
|
|
25
|
+
}
|
|
26
|
+
export { cullByTightBoundingBox };
|
|
27
27
|
//# sourceMappingURL=cull-by-tight-boundary-box.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BezierPiece } from "../bezier-piece.js";
|
|
2
|
-
/**
|
|
3
|
-
* @hidden
|
|
4
|
-
* Finds an initial distance such that the closest point can not be further than
|
|
5
|
-
* this distance away.
|
|
6
|
-
*/
|
|
7
|
-
declare function getBestDistanceSquared(bezierPieces: BezierPiece[], p: number[]): number;
|
|
8
|
-
export { getBestDistanceSquared };
|
|
1
|
+
import { BezierPiece } from "../bezier-piece.js";
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
* Finds an initial distance such that the closest point can not be further than
|
|
5
|
+
* this distance away.
|
|
6
|
+
*/
|
|
7
|
+
declare function getBestDistanceSquared(bezierPieces: BezierPiece[], p: number[]): number;
|
|
8
|
+
export { getBestDistanceSquared };
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { evalDeCasteljau } from 'flo-bezier3';
|
|
2
|
-
import { squaredDistanceBetween } from 'flo-vector2d';
|
|
3
|
-
/**
|
|
4
|
-
* @hidden
|
|
5
|
-
* Finds an initial distance such that the closest point can not be further than
|
|
6
|
-
* this distance away.
|
|
7
|
-
*/
|
|
8
|
-
function getBestDistanceSquared(bezierPieces, p) {
|
|
9
|
-
let bestSquaredDistance = Number.POSITIVE_INFINITY;
|
|
10
|
-
for (let i = 0; i < bezierPieces.length; i++) {
|
|
11
|
-
const bezierPiece = bezierPieces[i];
|
|
12
|
-
const ps = bezierPiece.curve.ps;
|
|
13
|
-
const p1 = evalDeCasteljau(ps, bezierPiece.ts[0]);
|
|
14
|
-
const p2 = evalDeCasteljau(ps, bezierPiece.ts[1]);
|
|
15
|
-
const d = Math.min(squaredDistanceBetween(p, p1), squaredDistanceBetween(p, p2));
|
|
16
|
-
if (d < bestSquaredDistance) {
|
|
17
|
-
bestSquaredDistance = d;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
// The extra multiplier is to account for floating point precision.
|
|
21
|
-
// TODO - remove delta (or base it on theory)
|
|
22
|
-
return bestSquaredDistance * 1.01;
|
|
23
|
-
}
|
|
24
|
-
export { getBestDistanceSquared };
|
|
1
|
+
import { evalDeCasteljau } from 'flo-bezier3';
|
|
2
|
+
import { squaredDistanceBetween } from 'flo-vector2d';
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
* Finds an initial distance such that the closest point can not be further than
|
|
6
|
+
* this distance away.
|
|
7
|
+
*/
|
|
8
|
+
function getBestDistanceSquared(bezierPieces, p) {
|
|
9
|
+
let bestSquaredDistance = Number.POSITIVE_INFINITY;
|
|
10
|
+
for (let i = 0; i < bezierPieces.length; i++) {
|
|
11
|
+
const bezierPiece = bezierPieces[i];
|
|
12
|
+
const ps = bezierPiece.curve.ps;
|
|
13
|
+
const p1 = evalDeCasteljau(ps, bezierPiece.ts[0]);
|
|
14
|
+
const p2 = evalDeCasteljau(ps, bezierPiece.ts[1]);
|
|
15
|
+
const d = Math.min(squaredDistanceBetween(p, p1), squaredDistanceBetween(p, p2));
|
|
16
|
+
if (d < bestSquaredDistance) {
|
|
17
|
+
bestSquaredDistance = d;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// The extra multiplier is to account for floating point precision.
|
|
21
|
+
// TODO - remove delta (or base it on theory)
|
|
22
|
+
return bestSquaredDistance * 1.01;
|
|
23
|
+
}
|
|
24
|
+
export { getBestDistanceSquared };
|
|
25
25
|
//# sourceMappingURL=get-best-distance-squared.js.map
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { IPointOnShape } from '../../point-on-shape.js';
|
|
2
|
-
import { BezierPiece } from '../bezier-piece.js';
|
|
3
|
-
/**
|
|
4
|
-
* @hidden
|
|
5
|
-
* Returns the closest boundary point to the given point, limited to the given
|
|
6
|
-
* bezier pieces, including the beziers actually checked after culling.
|
|
7
|
-
* @param bezierPieces
|
|
8
|
-
* @param point
|
|
9
|
-
* @param touchedCurve
|
|
10
|
-
* @param t
|
|
11
|
-
* @param extreme
|
|
12
|
-
*/
|
|
13
|
-
declare function getCloseBoundaryPoints(bezierPieces: BezierPiece[], point: number[], y: IPointOnShape, distance: number): {
|
|
14
|
-
pos: IPointOnShape;
|
|
15
|
-
d: number;
|
|
16
|
-
}[];
|
|
17
|
-
export { getCloseBoundaryPoints };
|
|
1
|
+
import { IPointOnShape } from '../../point-on-shape.js';
|
|
2
|
+
import { BezierPiece } from '../bezier-piece.js';
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
* Returns the closest boundary point to the given point, limited to the given
|
|
6
|
+
* bezier pieces, including the beziers actually checked after culling.
|
|
7
|
+
* @param bezierPieces
|
|
8
|
+
* @param point
|
|
9
|
+
* @param touchedCurve
|
|
10
|
+
* @param t
|
|
11
|
+
* @param extreme
|
|
12
|
+
*/
|
|
13
|
+
declare function getCloseBoundaryPoints(bezierPieces: BezierPiece[], point: number[], y: IPointOnShape, distance: number): {
|
|
14
|
+
pos: IPointOnShape;
|
|
15
|
+
d: number;
|
|
16
|
+
}[];
|
|
17
|
+
export { getCloseBoundaryPoints };
|