SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
irunlayer.h File Reference

Slice BL — abstract "data-source" that the ComparisonPlotModel reads timeseries from. More...

#include "plot/plotattribute.h"
#include "plot/resultdescriptor.h"
#include <QDateTime>
#include <QString>
#include <QStringList>
#include <vector>
Include dependency graph for irunlayer.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  openswmmvis::plot::ObjectRef
 Identifies what object a series is about. Kind is the discriminator; the active union member is implied by kind. More...
 
struct  openswmmvis::plot::SeriesData
 Result of one series resolution. Times are SWMM DateTime doubles (OLE-Automation epoch, not astronomical Julian — see core/swmmdatetime.h); values are in the unit system the source advertises. More...
 
class  openswmmvis::plot::IRunLayer
 Abstract source backing one comparison-plot run. More...
 

Namespaces

namespace  openswmmvis
 
namespace  openswmmvis::plot
 

Functions

const QVector< PlotAttribute > & openswmmvis::plot::attributesForKind (ObjectRef::Kind k)
 The canonical plottable-attribute list for k (presentation order), dispatching to the shared lists in plotattribute.h. Lives here rather than there because the nested ObjectRef::Kind cannot be named in plotattribute.h without an include cycle. Empty for kinds with no fixed list (Observed and Unknown). Mesh kinds return their full list; per-layer availability (edge flux, rainfall datasets) is gated by IRunLayer::supportsAttribute.
 
QVector< ResultDescriptoropenswmmvis::plot::resultDescriptorsForKind (ObjectRef::Kind kind, const QStringList &speciesNames)
 Y2b-1 (amendment D-Y4): the kind-keyed DESCRIPTOR list — the fixed attributesForKind(kind) set wrapped, plus one species descriptor per name in speciesNames for the element kinds that carry species columns (node/link/subcatch). Species ride BY NAME (D-G1). INLINE because IRunLayer's default implementation below calls it, and IRunLayer must stay a header-only interface — hundreds of tests stub it without linking any plot TU, so nothing reachable from a virtual's default may live in a .cpp (measured twice: an out-of-line default anchored the vtable in resultdescriptor.cpp, and an out-of-line list builder left the same tests with an undefined free-function symbol).
 

Detailed Description

Slice BL — abstract "data-source" that the ComparisonPlotModel reads timeseries from.

Author
Caleb Buahin caleb.nosp@m..bua.nosp@m.hin@g.nosp@m.mail.nosp@m..com
Date
2026
License\n GPL-3.0-or-later

One IRunLayer instance represents one logical "run" in the comparison plot — most commonly an open .out file backing a SWMMResultsLayer, but the interface also fronts:

  • Standalone .out files loaded via Tools → Comparison Plot → Load Run… (a transient SwmmOutRunLayer owned by the dialog).
  • Observed-data CSV / TSV / XLSX (ObservedCsvRunLayer).
  • 2D mesh cell results — SWMM2DResultsLayer implements IRunLayer directly so a mesh layer is a first-class RunSource (Slice CF.3).

The model never type-casts the pointer; every interaction goes through the virtual methods below. New result-layer kinds plug in by adding a new ObjectRef discriminator + handling it in getSeriesAt.