UNPKG

stl-exporter

Version:

Convert face-vertex, or polygon meshes to ascii and binary STLs

40 lines (36 loc) 1.97 kB
// 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);