From b2a7046160c24f003b4376e2ce7a54208f1b697d Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 15 Jul 2025 00:24:09 -0400 Subject: [PATCH] improve true shadow performance for outline and rough --- package.json | 1 + src/kiri/mode/cam/op-outline.js | 7 ++++--- src/kiri/mode/cam/op-rough.js | 4 +++- src/kiri/mode/cam/slice.js | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5c57e7b2..112e16e8 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/kiri/mode/cam/op-outline.js b/src/kiri/mode/cam/op-outline.js index 9a9a90fb..9daa9519 100644 --- a/src/kiri/mode/cam/op-outline.js +++ b/src/kiri/mode/cam/op-outline.js @@ -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); diff --git a/src/kiri/mode/cam/op-rough.js b/src/kiri/mode/cam/op-rough.js index bbfdaa29..06e2630e 100644 --- a/src/kiri/mode/cam/op-rough.js +++ b/src/kiri/mode/cam/op-rough.js @@ -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; diff --git a/src/kiri/mode/cam/slice.js b/src/kiri/mode/cam/slice.js index 0ae3ba8c..2aa0d93e 100644 --- a/src/kiri/mode/cam/slice.js +++ b/src/kiri/mode/cam/slice.js @@ -808,4 +808,4 @@ export function computeShadowAt(widget, z, ztop) { polys = POLY.union(polys, 0, true); return polys; -} +} \ No newline at end of file