diff --git a/notes.md b/notes.md index 2d5c884d..6b32d592 100644 --- a/notes.md +++ b/notes.md @@ -63,6 +63,7 @@ * `B` outside cutting direction in roughing mode inverted * `B` clear voids has double interior pass because wrong offset shadow used +* `B` top clearing operations should use linear, not offset, passes * `F` flat and volumetric rendering of paths * `F` z bounded slices (extension of z bottom offset feature) * `F` z planar settings visualizations diff --git a/src/kiri/main.js b/src/kiri/main.js index 737dd608..af54ca29 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -1985,7 +1985,8 @@ viewMode = mode; platform.deselect(); updateSelectedInfo(); - // updateStockVisibility(); + // disable clear in non-arrange modes + $('view-clear').style.display = mode === VIEWS.ARRANGE ? '' : 'none'; switch (mode) { case VIEWS.ARRANGE: complete = {}; diff --git a/src/mode/cam/slice.js b/src/mode/cam/slice.js index f7640e31..289dfb77 100644 --- a/src/mode/cam/slice.js +++ b/src/mode/cam/slice.js @@ -144,12 +144,16 @@ thruHoles = tshadow.map(p => p.inner || []).flat(); // create facing slices - if (procFacing) { + if (procFacing || proc.camRoughFlat) { let shadow = shadowTop.tops.clone(); let inset = POLY.offset(shadow, (roughToolDiam / 4)); let facing = POLY.offset(inset, -(roughToolDiam * proc.camRoughOver), { count: 999, flat: true }); let zdiv = ztOff / roughDown; let zstep = (zdiv % 1 > 0) ? ztOff / (Math.floor(zdiv) + 1) : roughDown; + if (proc.camRoughFlat && ztOff === 0) { + // compensate for lack of z top offset in this scenario + ztOff = zstep; + } for (let z = zMax + ztOff - zstep; z >= zMax; z -= zstep) { let slice = shadowTop.slice.clone(false); slice.z = z;