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
maptoolmeasure.h
Go to the documentation of this file.
1
7#ifndef MAPTOOLMEASURE_H
8#define MAPTOOLMEASURE_H
9
10#include "map/tools/maptool.h"
12
13#include <QColor>
14#include <QFont>
15#include <QPointF>
16#include <QVector>
17
19class OGRCoordinateTransformation;
20
25enum class MeasureMode
26{
27 Distance,
28 Area,
29};
30
47{
48 Q_OBJECT
49
50 Q_PROPERTY(MeasureMode mode READ mode WRITE setMode NOTIFY modeChanged)
51 Q_PROPERTY(double total READ total NOTIFY totalChanged)
52
53public:
54
55 explicit OpenSWMMVisMapToolMeasure(MapCanvas *canvas, QObject *parent = nullptr);
56 ~OpenSWMMVisMapToolMeasure() override;
57
58 [[nodiscard]] QCursor cursor() const override;
59
60 // ----- Mode & units --------------------------------------------------
61
62 [[nodiscard]] MeasureMode mode() const;
64
65 [[nodiscard]] MeasurementUnitManager::DistanceUnit distanceUnit() const;
67
68 [[nodiscard]] MeasurementUnitManager::AreaUnit areaUnit() const;
70
74 [[nodiscard]] double total() const;
75
76 // ----- Actions -------------------------------------------------------
77
78 void clearMeasurement();
79
80 // ----- Tool interface ------------------------------------------------
81
82 void activate() override;
83 void deactivate() override;
84
85 void mousePressEvent(QMouseEvent *event) override;
86 void mouseMoveEvent(QMouseEvent *event) override;
87 void mouseDoubleClickEvent(QMouseEvent *event) override;
88 void keyPressEvent(QKeyEvent *event) override;
89
90 void paint(QPainter *painter,
91 const MapExtent &canvasExtent,
92 const SpatialReferenceSystem *canvasSRS) override;
93
94signals:
98 void totalChanged(double total);
100
101private:
102 void recalculate();
103 void rebuildTransform();
104 void clearTransform();
105 void applyPreferences();
106
107 double geodesicDistance(const QPointF &a, const QPointF &b) const;
108 double geodesicArea(const QVector<QPointF> &vertices) const;
109
110 // Formats a metre value in the current distance unit: "142.30 m"
111 QString formatDist(double metres) const;
112 // Formats a square-metre value in the current area unit: "3 847.20 m²"
113 QString formatArea(double sqm) const;
114
116 MeasurementUnitManager::DistanceUnit m_distanceUnit = MeasurementUnitManager::Metres;
117 MeasurementUnitManager::AreaUnit m_areaUnit = MeasurementUnitManager::SquareMetres;
118
119 QVector<QPointF> m_vertices;
120 QVector<double> m_segmentMetres;
121 QPointF m_mousePos;
122 double m_total = 0.0;
123 bool m_finalized = false;
124
125 // Cached display preferences (updated via applyPreferences())
126 QColor m_lineColor { Qt::red };
127 QFont m_labelFont { QStringLiteral("sans-serif"), 8 };
128 int m_labelDecimals { 2 };
129 QColor m_fillColor { 100, 149, 237 };
130 int m_fillOpacity { 30 };
131
132 OGRCoordinateTransformation *m_toWgs84 = nullptr;
133};
134
135#endif // MAPTOOLMEASURE_H
Unit unit
Definition aquifereditordialog.cpp:57
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
Utility class for converting between measurement units used in GIS operations.
Definition measurementunitmanager.h:27
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
Interactive tool for measuring geodesic distances or areas on the map.
Definition maptoolmeasure.h:47
MeasurementUnitManager::AreaUnit areaUnit() const
Definition maptoolmeasure.cpp:107
void mouseDoubleClickEvent(QMouseEvent *event) override
Definition maptoolmeasure.cpp:188
void modeChanged(MeasureMode mode)
void activate() override
Called by the canvas when this tool becomes the active tool.
Definition maptoolmeasure.cpp:141
void keyPressEvent(QKeyEvent *event) override
Definition maptoolmeasure.cpp:208
void setMode(MeasureMode mode)
Definition maptoolmeasure.cpp:77
void totalChanged(double total)
void areaUnitChanged(MeasurementUnitManager::AreaUnit unit)
void mousePressEvent(QMouseEvent *event) override
Definition maptoolmeasure.cpp:159
void deactivate() override
Called by the canvas when another tool replaces this one.
Definition maptoolmeasure.cpp:148
double total
Definition maptoolmeasure.h:51
void mouseMoveEvent(QMouseEvent *event) override
Definition maptoolmeasure.cpp:179
void setAreaUnit(MeasurementUnitManager::AreaUnit unit)
Definition maptoolmeasure.cpp:112
MeasureMode mode
Definition maptoolmeasure.h:50
MeasurementUnitManager::DistanceUnit distanceUnit() const
Definition maptoolmeasure.cpp:87
void clearMeasurement()
Definition maptoolmeasure.cpp:129
void distanceUnitChanged(MeasurementUnitManager::DistanceUnit unit)
QCursor cursor() const override
Returns the mouse cursor to display while this tool is active.
Definition maptoolmeasure.cpp:73
void setDistanceUnit(MeasurementUnitManager::DistanceUnit unit)
Definition maptoolmeasure.cpp:92
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 maptoolmeasure.cpp:229
Top-level project container managing sessions, the SWMM model layer, and persistence paths for one SW...
Definition openswmmvisworkspace.h:42
Represents a coordinate reference system backed by a GDAL OGRSpatialReference.
Definition spatialreferencesystem.h:28
Abstract base class for all interactive tools attached to a MapCanvas.
MeasureMode
Selects whether the measure tool computes distance or area.
Definition maptoolmeasure.h:26
int b
local residual indices, a < b
Definition meshquadmatch.cpp:46
int a
Definition meshquadmatch.cpp:46
QVector< int > parent
union-find
Definition pslgminsize.cpp:176