Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.01 KB | None | 0 0
  1. 1. Go to: http://www.brainfacts.org/3d-brain#intro=false
  2.  
  3. 2. Copy this into console:
  4. THREE.STLExporter = function () {};
  5.  
  6. THREE.STLExporter.prototype = {
  7.  
  8. constructor: THREE.STLExporter,
  9.  
  10. parse: ( function () {
  11.  
  12. var vector = new THREE.Vector3();
  13. var normalMatrixWorld = new THREE.Matrix3();
  14.  
  15. return function parse( scene, options ) {
  16.  
  17. if ( options === undefined ) options = {};
  18.  
  19. var binary = options.binary !== undefined ? options.binary : false;
  20.  
  21. //
  22.  
  23. var objects = [];
  24. var triangles = 0;
  25.  
  26. scene.traverse( function ( object ) {
  27.  
  28. if ( object.isMesh ) {
  29.  
  30. var geometry = object.geometry;
  31.  
  32. if ( geometry.isBufferGeometry ) {
  33.  
  34. geometry = new THREE.Geometry().fromBufferGeometry( geometry );
  35.  
  36. }
  37.  
  38. if ( geometry.isGeometry ) {
  39.  
  40. triangles += geometry.faces.length;
  41.  
  42. objects.push( {
  43.  
  44. geometry: geometry,
  45. matrixWorld: object.matrixWorld
  46.  
  47. } );
  48.  
  49. }
  50.  
  51. }
  52.  
  53. } );
  54.  
  55. if ( binary ) {
  56.  
  57. var offset = 80; // skip header
  58. var bufferLength = triangles * 2 + triangles * 3 * 4 * 4 + 80 + 4;
  59. var arrayBuffer = new ArrayBuffer( bufferLength );
  60. var output = new DataView( arrayBuffer );
  61. output.setUint32( offset, triangles, true ); offset += 4;
  62.  
  63. for ( var i = 0, il = objects.length; i < il; i ++ ) {
  64.  
  65. var object = objects[ i ];
  66.  
  67. var vertices = object.geometry.vertices;
  68. var faces = object.geometry.faces;
  69. var matrixWorld = object.matrixWorld;
  70.  
  71. normalMatrixWorld.getNormalMatrix( matrixWorld );
  72.  
  73. for ( var j = 0, jl = faces.length; j < jl; j ++ ) {
  74.  
  75. var face = faces[ j ];
  76.  
  77. vector.copy( face.normal ).applyMatrix3( normalMatrixWorld ).normalize();
  78.  
  79. output.setFloat32( offset, vector.x, true ); offset += 4; // normal
  80. output.setFloat32( offset, vector.y, true ); offset += 4;
  81. output.setFloat32( offset, vector.z, true ); offset += 4;
  82.  
  83. var indices = [ face.a, face.b, face.c ];
  84.  
  85. for ( var k = 0; k < 3; k ++ ) {
  86.  
  87. vector.copy( vertices[ indices[ k ] ] ).applyMatrix4( matrixWorld );
  88.  
  89. output.setFloat32( offset, vector.x, true ); offset += 4; // vertices
  90. output.setFloat32( offset, vector.y, true ); offset += 4;
  91. output.setFloat32( offset, vector.z, true ); offset += 4;
  92.  
  93. }
  94.  
  95. output.setUint16( offset, 0, true ); offset += 2; // attribute byte count
  96.  
  97. }
  98.  
  99. }
  100.  
  101. return output;
  102.  
  103. } else {
  104.  
  105. var output = '';
  106.  
  107. output += 'solid exported\n';
  108.  
  109. for ( var i = 0, il = objects.length; i < il; i ++ ) {
  110.  
  111. var object = objects[ i ];
  112.  
  113. var vertices = object.geometry.vertices;
  114. var faces = object.geometry.faces;
  115. var matrixWorld = object.matrixWorld;
  116.  
  117. normalMatrixWorld.getNormalMatrix( matrixWorld );
  118.  
  119. for ( var j = 0, jl = faces.length; j < jl; j ++ ) {
  120.  
  121. var face = faces[ j ];
  122.  
  123. vector.copy( face.normal ).applyMatrix3( normalMatrixWorld ).normalize();
  124.  
  125. output += '\tfacet normal ' + vector.x + ' ' + vector.y + ' ' + vector.z + '\n';
  126. output += '\t\touter loop\n';
  127.  
  128. var indices = [ face.a, face.b, face.c ];
  129.  
  130. for ( var k = 0; k < 3; k ++ ) {
  131.  
  132. vector.copy( vertices[ indices[ k ] ] ).applyMatrix4( matrixWorld );
  133.  
  134. output += '\t\t\tvertex ' + vector.x + ' ' + vector.y + ' ' + vector.z + '\n';
  135.  
  136. }
  137.  
  138. output += '\t\tendloop\n';
  139. output += '\tendfacet\n';
  140.  
  141. }
  142.  
  143. }
  144.  
  145. output += 'endsolid exported\n';
  146.  
  147. return output;
  148.  
  149. }
  150.  
  151. };
  152.  
  153. }() )
  154.  
  155. };
  156.  
  157. 3. Do this:
  158. var exporter = new THREE.STLExporter();
  159.  
  160. 4. Do this:
  161. var data = exporter.parse( Bapp.Controller.instances["bapp-main-container"].scene.scene, { binary: true } );
  162.  
  163. 5. Do this:
  164. function download(content, fileName, contentType) {
  165. var a = document.createElement("a");
  166. var file = new Blob([content], {type: contentType});
  167. a.href = URL.createObjectURL(file);
  168. a.download = fileName;
  169. a.click();
  170. }
  171.  
  172. 6. Do this:
  173. download(data, 'stl.txt', 'text/plain');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement