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
* `B` fix supports for belt printing
* `F` hide layer lines under print
# 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}),
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}),
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}),
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}),
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_sfac_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}),
firstLayerBrim: UC.newInput(LANG.fl_brim_s, {title:LANG.fl_brim_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}),

View file

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

View file

@ -292,8 +292,25 @@
if (isBelt) {
offset.x = rotinfo.xpos;
offset.y = -belt.midy;
offset.y += rotinfo.ypos * beltfact;// - 0.5;
offset.y += 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 {
// when rafts used this is non-zero
offset.z = zoff;
@ -382,7 +399,8 @@
tmpout, //layerout,
{
first: slice.index === 0,
support: slice.widget.support
support: slice.widget.support,
onBelt: slice.onbelt
}
);
layerout.appendAll(tmpout);
@ -431,8 +449,7 @@
}
}
// correct y offset to desired layer offset
let miny = process.firstLayerYOffset;
// console.log({minby, miny, firstLayerHeight});
let miny = process.firstLayerYOffset || 0;
for (let layer of output) {
for (let rec of layer) {
let point = rec.point;

View file

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