add proper 3mf units support

This commit is contained in:
Stewart Allen 2021-09-25 17:37:45 -04:00
commit 42c6743aaa

View file

@ -40,11 +40,23 @@
let model; let model;
let faces; let faces;
let units; let units;
let scale = 1;
let scaleMap = {
"inch": (1 / 25.4),
"foot": (1 / 304.8),
"micron": (1 / 1000),
"meter": 1000,
"millimeter": 1,
"centimeter": (1 / 10)
};
query(doc, ["+model","resources","+object","+mesh"], (type, node) => { query(doc, ["+model","resources","+object","+mesh"], (type, node) => {
switch (type) { switch (type) {
case "model": case "model":
units = node.getAttribute("unit"); units = node.getAttribute("unit");
if (units) {
scale = scaleMap[units] || 1;
}
break; break;
case "object": case "object":
emitModel(model, faces); emitModel(model, faces);
@ -55,9 +67,9 @@
let vertices = []; let vertices = [];
query(node, ["vertices","+vertex"], (type, vertex) => { query(node, ["vertices","+vertex"], (type, vertex) => {
vertices.push([ vertices.push([
parseFloat(vertex.getAttribute("x")), parseFloat(vertex.getAttribute("x")) * scale,
parseFloat(vertex.getAttribute("y")), parseFloat(vertex.getAttribute("y")) * scale,
parseFloat(vertex.getAttribute("z")) parseFloat(vertex.getAttribute("z")) * scale
]); ]);
}); });
query(node, ["triangles","+triangle"], (type, triangle) => { query(node, ["triangles","+triangle"], (type, triangle) => {