main.worker.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import modalWorker from './loadGltf.worker?worker';
  2. import Dexie from 'dexie';
  3. import { useModelStore } from '/@/store/modules/threejs';
  4. export function initModalWorker() {
  5. type model = {
  6. modelName: string;
  7. modelVal: any;
  8. };
  9. const modalUrlArr = [
  10. 'fm/fm.glb',
  11. 'fm/Fm-door.glb',
  12. 'fm/Fm-wire.glb',
  13. 'fm/Fm-wall.glb',
  14. 'fc/sdFc.glb',
  15. 'fc/ddFc.glb',
  16. 'cf/lmcf.glb',
  17. 'cf/lmcfSide.glb',
  18. 'cf/zdcf.glb',
  19. 'cf/dscf.glb',
  20. 'cf/dsgd.glb',
  21. 'cf/dsmove.glb',
  22. 'jbfj/jbfj_hd.glb',
  23. 'jbfj/jbfj_fm.glb',
  24. 'jbfj/jbfj_fc.glb',
  25. 'ztfj/main.glb',
  26. 'ztfj/dj1.glb',
  27. 'ztfj/dj2.glb',
  28. 'ztfj/bg.glb',
  29. 'fire/laneway.glb',
  30. 'fire/chamber.glb',
  31. 'fire/workFace.glb',
  32. 'yafeng/compressor.glb',
  33. 'fire/nitrogen.glb',
  34. 'fire/grout.glb',
  35. ];
  36. const db: any = new Dexie('DB');
  37. window['CustomDB'] = db;
  38. const modelStore = useModelStore();
  39. db.version(1).stores({
  40. modal: '++id, modalName, modalVal',
  41. });
  42. new Promise(async (resolve) => {
  43. const validateModelUrlArr: string[] = [];
  44. for (let i = 0; i < modalUrlArr.length; i++) {
  45. const url = modalUrlArr[i];
  46. const modalName = url.replace(/(.*\/)*([^.]+).*/gi, '$2');
  47. const aa = new Date().getTime();
  48. const modalArr = await db.modal.where('modalName').equals(modalName).toArray();
  49. console.log('模型下载时间------------》', new Date().getTime() - aa);
  50. if (modalArr.length < 1) {
  51. validateModelUrlArr.push(url);
  52. } else {
  53. if (!modelStore.modelArr.get(modalName)) {
  54. const model: model = {
  55. modelName: modalName,
  56. modelVal: modalArr[0].modalVal,
  57. };
  58. modelStore.setModel(model);
  59. }
  60. }
  61. }
  62. resolve(validateModelUrlArr);
  63. }).then((validateModelUrlArr: string[]) => {
  64. validateModelUrlArr.forEach((url) => {
  65. const worker = new modalWorker();
  66. worker.onmessage = async function (e) {
  67. const { data, message } = e.data;
  68. if (message === 'end') {
  69. if (data) {
  70. modelStore.setModel(data);
  71. }
  72. worker.terminate();
  73. }
  74. };
  75. worker.postMessage({ message: 'load', data: url });
  76. });
  77. });
  78. }
  79. initModalWorker();