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
resultscalarsublayer.h
Go to the documentation of this file.
1
10#ifndef OPENSWMM_RENDER_RESULTSCALARSUBLAYER_H
11#define OPENSWMM_RENDER_RESULTSCALARSUBLAYER_H
12
16#include <memory>
17
18namespace OpenSWMM::Render
19{
20
21// Scientific data colors remain independent of the application's chrome theme.
23{
24 Q_OBJECT
25public:
26 enum class Presentation { Fill, Contours, Labels };
27 Q_ENUM(Presentation)
28private:
30 WRITE setPresentation NOTIFY styleChanged)
31 Q_PROPERTY(QColor missingColor READ missingColor WRITE setMissingColor NOTIFY styleChanged)
32 Q_PROPERTY(
36 Q_CLASSINFO("group:missingColor", "Data availability")
37 Q_CLASSINFO("group:waterlessColor", "Data availability")
38 Q_CLASSINFO("group:notApplicableColor", "Data availability")
39public:
44 explicit ResultScalarStyle(QObject *parent = nullptr);
47 Presentation presentation() const { return m_presentation; }
53 IsolineStyle *contourStyle() const { return m_contourStyle; }
58 {
59 return m_presentation == Presentation::Contours ? m_contourStyle->scheme() : scheme();
60 }
67 std::vector<double> contourLevels(double minimum, double maximum,
68 const QVector<double> &samples) const
69 {
70 const auto range = m_contourStyle->scheme().effectiveRange(minimum, maximum);
71 return m_contourStyle->levelsForRange(range.first, range.second, samples);
72 }
75 QColor missingColor() const { return m_missing; }
78 QColor waterlessColor() const { return m_waterless; }
81 QColor notApplicableColor() const { return m_notApplicable; }
84 void setMissingColor(const QColor &color);
87 void setWaterlessColor(const QColor &color);
90 void setNotApplicableColor(const QColor &color);
93 QJsonObject toJson() const override;
100 void fromJson(const QJsonObject &json) override;
101
102private:
103 Presentation m_presentation = Presentation::Fill;
104 IsolineStyle *m_contourStyle = nullptr;
105 QColor m_missing{145, 145, 145, 150};
106 QColor m_waterless{230, 230, 230, 90};
107 QColor m_notApplicable{Qt::transparent};
108};
109
110// Additional flat cell-result pass. attribute() stores the source's semantic
111// variable key, never a species-array index. Host layer owns frame acquisition,
112// persistence and CPU geometry; the QSG renderer uses the same cellColors().
114{
115 Q_OBJECT
116public:
123 explicit ResultScalarSublayer(QString id, QObject *parent = nullptr);
126 Kind kind() const override { return ColorRampFillKind; }
129 QString id() const override { return m_id; }
133 QString displayName() const override;
136 bool isVisible() const override { return m_visible; }
139 void setVisible(bool value) override;
142 qreal opacity() const override { return m_opacity; }
146 void setOpacity(qreal value) override;
149 bool isDynamic() const override { return true; }
152 SublayerStyle *style() override { return m_style; }
155 ResultScalarStyle *fillStyle() const { return m_style; }
158 QString variableKey() const { return m_style->attribute(); }
162 void setVariableKey(const QString &key) { m_style->setAttribute(key); }
165 const openswmmvis::io::Mesh2DResultVariable &descriptor() const { return m_descriptor; }
169 // Render-thread publication only transfers immutable data: no QObject
170 // mutation or signals. GUI legends atomically load the displayed frame.
174 std::shared_ptr<const openswmmvis::io::Mesh2DScalarFrame> presentedFrame() const;
179 void publishPresentedFrame(std::shared_ptr<const openswmmvis::io::Mesh2DScalarFrame> frame);
190 QVector<QColor> cellColors(const openswmmvis::io::Mesh2DScalarFrame &frame) const;
194 QList<LegendSymbolItem> legendSymbolItems() const override;
203 QList<LegendSymbolItem>
210 QSGNode *buildOrUpdateNode(QSGNode *existing, const SublayerContext &) override
211 {
212 return existing;
213 }
214
215private:
220 QString unitsLabel(const openswmmvis::io::Mesh2DResultVariable &descriptor) const;
221 std::shared_ptr<const openswmmvis::io::Mesh2DScalarFrame> m_presentedFrame;
222 QString m_id;
223 bool m_visible = true;
224 qreal m_opacity = 1;
225 ResultScalarStyle *m_style;
227};
228
229} // namespace OpenSWMM::Render
230#endif
Shared classification model: mode + binner + ramp + range + per-class overrides, with a revision stam...
Definition classificationscheme.h:63
QPair< double, double > effectiveRange(double dataMin, double dataMax) const
Choose stored custom bounds or the caller's data bounds verbatim.
Definition classificationscheme.cpp:245
One toggleable visual aspect of a results / model layer.
Definition isublayer.h:88
Kind
Coarse taxonomy of sublayer paint behaviours.
Definition isublayer.h:100
@ ColorRampFillKind
Definition isublayer.h:105
Definition isolinesublayer.h:31
const ClassificationScheme & scheme() const
Definition isolinesublayer.h:221
std::vector< double > levelsForRange(double vMin, double vMax, const QVector< double > &samples={}) const
Definition isolinesublayer.cpp:147
Definition resultscalarsublayer.h:23
QColor waterlessColor() const
Read the explicitly waterless-cell color.
Definition resultscalarsublayer.h:78
void fromJson(const QJsonObject &json) override
Load scalar-result styling and emit one final styleChanged from this object.
Definition resultscalarsublayer.cpp:136
void setMissingColor(const QColor &color)
Replace the missing/invalid-data color and notify on change.
Definition resultscalarsublayer.cpp:105
QColor notApplicableColor() const
Read the not-applicable-cell color.
Definition resultscalarsublayer.h:81
QColor waterlessColor
Definition resultscalarsublayer.h:33
OpenSWMM::Render::ResultScalarStyle::Presentation presentation
Definition resultscalarsublayer.h:30
QColor missingColor
Definition resultscalarsublayer.h:31
QColor notApplicableColor
Definition resultscalarsublayer.h:35
void setPresentation(Presentation value)
Select an accepted presentation and notify on a change.
Definition resultscalarsublayer.cpp:95
IsolineStyle * contourStyle() const
Borrow the owned contour/label style.
Definition resultscalarsublayer.h:53
Presentation
Definition resultscalarsublayer.h:26
QColor missingColor() const
Read the missing/invalid-data fallback color.
Definition resultscalarsublayer.h:75
const ClassificationScheme & rangeScheme() const
Select the scheme associated with the current presentation.
Definition resultscalarsublayer.h:57
std::vector< double > contourLevels(double minimum, double maximum, const QVector< double > &samples) const
Generate contour levels from the contour scheme's effective range.
Definition resultscalarsublayer.h:67
void setWaterlessColor(const QColor &color)
Replace the waterless-cell color and notify on change.
Definition resultscalarsublayer.cpp:112
void setNotApplicableColor(const QColor &color)
Replace the not-applicable-cell color and notify on change.
Definition resultscalarsublayer.cpp:119
QJsonObject toJson() const override
Serialize fill classification plus presentation, contour style and availability colors.
Definition resultscalarsublayer.cpp:126
Definition resultscalarsublayer.h:114
std::shared_ptr< const openswmmvis::io::Mesh2DScalarFrame > presentedFrame() const
Atomically acquire shared ownership of the last published immutable frame.
Definition resultscalarsublayer.cpp:205
bool isVisible() const override
Read local visibility.
Definition resultscalarsublayer.h:136
SublayerStyle * style() override
Borrow the owned scalar-result style through the base interface.
Definition resultscalarsublayer.h:152
qreal opacity() const override
Read local opacity.
Definition resultscalarsublayer.h:142
bool isDynamic() const override
Report time-dependent result rendering.
Definition resultscalarsublayer.h:149
void setDescriptor(const openswmmvis::io::Mesh2DResultVariable &descriptor)
Copy source metadata, clear the published frame and invalidate unconditionally.
Definition resultscalarsublayer.cpp:178
void setOpacity(qreal value) override
Set finite clamped opacity and invalidate on exact inequality.
Definition resultscalarsublayer.cpp:193
QVector< QColor > cellColors(const openswmmvis::io::Mesh2DScalarFrame &frame) const
Build one display color per frame value using status and the fill scheme.
Definition resultscalarsublayer.cpp:213
void publishPresentedFrame(std::shared_ptr< const openswmmvis::io::Mesh2DScalarFrame > frame)
Atomically replace the displayed immutable-frame snapshot without Qt signals.
Definition resultscalarsublayer.cpp:209
QList< LegendSymbolItem > legendSymbolItems() const override
Build legend rows using descriptor metadata and an otherwise empty frame.
Definition resultscalarsublayer.cpp:249
QString variableKey() const
Copy the bound semantic variable key.
Definition resultscalarsublayer.h:158
QString displayName() const override
Describe the bound result variable, units and presentation.
Definition resultscalarsublayer.cpp:168
const openswmmvis::io::Mesh2DResultVariable & descriptor() const
Borrow the latest metadata descriptor.
Definition resultscalarsublayer.h:165
ResultScalarStyle * fillStyle() const
Borrow the concrete owned scalar-result style.
Definition resultscalarsublayer.h:155
QSGNode * buildOrUpdateNode(QSGNode *existing, const SublayerContext &) override
Preserve an existing node without generating geometry in this hook.
Definition resultscalarsublayer.h:210
void setVariableKey(const QString &key)
Bind a semantic result key through the style attribute setter.
Definition resultscalarsublayer.h:162
QString id() const override
Copy the immutable pass identifier.
Definition resultscalarsublayer.h:129
void setVisible(bool value) override
Replace visibility, clearing the presented frame when hidden.
Definition resultscalarsublayer.cpp:184
Kind kind() const override
Identify the scene pass kind.
Definition resultscalarsublayer.h:126
Definition scalarfillsublayer.h:39
const ClassificationScheme & scheme() const
Borrow the complete classification settings.
Definition scalarfillsublayer.h:157
void setAttribute(const QString &v)
Set the scalar attribute key and notify on a change.
Definition scalarfillsublayer.cpp:40
QString attribute
Definition scalarfillsublayer.h:41
Base class for per-sublayer style property bags.
Definition sublayerstyle.h:58
void styleChanged()
Emitted when any property changes.
Dynamic marching-squares isoline sublayer over a 2D mesh. Plan §3 — fourth sublayer in the SWMM2DResu...
Immutable scalar frames retaining dataset units and validity.
Definition gisrasterlayer.h:42
int parent
Definition planning.cpp:199
double value
Definition rasterfluxintegration.cpp:27
QVector< double > samples
Definition resultscalarsublayer.cpp:29
Per-cell (flat) and per-vertex (Gouraud) scalar-fill sublayers over a 2D mesh. Unlike ContourBandSubl...
Per-frame parameters handed to ISublayer::buildOrUpdateNode().
Definition isublayer.h:74
Definition mesh2dresultvariable.h:22
Definition mesh2dscalarframe.h:23
Sample minimum
Definition timeseriesrunlayer.cpp:51
Sample maximum
Definition timeseriesrunlayer.cpp:51