21#ifndef OPENSWMMVIS_LAYERS_SWMM2DRESULTSLAYER_H
22#define OPENSWMMVIS_LAYERS_SWMM2DRESULTSLAYER_H
30#include <ogr_spatialref.h>
53class IFeatureRenderer;
101 virtual bool isLive()
const {
return false; }
110 std::vector<double>& vy,
111 std::vector<double>& vz,
112 std::vector<std::array<int, 3>>& tris) = 0;
122 std::vector<double>& vy,
123 std::vector<double>& vz,
124 std::vector<std::array<int, 4>>&
cells)
126 std::vector<std::array<int, 3>> tris;
128 cells.resize(tris.size());
129 for (
size_t i = 0;
i < tris.size(); ++
i)
130 cells[
i] = { tris[
i][0], tris[
i][1], tris[
i][2], -1 };
150 virtual bool readDepthsAt(
int timeIdx, std::vector<float>& depths) = 0;
158 std::vector<float> row;
159 if (!
readDepthsAt(timeIdx, row) || cell < 0 || cell >=
static_cast<int>(row.size()))
161 out = row[
static_cast<size_t>(
cell)];
171 virtual QDateTime
simTimeAt(
int timeIdx)
const { (void)timeIdx;
return {}; }
185 (void)timeIdx; (void)flux;
196 std::vector<float>&
nx,
197 std::vector<float>&
ny)
220 (void)timeIdx; (void)vdepths;
239 std::vector<float>& values)
241 (void)dataset; (void)timeIdx; (void)values;
255 (void)dataset; (void)values;
276 std::vector<double> vy,
277 std::vector<double> vz,
278 std::vector<std::array<int,3>> tris);
286 std::vector<double> vy,
287 std::vector<double> vz,
288 std::vector<std::array<int,4>>
cells);
312 void pushFlux(std::vector<float> flux,
337 std::vector<float> rainCum,
360 void setEnvelopes(std::vector<float> maxDepth, std::vector<float> maxVel);
368 double dryDepth() const noexcept {
return dry_depth_; }
389 std::vector<float>
nx,
390 std::vector<float>
ny);
393 int vertexCount()
const override {
return static_cast<int>(vx_.size()); }
394 int triangleCount()
const override {
return static_cast<int>(cells_.size()); }
395 int timeCount()
const override {
return static_cast<int>(history_.size()); }
396 bool isLive()
const override {
return !finished_; }
422 void setMaxBytes(
size_t bytes) { max_bytes_ = bytes; enforceCap_(); }
423 size_t maxBytes() const noexcept {
return max_bytes_; }
427 std::vector<double>& vy,
428 std::vector<double>& vz,
429 std::vector<std::array<int, 3>>& tris)
override;
431 std::vector<double>& vy,
432 std::vector<double>& vz,
433 std::vector<std::array<int, 4>>&
cells)
override;
434 bool readDepthsAt(
int timeIdx, std::vector<float>& depths)
override;
435 QDateTime
simTimeAt(
int timeIdx)
const override;
437 bool readEdgeFluxAt(
int timeIdx, std::vector<float>& flux)
override;
439 std::vector<float>&
nx,
440 std::vector<float>&
ny)
override;
448 std::vector<float>& values)
override;
449 bool readFaceEnvelope(
const char* dataset, std::vector<float>& values)
override;
454 std::vector<float> toEdgeSlots_(std::vector<float>
a)
const;
456 std::vector<double> vx_, vy_, vz_;
457 std::vector<std::array<int,4>> cells_;
460 std::vector<float> depths;
461 std::vector<float> flux;
462 std::vector<float> vertex_depths;
463 std::vector<float> rainfall;
464 std::vector<float> rain_cum;
465 std::vector<float> heads;
467 double elapsed_sec = 0.0;
469 std::vector<Tick> history_;
470 bool has_rainfall_ =
false;
471 bool has_heads_ =
false;
472 bool has_flux_ =
false;
473 std::vector<float> env_max_depth_;
474 std::vector<float> env_max_vel_;
475 double dry_depth_ = 1
e-4;
476 int max_frames_ = 2000;
477 size_t max_bytes_ = 0;
479 bool finished_ =
false;
480 bool pinned_ =
false;
483 bool reconstructVelocity_(
int timeIdx, std::vector<float>& vx,
484 std::vector<float>& vy)
const;
488 std::vector<float> edge_length_;
489 std::vector<float> edge_nx_;
490 std::vector<float> edge_ny_;
504 const QString&
path() const noexcept {
return path_; }
511 std::vector<double>& vy,
512 std::vector<double>& vz,
513 std::vector<std::array<int, 3>>& tris)
override;
515 std::vector<double>& vy,
516 std::vector<double>& vz,
517 std::vector<std::array<int, 4>>&
cells)
override;
518 bool readDepthsAt(
int timeIdx, std::vector<float>& depths)
override;
519 QDateTime
simTimeAt(
int timeIdx)
const override;
521 bool readEdgeFluxAt(
int timeIdx, std::vector<float>& flux)
override;
523 std::vector<float>&
nx,
524 std::vector<float>&
ny)
override;
528 std::vector<float>& values)
override;
529 bool readFaceEnvelope(
const char* dataset, std::vector<float>& values)
override;
538 std::unique_ptr<openswmmvis::io::Mesh2DH5Reader> reader_;
539 QDateTime sim_start_;
540 std::vector<float> depth_buf_;
559 [[nodiscard]] QVector<OpenSWMM::Render::AttributeField>
631 [[nodiscard]]
bool followLive() const noexcept {
return follow_live_; }
659 double dryDepth() const noexcept {
return dry_depth_; }
664 [[nodiscard]] QVector<QPair<QString, QString>>
extendedMetadata()
const override;
677 double maxDepth() const noexcept {
return max_depth_; }
733 [[nodiscard]]
int colorClasses() const noexcept {
return color_classes_; }
748 [[nodiscard]]
bool isolines()
const;
776 void setRenderer(std::unique_ptr<OpenSWMM::Render::IFeatureRenderer> r);
809 [[nodiscard]] QVector<int>
pickCellsInRect(
const QRectF& sceneRect)
const;
821 [[nodiscard]]
int pickCellAt(
const QPointF& scenePt)
const;
870 float& outVx,
float& outVy)
const;
886 const QVector<float>& vertMax)
const;
982 [[nodiscard]]
const std::vector<int> &
triCellMap() const noexcept {
return triCell_; }
986 [[nodiscard]]
const std::vector<int> &
cellTriRange() const noexcept {
return cellTri0_; }
989 [[nodiscard]]
int cellCount() const noexcept {
return static_cast<int>(cells_.size()); }
995 [[nodiscard]] quint64
geomRevision() const noexcept {
return m_geomRevision; }
1022 bool loadFrame_(
int t);
1023 void rebuildSceneGeometry_();
1024 void applyCurrentDepths_();
1025 void applyCurrentFlux_();
1035 [[nodiscard]]
double resolveCoordinateScale_()
const;
1038 quint64 m_geomRevision = 0;
1043 OGRCoordinateTransformation *m_transform =
nullptr;
1047 mutable bool m_warnedUndeclaredCrs =
false;
1052 double m_fallbackMetresPerModelUnit = 1.0;
1056 [[nodiscard]]
int pickDisplayTriAt_(
const QPointF& scenePt)
const;
1059 [[nodiscard]]
float depthAtDisplayTriInterp_(
int triIdx,
const QPointF& scenePt)
const;
1061 std::unique_ptr<IMesh2DSource> source_;
1062 std::vector<double> vx_, vy_, vz_;
1068 std::vector<std::array<int,4>> cells_;
1069 std::vector<std::array<int,3>> tris_;
1070 std::vector<int> triCell_;
1071 std::vector<int> cellTri0_;
1072 std::vector<VertexDepthReconstruct::CellSplit> cellSplit_;
1073 std::vector<QPointF> cellCentroidScene_;
1074 std::vector<float> current_depths_;
1084 std::vector<float> cellZc_;
1085 std::vector<float> eta_vsum_;
1086 std::vector<float> eta_wsum_;
1087 std::vector<float> vdepth_;
1093 std::vector<float> vvx_;
1094 std::vector<float> vvy_;
1097 std::vector<float> current_flux_;
1098 std::vector<float> edge_length_;
1099 std::vector<float> edge_nx_;
1100 std::vector<float> edge_ny_;
1101 bool have_edge_geom_ =
false;
1102 bool have_velocity_ =
false;
1105 mutable int edge_flux_probe_ = 0;
1107 int current_time_idx_ = -1;
1108 bool follow_live_ =
true;
1109 bool live_render_enabled_ =
true;
1115 bool live_sync_pending_ =
false;
1116 bool live_range_dirty_ =
false;
1117 bool live_frame_dirty_ =
false;
1118 int last_range_hi_ = -1;
1119 void scheduleLiveSync_();
1125 mutable std::vector<float> vertMaxCache_;
1126 mutable std::vector<uint8_t> vertWetCache_;
1127 mutable int vertMaxFramesDone_ = 0;
1129 mutable int vertMaxGeneration_ = -1;
1130 double dry_depth_ = 1
e-4;
1131 double max_depth_ = 0.01;
1132 bool max_depth_user_set_ =
false;
1138 bool velocity_visible_ =
true;
1139 qreal velocity_opacity_ = 0.9;
1140 double velocity_arrow_scale_ = 30.0;
1141 double max_velocity_ = 1.0;
1142 bool max_velocity_user_set_ =
false;
1148 bool m_qsgOwnsRendering =
false;
1151 QSet<int> m_highlighted;
1156 std::unique_ptr<OpenSWMM::Render::IFeatureRenderer> m_renderer;
1161 int color_classes_ = 5;
1162 bool filled_contours_ =
false;
1163 double filled_contours_opacity_ = 0.60;
1164 int filled_contours_levels_ = 8;
1165 bool isolines_ =
false;
1166 int isolines_levels_ = 5;
1167 QColor isolines_color_ = QColor(20, 20, 20, 230);
1168 double isolines_width_ = 1.0;
1186 mutable QList<OpenSWMM::Render::ISublayer *> m_sublayerOrder;
1198 [[nodiscard]] QList<OpenSWMM::Render::ISublayer *>
sublayers()
const override;
1210 [[nodiscard]] QList<OpenSWMM::Render::LegendSymbolItem>
1232 [[nodiscard]] std::vector<std::unique_ptr<openswmmvis::ui::ILayerStyleSubject>>
1244 void buildRuleListLazy()
const;
1245 mutable std::unique_ptr<OpenSWMM::Render::RuleList> m_ruleList;
Definition swmm2dresultslayer.h:265
void pushDepths(std::vector< float > depths, QDateTime simTime, double elapsedSec)
Append one tick's worth of per-triangle depth.
Definition swmm2dresultslayer.cpp:995
size_t maxBytes() const noexcept
Definition swmm2dresultslayer.h:423
void pushRainfall(std::vector< float > rainfall, std::vector< float > rainCum, QDateTime simTime, double elapsedSec)
Append one tick's per-cell rainfall intensity (m/s) and cumulative rainfall volume (m³) — the live co...
Definition swmm2dresultslayer.cpp:1074
void pushHeads(std::vector< float > heads, QDateTime simTime, double elapsedSec)
Append one tick's per-cell water-surface elevation (m, swmm_2d_get_heads_bulk) — the live counterpart...
Definition swmm2dresultslayer.cpp:1098
bool readCells(std::vector< double > &vx, std::vector< double > &vy, std::vector< double > &vz, std::vector< std::array< int, 4 > > &cells) override
Fetch mesh geometry as CELLS: cells[i] = {v0,v1,v2,v3} with v3 == -1 for a triangle (cyclic order for...
Definition swmm2dresultslayer.cpp:1289
bool readDepthAt(int timeIdx, int cell, float &out) override
One cell's depth at timeIdx. The default copies the whole frame through readDepthsAt; a source holdin...
Definition swmm2dresultslayer.cpp:1171
QDateTime simTimeAt(int timeIdx) const override
Wall-clock sim time at timeIdx (invalid if out of range or unknown).
Definition swmm2dresultslayer.cpp:1311
void setHistoryPinned(bool pinned)
Hold the frame numbering still: while pinned, pushDepths and friends still append but the history cap...
Definition swmm2dresultslayer.cpp:1126
double dryDepth() const noexcept
Definition swmm2dresultslayer.h:368
bool readEdgeGeometry(std::vector< float > &length, std::vector< float > &nx, std::vector< float > &ny) override
Fetch time-invariant edge geometry (length + outward unit normal).
Definition swmm2dresultslayer.cpp:1334
void setEdgeGeometry(std::vector< float > length, std::vector< float > nx, std::vector< float > ny)
Install time-invariant edge geometry queried via swmm_2d_edge_get_geometry_bulk once at twoDInitializ...
Definition swmm2dresultslayer.cpp:1267
void markFinished()
Stop advertising as live once the run has ended. The retained in-memory history stays fully scrubbabl...
Definition swmm2dresultslayer.h:404
bool readMeshGeometry(std::vector< double > &vx, std::vector< double > &vy, std::vector< double > &vz, std::vector< std::array< int, 3 > > &tris) override
Fetch mesh geometry as a DISPLAY triangle fan. Resizes outputs.
Definition swmm2dresultslayer.cpp:1276
bool isLive() const override
True while this source is streaming from a running simulation (frames keep arriving)....
Definition swmm2dresultslayer.h:396
int vertexCount() const override
Geometry counts. Stable for the lifetime of the source.
Definition swmm2dresultslayer.h:393
void setMaxBytes(size_t bytes)
Byte budget for the retained history (0 = unlimited), checked alongside the frame cap....
Definition swmm2dresultslayer.h:422
int triangleCount() const override
Definition swmm2dresultslayer.h:394
int timeCount() const override
Latest known time-step count (grows during live mode).
Definition swmm2dresultslayer.h:395
int historyGeneration() const override
Bumps whenever frames are removed or reordered (a live source thinning its history),...
Definition swmm2dresultslayer.h:406
void pushVertexSignedDepths(std::vector< double > depths, QDateTime simTime, double elapsedSec)
Append one tick's worth of SIGNED per-vertex render depths (swmm_2d_vertex_get_render_depths_bulk — t...
Definition swmm2dresultslayer.cpp:1044
size_t historyBytes() const
Bytes held by the retained frames' payload vectors.
Definition swmm2dresultslayer.cpp:1132
bool readVertexDepthsAt(int timeIdx, std::vector< float > &vdepths) override
Fetch per-vertex SIGNED water depth (m) at timeIdx — the engine's wet-masked, depth-weighted render r...
Definition swmm2dresultslayer.cpp:1345
void setEnvelopes(std::vector< float > maxDepth, std::vector< float > maxVel)
Replace the cumulative per-cell envelopes (m, m/s) read via swmm_2d_get_stat_max_depths / _velocities...
Definition swmm2dresultslayer.cpp:1119
bool historyPinned() const noexcept
Definition swmm2dresultslayer.h:379
bool readDepthsAt(int timeIdx, std::vector< float > &depths) override
Fetch per-triangle depth at timeIdx. Resizes depths to triangleCount().
Definition swmm2dresultslayer.cpp:1301
int maxFrames() const noexcept
Definition swmm2dresultslayer.h:414
bool readFaceEnvelope(const char *dataset, std::vector< float > &values) override
Fetch a time-INVARIANT per-face [nFace] envelope written by the engine's ENVELOPES output group ("Mes...
Definition swmm2dresultslayer.cpp:1256
bool readEdgeFluxAt(int timeIdx, std::vector< float > &flux) override
Fetch per-edge signed normal flux at timeIdx.
Definition swmm2dresultslayer.cpp:1317
void setMaxFrames(int n)
Cap on retained frames (default 2000). Past the cap the OLDER half of the history is thinned 2:1 (fra...
Definition swmm2dresultslayer.h:413
void setDryDepth(double m)
Dry threshold (m) below which a cell's reconstructed velocity is zero — the engine's dry_depth cutoff...
Definition swmm2dresultslayer.h:367
bool readFaceFieldAt(const char *dataset, int timeIdx, std::vector< float > &values) override
Fetch one time slice of a named per-face field (engine SI units). Resized to triangleCount()....
Definition swmm2dresultslayer.cpp:1194
void pushFlux(std::vector< float > flux, QDateTime simTime, double elapsedSec)
Append one tick's worth of per-edge signed normal flux.
Definition swmm2dresultslayer.cpp:1018
bool hasFaceField(const char *dataset) const override
Definition swmm2dresultslayer.cpp:1180
Definition swmm2dresultslayer.h:498
~HDF5Mesh2DSource() override
int timeCount() const override
Latest known time-step count (grows during live mode).
Definition swmm2dresultslayer.cpp:1379
openswmmvis::io::CoordinateReference coordinateReference() const override
How the coordinates from readMeshGeometry relate to the model CRS — see openswmmvis::io::CoordinateRe...
Definition swmm2dresultslayer.cpp:1401
int vertexCount() const override
Geometry counts. Stable for the lifetime of the source.
Definition swmm2dresultslayer.cpp:1376
bool readEdgeFluxAt(int timeIdx, std::vector< float > &flux) override
Fetch per-edge signed normal flux at timeIdx.
Definition swmm2dresultslayer.cpp:1414
bool readMeshGeometry(std::vector< double > &vx, std::vector< double > &vy, std::vector< double > &vz, std::vector< std::array< int, 3 > > &tris) override
Fetch mesh geometry as a DISPLAY triangle fan. Resizes outputs.
Definition swmm2dresultslayer.cpp:1381
HDF5Mesh2DSource()
Definition swmm2dresultslayer.cpp:1364
bool readDepthsAt(int timeIdx, std::vector< float > &depths) override
Fetch per-triangle depth at timeIdx. Resizes depths to triangleCount().
Definition swmm2dresultslayer.cpp:1409
bool hasFaceField(const char *dataset) const override
Whether the source carries a named per-face [nTime, nFace] field beyond depth (e.g....
Definition swmm2dresultslayer.cpp:1419
bool readCells(std::vector< double > &vx, std::vector< double > &vy, std::vector< double > &vz, std::vector< std::array< int, 4 > > &cells) override
Fetch mesh geometry as CELLS: cells[i] = {v0,v1,v2,v3} with v3 == -1 for a triangle (cyclic order for...
Definition swmm2dresultslayer.cpp:1391
int triangleCount() const override
Definition swmm2dresultslayer.cpp:1378
bool readFaceEnvelope(const char *dataset, std::vector< float > &values) override
Fetch a time-INVARIANT per-face [nFace] envelope written by the engine's ENVELOPES output group ("Mes...
Definition swmm2dresultslayer.cpp:1430
bool readFaceFieldAt(const char *dataset, int timeIdx, std::vector< float > &values) override
Fetch one time slice of a named per-face field (engine SI units). Resized to triangleCount()....
Definition swmm2dresultslayer.cpp:1424
bool readVertexDepthsAt(int timeIdx, std::vector< float > &vdepths) override
Fetch per-vertex SIGNED water depth (m) at timeIdx — the engine's wet-masked, depth-weighted render r...
Definition swmm2dresultslayer.cpp:1443
const QString & path() const noexcept
Definition swmm2dresultslayer.h:504
void setSimulationStart(QDateTime t)
Anchor wall-clock time for the simulation start (so /time (seconds since start) maps back to a QDateT...
Definition swmm2dresultslayer.h:534
bool readEdgeGeometry(std::vector< float > &length, std::vector< float > &nx, std::vector< float > &ny) override
Fetch time-invariant edge geometry (length + outward unit normal).
Definition swmm2dresultslayer.cpp:1436
bool open(const QString &path)
Definition swmm2dresultslayer.cpp:1370
QDateTime simTimeAt(int timeIdx) const override
Wall-clock sim time at timeIdx (invalid if out of range or unknown).
Definition swmm2dresultslayer.cpp:1458
Abstract source of mesh geometry + per-triangle depth time series.
Definition swmm2dresultslayer.h:81
virtual bool readDepthAt(int timeIdx, int cell, float &out)
One cell's depth at timeIdx. The default copies the whole frame through readDepthsAt; a source holdin...
Definition swmm2dresultslayer.h:156
virtual bool readEdgeFluxAt(int timeIdx, std::vector< float > &flux)
Fetch per-edge signed normal flux at timeIdx.
Definition swmm2dresultslayer.h:183
virtual bool readFaceEnvelope(const char *dataset, std::vector< float > &values)
Fetch a time-INVARIANT per-face [nFace] envelope written by the engine's ENVELOPES output group ("Mes...
Definition swmm2dresultslayer.h:253
virtual int timeCount() const =0
Latest known time-step count (grows during live mode).
virtual bool readEdgeGeometry(std::vector< float > &length, std::vector< float > &nx, std::vector< float > &ny)
Fetch time-invariant edge geometry (length + outward unit normal).
Definition swmm2dresultslayer.h:195
virtual bool readMeshGeometry(std::vector< double > &vx, std::vector< double > &vy, std::vector< double > &vz, std::vector< std::array< int, 3 > > &tris)=0
Fetch mesh geometry as a DISPLAY triangle fan. Resizes outputs.
virtual int historyGeneration() const
Bumps whenever frames are removed or reordered (a live source thinning its history),...
Definition swmm2dresultslayer.h:168
virtual bool readCells(std::vector< double > &vx, std::vector< double > &vy, std::vector< double > &vz, std::vector< std::array< int, 4 > > &cells)
Fetch mesh geometry as CELLS: cells[i] = {v0,v1,v2,v3} with v3 == -1 for a triangle (cyclic order for...
Definition swmm2dresultslayer.h:121
virtual bool readFaceFieldAt(const char *dataset, int timeIdx, std::vector< float > &values)
Fetch one time slice of a named per-face field (engine SI units). Resized to triangleCount()....
Definition swmm2dresultslayer.h:238
virtual bool isLive() const
True while this source is streaming from a running simulation (frames keep arriving)....
Definition swmm2dresultslayer.h:101
virtual bool hasFaceField(const char *dataset) const
Whether the source carries a named per-face [nTime, nFace] field beyond depth (e.g....
Definition swmm2dresultslayer.h:230
virtual QDateTime simTimeAt(int timeIdx) const
Wall-clock sim time at timeIdx (invalid if out of range or unknown).
Definition swmm2dresultslayer.h:171
virtual int triangleCount() const =0
virtual ~IMesh2DSource()=default
virtual openswmmvis::io::CoordinateReference coordinateReference() const
How the coordinates from readMeshGeometry relate to the model CRS — see openswmmvis::io::CoordinateRe...
Definition swmm2dresultslayer.h:144
virtual int vertexCount() const =0
Geometry counts. Stable for the lifetime of the source.
virtual bool readVertexDepthsAt(int timeIdx, std::vector< float > &vdepths)
Fetch per-vertex SIGNED water depth (m) at timeIdx — the engine's wet-masked, depth-weighted render r...
Definition swmm2dresultslayer.h:218
virtual bool readDepthsAt(int timeIdx, std::vector< float > &depths)=0
Fetch per-triangle depth at timeIdx. Resizes depths to triangleCount().
An axis-aligned bounding box in the coordinate space of a given CRS.
Definition mapextent.h:26
Definition scalarfillsublayer.h:104
Definition contourbandsublayer.h:111
Interface every themeable layer implements so renderer panels can populate attribute combos without h...
Definition iattributeprovider.h:73
Abstract interface — every vector layer's paint path goes here.
Definition ifeaturerenderer.h:85
Mixin interface for layers that expose a list of ISublayers.
Definition isublayerhost.h:64
Definition isolinesublayer.h:142
Definition meshedgesublayer.h:110
Definition meshfillsublayer.h:183
Definition meshnodesublayer.h:80
Ordered owning container for Rules on one layer.
Definition rulelist.h:48
Definition scalarfillsublayer.h:142
Definition velocityvectorsublayer.h:147
Abstract base class for all layers displayed in the MapCanvas.
Definition openswmmvislayer.h:116
QString name() const
Returns the user-visible name of this layer.
Definition openswmmvislayer.cpp:62
@ SWMM2DResultsLayer
Definition openswmmvislayer.h:150
Top-level project container managing sessions, the SWMM model layer, and persistence paths for one SW...
Definition openswmmvisworkspace.h:42
Definition swmm2dresultslayer.cpp:249
Definition swmm2dresultslayer.h:550
void setDryDepth(double d)
Definition swmm2dresultslayer.cpp:2042
bool filledContours() const
Show filled-band contour polygons over the heatmap (off by default). Gap A3.1 — facades over the Cont...
Definition swmm2dresultslayer.cpp:2169
void highlightedCellsChanged()
bool liveRenderEnabled() const noexcept
Definition swmm2dresultslayer.h:644
bool velocityVectorsVisible() const
Whether centroid arrow glyphs are drawn over the depth fill.
Definition swmm2dresultslayer.cpp:2078
bool followLive() const noexcept
Definition swmm2dresultslayer.h:631
OpenSWMM::Render::CellDepthFillSublayer * cellDepthFillSublayer() const
Definition swmm2dresultslayer.h:1222
std::pair< float, int > currentPeak() const
Statistic on the current frame — useful for the status-bar peak readout.
Definition swmm2dresultslayer.cpp:2288
OpenSWMM::Render::IsolineSublayer * isolineSublayer() const
Definition swmm2dresultslayer.h:1226
QVector< float > maxDepthPerVertex() const
Per-**vertex** maximum water depth (m), the temporal max of the per-frame signed vertex reconstructio...
Definition swmm2dresultslayer.cpp:2587
ColorRampStyle colorRampStyle() const noexcept
Definition swmm2dresultslayer.h:730
QVector< QPointF > m_sceneVerts
Definition swmm2dresultslayer.h:966
void closeSource()
Release the active source — closes its underlying HDF5 handle (when the source is an HDF5Mesh2DSource...
Definition swmm2dresultslayer.cpp:2009
float maxDepthAtSceneInterp(const QPointF &scenePt, const QVector< float > &vertMax) const
Barycentrically interpolated max water depth (m) at scenePt from a precomputed per-vertex max array v...
Definition swmm2dresultslayer.cpp:2644
OpenSWMM::Render::VelocityVectorSublayer * velocityVectorSublayer() const
Definition swmm2dresultslayer.h:1228
QList< OpenSWMM::Render::ISublayer * > sublayers() const override
The ordered list of sublayers owned by this layer.
Definition swmm2dresultslayer.cpp:1583
double velocityArrowScale() const
Per-glyph pixel scale: arrow_length_px = scale * log1p(vmag / vmagRef). Default 30 — a 1 m/s velocity...
Definition swmm2dresultslayer.cpp:2113
const std::vector< std::array< int, 4 > > & cellVertexIndices() const noexcept
Definition swmm2dresultslayer.h:978
bool velocityAtScene(const QPointF &scenePt, float &outVx, float &outVy) const
Barycentrically-interpolated scene-space velocity (m/s) at scenePt, from the per-vertex velocity fiel...
Definition swmm2dresultslayer.cpp:2531
void setFilledContoursLevels(int n)
Definition swmm2dresultslayer.cpp:2209
bool hasVelocityData() const noexcept
Whether the active source produced both edge geometry and a flux slice — i.e. whether the velocity ov...
Definition swmm2dresultslayer.h:712
void setFallbackCoordinateScale(double metresPerModelUnit)
Metres per model-CRS linear unit, for sources that declare none.
Definition swmm2dresultslayer.cpp:3251
void rendererChanged()
Emitted when setRenderer() swaps the renderer pointer.
void setMaxVelocity(double v)
Definition swmm2dresultslayer.cpp:2132
int currentTimeIndex() const noexcept
Current time index displayed on the canvas. -1 = no frame yet.
Definition swmm2dresultslayer.h:603
QVector< QPair< QString, QString > > extendedMetadata() const override
Ordered key→value pairs of TYPE-SPECIFIC metadata, rendered by the Metadata tab below the common bloc...
Definition swmm2dresultslayer.cpp:1941
double depthToMeshUnits() const
Factor that takes a 2D result DEPTH (engine SI metres — every depth accessor on this layer returns me...
Definition swmm2dresultslayer.h:837
const std::vector< int > & triCellMap() const noexcept
Definition swmm2dresultslayer.h:982
OpenSWMM::Render::RuleList * ruleList() override
Definition swmm2dresultslayer.cpp:3533
void setIsolinesColor(QColor c)
Definition swmm2dresultslayer.cpp:2260
void setColorRampStyle(ColorRampStyle s)
Definition swmm2dresultslayer.cpp:2146
~SWMM2DResultsLayer() override
Definition swmm2dresultslayer.cpp:1577
void setColorClasses(int n)
Definition swmm2dresultslayer.cpp:2154
QString sourceDescription() const override
Human-readable source of this layer: a file path, a service URL, or a description for in-memory / der...
Definition swmm2dresultslayer.cpp:1932
void setSource(std::unique_ptr< IMesh2DSource > source)
Swap the data source. Triggers a one-time mesh-geometry rebuild; the current time index is clamped to...
Definition swmm2dresultslayer.cpp:1663
int colorClasses() const noexcept
Definition swmm2dresultslayer.h:733
void highlightCells(const QSet< int > &triIdxSet)
Replace the highlight set. Triggers an Overlay repaint via the layer's existing invalidate path.
Definition swmm2dresultslayer.cpp:2674
float depthAtSceneNow(const QPointF &scenePt) const
Current-frame water depth (m) at scenePt: locates the containing cell via pickCellAt and returns its ...
Definition swmm2dresultslayer.cpp:2454
IMesh2DSource * source() noexcept
Definition swmm2dresultslayer.h:575
bool isolines() const
Stroke iso-depth contour lines over the heatmap (off by default). Gap A3.1 — facades over the Isoline...
Definition swmm2dresultslayer.cpp:2220
void cellHovered(int triIdx)
QVector< int > pickCellsInRect(const QRectF &sceneRect) const
Return CELL indices whose scene-space (area) centroid falls inside sceneRect. Linear scan over the ce...
Definition swmm2dresultslayer.cpp:2369
void setFollowLive(bool on) noexcept
Follow-latest behavior for a LIVE (streaming) source. When on (the default), refreshTimeRange() advan...
Definition swmm2dresultslayer.h:630
OpenSWMM::Render::MeshFillSublayer * meshFillSublayer() const
Definition swmm2dresultslayer.h:1214
bool hasEdgeFluxData() const
Whether the run carries per-edge flux data at all, independent of the current frame....
Definition swmm2dresultslayer.cpp:1645
quint64 geomRevision() const noexcept
Definition swmm2dresultslayer.h:995
int pickCellAt(const QPointF &scenePt) const
Return the CELL containing scenePt, or -1 (barycentric test on the display fan, mapped to the owning ...
Definition swmm2dresultslayer.cpp:2422
QVector< OpenSWMM::Render::AttributeField > availableAttributes(OpenSWMMVis::SwmmCategory cat) const override
Definition swmm2dresultslayer.cpp:3509
void currentDateTimeChanged(const QDateTime &dt)
Emitted alongside currentTimeChanged(int) with the QDateTime of the frame (or invalid if the source h...
QVector< SceneTri > m_sceneTris
Definition swmm2dresultslayer.h:943
void populateScene(QGraphicsScene *scene, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
Creates / updates QGraphicsItems representing this layer in the scene.
Definition swmm2dresultslayer.cpp:3190
void setIsolinesWidth(double px)
Definition swmm2dresultslayer.cpp:2277
void currentTimeChanged(int t)
float depthAtCellInterp(int triIdx, const QPointF &scenePt) const
Barycentrically interpolated current-frame depth (m) at scenePt when its containing cell index is alr...
Definition swmm2dresultslayer.cpp:2466
OpenSWMM::Render::MeshEdgeSublayer * meshEdgeSublayer() const
Definition swmm2dresultslayer.h:1216
void setVelocityArrowScale(double scale)
Definition swmm2dresultslayer.cpp:2120
OpenSWMM::Render::IFeatureRenderer * renderer() const
The IFeatureRenderer that will drive this layer's paint pass.
Definition swmm2dresultslayer.cpp:1630
void refreshScene(QGraphicsScene *scene, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
Smart scene refresh — updates existing items instead of destroying and recreating.
Definition swmm2dresultslayer.cpp:3239
std::vector< std::unique_ptr< openswmmvis::ui::ILayerStyleSubject > > styleSubjects() override
Definition swmm2dresultslayer.cpp:3786
void setCurrentSimTimeAsOf(QDateTime cursor)
Set the current frame causally: the latest frame whose simulation time is at or before cursor (floor)...
Definition swmm2dresultslayer.cpp:2335
void setFilledContours(bool on)
Definition swmm2dresultslayer.cpp:2175
bool qsgOwnsRendering() const noexcept
Definition swmm2dresultslayer.h:672
OpenSWMM::Render::ContourBandSublayer * contourBandSublayer() const
Definition swmm2dresultslayer.h:1220
MeshSpatialGrid m_triGrid
Definition swmm2dresultslayer.h:946
void setCurrentTimeIndex(int t)
Definition swmm2dresultslayer.cpp:1839
void setVelocityVectorsVisible(bool v)
Definition swmm2dresultslayer.cpp:2084
QList< OpenSWMM::Render::LegendSymbolItem > sublayerLegendItems() const
Definition swmm2dresultslayer.cpp:3343
void setIsolinesLevels(int n)
Definition swmm2dresultslayer.cpp:2242
void depopulateScene(QGraphicsScene *scene) override
Removes all QGraphicsItems belonging to this layer from the scene.
Definition swmm2dresultslayer.cpp:3213
OpenSWMM::Render::SmoothDepthFillSublayer * smoothDepthFillSublayer() const
Definition swmm2dresultslayer.h:1224
void setQsgOwnsRendering(bool own)
Definition swmm2dresultslayer.cpp:1902
QVector< int > pickCellsInPolygon(const QPolygonF &scenePoly) const
Return CELL indices whose scene-space centroid falls inside scenePoly (odd-even fill rule)....
Definition swmm2dresultslayer.cpp:2382
bool moveSublayer(int from, int to) override
Definition swmm2dresultslayer.cpp:1614
void setRenderer(std::unique_ptr< OpenSWMM::Render::IFeatureRenderer > r)
Replaces the current renderer.
Definition swmm2dresultslayer.cpp:1635
const QSet< int > & highlightedCells() const noexcept
Current highlight set (read-only).
Definition swmm2dresultslayer.h:896
bool cellHasSurface(int triIdx) const
True when any corner of cell triIdx carries a valid free surface η this frame (signed per-vertex dept...
Definition swmm2dresultslayer.cpp:2518
void setMaxDepth(double d)
Definition swmm2dresultslayer.cpp:2063
double maxVelocity() const noexcept
Upper end of the velocity colour ramp (m/s). Auto-tracks the running max unless explicitly set.
Definition swmm2dresultslayer.h:704
void clearHighlights()
Add to / clear the highlight set.
Definition swmm2dresultslayer.cpp:2687
void setFilledContoursOpacity(double a)
Definition swmm2dresultslayer.cpp:2191
OpenSWMM::Render::MeshNodeSublayer * meshNodeSublayer() const
Definition swmm2dresultslayer.h:1218
const std::vector< int > & cellTriRange() const noexcept
Definition swmm2dresultslayer.h:986
void setLiveRenderEnabled(bool on)
Master on/off gate for LIVE (streaming) rendering during a run. Distinct from followLive (which only ...
Definition swmm2dresultslayer.cpp:1913
double isolinesWidth() const
Definition swmm2dresultslayer.cpp:2270
double maxDepth() const noexcept
Upper end of the colour ramp (metres). Auto-tracks the global max depth seen so far across all loaded...
Definition swmm2dresultslayer.h:677
QRectF m_sceneBBox
Definition swmm2dresultslayer.h:942
float depthAtSceneInterp(const QPointF &scenePt) const
Current-frame water depth (m) at scenePt, barycentrically interpolated from the containing cell's per...
Definition swmm2dresultslayer.cpp:2461
int cellCount() const noexcept
Definition swmm2dresultslayer.h:989
void setIsolines(bool on)
Definition swmm2dresultslayer.cpp:2225
const std::vector< std::array< int, 3 > > & triVertexIndices() const noexcept
Definition swmm2dresultslayer.h:973
int isolinesLevels() const
Definition swmm2dresultslayer.cpp:2235
qreal velocityOpacity() const
Overall alpha applied to all arrow glyphs, 0..1. Default 0.9.
Definition swmm2dresultslayer.cpp:2095
QVector< SceneEdge > m_sceneEdges
Definition swmm2dresultslayer.h:959
QColor isolinesColor() const
Definition swmm2dresultslayer.cpp:2253
ColorRampStyle
How depth is mapped to colour in the per-cell heatmap pass.
Definition swmm2dresultslayer.h:729
double filledContoursOpacity() const
Definition swmm2dresultslayer.cpp:2185
void refreshTimeRange()
Re-query source()->timeCount() and emit timeRangeChanged if it grew. Used by the runner's per-tick re...
Definition swmm2dresultslayer.cpp:1974
void setCurrentSimTime(QDateTime t)
Set the current frame by nearest simulation time. Used to keep the 2D layer in step with the existing...
Definition swmm2dresultslayer.cpp:2295
double dryDepth() const noexcept
Dry-cell depth threshold in metres. Cells below this draw with alpha 0.
Definition swmm2dresultslayer.h:659
void onCanvasCRSChanged(const SpatialReferenceSystem *newCanvasSRS) override
Called when the user changes the canvas CRS so layers can pre-compute any CRS-dependent transform cac...
Definition swmm2dresultslayer.cpp:3311
void timeRangeChanged(int lo, int hi)
void setVelocityOpacity(qreal alpha)
Definition swmm2dresultslayer.cpp:2101
void refreshCurrentFrame()
Re-read and re-apply the current frame without moving the cursor.
Definition swmm2dresultslayer.cpp:1849
int filledContoursLevels() const
Definition swmm2dresultslayer.cpp:2202
const IMesh2DSource * source() const noexcept
Definition swmm2dresultslayer.h:576
Definition swmm2dresultslayer.cpp:768
Represents a coordinate reference system backed by a GDAL OGRSpatialReference.
Definition spatialreferencesystem.h:28
Dynamic marching-squares filled-contour-bands sublayer over a 2D mesh. Plan §3 — fifth sublayer in th...
size_t i
Definition contourjob.cpp:27
DiagramType t
Definition diagramspec.cpp:20
Layer-side seam for "what attributes can I theme by?" — Slice DM.1.
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:82
QGraphicsScene * scene
Definition inletdrawingview.cpp:78
int e
Definition inpmeshreader.cpp:41
Dynamic marching-squares isoline sublayer over a 2D mesh. Plan §3 — fourth sublayer in the SWMM2DResu...
Mixin interface for layers that own a list of ISublayers.
One row in a layer's legend — label + swatch symbol + optional range.
Axis-aligned bounding box in a map coordinate system, used by MapCanvas and all layer types to define...
MaskMode m
Definition maskspec.cpp:18
std::vector< double > nx
Definition mesh2dresultsexport.cpp:448
std::vector< mesh::MeshTriangle > cells
Definition mesh2dresultsexport.cpp:102
std::vector< double > ny
Definition mesh2dresultsexport.cpp:448
std::size_t n
Definition mesh2dresultsexport.cpp:426
std::vector< int > cell
Definition mesh2dresultsexport.cpp:609
Stylable wireframe-edge sublayer for the 2D mesh.
Static terrain-fill sublayer for the 2D mesh.
Stylable mesh-vertex marker sublayer.
double length
Definition meshpatch.cpp:64
int a
Definition meshquadmatch.cpp:46
Definition gisrasterlayer.h:40
SwmmCategory
Stable ordinal categorising every SWMM-element kind that has per-kind styling, per-kind tree rows,...
Definition swmm_category.h:28
Definition gdaldrivers.h:22
Abstract base class for all map layers displayed in the MapCanvas.
QVector< int > v
pool vertex indices
Definition pslgminsize.cpp:159
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
Per-cell (flat) and per-vertex (Gouraud) scalar-fill sublayers over a 2D mesh. Unlike ContourBandSubl...
Uniform spatial grid index over a set of axis-aligned bboxes.
Definition meshspatialgrid.h:63
Definition swmm2dresultslayer.h:955
QPointF a
Definition swmm2dresultslayer.h:956
QPointF b
Definition swmm2dresultslayer.h:956
float slope
Definition swmm2dresultslayer.h:957
Definition swmm2dresultslayer.h:915
QPointF a
Definition swmm2dresultslayer.h:916
float vy
Scene-space velocity y (m/s).
Definition swmm2dresultslayer.h:938
QPointF centroid
Scene-space centroid; cached at rebuildSceneGeometry_.
Definition swmm2dresultslayer.h:917
float dv2
Definition swmm2dresultslayer.h:936
float depth
Cell-centre depth (m) — drives the heatmap fill.
Definition swmm2dresultslayer.h:918
QPointF c
Definition swmm2dresultslayer.h:916
float vmag
|v| in m/s, computed in model coords.
Definition swmm2dresultslayer.h:939
float vx
Scene-space velocity x (m/s; sign flipped to match scene Y).
Definition swmm2dresultslayer.h:937
QPointF b
Definition swmm2dresultslayer.h:916
float dv0
Definition swmm2dresultslayer.h:934
float dv1
Definition swmm2dresultslayer.h:935
How a 2D result source's XY coordinates relate to the model's CRS.
Definition mesh2dh5reader.h:91
Dynamic velocity-arrow glyph sublayer over a 2D mesh. Plan §3 — third sublayer in the SWMM2DResultsLa...
Depth-weighted, wet-masked free-surface reconstruction at mesh vertices — the GUI mirror of the engin...