UNPKG

@thewtex/vtk.js-esm

Version:

Visualization Toolkit for the Web

101 lines (76 loc) 3.22 kB
import { l as lib } from '../../vendor/jszip/lib/index.js'; import macro from '../../macro.js'; import vtkSerializer from './Serializer.js'; import vtkDataArray from '../../Common/Core/DataArray.js'; var vtkErrorMacro = macro.vtkErrorMacro; // ---------------------------------------------------------------------------- // vtkAppendPolyData methods // ---------------------------------------------------------------------------- function vtkZipMultiDataSetWriter(publicAPI, model) { // Set our classname model.classHierarchy.push('vtkZipMultiDataSetWriter'); publicAPI.requestData = function (inData, outData) { // implement requestData var numberOfInputs = publicAPI.getNumberOfInputPorts(); if (!numberOfInputs) { vtkErrorMacro('No input specified.'); return; } // Default array handler var arrayHandler = vtkSerializer.vtkArraySerializer.newInstance(); model.datasets = []; for (var i = 0; i < numberOfInputs; i++) { var ds = inData[i]; var serializer = vtkSerializer.getSerializer(ds); if (serializer) { model.datasets.push(serializer.serialize(ds, arrayHandler)); } else { console.error('Could not find serializer for', ds.getClassName()); } } model.arrays = arrayHandler.arrays; }; publicAPI.write = function () { publicAPI.update(); // Write to zip if (model.zipFile) { model.zipFile = new lib(); } // Write metadata model.zipFile.file('datasets.json', JSON.stringify(model.datasets)); // Write Arrays for (var i = 0; i < model.arrays.length; i++) { model.zipFile.file("array_".concat(vtkDataArray.getDataType(model.arrays[i]), "_").concat(i), model.arrays[i], { binary: true }); } model.zipFile.generateAsync({ type: 'blob', compression: 'DEFLATE', compressionOptions: { level: model.compressionLevel } }).then(function (blob) { model.blob = blob; return blob; }); }; } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- var DEFAULT_VALUES = { zipFile: null, compressionLevel: 6, blob: null }; // ---------------------------------------------------------------------------- function extend(publicAPI, model) { var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; Object.assign(model, DEFAULT_VALUES, initialValues); // Make this a VTK object macro.obj(publicAPI, model); // Also make it an algorithm with one input and one output macro.algo(publicAPI, model, 1, 0); macro.setGet(publicAPI, model, ['zipFile', 'compressionLevel']); macro.get(publicAPI, model, ['blob']); // Object specific methods vtkZipMultiDataSetWriter(publicAPI, model); } // ---------------------------------------------------------------------------- var newInstance = macro.newInstance(extend, 'vtkZipMultiDataSetWriter'); // ---------------------------------------------------------------------------- var index = { newInstance: newInstance, extend: extend }; export default index; export { extend, newInstance };