Pārlūkot izejas kodu

Merge pull request #18297 from DavidPeicho/fix/vtkloader-too-greedy

VTKLoader: fix float reading too greedy
Mr.doob 5 gadi atpakaļ
vecāks
revīzija
5742a42eb8

+ 9 - 0
examples/js/loaders/VTKLoader.js

@@ -52,6 +52,9 @@ THREE.VTKLoader.prototype = Object.assign( Object.create( THREE.Loader.prototype
 
 			var result;
 
+			// pattern for detecting the end of a number sequence
+			var patWord = /^[^\d.\s-]+/;
+
 			// pattern for reading vertices, 3 floats or integers
 			var pat3Floats = /(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)/g;
 
@@ -105,6 +108,8 @@ THREE.VTKLoader.prototype = Object.assign( Object.create( THREE.Loader.prototype
 					// get the vertices
 					while ( ( result = pat3Floats.exec( line ) ) !== null ) {
 
+						if ( patWord.exec( line ) !== null ) break;
+
 						var x = parseFloat( result[ 1 ] );
 						var y = parseFloat( result[ 2 ] );
 						var z = parseFloat( result[ 3 ] );
@@ -183,6 +188,8 @@ THREE.VTKLoader.prototype = Object.assign( Object.create( THREE.Loader.prototype
 
 						while ( ( result = pat3Floats.exec( line ) ) !== null ) {
 
+							if ( patWord.exec( line ) !== null ) break;
+
 							var r = parseFloat( result[ 1 ] );
 							var g = parseFloat( result[ 2 ] );
 							var b = parseFloat( result[ 3 ] );
@@ -196,6 +203,8 @@ THREE.VTKLoader.prototype = Object.assign( Object.create( THREE.Loader.prototype
 
 						while ( ( result = pat3Floats.exec( line ) ) !== null ) {
 
+							if ( patWord.exec( line ) !== null ) break;
+
 							var nx = parseFloat( result[ 1 ] );
 							var ny = parseFloat( result[ 2 ] );
 							var nz = parseFloat( result[ 3 ] );

+ 9 - 0
examples/jsm/loaders/VTKLoader.js

@@ -62,6 +62,9 @@ VTKLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
 
 			var result;
 
+			// pattern for detecting the end of a number sequence
+			var patWord = /^[^\d.\s-]+/;
+
 			// pattern for reading vertices, 3 floats or integers
 			var pat3Floats = /(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)/g;
 
@@ -115,6 +118,8 @@ VTKLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
 					// get the vertices
 					while ( ( result = pat3Floats.exec( line ) ) !== null ) {
 
+						if ( patWord.exec( line ) !== null ) break;
+
 						var x = parseFloat( result[ 1 ] );
 						var y = parseFloat( result[ 2 ] );
 						var z = parseFloat( result[ 3 ] );
@@ -193,6 +198,8 @@ VTKLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
 
 						while ( ( result = pat3Floats.exec( line ) ) !== null ) {
 
+							if ( patWord.exec( line ) !== null ) break;
+
 							var r = parseFloat( result[ 1 ] );
 							var g = parseFloat( result[ 2 ] );
 							var b = parseFloat( result[ 3 ] );
@@ -206,6 +213,8 @@ VTKLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
 
 						while ( ( result = pat3Floats.exec( line ) ) !== null ) {
 
+							if ( patWord.exec( line ) !== null ) break;
+
 							var nx = parseFloat( result[ 1 ] );
 							var ny = parseFloat( result[ 2 ] );
 							var nz = parseFloat( result[ 3 ] );