flo-mat 3.0.6 → 3.0.7
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/__tests__/cp-node/fs/add-distance-from.spec.ts +7 -0
- package/__tests__/cp-node/fs/check-jsog-eql-calc.spec.ts +30 -0
- package/__tests__/cp-node/fs/clone.spec.ts +7 -0
- package/__tests__/cp-node/fs/cp-nodes-to-boundary-beziers.spec.ts +7 -0
- package/__tests__/cp-node/fs/create-cp-node.spec.ts +7 -0
- package/__tests__/cp-node/fs/enhance-cp-node.spec.ts +7 -0
- package/__tests__/cp-node/fs/find-first.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-all-between.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-all-on-circle.spec.ts +92 -0
- package/__tests__/cp-node/fs/get-all-on-loop.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-all-vertices.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-angle-between-mat-curves.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-avg-speed.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-boundary-bezier-parts-to-next.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-boundary-beziers-between.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-boundary-beziers-to-next.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-boundary-distance-to-next.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-branch-beziers.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-branch.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-children.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-cp-node-ordering.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-distance-between.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-distance-to-next.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-edge-direction.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-first-exit.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-hole-closers.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-implied-boundary-bezier-between.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-mat-curve-between.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-mat-curve-to-next.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-mat-curves-between.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-non-terminating-on-circle.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-prong-count.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-real-prong-count.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-salience.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-smoothed-speed.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-smoothed.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-speed.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-terminating-on-circle.spec.ts +7 -0
- package/__tests__/cp-node/fs/get-vertex-forward-children.spec.ts +7 -0
- package/__tests__/cp-node/fs/insert-cp-node.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-fully-terminating.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-on-same-circle.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-one-prong.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-order-correct.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-sharp.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-single-3-prong.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-special.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-terminating.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-trivial.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-two-prong.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-vertex-special.spec.ts +7 -0
- package/__tests__/cp-node/fs/is-vertex.spec.ts +7 -0
- package/__tests__/cp-node/fs/iterate-all-on-loop.spec.ts +7 -0
- package/__tests__/cp-node/fs/mat-dummys.ts +6716 -0
- package/__tests__/cp-node/fs/remove-cp-node.spec.ts +7 -0
- package/__tests__/cp-node/fs/traverse-all-forward.spec.ts +7 -0
- package/__tests__/cp-node/fs/traverse-cp.spec.ts +7 -0
- package/__tests__/cp-node/fs/traverse-edges.spec.ts +7 -0
- package/__tests__/cp-node/fs/traverse-vertices.spec.ts +7 -0
- package/__tests__/lib-load.spec.ts +9 -10
- package/browser/index.js +239 -158
- package/browser/index.min.js +1 -1
- package/jest.config.cjs +32 -0
- package/node/corner/get-interface-ccw.js +0 -1
- package/node/corner/get-interface-ccw.js.map +1 -1
- package/node/cp-node/cp-node-fs.d.ts +32 -32
- package/node/cp-node/cp-node-fs.js +32 -32
- package/node/cp-node/cp-node.d.ts +13 -21
- package/node/cp-node/fs/clone.d.ts +3 -3
- package/node/cp-node/fs/clone.js +3 -3
- package/node/cp-node/fs/enhance-cp-node.d.ts +1 -5
- package/node/cp-node/fs/enhance-cp-node.js.map +1 -1
- package/node/cp-node/fs/get-all-between.d.ts +3 -3
- package/node/cp-node/fs/get-all-between.js +3 -3
- package/node/cp-node/fs/get-all-between.js.map +1 -1
- package/node/cp-node/fs/get-all-on-circle.d.ts +7 -1
- package/node/cp-node/fs/get-all-on-circle.js +11 -7
- package/node/cp-node/fs/get-all-on-circle.js.map +1 -1
- package/node/cp-node/fs/get-all-on-loop.d.ts +1 -1
- package/node/cp-node/fs/get-all-on-loop.js.map +1 -1
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.d.ts +12 -3
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js +22 -7
- package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js.map +1 -1
- package/node/cp-node/fs/get-boundary-beziers-between.d.ts +1 -1
- package/node/cp-node/fs/get-boundary-beziers-between.js.map +1 -1
- package/node/cp-node/fs/get-boundary-beziers-to-next.js.map +1 -1
- package/node/cp-node/fs/insert-cp-node.d.ts +3 -1
- package/node/cp-node/fs/insert-cp-node.js +12 -2
- package/node/cp-node/fs/insert-cp-node.js.map +1 -1
- package/node/cp-node/fs/is-fully-terminating.d.ts +7 -0
- package/node/cp-node/fs/is-fully-terminating.js +7 -0
- package/node/cp-node/fs/is-fully-terminating.js.map +1 -1
- package/node/cp-node/fs/is-terminating.d.ts +1 -1
- package/node/cp-node/fs/remove-cp-node.d.ts +3 -4
- package/node/cp-node/fs/remove-cp-node.js +3 -1
- package/node/cp-node/fs/remove-cp-node.js.map +1 -1
- package/node/curve/curve.d.ts +18 -11
- package/node/find-2-prong/add-1-prong.js +1 -1
- package/node/find-2-prong/add-1-prong.js.map +1 -1
- package/node/find-2-prong/add-2-prong.js +9 -7
- package/node/find-2-prong/add-2-prong.js.map +1 -1
- package/node/find-2-prong/calc-seperation-tolerance.d.ts +8 -1
- package/node/find-2-prong/calc-seperation-tolerance.js +73 -59
- package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -1
- package/node/find-2-prong/find-2-prong.js +2 -2
- package/node/find-2-prong/find-2-prong.js.map +1 -1
- package/node/find-2-prong/get-initial-bezier-pieces.d.ts +2 -3
- package/node/find-2-prong/get-initial-bezier-pieces.js +4 -1
- package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
- package/node/find-3-prong.ts/find-and-add-3-prong.js +1 -1
- package/node/find-3-prong.ts/find-and-add-3-prong.js.map +1 -1
- package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.d.ts +2 -2
- package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.js +8 -3
- package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.js.map +1 -1
- package/node/find-mat/create-initial-cp-tree.d.ts +7 -3
- package/node/find-mat/create-initial-cp-tree.js +7 -5
- package/node/find-mat/create-initial-cp-tree.js.map +1 -1
- package/node/find-mat/find-mat.d.ts +2 -1
- package/node/find-mat/find-mat.js +10 -4
- package/node/find-mat/find-mat.js.map +1 -1
- package/node/find-mat/get-meta.d.ts +5 -2
- package/node/find-mat/get-meta.js +15 -14
- package/node/find-mat/get-meta.js.map +1 -1
- package/node/index.d.ts +0 -1
- package/node/index.js +1 -1
- package/node/index.js.map +1 -1
- package/node/mat/add-to-cp-tree.d.ts +5 -6
- package/node/mat/add-to-cp-tree.js +5 -2
- package/node/mat/add-to-cp-tree.js.map +1 -1
- package/node/mat/get-branches.d.ts +7 -0
- package/node/mat/get-branches.js +7 -0
- package/node/mat/get-branches.js.map +1 -1
- package/node/mat/mat-meta.d.ts +8 -1
- package/node/mat/mat.d.ts +3 -3
- package/node/mat/simplify-mat.js +1 -1
- package/node/mat/simplify-mat.js.map +1 -1
- package/node/point-on-shape/point-on-shape.d.ts +1 -1
- package/node/vertex/remove-vertex.d.ts +3 -4
- package/node/vertex/remove-vertex.js +3 -2
- package/node/vertex/remove-vertex.js.map +1 -1
- package/package.json +9 -6
- package/src/corner/get-interface-ccw.ts +0 -1
- package/src/cp-node/cp-node-fs.ts +43 -43
- package/src/cp-node/cp-node.ts +27 -39
- package/src/cp-node/fs/clone.ts +3 -3
- package/src/cp-node/fs/enhance-cp-node.ts +0 -1
- package/src/cp-node/fs/get-all-between.ts +31 -28
- package/src/cp-node/fs/get-all-on-circle.ts +13 -8
- package/src/cp-node/fs/get-all-on-loop.ts +12 -10
- package/src/cp-node/fs/get-boundary-bezier-parts-to-next.ts +39 -22
- package/src/cp-node/fs/get-boundary-beziers-between.ts +6 -2
- package/src/cp-node/fs/get-boundary-beziers-to-next.ts +6 -4
- package/src/cp-node/fs/insert-cp-node.ts +13 -2
- package/src/cp-node/fs/is-fully-terminating.ts +7 -0
- package/src/cp-node/fs/is-terminating.ts +1 -1
- package/src/cp-node/fs/remove-cp-node.ts +8 -4
- package/src/curve/curve.ts +19 -13
- package/src/debug/functions/check-ordering.ts +7 -3
- package/src/find-2-prong/add-1-prong.ts +1 -1
- package/src/find-2-prong/add-2-prong.ts +79 -74
- package/src/find-2-prong/calc-seperation-tolerance.ts +88 -78
- package/src/find-2-prong/find-2-prong.ts +2 -2
- package/src/find-2-prong/get-initial-bezier-pieces.ts +5 -1
- package/src/find-3-prong.ts/add-3-prong.ts +73 -70
- package/src/find-3-prong.ts/find-and-add-3-prong.ts +1 -1
- package/src/find-3-prong.ts/find-and-add-3-prongs-on-loop.ts +9 -8
- package/src/find-mat/create-initial-cp-tree.ts +10 -6
- package/src/find-mat/find-mat.ts +12 -5
- package/src/find-mat/get-meta.ts +30 -20
- package/src/get-curve/get-curve-between.ts +2 -2
- package/src/index.ts +1 -1
- package/src/mat/add-to-cp-tree.ts +18 -9
- package/src/mat/get-branches.ts +35 -28
- package/src/mat/mat-meta.ts +6 -1
- package/src/mat/mat.ts +3 -3
- package/src/mat/simplify-mat.ts +1 -1
- package/src/point-on-shape/compare-poss.ts +3 -3
- package/src/point-on-shape/get-osculating-circle.ts +1 -1
- package/src/point-on-shape/point-on-shape.ts +1 -1
- package/src/point-on-shape/pos-to-human-string.ts +1 -1
- package/src/sat/to-scale-axis.ts +1 -1
- package/src/vertex/remove-vertex.ts +7 -5
- package/.mocharc.cjs +0 -17
- package/src/debug/functions/draw-elem/branch.ts +0 -26
- package/src/find-mat/create-initial-cp-graph.ts +0 -59
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-all-on-loop.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-all-on-loop.ts"],"names":[],"mappings":"AAGA,SAAS,YAAY,
|
|
1
|
+
{"version":3,"file":"get-all-on-loop.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-all-on-loop.ts"],"names":[],"mappings":"AAGA,SAAS,YAAY,CACnB,MAAc;IAEZ,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,OAAO,GAAa,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;IAE1B,OAAO,OAAO,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import { BezierPiece } from 'flo-bezier3';
|
|
2
|
-
import { CpNode } from '../cp-node.js';
|
|
3
|
-
|
|
1
|
+
import type { BezierPiece } from 'flo-bezier3';
|
|
2
|
+
import type { CpNode } from '../cp-node.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the boundary beziers pieces between this `CpNode` and the next
|
|
5
|
+
* one.
|
|
6
|
+
*
|
|
7
|
+
* * returns `undefined` if the next `CpNode` is on a different loop,
|
|
8
|
+
* as this is a hole-closer and there are no boundary beziers between them.
|
|
9
|
+
*
|
|
10
|
+
* @param cpNode
|
|
11
|
+
*/
|
|
12
|
+
declare function getBoundaryBezierPartsToNext(cpNode: CpNode): BezierPiece[] | undefined;
|
|
4
13
|
export { getBoundaryBezierPartsToNext };
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the boundary beziers pieces between this `CpNode` and the next
|
|
3
|
+
* one.
|
|
4
|
+
*
|
|
5
|
+
* * returns `undefined` if the next `CpNode` is on a different loop,
|
|
6
|
+
* as this is a hole-closer and there are no boundary beziers between them.
|
|
7
|
+
*
|
|
8
|
+
* @param cpNode
|
|
9
|
+
*/
|
|
1
10
|
function getBoundaryBezierPartsToNext(cpNode) {
|
|
2
11
|
const cpThis = cpNode;
|
|
3
12
|
const cpNext = cpNode.next;
|
|
@@ -10,28 +19,34 @@ function getBoundaryBezierPartsToNext(cpNode) {
|
|
|
10
19
|
// CpNode.
|
|
11
20
|
return undefined;
|
|
12
21
|
}
|
|
13
|
-
const
|
|
22
|
+
const bezierPieces = [];
|
|
14
23
|
if (curveNext === curveThis) {
|
|
15
|
-
|
|
24
|
+
bezierPieces.push({
|
|
25
|
+
ps: posThis.curve.ps,
|
|
26
|
+
ts: [posThis.t, posNext.t]
|
|
27
|
+
});
|
|
16
28
|
}
|
|
17
29
|
else {
|
|
18
|
-
|
|
19
|
-
|
|
30
|
+
bezierPieces.push({
|
|
31
|
+
ps: posThis.curve.ps,
|
|
32
|
+
ts: [posThis.t, 1]
|
|
33
|
+
});
|
|
34
|
+
addSkippedBeziers(bezierPieces, posThis.curve, posNext.curve, posNext.t);
|
|
20
35
|
}
|
|
21
|
-
return
|
|
36
|
+
return bezierPieces;
|
|
22
37
|
}
|
|
23
38
|
/**
|
|
24
39
|
* @internal
|
|
25
40
|
* Adds pieces of skipped beziers.
|
|
26
41
|
*/
|
|
27
|
-
function addSkippedBeziers(
|
|
42
|
+
function addSkippedBeziers(bezierPieces, curveStart, curveEnd, t1) {
|
|
28
43
|
let curveThis = curveStart;
|
|
29
44
|
do {
|
|
30
45
|
curveThis = curveThis.next;
|
|
31
46
|
const bezierPart = curveThis === curveEnd
|
|
32
47
|
? { ps: curveThis.ps, ts: [0, t1] }
|
|
33
48
|
: { ps: curveThis.ps, ts: [0, 1] };
|
|
34
|
-
|
|
49
|
+
bezierPieces.push(bezierPart);
|
|
35
50
|
} while (curveThis !== curveEnd);
|
|
36
51
|
}
|
|
37
52
|
export { getBoundaryBezierPartsToNext };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-boundary-bezier-parts-to-next.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-boundary-bezier-parts-to-next.ts"],"names":[],"mappings":"AAKA,SAAS,4BAA4B,
|
|
1
|
+
{"version":3,"file":"get-boundary-bezier-parts-to-next.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-boundary-bezier-parts-to-next.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,SAAS,4BAA4B,CAC7B,MAAc;IAElB,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;IAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC;IAEvC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IAEhC,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACpC,wEAAwE;QACxE,UAAU;QACV,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,YAAY,GAAkB,EAAE,CAAC;IAEvC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,YAAY,CAAC,IAAI,CACb;YACI,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACpB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;SAC7B,CACJ,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,YAAY,CAAC,IAAI,CACb;YACI,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACpB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;SACrB,CACJ,CAAC;QAEF,iBAAiB,CACb,YAAY,EACZ,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,CAAC,CACZ,CAAC;IACN,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC;AAGD;;;GAGG;AACH,SAAS,iBAAiB,CAClB,YAA2B,EAC3B,UAAiB,EACjB,QAAe,EACf,EAAU;IAEd,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,GAAG,CAAC;QACA,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;QAC3B,MAAM,UAAU,GAAG,SAAS,KAAK,QAAQ;YACrC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;QAEtC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,QAAQ,SAAS,KAAK,QAAQ,EAAE;AACrC,CAAC;AAGD,OAAO,EAAE,4BAA4B,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-boundary-beziers-between.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-boundary-beziers-between.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-boundary-beziers-between.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-boundary-beziers-between.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;;;;;;;;;GAUG;AACH,SAAS,yBAAyB,CAC1B,OAAe,EACf,OAAe,EACf,cAAc,GAAG,IAAI;IAKzB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAC,OAAO,EAAC,cAAc,CAAC,CAAC;IAEjE,OAAO;QACH,GAAG,EAAE,wBAAwB,CAAC,UAAU,CAAC,OAAO,CAAC;QACjD,aAAa,EAAE,UAAU,CAAC,aAAa;KAC1C,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,yBAAyB,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-boundary-beziers-to-next.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-boundary-beziers-to-next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAKrC,SAAS,wBAAwB,
|
|
1
|
+
{"version":3,"file":"get-boundary-beziers-to-next.js","sourceRoot":"","sources":["../../../src/cp-node/fs/get-boundary-beziers-to-next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAKrC,SAAS,wBAAwB,CACzB,MAAc;IAElB,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;IAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC;IAEvC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IAEhC,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACpC,wEAAwE;QACxE,UAAU;QACV,qBAAqB;QACrB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC;IAEnB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CACR,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CACjD,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,CACR,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CACzC,CAAC;QAEF,iBAAiB,CACT,OAAO,EACP,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,CAAC,CAChB,CAAC;IACN,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAGD;;;GAGG;AACH,SAAS,iBAAiB,CAClB,OAAyB,EACzB,UAAkB,EAClB,QAAkB,EAClB,EAAmB;IAEvB,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,GAAG,CAAC;QACA,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;QAC3B,MAAM,IAAI,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI;QACR,oCAAoC;QACpC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAChC,CAAC;IACN,CAAC,QAAQ,SAAS,KAAK,QAAQ,EAAE;AACrC,CAAC;AAGD,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { LlRbTree } from "flo-ll-rb-tree";
|
|
2
2
|
import { ContactPoint } from "../../contact-point/contact-point.js";
|
|
3
3
|
import { CpNode } from "../cp-node.js";
|
|
4
|
-
declare function insertCpNode(insertIfOrderWrong: boolean, isHoleClosing: boolean, isIntersection: boolean, cpTree: LlRbTree<CpNode>, cp: ContactPoint, _prev: CpNode | undefined
|
|
4
|
+
declare function insertCpNode(insertIfOrderWrong: boolean, isHoleClosing: boolean, isIntersection: boolean, cpTree: LlRbTree<CpNode>, cp: ContactPoint, _prev: CpNode | undefined, lastInsertId: {
|
|
5
|
+
id: number;
|
|
6
|
+
}): CpNode | undefined;
|
|
5
7
|
export { insertCpNode };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isOrderCorrect } from "./is-order-correct.js";
|
|
2
|
-
function insertCpNode(insertIfOrderWrong, isHoleClosing, isIntersection, cpTree, cp, _prev) {
|
|
2
|
+
function insertCpNode(insertIfOrderWrong, isHoleClosing, isIntersection, cpTree, cp, _prev, lastInsertId) {
|
|
3
3
|
if (_prev !== undefined &&
|
|
4
4
|
!isOrderCorrect(cpTree, cp, _prev.next)) {
|
|
5
5
|
// console.log(compareCps(cp,_prev!.next.cp))
|
|
@@ -7,7 +7,17 @@ function insertCpNode(insertIfOrderWrong, isHoleClosing, isIntersection, cpTree,
|
|
|
7
7
|
return undefined;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
-
const cpNode = {
|
|
10
|
+
const cpNode = {
|
|
11
|
+
cp,
|
|
12
|
+
isHoleClosing,
|
|
13
|
+
isIntersection,
|
|
14
|
+
id: lastInsertId.id,
|
|
15
|
+
next: undefined,
|
|
16
|
+
prev: undefined,
|
|
17
|
+
nextOnCircle: undefined,
|
|
18
|
+
prevOnCircle: undefined
|
|
19
|
+
};
|
|
20
|
+
lastInsertId.id++;
|
|
11
21
|
const prev = _prev === undefined ? cpNode : _prev;
|
|
12
22
|
const next = _prev === undefined ? cpNode : prev.next;
|
|
13
23
|
next.prev = cpNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insert-cp-node.js","sourceRoot":"","sources":["../../../src/cp-node/fs/insert-cp-node.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,SAAS,YAAY,CACb,kBAA2B,EAC3B,aAAsB,EACtB,cAAuB,EACvB,MAAwB,EACxB,EAAgB,EAChB,KAAyB;
|
|
1
|
+
{"version":3,"file":"insert-cp-node.js","sourceRoot":"","sources":["../../../src/cp-node/fs/insert-cp-node.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,SAAS,YAAY,CACb,kBAA2B,EAC3B,aAAsB,EACtB,cAAuB,EACvB,MAAwB,EACxB,EAAgB,EAChB,KAAyB,EACzB,YAA4B;IAEhC,IAAI,KAAK,KAAK,SAAS;QACnB,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAE1C,6CAA6C;QAC7C,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAW;QACnB,EAAE;QACF,aAAa;QACb,cAAc;QACd,EAAE,EAAE,YAAY,CAAC,EAAE;QACnB,IAAI,EAAE,SAAU;QAChB,IAAI,EAAE,SAAU;QAChB,YAAY,EAAE,SAAU;QACxB,YAAY,EAAE,SAAU;KAC3B,CAAC;IACF,YAAY,CAAC,EAAE,EAAE,CAAC;IAElB,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAClD,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAEtD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;IACnB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;IACnB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAEnB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEtB,OAAO,MAAM,CAAC;AAClB,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
import { CpNode } from "../cp-node.js";
|
|
2
|
+
/**
|
|
3
|
+
* Returns `true` if this `CpNode` is fully terminating, meaning that all
|
|
4
|
+
* `CpNode`s (except `CpNode.prevOnCircle`) on the same circle are terminating,
|
|
5
|
+
* `false` otherwise.
|
|
6
|
+
*
|
|
7
|
+
* @param cpNode
|
|
8
|
+
*/
|
|
2
9
|
declare function isFullyTerminating(cpNode: CpNode): boolean;
|
|
3
10
|
export { isFullyTerminating };
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { getAllOnCircle } from "./get-all-on-circle.js";
|
|
2
2
|
import { isTerminating } from "./is-terminating.js";
|
|
3
|
+
/**
|
|
4
|
+
* Returns `true` if this `CpNode` is fully terminating, meaning that all
|
|
5
|
+
* `CpNode`s (except `CpNode.prevOnCircle`) on the same circle are terminating,
|
|
6
|
+
* `false` otherwise.
|
|
7
|
+
*
|
|
8
|
+
* @param cpNode
|
|
9
|
+
*/
|
|
3
10
|
function isFullyTerminating(cpNode) {
|
|
4
11
|
const otherOnCircle = getAllOnCircle(cpNode.prevOnCircle, true);
|
|
5
12
|
return otherOnCircle.every(isTerminating);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-fully-terminating.js","sourceRoot":"","sources":["../../../src/cp-node/fs/is-fully-terminating.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,SAAS,kBAAkB,CAAC,MAAc;IACzC,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAEhE,OAAO,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC3C,CAAC;AAGD,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"is-fully-terminating.js","sourceRoot":"","sources":["../../../src/cp-node/fs/is-fully-terminating.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAc;IACzC,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAEhE,OAAO,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC3C,CAAC;AAGD,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
declare function removeCpNode(cpNode: CpNode, cpTrees: Map<Loop, LlRbTree<CpNode>>): void;
|
|
1
|
+
import type { CpNode } from "../cp-node.js";
|
|
2
|
+
import type { MatMeta } from '../../mat/mat-meta.js';
|
|
3
|
+
declare function removeCpNode(cpNode: CpNode, meta: MatMeta): void;
|
|
5
4
|
export { removeCpNode };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-cp-node.js","sourceRoot":"","sources":["../../../src/cp-node/fs/remove-cp-node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remove-cp-node.js","sourceRoot":"","sources":["../../../src/cp-node/fs/remove-cp-node.ts"],"names":[],"mappings":"AAMA,SAAS,YAAY,CACb,MAAc,EACd,IAAa;IACb,gDAAgD;IAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEzB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAEjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;IAC/D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/node/curve/curve.d.ts
CHANGED
|
@@ -4,23 +4,30 @@ import { Loop } from 'flo-boolean';
|
|
|
4
4
|
*/
|
|
5
5
|
interface Curve {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* @param loop The closed loop of bezier curves representing the shape
|
|
7
|
+
* The closed loop of bezier curves representing the shape
|
|
9
8
|
* boundary this curve belongs to.
|
|
10
|
-
* @param ps The bezier control points.
|
|
11
|
-
* @param prev The previous curve (when going in a negative direction around
|
|
12
|
-
* the shape boundary, i.e. clockwise for the outer shape and anti-clockwise
|
|
13
|
-
* for the holes (if any)).
|
|
14
|
-
* @param next The next curve (when going in a positive direction around
|
|
15
|
-
* the shape boundary, i.e. anti-clockwise for the outer shape and clockwise
|
|
16
|
-
* for the holes (if any)).
|
|
17
|
-
* @param idx The curve's ordered index in the loop. This imposes a cycling
|
|
18
|
-
* ordering of the curves in the loop.
|
|
19
9
|
*/
|
|
20
10
|
loop: Loop;
|
|
11
|
+
/**
|
|
12
|
+
* The bezier control points.
|
|
13
|
+
*/
|
|
21
14
|
ps: number[][];
|
|
15
|
+
/**
|
|
16
|
+
* The previous curve (when going in a negative direction around
|
|
17
|
+
* the shape boundary, i.e. clockwise for the outer shape and anti-clockwise
|
|
18
|
+
* for the holes (if any))
|
|
19
|
+
*/
|
|
22
20
|
prev: Curve;
|
|
21
|
+
/**
|
|
22
|
+
* The next curve (when going in a positive direction around
|
|
23
|
+
* the shape boundary, i.e. anti-clockwise for the outer shape and clockwise
|
|
24
|
+
* for the holes (if any))
|
|
25
|
+
*/
|
|
23
26
|
next: Curve;
|
|
27
|
+
/**
|
|
28
|
+
* The curve's ordered index in the loop. This imposes a cycling
|
|
29
|
+
* ordering of the curves in the loop
|
|
30
|
+
*/
|
|
24
31
|
idx: number;
|
|
25
32
|
}
|
|
26
33
|
export { Curve };
|
|
@@ -33,7 +33,7 @@ function add1Prong(meta, radius, center, pos) {
|
|
|
33
33
|
if (getCloseByCpIfExist(meta, pos, circle, order, 0, 1)) {
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
const { anyFailed, cpNodes } = addToCpTree(false, false, circle, [-0.5, +0.5], meta
|
|
36
|
+
const { anyFailed, cpNodes } = addToCpTree(false, false, circle, [-0.5, +0.5], meta, [pos, pos]);
|
|
37
37
|
// if (typeof _debug_ !== 'undefined') {
|
|
38
38
|
// _debug_.generated.elems.oneProng.push(cpNodes);
|
|
39
39
|
// }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-1-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/add-1-prong.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGnE;;;;;GAKG;AACH,SAAS,SAAS,CAChB,IAAa,EACb,MAAc,EACR,MAAgB,EAChB,GAAiB;IAErB,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACrD,sCAAsC;QAEtC,kBAAkB;QAClB,gEAAgE;QAChE,wEAAwE;QACxE,mEAAmE;QACnE,mEAAmE;QACnE,qEAAqE;QAC/D,kEAAkE;QAClE,oEAAoE;QAE1E,kCAAkC;QAElC,yCAAyC;QAC/B,0DAA0D;QAC9D,IAAI;QAEV,OAAO;IACR,CAAC;IAEE,MAAM,MAAM,GAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAE7C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,uEAAuE;IACvE,mCAAmC;IACnC,IAAI,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO;IACR,CAAC;IAEE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"add-1-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/add-1-prong.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGnE;;;;;GAKG;AACH,SAAS,SAAS,CAChB,IAAa,EACb,MAAc,EACR,MAAgB,EAChB,GAAiB;IAErB,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACrD,sCAAsC;QAEtC,kBAAkB;QAClB,gEAAgE;QAChE,wEAAwE;QACxE,mEAAmE;QACnE,mEAAmE;QACnE,qEAAqE;QAC/D,kEAAkE;QAClE,oEAAoE;QAE1E,kCAAkC;QAElC,yCAAyC;QAC/B,0DAA0D;QAC9D,IAAI;QAEV,OAAO;IACR,CAAC;IAEE,MAAM,MAAM,GAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAE7C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,uEAAuE;IACvE,mCAAmC;IACnC,IAAI,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO;IACR,CAAC;IAEE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAEpG,yCAAyC;IACtC,sDAAsD;IACtD,IAAI;AACR,CAAC;AAGD,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -17,7 +17,6 @@ import { removeCpNode } from '../cp-node/fs/remove-cp-node.js';
|
|
|
17
17
|
* tolerances.
|
|
18
18
|
*/
|
|
19
19
|
function add2Prong(meta, circle, poss, isHoleClosing) {
|
|
20
|
-
const { cpTrees } = meta;
|
|
21
20
|
poss[0] = poss[0].t === 0
|
|
22
21
|
? createPos(poss[0].curve.prev, 1, true)
|
|
23
22
|
: poss[0];
|
|
@@ -29,11 +28,11 @@ function add2Prong(meta, circle, poss, isHoleClosing) {
|
|
|
29
28
|
return undefined;
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
|
-
const { anyFailed, cpNodes } = addToCpTree(isHoleClosing, isHoleClosing, circle, orders,
|
|
31
|
+
const { anyFailed, cpNodes } = addToCpTree(isHoleClosing, isHoleClosing, circle, orders, meta, poss);
|
|
33
32
|
if (anyFailed) {
|
|
34
33
|
cpNodes.forEach(cpNode => {
|
|
35
34
|
if (cpNode !== undefined) {
|
|
36
|
-
removeCpNode(cpNode,
|
|
35
|
+
removeCpNode(cpNode, meta);
|
|
37
36
|
}
|
|
38
37
|
});
|
|
39
38
|
return undefined;
|
|
@@ -41,17 +40,20 @@ function add2Prong(meta, circle, poss, isHoleClosing) {
|
|
|
41
40
|
// Get points ordered according to their angle with the x-axis
|
|
42
41
|
// joinSpokes(circle, cpNodes);
|
|
43
42
|
if (isHoleClosing) {
|
|
44
|
-
closeHole(
|
|
43
|
+
closeHole(meta, cpNodes);
|
|
45
44
|
}
|
|
46
45
|
return cpNodes[0]; // return the source `CpNode`
|
|
47
46
|
}
|
|
48
|
-
function closeHole(
|
|
47
|
+
function closeHole(meta,
|
|
48
|
+
// cpTrees: Map<Loop, LlRbTree<CpNode>>,
|
|
49
|
+
cpNodes) {
|
|
50
|
+
const { cpTrees } = meta;
|
|
49
51
|
const [cpNodeA, cpNodeB] = cpNodes;
|
|
50
52
|
// Duplicate ContactPoints
|
|
51
53
|
// const antipodeCpNode = cpNodeB[0];
|
|
52
54
|
const cpAntipode = cpNodeB.cp;
|
|
53
|
-
const cpNodeB2 = insertCpNode(true, true, false, cpTrees.get(cpAntipode.pointOnShape.curve.loop), { ...cpAntipode, order2: +1 }, cpNodeB);
|
|
54
|
-
const cpNodeB1 = insertCpNode(true, true, false, cpTrees.get(cpNodeA.cp.pointOnShape.curve.loop), { ...cpNodeA.cp, order2: -1 }, cpNodeA.prev);
|
|
55
|
+
const cpNodeB2 = insertCpNode(true, true, false, cpTrees.get(cpAntipode.pointOnShape.curve.loop), { ...cpAntipode, order2: +1 }, cpNodeB, meta.lastInsertId);
|
|
56
|
+
const cpNodeB1 = insertCpNode(true, true, false, cpTrees.get(cpNodeA.cp.pointOnShape.curve.loop), { ...cpNodeA.cp, order2: -1 }, cpNodeA.prev, meta.lastInsertId);
|
|
55
57
|
// Connect graph
|
|
56
58
|
cpNodeB1.prevOnCircle = cpNodeB2;
|
|
57
59
|
cpNodeB1.nextOnCircle = cpNodeB2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/add-2-prong.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D;;;;;;;;;;;GAWG;AACH,SAAS,SAAS,
|
|
1
|
+
{"version":3,"file":"add-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/add-2-prong.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Calculates and returns an appropriate seperation tolerance between `CpNode`s.
|
|
3
|
+
*
|
|
4
|
+
* @param R radius of the circle implied by the curvature at the boundary
|
|
5
|
+
* @param r radius of the MAT circle
|
|
6
|
+
* @param θ angle between point...
|
|
7
|
+
*/
|
|
2
8
|
declare function calcSeperationTolerance(R: number, r: number, δ: number): number;
|
|
9
|
+
export { calcSeperationTolerance };
|
|
@@ -14,73 +14,87 @@ const { asin, acos, cos, sqrt, PI: π } = Math;
|
|
|
14
14
|
* @param r radius of the MAT circle
|
|
15
15
|
* @param θ angle between point...
|
|
16
16
|
*/
|
|
17
|
-
function calcSeperationTolerance2(R, r, δ) {
|
|
18
|
-
const a = r + δ;
|
|
19
|
-
if (a >= R) {
|
|
20
|
-
return Number.POSITIVE_INFINITY;
|
|
21
|
-
}
|
|
22
|
-
const b = R - r; //?
|
|
23
|
-
const c = R; //?
|
|
24
|
-
const N = c * c - a * a - b * b; //?
|
|
25
|
-
const N_ = qdq(qdq(tp(c, c), tp(a, a)), tp(b, b));
|
|
26
|
-
const D = 2 * a * b; //?
|
|
27
|
-
const D_ = tp(-2 * a, b);
|
|
28
|
-
const Q = ddDivDd(N_, D_)[1]; //?
|
|
29
|
-
const cosC = -N / D; //?
|
|
30
|
-
const C = acos(cosC);
|
|
31
|
-
const CC = acos(Q);
|
|
32
|
-
const θ = π - CC; //?
|
|
33
|
-
return θ;
|
|
34
|
-
// return r*θ; // approximate arc with line
|
|
35
|
-
}
|
|
36
|
-
export { calcSeperationTolerance };
|
|
37
|
-
function degToRad(degrees) {
|
|
38
|
-
return degrees / 360 * 2 * Math.PI;
|
|
39
|
-
}
|
|
40
|
-
function radToDeg(rad) {
|
|
41
|
-
return rad * 360 / 2 / Math.PI;
|
|
42
|
-
}
|
|
43
|
-
const R = 699;
|
|
44
|
-
const r = 698;
|
|
45
|
-
const δ = 1000 * 2 ** -46; //?
|
|
46
|
-
calcSeperationTolerance(R, r, δ); //?
|
|
47
|
-
calcSeperationTolerance2(R, r, δ); //?
|
|
48
|
-
calcSeperationTolerance3(R, r, δ); //?
|
|
49
17
|
function calcSeperationTolerance(R, r, δ) {
|
|
50
18
|
const a = r + δ;
|
|
51
19
|
if (a >= R) {
|
|
52
20
|
return Number.POSITIVE_INFINITY;
|
|
53
21
|
}
|
|
54
|
-
const R_r_ = twoDiff(R, r);
|
|
55
|
-
const A_ = qmd(r, R_r_);
|
|
56
|
-
const N_ = qdq(qdq(A_, tp(r, δ)), tp(δ, δ / 2));
|
|
57
|
-
const D_ = qaq(A_, qmd(δ, R_r_));
|
|
58
|
-
const R_r = R - r;
|
|
59
|
-
const A = r * R_r;
|
|
60
|
-
const N = A - r * δ - (δ * δ) / 2;
|
|
61
|
-
const D = A + R_r * δ;
|
|
62
|
-
const cosC = N / D;
|
|
63
|
-
const Q = ddDivDd(N_, D_)[1];
|
|
64
|
-
// const Q = N_[1]/D_[1]
|
|
22
|
+
const R_r_ = twoDiff(R, r);
|
|
23
|
+
const A_ = qmd(r, R_r_);
|
|
24
|
+
const N_ = qdq(qdq(A_, tp(r, δ)), tp(δ, δ / 2));
|
|
25
|
+
const D_ = qaq(A_, qmd(δ, R_r_));
|
|
26
|
+
const R_r = R - r;
|
|
27
|
+
const A = r * R_r;
|
|
28
|
+
const N = A - r * δ - (δ * δ) / 2;
|
|
29
|
+
const D = A + R_r * δ;
|
|
30
|
+
const cosC = N / D;
|
|
31
|
+
const Q = ddDivDd(N_, D_)[1];
|
|
32
|
+
// const Q = N_[1]/D_[1];
|
|
65
33
|
const C = acos(cosC);
|
|
66
34
|
const CC = acos(Q);
|
|
67
|
-
const θ = CC;
|
|
35
|
+
const θ = CC;
|
|
68
36
|
// return r*θ;
|
|
69
37
|
return r * θ;
|
|
70
38
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
39
|
+
export { calcSeperationTolerance };
|
|
40
|
+
// Quokka tests
|
|
41
|
+
// /**
|
|
42
|
+
// * Calculates and returns an appropriate seperation tolerance between `CpNode`s.
|
|
43
|
+
// *
|
|
44
|
+
// * @param R radius of the circle implied by the curvature at the boundary
|
|
45
|
+
// * @param r radius of the MAT circle
|
|
46
|
+
// * @param θ angle between point...
|
|
47
|
+
// */
|
|
48
|
+
// function calcSeperationTolerance2(
|
|
49
|
+
// R: number,
|
|
50
|
+
// r: number,
|
|
51
|
+
// δ: number) {
|
|
52
|
+
// const a = r + δ;
|
|
53
|
+
// if (a >= R) {
|
|
54
|
+
// return Number.POSITIVE_INFINITY;
|
|
55
|
+
// }
|
|
56
|
+
// const b = R - r;
|
|
57
|
+
// const c = R;
|
|
58
|
+
// const N = c*c - a*a - b*b;
|
|
59
|
+
// const N_ = qdq(qdq(tp(c,c), tp(a,a)), tp(b,b));
|
|
60
|
+
// const D = 2*a*b;
|
|
61
|
+
// const D_ = tp(-2*a,b);
|
|
62
|
+
// const Q = ddDivDd(N_,D_)[1];
|
|
63
|
+
// const cosC = -N/D;
|
|
64
|
+
// const C = acos(cosC);
|
|
65
|
+
// const CC = acos(Q);
|
|
66
|
+
// const θ = π - CC;
|
|
67
|
+
// return θ;
|
|
68
|
+
// // return r*θ; // approximate arc with line
|
|
69
|
+
// }
|
|
70
|
+
// function degToRad(degrees: number) {
|
|
71
|
+
// return degrees/360*2*Math.PI;
|
|
72
|
+
// }
|
|
73
|
+
// function radToDeg(rad: number) {
|
|
74
|
+
// return rad*360/2/Math.PI;
|
|
75
|
+
// }
|
|
76
|
+
// const R = 699;
|
|
77
|
+
// const r = 698;
|
|
78
|
+
// const δ = 1000*2**-46;
|
|
79
|
+
// calcSeperationTolerance(R,r,δ);
|
|
80
|
+
// calcSeperationTolerance2(R,r,δ);
|
|
81
|
+
// calcSeperationTolerance3(R,r,δ);
|
|
82
|
+
// // * see https://en.wikipedia.org/wiki/Law_of_cosines, Version suited to small angles
|
|
83
|
+
// function calcSeperationTolerance3(
|
|
84
|
+
// R: number,
|
|
85
|
+
// r: number,
|
|
86
|
+
// δ: number) {
|
|
87
|
+
// const a = r + δ;
|
|
88
|
+
// const c = R - r;
|
|
89
|
+
// const b = R;
|
|
90
|
+
// // c² = (a - b)² + 4ab*sin²(θ/2) OR
|
|
91
|
+
// // (c² - (a - b)²)/4ab = sin²(θ/2)
|
|
92
|
+
// const cc = c*c;
|
|
93
|
+
// const abc = a*a + b*b - 2*a*b;
|
|
94
|
+
// const A = cc - abc;
|
|
95
|
+
// const B = sqrt(A/(4*a*b));
|
|
96
|
+
// const θ = 2*asin(B);
|
|
97
|
+
// return θ;
|
|
98
|
+
// // return r*θ; // approximate arc with line
|
|
99
|
+
// }
|
|
86
100
|
//# sourceMappingURL=calc-seperation-tolerance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calc-seperation-tolerance.js","sourceRoot":"","sources":["../../src/find-2-prong/calc-seperation-tolerance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEjH,MAAM,EAAE,GAAG,MAAM,CAAC;AAClB,MAAM,EAAE,GAAG,UAAU,CAAC;AACtB,MAAM,EAAE,GAAG,OAAO,CAAC;AACnB,MAAM,GAAG,GAAG,OAAO,CAAC;AACpB,MAAM,GAAG,GAAG,QAAQ,CAAC;AACrB,MAAM,GAAG,GAAG,QAAQ,CAAC;AACrB,MAAM,GAAG,GAAG,aAAa,CAAC;AAE1B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;AAG9C;;;;;;GAMG;AACH,SAAS,
|
|
1
|
+
{"version":3,"file":"calc-seperation-tolerance.js","sourceRoot":"","sources":["../../src/find-2-prong/calc-seperation-tolerance.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ const { ceil, log2, max, sqrt, abs, sin, cos } = Math;
|
|
|
34
34
|
* @param loopIdx The loop array index
|
|
35
35
|
*/
|
|
36
36
|
function find2Prong(meta, isHoleClosing, for1Prong, angle, y) {
|
|
37
|
-
const { loops, maxCoordinate, squaredDiagonalLength
|
|
37
|
+
const { loops, maxCoordinate, squaredDiagonalLength } = meta;
|
|
38
38
|
const loop = y.curve.loop;
|
|
39
39
|
const MAX_ITERATIONS = 25;
|
|
40
40
|
const minSquaredSeperationTolerance = ((2 ** -21) * maxCoordinate) ** 2;
|
|
@@ -47,7 +47,7 @@ function find2Prong(meta, isHoleClosing, for1Prong, angle, y) {
|
|
|
47
47
|
const p = y.p;
|
|
48
48
|
// The boundary piece that should contain the other point of
|
|
49
49
|
// the 2-prong circle. (Defined by start and end points).
|
|
50
|
-
let bezierPieces = getInitialBezierPieces(angle, isHoleClosing, loop, loops,
|
|
50
|
+
let bezierPieces = getInitialBezierPieces(angle, isHoleClosing, loop, loops, meta, y, { center: xO, radius: rO });
|
|
51
51
|
// console.log(bezierPieces.length);
|
|
52
52
|
/** The center of the two-prong (successively refined) */
|
|
53
53
|
let x = xO;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AACnH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAS,UAAU,CACjB,IAAa,EACb,aAAsB,EACtB,SAAkB,EAClB,KAAa,EACP,CAAe;IAEtB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AACnH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAS,UAAU,CACjB,IAAa,EACb,aAAsB,EACtB,SAAkB,EAClB,KAAa,EACP,CAAe;IAEtB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IAE7D,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAE1B,MAAM,cAAc,GAAG,EAAE,CAAC;IAC1B,MAAM,6BAA6B,GAAG,CAAC,CAAC,CAAC,IAAE,CAAC,EAAE,CAAC,GAAC,aAAa,CAAC,IAAE,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,CAAC,CAAC,IAAE,CAAC,EAAE,CAAC,GAAC,aAAa,CAAC;IAC9C,iDAAiD;IACjD,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,CAAC,GAAC,yBAAyB,CAAC;IACjD,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAE,CAAC,EAAE,CAAC,GAAC,aAAa,CAAC;IAEjD,MAAM,CAAC,EAAE,EAAC,EAAE,CAAC,GAAG,IAAI,CACnB,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,YAAY,EAAE,CAAC,CAChE,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEd,6DAA6D;IAC7D,yDAAyD;IACzD,IAAI,YAAY,GAAG,sBAAsB,CACxC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CACtE,CAAC;IACF,oCAAoC;IAEpC,yDAAyD;IACzD,IAAI,CAAC,GAAG,EAAE,CAAC;IAEX,sCAAsC;IACtC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QACb,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,2DAA2D;IAC3D,IAAI,EAAE,GAAmB,SAAU,CAAC;IACpC,IAAI,CAAC,GAAiB,SAAU,CAAC;IAEjC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,cAAc,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,YAAY,GAAG,iBAAiB,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;QACrE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,sBAAsB;QAC5E,oBAAoB;QACpB,MAAM,GAAG,GAAG,+BAA+B,CAC1C,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAClC,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAC,YAAY,EAC5C,KAAK,CACL,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAEpD,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACpC,IAAI,MAAM,GAAiB,SAAU,CAAC;QACtC,EAAE,GAAG,EAAE,CAAC;QACR,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAClC,MAAM,GAAG,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;gBAChB,IAAI,GAAG,GAAG,CAAC;gBACX,MAAM,GAAG,CAAC,CAAC;YACZ,CAAC;YACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACf,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC;QACF,CAAC;QACD,aAAa;QACb,MAAM,EAAE,GAAG,IAAI,CAAC;QAChB,CAAC,GAAG,MAAM,CAAC;QAEX,IAAI,CAAC,KAAK,SAAS,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACjC,gCAAgC;YAChC,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,GAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5C,kBAAkB;QAClB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACb,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3C,yBAAyB;gBACzB,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3B,OAAO,SAAS,CAAC;YAClB,CAAC;QACF,CAAC;QAED,wGAAwG;QAGxG,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,MAAM,0BAA0B,GAAG,GAAG,CAAC,uBAAuB,CAC7D,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAE,CAAC,GAAC,cAAc,CACjC,EAAE,6BAA6B,CAAC,CAAC;YAClC,IAAI,EAAE,IAAI,0BAA0B,EAAE,CAAC;gBACtC,qGAAqG;gBACrG,OAAO,SAAS,CAAC;YAClB,CAAC;QACF,CAAC;QAED,2DAA2D;QAC3D,qDAAqD;QACrD,MAAM,KAAK,GAAG,4BAA4B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,qCAAqC;QAErC,CAAC,GAAG,KAAK,CAAC;QAEV,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;YAC5B,MAAM;QACP,CAAC;QAED,CAAC,EAAE,CAAC;QAEJ,IAAI,CAAC,KAAK,cAAc,EAAE,CAAC;YAC1B,4BAA4B;YAC5B,gGAAgG;YAChG,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,sHAAsH;IAEtH,yBAAyB;IACzB,uCAAuC;IACvC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC;AAGD,SAAS,IAAI,CACX,KAAa,EACb,aAAsB,EACtB,yBAAiC,EACjC,YAAoB,EACpB,CAAe;IAEhB,IAAI,EAAY,CAAC,CAAE,mCAAmC;IACtD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,IAAI,EAAU,CAAC;IACf,IAAI,aAAa,EAAE,CAAC;QACnB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC;QAC9C,EAAE,GAAG,yBAAyB,CAAC;IAChC,CAAC;SAAM,CAAC;QACP,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACjB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACP,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IAED,OAAO,CAAC,EAAE,EAAC,EAAE,CAAsB,CAAC;AACrC,CAAC;AAGD,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { LlRbTree } from 'flo-ll-rb-tree';
|
|
2
1
|
import { Loop } from 'flo-boolean';
|
|
3
2
|
import { CurvePiece } from '../mat/curve-piece.js';
|
|
4
|
-
import { CpNode } from '../cp-node/cp-node.js';
|
|
5
3
|
import { PointOnShape } from '../point-on-shape/point-on-shape.js';
|
|
6
4
|
import { Circle } from '../geometry/circle.js';
|
|
5
|
+
import { MatMeta } from '../index.js';
|
|
7
6
|
/** @internal */
|
|
8
|
-
declare function getInitialBezierPieces(angle: number, isHoleClosing: boolean, loop: Loop, loops: Loop[],
|
|
7
|
+
declare function getInitialBezierPieces(angle: number, isHoleClosing: boolean, loop: Loop, loops: Loop[], meta: MatMeta, y: PointOnShape, circle: Circle): CurvePiece[];
|
|
9
8
|
export { getInitialBezierPieces };
|
|
@@ -4,7 +4,10 @@ import { calcPosOrder } from '../point-on-shape/calc-pos-order.js';
|
|
|
4
4
|
import { isPosCorner } from '../point-on-shape/is-pos-corner.js';
|
|
5
5
|
import { getPosCorner } from '../point-on-shape/get-pos-corner.js';
|
|
6
6
|
/** @internal */
|
|
7
|
-
function getInitialBezierPieces(angle, isHoleClosing, loop, loops,
|
|
7
|
+
function getInitialBezierPieces(angle, isHoleClosing, loop, loops,
|
|
8
|
+
// cpTrees: Map<Loop,LlRbTree<CpNode>>,
|
|
9
|
+
meta, y, circle) {
|
|
10
|
+
const { cpTrees } = meta;
|
|
8
11
|
if (isHoleClosing) {
|
|
9
12
|
return loops
|
|
10
13
|
.filter(_loop => _loop !== loop)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-initial-bezier-pieces.js","sourceRoot":"","sources":["../../src/find-2-prong/get-initial-bezier-pieces.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAI/E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-initial-bezier-pieces.js","sourceRoot":"","sources":["../../src/find-2-prong/get-initial-bezier-pieces.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAI/E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAInE,gBAAgB;AAChB,SAAS,sBAAsB,CACvB,KAAa,EACb,aAAsB,EACtB,IAAU,EACV,KAAa;AACb,uCAAuC;AACvC,IAAa,EACb,CAAe,EACf,MAAc;IAElB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEzB,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,KAAK;aACX,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;aAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM;aACvB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;QAClD,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YACtB,CAAC,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACX,CAAC,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC;IAER,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM;QACP,8DAA8D;QAC9D,kEAAkE;QAClE,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/B,CAAC;QACC,OAAO,IAAI,CAAC,MAAM;aACjB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,uBAAuB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAGD,OAAO,EAAE,sBAAsB,EAAE,CAAA"}
|