UNPKG

@thewtex/vtk.js-esm

Version:

Visualization Toolkit for the Web

118 lines (86 loc) 5.03 kB
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray'; import macro from '../../macro.js'; import vtkDataArray from '../../Common/Core/DataArray.js'; import vtkPolyData from '../../Common/DataModel/PolyData.js'; import vtkXMLReader from './XMLReader.js'; // Global method // ---------------------------------------------------------------------------- function handleArray(polydata, cellType, piece, compressor, byteOrder, headerType, binaryBuffer) { var size = Number(piece.getAttribute("NumberOf".concat(cellType))); if (size > 0) { var dataArrayElem = piece.getElementsByTagName(cellType)[0].getElementsByTagName('DataArray')[0]; var _vtkXMLReader$process = vtkXMLReader.processDataArray(size, dataArrayElem, compressor, byteOrder, headerType, binaryBuffer), values = _vtkXMLReader$process.values, numberOfComponents = _vtkXMLReader$process.numberOfComponents; polydata["get".concat(cellType)]().setData(values, numberOfComponents); } return size; } // ---------------------------------------------------------------------------- function handleCells(polydata, cellType, piece, compressor, byteOrder, headerType, binaryBuffer) { var size = Number(piece.getAttribute("NumberOf".concat(cellType))); if (size > 0) { var values = vtkXMLReader.processCells(size, piece.getElementsByTagName(cellType)[0], compressor, byteOrder, headerType, binaryBuffer); polydata["get".concat(cellType)]().setData(values); } return size; } // ---------------------------------------------------------------------------- function handleFieldDataArray(dataArrayElem, compressor, byteOrder, headerType, binaryBuffer) { var size = Number(dataArrayElem.getAttribute('NumberOfTuples')); return vtkDataArray.newInstance(vtkXMLReader.processDataArray(size, dataArrayElem, compressor, byteOrder, headerType, binaryBuffer)); } // ---------------------------------------------------------------------------- // vtkXMLPolyDataReader methods // ---------------------------------------------------------------------------- function vtkXMLPolyDataReader(publicAPI, model) { // Set our className model.classHierarchy.push('vtkXMLPolyDataReader'); publicAPI.parseXML = function (rootElem, type, compressor, byteOrder, headerType) { var datasetElem = rootElem.getElementsByTagName(model.dataType)[0]; var fieldDataElem = datasetElem.getElementsByTagName('FieldData')[0]; var pieces = datasetElem.getElementsByTagName('Piece'); var nbPieces = pieces.length; // field data var fieldDataArrays = []; if (fieldDataElem) { fieldDataArrays = _toConsumableArray(fieldDataElem.getElementsByTagName('DataArray')).map(function (daElem) { return handleFieldDataArray(daElem, compressor, byteOrder, headerType, model.binaryBuffer); }); } var _loop = function _loop(outputIndex) { // Create dataset var polydata = vtkPolyData.newInstance(); var piece = pieces[outputIndex]; // Points var nbPoints = handleArray(polydata, 'Points', piece, compressor, byteOrder, headerType, model.binaryBuffer); // Cells var nbCells = 0; ['Verts', 'Lines', 'Strips', 'Polys'].forEach(function (cellType) { nbCells += handleCells(polydata, cellType, piece, compressor, byteOrder, headerType, model.binaryBuffer); }); // Fill data vtkXMLReader.processFieldData(nbPoints, piece.getElementsByTagName('PointData')[0], polydata.getPointData(), compressor, byteOrder, headerType, model.binaryBuffer); vtkXMLReader.processFieldData(nbCells, piece.getElementsByTagName('CellData')[0], polydata.getCellData(), compressor, byteOrder, headerType, model.binaryBuffer); var fieldData = polydata.getFieldData(); for (var i = 0; i < fieldDataArrays.length; i++) { fieldData.addArray(fieldDataArrays[i]); } // Add new output model.output[outputIndex] = polydata; }; for (var outputIndex = 0; outputIndex < nbPieces; outputIndex++) { _loop(outputIndex); } }; } // ---------------------------------------------------------------------------- // Object factory // ---------------------------------------------------------------------------- var DEFAULT_VALUES = { dataType: 'PolyData' }; // ---------------------------------------------------------------------------- function extend(publicAPI, model) { var initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; Object.assign(model, DEFAULT_VALUES, initialValues); vtkXMLReader.extend(publicAPI, model, initialValues); vtkXMLPolyDataReader(publicAPI, model); } // ---------------------------------------------------------------------------- var newInstance = macro.newInstance(extend, 'vtkXMLPolyDataReader'); // ---------------------------------------------------------------------------- var vtkXMLPolyDataReader$1 = { newInstance: newInstance, extend: extend }; export default vtkXMLPolyDataReader$1; export { extend, newInstance };