7#include <range/v3/algorithm/fill.hpp>
8#include <range/v3/view/filter.hpp>
9#include <range/v3/view/transform.hpp>
19 std::string
const& property_name,
20 int const old_value,
int const new_value,
21 bool replace_if_exists)
29 catch (std::runtime_error
const& e)
31 ERR(
"{:s}", e.what());
35 const std::size_t n_property_tuples(
38 if (!replace_if_exists)
40 for (std::size_t i = 0; i < n_property_tuples; ++i)
42 if ((*property_value_vec)[i] == new_value)
45 "ElementValueModification::replaceElementValue() - "
46 "Replacement value '{:d}' is already taken, no changes "
54 auto const old_values_filter = ranges::views::filter(
55 [&old_value](
auto const& v) {
return v == old_value; });
56 ranges::fill(*property_value_vec | old_values_filter, new_value);
63 bool replace_if_exists)
65 return replace(mesh,
"MaterialIDs", old_value, new_value,
77 catch (std::runtime_error
const& e)
79 ERR(
"{:s}", e.what());
83 std::vector<int> value_mapping(
86 std::vector<int> reverse_mapping(value_mapping.back() + 1, 0);
87 std::size_t
const nValues(value_mapping.size());
88 for (std::size_t i = 0; i < nValues; ++i)
90 reverse_mapping[value_mapping[i]] = i;
93 property_value_vector->
assign(
94 *property_value_vector |
95 ranges::views::transform([&](
auto const v)
96 {
return reverse_mapping[v]; }));
110 catch (std::runtime_error
const& e)
112 ERR(
"{:s}", e.what());
116 auto const element_type_filter =
118 {
return e->getGeomType() == ele_type; });
120 auto selected_element_ids =
124 selected_element_ids |
125 ranges::views::transform([&](std::size_t
const k) ->
auto&
126 {
return (*property_value_vector)[k]; }),
129 return ranges::distance(selected_element_ids);
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
std::vector< Element * > const & getElements() const
Get the element-vector for the mesh.
Properties & getProperties()
PropertyVector< T > const * getPropertyVector(std::string_view name) const
constexpr std::size_t getNumberOfTuples() const
constexpr void assign(R &&r)
constexpr ranges::views::view_closure ids
For an element of a range view return its id.
MeshElemType
Types of mesh elements supported by OpenGeoSys. Values are from VTKCellType enum.