2015-07-26 15:32:10 +02:00
|
|
|
import THREE from 'three.js';
|
2016-03-29 00:26:58 +02:00
|
|
|
import calculateLayersIntersections from './sliceActions/calculateLayersIntersections.js';
|
|
|
|
import createLines from './sliceActions/createLines.js';
|
|
|
|
import generateInfills from './sliceActions/generateInfills.js';
|
|
|
|
import generateInnerLines from './sliceActions/generateInnerLines.js';
|
|
|
|
import generateSupport from './sliceActions/generateSupport.js';
|
|
|
|
import intersectionsToShapes from './sliceActions/intersectionsToShapes.js';
|
|
|
|
import optimizePaths from './sliceActions/optimizePaths.js';
|
|
|
|
import shapesToSlices from './sliceActions/shapesToSlices.js';
|
|
|
|
import slicesToGCode from './sliceActions/slicesToGCode.js';
|
2015-07-26 15:32:10 +02:00
|
|
|
|
|
|
|
export default class {
|
|
|
|
constructor () {
|
|
|
|
this.progress = {
|
|
|
|
createdLines: false,
|
2015-07-29 11:18:18 +02:00
|
|
|
calculatedLayerIntersections: false,
|
2015-07-26 15:32:10 +02:00
|
|
|
sliced: false,
|
2015-07-29 11:18:18 +02:00
|
|
|
generatedSlices: false,
|
2015-07-26 15:32:10 +02:00
|
|
|
generatedInnerLines: false,
|
|
|
|
generatedInfills: false,
|
|
|
|
generatedSupport: false,
|
|
|
|
optimizedPaths: false,
|
|
|
|
generatedGCode: false
|
|
|
|
};
|
2015-06-16 01:25:06 +02:00
|
|
|
}
|
2015-06-16 07:23:31 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
setMesh (mesh) {
|
|
|
|
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;
|
|
|
|
}
|
2015-06-16 10:28:26 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
setGeometry (geometry, matrix) {
|
|
|
|
if (geometry.type === 'BufferGeometry') {
|
|
|
|
geometry = new THREE.Geometry().fromBufferGeometry(geometry);
|
|
|
|
}
|
2015-10-14 17:11:29 +02:00
|
|
|
else if (geometry.type.endsWith('Geometry')) {
|
2015-07-26 15:32:10 +02:00
|
|
|
geometry = geometry.clone();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
console.warn('Geometry is not an instance of BufferGeometry or Geometry');
|
|
|
|
return;
|
|
|
|
}
|
2015-06-16 10:28:26 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
if (matrix instanceof THREE.Matrix4) {
|
|
|
|
geometry.applyMatrix(matrix);
|
|
|
|
}
|
2015-06-16 10:28:26 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
geometry.mergeVertices();
|
2015-07-28 12:28:05 +02: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
|
|
|
}
|
2015-07-10 15:06:51 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
slice (settings) {
|
|
|
|
var supportEnabled = settings.config['supportEnabled'];
|
2015-06-16 10:28:26 +02:00
|
|
|
|
2015-07-29 11:18:18 +02:00
|
|
|
// get unique lines from geometry;
|
2016-03-29 00:26:58 +02:00
|
|
|
var lines = createLines(this.geometry, settings);
|
2015-07-26 15:32:10 +02:00
|
|
|
this.progress.createdLines = true;
|
2016-03-29 00:26:58 +02:00
|
|
|
this._updateProgress(settings);
|
2015-04-24 16:12:48 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
var {layerIntersectionIndexes, layerIntersectionPoints} = calculateLayersIntersections(lines, settings);
|
2015-07-29 11:18:18 +02:00
|
|
|
this.progress.calculatedLayerIntersections = true;
|
2016-03-29 00:26:58 +02:00
|
|
|
this._updateProgress(settings);
|
2015-06-15 17:22:36 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
var shapes = intersectionsToShapes(layerIntersectionIndexes, layerIntersectionPoints, lines, settings);
|
2015-07-26 15:32:10 +02:00
|
|
|
this.progress.sliced = true;
|
2016-03-29 00:26:58 +02:00
|
|
|
this._updateProgress(settings);
|
2015-07-29 11:18:18 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
var slices = shapesToSlices(shapes, settings);
|
2015-07-29 11:18:18 +02:00
|
|
|
this.progress.generatedSlices = true;
|
|
|
|
this._updateProgress(settings);
|
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
generateInnerLines(slices, settings);
|
2015-07-26 15:32:10 +02:00
|
|
|
this.progress.generatedInnerLines = true;
|
2016-03-29 00:26:58 +02:00
|
|
|
this._updateProgress(settings);
|
2015-07-01 14:51:41 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
generateInfills(slices, settings);
|
2015-07-26 15:32:10 +02:00
|
|
|
this.progress.generatedInfills = true;
|
2016-03-29 00:26:58 +02:00
|
|
|
this._updateProgress(settings);
|
2015-07-01 14:51:41 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
if (supportEnabled) {
|
|
|
|
generateSupport(slices, settings);
|
|
|
|
this.progress.generatedSupport = true;
|
|
|
|
this._updateProgress(settings);
|
2015-06-09 21:58:22 +02:00
|
|
|
}
|
2015-07-01 14:51:41 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
optimizePaths(slices, settings);
|
2015-07-26 15:32:10 +02:00
|
|
|
this.progress.optimizedPaths = true;
|
2016-03-29 00:26:58 +02:00
|
|
|
this._updateProgress(settings);
|
2015-06-12 15:58:26 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
var gcode = slicesToGCode(slices, settings);
|
|
|
|
this.progress.generatedGCode = true;
|
|
|
|
this._updateProgress(settings);
|
2015-06-11 14:34:30 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
if (this.onfinish !== undefined) {
|
|
|
|
this.onfinish(gcode);
|
2015-05-13 17:37:52 +02:00
|
|
|
}
|
2015-05-01 12:15:46 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
return gcode;
|
2015-07-26 15:32:10 +02:00
|
|
|
}
|
2015-07-10 12:59:50 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
_updateProgress (settings) {
|
|
|
|
if (this.onprogress !== undefined) {
|
|
|
|
var supportEnabled = settings.config["supportEnabled"];
|
2015-07-10 12:59:50 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
var progress = {};
|
2015-07-10 12:59:50 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
var procent = 0;
|
|
|
|
var length = 0;
|
|
|
|
for (var i in this.progress) {
|
|
|
|
if (!(!supportEnabled && i === "generatedSupport")) {
|
|
|
|
progress[i] = this.progress[i];
|
|
|
|
if (progress[i]) {
|
|
|
|
procent += 1;
|
|
|
|
}
|
|
|
|
length += 1;
|
2015-07-10 12:59:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
progress.procent = procent / length;
|
2015-07-10 12:59:50 +02:00
|
|
|
|
2015-07-26 15:32:10 +02:00
|
|
|
this.onprogress(progress);
|
|
|
|
}
|
2015-07-10 12:59:50 +02:00
|
|
|
}
|
2015-07-26 15:32:10 +02:00
|
|
|
}
|