fix stock colliding moves outside part bounds

This commit is contained in:
Stewart Allen 2020-12-03 09:06:03 -05:00
commit 448fbb3757
2 changed files with 20 additions and 6 deletions

View file

@ -11,6 +11,8 @@
# - split gcode output # - split gcode output
# - double-sided assistance # - double-sided assistance
# - redo path planning # - redo path planning
# - more tracing types (in, out, clear, pocket)
# - trace re-ordering
# `fdm` # `fdm`
# - redo automatic supports using faces instead of deltas # - redo automatic supports using faces instead of deltas
# - bind process to z ranges or boxed regions # - bind process to z ranges or boxed regions

View file

@ -58,7 +58,8 @@
camRoughStock = proc.camRoughStock, camRoughStock = proc.camRoughStock,
camRoughDown = proc.camRoughDown, camRoughDown = proc.camRoughDown,
minStepDown = Math.min(1, roughDown/3, outlineDown/3), minStepDown = Math.min(1, roughDown/3, outlineDown/3),
maxToolDiam = 0, minToolDiam = Infinity,
maxToolDiam = -Infinity,
thruHoles, thruHoles,
tabs = settings.widget[widget.id].tab; tabs = settings.widget[widget.id].tab;
@ -129,6 +130,11 @@
onupdate((opSum/opsTot) + (index/total) * opTot, msg || opOn[0]); 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 mark = Date.now();
let slicer = new KIRI.slicer2(widget.getPoints(), { let slicer = new KIRI.slicer2(widget.getPoints(), {
zlist: true, zlist: true,
@ -189,7 +195,7 @@
let center = tshadow[0].bounds.center(); let center = tshadow[0].bounds.center();
if (procDrillReg) { if (procDrillReg) {
maxToolDiam = Math.max(maxToolDiam, drillToolDiam); updateToolDiams(drillToolDiam);
sliceDrillReg(settings, sliceAll, zThru); sliceDrillReg(settings, sliceAll, zThru);
} }
@ -222,7 +228,7 @@
// create roughing slices // create roughing slices
if (procRough) { if (procRough) {
nextOp(); nextOp();
maxToolDiam = Math.max(maxToolDiam, roughToolDiam); updateToolDiams(roughToolDiam);
let flats = []; let flats = [];
let shadow = []; let shadow = [];
@ -380,7 +386,7 @@
nextOp(); nextOp();
let outlineTool = new CAM.Tool(conf, proc.camOutlineTool); let outlineTool = new CAM.Tool(conf, proc.camOutlineTool);
let outlineToolDiam = outlineTool.fluteDiameter(); let outlineToolDiam = outlineTool.fluteDiameter();
maxToolDiam = Math.max(maxToolDiam, outlineToolDiam); updateToolDiams(outlineToolDiam);
let shadow = []; let shadow = [];
let slices = []; let slices = [];
@ -522,12 +528,12 @@
.setLayer("trace", {line: 0xaa00aa}, false) .setLayer("trace", {line: 0xaa00aa}, false)
.addPolys(slice.topPolys()) .addPolys(slice.topPolys())
sliceAll.push(slice); sliceAll.push(slice);
maxToolDiam = Math.max(maxToolDiam, traceToolDiam); updateToolDiams(traceToolDiam);
}); });
} }
if (procDrill) { if (procDrill) {
maxToolDiam = Math.max(maxToolDiam, drillToolDiam); updateToolDiams(drillToolDiam);
sliceDrill(drillTool, tslices, sliceAll); 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.terrain = terrain;
widget.minToolDiam = minToolDiam;
widget.maxToolDiam = maxToolDiam; widget.maxToolDiam = maxToolDiam;
ondone(); ondone();