fix brim offset=0, dup point output, deferred wipe, file name increments
This commit is contained in:
parent
956e192b6e
commit
45628dd52c
4 changed files with 62 additions and 16 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
1
notes.md
1
notes.md
|
|
@ -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?)
|
||||
|
|
|
|||
Loading…
Reference in a new issue