@@ -246,24 +246,35 @@ void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymb
246
246
QgsSymbolV2::SymbolType symbolType = symbol->type ();
247
247
248
248
const QgsGeometry* geom = feature.constGeometry ();
249
- if ( !geom )
249
+ if ( !geom || !geom-> geometry () )
250
250
{
251
251
return ;
252
252
}
253
253
254
- if ( geom->requiresConversionToStraightSegments () )
254
+ // convert curve types to normal point/line/polygon ones
255
+ switch ( QgsWKBTypes::flatType ( geom->geometry ()->wkbType () ) )
255
256
{
256
- // geometry requires conversion to straight segments
257
- QgsGeometry* straightGeom = new QgsGeometry ( *geom );
258
- straightGeom->convertToStraightSegment ();
259
- feature.setGeometry ( straightGeom );
260
- geom = feature.constGeometry ();
257
+ case QgsWKBTypes::CurvePolygon:
258
+ case QgsWKBTypes::CircularString:
259
+ case QgsWKBTypes::CompoundCurve:
260
+ case QgsWKBTypes::MultiSurface:
261
+ case QgsWKBTypes::MultiCurve:
262
+ {
263
+ QgsAbstractGeometryV2* g = geom->geometry ()->segmentize ();
264
+ if ( !g )
265
+ {
266
+ return ;
267
+ }
268
+ feature.setGeometry ( new QgsGeometry ( g ) );
269
+ geom = feature.constGeometry ();
270
+ }
271
+ default :
272
+ break ;
261
273
}
262
274
263
- switch ( geom->wkbType () )
275
+ switch ( QgsWKBTypes::flatType ( geom->geometry ()-> wkbType () ) )
264
276
{
265
- case QGis::WKBPoint:
266
- case QGis::WKBPoint25D:
277
+ case QgsWKBTypes::Point :
267
278
{
268
279
if ( symbolType != QgsSymbolV2::Marker )
269
280
{
@@ -278,9 +289,7 @@ void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymb
278
289
// renderVertexMarker( pt, context );
279
290
}
280
291
break ;
281
-
282
- case QGis::WKBLineString:
283
- case QGis::WKBLineString25D:
292
+ case QgsWKBTypes::LineString:
284
293
{
285
294
if ( symbolType != QgsSymbolV2::Line )
286
295
{
@@ -295,9 +304,7 @@ void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymb
295
304
renderVertexMarkerPolyline ( pts, context );
296
305
}
297
306
break ;
298
-
299
- case QGis::WKBPolygon:
300
- case QGis::WKBPolygon25D:
307
+ case QgsWKBTypes::Polygon:
301
308
{
302
309
if ( symbolType != QgsSymbolV2::Fill )
303
310
{
@@ -314,8 +321,7 @@ void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymb
314
321
}
315
322
break ;
316
323
317
- case QGis::WKBMultiPoint:
318
- case QGis::WKBMultiPoint25D:
324
+ case QgsWKBTypes::MultiPoint:
319
325
{
320
326
if ( symbolType != QgsSymbolV2::Marker )
321
327
{
@@ -340,8 +346,7 @@ void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymb
340
346
}
341
347
break ;
342
348
343
- case QGis::WKBMultiLineString:
344
- case QGis::WKBMultiLineString25D:
349
+ case QgsWKBTypes::MultiLineString:
345
350
{
346
351
if ( symbolType != QgsSymbolV2::Line )
347
352
{
@@ -366,8 +371,7 @@ void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymb
366
371
}
367
372
break ;
368
373
369
- case QGis::WKBMultiPolygon:
370
- case QGis::WKBMultiPolygon25D:
374
+ case QgsWKBTypes::MultiPolygon:
371
375
{
372
376
if ( symbolType != QgsSymbolV2::Fill )
373
377
{
@@ -390,9 +394,8 @@ void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymb
390
394
if ( drawVertexMarker )
391
395
renderVertexMarkerPolygon ( pts, ( holes.count () ? &holes : NULL ), context );
392
396
}
397
+ break ;
393
398
}
394
- break ;
395
-
396
399
default :
397
400
QgsDebugMsg ( QString ( " feature %1: unsupported wkb type 0x%2 for rendering" ).arg ( feature.id () ).arg ( geom->wkbType (), 0 , 16 ) );
398
401
}
0 commit comments