|
@@ -30,8 +30,6 @@ THREE.CTMLoader.prototype.loadParts = function( url, callback, useWorker, useBuf
|
|
|
|
|
|
basePath = basePath ? basePath : this.extractUrlbase( url );
|
|
|
|
|
|
- console.log( basePath );
|
|
|
-
|
|
|
xhr.onreadystatechange = function() {
|
|
|
|
|
|
if ( xhr.readyState == 4 ) {
|
|
@@ -40,27 +38,23 @@ THREE.CTMLoader.prototype.loadParts = function( url, callback, useWorker, useBuf
|
|
|
|
|
|
var jsonObject = JSON.parse( xhr.responseText );
|
|
|
|
|
|
- var geometries = [], materials = [];
|
|
|
- var partCounter = 0;
|
|
|
-
|
|
|
- function generateCallback( index ) {
|
|
|
+ var materials = [], geometries = [], counter = 0;
|
|
|
|
|
|
- return function ( geometry ) {
|
|
|
+ function callbackFinal( geometry ) {
|
|
|
|
|
|
- geometries[ index ] = geometry;
|
|
|
+ counter += 1;
|
|
|
|
|
|
- partCounter += 1;
|
|
|
+ geometries.push( geometry );
|
|
|
|
|
|
- if ( partCounter === jsonObject.geometries.length ) {
|
|
|
+ if ( counter === jsonObject.offsets.length ) {
|
|
|
|
|
|
- callback( geometries, materials );
|
|
|
-
|
|
|
- }
|
|
|
+ callback( geometries, materials );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
// init materials
|
|
|
|
|
|
for ( var i = 0; i < jsonObject.materials.length; i ++ ) {
|
|
@@ -69,14 +63,10 @@ THREE.CTMLoader.prototype.loadParts = function( url, callback, useWorker, useBuf
|
|
|
|
|
|
}
|
|
|
|
|
|
- // load individual CTM files
|
|
|
-
|
|
|
- for ( var i = 0; i < jsonObject.geometries.length; i ++ ) {
|
|
|
+ // load joined CTM file
|
|
|
|
|
|
- var partUrl = basePath + jsonObject.geometries[ i ];
|
|
|
- scope.load( partUrl, generateCallback( i ), useWorker, useBuffers );
|
|
|
-
|
|
|
- }
|
|
|
+ var partUrl = basePath + jsonObject.data;
|
|
|
+ scope.load( partUrl, callbackFinal, useWorker, useBuffers, jsonObject.offsets );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -96,10 +86,12 @@ THREE.CTMLoader.prototype.loadParts = function( url, callback, useWorker, useBuf
|
|
|
// - url (required)
|
|
|
// - callback (required)
|
|
|
|
|
|
-THREE.CTMLoader.prototype.load = function( url, callback, useWorker, useBuffers ) {
|
|
|
+THREE.CTMLoader.prototype.load = function( url, callback, useWorker, useBuffers, offsets ) {
|
|
|
|
|
|
var scope = this;
|
|
|
|
|
|
+ offsets = offsets !== undefined ? offsets : [ 0 ];
|
|
|
+
|
|
|
var xhr = new XMLHttpRequest(),
|
|
|
callbackProgress = null;
|
|
|
|
|
@@ -121,15 +113,21 @@ THREE.CTMLoader.prototype.load = function( url, callback, useWorker, useBuffers
|
|
|
|
|
|
worker.onmessage = function( event ) {
|
|
|
|
|
|
- var ctmFile = event.data;
|
|
|
+ var files = event.data;
|
|
|
|
|
|
- if ( useBuffers ) {
|
|
|
+ for ( var i = 0; i < files.length; i ++ ) {
|
|
|
|
|
|
- scope.createModelBuffers( ctmFile, callback );
|
|
|
+ var ctmFile = files[ i ];
|
|
|
|
|
|
- } else {
|
|
|
+ if ( useBuffers ) {
|
|
|
|
|
|
- scope.createModelClassic( ctmFile, callback );
|
|
|
+ scope.createModelBuffers( ctmFile, callback );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ scope.createModelClassic( ctmFile, callback );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -138,24 +136,32 @@ THREE.CTMLoader.prototype.load = function( url, callback, useWorker, useBuffers
|
|
|
|
|
|
};
|
|
|
|
|
|
- worker.postMessage( binaryData );
|
|
|
+ worker.postMessage( { "data": binaryData, "offsets": offsets } );
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- var ctmFile = new CTM.File( new CTM.Stream( binaryData ) );
|
|
|
|
|
|
- if ( useBuffers ) {
|
|
|
+ for ( var i = 0; i < offsets.length; i ++ ) {
|
|
|
+
|
|
|
+ var stream = new CTM.Stream( binaryData );
|
|
|
+ stream.offset = offsets[ i ];
|
|
|
+
|
|
|
+ var ctmFile = new CTM.File( stream );
|
|
|
+
|
|
|
+ if ( useBuffers ) {
|
|
|
+
|
|
|
+ scope.createModelBuffers( ctmFile, callback );
|
|
|
|
|
|
- scope.createModelBuffers( ctmFile, callback );
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
+ scope.createModelClassic( ctmFile, callback );
|
|
|
|
|
|
- scope.createModelClassic( ctmFile, callback );
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
- var e = Date.now();
|
|
|
- console.log( "CTM data parse time [inline]: " + (e-s) + " ms" );
|
|
|
+ //var e = Date.now();
|
|
|
+ //console.log( "CTM data parse time [inline]: " + (e-s) + " ms" );
|
|
|
|
|
|
}
|
|
|
|