STLExporter.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * @author kovacsv / http://kovacsv.hu/
  3. */
  4. THREE.STLExporter = function () {
  5. this.stlContent = '';
  6. };
  7. THREE.STLExporter.prototype = {
  8. constructor: THREE.STLExporter,
  9. exportScene : function (scene) {
  10. var meshes = [];
  11. var current;
  12. scene.traverse (function (current) {
  13. if (current instanceof THREE.Mesh) {
  14. meshes.push (current);
  15. }
  16. });
  17. return this.exportMeshes (meshes);
  18. },
  19. exportMesh : function (mesh) {
  20. return this.exportMeshes ([mesh]);
  21. },
  22. exportMeshes : function (meshes) {
  23. this.addLineToContent ('solid exported');
  24. var i, j, mesh, geometry, face, matrix, position;
  25. var normal, vertex1, vertex2, vertex3;
  26. for (i = 0; i < meshes.length; i++) {
  27. mesh = meshes[i];
  28. geometry = mesh.geometry;
  29. matrix = mesh.matrix;
  30. position = mesh.position;
  31. for (j = 0; j < geometry.faces.length; j++) {
  32. face = geometry.faces[j];
  33. normal = face.normal;
  34. vertex1 = this.getTransformedPosition (geometry.vertices[face.a], matrix, position);
  35. vertex2 = this.getTransformedPosition (geometry.vertices[face.b], matrix, position);
  36. vertex3 = this.getTransformedPosition (geometry.vertices[face.c], matrix, position);
  37. this.addTriangleToContent (normal, vertex1, vertex2, vertex3);
  38. }
  39. };
  40. this.addLineToContent ('endsolid exported');
  41. return this.stlContent;
  42. },
  43. clearContent : function ()
  44. {
  45. this.stlContent = '';
  46. },
  47. addLineToContent : function (line) {
  48. this.stlContent += line + '\n';
  49. },
  50. addTriangleToContent : function (normal, vertex1, vertex2, vertex3) {
  51. this.addLineToContent ('\tfacet normal ' + normal.x + ' ' + normal.y + ' ' + normal.z);
  52. this.addLineToContent ('\t\touter loop');
  53. this.addLineToContent ('\t\t\tvertex ' + vertex1.x + ' ' + vertex1.y + ' ' + vertex1.z);
  54. this.addLineToContent ('\t\t\tvertex ' + vertex2.x + ' ' + vertex2.y + ' ' + vertex2.z);
  55. this.addLineToContent ('\t\t\tvertex ' + vertex3.x + ' ' + vertex3.y + ' ' + vertex3.z);
  56. this.addLineToContent ('\t\tendloop');
  57. this.addLineToContent ('\tendfacet');
  58. },
  59. getTransformedPosition : function (vertex, matrix, position) {
  60. var result = vertex.clone ();
  61. if (matrix !== undefined) {
  62. result.applyMatrix4 (matrix);
  63. }
  64. if (position !== undefined) {
  65. result.add (position);
  66. }
  67. return result;
  68. }
  69. };