| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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);
- }
- });
- }
|