Skip to content

Instantly share code, notes, and snippets.

@tyrumus
Forked from paulkaplan/STLFileSaver.js
Created March 12, 2018 21:04
Show Gist options
  • Save tyrumus/d2ba02de21300965e9bb7ce89103e334 to your computer and use it in GitHub Desktop.
Save tyrumus/d2ba02de21300965e9bb7ce89103e334 to your computer and use it in GitHub Desktop.
Create an ASCII STL file from a THREE.js mesh that can be saved save from browser and 3D printed
/*
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 stringifyVertex(vec){
return "vertex "+vec.x+" "+vec.y+" "+vec.z+" \n";
}
// Given a THREE.Geometry, create an STL string
function generateSTL(geometry){
var vertices = geometry.vertices;
var tris = geometry.faces;
var stl = "solid pixel\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