From 9567a99fd9e4792d1cdf5b4daeca0fd93b4889f0 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 22 Sep 2025 00:09:41 -0400 Subject: [PATCH] fix thin wall retraction. remove point markers to allow codec between minion n worker --- src/kiri/mode/fdm/post.js | 12 +++++++++--- src/kiri/mode/fdm/prepare.js | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/kiri/mode/fdm/post.js b/src/kiri/mode/fdm/post.js index 21b7593c..655a569d 100644 --- a/src/kiri/mode/fdm/post.js +++ b/src/kiri/mode/fdm/post.js @@ -430,14 +430,13 @@ function trace_noodle(noodle, noodleWidth, minR, midR, maxR, opt = {}) { let parent = new Polygon(); let inner = []; for (let poly of insetp.flattenTo([])) { - let sno = poly.parent ? shell : -shell; // shell number (- for inner/hole) let nupoly = poly.parent ? new Polygon() : parent; if (poly.parent) { inner.push(nupoly); } let ltpo; let trace = []; - trace.shell = sno; + trace.shell = poly.parent ? shell : -shell; // shell number (- for inner/hole) poly.segment(minR, true).forEachSegment((p1, p2) => { let np1 = { x:(p1.x+p2.x)/2, y:(p1.y+p2.y)/2 }; let len = pointDist(p1, p2); @@ -511,7 +510,7 @@ function trace_noodle(noodle, noodleWidth, minR, midR, maxR, opt = {}) { // and adding that to the new trace traces.push(trace); let nutrace = [ trace.pop() ]; - nutrace.shell = sno; + nutrace.shell = trace.shell; // close last trace if endpoints near enough if (pointDist(ltpo, trace[0] <= maxR)) { trace.push(trace[0]); @@ -551,6 +550,13 @@ function trace_noodle(noodle, noodleWidth, minR, midR, maxR, opt = {}) { remain.push(...ret); } + // remove point.segment markers for codec encoding between minion and worker + for (let trace of traces) { + for (let pt of trace) { + delete pt.s; + } + } + return { lines, polys, remain, traces }; } diff --git a/src/kiri/mode/fdm/prepare.js b/src/kiri/mode/fdm/prepare.js index 8c1b7499..d2bb8897 100644 --- a/src/kiri/mode/fdm/prepare.js +++ b/src/kiri/mode/fdm/prepare.js @@ -1126,6 +1126,10 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) { } // remove emitted trace thin = thin.filter(t => t !== trace); + // retract if moving > retractDist + if (np && np.distTo2D(new Point(trace[0].x, trace[0].y)) > retractDist) { + retract(); + } for (let pt of trace) { np = new Point(pt.x, pt.y, z); if (pt === trace[0]) {