1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import { Group, DefaultLoadingManager } from 'three';
- import { CMPTLoaderBase } from '../base/CMPTLoaderBase.js';
- import { B3DMLoader } from './B3DMLoader.js';
- import { PNTSLoader } from './PNTSLoader.js';
- import { I3DMLoader } from './I3DMLoader.js';
- export class CMPTLoader extends CMPTLoaderBase {
- constructor( manager = DefaultLoadingManager ) {
- super();
- this.manager = manager;
- }
- parse( buffer ) {
- const result = super.parse( buffer );
- const manager = this.manager;
- const promises = [];
- for ( const i in result.tiles ) {
- const { type, buffer } = result.tiles[ i ];
- switch ( type ) {
- case 'b3dm': {
- const slicedBuffer = buffer.slice();
- const loader = new B3DMLoader( manager );
- loader.workingPath = this.workingPath;
- loader.fetchOptions = this.fetchOptions;
- const promise = loader.parse( slicedBuffer.buffer );
- promises.push( promise );
- break;
- }
- case 'pnts': {
- const slicedBuffer = buffer.slice();
- const loader = new PNTSLoader( manager );
- loader.workingPath = this.workingPath;
- loader.fetchOptions = this.fetchOptions;
- const promise = loader.parse( slicedBuffer.buffer );
- promises.push( promise );
- break;
- }
- case 'i3dm': {
- const slicedBuffer = buffer.slice();
- const loader = new I3DMLoader( manager );
- loader.workingPath = this.workingPath;
- loader.fetchOptions = this.fetchOptions;
- const promise = loader.parse( slicedBuffer.buffer );
- promises.push( promise );
- break;
- }
- }
- }
- return Promise.all( promises ).then( results => {
- const group = new Group();
- results.forEach( result => {
- group.add( result.scene );
- } );
- return {
- tiles: results,
- scene: group,
- };
- } );
- }
- }
|