From e970d377b2b87d1f2130d8da6db886160ba2c3e9 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 16 Oct 2022 01:06:39 -0400 Subject: [PATCH] convert preview path to async function. remove shared array from animation direct list --- src/kiri-mode/cam/animate.js | 2 +- src/kiri-mode/cam/prepare.js | 2 +- src/kiri-mode/fdm/prepare.js | 4 ++-- src/kiri-mode/laser/driver.js | 2 +- src/kiri-mode/sla/driver.js | 2 +- src/kiri-run/worker.js | 34 +++++++++++++++++++--------------- src/kiri/render.js | 2 +- 7 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/kiri-mode/cam/animate.js b/src/kiri-mode/cam/animate.js index b87bf7b5..9183bc50 100644 --- a/src/kiri-mode/cam/animate.js +++ b/src/kiri-mode/cam/animate.js @@ -304,7 +304,7 @@ kiri.load(() => { center = Object.assign({}, stock.center); center.z -= stock.z / 2; - send.data({ mesh_add: { id: 0, ind, offset, sab } }, [ sab ]); + send.data({ mesh_add: { id: 0, ind, offset, sab } }, [ ]); // sab not transferrable send.data({ mesh_move: { id: 0, pos: center } }); send.done(); }; diff --git a/src/kiri-mode/cam/prepare.js b/src/kiri-mode/cam/prepare.js index d1a6a0a1..ca8c10e7 100644 --- a/src/kiri-mode/cam/prepare.js +++ b/src/kiri-mode/cam/prepare.js @@ -26,7 +26,7 @@ const POLY = polygons; * @param {Number} [index] into widget array * @param {Object} [firstPoint] starting point */ -CAM.prepare = function(widgets, settings, update) { +CAM.prepare = async function(widgets, settings, update) { widgets = widgets.filter(w => !w.track.ignore && !w.meta.disabled); const count = widgets.length; diff --git a/src/kiri-mode/fdm/prepare.js b/src/kiri-mode/fdm/prepare.js index 6885fc48..ce7f54e4 100644 --- a/src/kiri-mode/fdm/prepare.js +++ b/src/kiri-mode/fdm/prepare.js @@ -30,7 +30,7 @@ const POLY = polygons; * @param {Function} update progress callback * @returns {Object[]} returns array of render objects */ -FDM.prepare = function(widgets, settings, update) { +FDM.prepare = async function(widgets, settings, update) { // filter ignored widgets widgets = widgets.filter(w => !w.track.ignore && !w.meta.disabled); @@ -768,7 +768,7 @@ FDM.prepare = function(widgets, settings, update) { // render if not explicitly disabled if (settings.render !== false) { - return render.path(output, (progress, layer) => { + await render.path(output, (progress, layer) => { update(0.5 + progress * 0.5, "render", layer); }, { lineWidth: settings.process.sliceLineWidth, diff --git a/src/kiri-mode/laser/driver.js b/src/kiri-mode/laser/driver.js index fe9d4a69..564420cb 100644 --- a/src/kiri-mode/laser/driver.js +++ b/src/kiri-mode/laser/driver.js @@ -172,7 +172,7 @@ function sliceEmitObjects(print, slice, groups, opt = { }) { * @param {Object} print state object * @param {Function} update incremental callback */ -function prepare(widgets, settings, update) { +async function prepare(widgets, settings, update) { let device = settings.device, process = settings.process, print = self.worker.print = kiri.newPrint(settings, widgets), diff --git a/src/kiri-mode/sla/driver.js b/src/kiri-mode/sla/driver.js index 3054f9c1..e0bc8488 100644 --- a/src/kiri-mode/sla/driver.js +++ b/src/kiri-mode/sla/driver.js @@ -19,7 +19,7 @@ if (SLA.legacy) { // runs in worker. would usually be in src/mode/sla/prepare.js // but the SLA driver skips the prepare step because there is no path routing -function prepare(widgets, settings, update) { +async function prepare(widgets, settings, update) { root.worker.print = kiri.newPrint(settings, widgets); if (!SLA.wasm) { fetch('/wasm/kiri-sla.wasm') diff --git a/src/kiri-run/worker.js b/src/kiri-run/worker.js index 4d81a985..2800a0d9 100644 --- a/src/kiri-run/worker.js +++ b/src/kiri-run/worker.js @@ -475,19 +475,19 @@ kiri.worker = { return console.log({invalid_print_driver: mode, driver}); } - const layers = driver.prepare(widgets, settings, (progress, message, layer) => { + driver.prepare(widgets, settings, (progress, message, layer) => { const state = { zeros: [] }; const emit = { progress, message, layer: (layer ? layer.encode(state) : undefined) }; send.data(emit, state.zeros); + }).then(() => { + const unitScale = settings.controller.units === 'in' ? (1 / 25.4) : 1; + const print = current.print || {}; + const minSpeed = (print.minSpeed || 0) * unitScale; + const maxSpeed = (print.maxSpeed || 0) * unitScale; + + send.data({ progress: 1, message: "transfer" }); + send.done({ done: true, minSpeed, maxSpeed }); }); - - const unitScale = settings.controller.units === 'in' ? (1 / 25.4) : 1; - const print = current.print || {}; - const minSpeed = (print.minSpeed || 0) * unitScale; - const maxSpeed = (print.maxSpeed || 0) * unitScale; - - send.data({ progress: 1, message: "transfer" }); - send.done({ done: true, minSpeed, maxSpeed }); }, export(data, send) { @@ -550,10 +550,12 @@ kiri.worker = { }, done => { const minSpeed = print.minSpeed; const maxSpeed = print.maxSpeed; - const layers = kiri.render.path(done.output, progress => { + kiri.render.path(done.output, progress => { send.data({ progress: 0.25 + progress * 0.75 }); - }, { thin: thin || print.belt, flat, tools }); - send.done({parsed: codec.encode(layers), maxSpeed, minSpeed}); + }, { thin: thin || print.belt, flat, tools }) + .then(layers => { + send.done({parsed: codec.encode(layers), maxSpeed, minSpeed}); + }); }, { fdm: mode === 'FDM', belt: device.bedBelt @@ -568,10 +570,12 @@ kiri.worker = { }); }); const print = current.print = kiri.newPrint(null, Object.values(wcache)); - const layers = kiri.render.path(parsed, progress => { + kiri.render.path(parsed, progress => { send.data({ progress }); - }, { thin: true }); - send.done({parsed: codec.encode(layers)}); + }, { thin: true }) + .then(layers => { + send.done({parsed: codec.encode(layers)}); + }); }, config(data, send) { diff --git a/src/kiri/render.js b/src/kiri/render.js index 8c018950..d1295672 100644 --- a/src/kiri/render.js +++ b/src/kiri/render.js @@ -42,7 +42,7 @@ function rate_to_color(rate, max) { } }; -function path(levels, update, opts = {}) { +async function path(levels, update, opts = {}) { levels = levels.filter(level => level.length); if (levels.length === 0) { self.worker.print.maxSpeed = 0;