浏览代码

KMZLoader: Parse doc.kml when available.

Mr.doob 7 年之前
父节点
当前提交
72d57d8689
共有 1 个文件被更改,包括 30 次插入29 次删除
  1. 30 29
      examples/js/loaders/KMZLoader.js

+ 30 - 29
examples/js/loaders/KMZLoader.js

@@ -28,20 +28,24 @@ THREE.KMZLoader.prototype = {
 
 
 	parse: function ( data ) {
 	parse: function ( data ) {
 
 
-		var manager = new THREE.LoadingManager();
-		manager.setURLModifier( function ( url ) {
-
-			var image;
+		function findFile( url ) {
 
 
-			zip.filter( function ( path, file ) {
+			for ( var path in zip.files ) {
 
 
 				if ( path.substr( - url.length ) === url ) {
 				if ( path.substr( - url.length ) === url ) {
 
 
-					image = file;
+					return zip.files[ path ];
 
 
 				}
 				}
 
 
-			} );
+			}
+
+		}
+
+		var manager = new THREE.LoadingManager();
+		manager.setURLModifier( function ( url ) {
+
+			var image = findFile( url );
 
 
 			if ( image ) {
 			if ( image ) {
 
 
@@ -58,46 +62,43 @@ THREE.KMZLoader.prototype = {
 
 
 		//
 		//
 
 
-		var collada;
-
 		var zip = new JSZip( data ); // eslint-disable-line no-undef
 		var zip = new JSZip( data ); // eslint-disable-line no-undef
 
 
-		zip.filter( function ( path, file ) {
+		if ( zip.files[ 'doc.kml' ] ) {
 
 
-			var extension = file.name.split( '.' ).pop().toLowerCase();
+			var xml = new DOMParser().parseFromString( zip.files[ 'doc.kml' ].asText(), 'application/xml' );
 
 
-			switch ( extension ) {
+			var model = xml.querySelector( 'Placemark Model Link href' );
 
 
-				/*
-				case 'kml':
+			if ( model ) {
 
 
-					var xml = new DOMParser().parseFromString( file.asText(), 'application/xml' );
+				var loader = new THREE.ColladaLoader( manager );
+				return loader.parse( zip.files[ model.textContent ].asText() );
 
 
-					break;
-				*/
-
-				case 'dae':
+			}
 
 
-					var loader = new THREE.ColladaLoader( manager );
-					collada = loader.parse( file.asText() );
+		} else {
 
 
-					break;
+			console.warn( 'KMZLoader: Missing doc.kml file.' );
 
 
-			}
+			for ( var path in zip.files ) {
 
 
-		} );
+				var extension = path.split( '.' ).pop().toLowerCase();
 
 
-		if ( collada ) {
+				if ( extension === 'dae' ) {
 
 
-			return collada;
+					var loader = new THREE.ColladaLoader( manager );
+					return loader.parse( zip.files[ path ].asText() );
 
 
-		} else {
+				}
 
 
-			console.error( 'KMZLoader: Couldn\'t find .dae file.' );
-			return { scene: new THREE.Group() };
+			}
 
 
 		}
 		}
 
 
+		console.error( 'KMZLoader: Couldn\'t find .dae file.' );
+		return { scene: new THREE.Group() };
+
 	}
 	}
 
 
 };
 };