loops are now set in ranges much more intuitively

This commit is contained in:
Stewart Allen 2021-04-18 21:50:38 -04:00
commit a20ba0a163
8 changed files with 59 additions and 22 deletions

View file

@ -33,6 +33,7 @@
extrudeSet = false,
time = 0,
layer = 0,
layerno = 0,
pause = [],
pauseCmd = device.gcodePause,
output = [],
@ -51,7 +52,8 @@
blast = 0,
blastz = 0,
process = settings.process,
loops = process.outputLoopLayers,
// loops = process.outputLoopLayers,
loops = process.outputLoops || 0,
zhop = process.zHopDistance || 0, // range
seekMMM = process.outputSeekrate * 60,
retDist = process.outputRetractDist || 0, // range
@ -128,20 +130,41 @@
});
}
if (isBelt && loops) {
loops = loops.split(',').map(range => {
return range.split('-').map(v => parseInt(v));
}).filter(a => a.length > 1).map(a => {
return {
start: a[0],
end: a[1] ? a[1] + 1 : Infinity,
iter: a[2] >= 0 ? a[2] : 1
}
// collect loops from ranges and synth range array
let rloops = [];
if (loops > 0) {
rloops.push({
start: layers[0].slice.index,
end: layers.last().slice.index,
iter: loops - 1
});
}
if (!isBelt || (loops && loops.length < 1)) {
loops = undefined;
for (let range of process.ranges) {
console.log({range});
if (range.fields.outputLoops) {
rloops.push({
start: range.lo,
end: range.hi,
iter: range.fields.outputLoops - 1
});
}
}
loops = isBelt && rloops.length ? rloops : undefined;
// if (isBelt && loops) {
// loops = loops.split(',').map(range => {
// return range.split('-').map(v => parseInt(v));
// }).filter(a => a.length > 1).map(a => {
// return {
// start: a[0],
// end: a[1] ? a[1] + 1 : Infinity,
// iter: a[2] >= 0 ? a[2] : 1
// }
// });
// }
// if (!isBelt || (loops && loops.length < 1)) {
// loops = undefined;
// }
(process.gcodePauseLayers || "").split(",").forEach(function(lv) {
let v = parseInt(lv);
@ -333,6 +356,7 @@
while (layer < layers.length) {
path = layers[layer];
layerno = path.slice.index;
// range overrides
if (path.layer >= 0) {
@ -366,15 +390,17 @@
appendAllSub(pauseCmd)
}
let endloop = false;
if (loops) {
if (inLoop) {
if (layer === inLoop.end) {
append(`M808`);
inLoop = undefined;
if (layerno === inLoop.end) {
endloop = true;
// append(`M808`);
// inLoop = undefined;
}
} else {
for (let loop of loops) {
if (layer === loop.start) {
if (layerno === loop.start) {
append(`M808 L${loop.iter}`);
if (extrudeAbs) {
append(`G92 Z${lout.z.round(decimals)} E${outputLength.round(decimals)}`);
@ -556,6 +582,12 @@
laste = out.emit;
}
layer++;
// end open loop when detected
if (endloop) {
append(`M808`);
inLoop = undefined;
}
}
drainQ();