From 5f6e381ef93df0a4324e87bf55b3a72fca35b597 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 11 Oct 2022 10:53:42 -0400 Subject: [PATCH] weight progress bar for pocket contour ops --- src/kiri-mode/cam/ops.js | 68 +++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/src/kiri-mode/cam/ops.js b/src/kiri-mode/cam/ops.js index 52a5b535..6eedc6d8 100644 --- a/src/kiri-mode/cam/ops.js +++ b/src/kiri-mode/cam/ops.js @@ -976,7 +976,7 @@ class OpPocket extends CamOp { this.topo = new CAM.Topo({ // onupdate: (update, msg) => { onupdate: (index, total, msg) => { - progress(index / total, msg); + progress((index / total) * 0.9, msg); }, ondone: (slices) => { }, contour: { @@ -1055,7 +1055,9 @@ class OpPocket extends CamOp { } POLY.setWinding(slice.camLines, cutdir, false); if (contour) { - slice.camLines = pocket.conform(slice.camLines, op.refine, engrave); + slice.camLines = pocket.conform(slice.camLines, op.refine, engrave, pct => { + progress(0.9 + (zpro + zinc * pct) * 0.1, "conform"); + }); } slice.output() .setLayer("pocket", {line: color}, false) @@ -1063,7 +1065,10 @@ class OpPocket extends CamOp { if (debug && shadow) slice.output() .setLayer("pocket shadow", {line: 0xff8811}, false) .addPolys(shadow) - progress(zpro += zinc, "pocket"); + if (!contour) { + progress(zpro, "pocket"); + } + zpro += zinc; } } } @@ -1103,44 +1108,51 @@ class OpPocket extends CamOp { } // mold cam output lines to the surface of the topo offset by tool geometry - conform(camLines, refine, engrave) { + conform(camLines, refine, engrave, progress) { const topo = this.topo; // re-segment polygon to a higher resolution const hirez = refine > 0 ? camLines.map(p => p.segment(topo.tolerance * 2)) : camLines; // walk points and offset from surface taking into account tool geometry + let steps = hirez.length; + let iter = 0; for (let poly of hirez) { for (let point of poly.points) { point.z = engrave ? topo.zAtXY(point.x, point.y) : topo.toolAtXY(point.x, point.y); } + progress((iter++ / steps) * 0.8); } + steps = steps * refine; + iter = 0; // walk points noting z deltas and smoothing sawtooth patterns - for (let j=0; j