collect 3mf info to support instancing

This commit is contained in:
Stewart Allen 2022-01-29 00:27:41 -05:00
commit ff2bb47722

View file

@ -35,15 +35,13 @@ function query(node, path, fn) {
function loadModel(doc) { function loadModel(doc) {
let models = []; let models = [];
function emitModel(model, faces) { let byid = {};
if (faces && faces.length) {
models.push({name: model, faces});
}
}
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let id;
let model; let model;
let faces; let faces;
let refs;
let units; let units;
let scale = 1; let scale = 1;
let scaleMap = { let scaleMap = {
@ -55,6 +53,16 @@ function loadModel(doc) {
"centimeter": (1 / 10) "centimeter": (1 / 10)
}; };
function emitModel() {
if (!(faces && faces.length)) {
return;
}
models.push({name: model, faces});
if (id) {
byid[id] = models.peek();
}
}
query(doc, ["+model","resources","+object","+mesh"], (type, node) => { query(doc, ["+model","resources","+object","+mesh"], (type, node) => {
switch (type) { switch (type) {
case "model": case "model":
@ -64,9 +72,18 @@ function loadModel(doc) {
} }
break; break;
case "object": case "object":
emitModel(model, faces); // emit previous model
emitModel();
faces = []; faces = [];
refs = [];
id = node.getAttribute("id") || undefined;
model = node.getAttribute("name") || undefined; model = node.getAttribute("name") || undefined;
query(node, ["components","+component"], (type, node) => {
let objectid = node.getAttribute('objectid');
let trans = node.getAttribute('transform');
refs.push({ objectid, trans });
// console.log({objectid, trans });
});
break; break;
case "mesh": case "mesh":
let vertices = []; let vertices = [];
@ -89,7 +106,7 @@ function loadModel(doc) {
} }
}); });
emitModel(model, faces); emitModel();
resolve(models); resolve(models);
}); });
} }