mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-08 17:33:15 +01:00
33 lines
No EOL
797 B
JavaScript
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;
|
|
} |