pre-compute de-rez'd top shadow in slicing pass which can be co-locataed with original slice data
This commit is contained in:
parent
e2ef4ff7e2
commit
210bf10ee0
2 changed files with 16 additions and 11 deletions
|
|
@ -177,15 +177,18 @@
|
||||||
|
|
||||||
PRO.addTop = function(poly) {
|
PRO.addTop = function(poly) {
|
||||||
if (poly.length) {
|
if (poly.length) {
|
||||||
|
// standard legacy polygon
|
||||||
let top = new Top(poly);
|
let top = new Top(poly);
|
||||||
this.tops.push(top);
|
this.tops.push(top);
|
||||||
return top;
|
return top;
|
||||||
} else {
|
} else {
|
||||||
|
// frop top object passed back by slicePost()
|
||||||
let top = new Top(poly.poly);
|
let top = new Top(poly.poly);
|
||||||
top.fill_lines = poly.fill_lines;
|
top.fill_lines = poly.fill_lines;
|
||||||
top.fill_off = poly.fill_off;
|
top.fill_off = poly.fill_off;
|
||||||
top.last = poly.last;
|
top.last = poly.last;
|
||||||
top.shells = poly.shells;
|
top.shells = poly.shells;
|
||||||
|
top.shadow = poly.shadow;
|
||||||
this.tops.push(top);
|
this.tops.push(top);
|
||||||
return top;
|
return top;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@
|
||||||
let fillOff = fillOffset * spaceMult;
|
let fillOff = fillOffset * spaceMult;
|
||||||
|
|
||||||
let nutops = [];
|
let nutops = [];
|
||||||
|
// co-locate shell processing with top generation in slicer
|
||||||
for (let top of tops) {
|
for (let top of tops) {
|
||||||
nutops.push(FDM.share.doTopShells(z, top, count, offset/2, offset, fillOff, {
|
nutops.push(FDM.share.doTopShells(z, top, count, offset/2, offset, fillOff, {
|
||||||
vase: vaseMode,
|
vase: vaseMode,
|
||||||
|
|
@ -87,6 +88,10 @@
|
||||||
danger: isDanger
|
danger: isDanger
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
// add shadow (low rez poly) if needed
|
||||||
|
for (let top of nutops) {
|
||||||
|
top.shadow = top.poly.clean(true, undefined, CONF.clipper / 10);
|
||||||
|
}
|
||||||
data.tops = nutops;
|
data.tops = nutops;
|
||||||
} : undefined;
|
} : undefined;
|
||||||
|
|
||||||
|
|
@ -211,17 +216,13 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// create shadow for clipping supports
|
// create shadow for clipping supports
|
||||||
let shadow = null;
|
let alltops = widget.group
|
||||||
let allslices = widget.group.map(w => w.slices).flat();
|
.map(w => w.slices).flat()
|
||||||
let alltops = allslices.map(slice => slice.topPolys()).flat();
|
.map(s => s.tops).flat().map(t => t.shadow);
|
||||||
let alllen = alltops.map(p => p.deepLength).reduce((a,v)=>a+v);
|
let shadow = doConcurrent ?
|
||||||
// de-rez for really large #s
|
|
||||||
if (alllen > 100000) {
|
|
||||||
alltops = alltops.map(p => p.clean(true, undefined, CONF.clipper / 10));
|
|
||||||
}
|
|
||||||
shadow = doConcurrent ?
|
|
||||||
await KIRI.minions.union(alltops, 0.1) :
|
await KIRI.minions.union(alltops, 0.1) :
|
||||||
POLY.union(alltops, 0.1, true);
|
POLY.union(alltops, 0.1, true);
|
||||||
|
// expand shadow when requested (support clipping)
|
||||||
if (process.sliceSupportExtra) {
|
if (process.sliceSupportExtra) {
|
||||||
shadow = POLY.offset(shadow, process.sliceSupportExtra);
|
shadow = POLY.offset(shadow, process.sliceSupportExtra);
|
||||||
}
|
}
|
||||||
|
|
@ -1247,10 +1248,11 @@
|
||||||
down_traces = down ? POLY.flatten(down.topShells().clone(true)) : null;
|
down_traces = down ? POLY.flatten(down.topShells().clone(true)) : null;
|
||||||
|
|
||||||
if (experimental && down_tops) {
|
if (experimental && down_tops) {
|
||||||
// de-rez complex polys because it's not that important for supports
|
|
||||||
let points = down_tops.map(p => p.deepLength).reduce((a,v)=>a+v);
|
let points = down_tops.map(p => p.deepLength).reduce((a,v)=>a+v);
|
||||||
if (points > 200) {
|
if (points > 200) {
|
||||||
down_tops = down_tops.map(p => p.clean(true, undefined, CONF.clipper / 10));
|
// use de-rez'd top shadow instead
|
||||||
|
down_tops = down.tops.map(t => t.shadow);
|
||||||
|
// de-rez trace polys because it's not that important for supports
|
||||||
down_traces = down_traces.map(p => p.clean(true, undefined, CONF.clipper / 10));
|
down_traces = down_traces.map(p => p.clean(true, undefined, CONF.clipper / 10));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue