improve true shadow performance for outline and rough

This commit is contained in:
Stewart Allen 2025-07-15 00:24:09 -04:00
commit b2a7046160
4 changed files with 9 additions and 5 deletions

View file

@ -98,6 +98,7 @@
"docs-check": "prettier --config ./conf/prettier.config.js ./docs --check",
"dev": "npm run webpack-ext && gs-app-server --debug --single",
"prod": "npm run webpack-ext && npm run webpack-src prod && gs-app-server",
"prod-pack": "npm run webpack-ext && npm run webpack-src prod",
"prod-dryrun": "gs-app-server --dryrun",
"start": "npm run prebuild prod && electron .",
"start-dev": "npm run prebuild prod && electron . --devel",

View file

@ -17,7 +17,7 @@ class OpOutline extends CamOp {
async slice(progress) {
let { op, state } = this;
let { settings, widget, slicer, addSlices, tshadow, thruHoles, unsafe, color } = state;
let { updateToolDiams, tabs, cutTabs, cutPolys, workarea, zMax } = state;
let { updateToolDiams, tabs, cutTabs, cutPolys, workarea, zMax, shadowAt } = state;
let { process, stock } = settings;
if (op.down <= 0) {
@ -37,6 +37,7 @@ class OpOutline extends CamOp {
};
let indices = slicer.interval(op.down, intopt);
let trueShadow = process.camTrueShadow === true;
let lastShadowZ;
// shift out first (top-most) slice
indices.shift();
// add flats to shadow
@ -44,7 +45,6 @@ class OpOutline extends CamOp {
.map(v => (parseFloat(v) - 0.01).round(5))
.filter(v => v > 0 && indices.indexOf(v) < 0);
indices = indices.appendAll(flats).sort((a,b) => b-a);
let cnt = 0;
let tot = 0;
if (op.outside && !op.inside) {
@ -65,7 +65,7 @@ class OpOutline extends CamOp {
// exclude flats injected to complete shadow
return;
}
data.shadow = trueShadow ? shadowAt(widget, data.z) : shadow.clone(true);
data.shadow = trueShadow ? shadowAt(data.z, lastShadowZ) : shadow.clone(true);
data.slice.shadow = data.shadow;
// data.slice.tops[0].inner = data.shadow;
// data.slice.tops[0].inner = POLY.setZ(tshadow.clone(true), data.z);
@ -73,6 +73,7 @@ class OpOutline extends CamOp {
// data.slice.xray();
// onupdate(0.2 + (index/total) * 0.1, "outlines");
progress(0.5 + 0.5 * (++cnt / tot));
lastShadowZ = data.z;
}, progress: (index, total) => {
tot = total;
progress((index / total) * 0.5);

View file

@ -114,6 +114,7 @@ class OpRough extends CamOp {
indices = indices.filter(v => v >= workarea.bottom_z);
// console.log('indices', ...indices, {zBottom});
let lsz;
let cnt = 0;
let tot = 0;
await slicer.slice(indices, { each: data => {
@ -125,9 +126,10 @@ class OpRough extends CamOp {
if (data.z > workarea.top_z) {
return;
}
data.shadow = trueShadow ? shadowAt(data.z) : shadow.clone(true);
data.shadow = trueShadow ? shadowAt(data.z, lsz) : shadow.clone(true);
data.slice.shadow = data.shadow;
slices.push(data.slice);
lsz = data.z;
progress(0.25 + 0.25 * (++cnt / tot));
}, progress: (index, total) => {
tot = total;

View file

@ -808,4 +808,4 @@ export function computeShadowAt(widget, z, ztop) {
polys = POLY.union(polys, 0, true);
return polys;
}
}