From 82959b98f2846ded6bb456ef783f09d85a3d7b1c Mon Sep 17 00:00:00 2001 From: "Dmitry Yu. Naumov" <github@naumov.de> Date: Wed, 18 Jul 2018 17:08:20 +0200 Subject: [PATCH] [MeL] clang-format vtk mesh converter. --- MeshLib/MeshGenerators/VtkMeshConverter.cpp | 287 +++++++++++--------- MeshLib/MeshGenerators/VtkMeshConverter.h | 70 ++--- 2 files changed, 202 insertions(+), 155 deletions(-) diff --git a/MeshLib/MeshGenerators/VtkMeshConverter.cpp b/MeshLib/MeshGenerators/VtkMeshConverter.cpp index 5168ef9cc1a..aded0a82c5f 100644 --- a/MeshLib/MeshGenerators/VtkMeshConverter.cpp +++ b/MeshLib/MeshGenerators/VtkMeshConverter.cpp @@ -19,40 +19,40 @@ #include "MeshLib/Node.h" // Conversion from Image to QuadMesh +#include <vtkBitArray.h> +#include <vtkCharArray.h> +#include <vtkDoubleArray.h> #include <vtkImageData.h> +#include <vtkIntArray.h> #include <vtkPointData.h> #include <vtkSmartPointer.h> -#include <vtkBitArray.h> -#include <vtkCharArray.h> #include <vtkUnsignedCharArray.h> #include <vtkUnsignedLongArray.h> #include <vtkUnsignedLongLongArray.h> -#include <vtkDoubleArray.h> -#include <vtkIntArray.h> // Conversion from vtkUnstructuredGrid #include <vtkCell.h> #include <vtkCellData.h> -#include <vtkUnstructuredGrid.h> #include <vtkUnsignedIntArray.h> +#include <vtkUnstructuredGrid.h> namespace MeshLib { - namespace detail { template <class T_ELEMENT> -MeshLib::Element* createElementWithSameNodeOrder(const std::vector<MeshLib::Node*> &nodes, - vtkIdList* const node_ids) +MeshLib::Element* createElementWithSameNodeOrder( + const std::vector<MeshLib::Node*>& nodes, vtkIdList* const node_ids) { auto** ele_nodes = new MeshLib::Node*[T_ELEMENT::n_all_nodes]; - for (unsigned k(0); k<T_ELEMENT::n_all_nodes; k++) + for (unsigned k(0); k < T_ELEMENT::n_all_nodes; k++) ele_nodes[k] = nodes[node_ids->GetId(k)]; return new T_ELEMENT(ele_nodes); } -} +} // namespace detail -MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(vtkUnstructuredGrid* grid, std::string const& mesh_name) +MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid( + vtkUnstructuredGrid* grid, std::string const& mesh_name) { if (!grid) return nullptr; @@ -85,110 +85,143 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(vtkUnstructuredGrid* gr nodes, node_ids); break; } - case VTK_LINE: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Line>(nodes, node_ids); - break; - } - case VTK_TRIANGLE: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Tri>(nodes, node_ids); - break; - } - case VTK_QUAD: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Quad>(nodes, node_ids); - break; - } - case VTK_PIXEL: { - auto** quad_nodes = new MeshLib::Node*[4]; - quad_nodes[0] = nodes[node_ids->GetId(0)]; - quad_nodes[1] = nodes[node_ids->GetId(1)]; - quad_nodes[2] = nodes[node_ids->GetId(3)]; - quad_nodes[3] = nodes[node_ids->GetId(2)]; - elem = new MeshLib::Quad(quad_nodes); - break; - } - case VTK_TETRA: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Tet>(nodes, node_ids); - break; - } - case VTK_HEXAHEDRON: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Hex>(nodes, node_ids); - break; - } - case VTK_VOXEL: { - auto** voxel_nodes = new MeshLib::Node*[8]; - voxel_nodes[0] = nodes[node_ids->GetId(0)]; - voxel_nodes[1] = nodes[node_ids->GetId(1)]; - voxel_nodes[2] = nodes[node_ids->GetId(3)]; - voxel_nodes[3] = nodes[node_ids->GetId(2)]; - voxel_nodes[4] = nodes[node_ids->GetId(4)]; - voxel_nodes[5] = nodes[node_ids->GetId(5)]; - voxel_nodes[6] = nodes[node_ids->GetId(7)]; - voxel_nodes[7] = nodes[node_ids->GetId(6)]; - elem = new MeshLib::Hex(voxel_nodes); - break; - } - case VTK_PYRAMID: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Pyramid>(nodes, node_ids); - break; - } - case VTK_WEDGE: { - auto** prism_nodes = new MeshLib::Node*[6]; - for (unsigned i=0; i<3; ++i) + case VTK_LINE: { - prism_nodes[i] = nodes[node_ids->GetId(i+3)]; - prism_nodes[i+3] = nodes[node_ids->GetId(i)]; + elem = detail::createElementWithSameNodeOrder<MeshLib::Line>( + nodes, node_ids); + break; } - elem = new MeshLib::Prism(prism_nodes); - break; - } - case VTK_QUADRATIC_EDGE: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Line3>(nodes, node_ids); - break; - } - case VTK_QUADRATIC_TRIANGLE: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Tri6>(nodes, node_ids); - break; - } - case VTK_QUADRATIC_QUAD: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Quad8>(nodes, node_ids); - break; - } - case VTK_BIQUADRATIC_QUAD: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Quad9>(nodes, node_ids); - break; - } - case VTK_QUADRATIC_TETRA: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Tet10>(nodes, node_ids); - break; - } - case VTK_QUADRATIC_HEXAHEDRON: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Hex20>(nodes, node_ids); - break; - } - case VTK_QUADRATIC_PYRAMID: { - elem = detail::createElementWithSameNodeOrder<MeshLib::Pyramid13>(nodes, node_ids); - break; - } - case VTK_QUADRATIC_WEDGE: { - auto** prism_nodes = new MeshLib::Node*[15]; - for (unsigned i=0; i<3; ++i) + case VTK_TRIANGLE: { - prism_nodes[i] = nodes[node_ids->GetId(i+3)]; - prism_nodes[i+3] = nodes[node_ids->GetId(i)]; + elem = detail::createElementWithSameNodeOrder<MeshLib::Tri>( + nodes, node_ids); + break; } - for (unsigned i=0; i<3; ++i) - prism_nodes[6+i] = nodes[node_ids->GetId(8-i)]; - prism_nodes[9] = nodes[node_ids->GetId(12)]; - prism_nodes[10] = nodes[node_ids->GetId(14)]; - prism_nodes[11] = nodes[node_ids->GetId(13)]; - for (unsigned i=0; i<3; ++i) - prism_nodes[12+i] = nodes[node_ids->GetId(11-i)]; - elem = new MeshLib::Prism15(prism_nodes); - break; - } - default: - ERR("VtkMeshConverter::convertUnstructuredGrid(): Unknown mesh element type \"%d\".", cell_type); - return nullptr; + case VTK_QUAD: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Quad>( + nodes, node_ids); + break; + } + case VTK_PIXEL: + { + auto** quad_nodes = new MeshLib::Node*[4]; + quad_nodes[0] = nodes[node_ids->GetId(0)]; + quad_nodes[1] = nodes[node_ids->GetId(1)]; + quad_nodes[2] = nodes[node_ids->GetId(3)]; + quad_nodes[3] = nodes[node_ids->GetId(2)]; + elem = new MeshLib::Quad(quad_nodes); + break; + } + case VTK_TETRA: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Tet>( + nodes, node_ids); + break; + } + case VTK_HEXAHEDRON: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Hex>( + nodes, node_ids); + break; + } + case VTK_VOXEL: + { + auto** voxel_nodes = new MeshLib::Node*[8]; + voxel_nodes[0] = nodes[node_ids->GetId(0)]; + voxel_nodes[1] = nodes[node_ids->GetId(1)]; + voxel_nodes[2] = nodes[node_ids->GetId(3)]; + voxel_nodes[3] = nodes[node_ids->GetId(2)]; + voxel_nodes[4] = nodes[node_ids->GetId(4)]; + voxel_nodes[5] = nodes[node_ids->GetId(5)]; + voxel_nodes[6] = nodes[node_ids->GetId(7)]; + voxel_nodes[7] = nodes[node_ids->GetId(6)]; + elem = new MeshLib::Hex(voxel_nodes); + break; + } + case VTK_PYRAMID: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Pyramid>( + nodes, node_ids); + break; + } + case VTK_WEDGE: + { + auto** prism_nodes = new MeshLib::Node*[6]; + for (unsigned i = 0; i < 3; ++i) + { + prism_nodes[i] = nodes[node_ids->GetId(i + 3)]; + prism_nodes[i + 3] = nodes[node_ids->GetId(i)]; + } + elem = new MeshLib::Prism(prism_nodes); + break; + } + case VTK_QUADRATIC_EDGE: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Line3>( + nodes, node_ids); + break; + } + case VTK_QUADRATIC_TRIANGLE: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Tri6>( + nodes, node_ids); + break; + } + case VTK_QUADRATIC_QUAD: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Quad8>( + nodes, node_ids); + break; + } + case VTK_BIQUADRATIC_QUAD: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Quad9>( + nodes, node_ids); + break; + } + case VTK_QUADRATIC_TETRA: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Tet10>( + nodes, node_ids); + break; + } + case VTK_QUADRATIC_HEXAHEDRON: + { + elem = detail::createElementWithSameNodeOrder<MeshLib::Hex20>( + nodes, node_ids); + break; + } + case VTK_QUADRATIC_PYRAMID: + { + elem = + detail::createElementWithSameNodeOrder<MeshLib::Pyramid13>( + nodes, node_ids); + break; + } + case VTK_QUADRATIC_WEDGE: + { + auto** prism_nodes = new MeshLib::Node*[15]; + for (unsigned i = 0; i < 3; ++i) + { + prism_nodes[i] = nodes[node_ids->GetId(i + 3)]; + prism_nodes[i + 3] = nodes[node_ids->GetId(i)]; + } + for (unsigned i = 0; i < 3; ++i) + prism_nodes[6 + i] = nodes[node_ids->GetId(8 - i)]; + prism_nodes[9] = nodes[node_ids->GetId(12)]; + prism_nodes[10] = nodes[node_ids->GetId(14)]; + prism_nodes[11] = nodes[node_ids->GetId(13)]; + for (unsigned i = 0; i < 3; ++i) + prism_nodes[12 + i] = nodes[node_ids->GetId(11 - i)]; + elem = new MeshLib::Prism15(prism_nodes); + break; + } + default: + ERR("VtkMeshConverter::convertUnstructuredGrid(): Unknown mesh " + "element type \"%d\".", + cell_type); + return nullptr; } elements[i] = elem; @@ -200,19 +233,24 @@ MeshLib::Mesh* VtkMeshConverter::convertUnstructuredGrid(vtkUnstructuredGrid* gr return mesh; } -void VtkMeshConverter::convertScalarArrays(vtkUnstructuredGrid &grid, MeshLib::Mesh &mesh) +void VtkMeshConverter::convertScalarArrays(vtkUnstructuredGrid& grid, + MeshLib::Mesh& mesh) { vtkPointData* point_data = grid.GetPointData(); auto const n_point_arrays = static_cast<unsigned>(point_data->GetNumberOfArrays()); - for (unsigned i=0; i<n_point_arrays; ++i) - convertArray(*point_data->GetArray(i), mesh.getProperties(), MeshLib::MeshItemType::Node); + for (unsigned i = 0; i < n_point_arrays; ++i) + convertArray(*point_data->GetArray(i), + mesh.getProperties(), + MeshLib::MeshItemType::Node); vtkCellData* cell_data = grid.GetCellData(); auto const n_cell_arrays = static_cast<unsigned>(cell_data->GetNumberOfArrays()); - for (unsigned i=0; i<n_cell_arrays; ++i) - convertArray(*cell_data->GetArray(i), mesh.getProperties(), MeshLib::MeshItemType::Cell); + for (unsigned i = 0; i < n_cell_arrays; ++i) + convertArray(*cell_data->GetArray(i), + mesh.getProperties(), + MeshLib::MeshItemType::Cell); vtkFieldData* field_data = grid.GetFieldData(); auto const n_field_arrays = @@ -224,7 +262,9 @@ void VtkMeshConverter::convertScalarArrays(vtkUnstructuredGrid &grid, MeshLib::M MeshLib::MeshItemType::IntegrationPoint); } -void VtkMeshConverter::convertArray(vtkDataArray &array, MeshLib::Properties &properties, MeshLib::MeshItemType type) +void VtkMeshConverter::convertArray(vtkDataArray& array, + MeshLib::Properties& properties, + MeshLib::MeshItemType type) { if (vtkDoubleArray::SafeDownCast(&array)) { @@ -252,7 +292,8 @@ void VtkMeshConverter::convertArray(vtkDataArray &array, MeshLib::Properties &pr if (vtkUnsignedLongArray::SafeDownCast(&array)) { - VtkMeshConverter::convertTypedArray<unsigned long>(array, properties, type); + VtkMeshConverter::convertTypedArray<unsigned long>( + array, properties, type); return; } @@ -266,16 +307,18 @@ void VtkMeshConverter::convertArray(vtkDataArray &array, MeshLib::Properties &pr if (vtkUnsignedIntArray::SafeDownCast(&array)) { // MaterialIDs are assumed to be integers - if(std::strncmp(array.GetName(), "MaterialIDs", 11) == 0) + if (std::strncmp(array.GetName(), "MaterialIDs", 11) == 0) VtkMeshConverter::convertTypedArray<int>(array, properties, type); else - VtkMeshConverter::convertTypedArray<unsigned>(array, properties, type); + VtkMeshConverter::convertTypedArray<unsigned>( + array, properties, type); return; } - ERR ("Array \"%s\" in VTU file uses unsupported data type.", array.GetName()); + ERR("Array \"%s\" in VTU file uses unsupported data type.", + array.GetName()); return; } -} // end namespace MeshLib +} // end namespace MeshLib diff --git a/MeshLib/MeshGenerators/VtkMeshConverter.h b/MeshLib/MeshGenerators/VtkMeshConverter.h index a6a6dd73698..6cc810c588a 100644 --- a/MeshLib/MeshGenerators/VtkMeshConverter.h +++ b/MeshLib/MeshGenerators/VtkMeshConverter.h @@ -21,21 +21,20 @@ #include <logog/include/logog.hpp> #include "GeoLib/Raster.h" -#include "MeshLib/Node.h" #include "MeshLib/Location.h" #include "MeshLib/MeshEnums.h" +#include "MeshLib/Node.h" #include "MeshLib/Properties.h" #include "MeshLib/PropertyVector.h" -class vtkUnstructuredGrid; // For conversion vom vtk to ogs mesh -class vtkDataArray; // For node/cell properties - -namespace MeshLib { +class vtkUnstructuredGrid; // For conversion vom vtk to ogs mesh +class vtkDataArray; // For node/cell properties +namespace MeshLib +{ class Mesh; class Properties; - /** * \brief Converter for VtkUnstructured Grids to OGS meshes */ @@ -43,21 +42,23 @@ class VtkMeshConverter { public: /// Converts a vtkUnstructuredGrid object to a Mesh - static MeshLib::Mesh* convertUnstructuredGrid(vtkUnstructuredGrid* grid, - std::string const& mesh_name = "vtkUnstructuredGrid"); + static MeshLib::Mesh* convertUnstructuredGrid( + vtkUnstructuredGrid* grid, + std::string const& mesh_name = "vtkUnstructuredGrid"); private: - static void convertScalarArrays(vtkUnstructuredGrid &grid, MeshLib::Mesh &mesh); + static void convertScalarArrays(vtkUnstructuredGrid& grid, + MeshLib::Mesh& mesh); static std::vector<MeshLib::Node*> createNodeVector( std::vector<double> const& elevation, - std::vector<int> &node_idx_map, + std::vector<int>& node_idx_map, GeoLib::RasterHeader const& header, bool use_elevation); /// Creates a mesh element vector based on image data static std::vector<MeshLib::Element*> createElementVector( - std::vector<double> const& pix_val, + std::vector<double> const& pix_val, std::vector<bool> const& pix_vis, std::vector<MeshLib::Node*> const& nodes, std::vector<int> const& node_idx_map, @@ -66,21 +67,20 @@ private: MeshElemType elem_type); /// Creates a scalar array/mesh property based on pixel values - template<typename T> - static void fillPropertyVector( - MeshLib::PropertyVector<T> &prop_vec, - std::vector<double> const& pix_val, - std::vector<bool> const& pix_vis, - const std::size_t &imgHeight, - const std::size_t &imgWidth, - MeshElemType elem_type) + template <typename T> + static void fillPropertyVector(MeshLib::PropertyVector<T>& prop_vec, + std::vector<double> const& pix_val, + std::vector<bool> const& pix_vis, + const std::size_t& imgHeight, + const std::size_t& imgWidth, + MeshElemType elem_type) { for (std::size_t i = 0; i < imgHeight; i++) for (std::size_t j = 0; j < imgWidth; j++) { - if (!pix_vis[i*imgWidth+j]) + if (!pix_vis[i * imgWidth + j]) continue; - T val (static_cast<T>(pix_val[i*(imgWidth+1)+j])); + T val(static_cast<T>(pix_val[i * (imgWidth + 1) + j])); if (elem_type == MeshElemType::TRIANGLE) { prop_vec.push_back(val); @@ -91,30 +91,34 @@ private: } } - static void convertArray(vtkDataArray &array, - MeshLib::Properties &properties, + static void convertArray(vtkDataArray& array, + MeshLib::Properties& properties, MeshLib::MeshItemType type); - template<typename T> static void convertTypedArray(vtkDataArray &array, - MeshLib::Properties &properties, - MeshLib::MeshItemType type) + template <typename T> + static void convertTypedArray(vtkDataArray& array, + MeshLib::Properties& properties, + MeshLib::MeshItemType type) { - vtkIdType const nTuples (array.GetNumberOfTuples()); - int const nComponents (array.GetNumberOfComponents()); - char const*const array_name (array.GetName()); + vtkIdType const nTuples(array.GetNumberOfTuples()); + int const nComponents(array.GetNumberOfComponents()); + char const* const array_name(array.GetName()); auto* const vec = properties.createNewPropertyVector<T>( array_name, type, nComponents); if (!vec) { - WARN("Array %s could not be converted to PropertyVector.", array_name); + WARN("Array %s could not be converted to PropertyVector.", + array_name); return; } - vec->reserve(nTuples*nComponents); + vec->reserve(nTuples * nComponents); auto* data_array = static_cast<T*>(array.GetVoidPointer(0)); - std::copy(&data_array[0], &data_array[nTuples*nComponents], std::back_inserter(*vec)); + std::copy(&data_array[0], + &data_array[nTuples * nComponents], + std::back_inserter(*vec)); return; } }; -} // end namespace MeshLib +} // end namespace MeshLib -- GitLab