Merge pull request #5582 from lrineau/CGAL_ImageIO-add_an_example_and_restore_VTK_support-GF

CGAL ImageIO: Add an example and restore VTK support
This commit is contained in:
Sebastien Loriot 2021-04-17 10:54:18 +02:00 committed by GitHub
commit 7b88b9adc3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 4 deletions

View File

@ -30,8 +30,8 @@ if(VTK_FOUND)
if(TARGET vtkRenderingQt AND TARGET vtkFiltersModeling)
find_package(VTK COMPONENTS vtkRenderingQt vtkFiltersModeling NO_MODULE)
include(${VTK_USE_FILE})
find_package(Qt${VTK_QT_VERSION} COMPONENTS QtGui)
if(NOT TARGET Qt${VTK_QT_VERSION}::QtGui)
find_package(Qt${VTK_QT_VERSION} COMPONENTS Gui)
if(NOT TARGET Qt${VTK_QT_VERSION}::Gui)
message(
STATUS
"NOTICE: vtkRenderingQt needs Qt${VTK_QT_VERSION}, and will not be compiled."
@ -44,7 +44,7 @@ if(VTK_FOUND)
target_link_libraries(
image_to_vtk_viewer ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}
${VTK_LIBRARIES} Qt${VTK_QT_VERSION}::QtGui)
${VTK_LIBRARIES} Qt${VTK_QT_VERSION}::Gui)
else()
message(
STATUS

View File

@ -16,6 +16,7 @@ if(CGAL_ImageIO_FOUND)
create_single_source_cgal_program("convert_raw_image_to_inr.cpp")
create_single_source_cgal_program("test_imageio.cpp")
create_single_source_cgal_program("extract_a_sub_image.cpp")
create_single_source_cgal_program("slice_image.cpp")
else()
message(
STATUS

View File

@ -33,7 +33,7 @@ int main(int argc, char **argv) {
for (auto k = zmin; k < zmax; ++k)
for (auto j = ymin; j <= ymax; ++j)
for (auto i = xmin; i <= xmax; ++i) {
auto pos = data + image->wdim * (i + image->xdim * (j + image->zdim * k));
auto pos = data + image->wdim * (i + image->xdim * (j + image->ydim * k));
std::copy(pos, pos + image->wdim, new_data);
new_data += image->wdim;
}

View File

@ -0,0 +1,27 @@
#include <CGAL/ImageIO.h>
#include <iostream>
#include <string>
int main(int argc, char **argv) {
if (argc != 3) {
std::cerr << "Usage: slice_size <input> <output>\n";
return argc != 1;
}
_image *image = ::_readImage(argv[1]);
if (!image)
return 2;
auto *new_image = ::_createImage(image->xdim, image->ydim, image->zdim / 2 + 1, 1,
image->vx, image->vy, image->vz*2, image->wdim,
image->wordKind, image->sign);
const auto* const data = static_cast<char*>(image->data);
auto* new_data = static_cast<char*>(new_image->data);
const auto slice_size = image->wdim * image->xdim * image->ydim;
for (auto k = 0ul; k < image->zdim; k+=2) {
auto pos = data + slice_size * k;
new_data = std::copy(pos, pos + slice_size, new_data);
}
auto r = ::_writeImage(new_image, argv[2]);
if(r != ImageIO_NO_ERROR) return 3;
::_freeImage(image);
::_freeImage(new_image);
}

View File

@ -110,6 +110,9 @@ struct VTK_type_generator<boost::uint32_t> {
vtk_image->SetSpacing(image.vx(),
image.vy(),
image.vz());
vtk_image->SetOrigin(image.tx(),
image.ty(),
image.tz());
vtk_image->AllocateScalars(type, 1);
vtk_image->GetPointData()->SetScalars(data_array);
return vtk_image;