convert preview path to async function. remove shared array from animation direct list

This commit is contained in:
Stewart Allen 2022-10-16 01:06:39 -04:00
commit e970d377b2
7 changed files with 26 additions and 22 deletions

View file

@ -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();
};

View file

@ -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;

View file

@ -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,

View file

@ -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),

View file

@ -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')

View file

@ -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) {

View file

@ -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;