From e4544050d2fd6c29aa94d7d9ebc6ccb048f9d9f1 Mon Sep 17 00:00:00 2001
From: acdemiralp <demiralpali@gmail.com>
Date: Sun, 18 Jul 2021 04:27:32 +0200
Subject: [PATCH] Added vtu to vti converter.

---
 vtu_to_vti_converter/.gitignore               |  1 +
 vtu_to_vti_converter/CMakeLists.txt           | 54 +++++++++++++++++++
 .../cmake/assign_source_group.cmake           | 17 ++++++
 .../cmake/import_library.cmake                | 23 ++++++++
 .../cmake/set_max_warning_level.cmake         | 11 ++++
 vtu_to_vti_converter/source/main.cpp          | 29 ++++++++++
 6 files changed, 135 insertions(+)
 create mode 100644 vtu_to_vti_converter/.gitignore
 create mode 100644 vtu_to_vti_converter/CMakeLists.txt
 create mode 100644 vtu_to_vti_converter/cmake/assign_source_group.cmake
 create mode 100644 vtu_to_vti_converter/cmake/import_library.cmake
 create mode 100644 vtu_to_vti_converter/cmake/set_max_warning_level.cmake
 create mode 100644 vtu_to_vti_converter/source/main.cpp

diff --git a/vtu_to_vti_converter/.gitignore b/vtu_to_vti_converter/.gitignore
new file mode 100644
index 0000000..fe9c10e
--- /dev/null
+++ b/vtu_to_vti_converter/.gitignore
@@ -0,0 +1 @@
+*build/*
\ No newline at end of file
diff --git a/vtu_to_vti_converter/CMakeLists.txt b/vtu_to_vti_converter/CMakeLists.txt
new file mode 100644
index 0000000..76e75d7
--- /dev/null
+++ b/vtu_to_vti_converter/CMakeLists.txt
@@ -0,0 +1,54 @@
+##################################################    Project     ##################################################
+cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
+project               (vtu_to_vti_converter VERSION 1.0 LANGUAGES C CXX)
+list                  (APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+set_property          (GLOBAL PROPERTY USE_FOLDERS ON)
+set                   (CMAKE_CXX_STANDARD 17)
+
+include               (set_max_warning_level)
+set_max_warning_level ()
+
+##################################################    Sources     ##################################################
+file(GLOB_RECURSE PROJECT_HEADERS include/*.h include/*.hpp)
+file(GLOB_RECURSE PROJECT_SOURCES source/*.c source/*.cpp)
+file(GLOB_RECURSE PROJECT_CMAKE_UTILS cmake/*.cmake)
+file(GLOB_RECURSE PROJECT_MISC *.md *.txt)
+set (PROJECT_FILES 
+  ${PROJECT_HEADERS} 
+  ${PROJECT_SOURCES} 
+  ${PROJECT_CMAKE_UTILS} 
+  ${PROJECT_MISC})
+
+include            (assign_source_group)
+assign_source_group(${PROJECT_FILES})
+
+##################################################  Dependencies  ##################################################
+include(import_library)
+
+find_package(VTK REQUIRED NO_MODULE)
+include     (${VTK_USE_FILE})
+list        (APPEND PROJECT_LIBRARIES ${VTK_LIBRARIES})
+
+##################################################    Targets     ##################################################
+add_executable(${PROJECT_NAME} ${PROJECT_FILES})
+target_include_directories(${PROJECT_NAME} PUBLIC 
+  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+  $<INSTALL_INTERFACE:include> PRIVATE source)
+target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_INCLUDE_DIRS})
+target_link_libraries     (${PROJECT_NAME} PUBLIC ${PROJECT_LIBRARIES})
+target_compile_definitions(${PROJECT_NAME} PUBLIC ${PROJECT_COMPILE_DEFINITIONS})
+set_target_properties     (${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
+vtk_module_autoinit       (TARGETS ${PROJECT_NAME} MODULES ${VTK_LIBRARIES})
+
+if(NOT BUILD_SHARED_LIBS)
+  string               (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER)
+  set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS -D${PROJECT_NAME_UPPER}_STATIC)
+endif()
+
+##################################################  Installation  ##################################################
+install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}-config
+  RUNTIME DESTINATION bin)
+install(DIRECTORY include/ DESTINATION include)
+install(EXPORT  ${PROJECT_NAME}-config DESTINATION cmake)
+export (TARGETS ${PROJECT_NAME}        FILE        ${PROJECT_NAME}-config.cmake)
diff --git a/vtu_to_vti_converter/cmake/assign_source_group.cmake b/vtu_to_vti_converter/cmake/assign_source_group.cmake
new file mode 100644
index 0000000..49e5d72
--- /dev/null
+++ b/vtu_to_vti_converter/cmake/assign_source_group.cmake
@@ -0,0 +1,17 @@
+# Assigns the given files to source groups identical to their location.
+function(assign_source_group)
+  foreach(_SOURCE IN ITEMS ${ARGN})
+    if (IS_ABSOLUTE "${_SOURCE}")
+      file(RELATIVE_PATH _SOURCE_REL "${CMAKE_CURRENT_SOURCE_DIR}" "${_SOURCE}")
+    else()
+      set(_SOURCE_REL "${_SOURCE}")
+    endif()
+    get_filename_component(_SOURCE_PATH "${_SOURCE_REL}" PATH)
+    if(WIN32)
+      string(REPLACE "/" "\\" _SOURCE_PATH_MSVC "${_SOURCE_PATH}")
+      source_group("${_SOURCE_PATH_MSVC}" FILES "${_SOURCE}")
+    else()
+      source_group("${_SOURCE_PATH}" FILES "${_SOURCE}")
+    endif()
+  endforeach()
+endfunction(assign_source_group)
diff --git a/vtu_to_vti_converter/cmake/import_library.cmake b/vtu_to_vti_converter/cmake/import_library.cmake
new file mode 100644
index 0000000..c876601
--- /dev/null
+++ b/vtu_to_vti_converter/cmake/import_library.cmake
@@ -0,0 +1,23 @@
+# Imports a library which is not built with cmake.
+# The include directories are appended to the PROJECT_INCLUDE_DIRS variable.
+# The libraries           are appended to the PROJECT_LIBRARIES    variable.
+# Usage:
+#   Header Only:
+#     import_library(INCLUDE_DIRS)
+#   Identical Debug and Release:
+#     import_library(INCLUDE_DIRS LIBRARIES)
+#   Separate  Debug and Release:
+#     import_library(INCLUDE_DIRS DEBUG_LIBRARIES RELEASE_LIBRARIES)
+function(import_library INCLUDE_DIRS)
+  set (PROJECT_INCLUDE_DIRS ${PROJECT_INCLUDE_DIRS} ${${INCLUDE_DIRS}} PARENT_SCOPE)
+  set (_EXTRA_ARGS ${ARGN})
+  list(LENGTH _EXTRA_ARGS _EXTRA_ARGS_LENGTH)
+  if    (_EXTRA_ARGS_LENGTH EQUAL 1)
+    list(GET _EXTRA_ARGS 0 _LIBRARIES)
+    set (PROJECT_LIBRARIES ${PROJECT_LIBRARIES} ${${_LIBRARIES}} PARENT_SCOPE)
+  elseif(_EXTRA_ARGS_LENGTH EQUAL 2)
+    list(GET _EXTRA_ARGS 0 _DEBUG_LIBRARIES  )
+    list(GET _EXTRA_ARGS 1 _RELEASE_LIBRARIES)
+    set (PROJECT_LIBRARIES ${PROJECT_LIBRARIES} debug ${${_DEBUG_LIBRARIES}} optimized ${${_RELEASE_LIBRARIES}} PARENT_SCOPE)
+  endif ()
+endfunction(import_library)
diff --git a/vtu_to_vti_converter/cmake/set_max_warning_level.cmake b/vtu_to_vti_converter/cmake/set_max_warning_level.cmake
new file mode 100644
index 0000000..381f732
--- /dev/null
+++ b/vtu_to_vti_converter/cmake/set_max_warning_level.cmake
@@ -0,0 +1,11 @@
+function(set_max_warning_level)
+  if(MSVC)
+    if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
+      string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+    else()
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
+    endif()
+  else()
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
+  endif()
+endfunction()
\ No newline at end of file
diff --git a/vtu_to_vti_converter/source/main.cpp b/vtu_to_vti_converter/source/main.cpp
new file mode 100644
index 0000000..15b39a1
--- /dev/null
+++ b/vtu_to_vti_converter/source/main.cpp
@@ -0,0 +1,29 @@
+#include <cstdint>
+#include <string>
+
+#include <vtkXMLImageDataWriter.h>
+#include <vtkResampleToImage.h>
+#include <vtkXMLUnstructuredGridReader.h>
+
+// Usage: ./vtu_to_vti_converter [VTU_FILEPATH] [X_RESOLUTION] [Y_RESOLUTION] [Z_RESOLUTION].
+std::int32_t main(std::int32_t argc, char** argv)
+{
+  auto filepath  = std::string(argv[1]);
+
+  auto reader    = vtkSmartPointer<vtkXMLUnstructuredGridReader>::New();
+  auto converter = vtkSmartPointer<vtkResampleToImage>          ::New();
+  auto writer    = vtkSmartPointer<vtkXMLImageDataWriter>       ::New();
+
+  reader   ->SetFileName           (filepath.c_str());
+  reader   ->SetInputArrayToProcess(0, 0, 0, vtkDataObject::FIELD_ASSOCIATION_CELLS, "Q");
+
+  converter->SetInputConnection    (reader->GetOutputPort());
+  converter->SetUseInputBounds     (true);
+  converter->SetSamplingDimensions (std::stoi(argv[2]), std::stoi(argv[3]), std::stoi(argv[4]));
+
+  writer   ->SetInputConnection    (converter->GetOutputPort());
+  writer   ->SetFileName           ((filepath.substr(0, filepath.size() - 3) + std::string("vti")).c_str());
+  writer   ->Update                ();
+
+  return 0;
+}
\ No newline at end of file
-- 
GitLab