HighMap library (C++)
Loading...
Searching...
No Matches
drainage_basin_cell_based.hpp
Go to the documentation of this file.
1/* Copyright (c) 2026 Otto Link. Distributed under the terms of the GNU General
2 Public License. The full license is in the file LICENSE, distributed with
3 this software. */
4#pragma once
5#include <functional>
6#include <limits>
7
8#include "highmap/array.hpp"
9
10namespace hmap
11{
12
18
19class DrainageBasinCellBased
20{
21public:
22 std::vector<std::vector<glm::ivec2>> upstream_traversal;
23 Mat<glm::ivec2> next = Mat<glm::ivec2>({0, 0});
24 glm::ivec2 null_cell = glm::ivec2(-1, -1);
25
26 size_t get_basins_number() const;
27 std::vector<std::vector<glm::ivec2>> get_main_channels();
28 std::vector<glm::ivec2> get_outlets() const;
29 std::vector<glm::ivec2> get_ridges();
30 std::vector<std::vector<glm::ivec2>> get_ridges_neighbors();
31
33 const Array &z,
34 FlowDirectionMethod fd_method = FlowDirectionMethod::FDM_D8,
35 bool remove_lakes = true,
36 const std::vector<glm::ivec2> &outlets = {});
37
39 bool remove_lakes = true,
40 const std::vector<glm::ivec2> &outlets = {});
42 const Array &z,
43 const std::vector<glm::ivec2> &outlets = {});
44
45 void accumulate(Array &acc) const;
46 void traverse_downstream(std::function<void(int, int, int, int, int)> op);
47 void traverse_downstream(std::function<void(int, int, int)> op);
48 void traverse_upstream(std::function<void(int, int, int, int, int)> op);
49 void traverse_upstream(std::function<void(int, int, int)> op);
50
51private:
52 void remove_lakes_d8(const Array &z,
53 float dz_weight = 1.f,
54 float dz_downstream_cost_ratio = 0.f);
55 void update_traversal();
56};
57
58} // namespace hmap
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
void accumulate(Array &acc) const
std::vector< std::vector< glm::ivec2 > > get_ridges_neighbors()
void traverse_upstream(std::function< void(int, int, int, int, int)> op)
std::vector< glm::ivec2 > get_outlets() const
void traverse_downstream(std::function< void(int, int, int)> op)
void generate_traversal_d8(const Array &z, bool remove_lakes=true, const std::vector< glm::ivec2 > &outlets={})
void generate_traversal(const Array &z, FlowDirectionMethod fd_method=FlowDirectionMethod::FDM_D8, bool remove_lakes=true, const std::vector< glm::ivec2 > &outlets={})
void generate_traversal_priority_flood(const Array &z, const std::vector< glm::ivec2 > &outlets={})
std::vector< std::vector< glm::ivec2 > > upstream_traversal
Definition hydrology.hpp:42
std::vector< std::vector< glm::ivec2 > > get_main_channels()
glm::ivec2 null_cell
Definition hydrology.hpp:44
void traverse_upstream(std::function< void(int, int, int)> op)
void traverse_downstream(std::function< void(int, int, int, int, int)> op)
size_t get_basins_number() const
std::vector< glm::ivec2 > get_ridges()
Mat< glm::ivec2 > next
Definition hydrology.hpp:43
Definition algebra.hpp:23
FlowDirectionMethod
Definition hydrology.hpp:34
@ FDM_D8
Definition hydrology.hpp:35
@ FDM_PRIORITY_FLOOD
Definition hydrology.hpp:36