Skip to content

Commit 417d497

Browse files
committed
fix offset curve crash (fixes #9446)
1 parent 188b373 commit 417d497

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/app/qgsmaptooloffsetcurve.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,16 @@
2525
#include <QMouseEvent>
2626
#include "qgisapp.h"
2727

28-
QgsMapToolOffsetCurve::QgsMapToolOffsetCurve( QgsMapCanvas* canvas ): QgsMapToolEdit( canvas ), mRubberBand( 0 ),
29-
mOriginalGeometry( 0 ), mGeometryModified( false ), mDistanceItem( 0 ), mDistanceSpinBox( 0 ), mSnapVertexMarker( 0 ), mForceCopy( false ), mMultiPartGeometry( false )
28+
QgsMapToolOffsetCurve::QgsMapToolOffsetCurve( QgsMapCanvas* canvas )
29+
: QgsMapToolEdit( canvas )
30+
, mRubberBand( 0 )
31+
, mOriginalGeometry( 0 )
32+
, mGeometryModified( false )
33+
, mDistanceItem( 0 )
34+
, mDistanceSpinBox( 0 )
35+
, mSnapVertexMarker( 0 )
36+
, mForceCopy( false )
37+
, mMultiPartGeometry( false )
3038
{
3139
}
3240

@@ -154,7 +162,7 @@ void QgsMapToolOffsetCurve::placeOffsetCurveToValue()
154162
{
155163
//is rubber band left or right of original geometry
156164
double leftOf = 0;
157-
const QgsPoint* firstPoint = mRubberBand->getPoint( 0 );
165+
const QgsPoint *firstPoint = mRubberBand->getPoint( 0 );
158166
if ( firstPoint )
159167
{
160168
QgsPoint minDistPoint;
@@ -236,6 +244,7 @@ QgsGeometry* QgsMapToolOffsetCurve::createOriginGeometry( QgsVectorLayer* vl, co
236244
{
237245
return 0;
238246
}
247+
239248
mMultiPartGeometry = false;
240249
//assign feature part by vertex number (snap to vertex) or by before vertex number (snap to segment)
241250
int partVertexNr = ( sr.snappedVertexNr == -1 ? sr.beforeVertexNr : sr.snappedVertexNr );
@@ -254,7 +263,6 @@ QgsGeometry* QgsMapToolOffsetCurve::createOriginGeometry( QgsVectorLayer* vl, co
254263
return linestringFromPolygon( snappedFeature.geometry(), partVertexNr );
255264
}
256265

257-
258266
//for background layers, try to merge selected entries together if snapped feature is contained in selection
259267
const QgsFeatureIds& selection = vl->selectedFeaturesIds();
260268
if ( selection.size() < 1 || !selection.contains( sr.snappedAtGeometry ) )
@@ -273,7 +281,7 @@ QgsGeometry* QgsMapToolOffsetCurve::createOriginGeometry( QgsVectorLayer* vl, co
273281
geom = geom->combine( selIt->geometry() );
274282
}
275283

276-
//if multitype, return only the snaped to geometry
284+
//if multitype, return only the snapped to geometry
277285
if ( geom->isMultipart() )
278286
{
279287
delete geom;

src/gui/qgsrubberband.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ void QgsRubberBand::movePoint( int index, const QgsPoint& p, int geometryIndex )
236236

237237
void QgsRubberBand::setToGeometry( QgsGeometry* geom, QgsVectorLayer* layer )
238238
{
239+
if( !geom )
240+
{
241+
reset( mGeometryType );
242+
return;
243+
}
244+
239245
reset( geom->type() );
240246
addGeometry( geom, layer );
241247
}

0 commit comments

Comments
 (0)