mark layers as touching / not-touching belt and route paths accordingly. add 'b' back view hot-key

This commit is contained in:
Stewart Allen 2021-01-16 16:56:37 -05:00
commit b6cb6cde87
5 changed files with 32 additions and 10 deletions

View file

@ -51,7 +51,6 @@
# FDM - BELT # FDM - BELT
* `B` fix supports for belt printing * `B` fix supports for belt printing
* `F` hide layer lines under print
# CAM # CAM

View file

@ -1603,13 +1603,13 @@
firstLayerNozzleTemp:UC.newInput(LANG.fl_nozl_s, {title:LANG.fl_nozl_l, convert:UC.toInt, modes:FDM, show:isNotBelt}), firstLayerNozzleTemp:UC.newInput(LANG.fl_nozl_s, {title:LANG.fl_nozl_l, convert:UC.toInt, modes:FDM, show:isNotBelt}),
firstLayerBedTemp: UC.newInput(LANG.fl_bedd_s, {title:LANG.fl_bedd_l, convert:UC.toInt, modes:FDM, show:isNotBelt}), firstLayerBedTemp: UC.newInput(LANG.fl_bedd_s, {title:LANG.fl_bedd_l, convert:UC.toInt, modes:FDM, show:isNotBelt}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}), fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}),
firstLayerYOffset: UC.newInput(LANG.fl_zoff_s, {title:LANG.fl_zoff_l, convert:UC.toFloat, modes:FDM, show:isBelt}),
firstLayerRate: UC.newInput(LANG.fl_rate_s, {title:LANG.fl_rate_l, convert:UC.toFloat, modes:FDM}), firstLayerRate: UC.newInput(LANG.fl_rate_s, {title:LANG.fl_rate_l, convert:UC.toFloat, modes:FDM}),
firstLayerFillRate: UC.newInput(LANG.fl_frat_s, {title:LANG.fl_frat_l, convert:UC.toFloat, modes:FDM, show:isNotBelt}), firstLayerFillRate: UC.newInput(LANG.fl_frat_s, {title:LANG.fl_frat_l, convert:UC.toFloat, modes:FDM, show:isNotBelt}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}), fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}),
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}), 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}), firstLayerPrintMult: UC.newInput(LANG.fl_mult_s, {title:LANG.fl_mult_l, convert:UC.toFloat, modes:FDM}),
firstLayerBrim: UC.newInput(LANG.fl_sfac_s, {title:LANG.fl_brim_l, convert:UC.toFloat, modes:FDM, show:isBelt}), firstLayerBrim: UC.newInput(LANG.fl_brim_s, {title:LANG.fl_brim_l, convert:UC.toFloat, modes:FDM, show:isBelt}),
firstLayerYOffset: UC.newInput(LANG.fl_zoff_s, {title:LANG.fl_zoff_l, convert:UC.toFloat, modes:FDM, show:isBelt}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}), 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}), 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}), outputBrimOffset: UC.newInput(LANG.fl_skro_s, {title:LANG.fl_skro_l, convert:UC.toFloat, modes:FDM, show:isNotBelt}),

View file

@ -749,9 +749,11 @@
break; break;
} }
// optimize start point on belt for all tops // optimize start point on belt for tops touching belt
if (isBelt) { // and enforce optimal shell order (outer first)
if (isBelt && opt.onBelt) {
startPoint = startClone; startPoint = startClone;
shellOrder = 1;
} }
// top object // top object

View file

@ -292,8 +292,25 @@
if (isBelt) { if (isBelt) {
offset.x = rotinfo.xpos; offset.x = rotinfo.xpos;
offset.y = -belt.midy; offset.y = -belt.midy;
offset.y += rotinfo.ypos * beltfact;// - 0.5; offset.y += rotinfo.ypos * beltfact;
offset.z = rotinfo.ypos * beltfact; offset.z = rotinfo.ypos * beltfact;
// locate the lowest point in slices and widget overall
let minby = Infinity;
for (let slice of widget.slices) {
slice.minby = Infinity;
for (let top of slice.tops) {
let poly = top.poly;
for (let point of poly.points) {
let ypos = -point.y + point.z * bfactor;
slice.minby = Math.min(slice.minby, ypos);
minby = Math.min(minby, ypos);
}
}
}
// flag slices as being on or off the bed / belt
for (let slice of widget.slices) {
slice.onbelt = Math.abs(minby - slice.minby) < 0.01;
}
} else { } else {
// when rafts used this is non-zero // when rafts used this is non-zero
offset.z = zoff; offset.z = zoff;
@ -382,7 +399,8 @@
tmpout, //layerout, tmpout, //layerout,
{ {
first: slice.index === 0, first: slice.index === 0,
support: slice.widget.support support: slice.widget.support,
onBelt: slice.onbelt
} }
); );
layerout.appendAll(tmpout); layerout.appendAll(tmpout);
@ -431,8 +449,7 @@
} }
} }
// correct y offset to desired layer offset // correct y offset to desired layer offset
let miny = process.firstLayerYOffset; let miny = process.firstLayerYOffset || 0;
// console.log({minby, miny, firstLayerHeight});
for (let layer of output) { for (let layer of output) {
for (let rec of layer) { for (let rec of layer) {
let point = rec.point; let point = rec.point;

View file

@ -645,6 +645,10 @@
Space.view.front(); Space.view.front();
cycleInd = 0; cycleInd = 0;
break; break;
case cca('b'):
Space.view.back();
cycleInd = 2;
break;
case cca('>'): case cca('>'):
cycleInd = (++cycleInd % cycle.length); cycleInd = (++cycleInd % cycle.length);
cycle[cycleInd](); cycle[cycleInd]();