improve split healing
This commit is contained in:
parent
eac30a458f
commit
23d065aca8
1 changed files with 35 additions and 36 deletions
|
|
@ -254,7 +254,6 @@ let model = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
|
||||||
// find unshared edges on Z plane
|
// find unshared edges on Z plane
|
||||||
let faces = o1.group(3);
|
let faces = o1.group(3);
|
||||||
for (let face of faces) {
|
for (let face of faces) {
|
||||||
|
|
@ -287,19 +286,19 @@ let model = {
|
||||||
p2: newPoint().move(e.p2),
|
p2: newPoint().move(e.p2),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
// flatten output points to arrays
|
||||||
o1 = o1.map(e => [ ...e ]).flat();
|
o1 = o1.map(e => [ ...e ]).flat();
|
||||||
o2 = o2.map(e => [ ...e ]).flat();
|
o2 = o2.map(e => [ ...e ]).flat();
|
||||||
}
|
|
||||||
if (edges.length) {
|
if (edges.length) {
|
||||||
// heal open spaces created by split
|
// heal unshared edges created along Z split
|
||||||
|
// normals (from point array) are reversed for the bottom split
|
||||||
let heal = sliceConnect(edges, z).map(poly => poly.earcut()).flat();
|
let heal = sliceConnect(edges, z).map(poly => poly.earcut()).flat();
|
||||||
let o1p = heal.map(poly => poly.points.map(p => [ p.x, p.y, p.z ]));
|
let o1p = heal.map(poly => poly.points.map(p => [ p.x, p.y, p.z ]));
|
||||||
let o2p = heal.map(poly => poly.points.reverse().map(p => [ p.x, p.y, p.z ]));
|
let o2p = heal.map(poly => poly.points.reverse().map(p => [ p.x, p.y, p.z ]));
|
||||||
o1.appendAll(o1p.flat().flat());
|
o1.appendAll(o1p.flat().flat());
|
||||||
o2.appendAll(o2p.flat().flat());
|
o2.appendAll(o2p.flat().flat());
|
||||||
console.log({ edges, heal, o1, o2 });
|
// console.log({ edges, heal, o1, o2 });
|
||||||
}
|
}
|
||||||
// return null;
|
|
||||||
return { o1: o1.toFloat32(), o2: o2.toFloat32() };
|
return { o1: o1.toFloat32(), o2: o2.toFloat32() };
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue