From 448fbb3757d901ad288522192be9b9a60d61e9df Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Thu, 3 Dec 2020 09:06:03 -0500 Subject: [PATCH] fix stock colliding moves outside part bounds --- notes.md | 2 ++ src/mode/cam/slice.js | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/notes.md b/notes.md index 6c511505..dd1079a8 100644 --- a/notes.md +++ b/notes.md @@ -11,6 +11,8 @@ # - split gcode output # - double-sided assistance # - redo path planning +# - more tracing types (in, out, clear, pocket) +# - trace re-ordering # `fdm` # - redo automatic supports using faces instead of deltas # - bind process to z ranges or boxed regions diff --git a/src/mode/cam/slice.js b/src/mode/cam/slice.js index 9f00381e..464016a0 100644 --- a/src/mode/cam/slice.js +++ b/src/mode/cam/slice.js @@ -58,7 +58,8 @@ camRoughStock = proc.camRoughStock, camRoughDown = proc.camRoughDown, minStepDown = Math.min(1, roughDown/3, outlineDown/3), - maxToolDiam = 0, + minToolDiam = Infinity, + maxToolDiam = -Infinity, thruHoles, tabs = settings.widget[widget.id].tab; @@ -129,6 +130,11 @@ onupdate((opSum/opsTot) + (index/total) * opTot, msg || opOn[0]); } + function updateToolDiams(toolDiam) { + minToolDiam = Math.min(minToolDiam, toolDiam); + maxToolDiam = Math.max(maxToolDiam, toolDiam); + } + let mark = Date.now(); let slicer = new KIRI.slicer2(widget.getPoints(), { zlist: true, @@ -189,7 +195,7 @@ let center = tshadow[0].bounds.center(); if (procDrillReg) { - maxToolDiam = Math.max(maxToolDiam, drillToolDiam); + updateToolDiams(drillToolDiam); sliceDrillReg(settings, sliceAll, zThru); } @@ -222,7 +228,7 @@ // create roughing slices if (procRough) { nextOp(); - maxToolDiam = Math.max(maxToolDiam, roughToolDiam); + updateToolDiams(roughToolDiam); let flats = []; let shadow = []; @@ -380,7 +386,7 @@ nextOp(); let outlineTool = new CAM.Tool(conf, proc.camOutlineTool); let outlineToolDiam = outlineTool.fluteDiameter(); - maxToolDiam = Math.max(maxToolDiam, outlineToolDiam); + updateToolDiams(outlineToolDiam); let shadow = []; let slices = []; @@ -522,12 +528,12 @@ .setLayer("trace", {line: 0xaa00aa}, false) .addPolys(slice.topPolys()) sliceAll.push(slice); - maxToolDiam = Math.max(maxToolDiam, traceToolDiam); + updateToolDiams(traceToolDiam); }); } if (procDrill) { - maxToolDiam = Math.max(maxToolDiam, drillToolDiam); + updateToolDiams(drillToolDiam); sliceDrill(drillTool, tslices, sliceAll); } @@ -549,7 +555,13 @@ }); }); } + + // add shadow perimeter to terrain to catch outside moves off part + let shadowOff = POLY.offset(shadowTop.tops, minToolDiam / 2); + terrain.forEach(level => level.tops.appendAll(shadowOff)); + widget.terrain = terrain; + widget.minToolDiam = minToolDiam; widget.maxToolDiam = maxToolDiam; ondone();