Skip to content

Commit f1d47cc

Browse files
committed
Merge remote-tracking branch 'valette/VTKLoader' into dev
2 parents db5ff0e + 5997944 commit f1d47cc

5 files changed

Lines changed: 87850 additions & 0 deletions

File tree

examples/js/VTKLoader.js

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
/**
2+
* @author Sebastien Valette sebastien.valette@creatis.insa-lyon.fr
3+
*/
4+
5+
THREE.VTKLoader = function ( showStatus ) {
6+
7+
THREE.Loader.call( this, showStatus );
8+
9+
};
10+
11+
THREE.VTKLoader.prototype = new THREE.Loader();
12+
THREE.VTKLoader.prototype.constructor = THREE.VTKLoader;
13+
THREE.VTKLoader.prototype.supr = THREE.Loader.prototype;
14+
15+
THREE.VTKLoader.prototype.load = function( url, callback) {
16+
17+
this.onLoadStart();
18+
19+
function parseGeometry(text){
20+
var geometry=new THREE.Geometry();
21+
var lines=text.split("\n");
22+
23+
function v( x, y, z ) {
24+
25+
geometry.vertices.push( new THREE.Vector3( x, y, z ) );
26+
27+
}
28+
29+
function f3( a, b, c ) {
30+
31+
geometry.faces.push( new THREE.Face3( a, b, c ) );
32+
33+
}
34+
35+
var lineIndex=0;
36+
37+
var line=lines[0].split(" ");
38+
var lineLength=line.length;
39+
var columnIndex=-1;
40+
41+
42+
function readNextString ()
43+
{
44+
while (1)
45+
{
46+
var nextWord=line[columnIndex];
47+
columnIndex++;
48+
if (columnIndex==lineLength)
49+
{
50+
lineIndex++;
51+
columnIndex=0;
52+
if (lineIndex>lines.length)
53+
return ("");
54+
line=lines[lineIndex].split(" ");
55+
lineLength=line.length;
56+
}
57+
if (nextWord!=null)
58+
if (nextWord.length>0)
59+
return (nextWord);
60+
}
61+
}
62+
63+
// read point data
64+
var found=false;
65+
while (!found)
66+
{
67+
var readString=readNextString();
68+
switch (readString.toUpperCase())
69+
{
70+
case "POINTS":
71+
found=true;
72+
break;
73+
case "":
74+
alert ("error while reading "+url+" : \n");
75+
return;
76+
default:
77+
}
78+
79+
}
80+
81+
var newIndex;
82+
var new2old;
83+
84+
var numberOfPoints=parseInt(readNextString());
85+
86+
if (numberOfPoints>5000000)
87+
{
88+
alert ("mesh is too big : "+numberOfPoints+" vertices");
89+
return;
90+
}
91+
92+
var coord=[0,0,0];
93+
var index2=0;
94+
95+
var number;
96+
var coordIndex;
97+
for (var j=0;j!=numberOfPoints;j++)
98+
{
99+
for (coordIndex=0;coordIndex<3;coordIndex++)
100+
{
101+
do
102+
{
103+
number=parseFloat(line[columnIndex]);
104+
columnIndex++;
105+
if (columnIndex==lineLength)
106+
{
107+
lineIndex++;
108+
columnIndex=0;
109+
if (lineIndex>lines.length)
110+
{
111+
alert ("error while reading "+url+" : \n");
112+
return;
113+
}
114+
line=lines[lineIndex].split(" ");
115+
lineLength=line.length;
116+
}
117+
} while (isNaN(number))
118+
coord[coordIndex]=number;
119+
}
120+
v(coord[0],coord[1],coord[2]);
121+
}
122+
123+
found=false;
124+
while (!found)
125+
{
126+
var readString=readNextString();
127+
switch (readString)
128+
{
129+
case "POLYGONS":
130+
found=true;
131+
break;
132+
case "":
133+
alert ("error while reading "+url+" : \n");
134+
return;
135+
default:
136+
}
137+
}
138+
139+
var numberOfPolygons=parseInt(readNextString());
140+
var numberOfpolygonElements=parseInt(readNextString());
141+
142+
index2=0;
143+
var connectivity=[];
144+
for (var p=0;p!=numberOfpolygonElements;p++)
145+
{
146+
do
147+
{
148+
number=parseInt(line[columnIndex]);
149+
columnIndex++;
150+
if (columnIndex==lineLength)
151+
{
152+
lineIndex++;
153+
columnIndex=0;
154+
if (lineIndex>lines.length)
155+
{
156+
alert ("error while reading "+url+" : \n");
157+
return;
158+
}
159+
line=lines[lineIndex].split(" ");
160+
lineLength=line.length;
161+
}
162+
} while (isNaN(number))
163+
164+
connectivity[index2]=number;
165+
index2++;
166+
167+
if (index2==connectivity[0]+1)
168+
{
169+
var triangle=[0,0,0];
170+
index2=0;
171+
var numberOfTrianglesInCell=connectivity[0]-2;
172+
var vertex1=triangle[0]=connectivity[1];
173+
174+
for (var i=0;i<numberOfTrianglesInCell;i++)
175+
{
176+
var vertex2=connectivity[i+2];
177+
var vertex3=triangle[2]=connectivity[i+3];
178+
f3(vertex1,vertex2,vertex3);
179+
}
180+
}
181+
}
182+
183+
geometry.computeCentroids();
184+
geometry.computeFaceNormals();
185+
geometry.computeVertexNormals();
186+
geometry.computeBoundingSphere();
187+
return (geometry);
188+
}
189+
190+
var xmlhttp=new XMLHttpRequest();
191+
xmlhttp.open("GET",url,true);
192+
193+
function handler()
194+
{
195+
if(xmlhttp.readyState == 4)
196+
{
197+
if (xmlhttp.status!=200)
198+
{
199+
alert("Could not read file "+url+": error"+xmlhttp.status);
200+
return;
201+
}
202+
var myGeometry=parseGeometry(xmlhttp.responseText);
203+
callback(myGeometry);
204+
}
205+
}
206+
xmlhttp.onreadystatechange=handler;
207+
xmlhttp.send();
208+
209+
};
210+

0 commit comments

Comments
 (0)