loadGltf.worker.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import * as THREE from 'three';
  2. import Dexie from 'dexie';
  3. const db = new Dexie('DB');
  4. db.version(1).stores({
  5. modal: '++id, modalName, modalVal',
  6. });
  7. self['modelLen'] = -1;
  8. /* self.addEventListener(
  9. 'message',
  10. async function (e) {
  11. const { data, message } = e.data;
  12. if (message == 'load') {
  13. self['modelLen']--;
  14. if (data) {
  15. const model = await loadGltf(data);
  16. if (self['modelLen'] >= 0) {
  17. self.postMessage({ message: 'save', data: model });
  18. }
  19. }
  20. } else if (message == 'start') {
  21. self['modelLen'] += data + 1;
  22. }
  23. if (self['modelLen'] == 0) {
  24. self.postMessage({ message: 'end', data: null });
  25. this.close();
  26. }
  27. },
  28. false
  29. ); */
  30. self.addEventListener(
  31. 'message',
  32. async function (e) {
  33. const { data, message } = e.data;
  34. if (message == 'load') {
  35. if (data) {
  36. const model = await loadGltf(data);
  37. self.postMessage({ message: 'end', data: model });
  38. }
  39. }
  40. },
  41. false
  42. );
  43. function loadGltf(url) {
  44. return new Promise((resolve, reject) => {
  45. const loader = new THREE.FileLoader();
  46. loader.setPath('/model/glft/');
  47. loader.setResponseType('arraybuffer');
  48. loader.setRequestHeader({});
  49. loader.setWithCredentials(false);
  50. try {
  51. loader.load(url, async (data) => {
  52. const modalName = url.replace(/(.*\/)*([^.]+).*/gi, '$2');
  53. const model = {
  54. modalName: modalName,
  55. modalVal: data,
  56. };
  57. await db.modal.add(model);
  58. self.postMessage({ message: 'save', data: model });
  59. resolve(model);
  60. });
  61. } catch (error) {
  62. reject(error);
  63. }
  64. });
  65. }