47 assert( p >= 0 && p <= 1 );
74 [[nodiscard]] MRMESH_API
float getHeightAt(
VertId v )
const;
77 [[nodiscard]]
const Graph & graph()
const {
return graph_; }
80 [[nodiscard]]
float totalArea()
const {
return totalArea_; }
83 [[nodiscard]]
int numBasins()
const {
return (
int)graph_.validVerts().count() - 1; }
86 [[nodiscard]]
const BasinInfo &
basinInfo( Graph::VertId v )
const {
return basins_[v]; }
87 [[nodiscard]] BasinInfo &
basinInfo( Graph::VertId v ) {
return basins_[v]; }
90 [[nodiscard]]
const BdInfo &
bdInfo( Graph::EdgeId e )
const {
return bds_[e]; }
91 [[nodiscard]] BdInfo &
bdInfo( Graph::EdgeId e ) {
return bds_[e]; }
94 [[nodiscard]] Graph::VertId outsideId()
const {
return outsideId_; }
97 [[nodiscard]] MRMESH_API Graph::VertId getRootBasin( Graph::VertId v )
const;
100 [[nodiscard]] MRMESH_API Graph::VertId flowsTo( Graph::VertId v )
const;
104 [[nodiscard]] MRMESH_API Graph::VertId flowsFinallyTo( Graph::VertId v,
bool exceptOutside =
false )
const;
112 [[nodiscard]] MRMESH_API std::pair<Graph::EdgeId, float> findLowestBd()
const;
115 MRMESH_API Graph::VertId
merge( Graph::VertId v0, Graph::VertId v1 );
118 MRMESH_API Graph::VertId
mergeViaBd( Graph::EdgeId bd );
121 [[nodiscard]] MRMESH_API FaceBitSet getBasinFaces( Graph::VertId basin )
const;
125 [[nodiscard]] MRMESH_API Vector<FaceBitSet, Graph::VertId> getAllBasinFaces(
bool joinOverflowBasins =
false )
const;
128 [[nodiscard]] MRMESH_API FaceBitSet getBasinFacesBelowLevel( Graph::VertId basin,
float waterLevel )
const;
132 [[nodiscard]] MRMESH_API
double computeBasinVolume( Graph::VertId basin,
float waterLevel )
const;
136 [[nodiscard]] MRMESH_API UndirectedEdgeBitSet getInterBasinEdges(
bool joinOverflowBasins =
false )
const;
147 [[nodiscard]] MRMESH_API std::vector<OverflowPoint> getOverflowPoints()
const;
160 float totalArea_ = 0;
Definition MRMesh/MRMesh.h:23
std::vector<T>-like container that requires specific indexing type,
Definition MRVector.h:19
unsafe WatershedGraph(MR._ByValue_WatershedGraph _other)
unsafe new MR.WatershedGraph.BasinInfo basinInfo(MR.GraphVertId v)
unsafe MR.GraphVertId mergeViaBd(MR.GraphEdgeId bd)
unsafe void setParentsToRoots()
unsafe new MR.WatershedGraph.BdInfo bdInfo(MR.GraphEdgeId e)
unsafe MR.GraphVertId merge(MR.GraphVertId v0, MR.GraphVertId v1)
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
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