paraview-glance
Version:
Web application for Visualizing Scientific and Medical datasets
79 lines (61 loc) • 2.19 kB
JavaScript
import JSZip from 'jszip';
import macro from 'vtk.js/Sources/macro';
// ----------------------------------------------------------------------------
// vtkGlanceStateReader methods
// ----------------------------------------------------------------------------
function loadState(file) {
return new Promise((resolve, reject) => {
const zip = new JSZip();
zip
.loadAsync(file)
.then(() => {
zip.forEach((relativePath, zipEntry) => {
if (relativePath.match(/state\.json$/i)) {
zipEntry
.async('string')
.then((txt) => {
resolve(JSON.parse(txt));
})
.catch(reject);
}
});
})
.catch(reject);
});
}
function vtkGlanceStateReader(publicAPI, model) {
// Set our className
model.classHierarchy.push('vtkGlanceStateReader');
model.appState = null;
// Returns a promise to signal when image is ready
publicAPI.parseAsArrayBuffer = (arrayBuffer) => {
if (!arrayBuffer || arrayBuffer === model.rawDataBuffer) {
return Promise.resolve(model.appState);
}
model.rawDataBuffer = arrayBuffer;
return loadState(arrayBuffer).then((state) => {
model.appState = state;
publicAPI.modified();
return model.appState;
});
};
publicAPI.requestData = () => {
publicAPI.parseAsArrayBuffer(model.rawDataBuffer);
};
}
// ----------------------------------------------------------------------------
// Object factory
// ----------------------------------------------------------------------------
export function extend(publicAPI, model, initialValues = {}) {
Object.assign(model, initialValues);
// Build VTK API
macro.obj(publicAPI, model);
macro.algo(publicAPI, model, 0, 1);
macro.get(publicAPI, model, ['appState']);
// vtkGlanceStateReader methods
vtkGlanceStateReader(publicAPI, model);
}
// ----------------------------------------------------------------------------
export const newInstance = macro.newInstance(extend, 'vtkGlanceStateReader');
// ----------------------------------------------------------------------------
export default { newInstance, extend };