47 assert( p >= 0 && p <= 1 );
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;
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;
#define MRMESH_API
Definition MRMeshFwd.h:80
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)
Definition MRCameraOrientationPlugin.h:8
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