From 3252a420795603dfbd1f37971758bf878dceead0 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 10 Oct 2022 19:24:16 -0400 Subject: [PATCH] change the way contouring uses tool diameter and offset --- src/kiri-mode/cam/client.js | 2 +- src/kiri-mode/cam/ops.js | 16 ++++++++++++---- src/kiri-mode/cam/tool.js | 4 ++-- src/kiri-mode/cam/topo.js | 8 ++++---- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/kiri-mode/cam/client.js b/src/kiri-mode/cam/client.js index 66d4778a..1fe3f477 100644 --- a/src/kiri-mode/cam/client.js +++ b/src/kiri-mode/cam/client.js @@ -1151,7 +1151,7 @@ CAM.init = function(kiri, api) { tool: UC.newSelect(LANG.cc_tool, {}, "tools"), sep: UC.newBlank({class:"pop-sep"}), spindle: UC.newInput(LANG.cc_spnd_s, {title:LANG.cc_spnd_l, convert:UC.toInt, show:hasSpindle}), - step: UC.newInput(LANG.cc_sovr_s, {title:LANG.cc_sovr_l, convert:UC.toFloat, bound:UC.bound(0.01,1.0), show:() => !(poppedRec.engrave && poppedRec.contour)}), + step: UC.newInput(LANG.cc_sovr_s, {title:LANG.cc_sovr_l, convert:UC.toFloat, bound:UC.bound(0.01,1.0)}), down: UC.newInput(LANG.cc_sdwn_s, {title:LANG.cc_sdwn_l, convert:UC.toFloat, units:true, show:() => !(poppedRec.engrave && poppedRec.contour)}), rate: UC.newInput(LANG.cc_feed_s, {title:LANG.cc_feed_l, convert:UC.toInt, units:true}), plunge: UC.newInput(LANG.cc_plng_s, {title:LANG.cc_plng_l, convert:UC.toInt, units:true}), diff --git a/src/kiri-mode/cam/ops.js b/src/kiri-mode/cam/ops.js index 441bd367..eaa8f5d2 100644 --- a/src/kiri-mode/cam/ops.js +++ b/src/kiri-mode/cam/ops.js @@ -1008,8 +1008,11 @@ class OpPocket extends CamOp { down = diff / Math.ceil(diff / down); } let zs = down ? base.util.lerp(zTop, z, down) : [ z ]; + if (engrave) { + toolDiam = toolOver; + } if (contour) { - expand = toolOver; + expand = engrave ? 0 : toolOver; } if (expand) { polys = POLY.offset(polys, expand); @@ -1037,9 +1040,14 @@ class OpPocket extends CamOp { let slice = newSliceOut(z); let count = engrave ? 1 : 999; slice.camTrace = { tool, rate, plunge }; - POLY.offset(clip, [ -toolDiam / 2, -toolOver ], { - count, outs: slice.camLines = [], flat:true, z - }); + if (toolDiam) { + POLY.offset(clip, [ -toolDiam / 2, -toolOver ], { + count, outs: slice.camLines = [], flat:true, z + }); + } else { + // when engraving with a 0 width tip + slice.camLines = clip; + } if (tabs) { slice.camLines = cutTabs(tabs, POLY.flatten(slice.camLines, null, true), z); } else { diff --git a/src/kiri-mode/cam/tool.js b/src/kiri-mode/cam/tool.js index 7a6b80b1..5e1fc200 100644 --- a/src/kiri-mode/cam/tool.js +++ b/src/kiri-mode/cam/tool.js @@ -70,11 +70,11 @@ class Tool { } isBallMill() { - return this.type === "ballmill"; + return this.tool.type === "ballmill"; } isTaperMill() { - return this.type === "tapermill"; + return this.tool.type === "tapermill"; } generateProfile(resolution) { diff --git a/src/kiri-mode/cam/topo.js b/src/kiri-mode/cam/topo.js index 91ee9183..6640a364 100644 --- a/src/kiri-mode/cam/topo.js +++ b/src/kiri-mode/cam/topo.js @@ -155,10 +155,10 @@ class Topo { return toolAtZ(px, py); }; - this.zAtXY = function(px, py) { - px = Math.round(rx * (px - minX)); - py = Math.round(ry * (py - minY)); - return topo.data[px * stepsy + py] || zMin; + const zAtXY = this.zAtXY = function(px, py) { + let ix = Math.round(rx * (px - minX)); + let iy = Math.round(ry * (py - minY)); + return topo.data[ix * stepsy + iy] || zMin; }; function push_point(x,y,z) {