From 14526eb3849c0a0a4770659c11d683627778d861 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 12 Apr 2020 21:28:49 -0400 Subject: [PATCH] order planar slices by extruder first for proper purge blocks --- js/kiri-driver-fdm.js | 35 +++++++++++++++++++++-------------- js/kiri-init.js | 4 ++-- js/kiri.js | 2 ++ 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/js/kiri-driver-fdm.js b/js/kiri-driver-fdm.js index e43f59ca..d9f913d9 100644 --- a/js/kiri-driver-fdm.js +++ b/js/kiri-driver-fdm.js @@ -390,16 +390,15 @@ let gs_kiri_fdm = exports; zoff = 0, meshIndex, lastIndex, - // lastOut, closest, mindist, minidx, find, - found, layerout = [], slices = [], sliceEntry; + // TODO pick a widget with a slice on the first layer and use that nozzle // create brim, skirt, raft if specificed in FDM mode (code shared by laser) if (process.outputBrimCount || process.outputRaft) { let brims = [], @@ -588,7 +587,7 @@ let gs_kiri_fdm = exports; } } - // for each layer until no layers are found + // increment layer count until no widget has remaining slices for (;;) { // create list of mesh slice arrays with their platform offsets for (meshIndex = 0; meshIndex < widgets.length; meshIndex++) { @@ -614,22 +613,30 @@ let gs_kiri_fdm = exports; // iterate over layer slices, find closest widget, print, eliminate for (;;) { - found = 0; closest = null; mindist = Infinity; - // TODO must select slices of the same extruder type first - // instead of just finding closest, create sorted list and - // next is draw from list + let order = []; + // select slices of the same extruder type first then distance for (meshIndex = 0; meshIndex < slices.length; meshIndex++) { sliceEntry = slices[meshIndex]; - if (!sliceEntry) continue; - find = sliceEntry.slice.findClosestPointTo(printPoint.sub(sliceEntry.offset)); - if (find && (!closest || find.distance < mindist)) { - closest = sliceEntry; - mindist = find.distance; - minidx = meshIndex; + if (sliceEntry) { + find = sliceEntry.slice.findClosestPointTo(printPoint.sub(sliceEntry.offset)); + if (find) { + let ext = sliceEntry.slice.extruder; + let lex = lastOut ? lastOut.extruder : ext; + let dst = Math.abs(find.distance); + if (ext !== lex) dst *= 10000; + order.push({dst,sliceEntry,meshIndex}); + } } - found++; + } + order.sort((a,b) => { + return a.dst - b.dst; + }); + if (order.length) { + let find = order.shift(); + closest = find.sliceEntry; + minidx = find.meshIndex; } if (!closest) { if (sliceEntry) lastOut = sliceEntry.slice; diff --git a/js/kiri-init.js b/js/kiri-init.js index b0d5f5d0..bf182705 100644 --- a/js/kiri-init.js +++ b/js/kiri-init.js @@ -1060,7 +1060,7 @@ var gs_kiri_init = exports; }); SPACE.platform.onMove(API.conf.save); SPACE.platform.setRound(true); - SPACE.useDefaultKeys(API.feature.on_key === undefined); + SPACE.useDefaultKeys(API.feature.on_key === undefined || API.feature.on_key_defaults); UC.setCompact(compact); @@ -1640,7 +1640,7 @@ var gs_kiri_init = exports; // SPACE.mouse.onHover(function(d,me) { // if (d) { - // console.log(d,d.object.widget.id,d.face.materialIndex) + // // console.log(d,d.object.widget.id,d.face.materialIndex) // // d.object.material.vertexColors = true; // // d.object.material.needsUpdate = true; // // d.face.vertexColors = [ diff --git a/js/kiri.js b/js/kiri.js index c5a236db..0d46b0cf 100644 --- a/js/kiri.js +++ b/js/kiri.js @@ -1583,6 +1583,7 @@ self.kiri.copyright = exports.COPYRIGHT; ["print","help","local"].forEach(function(modal) { UI[modal].style.display = (modal === which ? 'block' : 'none'); }); + if (which) API.event.emit('modal.show', which); } function hideDialog() { @@ -1598,6 +1599,7 @@ self.kiri.copyright = exports.COPYRIGHT; let style = UI[dialog].style; style.display = (dialog === which && (force || style.display !== 'flex') ? 'flex' : 'none'); }); + if (which) API.event.emit('dialog.show', which); } function showCatalog() {