From cdb0051ebdffe15ec1d6f3524e3314b4fdeea06f Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 28 Dec 2020 08:43:55 -0500 Subject: [PATCH] allow outside only outlines to omit thru inner holes - fixes #103 --- src/kiri/conf.js | 1 + src/mode/cam/client.js | 2 ++ src/mode/cam/ops.js | 14 +++++++++++++- web/kiri/lang/en.js | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/kiri/conf.js b/src/kiri/conf.js index fa2d412c..dca1d104 100644 --- a/src/kiri/conf.js +++ b/src/kiri/conf.js @@ -431,6 +431,7 @@ camOutlinePlunge: 250, camOutlineWide: false, camOutlineDogbone: false, + camOutlineOmitThru: false, camOutlineOut: true, camOutlineIn: false, camOutlineOn: true, diff --git a/src/mode/cam/client.js b/src/mode/cam/client.js index c510cc36..3d67b9fe 100644 --- a/src/mode/cam/client.js +++ b/src/mode/cam/client.js @@ -768,6 +768,7 @@ rate: 'camOutlineSpeed', plunge: 'camOutlinePlunge', dogbones: 'camOutlineDogbone', + omitthru: 'camOutlineOmitThru', outside: 'camOutlineOut', inside: 'camOutlineIn', wide: 'camOutlineWide' @@ -783,6 +784,7 @@ dogbones: UC.newBoolean(LANG.co_dogb_s, undefined, {title:LANG.co_dogb_l, show:(op) => { return !op.inputs.wide.checked }}), inside: UC.newBoolean(LANG.co_olin_s, undefined, {title:LANG.co_olin_l, show:(op) => { return !op.inputs.outside.checked }}), outside: UC.newBoolean(LANG.co_olot_s, undefined, {title:LANG.co_olot_l, show:(op) => { return !op.inputs.inside.checked }}), + omitthru: UC.newBoolean(LANG.co_omit_s, undefined, {title:LANG.co_omit_l, show:(op) => { return op.inputs.outside.checked }}), wide: UC.newBoolean(LANG.co_wide_s, undefined, {title:LANG.co_wide_l, show:(op) => { return !op.inputs.inside.checked }}) }; diff --git a/src/mode/cam/ops.js b/src/mode/cam/ops.js index dc136c1b..a42cc31a 100644 --- a/src/mode/cam/ops.js +++ b/src/mode/cam/ops.js @@ -375,7 +375,7 @@ slice(progress) { let { op, state } = this; - let { settings, widget, slicer, sliceAll, tshadow } = state; + let { settings, widget, slicer, sliceAll, tshadow, thruHoles } = state; let { updateToolDiams, zThru, zBottom, shadowTop, tabs, cutTabs } = state; let toolDiam = this.toolDiam = new CAM.Tool(settings, op.tool).fluteDiameter(); @@ -441,6 +441,18 @@ tops = tshadow; } + if (op.omitthru) { + // eliminate thru holes from shadow + for (let hole of thruHoles) { + for (let top of tops) { + if (!top.inner) continue; + top.inner = top.inner.filter(innr => { + return !innr.isEquivalent(hole); + }); + } + } + } + let offset = POLY.expand(tops, toolDiam / 2, slice.z); if (!(offset && offset.length)) { return; diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 1e72e7b7..75382319 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -304,6 +304,8 @@ kiri.lang['en-us'] = { co_olin_l: "limit cutting to\ninside part boundaries", co_olot_s: "outside only", co_olot_l: "limit cutting to\exterior part boundaries\nwhich can be thought of\nas the shadow outline", + co_omit_s: "omit through", + co_omit_l: "eliminate thru holes", co_olen_s: "enable", co_olen_l: "enabled outline cutting",