提交 394d9bfb 编写于 作者: M Mugen87

STLLoader: Refactoring

上级 a33b5b65
......@@ -56,10 +56,10 @@ THREE.STLLoader.prototype = {
parse: function ( data ) {
var isBinary = function () {
function isBinary( data ) {
var expect, face_size, n_faces, reader;
reader = new DataView( binData );
reader = new DataView( data );
face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );
n_faces = reader.getUint32( 80, true );
expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );
......@@ -75,6 +75,7 @@ THREE.STLLoader.prototype = {
// plentiful. So, check the first 5 bytes for 'solid'.
// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'
var solid = [ 115, 111, 108, 105, 100 ];
for ( var i = 0; i < 5; i ++ ) {
......@@ -87,17 +88,12 @@ THREE.STLLoader.prototype = {
}
// First 5 bytes read "solid"; declare it to be an ASCII STL
return false;
};
var binData = this.ensureBinary( data );
return isBinary() ? this.parseBinary( binData ) : this.parseASCII( this.ensureString( data ) );
return false;
},
}
parseBinary: function ( data ) {
function parseBinary( data ) {
var reader = new DataView( data );
var faces = reader.getUint32( 80, true );
......@@ -196,9 +192,9 @@ THREE.STLLoader.prototype = {
return geometry;
},
}
parseASCII: function ( data ) {
function parseASCII( data ) {
var geometry = new THREE.BufferGeometry();
var patternFace = /facet([\s\S]*?)endfacet/g;
......@@ -239,17 +235,19 @@ THREE.STLLoader.prototype = {
}
// Every face have to own ONE valid normal
// every face have to own ONE valid normal
if ( normalCountPerFace !== 1 ) {
throw new Error( 'Something isn\'t right with the normal of face number ' + faceCounter );
console.error( 'THREE.STLLoader: Something isn\'t right with the normal of face number ' + faceCounter );
}
// Each face have to own THREE valid vertices
// each face have to own THREE valid vertices
if ( vertexCountPerFace !== 3 ) {
throw new Error( 'Something isn\'t right with the vertices of face number ' + faceCounter );
console.error( 'THREE.STLLoader: Something isn\'t right with the vertices of face number ' + faceCounter );
}
......@@ -257,18 +255,18 @@ THREE.STLLoader.prototype = {
}
geometry.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( vertices ), 3 ) );
geometry.addAttribute( 'normal', new THREE.BufferAttribute( new Float32Array( normals ), 3 ) );
geometry.addAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) );
geometry.addAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) );
return geometry;
},
}
ensureString: function ( buf ) {
function ensureString( buffer ) {
if ( typeof buf !== "string" ) {
if ( typeof buffer !== 'string' ) {
var array_buffer = new Uint8Array( buf );
var array_buffer = new Uint8Array( buffer );
if ( window.TextDecoder !== undefined ) {
......@@ -278,7 +276,7 @@ THREE.STLLoader.prototype = {
var str = '';
for ( var i = 0, il = buf.byteLength; i < il; i ++ ) {
for ( var i = 0, il = buffer.byteLength; i < il; i ++ ) {
str += String.fromCharCode( array_buffer[ i ] ); // implicitly assumes little-endian
......@@ -288,30 +286,38 @@ THREE.STLLoader.prototype = {
} else {
return buf;
return buffer;
}
},
}
ensureBinary: function ( buf ) {
function ensureBinary( buffer ) {
if ( typeof buf === "string" ) {
if ( typeof buffer === 'string' ) {
var array_buffer = new Uint8Array( buf.length );
for ( var i = 0; i < buf.length; i ++ ) {
var array_buffer = new Uint8Array( buffer.length );
for ( var i = 0; i < buffer.length; i ++ ) {
array_buffer[ i ] = buf.charCodeAt( i ) & 0xff; // implicitly assumes little-endian
array_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian
}
return array_buffer.buffer || array_buffer;
} else {
return buf;
return buffer;
}
}
// start
var binData = ensureBinary( data );
return isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );
}
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册