106 void zoomIn(
double factor = 2.0);
107 void zoomOut(
double factor = 2.0);
108 void pan(
double dx,
double dy);
110 [[nodiscard]]
double scale() const;
150 void moveLayer(
int fromIndex,
int toIndex,
bool pushUndo = true);
159 bool pushUndo = true);
234 {
return m_meshProfileOverlay; }
246 {
return m_selectionBeacon; }
290 [[nodiscard]] std::optional<double>
terrainZ()
const {
return m_terrainZ; }
293 [[nodiscard]] QString
terrainUnit()
const {
return m_terrainUnit; }
302 void toMapCoords(
int px,
int py,
double &mapX,
double &mapY)
const;
303 void toPixelCoords(
double mapX,
double mapY,
int &px,
int &py)
const;
331 const QString &reason = QString());
399 void onLayerRepaintRequested();
400 void onRenderJobFinished(QImage result);
401 void fireRasterChannel();
402 void fireSceneChannel();
403 void onDragRenderTick();
404 void syncScaleBarFromPreferences();
405 void syncQsgRenderKindsFromPreferences();
410 void renderSceneBuffer();
411 void applyExtentToOverlay();
412 void ensureOverlaySceneRectCovers(
const QRectF &needed);
413 [[nodiscard]] QRectF overlayVisibleSceneRect()
const;
415 void updateLayerZValues();
418 void startRenderJob();
419 void cancelRenderJob();
422 void renderScaleBar(QPainter &painter)
const;
423 void renderCoordinates(QPainter &painter,
double mapX,
double mapY)
const;
424 void renderTerrainLabel(QPainter &painter)
const;
429 [[nodiscard]]
double metresPerPixel()
const;
437 bool m_ownsSRS =
false;
439 QList<OpenSWMMVisLayer *> m_layers;
440 QVector<int> m_layerGroupOrder;
441 QStringList m_pendingLayerOrder;
461 [[nodiscard]] QVector<QPointF> resolveSelectionAnchors()
const;
467 QVector<QPointF> &anchors)
const;
468 QSet<QObject *> m_beaconWiredLayers;
471 bool m_showScaleBar =
true;
472 bool m_showCoords =
false;
473 std::optional<double> m_terrainZ;
474 QString m_terrainUnit;
475 QColor m_bgColor = Qt::white;
479 QTimer *m_refreshTimer =
nullptr;
483 QTimer *m_rasterTimer =
nullptr;
484 QTimer *m_sceneTimer =
nullptr;
486 DirtyChannels m_pendingChannels =
NoChannel;
488 int m_suspendDepth = 0;
490 QString m_pendingReason;
501 QImage m_frameBuffer;
510 QImage m_sceneBuffer;
517 bool m_sceneDirty =
true;
520 bool m_isPanning =
false;
521 bool m_isZooming =
false;
526 QTimer *m_dragRenderTimer =
nullptr;
527 double m_lastMouseMapX = 0.0;
528 double m_lastMouseMapY = 0.0;
529 int m_lastMousePxX = 0;
530 int m_lastMousePxY = 0;
533 bool m_middlePanActive =
false;
534 QPoint m_middlePanStart;
547 class QQuickWidget *m_qsgWidget =
nullptr;
558 QImage m_qsgFrameCache;
559 bool m_qsgFrameDirty =
true;
564 QSize m_qsgCachedSize;
572 quint64 m_qsgCachedContentRev = 0;
575 [[nodiscard]] quint64 qsgContentRevision()
const;
581 bool m_qsg1DForced =
false;
584Q_DECLARE_OPERATORS_FOR_FLAGS(MapCanvas::DirtyChannels)
Unit unit
Definition aquifereditordialog.cpp:57
The central map display widget — QGIS-style hybrid rendering.
Definition mapcanvas.h:63
void setShowCoordinates(bool show)
Definition mapcanvas.cpp:1317
void resumeRefresh()
Definition mapcanvas.cpp:1493
void pan(double dx, double dy)
Definition mapcanvas.cpp:449
void showCoordinatesChanged(bool show)
void endPan()
Definition mapcanvas.cpp:2632
void showEvent(QShowEvent *event) override
Definition mapcanvas.cpp:2530
void zoomAroundCursor(double factor, const QPoint &viewportPos)
Zoom the view by factor anchored at viewportPos, then sync m_extent and schedule a tile refresh.
Definition mapcanvas.cpp:2760
void setProfilePathOverlay(ProfilePathOverlay *overlay)
Bind the 1D profile-path candidate/accepted overlay. Painted above the QSG result frame so profile pa...
Definition mapcanvas.cpp:1212
int layerCount() const
Definition mapcanvas.cpp:777
void setMaxUndoCount(int count)
Definition mapcanvas.cpp:1228
void backgroundColorChanged(const QColor &color)
void addLayer(OpenSWMMVisLayer *layer, bool pushUndo=true)
Definition mapcanvas.cpp:537
void extentChanged(const MapExtent &extent)
void refresh()
Definition mapcanvas.cpp:1622
void zoomIn(double factor=2.0)
Definition mapcanvas.cpp:439
int maxUndoCount
Definition mapcanvas.h:73
MapExtent extentInCanvasCRS(const OpenSWMMVisLayer *layer, const MapExtent &nativeExtent) const
Reproject nativeExtent from layer's CRS into canvas CRS by transforming its four corners....
Definition mapcanvas.cpp:963
void toPixelCoords(double mapX, double mapY, int &px, int &py) const
Definition mapcanvas.cpp:1379
MapExtent fullExtent() const
Definition mapcanvas.cpp:999
void scaleChanged(double scale)
void clearSelectionBeacon()
Drops a standing beacon (a new selection has superseded it).
Definition mapcanvas.cpp:1141
void zoomToFullExtent()
Definition mapcanvas.cpp:426
OpenSWMMVisLayer * takeLayer(int index, bool pushUndo=true)
Definition mapcanvas.cpp:651
void setMeshProfileOverlay(MeshProfileOverlay *overlay)
Bind the 2D-mesh profile overlay (line + position marker) drawn ON TOP of every map layer — including...
Definition mapcanvas.cpp:1061
OpenSWMMVisScene * mapScene() const
Definition mapcanvas.cpp:321
void moveLayer(int fromIndex, int toIndex, bool pushUndo=true)
Definition mapcanvas.cpp:705
void setLayerGroupOrder(const QVector< int > &order)
Definition mapcanvas.cpp:794
void keyReleaseEvent(QKeyEvent *event) override
Definition mapcanvas.cpp:2404
QColor backgroundColor
Definition mapcanvas.h:75
void refreshLayerItems()
Definition mapcanvas.cpp:1628
OpenSWMMVisLayer * layerAt(int index) const
Definition mapcanvas.cpp:925
void showScaleBarChanged(bool show)
void setScaleDenominator(double denom)
Zoom the view to exactly the given 1:N scale, preserving the current centre point and canvas aspect r...
Definition mapcanvas.cpp:487
bool moveSublayer(OpenSWMMVisLayer *host, int from, int to, bool pushUndo=true)
Definition mapcanvas.cpp:902
void wheelEvent(QWheelEvent *event) override
Definition mapcanvas.cpp:2364
void cursorPositionChanged(double mapX, double mapY)
void flashSelection()
Flash + beacon the CURRENT selection.
Definition mapcanvas.cpp:1147
const QList< OpenSWMMVisLayer * > & layers() const
Definition mapcanvas.cpp:535
MeshProfileOverlay * meshProfileOverlay() const
The currently bound profile overlay, or null. Lets a closing profile dialog detach only when the bind...
Definition mapcanvas.h:233
bool setCanvasSRSByCode(const QString &authName, int code)
Definition mapcanvas.cpp:390
MapUndoStack * undoStack() const
Definition mapcanvas.cpp:1224
void setBackgroundColor(const QColor &color)
Definition mapcanvas.cpp:1343
void layerRemoved(OpenSWMMVisLayer *layer)
void layerAdded(OpenSWMMVisLayer *layer)
void invalidate(DirtyChannels channels, const QString &reason=QString())
Single entry point for dirtying one or more rendering channels.
Definition mapcanvas.cpp:1423
void mouseMoveEvent(QMouseEvent *event) override
Definition mapcanvas.cpp:2320
void setTerrainUnit(const QString &unit)
Definition mapcanvas.cpp:1334
void translateViewBy(int dx, int dy)
Smooth-pan the view by (dx, dy) screen pixels without updating m_extent or triggering tile reloads....
Definition mapcanvas.cpp:2723
void resizeEvent(QResizeEvent *event) override
Definition mapcanvas.cpp:2559
void applyCRSInternal(SpatialReferenceSystem *srs, bool ownsSRS)
Definition mapcanvas.cpp:330
void setPendingLayerOrder(const QStringList &keysBottomToTop)
Definition mapcanvas.cpp:816
MapExtent extent
Definition mapcanvas.h:66
void maxUndoCountChanged(int count)
double scaleDenominator() const
Current scale as a 1:N denominator, DPI-aware and CRS-aware.
Definition mapcanvas.cpp:459
MapExtent layerExtentInCanvasCRS(const OpenSWMMVisLayer *layer) const
Convenience overload: reprojects the full extent of layer.
Definition mapcanvas.cpp:993
ScaleBarSettings * scaleBarSettings
Definition mapcanvas.h:76
DirtyChannel
Independent redraw channels — see Phase 0.9 in the GUI implementation plan. Each channel has a separa...
Definition mapcanvas.h:313
@ Scene
QGraphicsScene vector items (50 ms debounce)
Definition mapcanvas.h:316
@ Extent
Extent committed (immediate; usually implies Raster|Scene)
Definition mapcanvas.h:318
@ NoChannel
Definition mapcanvas.h:314
@ Overlay
Decorations / selection highlights (immediate)
Definition mapcanvas.h:317
@ Raster
WMS/WMTS/GIS-raster composite (150 ms debounce)
Definition mapcanvas.h:315
QVector< int > layerGroupOrder() const
Definition mapcanvas.cpp:783
void canvasSRSChanged(SpatialReferenceSystem *srs)
void activeToolChanged(OpenSWMMVisMapTool *tool)
void insertLayer(int position, OpenSWMMVisLayer *layer, bool pushUndo=true)
Definition mapcanvas.cpp:547
void reorderLayers(const QList< OpenSWMMVisLayer * > &newOrder, bool pushUndo=true)
Atomically reorder the entire layer stack to match newOrder.
Definition mapcanvas.cpp:744
double scale
Definition mapcanvas.h:67
int groupedInsertPosition(const OpenSWMMVisLayer *layer) const
Definition mapcanvas.cpp:844
void zoomOut(double factor=2.0)
Definition mapcanvas.cpp:444
void keyPressEvent(QKeyEvent *event) override
Definition mapcanvas.cpp:2380
void toMapCoords(int px, int py, double &mapX, double &mapY) const
Definition mapcanvas.cpp:1364
void setShowScaleBar(bool show)
Definition mapcanvas.cpp:1240
void setExtent(const MapExtent &extent, bool pushUndo=true)
Definition mapcanvas.cpp:406
QStringList pendingLayerOrder() const
Definition mapcanvas.cpp:839
SelectionBeaconOverlay * selectionBeacon() const
Locator for the current selection — flashes on change, then leaves a fixed-size beacon so a selected ...
Definition mapcanvas.h:245
void mouseReleaseEvent(QMouseEvent *event) override
Definition mapcanvas.cpp:2344
std::optional< double > terrainZ() const
Definition mapcanvas.h:290
void sublayerOrderChanged(OpenSWMMVisLayer *host)
void mousePressEvent(QMouseEvent *event) override
Definition mapcanvas.cpp:2304
bool showScaleBar
Definition mapcanvas.h:69
bool showCoordinates
Definition mapcanvas.h:71
QString terrainUnit() const
Definition mapcanvas.h:293
void setActiveTool(OpenSWMMVisMapTool *tool)
Definition mapcanvas.cpp:1038
void paintEvent(QPaintEvent *event) override
Definition mapcanvas.cpp:1770
void beginPan()
Definition mapcanvas.cpp:2614
SpatialReferenceSystem * canvasSRS() const
Definition mapcanvas.cpp:328
OpenSWMMVisMapTool * activeTool() const
Definition mapcanvas.cpp:1036
void hideEvent(QHideEvent *event) override
Definition mapcanvas.cpp:2554
bool event(QEvent *event) override
Definition mapcanvas.cpp:2471
static QString layerOrderKey(const OpenSWMMVisLayer *layer)
Definition mapcanvas.cpp:808
void setCanvasSRS(SpatialReferenceSystem *srs, bool ownsSRS=false)
Definition mapcanvas.cpp:368
void suspendRefresh()
Bracket a batch of invalidate() calls so they fire once. Reference-counted — nested pairs are safe....
Definition mapcanvas.cpp:1485
void syncExtentFromView()
Recompute m_extent from the current overlay view transform. Call after translateViewBy() or direct tr...
Definition mapcanvas.cpp:2700
OpenSWMMVisGraphicsView * overlayView() const
Definition mapcanvas.cpp:322
bool isPanning() const
Definition mapcanvas.cpp:2668
void mouseDoubleClickEvent(QMouseEvent *event) override
Definition mapcanvas.cpp:2358
void setTerrainElevation(const std::optional< double > &z)
Sets the terrain elevation to display alongside X/Y in the coordinate overlay. Pass an empty optional...
Definition mapcanvas.cpp:1327
void gestureEvent(QGestureEvent *event)
Definition mapcanvas.cpp:2512
An axis-aligned bounding box in the coordinate space of a given CRS.
Definition mapextent.h:26
Renders raster layers into an off-screen QImage on a worker thread.
Definition maprenderjob.h:43
An undo/redo stack for map operations with a configurable maximum depth.
Definition mapundostack.h:117
Definition meshprofileoverlay.h:31
Transparent QGraphicsView overlay for interactive vector content in the MapCanvas.
Definition openswmmvisgraphicsview.h:37
Abstract base class for all layers displayed in the MapCanvas.
Definition openswmmvislayer.h:116
Central QGraphicsScene subclass that holds all map-layer graphics items.
Definition openswmmvisscene.h:32
Renders an ordered list of candidate paths over the map.
Definition profilepathoverlay.h:48
Definition swmm2dmeshlayer.h:64
Definition swmm2dmeshqsgrenderer.h:58
Definition swmm2dresultslayer.h:550
Definition swmm2dresultsqsgrenderer.h:89
Definition swmmlayerqsgrenderer.h:42
Renders the SWMM network elements (nodes, links, subcatchments, rain gages) for one OpenSWMMEngine mo...
Definition swmmmodellayer.h:133
Holds all configurable appearance properties for the map scale bar.
Definition scalebarsettings.h:26
Definition selectionbeaconoverlay.h:57
Represents a coordinate reference system backed by a GDAL OGRSpatialReference.
Definition spatialreferencesystem.h:28
int code
Definition heatconfigdialog.cpp:40
Axis-aligned bounding box in a map coordinate system, used by MapCanvas and all layer types to define...
std::vector< float > dx
Definition mesh2dresultsexport.cpp:611
std::vector< float > dy
Green–Gauss only, parallel to cell
Definition mesh2dresultsexport.cpp:611
int index
Position in m_quadRegions / m_quadReports.
Definition meshgenerator.cpp:153
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
int position
Definition queryparser.cpp:149
Configurable appearance settings for the map scale bar.