|
21 | 21 | #include "qgsvertexmarker.h"
|
22 | 22 | #include <QDoubleSpinBox>
|
23 | 23 | #include <QGraphicsProxyWidget>
|
| 24 | +#include <QMessageBox> |
24 | 25 | #include <QMouseEvent>
|
25 | 26 | #include "qgisapp.h"
|
26 | 27 |
|
@@ -84,12 +85,19 @@ void QgsMapToolOffsetCurve::canvasReleaseEvent( QMouseEvent * e )
|
84 | 85 | {
|
85 | 86 | Q_UNUSED( e );
|
86 | 87 | QgsVectorLayer* vlayer = currentVectorLayer();
|
87 |
| - if ( !vlayer || !mGeometryModified ) |
| 88 | + if ( !vlayer ) |
88 | 89 | {
|
89 | 90 | deleteRubberBandAndGeometry();
|
90 | 91 | return;
|
91 | 92 | }
|
92 | 93 |
|
| 94 | + if ( !mGeometryModified ) |
| 95 | + { |
| 96 | + deleteRubberBandAndGeometry(); |
| 97 | + vlayer->destroyEditCommand(); |
| 98 | + return; |
| 99 | + } |
| 100 | + |
93 | 101 | if ( mMultiPartGeometry )
|
94 | 102 | {
|
95 | 103 | mModifiedGeometry.convertToMultiType();
|
@@ -346,6 +354,21 @@ void QgsMapToolOffsetCurve::setOffsetForRubberBand( double offset, bool leftSide
|
346 | 354 | int quadSegments = s.value( "/qgis/digitizing/offset_quad_seg", 8 ).toInt();
|
347 | 355 | double mitreLimit = s.value( "/qgis/digitizine/offset_miter_limit", 5.0 ).toDouble();
|
348 | 356 | 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 | + |
349 | 372 | if ( offsetGeom )
|
350 | 373 | {
|
351 | 374 | mModifiedGeometry.fromGeos( offsetGeom );
|
@@ -415,7 +438,7 @@ void QgsMapToolOffsetCurve::configureSnapper( QgsSnapper& s )
|
415 | 438 | sl.mLayer = vl;
|
416 | 439 | QSettings settings;
|
417 | 440 | 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(); |
419 | 442 | sl.mSnapTo = QgsSnapper::SnapToVertexAndSegment;
|
420 | 443 | snapLayers.push_back( sl );
|
421 | 444 | }
|
|
0 commit comments