CMPTLoader.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { Group, DefaultLoadingManager } from 'three';
  2. import { CMPTLoaderBase } from '../base/CMPTLoaderBase.js';
  3. import { B3DMLoader } from './B3DMLoader.js';
  4. import { PNTSLoader } from './PNTSLoader.js';
  5. import { I3DMLoader } from './I3DMLoader.js';
  6. export class CMPTLoader extends CMPTLoaderBase {
  7. constructor( manager = DefaultLoadingManager ) {
  8. super();
  9. this.manager = manager;
  10. }
  11. parse( buffer ) {
  12. const result = super.parse( buffer );
  13. const manager = this.manager;
  14. const promises = [];
  15. for ( const i in result.tiles ) {
  16. const { type, buffer } = result.tiles[ i ];
  17. switch ( type ) {
  18. case 'b3dm': {
  19. const slicedBuffer = buffer.slice();
  20. const loader = new B3DMLoader( manager );
  21. loader.workingPath = this.workingPath;
  22. loader.fetchOptions = this.fetchOptions;
  23. const promise = loader.parse( slicedBuffer.buffer );
  24. promises.push( promise );
  25. break;
  26. }
  27. case 'pnts': {
  28. const slicedBuffer = buffer.slice();
  29. const loader = new PNTSLoader( manager );
  30. loader.workingPath = this.workingPath;
  31. loader.fetchOptions = this.fetchOptions;
  32. const promise = loader.parse( slicedBuffer.buffer );
  33. promises.push( promise );
  34. break;
  35. }
  36. case 'i3dm': {
  37. const slicedBuffer = buffer.slice();
  38. const loader = new I3DMLoader( manager );
  39. loader.workingPath = this.workingPath;
  40. loader.fetchOptions = this.fetchOptions;
  41. const promise = loader.parse( slicedBuffer.buffer );
  42. promises.push( promise );
  43. break;
  44. }
  45. }
  46. }
  47. return Promise.all( promises ).then( results => {
  48. const group = new Group();
  49. results.forEach( result => {
  50. group.add( result.scene );
  51. } );
  52. return {
  53. tiles: results,
  54. scene: group,
  55. };
  56. } );
  57. }
  58. }