diff --git a/src/kiri/conf.js b/src/kiri/conf.js index 31223651..6e8acd7f 100644 --- a/src/kiri/conf.js +++ b/src/kiri/conf.js @@ -261,6 +261,7 @@ bedHeight: 2.5, bedRound: false, bedBelt: false, + fwRetract: false, originCenter: false, maxHeight: 150, gcodePre: [], diff --git a/src/kiri/init.js b/src/kiri/init.js index 850d1469..63b258cd 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -740,6 +740,7 @@ UI.deviceBelt.checked = dev.bedBelt; UI.deviceRound.checked = dev.bedRound; UI.deviceOrigin.checked = dev.outputOriginCenter || dev.originCenter; + UI.fwRetract.checked = dev.fwRetract; // add extruder selection buttons if (dev.extruders) { @@ -781,6 +782,7 @@ UI.deviceOrigin, UI.deviceRound, UI.deviceBelt, + UI.fwRetract, UI.gcodeFan, UI.gcodeTrack, UI.gcodeLayer, @@ -1586,6 +1588,7 @@ deviceOrigin: UC.newBoolean(LANG.dv_orgc_s, onBooleanClick, {title:LANG.dv_orgc_l, modes:FDM_LASER_SLA}), deviceRound: UC.newBoolean(LANG.dv_bedc_s, onBooleanClick, {title:LANG.dv_bedc_l, modes:FDM, trigger:true, show:isNotBelt}), deviceBelt: UC.newBoolean(LANG.dv_belt_s, onBooleanClick, {title:LANG.dv_belt_l, modes:FDM, trigger:true, show:() => !UI.deviceRound.checked}), + fwRetract: UC.newBoolean(LANG.dv_retr_s, onBooleanClick, {title:LANG.dv_retr_l, modes:FDM}), extruder: UC.newGroup(LANG.dv_gr_ext, $('device2'), {group:"dext", inline:true, modes:FDM}), extFilament: UC.newInput(LANG.dv_fila_s, {title:LANG.dv_fila_l, convert:UC.toFloat, modes:FDM}), diff --git a/src/kiri/main.js b/src/kiri/main.js index 334ff7ac..7ca2eb44 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -2224,6 +2224,7 @@ settings.device.bedBelt = UI.deviceBelt.checked; settings.device.bedRound = UI.deviceRound.checked; settings.device.originCenter = UI.deviceOrigin.checked; + settings.device.fwRetract = UI.fwRetract.checked; SDB.setItem('ws-settings', JSON.stringify(settings)); API.event.emit('settings.saved', settings); } diff --git a/src/kiri/print.js b/src/kiri/print.js index a85ea48b..4588705f 100644 --- a/src/kiri/print.js +++ b/src/kiri/print.js @@ -348,6 +348,13 @@ pos[tok.charAt(0)] = parseFloat(tok.substring(1)); }); break; + case 'G10': + console.log('retract'); + seq.last().retract = true; + break; + case 'G11': + console.log('unretract'); + break; case 'G0': G0G1(true, line); break; diff --git a/src/mode/fdm/export.js b/src/mode/fdm/export.js index 987bfa31..652b1e57 100644 --- a/src/mode/fdm/export.js +++ b/src/mode/fdm/export.js @@ -22,6 +22,7 @@ gcodeLayer = device.gcodeLayer, gcodeTrack = device.gcodeTrack, tool = 0, + fwRetract = device.fwRetract, isDanger = settings.controller.danger, isBelt = device.bedBelt, bedType = isBelt ? "belt" : "fixed", @@ -238,7 +239,11 @@ return; } retracted = retDist; - moveTo({e:-retracted}, retSpeed, `e-retract ${retDist}`); + if (fwRetract) { + append('G10'); + } else { + moveTo({e:-retracted}, retSpeed, `e-retract ${retDist}`); + } if (zhop) moveTo({z:zpos + zhop}, seekMMM, "z-hop start"); time += (retDist / retSpeed) * 60 * 2; // retraction time } @@ -440,7 +445,11 @@ // when enabled, resume previous Z if (zhop && pos.z != zpos) moveTo({z:zpos}, seekMMM, "z-hop end"); // re-engage retracted filament - moveTo({e:retracted}, retSpeed, `e-engage ${retracted}`); + if (fwRetract) { + append('G11'); + } else { + moveTo({e:retracted}, retSpeed, `e-engage ${retracted}`); + } retracted = 0; // optional dwell after re-engaging filament to allow pressure to build if (retDwell) dwell(retDwell); diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 68714f46..5ccefaa0 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -102,6 +102,8 @@ kiri.lang['en-us'] = { dv_bedc_l: "device bed is circular", dv_belt_s: "belt bed", dv_belt_l: "continuous printing bed", + dv_retr_s: "firmware retract", + dv_retr_l: ["device fimware supports G10/G11"], dv_fanp_s: "fan power", dv_fanp_l: "set cooling fan power", dv_prog_s: "progress",