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,68 +1,68 @@
|
|
|
1
|
-
import { getBoundingHull, getBoundingBoxTight } from 'flo-bezier3';
|
|
2
|
-
import { getCornerAtEnd } from '../../curve.js';
|
|
3
|
-
import { getBoundingBox_ } from '../../get-bounding-box-.js';
|
|
4
|
-
let timingStart;
|
|
5
|
-
/** @hidden */
|
|
6
|
-
function addDebugInfo1(loops) {
|
|
7
|
-
if (typeof _debug_ === 'undefined') {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
timingStart = performance.now();
|
|
11
|
-
for (const loop of loops) {
|
|
12
|
-
_debug_.fs.nameObj(loop, 'l|');
|
|
13
|
-
}
|
|
14
|
-
const generated = _debug_.generated;
|
|
15
|
-
//generated.elems.loop.push(...loops);
|
|
16
|
-
//generated.elems.loops.push(loops);
|
|
17
|
-
for (const loop of loops) {
|
|
18
|
-
let i = 0;
|
|
19
|
-
loop.curves.forEach(function (curve) {
|
|
20
|
-
const ps = curve.ps;
|
|
21
|
-
const hull = getBoundingHull(ps);
|
|
22
|
-
generated.elems.boundingHull.push(hull);
|
|
23
|
-
const looseBoundingBox = getBoundingBox_(ps);
|
|
24
|
-
generated.elems.looseBoundingBox.push(looseBoundingBox);
|
|
25
|
-
const tightBoundingBox = getBoundingBoxTight(ps);
|
|
26
|
-
generated.elems.tightBoundingBox.push(tightBoundingBox);
|
|
27
|
-
const corner = getCornerAtEnd(curve);
|
|
28
|
-
if (corner.isSharp) {
|
|
29
|
-
generated.elems.sharpCorner.push(curve);
|
|
30
|
-
}
|
|
31
|
-
else if (corner.isDull) {
|
|
32
|
-
generated.elems.dullCorner.push(curve);
|
|
33
|
-
}
|
|
34
|
-
i++;
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/** @hidden */
|
|
39
|
-
function addDebugInfo2() {
|
|
40
|
-
if (typeof _debug_ === 'undefined') {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const timing = _debug_.generated.timing;
|
|
44
|
-
const now = performance.now();
|
|
45
|
-
timing.holeClosers += now - timingStart;
|
|
46
|
-
timingStart = now;
|
|
47
|
-
}
|
|
48
|
-
function addDebugInfo3() {
|
|
49
|
-
if (typeof _debug_ === 'undefined') {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const generated = _debug_.generated;
|
|
53
|
-
const timing = generated.timing;
|
|
54
|
-
const now = performance.now();
|
|
55
|
-
timing.oneAnd2Prongs += now - timingStart;
|
|
56
|
-
timingStart = now;
|
|
57
|
-
}
|
|
58
|
-
function addDebugInfo4(mat) {
|
|
59
|
-
if (typeof _debug_ === 'undefined') {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
const generated = _debug_.generated;
|
|
63
|
-
const timing = generated.timing;
|
|
64
|
-
generated.elems.mat.push(mat);
|
|
65
|
-
timing.threeProngs += performance.now() - timingStart;
|
|
66
|
-
}
|
|
67
|
-
export { addDebugInfo1, addDebugInfo2, addDebugInfo3, addDebugInfo4 };
|
|
1
|
+
import { getBoundingHull, getBoundingBoxTight } from 'flo-bezier3';
|
|
2
|
+
import { getCornerAtEnd } from '../../curve.js';
|
|
3
|
+
import { getBoundingBox_ } from '../../get-bounding-box-.js';
|
|
4
|
+
let timingStart;
|
|
5
|
+
/** @hidden */
|
|
6
|
+
function addDebugInfo1(loops) {
|
|
7
|
+
if (typeof _debug_ === 'undefined') {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
timingStart = performance.now();
|
|
11
|
+
for (const loop of loops) {
|
|
12
|
+
_debug_.fs.nameObj(loop, 'l|');
|
|
13
|
+
}
|
|
14
|
+
const generated = _debug_.generated;
|
|
15
|
+
//generated.elems.loop.push(...loops);
|
|
16
|
+
//generated.elems.loops.push(loops);
|
|
17
|
+
for (const loop of loops) {
|
|
18
|
+
let i = 0;
|
|
19
|
+
loop.curves.forEach(function (curve) {
|
|
20
|
+
const ps = curve.ps;
|
|
21
|
+
const hull = getBoundingHull(ps);
|
|
22
|
+
generated.elems.boundingHull.push(hull);
|
|
23
|
+
const looseBoundingBox = getBoundingBox_(ps);
|
|
24
|
+
generated.elems.looseBoundingBox.push(looseBoundingBox);
|
|
25
|
+
const tightBoundingBox = getBoundingBoxTight(ps);
|
|
26
|
+
generated.elems.tightBoundingBox.push(tightBoundingBox);
|
|
27
|
+
const corner = getCornerAtEnd(curve);
|
|
28
|
+
if (corner.isSharp) {
|
|
29
|
+
generated.elems.sharpCorner.push(curve);
|
|
30
|
+
}
|
|
31
|
+
else if (corner.isDull) {
|
|
32
|
+
generated.elems.dullCorner.push(curve);
|
|
33
|
+
}
|
|
34
|
+
i++;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** @hidden */
|
|
39
|
+
function addDebugInfo2() {
|
|
40
|
+
if (typeof _debug_ === 'undefined') {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const timing = _debug_.generated.timing;
|
|
44
|
+
const now = performance.now();
|
|
45
|
+
timing.holeClosers += now - timingStart;
|
|
46
|
+
timingStart = now;
|
|
47
|
+
}
|
|
48
|
+
function addDebugInfo3() {
|
|
49
|
+
if (typeof _debug_ === 'undefined') {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const generated = _debug_.generated;
|
|
53
|
+
const timing = generated.timing;
|
|
54
|
+
const now = performance.now();
|
|
55
|
+
timing.oneAnd2Prongs += now - timingStart;
|
|
56
|
+
timingStart = now;
|
|
57
|
+
}
|
|
58
|
+
function addDebugInfo4(mat) {
|
|
59
|
+
if (typeof _debug_ === 'undefined') {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const generated = _debug_.generated;
|
|
63
|
+
const timing = generated.timing;
|
|
64
|
+
generated.elems.mat.push(mat);
|
|
65
|
+
timing.threeProngs += performance.now() - timingStart;
|
|
66
|
+
}
|
|
67
|
+
export { addDebugInfo1, addDebugInfo2, addDebugInfo3, addDebugInfo4 };
|
|
68
68
|
//# sourceMappingURL=add-debug-info.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Loop } from '../../loop.js';
|
|
2
|
-
import { IPointOnShape } from '../../point-on-shape.js';
|
|
3
|
-
/**
|
|
4
|
-
* @hidden
|
|
5
|
-
* Get useful points on the shape - these incude points of maximum curvature and
|
|
6
|
-
* points at the bezier-bezier interfaces.
|
|
7
|
-
* @param loop
|
|
8
|
-
* @param additionalPointCount
|
|
9
|
-
*/
|
|
10
|
-
declare function getInterestingPointsOnLoop(minBezLength: number, maxCurviness: number, maxLength: number): (loop: Loop) => IPointOnShape[];
|
|
11
|
-
export { getInterestingPointsOnLoop };
|
|
1
|
+
import { Loop } from '../../loop.js';
|
|
2
|
+
import { IPointOnShape } from '../../point-on-shape.js';
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
* Get useful points on the shape - these incude points of maximum curvature and
|
|
6
|
+
* points at the bezier-bezier interfaces.
|
|
7
|
+
* @param loop
|
|
8
|
+
* @param additionalPointCount
|
|
9
|
+
*/
|
|
10
|
+
declare function getInterestingPointsOnLoop(minBezLength: number, maxCurviness: number, maxLength: number): (loop: Loop) => IPointOnShape[];
|
|
11
|
+
export { getInterestingPointsOnLoop };
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import { getCurvatureExtrema, splitByCurvatureAndLength, controlPointLinesLength } from 'flo-bezier3';
|
|
2
|
-
import { getContactCirclesAtInterface } from '../get-contact-circles-at-interface.js';
|
|
3
|
-
import { PointOnShape, comparePoss } from '../../point-on-shape.js';
|
|
4
|
-
/**
|
|
5
|
-
* @hidden
|
|
6
|
-
* Get useful points on the shape - these incude points of maximum curvature and
|
|
7
|
-
* points at the bezier-bezier interfaces.
|
|
8
|
-
* @param loop
|
|
9
|
-
* @param additionalPointCount
|
|
10
|
-
*/
|
|
11
|
-
function getInterestingPointsOnLoop(minBezLength, maxCurviness, maxLength) {
|
|
12
|
-
return function (loop) {
|
|
13
|
-
const allPoints = [];
|
|
14
|
-
for (let i = 0; i < loop.curves.length; i++) {
|
|
15
|
-
const curve = loop.curves[i];
|
|
16
|
-
// qqq if (lengthSquaredUpperBound(curve.ps) < minBezLength) {
|
|
17
|
-
if (controlPointLinesLength(curve.ps) < minBezLength) {
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
/*
|
|
21
|
-
let { maxCurvatureTs, maxNegativeCurvatureTs } =
|
|
22
|
-
getCurvatureExtrema(curve.ps);
|
|
23
|
-
let maxCurvatures = maxCurvatureTs.map(t => new PointOnShape(curve, t));
|
|
24
|
-
let maxNegativeCurvatures = maxNegativeCurvatureTs.map(t => new PointOnShape(curve, t));
|
|
25
|
-
|
|
26
|
-
allPoints.push(
|
|
27
|
-
...getContactCirclesAtInterface(curve),
|
|
28
|
-
...maxCurvatures,
|
|
29
|
-
...maxNegativeCurvatures
|
|
30
|
-
);
|
|
31
|
-
*/
|
|
32
|
-
// let { maxima } = getCurvatureExtrema(curve.ps);
|
|
33
|
-
// qqq let { maxCurvatureTs, maxNegativeCurvatureTs } = getCurvatureExtrema(curve.ps);
|
|
34
|
-
const { maxima } = getCurvatureExtrema(curve.ps);
|
|
35
|
-
// let maxAbsCurvatures = maxima.map(t => new PointOnShape(curve, t));
|
|
36
|
-
// qqq let maxAbsCurvatures = [...maxCurvatureTs, ...maxNegativeCurvatureTs].map(t => new PointOnShape(curve, t));
|
|
37
|
-
const maxAbsCurvatures = [...maxima].map(t => new PointOnShape(curve, t));
|
|
38
|
-
allPoints.push(...getContactCirclesAtInterface(curve), ...maxAbsCurvatures);
|
|
39
|
-
let ts = splitByCurvatureAndLength(curve.ps, maxCurviness, maxLength);
|
|
40
|
-
if (ts.length === 2) {
|
|
41
|
-
ts = [0, 0.5, 1];
|
|
42
|
-
}
|
|
43
|
-
for (let i = 1; i < ts.length - 1; i++) {
|
|
44
|
-
allPoints.push(new PointOnShape(curve, ts[i]));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
allPoints.sort(comparePoss);
|
|
48
|
-
return allPoints;
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
export { getInterestingPointsOnLoop };
|
|
1
|
+
import { getCurvatureExtrema, splitByCurvatureAndLength, controlPointLinesLength } from 'flo-bezier3';
|
|
2
|
+
import { getContactCirclesAtInterface } from '../get-contact-circles-at-interface.js';
|
|
3
|
+
import { PointOnShape, comparePoss } from '../../point-on-shape.js';
|
|
4
|
+
/**
|
|
5
|
+
* @hidden
|
|
6
|
+
* Get useful points on the shape - these incude points of maximum curvature and
|
|
7
|
+
* points at the bezier-bezier interfaces.
|
|
8
|
+
* @param loop
|
|
9
|
+
* @param additionalPointCount
|
|
10
|
+
*/
|
|
11
|
+
function getInterestingPointsOnLoop(minBezLength, maxCurviness, maxLength) {
|
|
12
|
+
return function (loop) {
|
|
13
|
+
const allPoints = [];
|
|
14
|
+
for (let i = 0; i < loop.curves.length; i++) {
|
|
15
|
+
const curve = loop.curves[i];
|
|
16
|
+
// qqq if (lengthSquaredUpperBound(curve.ps) < minBezLength) {
|
|
17
|
+
if (controlPointLinesLength(curve.ps) < minBezLength) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
/*
|
|
21
|
+
let { maxCurvatureTs, maxNegativeCurvatureTs } =
|
|
22
|
+
getCurvatureExtrema(curve.ps);
|
|
23
|
+
let maxCurvatures = maxCurvatureTs.map(t => new PointOnShape(curve, t));
|
|
24
|
+
let maxNegativeCurvatures = maxNegativeCurvatureTs.map(t => new PointOnShape(curve, t));
|
|
25
|
+
|
|
26
|
+
allPoints.push(
|
|
27
|
+
...getContactCirclesAtInterface(curve),
|
|
28
|
+
...maxCurvatures,
|
|
29
|
+
...maxNegativeCurvatures
|
|
30
|
+
);
|
|
31
|
+
*/
|
|
32
|
+
// let { maxima } = getCurvatureExtrema(curve.ps);
|
|
33
|
+
// qqq let { maxCurvatureTs, maxNegativeCurvatureTs } = getCurvatureExtrema(curve.ps);
|
|
34
|
+
const { maxima } = getCurvatureExtrema(curve.ps);
|
|
35
|
+
// let maxAbsCurvatures = maxima.map(t => new PointOnShape(curve, t));
|
|
36
|
+
// qqq let maxAbsCurvatures = [...maxCurvatureTs, ...maxNegativeCurvatureTs].map(t => new PointOnShape(curve, t));
|
|
37
|
+
const maxAbsCurvatures = [...maxima].map(t => new PointOnShape(curve, t));
|
|
38
|
+
allPoints.push(...getContactCirclesAtInterface(curve), ...maxAbsCurvatures);
|
|
39
|
+
let ts = splitByCurvatureAndLength(curve.ps, maxCurviness, maxLength);
|
|
40
|
+
if (ts.length === 2) {
|
|
41
|
+
ts = [0, 0.5, 1];
|
|
42
|
+
}
|
|
43
|
+
for (let i = 1; i < ts.length - 1; i++) {
|
|
44
|
+
allPoints.push(new PointOnShape(curve, ts[i]));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
allPoints.sort(comparePoss);
|
|
48
|
+
return allPoints;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export { getInterestingPointsOnLoop };
|
|
52
52
|
//# sourceMappingURL=create-get-interesting-points-on-loop.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
-
import { Loop } from '../../loop.js';
|
|
3
|
-
import { CpNode } from '../../cp-node.js';
|
|
4
|
-
import { IPointOnShape } from '../../point-on-shape.js';
|
|
5
|
-
/**
|
|
6
|
-
* @hidden
|
|
7
|
-
* Creates the initial ContactPoint loops from the given sharp corners.
|
|
8
|
-
* @param shape
|
|
9
|
-
* @param sharpCornerss
|
|
10
|
-
*/
|
|
11
|
-
declare function createInitialCpGraph(loops: Loop[], cpTrees: Map<Loop, LlRbTree<CpNode>>, sharpCornerss: IPointOnShape[][]): CpNode;
|
|
12
|
-
export { createInitialCpGraph };
|
|
1
|
+
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
+
import { Loop } from '../../loop.js';
|
|
3
|
+
import { CpNode } from '../../cp-node.js';
|
|
4
|
+
import { IPointOnShape } from '../../point-on-shape.js';
|
|
5
|
+
/**
|
|
6
|
+
* @hidden
|
|
7
|
+
* Creates the initial ContactPoint loops from the given sharp corners.
|
|
8
|
+
* @param shape
|
|
9
|
+
* @param sharpCornerss
|
|
10
|
+
*/
|
|
11
|
+
declare function createInitialCpGraph(loops: Loop[], cpTrees: Map<Loop, LlRbTree<CpNode>>, sharpCornerss: IPointOnShape[][]): CpNode;
|
|
12
|
+
export { createInitialCpGraph };
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
-
import { CpNode } from '../../cp-node.js';
|
|
3
|
-
/**
|
|
4
|
-
* @hidden
|
|
5
|
-
* Creates the initial ContactPoint loops from the given sharp corners.
|
|
6
|
-
* @param shape
|
|
7
|
-
* @param sharpCornerss
|
|
8
|
-
*/
|
|
9
|
-
function createInitialCpGraph(loops, cpTrees, sharpCornerss /*,
|
|
10
|
-
xMap: Map<number[][],{ ps: number[][] }>*/) {
|
|
11
|
-
let cpNode;
|
|
12
|
-
for (let k = 0; k < sharpCornerss.length; k++) {
|
|
13
|
-
const sharpCorners = sharpCornerss[k];
|
|
14
|
-
// qqq const cpTree = new LlRbTree(CpNode.comparator, [], true);
|
|
15
|
-
const cpTree = new LlRbTree(CpNode.comparator, false);
|
|
16
|
-
let cpNode1 = undefined;
|
|
17
|
-
let cpNode2 = undefined;
|
|
18
|
-
for (const pos of sharpCorners) {
|
|
19
|
-
const ps = pos.curve.next.ps;
|
|
20
|
-
//const x = xMap.get(ps);
|
|
21
|
-
//const isIntersection = !!x;
|
|
22
|
-
const circle = { center: pos.p, radius: 0 };
|
|
23
|
-
const cp1 = { pointOnShape: pos, circle, order: -1, order2: 0 };
|
|
24
|
-
const cp2 = { pointOnShape: pos, circle, order: +1, order2: 0 };
|
|
25
|
-
cpNode1 = CpNode.insert(false, /*isIntersection*/ false, cpTree, cp1, cpNode2);
|
|
26
|
-
cpNode2 = CpNode.insert(false, /*isIntersection*/ false, cpTree, cp2, cpNode1);
|
|
27
|
-
cpNode1.prevOnCircle = cpNode2;
|
|
28
|
-
cpNode2.prevOnCircle = cpNode1;
|
|
29
|
-
cpNode1.nextOnCircle = cpNode2;
|
|
30
|
-
cpNode2.nextOnCircle = cpNode1;
|
|
31
|
-
}
|
|
32
|
-
if (!cpNode) {
|
|
33
|
-
cpNode = cpNode1;
|
|
34
|
-
}
|
|
35
|
-
const loop = loops[k];
|
|
36
|
-
cpTrees.set(loop, cpTree);
|
|
37
|
-
}
|
|
38
|
-
return cpNode;
|
|
39
|
-
}
|
|
40
|
-
export { createInitialCpGraph };
|
|
1
|
+
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
+
import { CpNode } from '../../cp-node.js';
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
* Creates the initial ContactPoint loops from the given sharp corners.
|
|
6
|
+
* @param shape
|
|
7
|
+
* @param sharpCornerss
|
|
8
|
+
*/
|
|
9
|
+
function createInitialCpGraph(loops, cpTrees, sharpCornerss /*,
|
|
10
|
+
xMap: Map<number[][],{ ps: number[][] }>*/) {
|
|
11
|
+
let cpNode;
|
|
12
|
+
for (let k = 0; k < sharpCornerss.length; k++) {
|
|
13
|
+
const sharpCorners = sharpCornerss[k];
|
|
14
|
+
// qqq const cpTree = new LlRbTree(CpNode.comparator, [], true);
|
|
15
|
+
const cpTree = new LlRbTree(CpNode.comparator, false);
|
|
16
|
+
let cpNode1 = undefined;
|
|
17
|
+
let cpNode2 = undefined;
|
|
18
|
+
for (const pos of sharpCorners) {
|
|
19
|
+
const ps = pos.curve.next.ps;
|
|
20
|
+
//const x = xMap.get(ps);
|
|
21
|
+
//const isIntersection = !!x;
|
|
22
|
+
const circle = { center: pos.p, radius: 0 };
|
|
23
|
+
const cp1 = { pointOnShape: pos, circle, order: -1, order2: 0 };
|
|
24
|
+
const cp2 = { pointOnShape: pos, circle, order: +1, order2: 0 };
|
|
25
|
+
cpNode1 = CpNode.insert(false, /*isIntersection*/ false, cpTree, cp1, cpNode2);
|
|
26
|
+
cpNode2 = CpNode.insert(false, /*isIntersection*/ false, cpTree, cp2, cpNode1);
|
|
27
|
+
cpNode1.prevOnCircle = cpNode2;
|
|
28
|
+
cpNode2.prevOnCircle = cpNode1;
|
|
29
|
+
cpNode1.nextOnCircle = cpNode2;
|
|
30
|
+
cpNode2.nextOnCircle = cpNode1;
|
|
31
|
+
}
|
|
32
|
+
if (!cpNode) {
|
|
33
|
+
cpNode = cpNode1;
|
|
34
|
+
}
|
|
35
|
+
const loop = loops[k];
|
|
36
|
+
cpTrees.set(loop, cpTree);
|
|
37
|
+
}
|
|
38
|
+
return cpNode;
|
|
39
|
+
}
|
|
40
|
+
export { createInitialCpGraph };
|
|
41
41
|
//# sourceMappingURL=create-initial-cp-graph.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { IPointOnShape } from '../../../point-on-shape.js';
|
|
2
|
-
import { Circle } from '../../../circle.js';
|
|
3
|
-
import { CpNode } from '../../../cp-node.js';
|
|
4
|
-
import { BezierPiece } from '../../bezier-piece.js';
|
|
5
|
-
import { TXForDebugging } from './x-for-debugging.js';
|
|
6
|
-
/** @hidden */
|
|
7
|
-
declare function addDebugInfo(bezierPieces: BezierPiece[], failed: boolean, pos: IPointOnShape, circle: Circle, z: IPointOnShape, δ: CpNode[], xs: TXForDebugging[], holeClosing: boolean): void;
|
|
8
|
-
export { addDebugInfo };
|
|
1
|
+
import { IPointOnShape } from '../../../point-on-shape.js';
|
|
2
|
+
import { Circle } from '../../../circle.js';
|
|
3
|
+
import { CpNode } from '../../../cp-node.js';
|
|
4
|
+
import { BezierPiece } from '../../bezier-piece.js';
|
|
5
|
+
import { TXForDebugging } from './x-for-debugging.js';
|
|
6
|
+
/** @hidden */
|
|
7
|
+
declare function addDebugInfo(bezierPieces: BezierPiece[], failed: boolean, pos: IPointOnShape, circle: Circle, z: IPointOnShape, δ: CpNode[], xs: TXForDebugging[], holeClosing: boolean): void;
|
|
8
|
+
export { addDebugInfo };
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { getTwoProngType } from '../../get-two-prong-type.js';
|
|
2
|
-
/** @hidden */
|
|
3
|
-
function addDebugInfo(bezierPieces, failed, pos, circle, z, δ, xs, holeClosing) {
|
|
4
|
-
const twoProng = {
|
|
5
|
-
generated: _debug_.generated,
|
|
6
|
-
bezierPieces,
|
|
7
|
-
pos,
|
|
8
|
-
δ,
|
|
9
|
-
z: z ? z.p : undefined,
|
|
10
|
-
circle,
|
|
11
|
-
xs,
|
|
12
|
-
failed,
|
|
13
|
-
holeClosing,
|
|
14
|
-
notAdded: false,
|
|
15
|
-
deleted: false,
|
|
16
|
-
cpNode: undefined
|
|
17
|
-
};
|
|
18
|
-
const twoProngType = getTwoProngType(twoProng);
|
|
19
|
-
_debug_.generated.elems[twoProngType].push(twoProng);
|
|
20
|
-
}
|
|
21
|
-
export { addDebugInfo };
|
|
1
|
+
import { getTwoProngType } from '../../get-two-prong-type.js';
|
|
2
|
+
/** @hidden */
|
|
3
|
+
function addDebugInfo(bezierPieces, failed, pos, circle, z, δ, xs, holeClosing) {
|
|
4
|
+
const twoProng = {
|
|
5
|
+
generated: _debug_.generated,
|
|
6
|
+
bezierPieces,
|
|
7
|
+
pos,
|
|
8
|
+
δ,
|
|
9
|
+
z: z ? z.p : undefined,
|
|
10
|
+
circle,
|
|
11
|
+
xs,
|
|
12
|
+
failed,
|
|
13
|
+
holeClosing,
|
|
14
|
+
notAdded: false,
|
|
15
|
+
deleted: false,
|
|
16
|
+
cpNode: undefined
|
|
17
|
+
};
|
|
18
|
+
const twoProngType = getTwoProngType(twoProng);
|
|
19
|
+
_debug_.generated.elems[twoProngType].push(twoProng);
|
|
20
|
+
}
|
|
21
|
+
export { addDebugInfo };
|
|
22
22
|
//# sourceMappingURL=add-debug-info.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { BezierPiece } from '../../bezier-piece.js';
|
|
2
|
-
/**
|
|
3
|
-
* @hidden
|
|
4
|
-
* Cull all bezierPieces not within given radius of a given point.
|
|
5
|
-
* @param extreme
|
|
6
|
-
* @param bezierPieces
|
|
7
|
-
* @param p
|
|
8
|
-
* @param rSquared
|
|
9
|
-
*/
|
|
10
|
-
declare function cullBezierPieces(bezierPieces: BezierPiece[], p: number[], rSquared: number): BezierPiece[];
|
|
11
|
-
export { cullBezierPieces };
|
|
1
|
+
import { BezierPiece } from '../../bezier-piece.js';
|
|
2
|
+
/**
|
|
3
|
+
* @hidden
|
|
4
|
+
* Cull all bezierPieces not within given radius of a given point.
|
|
5
|
+
* @param extreme
|
|
6
|
+
* @param bezierPieces
|
|
7
|
+
* @param p
|
|
8
|
+
* @param rSquared
|
|
9
|
+
*/
|
|
10
|
+
declare function cullBezierPieces(bezierPieces: BezierPiece[], p: number[], rSquared: number): BezierPiece[];
|
|
11
|
+
export { cullBezierPieces };
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { getClosestSquareDistanceToRect } from '../../geometry/get-closest-square-distance-to-rect.js';
|
|
2
|
-
import { getBoundingBox_ } from '../../../get-bounding-box-.js';
|
|
3
|
-
/**
|
|
4
|
-
* @hidden
|
|
5
|
-
* Cull all bezierPieces not within given radius of a given point.
|
|
6
|
-
* @param extreme
|
|
7
|
-
* @param bezierPieces
|
|
8
|
-
* @param p
|
|
9
|
-
* @param rSquared
|
|
10
|
-
*/
|
|
11
|
-
function cullBezierPieces(bezierPieces, p, rSquared) {
|
|
12
|
-
const CULL_THRESHOLD = 5;
|
|
13
|
-
// TODO - base delta on theory
|
|
14
|
-
const TOLERANCE = 1 + 1e-3;
|
|
15
|
-
if (bezierPieces.length <= CULL_THRESHOLD) {
|
|
16
|
-
return bezierPieces;
|
|
17
|
-
}
|
|
18
|
-
const newPieces = [];
|
|
19
|
-
for (const bezierPiece of bezierPieces) {
|
|
20
|
-
const ps = bezierPiece.curve.ps;
|
|
21
|
-
const rect = getBoundingBox_(ps);
|
|
22
|
-
const bd = getClosestSquareDistanceToRect(rect, p);
|
|
23
|
-
if (bd <= rSquared * TOLERANCE) {
|
|
24
|
-
newPieces.push(bezierPiece);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return newPieces;
|
|
28
|
-
}
|
|
29
|
-
export { cullBezierPieces };
|
|
1
|
+
import { getClosestSquareDistanceToRect } from '../../geometry/get-closest-square-distance-to-rect.js';
|
|
2
|
+
import { getBoundingBox_ } from '../../../get-bounding-box-.js';
|
|
3
|
+
/**
|
|
4
|
+
* @hidden
|
|
5
|
+
* Cull all bezierPieces not within given radius of a given point.
|
|
6
|
+
* @param extreme
|
|
7
|
+
* @param bezierPieces
|
|
8
|
+
* @param p
|
|
9
|
+
* @param rSquared
|
|
10
|
+
*/
|
|
11
|
+
function cullBezierPieces(bezierPieces, p, rSquared) {
|
|
12
|
+
const CULL_THRESHOLD = 5;
|
|
13
|
+
// TODO - base delta on theory
|
|
14
|
+
const TOLERANCE = 1 + 1e-3;
|
|
15
|
+
if (bezierPieces.length <= CULL_THRESHOLD) {
|
|
16
|
+
return bezierPieces;
|
|
17
|
+
}
|
|
18
|
+
const newPieces = [];
|
|
19
|
+
for (const bezierPiece of bezierPieces) {
|
|
20
|
+
const ps = bezierPiece.curve.ps;
|
|
21
|
+
const rect = getBoundingBox_(ps);
|
|
22
|
+
const bd = getClosestSquareDistanceToRect(rect, p);
|
|
23
|
+
if (bd <= rSquared * TOLERANCE) {
|
|
24
|
+
newPieces.push(bezierPiece);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return newPieces;
|
|
28
|
+
}
|
|
29
|
+
export { cullBezierPieces };
|
|
30
30
|
//# sourceMappingURL=cull-bezier-pieces.js.map
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
-
import { CpNode } from '../../../cp-node.js';
|
|
3
|
-
import { Loop } from '../../../loop.js';
|
|
4
|
-
import { Circle } from '../../../circle.js';
|
|
5
|
-
import { IPointOnShape } from '../../../point-on-shape.js';
|
|
6
|
-
/**
|
|
7
|
-
* @hidden
|
|
8
|
-
* Adds a 2-prong to the MAT. The first point on the shape boundary is given and
|
|
9
|
-
* the second one is found by the algorithm.
|
|
10
|
-
*
|
|
11
|
-
* A 2-prong is defined as a MAT circle that touches the shape at exactly 2
|
|
12
|
-
* points.
|
|
13
|
-
*
|
|
14
|
-
* Before any 2-prongs are added the entire shape is our δΩ (1-prongs do not
|
|
15
|
-
* reduce the boundary).
|
|
16
|
-
*
|
|
17
|
-
* As per the paper by Choi, Choi, Moon and Wee:
|
|
18
|
-
* "The starting point of this algorithm is a choice of a circle Br(x)
|
|
19
|
-
* centered at an interior point x which contains two boundary portions c and
|
|
20
|
-
* d of dΩ as in Fig. 19."
|
|
21
|
-
* In fact, we (and they) start by fixing one point on the boundary beforehand.
|
|
22
|
-
* @param loops A shape represented by path loops
|
|
23
|
-
* @param extreme The extreme coordinate value of the shape
|
|
24
|
-
* @param squaredDiagonalLength The squared diagonal length of the shape
|
|
25
|
-
* bounding box.
|
|
26
|
-
* @param y The source point of the 2-prong to be found
|
|
27
|
-
* @param isHoleClosing True if this is a hole-closing two-prong, false otherwise
|
|
28
|
-
* @param k The loop array index
|
|
29
|
-
*/
|
|
30
|
-
declare function find2Prong(loops: Loop[], extreme: number, squaredDiagonalLength: number, cpTrees: Map<Loop, LlRbTree<CpNode>>, y: IPointOnShape, isHoleClosing: boolean, k: number): {
|
|
31
|
-
circle: Circle;
|
|
32
|
-
zs: {
|
|
33
|
-
pos: IPointOnShape;
|
|
34
|
-
d: number;
|
|
35
|
-
}[];
|
|
36
|
-
};
|
|
37
|
-
export { find2Prong };
|
|
1
|
+
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
|
+
import { CpNode } from '../../../cp-node.js';
|
|
3
|
+
import { Loop } from '../../../loop.js';
|
|
4
|
+
import { Circle } from '../../../circle.js';
|
|
5
|
+
import { IPointOnShape } from '../../../point-on-shape.js';
|
|
6
|
+
/**
|
|
7
|
+
* @hidden
|
|
8
|
+
* Adds a 2-prong to the MAT. The first point on the shape boundary is given and
|
|
9
|
+
* the second one is found by the algorithm.
|
|
10
|
+
*
|
|
11
|
+
* A 2-prong is defined as a MAT circle that touches the shape at exactly 2
|
|
12
|
+
* points.
|
|
13
|
+
*
|
|
14
|
+
* Before any 2-prongs are added the entire shape is our δΩ (1-prongs do not
|
|
15
|
+
* reduce the boundary).
|
|
16
|
+
*
|
|
17
|
+
* As per the paper by Choi, Choi, Moon and Wee:
|
|
18
|
+
* "The starting point of this algorithm is a choice of a circle Br(x)
|
|
19
|
+
* centered at an interior point x which contains two boundary portions c and
|
|
20
|
+
* d of dΩ as in Fig. 19."
|
|
21
|
+
* In fact, we (and they) start by fixing one point on the boundary beforehand.
|
|
22
|
+
* @param loops A shape represented by path loops
|
|
23
|
+
* @param extreme The extreme coordinate value of the shape
|
|
24
|
+
* @param squaredDiagonalLength The squared diagonal length of the shape
|
|
25
|
+
* bounding box.
|
|
26
|
+
* @param y The source point of the 2-prong to be found
|
|
27
|
+
* @param isHoleClosing True if this is a hole-closing two-prong, false otherwise
|
|
28
|
+
* @param k The loop array index
|
|
29
|
+
*/
|
|
30
|
+
declare function find2Prong(loops: Loop[], extreme: number, squaredDiagonalLength: number, cpTrees: Map<Loop, LlRbTree<CpNode>>, y: IPointOnShape, isHoleClosing: boolean, k: number): {
|
|
31
|
+
circle: Circle;
|
|
32
|
+
zs: {
|
|
33
|
+
pos: IPointOnShape;
|
|
34
|
+
d: number;
|
|
35
|
+
}[];
|
|
36
|
+
};
|
|
37
|
+
export { find2Prong };
|