From 683cb7c9a9140fe47fd907caf06531fce22a5c62 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Tue, 8 Feb 2022 23:54:20 -0500 Subject: [PATCH] add belt layout options to prevent overlapping prints and randomize X axis layout --- src/kiri/conf.js | 1 + src/kiri/init.js | 11 ++++++++--- src/kiri/main.js | 16 ++++++++++++++++ web/kiri/lang/en.js | 4 +++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/kiri/conf.js b/src/kiri/conf.js index 3cd6bed1..e87525a3 100644 --- a/src/kiri/conf.js +++ b/src/kiri/conf.js @@ -687,6 +687,7 @@ showSpeeds: true, freeLayout: true, autoLayout: true, + spaceRandoX: false, spaceLayout: 1, units: "mm", exportOcto: false, diff --git a/src/kiri/init.js b/src/kiri/init.js index 7d595ff0..f93fb844 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -170,6 +170,7 @@ control.showRulers = UI.showRulers.checked; control.autoLayout = UI.autoLayout.checked; control.freeLayout = UI.freeLayout.checked; + control.spaceRandoX = UI.spaceRandoX.checked; control.autoSave = UI.autoSave.checked; control.antiAlias = UI.antiAlias.checked; control.reverseZoom = UI.reverseZoom.checked; @@ -496,7 +497,9 @@ if (API.view.get() === VIEWS.ARRANGE) { // auto arrange items on platform platform.layout(); - API.space.set_focus(API.selection.widgets()); + if (!API.conf.get().controller.spaceRandoX) { + API.space.set_focus(API.selection.widgets()); + } } else { // go to arrange view API.view.set(VIEWS.ARRANGE); @@ -1717,6 +1720,7 @@ autoSave: UC.newBoolean(LANG.op_save_s, booleanSave, {title:LANG.op_save_l}), autoLayout: UC.newBoolean(LANG.op_auto_s, booleanSave, {title:LANG.op_auto_l}), freeLayout: UC.newBoolean(LANG.op_free_s, booleanSave, {title:LANG.op_free_l}), + spaceRandoX: UC.newBoolean(LANG.op_spcx_s, booleanSave, {title:LANG.op_spcx_l, show:isBelt}), spaceLayout: UC.newInput(LANG.op_spcr_s, {title:LANG.op_spcr_l, convert:UC.toFloat, size:3, units:true}), export: UC.newGroup(LANG.xp_menu, $('prefs-xpo'), {inline: true}), @@ -1782,9 +1786,9 @@ outputBrimCount: UC.newInput(LANG.fl_skrt_s, {title:LANG.fl_skrt_l, convert:UC.toInt, modes:FDM, show:isNotBelt}), outputBrimOffset: UC.newInput(LANG.fl_skro_s, {title:LANG.fl_skro_l, convert:UC.toFloat, modes:FDM, show:isNotBelt}), fdmSep: UC.newBlank({class:"pop-sep", modes:FDM, show:isNotBelt}), - outputDraftShield: UC.newBoolean(LANG.fr_draf_s, onBooleanClick, {title:LANG.fr_draf_l, modes:FDM, trigger: true, show:() => !UI.outputRaft.checked && isNotBelt}), + outputDraftShield: UC.newBoolean(LANG.fr_draf_s, onBooleanClick, {title:LANG.fr_draf_l, modes:FDM, trigger: true, show:() => !UI.outputRaft.checked && isNotBelt()}), outputRaftSpacing: UC.newInput(LANG.fr_spac_s, {title:LANG.fr_spac_l, convert:UC.toFloat, bound:UC.bound(0.0,3.0), modes:FDM, show: () => UI.outputRaft.checked && isNotBelt() }), - outputRaft: UC.newBoolean(LANG.fr_nabl_s, onBooleanClick, {title:LANG.fr_nabl_l, modes:FDM, trigger: true, show:() => !UI.outputDraftShield.checked && isNotBelt}), + outputRaft: UC.newBoolean(LANG.fr_nabl_s, onBooleanClick, {title:LANG.fr_nabl_l, modes:FDM, trigger: true, show:() => !UI.outputDraftShield.checked && isNotBelt()}), fdmInfill: UC.newGroup(LANG.fi_menu, $('settings'), {modes:FDM}), sliceFillType: UC.newSelect(LANG.fi_type, {modes:FDM, trigger:true}, "infill"), @@ -2536,6 +2540,7 @@ UI.showSpeeds.checked = control.showSpeeds; UI.freeLayout.checked = control.freeLayout; UI.autoLayout.checked = control.autoLayout; + UI.spaceRandoX.checked = control.spaceRandoX; UI.antiAlias.checked = control.antiAlias; UI.reverseZoom.checked = control.reverseZoom; UI.autoSave.checked = control.autoSave; diff --git a/src/kiri/main.js b/src/kiri/main.js index 82428303..60c9b3a2 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -2273,6 +2273,7 @@ function platformLayout(event, space = settings.controller.spaceLayout) { let auto = UI.autoLayout.checked, + ctrl = settings.controller, proc = settings.process, dev = settings.device, isBelt = dev.bedBelt, @@ -2356,6 +2357,21 @@ widget.move(0, movey, 0); } }); + if (ctrl.spaceLayout === 0) { + let sum = 0; + let sorted = WIDGETS.sort((a,b) => a.track.pos.y - b.track.pos.y); + sorted.forEach(w => { + w.move(0, sum, 0); + sum += w.track.box.d + 1; + }); + } + if (ctrl.spaceRandoX) { + for (let w of WIDGETS) { + w.move( + (0.5 - Math.random()) * (dev.bedWidth - w.track.box.w - proc.firstLayerBrim), + 0, 0); + } + } } platform.update_origin(); diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 178fd379..ffe1ff69 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -252,7 +252,9 @@ kiri.lang['en-us'] = { op_free_s: "free layout", op_free_l: ["permit dragable layout","no effect in laser mode"], op_spcr_s: "spacing", - op_spcr_l: ["spacing between objects","during auto layout","in workspace units"], + op_spcr_l: ["spacing between objects","during auto layout","in workspace units","in belt mode, use 0","to auto-space by height"], + op_spcx_s: "random X", + op_spcx_l: ["in belt mode, randomly","layout the part on X","to even belt wear"], op_orth_s: "orthographic", op_orth_l: ["orthographic display","requires page refresh"], op_anta_s: "anti-alias",