Skip to content

Instantly share code, notes, and snippets.

@marko-knoebl
Forked from paulkaplan/STLFileSaver.js
Last active August 29, 2015 14:16
Show Gist options
  • Save marko-knoebl/244ec056ccd2c90adf77 to your computer and use it in GitHub Desktop.
Save marko-knoebl/244ec056ccd2c90adf77 to your computer and use it in GitHub Desktop.
/*
Paul Kaplan, @ifitdidntwork
Create an ASCII STL file from a THREE.js mesh
that can be saved save from browser and 3D printed
--------------------------------------------------
See further explanation here:
http://buildaweso.me/project/2013/2/25/converting-threejs-objects-to-stl-files
--------------------------------------------------
Saving the file out of the browser is done using FileSaver.js
find that here: https://github.com/eligrey/FileSaver.js
*/
function stringifyVector(vec){
return ""+vec.x+" "+vec.y+" "+vec.z;
}
function stringifyVertex(vec){
return "vertex "+stringifyVector(vec)+" \n";
}
// Given a THREE.Geometry, create an STL string
function generateSTL(geometry){
var vertices = geometry.vertices;
var tris = geometry.faces;
var stl = "solid model\n";
for(var i = 0; i<tris.length; i++){
stl += ("facet normal "+stringifyVector( tris[i].normal )+" \n");
stl += ("outer loop \n");
stl += stringifyVertex( vertices[ tris[i].a ] );
stl += stringifyVertex( vertices[ tris[i].b ] );
stl += stringifyVertex( vertices[ tris[i].c ] );
stl += ("endloop \n");
stl += ("endfacet \n");
}
stl += ("endsolid");
return stl
}
// Use FileSaver.js 'saveAs' function to save the string
function saveSTL( geometry, name ){
var stlString = generateSTL( geometry );
var blob = new Blob([stlString], {type: 'text/plain'});
saveAs(blob, name + '.stl');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment