diff --git a/src/kiri/app/conf/defaults.js b/src/kiri/app/conf/defaults.js index 0038ba8d..c178c642 100644 --- a/src/kiri/app/conf/defaults.js +++ b/src/kiri/app/conf/defaults.js @@ -340,15 +340,17 @@ export const conf = { sliceSupportAngle: 50, sliceSupportArea: 0.1, sliceSupportDensity: 0.1, - sliceSupportEnable: false, + // sliceSupportEnable: false, sliceSupportExtra: 0, sliceSupportGap: 1, - sliceSupportGrow: 0, + // sliceSupportGrow: 0, sliceSupportNozzle: 0, sliceSupportOffset: 1.0, sliceSupportOutline: true, - sliceSupportSize: 5, + // sliceSupportSize: 5, sliceSupportSpan: 5, + sliceSupportType: "automatic", + sliceSupportTree: false, sliceTopLayers: 3, sliceZInterleave: false, zHopDistance: 0.2, diff --git a/src/kiri/core/consts.js b/src/kiri/core/consts.js index 365f6a7c..a6491f68 100644 --- a/src/kiri/core/consts.js +++ b/src/kiri/core/consts.js @@ -23,6 +23,11 @@ const LISTS = { { name: "out-in" }, { name: "alternate" } ], + support: [ + { name: "disabled" }, + { name: "automatic" }, + { name: "manual" }, + ], start: [ { name: "last" }, { name: "center" }, diff --git a/src/kiri/mode/fdm/init-menu.js b/src/kiri/mode/fdm/init-menu.js index 88084ea8..c81bfdd5 100644 --- a/src/kiri/mode/fdm/init-menu.js +++ b/src/kiri/mode/fdm/init-menu.js @@ -61,6 +61,10 @@ function isNotBelt() { return !isBelt(); } +function isTree() { + return api.conf.proc().sliceSupportTree; +} + function notFwRetract() { return !api.conf.get().device.fwRetract; } @@ -107,23 +111,26 @@ export function menu() { outputFanSpeed: newInput(LANG.ou_fans_s, {title:LANG.ou_fans_l, convert:toInt, bound:bound(0,255)}), outputMinLayerTime: newInput(LANG.ou_layt_s, { title:LANG.ou_layt_l, convert:toInt, bound:bound(0,200) }), _____: newGroup(LANG.sp_menu, $('fdm-support'), { modes:FDM, driven, hideable, separator, group:"fdm-supp" }), + sliceSupportType: newSelect(LANG.sp_type_s, {title:LANG.sp_type_l}, "support"), sliceSupportNozzle: newSelect(LANG.sp_nozl_s, {title:LANG.sp_nozl_l, show:isMultiHead}, "extruders"), + separator: newBlank({ class:"set-sep", driven }), + sliceSupportAngle: newInput(LANG.sp_angl_s, {title:LANG.sp_angl_l, convert:toFloat, bound:bound(0.0,90.0)}), sliceSupportDensity: newInput(LANG.sp_dens_s, {title:LANG.sp_dens_l, convert:toFloat, bound:bound(0.0,1.0)}), - sliceSupportSize: newInput(LANG.sp_size_s, {title:LANG.sp_size_l, convert:toFloat, bound:bound(1.0,200.0)}), - sliceSupportOffset: newInput(LANG.sp_offs_s, {title:LANG.sp_offs_l, convert:toFloat, bound:bound(0.0,200.0)}), + // sliceSupportSize: newInput(LANG.sp_size_s, {title:LANG.sp_size_l, convert:toFloat, bound:bound(1.0,200.0)}), sliceSupportGap: newInput(LANG.sp_gaps_s, {title:LANG.sp_gaps_l, convert:toInt, bound:bound(0,5)}), + sliceSupportOffset: newInput(LANG.sp_offs_s, {title:LANG.sp_offs_l, convert:toFloat, bound:bound(0.0,200.0)}), sliceSupportArea: newInput(LANG.sp_area_s, {title:LANG.sp_area_l, convert:toFloat, bound:bound(0.0,200.0)}), sliceSupportExtra: newInput(LANG.sp_xpnd_s, {title:LANG.sp_xpnd_l, convert:toFloat, bound:bound(0.0,10.0)}), - sliceSupportGrow: newInput(LANG.sp_grow_s, {title:LANG.sp_grow_l, convert:toFloat, bound:bound(0.0,10.0)}), - sliceSupportAngle: newInput(LANG.sp_angl_s, {title:LANG.sp_angl_l, convert:toFloat, bound:bound(0.0,90.0)}), + // sliceSupportGrow: newInput(LANG.sp_grow_s, {title:LANG.sp_grow_l, convert:toFloat, bound:bound(0.0,10.0)}), sliceSupportSpan: newInput(LANG.sp_span_s, {title:LANG.sp_span_l, convert:toFloat, bound:bound(0.0,200.0), show:() => ui.sliceSupportEnable.checked }), separator: newBlank({ class:"set-sep", driven }), - sliceSupportEnable: newBoolean(LANG.sp_auto_s, onBooleanClick, {title:LANG.sp_auto_l, show:isNotBelt}), - sliceSupportOutline: newBoolean(LANG.sp_outl_s, onBooleanClick, {title:LANG.sp_outl_l}), + sliceSupportTree: newBoolean(LANG.sp_tree_s, onBooleanClick, {title:LANG.sp_tree_s, trigger, show:isNotBelt}), + // sliceSupportEnable: newBoolean(LANG.sp_auto_s, onBooleanClick, {title:LANG.sp_auto_l, show:isNotBelt}), + sliceSupportOutline: newBoolean(LANG.sp_outl_s, onBooleanClick, {title:LANG.sp_outl_l, show: () => !isTree() }), separator: newBlank({ class:"set-sep", driven }), sliceSupportGen: newRow([ ui.ssaGen = newButton(LANG.sp_detect, onButtonClick, {class: "f-col grow a-center"}) - ], { modes: FDM, class: "ext-buttons f-row grow" }), + ], { modes: FDM, class: "ext-buttons f-row grow", show: () => !ui.sliceSupportTree.checked }), separator: newBlank({ class:"set-sep", driven }), sliceSupportManual: newRow([ (ui.ssmAdd = newButton(undefined, onButtonClick, {icon:''})), diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 150fe28b..56a8f511 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -464,30 +464,34 @@ self.lang['en-us'] = { // FDM SUPPORT sp_menu: "support", sp_detect: "detect", + sp_type_s: "type", + sp_type_l: ["automatic = detect","manual = paint on"], sp_dens_s: "density", sp_dens_l: ["fraction 0.0 - 1.0","recommended 0.15","0 to disable"], - sp_size_s: "pillar size", - sp_size_l: ["pillar width in millimeters","smaller values exponentially","increase detection times"], + // sp_size_s: "pillar size", + // sp_size_l: ["pillar width in millimeters","smaller values exponentially","increase detection times"], sp_offs_s: "part offset", sp_offs_l: ["offset from part","in millimeters"], - sp_gaps_s: "gap layers", + sp_gaps_s: "layer gap", sp_gaps_l: ["number of layers","offset from part"], sp_span_s: "max span", sp_span_l: ["unsupported span that causes","a new support to be generated","in millimeters"], - sp_angl_s: "max angle", + sp_angl_s: "angle", sp_angl_l: ["max overhang angle before","supporting pillar is generated","normal values 45-60","belt values 0-10"], sp_area_s: "min area", sp_area_l: ["minimum area for","a support column","in millimeters","smaller values will","slow detection"], sp_xpnd_s: "expand", sp_xpnd_l: ["expand support area","beyond part boundary","in millimeters"], - sp_grow_s: "grow", - sp_grow_l: ["grow support column to fill small gaps","in millimeters"], - sp_nozl_s: "extruder", - sp_nozl_l: ["in multi-extruder systems","the extruder to use for","support material"], + // sp_grow_s: "grow", + // sp_grow_l: ["grow support column to fill small gaps","in millimeters"], + sp_nozl_s: "tool", + sp_nozl_l: ["in multi-extruder systems","the toolhead to use for","support material"], sp_outl_s: "enclosed", sp_outl_l: ["enclose support pattern","inside a perimeter shell"], - sp_auto_s: "automatic", - sp_auto_l: ["enable generated supports","using at-slice-time geometry","supports will only appear","after slicing completes"], + // sp_auto_s: "automatic", + // sp_auto_l: ["enable generated supports","using at-slice-time geometry","supports will only appear","after slicing completes"], + sp_tree_s: "tree type", + sp_tree_l: ["use tree type support structure"], // CNC COMMON terms cc_tool: "tool",