add log toggle, 3mf model name restore

This commit is contained in:
Stewart Allen 2022-01-08 22:06:50 -05:00
commit fc1cc15bfe
4 changed files with 34 additions and 8 deletions

View file

@ -20,9 +20,18 @@ load.File = {
load: load_file
};
function nameOf(file, part, i) {
let lid = file.lastIndexOf('.');
if (!part && lid > 0) {
file = file.substring(0,lid);
}
return part ? part : `${file}_${i}`;
}
function load_data(data, file, ext) {
ext = ext || name.toLowerCase().split('.').pop();
return new Promise((resolve, reject) => {
let i = 1;
switch (ext) {
case "stl":
resolve([{
@ -30,12 +39,14 @@ function load_data(data, file, ext) {
}]);
break;
case "obj":
resolve(load.OBJ.parse(data).map(m => { return {mesh: m.toFloat32(), file: m.name || file} }));
resolve(load.OBJ.parse(data).map(m => {
return { mesh: m.toFloat32(), file: nameOf(file, m.name, i++) }
}));
break;
case "3mf":
load.TMF.parseAsync(data).then((meshes) => {
resolve(meshes.map(m => {
return { mesh: m.faces.toFloat32(), file }
return { mesh: m.faces.toFloat32(), file: nameOf(file, m.name, i++) }
}));
});
break;

View file

@ -70,7 +70,7 @@ function init() {
// restore space layout and view from previous session
function restore_space() {
mesh.api.log.emit(`restoring workspace`);
let count = 0;
let space = moto.Space;
mesh.db.admin.get("camera")
.then(saved => {
@ -81,12 +81,17 @@ function restore_space() {
});
mesh.db.space.iterate({ map: true }).then(cached => {
for (let [id, data] of Object.entries(cached)) {
if (count++ === 0) {
mesh.api.log.emit(`restoring workspace...`);
}
// restore group
if (Array.isArray(data)) {
let models = data.map(id => {
let md = cached[id];
return new mesh.model(md, id);
});
let m = md ? new mesh.model(md, id) : undefined;
if (m) mesh.api.log.emit(`restored | ${m.file}`);
return m;
}).filter(m => m);
mesh.api.group.new(models, id)
.centerModels()
.centerXY()
@ -144,6 +149,8 @@ function space_init(data) {
return api.wireframe();
case 'KeyG':
return api.grid();
case 'KeyL':
return api.log.toggle();
case 'KeyB':
return selection.boundsBox({toggle:true});
case 'KeyH':

View file

@ -221,12 +221,16 @@ let file = {
let recs = selection.models().map(m => { return {
id: m.id, matrix: m.matrix, file: m.file
} });
if (recs.length === 0) {
return api.log.emit(`no models to export`);
}
api.log.emit(`exporting ${recs.length} model(s)`);
moto.client.fn.file_export({
recs, format: "obj"
}).then(data => {
console.log({work_export: data});
util.download(data, "export.obj");
if (data.length) {
util.download(data, "export.obj");
}
});
},
};

View file

@ -21,7 +21,7 @@ broker.listeners({
let spin_timer;
// add download / blob export to util
let download = mesh.util.download = (data, filename = "mesh-data") => {
mesh.util.download = (data, filename = "mesh-data") => {
let url = window.URL.createObjectURL(new Blob([data], {type: "octet/stream"}));
$('download').innerHTML = `<a id="_data_export_" href="${url}" download="${filename}">x</a>`;
$('_data_export_').click();
@ -104,6 +104,10 @@ let log = mesh.api.log = {
return log;
},
toggle() {
return log.pinned ? log.unpin() && log.hide() : log.pin();
},
pin() {
log.pinned = true;
return log.show();