diff --git a/src/kiri/print.js b/src/kiri/print.js index be7d99a3..6ca50dc9 100644 --- a/src/kiri/print.js +++ b/src/kiri/print.js @@ -538,7 +538,15 @@ } function retract() { - if (preout.length) preout.last().retract = true; + if (preout.length) { + preout.last().retract = true; + } else if (output.length) { + output.last().retract = true; + } else if (opt.pretract) { + opt.pretract(); + } else { + console.log('unable to retract. no preout or output'); + } } function intersectsTop(p1, p2) { diff --git a/src/mode/fdm/prepare.js b/src/mode/fdm/prepare.js index f2200066..f0690568 100644 --- a/src/mode/fdm/prepare.js +++ b/src/mode/fdm/prepare.js @@ -218,6 +218,7 @@ } } + let lastLayer; let extruders = []; let extcount = 0; @@ -391,21 +392,24 @@ if (!lastOut || lastOut.extruder !== slice.extruder) { printPoint = purge(slice.extruder, track, layerout, printPoint, slice.z); } - let tmpout = []; let wtb = slice.widget.track.box; // output seek to start point between mesh slices if previous data printPoint = print.slicePrintPath( slice, isBelt ? newPoint(-wtb.w, wtb.d * 2, 0) : printPoint.sub(offset), offset, - tmpout, //layerout, + layerout, { first: slice.index === 0, support: slice.widget.support, - onBelt: slice.onbelt + onBelt: slice.onbelt, + pretract: () => { + if (lastLayer && lastLayer.length) { + lastLayer.last().retract = true; + } + } } ); - layerout.appendAll(tmpout); lastOut = slice; lastExt = lastOut.ext if (layerRetract && layerout.length) { @@ -435,6 +439,7 @@ layerout.layer = layerno++; update((layerno / cake.length) * 0.5, "prepare"); + lastLayer = layerout; slices = []; layerout = []; lastOut = undefined;