Skip to content

Commit b8e8c16

Browse files
committed
Catch offset errors
1 parent 44554e1 commit b8e8c16

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

src/app/qgsmaptooloffsetcurve.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "qgsvertexmarker.h"
2222
#include <QDoubleSpinBox>
2323
#include <QGraphicsProxyWidget>
24+
#include <QMessageBox>
2425
#include <QMouseEvent>
2526
#include "qgisapp.h"
2627

@@ -84,12 +85,19 @@ void QgsMapToolOffsetCurve::canvasReleaseEvent( QMouseEvent * e )
8485
{
8586
Q_UNUSED( e );
8687
QgsVectorLayer* vlayer = currentVectorLayer();
87-
if ( !vlayer || !mGeometryModified )
88+
if ( !vlayer )
8889
{
8990
deleteRubberBandAndGeometry();
9091
return;
9192
}
9293

94+
if ( !mGeometryModified )
95+
{
96+
deleteRubberBandAndGeometry();
97+
vlayer->destroyEditCommand();
98+
return;
99+
}
100+
93101
if ( mMultiPartGeometry )
94102
{
95103
mModifiedGeometry.convertToMultiType();
@@ -346,6 +354,21 @@ void QgsMapToolOffsetCurve::setOffsetForRubberBand( double offset, bool leftSide
346354
int quadSegments = s.value( "/qgis/digitizing/offset_quad_seg", 8 ).toInt();
347355
double mitreLimit = s.value( "/qgis/digitizine/offset_miter_limit", 5.0 ).toDouble();
348356
GEOSGeometry* offsetGeom = GEOSSingleSidedBuffer( geosGeom, offset, quadSegments, joinStyle, mitreLimit, leftSide ? 1 : 0 );
357+
if ( !offsetGeom )
358+
{
359+
deleteRubberBandAndGeometry();
360+
deleteDistanceItem();
361+
delete mSnapVertexMarker; mSnapVertexMarker = 0;
362+
mForceCopy = false;
363+
mGeometryModified = false;
364+
deleteDistanceItem();
365+
QMessageBox::critical( 0, tr( "Geometry error" ), tr( "Creating offset geometry failed" ) );
366+
return;
367+
}
368+
369+
//GEOS >= 3.3
370+
//GEOSGeometry* offsetGeom = GEOSOffsetCurve( geosGeom, (leftSide > 0) ? offset : -offset, quadSegments, joinStyle, mitreLimit );
371+
349372
if ( offsetGeom )
350373
{
351374
mModifiedGeometry.fromGeos( offsetGeom );
@@ -415,7 +438,7 @@ void QgsMapToolOffsetCurve::configureSnapper( QgsSnapper& s )
415438
sl.mLayer = vl;
416439
QSettings settings;
417440
sl.mTolerance = settings.value( "/qgis/digitizing/search_radius_vertex_edit", 10 ).toDouble();
418-
sl.mUnitType = ( QgsTolerance::UnitType ) settings.value( "/qgis/digitizing/default_snapping_tolerance_unit", 0 ).toInt();
441+
sl.mUnitType = ( QgsTolerance::UnitType ) settings.value( "/qgis/digitizing/search_radius_vertex_edit_unit", QgsTolerance::Pixels ).toInt();
419442
sl.mSnapTo = QgsSnapper::SnapToVertexAndSegment;
420443
snapLayers.push_back( sl );
421444
}

0 commit comments

Comments
 (0)