|
@@ -11,7 +11,7 @@ import { unzipSync, strFromU8 } from '../../examples/jsm/libs/fflate.module.js';
|
|
|
|
|
|
function Loader( editor ) {
|
|
|
|
|
|
- var scope = this;
|
|
|
+ const scope = this;
|
|
|
|
|
|
this.texturePath = '';
|
|
|
|
|
@@ -29,14 +29,14 @@ function Loader( editor ) {
|
|
|
|
|
|
if ( files.length > 0 ) {
|
|
|
|
|
|
- var filesMap = filesMap || LoaderUtils.createFilesMap( files );
|
|
|
+ filesMap = filesMap || LoaderUtils.createFilesMap( files );
|
|
|
|
|
|
- var manager = new THREE.LoadingManager();
|
|
|
+ const manager = new THREE.LoadingManager();
|
|
|
manager.setURLModifier( function ( url ) {
|
|
|
|
|
|
url = url.replace( /^(\.?\/)/, '' ); // remove './'
|
|
|
|
|
|
- var file = filesMap[ url ];
|
|
|
+ const file = filesMap[ url ];
|
|
|
|
|
|
if ( file ) {
|
|
|
|
|
@@ -52,7 +52,7 @@ function Loader( editor ) {
|
|
|
|
|
|
manager.addHandler( /\.tga$/i, new TGALoader() );
|
|
|
|
|
|
- for ( var i = 0; i < files.length; i ++ ) {
|
|
|
+ for ( let i = 0; i < files.length; i ++ ) {
|
|
|
|
|
|
scope.loadFile( files[ i ], manager );
|
|
|
|
|
@@ -64,14 +64,14 @@ function Loader( editor ) {
|
|
|
|
|
|
this.loadFile = function ( file, manager ) {
|
|
|
|
|
|
- var filename = file.name;
|
|
|
- var extension = filename.split( '.' ).pop().toLowerCase();
|
|
|
+ const filename = file.name;
|
|
|
+ const extension = filename.split( '.' ).pop().toLowerCase();
|
|
|
|
|
|
- var reader = new FileReader();
|
|
|
+ const reader = new FileReader();
|
|
|
reader.addEventListener( 'progress', function ( event ) {
|
|
|
|
|
|
- var size = '(' + Math.floor( event.total / 1000 ).format() + ' KB)';
|
|
|
- var progress = Math.floor( ( event.loaded / event.total ) * 100 ) + '%';
|
|
|
+ const size = '(' + Math.floor( event.total / 1000 ).format() + ' KB)';
|
|
|
+ const progress = Math.floor( ( event.loaded / event.total ) * 100 ) + '%';
|
|
|
|
|
|
console.log( 'Loading', filename, size, progress );
|
|
|
|
|
@@ -81,13 +81,15 @@ function Loader( editor ) {
|
|
|
|
|
|
case '3dm':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { Rhino3dmLoader } = await import( '../../examples/jsm/loaders/3DMLoader.js' );
|
|
|
+ const { Rhino3dmLoader } = await import( '../../examples/jsm/loaders/3DMLoader.js' );
|
|
|
|
|
|
- var loader = new Rhino3dmLoader();
|
|
|
+ const loader = new Rhino3dmLoader();
|
|
|
loader.setLibraryPath( '../examples/jsm/libs/rhino3dm/' );
|
|
|
loader.parse( contents, function ( object ) {
|
|
|
|
|
@@ -100,14 +102,18 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case '3ds':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var { TDSLoader } = await import( '../../examples/jsm/loaders/TDSLoader.js' );
|
|
|
+ const { TDSLoader } = await import( '../../examples/jsm/loaders/TDSLoader.js' );
|
|
|
|
|
|
- var loader = new TDSLoader();
|
|
|
- var object = loader.parse( event.target.result );
|
|
|
+ const loader = new TDSLoader();
|
|
|
+ const object = loader.parse( event.target.result );
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, object ) );
|
|
|
|
|
@@ -116,14 +122,18 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case '3mf':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var { ThreeMFLoader } = await import( '../../examples/jsm/loaders/3MFLoader.js' );
|
|
|
+ const { ThreeMFLoader } = await import( '../../examples/jsm/loaders/3MFLoader.js' );
|
|
|
|
|
|
- var loader = new ThreeMFLoader();
|
|
|
- var object = loader.parse( event.target.result );
|
|
|
+ const loader = new ThreeMFLoader();
|
|
|
+ const object = loader.parse( event.target.result );
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, object ) );
|
|
|
|
|
@@ -132,14 +142,18 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'amf':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var { AMFLoader } = await import( '../../examples/jsm/loaders/AMFLoader.js' );
|
|
|
+ const { AMFLoader } = await import( '../../examples/jsm/loaders/AMFLoader.js' );
|
|
|
|
|
|
- var loader = new AMFLoader();
|
|
|
- var amfobject = loader.parse( event.target.result );
|
|
|
+ const loader = new AMFLoader();
|
|
|
+ const amfobject = loader.parse( event.target.result );
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, amfobject ) );
|
|
|
|
|
@@ -148,16 +162,20 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'dae':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { ColladaLoader } = await import( '../../examples/jsm/loaders/ColladaLoader.js' );
|
|
|
+ const { ColladaLoader } = await import( '../../examples/jsm/loaders/ColladaLoader.js' );
|
|
|
|
|
|
- var loader = new ColladaLoader( manager );
|
|
|
- var collada = loader.parse( contents );
|
|
|
+ const loader = new ColladaLoader( manager );
|
|
|
+ const collada = loader.parse( contents );
|
|
|
|
|
|
collada.scene.name = filename;
|
|
|
|
|
@@ -168,30 +186,34 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'drc':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
+ const { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
|
|
|
- var loader = new DRACOLoader();
|
|
|
+ const loader = new DRACOLoader();
|
|
|
loader.setDecoderPath( '../examples/js/libs/draco/' );
|
|
|
loader.decodeDracoFile( contents, function ( geometry ) {
|
|
|
|
|
|
- var object;
|
|
|
+ let object;
|
|
|
|
|
|
if ( geometry.index !== null ) {
|
|
|
|
|
|
- var material = new THREE.MeshStandardMaterial();
|
|
|
+ const material = new THREE.MeshStandardMaterial();
|
|
|
|
|
|
object = new THREE.Mesh( geometry, material );
|
|
|
object.name = filename;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- var material = new THREE.PointsMaterial( { size: 0.01 } );
|
|
|
+ const material = new THREE.PointsMaterial( { size: 0.01 } );
|
|
|
material.vertexColors = geometry.hasAttribute( 'color' );
|
|
|
|
|
|
object = new THREE.Points( geometry, material );
|
|
@@ -209,16 +231,20 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'fbx':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { FBXLoader } = await import( '../../examples/jsm/loaders/FBXLoader.js' );
|
|
|
+ const { FBXLoader } = await import( '../../examples/jsm/loaders/FBXLoader.js' );
|
|
|
|
|
|
- var loader = new FBXLoader( manager );
|
|
|
- var object = loader.parse( contents );
|
|
|
+ const loader = new FBXLoader( manager );
|
|
|
+ const object = loader.parse( contents );
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, object ) );
|
|
|
|
|
@@ -227,23 +253,27 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'glb':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
- var { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );
|
|
|
+ const { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
+ const { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );
|
|
|
|
|
|
- var dracoLoader = new DRACOLoader();
|
|
|
+ const dracoLoader = new DRACOLoader();
|
|
|
dracoLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );
|
|
|
|
|
|
- var loader = new GLTFLoader();
|
|
|
+ const loader = new GLTFLoader();
|
|
|
loader.setDRACOLoader( dracoLoader );
|
|
|
loader.parse( contents, '', function ( result ) {
|
|
|
|
|
|
- var scene = result.scene;
|
|
|
+ const scene = result.scene;
|
|
|
scene.name = filename;
|
|
|
|
|
|
scene.animations.push( ...result.animations );
|
|
@@ -256,13 +286,17 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'gltf':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var loader;
|
|
|
+ let loader;
|
|
|
|
|
|
if ( isGLTF1( contents ) ) {
|
|
|
|
|
@@ -270,10 +304,10 @@ function Loader( editor ) {
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
- var { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );
|
|
|
+ const { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
+ const { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );
|
|
|
|
|
|
- var dracoLoader = new DRACOLoader();
|
|
|
+ const dracoLoader = new DRACOLoader();
|
|
|
dracoLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );
|
|
|
|
|
|
loader = new GLTFLoader( manager );
|
|
@@ -283,7 +317,7 @@ function Loader( editor ) {
|
|
|
|
|
|
loader.parse( contents, '', function ( result ) {
|
|
|
|
|
|
- var scene = result.scene;
|
|
|
+ const scene = result.scene;
|
|
|
scene.name = filename;
|
|
|
|
|
|
scene.animations.push( ...result.animations );
|
|
@@ -296,21 +330,25 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'js':
|
|
|
case 'json':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
// 2.0
|
|
|
|
|
|
if ( contents.indexOf( 'postMessage' ) !== - 1 ) {
|
|
|
|
|
|
- var blob = new Blob( [ contents ], { type: 'text/javascript' } );
|
|
|
- var url = URL.createObjectURL( blob );
|
|
|
+ const blob = new Blob( [ contents ], { type: 'text/javascript' } );
|
|
|
+ const url = URL.createObjectURL( blob );
|
|
|
|
|
|
- var worker = new Worker( url );
|
|
|
+ const worker = new Worker( url );
|
|
|
|
|
|
worker.onmessage = function ( event ) {
|
|
|
|
|
@@ -327,7 +365,7 @@ function Loader( editor ) {
|
|
|
|
|
|
// >= 3.0
|
|
|
|
|
|
- var data;
|
|
|
+ let data;
|
|
|
|
|
|
try {
|
|
|
|
|
@@ -347,16 +385,20 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'ifc':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var { IFCLoader } = await import( '../../examples/jsm/loaders/IFCLoader.js' );
|
|
|
+ const { IFCLoader } = await import( '../../examples/jsm/loaders/IFCLoader.js' );
|
|
|
|
|
|
- var loader = new IFCLoader();
|
|
|
+ const loader = new IFCLoader();
|
|
|
loader.ifcManager.setWasmPath( '../../examples/jsm/loaders/ifc/' );
|
|
|
|
|
|
- var model = await loader.parse( event.target.result );
|
|
|
+ const model = await loader.parse( event.target.result );
|
|
|
model.mesh.name = filename;
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, model.mesh ) );
|
|
@@ -366,14 +408,18 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'kmz':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var { KMZLoader } = await import( '../../examples/jsm/loaders/KMZLoader.js' );
|
|
|
+ const { KMZLoader } = await import( '../../examples/jsm/loaders/KMZLoader.js' );
|
|
|
|
|
|
- var loader = new KMZLoader();
|
|
|
- var collada = loader.parse( event.target.result );
|
|
|
+ const loader = new KMZLoader();
|
|
|
+ const collada = loader.parse( event.target.result );
|
|
|
|
|
|
collada.scene.name = filename;
|
|
|
|
|
@@ -384,14 +430,18 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'ldr':
|
|
|
case 'mpd':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var { LDrawLoader } = await import( '../../examples/jsm/loaders/LDrawLoader.js' );
|
|
|
+ const { LDrawLoader } = await import( '../../examples/jsm/loaders/LDrawLoader.js' );
|
|
|
|
|
|
- var loader = new LDrawLoader();
|
|
|
+ const loader = new LDrawLoader();
|
|
|
loader.setPath( '../../examples/models/ldraw/officialLibrary/' );
|
|
|
loader.parse( event.target.result, undefined, function ( group ) {
|
|
|
|
|
@@ -408,18 +458,22 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'md2':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { MD2Loader } = await import( '../../examples/jsm/loaders/MD2Loader.js' );
|
|
|
+ const { MD2Loader } = await import( '../../examples/jsm/loaders/MD2Loader.js' );
|
|
|
|
|
|
- var geometry = new MD2Loader().parse( contents );
|
|
|
- var material = new THREE.MeshStandardMaterial();
|
|
|
+ const geometry = new MD2Loader().parse( contents );
|
|
|
+ const material = new THREE.MeshStandardMaterial();
|
|
|
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ const mesh = new THREE.Mesh( geometry, material );
|
|
|
mesh.mixer = new THREE.AnimationMixer( mesh );
|
|
|
mesh.name = filename;
|
|
|
|
|
@@ -431,15 +485,19 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'obj':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { OBJLoader } = await import( '../../examples/jsm/loaders/OBJLoader.js' );
|
|
|
+ const { OBJLoader } = await import( '../../examples/jsm/loaders/OBJLoader.js' );
|
|
|
|
|
|
- var object = new OBJLoader().parse( contents );
|
|
|
+ const object = new OBJLoader().parse( contents );
|
|
|
object.name = filename;
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, object ) );
|
|
@@ -449,27 +507,31 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'ply':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { PLYLoader } = await import( '../../examples/jsm/loaders/PLYLoader.js' );
|
|
|
+ const { PLYLoader } = await import( '../../examples/jsm/loaders/PLYLoader.js' );
|
|
|
|
|
|
- var geometry = new PLYLoader().parse( contents );
|
|
|
- var object;
|
|
|
+ const geometry = new PLYLoader().parse( contents );
|
|
|
+ let object;
|
|
|
|
|
|
if ( geometry.index !== null ) {
|
|
|
|
|
|
- var material = new THREE.MeshStandardMaterial();
|
|
|
+ const material = new THREE.MeshStandardMaterial();
|
|
|
|
|
|
object = new THREE.Mesh( geometry, material );
|
|
|
object.name = filename;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- var material = new THREE.PointsMaterial( { size: 0.01 } );
|
|
|
+ const material = new THREE.PointsMaterial( { size: 0.01 } );
|
|
|
material.vertexColors = geometry.hasAttribute( 'color' );
|
|
|
|
|
|
object = new THREE.Points( geometry, material );
|
|
@@ -484,18 +546,22 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'stl':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { STLLoader } = await import( '../../examples/jsm/loaders/STLLoader.js' );
|
|
|
+ const { STLLoader } = await import( '../../examples/jsm/loaders/STLLoader.js' );
|
|
|
|
|
|
- var geometry = new STLLoader().parse( contents );
|
|
|
- var material = new THREE.MeshStandardMaterial();
|
|
|
+ const geometry = new STLLoader().parse( contents );
|
|
|
+ const material = new THREE.MeshStandardMaterial();
|
|
|
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ const mesh = new THREE.Mesh( geometry, material );
|
|
|
mesh.name = filename;
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, mesh ) );
|
|
@@ -514,40 +580,44 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'svg':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { SVGLoader } = await import( '../../examples/jsm/loaders/SVGLoader.js' );
|
|
|
+ const { SVGLoader } = await import( '../../examples/jsm/loaders/SVGLoader.js' );
|
|
|
|
|
|
- var loader = new SVGLoader();
|
|
|
- var paths = loader.parse( contents ).paths;
|
|
|
+ const loader = new SVGLoader();
|
|
|
+ const paths = loader.parse( contents ).paths;
|
|
|
|
|
|
//
|
|
|
|
|
|
- var group = new THREE.Group();
|
|
|
+ const group = new THREE.Group();
|
|
|
group.scale.multiplyScalar( 0.1 );
|
|
|
group.scale.y *= - 1;
|
|
|
|
|
|
- for ( var i = 0; i < paths.length; i ++ ) {
|
|
|
+ for ( let i = 0; i < paths.length; i ++ ) {
|
|
|
|
|
|
- var path = paths[ i ];
|
|
|
+ const path = paths[ i ];
|
|
|
|
|
|
- var material = new THREE.MeshBasicMaterial( {
|
|
|
+ const material = new THREE.MeshBasicMaterial( {
|
|
|
color: path.color,
|
|
|
depthWrite: false
|
|
|
} );
|
|
|
|
|
|
- var shapes = SVGLoader.createShapes( path );
|
|
|
+ const shapes = SVGLoader.createShapes( path );
|
|
|
|
|
|
- for ( var j = 0; j < shapes.length; j ++ ) {
|
|
|
+ for ( let j = 0; j < shapes.length; j ++ ) {
|
|
|
|
|
|
- var shape = shapes[ j ];
|
|
|
+ const shape = shapes[ j ];
|
|
|
|
|
|
- var geometry = new THREE.ShapeGeometry( shape );
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ const geometry = new THREE.ShapeGeometry( shape );
|
|
|
+ const mesh = new THREE.Mesh( geometry, material );
|
|
|
|
|
|
group.add( mesh );
|
|
|
|
|
@@ -562,17 +632,21 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'vox':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { VOXLoader, VOXMesh } = await import( '../../examples/jsm/loaders/VOXLoader.js' );
|
|
|
+ const { VOXLoader, VOXMesh } = await import( '../../examples/jsm/loaders/VOXLoader.js' );
|
|
|
|
|
|
- var chunks = new VOXLoader().parse( contents );
|
|
|
+ const chunks = new VOXLoader().parse( contents );
|
|
|
|
|
|
- var group = new THREE.Group();
|
|
|
+ const group = new THREE.Group();
|
|
|
group.name = filename;
|
|
|
|
|
|
for ( let i = 0; i < chunks.length; i ++ ) {
|
|
@@ -591,18 +665,22 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'vtk':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { VTKLoader } = await import( '../../examples/jsm/loaders/VTKLoader.js' );
|
|
|
+ const { VTKLoader } = await import( '../../examples/jsm/loaders/VTKLoader.js' );
|
|
|
|
|
|
- var geometry = new VTKLoader().parse( contents );
|
|
|
- var material = new THREE.MeshStandardMaterial();
|
|
|
+ const geometry = new VTKLoader().parse( contents );
|
|
|
+ const material = new THREE.MeshStandardMaterial();
|
|
|
|
|
|
- var mesh = new THREE.Mesh( geometry, material );
|
|
|
+ const mesh = new THREE.Mesh( geometry, material );
|
|
|
mesh.name = filename;
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, mesh ) );
|
|
@@ -612,15 +690,19 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'wrl':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { VRMLLoader } = await import( '../../examples/jsm/loaders/VRMLLoader.js' );
|
|
|
+ const { VRMLLoader } = await import( '../../examples/jsm/loaders/VRMLLoader.js' );
|
|
|
|
|
|
- var result = new VRMLLoader().parse( contents );
|
|
|
+ const result = new VRMLLoader().parse( contents );
|
|
|
|
|
|
editor.execute( new SetSceneCommand( editor, result ) );
|
|
|
|
|
@@ -629,20 +711,24 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'xyz':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', async function ( event ) {
|
|
|
|
|
|
- var contents = event.target.result;
|
|
|
+ const contents = event.target.result;
|
|
|
|
|
|
- var { XYZLoader } = await import( '../../examples/jsm/loaders/XYZLoader.js' );
|
|
|
+ const { XYZLoader } = await import( '../../examples/jsm/loaders/XYZLoader.js' );
|
|
|
|
|
|
- var geometry = new XYZLoader().parse( contents );
|
|
|
+ const geometry = new XYZLoader().parse( contents );
|
|
|
|
|
|
- var material = new THREE.PointsMaterial();
|
|
|
+ const material = new THREE.PointsMaterial();
|
|
|
material.vertexColors = geometry.hasAttribute( 'color' );
|
|
|
|
|
|
- var points = new THREE.Points( geometry, material );
|
|
|
+ const points = new THREE.Points( geometry, material );
|
|
|
points.name = filename;
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, points ) );
|
|
@@ -652,8 +738,12 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'zip':
|
|
|
|
|
|
+ {
|
|
|
+
|
|
|
reader.addEventListener( 'load', function ( event ) {
|
|
|
|
|
|
handleZIP( event.target.result );
|
|
@@ -663,6 +753,8 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
default:
|
|
|
|
|
|
console.error( 'Unsupported file format (' + extension + ').' );
|
|
@@ -697,15 +789,19 @@ function Loader( editor ) {
|
|
|
|
|
|
case 'buffergeometry':
|
|
|
|
|
|
- var loader = new THREE.BufferGeometryLoader();
|
|
|
- var result = loader.parse( data );
|
|
|
+ {
|
|
|
|
|
|
- var mesh = new THREE.Mesh( result );
|
|
|
+ const loader = new THREE.BufferGeometryLoader();
|
|
|
+ const result = loader.parse( data );
|
|
|
+
|
|
|
+ const mesh = new THREE.Mesh( result );
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, mesh ) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'geometry':
|
|
|
|
|
|
console.error( 'Loader: "Geometry" is no longer supported.' );
|
|
@@ -714,7 +810,9 @@ function Loader( editor ) {
|
|
|
|
|
|
case 'object':
|
|
|
|
|
|
- var loader = new THREE.ObjectLoader();
|
|
|
+ {
|
|
|
+
|
|
|
+ const loader = new THREE.ObjectLoader();
|
|
|
loader.setResourcePath( scope.texturePath );
|
|
|
|
|
|
loader.parse( data, function ( result ) {
|
|
@@ -733,6 +831,8 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'app':
|
|
|
|
|
|
editor.fromJSON( data );
|
|
@@ -745,37 +845,37 @@ function Loader( editor ) {
|
|
|
|
|
|
async function handleZIP( contents ) {
|
|
|
|
|
|
- var zip = unzipSync( new Uint8Array( contents ) );
|
|
|
+ const zip = unzipSync( new Uint8Array( contents ) );
|
|
|
|
|
|
// Poly
|
|
|
|
|
|
if ( zip[ 'model.obj' ] && zip[ 'materials.mtl' ] ) {
|
|
|
|
|
|
- var { MTLLoader } = await import( '../../examples/jsm/loaders/MTLLoader.js' );
|
|
|
- var { OBJLoader } = await import( '../../examples/jsm/loaders/OBJLoader.js' );
|
|
|
+ const { MTLLoader } = await import( '../../examples/jsm/loaders/MTLLoader.js' );
|
|
|
+ const { OBJLoader } = await import( '../../examples/jsm/loaders/OBJLoader.js' );
|
|
|
|
|
|
- var materials = new MTLLoader().parse( strFromU8( zip[ 'materials.mtl' ] ) );
|
|
|
- var object = new OBJLoader().setMaterials( materials ).parse( strFromU8( zip[ 'model.obj' ] ) );
|
|
|
+ const materials = new MTLLoader().parse( strFromU8( zip[ 'materials.mtl' ] ) );
|
|
|
+ const object = new OBJLoader().setMaterials( materials ).parse( strFromU8( zip[ 'model.obj' ] ) );
|
|
|
editor.execute( new AddObjectCommand( editor, object ) );
|
|
|
|
|
|
}
|
|
|
|
|
|
//
|
|
|
|
|
|
- for ( var path in zip ) {
|
|
|
+ for ( const path in zip ) {
|
|
|
|
|
|
- var file = zip[ path ];
|
|
|
+ const file = zip[ path ];
|
|
|
|
|
|
- var manager = new THREE.LoadingManager();
|
|
|
+ const manager = new THREE.LoadingManager();
|
|
|
manager.setURLModifier( function ( url ) {
|
|
|
|
|
|
- var file = zip[ url ];
|
|
|
+ const file = zip[ url ];
|
|
|
|
|
|
if ( file ) {
|
|
|
|
|
|
console.log( 'Loading', url );
|
|
|
|
|
|
- var blob = new Blob( [ file.buffer ], { type: 'application/octet-stream' } );
|
|
|
+ const blob = new Blob( [ file.buffer ], { type: 'application/octet-stream' } );
|
|
|
return URL.createObjectURL( blob );
|
|
|
|
|
|
}
|
|
@@ -784,35 +884,41 @@ function Loader( editor ) {
|
|
|
|
|
|
} );
|
|
|
|
|
|
- var extension = path.split( '.' ).pop().toLowerCase();
|
|
|
+ const extension = path.split( '.' ).pop().toLowerCase();
|
|
|
|
|
|
switch ( extension ) {
|
|
|
|
|
|
case 'fbx':
|
|
|
|
|
|
- var { FBXLoader } = await import( '../../examples/jsm/loaders/FBXLoader.js' );
|
|
|
+ {
|
|
|
+
|
|
|
+ const { FBXLoader } = await import( '../../examples/jsm/loaders/FBXLoader.js' );
|
|
|
|
|
|
- var loader = new FBXLoader( manager );
|
|
|
- var object = loader.parse( file.buffer );
|
|
|
+ const loader = new FBXLoader( manager );
|
|
|
+ const object = loader.parse( file.buffer );
|
|
|
|
|
|
editor.execute( new AddObjectCommand( editor, object ) );
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'glb':
|
|
|
|
|
|
- var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
- var { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );
|
|
|
+ {
|
|
|
+
|
|
|
+ const { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
+ const { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );
|
|
|
|
|
|
- var dracoLoader = new DRACOLoader();
|
|
|
+ const dracoLoader = new DRACOLoader();
|
|
|
dracoLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );
|
|
|
|
|
|
- var loader = new GLTFLoader();
|
|
|
+ const loader = new GLTFLoader();
|
|
|
loader.setDRACOLoader( dracoLoader );
|
|
|
|
|
|
loader.parse( file.buffer, '', function ( result ) {
|
|
|
|
|
|
- var scene = result.scene;
|
|
|
+ const scene = result.scene;
|
|
|
|
|
|
scene.animations.push( ...result.animations );
|
|
|
editor.execute( new AddObjectCommand( editor, scene ) );
|
|
@@ -821,19 +927,23 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
case 'gltf':
|
|
|
|
|
|
- var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
- var { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );
|
|
|
+ {
|
|
|
+
|
|
|
+ const { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
|
|
|
+ const { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );
|
|
|
|
|
|
- var dracoLoader = new DRACOLoader();
|
|
|
+ const dracoLoader = new DRACOLoader();
|
|
|
dracoLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );
|
|
|
|
|
|
- var loader = new GLTFLoader( manager );
|
|
|
+ const loader = new GLTFLoader( manager );
|
|
|
loader.setDRACOLoader( dracoLoader );
|
|
|
loader.parse( strFromU8( file ), '', function ( result ) {
|
|
|
|
|
|
- var scene = result.scene;
|
|
|
+ const scene = result.scene;
|
|
|
|
|
|
scene.animations.push( ...result.animations );
|
|
|
editor.execute( new AddObjectCommand( editor, scene ) );
|
|
@@ -842,6 +952,8 @@ function Loader( editor ) {
|
|
|
|
|
|
break;
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -850,7 +962,7 @@ function Loader( editor ) {
|
|
|
|
|
|
function isGLTF1( contents ) {
|
|
|
|
|
|
- var resultContent;
|
|
|
+ let resultContent;
|
|
|
|
|
|
if ( typeof contents === 'string' ) {
|
|
|
|
|
@@ -859,12 +971,12 @@ function Loader( editor ) {
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- var magic = THREE.LoaderUtils.decodeText( new Uint8Array( contents, 0, 4 ) );
|
|
|
+ const magic = THREE.LoaderUtils.decodeText( new Uint8Array( contents, 0, 4 ) );
|
|
|
|
|
|
if ( magic === 'glTF' ) {
|
|
|
|
|
|
// contents is a .glb file; extract the version
|
|
|
- var version = new DataView( contents ).getUint32( 4, true );
|
|
|
+ const version = new DataView( contents ).getUint32( 4, true );
|
|
|
|
|
|
return version < 2;
|
|
|
|
|
@@ -877,7 +989,7 @@ function Loader( editor ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- var json = JSON.parse( resultContent );
|
|
|
+ const json = JSON.parse( resultContent );
|
|
|
|
|
|
return ( json.asset != undefined && json.asset.version[ 0 ] < 2 );
|
|
|
|