From 3844642ad2c58663afda2819616695b5c1587741 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 10 Mar 2021 11:00:10 -0500 Subject: [PATCH] add the ability to selectively disable widget slicing. normalize support widget meshes to make mergeBufferGeometries happy --- src/kiri/main.js | 19 ++++++++++--------- src/mode/fdm/client.js | 10 +++++++++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/kiri/main.js b/src/kiri/main.js index 3fa57428..c5dc7bf4 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -987,7 +987,8 @@ API.conf.save(); API.event.emit('slice.begin', getMode()); - let countdown = WIDGETS.length, + let slicing = WIDGETS.slice().filter(w => !w.track.ignore), + countdown = slicing.length, totalProgress, track = {}, mode = settings.mode, @@ -996,10 +997,10 @@ defvert; // determing this widgets % of processing time estimated by vertex count - for (let widget of WIDGETS) { + for (let widget of slicing) { totvert += widget.getVertices().count; } - defvert = totvert / WIDGETS.length; + defvert = totvert / slicing.length; setOpacity(color.slicing_opacity); @@ -1017,7 +1018,7 @@ lastMsg; // for each widget, slice - forAllWidgets(function(widget) { + for (let widget of slicing) { let camOrLaser = mode === 'CAM' || mode === 'LASER', stack = widget.stack = STACKS.create(widget.id, widget.mesh), factor = (widget.getVertices().count / defvert); @@ -1055,7 +1056,7 @@ alert = API.show.alert("Rendering"); }; KIRI.client.unrotate(settings, () => { - forAllWidgets(widget => { + for (let widget of slicing) { // on done segtimes[`${widget.id}_${segNumber++}_draw`] = widget.render(widget.stack); // rotate stack for belt beds @@ -1069,7 +1070,7 @@ widget.setColor(color.deselected); API.hide.alert(alert); } - }); + } updateSliderMax(true); setVisibleLayer(-1, 0); if (scale === 1) { @@ -1103,12 +1104,12 @@ // on update track[widget.id] = (update || 0) * factor; totalProgress = 0; - forAllWidgets(function(w) { + for (let w of slicing) { totalProgress += (track[w.id] || 0); - }); + } API.show.progress(offset + (totalProgress / WIDGETS.length) * scale, msg); }); - }); + } } function preparePreview(callback, scale = 1, offset = 0) { diff --git a/src/mode/fdm/client.js b/src/mode/fdm/client.js index 7f56f8a2..b11885d8 100644 --- a/src/mode/fdm/client.js +++ b/src/mode/fdm/client.js @@ -229,7 +229,15 @@ if (!merge.length) { continue; } - let boxen = merge.map(m => m.box.geometry.clone().translate(m.x, m.y, m.z)); + let boxen = merge.map(m => { + let geo = m.box.geometry.clone(); + if (geo.index) geo = geo.toNonIndexed(); + return geo.translate(m.x, m.y, m.z); + }); + for (let box of boxen) { + // eliminate / normalize uv to allow other widget merge + box.setAttribute('uv',new THREE.BufferAttribute(new Float32Array(0), 3)); + } let bbg = THREE.BufferGeometryUtils.mergeBufferGeometries(boxen); let sw = kiri.newWidget(null, group); let fwp = group[0].track.pos;