split polishing into x and y passes

This commit is contained in:
Stewart Allen 2020-03-05 18:36:12 -05:00
commit fa92a3065d
4 changed files with 40 additions and 20 deletions

View file

@ -164,11 +164,14 @@ var gs_kiri_fdm = exports;
let polish = spro.layerPolishing; let polish = spro.layerPolishing;
// experimental polishing // experimental polishing
if (polish) { if (polish) {
let polish_layer = Math.floor(polish);
let polish_step = Math.max(polish - polish_layer || 1, 0.25);
widget.polish = {}; widget.polish = {};
let pa = []; let px = [];
let py = [];
// compute x polishing slices // compute x polishing slices
SLICER.sliceWidget(widget, { SLICER.sliceWidget(widget, {
height: sdev.nozzleSize, height: sdev.nozzleSize * polish_step,
swapX: true, swapX: true,
swapY: false, swapY: false,
simple: true simple: true
@ -176,13 +179,13 @@ var gs_kiri_fdm = exports;
widget.polish.x = polish_done widget.polish.x = polish_done
.filter(s => s.groups.length) .filter(s => s.groups.length)
.map(s => s.groups) .map(s => s.groups)
.forEach(p => pa.appendAll(p)); .forEach(p => px.appendAll(p));
}), (polish_update) => { }), (polish_update) => {
// console.log({polish_update}); // console.log({polish_update});
}); });
// compute y polishing slices // compute y polishing slices
SLICER.sliceWidget(widget, { SLICER.sliceWidget(widget, {
height: sdev.nozzleSize, height: sdev.nozzleSize * polish_step,
swapX: false, swapX: false,
swapY: true, swapY: true,
simple: true simple: true
@ -190,21 +193,24 @@ var gs_kiri_fdm = exports;
widget.polish.y = polish_done widget.polish.y = polish_done
.filter(s => s.groups.length) .filter(s => s.groups.length)
.map(s => s.groups) .map(s => s.groups)
.forEach(p => pa.appendAll(p)); .forEach(p => py.appendAll(p));
}), (polish_update) => { }), (polish_update) => {
// console.log({polish_update}); // console.log({polish_update});
}); });
// apply polishing finishes to layers // apply polishing finishes to layers
forSlices(1.0, 1.0, slice => { forSlices(1.0, 1.0, slice => {
if (slice.index >= polish) { if (slice.index >= polish_layer) {
let sd = slice; let sd = slice;
for (let i=0; i<polish; i++) { for (let i=0; i<polish_layer; i++) {
sd = sd.down; sd = sd.down;
} }
let zb = sd.z; let zb = sd.z;
let zt = slice.z; let zt = slice.z;
let polys = []; let pout = [];
let cont = 0; let cont = 0;
[px, py].forEach(pa => {
let polys = [];
pa.forEach(p => { pa.forEach(p => {
let lastp = undefined; let lastp = undefined;
let poly = []; let poly = [];
@ -288,10 +294,20 @@ var gs_kiri_fdm = exports;
polys.push(poly); polys.push(poly);
} }
}); });
if (polys.length && slice.tops.length) { pout.push(polys);
slice.tops[0].polish = polys polys = [];
});
if (pout.length && slice.tops.length) {
slice.tops[0].polish = {
x: pout[0]
.map(a => BASE.newPolygon(a).setOpen()) .map(a => BASE.newPolygon(a).setOpen())
.filter(p => p.perimeter() > sdev.nozzleSize); .filter(p => p.perimeter() > sdev.nozzleSize),
y: pout[1]
.map(a => BASE.newPolygon(a).setOpen())
.filter(p => p.perimeter() > sdev.nozzleSize)
};
} }
} }
}); });
@ -766,7 +782,8 @@ var gs_kiri_fdm = exports;
continue; continue;
} }
var x = out.point.x, var x = out.point.x,
y = out.point.y; y = out.point.y,
z = out.point.z;
// adjust for inversions and offsets // adjust for inversions and offsets
if (process.outputInvertX) x = -x; if (process.outputInvertX) x = -x;
@ -795,7 +812,7 @@ var gs_kiri_fdm = exports;
moveTo({x:x, y:y, e:emitMM}, speedMMM); moveTo({x:x, y:y, e:emitMM}, speedMMM);
emitted += emitMM; emitted += emitMM;
} else { } else {
moveTo({x:x, y:y}, seekMMM); moveTo({x:x, y:y, z:z}, seekMMM);
} }
// retract filament // retract filament

View file

@ -803,10 +803,13 @@ var gs_kiri_print = exports;
}); });
// produce polishing paths when present // produce polishing paths when present
if (slice.tops.length) { if (slice.tops.length && slice.tops[0].polish) {
let polish = slice.tops[0].polish; let {x,y} = slice.tops[0].polish;
if (polish) { if (x) {
outputSparse(polish, 0); outputSparse(x, 0);
}
if (y) {
outputSparse(y, 0);
} }
} }

View file

@ -553,7 +553,8 @@ var gs_kiri_slice = exports;
layer.poly(top.traces, trace_color, true, null); layer.poly(top.traces, trace_color, true, null);
} }
if (top.polish) { if (top.polish) {
layer.poly(top.polish, 0x880000, true, null); layer.poly(top.polish.x, 0x880000, true, null);
layer.poly(top.polish.y, 0x880000, true, null);
} }
}); });

View file

@ -1102,7 +1102,6 @@ modPaths.forEach(fn => {
handler.use(fullpath({ handler.use(fullpath({
"/meta/index.html" : redir("/meta/"), "/meta/index.html" : redir("/meta/"),
"/kiri/index.html" : redir("/kiri/"), "/kiri/index.html" : redir("/kiri/"),
"/kiri)" : redir("/kiri/"),
"/meta" : remap("/meta/index.html"), "/meta" : remap("/meta/index.html"),
"/meta/" : remap("/meta/index.html"), "/meta/" : remap("/meta/index.html"),
"/kiri" : remap("/kiri/index.html"), "/kiri" : remap("/kiri/index.html"),