diff --git a/src/kiri/conf.js b/src/kiri/conf.js index d41c6dbd..43eecf9c 100644 --- a/src/kiri/conf.js +++ b/src/kiri/conf.js @@ -330,13 +330,13 @@ outputFanLayer: 1, outputRetractDist: 1.5, outputRetractSpeed: 40, + outputRetractWipe: 0, outputRetractDwell: 20, outputBrimCount: 2, outputBrimOffset: 2, outputShortPoly: 100.0, outputMinSpeed: 10.0, outputCoastDist: 0, - outputWipeDistance: 0, outputLayerRetract: false, outputOriginCenter: true, outputLoopLayers: "", diff --git a/src/kiri/init.js b/src/kiri/init.js index 986f3a06..3e50c115 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -1786,9 +1786,9 @@ advanced: UC.newGroup(LANG.ad_menu, null, {modes:FDM}), outputRetractDist: UC.newInput(LANG.ad_rdst_s, {title:LANG.ad_rdst_l, convert:UC.toFloat, modes:FDM}), outputRetractSpeed: UC.newInput(LANG.ad_rrat_s, {title:LANG.ad_rrat_l, convert:UC.toInt, modes:FDM}), + outputRetractWipe: UC.newInput(LANG.ad_wpln_s, {title:LANG.ad_wpln_l, bound:UC.bound(0.0,10), convert:UC.toFloat, modes:FDM}), outputRetractDwell: UC.newInput(LANG.ad_rdwl_s, {title:LANG.ad_rdwl_l, convert:UC.toInt, modes:FDM}), fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}), - // outputWipeDistance: UC.newInput("wipe", {title:"non-printing move at\close of polygon\nin millimeters", bound:UC.bound(0.0,10), convert:UC.toFloat, modes:FDM}), sliceSolidMinArea: UC.newInput(LANG.ad_msol_s, {title:LANG.ad_msol_l, convert:UC.toFloat, modes:FDM}), outputMinSpeed: UC.newInput(LANG.ad_mins_s, {title:LANG.ad_mins_l, bound:UC.bound(5,200), convert:UC.toFloat, modes:FDM}), outputShortPoly: UC.newInput(LANG.ad_spol_s, {title:LANG.ad_spol_l, bound:UC.bound(0,10000), convert:UC.toFloat, modes:FDM}), diff --git a/src/kiri/print.js b/src/kiri/print.js index 6ca50dc9..5d97b2c3 100644 --- a/src/kiri/print.js +++ b/src/kiri/print.js @@ -449,7 +449,6 @@ first = true, close = !options.open, last = startPoint, - wipeDist = options.wipe || 0, coastDist = options.coast || 0, tool = options.tool; @@ -525,10 +524,12 @@ origin = startPoint.add(offset), zhop = process.zHopDistance || 0, antiBacklash = process.antiBacklash, + wipeDist = process.outputRetractWipe || 0, doSupport = opt.support, isBelt = device.bedBelt, startClone = startPoint.clone(), - z = slice.z; + z = slice.z, + lastPoly; // apply first layer extrusion multipliers if (firstLayer) { @@ -538,12 +539,15 @@ } function retract() { - if (preout.length) { - preout.last().retract = true; - } else if (output.length) { - output.last().retract = true; + let array = preout.length ? preout : output; + if (array.length) { + let last = array.last(); + last.retract = true; + if (wipeDist && lastPoly && last.point) { + addOutput(array, last.point.followTo(lastPoly.center(true), wipeDist)); + } } else if (opt.pretract) { - opt.pretract(); + opt.pretract(wipeDist); } else { console.log('unable to retract. no preout or output'); } @@ -583,6 +587,7 @@ } } }); + lastPoly = output.lastPoly = poly; } } diff --git a/src/mode/fdm/export.js b/src/mode/fdm/export.js index 44da89a2..ea3a1d30 100644 --- a/src/mode/fdm/export.js +++ b/src/mode/fdm/export.js @@ -207,7 +207,6 @@ // console.log({double_retract: zhop}); return; } - // console.log({retract:zhop}); retracted = retDist; moveTo({e:-retracted}, retSpeed, `e-retract ${retDist}`); if (zhop) moveTo({z:zpos + zhop}, seekMMM, "z-hop start"); diff --git a/src/mode/fdm/prepare.js b/src/mode/fdm/prepare.js index f0690568..6fc963a9 100644 --- a/src/mode/fdm/prepare.js +++ b/src/mode/fdm/prepare.js @@ -403,9 +403,13 @@ first: slice.index === 0, support: slice.widget.support, onBelt: slice.onbelt, - pretract: () => { + pretract: (wipeDist) => { if (lastLayer && lastLayer.length) { - lastLayer.last().retract = true; + let lastOut = lastLayer.last(); + lastOut.retract = true; + if (wipeDist && lastLayer.lastPoly && lastOut.point) { + print.addOutput(lastLayer, lastOut.point.followTo(lastLayer.lastPoly.center(true), wipeDist)); + } } } } diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index bb307120..ead509dd 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -480,6 +480,8 @@ kiri.lang['en-us'] = { ad_rrat_s: "retract rate", ad_rrat_l: "speed of filament\nretraction in mm/s", ad_rdwl_s: "engage dwell", + ad_wpln_s: "retract wipe", + ad_wpln_l: "non-printing move\nafter retraction\nin millimeters", ad_rdwl_l: "time between re-engaging\nfilament and movement\nin milliseconds", ad_scst_s: "shell coast", ad_scst_l: "non-printing end\nof perimeter shells\nin millimeters",