From 42c6743aaa33e1ed5076e8e7b9a9cb487c713e35 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Sat, 25 Sep 2021 17:37:45 -0400 Subject: [PATCH] add proper 3mf units support --- src/moto/load-3mf.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/moto/load-3mf.js b/src/moto/load-3mf.js index 63e8143f..767e8653 100644 --- a/src/moto/load-3mf.js +++ b/src/moto/load-3mf.js @@ -40,11 +40,23 @@ let model; let faces; 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) => { switch (type) { case "model": units = node.getAttribute("unit"); + if (units) { + scale = scaleMap[units] || 1; + } break; case "object": emitModel(model, faces); @@ -55,9 +67,9 @@ let vertices = []; query(node, ["vertices","+vertex"], (type, vertex) => { vertices.push([ - parseFloat(vertex.getAttribute("x")), - parseFloat(vertex.getAttribute("y")), - parseFloat(vertex.getAttribute("z")) + parseFloat(vertex.getAttribute("x")) * scale, + parseFloat(vertex.getAttribute("y")) * scale, + parseFloat(vertex.getAttribute("z")) * scale ]); }); query(node, ["triangles","+triangle"], (type, triangle) => {