From 3d9564c1d051463184686d70a4c05b97f43ecda4 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Wed, 8 Sep 2021 11:04:57 -0400 Subject: [PATCH] background healing in the worker --- src/kiri/client.js | 6 ++++++ src/kiri/main.js | 21 +++++++++------------ src/kiri/widget.js | 17 ++++++++++------- src/kiri/worker.js | 11 +++++++++++ 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/kiri/client.js b/src/kiri/client.js index d739b935..74fa3e33 100644 --- a/src/kiri/client.js +++ b/src/kiri/client.js @@ -126,6 +126,12 @@ KIRI.work = { }); }, + heal: function(vertices, callback) { + send("heal", {vertices}, function(output) { + callback(output); + }); + }, + config: function(obj) { send("config", obj, function(reply) { }); }, diff --git a/src/kiri/main.js b/src/kiri/main.js index 4a565b95..8df80c78 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -858,23 +858,20 @@ console.log/** Copyright Stewart Allen -- All Rights Reserved */ let widgets = API.widgets.all(); let marker; if (widgets.length) { - marker = API.show.alert("Analyzing objects"); + marker = API.show.alert("Analyzing objects", 100000); } else { return; } setTimeout(() => { - let healed = 0; - for (let w of widgets) { - if (w.heal()) { - healed++; + Promise.all(widgets.map(w => w.heal())).then(mod => { + API.hide.alert(marker); + let healed = mod.map(m => m).length; + if (healed) { + API.show.alert(`${healed} Object${healed ? 's':''} healed`); + } else { + API.show.alert('Nothing found to heal'); } - } - API.hide.alert(marker); - if (healed) { - API.show.alert(`${healed} Object${healed ? 's':''} healed`); - } else { - API.show.alert('Nothing found to heal'); - } + }); }, 1); } diff --git a/src/kiri/widget.js b/src/kiri/widget.js index a05514ae..b90aa0b9 100644 --- a/src/kiri/widget.js +++ b/src/kiri/widget.js @@ -307,9 +307,8 @@ console.log/** Copyright Stewart Allen -- All Rights Reserved */ }; PRO.heal = function(debug) { - let mesh = this.debugMesh(); - mesh.heal(); if (debug) { + let mesh = this.debugMesh().heal(); let verts = mesh.vertices; let edges = mesh.edges; let split = mesh.edges.filter(l => l.split); @@ -342,11 +341,15 @@ console.log/** Copyright Stewart Allen -- All Rights Reserved */ stack.addLayers(layrz); return { mesh, layrz, stack }; } - if (mesh.newFaces) { - this.loadVertices(mesh.unrolled().toFloat32()); - return this.modified = true; - } - return false; + return new Promise((resolve, reject) => { + KIRI.client.heal(this.getVertices().array, data => { + if (data.vertices) { + this.loadVertices(data.vertices); + this.modified = true; + } + resolve(this.modified); + }); + }); }; PRO.debugMesh = function(precision) { diff --git a/src/kiri/worker.js b/src/kiri/worker.js index 103b1080..1096f50c 100644 --- a/src/kiri/worker.js +++ b/src/kiri/worker.js @@ -202,6 +202,17 @@ KIRI.worker = { send.done(vertices); }, + heal: function(data, send) { + let { vertices } = data; + let mesh = new base.Mesh({vertices}).heal(); + if (mesh.newFaces) { + vertices = mesh.unrolled().toFloat32(); + send.done({vertices}, [vertices]); + } else { + send.done({}); + } + }, + snap: function(data, send) { current.snap = data; send.done();