From 470a4c1f6b9ca1b6747057c1726ae976a0d9c45e Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sun, 19 Dec 2021 14:37:29 -0500 Subject: [PATCH] fix obj export, async loaded grouped import --- src/kiri/main.js | 29 ++++++++++++++++++++++------- src/kiri/widget.js | 3 +++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/kiri/main.js b/src/kiri/main.js index 910c8d96..7ae2e4bf 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -1710,6 +1710,7 @@ }); if (format === "obj") { let obj = []; + let vpad = 0; for (let out of outs) { let meta = out.widget.meta; let name = meta.file || 'unnamed'; @@ -1721,8 +1722,9 @@ obj.push(`v ${pvals[pi++]} ${pvals[pi++]} ${pvals[pi++]}`); obj.push(`v ${pvals[pi++]} ${pvals[pi++]} ${pvals[pi++]}`); obj.push(`v ${pvals[pi++]} ${pvals[pi++]} ${pvals[pi++]}`); - obj.push(`f ${i+1} ${i+2} ${i+3}`); + obj.push(`f ${i+1+vpad} ${i+2+vpad} ${i+3+vpad}`); } + vpad += position.count; } return obj.join('\n'); } @@ -2677,12 +2679,19 @@ iskmz = lower.indexOf(".kmz") > 0; reader.file = files[i]; reader.onloadend = function (e) { - if (israw) platform.add( - newWidget(undefined,group) - .loadVertices(JSON.parse(e.target.result).toFloat32()) - ); + function load_dec() { + if (--loaded === 0) platform.group_done(isgcode); + } + if (israw) { + platform.add( + newWidget(undefined,group) + .loadVertices(JSON.parse(e.target.result).toFloat32()) + ); + load_dec(); + } else if (API.feature.on_load && (isstl || isobj || is3mf)) { API.feature.on_load(e.target.result, file); + load_dec(); } else if (isstl) { if (API.feature.on_add_stl) { @@ -2694,6 +2703,7 @@ .saveToCatalog(e.target.file.name) ); } + load_dec(); } else if (isobj) { let objs = MOTO.OBJ.parse(e.target.result); @@ -2709,6 +2719,7 @@ .saveToCatalog(name) ); } + load_dec(); }; if (objs.length > 1 && !group) { UC.confirm('group objects?').then(ok => { @@ -2735,6 +2746,7 @@ .saveToCatalog(name) ); } + load_dec(); API.hide.alert(msg); } let msg = API.show.alert('Decoding 3MF'); @@ -2752,7 +2764,10 @@ } }); } - else if (isgcode) loadCode(e.target.result, 'gcode'); + else if (isgcode) { + loadCode(e.target.result, 'gcode'); + load_dec(); + } else if (issvg) { if (MODE === MODES.LASER) { loadCode(e.target.result, 'svg'); @@ -2769,13 +2784,13 @@ ); } } + load_dec(); } else if (iskmz) settingsImportZip(e.target.result, true); else if (isset) settingsImport(e.target.result, true); else if (ispng) loadImageDialog(e.target.result, e.target.file.name); else if (isjpg) loadImageConvert(e.target.result, e.target.file.name); else API.show.alert(`Unsupported file: ${files[i].name}`); - if (--loaded === 0) platform.group_done(isgcode); }; if (isstl || ispng || isjpg || iskmz) { reader.readAsArrayBuffer(reader.file); diff --git a/src/kiri/widget.js b/src/kiri/widget.js index 37cd449a..95ded16c 100644 --- a/src/kiri/widget.js +++ b/src/kiri/widget.js @@ -558,6 +558,9 @@ console.log/** Copyright Stewart Allen -- All Rights Reserved */ * called by center() and Group.center() */ PRO.moveMesh = function(x, y, z) { + if (!(x || y || z)) { + return; + } let gap = this.mesh.geometry.attributes.position, pa = gap.array; // center point array on 0,0,0