diff --git a/src/geo/slicer.js b/src/geo/slicer.js index 3ce82017..88e575c5 100644 --- a/src/geo/slicer.js +++ b/src/geo/slicer.js @@ -565,6 +565,11 @@ export function sliceConnect(input, z, opt = {}) { // emit a polygon if it can be cleaned and still have 2 or more points function emit(poly) { + let gap = poly.first().distTo2D(poly.last()); + if (opt.strict && gap > bridgeMax) { + if (debug) console.log('drop', gap, poly); + return; + } emitted += poly.length; if (!opt.dirty) poly = poly.clean(); if (poly.length > 2 || true) output.push(poly); diff --git a/src/kiri/mode/fdm/slice.js b/src/kiri/mode/fdm/slice.js index b6505093..2a99d529 100644 --- a/src/kiri/mode/fdm/slice.js +++ b/src/kiri/mode/fdm/slice.js @@ -222,6 +222,7 @@ export function fdm_slice(settings, widget, onupdate, ondone) { } slice(points, { + strict: true, debug: process.xray, xray: process.xray, zMin: bounds.min.z, diff --git a/src/kiri/mode/laser/driver.js b/src/kiri/mode/laser/driver.js index c097bfa4..daedf895 100644 --- a/src/kiri/mode/laser/driver.js +++ b/src/kiri/mode/laser/driver.js @@ -191,6 +191,7 @@ function laser_slice(settings, widget, onupdate, ondone) { let indices = []; slicer.slice(points, { + strict: true, zMin: bounds.min.z, zMax: bounds.max.z, zGen(zopt) {