@@ -261,97 +261,75 @@ void QgsRubberBand::addGeometry( const QgsGeometry &geometry, const QgsCoordinat
261
261
geom.transform ( ct );
262
262
}
263
263
264
- switch ( QgsWkbTypes::flatType ( geom.wkbType () ) )
264
+ QgsWkbTypes::Type geomType = geom.wkbType ();
265
+ if ( QgsWkbTypes::geometryType ( geomType ) == QgsWkbTypes::PointGeometry && !QgsWkbTypes::isMultiType ( geomType ) )
265
266
{
266
-
267
- case QgsWkbTypes::Point :
268
- case QgsWkbTypes::Point25D:
267
+ QgsPointXY pt = geom.asPoint ();
268
+ addPoint ( pt, false , idx );
269
+ removeLastPoint ( idx, false );
270
+ }
271
+ else if ( QgsWkbTypes::geometryType ( geomType ) == QgsWkbTypes::PointGeometry && QgsWkbTypes::isMultiType ( geomType ) )
272
+ {
273
+ const QgsMultiPointXY mpt = geom.asMultiPoint ();
274
+ for ( QgsPointXY pt : mpt )
269
275
{
270
- QgsPointXY pt = geom.asPoint ();
271
276
addPoint ( pt, false , idx );
272
277
removeLastPoint ( idx, false );
278
+ idx++;
273
279
}
274
- break ;
275
-
276
- case QgsWkbTypes::MultiPoint:
277
- case QgsWkbTypes::MultiPoint25D:
280
+ }
281
+ else if ( QgsWkbTypes::geometryType ( geomType ) == QgsWkbTypes::LineGeometry && !QgsWkbTypes::isMultiType ( geomType ) )
282
+ {
283
+ const QgsPolylineXY line = geom.asPolyline ();
284
+ for ( QgsPointXY pt : line )
278
285
{
279
- const QgsMultiPointXY mpt = geom.asMultiPoint ();
280
- for ( QgsPointXY pt : mpt )
281
- {
282
- addPoint ( pt, false , idx );
283
- removeLastPoint ( idx, false );
284
- idx++;
285
- }
286
+ addPoint ( pt, false , idx );
286
287
}
287
- break ;
288
-
289
- case QgsWkbTypes::LineString:
290
- case QgsWkbTypes::LineString25D:
288
+ }
289
+ else if ( QgsWkbTypes::geometryType ( geomType ) == QgsWkbTypes::LineGeometry && QgsWkbTypes::isMultiType ( geomType ) )
290
+ {
291
+ const QgsMultiPolylineXY mline = geom.asMultiPolyline ();
292
+ for ( const QgsPolylineXY &line : mline )
291
293
{
292
- const QgsPolylineXY line = geom.asPolyline ();
294
+ if ( line.isEmpty () )
295
+ {
296
+ continue ;
297
+ }
293
298
for ( QgsPointXY pt : line )
294
299
{
295
300
addPoint ( pt, false , idx );
296
301
}
302
+ idx++;
297
303
}
298
- break ;
299
-
300
- case QgsWkbTypes::MultiLineString:
301
- case QgsWkbTypes::MultiLineString25D:
304
+ }
305
+ else if ( QgsWkbTypes::geometryType ( geomType ) == QgsWkbTypes::PolygonGeometry && !QgsWkbTypes::isMultiType ( geomType ) )
306
+ {
307
+ const QgsPolygonXY poly = geom.asPolygon ();
308
+ const QgsPolylineXY line = poly.at ( 0 );
309
+ for ( QgsPointXY pt : line )
302
310
{
303
-
304
- const QgsMultiPolylineXY mline = geom.asMultiPolyline ();
305
- for ( const QgsPolylineXY &line : mline )
306
- {
307
- if ( line.isEmpty () )
308
- {
309
- continue ;
310
- }
311
-
312
- for ( QgsPointXY pt : line )
313
- {
314
- addPoint ( pt, false , idx );
315
- }
316
- idx++;
317
- }
311
+ addPoint ( pt, false , idx );
318
312
}
319
- break ;
320
-
321
- case QgsWkbTypes::Polygon:
322
- case QgsWkbTypes::Polygon25D:
313
+ }
314
+ else if ( QgsWkbTypes::geometryType ( geomType ) == QgsWkbTypes::PolygonGeometry && QgsWkbTypes::isMultiType ( geomType ) )
315
+ {
316
+ const QgsMultiPolygonXY multipoly = geom.asMultiPolygon ();
317
+ for ( const QgsPolygonXY &poly : multipoly )
323
318
{
324
- const QgsPolygonXY poly = geom.asPolygon ();
319
+ if ( poly.empty () )
320
+ continue ;
321
+
325
322
const QgsPolylineXY line = poly.at ( 0 );
326
323
for ( QgsPointXY pt : line )
327
324
{
328
325
addPoint ( pt, false , idx );
329
326
}
327
+ idx++;
330
328
}
331
- break ;
332
-
333
- case QgsWkbTypes::MultiPolygon:
334
- case QgsWkbTypes::MultiPolygon25D:
335
- {
336
- const QgsMultiPolygonXY multipoly = geom.asMultiPolygon ();
337
- for ( const QgsPolygonXY &poly : multipoly )
338
- {
339
- if ( poly.empty () )
340
- continue ;
341
-
342
- const QgsPolylineXY line = poly.at ( 0 );
343
- for ( QgsPointXY pt : line )
344
- {
345
- addPoint ( pt, false , idx );
346
- }
347
- idx++;
348
- }
349
- }
350
- break ;
351
-
352
- case QgsWkbTypes::Unknown:
353
- default :
354
- return ;
329
+ }
330
+ else
331
+ {
332
+ return ;
355
333
}
356
334
357
335
setVisible ( true );
0 commit comments