B3DMLoader.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { B3DMLoaderBase } from '../base/B3DMLoaderBase.js';
  2. import { DefaultLoadingManager } from 'three';
  3. import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
  4. export class B3DMLoader extends B3DMLoaderBase {
  5. constructor( manager = DefaultLoadingManager ) {
  6. super();
  7. this.manager = manager;
  8. }
  9. parse( buffer ) {
  10. const b3dm = super.parse( buffer );
  11. const gltfBuffer = b3dm.glbBytes.slice().buffer;
  12. return new Promise( ( resolve, reject ) => {
  13. const manager = this.manager;
  14. const loader = manager.getHandler( 'path.gltf' ) || new GLTFLoader( manager );
  15. loader.parse( gltfBuffer, null, model => {
  16. const { batchTable, featureTable } = b3dm;
  17. const { scene } = model;
  18. const rtcCenter = featureTable.getData( 'RTC_CENTER' );
  19. if ( rtcCenter ) {
  20. scene.position.x += rtcCenter[ 0 ];
  21. scene.position.y += rtcCenter[ 1 ];
  22. scene.position.z += rtcCenter[ 2 ];
  23. }
  24. model.batchTable = batchTable;
  25. model.featureTable = featureTable;
  26. scene.batchTable = batchTable;
  27. scene.featureTable = featureTable;
  28. resolve( model );
  29. }, reject );
  30. } );
  31. }
  32. }