From a26b02a4f007be8fa9a461912df979d235001a76 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 22 Mar 2020 20:05:04 -0400 Subject: [PATCH] cull polish lines under model --- js/geo-point.js | 4 ++++ js/kiri-driver-fdm.js | 30 +++++++++++++++++++++++++++--- js/kiri-slicer.js | 13 ++++++++----- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/js/geo-point.js b/js/geo-point.js index 71623152..62e68333 100644 --- a/js/geo-point.js +++ b/js/geo-point.js @@ -318,6 +318,10 @@ var gs_base_point = exports; return BASE.newLine(np1, np2, KEYS.NONE); }; + PRO.offset = function(x, y, z) { + return newPoint(this.x + x, this.y + y, this.z + z); + }; + /** * checks if a point is inside of a polygon * does not check children/holes diff --git a/js/kiri-driver-fdm.js b/js/kiri-driver-fdm.js index fe723b26..3562fa99 100644 --- a/js/kiri-driver-fdm.js +++ b/js/kiri-driver-fdm.js @@ -221,21 +221,45 @@ var gs_kiri_fdm = exports; let polys = []; pa.forEach(p => { + // rotate and test for self-intersection (points under model) + p.ensureXY(); + let ox = p._aligned == 'yz' ? 0.1 : 0; + let oy = p._aligned == 'yz' ? 0 : 0.1; + p.forEachPoint(pt => { + let int = p.intersections( + pt.offset(ox,oy,0), + pt.offset(ox*10000,oy*10000,0)); + if (int.length > 0) { + pt._under = true; + } + }); + p.restoreXY(); + let lastp = undefined; let poly = []; + // look for qualifying segments p.forEachSegment((p1, p2) => { - // return when both below + // eliminate segments that projected up + // intersect with the polygon (bottom faces) + if (p1._under || p2._under) { + return; + } + // skip when both below layer range if (p1.z < zb && p2.z < zb) { return; } - // return when both above + // skip when both above layer range if (p1.z > zt && p2.z > zt) { return; } - // return when vertical + // skip vertical if (p1.x === p2.x && p1.y === p2.y) { return; } + // skip horizontal + // if (p1.z === p2.z) { + // return; + // } // order points lowest to highest let swap = false; if (p1.z > p2.z) { diff --git a/js/kiri-slicer.js b/js/kiri-slicer.js index d4f82774..ea900ac1 100644 --- a/js/kiri-slicer.js +++ b/js/kiri-slicer.js @@ -11,7 +11,8 @@ var gs_kiri_slicer = exports; var slicer = self.kiri.slicer = { slice: slice, - sliceWidget: sliceWidget + sliceWidget: sliceWidget, + connectLines: connectLines }; var KIRI = self.kiri, @@ -489,11 +490,13 @@ var gs_kiri_slicer = exports; if (topoMode) { var lines = slice.lines, llen = lines.length, idx, line; // shared points causing problems - for (idx=0; idx longest.length) longest = path; if (!path.open) closed++; else open++;