diff --git a/src/geo/polygons.js b/src/geo/polygons.js index 3466ca30..61d0dffa 100644 --- a/src/geo/polygons.js +++ b/src/geo/polygons.js @@ -40,6 +40,8 @@ const POLYS = base.polygons = { route, union, inset, + outer, + inner, nest, diff, setZ, @@ -53,6 +55,23 @@ const POLYS = base.polygons = { fingerprint }; +function outer(polys) { + for (let p of polys) { + p.inner = undefined; + } + return polys; +} + +function inner(polys) { + const ret = []; + for (let p of polys) { + if (p.inner) { + ret.push(p.inner); + } + } + return ret; +} + function length(polys) { let length = 0; for (let p of polys) { diff --git a/src/kiri-mode/cam/ops.js b/src/kiri-mode/cam/ops.js index 06a3ffce..145a2359 100644 --- a/src/kiri-mode/cam/ops.js +++ b/src/kiri-mode/cam/ops.js @@ -117,7 +117,7 @@ class OpLevel extends CamOp { updateToolDiams(toolDiam); let points = []; - let clear = POLY.offset(tshadow, toolDiam * (op.over || 0)); + let clear = POLY.outer(POLY.offset(tshadow, toolDiam * (op.over || 0))); // let tabsub = []; // POLY.subtract(clear, POLY.offset(tabs.map(t => t.poly), toolDiam/2), tabsub, []); POLY.fillArea(clear, 90, stepOver, points);