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