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
|
|
|
|
2016-03-29 00:26:58 +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;
|
2016-03-29 00:26:58 +02:00
|
|
|
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-03-29 00:26:58 +02:00
|
|
|
|
2016-04-21 22:14:22 +02:00
|
|
|
// var outerLine = part.shape.clone().scaleUp(scale).offset(-nozzleRadius);
|
|
|
|
var outerLine = part.shape.scaleUp(scale).offset(-nozzleRadius, offsetOptions);
|
2016-03-29 00:26:58 +02:00
|
|
|
|
|
|
|
if (outerLine.length > 0) {
|
2016-04-21 22:14:22 +02:00
|
|
|
part.outerLine.join(outerLine);
|
2016-03-29 00:26:58 +02:00
|
|
|
|
|
|
|
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-03-29 00:26:58 +02:00
|
|
|
|
|
|
|
if (innerLine.length > 0) {
|
2016-04-21 22:14:22 +02:00
|
|
|
part.innerLines.paths.push(innerLine);
|
2016-03-29 00:26:58 +02:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|