6#include <unordered_map>
10#include <glm/vec3.hpp>
11#include <glm/vec4.hpp>
26 bool contains(
const glm::vec2 &p)
const;
27 glm::vec2
clamp(
const glm::vec2 &p)
const;
33 Edge(
size_t a,
size_t b) :
v0(std::min(a, b)),
v1(std::max(a, b))
38 return v0 == other.
v0 &&
v1 == other.
v1;
46 return std::hash<size_t>()(e.
v0) ^ (std::hash<size_t>()(e.
v1) << 1);
80 const std::vector<float> &y,
81 const std::vector<float> &z);
94 bool preserve_chull =
true);
98 bool preserve_chull =
true);
103 bool preserve_chull =
true);
105 void remap_z(
float vmin = 0.f,
float vmax = 1.f);
107 void slope_limiter(
float max_slope,
int iterations = 10,
float sigma = 0.1f);
126 bool linear_search =
false)
const;
131 float fill_value = 0.f)
const;
134 float fill_value = 0.f,
135 float gradient_scaling = 1.f)
const;
139 float fill_value = 0.f)
const;
155 const std::vector<glm::vec3> &
get_points()
const;
163 bool export_obj(
const std::string &filepath)
const;
167 const std::vector<float> &values = {},
168 const glm::vec4 &bbox = {0.f, 1.f, 0.f, 1.f})
const;
169 void to_csv(
const std::string &fname)
const;
172 std::vector<glm::vec3> points;
173 std::vector<Triangle> triangles;
174 std::vector<size_t> halfedges;
175 std::vector<size_t> convex_hull;
176 NeighborData neighbors;
177 std::vector<glm::vec2> gradients;
180 glm::vec2 to_xy(
const glm::vec3 &p)
const;
185std::vector<float>
cubic_pulse(
const TerrainTriMesh &mesh);
189 int max_triangles = 0,
Declaration of the Array class for 2D floating-point arrays with various mathematical operations and ...
Array class, helper to manipulate 2D float array with "(i, j)" indexing.
Definition array.hpp:32
Definition terrain_tri_mesh.hpp:19
const std::vector< size_t > & get_convex_hull() const
Definition terrain_tri_mesh.cpp:282
float get_reference_area() const
Definition terrain_tri_mesh.cpp:324
std::string info_string() const
Definition terrain_tri_mesh.cpp:429
void slope_limiter(float max_slope, int iterations=10, float sigma=0.1f)
Definition terrain_tri_mesh.cpp:817
void triangulate_delaunay()
Definition terrain_tri_mesh.cpp:931
float interpolate_z_linear_gradient(const glm::vec2 &p, int &last_tri, float fill_value=0.f, float gradient_scaling=1.f) const
Definition terrain_tri_mesh.cpp:511
bool barycentric(const glm::vec2 &p, size_t i0, size_t i1, size_t i2, float &w0, float &w1, float &w2) const
Definition terrain_tri_mesh.cpp:68
float get_reference_area_xy() const
Definition terrain_tri_mesh.cpp:345
int neighbor_triangle(int tri_index, int edge_index) const
Definition terrain_tri_mesh.cpp:612
float interpolate_z_nearest(const glm::vec2 &p) const
Definition terrain_tri_mesh.cpp:553
void print_info() const
Definition terrain_tri_mesh.cpp:618
void to_csv(const std::string &fname) const
Definition terrain_tri_mesh.cpp:908
void relax_xy(float lambda=0.5f, int iterations=1, bool preserve_chull=true)
Definition terrain_tri_mesh.cpp:655
void subdivise()
Definition terrain_tri_mesh.cpp:823
const std::vector< glm::vec3 > & get_points() const
Definition terrain_tri_mesh.cpp:298
size_t size() const
Definition terrain_tri_mesh.cpp:771
void compute_neighbors()
Definition terrain_tri_mesh.cpp:167
void relax_xyz_taubin(float lambda=0.5f, float mu=-0.55f, int iterations=1, bool preserve_chull=true)
Definition terrain_tri_mesh.cpp:758
std::vector< float > get_vertex_areas(bool normalized) const
Definition terrain_tri_mesh.cpp:394
TerrainTriMesh::BoundingBox get_bbox() const
Definition terrain_tri_mesh.cpp:264
void relax_xyz(float lambda=0.5f, int iterations=1, bool preserve_chull=true)
Definition terrain_tri_mesh.cpp:696
float interpolate_z_nearest_approx(const glm::vec2 &p, int &last_tri, float fill_value=0.f) const
Definition terrain_tri_mesh.cpp:574
float interpolate_z_linear(const glm::vec2 &p, int &last_tri, float fill_value=0.f) const
Definition terrain_tri_mesh.cpp:487
Array to_array(const glm::ivec2 &shape, const std::vector< float > &values={}, const glm::vec4 &bbox={0.f, 1.f, 0.f, 1.f}) const
Definition terrain_tri_mesh.cpp:861
const NeighborData & get_neighbors() const
Definition terrain_tri_mesh.cpp:287
int find_triangle(const glm::vec2 &p, int start_tri=0, bool linear_search=false) const
Definition terrain_tri_mesh.cpp:219
void compute_gradients()
Definition terrain_tri_mesh.cpp:98
const std::vector< Triangle > & get_triangles() const
Definition terrain_tri_mesh.cpp:388
void remap_z(float vmin=0.f, float vmax=1.f)
Definition terrain_tri_mesh.cpp:623
glm::vec3 get_reference_lengths() const
Definition terrain_tri_mesh.cpp:364
glm::vec2 get_range_z() const
Definition terrain_tri_mesh.cpp:308
bool export_obj(const std::string &filepath) const
Definition terrain_tri_mesh.cpp:198
Definition algebra.hpp:23
Array cubic_pulse(glm::ivec2 shape)
Generates a cubic pulse kernel array.
Definition kernels.cpp:97
TerrainTriMesh generate_terrain_tri_mesh_from_heightmap(const Array &z, float max_error, int max_triangles=0, int max_points=0)
Definition terrain_tri_mesh.cpp:1012
Definition terrain_tri_mesh.hpp:22
glm::vec2 clamp(const glm::vec2 &p) const
Definition terrain_tri_mesh.cpp:38
glm::vec2 max
Definition terrain_tri_mesh.hpp:24
bool contains(const glm::vec2 &p) const
Definition terrain_tri_mesh.cpp:32
glm::vec2 min
Definition terrain_tri_mesh.hpp:23
Definition terrain_tri_mesh.hpp:43
std::size_t operator()(const Edge &e) const
Definition terrain_tri_mesh.hpp:44
Definition terrain_tri_mesh.hpp:31
bool operator==(const Edge &other) const
Definition terrain_tri_mesh.hpp:36
Edge(size_t a, size_t b)
Definition terrain_tri_mesh.hpp:33
size_t v0
Definition terrain_tri_mesh.hpp:32
size_t v1
Definition terrain_tri_mesh.hpp:32
Definition terrain_tri_mesh.hpp:62
void clear()
Definition terrain_tri_mesh.hpp:65
void resize(size_t n)
Definition terrain_tri_mesh.hpp:70
std::vector< std::vector< Neighbor > > adjacency
Definition terrain_tri_mesh.hpp:63
Definition terrain_tri_mesh.hpp:56
size_t index
Definition terrain_tri_mesh.hpp:57
float distance2d
Definition terrain_tri_mesh.hpp:58
Definition terrain_tri_mesh.hpp:51
size_t a
Definition terrain_tri_mesh.hpp:52
size_t c
Definition terrain_tri_mesh.hpp:52
size_t b
Definition terrain_tri_mesh.hpp:52