stl-exporter
Version:
Convert face-vertex, or polygon meshes to ascii and binary STLs
141 lines (110 loc) • 3.57 kB
text/coffeescript
fs = require 'fs'
path = require 'path'
yaml = require 'js-yaml'
bufferConverter = require 'buffer-converter'
GenericStream = require './helpers/GenericStream'
BufferedStream = require './helpers/BufferedStream'
stlExporter = require '../source/index'
expect = require('chai').expect
faceVertexTetrahedronPath = path.join(
__dirname,
'models/faceVertexTetrahedron.yaml'
)
faceVertexTetrahedron = yaml.safeLoad fs.readFileSync faceVertexTetrahedronPath
faceVertexTrianglePath = path.join(
__dirname,
'models/faceVertexTriangle.yaml'
)
faceVertexTriangle = yaml.safeLoad fs.readFileSync faceVertexTrianglePath
describe 'STL Exporter', ->
describe 'Buffered', ->
it 'converts a face-vertex-mesh json object to an ascii STL string', ->
minifiedTetrahedronStl = fs.readFileSync(
path.resolve(
__dirname,
'../node_modules/stl-models/polytopes/',
'tetrahedron.min.ascii.stl'
),
'utf-8'
)
convertedTetrahedronStl = stlExporter.toAsciiStl(
faceVertexTetrahedron
)
expect(convertedTetrahedronStl).to.equal(minifiedTetrahedronStl)
it 'converts a face-vertex-mesh json object
to a beautified ascii STL string', ->
tetrahedronStl = fs.readFileSync(
path.resolve(
__dirname,
'../node_modules/stl-models/polytopes/tetrahedron.ascii.stl'
),
'utf-8'
)
convertedTetrahedronStl = stlExporter.toAsciiStl(
faceVertexTetrahedron,
{beautify: true}
)
expect(convertedTetrahedronStl).to.equal(tetrahedronStl)
it 'converts a face-vertex-mesh json object to a binary STL string', ->
minifiedTetrahedronStl = fs.readFileSync(
path.resolve(
__dirname,
'../node_modules/stl-models/polytopes/tetrahedron.bin.stl'
)
)
convertedTetrahedronStl = bufferConverter.toBuffer(
stlExporter.toBinaryStl faceVertexTetrahedron
)
expect(convertedTetrahedronStl)
.to.deep.equal(minifiedTetrahedronStl)
describe 'Streamed', ->
it 'streams a binary STL file
to a beautified ascii STL stream', (done) ->
bufferedStream = new BufferedStream
bufferedStream.on 'finish', ->
expect bufferedStream.internalBuffer
.to.match /^tetrahedron/gi
done()
fs.createReadStream path.join(
__dirname,
'models/facesListTetrahedron.jsonl'
), {encoding: 'utf-8'}
.pipe stlExporter.getTransformStream {type: 'binary'}
.pipe bufferedStream
it 'transforms a polygon-mesh stream
to an ascii STL stream', (done) ->
bufferedStream = new BufferedStream
bufferedStream.on 'finish', ->
expect bufferedStream.internalBuffer
.to.contain 'solid'
.and.to.contain 'endsolid'
.and.to.contain 'facet'
.and.to.contain 'endfacet'
.and.to.contain 'normal'
.and.to.contain 'vertex'
done()
fs.createReadStream path.join(
__dirname,
'models/facesListTetrahedron.jsonl'
), {encoding: 'utf-8'}
.pipe stlExporter.getTransformStream {type: 'ascii'}
.pipe bufferedStream
it 'transforms a polygon-mesh stream
to a beautified ascii STL stream', (done) ->
bufferedStream = new BufferedStream
bufferedStream.on 'finish', ->
expect bufferedStream.internalBuffer
.to.contain 'solid'
.and.to.contain 'endsolid'
.and.to.contain 'facet'
.and.to.contain 'endfacet'
.and.to.contain 'normal'
.and.to.contain 'vertex'
.and.to.contain '\t'
done()
fs.createReadStream path.join(
__dirname,
'models/facesListTetrahedron.jsonl'
), {encoding: 'utf-8'}
.pipe stlExporter.getTransformStream {type: 'ascii', beautify: true}
.pipe bufferedStream