123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- /**
- * @author Kai Salmen / https://kaisalmen.de
- * Development repository: https://github.com/kaisalmen/WWOBJLoader
- */
- const ObjectManipulator = {
- /**
- * Applies values from parameter object via set functions or via direct assignment.
- *
- * @param {Object} objToAlter The objToAlter instance
- * @param {Object} params The parameter object
- */
- applyProperties: function ( objToAlter, params, forceCreation ) {
- // fast-fail
- if ( objToAlter === undefined || objToAlter === null || params === undefined || params === null ) return;
- let property, funcName, values;
- for ( property in params ) {
- funcName = 'set' + property.substring( 0, 1 ).toLocaleUpperCase() + property.substring( 1 );
- values = params[ property ];
- if ( typeof objToAlter[ funcName ] === 'function' ) {
- objToAlter[ funcName ]( values );
- } else if ( objToAlter.hasOwnProperty( property ) || forceCreation ) {
- objToAlter[ property ] = values;
- }
- }
- }
- };
- const DefaultWorkerPayloadHandler = function ( parser ) {
- this.parser = parser;
- this.logging = {
- enabled: false,
- debug: false
- };
- };
- DefaultWorkerPayloadHandler.prototype = {
- constructor: DefaultWorkerPayloadHandler,
- handlePayload: function ( payload ) {
- if ( payload.logging ) {
- this.logging.enabled = payload.logging.enabled === true;
- this.logging.debug = payload.logging.debug === true;
- }
- if ( payload.cmd === 'parse' ) {
- let scope = this;
- let callbacks = {
- callbackOnAssetAvailable: function ( payload ) {
- self.postMessage( payload );
- },
- callbackOnProgress: function ( text ) {
- if ( scope.logging.enabled && scope.logging.debug ) console.debug( 'WorkerRunner: progress: ' + text );
- }
- };
- let parser = this.parser;
- if ( typeof parser[ 'setLogging' ] === 'function' ) {
- parser.setLogging( this.logging.enabled, this.logging.debug );
- }
- ObjectManipulator.applyProperties( parser, payload.params, false );
- ObjectManipulator.applyProperties( parser, callbacks, false );
- let arraybuffer = payload.data.input;
- let executeFunctionName = 'execute';
- if ( typeof parser.getParseFunctionName === 'function' ) executeFunctionName = parser.getParseFunctionName();
- if ( payload.usesMeshDisassembler ) {
- // TODO: Allow to plug and use generic MeshDisassembler
- } else {
- parser[ executeFunctionName ]( arraybuffer, payload.data.options );
- }
- if ( this.logging.enabled ) console.log( 'WorkerRunner: Run complete!' );
- self.postMessage( {
- cmd: 'completeOverall',
- msg: 'WorkerRunner completed run.'
- } );
- } else {
- console.error( 'WorkerRunner: Received unknown command: ' + payload.cmd );
- }
- }
- };
- /**
- * Default implementation of the WorkerRunner responsible for creation and configuration of the parser within the worker.
- * @constructor
- */
- const WorkerRunner = function ( payloadHandler ) {
- this.payloadHandler = payloadHandler;
- let scope = this;
- let scopedRunner = function ( event ) {
- scope.processMessage( event.data );
- };
- self.addEventListener( 'message', scopedRunner, false );
- };
- WorkerRunner.prototype = {
- constructor: WorkerRunner,
- /**
- * Configures the Parser implementation according the supplied configuration object.
- *
- * @param {Object} payload Raw mesh description (buffers, params, materials) used to build one to many meshes.
- */
- processMessage: function ( payload ) {
- this.payloadHandler.handlePayload( payload );
- }
- };
- export {
- WorkerRunner,
- DefaultWorkerPayloadHandler,
- ObjectManipulator
- };
|