Skip to content

Commit

Permalink
Editor: Import loaders dynamically.
Browse files Browse the repository at this point in the history
  • Loading branch information
mrdoob committed Dec 21, 2020
1 parent 7253ce6 commit fa7b40c
Showing 1 changed file with 69 additions and 39 deletions.
108 changes: 69 additions & 39 deletions editor/js/Loader.js
@@ -1,24 +1,5 @@
import * as THREE from '../../build/three.module.js';

import { Rhino3dmLoader } from '../../examples/jsm/loaders/3DMLoader.js';
import { ThreeMFLoader } from '../../examples/jsm/loaders/3MFLoader.js';
import { AMFLoader } from '../../examples/jsm/loaders/AMFLoader.js';
import { ColladaLoader } from '../../examples/jsm/loaders/ColladaLoader.js';
import { DRACOLoader } from '../../examples/jsm/loaders/DRACOLoader.js';
import { FBXLoader } from '../../examples/jsm/loaders/FBXLoader.js';
import { GLTFLoader } from '../../examples/jsm/loaders/GLTFLoader.js';
import { KMZLoader } from '../../examples/jsm/loaders/KMZLoader.js';
import { MD2Loader } from '../../examples/jsm/loaders/MD2Loader.js';
import { MTLLoader } from '../../examples/jsm/loaders/MTLLoader.js';
import { OBJLoader } from '../../examples/jsm/loaders/OBJLoader.js';
import { PLYLoader } from '../../examples/jsm/loaders/PLYLoader.js';
import { STLLoader } from '../../examples/jsm/loaders/STLLoader.js';
import { SVGLoader } from '../../examples/jsm/loaders/SVGLoader.js';
import { TDSLoader } from '../../examples/jsm/loaders/TDSLoader.js';
import { VTKLoader } from '../../examples/jsm/loaders/VTKLoader.js';
import { VRMLLoader } from '../../examples/jsm/loaders/VRMLLoader.js';
import { XYZLoader } from '../../examples/jsm/loaders/XYZLoader.js';

import { TGALoader } from '../../examples/jsm/loaders/TGALoader.js';

import { AddObjectCommand } from './commands/AddObjectCommand.js';
Expand Down Expand Up @@ -100,10 +81,12 @@ function Loader( editor ) {

case '3dm':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { Rhino3dmLoader } = await import( '../../examples/jsm/loaders/3DMLoader.js' );

var loader = new Rhino3dmLoader();
loader.setLibraryPath( '../examples/jsm/libs/rhino3dm/' );
loader.parse( contents, function ( object ) {
Expand All @@ -119,7 +102,9 @@ function Loader( editor ) {

case '3ds':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var { TDSLoader } = await import( '../../examples/jsm/loaders/TDSLoader.js' );

var loader = new TDSLoader();
var object = loader.parse( event.target.result );
Expand All @@ -133,7 +118,9 @@ function Loader( editor ) {

case '3mf':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var { ThreeMFLoader } = await import( '../../examples/jsm/loaders/3MFLoader.js' );

var loader = new ThreeMFLoader();
var object = loader.parse( event.target.result );
Expand All @@ -147,7 +134,9 @@ function Loader( editor ) {

case 'amf':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var { AMFLoader } = await import( '../../examples/jsm/loaders/AMFLoader.js' );

var loader = new AMFLoader();
var amfobject = loader.parse( event.target.result );
Expand All @@ -161,10 +150,12 @@ function Loader( editor ) {

case 'dae':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { ColladaLoader } = await import( '../../examples/jsm/loaders/ColladaLoader.js' );

var loader = new ColladaLoader( manager );
var collada = loader.parse( contents );

Expand All @@ -179,10 +170,12 @@ function Loader( editor ) {

case 'drc':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );

var loader = new DRACOLoader();
loader.setDecoderPath( '../examples/js/libs/draco/' );
loader.decodeDracoFile( contents, function ( geometry ) {
Expand Down Expand Up @@ -218,10 +211,12 @@ function Loader( editor ) {

case 'fbx':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { FBXLoader } = await import( '../../examples/jsm/loaders/FBXLoader.js' );

var loader = new FBXLoader( manager );
var object = loader.parse( contents );

Expand All @@ -234,10 +229,13 @@ function Loader( editor ) {

case 'glb':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
var { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );

var dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );

Expand All @@ -260,7 +258,7 @@ function Loader( editor ) {

case 'gltf':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

Expand All @@ -272,6 +270,9 @@ function Loader( editor ) {

} else {

var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
var { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );

var dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );

Expand Down Expand Up @@ -354,7 +355,9 @@ function Loader( editor ) {

case 'kmz':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var { KMZLoader } = await import( '../../examples/jsm/loaders/KMZLoader.js' );

var loader = new KMZLoader();
var collada = loader.parse( event.target.result );
Expand All @@ -370,10 +373,12 @@ function Loader( editor ) {

case 'md2':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { MD2Loader } = await import( '../../examples/jsm/loaders/MD2Loader.js' );

var geometry = new MD2Loader().parse( contents );
var material = new THREE.MeshStandardMaterial( {
morphTargets: true,
Expand All @@ -394,10 +399,12 @@ function Loader( editor ) {

case 'obj':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { OBJLoader } = await import( '../../examples/jsm/loaders/OBJLoader.js' );

var object = new OBJLoader().parse( contents );
object.name = filename;

Expand All @@ -410,10 +417,12 @@ function Loader( editor ) {

case 'ply':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { PLYLoader } = await import( '../../examples/jsm/loaders/PLYLoader.js' );

var geometry = new PLYLoader().parse( contents );
geometry.sourceType = "ply";
geometry.sourceFile = file.name;
Expand All @@ -432,10 +441,12 @@ function Loader( editor ) {

case 'stl':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { STLLoader } = await import( '../../examples/jsm/loaders/STLLoader.js' );

var geometry = new STLLoader().parse( contents );
geometry.sourceType = "stl";
geometry.sourceFile = file.name;
Expand Down Expand Up @@ -463,10 +474,12 @@ function Loader( editor ) {

case 'svg':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { SVGLoader } = await import( '../../examples/jsm/loaders/SVGLoader.js' );

var loader = new SVGLoader();
var paths = loader.parse( contents ).paths;

Expand Down Expand Up @@ -509,10 +522,12 @@ function Loader( editor ) {

case 'vtk':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { VTKLoader } = await import( '../../examples/jsm/loaders/VTKLoader.js' );

var geometry = new VTKLoader().parse( contents );
geometry.sourceType = "vtk";
geometry.sourceFile = file.name;
Expand All @@ -531,10 +546,12 @@ function Loader( editor ) {

case 'wrl':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { VRMLLoader } = await import( '../../examples/jsm/loaders/VRMLLoader.js' );

var result = new VRMLLoader().parse( contents );

editor.execute( new SetSceneCommand( editor, result ) );
Expand All @@ -546,10 +563,12 @@ function Loader( editor ) {

case 'xyz':

reader.addEventListener( 'load', function ( event ) {
reader.addEventListener( 'load', async function ( event ) {

var contents = event.target.result;

var { XYZLoader } = await import( '../../examples/jsm/loaders/XYZLoader.js' );

var geometry = new XYZLoader().parse( contents );

var material = new THREE.PointsMaterial();
Expand Down Expand Up @@ -657,14 +676,17 @@ function Loader( editor ) {

}

function handleZIP( contents ) {
async function handleZIP( contents ) {

var zip = new JSZip( contents );

// Poly

if ( zip.files[ 'model.obj' ] && zip.files[ 'materials.mtl' ] ) {

var { MTLLoader } = await import( '../../examples/jsm/loaders/MTLLoader.js' );
var { OBJLoader } = await import( '../../examples/jsm/loaders/OBJLoader.js' );

var materials = new MTLLoader().parse( zip.file( 'materials.mtl' ).asText() );
var object = new OBJLoader().setMaterials( materials ).parse( zip.file( 'model.obj' ).asText() );
editor.execute( new AddObjectCommand( editor, object ) );
Expand All @@ -673,7 +695,7 @@ function Loader( editor ) {

//

zip.filter( function ( path, file ) {
zip.filter( async function ( path, file ) {

var manager = new THREE.LoadingManager();
manager.setURLModifier( function ( url ) {
Expand All @@ -699,6 +721,8 @@ function Loader( editor ) {

case 'fbx':

var { FBXLoader } = await import( '../../examples/jsm/loaders/FBXLoader.js' );

var loader = new FBXLoader( manager );
var object = loader.parse( file.asArrayBuffer() );

Expand All @@ -708,6 +732,9 @@ function Loader( editor ) {

case 'glb':

var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
var { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );

var dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );

Expand All @@ -727,6 +754,9 @@ function Loader( editor ) {

case 'gltf':

var { DRACOLoader } = await import( '../../examples/jsm/loaders/DRACOLoader.js' );
var { GLTFLoader } = await import( '../../examples/jsm/loaders/GLTFLoader.js' );

var dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath( '../examples/js/libs/draco/gltf/' );

Expand Down

0 comments on commit fa7b40c

Please sign in to comment.