From cc1f466aa7059a524050e8efd595c498580c5e74 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 21 Jan 2021 15:28:38 -0500 Subject: [PATCH] add brim trigger threshold. disable first layer anchor (for now) --- src/kiri/conf.js | 1 + src/kiri/init.js | 1 + src/mode/fdm/prepare.js | 30 ++++++++++++++++++++---------- src/mode/fdm/slice.js | 3 ++- web/kiri/lang/en.js | 12 ++++++++---- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/kiri/conf.js b/src/kiri/conf.js index 12eb7115..0bef439a 100644 --- a/src/kiri/conf.js +++ b/src/kiri/conf.js @@ -310,6 +310,7 @@ firstLayerNozzleTemp: 0, firstLayerBedTemp: 0, firstLayerBrim: 0, + firstLayerBrimTrig: 0, outputRaft: false, outputRaftSpacing: 0.2, outputTemp: 200, diff --git a/src/kiri/init.js b/src/kiri/init.js index a5a6b70a..b954f2cf 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -1629,6 +1629,7 @@ firstLayerLineMult: UC.newInput(LANG.fl_sfac_s, {title:LANG.fl_sfac_l, convert:UC.toFloat, bound:UC.bound(0.5,2), modes:FDM, show:isNotBelt}), firstLayerPrintMult: UC.newInput(LANG.fl_mult_s, {title:LANG.fl_mult_l, convert:UC.toFloat, modes:FDM}), firstLayerBrim: UC.newInput(LANG.fl_brim_s, {title:LANG.fl_brim_l, convert:UC.toFloat, modes:FDM, show:isBelt}), + firstLayerBrimTrig: UC.newInput(LANG.fl_brmn_s, {title:LANG.fl_brmn_l, convert:UC.toFloat, modes:FDM, show:isBelt}), fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}), outputBrimCount: UC.newInput(LANG.fl_skrt_s, {title:LANG.fl_skrt_l, convert:UC.toInt, modes:FDM, show:isNotBelt}), outputBrimOffset: UC.newInput(LANG.fl_skro_s, {title:LANG.fl_skro_l, convert:UC.toFloat, modes:FDM, show:isNotBelt}), diff --git a/src/mode/fdm/prepare.js b/src/mode/fdm/prepare.js index f2bc0da7..63d7b99b 100644 --- a/src/mode/fdm/prepare.js +++ b/src/mode/fdm/prepare.js @@ -34,6 +34,7 @@ firstLayerRate = process.firstLayerRate, firstLayerMult = process.firstLayerPrintMult, firstLayerBrim = process.firstLayerBrim, + firstLayerBrimTrig = process.firstLayerBrimTrig, maxLayers = 0, layer = 0, zoff = 0, @@ -447,10 +448,10 @@ } // correct y offset to desired layer offset let miny = process.firstLayerYOffset || 0; + let poff = minby - miny; for (let layer of output) { for (let rec of layer) { - let point = rec.point; - point.y += minby - miny; + rec.point.y += poff; } } let thresh = firstLayerHeight * 1.05; @@ -459,19 +460,28 @@ for (let layer of output) { let lastout, first = false; let minz = Infinity, maxy = -Infinity, minx = Infinity, maxx = -Infinity; - for (let out of layer) { - let point = out.point; - let belty = out.belty = -point.y + point.z * bfactor; - if (out.emit && belty <= thresh && lastout && lastout.belty <= thresh) { - out.speed = firstLayerRate; - out.emit *= firstLayerMult; + let mins = Infinity; + let miny = Infinity; + for (let rec of layer) { + let point = rec.point; + let belty = rec.belty = -point.y + point.z * bfactor; + miny = Math.min(miny, belty); + if (rec.emit && belty <= thresh && lastout && Math.abs(lastout.belty - belty) < 0.005) { + rec.speed = firstLayerRate; + rec.emit *= firstLayerMult; minx = Math.min(minx, point.x, lastout.point.x); maxx = Math.max(maxx, point.x, lastout.point.x); maxy = Math.max(maxy, point.y); minz = Math.min(minz, point.z); - first = out; + first = rec; + // find length of shortest bed-facing segment + mins = Math.min(mins, lastout.point.distTo2D(rec.point)); } - lastout = out; + lastout = rec; + } + // skip if brig trigger not met + if (firstLayerBrimTrig && mins > firstLayerBrimTrig) { + continue; } // add brim, if specified if (first && firstLayerBrim) { diff --git a/src/mode/fdm/slice.js b/src/mode/fdm/slice.js index c248115a..17406b53 100644 --- a/src/mode/fdm/slice.js +++ b/src/mode/fdm/slice.js @@ -509,7 +509,8 @@ shellout += top.shells.length; // add anchor extrusion if missing on the first belt layer - if (opt.belt0 && top.shells.length === 0 && slice.up && slice.up.tops.length) { + // todo: fix. disabled because throws off layer min y calculations in some cases + if (false && opt.belt0 && top.shells.length === 0 && slice.up && slice.up.tops.length) { for (let up of slice.up.tops) { let bounds = up.poly.bounds, midy = (bounds.miny + bounds.maxy) / 2; diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index fa658e8e..ed85d6d0 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -213,10 +213,6 @@ kiri.lang['en-us'] = { fl_mult_l: "extrusion multiplier\n0.0 - 2.0", fl_sfac_s: "width factor", fl_sfac_l: "multiplier on nozzle size\nchanges line spacing", - fl_zoff_s: "layer offset", - fl_zoff_l: "height offset from belt\nof lowest extrusion\nin millimeters", - fl_brim_s: "brim size", - fl_brim_l: "add brim to part bottom\nsize is width in millimeters\n0 to disable", fl_skrt_s: "skirt count", fl_skrt_l: "number of first-layer offset\nbrims to generate", fl_skro_s: "skirt offset", @@ -230,6 +226,14 @@ kiri.lang['en-us'] = { fr_nabl_s: "raft enable", fr_nabl_l: "create a raft under the\nmodel for better adhesion\nuses skirt offset and\ndisables skirt output", + // FDM BELT ONLY + fl_zoff_s: "layer offset", + fl_zoff_l: "height offset from belt\nof lowest extrusion\nin millimeters", + fl_brim_s: "brim size", + fl_brim_l: "add brim to part bottom\nsize is width in millimeters\n0 to disable", + fl_brmn_s: "brim trigger", + fl_brmn_l: "add brims only when segment\nfacing belt is shorter than this\nvalue in millimeters\n0 = Infinity", + // FDM SUPPORT sp_menu: "support", sp_detect: "detect",