diff --git a/src/kiri/mode/cam/op-helical.js b/src/kiri/mode/cam/op-helical.js index a75ea632..3458c45b 100644 --- a/src/kiri/mode/cam/op-helical.js +++ b/src/kiri/mode/cam/op-helical.js @@ -13,7 +13,8 @@ export class OpHelical extends CamOp { async slice(progress) { let { op, state } = this; - let { settings, addSlices, widget, updateToolDiams } = state; + let { addSlices, color, settings, updateToolDiams, widget } = state; + let { stock } = settings let { cylinders, forceStartAng, @@ -29,8 +30,6 @@ export class OpHelical extends CamOp { entry, entryOffset, } = op; - let { color } = state; - let { stock } = settings let tool = new Tool(settings, op.tool), toolDiam = tool.fluteDiameter(), @@ -240,10 +239,11 @@ export class OpHelical extends CamOp { } async prepare(ops, progress) { - let { polyEmit, printPoint, setTool } = ops; + let { clearTravelBounds, polyEmit, printPoint, setNextIsMove, setTool } = ops; let { tool, spindle, rate, feed } = this.op; setTool(tool, feed, rate); + clearTravelBounds(); let [ polys ] = this.sliceOut.map((s) => s.camLines); polys = polys.slice(); @@ -267,6 +267,7 @@ export class OpHelical extends CamOp { if (!closest) break; poly = polys[closestI] polys[closestI] = null; + printPoint = polyEmit(poly); } } diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index 322c79a5..2f51f51f 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -454,10 +454,9 @@ export async function prepare_one(widget, settings, print, firstPoint, update) { // * rapid to just above stock // * continue plunge as cut if (isMove && deltaZ < 0 && printPoint.z > stockZ && point.z < stockZ) { - if (debug) console.log('detected plunge cut as rapid move', printPoint.z, stockZ, point.z); + if (debug) console.log('detected plunge cut as rapid move', printPoint.z, point.z); layerPush(point.clone().setZ(zSafe), 0, 0, tool); // change to cutting move for remainder of plunge - emit = 1; newLayer(); } else // convert short planar moves to cuts when not lasering @@ -502,15 +501,16 @@ export async function prepare_one(widget, settings, print, firstPoint, update) { } lastTravelBounds = undefined; } else - // for longer moves, check the terrain to see if we need to go up and over + // for longer moves if (isMove) { const bigXY = (deltaXY > shortCut && !lasering); const bigZ = (absDeltaZ > toolDiam / 2 && deltaXY > tolerance); const midZ = (tolerance && absDeltaZ >= tolerance); + const inStock = printPoint.z < stockZ || point.z < stockZ; if (bigXY || bigZ || midZ) { if (debug) console.log({ fromz: printPoint.z, toz: point.z }); - // for big moves inside stock... - if (camForceZMax || printPoint.z < stockZ) { + // for big moves intersecting stock... + if (camForceZMax || inStock) { upAndOver = true; } } @@ -849,6 +849,7 @@ export async function prepare_one(widget, settings, print, firstPoint, update) { let ops = { addGCode, camOut, + clearTravelBounds() { setTravelBoundary() }, depthOutlinePath, emitDrills, emitTraces, @@ -866,6 +867,7 @@ export async function prepare_one(widget, settings, print, firstPoint, update) { setSpindle, setTolerance, setTool, + setTravelBoundary, tip2tipEmit, widget, zSafe,