diff --git a/src/kiri/mode/cam/op-area.js b/src/kiri/mode/cam/op-area.js index 938be92f..0e53839f 100644 --- a/src/kiri/mode/cam/op-area.js +++ b/src/kiri/mode/cam/op-area.js @@ -115,7 +115,7 @@ class OpArea extends CamOp { let pinc = 1 / polys.length; for (let area of polys) { let bounds = area.getBounds3D(); - let ts_off = toolDiam / 2 - ts_eps; + let ts_off = toolDiam / 2 - ts_eps + (op.leave_xy ?? 0); let offopt = { arc: 250, join: roundSharps ? ClipperLib.JoinType.jtRound : undefined, diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index e7acbe44..eba21399 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -484,14 +484,15 @@ export async function prepare_one(widget, settings, print, firstPoint, update) { } } else // check move against a known boundary (pocketing) - if (isMove && travelBounds) { + if (isMove && (travelBounds || lastTravelBounds)) { // travel boundary "hangover" from last area op when traveling between - let check = lastTravelBounds ? [...lastTravelBounds, ...travelBounds] : travelBounds; + let check = []; + if (travelBounds) check.push(...travelBounds); + if (lastTravelBounds) check.push(...lastTravelBounds); + let from = toWidgetCoords(printPoint); + let to = toWidgetCoords(point); for (let poly of check) { - let ints = poly.intersections( - toWidgetCoords(printPoint), - toWidgetCoords(point) - ); + let ints = poly.intersections(from, to); if (ints.length) { if (debug) console.log({ ints, poly, deltaXY, deltaZ }); upAndOver = "bounds";