47 assert( p >= 0 && p <= 1 );
77 [[nodiscard]]
const Graph &
graph()
const {
return graph_; }
80 [[nodiscard]]
float totalArea()
const {
return totalArea_; }
160 float totalArea_ = 0;
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:46
mathematical graph consisting from vertices and undirected edges
Definition MRGraph.h:14
const VertBitSet & validVerts() const
returns all valid vertices in the graph
Definition MRGraph.h:55
GraphEdgeId EdgeId
Definition MRGraph.h:17
GraphVertId VertId
Definition MRGraph.h:16
std::vector<T>-like container that requires specific indexing type,
Definition MRMesh/MRVector.h:20
graphs representing rain basins on the mesh
Definition MRWatershedGraph.h:12
MRMESH_API UndirectedEdgeBitSet getInterBasinEdges(bool joinOverflowBasins=false) const
MRMESH_API double computeBasinVolume(Graph::VertId basin, float waterLevel) const
MRMESH_API Vector< Graph::VertId, Graph::VertId > iniBasin2Tgt(bool joinOverflowBasins=false) const
MRMESH_API FaceBitSet getBasinFaces(Graph::VertId basin) const
returns the mesh faces of given basin
MRMESH_API std::vector< OverflowPoint > getOverflowPoints() const
returns all overflow points in the graph
MRMESH_API std::pair< Graph::EdgeId, float > findLowestBd() const
Graph::VertId outsideId() const
returns special "basin" representing outside areas of the mesh
Definition MRWatershedGraph.h:94
const Graph & graph() const
returns underlying graph where each basin is a vertex
Definition MRWatershedGraph.h:77
MRMESH_API Graph::VertId flowsFinallyTo(Graph::VertId v, bool exceptOutside=false) const
int numBasins() const
returns the current number of basins (excluding special "outside" basin)
Definition MRWatershedGraph.h:83
MRMESH_API FaceBitSet getBasinFacesBelowLevel(Graph::VertId basin, float waterLevel) const
returns the mesh faces of given basin with at least one vertex below given level
BasinInfo & basinInfo(Graph::VertId v)
Definition MRWatershedGraph.h:87
float totalArea() const
returns total precipitation area
Definition MRWatershedGraph.h:80
MRMESH_API void setParentsToRoots()
const BasinInfo & basinInfo(Graph::VertId v) const
returns data associated with given basin
Definition MRWatershedGraph.h:86
MRMESH_API Graph::VertId mergeViaBd(Graph::EdgeId bd)
merges two basins sharing given boundary, returns remaining basin
MRMESH_API Graph::VertId merge(Graph::VertId v0, Graph::VertId v1)
merges basin v1 into basin v0, v1 is deleted after that, returns v0
MRMESH_API 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...
const BdInfo & bdInfo(Graph::EdgeId e) const
returns data associated with given boundary between basins
Definition MRWatershedGraph.h:90
MRMESH_API 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
BdInfo & bdInfo(Graph::EdgeId e)
Definition MRWatershedGraph.h:91
MRMESH_API Vector< FaceBitSet, Graph::VertId > getAllBasinFaces(bool joinOverflowBasins=false) const
MRMESH_API 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
MRMESH_API float getHeightAt(VertId v) const
returns height at given vertex or FLT_MAX if the vertex is invalid
Definition MRCameraOrientationPlugin.h:8
Definition MRMesh/MRMesh.h:23
associated with each vertex in graph
Definition MRWatershedGraph.h:16
float lowestBdLevel
lowest position on the boundary of the basin
Definition MRWatershedGraph.h:20
void updateAccVolume(float amount)
updates accumulated volume in the basin to the moment of given precipitation amount
Definition MRWatershedGraph.h:52
VertId lowestVert
in the whole basin
Definition MRWatershedGraph.h:17
float maxVolume
full water volume to be accumulated in the basin till water reaches the lowest height on the boundary
Definition MRWatershedGraph.h:21
float lastMergeVolume
water volume in the basin when it was formed (by merge or creation)
Definition MRWatershedGraph.h:25
float accVolume
accumulated water volume in the basin so far
Definition MRWatershedGraph.h:22
BasinInfo()
Definition MRWatershedGraph.h:28
float area
precipitation area that flows in this basin (and if it is full, continue flowing next)
Definition MRWatershedGraph.h:19
float amountTillOverflow() const
Definition MRWatershedGraph.h:32
float lowestLevel
lowest level (z-coordinate of lowestVert) in the basin
Definition MRWatershedGraph.h:18
float lastMergeLevel
water level in the basin when it was formed (by merge or creation)
Definition MRWatershedGraph.h:24
Graph::EdgeId overflowVia
when level=lowestBdLevel, volume=0, all water from this basin overflows via this boundary
Definition MRWatershedGraph.h:26
float approxLevel() const
approximate current level of water (z-coordinate) in the basin
Definition MRWatershedGraph.h:40
float lastUpdateAmount
the amount when accVolume was last updated
Definition MRWatershedGraph.h:23
associated with each edge in graph
Definition MRWatershedGraph.h:65
VertId lowestVert
on this boundary
Definition MRWatershedGraph.h:66
describes a point where a flow from one basin overflows into another basin
Definition MRWatershedGraph.h:140
Graph::VertId overflowTo
Definition MRWatershedGraph.h:143
Graph::VertId fullBasin
Definition MRWatershedGraph.h:142
VertId v
Definition MRWatershedGraph.h:141