47   , mCaptureMode( mode )
 
   48   , mCaptureModeFromLayer( mode == CaptureNone )
 
   55            this, &QgsMapToolCapture::currentLayerChanged );
 
   60   mExtraSnapLayer = 
new QgsVectorLayer( QStringLiteral( 
"LineString?crs=" ), QStringLiteral( 
"extra snap" ), QStringLiteral( 
"memory" ), layerOptions );
 
   61   mExtraSnapLayer->startEditing();
 
   63   mExtraSnapLayer->addFeature( f );
 
   64   mExtraSnapFeatureId = f.
id();
 
   67            this, &QgsMapToolCapture::updateExtraSnapLayer );
 
   79   mExtraSnapLayer->deleteLater();
 
   80   mExtraSnapLayer = 
nullptr;
 
   86     mValidator->deleteLater();
 
  103   if ( mTempRubberBand )
 
  104     mTempRubberBand->show();
 
  112   if ( mTempRubberBand )
 
  113     mTempRubberBand->hide();
 
  121 void QgsMapToolCapture::currentLayerChanged( 
QgsMapLayer *layer )
 
  123   if ( !mCaptureModeFromLayer )
 
  150   if ( mTempRubberBand )
 
  158 bool QgsMapToolCapture::tracingEnabled()
 
  166 QgsPointXY QgsMapToolCapture::tracingStartPoint()
 
  171     return mTracingStartPoint;
 
  173   return lastCapturedMapPoint();
 
  199   mTempRubberBand->addPoint( lastCapturedMapPoint() );
 
  205   const QgsPoint lastPoint = lastCapturedMapPoint();
 
  207   if ( lastPointXY == pt0 && 
points[0] != lastPointXY )
 
  223   for ( 
int i = 1; i < 
points.count(); ++i ) 
 
  234 bool QgsMapToolCapture::tracingAddVertex( 
const QgsPointXY &point )
 
  240   if ( mTempRubberBand->pointsCount() == 0 )
 
  242     if ( !tracer->
init() )
 
  252       mTracingStartPoint = point;
 
  269   for ( 
int i = 0; i < 
points.count(); ++i )
 
  278   mCaptureCurve.
moveVertex( lastVertexId, layerPoints.first() );
 
  279   mSnappingMatches.removeLast();
 
  282   int pointBefore = mCaptureCurve.
numPoints();
 
  292     if ( vlayer && 
capabilities().testFlag( QgsMapToolCapture::Capability::SupportsCurves ) && vlayer->
dataProvider()->
capabilities().testFlag( QgsVectorDataProvider::Capability::CircularGeometries ) )
 
  299       mCaptureCurve = *qgsgeometry_cast<QgsCompoundCurve *>( curved.
constGet() );
 
  304   const int pointAfter = mCaptureCurve.
numPoints();
 
  305   for ( ; pointBefore < pointAfter; ++pointBefore )
 
  317 QgsMapToolCaptureRubberBand *QgsMapToolCapture::createCurveRubberBand()
 const 
  319   QgsMapToolCaptureRubberBand *rb = 
new QgsMapToolCaptureRubberBand( 
mCanvas );
 
  324   color.setAlphaF( color.alphaF() * alphaScale );
 
  325   rb->setLineStyle( Qt::DotLine );
 
  326   rb->setStrokeColor( color );
 
  329   rb->setFillColor( fillColor );
 
  334 QgsPoint QgsMapToolCapture::firstCapturedMapPoint()
 
  336   return mCaptureFirstPoint;
 
  339 QgsPoint QgsMapToolCapture::lastCapturedMapPoint()
 
  341   return mCaptureLastPoint;
 
  344 void QgsMapToolCapture::resetRubberBand()
 
  361   if ( mTempRubberBand )
 
  362     mTempRubberBand->setStringType( mDigitizingType );
 
  367   mStreamingEnabled = enable;
 
  368   mStartNewCurve = 
true;
 
  384   if ( mCaptureMode != 
CapturePoint && mTempRubberBand && mCapturing )
 
  386     bool hasTrace = 
false;
 
  388     if ( mStreamingEnabled )
 
  390       if ( !mCaptureCurve.
isEmpty() )
 
  397       mAllowAddingStreamingPoints = 
true;
 
  399       mAllowAddingStreamingPoints = 
false;
 
  401     else if ( tracingEnabled() && mCaptureCurve.
numPoints() != 0 )
 
  408            mTempRubberBand->curveIsComplete() )
 
  409         mCircularItermediatePoint = mTempRubberBand->pointFromEnd( 1 );
 
  411                 !mTempRubberBand->curveIsComplete() )
 
  412         mCircularItermediatePoint = 
QgsPoint();
 
  414       hasTrace = tracingMouseMove( e );
 
  420         mTempRubberBand->addPoint( lastCapturedMapPoint() );
 
  421         if ( !mCircularItermediatePoint.
isEmpty() )
 
  423           mTempRubberBand->movePoint( mCircularItermediatePoint );
 
  424           mTempRubberBand->addPoint( mCircularItermediatePoint );
 
  429     if ( !mStreamingEnabled && !hasTrace )
 
  433         const QgsPoint mapPt = lastCapturedMapPoint();
 
  435         if ( mTempRubberBand )
 
  437           mTempRubberBand->movePoint( 
mapPoint );
 
  438           mTempRubberBand->movePoint( 0, mapPt );
 
  445       else if ( mTempRubberBand )
 
  446         mTempRubberBand->movePoint( 
mapPoint );
 
  467       QgsDebugMsg( QStringLiteral( 
"transformation to layer coordinate failed" ) );
 
  501          ( sourceLayer->
crs() == vlayer->
crs() ) )
 
  519           const QgsLineString line( geom.constGet()->vertexAt( vId ), geom.constGet()->vertexAt( vId2 ) );
 
  525           layerPoint = geom.constGet()->
vertexAt( vId );
 
  566     QgsDebugMsg( QStringLiteral( 
"invalid capture mode" ) );
 
  570   if ( mCapturing && mStreamingEnabled && !mAllowAddingStreamingPoints )
 
  591     mSnappingMatches.append( match );
 
  595     if ( mCaptureFirstPoint.
isEmpty() )
 
  603     if ( !mTempRubberBand )
 
  605       mTempRubberBand.reset( createCurveRubberBand() );
 
  606       mTempRubberBand->setStringType( mDigitizingType );
 
  610     bool traceCreated = 
false;
 
  611     if ( tracingEnabled() )
 
  613       traceCreated = tracingAddVertex( 
mapPoint );
 
  618     mTracingStartPoint = traceCreated ? point : 
QgsPointXY();
 
  623       mTempRubberBand->movePoint( 
mapPoint ); 
 
  624       if ( mTempRubberBand->curveIsComplete() ) 
 
  626         const QgsCurve *curve = mTempRubberBand->curve();
 
  632           if ( match.
isValid() && mSnappingMatches.count() > 0 && !mSnappingMatches.last().isValid() )
 
  634             mSnappingMatches.removeLast();
 
  638               mSnappingMatches.removeLast();
 
  639               mSnappingMatches.append( mCircularIntermediateMatch );
 
  641             mSnappingMatches.append( match );
 
  647       else if ( mTempRubberBand->pointsCount() == 0 )
 
  651         mSnappingMatches.append( match );
 
  657           mCircularIntermediateMatch = match;
 
  661       mTempRubberBand->addPoint( 
mapPoint );
 
  666       mTempRubberBand->addPoint( lastCapturedMapPoint() );
 
  670   updateExtraSnapLayer();
 
  688   if ( mTempRubberBand )
 
  692     mTempRubberBand->addPoint( endPt ); 
 
  699     c->transform( ct, Qgis::TransformDirection::Reverse );
 
  701   const int countBefore = mCaptureCurve.
vertexCount();
 
  708   mCaptureCurve.
addCurve( 
c, !mStartNewCurve );
 
  709   mStartNewCurve = 
false;
 
  711   const int countAfter = mCaptureCurve.
vertexCount();
 
  712   const int addedPoint = countAfter - countBefore;
 
  714   updateExtraSnapLayer();
 
  716   for ( 
int i = 0; i < addedPoint; ++i )
 
  726   mCaptureCurve.
clear();
 
  727   updateExtraSnapLayer();
 
  732   return mSnappingMatches;
 
  739   if ( mTempRubberBand )
 
  741     if ( 
size() <= 1 && mTempRubberBand->pointsCount() != 0 )
 
  744     if ( isAutoRepeat && mIgnoreSubsequentAutoRepeatUndo )
 
  746     mIgnoreSubsequentAutoRepeatUndo = 
false;
 
  748     const QgsPoint lastPoint = mTempRubberBand->lastPoint();
 
  752       mTempRubberBand->removeLastPoint();
 
  753       mTempRubberBand->movePoint( lastPoint );
 
  758     vertexToRemove.
part = 0;
 
  759     vertexToRemove.
ring = 0;
 
  771       const int curvesBefore = mCaptureCurve.
nCurves();
 
  772       const bool lastCurveIsLineString = qgsgeometry_cast< QgsLineString * >( mCaptureCurve.
curveAt( curvesBefore - 1 ) );
 
  774       const int pointsCountBefore = mCaptureCurve.
numPoints();
 
  776       int pointsCountAfter = mCaptureCurve.
numPoints();
 
  777       for ( ; pointsCountAfter < pointsCountBefore; pointsCountAfter++ )
 
  778         if ( !mSnappingMatches.empty() )
 
  779           mSnappingMatches.removeLast();
 
  785       if ( mCaptureCurve.
nCurves() < curvesBefore && lastCurveIsLineString )
 
  786         mIgnoreSubsequentAutoRepeatUndo = 
true;
 
  789     updateExtraSnapLayer();
 
  799       mTempRubberBand->addPoint( lastCapturedMapPoint() );
 
  800       mTempRubberBand->movePoint( lastPoint );
 
  810   if ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete )
 
  812     undo( e->isAutoRepeat() );
 
  817   else if ( e->key() == Qt::Key_Escape )
 
  842   qDeleteAll( mGeomErrorMarkers );
 
  843   mGeomErrorMarkers.clear();
 
  852   mCaptureCurve.
clear();
 
  853   updateExtraSnapLayer();
 
  854   mSnappingMatches.clear();
 
  856     lCurrentVectorLayer->triggerRepaint();
 
  861   mTempRubberBand.reset();
 
  872   mCaptureCurve.
close();
 
  873   updateExtraSnapLayer();
 
  876 void QgsMapToolCapture::validateGeometry()
 
  885     mValidator->deleteLater();
 
  886     mValidator = 
nullptr;
 
  890   while ( !mGeomErrorMarkers.isEmpty() )
 
  892     delete mGeomErrorMarkers.takeFirst();
 
  897   switch ( mCaptureMode )
 
  911       exteriorRing->
close();
 
  923     method = Qgis::GeometryValidationEngine::Geos;
 
  943     vm->setToolTip( e.
what() );
 
  945     vm->setZValue( vm->zValue() + 1 );
 
  946     mGeomErrorMarkers << vm;
 
  957   QVector<QgsPointXY> pointsXY;
 
  966   mCaptureCurve.
points( pts );
 
  973   mCaptureCurve.
clear();
 
  975   updateExtraSnapLayer();
 
  976   mSnappingMatches.clear();
 
  977   for ( 
int i = 0; i < line->
length(); ++i )
 
  985   mCaptureCurve.
clear();
 
  987   updateExtraSnapLayer();
 
  988   mSnappingMatches.clear();
 
  989   for ( 
int i = 0; i < line->
length(); ++i )
 
 1046       if ( match.
layer() )
 
 1064 void QgsMapToolCapture::updateExtraSnapLayer()
 
 1066   if ( !mExtraSnapLayer )
 
 1069   if ( 
canvas()->snappingUtils()->config().selfSnapping() && 
layer() && mCaptureCurve.
numPoints() >= 2 )
 
 1077       qgsgeometry_cast<QgsCompoundCurve *>( geom.
get() )->close();
 
 1091   setVertexDrawingEnabled( 
false );
 
 1094 QgsCurve *QgsMapToolCaptureRubberBand::curve()
 
 1096   if ( mPoints.empty() )
 
 1099   switch ( mStringType )
 
 1105       if ( mPoints.count() != 3 )
 
 1117 bool QgsMapToolCaptureRubberBand::curveIsComplete()
 const 
 1129   mFirstPolygonPoint = firstPolygonPoint;
 
 1130   setStringType( stringType );
 
 1131   setRubberBandGeometryType( geomType );
 
 1140 void QgsMapToolCaptureRubberBand::addPoint( 
const QgsPoint &point, 
bool doUpdate )
 
 1142   if ( mPoints.count() == 0 )
 
 1143     mPoints.append( point );
 
 1145   mPoints.append( point );
 
 1151 void QgsMapToolCaptureRubberBand::movePoint( 
const QgsPoint &point )
 
 1153   if ( mPoints.count() > 0 )
 
 1154     mPoints.last() = point ;
 
 1159 void QgsMapToolCaptureRubberBand::movePoint( 
int index, 
const QgsPoint &point )
 
 1161   if ( mPoints.count() > 0 && mPoints.size() > index )
 
 1162     mPoints[index] = point;
 
 1167 int QgsMapToolCaptureRubberBand::pointsCount()
 
 1169   return mPoints.size();
 
 1177 void QgsMapToolCaptureRubberBand::setStringType( 
const QgsWkbTypes::Type &type )
 
 1185     mPoints.removeAt( 1 );
 
 1192 QgsPoint QgsMapToolCaptureRubberBand::lastPoint()
 const 
 1194   if ( mPoints.empty() )
 
 1197   return mPoints.last();
 
 1200 QgsPoint QgsMapToolCaptureRubberBand::pointFromEnd( 
int posFromEnd )
 const 
 1202   if ( posFromEnd < mPoints.size() )
 
 1203     return mPoints.at( mPoints.size() - 1 - posFromEnd );
 
 1208 void QgsMapToolCaptureRubberBand::removeLastPoint()
 
 1210   if ( mPoints.count() > 1 )
 
 1211     mPoints.removeLast();
 
 1221 void QgsMapToolCaptureRubberBand::updateCurve()
 
 1223   std::unique_ptr<QgsCurve> curve;
 
 1224   switch ( mStringType )
 
 1227       curve.reset( createLinearString() );
 
 1230       curve.reset( createCircularString() );
 
 1240     geom->setExteriorRing( curve.release() );
 
 1241     setGeometry( geom.release() );
 
 1245     setGeometry( curve.release() );
 
 1249 QgsCurve *QgsMapToolCaptureRubberBand::createLinearString()
 
 1255     points.prepend( mFirstPolygonPoint );
 
 1256     curve->setPoints( points );
 
 1259     curve->setPoints( mPoints );
 
 1261   return curve.release();
 
 1264 QgsCurve *QgsMapToolCaptureRubberBand::createCircularString()
 
 1267   curve->setPoints( mPoints );
 
 1272     polygonCurve->addVertex( mFirstPolygonPoint );
 
 1273     if ( !mPoints.empty() )
 
 1274       polygonCurve->addVertex( mPoints.first() );
 
 1275     polygonCurve->addCurve( curve.release() );
 
 1276     return polygonCurve.release();
 
 1279     return curve.release();
 
T * release()
Clears the pointer and returns it.
void reset(T *p=nullptr)
Will reset the managed pointer to p.
GeometryValidationEngine
Available engines for validating geometries.
Abstract base class for all geometries.
bool is3D() const SIP_HOLDGIL
Returns true if the geometry is 3D and contains a z-value.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns the WKB type of the geometry.
bool isMeasure() const SIP_HOLDGIL
Returns true if the geometry contains m values.
static QCursor getThemeCursor(Cursor cursor)
Helper to get a theme cursor.
Circular string geometry type.
Compound curve geometry type.
QgsLineString * curveToLine(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const override
Returns a new line string geometry corresponding to a segmentized approximation of the curve.
void close()
Appends first point if not already closed.
QgsPoint endPoint() const override SIP_HOLDGIL
Returns the end point of the curve.
const QgsCurve * curveAt(int i) const SIP_HOLDGIL
Returns the curve at the specified index.
int numPoints() const override SIP_HOLDGIL
Returns the number of points in the curve.
void removeCurve(int i)
Removes a curve from the geometry.
void addCurve(QgsCurve *c, bool extendPrevious=false)
Adds a curve to the geometry (takes ownership).
bool moveVertex(QgsVertexId position, const QgsPoint &newPos) override
Moves a vertex within the geometry.
bool deleteVertex(QgsVertexId position) override
Deletes a vertex within the geometry.
QgsCompoundCurve * clone() const override
Clones the geometry by performing a deep copy.
void points(QgsPointSequence &pts) const override
Returns a list of points within the curve.
void clear() override
Clears the geometry, ie reset it to a null geometry.
QgsPoint startPoint() const override SIP_HOLDGIL
Returns the starting point of the curve.
bool isEmpty() const override SIP_HOLDGIL
Returns true if the geometry is empty.
void addVertex(const QgsPoint &pt)
Adds a vertex to the end of the geometry.
int nCurves() const SIP_HOLDGIL
Returns the number of curves in the geometry.
Custom exception class for Coordinate Reference System related exceptions.
Curve polygon geometry type.
Abstract base class for curved geometry type.
QgsCurve * segmentize(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const override
Returns a geometry without curves.
int vertexCount(int part=0, int ring=0) const override
Returns the number of vertices of which this geometry is built.
QgsCurve * clone() const override=0
Clones the geometry by performing a deep copy.
virtual QgsPoint endPoint() const =0
Returns the end point of the curve.
bool nextFeature(QgsFeature &f)
This class wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest & setFilterFid(QgsFeatureId fid)
Sets the feature ID that should be fetched.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
A rubberband class for QgsAbstractGeometry (considering curved geometries).
void setGeometryType(const QgsWkbTypes::GeometryType &geometryType)
Sets which geometry is handled by the rubber band, polygon or line.
virtual void setGeometry(QgsAbstractGeometry *geom)
Sets geometry (takes ownership). Geometry is expected to be in map coordinates.
static QgsPoint closestPoint(const QgsAbstractGeometry &geometry, const QgsPoint &point)
Returns the nearest point on a segment of a geometry for the specified point.
void errorFound(const QgsGeometry::Error &error)
Sent when an error has been found during the validation process.
bool hasWhere() const
true if the location available from
QgsPointXY where() const
The coordinates at which the error is located and should be visualized.
QString what() const
A human readable error message containing details about the error.
A geometry is the spatial representation of a feature.
const QgsAbstractGeometry * constGet() const SIP_HOLDGIL
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
bool vertexIdFromVertexNr(int number, QgsVertexId &id) const
Calculates the vertex ID from a vertex number.
QgsPoint vertexAt(int atVertex) const
Returns coordinates of a vertex.
QgsAbstractGeometry * get()
Returns a modifiable (non-const) reference to the underlying abstract geometry primitive.
QgsGeometry convertToCurves(double distanceTolerance=1e-8, double angleTolerance=1e-8) const
Attempts to convert a non-curved geometry into a curved geometry type (e.g.
static void convertPointList(const QVector< QgsPointXY > &input, QgsPointSequence &output)
Upgrades a point list from QgsPointXY to QgsPoint.
Line string geometry type, with support for z-dimension and m-values.
double length() const override SIP_HOLDGIL
Returns the planar, 2-dimensional length of the geometry.
void close()
Closes the line string by appending the first point to the end of the line, if it is not already clos...
Extension of QgsTracer that provides extra functionality:
QAction * actionEnableTracing() const
Access to action that user may use to toggle tracing on/off. May be nullptr if no action was associat...
void reportError(PathError err, bool addingVertex)
Report a path finding error to the user.
static QgsMapCanvasTracer * tracerForCanvas(QgsMapCanvas *canvas)
Retrieve instance of this class associated with given canvas (if any).
QAction * actionEnableSnapping() const
Access to action that user may use to toggle snapping on/off.
Map canvas is a class for displaying all GIS data types on a canvas.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when the current layer is changed.
QgsSnappingUtils * snappingUtils() const
Returns snapping utility class that is associated with map canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsMapLayer * currentLayer()
returns current layer (set by legend widget)
Base class for all map layer types.
QgsCoordinateReferenceSystem crs
void setCrs(const QgsCoordinateReferenceSystem &srs, bool emitSignal=true)
Sets layer's spatial reference system.
A QgsMapMouseEvent is the result of a user interaction with the mouse on a QgsMapCanvas.
bool isSnapped() const
Returns true if there is a snapped point cached.
QgsPointXY mapPoint() const
mapPoint returns the point in coordinates
QgsPointLocator::Match mapPointMatch() const
Returns the matching data from the most recently snapped point.
QgsPointXY layerToMapCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from layer's CRS to output CRS
QgsCoordinateTransform layerTransform(const QgsMapLayer *layer) const
Returns the coordinate transform from layer's CRS to destination CRS.
A class to represent a 2D point.
Point geometry type, with support for z-dimension and m-values.
bool addMValue(double mValue=0) override
Adds a measure to the geometry, initialized to a preset value.
bool dropMValue() override
Drops any measure values which exist in the geometry.
bool isEmpty() const override SIP_HOLDGIL
Returns true if the geometry is empty.
bool addZValue(double zValue=0) override
Adds a z-dimension to the geometry, initialized to a preset value.
void setZ(double z) SIP_HOLDGIL
Sets the point's z-coordinate.
QgsPoint vertexAt(QgsVertexId) const override
Returns the point corresponding to a specified vertex id.
bool dropZValue() override
Drops any z-dimensions which exist in the geometry.
void setM(double m) SIP_HOLDGIL
Sets the point's m-value.
void setExteriorRing(QgsCurve *ring) override
Sets the exterior ring of the polygon.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void snappingConfigChanged(const QgsSnappingConfig &config)
Emitted whenever the configuration for snapping has changed.
A class for drawing transient features (e.g.
void movePoint(const QgsPointXY &p, int geometryIndex=0, int ringIndex=0)
Moves the rubber band point specified by index.
const QgsPointXY * getPoint(int i, int j=0, int ringIndex=0) const
Returns a vertex.
void reset(QgsWkbTypes::GeometryType geometryType=QgsWkbTypes::LineGeometry)
Clears all the geometries in this rubberband.
int numberOfVertices() const
Returns count of vertices in all lists of mPoint.
void addGeometry(const QgsGeometry &geometry, QgsMapLayer *layer, bool doUpdate=true)
Adds the geometry of an existing feature to a rubberband This is useful for multi feature highlightin...
double value(const QString &dynamicKeyPart=QString(), bool useDefaultValueOverride=false, double defaultValueOverride=0.0) const
Returns settings value.
qlonglong value(const QString &dynamicKeyPart=QString(), bool useDefaultValueOverride=false, qlonglong defaultValueOverride=0) const
Returns settings value.
static const QgsSettingsEntryBool settingsDigitizingConvertToCurve
Settings entry digitizing convert to curve.
static const QgsSettingsEntryInteger settingsDigitizingStreamTolerance
Settings entry digitizing stream tolerance.
static const QgsSettingsEntryDouble settingsDigitizingConvertToCurveDistanceTolerance
Settings entry digitizing convert to curve distance tolerance.
static const QgsSettingsEntryInteger settingsDigitizingValidateGeometries
Settings entry digitizing validate geometries.
static const QgsSettingsEntryDouble settingsDigitizingConvertToCurveAngleTolerance
Settings entry digitizing convert to curve angle tolerance.
static const QgsSettingsEntryDouble settingsDigitizingLineColorAlphaScale
Settings entry digitizing line color alpha scale.
Class that shows snapping marker on map canvas for the current snapping match.
void addExtraSnapLayer(QgsVectorLayer *vl)
Supply an extra snapping layer (typically a memory layer).
void removeExtraSnapLayer(QgsVectorLayer *vl)
Removes an extra snapping layer.
bool isPointSnapped(const QgsPointXY &pt)
Find out whether the point is snapped to a vertex or edge (i.e. it can be used for tracing start/stop...
QVector< QgsPointXY > findShortestPath(const QgsPointXY &p1, const QgsPointXY &p2, PathError *error=nullptr)
Given two points, find the shortest path and return points on the way.
PathError
Possible errors that may happen when calling findShortestPath()
@ ErrTooManyFeatures
Max feature count threshold was reached while reading features.
bool init()
Build the internal data structures.
virtual Q_INVOKABLE QgsVectorDataProvider::Capabilities capabilities() const
Returns flags containing the supported capabilities.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE QgsWkbTypes::Type wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
Q_INVOKABLE QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request.
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider, it may be nullptr.
QgsFeature getFeature(QgsFeatureId fid) const
Queries the layer for the feature with the given id.
bool changeGeometry(QgsFeatureId fid, QgsGeometry &geometry, bool skipDefaultValue=false)
Changes a feature's geometry within the layer's edit buffer (but does not immediately commit the chan...
A class for marking vertices of features using e.g.
void setPenWidth(int width)
void setCenter(const QgsPointXY &point)
Sets the center point of the marker, in map coordinates.
void setIconType(int iconType)
void setColor(const QColor &color)
Sets the stroke color for the marker.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
static bool hasM(Type type) SIP_HOLDGIL
Tests whether a WKB type contains m values.
Type
The WKB type describes the number of dimensions a geometry has.
static bool hasZ(Type type) SIP_HOLDGIL
Tests whether a WKB type contains the z-dimension.
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
QVector< QgsPoint > QgsPointSequence
#define QgsDebugMsgLevel(str, level)
const QgsCoordinateReferenceSystem & crs
QgsVectorLayer * layer() const
The vector layer where the snap occurred.
QgsFeatureId featureId() const
The id of the feature to which the snapped geometry belongs.
QgsPointXY point() const
for vertex / edge match coords depending on what class returns it (geom.cache: layer coords,...
bool hasEdge() const
Returns true if the Match is an edge.
bool hasLineEndpoint() const
Returns true if the Match is a line endpoint (start or end vertex).
bool hasMiddleSegment() const
Returns true if the Match is the middle of a segment.
int vertexIndex() const
for vertex / edge match (first vertex of the edge)
bool hasVertex() const
Returns true if the Match is a vertex.
Setting options for loading vector layers.
bool skipCrsValidation
Controls whether the layer is allowed to have an invalid/unknown CRS.
bool loadDefaultStyle
Set to true if the default layer style should be loaded.
Utility class for identifying a unique vertex within a geometry.