fix thin wall (centers) for compound polys
This commit is contained in:
parent
804620d91e
commit
d5c6e8aad6
2 changed files with 33 additions and 21 deletions
|
|
@ -264,19 +264,28 @@
|
||||||
PRO.centers = function(step, z, min, max, opt = {}) {
|
PRO.centers = function(step, z, min, max, opt = {}) {
|
||||||
let cloud = [],
|
let cloud = [],
|
||||||
bounds = this.bounds,
|
bounds = this.bounds,
|
||||||
points = this.points,
|
lines = opt.lines || false,
|
||||||
length = points.length,
|
stepoff = step / 2,
|
||||||
lines = opt.lines || false;
|
set = [this.points];
|
||||||
|
|
||||||
for (let y of UTIL.lerp(bounds.miny + 0.01, bounds.maxy - 0.01, step, true)) {
|
if (this.inner) {
|
||||||
|
for (let inner of this.inner) {
|
||||||
|
set.push(inner.points);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let y of UTIL.lerp(bounds.miny + stepoff, bounds.maxy - stepoff, step, true)) {
|
||||||
let ints = [];
|
let ints = [];
|
||||||
for (let i=0; i<length; i++) {
|
for (let points of set) {
|
||||||
let p1 = points[i % length];
|
let length = points.length;
|
||||||
let p2 = points[(i+1) % length];
|
for (let i=0; i<length; i++) {
|
||||||
if (
|
let p1 = points[i % length];
|
||||||
(p1.y <= y && p2.y > y) ||
|
let p2 = points[(i+1) % length];
|
||||||
(p1.y > y && p2.y <= y)
|
if (
|
||||||
) ints.push([p1,p2]);
|
(p1.y <= y && p2.y > y) ||
|
||||||
|
(p1.y > y && p2.y <= y)
|
||||||
|
) ints.push([p1,p2]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let cntr = [];
|
let cntr = [];
|
||||||
if (ints.length && ints.length % 2 === 0) {
|
if (ints.length && ints.length % 2 === 0) {
|
||||||
|
|
@ -322,15 +331,18 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let x of UTIL.lerp(bounds.minx + 0.01, bounds.maxx - 0.01, step, true)) {
|
for (let x of UTIL.lerp(bounds.minx + stepoff, bounds.maxx - stepoff, step, true)) {
|
||||||
let ints = [];
|
let ints = [];
|
||||||
for (let i=0; i<length; i++) {
|
for (let points of set) {
|
||||||
let p1 = points[i % length];
|
let length = points.length;
|
||||||
let p2 = points[(i+1) % length];
|
for (let i=0; i<length; i++) {
|
||||||
if (
|
let p1 = points[i % length];
|
||||||
(p1.x <= x && p2.x > x) ||
|
let p2 = points[(i+1) % length];
|
||||||
(p1.x > x && p2.x <= x)
|
if (
|
||||||
) ints.push([p1,p2]);
|
(p1.x <= x && p2.x > x) ||
|
||||||
|
(p1.x > x && p2.x <= x)
|
||||||
|
) ints.push([p1,p2]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let cntr = [];
|
let cntr = [];
|
||||||
if (ints.length && ints.length % 2 === 0) {
|
if (ints.length && ints.length % 2 === 0) {
|
||||||
|
|
|
||||||
|
|
@ -584,12 +584,12 @@
|
||||||
top.shells = layers.map(r => r.mid).flat();
|
top.shells = layers.map(r => r.mid).flat();
|
||||||
top.gaps = layers.map(r => r.gap).flat();
|
top.gaps = layers.map(r => r.gap).flat();
|
||||||
let off = offsetN;
|
let off = offsetN;
|
||||||
let min = off * 0.9;
|
let min = off * 0.75;
|
||||||
let max = off * 4;
|
let max = off * 4;
|
||||||
for (let poly of layers.map(r => r.gap).flat()) {
|
for (let poly of layers.map(r => r.gap).flat()) {
|
||||||
let centers = poly.centers(off/2, z, min, max, {lines:false});
|
let centers = poly.centers(off/2, z, min, max, {lines:false});
|
||||||
top.fill_sparse.appendAll(centers);
|
top.fill_sparse.appendAll(centers);
|
||||||
// top.thin_fill.appendAll(centers);
|
// top.fill_lines.appendAll(centers);
|
||||||
}
|
}
|
||||||
} else if (opt.thin) {
|
} else if (opt.thin) {
|
||||||
top.thin_fill = [];
|
top.thin_fill = [];
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue