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
isolinesublayer.h
Go to the documentation of this file.
1
7#ifndef OPENSWMM_RENDER_SUBLAYERS_ISOLINESUBLAYER_H
8#define OPENSWMM_RENDER_SUBLAYERS_ISOLINESUBLAYER_H
9
11#include "render/isublayer.h"
13
14#include <QColor>
15#include <QJsonObject>
16#include <QString>
17#include <QVector>
18#include <Qt>
19
20#include <vector>
21
22namespace OpenSWMM::Render
23{
24
26{
27 Q_OBJECT
28public:
33 enum class LevelMode { Count = 0, FixedInterval = 1 };
34 Q_ENUM(LevelMode)
35
36private:
37 Q_PROPERTY(QString attribute READ attribute WRITE setAttribute NOTIFY styleChanged)
39 Q_PROPERTY(int isoValueCount READ isoValueCount WRITE setIsoValueCount NOTIFY styleChanged)
40 Q_PROPERTY(double levelInterval READ levelInterval WRITE setLevelInterval NOTIFY styleChanged)
41 Q_PROPERTY(double baseLevel READ baseLevel WRITE setBaseLevel NOTIFY styleChanged)
42 Q_PROPERTY(double lineWidthPx READ lineWidthPx WRITE setLineWidthPx NOTIFY styleChanged)
43 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY styleChanged)
44 Q_PROPERTY(Qt::PenStyle dashPattern READ dashPattern WRITE setDashPattern NOTIFY styleChanged)
45 // VS.8 โ€” index contours: every Nth level draws with indexWidthPx
46 // (0 = off). Standard topographic-map emphasis.
47 Q_PROPERTY(int indexEvery READ indexEvery WRITE setIndexEvery NOTIFY styleChanged)
48 Q_PROPERTY(double indexWidthPx READ indexWidthPx WRITE setIndexWidthPx NOTIFY styleChanged)
49 Q_PROPERTY(bool labels READ labels WRITE setLabels NOTIFY styleChanged)
50 Q_PROPERTY(int labelDecimals READ labelDecimals WRITE setLabelDecimals NOTIFY styleChanged)
51 Q_PROPERTY(double labelFontPt READ labelFontPt WRITE setLabelFontPt NOTIFY styleChanged)
52 Q_PROPERTY(bool labelHalo READ labelHalo WRITE setLabelHalo NOTIFY styleChanged)
53
54 Q_CLASSINFO("group:attribute", "Classification")
55 Q_CLASSINFO("group:levelMode", "Classification")
56 Q_CLASSINFO("group:isoValueCount", "Classification")
57 Q_CLASSINFO("group:levelInterval", "Classification")
58 Q_CLASSINFO("group:baseLevel", "Classification")
59 Q_CLASSINFO("group:lineWidthPx", "Symbology")
60 Q_CLASSINFO("group:color", "Symbology")
61 Q_CLASSINFO("group:dashPattern", "Symbology")
62 Q_CLASSINFO("group:indexEvery", "Symbology")
63 Q_CLASSINFO("group:indexWidthPx", "Symbology")
64 Q_CLASSINFO("group:labels", "Labels")
65 Q_CLASSINFO("group:labelDecimals", "Labels")
66 Q_CLASSINFO("group:labelFontPt", "Labels")
67 Q_CLASSINFO("group:labelHalo", "Labels")
68
69public:
70 // Slice US.2 โ€” level count + classification method now live in a shared
71 // ClassificationScheme; isoValueCount forwards to its class count. The
72 // FixedInterval params + symbology + label knobs stay on the bag.
73 explicit IsolineStyle(QObject *parent = nullptr);
74
75 [[nodiscard]] QString attribute() const { return m_attribute; }
76 [[nodiscard]] LevelMode levelMode() const { return m_levelMode; }
77 [[nodiscard]] int isoValueCount() const { return m_scheme.classCount(); }
78 [[nodiscard]] double levelInterval() const { return m_levelInterval; }
79 [[nodiscard]] double baseLevel() const { return m_baseLevel; }
80 [[nodiscard]] double lineWidthPx() const { return m_lineWidthPx; }
81 [[nodiscard]] QColor color() const { return m_color; }
82 [[nodiscard]] Qt::PenStyle dashPattern() const { return m_dashPattern; }
83 [[nodiscard]] int indexEvery() const { return m_indexEvery; }
84 [[nodiscard]] double indexWidthPx() const { return m_indexWidthPx; }
85 [[nodiscard]] bool labels() const { return m_labels; }
86 [[nodiscard]] int labelDecimals() const { return m_labelDecimals; }
87 [[nodiscard]] double labelFontPt() const { return m_labelFontPt; }
88 [[nodiscard]] bool labelHalo() const { return m_labelHalo; }
89
90 void setAttribute(const QString &v);
92 void setIsoValueCount(int v);
93 void setLevelInterval(double v);
94 void setBaseLevel(double v);
95 void setLineWidthPx(double v);
96 void setColor(const QColor &v);
97 void setDashPattern(Qt::PenStyle v);
98 void setIndexEvery(int v);
99 void setIndexWidthPx(double v);
100 void setLabels(bool v);
101 void setLabelDecimals(int v);
102 void setLabelFontPt(double v);
103 void setLabelHalo(bool v);
104
112 [[nodiscard]] std::vector<double> levelsForRange(double vMin, double vMax,
113 const QVector<double> &samples = {}) const;
114
118 [[nodiscard]] const ClassificationScheme &scheme() const { return m_scheme; }
119 void setScheme(const ClassificationScheme &s);
120
121 [[nodiscard]] QJsonObject toJson() const override;
122 void fromJson(const QJsonObject &j) override;
123
124private:
125 QString m_attribute = QStringLiteral("depth");
126 LevelMode m_levelMode = LevelMode::Count;
127 double m_levelInterval = 0.5;
128 double m_baseLevel = 0.0;
129 double m_lineWidthPx = 1.0;
130 QColor m_color = QColor(10, 10, 10, 220);
131 Qt::PenStyle m_dashPattern = Qt::SolidLine;
132 int m_indexEvery = 0;
133 double m_indexWidthPx = 2.0;
134 bool m_labels = false;
135 int m_labelDecimals = 2;
136 double m_labelFontPt = 9.0;
137 bool m_labelHalo = true;
138 ClassificationScheme m_scheme;
139};
140
142{
143 Q_OBJECT
144public:
145 explicit IsolineSublayer(QString id_, QObject *parent = nullptr);
146
147 Kind kind() const override { return IsolineKind; }
148 QString id() const override { return m_id; }
149 // Terrain isolines trace bed ELEVATION; results isolines trace water DEPTH.
150 QString displayName() const override
151 {
152 const QString a = m_style ? m_style->attribute() : QString();
153 if (a.compare(QLatin1String("elevation"), Qt::CaseInsensitive) == 0)
154 return tr("Elevation Isolines");
155 return tr("Depth Isolines");
156 }
157
158 bool isVisible() const override { return m_visible; }
159 void setVisible(bool v) override;
160 qreal opacity() const override { return m_opacity; }
161 void setOpacity(qreal o) override;
162
163 bool isDynamic() const override { return true; }
164
165 SublayerStyle *style() override { return m_style; }
166
167 QList<LegendSymbolItem> legendSymbolItems() const override;
168 QSGNode *buildOrUpdateNode(QSGNode *existing, const SublayerContext &) override;
169
170 [[nodiscard]] IsolineStyle *isolineStyle() const { return m_style; }
171
172private:
173 QString m_id;
174 bool m_visible = false; // off by default per plan ยง3
175 qreal m_opacity = 1.0;
176 IsolineStyle *m_style;
177};
178
179} // namespace OpenSWMM::Render
180
181#endif
Shared classification model: mode + binner + ramp + range + per-class overrides, with a revision stam...
Definition classificationscheme.h:61
int classCount() const
Definition classificationscheme.h:95
One toggleable visual aspect of a results / model layer.
Definition isublayer.h:87
Kind
Coarse taxonomy of sublayer paint behaviours.
Definition isublayer.h:100
@ IsolineKind
Definition isublayer.h:106
Definition isolinesublayer.h:26
double baseLevel() const
Definition isolinesublayer.h:79
int indexEvery
Definition isolinesublayer.h:47
void setLevelInterval(double v)
Definition isolinesublayer.cpp:49
double lineWidthPx
Definition isolinesublayer.h:42
QColor color
Definition isolinesublayer.h:43
bool labelHalo() const
Definition isolinesublayer.h:88
bool labels
Definition isolinesublayer.h:49
int labelDecimals() const
Definition isolinesublayer.h:86
double levelInterval
Definition isolinesublayer.h:40
void setLineWidthPx(double v)
Definition isolinesublayer.cpp:38
Qt::PenStyle dashPattern() const
Definition isolinesublayer.h:82
void setLabelDecimals(int v)
Definition isolinesublayer.cpp:76
double indexWidthPx
Definition isolinesublayer.h:48
void setIndexEvery(int v)
Definition isolinesublayer.cpp:62
double indexWidthPx() const
Definition isolinesublayer.h:84
void setLevelMode(LevelMode v)
Definition isolinesublayer.cpp:48
Qt::PenStyle dashPattern
Definition isolinesublayer.h:44
bool labelHalo
Definition isolinesublayer.h:52
double labelFontPt() const
Definition isolinesublayer.h:87
int isoValueCount() const
Definition isolinesublayer.h:77
double lineWidthPx() const
Definition isolinesublayer.h:80
void setColor(const QColor &v)
Definition isolinesublayer.cpp:45
void setLabelHalo(bool v)
Definition isolinesublayer.cpp:90
LevelMode
Definition isolinesublayer.h:33
QString attribute
Definition isolinesublayer.h:37
void setBaseLevel(double v)
Definition isolinesublayer.cpp:56
int labelDecimals
Definition isolinesublayer.h:50
bool labels() const
Definition isolinesublayer.h:85
double labelFontPt
Definition isolinesublayer.h:51
void setIsoValueCount(int v)
Definition isolinesublayer.cpp:25
const ClassificationScheme & scheme() const
Definition isolinesublayer.h:118
void fromJson(const QJsonObject &j) override
Restore the style from JSON.
Definition isolinesublayer.cpp:144
void setScheme(const ClassificationScheme &s)
Definition isolinesublayer.cpp:32
LevelMode levelMode() const
Definition isolinesublayer.h:76
void setLabels(bool v)
Definition isolinesublayer.cpp:47
QJsonObject toJson() const override
Serialize the style to JSON.
Definition isolinesublayer.cpp:121
void setDashPattern(Qt::PenStyle v)
Definition isolinesublayer.cpp:46
void setAttribute(const QString &v)
Definition isolinesublayer.cpp:24
QColor color() const
Definition isolinesublayer.h:81
int isoValueCount
Definition isolinesublayer.h:39
double baseLevel
Definition isolinesublayer.h:41
int indexEvery() const
Definition isolinesublayer.h:83
LevelMode levelMode
Definition isolinesublayer.h:38
void setIndexWidthPx(double v)
Definition isolinesublayer.cpp:69
double levelInterval() const
Definition isolinesublayer.h:78
void setLabelFontPt(double v)
Definition isolinesublayer.cpp:83
std::vector< double > levelsForRange(double vMin, double vMax, const QVector< double > &samples={}) const
Definition isolinesublayer.cpp:92
Definition isolinesublayer.h:142
qreal opacity() const override
Definition isolinesublayer.h:160
void setOpacity(qreal o) override
Definition isolinesublayer.cpp:196
QString id() const override
Definition isolinesublayer.h:148
QSGNode * buildOrUpdateNode(QSGNode *existing, const SublayerContext &) override
Build (or update) the QSG node tree for this sublayer.
Definition isolinesublayer.cpp:223
Kind kind() const override
Definition isolinesublayer.h:147
SublayerStyle * style() override
Returns the property-bag QObject that owns this sublayer's style knobs.
Definition isolinesublayer.h:165
void setVisible(bool v) override
Definition isolinesublayer.cpp:189
IsolineStyle * isolineStyle() const
Definition isolinesublayer.h:170
QList< LegendSymbolItem > legendSymbolItems() const override
Returns the legend rows this sublayer contributes.
Definition isolinesublayer.cpp:205
bool isVisible() const override
Definition isolinesublayer.h:158
bool isDynamic() const override
Whether this sublayer's output depends on the current animation period.
Definition isolinesublayer.h:163
QString displayName() const override
Definition isolinesublayer.h:150
Base class for per-sublayer style property bags.
Definition sublayerstyle.h:56
void styleChanged()
Emitted when any property changes.
Slice US.1 (UNIFIED_STYLING_AND_UI_CONSISTENCY_PLAN.md S1) โ€” the shared classification value type emb...
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:82
Toggleable visual aspect of an output layer.
int a
Definition meshquadmatch.cpp:46
Definition gisrasterlayer.h:40
QVector< int > v
pool vertex indices
Definition pslgminsize.cpp:159
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
Per-frame parameters handed to ISublayer::buildOrUpdateNode().
Definition isublayer.h:73
QObject base class for per-sublayer style property bags.