From e22b0aee18dd8497dba0a939b47fe25dfdcbf958 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 13 Jan 2023 22:42:21 -0500 Subject: [PATCH] fix nested and tiny polys in tracing --- notes.md | 1 + src/kiri-mode/cam/ops.js | 4 ++-- src/kiri/print.js | 6 +++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/notes.md b/notes.md index 4c7f9c32..b442cc0d 100644 --- a/notes.md +++ b/notes.md @@ -102,6 +102,7 @@ * `F` ease-in and ease-out especially on tab cut-out start/stop * `F` maintain several part orientations + op chains in a single profile +* `P` improve parser - do not require spaced tokens and support implied G0 / G1 * `P` inner corner arc moves * `P` log Z interpolation for contour XYZ moves * `P` option to start with the smallest poly by area on layer change diff --git a/src/kiri-mode/cam/ops.js b/src/kiri-mode/cam/ops.js index 9f2b60ac..49c22f22 100644 --- a/src/kiri-mode/cam/ops.js +++ b/src/kiri-mode/cam/ops.js @@ -955,14 +955,14 @@ class OpTrace extends CamOp { poly2polyEmit(polys, newPoint(0,0,0), (poly, index, count, spoint) => { routed.push(poly); }); - for (let poly of routed) { + for (let poly of POLY.nest(routed)) { let offdist = 0; switch (offset) { case "outside": offdist = toolDiam / 2; break; case "inside": offdist = -toolDiam / 2; break; } if (offdist) { - let pnew = POLY.offset([poly], offdist); + let pnew = POLY.offset([poly], offdist, { minArea: 0 }); if (pnew) { poly = POLY.setZ(pnew, poly.getZ()); } else { diff --git a/src/kiri/print.js b/src/kiri/print.js index 0c49236c..9bb1da7e 100644 --- a/src/kiri/print.js +++ b/src/kiri/print.js @@ -475,7 +475,10 @@ class Print { newlayer = true; autolayer = false; } - line = line.split(";")[0].split(" ").filter(v => v); + // if (["X","Y","Z"].indexOf(line.charAt(0)) >= 0) { + // line = `G0${line}`; + // } + line = line.trim().split(";")[0].split(" ").filter(v => v); let cmd = line.shift(); if (!cmd) return; if (cmd.charAt(0) === 'T') { @@ -486,6 +489,7 @@ class Print { xoff.Y = -ext[pos].extOffsetY; } } + pos.E = 0.0; switch (cmd) { case 'M82':