mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-05 00:04:40 -05:00
abstract class for shape map tools
This commit is contained in:
parent
713243108a
commit
55e8819240
49
src/gui/maptools/qgsmaptoolshapeabstract.cpp
Normal file
49
src/gui/maptools/qgsmaptoolshapeabstract.cpp
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsmaptoolshapeabstract.cpp
|
||||||
|
----------------------
|
||||||
|
begin : January 2022
|
||||||
|
copyright : (C) 2022 by Denis Rouzaud
|
||||||
|
email : denis@opengis.ch
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "qgsmaptoolshapeabstract.h"
|
||||||
|
#include "qgsgeometryrubberband.h"
|
||||||
|
|
||||||
|
#include <QKeyEvent>
|
||||||
|
|
||||||
|
|
||||||
|
void QgsMapToolShapeAbstract::keyPressEvent(QKeyEvent *e)
|
||||||
|
{
|
||||||
|
e->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsMapToolShapeAbstract::keyReleaseEvent(QKeyEvent *e)
|
||||||
|
{
|
||||||
|
e->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsMapToolShapeAbstract::clean()
|
||||||
|
{
|
||||||
|
if ( mTempRubberBand )
|
||||||
|
{
|
||||||
|
delete mTempRubberBand;
|
||||||
|
mTempRubberBand = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
mPoints.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsMapToolShapeAbstract::undo()
|
||||||
|
{
|
||||||
|
if (mPoints.count() > 1)
|
||||||
|
mPoints.removeLast();
|
||||||
|
}
|
||||||
116
src/gui/maptools/qgsmaptoolshapeabstract.h
Normal file
116
src/gui/maptools/qgsmaptoolshapeabstract.h
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsmaptoolshapeabstract.h - base class for map tools digitizing shapes
|
||||||
|
---------------------
|
||||||
|
begin : January 2022
|
||||||
|
copyright : (C) Denis Rouzaud
|
||||||
|
email : denis@opengis.ch
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QGSMAPTOOLSHAPEABSTRACT_H
|
||||||
|
#define QGSMAPTOOLSHAPEABSTRACT_H
|
||||||
|
|
||||||
|
// no bindings for now, not stable yet
|
||||||
|
#define SIP_NO_FILE
|
||||||
|
|
||||||
|
#include "qgis_gui.h"
|
||||||
|
#include "qgsabstractgeometry.h"
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <QIcon>
|
||||||
|
|
||||||
|
class QgsMapToolCapture;
|
||||||
|
class QgsMapMouseEvent;
|
||||||
|
class QgsVectorLayer;
|
||||||
|
class QgsGeometryRubberBand;
|
||||||
|
class QKeyEvent;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup gui
|
||||||
|
* QgsMapToolShapeAbstract is a base class for shape map tools to be use in QgsMapToolCapture
|
||||||
|
* \since QGIS 3.24
|
||||||
|
*/
|
||||||
|
class GUI_EXPORT QgsMapToolShapeAbstract
|
||||||
|
: public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
//! List of different shapes
|
||||||
|
enum class ShapeCategory
|
||||||
|
{
|
||||||
|
Curve, //!< Curve
|
||||||
|
Circle,//!< Circle
|
||||||
|
Ellipse,//!< Ellipse
|
||||||
|
Rectangle,//!< Rectangle
|
||||||
|
RegularyPolygon,//!< RegularyPolygon
|
||||||
|
};
|
||||||
|
Q_ENUM( ShapeCategory )
|
||||||
|
|
||||||
|
//! Constructor
|
||||||
|
QgsMapToolShapeAbstract( const QString &id, QgsMapToolCapture *parentTool )
|
||||||
|
: mId( id ), mParentTool( parentTool )
|
||||||
|
{
|
||||||
|
Q_ASSERT( !mId.isEmpty() );
|
||||||
|
Q_ASSERT( parentTool );
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~QgsMapToolShapeAbstract() = default;
|
||||||
|
|
||||||
|
QString id() const {return mId;}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called for a mouse release event
|
||||||
|
* Must return true if the digitization has ended and the geometry is correctly set
|
||||||
|
*/
|
||||||
|
virtual bool cadCanvasReleaseEvent( QgsMapMouseEvent *e, const QgsVectorLayer *layer ) = 0;
|
||||||
|
|
||||||
|
//! Called for a mouse move event
|
||||||
|
virtual void cadCanvasMoveEvent( QgsMapMouseEvent *e, const QgsVectorLayer *layer ) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Eventually filters a key press event
|
||||||
|
* Ignores the event in default implementation
|
||||||
|
*/
|
||||||
|
virtual void keyPressEvent( QKeyEvent *e );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Eventually filters a key press event
|
||||||
|
* Ignores the event in default implementation
|
||||||
|
*/
|
||||||
|
virtual void keyReleaseEvent( QKeyEvent *e );
|
||||||
|
|
||||||
|
//! Activates the map tool with the last captured map point
|
||||||
|
virtual void activate( const QgsPoint &lastCapturedMapPoint ) {Q_UNUSED( lastCapturedMapPoint )}
|
||||||
|
|
||||||
|
//! Deactivates the map tool
|
||||||
|
virtual void deactivate() {clean();}
|
||||||
|
|
||||||
|
//! Called to clean the map tool (after canceling the operation or when the digitization has finished)
|
||||||
|
virtual void clean();
|
||||||
|
|
||||||
|
//! Called to undo last action (last point added)
|
||||||
|
virtual void undo();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString mId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QgsMapToolCapture *mParentTool = nullptr;
|
||||||
|
|
||||||
|
//! points (in map coordinates)
|
||||||
|
QgsPointSequence mPoints;
|
||||||
|
|
||||||
|
QgsGeometryRubberBand *mTempRubberBand = nullptr;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // QGSMAPTOOLSHAPEABSTRACT_H
|
||||||
Loading…
x
Reference in New Issue
Block a user