QGIS API Documentation 3.32.0-Lima (311a8cb8a6)
qgsmaptoolcapture.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmaptoolcapture.h - map tool for capturing points, lines, polygons
3 ---------------------
4 begin : January 2006
5 copyright : (C) 2006 by Martin Dobias
6 email : wonder.sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSMAPTOOLCAPTURE_H
17#define QGSMAPTOOLCAPTURE_H
18
19
21#include "qgspointlocator.h"
22#include "qgscompoundcurve.h"
23#include "qgsgeometry.h"
24#include "qobjectuniqueptr.h"
25
26#include <QPoint>
27#include <QList>
28#include "qgis_gui.h"
29
30class QgsRubberBand;
32class QgsVertexMarker;
33class QgsMapLayer;
35class QgsMapToolCaptureRubberBand;
36class QgsCurvePolygon;
39
40
49{
50 Q_OBJECT
51
52 public:
53
56 {
60 CapturePolygon
61 };
62
65 {
66 NoCapabilities = 1 << 0,
67 SupportsCurves = 1 << 1,
68 ValidateGeometries = 1 << 2,
69 };
70
71 Q_DECLARE_FLAGS( Capabilities, Capability )
72
73
74 QgsMapToolCapture( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget, CaptureMode mode );
75
76 ~QgsMapToolCapture() override;
77
81 virtual QgsMapToolCapture::Capabilities capabilities() const;
82
88 virtual bool supportsTechnique( Qgis::CaptureTechnique technique ) const;
89
94 void setCurrentCaptureTechnique( Qgis::CaptureTechnique technique );
95
100 Qgis::CaptureTechnique currentCaptureTechnique() const { return mCurrentCaptureTechnique; }
101
107 void setCurrentShapeMapTool( const QgsMapToolShapeMetadata *shapeMapToolMetadata ) SIP_SKIP;
108
109 void activate() override;
110 void deactivate() override;
111
117 CaptureMode mode() const { return mCaptureMode; }
118
120 int addCurve( QgsCurve *c );
121
127 void clearCurve( );
128
134 const QgsCompoundCurve *captureCurve() const { return &mCaptureCurve; }
135
141 QList<QgsPointLocator::Match> snappingMatches() const;
142
143 void cadCanvasMoveEvent( QgsMapMouseEvent *e ) override;
144 void cadCanvasReleaseEvent( QgsMapMouseEvent *e ) override;
145
150 void keyPressEvent( QKeyEvent *e ) override;
151
155 void deleteTempRubberBand();
156
158 void clean() override;
159
168 QgsRubberBand *takeRubberBand() SIP_FACTORY;
169
181 QgsPoint mapPoint( const QgsMapMouseEvent &e ) const;
182
193 QgsPoint mapPoint( const QgsPointXY &point ) const;
194
195 // TODO QGIS 4.0 returns an enum instead of a magic constant
196
197 public slots:
198
203 Q_DECL_DEPRECATED void setCircularDigitizingEnabled( bool enable ) SIP_DEPRECATED;
204
210 Q_DECL_DEPRECATED void setStreamDigitizingEnabled( bool enable ) SIP_DEPRECATED;
211
212 private slots:
213 void addError( const QgsGeometry::Error &error );
214 void currentLayerChanged( QgsMapLayer *layer );
216 void updateExtraSnapLayer();
217
218 protected:
219
220 // TODO QGIS 4.0 returns an enum instead of a magic constant
221
231 int nextPoint( const QgsPoint &mapPoint, QgsPoint &layerPoint );
232
233 // TODO QGIS 4.0 returns an enum instead of a magic constant
234
245 int nextPoint( QPoint p, QgsPoint &layerPoint, QgsPoint &mapPoint );
246
247 // TODO QGIS 4.0 returns an enum instead of a magic constant
248
260 int fetchLayerPoint( const QgsPointLocator::Match &match, QgsPoint &layerPoint );
261
266 int addVertex( const QgsPointXY &point );
267
274 int addVertex( const QgsPointXY &mapPoint, const QgsPointLocator::Match &match );
275
282 void undo( bool isAutoRepeat = false );
283
287 void startCapturing();
288
294 bool isCapturing() const;
295
301 int size();
302
308 Q_DECL_DEPRECATED QVector<QgsPointXY> points() const SIP_DEPRECATED;
309
310 // TODO QGIS 4.0 rename it to points()
311
317 QgsPointSequence pointsZM() const;
318
325 Q_DECL_DEPRECATED void setPoints( const QVector<QgsPointXY> &pointList ) SIP_DEPRECATED;
326
333 void setPoints( const QgsPointSequence &pointList );
334
338 void closePolygon();
339
340 protected slots:
341
345 void stopCapturing();
346
347 private:
348
354 virtual void geometryCaptured( const QgsGeometry &geometry ) {Q_UNUSED( geometry )} SIP_FORCE
355
361 virtual void pointCaptured( const QgsPoint &point ) {Q_UNUSED( point )} SIP_FORCE
362
368 virtual void lineCaptured( const QgsCurve *line ) {Q_UNUSED( line )} SIP_FORCE
369
375 virtual void polygonCaptured( const QgsCurvePolygon *polygon ) {Q_UNUSED( polygon )} SIP_FORCE
376
378 bool tracingEnabled();
380 QgsPointXY tracingStartPoint();
382 bool tracingMouseMove( QgsMapMouseEvent *e );
384 bool tracingAddVertex( const QgsPointXY &point );
385
387 QgsMapToolCaptureRubberBand *createCurveRubberBand() const;
388
390 void resetRubberBand();
391
393 CaptureMode mCaptureMode;
394
396 bool mCapturing = false;
397
399 QgsPoint mCaptureFirstPoint;
400 QgsPoint mCaptureLastPoint;
401
404
407
409 QgsCompoundCurve mCaptureCurve;
410
411 QList<QgsPointLocator::Match> mSnappingMatches;
412 QgsPointLocator::Match mCircularIntermediateMatch;
413 QgsPoint mCircularItermediatePoint;
414
415 void validateGeometry();
416 QgsGeometryValidator *mValidator = nullptr;
417 QList< QgsGeometry::Error > mGeomErrors;
418 QList< QgsVertexMarker * > mGeomErrorMarkers;
419
421 QgsVectorLayer *mExtraSnapLayer = nullptr;
423 QgsFeatureId mExtraSnapFeatureId;
424
425 bool mCaptureModeFromLayer = false;
426
427 std::unique_ptr<QgsSnapIndicator> mSnapIndicator;
428
435 QgsPointXY mTracingStartPoint;
436
438 Qgis::WkbType mLineDigitizingType = Qgis::WkbType::LineString;
439
441
443
444 bool mAllowAddingStreamingPoints = false;
445 int mStreamingToleranceInPixels = 1;
446
447 bool mStartNewCurve = false;
448
449 bool mIgnoreSubsequentAutoRepeatUndo = false;
450
451 friend class TestQgsMapToolCapture;
452
453
454};
455
456Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMapToolCapture::Capabilities )
457
458#endif
CaptureTechnique
Capture technique.
Definition: qgis.h:266
@ StraightSegments
Default capture mode - capture occurs with straight line segments.
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition: qgis.h:154
@ LineString
LineString.
The QgsAdvancedDigitizingDockWidget class is a dockable widget used to handle the CAD tools on top of...
Compound curve geometry type.
Curve polygon geometry type.
Abstract base class for curved geometry type.
Definition: qgscurve.h:36
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:164
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:90
Base class for all map layer types.
Definition: qgsmaplayer.h:73
A QgsMapMouseEvent is the result of a user interaction with the mouse on a QgsMapCanvas.
The QgsMapToolAdvancedDigitizing class is a QgsMapTool which gives event directly in map coordinates ...
virtual void cadCanvasMoveEvent(QgsMapMouseEvent *e)
Override this method when subclassing this class.
void deactivate() override
Unregisters this maptool from the cad dock widget.
virtual void cadCanvasReleaseEvent(QgsMapMouseEvent *e)
Override this method when subclassing this class.
void activate() override
Registers this maptool with the cad dock widget.
QgsMapToolCapture is a base class capable of capturing point, lines and polygons.
CaptureMode mode() const
The capture mode.
CaptureMode
Different capture modes.
@ CaptureNone
Do not capture / determine mode from layer geometry type.
@ CapturePoint
Capture points.
@ CaptureLine
Capture lines.
const QgsCompoundCurve * captureCurve() const
Gets the capture curve.
Capability
Specific capabilities of the tool.
Qgis::CaptureTechnique currentCaptureTechnique() const
Returns the active capture technique.
QgsMapToolShapeAbstract is a base class for shape map tools to be used by QgsMapToolCapture.
QgsMapToolShapeMetadata is a base class for shape map tools metadata to be used in QgsMapToolShapeReg...
virtual void keyPressEvent(QKeyEvent *e)
Key event for overriding. Default implementation does nothing.
Definition: qgsmaptool.cpp:199
virtual void clean()
convenient method to clean members
Definition: qgsmaptool.cpp:126
The class defines interface for querying point location:
A class to represent a 2D point.
Definition: qgspointxy.h:59
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:49
A class for drawing transient features (e.g.
Definition: qgsrubberband.h:53
Class that shows snapping marker on map canvas for the current snapping match.
Represents a vector layer which manages a vector based data sets.
A class for marking vertices of features using e.g.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_FORCE
Definition: qgis_sip.h:131
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_FACTORY
Definition: qgis_sip.h:76
QVector< QgsPoint > QgsPointSequence
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.