From f41e9a4baf5927cb131bcacac7b8cddb310a6b5a Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Wed, 22 Aug 2018 16:27:26 -0700 Subject: [PATCH] Editor: Refactored zip handling code. --- editor/js/Loader.js | 172 ++++++++++++++++++++++---------------------- 1 file changed, 88 insertions(+), 84 deletions(-) diff --git a/editor/js/Loader.js b/editor/js/Loader.js index 24f5a2da36..6c7cff22c4 100644 --- a/editor/js/Loader.js +++ b/editor/js/Loader.js @@ -468,90 +468,7 @@ var Loader = function ( editor ) { reader.addEventListener( 'load', function ( event ) { - var contents = event.target.result; - - var zip = new JSZip( contents ); - - // Poly - - if ( zip.files[ 'model.obj' ] && zip.files[ 'materials.mtl' ] ) { - - var materials = new THREE.MTLLoader().parse( zip.file( 'materials.mtl' ).asText() ); - var object = new THREE.OBJLoader().setMaterials( materials ).parse( zip.file( 'model.obj' ).asText() ); - editor.execute( new AddObjectCommand( object ) ); - - } - - // - - zip.filter( function ( path, file ) { - - // FBX - - if ( /\.fbx$/i.test( file.name ) ) { - - var manager = new THREE.LoadingManager(); - manager.setURLModifier( function ( url ) { - - var file = zip.files[ url ]; - - if ( file ) { - - var blob = new Blob( [ file.asArrayBuffer() ], { type: 'application/octet-stream' } ); - return URL.createObjectURL( blob ); - - } - - } ); - - var loader = new THREE.FBXLoader( manager ); - var object = loader.parse( file.asArrayBuffer() ); - - editor.execute( new AddObjectCommand( object ) ); - - } - - // GLB - - if ( /\.glb$/i.test( file.name ) ) { - - var loader = new THREE.GLTFLoader(); - loader.parse( file.asArrayBuffer(), '', function ( result ) { - - editor.execute( new AddObjectCommand( result.scene ) ); - - } ); - - } - - // GLTF - - if ( /\.gltf$/i.test( file.name ) ) { - - var manager = new THREE.LoadingManager(); - manager.setURLModifier( function ( url ) { - - var file = zip.files[ url ]; - - if ( file ) { - - var blob = new Blob( [ file.asArrayBuffer() ], { type: 'application/octet-stream' } ); - return URL.createObjectURL( blob ); - - } - - } ); - - var loader = new THREE.GLTFLoader( manager ); - loader.parse( file.asText(), '', function ( result ) { - - editor.execute( new AddObjectCommand( result.scene ) ); - - } ); - - } - - } ); + handleZIP( event.target.result ); }, false ); reader.readAsBinaryString( file ); @@ -679,6 +596,93 @@ var Loader = function ( editor ) { } + function handleZIP( contents ) { + + var zip = new JSZip( contents ); + + // Poly + + if ( zip.files[ 'model.obj' ] && zip.files[ 'materials.mtl' ] ) { + + var materials = new THREE.MTLLoader().parse( zip.file( 'materials.mtl' ).asText() ); + var object = new THREE.OBJLoader().setMaterials( materials ).parse( zip.file( 'model.obj' ).asText() ); + editor.execute( new AddObjectCommand( object ) ); + + } + + // + + zip.filter( function ( path, file ) { + + var extension = file.name.split( '.' ).pop().toLowerCase(); + + switch ( extension ) { + + case 'fbx': + + var manager = new THREE.LoadingManager(); + manager.setURLModifier( function ( url ) { + + var file = zip.files[ url ]; + + if ( file ) { + + var blob = new Blob( [ file.asArrayBuffer() ], { type: 'application/octet-stream' } ); + return URL.createObjectURL( blob ); + + } + + } ); + + var loader = new THREE.FBXLoader( manager ); + var object = loader.parse( file.asArrayBuffer() ); + + editor.execute( new AddObjectCommand( object ) ); + + break; + + case 'glb': + + var loader = new THREE.GLTFLoader(); + loader.parse( file.asArrayBuffer(), '', function ( result ) { + + editor.execute( new AddObjectCommand( result.scene ) ); + + } ); + + break; + + case 'gltf': + + var manager = new THREE.LoadingManager(); + manager.setURLModifier( function ( url ) { + + var file = zip.files[ url ]; + + if ( file ) { + + var blob = new Blob( [ file.asArrayBuffer() ], { type: 'application/octet-stream' } ); + return URL.createObjectURL( blob ); + + } + + } ); + + var loader = new THREE.GLTFLoader( manager ); + loader.parse( file.asText(), '', function ( result ) { + + editor.execute( new AddObjectCommand( result.scene ) ); + + } ); + + break; + + } + + } ); + + } + function isGltf1( contents ) { var resultContent; -- GitLab