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
gisvectorsymboladapter.h
Go to the documentation of this file.
1
14#ifndef OPENSWMMVIS_LAYERS_GISVECTORSYMBOLADAPTER_H
15#define OPENSWMMVIS_LAYERS_GISVECTORSYMBOLADAPTER_H
16
18
19#include <QColor>
20#include <QFont>
21#include <QObject>
22
23#include <functional>
24
25class GisVectorSymbolAdapter : public QObject
26{
27 Q_OBJECT
28 // Point / marker
30 Q_PROPERTY(double markerSize READ markerSize WRITE setMarkerSize NOTIFY symbolChanged)
31 Q_PROPERTY(QColor markerFill READ markerFill WRITE setMarkerFill NOTIFY symbolChanged)
32 Q_PROPERTY(QColor markerOutline READ markerOutline WRITE setMarkerOutline NOTIFY symbolChanged)
33 Q_PROPERTY(double markerOutlineW READ markerOutlineW WRITE setMarkerOutlineW NOTIFY symbolChanged)
34
35 // Line
36 Q_PROPERTY(QColor lineColor READ lineColor WRITE setLineColor NOTIFY symbolChanged)
37 Q_PROPERTY(double lineWidth READ lineWidth WRITE setLineWidth NOTIFY symbolChanged)
38 Q_PROPERTY(Qt::PenStyle lineDash READ lineDash WRITE setLineDash NOTIFY symbolChanged)
39
40 // Polygon
41 Q_PROPERTY(QColor polygonFill READ polygonFill WRITE setPolygonFill NOTIFY symbolChanged)
44
45 // Labels
46 Q_PROPERTY(bool showLabels READ showLabels WRITE setShowLabels NOTIFY symbolChanged)
47 Q_PROPERTY(QString labelField READ labelField WRITE setLabelField NOTIFY symbolChanged)
48 Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont NOTIFY symbolChanged)
49 Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor NOTIFY symbolChanged)
50
51 Q_CLASSINFO("group:markerShape", "Marker (points)")
52 Q_CLASSINFO("group:markerSize", "Marker (points)")
53 Q_CLASSINFO("group:markerFill", "Marker (points)")
54 Q_CLASSINFO("group:markerOutline", "Marker (points)")
55 Q_CLASSINFO("group:markerOutlineW", "Marker (points)")
56 Q_CLASSINFO("group:lineColor", "Line")
57 Q_CLASSINFO("group:lineWidth", "Line")
58 Q_CLASSINFO("group:lineDash", "Line")
59 Q_CLASSINFO("group:polygonFill", "Polygon")
60 Q_CLASSINFO("group:polygonOutlineColor", "Polygon")
61 Q_CLASSINFO("group:polygonOutlineWidth", "Polygon")
62 Q_CLASSINFO("group:showLabels", "Labels")
63 Q_CLASSINFO("group:labelField", "Labels")
64 Q_CLASSINFO("group:labelFont", "Labels")
65 Q_CLASSINFO("group:labelColor", "Labels")
66
67public:
77 Q_ENUM(MarkerShape)
78
79 using Writer = std::function<void(const GISVectorSymbol &)>;
80
82 Writer writer,
83 QObject *parent = nullptr)
84 : QObject(parent), m_sym(std::move(initial)), m_writer(std::move(writer))
85 {}
86
87 // Marker
88 [[nodiscard]] MarkerShape markerShape() const { return static_cast<MarkerShape>(m_sym.markerShape); }
89 [[nodiscard]] double markerSize() const { return m_sym.markerSize; }
90 [[nodiscard]] QColor markerFill() const { return m_sym.markerFill; }
91 [[nodiscard]] QColor markerOutline() const { return m_sym.markerOutline; }
92 [[nodiscard]] double markerOutlineW() const { return m_sym.markerOutlineW; }
93
94 void setMarkerShape(MarkerShape v) { if (markerShape() == v) return; m_sym.markerShape = static_cast<GISVectorSymbol::MarkerShape>(v); commit(); }
95 void setMarkerSize(double v) { if (qFuzzyCompare(m_sym.markerSize, v)) return; m_sym.markerSize = v; commit(); }
96 void setMarkerFill(const QColor &v) { if (m_sym.markerFill == v) return; m_sym.markerFill = v; commit(); }
97 void setMarkerOutline(const QColor &v) { if (m_sym.markerOutline == v) return; m_sym.markerOutline = v; commit(); }
98 void setMarkerOutlineW(double v) { if (qFuzzyCompare(m_sym.markerOutlineW, v)) return; m_sym.markerOutlineW = v; commit(); }
99
100 // Line — decompose QPen into colour/width/dash for the property editor.
101 [[nodiscard]] QColor lineColor() const { return m_sym.linePen.color(); }
102 [[nodiscard]] double lineWidth() const { return m_sym.linePen.widthF(); }
103 [[nodiscard]] Qt::PenStyle lineDash() const { return m_sym.linePen.style(); }
104 void setLineColor(const QColor &v) { QPen p = m_sym.linePen; if (p.color() == v) return; p.setColor(v); m_sym.linePen = p; commit(); }
105 void setLineWidth(double v) { QPen p = m_sym.linePen; if (qFuzzyCompare(p.widthF(), v)) return; p.setWidthF(v); m_sym.linePen = p; commit(); }
106 void setLineDash(Qt::PenStyle v) { QPen p = m_sym.linePen; if (p.style() == v) return; p.setStyle(v); m_sym.linePen = p; commit(); }
107
108 // Polygon — same QBrush/QPen decomposition.
109 [[nodiscard]] QColor polygonFill() const { return m_sym.polygonFill.color(); }
110 [[nodiscard]] QColor polygonOutlineColor() const { return m_sym.polygonOutline.color(); }
111 [[nodiscard]] double polygonOutlineWidth() const { return m_sym.polygonOutline.widthF(); }
112 void setPolygonFill(const QColor &v) { QBrush b = m_sym.polygonFill; if (b.color() == v) return; b.setColor(v); m_sym.polygonFill = b; commit(); }
113 void setPolygonOutlineColor(const QColor &v){ QPen p = m_sym.polygonOutline; if (p.color() == v) return; p.setColor(v); m_sym.polygonOutline = p; commit(); }
114 void setPolygonOutlineWidth(double v) { QPen p = m_sym.polygonOutline; if (qFuzzyCompare(p.widthF(), v)) return; p.setWidthF(v); m_sym.polygonOutline = p; commit(); }
115
116 // Labels
117 [[nodiscard]] bool showLabels() const { return m_sym.showLabels; }
118 [[nodiscard]] QString labelField() const { return m_sym.labelField; }
119 [[nodiscard]] QFont labelFont() const { return m_sym.labelFont; }
120 [[nodiscard]] QColor labelColor() const { return m_sym.labelColor; }
121 void setShowLabels(bool v) { if (m_sym.showLabels == v) return; m_sym.showLabels = v; commit(); }
122 void setLabelField(const QString &v) { if (m_sym.labelField == v) return; m_sym.labelField = v; commit(); }
123 void setLabelFont(const QFont &v) { if (m_sym.labelFont == v) return; m_sym.labelFont = v; commit(); }
124 void setLabelColor(const QColor &v) { if (m_sym.labelColor == v) return; m_sym.labelColor = v; commit(); }
125
130 {
131 m_sym = s;
132 emit symbolChanged();
133 }
134
135signals:
137
138private:
139 void commit()
140 {
141 if (m_writer) m_writer(m_sym);
142 emit symbolChanged();
143 }
144 GISVectorSymbol m_sym;
145 Writer m_writer;
146};
147
148#endif // OPENSWMMVIS_LAYERS_GISVECTORSYMBOLADAPTER_H
Definition gisvectorsymboladapter.h:26
void setPolygonOutlineColor(const QColor &v)
Definition gisvectorsymboladapter.h:113
QColor markerFill
Definition gisvectorsymboladapter.h:31
QString labelField() const
Definition gisvectorsymboladapter.h:118
QColor labelColor
Definition gisvectorsymboladapter.h:49
void setMarkerOutline(const QColor &v)
Definition gisvectorsymboladapter.h:97
void setMarkerOutlineW(double v)
Definition gisvectorsymboladapter.h:98
QColor polygonOutlineColor
Definition gisvectorsymboladapter.h:42
std::function< void(const GISVectorSymbol &)> Writer
Definition gisvectorsymboladapter.h:79
void setLineDash(Qt::PenStyle v)
Definition gisvectorsymboladapter.h:106
double lineWidth() const
Definition gisvectorsymboladapter.h:102
void setLabelColor(const QColor &v)
Definition gisvectorsymboladapter.h:124
QFont labelFont
Definition gisvectorsymboladapter.h:48
QColor markerOutline
Definition gisvectorsymboladapter.h:32
void setShowLabels(bool v)
Definition gisvectorsymboladapter.h:121
void setLineColor(const QColor &v)
Definition gisvectorsymboladapter.h:104
MarkerShape markerShape() const
Definition gisvectorsymboladapter.h:88
QColor polygonFill
Definition gisvectorsymboladapter.h:41
QColor polygonFill() const
Definition gisvectorsymboladapter.h:109
MarkerShape markerShape
Definition gisvectorsymboladapter.h:29
void setLineWidth(double v)
Definition gisvectorsymboladapter.h:105
void setPolygonFill(const QColor &v)
Definition gisvectorsymboladapter.h:112
void setMarkerSize(double v)
Definition gisvectorsymboladapter.h:95
QString labelField
Definition gisvectorsymboladapter.h:47
void setLabelField(const QString &v)
Definition gisvectorsymboladapter.h:122
double markerOutlineW
Definition gisvectorsymboladapter.h:33
void resyncFrom(const GISVectorSymbol &s)
Definition gisvectorsymboladapter.h:129
double lineWidth
Definition gisvectorsymboladapter.h:37
QColor polygonOutlineColor() const
Definition gisvectorsymboladapter.h:110
QFont labelFont() const
Definition gisvectorsymboladapter.h:119
MarkerShape
Definition gisvectorsymboladapter.h:69
@ Triangle
Definition gisvectorsymboladapter.h:72
@ Square
Definition gisvectorsymboladapter.h:71
@ Circle
Definition gisvectorsymboladapter.h:70
@ Star
Definition gisvectorsymboladapter.h:74
@ Diamond
Definition gisvectorsymboladapter.h:73
@ Cross
Definition gisvectorsymboladapter.h:75
bool showLabels() const
Definition gisvectorsymboladapter.h:117
Qt::PenStyle lineDash
Definition gisvectorsymboladapter.h:38
void setPolygonOutlineWidth(double v)
Definition gisvectorsymboladapter.h:114
QColor markerOutline() const
Definition gisvectorsymboladapter.h:91
bool showLabels
Definition gisvectorsymboladapter.h:46
double markerOutlineW() const
Definition gisvectorsymboladapter.h:92
QColor markerFill() const
Definition gisvectorsymboladapter.h:90
double markerSize
Definition gisvectorsymboladapter.h:30
double polygonOutlineWidth
Definition gisvectorsymboladapter.h:43
Qt::PenStyle lineDash() const
Definition gisvectorsymboladapter.h:103
QColor labelColor() const
Definition gisvectorsymboladapter.h:120
void setMarkerShape(MarkerShape v)
Definition gisvectorsymboladapter.h:94
void setLabelFont(const QFont &v)
Definition gisvectorsymboladapter.h:123
double markerSize() const
Definition gisvectorsymboladapter.h:89
QColor lineColor() const
Definition gisvectorsymboladapter.h:101
double polygonOutlineWidth() const
Definition gisvectorsymboladapter.h:111
QColor lineColor
Definition gisvectorsymboladapter.h:36
void setMarkerFill(const QColor &v)
Definition gisvectorsymboladapter.h:96
Map layer backed by an OGR vector dataset (Shapefile, GeoJSON, GeoPackage, …), rendering features as ...
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:82
ArrowPlacement p
Definition linesymbollayer.cpp:27
int b
local residual indices, a < b
Definition meshquadmatch.cpp:46
QVector< int > v
pool vertex indices
Definition pslgminsize.cpp:159
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
Rendering symbology for a vector layer.
Definition gisvectorlayer.h:52
QColor markerFill
Definition gisvectorlayer.h:58
double markerSize
Definition gisvectorlayer.h:57
double markerOutlineW
Definition gisvectorlayer.h:60
QColor labelColor
Definition gisvectorlayer.h:76
MarkerShape markerShape
Definition gisvectorlayer.h:56
QString labelField
Definition gisvectorlayer.h:74
MarkerShape
Definition gisvectorlayer.h:54
@ Star
Definition gisvectorlayer.h:54
@ Square
Definition gisvectorlayer.h:54
@ Cross
Definition gisvectorlayer.h:54
@ Diamond
Definition gisvectorlayer.h:54
@ Circle
Definition gisvectorlayer.h:54
@ Triangle
Definition gisvectorlayer.h:54
QColor markerOutline
Definition gisvectorlayer.h:59
QBrush polygonFill
Definition gisvectorlayer.h:69
QPen polygonOutline
Definition gisvectorlayer.h:70
bool showLabels
Definition gisvectorlayer.h:73
QPen linePen
Definition gisvectorlayer.h:66
QFont labelFont
Definition gisvectorlayer.h:75