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
maptoolfeatureedit.h
Go to the documentation of this file.
1
25#ifndef MAPTOOLFEATUREEDIT_H
26#define MAPTOOLFEATUREEDIT_H
27
31
32#include <QPointF>
33#include <QPointer>
34
35class FeatureLayer;
36
44{
45 int part = -1;
46 int ring = -1;
47 int vertex = -1;
48
49 [[nodiscard]] bool isValid() const { return part >= 0 && vertex >= 0; }
50 void clear() { part = -1; ring = -1; vertex = -1; }
51 [[nodiscard]] bool operator==(const FeatureVertexRef &o) const
52 { return part == o.part && ring == o.ring && vertex == o.vertex; }
53};
54
65{
66 Q_OBJECT
67public:
68 explicit OpenSWMMVisMapToolAddHole(MapCanvas *canvas, QObject *parent = nullptr);
69
70protected:
71 [[nodiscard]] int minimumVertices() const override { return 3; }
72 [[nodiscard]] bool isClosed() const override { return true; }
74 buildGeometry(const openswmmvis::feature::Ring &ring) const override;
75
76private:
79 [[nodiscard]] openswmmvis::feature::FeatureId selectedFeature() const;
80};
81
91{
92 Q_OBJECT
93public:
94 explicit OpenSWMMVisMapToolAddPart(MapCanvas *canvas, QObject *parent = nullptr);
95
96protected:
97 [[nodiscard]] int minimumVertices() const override;
98 [[nodiscard]] bool isClosed() const override;
100 buildGeometry(const openswmmvis::feature::Ring &ring) const override;
101
102private:
103 [[nodiscard]] openswmmvis::feature::FeatureId selectedFeature() const;
104};
105
111{
112 Q_OBJECT
113public:
115 QObject *parent = nullptr);
116
117 void setTargetLayer(FeatureLayer *layer);
118 [[nodiscard]] FeatureLayer *targetLayer() const { return m_target.data(); }
119
120 [[nodiscard]] QCursor cursor() const override;
121 void activate() override;
122 void deactivate() override;
123
124 void mousePressEvent(QMouseEvent *event) override;
125 void mouseMoveEvent(QMouseEvent *event) override;
126 void mouseReleaseEvent(QMouseEvent *event) override;
127 void keyPressEvent(QKeyEvent *event) override;
128 void paint(QPainter *painter, const MapExtent &canvasExtent,
129 const SpatialReferenceSystem *canvasSRS) override;
130
131signals:
132 void editRejected(const QString &reason);
133
134private:
136 void reloadSelection();
138 [[nodiscard]] FeatureVertexRef handleAt(const QPoint &pos, int tolPx = 7) const;
140 [[nodiscard]] FeatureVertexRef segmentAt(const QPoint &pos, int tolPx = 6) const;
141 [[nodiscard]] openswmmvis::feature::Ring *ringFor(const FeatureVertexRef &ref);
142 [[nodiscard]] const openswmmvis::feature::Ring *
143 ringFor(const FeatureVertexRef &ref) const;
145 void pushEdit(const QString &text, bool mergeable);
146
147 QPointer<FeatureLayer> m_target;
151 FeatureVertexRef m_hover;
152 FeatureVertexRef m_dragging;
153 bool m_dragged = false;
154};
155
161{
162 Q_OBJECT
163public:
164 explicit OpenSWMMVisMapToolMoveFeature(MapCanvas *canvas, QObject *parent = nullptr);
165
166 void setTargetLayer(FeatureLayer *layer);
167
168 [[nodiscard]] QCursor cursor() const override;
169 void deactivate() override;
170 void mousePressEvent(QMouseEvent *event) override;
171 void mouseMoveEvent(QMouseEvent *event) override;
172 void mouseReleaseEvent(QMouseEvent *event) override;
173 void keyPressEvent(QKeyEvent *event) override;
174
175private:
176 QPointer<FeatureLayer> m_target;
179 QPointF m_anchor;
180 bool m_moving = false;
181};
182
183#endif // MAPTOOLFEATUREEDIT_H
An editable, GeoPackage-backed vector layer.
Definition featurelayer.h:127
The central map display widget — QGIS-style hybrid rendering.
Definition mapcanvas.h:63
An axis-aligned bounding box in the coordinate space of a given CRS.
Definition mapextent.h:26
Draw a ring inside the selected polygon; it becomes an interior ring.
Definition maptoolfeatureedit.h:65
bool isClosed() const override
Definition maptoolfeatureedit.h:72
openswmmvis::feature::FeatureGeometry buildGeometry(const openswmmvis::feature::Ring &ring) const override
Definition maptoolfeatureedit.cpp:71
int minimumVertices() const override
Definition maptoolfeatureedit.h:71
Draw an additional part for the selected multi-part feature.
Definition maptoolfeatureedit.h:91
bool isClosed() const override
Definition maptoolfeatureedit.cpp:133
openswmmvis::feature::FeatureGeometry buildGeometry(const openswmmvis::feature::Ring &ring) const override
Definition maptoolfeatureedit.cpp:141
int minimumVertices() const override
Definition maptoolfeatureedit.cpp:120
Move, insert and delete vertices of the selected feature.
Definition maptoolfeatureedit.h:111
void mouseReleaseEvent(QMouseEvent *event) override
Definition maptoolfeatureedit.cpp:389
void keyPressEvent(QKeyEvent *event) override
Definition maptoolfeatureedit.cpp:412
void editRejected(const QString &reason)
void mouseMoveEvent(QMouseEvent *event) override
Definition maptoolfeatureedit.cpp:366
FeatureLayer * targetLayer() const
Definition maptoolfeatureedit.h:118
void paint(QPainter *painter, const MapExtent &canvasExtent, const SpatialReferenceSystem *canvasSRS) override
Called by the canvas in drawForeground() so the tool can draw transient overlay graphics (rubber-band...
Definition maptoolfeatureedit.cpp:426
void setTargetLayer(FeatureLayer *layer)
Definition maptoolfeatureedit.cpp:179
void activate() override
Called by the canvas when this tool becomes the active tool.
Definition maptoolfeatureedit.cpp:191
void mousePressEvent(QMouseEvent *event) override
Definition maptoolfeatureedit.cpp:318
void deactivate() override
Called by the canvas when another tool replaces this one.
Definition maptoolfeatureedit.cpp:197
QCursor cursor() const override
Returns the mouse cursor to display while this tool is active.
Definition maptoolfeatureedit.cpp:186
Shared vertex accumulation, rubber band, snapping and commit.
Definition maptoolfeaturedraw.h:56
Abstract base class for interactive map tools used in the MapCanvas.
Definition maptool.h:43
MapCanvas * canvas() const
Returns the MapCanvas this tool is attached to.
Definition maptool.cpp:29
Drag the whole selected feature.
Definition maptoolfeatureedit.h:161
void keyPressEvent(QKeyEvent *event) override
Definition maptoolfeatureedit.cpp:549
void setTargetLayer(FeatureLayer *layer)
Definition maptoolfeatureedit.cpp:466
void deactivate() override
Called by the canvas when another tool replaces this one.
Definition maptoolfeatureedit.cpp:476
void mouseMoveEvent(QMouseEvent *event) override
Definition maptoolfeatureedit.cpp:503
void mouseReleaseEvent(QMouseEvent *event) override
Definition maptoolfeatureedit.cpp:513
void mousePressEvent(QMouseEvent *event) override
Definition maptoolfeatureedit.cpp:483
QCursor cursor() const override
Returns the mouse cursor to display while this tool is active.
Definition maptoolfeatureedit.cpp:471
Represents a coordinate reference system backed by a GDAL OGRSpatialReference.
Definition spatialreferencesystem.h:28
A complete feature geometry: a type plus zero or more parts.
Definition featuregeometry.h:205
QPolygonF ring
normalizeRingCCW(r.ring).
Definition meshgenerator.cpp:156
qint64 FeatureId
Definition featuretypes.h:33
EdgeRef ref
Definition pslgminsize.cpp:377
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
int pos
Definition queryparser.cpp:36
QString text
Definition queryparser.cpp:35
Addresses one vertex inside a FeatureGeometry.
Definition maptoolfeatureedit.h:44
int ring
Definition maptoolfeatureedit.h:46
int vertex
Definition maptoolfeatureedit.h:47
int part
Definition maptoolfeatureedit.h:45
bool isValid() const
Definition maptoolfeatureedit.h:49
bool operator==(const FeatureVertexRef &o) const
Definition maptoolfeatureedit.h:51
void clear()
Definition maptoolfeatureedit.h:50
One ordered run of vertices, with optional per-vertex Z.
Definition featuregeometry.h:90