7#include <vtkCellData.h>
8#include <vtkDataArray.h>
9#include <vtkImageData.h>
10#include <vtkPointData.h>
11#include <vtkSmartPointer.h>
28 std::string
const& array_name)
38 double const*
const img,
42 std::string
const& array_name)
49 ERR(
"Invalid Mesh Element Type.");
57 ERR(
"Triangle or Quad elements cannot be used to construct meshes from "
66 ERR(
"Elevation mapping can only be performed for 2D meshes.");
70 std::unique_ptr<MeshLib::Mesh> mesh;
110 std::unique_ptr<MeshLib::Mesh> new_mesh;
111 std::vector<std::size_t> elements_to_remove;
114 std::vector<MeshLib::Node*>
const& nodes(mesh->getNodes());
115 std::vector<MeshLib::Element*>
const& elems(mesh->getElements());
116 std::size_t
const n_nodes(elems[0]->getNumberOfNodes());
117 bool const double_idx =
120 std::size_t
const m = (double_idx) ? 2 : 1;
121 for (std::size_t k = 0; k < header.
n_depth; k++)
123 std::size_t
const layer_idx = (k * header.
n_rows * header.
n_cols);
124 for (std::size_t i = 0; i < header.
n_cols; i++)
126 std::size_t
const idx(i * header.
n_rows + layer_idx);
127 for (std::size_t j = 0; j < header.
n_rows; j++)
129 double const val(img[idx + j]);
132 elements_to_remove.push_back(m * (idx + j));
135 elements_to_remove.push_back(m * (idx + j) + 1);
139 for (std::size_t n = 0; n < n_nodes; ++n)
141 (*(nodes[getNodeIndex(*elems[m * (idx + j)], n)]))[2] =
145 (*(nodes[getNodeIndex(*elems[m * (idx + j) + 1],
157 if (array_name ==
"MaterialIDs")
163 static_cast<int>(header.
no_data));
174 if (!elements_to_remove.empty())
177 *mesh, elements_to_remove, mesh->getName()));
181 new_mesh = std::move(mesh);
186 new_mesh->getProperties().removePropertyVector(array_name);
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Class Raster is used for managing raster data.
double const * data() const
RasterHeader const & getHeader() const
Returns the complete header information.
const std::vector< std::size_t > & getSearchedElementIDs() const
return marked elements
std::size_t searchByPropertyValue(std::string const &property_name, PROPERTY_TYPE const property_value)
Property manager on mesh items. Class Properties manages scalar, vector or matrix properties....
PropertyVector< T > * createNewPropertyVector(std::string_view name, MeshItemType mesh_item_type, std::size_t n_components=1)
UseIntensityAs
Selection of possible interpretations for intensities.
MeshElemType
Types of mesh elements supported by OpenGeoSys. Values are from VTKCellType enum.