From 4fc4b3da5437ec84fbe683c451d79fb4d2587e68 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 15 Dec 2024 15:14:59 -0500 Subject: [PATCH] allow poly offset closer to 0 for pocket ops --- src/geo/polygons.js | 4 ++-- src/kiri-mode/cam/ops.js | 5 +++-- src/kiri-mode/cam/slice.js | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/geo/polygons.js b/src/geo/polygons.js index f85bee40..57d1ce77 100644 --- a/src/geo/polygons.js +++ b/src/geo/polygons.js @@ -345,10 +345,10 @@ function flatten(polys, to, crush) { * @returns {Polygon[]} out */ function subtract(setA, setB, outA, outB, z, minArea, opt = {}) { - let min = minArea || 0.1, + let min = numOrDefault(minArea, 0.1), out = []; - function filter(from, to = []) { + function filter(from, to = []) { from.forEach(function(poly) { if (poly.area() >= min) { to.push(poly); diff --git a/src/kiri-mode/cam/ops.js b/src/kiri-mode/cam/ops.js index 3571dd37..8f5f586c 100644 --- a/src/kiri-mode/cam/ops.js +++ b/src/kiri-mode/cam/ops.js @@ -1220,6 +1220,7 @@ class OpPocket extends CamOp { return slice; } function clearZ(polys, z, down) { + console.log({ clearZ: polys }); if (down) { // adjust step down to a value <= down that // ends on the lowest z specified @@ -1251,7 +1252,7 @@ class OpPocket extends CamOp { if (smooth) { shadow = POLY.setZ(POLY.offset(POLY.offset(shadow, smooth), -smooth), z); } - POLY.subtract([ poly ], shadow, clip); + POLY.subtract([ poly ], shadow, clip, undefined, undefined, 0); } if (clip.length === 0) { continue; @@ -1264,7 +1265,7 @@ class OpPocket extends CamOp { [ expand || (-0.02), -toolOver ] : [ -toolDiam / 2, -toolOver ]; POLY.offset(clip, offs, { - count, outs: slice.camLines = [], flat:true, z + count, outs: slice.camLines = [], flat:true, z, minArea: 0 }); } else { // when engraving with a 0 width tip diff --git a/src/kiri-mode/cam/slice.js b/src/kiri-mode/cam/slice.js index 8e9edcec..c33402fc 100644 --- a/src/kiri-mode/cam/slice.js +++ b/src/kiri-mode/cam/slice.js @@ -281,7 +281,7 @@ CAM.slice = async function(settings, widget, onupdate, ondone) { let tabpoly = tabs ? tabs.map(tab => tab.poly) : []; let allpoly = POLY.union([...state.shadowTop.tops, ...tabpoly, ...state.shadowTop.slice.shadow], 0, true); let shadowOff = maxToolDiam < 0 ? allpoly : - POLY.offset(allpoly, [minToolDiam/2,maxToolDiam/2], { count: 2, flat: true }); + POLY.offset(allpoly, [minToolDiam/2,maxToolDiam/2], { count: 2, flat: true, minArea: 0 }); state.terrain.forEach(level => level.tops.appendAll(shadowOff)); widget.terrain = state.skipTerrain ? null : state.terrain;