50 assert( p >= 0 && p <= 1 );
80 [[nodiscard]]
const Graph &
graph()
const {
return graph_; }
83 [[nodiscard]]
float totalArea()
const {
return totalArea_; }
86 [[nodiscard]]
int numBasins()
const {
return (
int)graph_.validVerts().count() - 1; }
163 float totalArea_ = 0;
#define MRMESH_API
Definition MRMeshFwd.h:80
mathematical graph consisting from vertices and undirected edges
Definition MRGraph.h:17
std::vector<T>-like container that requires specific indexing type,
Definition MRVector.h:23
float lowestBdLevel
lowest position on the boundary of the basin
Definition MRWatershedGraph.h:23
float getHeightAt(VertId v) const
returns height at given vertex or FLT_MAX if the vertex is invalid
void updateAccVolume(float amount)
updates accumulated volume in the basin to the moment of given precipitation amount
Definition MRWatershedGraph.h:55
Vector< Graph::VertId, Graph::VertId > iniBasin2Tgt(bool joinOverflowBasins=false) const
VertId lowestVert
on this boundary
Definition MRWatershedGraph.h:69
VertId lowestVert
in the whole basin
Definition MRWatershedGraph.h:20
Graph::VertId overflowTo
Definition MRWatershedGraph.h:146
Graph::VertId flowsFinallyTo(Graph::VertId v, bool exceptOutside=false) const
Graph::VertId outsideId() const
returns special "basin" representing outside areas of the mesh
Definition MRWatershedGraph.h:97
float maxVolume
full water volume to be accumulated in the basin till water reaches the lowest height on the boundary
Definition MRWatershedGraph.h:24
WatershedGraph(const Mesh &mesh, const Vector< int, FaceId > &face2basin, int numBasins)
constructs the graph from given mesh, heights in z-coordinate, and initial subdivision on basins
float lastMergeVolume
water volume in the basin when it was formed (by merge or creation)
Definition MRWatershedGraph.h:28
const Graph & graph() const
returns underlying graph where each basin is a vertex
Definition MRWatershedGraph.h:80
Graph::VertId merge(Graph::VertId v0, Graph::VertId v1)
merges basin v1 into basin v0, v1 is deleted after that, returns v0
Graph::VertId flowsTo(Graph::VertId v) const
returns the basin where the flow from this basin goes next (it can be self id if the basin is not ful...
float accVolume
accumulated water volume in the basin so far
Definition MRWatershedGraph.h:25
Vector< FaceBitSet, Graph::VertId > getAllBasinFaces(bool joinOverflowBasins=false) const
UndirectedEdgeBitSet getInterBasinEdges(bool joinOverflowBasins=false) const
BasinInfo()
Definition MRWatershedGraph.h:31
int numBasins() const
returns the current number of basins (excluding special "outside" basin)
Definition MRWatershedGraph.h:86
FaceBitSet getBasinFaces(Graph::VertId basin) const
returns the mesh faces of given basin
Graph::VertId getRootBasin(Graph::VertId v) const
for valid basin returns self id; for invalid basin returns the id of basin it was merged in
float area
precipitation area that flows in this basin (and if it is full, continue flowing next)
Definition MRWatershedGraph.h:22
float amountTillOverflow() const
Apparently I need this for MR::Vector to register default-constructibility inside the enclosing class...
Definition MRWatershedGraph.h:35
Graph::VertId mergeViaBd(Graph::EdgeId bd)
merges two basins sharing given boundary, returns remaining basin
BasinInfo & basinInfo(Graph::VertId v)
Definition MRWatershedGraph.h:90
Graph::VertId fullBasin
mesh vertex on the boundary of full basin and the other where it overflows
Definition MRWatershedGraph.h:145
float totalArea() const
returns total precipitation area
Definition MRWatershedGraph.h:83
const BasinInfo & basinInfo(Graph::VertId v) const
returns data associated with given basin
Definition MRWatershedGraph.h:89
float lowestLevel
lowest level (z-coordinate of lowestVert) in the basin
Definition MRWatershedGraph.h:21
VertId v
Definition MRWatershedGraph.h:144
std::vector< OverflowPoint > getOverflowPoints() const
returns all overflow points in the graph
GraphEdgeId EdgeId
Definition MRGraph.h:20
std::pair< Graph::EdgeId, float > findLowestBd() const
float lastMergeLevel
water level in the basin when it was formed (by merge or creation)
Definition MRWatershedGraph.h:27
const BdInfo & bdInfo(Graph::EdgeId e) const
returns data associated with given boundary between basins
Definition MRWatershedGraph.h:93
FaceBitSet getBasinFacesBelowLevel(Graph::VertId basin, float waterLevel) const
returns the mesh faces of given basin with at least one vertex below given level
double computeBasinVolume(Graph::VertId basin, float waterLevel) const
Graph::EdgeId overflowVia
when level=lowestBdLevel, volume=0, all water from this basin overflows via this boundary
Definition MRWatershedGraph.h:29
float approxLevel() const
approximate current level of water (z-coordinate) in the basin
Definition MRWatershedGraph.h:43
BdInfo & bdInfo(Graph::EdgeId e)
Definition MRWatershedGraph.h:94
GraphVertId VertId
Definition MRGraph.h:19
float lastUpdateAmount
the amount when accVolume was last updated
Definition MRWatershedGraph.h:26
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
associated with each vertex in graph
Definition MRWatershedGraph.h:19
associated with each edge in graph
Definition MRWatershedGraph.h:68
describes a point where a flow from one basin overflows into another basin
Definition MRWatershedGraph.h:143