|
@@ -17,11 +17,29 @@ THREE.STLBinaryExporter.prototype = {
|
|
|
|
|
|
return function parse( scene ) {
|
|
|
|
|
|
+ // We collect objects first, as we may need to convert from BufferGeometry to Geometry
|
|
|
+ var objects = [];
|
|
|
var triangles = 0;
|
|
|
scene.traverse( function ( object ) {
|
|
|
|
|
|
if ( ! ( object instanceof THREE.Mesh ) ) return;
|
|
|
- triangles += object.geometry.faces.length;
|
|
|
+
|
|
|
+ var geometry = object.geometry;
|
|
|
+ if ( geometry instanceof THREE.BufferGeometry ) {
|
|
|
+
|
|
|
+ geometry = new THREE.Geometry().fromBufferGeometry( geometry );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( ! ( geometry instanceof THREE.Geometry ) ) return;
|
|
|
+ triangles += geometry.faces.length;
|
|
|
+
|
|
|
+ objects.push( {
|
|
|
+
|
|
|
+ geometry: geometry,
|
|
|
+ matrix: object.matrixWorld
|
|
|
+
|
|
|
+ } );
|
|
|
|
|
|
} );
|
|
|
|
|
@@ -31,25 +49,13 @@ THREE.STLBinaryExporter.prototype = {
|
|
|
var output = new DataView( arrayBuffer );
|
|
|
output.setUint32( offset, triangles, true ); offset += 4;
|
|
|
|
|
|
- scene.traverse( function ( object ) {
|
|
|
-
|
|
|
- if ( ! ( object instanceof THREE.Mesh ) ) return;
|
|
|
-
|
|
|
- var geometry = object.geometry;
|
|
|
- if ( geometry instanceof THREE.BufferGeometry ) {
|
|
|
-
|
|
|
- geometry = new THREE.Geometry().fromBufferGeometry( geometry );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if ( ! ( geometry instanceof THREE.Geometry ) ) return;
|
|
|
-
|
|
|
- var matrixWorld = object.matrixWorld;
|
|
|
+ // Traversing our collected objects
|
|
|
+ objects.forEach( function ( object ) {
|
|
|
|
|
|
- var vertices = geometry.vertices;
|
|
|
- var faces = geometry.faces;
|
|
|
+ var vertices = object.geometry.vertices;
|
|
|
+ var faces = object.geometry.faces;
|
|
|
|
|
|
- normalMatrixWorld.getNormalMatrix( matrixWorld );
|
|
|
+ normalMatrixWorld.getNormalMatrix( object.matrix );
|
|
|
|
|
|
for ( var i = 0, l = faces.length; i < l; i ++ ) {
|
|
|
|
|
@@ -65,7 +71,7 @@ THREE.STLBinaryExporter.prototype = {
|
|
|
|
|
|
for ( var j = 0; j < 3; j ++ ) {
|
|
|
|
|
|
- vector.copy( vertices[ indices[ j ] ] ).applyMatrix4( matrixWorld );
|
|
|
+ vector.copy( vertices[ indices[ j ] ] ).applyMatrix4( object.matrix );
|
|
|
|
|
|
output.setFloat32( offset, vector.x, true ); offset += 4; // vertices
|
|
|
output.setFloat32( offset, vector.y, true ); offset += 4;
|