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,81 +1,81 @@
|
|
|
1
|
-
import { distanceBetween } from 'flo-vector2d';
|
|
2
|
-
import { PointOnShape } from '../../point-on-shape.js';
|
|
3
|
-
import { cullBezierPieces } from './cull-bezier-pieces.js';
|
|
4
|
-
import { closestPointsOnCurve } from './closest-points-on-curve.js';
|
|
5
|
-
/**
|
|
6
|
-
* @hidden
|
|
7
|
-
* Returns the closest boundary point to the given point, limited to the given
|
|
8
|
-
* bezier pieces, including the beziers actually checked after culling.
|
|
9
|
-
* @param bezierPieces
|
|
10
|
-
* @param point
|
|
11
|
-
* @param touchedCurve
|
|
12
|
-
* @param t
|
|
13
|
-
* @param extreme
|
|
14
|
-
*/
|
|
15
|
-
function getCloseBoundaryPoints(bezierPieces, point, y, distance) {
|
|
16
|
-
const touchedCurve = y.curve;
|
|
17
|
-
const t = y.t;
|
|
18
|
-
const p_ = y.p;
|
|
19
|
-
bezierPieces = cullBezierPieces(bezierPieces, point);
|
|
20
|
-
// TODO - integrate with is-another-cp-closeby - we MUST check angle too!
|
|
21
|
-
const DISTANCE_TOLERANCE = 1e-9;
|
|
22
|
-
const posInfos = [];
|
|
23
|
-
for (let i = 0; i < bezierPieces.length; i++) {
|
|
24
|
-
const bezierPiece = bezierPieces[i];
|
|
25
|
-
// TOOD - important - should be able to return multiple points
|
|
26
|
-
const ps = closestPointsOnCurve(bezierPiece.curve, point, bezierPiece.ts, touchedCurve, t);
|
|
27
|
-
//if (ps === undefined) { continue; }
|
|
28
|
-
for (let j = 0; j < ps.length; j++) {
|
|
29
|
-
const p = ps[j];
|
|
30
|
-
const d = distanceBetween(p.p, point);
|
|
31
|
-
let curve = bezierPiece.curve;
|
|
32
|
-
let t_ = p.t;
|
|
33
|
-
if (Math.abs(d - distance) < DISTANCE_TOLERANCE) {
|
|
34
|
-
if (t_ === 0) {
|
|
35
|
-
t_ = 1;
|
|
36
|
-
curve = bezierPiece.curve.prev;
|
|
37
|
-
}
|
|
38
|
-
posInfos.push({ pos: new PointOnShape(curve, t_), d });
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (posInfos.length > 1) {
|
|
43
|
-
// Remove ones that are too close together.
|
|
44
|
-
// TODO - in future remove all these checks and join n-prongs when they
|
|
45
|
-
// are being added - much simpler and more symmetric. Remeber order when
|
|
46
|
-
// comparing closeness!
|
|
47
|
-
const indexesToCheck = [];
|
|
48
|
-
for (let i = 0; i < posInfos.length; i++) {
|
|
49
|
-
const pi = posInfos[i];
|
|
50
|
-
// Only check if they are close to the edges. Why??
|
|
51
|
-
//if (pi.pos.t < 1e-2 || 1-pi.pos.t < 1e-2) {
|
|
52
|
-
indexesToCheck.push(i);
|
|
53
|
-
//}
|
|
54
|
-
}
|
|
55
|
-
const indexesToRemove = [];
|
|
56
|
-
for (let i = 0; i < indexesToCheck.length; i++) {
|
|
57
|
-
for (let j = i + 1; j < indexesToCheck.length; j++) {
|
|
58
|
-
if (i === j) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
const p1 = posInfos[indexesToCheck[i]].pos.p;
|
|
62
|
-
const p2 = posInfos[indexesToCheck[j]].pos.p;
|
|
63
|
-
// Below checks for source point too - similar to
|
|
64
|
-
// isAnotherCpCloseBy
|
|
65
|
-
const p3 = p_;
|
|
66
|
-
if ((Math.abs(p1[0] - p2[0]) < 1e-6 &&
|
|
67
|
-
Math.abs(p1[1] - p2[1]) < 1e-6) ||
|
|
68
|
-
(Math.abs(p1[0] - p3[0]) < 1e-6 &&
|
|
69
|
-
Math.abs(p1[1] - p3[1]) < 1e-6)) {
|
|
70
|
-
indexesToRemove.push(indexesToCheck[i]);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
for (let i = indexesToRemove.length - 1; i >= 0; i--) {
|
|
75
|
-
posInfos.splice(indexesToRemove[i], 1);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return posInfos;
|
|
79
|
-
}
|
|
80
|
-
export { getCloseBoundaryPoints };
|
|
1
|
+
import { distanceBetween } from 'flo-vector2d';
|
|
2
|
+
import { PointOnShape } from '../../point-on-shape.js';
|
|
3
|
+
import { cullBezierPieces } from './cull-bezier-pieces.js';
|
|
4
|
+
import { closestPointsOnCurve } from './closest-points-on-curve.js';
|
|
5
|
+
/**
|
|
6
|
+
* @hidden
|
|
7
|
+
* Returns the closest boundary point to the given point, limited to the given
|
|
8
|
+
* bezier pieces, including the beziers actually checked after culling.
|
|
9
|
+
* @param bezierPieces
|
|
10
|
+
* @param point
|
|
11
|
+
* @param touchedCurve
|
|
12
|
+
* @param t
|
|
13
|
+
* @param extreme
|
|
14
|
+
*/
|
|
15
|
+
function getCloseBoundaryPoints(bezierPieces, point, y, distance) {
|
|
16
|
+
const touchedCurve = y.curve;
|
|
17
|
+
const t = y.t;
|
|
18
|
+
const p_ = y.p;
|
|
19
|
+
bezierPieces = cullBezierPieces(bezierPieces, point);
|
|
20
|
+
// TODO - integrate with is-another-cp-closeby - we MUST check angle too!
|
|
21
|
+
const DISTANCE_TOLERANCE = 1e-9;
|
|
22
|
+
const posInfos = [];
|
|
23
|
+
for (let i = 0; i < bezierPieces.length; i++) {
|
|
24
|
+
const bezierPiece = bezierPieces[i];
|
|
25
|
+
// TOOD - important - should be able to return multiple points
|
|
26
|
+
const ps = closestPointsOnCurve(bezierPiece.curve, point, bezierPiece.ts, touchedCurve, t);
|
|
27
|
+
//if (ps === undefined) { continue; }
|
|
28
|
+
for (let j = 0; j < ps.length; j++) {
|
|
29
|
+
const p = ps[j];
|
|
30
|
+
const d = distanceBetween(p.p, point);
|
|
31
|
+
let curve = bezierPiece.curve;
|
|
32
|
+
let t_ = p.t;
|
|
33
|
+
if (Math.abs(d - distance) < DISTANCE_TOLERANCE) {
|
|
34
|
+
if (t_ === 0) {
|
|
35
|
+
t_ = 1;
|
|
36
|
+
curve = bezierPiece.curve.prev;
|
|
37
|
+
}
|
|
38
|
+
posInfos.push({ pos: new PointOnShape(curve, t_), d });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (posInfos.length > 1) {
|
|
43
|
+
// Remove ones that are too close together.
|
|
44
|
+
// TODO - in future remove all these checks and join n-prongs when they
|
|
45
|
+
// are being added - much simpler and more symmetric. Remeber order when
|
|
46
|
+
// comparing closeness!
|
|
47
|
+
const indexesToCheck = [];
|
|
48
|
+
for (let i = 0; i < posInfos.length; i++) {
|
|
49
|
+
const pi = posInfos[i];
|
|
50
|
+
// Only check if they are close to the edges. Why??
|
|
51
|
+
//if (pi.pos.t < 1e-2 || 1-pi.pos.t < 1e-2) {
|
|
52
|
+
indexesToCheck.push(i);
|
|
53
|
+
//}
|
|
54
|
+
}
|
|
55
|
+
const indexesToRemove = [];
|
|
56
|
+
for (let i = 0; i < indexesToCheck.length; i++) {
|
|
57
|
+
for (let j = i + 1; j < indexesToCheck.length; j++) {
|
|
58
|
+
if (i === j) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const p1 = posInfos[indexesToCheck[i]].pos.p;
|
|
62
|
+
const p2 = posInfos[indexesToCheck[j]].pos.p;
|
|
63
|
+
// Below checks for source point too - similar to
|
|
64
|
+
// isAnotherCpCloseBy
|
|
65
|
+
const p3 = p_;
|
|
66
|
+
if ((Math.abs(p1[0] - p2[0]) < 1e-6 &&
|
|
67
|
+
Math.abs(p1[1] - p2[1]) < 1e-6) ||
|
|
68
|
+
(Math.abs(p1[0] - p3[0]) < 1e-6 &&
|
|
69
|
+
Math.abs(p1[1] - p3[1]) < 1e-6)) {
|
|
70
|
+
indexesToRemove.push(indexesToCheck[i]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (let i = indexesToRemove.length - 1; i >= 0; i--) {
|
|
75
|
+
posInfos.splice(indexesToRemove[i], 1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return posInfos;
|
|
79
|
+
}
|
|
80
|
+
export { getCloseBoundaryPoints };
|
|
81
81
|
//# sourceMappingURL=get-close-boundary-points.js.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Curve } from '../../curve.js';
|
|
2
|
-
import { IPointOnShape } from '../../point-on-shape.js';
|
|
3
|
-
import { BezierPiece } from '../bezier-piece.js';
|
|
4
|
-
/**
|
|
5
|
-
* @hidden
|
|
6
|
-
* Returns the closest boundary point to the given point, limited to the given
|
|
7
|
-
* bezier pieces, including the beziers actually checked after culling.
|
|
8
|
-
* @param bezierPieces
|
|
9
|
-
* @param point
|
|
10
|
-
* @param touchedCurve
|
|
11
|
-
* @param t
|
|
12
|
-
* @param extreme
|
|
13
|
-
*/
|
|
14
|
-
declare function getClosestBoundaryPoint(bezierPieces: BezierPiece[], point: number[], touchedCurve: Curve, t: number): {
|
|
15
|
-
pos: IPointOnShape;
|
|
16
|
-
d: number;
|
|
17
|
-
};
|
|
18
|
-
export { getClosestBoundaryPoint };
|
|
1
|
+
import { Curve } from '../../curve.js';
|
|
2
|
+
import { IPointOnShape } from '../../point-on-shape.js';
|
|
3
|
+
import { BezierPiece } from '../bezier-piece.js';
|
|
4
|
+
/**
|
|
5
|
+
* @hidden
|
|
6
|
+
* Returns the closest boundary point to the given point, limited to the given
|
|
7
|
+
* bezier pieces, including the beziers actually checked after culling.
|
|
8
|
+
* @param bezierPieces
|
|
9
|
+
* @param point
|
|
10
|
+
* @param touchedCurve
|
|
11
|
+
* @param t
|
|
12
|
+
* @param extreme
|
|
13
|
+
*/
|
|
14
|
+
declare function getClosestBoundaryPoint(bezierPieces: BezierPiece[], point: number[], touchedCurve: Curve, t: number): {
|
|
15
|
+
pos: IPointOnShape;
|
|
16
|
+
d: number;
|
|
17
|
+
};
|
|
18
|
+
export { getClosestBoundaryPoint };
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import { distanceBetween, getObjClosestTo } from 'flo-vector2d';
|
|
2
|
-
import { PointOnShape } from '../../point-on-shape.js';
|
|
3
|
-
import { cullBezierPieces } from './cull-bezier-pieces.js';
|
|
4
|
-
import { closestPointsOnCurve } from './closest-points-on-curve.js';
|
|
5
|
-
/**
|
|
6
|
-
* @hidden
|
|
7
|
-
* Returns the closest boundary point to the given point, limited to the given
|
|
8
|
-
* bezier pieces, including the beziers actually checked after culling.
|
|
9
|
-
* @param bezierPieces
|
|
10
|
-
* @param point
|
|
11
|
-
* @param touchedCurve
|
|
12
|
-
* @param t
|
|
13
|
-
* @param extreme
|
|
14
|
-
*/
|
|
15
|
-
function getClosestBoundaryPoint(bezierPieces, point, touchedCurve, t) {
|
|
16
|
-
bezierPieces = cullBezierPieces(bezierPieces, point);
|
|
17
|
-
let bestDistance = Number.POSITIVE_INFINITY;
|
|
18
|
-
let posInfo;
|
|
19
|
-
for (let i = 0; i < bezierPieces.length; i++) {
|
|
20
|
-
const bezierPiece = bezierPieces[i];
|
|
21
|
-
const ps = closestPointsOnCurve(bezierPiece.curve, point, bezierPiece.ts, touchedCurve, t);
|
|
22
|
-
const p = getObjClosestTo(point, ps, p => p.p);
|
|
23
|
-
if (p === undefined) {
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
const d = distanceBetween(p.p, point);
|
|
27
|
-
let curve = bezierPiece.curve;
|
|
28
|
-
let t_ = p.t;
|
|
29
|
-
if (d < bestDistance) {
|
|
30
|
-
if (t_ === 0) {
|
|
31
|
-
t_ = 1;
|
|
32
|
-
curve = bezierPiece.curve.prev;
|
|
33
|
-
}
|
|
34
|
-
posInfo = { pos: new PointOnShape(curve, t_), d };
|
|
35
|
-
bestDistance = d;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return posInfo;
|
|
39
|
-
}
|
|
40
|
-
export { getClosestBoundaryPoint };
|
|
1
|
+
import { distanceBetween, getObjClosestTo } from 'flo-vector2d';
|
|
2
|
+
import { PointOnShape } from '../../point-on-shape.js';
|
|
3
|
+
import { cullBezierPieces } from './cull-bezier-pieces.js';
|
|
4
|
+
import { closestPointsOnCurve } from './closest-points-on-curve.js';
|
|
5
|
+
/**
|
|
6
|
+
* @hidden
|
|
7
|
+
* Returns the closest boundary point to the given point, limited to the given
|
|
8
|
+
* bezier pieces, including the beziers actually checked after culling.
|
|
9
|
+
* @param bezierPieces
|
|
10
|
+
* @param point
|
|
11
|
+
* @param touchedCurve
|
|
12
|
+
* @param t
|
|
13
|
+
* @param extreme
|
|
14
|
+
*/
|
|
15
|
+
function getClosestBoundaryPoint(bezierPieces, point, touchedCurve, t) {
|
|
16
|
+
bezierPieces = cullBezierPieces(bezierPieces, point);
|
|
17
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
18
|
+
let posInfo;
|
|
19
|
+
for (let i = 0; i < bezierPieces.length; i++) {
|
|
20
|
+
const bezierPiece = bezierPieces[i];
|
|
21
|
+
const ps = closestPointsOnCurve(bezierPiece.curve, point, bezierPiece.ts, touchedCurve, t);
|
|
22
|
+
const p = getObjClosestTo(point, ps, p => p.p);
|
|
23
|
+
if (p === undefined) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
const d = distanceBetween(p.p, point);
|
|
27
|
+
let curve = bezierPiece.curve;
|
|
28
|
+
let t_ = p.t;
|
|
29
|
+
if (d < bestDistance) {
|
|
30
|
+
if (t_ === 0) {
|
|
31
|
+
t_ = 1;
|
|
32
|
+
curve = bezierPiece.curve.prev;
|
|
33
|
+
}
|
|
34
|
+
posInfo = { pos: new PointOnShape(curve, t_), d };
|
|
35
|
+
bestDistance = d;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return posInfo;
|
|
39
|
+
}
|
|
40
|
+
export { getClosestBoundaryPoint };
|
|
41
41
|
//# sourceMappingURL=get-closest-boundary-point.js.map
|
package/node/mat/corner.d.ts
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @hidden
|
|
3
|
-
* Represents a corner on the shape boundary, i.e. a point where two bezier
|
|
4
|
-
* curves meet. Typically used internally only.
|
|
5
|
-
*/
|
|
6
|
-
interface Corner {
|
|
7
|
-
/**
|
|
8
|
-
* The unit tangents at the points t === 1 of the first curve and at
|
|
9
|
-
* t === 0 of the second respectively.
|
|
10
|
-
*/
|
|
11
|
-
tangents: number[][];
|
|
12
|
-
/** The cross of the unit tangents. */
|
|
13
|
-
crossTangents: number;
|
|
14
|
-
/**
|
|
15
|
-
* True if the corner is sharp, i.e. > 0 radians as one goes in a positive
|
|
16
|
-
* direction around the shape boundary.
|
|
17
|
-
*/
|
|
18
|
-
isSharp: boolean;
|
|
19
|
-
/**
|
|
20
|
-
* True if the corner is dull, i.e. < 0 radians as one goes in a positive
|
|
21
|
-
* direction around the shape boundary.
|
|
22
|
-
*/
|
|
23
|
-
isDull: boolean;
|
|
24
|
-
/**
|
|
25
|
-
* True if the corner is quite sharp, i.e. > δ radians as one goes in a
|
|
26
|
-
* positive direction around the shape boundary where δ is some
|
|
27
|
-
* pre-determined parameter.
|
|
28
|
-
*/
|
|
29
|
-
isQuiteSharp: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* True if the corner is quite dull, i.e. < δ radians as one goes in a
|
|
32
|
-
* positive direction around the shape boundary where δ is some
|
|
33
|
-
* pre-determined parameter.
|
|
34
|
-
*/
|
|
35
|
-
isQuiteDull: boolean;
|
|
36
|
-
}
|
|
37
|
-
export { Corner };
|
|
1
|
+
/**
|
|
2
|
+
* @hidden
|
|
3
|
+
* Represents a corner on the shape boundary, i.e. a point where two bezier
|
|
4
|
+
* curves meet. Typically used internally only.
|
|
5
|
+
*/
|
|
6
|
+
interface Corner {
|
|
7
|
+
/**
|
|
8
|
+
* The unit tangents at the points t === 1 of the first curve and at
|
|
9
|
+
* t === 0 of the second respectively.
|
|
10
|
+
*/
|
|
11
|
+
tangents: number[][];
|
|
12
|
+
/** The cross of the unit tangents. */
|
|
13
|
+
crossTangents: number;
|
|
14
|
+
/**
|
|
15
|
+
* True if the corner is sharp, i.e. > 0 radians as one goes in a positive
|
|
16
|
+
* direction around the shape boundary.
|
|
17
|
+
*/
|
|
18
|
+
isSharp: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* True if the corner is dull, i.e. < 0 radians as one goes in a positive
|
|
21
|
+
* direction around the shape boundary.
|
|
22
|
+
*/
|
|
23
|
+
isDull: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* True if the corner is quite sharp, i.e. > δ radians as one goes in a
|
|
26
|
+
* positive direction around the shape boundary where δ is some
|
|
27
|
+
* pre-determined parameter.
|
|
28
|
+
*/
|
|
29
|
+
isQuiteSharp: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* True if the corner is quite dull, i.e. < δ radians as one goes in a
|
|
32
|
+
* positive direction around the shape boundary where δ is some
|
|
33
|
+
* pre-determined parameter.
|
|
34
|
+
*/
|
|
35
|
+
isQuiteDull: boolean;
|
|
36
|
+
}
|
|
37
|
+
export { Corner };
|
package/node/mat/corner.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=corner.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
-
import { CpNode } from '../cp-node.js';
|
|
3
|
-
import { Loop } from '../loop.js';
|
|
4
|
-
/**
|
|
5
|
-
* @hidden
|
|
6
|
-
* @param cpNode
|
|
7
|
-
*/
|
|
8
|
-
declare function createNewCpTree(cpNode: CpNode): Map<Loop, LlRbTree<CpNode>>;
|
|
9
|
-
export { createNewCpTree };
|
|
1
|
+
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
+
import { CpNode } from '../cp-node.js';
|
|
3
|
+
import { Loop } from '../loop.js';
|
|
4
|
+
/**
|
|
5
|
+
* @hidden
|
|
6
|
+
* @param cpNode
|
|
7
|
+
*/
|
|
8
|
+
declare function createNewCpTree(cpNode: CpNode): Map<Loop, LlRbTree<CpNode>>;
|
|
9
|
+
export { createNewCpTree };
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
-
import { CpNode } from '../cp-node.js';
|
|
3
|
-
/**
|
|
4
|
-
* @hidden
|
|
5
|
-
* @param cpNode
|
|
6
|
-
*/
|
|
7
|
-
function createNewCpTree(cpNode) {
|
|
8
|
-
const newCpTrees = new Map();
|
|
9
|
-
const cps = cpNode.getAllOnLoop();
|
|
10
|
-
cps.forEach(f);
|
|
11
|
-
function f(cpNode) {
|
|
12
|
-
const loop = cpNode.cp.pointOnShape.curve.loop;
|
|
13
|
-
let cpTree = newCpTrees.get(loop);
|
|
14
|
-
if (!cpTree) {
|
|
15
|
-
// qqq cpTree = new LlRbTree(CpNode.comparator, [], true);
|
|
16
|
-
cpTree = new LlRbTree(CpNode.comparator, false);
|
|
17
|
-
newCpTrees.set(loop, cpTree);
|
|
18
|
-
}
|
|
19
|
-
cpTree.insert(cpNode);
|
|
20
|
-
}
|
|
21
|
-
return newCpTrees;
|
|
22
|
-
}
|
|
23
|
-
export { createNewCpTree };
|
|
1
|
+
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
+
import { CpNode } from '../cp-node.js';
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
* @param cpNode
|
|
6
|
+
*/
|
|
7
|
+
function createNewCpTree(cpNode) {
|
|
8
|
+
const newCpTrees = new Map();
|
|
9
|
+
const cps = cpNode.getAllOnLoop();
|
|
10
|
+
cps.forEach(f);
|
|
11
|
+
function f(cpNode) {
|
|
12
|
+
const loop = cpNode.cp.pointOnShape.curve.loop;
|
|
13
|
+
let cpTree = newCpTrees.get(loop);
|
|
14
|
+
if (!cpTree) {
|
|
15
|
+
// qqq cpTree = new LlRbTree(CpNode.comparator, [], true);
|
|
16
|
+
cpTree = new LlRbTree(CpNode.comparator, false);
|
|
17
|
+
newCpTrees.set(loop, cpTree);
|
|
18
|
+
}
|
|
19
|
+
cpTree.insert(cpNode);
|
|
20
|
+
}
|
|
21
|
+
return newCpTrees;
|
|
22
|
+
}
|
|
23
|
+
export { createNewCpTree };
|
|
24
24
|
//# sourceMappingURL=create-new-cp-tree.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/** @hidden */
|
|
2
|
-
type ElemType_TwoProng = 'twoProng_regular' | 'twoProng_holeClosing';
|
|
3
|
-
export { ElemType_TwoProng };
|
|
1
|
+
/** @hidden */
|
|
2
|
+
type ElemType_TwoProng = 'twoProng_regular' | 'twoProng_holeClosing';
|
|
3
|
+
export { ElemType_TwoProng };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=elem-type-two-prong.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
-
import { Loop } from '../../loop.js';
|
|
3
|
-
import { IPointOnShape } from '../../point-on-shape.js';
|
|
4
|
-
import { CpNode } from '../../cp-node.js';
|
|
5
|
-
/**
|
|
6
|
-
* @hidden
|
|
7
|
-
* Add a 1-prong to the MAT.
|
|
8
|
-
* @param cpGraphs
|
|
9
|
-
* @param pos
|
|
10
|
-
*/
|
|
11
|
-
declare function add1Prong(maxOsculatingCircleRadius: number, cpGraphs: Map<Loop, LlRbTree<CpNode>>, pos: IPointOnShape): void;
|
|
12
|
-
export { add1Prong };
|
|
1
|
+
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
+
import { Loop } from '../../loop.js';
|
|
3
|
+
import { IPointOnShape } from '../../point-on-shape.js';
|
|
4
|
+
import { CpNode } from '../../cp-node.js';
|
|
5
|
+
/**
|
|
6
|
+
* @hidden
|
|
7
|
+
* Add a 1-prong to the MAT.
|
|
8
|
+
* @param cpGraphs
|
|
9
|
+
* @param pos
|
|
10
|
+
*/
|
|
11
|
+
declare function add1Prong(maxOsculatingCircleRadius: number, cpGraphs: Map<Loop, LlRbTree<CpNode>>, pos: IPointOnShape): void;
|
|
12
|
+
export { add1Prong };
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import { getOsculatingCircle, calcPosOrder, isPosDullCorner } from '../../point-on-shape.js';
|
|
2
|
-
import { addToCpGraph } from '../add-to-cp-graph.js';
|
|
3
|
-
import { isAnotherCpCloseby } from '../is-another-cp-closeby.js';
|
|
4
|
-
/**
|
|
5
|
-
* @hidden
|
|
6
|
-
* Add a 1-prong to the MAT.
|
|
7
|
-
* @param cpGraphs
|
|
8
|
-
* @param pos
|
|
9
|
-
*/
|
|
10
|
-
function add1Prong(maxOsculatingCircleRadius, cpGraphs, pos) {
|
|
11
|
-
//if (PointOnShape.isDullCorner(pos)) {
|
|
12
|
-
if (isPosDullCorner(pos)) {
|
|
13
|
-
// This is a 1-prong at a dull corner.
|
|
14
|
-
// TODO IMPORTANT
|
|
15
|
-
// Remove this line, uncomment piece below it and implement the
|
|
16
|
-
// following strategy to find the 3-prongs: if deltas are conjoined due
|
|
17
|
-
// to dull corner, split the conjoinment by inserting successively
|
|
18
|
-
// closer (binary division) 2-prongs. If a 2-prong actually fails,
|
|
19
|
-
// simply remove the 1-prong at the dull corner. In this way **all**
|
|
20
|
-
// terminal points are found, e.g. zoom in on top left leg of ant.
|
|
21
|
-
// Afterthought: there is a better way - split points by two prongs.
|
|
22
|
-
//toRemove.push(posNode); // this!
|
|
23
|
-
if (typeof _debug_ !== 'undefined') {
|
|
24
|
-
_debug_.generated.elems.oneProngAtDullCorner.push(pos);
|
|
25
|
-
}
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
//let circle = PointOnShape.getOsculatingCircle(maxOsculatingCircleRadius, pos);
|
|
29
|
-
const circle = getOsculatingCircle(maxOsculatingCircleRadius, pos);
|
|
30
|
-
//const order = PointOnShape.calcOrder(circle, pos);
|
|
31
|
-
const order = calcPosOrder(circle, pos);
|
|
32
|
-
// Make sure there isn't already a ContactPoint close by - it can cause
|
|
33
|
-
// floating point stability issues.
|
|
34
|
-
if (isAnotherCpCloseby(cpGraphs, pos, circle, order, 0, 1000, 'magenta')) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
addToCpGraph(circle, [-0.5, +0.5], cpGraphs, [pos, pos]);
|
|
38
|
-
if (typeof _debug_ !== 'undefined') {
|
|
39
|
-
_debug_.generated.elems.oneProng.push(pos);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export { add1Prong };
|
|
1
|
+
import { getOsculatingCircle, calcPosOrder, isPosDullCorner } from '../../point-on-shape.js';
|
|
2
|
+
import { addToCpGraph } from '../add-to-cp-graph.js';
|
|
3
|
+
import { isAnotherCpCloseby } from '../is-another-cp-closeby.js';
|
|
4
|
+
/**
|
|
5
|
+
* @hidden
|
|
6
|
+
* Add a 1-prong to the MAT.
|
|
7
|
+
* @param cpGraphs
|
|
8
|
+
* @param pos
|
|
9
|
+
*/
|
|
10
|
+
function add1Prong(maxOsculatingCircleRadius, cpGraphs, pos) {
|
|
11
|
+
//if (PointOnShape.isDullCorner(pos)) {
|
|
12
|
+
if (isPosDullCorner(pos)) {
|
|
13
|
+
// This is a 1-prong at a dull corner.
|
|
14
|
+
// TODO IMPORTANT
|
|
15
|
+
// Remove this line, uncomment piece below it and implement the
|
|
16
|
+
// following strategy to find the 3-prongs: if deltas are conjoined due
|
|
17
|
+
// to dull corner, split the conjoinment by inserting successively
|
|
18
|
+
// closer (binary division) 2-prongs. If a 2-prong actually fails,
|
|
19
|
+
// simply remove the 1-prong at the dull corner. In this way **all**
|
|
20
|
+
// terminal points are found, e.g. zoom in on top left leg of ant.
|
|
21
|
+
// Afterthought: there is a better way - split points by two prongs.
|
|
22
|
+
//toRemove.push(posNode); // this!
|
|
23
|
+
if (typeof _debug_ !== 'undefined') {
|
|
24
|
+
_debug_.generated.elems.oneProngAtDullCorner.push(pos);
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
//let circle = PointOnShape.getOsculatingCircle(maxOsculatingCircleRadius, pos);
|
|
29
|
+
const circle = getOsculatingCircle(maxOsculatingCircleRadius, pos);
|
|
30
|
+
//const order = PointOnShape.calcOrder(circle, pos);
|
|
31
|
+
const order = calcPosOrder(circle, pos);
|
|
32
|
+
// Make sure there isn't already a ContactPoint close by - it can cause
|
|
33
|
+
// floating point stability issues.
|
|
34
|
+
if (isAnotherCpCloseby(cpGraphs, pos, circle, order, 0, 1000, 'magenta')) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
addToCpGraph(circle, [-0.5, +0.5], cpGraphs, [pos, pos]);
|
|
38
|
+
if (typeof _debug_ !== 'undefined') {
|
|
39
|
+
_debug_.generated.elems.oneProng.push(pos);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export { add1Prong };
|
|
43
43
|
//# sourceMappingURL=add-1-prong.js.map
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
-
import { Loop } from '../../loop.js';
|
|
3
|
-
import { CpNode } from '../../cp-node.js';
|
|
4
|
-
import { Circle } from '../../circle.js';
|
|
5
|
-
import { IPointOnShape } from '../../point-on-shape.js';
|
|
6
|
-
/**
|
|
7
|
-
* @hidden
|
|
8
|
-
* Adds a 2-prong contact circle to the shape.
|
|
9
|
-
* @param cpGraphs
|
|
10
|
-
* @param circle Circle containing the 2 contact points
|
|
11
|
-
* @param posSource The source point on shape
|
|
12
|
-
* @param posAntipode The found antipodal point on shape
|
|
13
|
-
* @param holeClosing True if this is a hole-closing 2-prong, false otherwise
|
|
14
|
-
* @param extreme The maximum coordinate value used to calculate floating point
|
|
15
|
-
* tolerances.
|
|
16
|
-
*/
|
|
17
|
-
declare function add2Prong(cpGraphs: Map<Loop, LlRbTree<CpNode>>, circle: Circle, posSource: IPointOnShape, posAntipodes: {
|
|
18
|
-
pos: IPointOnShape;
|
|
19
|
-
d: number;
|
|
20
|
-
}[], holeClosing: boolean, extreme: number): CpNode;
|
|
21
|
-
export { add2Prong };
|
|
1
|
+
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
+
import { Loop } from '../../loop.js';
|
|
3
|
+
import { CpNode } from '../../cp-node.js';
|
|
4
|
+
import { Circle } from '../../circle.js';
|
|
5
|
+
import { IPointOnShape } from '../../point-on-shape.js';
|
|
6
|
+
/**
|
|
7
|
+
* @hidden
|
|
8
|
+
* Adds a 2-prong contact circle to the shape.
|
|
9
|
+
* @param cpGraphs
|
|
10
|
+
* @param circle Circle containing the 2 contact points
|
|
11
|
+
* @param posSource The source point on shape
|
|
12
|
+
* @param posAntipode The found antipodal point on shape
|
|
13
|
+
* @param holeClosing True if this is a hole-closing 2-prong, false otherwise
|
|
14
|
+
* @param extreme The maximum coordinate value used to calculate floating point
|
|
15
|
+
* tolerances.
|
|
16
|
+
*/
|
|
17
|
+
declare function add2Prong(cpGraphs: Map<Loop, LlRbTree<CpNode>>, circle: Circle, posSource: IPointOnShape, posAntipodes: {
|
|
18
|
+
pos: IPointOnShape;
|
|
19
|
+
d: number;
|
|
20
|
+
}[], holeClosing: boolean, extreme: number): CpNode;
|
|
21
|
+
export { add2Prong };
|