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