2015-07-26 15:32:10 +02:00
|
|
|
import THREE from 'three.js';
|
2016-03-29 00:35:53 +02:00
|
|
|
import EventDispatcher from 'casperlamboo/EventDispatcher';
|
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';
|
2016-05-06 19:52:31 +02:00
|
|
|
import addBrim from './sliceActions/addBrim.js';
|
2016-03-29 00:26:58 +02:00
|
|
|
import optimizePaths from './sliceActions/optimizePaths.js';
|
|
|
|
import shapesToSlices from './sliceActions/shapesToSlices.js';
|
|
|
|
import slicesToGCode from './sliceActions/slicesToGCode.js';
|
2016-05-06 19:54:25 +02:00
|
|
|
import applyPrecision from './sliceActions/applyPrecision.js';
|
|
|
|
import removePrecision from './sliceActions/removePrecision.js';
|
2015-07-26 15:32:10 +02:00
|
|
|
|
2016-03-29 00:35:53 +02:00
|
|
|
export default class extends EventDispatcher {
|
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;
|
|
|
|
}
|
|
|
|
setGeometry (geometry, matrix) {
|
|
|
|
if (geometry.type === 'BufferGeometry') {
|
|
|
|
geometry = new THREE.Geometry().fromBufferGeometry(geometry);
|
2016-05-09 11:17:49 +02:00
|
|
|
} else if (geometry.type.endsWith('Geometry')) {
|
2015-07-26 15:32:10 +02:00
|
|
|
geometry = geometry.clone();
|
2016-05-09 11:17:49 +02:00
|
|
|
} else {
|
2016-07-19 14:25:48 +02:00
|
|
|
throw 'Geometry is not an instance of BufferGeometry or Geometry';
|
2015-07-26 15:32:10 +02:00
|
|
|
}
|
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-26 15:32:10 +02:00
|
|
|
slice (settings) {
|
2015-07-29 11:18:18 +02:00
|
|
|
// get unique lines from geometry;
|
2016-04-23 09:56:36 +02:00
|
|
|
const lines = createLines(this.geometry, settings);
|
2015-04-24 16:12:48 +02:00
|
|
|
|
2016-04-21 22:14:22 +02:00
|
|
|
const {
|
|
|
|
layerIntersectionIndexes,
|
|
|
|
layerIntersectionPoints
|
|
|
|
} = calculateLayersIntersections(lines, settings);
|
2015-06-15 17:22:36 +02:00
|
|
|
|
2016-04-21 22:14:22 +02:00
|
|
|
const shapes = intersectionsToShapes(layerIntersectionIndexes, layerIntersectionPoints, lines, settings);
|
2015-07-29 11:18:18 +02:00
|
|
|
|
2016-05-06 19:54:25 +02:00
|
|
|
applyPrecision(shapes);
|
|
|
|
|
2016-04-21 22:14:22 +02:00
|
|
|
const slices = shapesToSlices(shapes, settings);
|
2015-07-29 11:18:18 +02:00
|
|
|
|
2016-03-29 00:26:58 +02:00
|
|
|
generateInnerLines(slices, settings);
|
|
|
|
generateInfills(slices, settings);
|
2016-05-06 19:58:39 +02:00
|
|
|
generateSupport(slices, settings);
|
2016-05-06 19:52:31 +02:00
|
|
|
addBrim(slices, settings);
|
2016-03-29 00:26:58 +02:00
|
|
|
optimizePaths(slices, settings);
|
2016-05-06 19:54:25 +02:00
|
|
|
removePrecision(slices);
|
|
|
|
|
2016-05-06 19:59:49 +02:00
|
|
|
const gcode = slicesToGCode(slices, settings);
|
2015-06-11 14:34:30 +02:00
|
|
|
|
2016-04-21 22:50:02 +02:00
|
|
|
this.dispatchEvent({ type: 'finish', gcode });
|
2016-03-29 00:26:58 +02:00
|
|
|
return gcode;
|
2015-07-26 15:32:10 +02:00
|
|
|
}
|
|
|
|
}
|