|
@@ -86,169 +86,203 @@
|
|
|
|
|
|
var file = event.dataTransfer.files[ 0 ];
|
|
|
var extension = file.name.split( '.' ).pop().toLowerCase();
|
|
|
- var reader = new FileReader();
|
|
|
|
|
|
- reader.onload = function ( event ) {
|
|
|
+ parseFile( file, extension );
|
|
|
|
|
|
- parseFile( event.target.result, extension );
|
|
|
+ }, false );
|
|
|
|
|
|
- };
|
|
|
+ var parseFile = function ( file, extension ) {
|
|
|
|
|
|
- var binaryFormats = {
|
|
|
+ switch ( extension ) {
|
|
|
|
|
|
- "ctm": true,
|
|
|
- "utf8": true
|
|
|
+ case 'ctm':
|
|
|
|
|
|
- };
|
|
|
+ var reader = new FileReader();
|
|
|
+ reader.addEventListener( 'load', function ( event ) {
|
|
|
|
|
|
- if ( extension in binaryFormats ) {
|
|
|
+ var contents = event.target.result;
|
|
|
|
|
|
- reader.readAsBinaryString( file );
|
|
|
+ var stream = new CTM.Stream( contents );
|
|
|
+ stream.offset = 0;
|
|
|
|
|
|
- } else {
|
|
|
+ var loader = new THREE.CTMLoader();
|
|
|
+ loader.createModelClassic( new CTM.File( stream ), function( geometry ) {
|
|
|
|
|
|
- reader.readAsText( file );
|
|
|
+ var material = new THREE.MeshLambertMaterial();
|
|
|
|
|
|
- }
|
|
|
+ var mesh = new THREE.Mesh( geometry, material );
|
|
|
|
|
|
- }, false );
|
|
|
+ signals.objectAdded.dispatch( mesh );
|
|
|
+ signals.objectSelected.dispatch( mesh );
|
|
|
|
|
|
- var parseFile = function ( contents, extension ) {
|
|
|
+ } );
|
|
|
|
|
|
- switch ( extension ) {
|
|
|
+ }, false );
|
|
|
+ reader.readAsBinaryString( file );
|
|
|
|
|
|
- case 'ctm':
|
|
|
+ break;
|
|
|
|
|
|
- var stream = new CTM.Stream( contents );
|
|
|
- stream.offset = 0;
|
|
|
+ case 'dae':
|
|
|
|
|
|
- var file = new CTM.File( stream );
|
|
|
+ var reader = new FileReader();
|
|
|
+ reader.addEventListener( 'load', function ( event ) {
|
|
|
|
|
|
- var loader = new THREE.CTMLoader();
|
|
|
- loader.createModelClassic( file, function( geometry ) {
|
|
|
+ var contents = event.target.result;
|
|
|
|
|
|
- var material = new THREE.MeshLambertMaterial();
|
|
|
+ var parser = new DOMParser();
|
|
|
+ var xml = parser.parseFromString( contents, 'text/xml' );
|
|
|
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ var loader = new THREE.ColladaLoader();
|
|
|
+ loader.parse( xml, function ( collada ) {
|
|
|
|
|
|
- signals.objectAdded.dispatch( mesh );
|
|
|
- signals.objectSelected.dispatch( mesh );
|
|
|
+ signals.objectAdded.dispatch( collada.scene );
|
|
|
+ signals.objectSelected.dispatch( collada.scene );
|
|
|
+
|
|
|
+ } );
|
|
|
|
|
|
- } );
|
|
|
+ }, false );
|
|
|
+ reader.readAsText( file );
|
|
|
|
|
|
break;
|
|
|
|
|
|
- case 'dae':
|
|
|
+ case 'js':
|
|
|
|
|
|
- var parser = new DOMParser();
|
|
|
- var xml = parser.parseFromString( contents, 'text/xml' );
|
|
|
+ var reader = new FileReader();
|
|
|
+ reader.addEventListener( 'load', function ( event ) {
|
|
|
|
|
|
- var loader = new THREE.ColladaLoader();
|
|
|
- loader.parse( xml, function ( collada ) {
|
|
|
+ var contents = event.target.result;
|
|
|
|
|
|
- signals.objectAdded.dispatch( collada.scene );
|
|
|
- signals.objectSelected.dispatch( collada.scene );
|
|
|
+ // 2.0
|
|
|
|
|
|
- } );
|
|
|
+ if ( contents.indexOf( 'postMessage' ) !== -1 ) {
|
|
|
|
|
|
- break;
|
|
|
+ var blob = new Blob( [ contents ], { type: 'text/javascript' } );
|
|
|
+ var url = URL.createObjectURL( blob );
|
|
|
|
|
|
- case 'js':
|
|
|
+ var worker = new Worker( url );
|
|
|
|
|
|
- // 2.0
|
|
|
+ worker.onmessage = function ( event ) {
|
|
|
|
|
|
- if ( contents.indexOf( 'postMessage' ) !== -1 ) {
|
|
|
+ event.data.metadata = { 'format': 2 };
|
|
|
+ parseFile( JSON.stringify( event.data ), extension );
|
|
|
|
|
|
- var blob = new Blob( [ contents ], { type: 'text/javascript' } );
|
|
|
- var url = URL.createObjectURL( blob );
|
|
|
+ };
|
|
|
|
|
|
- var worker = new Worker( url );
|
|
|
+ worker.postMessage( new Date().getTime() );
|
|
|
|
|
|
- worker.onmessage = function ( event ) {
|
|
|
+ return;
|
|
|
|
|
|
- event.data.metadata = { 'format': 2 };
|
|
|
- parseFile( JSON.stringify( event.data ), extension );
|
|
|
+ }
|
|
|
|
|
|
- };
|
|
|
+ // 3.0
|
|
|
|
|
|
- worker.postMessage( new Date().getTime() );
|
|
|
+ var data = JSON.parse( contents );
|
|
|
|
|
|
- return;
|
|
|
+ if ( data.metadata === undefined ) data.metadata = { type: 'geometry' }; // 2.0
|
|
|
+ if ( data.metadata.type === undefined ) data.metadata.type = 'geometry'; // 3.0
|
|
|
|
|
|
- }
|
|
|
+ if ( data.metadata.type === 'geometry' ) {
|
|
|
|
|
|
- // 3.0
|
|
|
+ var geometry = new THREE.GeometryLoader().parse( data );
|
|
|
+ var material = new THREE.MeshLambertMaterial();
|
|
|
|
|
|
- var data = JSON.parse( contents );
|
|
|
+ var mesh = new THREE.Mesh( geometry, material );
|
|
|
|
|
|
- if ( data.metadata === undefined ) data.metadata = { type: 'geometry' }; // 2.0
|
|
|
- if ( data.metadata.type === undefined ) data.metadata.type = 'geometry'; // 3.0
|
|
|
+ signals.objectAdded.dispatch( mesh );
|
|
|
+ signals.objectSelected.dispatch( mesh );
|
|
|
|
|
|
- if ( data.metadata.type === 'geometry' ) {
|
|
|
+ } else if ( data.metadata.type === 'scene' ) {
|
|
|
|
|
|
- var geometry = new THREE.GeometryLoader().parse( data );
|
|
|
- var material = new THREE.MeshLambertMaterial();
|
|
|
+ new THREE.SceneLoader().parse( data, function ( scene ) {
|
|
|
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ signals.objectAdded.dispatch( scene );
|
|
|
+ signals.objectSelected.dispatch( scene );
|
|
|
|
|
|
- signals.objectAdded.dispatch( mesh );
|
|
|
- signals.objectSelected.dispatch( mesh );
|
|
|
+ }, '' );
|
|
|
|
|
|
- } else if ( data.metadata.type === 'scene' ) {
|
|
|
+ }
|
|
|
|
|
|
- new THREE.SceneLoader().parse( data, function ( scene ) {
|
|
|
+ }, false );
|
|
|
+ reader.readAsText( file );
|
|
|
|
|
|
- signals.objectAdded.dispatch( scene );
|
|
|
- signals.objectSelected.dispatch( scene );
|
|
|
+ break;
|
|
|
|
|
|
- }, '' );
|
|
|
+ case 'obj':
|
|
|
|
|
|
- }
|
|
|
+ var reader = new FileReader();
|
|
|
+ reader.addEventListener( 'load', function ( event ) {
|
|
|
|
|
|
- break;
|
|
|
+ var contents = event.target.result;
|
|
|
|
|
|
- case 'obj':
|
|
|
+ var object = new THREE.OBJLoader().parse( contents );
|
|
|
|
|
|
- var object = new THREE.OBJLoader().parse( contents );
|
|
|
+ signals.objectAdded.dispatch( object );
|
|
|
+ signals.objectSelected.dispatch( object );
|
|
|
|
|
|
- signals.objectAdded.dispatch( object );
|
|
|
- signals.objectSelected.dispatch( object );
|
|
|
+ }, false );
|
|
|
+ reader.readAsText( file );
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'stl':
|
|
|
|
|
|
- var geometry = new THREE.STLLoader().parse( contents );
|
|
|
- var material = new THREE.MeshLambertMaterial();
|
|
|
+ var reader = new FileReader();
|
|
|
+ reader.addEventListener( 'load', function ( event ) {
|
|
|
+
|
|
|
+ var contents = event.target.result;
|
|
|
+
|
|
|
+ var geometry = new THREE.STLLoader().parse( contents );
|
|
|
+ var material = new THREE.MeshLambertMaterial();
|
|
|
+
|
|
|
+ var mesh = new THREE.Mesh( geometry, material );
|
|
|
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ signals.objectAdded.dispatch( mesh );
|
|
|
+ signals.objectSelected.dispatch( mesh );
|
|
|
|
|
|
- signals.objectAdded.dispatch( mesh );
|
|
|
- signals.objectSelected.dispatch( mesh );
|
|
|
+ }, false );
|
|
|
+ reader.readAsText( file );
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ /*
|
|
|
case 'utf8':
|
|
|
|
|
|
- var geometry = new THREE.UTF8Loader().parse( contents );
|
|
|
- var material = new THREE.MeshLambertMaterial();
|
|
|
+ var reader = new FileReader();
|
|
|
+ reader.addEventListener( 'load', function ( event ) {
|
|
|
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ var contents = event.target.result;
|
|
|
|
|
|
- signals.objectAdded.dispatch( mesh );
|
|
|
- signals.objectSelected.dispatch( mesh );
|
|
|
+ var geometry = new THREE.UTF8Loader().parse( contents );
|
|
|
+ var material = new THREE.MeshLambertMaterial();
|
|
|
+
|
|
|
+ var mesh = new THREE.Mesh( geometry, material );
|
|
|
+
|
|
|
+ signals.objectAdded.dispatch( mesh );
|
|
|
+ signals.objectSelected.dispatch( mesh );
|
|
|
+
|
|
|
+ }, false );
|
|
|
+ reader.readAsBinaryString( file );
|
|
|
|
|
|
break;
|
|
|
+ */
|
|
|
|
|
|
case 'vtk':
|
|
|
|
|
|
- var geometry = new THREE.VTKLoader().parse( contents );
|
|
|
- var material = new THREE.MeshLambertMaterial();
|
|
|
+ var reader = new FileReader();
|
|
|
+ reader.addEventListener( 'load', function ( event ) {
|
|
|
+
|
|
|
+ var contents = event.target.result;
|
|
|
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ var geometry = new THREE.VTKLoader().parse( contents );
|
|
|
+ var material = new THREE.MeshLambertMaterial();
|
|
|
+
|
|
|
+ var mesh = new THREE.Mesh( geometry, material );
|
|
|
+
|
|
|
+ signals.objectAdded.dispatch( mesh );
|
|
|
+ signals.objectSelected.dispatch( mesh );
|
|
|
|
|
|
- signals.objectAdded.dispatch( mesh );
|
|
|
- signals.objectSelected.dispatch( mesh );
|
|
|
+ }, false );
|
|
|
+ reader.readAsText( file );
|
|
|
|
|
|
break;
|
|
|
|