diff --git a/src/kiri/client.js b/src/kiri/client.js index 00371f5c..5262f4f2 100644 --- a/src/kiri/client.js +++ b/src/kiri/client.js @@ -163,7 +163,7 @@ KIRI.work = { prepare : function(settings, update, done) { send("prepare", { settings }, function(reply) { if (reply.progress) { - update(reply.progress, reply.message); + update(reply.progress, reply.message, reply.layer); } if (reply.done) { done(reply.output, reply.maxSpeed); diff --git a/src/kiri/codec.js b/src/kiri/codec.js index 774cf53d..08f29afb 100644 --- a/src/kiri/codec.js +++ b/src/kiri/codec.js @@ -8,7 +8,7 @@ const BASE = self.base, KIRI = self.kiri, handlers = {}; const freeMem = true; - const zeroOut = false; + const zeroOut = true; const codec = KIRI.codec = { encode: encode, diff --git a/src/kiri/main.js b/src/kiri/main.js index 1c87052b..638ce614 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -855,9 +855,13 @@ segNumber = 0, startTime, lastMsg, - now = Date.now(); + now = Date.now(), + output = []; - KIRI.client.prepare(settings, function(progress, message) { + KIRI.client.prepare(settings, function(progress, message, layer) { + if (layer) { + output.push(KIRI.codec.decode(layer)); + } if (message !== lastMsg) { let mark = Date.now(); if (lastMsg) { @@ -867,7 +871,7 @@ startTime = mark; } API.show.progress(progress, message); - }, function (output, maxSpeed) { + }, function (oldout, maxSpeed) { if (lastMsg) { segtimes[`${segNumber++}_${lastMsg}`] = Date.now() - startTime; } @@ -875,8 +879,8 @@ API.show.progress(0); if (!isCam) setOpacity(0); - output = KIRI.codec.decode(output); - if (feature.preview && output) { + // output = KIRI.codec.decode(output); + if (feature.preview && output.length) { startTime = Date.now(); STACKS.clear(); const stack = STACKS.create('print', SPACE.platform.world) diff --git a/src/kiri/worker.js b/src/kiri/worker.js index a509f853..afab532e 100644 --- a/src/kiri/worker.js +++ b/src/kiri/worker.js @@ -120,8 +120,13 @@ KIRI.worker = { return console.log({invalid_print_driver: mode, driver}); } - const layers = driver.prepare(widgets, settings, (progress, message) => { - send.data({ progress, message }); + const layers = driver.prepare(widgets, settings, (progress, message, layer) => { + const state = { zeros: [] }; + const emit = { progress, message }; + if (layer) { + emit.layer = KIRI.codec.encode(layer, state) + } + send.data(emit); }); const print = current.print || {}; @@ -132,7 +137,7 @@ KIRI.worker = { send.done({ done: true, - output: KIRI.codec.encode(layers, state), + // output: KIRI.codec.encode(layers, state), maxSpeed }, state.zeros); }, diff --git a/src/mode/cam/prepare.js b/src/mode/cam/prepare.js index 9a3decb1..5bebfdce 100644 --- a/src/mode/cam/prepare.js +++ b/src/mode/cam/prepare.js @@ -33,8 +33,8 @@ }); }); - print.render = KIRI.driver.FDM.prepareRender(print.output, progress => { - update(0.5 + progress * 0.5, "render"); + print.render = KIRI.driver.FDM.prepareRender(print.output, (progress, layer) => { + update(0.5 + progress * 0.5, "render", layer); }, { thin: true, print: 0, diff --git a/src/mode/fdm/prepare.js b/src/mode/fdm/prepare.js index 1eadde3b..9985449b 100644 --- a/src/mode/fdm/prepare.js +++ b/src/mode/fdm/prepare.js @@ -365,23 +365,23 @@ // if layer produced output, append to output array if (layerout.length) output.append(layerout); - // notify progress - layerout.layer = layer++; - update((layer / maxLayers) * 0.5, "prepare"); - // retract after last layer if (layer === maxLayers && layerout.length) { layerout.last().retract = true; } + // notify progress + layerout.layer = layer++; + update((layer / maxLayers) * 0.5, "prepare"); + slices = []; layerout = []; lastOut = undefined; } print.output = output; - print.render = FDM.prepareRender(output, progress => { - update(0.5 + progress * 0.5, "render"); + print.render = FDM.prepareRender(output, (progress, layer) => { + update(0.5 + progress * 0.5, "render", layer); }, { tools: device.extruders, thin: isThin, flat: isFlat, fdm: true }); return print.render; }; @@ -578,7 +578,7 @@ }); }); - update(index / levels.length); + update(index / levels.length, output); }); return layers; diff --git a/src/mode/laser/driver.js b/src/mode/laser/driver.js index 1a1ac37e..1dbd8fc4 100644 --- a/src/mode/laser/driver.js +++ b/src/mode/laser/driver.js @@ -135,7 +135,7 @@ merged.push(p); } }); - update(slices++ / totalSlices); + update((slices++ / totalSlices) * 0.5, "prepare"); }); let start = newPoint(0,0,0); let gather = []; @@ -149,7 +149,7 @@ } else { widget.slices.forEach(function(slice) { sliceEmitObjects(print, slice, output); - update(slices++ / totalSlices); + update((slices++ / totalSlices) * 0.5, "prepare"); }); } }); @@ -209,7 +209,9 @@ // console.log({laser_it: output}); // } - return print.render = FDM.prepareRender(output, update, { thin: true, z: 0, action: "cut" }); + return print.render = FDM.prepareRender(output, (progress, layer) => { + update(0.5 + progress * 0.5, "render", layer); + }, { thin: true, z: 0, action: "cut" }); }; function exportLaser(print, online, ondone) {