|
1 | 1 | ( function () { |
2 | 2 |
|
3 | | - var Rhino3dmLoader = function ( manager ) { |
4 | | - |
5 | | - THREE.Loader.call( this, manager ); |
6 | | - this.libraryPath = ''; |
7 | | - this.libraryPending = null; |
8 | | - this.libraryBinary = null; |
9 | | - this.libraryConfig = {}; |
10 | | - this.url = ''; |
11 | | - this.workerLimit = 4; |
12 | | - this.workerPool = []; |
13 | | - this.workerNextTaskID = 1; |
14 | | - this.workerSourceURL = ''; |
15 | | - this.workerConfig = {}; |
16 | | - this.materials = []; |
17 | | - |
18 | | - }; |
19 | | - |
20 | | - Rhino3dmLoader.taskCache = new WeakMap(); |
21 | | - Rhino3dmLoader.prototype = Object.assign( Object.create( THREE.Loader.prototype ), { |
22 | | - constructor: Rhino3dmLoader, |
23 | | - setLibraryPath: function ( path ) { |
| 3 | + const _taskCache = new WeakMap(); |
| 4 | + |
| 5 | + class Rhino3dmLoader extends THREE.Loader { |
| 6 | + |
| 7 | + constructor( manager ) { |
| 8 | + |
| 9 | + super( manager ); |
| 10 | + this.libraryPath = ''; |
| 11 | + this.libraryPending = null; |
| 12 | + this.libraryBinary = null; |
| 13 | + this.libraryConfig = {}; |
| 14 | + this.url = ''; |
| 15 | + this.workerLimit = 4; |
| 16 | + this.workerPool = []; |
| 17 | + this.workerNextTaskID = 1; |
| 18 | + this.workerSourceURL = ''; |
| 19 | + this.workerConfig = {}; |
| 20 | + this.materials = []; |
| 21 | + |
| 22 | + } |
| 23 | + |
| 24 | + setLibraryPath( path ) { |
24 | 25 |
|
25 | 26 | this.libraryPath = path; |
26 | 27 | return this; |
27 | 28 |
|
28 | | - }, |
29 | | - setWorkerLimit: function ( workerLimit ) { |
| 29 | + } |
| 30 | + |
| 31 | + setWorkerLimit( workerLimit ) { |
30 | 32 |
|
31 | 33 | this.workerLimit = workerLimit; |
32 | 34 | return this; |
33 | 35 |
|
34 | | - }, |
35 | | - load: function ( url, onLoad, onProgress, onError ) { |
| 36 | + } |
| 37 | + |
| 38 | + load( url, onLoad, onProgress, onError ) { |
36 | 39 |
|
37 | | - var loader = new THREE.FileLoader( this.manager ); |
| 40 | + const loader = new THREE.FileLoader( this.manager ); |
38 | 41 | loader.setPath( this.path ); |
39 | 42 | loader.setResponseType( 'arraybuffer' ); |
40 | 43 | loader.setRequestHeader( this.requestHeader ); |
|
43 | 46 |
|
44 | 47 | // Check for an existing task using this buffer. A transferred buffer cannot be transferred |
45 | 48 | // again from this thread. |
46 | | - if ( Rhino3dmLoader.taskCache.has( buffer ) ) { |
| 49 | + if ( _taskCache.has( buffer ) ) { |
| 50 | + |
| 51 | + const cachedTask = _taskCache.get( buffer ); |
47 | 52 |
|
48 | | - var cachedTask = Rhino3dmLoader.taskCache.get( buffer ); |
49 | 53 | return cachedTask.promise.then( onLoad ).catch( onError ); |
50 | 54 |
|
51 | 55 | } |
|
54 | 58 |
|
55 | 59 | }, onProgress, onError ); |
56 | 60 |
|
57 | | - }, |
58 | | - debug: function () { |
| 61 | + } |
| 62 | + |
| 63 | + debug() { |
59 | 64 |
|
60 | 65 | console.log( 'Task load: ', this.workerPool.map( worker => worker._taskLoad ) ); |
61 | 66 |
|
62 | | - }, |
63 | | - decodeObjects: function ( buffer, url ) { |
| 67 | + } |
| 68 | + |
| 69 | + decodeObjects( buffer, url ) { |
64 | 70 |
|
65 | 71 | var worker; |
66 | 72 | var taskID; |
|
99 | 105 |
|
100 | 106 | } ); // Cache the task result. |
101 | 107 |
|
102 | | - Rhino3dmLoader.taskCache.set( buffer, { |
| 108 | + _taskCache.set( buffer, { |
103 | 109 | url: url, |
104 | 110 | promise: objectPending |
105 | 111 | } ); |
| 112 | + |
106 | 113 | return objectPending; |
107 | 114 |
|
108 | | - }, |
109 | | - parse: function ( data, onLoad, onError ) { |
| 115 | + } |
| 116 | + |
| 117 | + parse( data, onLoad, onError ) { |
110 | 118 |
|
111 | 119 | this.decodeObjects( data, '' ).then( onLoad ).catch( onError ); |
112 | 120 |
|
113 | | - }, |
114 | | - _compareMaterials: function ( material ) { |
| 121 | + } |
| 122 | + |
| 123 | + _compareMaterials( material ) { |
115 | 124 |
|
116 | 125 | var mat = {}; |
117 | 126 | mat.name = material.name; |
|
143 | 152 | this.materials.push( material ); |
144 | 153 | return material; |
145 | 154 |
|
146 | | - }, |
147 | | - _createMaterial: function ( material ) { |
| 155 | + } |
| 156 | + |
| 157 | + _createMaterial( material ) { |
148 | 158 |
|
149 | 159 | if ( material === undefined ) { |
150 | 160 |
|
|
213 | 223 |
|
214 | 224 | return mat; |
215 | 225 |
|
216 | | - }, |
217 | | - _createGeometry: function ( data ) { |
| 226 | + } |
| 227 | + |
| 228 | + _createGeometry( data ) { |
218 | 229 |
|
219 | 230 | // console.log(data); |
220 | 231 | var object = new THREE.Object3D(); |
|
342 | 353 | object.userData[ 'materials' ] = this.materials; |
343 | 354 | return object; |
344 | 355 |
|
345 | | - }, |
346 | | - _createObject: function ( obj, mat ) { |
| 356 | + } |
| 357 | + |
| 358 | + _createObject( obj, mat ) { |
347 | 359 |
|
348 | 360 | var loader = new THREE.BufferGeometryLoader(); |
349 | 361 | var attributes = obj.attributes; |
|
545 | 557 |
|
546 | 558 | } |
547 | 559 |
|
548 | | - }, |
549 | | - _initLibrary: function () { |
| 560 | + } |
| 561 | + |
| 562 | + _initLibrary() { |
550 | 563 |
|
551 | 564 | if ( ! this.libraryPending ) { |
552 | 565 |
|
|
571 | 584 |
|
572 | 585 | //this.libraryBinary = binaryContent; |
573 | 586 | this.libraryConfig.wasmBinary = binaryContent; |
574 | | - var fn = Rhino3dmLoader.Rhino3dmWorker.toString(); |
| 587 | + var fn = Rhino3dmWorker.toString(); |
575 | 588 | var body = [ '/* rhino3dm.js */', jsContent, '/* worker */', fn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) ) ].join( '\n' ); |
576 | 589 | this.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) ); |
577 | 590 |
|
|
581 | 594 |
|
582 | 595 | return this.libraryPending; |
583 | 596 |
|
584 | | - }, |
585 | | - _getWorker: function ( taskCost ) { |
| 597 | + } |
| 598 | + |
| 599 | + _getWorker( taskCost ) { |
586 | 600 |
|
587 | 601 | return this._initLibrary().then( () => { |
588 | 602 |
|
|
638 | 652 |
|
639 | 653 | } ); |
640 | 654 |
|
641 | | - }, |
642 | | - _releaseTask: function ( worker, taskID ) { |
| 655 | + } |
| 656 | + |
| 657 | + _releaseTask( worker, taskID ) { |
643 | 658 |
|
644 | 659 | worker._taskLoad -= worker._taskCosts[ taskID ]; |
645 | 660 | delete worker._callbacks[ taskID ]; |
646 | 661 | delete worker._taskCosts[ taskID ]; |
647 | 662 |
|
648 | | - }, |
649 | | - dispose: function () { |
| 663 | + } |
| 664 | + |
| 665 | + dispose() { |
650 | 666 |
|
651 | 667 | for ( var i = 0; i < this.workerPool.length; ++ i ) { |
652 | 668 |
|
|
658 | 674 | return this; |
659 | 675 |
|
660 | 676 | } |
661 | | - } ); |
| 677 | + |
| 678 | + } |
662 | 679 | /* WEB WORKER */ |
663 | 680 |
|
664 | | - Rhino3dmLoader.Rhino3dmWorker = function () { |
| 681 | + |
| 682 | + function Rhino3dmWorker() { |
665 | 683 |
|
666 | 684 | var libraryPending; |
667 | 685 | var libraryConfig; |
|
1257 | 1275 |
|
1258 | 1276 | } |
1259 | 1277 |
|
1260 | | - }; |
| 1278 | + } |
1261 | 1279 |
|
1262 | 1280 | THREE.Rhino3dmLoader = Rhino3dmLoader; |
1263 | 1281 |
|
|
0 commit comments