From 90c5db97eb204f0ddefc69ebed412c7068c89889 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 24 Feb 2021 15:19:26 -0500 Subject: [PATCH] experimental extension of ease-down --- src/mode/cam/ops.js | 18 +++++++++++++----- src/mode/cam/prepare.js | 20 ++++++++++++++++---- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/mode/cam/ops.js b/src/mode/cam/ops.js index f43667d7..4d0e0ce3 100644 --- a/src/mode/cam/ops.js +++ b/src/mode/cam/ops.js @@ -311,8 +311,10 @@ let { polyEmit, poly2polyEmit, depthRoughPath } = ops; let { camOut, newLayer, printPoint } = ops; let { settings, widget } = state; - let { process } = settings; + let { process, controller } = settings; + let danger = controller.danger; + let easeDown = process.camEaseDown; let cutdir = process.camConventional; let depthFirst = process.camDepthFirst; let depthData = []; @@ -372,7 +374,9 @@ // return POLY.nest(level.filter(poly => poly.depth === 0)); return POLY.nest(level.filter(poly => poly.depth === 0).clone()); }); - printPoint = depthRoughPath(printPoint, 0, depthData, tops, polyEmit); + // experimental start of ease down + let ease = danger && op.down && easeDown ? op.down : 0; + printPoint = depthRoughPath(printPoint, 0, depthData, tops, polyEmit, false, ease); // printPoint = depthRoughPath(printPoint, 0, depthData, tops, (poly, index, count, start) => { // console.log({z: poly.getZ(), i: poly.id, index, poly}); // return polyEmit(poly, index, count, start); @@ -542,8 +546,10 @@ let { polyEmit, poly2polyEmit, depthOutlinePath } = ops; let { camOut, newLayer, printPoint } = ops; let { settings, widget } = state; - let { process } = settings; + let { process, controller } = settings; + let danger = controller.danger; + let easeDown = process.camEaseDown; let toolDiam = this.toolDiam; let cutdir = process.camConventional; let depthFirst = process.camDepthFirst; @@ -592,8 +598,10 @@ printPoint = flatLevels[0] .sort((a,b) => { return a.area() - b.area() })[0] .average(); - printPoint = depthOutlinePath(printPoint, 0, flatLevels, toolDiam, polyEmit, false); - printPoint = depthOutlinePath(printPoint, 0, flatLevels, toolDiam, polyEmit, true); + // experimental start of ease down + let ease = danger && op.down && easeDown ? op.down : 0; + printPoint = depthOutlinePath(printPoint, 0, flatLevels, toolDiam, polyEmit, false, ease); + printPoint = depthOutlinePath(printPoint, 0, flatLevels, toolDiam, polyEmit, true, ease); } } diff --git a/src/mode/cam/prepare.js b/src/mode/cam/prepare.js index b4fc4b3a..a5ebc0f3 100644 --- a/src/mode/cam/prepare.js +++ b/src/mode/cam/prepare.js @@ -414,7 +414,7 @@ return last; } - function depthRoughPath(start, depth, levels, tops, emitter, fit) { + function depthRoughPath(start, depth, levels, tops, emitter, fit, ease) { let level = levels[depth]; if (!level) { return start; @@ -424,13 +424,19 @@ fitted.filter(top => !top.level_emit).forEach(top => { top.level_emit = true; let inside = level.filter(poly => poly.isInside(top)); + if (ease) { + start.z += ease; + } start = poly2polyEmit(inside, start, emitter, { mark: "emark", perm: true }); - start = depthRoughPath(start, depth + 1, levels, tops, emitter, top); + if (ease) { + start.z += ease; + } + start = depthRoughPath(start, depth + 1, levels, tops, emitter, top, ease); }); return start; } - function depthOutlinePath(start, depth, levels, radius, emitter, clr) { + function depthOutlinePath(start, depth, levels, radius, emitter, clr, ease) { let bottm = depth < levels.length - 1 ? levels[levels.length - 1] : null; let above = levels[depth-1]; let level = levels[depth]; @@ -458,8 +464,14 @@ // omit polys that match bottom level polys unless level above is cleared start = poly2polyEmit(level, start, (poly, index, count, fromPoint) => { poly.level_emit = true; + if (ease) { + fromPoint.z += ease; + } fromPoint = polyEmit(poly, index, count, fromPoint); - fromPoint = depthOutlinePath(fromPoint, depth + 1, levels, radius, emitter, clr); + if (ease) { + fromPoint.z += ease; + } + fromPoint = depthOutlinePath(fromPoint, depth + 1, levels, radius, emitter, clr, ease); return fromPoint; }, {weight: true}); return start;