import * as THREE from 'three'; import Dexie from 'dexie'; const db = new Dexie('DB'); db.version(1).stores({ modal: '&modalName, modalVal, versionStr', }); self['modelLen'] = -1; /* self.addEventListener( 'message', async function (e) { const { data, message } = e.data; if (message == 'load') { self['modelLen']--; if (data) { const model = await loadGltf(data); if (self['modelLen'] >= 0) { self.postMessage({ message: 'save', data: model }); } } } else if (message == 'start') { self['modelLen'] += data + 1; } if (self['modelLen'] == 0) { self.postMessage({ message: 'end', data: null }); this.close(); } }, false ); */ self.addEventListener( 'message', async function (e) { const { data, message } = e.data; if (message == 'load') { if (data) { const model = await loadModal(data); self.postMessage({ message: 'end', data: model }); } } }, false ); function loadModal(url) { return new Promise((resolve, reject) => { const suffix = url.match(/[^.]+$/)[0]; const loader = new THREE.FileLoader(); if (suffix == 'glb' || suffix == 'gltf'){ loader.setPath('/model/glft/'); } else if (suffix == 'fbx' || suffix == 'FBX') { loader.setPath('/model/fbx/'); } loader.setResponseType('arraybuffer'); loader.setRequestHeader({}) loader.setWithCredentials(false); try { loader.load(url, async (data) => { const fileName = url.replace(/(.*\/)*([^.]+).*/gi, '$2'); const modalName = fileName.slice(0, -11); const version = fileName.slice(-11); const model = { modalName: modalName, modalVal: data, versionStr: version, }; await db.modal.add(model); self.postMessage({ message: 'save', data: model }); resolve(model); }); } catch (error) { reject(error); } }); }