From 5dcbbdef104e38a410bd121a8161603cc177c871 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 21 Apr 2021 21:35:37 -0400 Subject: [PATCH] separate interior brims from side brims and make each configurable --- src/kiri/conf.js | 1 + src/kiri/init.js | 1 + src/mode/fdm/prepare.js | 32 ++++++++++++++++++++------------ web/kiri/lang/en.js | 6 ++++-- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/kiri/conf.js b/src/kiri/conf.js index 02201896..4608391b 100644 --- a/src/kiri/conf.js +++ b/src/kiri/conf.js @@ -316,6 +316,7 @@ firstLayerNozzleTemp: 0, firstLayerBedTemp: 0, firstLayerBrim: 0, + firstLayerBrimIn: 0, firstLayerBrimTrig: 0, firstLayerBrimComb: 0, firstLayerBrimGap: 0, diff --git a/src/kiri/init.js b/src/kiri/init.js index 7646b6db..68e67b11 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -1665,6 +1665,7 @@ firstLayerPrintMult: UC.newInput(LANG.fl_mult_s, {title:LANG.fl_mult_l, convert:UC.toFloat, modes:FDM}), fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isBelt}), firstLayerBrim: UC.newInput(LANG.fl_brim_s, {title:LANG.fl_brim_l, convert:UC.toInt, modes:FDM, show:isBelt}), + firstLayerBrimIn: UC.newInput(LANG.fl_brin_s, {title:LANG.fl_brin_l, convert:UC.toInt, modes:FDM, show:isBelt}), firstLayerBrimComb: UC.newInput(LANG.fl_brco_s, {title:LANG.fl_brco_l, convert:UC.toInt, modes:FDM, show:isBelt}), firstLayerBrimTrig: UC.newInput(LANG.fl_brmn_s, {title:LANG.fl_brmn_l, convert:UC.toInt, modes:FDM, show:isBelt}), firstLayerBrimGap: UC.newInput(LANG.fl_brgp_s, {title:LANG.fl_brgp_l, convert:UC.toFloat, modes:FDM, show:isBelt}), diff --git a/src/mode/fdm/prepare.js b/src/mode/fdm/prepare.js index 6f7c8186..62ad5c1a 100644 --- a/src/mode/fdm/prepare.js +++ b/src/mode/fdm/prepare.js @@ -508,6 +508,7 @@ for (let layer of output) { let params = getRangeParameters(settings, layer.layer || 0); let firstLayerBrim = params.firstLayerBrim; + let firstLayerBrimIn = params.firstLayerBrimIn; let firstLayerBrimTrig = params.firstLayerBrimTrig; let firstLayerBrimComb = params.firstLayerBrimComb; let firstLayerBrimGap = params.firstLayerBrimGap || 0; @@ -546,40 +547,47 @@ } let tmpout = []; let trigmet = firstLayerBrimTrig === 0 || (firstLayerBrimTrig && mins > firstLayerBrimTrig); + let brimax = Math.max(firstLayerBrim, firstLayerBrimIn); // add brim when all conditions met - if (firstLayerBrim && seqn <= firstLayerBrimComb && trigmet) { + if (brimax && seqn <= firstLayerBrimComb && trigmet) { let { emit, tool } = first; let y = maxy; let z = minz; let g = firstLayerBrimGap || 0; let b = Math.max(firstLayerBrim, 1) + g; + let bi = Math.max(firstLayerBrimIn, 1) + g; layer.last().retract = true; - print.addOutput(tmpout, newPoint(maxx + b, y, z), 0, firstLayerSeek, tool); - print.addOutput(tmpout, newPoint(maxx + g, y, z), emit, firstLayerRate, tool).retract = true; - - if (pads.length > 1) { + // outside brim + if (firstLayerBrim) { + print.addOutput(tmpout, newPoint(maxx + b, y, z), 0, firstLayerSeek, tool); + print.addOutput(tmpout, newPoint(maxx + g, y, z), emit, firstLayerRate, tool).retract = true; + } + // inside brim + if (firstLayerBrimIn && pads.length > 1) { let gaps = []; let lpad = pads[0]; for (let pad of pads.slice(1)) { let x0 = lpad[1]; let x1 = pad[0]; lpad = pad; - if (x1 - x0 > b * 2) { + if (x1 - x0 > bi * 2) { // over 2x brim so emit two segments print.addOutput(tmpout, newPoint(x1 - g, y, z), 0, firstLayerSeek, tool); - print.addOutput(tmpout, newPoint(x1 - b, y, z), emit, firstLayerRate, tool).retract = true; - print.addOutput(tmpout, newPoint(x0 + b, y, z), 0, firstLayerSeek, tool); + print.addOutput(tmpout, newPoint(x1 - bi, y, z), emit, firstLayerRate, tool).retract = true; + print.addOutput(tmpout, newPoint(x0 + bi, y, z), 0, firstLayerSeek, tool); print.addOutput(tmpout, newPoint(x0 + g, y, z), emit, firstLayerRate, tool).retract = true; - } else if (x1 - x0 > b / 3) { + } else if (x1 - x0 > bi / 3) { // over 1/3rd brim length emit single segment print.addOutput(tmpout, newPoint(x1 - g, y, z), 0, firstLayerSeek, tool); print.addOutput(tmpout, newPoint(x0 + g, y, z), emit, firstLayerRate, tool).retract = true; } } } - - print.addOutput(tmpout, newPoint(minx - b, y, z), 0, firstLayerSeek, tool); - print.addOutput(tmpout, newPoint(minx - g, y, z), emit, firstLayerRate, tool).retract = false; + // outside brim + if (firstLayerBrim) { + print.addOutput(tmpout, newPoint(minx - b, y, z), 0, firstLayerSeek, tool); + print.addOutput(tmpout, newPoint(minx - g, y, z), emit, firstLayerRate, tool).retract = false; + } if (firstLayerBrimComb) { seqn++; } diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 75bcd2f7..594fd5d6 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -310,8 +310,10 @@ kiri.lang['en-us'] = { // FDM BELT ONLY fl_zoff_s: "belt offset", fl_zoff_l: ["height offset from belt","of lowest extrusion","in millimeters"], - fl_brim_s: "brim width", - fl_brim_l: ["add brim to part bottom","size is width in millimeters","0 to disable"], + fl_brim_s: "brim sides", + fl_brim_l: ["add brim to part perimeter","size is width in millimeters","0 to disable"], + fl_brin_s: "brim interior", + fl_brin_l: ["add brim to part interior","when interior voids exist","size is width in millimeters","0 to disable"], fl_brmn_s: "brim trigger", fl_brmn_l: ["add brims only when segment","facing belt is shorter than this","value in millimeters","0 = Infinity"], fl_brco_s: "brim comb",