|
@@ -1,5 +1,5 @@
|
|
|
/**
|
|
|
- * @author mrdoob / http://mrdoob.com/
|
|
|
+ * @author Sebastien Valette [email protected]
|
|
|
*/
|
|
|
|
|
|
THREE.VTKLoader = function () {};
|
|
@@ -37,8 +37,8 @@ THREE.VTKLoader.prototype.load = function ( url, callback ) {
|
|
|
|
|
|
THREE.VTKLoader.prototype.parse = function ( data ) {
|
|
|
|
|
|
- var geometry=new THREE.Geometry();
|
|
|
- var lines=data.split("\n");
|
|
|
+ var geometry = new THREE.Geometry();
|
|
|
+ var lines = data.split("\n");
|
|
|
|
|
|
function v( x, y, z ) {
|
|
|
|
|
@@ -52,48 +52,65 @@ THREE.VTKLoader.prototype.parse = function ( data ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- var lineIndex=0;
|
|
|
-
|
|
|
- var line=lines[0].split(" ");
|
|
|
- var lineLength=line.length;
|
|
|
- var columnIndex=-1;
|
|
|
-
|
|
|
-
|
|
|
- function readNextString ()
|
|
|
- {
|
|
|
- while (1)
|
|
|
- {
|
|
|
- var nextWord=line[columnIndex];
|
|
|
- columnIndex++;
|
|
|
- if (columnIndex==lineLength)
|
|
|
- {
|
|
|
- lineIndex++;
|
|
|
- columnIndex=0;
|
|
|
- if (lineIndex>lines.length)
|
|
|
- return ("");
|
|
|
- line=lines[lineIndex].split(" ");
|
|
|
- lineLength=line.length;
|
|
|
+ var lineIndex = 0;
|
|
|
+
|
|
|
+ var line = lines[ 0 ].split( ' ' );
|
|
|
+ var lineLength = line.length;
|
|
|
+ var columnIndex = -1;
|
|
|
+
|
|
|
+ function readNextString() {
|
|
|
+
|
|
|
+ while ( 1 ) {
|
|
|
+
|
|
|
+ var nextWord = line[ columnIndex ];
|
|
|
+ columnIndex ++;
|
|
|
+
|
|
|
+ if ( columnIndex == lineLength ) {
|
|
|
+
|
|
|
+ lineIndex ++;
|
|
|
+ columnIndex = 0;
|
|
|
+
|
|
|
+ if ( lineIndex > lines.length ) {
|
|
|
+
|
|
|
+ return '';
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ line = lines[ lineIndex ].split( ' ' );
|
|
|
+ lineLength = line.length;
|
|
|
+
|
|
|
}
|
|
|
- if (nextWord!=null)
|
|
|
- if (nextWord.length>0)
|
|
|
- return (nextWord);
|
|
|
+
|
|
|
+ if ( nextWord != null ) {
|
|
|
+
|
|
|
+ if ( nextWord.length > 0 ) {
|
|
|
+
|
|
|
+ return nextWord;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// read point data
|
|
|
- var found=false;
|
|
|
- while (!found)
|
|
|
- {
|
|
|
- var readString=readNextString();
|
|
|
- switch (readString.toUpperCase())
|
|
|
- {
|
|
|
- case "POINTS":
|
|
|
- found=true;
|
|
|
+ var found = false;
|
|
|
+ while ( !found ) {
|
|
|
+
|
|
|
+ var readString = readNextString();
|
|
|
+
|
|
|
+ switch ( readString.toUpperCase() ) {
|
|
|
+
|
|
|
+ case 'POINTS':
|
|
|
+ found = true;
|
|
|
break;
|
|
|
- case "":
|
|
|
- alert ("error while reading "+url+" : \n");
|
|
|
+
|
|
|
+ case '':
|
|
|
+ alert ( 'error while reading ' + url + ' : \n' );
|
|
|
return;
|
|
|
- default:
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -101,109 +118,134 @@ THREE.VTKLoader.prototype.parse = function ( data ) {
|
|
|
var newIndex;
|
|
|
var new2old;
|
|
|
|
|
|
- var numberOfPoints=parseInt(readNextString());
|
|
|
+ var numberOfPoints = parseInt( readNextString() );
|
|
|
+
|
|
|
+ if ( numberOfPoints > 5000000 ) {
|
|
|
|
|
|
- if (numberOfPoints>5000000)
|
|
|
- {
|
|
|
- alert ("mesh is too big : "+numberOfPoints+" vertices");
|
|
|
+ alert ( 'mesh is too big : ' + numberOfPoints + ' vertices' );
|
|
|
return;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- var coord=[0,0,0];
|
|
|
- var index2=0;
|
|
|
+ var coord = [ 0, 0, 0 ];
|
|
|
+ var index2 = 0;
|
|
|
|
|
|
var number;
|
|
|
var coordIndex;
|
|
|
- for (var j=0;j!=numberOfPoints;j++)
|
|
|
- {
|
|
|
- for (coordIndex=0;coordIndex<3;coordIndex++)
|
|
|
- {
|
|
|
- do
|
|
|
- {
|
|
|
- number=parseFloat(line[columnIndex]);
|
|
|
- columnIndex++;
|
|
|
- if (columnIndex==lineLength)
|
|
|
- {
|
|
|
- lineIndex++;
|
|
|
- columnIndex=0;
|
|
|
- if (lineIndex>lines.length)
|
|
|
- {
|
|
|
- alert ("error while reading "+url+" : \n");
|
|
|
+
|
|
|
+ for ( var j = 0; j != numberOfPoints; j ++ ) {
|
|
|
+
|
|
|
+ for ( coordIndex = 0; coordIndex < 3; coordIndex ++ ) {
|
|
|
+
|
|
|
+ do {
|
|
|
+
|
|
|
+ number = parseFloat( line[ columnIndex ] );
|
|
|
+
|
|
|
+ columnIndex ++;
|
|
|
+
|
|
|
+ if ( columnIndex == lineLength ) {
|
|
|
+
|
|
|
+ lineIndex ++;
|
|
|
+ columnIndex = 0;
|
|
|
+
|
|
|
+ if ( lineIndex > lines.length ) {
|
|
|
+
|
|
|
+ alert ( 'error while reading ' + url + ' : \n' );
|
|
|
return;
|
|
|
}
|
|
|
- line=lines[lineIndex].split(" ");
|
|
|
- lineLength=line.length;
|
|
|
+
|
|
|
+ line = lines[ lineIndex ].split( ' ' );
|
|
|
+ lineLength = line.length;
|
|
|
}
|
|
|
- } while (isNaN(number))
|
|
|
- coord[coordIndex]=number;
|
|
|
+ } while ( isNaN( number ) )
|
|
|
+
|
|
|
+ coord[ coordIndex ] = number;
|
|
|
}
|
|
|
- v(coord[0],coord[1],coord[2]);
|
|
|
+
|
|
|
+ v( coord[ 0 ], coord[ 1 ], coord[ 2 ] );
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- found=false;
|
|
|
- while (!found)
|
|
|
- {
|
|
|
- var readString=readNextString();
|
|
|
- switch (readString)
|
|
|
- {
|
|
|
- case "POLYGONS":
|
|
|
- found=true;
|
|
|
+ found = false;
|
|
|
+
|
|
|
+ while ( !found ) {
|
|
|
+
|
|
|
+ var readString = readNextString();
|
|
|
+
|
|
|
+ switch ( readString ) {
|
|
|
+
|
|
|
+ case 'POLYGONS':
|
|
|
+ found = true;
|
|
|
break;
|
|
|
- case "":
|
|
|
- alert ("error while reading "+url+" : \n");
|
|
|
+
|
|
|
+ case '':
|
|
|
+ alert ( 'error while reading ' + url + ' : \n' );
|
|
|
return;
|
|
|
- default:
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- var numberOfPolygons=parseInt(readNextString());
|
|
|
- var numberOfpolygonElements=parseInt(readNextString());
|
|
|
-
|
|
|
- index2=0;
|
|
|
- var connectivity=[];
|
|
|
- for (var p=0;p!=numberOfpolygonElements;p++)
|
|
|
- {
|
|
|
- do
|
|
|
- {
|
|
|
- number=parseInt(line[columnIndex]);
|
|
|
- columnIndex++;
|
|
|
- if (columnIndex==lineLength)
|
|
|
- {
|
|
|
- lineIndex++;
|
|
|
- columnIndex=0;
|
|
|
- if (lineIndex>lines.length)
|
|
|
- {
|
|
|
- alert ("error while reading "+url+" : \n");
|
|
|
+ var numberOfPolygons = parseInt( readNextString() );
|
|
|
+ var numberOfpolygonElements = parseInt( readNextString() );
|
|
|
+
|
|
|
+ index2 = 0;
|
|
|
+ var connectivity = [];
|
|
|
+
|
|
|
+ for ( var p = 0; p != numberOfpolygonElements; p ++ ) {
|
|
|
+
|
|
|
+ do {
|
|
|
+
|
|
|
+ number = parseInt( line[ columnIndex ] );
|
|
|
+
|
|
|
+ columnIndex ++;
|
|
|
+
|
|
|
+ if ( columnIndex == lineLength ) {
|
|
|
+
|
|
|
+ lineIndex ++;
|
|
|
+ columnIndex = 0;
|
|
|
+
|
|
|
+ if ( lineIndex > lines.length ) {
|
|
|
+
|
|
|
+ alert ( 'error while reading ' + url + ' : \n' );
|
|
|
return;
|
|
|
+
|
|
|
}
|
|
|
- line=lines[lineIndex].split(" ");
|
|
|
- lineLength=line.length;
|
|
|
+
|
|
|
+ line = lines[ lineIndex ].split( ' ' );
|
|
|
+ lineLength = line.length;
|
|
|
}
|
|
|
- } while (isNaN(number))
|
|
|
-
|
|
|
- connectivity[index2]=number;
|
|
|
- index2++;
|
|
|
-
|
|
|
- if (index2==connectivity[0]+1)
|
|
|
- {
|
|
|
- var triangle=[0,0,0];
|
|
|
- index2=0;
|
|
|
- var numberOfTrianglesInCell=connectivity[0]-2;
|
|
|
- var vertex1=triangle[0]=connectivity[1];
|
|
|
-
|
|
|
- for (var i=0;i<numberOfTrianglesInCell;i++)
|
|
|
- {
|
|
|
- var vertex2=connectivity[i+2];
|
|
|
- var vertex3=triangle[2]=connectivity[i+3];
|
|
|
- f3(vertex1,vertex2,vertex3);
|
|
|
+ } while ( isNaN( number ) )
|
|
|
+
|
|
|
+ connectivity[ index2 ] = number;
|
|
|
+ index2 ++;
|
|
|
+
|
|
|
+ if ( index2 == connectivity[ 0 ] + 1 ) {
|
|
|
+
|
|
|
+ var triangle = [ 0, 0, 0 ];
|
|
|
+ index2 = 0;
|
|
|
+
|
|
|
+ var numberOfTrianglesInCell = connectivity[ 0 ] - 2;
|
|
|
+ var vertex1 = triangle[ 0 ] = connectivity[ 1 ];
|
|
|
+
|
|
|
+ for ( var i = 0; i < numberOfTrianglesInCell; i ++ ) {
|
|
|
+
|
|
|
+ var vertex2 = connectivity[ i + 2 ];
|
|
|
+ var vertex3 = triangle[ 2 ] = connectivity[ i + 3 ];
|
|
|
+
|
|
|
+ f3( vertex1, vertex2, vertex3 );
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
geometry.computeCentroids();
|
|
|
geometry.computeFaceNormals();
|
|
|
geometry.computeVertexNormals();
|
|
|
geometry.computeBoundingSphere();
|
|
|
- return (geometry);
|
|
|
+
|
|
|
+ return geometry;
|
|
|
|
|
|
}
|