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
traceanalysislayer.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
2
12#pragma once
14#include "output/tracedata.h"
17#include "render/labelconfig.h"
18#include <QPainterPath>
20
22{
23// Every visual channel has its own field, range, transform and palette.
24struct Channel {
25 QString field = QStringLiteral("ratio"), transform = QStringLiteral("linear");
26 bool automatic = true;
27 double minimum = 0, maximum = 1, minimumSize = 2, maximumSize = 14;
28 bool proportional = true; // Link widths only: a shared zero-based linear scale.
34 Channel();
38 QJsonObject toJson() const;
43 static Channel fromJson(const QJsonObject &j);
44};
47 bool showId = true, percent = true;
48 int precision = 2;
57 QJsonObject toJson() const;
62 static TraceLabels fromJson(const QJsonObject &j);
63};
65{
66 Q_OBJECT
67 Q_PROPERTY(bool arrows READ arrows WRITE setArrows NOTIFY styleChanged)
68 Q_PROPERTY(bool labels READ labels WRITE setLabels NOTIFY styleChanged)
69public:
74 explicit TraceStyle(QObject *p = nullptr) : SublayerStyle(p) { linkWidth.minimumSize = 0; }
80 double taper() const { return m_taper; }
85 void setTaper(double v);
89 bool arrows() const { return m_arrows; }
94 void setArrows(bool v);
96
99 double minContribution() const { return m_minContribution; }
104 void setMinContribution(double v);
108 bool labels() const { return nodeLabels.appearance.enabled; }
113 void setLabels(bool v);
117 void changed() { setDirty(); }
121 QJsonObject toJson() const override;
126 void fromJson(const QJsonObject &j) override;
127
128private:
129 double m_taper = 1;
130 bool m_arrows = true;
131 double m_minContribution = 0.001;
132};
133// Pure pixel-space geometry, shared by painting and hit testing. Duplicate
134// vertices are discarded; segment joins use round disks to avoid miter spikes.
142QPainterPath taperedPath(const QVector<QPointF> &input, double startWidth, double endWidth);
148QString fieldLabel(const QString &f, bool node = false);
150{
151 Q_OBJECT
152public:
159 explicit TraceAnalysisLayer(std::shared_ptr<Result> r, OpenSWMMVisWorkspace *w = nullptr);
163 std::shared_ptr<Result> result() const { return m_result; }
171 bool contributes(bool node, int index) const;
176 void setResult(std::shared_ptr<Result> result);
180 TraceStyle *traceStyle() const { return m_style; }
184 QList<OpenSWMM::Render::ISublayer *> sublayers() const override { return m_parts; }
188 std::vector<std::unique_ptr<openswmmvis::ui::ILayerStyleSubject>> styleSubjects() override;
192 QString sourceDescription() const override;
198 void populateScene(QGraphicsScene *scene, const MapExtent &,
199 const SpatialReferenceSystem *canvas) override;
206 void paint(QPainter *p, const QVector<QPointF> &nodes,
207 const QVector<QVector<QPointF>> &links) const;
215 double value(bool node, int index, const QString &field) const;
222 QPair<double, double> range(bool node, const Channel &c) const;
230 double normalized(bool node, int index, const Channel &c) const;
236 QList<OpenSWMM::Render::LegendSymbolItem> legend(bool node) const;
246 bool hitTest(QPointF pixel, const QTransform &mapToPixel, const SpatialReferenceSystem *canvas,
247 bool *node, int *index) const;
253 void highlight(bool node, int index);
257 double widthReference() const { return widthReference(m_style->linkWidth); }
262 double widthReference(const Channel &c) const;
266 QVector<double> linkWidths() const;
270 QVector<double> nodeSizes() const;
277 QVector<double> samples(bool node, const Channel &c) const;
283 QVector<QColor> colors(bool node) const;
290 QString labelText(bool node, int index) const;
294 QJsonObject savedStyle() const;
299 void restoreStyle(const QJsonObject &j);
300signals:
306 void featurePicked(bool node, int index);
307
308private:
315 QVector<double> colorEdges(bool node, const Channel &channel) const;
316 struct ColorCache {
317 QString field;
318 quint64 revision = 0;
319 QVector<double> edges;
320 };
321 mutable ColorCache m_nodeColorCache, m_linkColorCache;
322 std::shared_ptr<Result> m_result;
323 TraceStyle *m_style;
324 QList<OpenSWMM::Render::ISublayer *> m_parts;
325 bool m_highlightNode = true;
326 int m_highlight = -1;
327};
328// A static child of one immutable output run. The output owns both this
329// tree row and its painter; no separate top-level analysis layer is needed.
331{
332public:
340 TraceSublayer(SWMMResultsLayer *owner, std::shared_ptr<Result> result, bool travel);
344 Kind kind() const override { return LineKind; }
348 QString id() const override;
352 QString displayName() const override;
356 bool isVisible() const override { return m_layer->isVisible(); }
361 void setVisible(bool v) override { m_layer->setVisible(v); }
365 qreal opacity() const override { return m_layer->opacity(); }
370 void setOpacity(qreal v) override { m_layer->setOpacity(v); }
374 bool isDynamic() const override { return false; }
378 OpenSWMM::Render::SublayerStyle *style() override { return m_layer->traceStyle(); }
382 QList<OpenSWMM::Render::LegendSymbolItem> legendSymbolItems() const override;
387 QSGNode *buildOrUpdateNode(QSGNode *, const OpenSWMM::Render::SublayerContext &) override
388 {
389 return nullptr;
390 }
394 TraceAnalysisLayer *layer() const { return m_layer; }
398 bool travel() const { return m_travel; }
399
400private:
401 TraceAnalysisLayer *m_layer;
402 bool m_travel;
403};
404} // namespace openswmmvis::trace
An axis-aligned bounding box in the coordinate space of a given CRS.
Definition mapextent.h:27
Shared classification model: mode + binner + ramp + range + per-class overrides, with a revision stam...
Definition classificationscheme.h:63
Mixin interface for layers that expose a list of ISublayers.
Definition isublayerhost.h:67
One toggleable visual aspect of a results / model layer.
Definition isublayer.h:88
Kind
Coarse taxonomy of sublayer paint behaviours.
Definition isublayer.h:100
@ LineKind
Definition isublayer.h:102
Base class for per-sublayer style property bags.
Definition sublayerstyle.h:58
void styleChanged()
Emitted when any property changes.
void setDirty()
Emit styleChanged() immediately without tracking or comparing any state. Subclasses determine whether...
Definition sublayerstyle.h:109
Abstract base class for all layers displayed in the MapCanvas.
Definition openswmmvislayer.h:133
void setVisible(bool visible)
Shows or hides this layer.
Definition openswmmvislayer.cpp:92
double opacity() const
Returns the layer opacity in the range [0.0, 1.0]. 0.0 = fully transparent; 1.0 = fully opaque.
Definition openswmmvislayer.cpp:101
void setOpacity(double opacity)
Sets the layer opacity. Values are clamped to [0.0, 1.0].
Definition openswmmvislayer.cpp:106
bool isVisible() const
Returns true when this layer should be drawn.
Definition openswmmvislayer.cpp:87
Top-level project container managing sessions, the SWMM model layer, and persistence paths for one SW...
Definition openswmmvisworkspace.h:42
Overlays time-stepped simulation results on the SWMM network geometry.
Definition swmmresultslayer.h:104
Represents a coordinate reference system backed by a GDAL OGRSpatialReference.
Definition spatialreferencesystem.h:29
Slice US.1 (UNIFIED_STYLING_AND_UI_CONSISTENCY_PLAN.md S1) — the shared classification value type emb...
Definition traceanalysislayer.h:150
QList< OpenSWMM::Render::LegendSymbolItem > legend(bool node) const
Build colour and size legend rows for one element type.
Definition traceanalysislayer.cpp:774
QJsonObject savedStyle() const
Definition traceanalysislayer.cpp:400
std::vector< std::unique_ptr< openswmmvis::ui::ILayerStyleSubject > > styleSubjects() override
Definition traceanalysislayer.cpp:456
void restoreStyle(const QJsonObject &j)
Definition traceanalysislayer.cpp:410
QVector< QColor > colors(bool node) const
Compute one colour per saved estimate using the selected colour channel.
Definition traceanalysislayer.cpp:589
double widthReference() const
Definition traceanalysislayer.h:257
void featurePicked(bool node, int index)
void paint(QPainter *p, const QVector< QPointF > &nodes, const QVector< QVector< QPointF > > &links) const
Definition traceanalysislayer.cpp:638
QPair< double, double > range(bool node, const Channel &c) const
Find numeric scaling bounds over contributing finite values.
Definition traceanalysislayer.cpp:543
double normalized(bool node, int index, const Channel &c) const
Map a raw metric into channel position.
Definition traceanalysislayer.cpp:561
void populateScene(QGraphicsScene *scene, const MapExtent &, const SpatialReferenceSystem *canvas) override
Definition traceanalysislayer.cpp:463
bool contributes(bool node, int index) const
Definition traceanalysislayer.cpp:426
QString sourceDescription() const override
Definition traceanalysislayer.cpp:422
QList< OpenSWMM::Render::ISublayer * > sublayers() const override
Definition traceanalysislayer.h:184
void setResult(std::shared_ptr< Result > result)
Definition traceanalysislayer.cpp:439
TraceStyle * traceStyle() const
Definition traceanalysislayer.h:180
bool hitTest(QPointF pixel, const QTransform &mapToPixel, const SpatialReferenceSystem *canvas, bool *node, int *index) const
Pick visible contributing nodes before links using display-size pixel geometry.
Definition traceanalysislayer.cpp:847
QString labelText(bool node, int index) const
Format one enabled node/link label from saved values.
Definition traceanalysislayer.cpp:609
std::shared_ptr< Result > result() const
Definition traceanalysislayer.h:163
QVector< double > linkWidths() const
Definition traceanalysislayer.cpp:926
QVector< double > nodeSizes() const
Definition traceanalysislayer.cpp:941
void highlight(bool node, int index)
Definition traceanalysislayer.cpp:993
Definition traceanalysislayer.h:65
Channel linkColor
Definition traceanalysislayer.h:75
void setArrows(bool v)
Definition traceanalysislayer.cpp:255
TraceLabels nodeLabels
Definition traceanalysislayer.h:76
bool labels
Definition traceanalysislayer.h:68
bool arrows() const
Definition traceanalysislayer.h:89
void setTaper(double v)
Definition traceanalysislayer.cpp:247
void setLabels(bool v)
Definition traceanalysislayer.cpp:270
QJsonObject toJson() const override
Definition traceanalysislayer.cpp:277
double taper() const
Definition traceanalysislayer.h:80
Channel nodeSize
Definition traceanalysislayer.h:75
Channel nodeColor
Definition traceanalysislayer.h:75
void changed()
Announce direct public channel/label edits through SublayerStyle::setDirty(); no validation or source...
Definition traceanalysislayer.h:117
bool labels() const
Definition traceanalysislayer.h:108
TraceLabels linkLabels
Definition traceanalysislayer.h:76
double minContribution() const
Elements carrying less than this fraction of the seed's flow are hidden and unlabelled.
Definition traceanalysislayer.h:99
Channel linkWidth
Definition traceanalysislayer.h:75
bool arrows
Definition traceanalysislayer.h:67
void fromJson(const QJsonObject &j) override
Definition traceanalysislayer.cpp:291
void setMinContribution(double v)
Definition traceanalysislayer.cpp:262
Definition traceanalysislayer.h:331
qreal opacity() const override
Definition traceanalysislayer.h:365
Kind kind() const override
Definition traceanalysislayer.h:344
QSGNode * buildOrUpdateNode(QSGNode *, const OpenSWMM::Render::SublayerContext &) override
Decline Qt Quick scene-node rendering for this painter-based analysis.
Definition traceanalysislayer.h:387
QList< OpenSWMM::Render::LegendSymbolItem > legendSymbolItems() const override
Definition traceanalysislayer.cpp:982
QString id() const override
Definition traceanalysislayer.cpp:967
void setVisible(bool v) override
Definition traceanalysislayer.h:361
TraceAnalysisLayer * layer() const
Definition traceanalysislayer.h:394
bool travel() const
Definition traceanalysislayer.h:398
bool isVisible() const override
Definition traceanalysislayer.h:356
OpenSWMM::Render::SublayerStyle * style() override
Definition traceanalysislayer.h:378
void setOpacity(qreal v) override
Definition traceanalysislayer.h:370
bool isDynamic() const override
Definition traceanalysislayer.h:374
QString displayName() const override
Definition traceanalysislayer.cpp:971
QGraphicsScene * scene
Definition inletdrawingview.cpp:91
Mixin interface for layers that own a list of ISublayers.
Shared label-configuration value-type used by every layer that paints text labels.
ArrowPlacement p
Definition linesymbollayer.cpp:29
int w
Definition mesh2dresultsexport.cpp:477
std::vector< int > owner
containing cell per pixel (-1 = outside)
Definition mesh2dresultsexport.cpp:766
Definition traceanalysislayer.h:22
QPainterPath taperedPath(const QVector< QPointF > &input, double startWidth, double endWidth)
Build a filled pixel-space ribbon with segment quads and round join disks.
Definition traceanalysislayer.cpp:310
QString fieldLabel(const QString &f, bool node=false)
Definition traceanalysislayer.cpp:341
std::vector< Edge > edges
Definition constraintaudit.cpp:192
Abstract base class for all map layers displayed in the MapCanvas.
QString node
Definition raingageassignment.cpp:301
double value
Definition rasterfluxintegration.cpp:27
QVector< double > samples
Definition resultscalarsublayer.cpp:29
std::ifstream input
Definition smsio.cpp:21
Per-layer label rendering parameters.
Definition labelconfig.h:50
bool enabled
Definition labelconfig.h:52
Per-frame parameters handed to ISublayer::buildOrUpdateNode().
Definition isublayer.h:74
Definition traceanalysislayer.h:24
OpenSWMM::Render::ClassificationScheme colors
Definition traceanalysislayer.h:29
double minimumSize
Definition traceanalysislayer.h:27
static Channel fromJson(const QJsonObject &j)
Definition traceanalysislayer.cpp:196
double maximum
Definition traceanalysislayer.h:27
double maximumSize
Definition traceanalysislayer.h:27
double minimum
Definition traceanalysislayer.h:27
Channel()
Initialize an independent visual channel with a continuous colour scheme and ratio/linear/automatic d...
Definition traceanalysislayer.cpp:180
QString transform
Definition traceanalysislayer.h:25
QString field
Definition traceanalysislayer.h:25
QJsonObject toJson() const
Definition traceanalysislayer.cpp:184
bool proportional
Definition traceanalysislayer.h:28
bool automatic
Definition traceanalysislayer.h:26
Definition traceanalysislayer.h:45
QJsonObject toJson() const
Definition traceanalysislayer.cpp:230
bool percent
Definition traceanalysislayer.h:47
int precision
Definition traceanalysislayer.h:48
TraceLabels()
Initialize ratio labels with a halo, two decimal digits and percent/ID formatting enabled.
Definition traceanalysislayer.cpp:225
static TraceLabels fromJson(const QJsonObject &j)
Definition traceanalysislayer.cpp:237
OpenSWMM::Render::LabelConfig appearance
Definition traceanalysislayer.h:46
bool showId
Definition traceanalysislayer.h:47
double c
Definition terrainerrorfield.cpp:42
QVector< QPointF > nodes
Definition traceanalysislayer.cpp:163
QVector< QVector< QPointF > > links
Definition traceanalysislayer.cpp:164
Value types for flow balance and travel-time analysis results.