Spaces:
Running
Running
File size: 2,019 Bytes
6cd9596 |
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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
/**
* @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.setPath( scope.path );
loader.setResponseType( 'arraybuffer' );
loader.load( url, function ( text ) {
onLoad( scope.parse( text ) );
}, onProgress, onError );
},
setPath: function ( value ) {
this.path = value;
return this;
},
parse: function ( data ) {
function findFile( url ) {
for ( var path in zip.files ) {
if ( path.substr( - url.length ) === url ) {
return zip.files[ path ];
}
}
}
var manager = new THREE.LoadingManager();
manager.setURLModifier( function ( url ) {
var image = findFile( url );
if ( image ) {
console.log( 'Loading', url );
var blob = new Blob( [ image.asArrayBuffer() ], { type: 'application/octet-stream' } );
return URL.createObjectURL( blob );
}
return url;
} );
//
var zip = new JSZip( data ); // eslint-disable-line no-undef
if ( zip.files[ 'doc.kml' ] ) {
var xml = new DOMParser().parseFromString( zip.files[ 'doc.kml' ].asText(), 'application/xml' );
var model = xml.querySelector( 'Placemark Model Link href' );
if ( model ) {
var loader = new THREE.ColladaLoader( manager );
return loader.parse( zip.files[ model.textContent ].asText() );
}
} else {
console.warn( 'KMZLoader: Missing doc.kml file.' );
for ( var path in zip.files ) {
var extension = path.split( '.' ).pop().toLowerCase();
if ( extension === 'dae' ) {
var loader = new THREE.ColladaLoader( manager );
return loader.parse( zip.files[ path ].asText() );
}
}
}
console.error( 'KMZLoader: Couldn\'t find .dae file.' );
return { scene: new THREE.Group() };
}
};
|