From 4a87a7b067db9f59c869b3c430860d351758a893 Mon Sep 17 00:00:00 2001 From: Sebastien Valette Date: Tue, 17 Apr 2012 18:26:54 +0200 Subject: [PATCH] added VTKLoader class + example loading the stanford bunny in vtk format --- examples/js/VTKLoader.js | 210 + examples/models/bunny.vtk | 81443 +++++++++++++++++++++++++++++++ examples/webgl_loader_vtk.html | 119 + 3 files changed, 81772 insertions(+) create mode 100644 examples/js/VTKLoader.js create mode 100644 examples/models/bunny.vtk create mode 100644 examples/webgl_loader_vtk.html diff --git a/examples/js/VTKLoader.js b/examples/js/VTKLoader.js new file mode 100644 index 0000000000..6d926b7677 --- /dev/null +++ b/examples/js/VTKLoader.js @@ -0,0 +1,210 @@ +/** + * @author Sebastien Valette sebastien.valette@creatis.insa-lyon.fr + */ + +THREE.VTKLoader = function ( showStatus ) { + + THREE.Loader.call( this, showStatus ); + +}; + +THREE.VTKLoader.prototype = new THREE.Loader(); +THREE.VTKLoader.prototype.constructor = THREE.VTKLoader; +THREE.VTKLoader.prototype.supr = THREE.Loader.prototype; + +THREE.VTKLoader.prototype.load = function( url, callback) { + + this.onLoadStart(); + + function parseGeometry(text){ + var geometry=new THREE.Geometry(); + var lines=text.split("\n"); + + function v( x, y, z ) { + + geometry.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) ); + + } + + function f3( a, b, c ) { + + geometry.faces.push( new THREE.Face3( a, b, c ) ); + + } + + 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); + } + } + + // read point data + var found=false; + while (!found) + { + var readString=readNextString(); + switch (readString.toUpperCase()) + { + case "POINTS": + found=true; + break; + case "": + alert ("error while reading "+url+" : \n"); + return; + default: + } + + } + + var newIndex; + var new2old; + + var numberOfPoints=parseInt(readNextString()); + + if (numberOfPoints>5000000) + { + alert ("mesh is too big : "+numberOfPoints+" vertices"); + return; + } + + 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"); + return; + } + line=lines[lineIndex].split(" "); + lineLength=line.length; + } + } while (isNaN(number)) + coord[coordIndex]=number; + } + v(coord[0],coord[1],coord[2]); + } + + found=false; + while (!found) + { + var readString=readNextString(); + switch (readString) + { + case "POLYGONS": + found=true; + break; + 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"); + return; + } + 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 + + + three.js webgl - io - vtk loader + + + + + + +
+ three.js - + vtk format loader test - + model from The GeorgiaTech Lagre Geometric Model Archive, +
+ + + + + + + + + + + -- GitLab