From bd9ad20001eb792d07ce2b30c16865d575c6c7d2 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 17 Apr 2020 19:33:24 -0400 Subject: [PATCH] speedup infill --- js/kiri-driver-sla.js | 45 ++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/js/kiri-driver-sla.js b/js/kiri-driver-sla.js index 04f0dc9d..91052a27 100644 --- a/js/kiri-driver-sla.js +++ b/js/kiri-driver-sla.js @@ -27,7 +27,8 @@ let gs_kiri_sla = exports; newPoint = BASE.newPoint, preview, previewSmall, - previewLarge; + previewLarge, + fill_cache; /** * DRIVER SLICE CONTRACT - runs in worker @@ -47,10 +48,10 @@ let gs_kiri_sla = exports; // calculate % complete and call onupdate() function doupdate(slices, index, from, to, msg) { - onupdate(0.5 + (from + ((index / slices.length) * (to - from))) * 0.5, msg); + onupdate(0.25 + (from + ((index / slices.length) * (to - from))) * 0.75, msg); } - // for each slice, performe a function and call doupdate() + // for each slice, perform a function and call doupdate() function forSlices(slices, from, to, fn, msg) { slices.forEach(function(slice,index) { fn(slice,index); @@ -84,22 +85,22 @@ let gs_kiri_sla = exports; slice.isSolidFill = false; }); let solidLayers = Math.round(process.slaShell / process.slaSlice); - forSlices(slices, 0.1, 0.3, (slice,index) => { + forSlices(slices, 0.05, 0.1, (slice,index) => { if (process.slaShell) { slice.doShells(2, 0, process.slaShell); } else { slice.doShells(1, 0); } }, "slice"); - forSlices(slices, 0.3, 0.6, (slice) => { + forSlices(slices, 0.1, 0.2, (slice) => { slice.doDiff(0.00001, 0.005, !process.slaOpenBase); }, "delta"); if (solidLayers) { - forSlices(slices, 0.6, 0.7, (slice) => { + forSlices(slices, 0.2, 0.3, (slice) => { slice.projectFlats(solidLayers); slice.projectBridges(solidLayers); }, "project"); - forSlices(slices, 0.7, 0.9, (slice) => { + forSlices(slices, 0.3, 0.4, (slice) => { slice.doSolidsFill(undefined, undefined, 0.001); let traces = POLY.nest(POLY.flatten(slice.gatherTraces([]))); let trims = slice.solids.trimmed || []; @@ -108,18 +109,19 @@ let gs_kiri_sla = exports; slice.solids.unioned = union; }, "solid"); } else { - forSlices(slices, 0.6, 0.9, (slice) => { + forSlices(slices, 0.2, 0.4, (slice) => { slice.solids.unioned = slice.gatherTopPolys([]); - }) + }, "solid"); } if (process.slaFillDensity && process.slaShell) { - forSlices(slices, 0.9, 1.0, (slice) => { + fill_cache = []; + forSlices(slices, 0.4, 1.0, (slice) => { fillPolys(slice, settings); - }); + }, "infill"); } ondone(); }, function(update) { - return onupdate(0.0 + update * 0.5); + return onupdate(0.0 + update * 0.25); }); }; @@ -141,12 +143,13 @@ let gs_kiri_sla = exports; start_y = -(depth / 2), end_x = width / 2, end_y = depth / 2, - fill = [] - ; + fill = []; - let seq_i = Math.floor(slice.index / seq); + let seq_i = Math.floor(slice.index / seq), + seq_c = seq_i % 4, + cached = fill_cache[seq_c]; - if (seq_i % 4 !== 2) + if (!cached && seq_c !== 2) for (let x=start_x; x p.clone(true).setZ(slice.z)); + } + fill = POLY.trimTo(fill, slice.tops.map(t => t.poly)); fill = POLY.union(slice.solids.unioned.appendAll(fill));