From dd181e96e2ba37df9a231b13904e04bc7df0c60b Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 2 Mar 2021 19:43:04 -0500 Subject: [PATCH] add fractional shells. requires 'experimental' to be enabled for now. fixes #121 --- src/kiri/init.js | 2 +- src/mode/fdm/slice.js | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/kiri/init.js b/src/kiri/init.js index 1e5b1963..d070748b 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -1620,7 +1620,7 @@ sliceHeight: UC.newInput(LANG.sl_lahi_s, {title:LANG.sl_lahi_l, convert:UC.toFloat, modes:FDM}), sliceMinHeight: UC.newInput(LANG.ad_minl_s, {title:LANG.ad_minl_l, bound:UC.bound(0,3.0), convert:UC.toFloat, modes:FDM, show: () => UI.sliceAdaptive.checked}), fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}), - sliceShells: UC.newInput(LANG.sl_shel_s, {title:LANG.sl_shel_l, convert:UC.toInt, modes:FDM}), + sliceShells: UC.newInput(LANG.sl_shel_s, {title:LANG.sl_shel_l, convert:UC.toFloat, modes:FDM}), sliceTopLayers: UC.newInput(LANG.sl_ltop_s, {title:LANG.sl_ltop_l, convert:UC.toInt, modes:FDM}), sliceSolidLayers: UC.newInput(LANG.sl_lsld_s, {title:LANG.sl_lsld_l, convert:UC.toInt, modes:FDM}), sliceBottomLayers: UC.newInput(LANG.sl_lbot_s, {title:LANG.sl_lbot_l, convert:UC.toInt, modes:FDM}), diff --git a/src/mode/fdm/slice.js b/src/mode/fdm/slice.js index b0a68eee..b41e59e2 100644 --- a/src/mode/fdm/slice.js +++ b/src/mode/fdm/slice.js @@ -278,6 +278,16 @@ // create shells and diff inner fillable areas forSlices(0.0, 0.2, slice => { let params = getRangeParameters(settings, slice.index); + let shellFrac = (params.sliceShells - (params.sliceShells | 0)); + let sliceShells = params.sliceShells | 0; + if (ctrl.danger && shellFrac) { + let v1 = shellFrac > 0.5 ? 1 - shellFrac : shellFrac; + let v2 = 1 - v1; + let parts = Math.round(v2/v1) + 1; + let rem = slice.index % parts; + let trg = shellFrac > 0.5 ? 1 : parts - 1; + sliceShells += rem >= trg ? 1 : 0; + } let first = slice.index === 0; let isBottom = slice.index < spro.sliceBottomLayers; let isTop = slice.index > slices.length - spro.sliceTopLayers-1; @@ -286,7 +296,7 @@ let spaceMult = first ? spro.firstLayerLineMult || 1 : 1; let offset = shellOffset * spaceMult; let fillOff = fillOffset * spaceMult; - let count = isSynth ? 1 : params.sliceShells; + let count = isSynth ? 1 : sliceShells; doShells(slice, count, offset, fillOff, { vase: vaseMode, thin: spro.detectThinWalls && !isSynth,