add Potree (version 1.8)
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
import {
|
||||
FileLoader,
|
||||
Group,
|
||||
Loader,
|
||||
LoadingManager
|
||||
} from '../../../build/three.module.js';
|
||||
import { ColladaLoader } from '../loaders/ColladaLoader.js';
|
||||
import { JSZip } from '../libs/jszip.module.min.js';
|
||||
|
||||
var KMZLoader = function ( manager ) {
|
||||
|
||||
Loader.call( this, manager );
|
||||
|
||||
};
|
||||
|
||||
KMZLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
|
||||
|
||||
constructor: KMZLoader,
|
||||
|
||||
load: function ( url, onLoad, onProgress, onError ) {
|
||||
|
||||
var scope = this;
|
||||
|
||||
var loader = new FileLoader( scope.manager );
|
||||
loader.setPath( scope.path );
|
||||
loader.setResponseType( 'arraybuffer' );
|
||||
loader.setRequestHeader( scope.requestHeader );
|
||||
loader.setWithCredentials( scope.withCredentials );
|
||||
loader.load( url, function ( text ) {
|
||||
|
||||
try {
|
||||
|
||||
onLoad( scope.parse( text ) );
|
||||
|
||||
} catch ( e ) {
|
||||
|
||||
if ( onError ) {
|
||||
|
||||
onError( e );
|
||||
|
||||
} else {
|
||||
|
||||
console.error( e );
|
||||
|
||||
}
|
||||
|
||||
scope.manager.itemError( url );
|
||||
|
||||
}
|
||||
|
||||
}, onProgress, onError );
|
||||
|
||||
},
|
||||
|
||||
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 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 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 ColladaLoader( manager );
|
||||
return loader.parse( zip.files[ path ].asText() );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
console.error( 'KMZLoader: Couldn\'t find .dae file.' );
|
||||
return { scene: new Group() };
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
export { KMZLoader };
|
||||
Reference in New Issue
Block a user