2017-01-18 13:30:57 +01:00
|
|
|
import 'three.js';
|
2016-08-19 14:46:02 +02:00
|
|
|
import slice from './sliceActions/slice.js';
|
2016-10-13 14:22:04 +02:00
|
|
|
import SlicerWorker from './slicerWorker.js!worker';
|
2015-07-26 15:32:10 +02:00
|
|
|
|
2016-08-19 14:09:51 +02:00
|
|
|
export default class {
|
2016-07-19 14:28:03 +02:00
|
|
|
setMesh(mesh) {
|
2015-07-26 15:32:10 +02:00
|
|
|
mesh.updateMatrix();
|
2015-06-11 10:28:21 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
this.setGeometry(mesh.geometry, mesh.matrix);
|
2015-04-28 14:11:41 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
return this;
|
|
|
|
}
|
2016-07-19 14:28:03 +02:00
|
|
|
setGeometry(geometry, matrix) {
|
2017-01-18 13:30:57 +01:00
|
|
|
if (geometry.type === 'BufferGeometry') {
|
|
|
|
geometry = new THREE.Geometry().fromBufferGeometry(geometry);
|
|
|
|
} else if (geometry.type === 'Geometry') {
|
|
|
|
geometry = geometry.clone();
|
|
|
|
} else {
|
|
|
|
throw new Error('Geometry is not an instance of BufferGeometry or Geometry');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (matrix) {
|
|
|
|
geometry.applyMatrix(matrix);
|
|
|
|
}
|
2015-06-16 10:28:26 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
geometry.mergeVertices();
|
2017-01-18 13:30:57 +01:00
|
|
|
geometry.computeFaceNormals();
|
2015-07-10 15:06:51 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
this.geometry = geometry;
|
2015-06-16 10:28:26 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
return this;
|
2015-06-16 10:28:26 +02:00
|
|
|
}
|
2016-08-19 15:12:20 +02:00
|
|
|
sliceSync(settings) {
|
|
|
|
return slice(this.geometry, settings);
|
|
|
|
}
|
|
|
|
slice(settings) {
|
2016-10-13 14:22:04 +02:00
|
|
|
const slicerWorker = new SlicerWorker();
|
2016-08-19 15:12:20 +02:00
|
|
|
|
|
|
|
const geometry = this.geometry.toJSON();
|
|
|
|
const { config } = settings;
|
|
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
2016-10-13 14:22:04 +02:00
|
|
|
slicerWorker.onerror = reject;
|
2016-08-19 15:12:20 +02:00
|
|
|
|
2016-10-13 14:22:04 +02:00
|
|
|
slicerWorker.addEventListener('message', (event) => {
|
2016-08-19 15:12:20 +02:00
|
|
|
const { message, data } = event.data;
|
|
|
|
switch (message) {
|
|
|
|
case 'SLICE': {
|
2016-10-13 14:22:04 +02:00
|
|
|
slicerWorker.terminate();
|
2016-08-19 15:12:20 +02:00
|
|
|
resolve(data.gcode);
|
2016-08-27 10:02:17 +02:00
|
|
|
break;
|
2016-08-19 14:46:02 +02:00
|
|
|
}
|
2016-08-19 15:12:20 +02:00
|
|
|
}
|
|
|
|
});
|
2016-08-19 14:46:02 +02:00
|
|
|
|
2016-10-13 14:22:04 +02:00
|
|
|
slicerWorker.postMessage({
|
2016-08-19 15:12:20 +02:00
|
|
|
message: 'SLICE',
|
|
|
|
data: { geometry, config }
|
2016-08-19 14:46:02 +02:00
|
|
|
});
|
2016-08-19 15:12:20 +02:00
|
|
|
});
|
2015-07-26 15:32:10 +02:00
|
|
|
}
|
|
|
|
}
|