mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2025-04-06 11:53:22 +02:00
@peteruithoven @mith I think this is a somewhat nicer API for the slicer. I completely removed the Slicer class and instead added two function: sliceGeometry and sliceMesh
77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
import calculateLayersIntersections from './calculateLayersIntersections.js';
|
|
import createLines from './createLines.js';
|
|
import generateInfills from './generateInfills.js';
|
|
import generateInnerLines from './generateInnerLines.js';
|
|
import generateOutlines from './generateOutlines.js';
|
|
import generateSupport from './generateSupport.js';
|
|
import intersectionsToShapes from './intersectionsToShapes.js';
|
|
import addBrim from './addBrim.js';
|
|
import optimizePaths from './optimizePaths.js';
|
|
import shapesToSlices from './shapesToSlices.js';
|
|
import slicesToGCode from './slicesToGCode.js';
|
|
import detectOpenClosed from './detectOpenClosed.js';
|
|
import applyPrecision from './applyPrecision.js';
|
|
import removePrecision from './removePrecision.js';
|
|
|
|
export default function(settings, geometry, onProgress) {
|
|
const totalStages = 12;
|
|
let current = -1;
|
|
const updateProgress = (action) => {
|
|
current ++;
|
|
if (typeof onProgress !== 'undefined') {
|
|
onProgress({
|
|
progress: {
|
|
done: current,
|
|
total: totalStages,
|
|
action
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
geometry.computeFaceNormals();
|
|
|
|
// get unique lines from geometry;
|
|
updateProgress('Constructing unique lines from geometry');
|
|
const lines = createLines(geometry, settings);
|
|
|
|
updateProgress('Detecting open vs closed shapes');
|
|
detectOpenClosed(lines);
|
|
|
|
updateProgress('Calculating layer intersections');
|
|
const {
|
|
layerIntersectionIndexes,
|
|
layerIntersectionPoints
|
|
} = calculateLayersIntersections(lines, settings);
|
|
|
|
updateProgress('Constructing shapes from intersections');
|
|
const shapes = intersectionsToShapes(layerIntersectionIndexes, layerIntersectionPoints, lines, settings);
|
|
|
|
applyPrecision(shapes);
|
|
|
|
updateProgress('Constructing slices from shapes');
|
|
const slices = shapesToSlices(shapes, settings);
|
|
|
|
updateProgress('Generating inner lines');
|
|
generateInnerLines(slices, settings);
|
|
updateProgress('Generating out lines');
|
|
generateOutlines(slices, settings);
|
|
updateProgress('Generating infills');
|
|
generateInfills(slices, settings);
|
|
updateProgress('Generating support');
|
|
generateSupport(slices, settings);
|
|
updateProgress('Adding brim');
|
|
addBrim(slices, settings);
|
|
updateProgress('Optimizing paths');
|
|
optimizePaths(slices, settings);
|
|
|
|
removePrecision(slices);
|
|
|
|
updateProgress('Constructing gcode');
|
|
const gcode = slicesToGCode(slices, settings);
|
|
|
|
updateProgress('Finished');
|
|
|
|
return gcode;
|
|
}
|