@@ -28,20 +28,24 @@ THREE.KMZLoader.prototype = {
2828
2929	parse : function  (  data  )  { 
3030
31- 		var  manager  =  new  THREE . LoadingManager ( ) ; 
32- 		manager . setURLModifier (  function  (  url  )  { 
33- 
34- 			var  image ; 
31+ 		function  findFile (  url  )  { 
3532
36- 			zip . filter (   function   (   path ,   file  )  { 
33+ 			for   (   var   path   in   zip . files  )  { 
3734
3835				if  (  path . substr (  -  url . length  )  ===  url  )  { 
3936
40- 					image   =   file ; 
37+ 					return   zip . files [   path   ] ; 
4138
4239				} 
4340
44- 			}  ) ; 
41+ 			} 
42+ 
43+ 		} 
44+ 
45+ 		var  manager  =  new  THREE . LoadingManager ( ) ; 
46+ 		manager . setURLModifier (  function  (  url  )  { 
47+ 
48+ 			var  image  =  findFile (  url  ) ; 
4549
4650			if  (  image  )  { 
4751
@@ -58,46 +62,43 @@ THREE.KMZLoader.prototype = {
5862
5963		// 
6064
61- 		var  collada ; 
62- 
6365		var  zip  =  new  JSZip (  data  ) ;  // eslint-disable-line no-undef 
6466
65- 		zip . filter (   function   (   path ,   file  )  { 
67+ 		if   (   zip . files [   'doc.kml'   ]  )  { 
6668
67- 			var  extension  =  file . name . split (   '.'   ) . pop ( ) . toLowerCase ( ) ; 
69+ 			var  xml  =  new   DOMParser ( ) . parseFromString (   zip . files [   'doc.kml'   ] . asText ( ) ,   'application/xml'   ) ; 
6870
69- 			switch   (   extension   )   { 
71+ 			var   model   =   xml . querySelector (   'Placemark Model Link href'   ) ; 
7072
71- 				/* 
72- 				case 'kml': 
73+ 			if  (  model  )  { 
7374
74- 					var xml = new DOMParser().parseFromString( file.asText(), 'application/xml' ); 
75+ 				var  loader  =  new  THREE . ColladaLoader (  manager  ) ; 
76+ 				return  loader . parse (  zip . files [  model . textContent  ] . asText ( )  ) ; 
7577
76- 					break; 
77- 				*/ 
78- 
79- 				case  'dae' :
78+ 			} 
8079
81- 					var  loader  =  new  THREE . ColladaLoader (  manager  ) ; 
82- 					collada  =  loader . parse (  file . asText ( )  ) ; 
80+ 		}  else  { 
8381
84- 					 break ; 
82+ 			console . warn (   'KMZLoader: Missing doc.kml file.'   ) ; 
8583
86- 			} 
84+ 			for   (   var   path   in   zip . files   )   { 
8785
88- 		}   ) ; 
86+ 				 var   extension   =   path . split (   '.'   ) . pop ( ) . toLowerCase ( ) ; 
8987
90- 		if  (  collada  )  { 
88+ 				 if  (  extension   ===   'dae'  )  { 
9189
92- 			return  collada ; 
90+ 					var  loader  =  new  THREE . ColladaLoader (  manager  ) ; 
91+ 					return  loader . parse (  zip . files [  path  ] . asText ( )  ) ; 
9392
94- 		}   else   { 
93+ 				 } 
9594
96- 			console . error (  'KMZLoader: Couldn\'t find .dae file.'  ) ; 
97- 			return  {  scene : new  THREE . Group ( )  } ; 
95+ 			} 
9896
9997		} 
10098
99+ 		console . error (  'KMZLoader: Couldn\'t find .dae file.'  ) ; 
100+ 		return  {  scene : new  THREE . Group ( )  } ; 
101+ 
101102	} 
102103
103104} ; 
0 commit comments