Skip to content

Commit 79b2d6b

Browse files
committed
Editor: Added multiple files loading support.
1 parent 1e66ddc commit 79b2d6b

File tree

3 files changed

+61
-11
lines changed

3 files changed

+61
-11
lines changed

editor/index.html

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -291,11 +291,7 @@
291291

292292
event.preventDefault();
293293

294-
if ( event.dataTransfer.files.length > 0 ) {
295-
296-
editor.loader.loadFile( event.dataTransfer.files[ 0 ] );
297-
298-
}
294+
editor.loader.loadFiles( event.dataTransfer.files );
299295

300296
}, false );
301297

editor/js/Loader.js

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,40 @@ var Loader = function ( editor ) {
99

1010
this.texturePath = '';
1111

12-
this.loadFile = function ( file ) {
12+
this.loadFiles = function ( files ) {
13+
14+
if ( files.length > 0 ) {
15+
16+
var filesMap = createFileMap( files );
17+
18+
var manager = new THREE.LoadingManager();
19+
manager.setURLModifier( function ( url ) {
20+
21+
var file = filesMap[ url ];
22+
23+
if ( file ) {
24+
25+
console.log( 'Loading', url );
26+
27+
return URL.createObjectURL( file );
28+
29+
}
30+
31+
return url;
32+
33+
} );
34+
35+
for ( var i = 0; i < files.length; i ++ ) {
36+
37+
scope.loadFile( files[ i ], manager ) ;
38+
39+
}
40+
41+
}
42+
43+
};
44+
45+
this.loadFile = function ( file, manager ) {
1346

1447
var filename = file.name;
1548
var extension = filename.split( '.' ).pop().toLowerCase();
@@ -19,6 +52,7 @@ var Loader = function ( editor ) {
1952

2053
var size = '(' + Math.floor( event.total / 1000 ).format() + ' KB)';
2154
var progress = Math.floor( ( event.loaded / event.total ) * 100 ) + '%';
55+
2256
console.log( 'Loading', filename, size, progress );
2357

2458
} );
@@ -141,7 +175,7 @@ var Loader = function ( editor ) {
141175

142176
var contents = event.target.result;
143177

144-
var loader = new THREE.ColladaLoader();
178+
var loader = new THREE.ColladaLoader( manager );
145179
var collada = loader.parse( contents );
146180

147181
collada.scene.name = filename;
@@ -159,7 +193,7 @@ var Loader = function ( editor ) {
159193

160194
var contents = event.target.result;
161195

162-
var loader = new THREE.FBXLoader();
196+
var loader = new THREE.FBXLoader( manager );
163197
var object = loader.parse( contents );
164198

165199
editor.execute( new AddObjectCommand( object ) );
@@ -183,7 +217,7 @@ var Loader = function ( editor ) {
183217

184218
} else {
185219

186-
loader = new THREE.GLTFLoader();
220+
loader = new THREE.GLTFLoader( manager );
187221

188222
}
189223

@@ -477,7 +511,7 @@ var Loader = function ( editor ) {
477511

478512
default:
479513

480-
alert( 'Unsupported file format (' + extension + ').' );
514+
// alert( 'Unsupported file format (' + extension + ').' );
481515

482516
break;
483517

@@ -596,6 +630,21 @@ var Loader = function ( editor ) {
596630

597631
}
598632

633+
function createFileMap( files ) {
634+
635+
var map = {};
636+
637+
for ( var i = 0; i < files.length; i ++ ) {
638+
639+
var file = files[ i ];
640+
map[ file.name ] = file;
641+
642+
}
643+
644+
return map;
645+
646+
}
647+
599648
function handleZIP( contents ) {
600649

601650
var zip = new JSZip( contents );
@@ -621,11 +670,15 @@ var Loader = function ( editor ) {
621670

622671
if ( file ) {
623672

673+
console.log( 'Loading', url );
674+
624675
var blob = new Blob( [ file.asArrayBuffer() ], { type: 'application/octet-stream' } );
625676
return URL.createObjectURL( blob );
626677

627678
}
628679

680+
return url;
681+
629682
} );
630683

631684
var extension = file.name.split( '.' ).pop().toLowerCase();

editor/js/Menubar.File.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@ Menubar.File = function ( editor ) {
5555
document.body.appendChild( form );
5656

5757
var fileInput = document.createElement( 'input' );
58+
fileInput.multiple = true;
5859
fileInput.type = 'file';
5960
fileInput.addEventListener( 'change', function ( event ) {
6061

61-
editor.loader.loadFile( fileInput.files[ 0 ] );
62+
editor.loader.loadFiles( fileInput.files );
6263
form.reset();
6364

6465
} );

0 commit comments

Comments
 (0)