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
rule.h
Go to the documentation of this file.
1
27#ifndef OPENSWMM_RENDER_RULE_H
28#define OPENSWMM_RENDER_RULE_H
29
31
32#include <QJsonObject>
33#include <QObject>
34#include <QString>
35
36#include <memory>
37
38namespace OpenSWMM::Render
39{
40
50class Rule : public QObject
51{
52 Q_OBJECT
53 Q_PROPERTY(QString name READ name WRITE setName NOTIFY ruleChanged)
54 Q_PROPERTY(bool isVisible READ isVisible WRITE setVisible NOTIFY ruleChanged)
56 NOTIFY ruleChanged)
57 Q_PROPERTY(double minScale READ minScale WRITE setMinScale NOTIFY ruleChanged)
58 Q_PROPERTY(double maxScale READ maxScale WRITE setMaxScale NOTIFY ruleChanged)
59 Q_PROPERTY(QString blendMode READ blendMode WRITE setBlendMode NOTIFY ruleChanged)
65 Q_PROPERTY(bool rebinPerFrame READ rebinPerFrame WRITE setRebinPerFrame
66 NOTIFY ruleChanged)
74
75public:
76 explicit Rule(QObject *parent = nullptr);
77 Rule(QString name,
78 std::unique_ptr<IFeatureRenderer> renderer,
79 QObject *parent = nullptr);
80 ~Rule() override;
81
82 // Non-copyable / non-movable: Rule has identity (signals, owned renderer).
83 Rule(const Rule &) = delete;
84 Rule &operator=(const Rule &) = delete;
85 Rule(Rule &&) = delete;
86 Rule &operator=(Rule &&) = delete;
87
88 [[nodiscard]] QString name() const { return m_name; }
89 void setName(const QString &name);
90
91 [[nodiscard]] bool isVisible() const { return m_isVisible; }
92 void setVisible(bool v);
93
103 [[nodiscard]] QString filterExpression() const { return m_filterExpression; }
104 void setFilterExpression(const QString &expr);
105
107 [[nodiscard]] double minScale() const { return m_minScale; }
108 void setMinScale(double s);
109
111 [[nodiscard]] double maxScale() const { return m_maxScale; }
112 void setMaxScale(double s);
113
119 [[nodiscard]] QString blendMode() const { return m_blendMode; }
120 void setBlendMode(const QString &m);
121
123 [[nodiscard]] bool rebinPerFrame() const { return m_rebinPerFrame; }
124 void setRebinPerFrame(bool v);
125
127 [[nodiscard]] bool symbolLevelsEnabled() const { return m_symbolLevelsEnabled; }
128 void setSymbolLevelsEnabled(bool v);
129
133 [[nodiscard]] IFeatureRenderer *renderer() const { return m_renderer.get(); }
134
137 void setRenderer(std::unique_ptr<IFeatureRenderer> r);
138
148 bool setRendererById(const QString &id);
149
158
161 [[nodiscard]] QJsonObject toJson() const;
162
167 [[nodiscard]] static std::unique_ptr<Rule> fromJson(const QJsonObject &j,
168 QObject *parent = nullptr);
169
173 [[nodiscard]] std::unique_ptr<Rule> clone(QObject *parent = nullptr) const;
174
175signals:
176 void ruleChanged();
179private:
180 QString m_name;
181 bool m_isVisible = true;
182 QString m_filterExpression;
183 double m_minScale = 0.0;
184 double m_maxScale = 0.0;
185 QString m_blendMode = QStringLiteral("Normal");
186 bool m_rebinPerFrame = false;
187 bool m_symbolLevelsEnabled = false;
188 std::unique_ptr<IFeatureRenderer> m_renderer;
189};
190
191} // namespace OpenSWMM::Render
192
193#endif // OPENSWMM_RENDER_RULE_H
Abstract interface — every vector layer's paint path goes here.
Definition ifeaturerenderer.h:85
One layer-scope styled aspect — name + renderer + filter + scale.
Definition rule.h:51
bool setRendererById(const QString &id)
Slice Z.3b — swap the renderer to a freshly-constructed instance of the renderer class identified by ...
Definition rule.cpp:154
double maxScale() const
Maximum map scale at which this Rule paints. 0 = unbounded.
Definition rule.h:111
double minScale() const
Minimum map scale at which this Rule paints. 0 = unbounded.
Definition rule.h:107
void setFilterExpression(const QString &expr)
Definition rule.cpp:91
QString blendMode
Definition rule.h:59
void setRebinPerFrame(bool v)
Definition rule.cpp:123
bool isVisible() const
Definition rule.h:91
QString blendMode() const
Composition / blend mode for this Rule's paint pass. "Normal" (default), "Multiply",...
Definition rule.h:119
QString filterExpression
Definition rule.h:56
void setRenderer(std::unique_ptr< IFeatureRenderer > r)
Replace the renderer. Takes ownership; the old renderer is destroyed. Emits rendererReplaced() then r...
Definition rule.cpp:139
bool symbolLevelsEnabled
Definition rule.h:73
bool isVisible
Definition rule.h:54
std::unique_ptr< Rule > clone(QObject *parent=nullptr) const
Deep copy. Owned renderer is cloned via IFeatureRenderer::clone(). The copy carries the same property...
Definition rule.cpp:237
double minScale
Definition rule.h:57
void setBlendMode(const QString &m)
Definition rule.cpp:115
void setVisible(bool v)
Definition rule.cpp:83
static std::unique_ptr< Rule > fromJson(const QJsonObject &j, QObject *parent=nullptr)
Construct a Rule from JSON. Returns nullptr if the JSON is malformed (no "renderer" object or an unkn...
Definition rule.cpp:202
IFeatureRenderer * renderer() const
The owned renderer. Never null in a default-constructed Rule — the constructor seeds it with a Single...
Definition rule.h:133
QJsonObject toJson() const
Serialise this Rule to a JSON object suitable for .swmm-rule.json and .oswp persistence.
Definition rule.cpp:178
void notifyRendererStateChanged()
Slice B.6c-fix — notify listeners that the owned renderer's internal state has changed without the po...
Definition rule.cpp:148
void setName(const QString &name)
Definition rule.cpp:75
QString filterExpression() const
Optional first-match filter expression — same DSL as RuleBasedRenderer (see ExpressionEvaluator).
Definition rule.h:103
bool symbolLevelsEnabled() const
Definition rule.h:127
void setMaxScale(double s)
Definition rule.cpp:107
void setSymbolLevelsEnabled(bool v)
Definition rule.cpp:131
QString name
Definition rule.h:53
double maxScale
Definition rule.h:58
void setMinScale(double s)
Definition rule.cpp:99
bool rebinPerFrame
Definition rule.h:66
bool rebinPerFrame() const
Definition rule.h:123
The single seam every layer paint path goes through.
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:82
MaskMode m
Definition maskspec.cpp:18
Definition gisrasterlayer.h:40
QVector< int > v
pool vertex indices
Definition pslgminsize.cpp:159
QVector< int > parent
union-find
Definition pslgminsize.cpp:176