fix brim offset=0, dup point output, deferred wipe, file name increments

This commit is contained in:
Stewart Allen 2017-12-07 12:37:49 -05:00
commit 45628dd52c
4 changed files with 62 additions and 16 deletions

View file

@ -206,7 +206,7 @@ var gs_kiri_fdm = exports;
tops.push(top.poly.clone());
});
POLY.nest(tops).forEach(function(poly) {
poly.offset(-process.outputBrimOffset).forEach(function(brim) {
poly.offset(-process.outputBrimOffset+device.nozzleSize/2).forEach(function(brim) {
brim.move(widget.mesh.position);
brims.push(brim);
});
@ -270,7 +270,9 @@ var gs_kiri_fdm = exports;
progress = 0,
distance = 0,
emitted = 0,
retracted = 0,
pos = {x:0, y:0, z:0, f:0},
last = null,
zinc = process.sliceHeight,
zpos = zinc * process.firstLayerHeight,
offset = process.outputOriginCenter ? null : {
@ -289,7 +291,7 @@ var gs_kiri_fdm = exports;
bottom: offset ? 0 : -device.bedDepth/2,
z_max: device.maxHeight
},
fillBridgeDist = device.nozzleSize * 2,
glideBridgeDist = device.nozzleSize * 2,
shortDist = process.outputShortDistance,
shortFact = process.outputShortFactor,
maxPrintMMM = process.outputFeedrate * 60,
@ -382,7 +384,13 @@ var gs_kiri_fdm = exports;
if (comment) {
o.append(" ; ").append(comment);
}
append(o.join(''));
var line = o.join('');
if (last == line) {
// console.log({dup:line});
return;
}
last = line;
append(line);
}
// calc total distance traveled by head as proxy for progress
@ -427,6 +435,10 @@ var gs_kiri_fdm = exports;
dist = lastp ? lastp.distTo2D(out.point) : 0;
distance += dist;
progress = Math.round((distance / totaldistance) * 100);
if (out.emit && retracted) {
moveTo({e:retracted}, retSpeed, "engage (ooze control)");
retracted = 0;
}
if (lastp && out.emit) {
var outMMM = printMMM,
emitMM = emitPerMM * out.emit * dist;
@ -452,14 +464,13 @@ var gs_kiri_fdm = exports;
if (out.speed) {
moveMMM = out.speed * 60;
}
if (laste && retOver > 0.0 && dist > retOver) {
//
moveTo({e:-retDist}, retSpeed, "ooze retract");
if (out.retract || (laste && retOver > 0.0 && dist > retOver)) {
retracted = retDist;
moveTo({e:-retracted}, retSpeed, "retract (ooze control)");
moveTo({x:x, y:y}, moveMMM);
moveTo({e:retDist}, retSpeed, "re-engage");
} else if (lastp && dist <= fillBridgeDist) {
var e = (layer === 0 ? emitPerMMLayer1 : emitPerMM) * dist;
moveTo({x:x, y:y, e:e}, outMMM);
// } else if (lastp && dist <= glideBridgeDist) {
// var e = (layer === 0 ? emitPerMMLayer1 : emitPerMM) * dist;
// moveTo({x:x, y:y, e:e}, outMMM);
} else {
moveTo({x:x, y:y}, moveMMM);
}

View file

@ -217,7 +217,16 @@ var gs_kiri_print = exports;
newlayer = [];
newout.push(newlayer);
layerout.forEach(function(out) {
if (out.point) newlayer.push({emit:out.emit, speed:out.speed, point:{x:out.point.x, y:out.point.y, z:out.point.z}});
if (out.point) {
// used for presentation only. can drop non-essential
// data to speed up worker -> browser transfer
newlayer.push({
emit: out.emit,
// speed: out.speed,
// retract: out.retract,
point: {x: out.point.x, y: out.point.y, z: out.point.z}
});
}
});
});
return newout;
@ -308,6 +317,9 @@ var gs_kiri_print = exports;
if (lastPoint && point.x == lastPoint.x && point.y == lastPoint.y && point.z == lastPoint.z && lastEmit == emit) {
return;
}
if (lastPoint && UTIL.round(point.x,4) == UTIL.round(lastPoint.x,4) && UTIL.round(point.y,4) == UTIL.round(lastPoint.y,4)) {
console.log(({dup:point, last:lastPoint}));
}
lastPoint = point;
lastEmit = emit;
array.push(new Output(point, emit, speed, tool));
@ -376,7 +388,8 @@ var gs_kiri_print = exports;
var closest = poly.findClosestPointTo(startPoint),
distance = wipeDistance,
last = startPoint;
last = startPoint,
steps = 0;
if (!distance) return;
@ -391,6 +404,7 @@ var gs_kiri_print = exports;
distance -= last.distTo2D(point);
}
last = point;
if (steps++ === 0) preout.last().retract = true;
}
}, true, closest.index);
@ -419,7 +433,8 @@ var gs_kiri_print = exports;
if (!paths || paths.length !== 2) return;
var path = paths[0].perimeter() < paths[1].perimeter() ? paths[0] : paths[1];
if (p1.distTo2D(path.first() > p1.distTo2D(path.last()))) path.reverse();
routes.push(path);
// cull phantom and short paths
if (path.perimeter() > 0.1) routes.push(path);
});
// sort bisecting paths by those closest to start point (p1)
routes.sort((function(o1, o2) {
@ -536,6 +551,8 @@ var gs_kiri_print = exports;
}
var all = [].appendAll(slice.supports || []).appendAll(slice.tops || []);
var wipe = null;
var lastTop = null;
outputOrderClosest(all || [], function(next) {
if (next instanceof Polygon) {
// support polygon
@ -545,13 +562,27 @@ var gs_kiri_print = exports;
next.fills.forEach(function(p) { p.z = z });
outputFills(next.fills, next.inner);
}
// lastTop = null;
} else {
if (lastTop && lastTop !== next && wipe) {
outputWipe(wipe);
wipe = null;
}
// top object
var bounds = POLY.flatten(next.gatherOuter([]));
outputTraces([].appendAll(next.traces).appendAll(next.innerTraces() || []), bounds);
outputFills(next.fill_lines, bounds);
outputSparse(next.fill_sparse, bounds);
outputWipe(next.traces.last());
if (next.inner) {
wipe = next.inner.last();
// best to use inner offset for wipe
// outputWipe(next.inner.last());
} else {
wipe = next.traces.last();
// otherwise fall back to innermost trace
// outputWipe(next.traces.last());
}
lastTop = next;
}
}, function(obj) {
return obj instanceof Polygon ? obj : obj.poly;

View file

@ -452,6 +452,7 @@ self.kiri.license = exports.LICENSE;
sliced_opacity = 0.0,
sliced_opacity_cam = 0.25,
// ---------------
printSeq = parseInt(SDB['print-seq'] || "0") + 1,
catalogSize = 0,
showLayerRange = 0,
showLayerValue = 0,
@ -935,7 +936,9 @@ self.kiri.license = exports.LICENSE;
KIRI.serial.setGCode(gcode, currentPrint.bounds);
}
var pre = MODE === MODES.CAM ? "cnc" : "print",
SDB['print-seq'] = printSeq++;
var pre = (MODE === MODES.CAM ? "cnc-" : "print-") + (printSeq.toString().padStart(3,"0")),
filename = pre,// + (new Date().getTime().toString(36)),
fileext = settings.device.gcodeFExt || "gcode",
octo_host,
@ -1060,7 +1063,7 @@ self.kiri.license = exports.LICENSE;
function download() {
filename = $('print-filename').value;
saveAs(getBlob(), filename+"."+fileext);
saveAs(getBlob(), filename + "." + fileext);
}
function pad(v) {

View file

@ -59,6 +59,7 @@
# FDM todo
* add lay-flat auto-rotation
* add dashed poly output on first connected brim (when offset === 0)
* implement gyroid infill * https://en.wikipedia.org/wiki/Gyroid
* fan / layer control * update forum
* infill rendering as moves instead of extrusions (firefox?)