diff --git a/IO/XML/vtkXMLHyperTreeGridReader.cxx b/IO/XML/vtkXMLHyperTreeGridReader.cxx index b88a5ad4da0a568cd4a44e9fca1eb05abd55952e..e3442e432102935a21c0ebe4e39f4f7204b9ad10 100644 --- a/IO/XML/vtkXMLHyperTreeGridReader.cxx +++ b/IO/XML/vtkXMLHyperTreeGridReader.cxx @@ -1039,7 +1039,7 @@ void vtkXMLHyperTreeGridReader::ReadTrees_2(vtkXMLDataElement* element) for (std::size_t arrayId = 0; arrayId < arrays.size(); ++arrayId) { - if (!this->ReadArrayValues( + if (!this->ReadArrayTuples( arrayElements[arrayId], outputOffset, arrays[arrayId], inputOffset, readableTreeSize)) { vtkErrorMacro(<< "Failed reading array " << arrayId << ". Aborting."); diff --git a/IO/XML/vtkXMLReader.cxx b/IO/XML/vtkXMLReader.cxx index 725a7c29f809008b9701c851a21835f84a47220c..096bc909786676bbfc634571d51d5818c5e9ab33 100644 --- a/IO/XML/vtkXMLReader.cxx +++ b/IO/XML/vtkXMLReader.cxx @@ -947,6 +947,17 @@ int vtkXMLReader::ReadArrayValues(vtkXMLDataElement* da, vtkIdType arrayIndex, return result; } +//------------------------------------------------------------------------------ +int vtkXMLReader::ReadArrayTuples(vtkXMLDataElement* da, vtkIdType arrayTupleIndex, + vtkAbstractArray* array, vtkIdType startTupleIndex, vtkIdType numTuples, FieldType fieldType) +{ + assert(array != nullptr); + + int noc = array->GetNumberOfComponents(); + return this->ReadArrayValues( + da, noc * arrayTupleIndex, array, noc * startTupleIndex, noc * numTuples, fieldType); +} + //------------------------------------------------------------------------------ void vtkXMLReader::ReadXMLData() { diff --git a/IO/XML/vtkXMLReader.h b/IO/XML/vtkXMLReader.h index 31f425dbb96e260a8943955807847928ab0c56c5..3f0bd69d258bdeda75d31bfd52794ad141afd835 100644 --- a/IO/XML/vtkXMLReader.h +++ b/IO/XML/vtkXMLReader.h @@ -299,6 +299,16 @@ protected: virtual int ReadArrayValues(vtkXMLDataElement* da, vtkIdType arrayIndex, vtkAbstractArray* array, vtkIdType startIndex, vtkIdType numValues, FieldType type = OTHER); + // Read an Array values starting at the given tuple index and up to numTuples + // taking into account the number of components declared in array. + // This method assumes that the array is of correct size to + // accommodate all numTuples multiplied by number of components. + // arrayTupleIndex is the tuple index at which the read + // values will be put in the array. + virtual int ReadArrayTuples(vtkXMLDataElement* da, vtkIdType arrayTupleIndex, + vtkAbstractArray* array, vtkIdType startTupleIndex, vtkIdType numTuples, + FieldType type = OTHER); + // Setup the data array selections for the input's set of arrays. void SetDataArraySelections(vtkXMLDataElement* eDSA, vtkDataArraySelection* sel);