collect 3mf info to support instancing
This commit is contained in:
parent
3aa43a7b8b
commit
ff2bb47722
1 changed files with 24 additions and 7 deletions
|
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue