From f35ab738583d1ec3dcd5abaf28425b9302b0aaa3 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 8 Feb 2021 10:55:36 -0500 Subject: [PATCH] more intelligent sync. but clear/sync in belt mode. eliminate layer support gap in belt mode --- notes.md | 1 - src/kiri/client.js | 3 +++ src/kiri/init.js | 2 +- src/kiri/main.js | 2 +- src/kiri/worker.js | 14 ++++++++++++++ src/mode/fdm/slice.js | 2 +- 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/notes.md b/notes.md index 4566de31..9f0bad2a 100644 --- a/notes.md +++ b/notes.md @@ -2,7 +2,6 @@ ## `C` cosmetic, `F` functional, `P` performance, `B` bug fix -* `B` client/worker cache invalidated by latest rotation work. revisit sync. * `B` normals possibly inverted on faces in 2D to 3D conversion * `B` origin bug (Onshape?) when switching modes in 2.5 and 2.6 diff --git a/src/kiri/client.js b/src/kiri/client.js index c54dca80..8944164f 100644 --- a/src/kiri/client.js +++ b/src/kiri/client.js @@ -121,6 +121,9 @@ KIRI.work = { // widget sync sync: function() { + // send list of currently valid widgets + send("sync", { valid: KIRI.api.widgets.all().map(w => w.id) }, () => {}); + // sync any widget that has changed let widgets = KIRI.api.widgets.all(); widgets.forEach(widget => { if (widget.modified || !syncd[widget.id]) { diff --git a/src/kiri/init.js b/src/kiri/init.js index 88687ba5..603c6e2c 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -1685,7 +1685,7 @@ fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}), sliceSupportSize: UC.newInput(LANG.sp_size_s, {title:LANG.sp_size_l, bound:UC.bound(1.0,200.0), convert:UC.toFloat, modes:FDM}), sliceSupportOffset: UC.newInput(LANG.sp_offs_s, {title:LANG.sp_offs_l, bound:UC.bound(0.0,200.0), convert:UC.toFloat, modes:FDM}), - sliceSupportGap: UC.newInput(LANG.sp_gaps_s, {title:LANG.sp_gaps_l, bound:UC.bound(0,5), convert:UC.toInt, modes:FDM}), + sliceSupportGap: UC.newInput(LANG.sp_gaps_s, {title:LANG.sp_gaps_l, bound:UC.bound(0,5), convert:UC.toInt, modes:FDM, show:isNotBelt}), fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}), sliceSupportArea: UC.newInput(LANG.sp_area_s, {title:LANG.sp_area_l, bound:UC.bound(0.0,200.0), convert:UC.toFloat, modes:FDM}), sliceSupportExtra: UC.newInput(LANG.sp_xpnd_s, {title:LANG.sp_xpnd_l, bound:UC.bound(0.0,200.0), convert:UC.toFloat, modes:FDM}), diff --git a/src/kiri/main.js b/src/kiri/main.js index 57bd1554..e34645a3 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -871,7 +871,7 @@ setOpacity(color.slicing_opacity); STACKS.clear(); - if (mode === 'FDM') { + if (settings.device.bedBelt) { KIRI.client.clear(); } KIRI.client.sync(); diff --git a/src/kiri/worker.js b/src/kiri/worker.js index 3e4711e9..40148221 100644 --- a/src/kiri/worker.js +++ b/src/kiri/worker.js @@ -51,6 +51,20 @@ KIRI.worker = { // widget sync sync: function(data, send) { + if (data.valid) { + // remove widgets not present in valid list + for (let key in wcache) { + if (data.valid.indexOf(key) < 0) { + delete wcache[key]; + for (let [id,group] of Object.entries(wgroup)) { + wgroup[id] = group = group.filter(v => v.id !== key); + group.id = id; + } + } + } + return; + } + let group = wgroup[data.group]; if (!group) { group = []; diff --git a/src/mode/fdm/slice.js b/src/mode/fdm/slice.js index b241c6c9..d488385b 100644 --- a/src/mode/fdm/slice.js +++ b/src/mode/fdm/slice.js @@ -191,7 +191,7 @@ slice.addTop(u); } } - let gap = sliceHeight * spro.sliceSupportGap + let gap = sliceHeight * (isBelt ? 0 : spro.sliceSupportGap); // clip tops to other widgets in group tops = slice.topPolys(); for (let peer of widget.group) {