فهرست منبع

PCDLoader: Refactoring

Mugen87 8 سال پیش
والد
کامیت
b7275913c1
1فایلهای تغییر یافته به همراه82 افزوده شده و 79 حذف شده
  1. 82 79
      examples/js/loaders/PCDLoader.js

+ 82 - 79
examples/js/loaders/PCDLoader.js

@@ -1,5 +1,6 @@
 /**
  * @author Filipe Caixeta / http://filipecaixeta.com.br
+ * @author Mugen87 / https://github.com/Mugen87
  *
  * Description: A THREE loader for PCD ascii and binary files.
  *
@@ -33,147 +34,149 @@ THREE.PCDLoader.prototype = {
 
 	},
 
-	binarryToStr: function ( data ) {
+	parse: function ( data, url ) {
 
-		var charArray = new Uint8Array( data );
+		function binarryToStr( data ) {
 
-		if ( window.TextDecoder !== undefined ) {
+			var charArray = new Uint8Array( data );
 
-			return new TextDecoder().decode( charArray );
+			if ( window.TextDecoder !== undefined ) {
 
-		}
+				return new TextDecoder().decode( charArray );
+
+			}
 
-		var text = '';
-		for ( var i = 0, il = data.byteLength; i < il; i ++ ) {
+			var text = '';
 
-			text += String.fromCharCode( charArray[ i ] );
+			for ( var i = 0, il = data.byteLength; i < il; i ++ ) {
+
+				text += String.fromCharCode( charArray[ i ] );
+
+			}
+
+			return text;
 
 		}
-		return text;
 
-	},
+		function parseHeader( data ) {
 
-	parseHeader: function ( data ) {
+			var PCDheader = {};
+			var result1 = data.search( /[\r\n]DATA\s(\S*)\s/i );
+			var result2 = /[\r\n]DATA\s(\S*)\s/i.exec( data.substr( result1 - 1 ) );
 
-		var PCDheader = {};
-		var result1 = data.search( /[\r\n]DATA\s(\S*)\s/i );
-		var result2 = /[\r\n]DATA\s(\S*)\s/i.exec( data.substr( result1 - 1 ) );
+			var i, l;
 
-		var i, l;
+			PCDheader.data = result2[ 1 ];
+			PCDheader.headerLen = result2[ 0 ].length + result1;
+			PCDheader.str = data.substr( 0, PCDheader.headerLen );
 
-		PCDheader.data = result2[ 1 ];
-		PCDheader.headerLen = result2[ 0 ].length + result1;
-		PCDheader.str = data.substr( 0, PCDheader.headerLen );
+			// remove comments
 
-		// remove comments
+			PCDheader.str = PCDheader.str.replace( /\#.*/gi, '' );
 
-		PCDheader.str = PCDheader.str.replace( /\#.*/gi, '' );
+			// parse
 
-		// parse
+			PCDheader.version = /VERSION (.*)/i.exec( PCDheader.str );
+			PCDheader.fields = /FIELDS (.*)/i.exec( PCDheader.str );
+			PCDheader.size = /SIZE (.*)/i.exec( PCDheader.str );
+			PCDheader.type = /TYPE (.*)/i.exec( PCDheader.str );
+			PCDheader.count = /COUNT (.*)/i.exec( PCDheader.str );
+			PCDheader.width = /WIDTH (.*)/i.exec( PCDheader.str );
+			PCDheader.height = /HEIGHT (.*)/i.exec( PCDheader.str );
+			PCDheader.viewpoint = /VIEWPOINT (.*)/i.exec( PCDheader.str );
+			PCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );
 
-		PCDheader.version = /VERSION (.*)/i.exec( PCDheader.str );
-		PCDheader.fields = /FIELDS (.*)/i.exec( PCDheader.str );
-		PCDheader.size = /SIZE (.*)/i.exec( PCDheader.str );
-		PCDheader.type = /TYPE (.*)/i.exec( PCDheader.str );
-		PCDheader.count = /COUNT (.*)/i.exec( PCDheader.str );
-		PCDheader.width = /WIDTH (.*)/i.exec( PCDheader.str );
-		PCDheader.height = /HEIGHT (.*)/i.exec( PCDheader.str );
-		PCDheader.viewpoint = /VIEWPOINT (.*)/i.exec( PCDheader.str );
-		PCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );
+			// evaluate
 
-		// evaluate
+			if ( PCDheader.version !== null )
+				PCDheader.version = parseFloat( PCDheader.version[ 1 ] );
 
-		if ( PCDheader.version !== null )
-			PCDheader.version = parseFloat( PCDheader.version[ 1 ] );
+			if ( PCDheader.fields !== null )
+				PCDheader.fields = PCDheader.fields[ 1 ].split( ' ' );
 
-		if ( PCDheader.fields !== null )
-			PCDheader.fields = PCDheader.fields[ 1 ].split( ' ' );
+			if ( PCDheader.type !== null )
+				PCDheader.type = PCDheader.type[ 1 ].split( ' ' );
 
-		if ( PCDheader.type !== null )
-			PCDheader.type = PCDheader.type[ 1 ].split( ' ' );
+			if ( PCDheader.width !== null )
+				PCDheader.width = parseInt( PCDheader.width[ 1 ] );
 
-		if ( PCDheader.width !== null )
-			PCDheader.width = parseInt( PCDheader.width[ 1 ] );
+			if ( PCDheader.height !== null )
+				PCDheader.height = parseInt( PCDheader.height[ 1 ] );
 
-		if ( PCDheader.height !== null )
-			PCDheader.height = parseInt( PCDheader.height[ 1 ] );
+			if ( PCDheader.viewpoint !== null )
+				PCDheader.viewpoint = PCDheader.viewpoint[ 1 ];
 
-		if ( PCDheader.viewpoint !== null )
-			PCDheader.viewpoint = PCDheader.viewpoint[ 1 ];
+			if ( PCDheader.points !== null )
+				PCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );
 
-		if ( PCDheader.points !== null )
-			PCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );
+			if ( PCDheader.points === null )
+				PCDheader.points = PCDheader.width * PCDheader.height;
 
-		if ( PCDheader.points === null )
-			PCDheader.points = PCDheader.width * PCDheader.height;
+			if ( PCDheader.size !== null ) {
 
-		if ( PCDheader.size !== null ) {
+				PCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {
 
-			PCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {
+					return parseInt( x, 10 );
 
-				return parseInt( x, 10 );
+				} );
 
-			} );
+			}
 
-		}
+			if ( PCDheader.count !== null ) {
 
-		if ( PCDheader.count !== null ) {
+				PCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {
 
-			PCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {
+					return parseInt( x, 10 );
 
-				return parseInt( x, 10 );
+				} );
 
-			} );
+			} else {
 
-		} else {
+				PCDheader.count = [];
 
-			PCDheader.count = [];
+				for ( i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
 
-			for ( i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
+					PCDheader.count.push( 1 );
 
-				PCDheader.count.push( 1 );
+				}
 
 			}
 
-		}
+			PCDheader.offset = {};
 
-		PCDheader.offset = {};
+			var sizeSum = 0;
 
-		var sizeSum = 0;
+			for ( i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
 
-		for ( i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
+				if ( PCDheader.data === 'ascii' ) {
 
-			if ( PCDheader.data === 'ascii' ) {
+					PCDheader.offset[ PCDheader.fields[ i ] ] = i;
 
-				PCDheader.offset[ PCDheader.fields[ i ] ] = i;
+				} else {
 
-			} else {
+					PCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;
+					sizeSum += PCDheader.size[ i ];
 
-				PCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;
-				sizeSum += PCDheader.size[ i ];
+				}
 
 			}
 
-		}
-
-		// for binary only
-
-		PCDheader.rowSize = sizeSum;
+			// for binary only
 
-		return PCDheader;
+			PCDheader.rowSize = sizeSum;
 
-	},
+			return PCDheader;
 
-	parse: function ( data, url ) {
+		}
 
 		var dataView, offset;
 		var i, l;
 
-		var textData = this.binarryToStr( data );
+		var textData = binarryToStr( data );
 
 		// parse header (always ascii format)
 
-		var PCDheader = this.parseHeader( textData );
+		var PCDheader = parseHeader( textData );
 
 		// parse data