10#ifndef SWMMRESULTSLAYER_H
11#define SWMMRESULTSLAYER_H
18#include <openswmm/engine/openswmm_output.h>
35class QGraphicsSimpleTextItem;
47class IFeatureRenderer;
156 [[nodiscard]] QVector<QPair<QString, QString>>
extendedMetadata()
const override;
231 bool openResults(QList<QString> &warnings, QList<QString> &errors);
264 [[nodiscard]]
bool isLive() const noexcept {
return m_live; }
442 void setRenderer(std::unique_ptr<OpenSWMM::Render::IFeatureRenderer> r);
469 std::unique_ptr<OpenSWMM::Render::IFeatureRenderer> r);
506 [[nodiscard]] QColor
colorForClass(
const QString &classKey)
const;
508 [[nodiscard]] qreal
sizeForClass(
const QString &classKey)
const;
526 [[nodiscard]] QVector<OpenSWMM::Render::AttributeField>
617 [[nodiscard]] QList<OpenSWMM::Render::ISublayer *>
sublayers()
const override;
660 [[nodiscard]] QList<OpenSWMM::Render::LegendSymbolItem>
666 [[nodiscard]] std::vector<std::unique_ptr<openswmmvis::ui::ILayerStyleSubject>>
715 bool finishOpen(qint64 msOpen, QList<QString> &warnings, QList<QString> &errors);
717 void fetchResultsForStep(
int step);
718 void buildOutputIdMaps();
723 void restyleScene(QGraphicsScene *
scene);
730 void refreshLabels(QGraphicsScene *
scene);
737 bool requiresStructuralRebuildForRestyle()
const;
745 QPair<double, double> ensureNodeAttributeRange(
int outCode);
746 QPair<double, double> ensureLinkAttributeRange(
int outCode);
747 QPair<double, double> ensureSubcatchAttributeRange(
int outCode);
750 SWMM_Output m_handle =
nullptr;
753 QString m_resultsFilePath;
754 QString m_reportFilePath;
755 QString m_scenarioName;
756 QColor m_profileLineColor;
757 int m_reportStepSec = 0;
762 QPen m_profileHglLinePen;
763 QBrush m_profileHglFillBrush;
764 QPen m_profileEglLinePen;
765 QPen m_profileMaxHglLinePen;
766 QBrush m_profileMaxHglFillBrush;
767 QPen m_profileMaxEglLinePen;
773 int m_currentStep = 0;
774 int m_totalSteps = 0;
776 QDateTime m_startDateTime;
777 QDateTime m_endDateTime;
779 QDateTime m_reportedStartDateTime;
784 bool m_showLegend =
true;
790 std::unique_ptr<OpenSWMM::Render::IFeatureRenderer> m_renderer;
797 std::vector<std::unique_ptr<OpenSWMM::Render::IFeatureRenderer>> m_kindRenderers;
800 mutable std::unique_ptr<OpenSWMM::Render::RuleList> m_ruleList;
804 bool m_ruleKindSyncGuard =
false;
805 void buildRuleListLazy()
const;
809 void rebinDynamicRulesIfNeeded();
831 mutable QHash<QString, QVector<QString>> m_categoricalAttrCache;
845 void rebuildAllActiveKindFeatureOverrides();
853 void reclassifyKindsForResolvedRange(
int scope,
int outCode);
856 QVector<float> m_nodeResults;
857 QVector<float> m_linkResults;
858 QVector<float> m_subcatchResults;
867 QHash<int, QVector<float>> m_nodeResultsByVar;
868 QHash<int, QVector<float>> m_linkResultsByVar;
869 QHash<int, QVector<float>> m_subcatchResultsByVar;
876 QHash<int, QPair<double, double>> m_nodeAttributeRange;
877 QHash<int, QPair<double, double>> m_linkAttributeRange;
878 QHash<int, QPair<double, double>> m_subcatchAttributeRange;
885 QSet<int> m_nodeRangePending;
886 QSet<int> m_linkRangePending;
887 QSet<int> m_subcatchRangePending;
890 QHash<QString, int> m_nodeOutputIdx;
891 QHash<QString, int> m_linkOutputIdx;
892 QHash<QString, int> m_subcatchOutputIdx;
901 double maxFlow = 0.0, maxVelocity = 0.0, maxFilling = 0.0;
902 double volFlow = 0.0, surchargeTimeHr = 0.0;
904 double pumpCycles = 0.0, pumpOnTimeHr = 0.0, pumpVolume = 0.0;
906 struct SubcatchStats {
907 double precipVol = 0.0, runoffVol = 0.0, maxRunoff = 0.0;
915 double maxDepth = 0.0, maxOverflow = 0.0;
916 double volFlooded = 0.0;
919 double timeFloodedHr = 0.0;
921 mutable QHash<int, LinkStats> m_linkStats;
922 mutable QHash<int, SubcatchStats> m_subcatchStats;
923 mutable QHash<int, NodeStats> m_nodeStats;
928 [[nodiscard]] LinkStats linkStatsFor(
int outIdx)
const;
929 [[nodiscard]] SubcatchStats subcatchStatsFor(
int outIdx)
const;
930 [[nodiscard]] NodeStats nodeStatsFor(
int outIdx)
const;
933 class OGRCoordinateTransformation *m_transform =
nullptr;
948 mutable QList<OpenSWMM::Render::ISublayer *> m_sublayerOrder;
958 enum class SceneDirty :
int { Clean = 0, Values = 1, Structural = 2 };
959 SceneDirty m_sceneDirty { SceneDirty::Structural };
981 void escalateSceneDirty(SceneDirty next);
An axis-aligned bounding box in the coordinate space of a given CRS.
Definition mapextent.h:26
One paint pass for a single OpenSWMMVis::SwmmCategory.
Definition featuresublayer.h:42
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
Ordered owning container for Rules on one layer.
Definition rulelist.h:48
D-G1 warn-on-miss (Y2b-3): a saved theme or series may name a species the currently-open run does not...
Definition speciesattributes.h:112
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
Top-level project container managing sessions, the SWMM model layer, and persistence paths for one SW...
Definition openswmmvisworkspace.h:42
Renders the SWMM network elements (nodes, links, subcatchments, rain gages) for one OpenSWMMEngine mo...
Definition swmmmodellayer.h:133
static constexpr Category NumCategories
Definition swmmmodellayer.h:167
Overlays time-stepped simulation results on the SWMM network geometry.
Definition swmmresultslayer.h:96
void setProfileHglLinePen(const QPen &pen)
Definition swmmresultslayer.cpp:591
void readProfileStyle(class QSettings &settings)
Companion of writeProfileStyle. Reads any of the six keys present at the current QSettings position a...
Definition swmmresultslayer.cpp:654
bool moveSublayer(int from, int to) override
Definition swmmresultslayer.cpp:423
void setColorForClass(const QString &classKey, const QColor &color)
Definition swmmresultslayer.cpp:2752
void setProfileLineColor(const QColor &color)
Definition swmmresultslayer.cpp:567
double nodeStatVolFlooded(const QString &nodeName) const
Definition swmmresultslayer.cpp:1103
QColor profileLineColor
Definition swmmresultslayer.h:104
void setProfileEglLinePen(const QPen &pen)
Definition swmmresultslayer.cpp:603
int linkOutputIndex(const QString &name) const
Output-file index for the named link, or -1.
Definition swmmresultslayer.cpp:730
void closeResults()
Definition swmmresultslayer.cpp:1006
OpenSWMM::Render::FeatureSublayer * featureSublayer(SWMMModelLayer::Category c) const
Definition swmmresultslayer.cpp:435
OpenSWMM::Render::IFeatureRenderer * renderer() const
The IFeatureRenderer that will drive this layer's paint pass.
Definition swmmresultslayer.cpp:2156
void setVariable(SWMMResultVariable var)
Definition swmmresultslayer.cpp:2074
QString scenarioName
Definition swmmresultslayer.h:102
double subcatchStatRunoffVol(const QString &subName) const
Definition swmmresultslayer.cpp:1353
double nodeStatMaxOverflow(const QString &nodeName) const
Definition swmmresultslayer.cpp:1098
bool openResults(QList< QString > &warnings, QList< QString > &errors)
Opens the binary results file.
Definition swmmresultslayer.cpp:745
void setReportFilePath(const QString &path)
Definition swmmresultslayer.cpp:545
class SWMMModelLayer * modelLayer() const
Definition swmmresultslayer.h:138
QString sourceDescription() const override
Human-readable source of this layer: a file path, a service URL, or a description for in-memory / der...
Definition swmmresultslayer.cpp:517
void profileLineColorChanged(const QColor &color)
void openResultsAsync()
Asynchronous counterpart to openResults. Runs the blocking swmm_output_open (file + header/index pars...
Definition swmmresultslayer.cpp:956
QBrush profileMaxHglFillBrush
Definition swmmresultslayer.h:115
double subcatchStatPrecip(const QString &subName) const
Definition swmmresultslayer.cpp:1350
double linkStatPumpCycles(const QString &linkName) const
Definition swmmresultslayer.cpp:1341
void scenarioNameChanged(const QString &name)
QPen profileHglLinePen
Definition swmmresultslayer.h:106
void setShowLegend(bool show)
Definition swmmresultslayer.cpp:3221
bool supportsClassEdit(OpenSWMM::Render::ClassEditKind kind) const
Definition swmmresultslayer.cpp:2734
void setProfileMaxEglLinePen(const QPen &pen)
Definition swmmresultslayer.cpp:621
double linkStatPumpOnTime(const QString &linkName) const
Definition swmmresultslayer.cpp:1344
void showLegendChanged(bool show)
void setProfileHglFillBrush(const QBrush &brush)
Definition swmmresultslayer.cpp:597
QString resultsFilePath
Definition swmmresultslayer.h:100
void dispatchAnimationTick(int period) override
Hook invoked by AnimationController on every time-step change.
Definition swmmresultslayer.cpp:2020
double nodeStatMaxDepth(const QString &nodeName) const
Definition swmmresultslayer.cpp:1093
double nodeStatTimeFlooded(const QString &nodeName) const
Definition swmmresultslayer.cpp:1108
void stepForward(bool loop=false)
Advances to the next time step (wraps at end if loop is true).
Definition swmmresultslayer.cpp:2039
QList< OpenSWMM::Render::LegendSymbolItem > legendSymbolItems()
Definition swmmresultslayer.cpp:2727
QDateTime endDateTime() const
Definition swmmresultslayer.cpp:1977
void resultsFilePathChanged(const QString &path)
void currentTimeStepChanged(int step)
SWMMResultVariable variable
Definition swmmresultslayer.h:123
void periodsAppended(int firstNew, int count)
OpenSWMM::Render::IFeatureRenderer * kindRenderer(SWMMModelLayer::Category c) const
Returns the per-kind renderer for category c, or nullptr when none has been installed yet (callers sh...
Definition swmmresultslayer.cpp:2230
QDateTime reportedStartDateTime() const
Definition swmmresultslayer.cpp:1983
void resultsOpenFinished(bool ok)
Emitted on the GUI thread when openResultsAsync() completes.
void rendererChanged()
Emitted when setRenderer() swaps the renderer pointer.
std::vector< std::unique_ptr< openswmmvis::ui::ILayerStyleSubject > > styleSubjects() override
Definition swmmresultslayer.cpp:444
int periodIndexForDateTimeAsOf(const QDateTime &dt) const
Causal peer of periodIndexForDateTime: the latest period at or before dt (floor instead of nearest),...
Definition swmmresultslayer.cpp:700
double linkStatVolFlow(const QString &linkName) const
Definition swmmresultslayer.cpp:1335
double subcatchStatMaxRunoff(const QString &subName) const
Definition swmmresultslayer.cpp:1356
double linkStatMaxVelocity(const QString &linkName) const
Definition swmmresultslayer.cpp:1329
QList< OpenSWMM::Render::ISublayer * > sublayers() const override
The ordered list of sublayers owned by this layer.
Definition swmmresultslayer.cpp:395
QPen profileMaxEglLinePen
Definition swmmresultslayer.h:117
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 swmmresultslayer.cpp:3234
bool showLegend
Definition swmmresultslayer.h:125
int totalTimeSteps
Definition swmmresultslayer.h:121
int refreshLive()
Re-count periods on a live file. Grows totalTimeSteps(), extends endDateTime(), drops whole-file aggr...
Definition swmmresultslayer.cpp:801
void setRenderer(std::unique_ptr< OpenSWMM::Render::IFeatureRenderer > r)
Replaces the current renderer.
Definition swmmresultslayer.cpp:2161
void refreshScene(QGraphicsScene *scene, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
Slice §Y.2 — incremental scene refresh.
Definition swmmresultslayer.cpp:3799
SWMM_Output outputHandle() const
Raw SWMM_Output handle to the open .out file, or nullptr when results aren't open yet....
Definition swmmresultslayer.cpp:720
int nodeOutputIndex(const QString &name) const
Output-file index for the named node, or -1 if not found. The output file uses its own indexing schem...
Definition swmmresultslayer.cpp:725
int subcatchOutputIndex(const QString &name) const
Output-file index for the named subcatchment, or -1. Mirrors nodeOutputIndex / linkOutputIndex; added...
Definition swmmresultslayer.cpp:735
int periodIndexForDateTime(const QDateTime &dt) const
Returns the period index closest to dt on this layer's time grid.
Definition swmmresultslayer.cpp:676
void resultsError(const QString &message)
RasterColorRamp colorRamp() const
Definition swmmresultslayer.cpp:2122
void setScenarioName(const QString &name)
Definition swmmresultslayer.cpp:555
void autoStretchColorRamp()
Automatically sets the colour ramp range from the data min/max across all time steps for the current ...
Definition swmmresultslayer.cpp:3185
void setColorRamp(const RasterColorRamp &ramp)
Definition swmmresultslayer.cpp:2124
QVector< OpenSWMM::Render::AttributeField > availableAttributes(OpenSWMMVis::SwmmCategory cat) const override
Definition swmmresultslayer.cpp:2425
bool isLive() const noexcept
True between openResultsLive() and the footer's arrival.
Definition swmmresultslayer.h:264
void setCurrentTimeStep(int step)
Seeks to the given 0-based time step.
Definition swmmresultslayer.cpp:1989
void setKindRenderer(SWMMModelLayer::Category c, std::unique_ptr< OpenSWMM::Render::IFeatureRenderer > r)
Installs (or replaces) the per-kind renderer for category c. The layer takes ownership....
Definition swmmresultslayer.cpp:2239
bool openResultsLive(QList< QString > &errors)
Open a results file the engine is still writing (live tail).
Definition swmmresultslayer.cpp:773
void setProfileMaxHglFillBrush(const QBrush &brush)
Definition swmmresultslayer.cpp:615
QBrush profileHglFillBrush
Definition swmmresultslayer.h:108
void writeProfileStyle(class QSettings &settings) const
Writes this layer's per-source profile pens & brushes to the current QSettings position....
Definition swmmresultslayer.cpp:636
QStringList speciesNames() const
Y2a — the loaded run's species names, in .out order (pollutants plus the reserved age/temperature col...
Definition swmmresultslayer.cpp:2525
QDateTime startDateTime() const
Definition swmmresultslayer.cpp:1976
void depopulateScene(QGraphicsScene *scene) override
Removes all QGraphicsItems belonging to this layer from the scene.
Definition swmmresultslayer.cpp:3755
int currentTimeStep
Definition swmmresultslayer.h:119
void totalTimeStepsChanged(int count)
void resetKindRendererToDefaults(SWMMModelLayer::Category c)
Restores the per-kind slot for c to its compile-time default (GraduatedRenderer keyed to the scope's ...
Definition swmmresultslayer.cpp:2607
void refreshRuleMirror(SWMMModelLayer::Category c)
Re-clones the live kind renderer for c into the Rule mirror (no-op when the rule list hasn't been bui...
Definition swmmresultslayer.cpp:2612
void setLabelConfig(const OpenSWMM::Render::LabelConfig &cfg) override
Definition swmmresultslayer.cpp:4105
QColor colorForClass(const QString &classKey) const
Definition swmmresultslayer.cpp:2744
QPen profileMaxHglLinePen
Definition swmmresultslayer.h:113
int flowUnits() const
Engine-reported flow units (0=CFS, 1=GPM, 2=MGD, 3=CMS, 4=LPS, 5=MLD). -1 when results aren't open....
Definition swmmresultslayer.cpp:740
void currentDateTimeChanged(const QDateTime &dt)
double linkStatMaxFilling(const QString &linkName) const
Definition swmmresultslayer.cpp:1332
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 swmmresultslayer.cpp:523
QDateTime currentDateTime
Definition swmmresultslayer.h:120
void stepBackward(bool loop=false)
Goes back one time step (wraps at start if loop is true).
Definition swmmresultslayer.cpp:2051
QString reportFilePath() const
Path of the .rpt summary report written by the run that produced this layer's .out file (empty when u...
Definition swmmresultslayer.cpp:510
void variableChanged(SWMMResultVariable var)
QList< OpenSWMM::Render::LegendSymbolItem > sublayerLegendItems()
Phase 8 (2026-05-25) — ramp-aware legend rows.
Definition swmmresultslayer.cpp:1717
double linkStatMaxFlow(const QString &linkName) const
Definition swmmresultslayer.cpp:1326
qreal sizeForClass(const QString &classKey) const
Definition swmmresultslayer.cpp:2767
void profileStyleChanged()
void populateScene(QGraphicsScene *scene, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
Creates / updates QGraphicsItems representing this layer in the scene.
Definition swmmresultslayer.cpp:3259
QPen profileEglLinePen
Definition swmmresultslayer.h:110
double linkStatPumpVolume(const QString &linkName) const
Definition swmmresultslayer.cpp:1347
int reportStepSeconds() const
Definition swmmresultslayer.cpp:1978
double linkStatSurchargeTime(const QString &linkName) const
Definition swmmresultslayer.cpp:1338
bool kindRendererIsDefault(SWMMModelLayer::Category c) const
True when the installed kind renderer for c is semantically identical to the compile-time default — i...
Definition swmmresultslayer.cpp:2676
OpenSWMM::Render::RuleList * ruleList() override
Definition swmmresultslayer.cpp:2274
void setProfileMaxHglLinePen(const QPen &pen)
Definition swmmresultslayer.cpp:609
Represents a coordinate reference system backed by a GDAL OGRSpatialReference.
Definition spatialreferencesystem.h:28
Granular per-Category sublayer that replaces the legacy NodeMarker / ConduitLine / ConduitArrow / Sub...
Map layer backed by a GDAL raster dataset with configurable colour-ramp rendering and on-demand viewp...
Layer-side seam for "what attributes can I theme by?" — Slice DM.1.
QString nodeName
Definition importplanning.cpp:95
QGraphicsScene * scene
Definition inletdrawingview.cpp:78
bool ok
Definition inpmeshwriter.cpp:575
Mixin interface for layers that own a list of ISublayers.
Mesh2DVariable var
Definition mesh2dresultsexport.cpp:294
double step
Definition meshcellparams.cpp:28
Definition gisrasterlayer.h:40
ClassEditKind
Categories of per-class mutation that a renderer may support.
Definition ifeaturerenderer.h:64
SwmmCategory
Stable ordinal categorising every SWMM-element kind that has per-kind styling, per-kind tree rows,...
Definition swmm_category.h:28
Abstract base class for all map layers displayed in the MapCanvas.
int path
Definition pslgminsize.cpp:234
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
TokenKind kind
Definition queryparser.cpp:34
QString message
Definition queryparser.cpp:150
Dynamic water-quality species as themeable result attributes (GUI plan D-G1 / subplan Y2a).
Per-layer label rendering parameters.
Definition labelconfig.h:47
Gradient mapping from a normalised value in [0,1] to a QColor.
Definition colorramp.h:71
Map layer that renders an OpenSWMMEngine network (nodes, links, subcatchments, rain gages) and provid...
SWMMResultVariable
Selectable result output variables for colour-mapped display.
Definition swmmresultslayer.h:57