mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
92 lines
1.6 KiB
JavaScript
92 lines
1.6 KiB
JavaScript
/**
|
|
* @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()
|
|
};
|
|
|
|
}
|
|
|
|
};
|