38 lines
1.8 KiB
JavaScript
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) });
|
|
}
|
|
}
|
|
}; |