|
@@ -99,46 +99,42 @@ THREE.STLLoader.prototype.parse = function ( data ) {
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
-THREE.STLLoader.prototype.parseBinary = function (data) {
|
|
|
|
|
|
+THREE.STLLoader.prototype.parseBinary = function ( data ) {
|
|
|
|
|
|
- var face, geometry, n_faces, reader, length, normal, i, dataOffset, faceLength, start, vertexstart;
|
|
|
|
|
|
+ var reader = new DataView( data );
|
|
|
|
+ var faces = reader.getUint32( 80, true );
|
|
|
|
+ var dataOffset = 84;
|
|
|
|
+ var faceLength = 12 * 4 + 2;
|
|
|
|
|
|
- reader = new DataView( data );
|
|
|
|
- n_faces = reader.getUint32(80,true);
|
|
|
|
- geometry = new THREE.Geometry();
|
|
|
|
- dataOffset = 84;
|
|
|
|
- faceLength = 12 * 4 + 2;
|
|
|
|
|
|
+ var vertices = new Float32Array( faces * 3 * 3 );
|
|
|
|
+ var normals = new Float32Array( faces * 3 * 3 );
|
|
|
|
+ var uvs = new Float32Array( faces * 3 * 2 );
|
|
|
|
|
|
- for (face = 0; face < n_faces; face++) {
|
|
|
|
|
|
+ var offset = 0;
|
|
|
|
|
|
- start = dataOffset + face * faceLength;
|
|
|
|
- normal = new THREE.Vector3(
|
|
|
|
- reader.getFloat32(start,true),
|
|
|
|
- reader.getFloat32(start + 4,true),
|
|
|
|
- reader.getFloat32(start + 8,true)
|
|
|
|
- );
|
|
|
|
|
|
+ for ( var face = 0; face < faces; face ++ ) {
|
|
|
|
|
|
- for (i = 1; i <= 3; i++) {
|
|
|
|
|
|
+ var start = dataOffset + face * faceLength;
|
|
|
|
|
|
- vertexstart = start + i * 12;
|
|
|
|
- geometry.vertices.push(
|
|
|
|
- new THREE.Vector3(
|
|
|
|
- reader.getFloat32(vertexstart,true),
|
|
|
|
- reader.getFloat32(vertexstart +4,true),
|
|
|
|
- reader.getFloat32(vertexstart + 8,true)
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
|
|
+ for ( var i = 1; i <= 3; i ++ ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ var vertexstart = start + i * 12;
|
|
|
|
|
|
- length = geometry.vertices.length;
|
|
|
|
- geometry.faces.push(new THREE.Face3(length - 3, length - 2, length - 1, normal));
|
|
|
|
|
|
+ vertices[ offset ] = reader.getFloat32( vertexstart, true );
|
|
|
|
+ vertices[ offset + 1 ] = reader.getFloat32( vertexstart + 4, true );
|
|
|
|
+ vertices[ offset + 2 ] = reader.getFloat32( vertexstart + 8, true );
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ normals[ offset ] = reader.getFloat32( start , true );
|
|
|
|
+ normals[ offset + 1 ] = reader.getFloat32( start + 4, true );
|
|
|
|
+ normals[ offset + 2 ] = reader.getFloat32( start + 8, true );
|
|
|
|
|
|
- geometry.computeBoundingSphere();
|
|
|
|
|
|
+ offset += 3;
|
|
|
|
|
|
- return geometry;
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new THREE.Geometry2( vertices, normals, uvs );
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|