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
classificationbindings.h
Go to the documentation of this file.
1
27#ifndef OPENSWMMVIS_UI_DIALOGS_EDITORS_CLASSIFICATIONBINDINGS_H
28#define OPENSWMMVIS_UI_DIALOGS_EDITORS_CLASSIFICATIONBINDINGS_H
29
31
32#include <QPair>
33#include <QString>
34#include <QStringList>
35#include <QVector>
36
37#include <functional>
38#include <memory>
39
40class GISRasterLayer;
41
42namespace OpenSWMM::Render {
43class GraduatedRasterRenderer;
44class GraduatedRenderer;
45class IFeatureRenderer;
46}
47
48namespace openswmmvis::ui {
49
55{
56public:
57 virtual ~IClassificationBinding() = default;
58
59 // ── Core ───────────────────────────────────────────────────────────
60 [[nodiscard]] virtual OpenSWMM::Render::ClassificationScheme scheme() const = 0;
64
68 [[nodiscard]] virtual QVector<double> sampleValues() const = 0;
69
75 virtual void autoClassify() { setScheme(scheme()); }
76
79 [[nodiscard]] virtual QPair<double, double> dataRange() const = 0;
80
87 [[nodiscard]] virtual QVector<double> computedEdges() const { return {}; }
88
89 // ── Optional capabilities (sensible no-op defaults) ────────────────
92 [[nodiscard]] virtual bool supportsContinuousMode() const { return false; }
93
97 [[nodiscard]] virtual bool supportsRangeModes() const { return false; }
98
102 [[nodiscard]] virtual bool supportsCustomRange() const { return false; }
103
106 [[nodiscard]] virtual QVector<QPair<QString, QString>> availableAttributes() const { return {}; }
107 [[nodiscard]] virtual QString attribute() const { return {}; }
108 virtual void setAttribute(const QString &) {}
109};
110
111// ───────────────────────────────────────────────────────────────────────
125{
126public:
128 using RendererInstaller = std::function<void(std::unique_ptr<OpenSWMM::Render::IFeatureRenderer>)>;
129 using AttributeList = std::function<QVector<QPair<QString, QString>>()>;
133 using RangeModeGate = std::function<bool()>;
134
136 RendererInstaller installRenderer,
137 AttributeList attributeList,
138 RangeModeGate rangeModesEnabled);
139
143 void resync();
144
145 OpenSWMM::Render::ClassificationScheme scheme() const override { return m_scheme; }
147 QVector<double> sampleValues() const override { return {}; } // layer samples internally
148 void autoClassify() override;
149 QPair<double, double> dataRange() const override;
150 QVector<double> computedEdges() const override;
151
152 bool supportsContinuousMode() const override { return false; }
153 bool supportsRangeModes() const override { return m_rangeGate ? m_rangeGate() : false; }
154 bool supportsCustomRange() const override { return false; } // range-mode combo covers it
155 QVector<QPair<QString, QString>> availableAttributes() const override;
156 QString attribute() const override;
157 void setAttribute(const QString &name) override;
158
159private:
160 [[nodiscard]] OpenSWMM::Render::ClassificationScheme schemeFromRenderer() const;
161
162 RendererGetter m_get;
163 RendererInstaller m_install;
164 AttributeList m_attributes;
165 RangeModeGate m_rangeGate;
167};
168
169// ───────────────────────────────────────────────────────────────────────
179{
180public:
182 using Setter = std::function<void(const OpenSWMM::Render::ClassificationScheme &)>;
183 using SampleProvider = std::function<QVector<double>()>;
184 using RangeProvider = std::function<QPair<double, double>()>;
185
186 SublayerSchemeBinding(Getter getter, Setter setter,
187 SampleProvider sampleProvider, RangeProvider rangeProvider,
189
190 OpenSWMM::Render::ClassificationScheme scheme() const override { return m_get(); }
191 void setScheme(const OpenSWMM::Render::ClassificationScheme &s) override { m_set(s); }
192 QVector<double> sampleValues() const override { return m_samples ? m_samples() : QVector<double>{}; }
193 QPair<double, double> dataRange() const override { return m_range ? m_range() : QPair<double, double>{ 0.0, 1.0 }; }
194
195 bool supportsContinuousMode() const override { return m_supportsContinuous; }
196 bool supportsRangeModes() const override { return m_supportsRangeModes; }
197 bool supportsCustomRange() const override { return !m_supportsRangeModes; }
198
199private:
200 Getter m_get;
201 Setter m_set;
202 SampleProvider m_samples;
203 RangeProvider m_range;
204 bool m_supportsContinuous = false;
205 bool m_supportsRangeModes = false;
206};
207
208// ───────────────────────────────────────────────────────────────────────
225{
226public:
227 explicit RasterSchemeBinding(GISRasterLayer *layer) : m_layer(layer) {}
228
231 QVector<double> sampleValues() const override;
232 void autoClassify() override;
233 QPair<double, double> dataRange() const override;
234 QVector<double> computedEdges() const override;
235
236 bool supportsContinuousMode() const override { return true; }
237 bool supportsRangeModes() const override { return false; }
238 bool supportsCustomRange() const override { return true; }
239
240private:
241 [[nodiscard]] OpenSWMM::Render::GraduatedRasterRenderer *renderer() const;
242
243 GISRasterLayer *m_layer = nullptr;
244};
245
246} // namespace openswmmvis::ui
247
248#endif // OPENSWMMVIS_UI_DIALOGS_EDITORS_CLASSIFICATIONBINDINGS_H
A map layer backed by a GDAL raster dataset.
Definition gisrasterlayer.h:61
Shared classification model: mode + binner + ramp + range + per-class overrides, with a revision stam...
Definition classificationscheme.h:61
ClassificationScheme-driven single-band raster colouring.
Definition graduatedrasterrenderer.h:59
Classifies a numeric attribute into bins and assigns a colour per bin.
Definition graduatedrenderer.h:63
Slice US.1 (UNIFIED_STYLING_AND_UI_CONSISTENCY_PLAN.md S1) — the shared classification value type emb...
Bridges the editor's ClassificationScheme onto a 1D per-kind GraduatedRenderer without changing the r...
Definition classificationbindings.h:125
QString attribute() const override
Definition classificationbindings.cpp:234
QVector< double > sampleValues() const override
Definition classificationbindings.h:147
bool supportsRangeModes() const override
Definition classificationbindings.h:153
bool supportsContinuousMode() const override
Definition classificationbindings.h:152
void setScheme(const OpenSWMM::Render::ClassificationScheme &s) override
Definition classificationbindings.cpp:118
std::function< void(std::unique_ptr< OpenSWMM::Render::IFeatureRenderer >)> RendererInstaller
Definition classificationbindings.h:128
QPair< double, double > dataRange() const override
Definition classificationbindings.cpp:187
QVector< QPair< QString, QString > > availableAttributes() const override
Definition classificationbindings.cpp:229
void resync()
Definition classificationbindings.cpp:113
std::function< OpenSWMM::Render::GraduatedRenderer *()> RendererGetter
Definition classificationbindings.h:127
void setAttribute(const QString &name) override
Definition classificationbindings.cpp:240
bool supportsCustomRange() const override
Definition classificationbindings.h:154
void autoClassify() override
Definition classificationbindings.cpp:195
OpenSWMM::Render::ClassificationScheme scheme() const override
Definition classificationbindings.h:145
std::function< bool()> RangeModeGate
Definition classificationbindings.h:133
std::function< QVector< QPair< QString, QString > >()> AttributeList
Definition classificationbindings.h:129
QVector< double > computedEdges() const override
Definition classificationbindings.cpp:211
What ClassificationEditor talks to instead of a concrete model.
Definition classificationbindings.h:55
virtual bool supportsCustomRange() const
Definition classificationbindings.h:102
virtual void autoClassify()
Definition classificationbindings.h:75
virtual bool supportsRangeModes() const
Definition classificationbindings.h:97
virtual QVector< double > computedEdges() const
Definition classificationbindings.h:87
virtual void setScheme(const OpenSWMM::Render::ClassificationScheme &)=0
virtual bool supportsContinuousMode() const
Definition classificationbindings.h:92
virtual QVector< double > sampleValues() const =0
virtual QString attribute() const
Definition classificationbindings.h:107
virtual void setAttribute(const QString &)
Definition classificationbindings.h:108
virtual OpenSWMM::Render::ClassificationScheme scheme() const =0
virtual QVector< QPair< QString, QString > > availableAttributes() const
Definition classificationbindings.h:106
virtual QPair< double, double > dataRange() const =0
Drives the GraduatedRasterRenderer live on a GISRasterLayer.
Definition classificationbindings.h:225
QVector< double > computedEdges() const override
Definition classificationbindings.cpp:321
RasterSchemeBinding(GISRasterLayer *layer)
Definition classificationbindings.h:227
bool supportsRangeModes() const override
Definition classificationbindings.h:237
bool supportsContinuousMode() const override
Definition classificationbindings.h:236
void setScheme(const OpenSWMM::Render::ClassificationScheme &s) override
Definition classificationbindings.cpp:285
bool supportsCustomRange() const override
Definition classificationbindings.h:238
void autoClassify() override
Definition classificationbindings.cpp:300
QVector< double > sampleValues() const override
Definition classificationbindings.cpp:295
OpenSWMM::Render::ClassificationScheme scheme() const override
Definition classificationbindings.cpp:279
QPair< double, double > dataRange() const override
Definition classificationbindings.cpp:315
Drives a ClassificationScheme stored by value on a style bag.
Definition classificationbindings.h:179
QVector< double > sampleValues() const override
Definition classificationbindings.h:192
QPair< double, double > dataRange() const override
Definition classificationbindings.h:193
std::function< QPair< double, double >()> RangeProvider
Definition classificationbindings.h:184
void setScheme(const OpenSWMM::Render::ClassificationScheme &s) override
Definition classificationbindings.h:191
bool supportsCustomRange() const override
Definition classificationbindings.h:197
OpenSWMM::Render::ClassificationScheme scheme() const override
Definition classificationbindings.h:190
std::function< OpenSWMM::Render::ClassificationScheme()> Getter
Definition classificationbindings.h:181
bool supportsRangeModes() const override
Definition classificationbindings.h:196
std::function< void(const OpenSWMM::Render::ClassificationScheme &)> Setter
Definition classificationbindings.h:182
bool supportsContinuousMode() const override
Definition classificationbindings.h:195
std::function< QVector< double >()> SampleProvider
Definition classificationbindings.h:183
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:82
Definition gisrasterlayer.h:40
Definition openswmmvislayer.h:43
QString name
Definition sectionmodelbuilders.cpp:474