stl-exporter
Version:
Convert face-vertex, or polygon meshes to ascii and binary STLs
40 lines (36 loc) • 1.97 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var writeStringToBufferView;
writeStringToBufferView = require('./helpers/writeStringToBufferView');
module.exports = function(model) {
var a, attributeByteCountLength, buffer, bufferLength, contentLength, dataView, faceNormalCoordinates, faceVertexIndices, facetLength, facetsCounterLength, headerLength, headerView, i, j, k, le, name, offset, ref, vectorLength, vertexCoordinates;
faceNormalCoordinates = model.faceNormalCoordinates, faceVertexIndices = model.faceVertexIndices, vertexCoordinates = model.vertexCoordinates, name = model.name;
headerLength = 80;
facetsCounterLength = 4;
vectorLength = 12;
attributeByteCountLength = 2;
facetLength = vectorLength * 4 + attributeByteCountLength;
contentLength = (faceVertexIndices.length / 3) * facetLength;
bufferLength = headerLength + facetsCounterLength + contentLength;
buffer = new ArrayBuffer(bufferLength);
headerView = new DataView(buffer, 0, headerLength);
dataView = new DataView(buffer, headerLength);
le = true;
writeStringToBufferView(name, headerView);
dataView.setUint32(0, faceVertexIndices.length / 3, le);
offset = facetsCounterLength;
for (i = j = 0, ref = faceVertexIndices.length; j < ref; i = j += 3) {
dataView.setFloat32(offset, faceNormalCoordinates[i], le);
dataView.setFloat32(offset += 4, faceNormalCoordinates[i + 1], le);
dataView.setFloat32(offset += 4, faceNormalCoordinates[i + 2], le);
for (a = k = 0; k <= 2; a = ++k) {
dataView.setFloat32(offset += 4, vertexCoordinates[faceVertexIndices[i + a] * 3], le);
dataView.setFloat32(offset += 4, vertexCoordinates[faceVertexIndices[i + a] * 3 + 1], le);
dataView.setFloat32(offset += 4, vertexCoordinates[faceVertexIndices[i + a] * 3 + 2], le);
}
dataView.setUint16(offset += 4, 0, le);
offset += 2;
}
return buffer;
};
}).call(this);