jsketcher/web/app/cad/stl/stlBinaryReader.js
2022-08-15 23:47:20 -07:00

33 lines
No EOL
797 B
JavaScript

import {StlSolid, StlFace} from './stl-data-structure'
function readVector(dataView, off) {
return [
dataView.getFloat32(off + 0, true),
dataView.getFloat32(off + 4, true),
dataView.getFloat32(off + 8, true)
];
}
export function parse(dataView) {
const solid = new StlSolid('binary');
let off = 80; // skip header
const triangleCount = dataView.getUint32(off, true);
off += 4;
for (let i = 0; i < triangleCount; i++) {
const normal = readVector(dataView, off);
off += 12; // 3 floats
const face = new StlFace(normal);
for (let j = 0; j < 3; j++) {
const position = readVector(dataView, off);
off += 12;
face.vertices.push(position);
}
solid.faces.push(face);
off += 2; // skip attribute byte count
}
return solid;
}