Doodle3D-Slicer/src/sliceActions/slicesToGCode.js

73 lines
1.9 KiB
JavaScript
Raw Normal View History

2017-07-19 11:02:42 +02:00
import GCode from './helpers/GCode.js';
2016-04-23 09:56:15 +02:00
export default function slicesToGCode(slices, settings) {
2016-05-08 10:31:00 +02:00
const gcode = new GCode(settings);
2016-04-23 09:56:15 +02:00
for (let layer = 0; layer < slices.length; layer ++) {
const slice = slices[layer];
if (layer === 1) {
gcode.turnFanOn();
gcode.bottom = false;
}
2017-06-22 10:19:15 +02:00
if (typeof slice.brim !== 'undefined') {
2016-04-23 09:56:15 +02:00
pathToGCode(gcode, slice.brim, true, true, layer, 'brim');
}
2016-04-23 09:56:15 +02:00
for (let i = 0; i < slice.parts.length; i ++) {
const part = slice.parts[i];
2016-04-21 22:14:22 +02:00
if (part.shape.closed) {
2016-04-23 09:56:15 +02:00
pathToGCode(gcode, part.outerLine, false, true, layer, 'outerLine');
2016-04-23 09:56:15 +02:00
for (let i = 0; i < part.innerLines.length; i ++) {
const innerLine = part.innerLines[i];
pathToGCode(gcode, innerLine, false, false, layer, 'innerLine');
}
2016-04-23 09:56:15 +02:00
pathToGCode(gcode, part.fill, true, false, layer, 'fill');
} else {
2017-06-22 10:19:15 +02:00
const retract = !(slice.parts.length === 1 && typeof slice.support === 'undefined');
2016-04-23 09:56:15 +02:00
pathToGCode(gcode, part.shape, retract, retract, layer, 'outerLine');
}
}
2017-06-22 10:19:15 +02:00
if (typeof slice.support !== 'undefined') {
2016-04-23 09:56:15 +02:00
pathToGCode(gcode, slice.support, true, true, layer, 'support');
}
}
return gcode.getGCode();
}
2016-05-06 19:48:41 +02:00
function pathToGCode(gcode, shape, retract, unRetract, layer, type) {
2016-08-27 10:01:50 +02:00
const { closed } = shape;
const paths = shape.mapToLower();
2016-05-06 19:48:41 +02:00
2016-08-27 10:01:50 +02:00
for (let i = 0; i < paths.length; i ++) {
const line = paths[i];
const length = closed ? (line.length + 1) : line.length;
2016-05-06 19:48:41 +02:00
for (let i = 0; i < length; i ++) {
const point = line[i % line.length];
if (i === 0) {
// TODO
// moveTo should impliment combing
2016-08-27 10:01:50 +02:00
gcode.moveTo(point.x, point.y, layer);
2016-05-06 19:48:41 +02:00
if (unRetract) {
gcode.unRetract();
}
} else {
2016-08-27 10:01:50 +02:00
gcode.lineTo(point.x, point.y, layer, type);
2016-05-06 19:48:41 +02:00
}
}
}
if (retract) {
gcode.retract();
}
}