add simple promises-based wrapper to the slicer

This commit is contained in:
Stewart Allen 2021-01-01 11:43:35 -05:00
commit 61cf538043
2 changed files with 129 additions and 0 deletions

1
app.js
View file

@ -366,6 +366,7 @@ const script = {
"kiri/layers",
"kiri/widget",
"kiri/codec",
"kiri/engine"
].map(p => `src/${p}.js`),
meta : [
"ext/three",

128
src/kiri/engine.js Normal file
View file

@ -0,0 +1,128 @@
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict";
(function() {
let KIRI = self.kiri = self.kiri || {};
KIRI.newEngine = ()=> { return new Engine ()};
class Engine {
constructor() {
this.widget = KIRI.newWidget();
this.settings = {
mode: "FDM",
controller: {},
filter: { FDM: "internal" },
device: KIRI.conf.defaults.fdm.d, // device profile
process: KIRI.conf.defaults.fdm.p, // slicing settings
widget: { [ this.widget.id ]: {} }
};
this.listener = () => {};
}
load(url) {
return new Promise((accept, reject) => {
try {
new moto.STL().load(url, vertices => {
this.widget.loadVertices(vertices)
accept(this);
});
} catch (error) {
reject(error);
}
});
}
parse(data) {
return new Promise((accept, reject) => {
try {
new moto.STL().parse(data, vertices => {
this.widget.loadVertices(vertices)
accept(this);
});
} catch (error) {
reject(error);
}
});
}
setListener(listener) {
this.listener = listener;
}
setMode(mode) {
this.settings.mode = mode;
return this;
}
setDevice(device) {
Object.assign(this.settings.device, device);
return this;
}
setProcess(process) {
Object.assign(this.settings.process, process);
return this;
}
moveTo(x, y, z) {
this.widget.move(x, y, z, true);
return this;
}
move(x, y, z) {
this.widget.move(x, y, z);
return this;
}
scale(x, y, z) {
this.widget.scale(x, y, z);
return this;
}
rotate(x, y, z) {
this.widget.rotate(x, y, z);
return this;
}
slice() {
return new Promise((accept, reject) => {
KIRI.client.slice(this.settings, this.widget, msg => {
this.listener({slice:msg});
if (msg.error) {
reject(msg.error);
}
if (msg.done) {
accept(this);
}
});
});
}
prepare() {
return new Promise((accept, reject) => {
KIRI.client.prepare(this.settings, update => {
this.listener({prepare:{update}});
}, done => {
this.listener({prepare:{done:true}});
accept(this);
});
});
}
export() {
return new Promise((accept, reject) => {
let output = [];
KIRI.client.export(this.settings, segment => {
this.listener({export:{segment}});
output.push(segment);
}, done => {
this.listener({export:{done}});
accept(output.join('\r\n'));
});
});
}
}
})();