| 428 | } |
| 429 | |
| 430 | nlohmann::json DataStorageController::BuildDataMetadata(const mitk::BaseData* data) const |
| 431 | { |
| 432 | nlohmann::json metadata; |
| 433 | |
| 434 | if (data == nullptr) |
| 435 | { |
| 436 | return metadata; |
| 437 | } |
| 438 | |
| 439 | // Handle Image data |
| 440 | if (auto* image = dynamic_cast<const mitk::Image*>(data)) |
| 441 | { |
| 442 | // Dimensions |
| 443 | nlohmann::json dimensions = nlohmann::json::array(); |
| 444 | for (unsigned int i = 0; i < image->GetDimension(); ++i) |
| 445 | { |
| 446 | dimensions.push_back(static_cast<int>(image->GetDimension(i))); |
| 447 | } |
| 448 | metadata["dimensions"] = dimensions; |
| 449 | |
| 450 | // Spacing |
| 451 | auto geometry = image->GetGeometry(); |
| 452 | if (geometry != nullptr) |
| 453 | { |
| 454 | auto spacing = geometry->GetSpacing(); |
| 455 | metadata["spacing"] = {spacing[0], spacing[1], spacing[2]}; |
| 456 | |
| 457 | auto origin = geometry->GetOrigin(); |
| 458 | metadata["origin"] = {origin[0], origin[1], origin[2]}; |
| 459 | } |
| 460 | |
| 461 | // Pixel type |
| 462 | auto pixelType = image->GetPixelType(); |
| 463 | metadata["pixel_type"] = pixelType.GetComponentTypeAsString(); |
| 464 | } |
| 465 | // Handle Surface data |
| 466 | else if (auto* surface = dynamic_cast<const mitk::Surface*>(data)) |
| 467 | { |
| 468 | auto* vtkPoly = surface->GetVtkPolyData(); |
| 469 | if (vtkPoly != nullptr) |
| 470 | { |
| 471 | metadata["points_count"] = static_cast<int>(vtkPoly->GetNumberOfPoints()); |
| 472 | metadata["cells_count"] = static_cast<int>(vtkPoly->GetNumberOfCells()); |
| 473 | |
| 474 | double bounds[6]; |
| 475 | vtkPoly->GetBounds(bounds); |
| 476 | metadata["bounds"] = {bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]}; |
| 477 | } |
| 478 | } |
| 479 | // Handle PointSet data |
| 480 | else if (auto* pointSet = dynamic_cast<const mitk::PointSet*>(data)) |
| 481 | { |
| 482 | metadata["points_count"] = static_cast<int>(pointSet->GetSize()); |
| 483 | |
| 484 | auto geometry = pointSet->GetGeometry(); |
| 485 | if (geometry != nullptr) |
| 486 | { |
| 487 | auto bounds = geometry->GetBounds(); |
no test coverage detected