1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { B3DMLoaderBase } from '../base/B3DMLoaderBase.js';
- import { DefaultLoadingManager } from 'three';
- import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
- export class B3DMLoader extends B3DMLoaderBase {
- constructor( manager = DefaultLoadingManager ) {
- super();
- this.manager = manager;
- }
- parse( buffer ) {
- const b3dm = super.parse( buffer );
- const gltfBuffer = b3dm.glbBytes.slice().buffer;
- return new Promise( ( resolve, reject ) => {
- const manager = this.manager;
- const loader = manager.getHandler( 'path.gltf' ) || new GLTFLoader( manager );
- loader.parse( gltfBuffer, null, model => {
- const { batchTable, featureTable } = b3dm;
- const { scene } = model;
- const rtcCenter = featureTable.getData( 'RTC_CENTER' );
- if ( rtcCenter ) {
- scene.position.x += rtcCenter[ 0 ];
- scene.position.y += rtcCenter[ 1 ];
- scene.position.z += rtcCenter[ 2 ];
- }
- model.batchTable = batchTable;
- model.featureTable = featureTable;
- scene.batchTable = batchTable;
- scene.featureTable = featureTable;
- resolve( model );
- }, reject );
- } );
- }
- }
|