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
meshbcsublayer.h
Go to the documentation of this file.
1
26#ifndef OPENSWMM_RENDER_SUBLAYERS_MESHBCSUBLAYER_H
27#define OPENSWMM_RENDER_SUBLAYERS_MESHBCSUBLAYER_H
28
29#include "render/isublayer.h"
31
32#include <QColor>
33#include <QJsonObject>
34#include <QSet>
35#include <QString>
36
37namespace OpenSWMM::Render
38{
39
41{
42 Q_OBJECT
43 // Wall governs the mesh INTERIOR: when the sublayer is visible and
44 // wallVisible is on, interior wireframe edges are recoloured with
45 // wallColor (the legacy colorByBC behaviour). Wall has no width — Wall
46 // edges ARE the wireframe and keep MeshEdgeStyle's line widths.
47 Q_PROPERTY(bool wallVisible READ wallVisible WRITE setWallVisible NOTIFY styleChanged)
48 Q_PROPERTY(QColor wallColor READ wallColor WRITE setWallColor NOTIFY styleChanged)
56 Q_PROPERTY(QColor stageTSColor READ stageTSColor WRITE setStageTSColor NOTIFY styleChanged)
57 Q_PROPERTY(double stageTSWidthPx READ stageTSWidthPx WRITE setStageTSWidthPx NOTIFY styleChanged)
59 Q_PROPERTY(QColor flowConstColor READ flowConstColor WRITE setFlowConstColor NOTIFY styleChanged)
61 Q_PROPERTY(bool flowTSVisible READ flowTSVisible WRITE setFlowTSVisible NOTIFY styleChanged)
62 Q_PROPERTY(QColor flowTSColor READ flowTSColor WRITE setFlowTSColor NOTIFY styleChanged)
63 Q_PROPERTY(double flowTSWidthPx READ flowTSWidthPx WRITE setFlowTSWidthPx NOTIFY styleChanged)
67
68 Q_CLASSINFO("group:wallVisible", "Wall / interior")
69 Q_CLASSINFO("group:wallColor", "Wall / interior")
70 Q_CLASSINFO("group:normalFlowVisible", "Normal flow")
71 Q_CLASSINFO("group:normalFlowColor", "Normal flow")
72 Q_CLASSINFO("group:normalFlowWidthPx", "Normal flow")
73 Q_CLASSINFO("group:stageConstVisible", "Stage (constant)")
74 Q_CLASSINFO("group:stageConstColor", "Stage (constant)")
75 Q_CLASSINFO("group:stageConstWidthPx", "Stage (constant)")
76 Q_CLASSINFO("group:stageTSVisible", "Stage (series)")
77 Q_CLASSINFO("group:stageTSColor", "Stage (series)")
78 Q_CLASSINFO("group:stageTSWidthPx", "Stage (series)")
79 Q_CLASSINFO("group:flowConstVisible", "Flow (constant)")
80 Q_CLASSINFO("group:flowConstColor", "Flow (constant)")
81 Q_CLASSINFO("group:flowConstWidthPx", "Flow (constant)")
82 Q_CLASSINFO("group:flowTSVisible", "Flow (series)")
83 Q_CLASSINFO("group:flowTSColor", "Flow (series)")
84 Q_CLASSINFO("group:flowTSWidthPx", "Flow (series)")
85 Q_CLASSINFO("group:ratingCurveVisible", "Rating curve")
86 Q_CLASSINFO("group:ratingCurveColor", "Rating curve")
87 Q_CLASSINFO("group:ratingCurveWidthPx", "Rating curve")
88
89public:
93 static constexpr int kBcTypeCount = 7;
94
95 explicit MeshBcStyle(QObject *parent = nullptr);
96
97 [[nodiscard]] bool wallVisible() const { return m_typeVisible[0]; }
98 [[nodiscard]] QColor wallColor() const { return m_colors[0]; }
99 [[nodiscard]] bool normalFlowVisible() const { return m_typeVisible[1]; }
100 [[nodiscard]] QColor normalFlowColor() const { return m_colors[1]; }
101 [[nodiscard]] double normalFlowWidthPx() const { return m_widths[1]; }
102 [[nodiscard]] bool stageConstVisible() const { return m_typeVisible[2]; }
103 [[nodiscard]] QColor stageConstColor() const { return m_colors[2]; }
104 [[nodiscard]] double stageConstWidthPx() const { return m_widths[2]; }
105 [[nodiscard]] bool stageTSVisible() const { return m_typeVisible[3]; }
106 [[nodiscard]] QColor stageTSColor() const { return m_colors[3]; }
107 [[nodiscard]] double stageTSWidthPx() const { return m_widths[3]; }
108 [[nodiscard]] bool flowConstVisible() const { return m_typeVisible[4]; }
109 [[nodiscard]] QColor flowConstColor() const { return m_colors[4]; }
110 [[nodiscard]] double flowConstWidthPx() const { return m_widths[4]; }
111 [[nodiscard]] bool flowTSVisible() const { return m_typeVisible[5]; }
112 [[nodiscard]] QColor flowTSColor() const { return m_colors[5]; }
113 [[nodiscard]] double flowTSWidthPx() const { return m_widths[5]; }
114 [[nodiscard]] bool ratingCurveVisible() const { return m_typeVisible[6]; }
115 [[nodiscard]] QColor ratingCurveColor() const { return m_colors[6]; }
116 [[nodiscard]] double ratingCurveWidthPx() const { return m_widths[6]; }
117
118 void setWallVisible(bool v) { setBcTypeVisible(0, v); }
119 void setWallColor(const QColor &v) { setBcColor(0, v); }
121 void setNormalFlowColor(const QColor &v) { setBcColor(1, v); }
122 void setNormalFlowWidthPx(double v) { setBcWidth(1, v); }
124 void setStageConstColor(const QColor &v) { setBcColor(2, v); }
125 void setStageConstWidthPx(double v) { setBcWidth(2, v); }
127 void setStageTSColor(const QColor &v) { setBcColor(3, v); }
128 void setStageTSWidthPx(double v) { setBcWidth(3, v); }
130 void setFlowConstColor(const QColor &v) { setBcColor(4, v); }
131 void setFlowConstWidthPx(double v) { setBcWidth(4, v); }
133 void setFlowTSColor(const QColor &v) { setBcColor(5, v); }
134 void setFlowTSWidthPx(double v) { setBcWidth(5, v); }
136 void setRatingCurveColor(const QColor &v) { setBcColor(6, v); }
137 void setRatingCurveWidthPx(double v) { setBcWidth(6, v); }
138
142 [[nodiscard]] QColor bcColorForType(int t) const
143 { return m_colors[(t >= 0 && t < kBcTypeCount) ? t : 0]; }
144
148 [[nodiscard]] double bcWidthForType(int t) const
149 { return m_widths[(t >= 0 && t < kBcTypeCount) ? t : 0]; }
150
153 [[nodiscard]] bool bcTypeVisible(int t) const
154 { return m_typeVisible[(t >= 0 && t < kBcTypeCount) ? t : 0]; }
155
159 void setBcColor(int idx, const QColor &v);
160 void setBcWidth(int idx, double v);
161 void setBcTypeVisible(int idx, bool v);
162
168 [[nodiscard]] bool isCustomized() const noexcept { return m_customized; }
169 void setCustomized(bool on) { m_customized = on; }
170
171 [[nodiscard]] QJsonObject toJson() const override;
172 void fromJson(const QJsonObject &j) override;
173
178 void seedFromLegacyEdgeJson(const QJsonObject &j);
179
180private:
181 QColor m_colors[kBcTypeCount];
182 double m_widths[kBcTypeCount];
183 bool m_typeVisible[kBcTypeCount];
184 bool m_customized = false;
185};
186
188{
189 Q_OBJECT
190public:
191 explicit MeshBcSublayer(QString id_, QObject *parent = nullptr);
192
193 Kind kind() const override { return LineKind; }
194 QString id() const override { return m_id; }
195 QString displayName() const override { return tr("Boundary Conditions"); }
196
197 bool isVisible() const override { return m_visible; }
198 void setVisible(bool v) override;
199 qreal opacity() const override { return m_opacity; }
200 void setOpacity(qreal o) override;
201
202 bool isDynamic() const override { return false; }
203
204 SublayerStyle *style() override { return m_style; }
205
206 QList<LegendSymbolItem> legendSymbolItems() const override;
207 QSGNode *buildOrUpdateNode(QSGNode *existing, const SublayerContext &) override;
208
209 [[nodiscard]] MeshBcStyle *bcStyle() const { return m_style; }
210
215 void setBcTypesPresent(const QSet<int> &types);
216 [[nodiscard]] const QSet<int> &bcTypesPresent() const { return m_bcTypesPresent; }
217
221 void setWallLegendWidthPx(double px);
222
223private:
224 QString m_id;
225 // Hidden by default — mirrors the legacy colorByBC=false default, so a
226 // fresh mesh renders byte-identically until the user opts in.
227 bool m_visible = false;
228 qreal m_opacity = 1.0;
229 MeshBcStyle *m_style;
230 QSet<int> m_bcTypesPresent { 0 };
231 double m_wallLegendWidthPx = 0.35;
232};
233
234} // namespace OpenSWMM::Render
235
236#endif
One toggleable visual aspect of a results / model layer.
Definition isublayer.h:87
Kind
Coarse taxonomy of sublayer paint behaviours.
Definition isublayer.h:100
@ LineKind
Definition isublayer.h:102
Definition meshbcsublayer.h:41
double stageTSWidthPx() const
Definition meshbcsublayer.h:107
void setRatingCurveWidthPx(double v)
Definition meshbcsublayer.h:137
QColor flowConstColor
Definition meshbcsublayer.h:59
void setFlowTSWidthPx(double v)
Definition meshbcsublayer.h:134
void seedFromLegacyEdgeJson(const QJsonObject &j)
Definition meshbcsublayer.cpp:136
double ratingCurveWidthPx() const
Definition meshbcsublayer.h:116
void setWallVisible(bool v)
Definition meshbcsublayer.h:118
bool normalFlowVisible() const
Definition meshbcsublayer.h:99
QColor stageTSColor
Definition meshbcsublayer.h:56
double stageConstWidthPx
Definition meshbcsublayer.h:54
bool ratingCurveVisible
Definition meshbcsublayer.h:64
void setStageTSWidthPx(double v)
Definition meshbcsublayer.h:128
void setFlowTSVisible(bool v)
Definition meshbcsublayer.h:132
QColor wallColor() const
Definition meshbcsublayer.h:98
void setBcColor(int idx, const QColor &v)
Definition meshbcsublayer.cpp:78
bool wallVisible
Definition meshbcsublayer.h:47
void setFlowConstVisible(bool v)
Definition meshbcsublayer.h:129
void setFlowConstColor(const QColor &v)
Definition meshbcsublayer.h:130
bool flowConstVisible() const
Definition meshbcsublayer.h:108
double ratingCurveWidthPx
Definition meshbcsublayer.h:66
void setStageConstWidthPx(double v)
Definition meshbcsublayer.h:125
void setNormalFlowVisible(bool v)
Definition meshbcsublayer.h:120
void setRatingCurveColor(const QColor &v)
Definition meshbcsublayer.h:136
bool flowTSVisible
Definition meshbcsublayer.h:61
QColor flowTSColor() const
Definition meshbcsublayer.h:112
void setCustomized(bool on)
Definition meshbcsublayer.h:169
bool stageConstVisible() const
Definition meshbcsublayer.h:102
bool bcTypeVisible(int t) const
Definition meshbcsublayer.h:153
bool stageConstVisible
Definition meshbcsublayer.h:52
void setBcTypeVisible(int idx, bool v)
Definition meshbcsublayer.cpp:95
QColor bcColorForType(int t) const
Definition meshbcsublayer.h:142
double flowTSWidthPx
Definition meshbcsublayer.h:63
QColor flowConstColor() const
Definition meshbcsublayer.h:109
double stageConstWidthPx() const
Definition meshbcsublayer.h:104
double flowConstWidthPx
Definition meshbcsublayer.h:60
double normalFlowWidthPx
Definition meshbcsublayer.h:51
QColor normalFlowColor() const
Definition meshbcsublayer.h:100
QColor stageConstColor() const
Definition meshbcsublayer.h:103
void fromJson(const QJsonObject &j) override
Restore the style from JSON.
Definition meshbcsublayer.cpp:116
double flowTSWidthPx() const
Definition meshbcsublayer.h:113
bool normalFlowVisible
Definition meshbcsublayer.h:49
static constexpr int kBcTypeCount
Definition meshbcsublayer.h:93
void setFlowTSColor(const QColor &v)
Definition meshbcsublayer.h:133
QJsonObject toJson() const override
Serialize the style to JSON.
Definition meshbcsublayer.cpp:103
bool ratingCurveVisible() const
Definition meshbcsublayer.h:114
QColor flowTSColor
Definition meshbcsublayer.h:62
void setFlowConstWidthPx(double v)
Definition meshbcsublayer.h:131
double stageTSWidthPx
Definition meshbcsublayer.h:57
QColor wallColor
Definition meshbcsublayer.h:48
QColor stageTSColor() const
Definition meshbcsublayer.h:106
QColor stageConstColor
Definition meshbcsublayer.h:53
void setStageTSColor(const QColor &v)
Definition meshbcsublayer.h:127
void setStageConstColor(const QColor &v)
Definition meshbcsublayer.h:124
bool stageTSVisible
Definition meshbcsublayer.h:55
void setBcWidth(int idx, double v)
Definition meshbcsublayer.cpp:86
QColor normalFlowColor
Definition meshbcsublayer.h:50
QColor ratingCurveColor() const
Definition meshbcsublayer.h:115
bool isCustomized() const noexcept
Definition meshbcsublayer.h:168
void setWallColor(const QColor &v)
Definition meshbcsublayer.h:119
void setNormalFlowWidthPx(double v)
Definition meshbcsublayer.h:122
bool flowTSVisible() const
Definition meshbcsublayer.h:111
double flowConstWidthPx() const
Definition meshbcsublayer.h:110
bool stageTSVisible() const
Definition meshbcsublayer.h:105
void setStageTSVisible(bool v)
Definition meshbcsublayer.h:126
void setStageConstVisible(bool v)
Definition meshbcsublayer.h:123
bool flowConstVisible
Definition meshbcsublayer.h:58
void setRatingCurveVisible(bool v)
Definition meshbcsublayer.h:135
QColor ratingCurveColor
Definition meshbcsublayer.h:65
double bcWidthForType(int t) const
Definition meshbcsublayer.h:148
void setNormalFlowColor(const QColor &v)
Definition meshbcsublayer.h:121
double normalFlowWidthPx() const
Definition meshbcsublayer.h:101
Definition meshbcsublayer.h:188
QList< LegendSymbolItem > legendSymbolItems() const override
Returns the legend rows this sublayer contributes.
Definition meshbcsublayer.cpp:203
QString displayName() const override
Definition meshbcsublayer.h:195
MeshBcStyle * bcStyle() const
Definition meshbcsublayer.h:209
void setWallLegendWidthPx(double px)
Definition meshbcsublayer.cpp:195
qreal opacity() const override
Definition meshbcsublayer.h:199
bool isVisible() const override
Definition meshbcsublayer.h:197
SublayerStyle * style() override
Returns the property-bag QObject that owns this sublayer's style knobs.
Definition meshbcsublayer.h:204
void setOpacity(qreal o) override
Definition meshbcsublayer.cpp:176
QString id() const override
Definition meshbcsublayer.h:194
const QSet< int > & bcTypesPresent() const
Definition meshbcsublayer.h:216
void setBcTypesPresent(const QSet< int > &types)
Definition meshbcsublayer.cpp:184
bool isDynamic() const override
Whether this sublayer's output depends on the current animation period.
Definition meshbcsublayer.h:202
QSGNode * buildOrUpdateNode(QSGNode *existing, const SublayerContext &) override
Build (or update) the QSG node tree for this sublayer.
Definition meshbcsublayer.cpp:233
Kind kind() const override
Definition meshbcsublayer.h:193
void setVisible(bool v) override
Definition meshbcsublayer.cpp:169
Base class for per-sublayer style property bags.
Definition sublayerstyle.h:56
void styleChanged()
Emitted when any property changes.
DiagramType t
Definition diagramspec.cpp:20
Toggleable visual aspect of an output layer.
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.