123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- if ( THREE.LoaderSupport === undefined ) { THREE.LoaderSupport = {} }
- /**
- * Validation functions.
- * @class
- */
- THREE.LoaderSupport.Validator = {
- /**
- * If given input is null or undefined, false is returned otherwise true.
- *
- * @param input Can be anything
- * @returns {boolean}
- */
- isValid: function( input ) {
- return ( input !== null && input !== undefined );
- },
- /**
- * If given input is null or undefined, the defaultValue is returned otherwise the given input.
- *
- * @param input Can be anything
- * @param defaultValue Can be anything
- * @returns {*}
- */
- verifyInput: function( input, defaultValue ) {
- return ( input === null || input === undefined ) ? defaultValue : input;
- }
- };
- /**
- * Callbacks utilized by loaders and builders.
- * @class
- */
- THREE.LoaderSupport.Callbacks = (function () {
- var Validator = THREE.LoaderSupport.Validator;
- function Callbacks() {
- this.onProgress = null;
- this.onMeshAlter = null;
- this.onLoad = null;
- this.onLoadMaterials = null;
- }
- /**
- * Register callback function that is invoked by internal function "announceProgress" to print feedback.
- * @memberOf THREE.LoaderSupport.Callbacks
- *
- * @param {callback} callbackOnProgress Callback function for described functionality
- */
- Callbacks.prototype.setCallbackOnProgress = function ( callbackOnProgress ) {
- this.onProgress = Validator.verifyInput( callbackOnProgress, this.onProgress );
- };
- /**
- * Register callback function that is called every time a mesh was loaded.
- * Use {@link THREE.LoaderSupport.LoadedMeshUserOverride} for alteration instructions (geometry, material or disregard mesh).
- * @memberOf THREE.LoaderSupport.Callbacks
- *
- * @param {callback} callbackOnMeshAlter Callback function for described functionality
- */
- Callbacks.prototype.setCallbackOnMeshAlter = function ( callbackOnMeshAlter ) {
- this.onMeshAlter = Validator.verifyInput( callbackOnMeshAlter, this.onMeshAlter );
- };
- /**
- * Register callback function that is called once loading of the complete OBJ file is completed.
- * @memberOf THREE.LoaderSupport.Callbacks
- *
- * @param {callback} callbackOnLoad Callback function for described functionality
- */
- Callbacks.prototype.setCallbackOnLoad = function ( callbackOnLoad ) {
- this.onLoad = Validator.verifyInput( callbackOnLoad, this.onLoad );
- };
- /**
- * Register callback function that is called when materials have been loaded.
- * @memberOf THREE.LoaderSupport.Callbacks
- *
- * @param {callback} callbackOnLoadMaterials Callback function for described functionality
- */
- Callbacks.prototype.setCallbackOnLoadMaterials = function ( callbackOnLoadMaterials ) {
- this.onLoadMaterials = Validator.verifyInput( callbackOnLoadMaterials, this.onLoadMaterials );
- };
- return Callbacks;
- })();
- /**
- * Object to return by callback onMeshAlter. Used to disregard a certain mesh or to return one to many meshes.
- * @class
- *
- * @param {boolean} disregardMesh=false Tell implementation to completely disregard this mesh
- * @param {boolean} disregardMesh=false Tell implementation that mesh(es) have been altered or added
- */
- THREE.LoaderSupport.LoadedMeshUserOverride = (function () {
- function LoadedMeshUserOverride( disregardMesh, alteredMesh ) {
- this.disregardMesh = disregardMesh === true;
- this.alteredMesh = alteredMesh === true;
- this.meshes = [];
- }
- /**
- * Add a mesh created within callback.
- *
- * @memberOf THREE.OBJLoader2.LoadedMeshUserOverride
- *
- * @param {THREE.Mesh} mesh
- */
- LoadedMeshUserOverride.prototype.addMesh = function ( mesh ) {
- this.meshes.push( mesh );
- this.alteredMesh = true;
- };
- /**
- * Answers if mesh shall be disregarded completely.
- *
- * @returns {boolean}
- */
- LoadedMeshUserOverride.prototype.isDisregardMesh = function () {
- return this.disregardMesh;
- };
- /**
- * Answers if new mesh(es) were created.
- *
- * @returns {boolean}
- */
- LoadedMeshUserOverride.prototype.providesAlteredMeshes = function () {
- return this.alteredMesh;
- };
- return LoadedMeshUserOverride;
- })();
- /**
- * A resource description used by {@link THREE.LoaderSupport.PrepData} and others.
- * @class
- *
- * @param {string} url URL to the file
- * @param {string} extension The file extension (type)
- */
- THREE.LoaderSupport.ResourceDescriptor = (function () {
- var Validator = THREE.LoaderSupport.Validator;
- function ResourceDescriptor( url, extension ) {
- var urlParts = url.split( '/' );
- if ( urlParts.length < 2 ) {
- this.path = null;
- this.name = url;
- this.url = url;
- } else {
- this.path = Validator.verifyInput( urlParts.slice( 0, urlParts.length - 1).join( '/' ) + '/', null );
- this.name = Validator.verifyInput( urlParts[ urlParts.length - 1 ], null );
- this.url = url;
- }
- this.extension = Validator.verifyInput( extension, "default" );
- this.extension = this.extension.trim();
- this.content = null;
- }
- /**
- * Set the content of this resource
- * @memberOf THREE.LoaderSupport.ResourceDescriptor
- *
- * @param {Object} content The file content as arraybuffer or text
- */
- ResourceDescriptor.prototype.setContent = function ( content ) {
- this.content = Validator.verifyInput( content, null );
- };
- return ResourceDescriptor;
- })();
- /**
- * Configuration instructions to be used by run method.
- * @class
- */
- THREE.LoaderSupport.PrepData = (function () {
- var Validator = THREE.LoaderSupport.Validator;
- function PrepData( modelName ) {
- this.logging = {
- enabled: true,
- debug: false
- };
- this.modelName = Validator.verifyInput( modelName, '' );
- this.resources = [];
- this.callbacks = new THREE.LoaderSupport.Callbacks();
- }
- /**
- * Enable or disable logging in general (except warn and error), plus enable or disable debug logging.
- * @memberOf THREE.LoaderSupport.PrepData
- *
- * @param {boolean} enabled True or false.
- * @param {boolean} debug True or false.
- */
- PrepData.prototype.setLogging = function ( enabled, debug ) {
- this.logging.enabled = enabled === true;
- this.logging.debug = debug === true;
- };
- /**
- * Returns all callbacks as {@link THREE.LoaderSupport.Callbacks}
- * @memberOf THREE.LoaderSupport.PrepData
- *
- * @returns {THREE.LoaderSupport.Callbacks}
- */
- PrepData.prototype.getCallbacks = function () {
- return this.callbacks;
- };
- /**
- * Add a resource description.
- * @memberOf THREE.LoaderSupport.PrepData
- *
- * @param {THREE.LoaderSupport.ResourceDescriptor} Adds a {@link THREE.LoaderSupport.ResourceDescriptor}
- */
- PrepData.prototype.addResource = function ( resource ) {
- this.resources.push( resource );
- };
- /**
- * Clones this object and returns it afterwards. Callbacks and resources are not cloned deep (references!).
- * @memberOf THREE.LoaderSupport.PrepData
- *
- * @returns {@link THREE.LoaderSupport.PrepData}
- */
- PrepData.prototype.clone = function () {
- var clone = new THREE.LoaderSupport.PrepData( this.modelName );
- clone.logging.enabled = this.logging.enabled;
- clone.logging.debug = this.logging.debug;
- clone.resources = this.resources;
- clone.callbacks = this.callbacks;
- var property, value;
- for ( property in this ) {
- value = this[ property ];
- if ( ! clone.hasOwnProperty( property ) && typeof this[ property ] !== 'function' ) {
- clone[ property ] = value;
- }
- }
- return clone;
- };
- /**
- * Identify files or content of interest from an Array of {@link THREE.LoaderSupport.ResourceDescriptor}.
- * @memberOf THREE.LoaderSupport.PrepData
- *
- * @param {THREE.LoaderSupport.ResourceDescriptor[]} resources Array of {@link THREE.LoaderSupport.ResourceDescriptor}
- * @param Object fileDesc Object describing which resources are of interest (ext, type (string or UInt8Array) and ignore (boolean))
- * @returns {{}} Object with each "ext" and the corresponding {@link THREE.LoaderSupport.ResourceDescriptor}
- */
- PrepData.prototype.checkResourceDescriptorFiles = function ( resources, fileDesc ) {
- var resource, triple, i, found;
- var result = {};
- for ( var index in resources ) {
- resource = resources[ index ];
- found = false;
- if ( ! Validator.isValid( resource.name ) ) continue;
- if ( Validator.isValid( resource.content ) ) {
- for ( i = 0; i < fileDesc.length && !found; i++ ) {
- triple = fileDesc[ i ];
- if ( resource.extension.toLowerCase() === triple.ext.toLowerCase() ) {
- if ( triple.ignore ) {
- found = true;
- } else if ( triple.type === "ArrayBuffer" ) {
- // fast-fail on bad type
- if ( ! ( resource.content instanceof ArrayBuffer || resource.content instanceof Uint8Array ) ) throw 'Provided content is not of type ArrayBuffer! Aborting...';
- result[ triple.ext ] = resource;
- found = true;
- } else if ( triple.type === "String" ) {
- if ( ! ( typeof( resource.content ) === 'string' || resource.content instanceof String) ) throw 'Provided content is not of type String! Aborting...';
- result[ triple.ext ] = resource;
- found = true;
- }
- }
- }
- if ( !found ) throw 'Unidentified resource "' + resource.name + '": ' + resource.url;
- } else {
- // fast-fail on bad type
- if ( ! ( typeof( resource.name ) === 'string' || resource.name instanceof String ) ) throw 'Provided file is not properly defined! Aborting...';
- for ( i = 0; i < fileDesc.length && !found; i++ ) {
- triple = fileDesc[ i ];
- if ( resource.extension.toLowerCase() === triple.ext.toLowerCase() ) {
- if ( ! triple.ignore ) result[ triple.ext ] = resource;
- found = true;
- }
- }
- if ( !found ) throw 'Unidentified resource "' + resource.name + '": ' + resource.url;
- }
- }
- return result;
- };
- return PrepData;
- })();
|