source: other-projects/playing-in-the-street/summer-2013/trunk/Playing-in-the-Street-WPF/Content/Web/mrdoob-three.js-4862f5f/editor/js/Loader.js@ 28897

Last change on this file since 28897 was 28897, checked in by davidb, 10 years ago

GUI front-end to server base plus web page content

File size: 6.7 KB
Line 
1var Loader = function ( editor ) {
2
3 var scope = this;
4 var signals = editor.signals;
5
6 this.loadFile = function ( file ) {
7
8 var filename = file.name;
9 var extension = filename.split( '.' ).pop().toLowerCase();
10
11 switch ( extension ) {
12
13 case 'babylon':
14
15 var reader = new FileReader();
16 reader.addEventListener( 'load', function ( event ) {
17
18 var contents = event.target.result;
19 var json = JSON.parse( contents );
20
21 var loader = new THREE.BabylonLoader();
22 var scene = loader.parse( json );
23
24 editor.setScene( scene );
25
26 }, false );
27 reader.readAsText( file );
28
29 break;
30
31 case 'ctm':
32
33 var reader = new FileReader();
34 reader.addEventListener( 'load', function ( event ) {
35
36 var contents = event.target.result;
37
38 var stream = new CTM.Stream( contents );
39 stream.offset = 0;
40
41 var loader = new THREE.CTMLoader();
42 loader.createModelClassic( new CTM.File( stream ), function( geometry ) {
43
44 geometry.sourceType = "ctm";
45 geometry.sourceFile = file.name;
46
47 var material = new THREE.MeshPhongMaterial();
48
49 var mesh = new THREE.Mesh( geometry, material );
50 mesh.name = filename;
51
52 editor.addObject( mesh );
53
54 } );
55
56 }, false );
57 reader.readAsBinaryString( file );
58
59 break;
60
61 case 'dae':
62
63 var reader = new FileReader();
64 reader.addEventListener( 'load', function ( event ) {
65
66 var contents = event.target.result;
67
68 var parser = new DOMParser();
69 var xml = parser.parseFromString( contents, 'text/xml' );
70
71 var loader = new THREE.ColladaLoader();
72 loader.parse( xml, function ( collada ) {
73
74 collada.scene.name = filename;
75
76 editor.addObject( collada.scene );
77
78 } );
79
80 }, false );
81 reader.readAsText( file );
82
83 break;
84
85 case 'js':
86 case 'json':
87
88 case '3geo':
89 case '3mat':
90 case '3obj':
91 case '3scn':
92
93 var reader = new FileReader();
94 reader.addEventListener( 'load', function ( event ) {
95
96 var contents = event.target.result;
97
98 // 2.0
99
100 if ( contents.indexOf( 'postMessage' ) !== -1 ) {
101
102 var blob = new Blob( [ contents ], { type: 'text/javascript' } );
103 var url = URL.createObjectURL( blob );
104
105 var worker = new Worker( url );
106
107 worker.onmessage = function ( event ) {
108
109 event.data.metadata = { version: 2 };
110 handleJSON( event.data, file, filename );
111
112 };
113
114 worker.postMessage( Date.now() );
115
116 return;
117
118 }
119
120 // >= 3.0
121
122 var data;
123
124 try {
125
126 data = JSON.parse( contents );
127
128 } catch ( error ) {
129
130 alert( error );
131 return;
132
133 }
134
135 handleJSON( data, file, filename );
136
137 }, false );
138 reader.readAsText( file );
139
140 break;
141
142 case 'obj':
143
144 var reader = new FileReader();
145 reader.addEventListener( 'load', function ( event ) {
146
147 var contents = event.target.result;
148
149 var object = new THREE.OBJLoader().parse( contents );
150 object.name = filename;
151
152 editor.addObject( object );
153
154 }, false );
155 reader.readAsText( file );
156
157 break;
158
159 case 'ply':
160
161 var reader = new FileReader();
162 reader.addEventListener( 'load', function ( event ) {
163
164 var contents = event.target.result;
165
166 console.log( contents );
167
168 var geometry = new THREE.PLYLoader().parse( contents );
169 geometry.sourceType = "ply";
170 geometry.sourceFile = file.name;
171
172 var material = new THREE.MeshPhongMaterial();
173
174 var mesh = new THREE.Mesh( geometry, material );
175 mesh.name = filename;
176
177 editor.addObject( mesh );
178
179 }, false );
180 reader.readAsText( file );
181
182 break;
183
184 case 'stl':
185
186 var reader = new FileReader();
187 reader.addEventListener( 'load', function ( event ) {
188
189 var contents = event.target.result;
190
191 var geometry = new THREE.STLLoader().parse( contents );
192 geometry.sourceType = "stl";
193 geometry.sourceFile = file.name;
194
195 var material = new THREE.MeshPhongMaterial();
196
197 var mesh = new THREE.Mesh( geometry, material );
198 mesh.name = filename;
199
200 editor.addObject( mesh );
201
202 }, false );
203
204 if ( reader.readAsBinaryString !== undefined ) {
205
206 reader.readAsBinaryString( file );
207
208 } else {
209
210 reader.readAsArrayBuffer( file );
211
212 }
213
214 break;
215
216 /*
217 case 'utf8':
218
219 var reader = new FileReader();
220 reader.addEventListener( 'load', function ( event ) {
221
222 var contents = event.target.result;
223
224 var geometry = new THREE.UTF8Loader().parse( contents );
225 var material = new THREE.MeshLambertMaterial();
226
227 var mesh = new THREE.Mesh( geometry, material );
228
229 editor.addObject( mesh );
230
231 }, false );
232 reader.readAsBinaryString( file );
233
234 break;
235 */
236
237 case 'vtk':
238
239 var reader = new FileReader();
240 reader.addEventListener( 'load', function ( event ) {
241
242 var contents = event.target.result;
243
244 var geometry = new THREE.VTKLoader().parse( contents );
245 geometry.sourceType = "vtk";
246 geometry.sourceFile = file.name;
247
248 var material = new THREE.MeshPhongMaterial();
249
250 var mesh = new THREE.Mesh( geometry, material );
251 mesh.name = filename;
252
253 editor.addObject( mesh );
254
255 }, false );
256 reader.readAsText( file );
257
258 break;
259
260 case 'wrl':
261
262 var reader = new FileReader();
263 reader.addEventListener( 'load', function ( event ) {
264
265 var contents = event.target.result;
266
267 var result = new THREE.VRMLLoader().parse( contents );
268
269 editor.setScene( result );
270
271 }, false );
272 reader.readAsText( file );
273
274 break;
275
276 default:
277
278 alert( 'Unsupported file format.' );
279
280 break;
281
282 }
283
284 }
285
286 var handleJSON = function ( data, file, filename ) {
287
288 if ( data.metadata === undefined ) { // 2.0
289
290 data.metadata = { type: 'Geometry' };
291
292 }
293
294 if ( data.metadata.type === undefined ) { // 3.0
295
296 data.metadata.type = 'Geometry';
297
298 }
299
300 if ( data.metadata.version === undefined ) {
301
302 data.metadata.version = data.metadata.formatVersion;
303
304 }
305
306 if ( data.metadata.type.toLowerCase() === 'geometry' ) {
307
308 var loader = new THREE.JSONLoader();
309 var result = loader.parse( data );
310
311 var geometry = result.geometry;
312 var material = result.materials !== undefined
313 ? new THREE.MeshFaceMaterial( result.materials )
314 : new THREE.MeshPhongMaterial();
315
316 geometry.sourceType = "ascii";
317 geometry.sourceFile = file.name;
318
319 var mesh = new THREE.Mesh( geometry, material );
320 mesh.name = filename;
321
322 editor.addObject( mesh );
323
324 } else if ( data.metadata.type.toLowerCase() === 'object' ) {
325
326 var loader = new THREE.ObjectLoader();
327 var result = loader.parse( data );
328
329 if ( result instanceof THREE.Scene ) {
330
331 editor.setScene( result );
332
333 } else {
334
335 editor.addObject( result );
336
337 }
338
339 } else if ( data.metadata.type.toLowerCase() === 'scene' ) {
340
341 // DEPRECATED
342
343 var loader = new THREE.SceneLoader();
344 loader.parse( data, function ( result ) {
345
346 editor.setScene( result.scene );
347
348 }, '' );
349
350 }
351
352 };
353
354}
Note: See TracBrowser for help on using the repository browser.