Files
trilium_share_gruvbox/app/3d-worker.js
T

38 lines
1.8 KiB
JavaScript

self.onmessage = function (e) {
var d = e.data;
if (d.type === 'loadLib') {
try { importScripts(d.libUrl); } catch (err) {
self.postMessage({ type: 'error', message: 'importScripts: ' + (err && err.message || err) }); return;
}
if (typeof self.occtimportjs !== 'function') {
self.postMessage({ type: 'error', message: 'STEP parser not found.' }); return;
}
self.occtimportjs({ locateFile: function () { return 'occt.wasm'; }, wasmBinary: d.wasm }).then(function (occt) {
self.occt = occt;
self.postMessage({ type: 'ready' });
}).catch(function (err) {
self.postMessage({ type: 'error', message: 'STEP init: ' + (err && err.message || err) });
});
return;
}
if (d.type === 'parse' && self.occt) {
try {
var result = self.occt.ReadStepFile(d.data, d.params);
var meshes = [];
(result.meshes || []).forEach(function (m) {
if (!m.attributes || !m.attributes.position) return;
var out = { position: m.attributes.position.array, color: m.color };
if (m.attributes.index && m.attributes.index.array) out.index = m.attributes.index.array;
meshes.push(out);
});
var transfer = [];
meshes.forEach(function (m) {
if (m.position && m.position.buffer) transfer.push(m.position.buffer);
if (m.index && m.index.buffer) transfer.push(m.index.buffer);
});
self.postMessage({ type: 'done', success: !!result.success, meshes: meshes }, transfer);
} catch (err) {
self.postMessage({ type: 'error', message: 'parse: ' + (err && err.message || err) });
}
}
};