[b86468]: / v3 / js / libs / three / loaders / KMZLoader.js

Download this file

92 lines (51 with data), 1.7 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/**
* @author mrdoob / http://mrdoob.com/
*/
THREE.KMZLoader = function ( manager ) {
this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
};
THREE.KMZLoader.prototype = {
constructor: THREE.KMZLoader,
load: function ( url, onLoad, onProgress, onError ) {
var scope = this;
var loader = new THREE.FileLoader( scope.manager );
loader.setResponseType( 'arraybuffer' );
loader.load( url, function ( text ) {
onLoad( scope.parse( text ) );
}, onProgress, onError );
},
parse: function ( data ) {
var zip = new JSZip( data ); // eslint-disable-line no-undef
// console.log( zip );
// var xml = new DOMParser().parseFromString( zip.file( 'doc.kml' ).asText(), 'application/xml' );
function loadImage( image ) {
var path = decodeURI( image.init_from );
// Hack to support relative paths
path = path.replace( '../', '' );
var regex = new RegExp( path + '$' );
var files = zip.file( regex );
// console.log( image, files );
if ( files.length ) {
var file = files[ 0 ];
var blob = new Blob( [ file.asArrayBuffer() ], { type: 'application/octet-binary' } );
image.build.src = URL.createObjectURL( blob );
}
}
// load collada
var files = zip.file( /dae$/i );
if ( files.length ) {
var file = files[ 0 ];
var collada = new THREE.ColladaLoader().parse( file.asText() );
// fix images
var images = collada.library.images;
for ( var name in images ) {
loadImage( images[ name ] );
}
return collada;
}
console.error( 'KMZLoader: Couldn\'t find .dae file.' );
return {
scene: new THREE.Group()
};
}
};