import * as THREE from 'three'; import Dexie from 'dexie'; const db = new Dexie('DB'); db.version(1).stores({ modal: '++id, modalName, modalVal', }); 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 loadGltf(data); self.postMessage({ message: 'end', data: model }); } } }, false ); function loadGltf(url) { return new Promise((resolve, reject) => { const loader = new THREE.FileLoader(); loader.setPath('/model/glft/'); loader.setResponseType('arraybuffer'); loader.setRequestHeader({}); loader.setWithCredentials(false); try { loader.load(url, async (data) => { const modalName = url.replace(/(.*\/)*([^.]+).*/gi, '$2'); const model = { modalName: modalName, modalVal: data, }; await db.modal.add(model); self.postMessage({ message: 'save', data: model }); resolve(model); }); } catch (error) { reject(error); } }); }