From 9dbec25714735aedab70ac64d2b992bfb7f78a82 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 9 Oct 2022 15:54:53 -0400 Subject: [PATCH] fixes #217 belt fan override for base extrusions touching belt with the caveat that values over 0 are used. 0 is reserved, which makes sense in all other fields. fixing this requires the introduction of another checkbox and other ui code. for now, use 1 in place of 0 --- release.md | 3 ++- src/kiri-mode/fdm/client.js | 1 + src/kiri-mode/fdm/export.js | 30 +++++++++++++++++++++++++++++- src/kiri-mode/fdm/prepare.js | 3 ++- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/release.md b/release.md index 45db98ea..cdcb1ee7 100644 --- a/release.md +++ b/release.md @@ -5,7 +5,8 @@ Full docs @ https://docs.grid.space/projects/kiri-moto # Release 3.6 -* +* improve CAM animation speeds +* fix belt fan override for base extrusions touching belt # Release 3.5 (2022-10-07) diff --git a/src/kiri-mode/fdm/client.js b/src/kiri-mode/fdm/client.js index e4a22d91..3c4fdb88 100644 --- a/src/kiri-mode/fdm/client.js +++ b/src/kiri-mode/fdm/client.js @@ -45,6 +45,7 @@ FDM.init = function(kiri, api) { "sliceSolidMinArea": LANG.ad_msol_s, "firstLayerRate": LANG.fl_rate_s, "firstLayerPrintMult": LANG.fl_mult_s, + "firstLayerFanSpeed": LANG.ou_fans_s, // prepare "sliceShellOrder": LANG.sl_ordr_s, "sliceFillOverlap": LANG.fi_over_s, diff --git a/src/kiri-mode/fdm/export.js b/src/kiri-mode/fdm/export.js index f5df6c64..bd224e0e 100644 --- a/src/kiri-mode/fdm/export.js +++ b/src/kiri-mode/fdm/export.js @@ -79,6 +79,8 @@ FDM.export = function(print, online, ondone, ondebug) { extrudeSet = false, nozzleTemp = process.firstLayerNozzleTemp || process.outputTemp, bedTemp = process.firstLayerBedTemp || process.outputBedTemp, + fanSpeedSave = undefined, + fanSpeedBase = undefined, fanSpeed = undefined, lastType = undefined, lastNozzleTemp = nozzleTemp, @@ -95,6 +97,7 @@ FDM.export = function(print, online, ondone, ondebug) { temp: nozzleTemp, temp_bed: bedTemp, bed_temp: bedTemp, + fan_speed_base: fanSpeedBase, fan_speed: fanSpeed, speed: fanSpeed, // legacy top: offset.y ? bedDepth : bedDepth/2, @@ -133,9 +136,23 @@ FDM.export = function(print, online, ondone, ondebug) { } subst.tool_count = tools_used.length; + function setTempFanSpeed(tempSpeed) { + if (tempSpeed > 0) { + fanSpeedSave = fanSpeedSave >= 0 ? fanSpeedSave : fanSpeed; + fanSpeed = tempSpeed; + subst.fan_speed = fanSpeed; + subst.fan_speed_base = tempSpeed; + } else { + fanSpeed = fanSpeedSave >= 0 ? fanSpeedSave : fanSpeed + fanSpeedSave = undefined; + subst.fan_speed = fanSpeed; + subst.fan_speed_base = fanSpeedBase; + } + } + // smallish band-aid. refactor above to remove redundancy function updateParams(layer, params) { - // let params = getRangeParameters(process, layer); + // params = getRangeParameters(process, layer); zhop = params.zHopDistance || 0; // range retDist = params.outputRetractDist || 0; // range retSpeed = params.outputRetractSpeed * 60 || 1; // range @@ -147,6 +164,7 @@ FDM.export = function(print, online, ondone, ondebug) { bedTemp = layer === 0 ? params.firstLayerBedTemp || params.outputBedTemp : params.outputBedTemp || params.firstLayerBedTemp; + fanSpeedBase = params.firstLayerFanSpeed || 0; fanSpeed = layer === 0 ? params.firstLayerFanSpeed || 0 : params.outputFanSpeed || 0; @@ -154,6 +172,7 @@ FDM.export = function(print, online, ondone, ondebug) { temp_bed: bedTemp, bed_temp: bedTemp, fan_speed: fanSpeed, + fan_speed_base: fanSpeedBase, speed: fanSpeed, // legacy retract_speed: retSpeed, retract_distance: retDist, @@ -682,6 +701,15 @@ FDM.export = function(print, online, ondone, ondebug) { unretract(); } + // in belt mode, fan can change per segment (for base) + if (isBelt) { + setTempFanSpeed(out.fan); + if (fanSpeed !== lastFanSpeed) { + appendAllSub(gcodeFan); + lastFanSpeed = fanSpeed; + } + } + if (lastp && out.emit) { if (arcDist) { let rec = {e:out.emit, x, y, z, dist, emitPerMM, speedMMM}; diff --git a/src/kiri-mode/fdm/prepare.js b/src/kiri-mode/fdm/prepare.js index f6cc3df5..757556f0 100644 --- a/src/kiri-mode/fdm/prepare.js +++ b/src/kiri-mode/fdm/prepare.js @@ -693,8 +693,9 @@ FDM.prepare = function(widgets, settings, update) { } if (rec.emit && belty <= thresh && lastout && Math.abs(lastout.belty - belty) < 0.005) { // apply base speed to segments touching belt - rec.speed = Math.min(rec.speed, lowrate); + rec.speed = params.firstLayerRate || Math.min(rec.speed, lowrate); rec.emit *= bmult; + rec.fan = params.firstLayerFanSpeed; minx = Math.min(minx, point.x, lastout.point.x); maxx = Math.max(maxx, point.x, lastout.point.x); maxy = Math.max(maxy, point.y);