2
0

STLExporter.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * @author kovacsv / http://kovacsv.hu/
  3. * @author mrdoob / http://mrdoob.com/
  4. */
  5. THREE.STLExporter = function () {};
  6. THREE.STLExporter.prototype = {
  7. constructor: THREE.STLExporter,
  8. parse: ( function () {
  9. var vector = new THREE.Vector3();
  10. var normalMatrixWorld = new THREE.Matrix3();
  11. return function parse( scene ) {
  12. var output = '';
  13. output += 'solid exported\n';
  14. scene.traverse( function ( object ) {
  15. if ( object instanceof THREE.Mesh ) {
  16. var geometry = object.geometry;
  17. var matrixWorld = object.matrixWorld;
  18. if ( geometry instanceof THREE.BufferGeometry ) {
  19. geometry = new THREE.Geometry().fromBufferGeometry( geometry );
  20. }
  21. if ( geometry instanceof THREE.Geometry ) {
  22. var vertices = geometry.vertices;
  23. var faces = geometry.faces;
  24. normalMatrixWorld.getNormalMatrix( matrixWorld );
  25. for ( var i = 0, l = faces.length; i < l; i ++ ) {
  26. var face = faces[ i ];
  27. vector.copy( face.normal ).applyMatrix3( normalMatrixWorld ).normalize();
  28. output += '\tfacet normal ' + vector.x + ' ' + vector.y + ' ' + vector.z + '\n';
  29. output += '\t\touter loop\n';
  30. var indices = [ face.a, face.b, face.c ];
  31. for ( var j = 0; j < 3; j ++ ) {
  32. vector.copy( vertices[ indices[ j ] ] ).applyMatrix4( matrixWorld );
  33. output += '\t\t\tvertex ' + vector.x + ' ' + vector.y + ' ' + vector.z + '\n';
  34. }
  35. output += '\t\tendloop\n';
  36. output += '\tendfacet\n';
  37. }
  38. }
  39. }
  40. } );
  41. output += 'endsolid exported\n';
  42. return output;
  43. };
  44. }() )
  45. };