flo-mat 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/index.js +8230 -8229
- 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 +11 -11
- package/tsconfig.json +0 -1
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { CpNode } from '../cp-node.js';
|
|
2
|
-
import { IPointOnShape } from '../point-on-shape.js';
|
|
3
|
-
import { Circle } from '../circle.js';
|
|
4
|
-
import { Generated } from './debug.js';
|
|
5
|
-
/**
|
|
6
|
-
* @hidden
|
|
7
|
-
* Used for debugging only. A three-prong is a maximally inscribed circle that
|
|
8
|
-
* touches the shape boundary (tangentially) at 3 points.
|
|
9
|
-
*/
|
|
10
|
-
interface ThreeProngForDebugging {
|
|
11
|
-
generated: Generated;
|
|
12
|
-
/** The best fit circle found for the 3-prong. */
|
|
13
|
-
circle: Circle;
|
|
14
|
-
/** The best fit 3 points found for the 3-prong. */
|
|
15
|
-
poss: IPointOnShape[];
|
|
16
|
-
/** The 3 boundary pieces on which the three prong points were found. */
|
|
17
|
-
cp3ss: CpNode[][];
|
|
18
|
-
/** The boundary pieces that were used to search the three prong on. */
|
|
19
|
-
cpss: CpNode[][];
|
|
20
|
-
bestIndx: number;
|
|
21
|
-
/** An array of 3-prongs, each of which may be a best fit 3-prong. */
|
|
22
|
-
candidateThreeProngs: {
|
|
23
|
-
circle: Circle;
|
|
24
|
-
ps: IPointOnShape[];
|
|
25
|
-
}[];
|
|
26
|
-
visitedCps: CpNode[];
|
|
27
|
-
boundaries: number[][][][];
|
|
28
|
-
traces: number[][][];
|
|
29
|
-
}
|
|
30
|
-
declare function createEmptyThreeProngForDebugging(): ThreeProngForDebugging;
|
|
31
|
-
export { ThreeProngForDebugging, createEmptyThreeProngForDebugging };
|
|
1
|
+
import { CpNode } from '../cp-node.js';
|
|
2
|
+
import { IPointOnShape } from '../point-on-shape.js';
|
|
3
|
+
import { Circle } from '../circle.js';
|
|
4
|
+
import { Generated } from './debug.js';
|
|
5
|
+
/**
|
|
6
|
+
* @hidden
|
|
7
|
+
* Used for debugging only. A three-prong is a maximally inscribed circle that
|
|
8
|
+
* touches the shape boundary (tangentially) at 3 points.
|
|
9
|
+
*/
|
|
10
|
+
interface ThreeProngForDebugging {
|
|
11
|
+
generated: Generated;
|
|
12
|
+
/** The best fit circle found for the 3-prong. */
|
|
13
|
+
circle: Circle;
|
|
14
|
+
/** The best fit 3 points found for the 3-prong. */
|
|
15
|
+
poss: IPointOnShape[];
|
|
16
|
+
/** The 3 boundary pieces on which the three prong points were found. */
|
|
17
|
+
cp3ss: CpNode[][];
|
|
18
|
+
/** The boundary pieces that were used to search the three prong on. */
|
|
19
|
+
cpss: CpNode[][];
|
|
20
|
+
bestIndx: number;
|
|
21
|
+
/** An array of 3-prongs, each of which may be a best fit 3-prong. */
|
|
22
|
+
candidateThreeProngs: {
|
|
23
|
+
circle: Circle;
|
|
24
|
+
ps: IPointOnShape[];
|
|
25
|
+
}[];
|
|
26
|
+
visitedCps: CpNode[];
|
|
27
|
+
boundaries: number[][][][];
|
|
28
|
+
traces: number[][][];
|
|
29
|
+
}
|
|
30
|
+
declare function createEmptyThreeProngForDebugging(): ThreeProngForDebugging;
|
|
31
|
+
export { ThreeProngForDebugging, createEmptyThreeProngForDebugging };
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { posToHumanString } from '../point-on-shape.js';
|
|
2
|
-
function createEmptyThreeProngForDebugging() {
|
|
3
|
-
return {
|
|
4
|
-
generated: undefined,
|
|
5
|
-
circle: undefined,
|
|
6
|
-
poss: undefined,
|
|
7
|
-
cp3ss: undefined,
|
|
8
|
-
cpss: undefined,
|
|
9
|
-
bestIndx: undefined,
|
|
10
|
-
candidateThreeProngs: undefined,
|
|
11
|
-
visitedCps: undefined,
|
|
12
|
-
boundaries: undefined,
|
|
13
|
-
traces: undefined,
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function cpsSimple(threeProngForDebugging) {
|
|
17
|
-
return threeProngForDebugging.cpss.map(δ => [posToHumanString(δ[0].cp.pointOnShape),
|
|
18
|
-
posToHumanString(δ[1].cp.pointOnShape)]);
|
|
19
|
-
}
|
|
20
|
-
export { createEmptyThreeProngForDebugging };
|
|
1
|
+
import { posToHumanString } from '../point-on-shape.js';
|
|
2
|
+
function createEmptyThreeProngForDebugging() {
|
|
3
|
+
return {
|
|
4
|
+
generated: undefined,
|
|
5
|
+
circle: undefined,
|
|
6
|
+
poss: undefined,
|
|
7
|
+
cp3ss: undefined,
|
|
8
|
+
cpss: undefined,
|
|
9
|
+
bestIndx: undefined,
|
|
10
|
+
candidateThreeProngs: undefined,
|
|
11
|
+
visitedCps: undefined,
|
|
12
|
+
boundaries: undefined,
|
|
13
|
+
traces: undefined,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function cpsSimple(threeProngForDebugging) {
|
|
17
|
+
return threeProngForDebugging.cpss.map(δ => [posToHumanString(δ[0].cp.pointOnShape),
|
|
18
|
+
posToHumanString(δ[1].cp.pointOnShape)]);
|
|
19
|
+
}
|
|
20
|
+
export { createEmptyThreeProngForDebugging };
|
|
21
21
|
//# sourceMappingURL=three-prong-for-debugging.js.map
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { CpNode } from '../cp-node.js';
|
|
2
|
-
import { IPointOnShape } from '../point-on-shape.js';
|
|
3
|
-
import { Circle } from '../circle.js';
|
|
4
|
-
import { BezierPiece } from '../mat/bezier-piece.js';
|
|
5
|
-
import { Generated } from './debug.js';
|
|
6
|
-
/** @hidden */
|
|
7
|
-
interface TwoProngForDebugging {
|
|
8
|
-
generated: Generated;
|
|
9
|
-
bezierPieces: BezierPiece[];
|
|
10
|
-
pos: IPointOnShape;
|
|
11
|
-
δ: CpNode[];
|
|
12
|
-
z: number[];
|
|
13
|
-
circle: Circle;
|
|
14
|
-
xs: {
|
|
15
|
-
x: number[];
|
|
16
|
-
y: IPointOnShape;
|
|
17
|
-
z: IPointOnShape;
|
|
18
|
-
t: number;
|
|
19
|
-
}[];
|
|
20
|
-
failed: boolean;
|
|
21
|
-
holeClosing: boolean;
|
|
22
|
-
notAdded: boolean;
|
|
23
|
-
deleted: boolean;
|
|
24
|
-
cpNode: CpNode;
|
|
25
|
-
}
|
|
26
|
-
export { TwoProngForDebugging };
|
|
1
|
+
import { CpNode } from '../cp-node.js';
|
|
2
|
+
import { IPointOnShape } from '../point-on-shape.js';
|
|
3
|
+
import { Circle } from '../circle.js';
|
|
4
|
+
import { BezierPiece } from '../mat/bezier-piece.js';
|
|
5
|
+
import { Generated } from './debug.js';
|
|
6
|
+
/** @hidden */
|
|
7
|
+
interface TwoProngForDebugging {
|
|
8
|
+
generated: Generated;
|
|
9
|
+
bezierPieces: BezierPiece[];
|
|
10
|
+
pos: IPointOnShape;
|
|
11
|
+
δ: CpNode[];
|
|
12
|
+
z: number[];
|
|
13
|
+
circle: Circle;
|
|
14
|
+
xs: {
|
|
15
|
+
x: number[];
|
|
16
|
+
y: IPointOnShape;
|
|
17
|
+
z: IPointOnShape;
|
|
18
|
+
t: number;
|
|
19
|
+
}[];
|
|
20
|
+
failed: boolean;
|
|
21
|
+
holeClosing: boolean;
|
|
22
|
+
notAdded: boolean;
|
|
23
|
+
deleted: boolean;
|
|
24
|
+
cpNode: CpNode;
|
|
25
|
+
}
|
|
26
|
+
export { TwoProngForDebugging };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=two-prong-for-debugging.js.map
|
package/node/find-mats.d.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Mat } from './mat.js';
|
|
2
|
-
/**
|
|
3
|
-
* Finds and returns the Medial Axis Transforms (MATs) from the given array of
|
|
4
|
-
* bezier loops representing shape boundaries.
|
|
5
|
-
*
|
|
6
|
-
* @param bezierLoops An array of (possibly intersecting) loops with each loop
|
|
7
|
-
* representing one or more piecewise smooth closed curves (i.e. shapes). Each
|
|
8
|
-
* loop consists of an array of beziers represented by an array of control
|
|
9
|
-
* points with 2,3 or 4 elements corresponding to linear, quadratic and cubic
|
|
10
|
-
* beziers respectively. Each point is a two-element array (ordered pair), the
|
|
11
|
-
* first of which is the x-coordinate and the second the y-coordinate.
|
|
12
|
-
*
|
|
13
|
-
* @param maxCurviness The maximum value the 'curviness' of a curve can have
|
|
14
|
-
* before an additional MAT point is inserted in between. Defaults to 0.4.
|
|
15
|
-
* (Curviness is measured as the total angle in radians between the consecutive
|
|
16
|
-
* vectors formed by the ordered control points of th bezier curve). The value
|
|
17
|
-
* is clipped in the range `[0.05,3]`.
|
|
18
|
-
* @param maxLength The maximum length a curve can have before an additional MAT
|
|
19
|
-
* point is inserted. This value is scaled to a reference 1024 x 1024
|
|
20
|
-
* grid (e.g. if the shape fits in a 512 x 512 axis-aligned box the value will be
|
|
21
|
-
* halved, e.g. from 10 to 5). Together with maxCurviness it represents a
|
|
22
|
-
* tolerance for the accuracy of the MAT. Defaults to 4. The value is clipped
|
|
23
|
-
* in [1,100].
|
|
24
|
-
*/
|
|
25
|
-
declare function findMats(bezierLoops: number[][][][], maxCurviness?: number, maxLength?: number): Mat[];
|
|
26
|
-
export { findMats };
|
|
1
|
+
import { Mat } from './mat.js';
|
|
2
|
+
/**
|
|
3
|
+
* Finds and returns the Medial Axis Transforms (MATs) from the given array of
|
|
4
|
+
* bezier loops representing shape boundaries.
|
|
5
|
+
*
|
|
6
|
+
* @param bezierLoops An array of (possibly intersecting) loops with each loop
|
|
7
|
+
* representing one or more piecewise smooth closed curves (i.e. shapes). Each
|
|
8
|
+
* loop consists of an array of beziers represented by an array of control
|
|
9
|
+
* points with 2,3 or 4 elements corresponding to linear, quadratic and cubic
|
|
10
|
+
* beziers respectively. Each point is a two-element array (ordered pair), the
|
|
11
|
+
* first of which is the x-coordinate and the second the y-coordinate.
|
|
12
|
+
*
|
|
13
|
+
* @param maxCurviness The maximum value the 'curviness' of a curve can have
|
|
14
|
+
* before an additional MAT point is inserted in between. Defaults to 0.4.
|
|
15
|
+
* (Curviness is measured as the total angle in radians between the consecutive
|
|
16
|
+
* vectors formed by the ordered control points of th bezier curve). The value
|
|
17
|
+
* is clipped in the range `[0.05,3]`.
|
|
18
|
+
* @param maxLength The maximum length a curve can have before an additional MAT
|
|
19
|
+
* point is inserted. This value is scaled to a reference 1024 x 1024
|
|
20
|
+
* grid (e.g. if the shape fits in a 512 x 512 axis-aligned box the value will be
|
|
21
|
+
* halved, e.g. from 10 to 5). Together with maxCurviness it represents a
|
|
22
|
+
* tolerance for the accuracy of the MAT. Defaults to 4. The value is clipped
|
|
23
|
+
* in [1,100].
|
|
24
|
+
*/
|
|
25
|
+
declare function findMats(bezierLoops: number[][][][], maxCurviness?: number, maxLength?: number): Mat[];
|
|
26
|
+
export { findMats };
|
package/node/find-mats.js
CHANGED
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
import { simplifyPaths } from 'flo-boolean';
|
|
2
|
-
import { findAndAddAll3Prongs } from './mat/find-mat/find-and-add-3-prongs.js';
|
|
3
|
-
import { createInitialCpGraph } from './mat/find-mat/create-initial-cp-graph.js';
|
|
4
|
-
import { addDebugInfo1, addDebugInfo2, addDebugInfo3, addDebugInfo4 } from './mat/find-mat/add-debug-info.js';
|
|
5
|
-
import { getPotential2Prongs } from './mat/find-mat/get-potential-2-prongs.js';
|
|
6
|
-
import { getSharpCorners } from './mat/find-mat/get-sharp-corners.js';
|
|
7
|
-
import { findAndAdd2ProngsOnAllPaths } from './mat/find-mat/find-and-add-2-prongs-on-all-paths.js';
|
|
8
|
-
import { getInterestingPointsOnLoop } from './mat/find-mat/create-get-interesting-points-on-loop.js';
|
|
9
|
-
import { findAndAddHoleClosing2Prongs } from './mat/find-mat/find-and-add-hole-closing-2-prongs.js';
|
|
10
|
-
import { getLoopsMetrics } from './loop/get-max-coordinate.js';
|
|
11
|
-
/**
|
|
12
|
-
* Finds and returns the Medial Axis Transforms (MATs) from the given array of
|
|
13
|
-
* bezier loops representing shape boundaries.
|
|
14
|
-
*
|
|
15
|
-
* @param bezierLoops An array of (possibly intersecting) loops with each loop
|
|
16
|
-
* representing one or more piecewise smooth closed curves (i.e. shapes). Each
|
|
17
|
-
* loop consists of an array of beziers represented by an array of control
|
|
18
|
-
* points with 2,3 or 4 elements corresponding to linear, quadratic and cubic
|
|
19
|
-
* beziers respectively. Each point is a two-element array (ordered pair), the
|
|
20
|
-
* first of which is the x-coordinate and the second the y-coordinate.
|
|
21
|
-
*
|
|
22
|
-
* @param maxCurviness The maximum value the 'curviness' of a curve can have
|
|
23
|
-
* before an additional MAT point is inserted in between. Defaults to 0.4.
|
|
24
|
-
* (Curviness is measured as the total angle in radians between the consecutive
|
|
25
|
-
* vectors formed by the ordered control points of th bezier curve). The value
|
|
26
|
-
* is clipped in the range `[0.05,3]`.
|
|
27
|
-
* @param maxLength The maximum length a curve can have before an additional MAT
|
|
28
|
-
* point is inserted. This value is scaled to a reference 1024 x 1024
|
|
29
|
-
* grid (e.g. if the shape fits in a 512 x 512 axis-aligned box the value will be
|
|
30
|
-
* halved, e.g. from 10 to 5). Together with maxCurviness it represents a
|
|
31
|
-
* tolerance for the accuracy of the MAT. Defaults to 4. The value is clipped
|
|
32
|
-
* in [1,100].
|
|
33
|
-
*/
|
|
34
|
-
function findMats(bezierLoops, maxCurviness = 0.4, maxLength = 4) {
|
|
35
|
-
// if (typeof _debug_ !== 'undefined') { var timingStart = performance.now(); }
|
|
36
|
-
let maxCoordinate;
|
|
37
|
-
let minBezLength;
|
|
38
|
-
({ maxCurviness, maxLength, maxCoordinate, minBezLength } =
|
|
39
|
-
getSizeParams(bezierLoops, maxCurviness, maxLength));
|
|
40
|
-
const loopss = simplifyPaths(bezierLoops, maxCoordinate);
|
|
41
|
-
const mats = [];
|
|
42
|
-
for (const loops of loopss) {
|
|
43
|
-
const mat = findMat(loops, minBezLength, maxCurviness, maxLength, maxCoordinate);
|
|
44
|
-
if (mat) {
|
|
45
|
-
mats.push(mat);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return mats;
|
|
49
|
-
}
|
|
50
|
-
function getSizeParams(bezierLoops, maxCurviness, maxLength) {
|
|
51
|
-
// Gather some shape metrics
|
|
52
|
-
const { maxCoordinate, maxRadius } = getLoopsMetrics(bezierLoops);
|
|
53
|
-
const expMax = Math.ceil(Math.log2(maxCoordinate));
|
|
54
|
-
const minBezLengthSigBits = 14;
|
|
55
|
-
/**
|
|
56
|
-
* If a curve is shorter than this value then no points on it will be
|
|
57
|
-
* selected for the purpose of finding the MAT.
|
|
58
|
-
*/
|
|
59
|
-
const minBezLength = 2 ** expMax * 2 ** (-minBezLengthSigBits);
|
|
60
|
-
// Limit the tolerance to a reasonable level
|
|
61
|
-
if (maxCurviness < 0.05) {
|
|
62
|
-
maxCurviness = 0.05;
|
|
63
|
-
}
|
|
64
|
-
if (maxCurviness > 3) {
|
|
65
|
-
maxCurviness = 3;
|
|
66
|
-
}
|
|
67
|
-
// Limit the tolerance to a reasonable level
|
|
68
|
-
if (maxLength < 0.1) {
|
|
69
|
-
maxLength = 0.1;
|
|
70
|
-
}
|
|
71
|
-
if (maxLength > 100) {
|
|
72
|
-
maxLength = 100;
|
|
73
|
-
}
|
|
74
|
-
// Adjust length tolerance according to a reference max coordinate
|
|
75
|
-
const expMaxRadius = Math.ceil(Math.log2(maxRadius));
|
|
76
|
-
const maxLengthSigBits = 10; // 1024 x 1024
|
|
77
|
-
maxLength = maxLength * (2 ** expMaxRadius * 2 ** (-maxLengthSigBits));
|
|
78
|
-
return { maxCurviness, maxLength, maxCoordinate, minBezLength };
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* @hidden
|
|
82
|
-
* Find the MAT of the given loops.
|
|
83
|
-
* @param loops The loops (that as a precondition must be ordered from highest
|
|
84
|
-
* (i.e. smallest y-value) topmost point loops to lowest)
|
|
85
|
-
*/
|
|
86
|
-
function findMat(loops, minBezLength, maxCurviness, maxLength, maxCoordinate) {
|
|
87
|
-
addDebugInfo1(loops);
|
|
88
|
-
// Gets interesting points on the shape, i.e. those that makes sense to use
|
|
89
|
-
// for the 2-prong procedure.
|
|
90
|
-
const pointsPerLoop = loops.map(getInterestingPointsOnLoop(minBezLength, maxCurviness, maxLength));
|
|
91
|
-
const for2ProngsPerLoop = getPotential2Prongs(pointsPerLoop);
|
|
92
|
-
const sharpCornersPerLoop = getSharpCorners(pointsPerLoop);
|
|
93
|
-
const cpTrees = new Map();
|
|
94
|
-
let cpNode = createInitialCpGraph(loops, cpTrees, sharpCornersPerLoop);
|
|
95
|
-
findAndAddHoleClosing2Prongs(loops, cpTrees, maxCoordinate);
|
|
96
|
-
if (typeof _debug_ !== 'undefined') {
|
|
97
|
-
if (_debug_.directives.stopAfterHoleClosers) {
|
|
98
|
-
return undefined;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
addDebugInfo2();
|
|
102
|
-
cpNode = findAndAdd2ProngsOnAllPaths(loops, cpTrees, for2ProngsPerLoop, maxCoordinate);
|
|
103
|
-
addDebugInfo3();
|
|
104
|
-
if (typeof _debug_ !== 'undefined') {
|
|
105
|
-
if (_debug_.directives.stopAfterTwoProngs) {
|
|
106
|
-
return undefined;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
if (cpNode === undefined) {
|
|
110
|
-
return undefined;
|
|
111
|
-
}
|
|
112
|
-
findAndAddAll3Prongs(cpTrees, cpNode, maxCoordinate);
|
|
113
|
-
if (typeof _debug_ !== 'undefined') {
|
|
114
|
-
if (_debug_.directives.stopAfterThreeProngs) {
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
const mat = { cpNode, cpTrees };
|
|
119
|
-
addDebugInfo4(mat);
|
|
120
|
-
return mat;
|
|
121
|
-
}
|
|
122
|
-
export { findMats };
|
|
1
|
+
import { simplifyPaths } from 'flo-boolean';
|
|
2
|
+
import { findAndAddAll3Prongs } from './mat/find-mat/find-and-add-3-prongs.js';
|
|
3
|
+
import { createInitialCpGraph } from './mat/find-mat/create-initial-cp-graph.js';
|
|
4
|
+
import { addDebugInfo1, addDebugInfo2, addDebugInfo3, addDebugInfo4 } from './mat/find-mat/add-debug-info.js';
|
|
5
|
+
import { getPotential2Prongs } from './mat/find-mat/get-potential-2-prongs.js';
|
|
6
|
+
import { getSharpCorners } from './mat/find-mat/get-sharp-corners.js';
|
|
7
|
+
import { findAndAdd2ProngsOnAllPaths } from './mat/find-mat/find-and-add-2-prongs-on-all-paths.js';
|
|
8
|
+
import { getInterestingPointsOnLoop } from './mat/find-mat/create-get-interesting-points-on-loop.js';
|
|
9
|
+
import { findAndAddHoleClosing2Prongs } from './mat/find-mat/find-and-add-hole-closing-2-prongs.js';
|
|
10
|
+
import { getLoopsMetrics } from './loop/get-max-coordinate.js';
|
|
11
|
+
/**
|
|
12
|
+
* Finds and returns the Medial Axis Transforms (MATs) from the given array of
|
|
13
|
+
* bezier loops representing shape boundaries.
|
|
14
|
+
*
|
|
15
|
+
* @param bezierLoops An array of (possibly intersecting) loops with each loop
|
|
16
|
+
* representing one or more piecewise smooth closed curves (i.e. shapes). Each
|
|
17
|
+
* loop consists of an array of beziers represented by an array of control
|
|
18
|
+
* points with 2,3 or 4 elements corresponding to linear, quadratic and cubic
|
|
19
|
+
* beziers respectively. Each point is a two-element array (ordered pair), the
|
|
20
|
+
* first of which is the x-coordinate and the second the y-coordinate.
|
|
21
|
+
*
|
|
22
|
+
* @param maxCurviness The maximum value the 'curviness' of a curve can have
|
|
23
|
+
* before an additional MAT point is inserted in between. Defaults to 0.4.
|
|
24
|
+
* (Curviness is measured as the total angle in radians between the consecutive
|
|
25
|
+
* vectors formed by the ordered control points of th bezier curve). The value
|
|
26
|
+
* is clipped in the range `[0.05,3]`.
|
|
27
|
+
* @param maxLength The maximum length a curve can have before an additional MAT
|
|
28
|
+
* point is inserted. This value is scaled to a reference 1024 x 1024
|
|
29
|
+
* grid (e.g. if the shape fits in a 512 x 512 axis-aligned box the value will be
|
|
30
|
+
* halved, e.g. from 10 to 5). Together with maxCurviness it represents a
|
|
31
|
+
* tolerance for the accuracy of the MAT. Defaults to 4. The value is clipped
|
|
32
|
+
* in [1,100].
|
|
33
|
+
*/
|
|
34
|
+
function findMats(bezierLoops, maxCurviness = 0.4, maxLength = 4) {
|
|
35
|
+
// if (typeof _debug_ !== 'undefined') { var timingStart = performance.now(); }
|
|
36
|
+
let maxCoordinate;
|
|
37
|
+
let minBezLength;
|
|
38
|
+
({ maxCurviness, maxLength, maxCoordinate, minBezLength } =
|
|
39
|
+
getSizeParams(bezierLoops, maxCurviness, maxLength));
|
|
40
|
+
const loopss = simplifyPaths(bezierLoops, maxCoordinate);
|
|
41
|
+
const mats = [];
|
|
42
|
+
for (const loops of loopss) {
|
|
43
|
+
const mat = findMat(loops, minBezLength, maxCurviness, maxLength, maxCoordinate);
|
|
44
|
+
if (mat) {
|
|
45
|
+
mats.push(mat);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return mats;
|
|
49
|
+
}
|
|
50
|
+
function getSizeParams(bezierLoops, maxCurviness, maxLength) {
|
|
51
|
+
// Gather some shape metrics
|
|
52
|
+
const { maxCoordinate, maxRadius } = getLoopsMetrics(bezierLoops);
|
|
53
|
+
const expMax = Math.ceil(Math.log2(maxCoordinate));
|
|
54
|
+
const minBezLengthSigBits = 14;
|
|
55
|
+
/**
|
|
56
|
+
* If a curve is shorter than this value then no points on it will be
|
|
57
|
+
* selected for the purpose of finding the MAT.
|
|
58
|
+
*/
|
|
59
|
+
const minBezLength = 2 ** expMax * 2 ** (-minBezLengthSigBits);
|
|
60
|
+
// Limit the tolerance to a reasonable level
|
|
61
|
+
if (maxCurviness < 0.05) {
|
|
62
|
+
maxCurviness = 0.05;
|
|
63
|
+
}
|
|
64
|
+
if (maxCurviness > 3) {
|
|
65
|
+
maxCurviness = 3;
|
|
66
|
+
}
|
|
67
|
+
// Limit the tolerance to a reasonable level
|
|
68
|
+
if (maxLength < 0.1) {
|
|
69
|
+
maxLength = 0.1;
|
|
70
|
+
}
|
|
71
|
+
if (maxLength > 100) {
|
|
72
|
+
maxLength = 100;
|
|
73
|
+
}
|
|
74
|
+
// Adjust length tolerance according to a reference max coordinate
|
|
75
|
+
const expMaxRadius = Math.ceil(Math.log2(maxRadius));
|
|
76
|
+
const maxLengthSigBits = 10; // 1024 x 1024
|
|
77
|
+
maxLength = maxLength * (2 ** expMaxRadius * 2 ** (-maxLengthSigBits));
|
|
78
|
+
return { maxCurviness, maxLength, maxCoordinate, minBezLength };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* @hidden
|
|
82
|
+
* Find the MAT of the given loops.
|
|
83
|
+
* @param loops The loops (that as a precondition must be ordered from highest
|
|
84
|
+
* (i.e. smallest y-value) topmost point loops to lowest)
|
|
85
|
+
*/
|
|
86
|
+
function findMat(loops, minBezLength, maxCurviness, maxLength, maxCoordinate) {
|
|
87
|
+
addDebugInfo1(loops);
|
|
88
|
+
// Gets interesting points on the shape, i.e. those that makes sense to use
|
|
89
|
+
// for the 2-prong procedure.
|
|
90
|
+
const pointsPerLoop = loops.map(getInterestingPointsOnLoop(minBezLength, maxCurviness, maxLength));
|
|
91
|
+
const for2ProngsPerLoop = getPotential2Prongs(pointsPerLoop);
|
|
92
|
+
const sharpCornersPerLoop = getSharpCorners(pointsPerLoop);
|
|
93
|
+
const cpTrees = new Map();
|
|
94
|
+
let cpNode = createInitialCpGraph(loops, cpTrees, sharpCornersPerLoop);
|
|
95
|
+
findAndAddHoleClosing2Prongs(loops, cpTrees, maxCoordinate);
|
|
96
|
+
if (typeof _debug_ !== 'undefined') {
|
|
97
|
+
if (_debug_.directives.stopAfterHoleClosers) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
addDebugInfo2();
|
|
102
|
+
cpNode = findAndAdd2ProngsOnAllPaths(loops, cpTrees, for2ProngsPerLoop, maxCoordinate);
|
|
103
|
+
addDebugInfo3();
|
|
104
|
+
if (typeof _debug_ !== 'undefined') {
|
|
105
|
+
if (_debug_.directives.stopAfterTwoProngs) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (cpNode === undefined) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
findAndAddAll3Prongs(cpTrees, cpNode, maxCoordinate);
|
|
113
|
+
if (typeof _debug_ !== 'undefined') {
|
|
114
|
+
if (_debug_.directives.stopAfterThreeProngs) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const mat = { cpNode, cpTrees };
|
|
119
|
+
addDebugInfo4(mat);
|
|
120
|
+
return mat;
|
|
121
|
+
}
|
|
122
|
+
export { findMats };
|
|
123
123
|
//# sourceMappingURL=find-mats.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { BezierPiece } from 'flo-bezier3';
|
|
2
|
-
import { CpNode } from './cp-node.js';
|
|
3
|
-
/**
|
|
4
|
-
* Returns the ordered bezier curves from this CpNode to the next CpNode
|
|
5
|
-
* on the boundary.
|
|
6
|
-
* @param cpNode
|
|
7
|
-
*/
|
|
8
|
-
declare function getBoundaryBezierPartsToNext(cpNode: CpNode): BezierPiece[];
|
|
9
|
-
export { getBoundaryBezierPartsToNext };
|
|
1
|
+
import { BezierPiece } from 'flo-bezier3';
|
|
2
|
+
import { CpNode } from './cp-node.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the ordered bezier curves from this CpNode to the next CpNode
|
|
5
|
+
* on the boundary.
|
|
6
|
+
* @param cpNode
|
|
7
|
+
*/
|
|
8
|
+
declare function getBoundaryBezierPartsToNext(cpNode: CpNode): BezierPiece[];
|
|
9
|
+
export { getBoundaryBezierPartsToNext };
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns the ordered bezier curves from this CpNode to the next CpNode
|
|
3
|
-
* on the boundary.
|
|
4
|
-
* @param cpNode
|
|
5
|
-
*/
|
|
6
|
-
function getBoundaryBezierPartsToNext(cpNode) {
|
|
7
|
-
const cpThis = cpNode;
|
|
8
|
-
const cpNext = cpNode.next;
|
|
9
|
-
const posThis = cpThis.cp.pointOnShape;
|
|
10
|
-
const posNext = cpNext.cp.pointOnShape;
|
|
11
|
-
const curveThis = posThis.curve;
|
|
12
|
-
const curveNext = posNext.curve;
|
|
13
|
-
if (curveThis.loop !== curveNext.loop) {
|
|
14
|
-
// It is a hole-closer going over to the other loop - a kind of terminal
|
|
15
|
-
// CpNode.
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
const bezierParts = [];
|
|
19
|
-
if (curveNext === curveThis) {
|
|
20
|
-
bezierParts.push({ ps: posThis.curve.ps, ts: [posThis.t, posNext.t] });
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
bezierParts.push({ ps: posThis.curve.ps, ts: [posThis.t, 1] });
|
|
24
|
-
addSkippedBeziers(bezierParts, posThis.curve, posNext.curve, posNext.t);
|
|
25
|
-
}
|
|
26
|
-
return bezierParts;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* @hidden
|
|
30
|
-
* Adds pieces of skipped beziers.
|
|
31
|
-
*/
|
|
32
|
-
function addSkippedBeziers(bezierParts, curveStart, curveEnd, t1) {
|
|
33
|
-
let curveThis = curveStart;
|
|
34
|
-
do {
|
|
35
|
-
curveThis = curveThis.next;
|
|
36
|
-
const bezierPart = curveThis === curveEnd
|
|
37
|
-
? { ps: curveThis.ps, ts: [0, t1] }
|
|
38
|
-
: { ps: curveThis.ps, ts: [0, 1] };
|
|
39
|
-
bezierParts.push(bezierPart);
|
|
40
|
-
} while (curveThis !== curveEnd);
|
|
41
|
-
}
|
|
42
|
-
export { getBoundaryBezierPartsToNext };
|
|
1
|
+
/**
|
|
2
|
+
* Returns the ordered bezier curves from this CpNode to the next CpNode
|
|
3
|
+
* on the boundary.
|
|
4
|
+
* @param cpNode
|
|
5
|
+
*/
|
|
6
|
+
function getBoundaryBezierPartsToNext(cpNode) {
|
|
7
|
+
const cpThis = cpNode;
|
|
8
|
+
const cpNext = cpNode.next;
|
|
9
|
+
const posThis = cpThis.cp.pointOnShape;
|
|
10
|
+
const posNext = cpNext.cp.pointOnShape;
|
|
11
|
+
const curveThis = posThis.curve;
|
|
12
|
+
const curveNext = posNext.curve;
|
|
13
|
+
if (curveThis.loop !== curveNext.loop) {
|
|
14
|
+
// It is a hole-closer going over to the other loop - a kind of terminal
|
|
15
|
+
// CpNode.
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const bezierParts = [];
|
|
19
|
+
if (curveNext === curveThis) {
|
|
20
|
+
bezierParts.push({ ps: posThis.curve.ps, ts: [posThis.t, posNext.t] });
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
bezierParts.push({ ps: posThis.curve.ps, ts: [posThis.t, 1] });
|
|
24
|
+
addSkippedBeziers(bezierParts, posThis.curve, posNext.curve, posNext.t);
|
|
25
|
+
}
|
|
26
|
+
return bezierParts;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @hidden
|
|
30
|
+
* Adds pieces of skipped beziers.
|
|
31
|
+
*/
|
|
32
|
+
function addSkippedBeziers(bezierParts, curveStart, curveEnd, t1) {
|
|
33
|
+
let curveThis = curveStart;
|
|
34
|
+
do {
|
|
35
|
+
curveThis = curveThis.next;
|
|
36
|
+
const bezierPart = curveThis === curveEnd
|
|
37
|
+
? { ps: curveThis.ps, ts: [0, t1] }
|
|
38
|
+
: { ps: curveThis.ps, ts: [0, 1] };
|
|
39
|
+
bezierParts.push(bezierPart);
|
|
40
|
+
} while (curveThis !== curveEnd);
|
|
41
|
+
}
|
|
42
|
+
export { getBoundaryBezierPartsToNext };
|
|
43
43
|
//# sourceMappingURL=get-boundary-bezier-parts-to-next.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { CpNode } from './cp-node.js';
|
|
2
|
-
/**
|
|
3
|
-
* Returns the ordered bezier curves from this CpNode to the next CpNode
|
|
4
|
-
* on the boundary.
|
|
5
|
-
* @param cpNode
|
|
6
|
-
*/
|
|
7
|
-
declare function getBoundaryBeziersToNext(cpNode: CpNode): number[][][];
|
|
8
|
-
export { getBoundaryBeziersToNext };
|
|
1
|
+
import { CpNode } from './cp-node.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns the ordered bezier curves from this CpNode to the next CpNode
|
|
4
|
+
* on the boundary.
|
|
5
|
+
* @param cpNode
|
|
6
|
+
*/
|
|
7
|
+
declare function getBoundaryBeziersToNext(cpNode: CpNode): number[][][];
|
|
8
|
+
export { getBoundaryBeziersToNext };
|