From b86e27a9c4db3686e0cc323d5e4f87bfc7e75da0 Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Tue, 2 Sep 2025 12:42:46 +0200 Subject: [PATCH] add VTK save early --- CMakeLists.txt | 5 +++++ src/Math/CMakeLists.txt | 3 ++- src/Math/VoxImage.cpp | 34 ++++++++++++++++++++++++++++++++++ src/Math/VoxImage.h | 1 + 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ca4afc..b2d63ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,11 @@ include(${EIGEN3_USE_FILE}) find_package(ROOT CONFIG REQUIRED) include(${ROOT_USE_FILE}) +find_package(VTK REQUIRED) +include(${VTK_USE_FILE}) + + + option(CENTOS_SUPPORT "VTK definitions for CentOS" OFF) if(CENTOS_SUPPORT) find_package(VTK CONFIG REQUIRED) diff --git a/src/Math/CMakeLists.txt b/src/Math/CMakeLists.txt index de44c98..be21785 100644 --- a/src/Math/CMakeLists.txt +++ b/src/Math/CMakeLists.txt @@ -32,7 +32,8 @@ set(SOURCES VoxRaytracer.cpp Structured4DGrid.cpp) set(LIBRARIES ${Eigen_LIBRARY} - ${ROOT_LIBRARIES}) + ${ROOT_LIBRARIES} + ${VTK_LIBRARIES}) set(libname ${PACKAGE_LIBPREFIX}Math) set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE) diff --git a/src/Math/VoxImage.cpp b/src/Math/VoxImage.cpp index 55c4e36..93a9e34 100644 --- a/src/Math/VoxImage.cpp +++ b/src/Math/VoxImage.cpp @@ -30,9 +30,43 @@ #include "VoxImage.h" +#include +#include + +#include + namespace uLib { +void Abstract::VoxImage::SaveToVtkVti (const char *file) +{ + Abstract::VoxImage *voxels = this; + + vtkSmartPointer image = vtkSmartPointer::New(); + image->SetDimensions(voxels->GetDims()(0), voxels->GetDims()(1), voxels->GetDims()(2)); + image->SetSpacing(voxels->GetSpacing()(0), voxels->GetSpacing()(1), voxels->GetSpacing()(2)); + image->SetOrigin(voxels->GetOrigin()(0), voxels->GetOrigin()(1), voxels->GetOrigin()(2)); + image->AllocateScalars(VTK_FLOAT, 1); + + int nx = voxels->GetDims()(0); + int ny = voxels->GetDims()(1); + int nz = voxels->GetDims()(2); + + size_t npoints = nx*ny*nz; + float *scalar = static_cast(image->GetScalarPointer()); + + for (size_t i = 0; i < npoints; i++) { + scalar[i] = static_cast(voxels->GetValue(i)); + } + + vtkSmartPointer writer = vtkSmartPointer::New(); + writer->SetFileName(file); + writer->SetInputData(image); + writer->Write(); +} + + + void Abstract::VoxImage::ExportToVtk (const char *file, bool density_type) { FILE * vtk_file = fopen(file,"wb"); diff --git a/src/Math/VoxImage.h b/src/Math/VoxImage.h index b82b198..fee3a7e 100644 --- a/src/Math/VoxImage.h +++ b/src/Math/VoxImage.h @@ -58,6 +58,7 @@ public: void ExportToVtk(const char *file, bool density_type = 0); void ExportToVtkXml(const char *file, bool density_type = 0); int ImportFromVtk(const char *file); + void SaveToVtkVti (const char *file); protected: