flo-mat 3.0.0 → 3.0.1
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 +7 -88
- package/browser/index.min.js +1 -1
- package/node/find-2-prong/find-2-prong.js +1 -5
- package/node/find-2-prong/find-2-prong.js.map +1 -1
- package/node/sat/cull.js +0 -70
- package/node/sat/cull.js.map +1 -1
- package/node/sat/get-leaves.js +2 -2
- package/node/sat/get-leaves.js.map +1 -1
- package/node/sat/to-scale-axis.d.ts +1 -2
- package/node/sat/to-scale-axis.js +4 -11
- package/node/sat/to-scale-axis.js.map +1 -1
- package/package.json +3 -3
- package/src/find-2-prong/find-2-prong.ts +1 -6
- package/src/sat/cull.ts +0 -71
- package/src/sat/get-leaves.ts +2 -2
- package/src/sat/to-scale-axis.ts +4 -16
- package/src/sat/t-tree.ts +0 -8
- package/src/sat/traverse-spacial-tree.ts +0 -34
|
@@ -122,15 +122,11 @@ function find2Prong(angle, loops, extreme, squaredDiagonalLength, cpTrees, y, is
|
|
|
122
122
|
return undefined;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
// const zs_ = zs;
|
|
126
|
-
// console.log(zs.length)
|
|
127
|
-
// const zPos = createPos(z.curve, z.t, false);
|
|
128
125
|
const circle = { center: x, radius: distanceBetween(x, z.p) };
|
|
129
126
|
if (typeof _debug_ !== 'undefined') {
|
|
130
127
|
addDebugInfo(bezierPieces, false, x, y, z, circle, δ, xs, isHoleClosing);
|
|
131
128
|
}
|
|
132
|
-
|
|
133
|
-
return { circle, zs: zs };
|
|
129
|
+
return { circle, zs: [z] };
|
|
134
130
|
}
|
|
135
131
|
function addDebugInfo2(isHoleClosing) {
|
|
136
132
|
if (typeof _debug_ !== 'undefined') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"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"}
|
package/node/sat/cull.js
CHANGED
|
@@ -59,75 +59,5 @@ function cull(culls, maxCpNode) {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
/*
|
|
63
|
-
function cull(
|
|
64
|
-
culls: Set<Circle>,
|
|
65
|
-
maxCpNode: CpNode) {
|
|
66
|
-
|
|
67
|
-
let leaves = getLeaves(maxCpNode);
|
|
68
|
-
|
|
69
|
-
function getNonTrivialBranches(cpStart: CpNode) {
|
|
70
|
-
let cp = cpStart.next;
|
|
71
|
-
|
|
72
|
-
let cps: CpNode[] = [];
|
|
73
|
-
do {
|
|
74
|
-
if (cp.next !== cp.nextOnCircle) {
|
|
75
|
-
cps.push(cp);
|
|
76
|
-
}
|
|
77
|
-
cp = cp.nextOnCircle;
|
|
78
|
-
} while (cp !== cpStart)
|
|
79
|
-
|
|
80
|
-
return cps;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
while (leaves.length) {
|
|
84
|
-
let leaf = leaves.pop();
|
|
85
|
-
|
|
86
|
-
// Preserve topology.
|
|
87
|
-
if (leaf.isHoleClosing || leaf.isIntersection) { continue; }
|
|
88
|
-
|
|
89
|
-
if (!culls.has(leaf.cp.circle)) {
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
let cpNode = leaf.next; // Turn around
|
|
94
|
-
|
|
95
|
-
while (true) {
|
|
96
|
-
cpNode = cpNode.next;
|
|
97
|
-
let cut = false;
|
|
98
|
-
let cp1 = cpNode.prevOnCircle;
|
|
99
|
-
|
|
100
|
-
if (!culls.has(cpNode.cp.circle)) {
|
|
101
|
-
// Cut the branch once a non-cull has been reached.
|
|
102
|
-
cut = true;
|
|
103
|
-
} else {
|
|
104
|
-
//let cp2 = cp1.prevOnCircle;
|
|
105
|
-
let cp2 = cpNode.nextOnCircle;
|
|
106
|
-
|
|
107
|
-
//if (maxCpNode === cpNode || maxCpNode === cp1 || maxCpNode === cp2) {
|
|
108
|
-
if (CpNode.isOnSameCircle(cpNode, maxCpNode)) {
|
|
109
|
-
cut = true; // We are at the max disk - cut whole edge
|
|
110
|
-
} else if (cpNode.next === cp2) {
|
|
111
|
-
// Continue but starting from cp2
|
|
112
|
-
cpNode = cp2;
|
|
113
|
-
} else if (cp2.next === cp1) {
|
|
114
|
-
// Do nothing - ignore the branch starting from cp2 since it
|
|
115
|
-
// is terminating.
|
|
116
|
-
} else if (cp2.next !== cp1) {
|
|
117
|
-
// At this stage (cpNode.next !== cp2 && cp2.next !== cp1)
|
|
118
|
-
// so it is a bifurcation point - cut the edge.
|
|
119
|
-
cut = true;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (cut) {
|
|
124
|
-
cp1.next = cpNode;
|
|
125
|
-
cpNode.prev = cp1;
|
|
126
|
-
break;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
*/
|
|
132
62
|
export { cull };
|
|
133
63
|
//# sourceMappingURL=cull.js.map
|
package/node/sat/cull.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cull.js","sourceRoot":"","sources":["../../src/sat/cull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAU,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG/D;;;;;;;GAOG;AACH,SAAS,IAAI,CACL,KAAkB,EAClB,SAAiB;IAErB,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEpC,SAAS,kBAAkB,CAAC,OAAe;QAC7C,IAAI,EAAE,GAAG,OAAO,CAAC;QAEX,MAAM,GAAG,GAAa,EAAE,CAAC;QAC/B,GAAG;YACO,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,YAAY,EAAE;gBAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAChB;YACV,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC;SACrB,QAAQ,EAAE,KAAK,OAAO,CAAC,YAAY,EAAC;QAErC,OAAO,GAAG,CAAC;IACT,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,EAAE;QAClB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAG,CAAC;QAE3B,qBAAqB;QACrB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,SAAS;SAAE;QAE5D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;YAC5B,SAAS;SACZ;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc;QAEtC,OAAO,IAAI,EAAE;YACT,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YACrB,IAAI,GAAG,GAAG,KAAK,CAAC;YAChB,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;YAEhC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;gBAC9B,qDAAqD;gBACrD,GAAG,GAAG,IAAI,CAAC;aACd;iBAAM,IAAI,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;gBAC1C,GAAG,GAAG,IAAI,CAAC,CAAC,0CAA0C;aACzD;iBAAM;gBACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAEvC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;oBAClB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBACnB;qBAAM;oBACH,GAAG,GAAG,IAAI,CAAC;iBACd;aACJ;YAED,IAAI,GAAG,EAAE;gBACL,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;gBAClB,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;gBAClB,MAAM;aACT;SACJ;KACJ;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"cull.js","sourceRoot":"","sources":["../../src/sat/cull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAU,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG/D;;;;;;;GAOG;AACH,SAAS,IAAI,CACL,KAAkB,EAClB,SAAiB;IAErB,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEpC,SAAS,kBAAkB,CAAC,OAAe;QAC7C,IAAI,EAAE,GAAG,OAAO,CAAC;QAEX,MAAM,GAAG,GAAa,EAAE,CAAC;QAC/B,GAAG;YACO,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,YAAY,EAAE;gBAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAChB;YACV,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC;SACrB,QAAQ,EAAE,KAAK,OAAO,CAAC,YAAY,EAAC;QAErC,OAAO,GAAG,CAAC;IACT,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,EAAE;QAClB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAG,CAAC;QAE3B,qBAAqB;QACrB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,SAAS;SAAE;QAE5D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;YAC5B,SAAS;SACZ;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc;QAEtC,OAAO,IAAI,EAAE;YACT,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YACrB,IAAI,GAAG,GAAG,KAAK,CAAC;YAChB,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;YAEhC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;gBAC9B,qDAAqD;gBACrD,GAAG,GAAG,IAAI,CAAC;aACd;iBAAM,IAAI,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;gBAC1C,GAAG,GAAG,IAAI,CAAC,CAAC,0CAA0C;aACzD;iBAAM;gBACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAEvC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;oBAClB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBACnB;qBAAM;oBACH,GAAG,GAAG,IAAI,CAAC;iBACd;aACJ;YAED,IAAI,GAAG,EAAE;gBACL,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;gBAClB,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;gBAClB,MAAM;aACT;SACJ;KACJ;AACL,CAAC;AAGD,OAAO,EAAE,IAAI,EAAE,CAAA"}
|
package/node/sat/get-leaves.js
CHANGED
|
@@ -3,11 +3,11 @@ import { getAllOnLoop, isTerminating } from '../cp-node/cp-node.js';
|
|
|
3
3
|
function getLeaves(cpNode) {
|
|
4
4
|
const leaves = [];
|
|
5
5
|
const cps = getAllOnLoop(cpNode);
|
|
6
|
-
|
|
6
|
+
for (const cp of cps) {
|
|
7
7
|
if (isTerminating(cp)) {
|
|
8
8
|
leaves.push(cp);
|
|
9
9
|
}
|
|
10
|
-
}
|
|
10
|
+
}
|
|
11
11
|
return leaves;
|
|
12
12
|
}
|
|
13
13
|
export { getLeaves };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-leaves.js","sourceRoot":"","sources":["../../src/sat/get-leaves.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5E,gBAAgB;AAChB,SAAS,SAAS,CAAC,MAAc;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,
|
|
1
|
+
{"version":3,"file":"get-leaves.js","sourceRoot":"","sources":["../../src/sat/get-leaves.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5E,gBAAgB;AAChB,SAAS,SAAS,CAAC,MAAc;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;QAClB,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;KACJ;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAGD,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Mat } from '../mat/mat.js';
|
|
2
|
-
/** @internal */
|
|
3
2
|
/**
|
|
4
3
|
* Apply and returns an enhanced version of the Scale Axis Transform (SAT) to
|
|
5
4
|
* the given MAT. The returned SAT is guaranteed to be a subset of the MAT and
|
|
@@ -12,5 +11,5 @@ import { Mat } from '../mat/mat.js';
|
|
|
12
11
|
* @param mat The Medial Axis Transform ([[Mat]]) on which to apply the SAT.
|
|
13
12
|
* @param s The scale factor >= 1 (e.g. 1.3)
|
|
14
13
|
*/
|
|
15
|
-
declare function toScaleAxis(mat: Mat, s: number
|
|
14
|
+
declare function toScaleAxis(mat: Mat, s: number): Mat;
|
|
16
15
|
export { toScaleAxis };
|
|
@@ -8,13 +8,6 @@ import { cull } from './cull.js';
|
|
|
8
8
|
import { addDebugInfo } from './add-debug-info.js';
|
|
9
9
|
import { clone } from '../cp-node/clone.js';
|
|
10
10
|
import { getCurveToNext } from '../cp-node/get-curve-to-next.js';
|
|
11
|
-
function linearScale(s) {
|
|
12
|
-
return function (r) {
|
|
13
|
-
return s * r;
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
/** @internal */
|
|
17
|
-
//let len = length([0,1]);
|
|
18
11
|
/**
|
|
19
12
|
* Apply and returns an enhanced version of the Scale Axis Transform (SAT) to
|
|
20
13
|
* the given MAT. The returned SAT is guaranteed to be a subset of the MAT and
|
|
@@ -27,7 +20,7 @@ function linearScale(s) {
|
|
|
27
20
|
* @param mat The Medial Axis Transform ([[Mat]]) on which to apply the SAT.
|
|
28
21
|
* @param s The scale factor >= 1 (e.g. 1.3)
|
|
29
22
|
*/
|
|
30
|
-
function toScaleAxis(mat, s
|
|
23
|
+
function toScaleAxis(mat, s) {
|
|
31
24
|
let timingStart = 0;
|
|
32
25
|
if (typeof _debug_ !== 'undefined') {
|
|
33
26
|
timingStart = performance.now();
|
|
@@ -38,7 +31,7 @@ function toScaleAxis(mat, s, f = linearScale) {
|
|
|
38
31
|
const cpNodes = [];
|
|
39
32
|
traverseVertices(clone(mat.cpNode), cpNode => { cpNodes.push(cpNode); });
|
|
40
33
|
const cpNode = getLargestVertex(cpNodes);
|
|
41
|
-
|
|
34
|
+
// console.log(cpNodes.map(c => c.cp.circle.radius).length)
|
|
42
35
|
if (typeof _debug_ !== 'undefined') {
|
|
43
36
|
_debug_.generated.elems.maxVertex.push(cpNode);
|
|
44
37
|
}
|
|
@@ -50,11 +43,11 @@ function toScaleAxis(mat, s, f = linearScale) {
|
|
|
50
43
|
const rMap = new Map();
|
|
51
44
|
traverseEdges(cpNode, function (cpNode) {
|
|
52
45
|
/** The occulating radius stored with this vertex. */
|
|
53
|
-
const R = rMap.get(cpNode) ||
|
|
46
|
+
const R = rMap.get(cpNode) || (s * cpNode.cp.circle.radius);
|
|
54
47
|
const cpNode_ = cpNode.next;
|
|
55
48
|
const l = length([0, 1], getCurveToNext(cpNode));
|
|
56
49
|
const r = cpNode_.cp.circle.radius;
|
|
57
|
-
const r_ =
|
|
50
|
+
const r_ = s * r;
|
|
58
51
|
if (R - l > r_) {
|
|
59
52
|
for (const cpNode of getCpNodesOnCircle(cpNode_)) {
|
|
60
53
|
rMap.set(cpNode, R - l); // Update osculating radii
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-scale-axis.js","sourceRoot":"","sources":["../../src/sat/to-scale-axis.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAU,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGjE
|
|
1
|
+
{"version":3,"file":"to-scale-axis.js","sourceRoot":"","sources":["../../src/sat/to-scale-axis.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "flo-mat",
|
|
3
3
|
"sideEffects": false,
|
|
4
4
|
"description": "Medial / Scale Axis Transform (MAT/SAT) Library.",
|
|
5
|
-
"version": "3.0.
|
|
5
|
+
"version": "3.0.1",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Floris Steenkamp"
|
|
8
8
|
},
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"@types/chai": "^4.3.5",
|
|
47
47
|
"@types/mocha": "^10.0.1",
|
|
48
48
|
"@types/node": "^20.4.8",
|
|
49
|
-
"@typescript-eslint/eslint-plugin": "^6.
|
|
50
|
-
"@typescript-eslint/parser": "^6.
|
|
49
|
+
"@typescript-eslint/eslint-plugin": "^6.3.0",
|
|
50
|
+
"@typescript-eslint/parser": "^6.3.0",
|
|
51
51
|
"c8": "^8.0.1",
|
|
52
52
|
"chai": "^4.3.7",
|
|
53
53
|
"circular-dependency-plugin": "^5.2.2",
|
|
@@ -166,16 +166,11 @@ function find2Prong(
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
// const zs_ = zs;
|
|
170
|
-
// console.log(zs.length)
|
|
171
|
-
// const zPos = createPos(z.curve, z.t, false);
|
|
172
|
-
|
|
173
169
|
const circle = { center: x, radius: distanceBetween(x, z.p) };
|
|
174
170
|
|
|
175
171
|
if (typeof _debug_ !== 'undefined') { addDebugInfo(bezierPieces, false, x, y, z, circle!, δ!, xs, isHoleClosing); }
|
|
176
172
|
|
|
177
|
-
|
|
178
|
-
return { circle, zs: zs };
|
|
173
|
+
return { circle, zs: [z] };
|
|
179
174
|
}
|
|
180
175
|
|
|
181
176
|
|
package/src/sat/cull.ts
CHANGED
|
@@ -72,76 +72,5 @@ function cull(
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
/*
|
|
76
|
-
function cull(
|
|
77
|
-
culls: Set<Circle>,
|
|
78
|
-
maxCpNode: CpNode) {
|
|
79
|
-
|
|
80
|
-
let leaves = getLeaves(maxCpNode);
|
|
81
|
-
|
|
82
|
-
function getNonTrivialBranches(cpStart: CpNode) {
|
|
83
|
-
let cp = cpStart.next;
|
|
84
|
-
|
|
85
|
-
let cps: CpNode[] = [];
|
|
86
|
-
do {
|
|
87
|
-
if (cp.next !== cp.nextOnCircle) {
|
|
88
|
-
cps.push(cp);
|
|
89
|
-
}
|
|
90
|
-
cp = cp.nextOnCircle;
|
|
91
|
-
} while (cp !== cpStart)
|
|
92
|
-
|
|
93
|
-
return cps;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
while (leaves.length) {
|
|
97
|
-
let leaf = leaves.pop();
|
|
98
|
-
|
|
99
|
-
// Preserve topology.
|
|
100
|
-
if (leaf.isHoleClosing || leaf.isIntersection) { continue; }
|
|
101
|
-
|
|
102
|
-
if (!culls.has(leaf.cp.circle)) {
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
let cpNode = leaf.next; // Turn around
|
|
107
|
-
|
|
108
|
-
while (true) {
|
|
109
|
-
cpNode = cpNode.next;
|
|
110
|
-
let cut = false;
|
|
111
|
-
let cp1 = cpNode.prevOnCircle;
|
|
112
|
-
|
|
113
|
-
if (!culls.has(cpNode.cp.circle)) {
|
|
114
|
-
// Cut the branch once a non-cull has been reached.
|
|
115
|
-
cut = true;
|
|
116
|
-
} else {
|
|
117
|
-
//let cp2 = cp1.prevOnCircle;
|
|
118
|
-
let cp2 = cpNode.nextOnCircle;
|
|
119
|
-
|
|
120
|
-
//if (maxCpNode === cpNode || maxCpNode === cp1 || maxCpNode === cp2) {
|
|
121
|
-
if (CpNode.isOnSameCircle(cpNode, maxCpNode)) {
|
|
122
|
-
cut = true; // We are at the max disk - cut whole edge
|
|
123
|
-
} else if (cpNode.next === cp2) {
|
|
124
|
-
// Continue but starting from cp2
|
|
125
|
-
cpNode = cp2;
|
|
126
|
-
} else if (cp2.next === cp1) {
|
|
127
|
-
// Do nothing - ignore the branch starting from cp2 since it
|
|
128
|
-
// is terminating.
|
|
129
|
-
} else if (cp2.next !== cp1) {
|
|
130
|
-
// At this stage (cpNode.next !== cp2 && cp2.next !== cp1)
|
|
131
|
-
// so it is a bifurcation point - cut the edge.
|
|
132
|
-
cut = true;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if (cut) {
|
|
137
|
-
cp1.next = cpNode;
|
|
138
|
-
cpNode.prev = cp1;
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
*/
|
|
145
|
-
|
|
146
75
|
|
|
147
76
|
export { cull }
|
package/src/sat/get-leaves.ts
CHANGED
|
@@ -6,11 +6,11 @@ function getLeaves(cpNode: CpNode) {
|
|
|
6
6
|
const leaves: CpNode[] = [];
|
|
7
7
|
|
|
8
8
|
const cps = getAllOnLoop(cpNode);
|
|
9
|
-
|
|
9
|
+
for (const cp of cps) {
|
|
10
10
|
if (isTerminating(cp)) {
|
|
11
11
|
leaves.push(cp);
|
|
12
12
|
}
|
|
13
|
-
}
|
|
13
|
+
}
|
|
14
14
|
|
|
15
15
|
return leaves;
|
|
16
16
|
}
|
package/src/sat/to-scale-axis.ts
CHANGED
|
@@ -17,17 +17,6 @@ import { clone } from '../cp-node/clone.js';
|
|
|
17
17
|
import { getCurveToNext } from '../cp-node/get-curve-to-next.js';
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
function linearScale(s: number) {
|
|
21
|
-
return function(r: number) {
|
|
22
|
-
return s*r;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
/** @internal */
|
|
28
|
-
//let len = length([0,1]);
|
|
29
|
-
|
|
30
|
-
|
|
31
20
|
/**
|
|
32
21
|
* Apply and returns an enhanced version of the Scale Axis Transform (SAT) to
|
|
33
22
|
* the given MAT. The returned SAT is guaranteed to be a subset of the MAT and
|
|
@@ -42,8 +31,7 @@ function linearScale(s: number) {
|
|
|
42
31
|
*/
|
|
43
32
|
function toScaleAxis(
|
|
44
33
|
mat: Mat,
|
|
45
|
-
s: number
|
|
46
|
-
f: (s: number) => (r: number) => number = linearScale): Mat {
|
|
34
|
+
s: number): Mat {
|
|
47
35
|
|
|
48
36
|
let timingStart = 0;
|
|
49
37
|
if (typeof _debug_ !== 'undefined') {
|
|
@@ -60,7 +48,7 @@ function toScaleAxis(
|
|
|
60
48
|
);
|
|
61
49
|
|
|
62
50
|
const cpNode = getLargestVertex(cpNodes);
|
|
63
|
-
|
|
51
|
+
// console.log(cpNodes.map(c => c.cp.circle.radius).length)
|
|
64
52
|
|
|
65
53
|
if (typeof _debug_ !== 'undefined') {
|
|
66
54
|
_debug_.generated.elems.maxVertex.push(cpNode);
|
|
@@ -76,14 +64,14 @@ function toScaleAxis(
|
|
|
76
64
|
|
|
77
65
|
traverseEdges(cpNode, function(cpNode) {
|
|
78
66
|
/** The occulating radius stored with this vertex. */
|
|
79
|
-
const R = rMap.get(cpNode) ||
|
|
67
|
+
const R = rMap.get(cpNode) || (s*cpNode.cp.circle.radius);
|
|
80
68
|
|
|
81
69
|
const cpNode_ = cpNode.next;
|
|
82
70
|
|
|
83
71
|
const l = length([0,1], getCurveToNext(cpNode));
|
|
84
72
|
|
|
85
73
|
const r = cpNode_.cp.circle.radius;
|
|
86
|
-
const r_ =
|
|
74
|
+
const r_ = s*r;
|
|
87
75
|
if (R - l > r_) {
|
|
88
76
|
for (const cpNode of getCpNodesOnCircle(cpNode_)) {
|
|
89
77
|
rMap.set(cpNode, R - l); // Update osculating radii
|
package/src/sat/t-tree.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Circle } from '../geometry/circle.js';
|
|
2
|
-
import { TTree } from './t-tree.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @internal
|
|
7
|
-
* Traverses the spacial tree and calls the given callback function for each
|
|
8
|
-
* MAT circle in the tree and iteravely for each subtree.
|
|
9
|
-
* @param tree The spacial tree to traverse
|
|
10
|
-
* @param f A function to call for each MAT circle in the tree.
|
|
11
|
-
*/
|
|
12
|
-
function traverseSpacialTree(
|
|
13
|
-
tree: TTree,
|
|
14
|
-
f: (circle: Circle) => void) {
|
|
15
|
-
|
|
16
|
-
g(tree);
|
|
17
|
-
|
|
18
|
-
function g(tree: TTree) {
|
|
19
|
-
if (!tree) { return; }
|
|
20
|
-
|
|
21
|
-
if (tree.circles!.size) {
|
|
22
|
-
tree.circles!.forEach(f);
|
|
23
|
-
|
|
24
|
-
return; // Leaf reached
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
[5,0,2,4,1,3].forEach(
|
|
28
|
-
i => g(tree.trees!.get(i)!)
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
export { traverseSpacialTree }
|