OGS
LayeredMeshGenerator.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <limits>
7#include <memory>
8#include <string>
9#include <vector>
10
11namespace GeoLib
12{
13class Raster;
14}
15
16namespace MeshLib
17{
18class Mesh;
19class Node;
20class Element;
21} // namespace MeshLib
22
27{
28public:
45 virtual bool createLayers(MeshLib::Mesh const& mesh,
46 std::vector<GeoLib::Raster const*> const& rasters,
47 double minimum_thickness,
48 double noDataReplacementValue = 0.0) final;
49
66 virtual bool createRasterLayers(
67 MeshLib::Mesh const& mesh,
68 std::vector<GeoLib::Raster const*> const& rasters,
69 double minimum_thickness,
70 double noDataReplacementValue) = 0;
71
73 std::unique_ptr<MeshLib::Mesh> getMesh(std::string const& mesh_name) const;
74
75protected:
77 virtual ~LayeredMeshGenerator() = default;
78
80 virtual void addLayerToMesh(MeshLib::Mesh const& mesh_layer,
81 unsigned layer_id,
82 GeoLib::Raster const& raster) = 0;
83
97 MeshLib::Node const& last_layer_node,
98 GeoLib::Raster const& raster,
99 std::size_t new_node_id) const;
100
102 static double calcEpsilon(GeoLib::Raster const& low,
103 GeoLib::Raster const& high);
104
105 double _elevation_epsilon{0.0001};
106 double _minimum_thickness{std::numeric_limits<float>::epsilon()};
107 std::vector<int> _materials;
108 std::vector<MeshLib::Node*> _nodes;
109 std::vector<MeshLib::Element*> _elements;
110};
Class Raster is used for managing raster data.
Definition Raster.h:39
virtual bool createLayers(MeshLib::Mesh const &mesh, std::vector< GeoLib::Raster const * > const &rasters, double minimum_thickness, double noDataReplacementValue=0.0) final
virtual ~LayeredMeshGenerator()=default
virtual void addLayerToMesh(MeshLib::Mesh const &mesh_layer, unsigned layer_id, GeoLib::Raster const &raster)=0
Adds another layer to the subsurface mesh.
std::vector< int > _materials
static double calcEpsilon(GeoLib::Raster const &low, GeoLib::Raster const &high)
Calculates a data-dependent epsilon value.
MeshLib::Node * getNewLayerNode(MeshLib::Node const &dem_node, MeshLib::Node const &last_layer_node, GeoLib::Raster const &raster, std::size_t new_node_id) const
std::vector< MeshLib::Node * > _nodes
LayeredMeshGenerator()=default
virtual bool createRasterLayers(MeshLib::Mesh const &mesh, std::vector< GeoLib::Raster const * > const &rasters, double minimum_thickness, double noDataReplacementValue)=0
std::unique_ptr< MeshLib::Mesh > getMesh(std::string const &mesh_name) const
Returns a mesh of the subsurface representation.
std::vector< MeshLib::Element * > _elements