From 65f5244d6d07e987aae8da553d075a4c224d9f11 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 14 Jan 2018 21:49:45 -0500 Subject: [PATCH] checkpoint raft work --- js/kiri-driver-fdm.js | 25 +++++++++++++++++-------- js/kiri-print.js | 5 +---- notes.md | 1 + 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/js/kiri-driver-fdm.js b/js/kiri-driver-fdm.js index 714a5c97..1d476d21 100644 --- a/js/kiri-driver-fdm.js +++ b/js/kiri-driver-fdm.js @@ -193,7 +193,8 @@ var gs_kiri_fdm = exports; // create brim, skirt, raft if specificed in FDM mode (code shared by laser) if (process.outputBrimCount || process.outputRaft) { - var brims = []; + var brims = [], + offset = process.outputBrimOffset || (process.outputRaft ? 4 : 0); // compute first brim widgets.forEach(function(widget) { @@ -204,7 +205,7 @@ var gs_kiri_fdm = exports; }); // nest and offset tops POLY.nest(tops).forEach(function(poly) { - poly.offset(-process.outputBrimOffset + nozzle / 2).forEach(function(brim) { + poly.offset(-offset + nozzle / 2).forEach(function(brim) { brim.move(widget.mesh.position); brims.push(brim); }); @@ -215,7 +216,7 @@ var gs_kiri_fdm = exports; brims = POLY.union(brims); // if brim is offset, the expand and shrink to cause brims to merge - if (process.outputBrimOffset && brims.length) { + if (offset && brims.length) { var extra = process.sliceSupportExtra + 2; brims = POLY.expand(brims, extra, 0, null, 1); brims = POLY.expand(brims, -extra, 0, null, 1); @@ -226,9 +227,14 @@ var gs_kiri_fdm = exports; var offset = newPoint(0,0,0), height = nozzle; + // cause first point of raft to be used + printPoint = null; + var raft = function(height, angle, spacing, speed, extrude) { var slice = kiri.newSlice(zoff + height / 2); brims.forEach(function(brim) { + // use first point of first brim as start point + if (printPoint === null) printPoint = brim.first(); var t = slice.addTop(brim); t.traces = [ brim ]; t.inner = POLY.expand(t.traces, -nozzle * 0.5, 0, null, 1); @@ -241,14 +247,15 @@ var gs_kiri_fdm = exports; }); layerout.height = height; output.append(layerout); + layerout = []; zoff += height; }; - raft(nozzle/1, process.sliceFillAngle + 90, nozzle * 3.5, process.firstLayerRate / 3, 3.5); - raft(nozzle/1, process.sliceFillAngle + 90, nozzle * 3.5, process.firstLayerRate / 3, 3.5); - raft(nozzle/3, process.sliceFillAngle + 22.5, nozzle * 0.5, process.firstLayerRate / 1, 0.5); - raft(nozzle/3, process.sliceFillAngle + 22.5, nozzle * 0.5, process.firstLayerRate / 1, 0.5); + raft(nozzle/1, process.sliceFillAngle + 90, nozzle * 4.0, process.firstLayerRate / 3, 3.5); + // raft(nozzle/1, process.sliceFillAngle + 90, nozzle * 3.5, process.firstLayerRate / 3, 3.5); + raft(nozzle/3, process.sliceFillAngle + 22.5, nozzle * 0.6, process.firstLayerRate / 2, 0.5); + raft(nozzle/3, process.sliceFillAngle + 22.5, nozzle * 0.6, process.firstLayerRate / 2, 0.5); // raise first layer off raft slightly to lessen adhesion firstLayerHeight += nozzle / 6; @@ -332,7 +339,9 @@ var gs_kiri_fdm = exports; layerout, { // wipe after last layer or between widgets - wipeAfter: (found > 1 && slices.length > 1) || (found === 1 && layer == maxLayers-1) + wipeAfter: (found > 1 && slices.length > 1) || (found === 1 && layer == maxLayers-1), + // only use first layer settings in the absence of a raft + first: closest.slice.index === 0 && !process.outputRaft } ); lastIndex = minidx; diff --git a/js/kiri-print.js b/js/kiri-print.js index 6e2bf72a..d8bf7c8d 100644 --- a/js/kiri-print.js +++ b/js/kiri-print.js @@ -387,9 +387,6 @@ 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, emit: emit, le: lastEmit})); - // } lastPoint = point; lastEmit = emit; array.push(new Output(point, emit, speed, tool)); @@ -483,7 +480,7 @@ var gs_kiri_print = exports; settings = this.settings, process = settings.process, nozzle = settings.device.nozzleSize, - firstLayer = slice.index === 0, + firstLayer = opt.first || false, minSeek = nozzle * 1.5, thinWall = nozzle * 1.75, fillMult = opt.mult || process.outputFillMult, diff --git a/notes.md b/notes.md index d0528bba..5277edc5 100644 --- a/notes.md +++ b/notes.md @@ -59,6 +59,7 @@ # FDM todo +* fix slow seek to first point (raft) and wrong first point in general (all modes) * add lay-flat auto-rotation or from selected face * determine start point from gcode preamble * add rafts, manual supports