From 6c0d804f8c9930e28b00847997a7cf94cbf3b5a4 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 10 Feb 2020 23:43:20 -0500 Subject: [PATCH] use fingerprint idea to speed up sparse fill --- js/kiri-slice.js | 36 ++++++++++++++++++++++++++---------- notes.md | 1 + 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/js/kiri-slice.js b/js/kiri-slice.js index 36d07862..a5bfbe8c 100644 --- a/js/kiri-slice.js +++ b/js/kiri-slice.js @@ -660,6 +660,16 @@ var gs_kiri_slice = exports; polys.appendAll(top.solids); }); + scope.fingerprint = fingerprint(polys); + if (scope.down && scope.down.fingerprint && samefinger(scope.down.fingerprint, scope.fingerprint)) { + for (let i=0; i { + return poly.clone().setZ(scope.z); + }); + } + return; + } + clip.AddPaths(lines, ptyp.ptSubject, false); clip.AddPaths(POLY.toClipper(polys), ptyp.ptClip, true); @@ -674,7 +684,6 @@ var gs_kiri_slice = exports; }); }); } - }; /** @@ -708,6 +717,21 @@ var gs_kiri_slice = exports; return out; } + function samefinger(a, b) { + if (a.length !== b.length) { + return false; + } + for (let i=0; i 0.001) { + return false; + } + if (Math.abs(a[i+1] - b[i+1]) > 0.0001) { + return false; + } + } + return true; + } + function samesame(a, b) { if (a === b) { return true; @@ -720,15 +744,7 @@ var gs_kiri_slice = exports; } let fingerA = fingerprint(a), fingerB = fingerprint(b); - for (let i=0; i 0.001) { - return false; - } - if (Math.abs(fingerA[i+1] - fingerB[i+1]) > 0.0001) { - return false; - } - } - return true; + return samefinger(fingerA, fingerB); } /** diff --git a/notes.md b/notes.md index a2722419..0660d93a 100644 --- a/notes.md +++ b/notes.md @@ -14,6 +14,7 @@ # FDM todo +* fingerprint layer once and re-use for infill and layer diffs * first layer segment large flat areas for better fill reliability * adaptive column to compensate for fine or layers that finish too quickly and melt * apply finish speed to exposed top and underside flat areas