RasterProcessTool/RasterMainWidgetGUI/RasterMainWidget/mapcanvas.h

191 lines
4.1 KiB
C
Raw Permalink Normal View History

2025-02-07 09:16:22 +00:00
#pragma once
#include <QWheelEvent>
#include <QPaintEvent>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QTimer>
#include <QEvent>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QResizeEvent>
#include <QDragEnterEvent>
#include <QRectF>
#include <QMarginsF>
#include <QHash>
#include <crs.h>
#include <pointxy.h>
#include <mapcanvasmap.h>
#include <maptool.h>
2025-02-07 09:16:22 +00:00
namespace LAMPMainWidget {
2025-04-01 10:23:24 +00:00
class MapLayer;
class MapTool;
/**
* QGraphicsView
* Qt GraphicsView Framework
*/
class MapCanvas : public QGraphicsView {
Q_OBJECT
signals:
void zoomChanged(int zoom);
void crsChanged();
void clicked(PointXY pos);
void mapCenterChanged(PointXY pos);
friend class MapToolPan;
friend class MapToolZoomIn;
friend class MapToolZoomOut;
friend class MapToolSelect;
public:
explicit MapCanvas(QWidget* parent = nullptr);
~MapCanvas() override;
public:
/**
*
*/
void refreshMap();
/**
* 使
* @param layer
*/
void addLayer(MapLayer* layer);
/**
*
* @return
*/
double scale() const;
/**
*
* @return
*/
double resolution() const;
/**
* zoom
* @return zoom
*/
int zoomValue() const;
/**
* zoom
* @param zoom zoom
*/
void setZoomValue(int zoom);
/**
*
* @return
*/
const QRectF& viewExtent() const { return mViewExtent; }
/**
*
*
* @param crs
*/
void setCrs(const CRS* crs);
/**
*
* @return
*/
const CRS& crs() const { return *mCrs; }
/**
*
* @param id id
*/
void setCurrentLayer(const QString& id);
/**
*
* @return
*/
const MapLayer* currentLayer() { return mCurrentLayer; }
/**
*
* @return
*/
const PointXY& mapCenter() const { return mMapCenter; }
/**
*
* @param tool
* @return
*/
bool selectTool(const QString& tool);
void timerEvent(QTimerEvent* event);
protected:
/**
*
* resize
*/
void updateViewExtent(bool reset = false);
/**
*
* @param point
* @return
*/
PointXY pixel2Lonlat(const QPointF& point) const;
/**
*
*/
void setupTools();
private:
/**
* zoom
* @param zoom zoom
* @return 使zoom
*/
int normalizeZoom(int zoom) const;
protected:
void mousePressEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
void wheelEvent(QWheelEvent* event) override;
void resizeEvent(QResizeEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;
protected:
QGraphicsScene* mScene; // 场景对象
2025-04-01 10:23:24 +00:00
QRectF mMapExtent;
QRectF mViewExtent;
QRectF mDragRect;
bool mIsDragging;
QMap<QString, MapLayer*> mLayers;
MapLayer* mCurrentLayer;
const CRS* mCrs;
PointXY mMapCenter;
int mZoomValue;
PointXY mLastXY;
QTimer* mMapUpdateTimer;
MapTool* mCurrentTool;
QHash<QString, MapTool*> mMapTools;
private:
const static int kDefaultZoomValue{ 8 };
static const int kMaxZoomValue{ 20 };
static const int kMinZoomValue{ 1 };
protected:
// 设置默认地图中心点
static PointXY defaultMapCenter();
};
2025-02-07 09:16:22 +00:00
}