This method could be made a lot more efficient.
| 298 | #ifdef VTK_USE_MPI_IO |
| 299 | // This method could be made a lot more efficient. |
| 300 | void vtkMPIImageReader::TransformData(vtkImageData* data) |
| 301 | { |
| 302 | if (!this->Transform) |
| 303 | return; |
| 304 | |
| 305 | vtkDataArray* fileData = data->GetPointData()->GetScalars(); |
| 306 | vtkDataArray* dataData = fileData->NewInstance(); |
| 307 | dataData->SetName(fileData->GetName()); |
| 308 | dataData->SetNumberOfComponents(fileData->GetNumberOfComponents()); |
| 309 | dataData->SetNumberOfTuples(fileData->GetNumberOfTuples()); |
| 310 | |
| 311 | int dataExtent[6]; |
| 312 | data->GetExtent(dataExtent); |
| 313 | |
| 314 | int fileExtent[6]; |
| 315 | this->ComputeInverseTransformedExtent(dataExtent, fileExtent); |
| 316 | |
| 317 | vtkIdType dataMinExtent[3]; |
| 318 | vtkIdType fileMinExtent[3]; |
| 319 | vtkIdType dataExtentSize[3]; |
| 320 | vtkIdType fileExtentSize[3]; |
| 321 | for (int i = 0; i < 3; i++) |
| 322 | { |
| 323 | dataMinExtent[i] = std::min(dataExtent[2 * i], dataExtent[2 * i + 1]); |
| 324 | fileMinExtent[i] = std::min(fileExtent[2 * i], fileExtent[2 * i + 1]); |
| 325 | dataExtentSize[i] = std::abs(dataExtent[2 * i + 1] - dataExtent[2 * i]) + 1; |
| 326 | fileExtentSize[i] = std::abs(fileExtent[2 * i + 1] - fileExtent[2 * i]) + 1; |
| 327 | } |
| 328 | |
| 329 | for (vtkIdType file_k = 0; file_k < fileExtentSize[2]; file_k++) |
| 330 | { |
| 331 | for (vtkIdType file_j = 0; file_j < fileExtentSize[1]; file_j++) |
| 332 | { |
| 333 | for (vtkIdType file_i = 0; file_i < fileExtentSize[0]; file_i++) |
| 334 | { |
| 335 | double fileXYZ[3]; |
| 336 | fileXYZ[0] = file_i + fileMinExtent[0]; |
| 337 | fileXYZ[1] = file_j + fileMinExtent[1]; |
| 338 | fileXYZ[2] = file_k + fileMinExtent[2]; |
| 339 | double dataXYZ[3]; |
| 340 | this->Transform->TransformPoint(fileXYZ, dataXYZ); |
| 341 | vtkIdType data_i = static_cast<vtkIdType>(dataXYZ[0]) - dataMinExtent[0]; |
| 342 | vtkIdType data_j = static_cast<vtkIdType>(dataXYZ[1]) - dataMinExtent[1]; |
| 343 | vtkIdType data_k = static_cast<vtkIdType>(dataXYZ[2]) - dataMinExtent[2]; |
| 344 | |
| 345 | vtkIdType fileTuple = ((file_k * fileExtentSize[1] + file_j) * fileExtentSize[0]) + file_i; |
| 346 | vtkIdType dataTuple = ((data_k * dataExtentSize[1] + data_j) * dataExtentSize[0]) + data_i; |
| 347 | |
| 348 | dataData->SetTuple(dataTuple, fileTuple, fileData); |
| 349 | } |
| 350 | } |
| 351 | } |
| 352 | |
| 353 | data->GetPointData()->SetScalars(dataData); |
| 354 | dataData->Delete(); |
| 355 | } |
| 356 | #else // VTK_USE_MPI_IO |
| 357 | void vtkMPIImageReader::TransformData(vtkImageData*) |
no test coverage detected