Doodle3D-Slicer/src/sliceActions/generateInnerLines.js

49 lines
1.4 KiB
JavaScript
Raw Normal View History

2016-03-29 08:49:35 +02:00
const scale = 100;
2016-04-21 22:14:22 +02:00
const offsetOptions = {
jointType: 'jtSquare',
endType: 'etClosedPolygon',
miterLimit: 2.0,
roundPrecision: 0.25
};
2016-03-29 08:49:35 +02:00
export default function generateInnerLines(slices, settings) {
console.log("generating outer lines and inner lines");
// need to scale up everything because of clipper rounding errors
2016-04-21 22:14:22 +02:00
let { layerHeight, nozzleDiameter, shellThickness } = settings.config;
2016-03-29 08:49:35 +02:00
nozzleDiameter *= scale;
shellThickness *= scale;
var nozzleRadius = nozzleDiameter / 2;
var shells = Math.round(shellThickness / nozzleDiameter);
for (var layer = 0; layer < slices.length; layer ++) {
var slice = slices[layer];
for (var i = 0; i < slice.parts.length; i ++) {
var part = slice.parts[i];
2016-04-21 22:14:22 +02:00
if (!part.shape.closed) continue;
2016-04-21 22:14:22 +02:00
// var outerLine = part.shape.clone().scaleUp(scale).offset(-nozzleRadius);
2016-04-22 19:38:00 +02:00
const outerLine = part.shape.scaleUp(scale).offset(-nozzleRadius, offsetOptions);
2016-04-21 22:50:02 +02:00
if (outerLine.paths.length > 0) {
2016-04-21 22:14:22 +02:00
part.outerLine.join(outerLine);
for (var shell = 1; shell < shells; shell += 1) {
var offset = shell * nozzleDiameter;
2016-04-21 22:14:22 +02:00
var innerLine = outerLine.offset(-offset, offsetOptions);
2016-04-21 22:50:02 +02:00
if (innerLine.paths.length > 0) {
part.innerLines.push(innerLine);
}
else {
break;
}
}
}
}
}
}