add simple promises-based wrapper to the slicer
This commit is contained in:
parent
ffd2f440ba
commit
61cf538043
2 changed files with 129 additions and 0 deletions
1
app.js
1
app.js
|
|
@ -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
128
src/kiri/engine.js
Normal 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'));
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
Loading…
Reference in a new issue