@@ -400,7 +400,7 @@ void QgsVectorLayer::drawLabels( QgsRenderContext& rendererContext )
400
400
401
401
402
402
403
- void QgsVectorLayer::drawRendererV2 ( QgsFeatureIterator &fit, QgsRenderContext& rendererContext, bool labeling )
403
+ void QgsVectorLayer::drawRendererV2 ( QgsFeatureIterator &fit, QgsRenderContext& rendererContext, bool labeling, const QgsAbstractGeometrySimplifier* geometrySimplifier )
404
404
{
405
405
if ( !hasGeometryType () )
406
406
return ;
@@ -451,6 +451,13 @@ void QgsVectorLayer::drawRendererV2( QgsFeatureIterator &fit, QgsRenderContext&
451
451
bool sel = mSelectedFeatureIds .contains ( fet.id () );
452
452
bool drawMarker = ( mEditBuffer && ( !vertexMarkerOnlyForSelection || sel ) );
453
453
454
+ // simplify the geometry using the current map2pixel context
455
+ if ( geometrySimplifier )
456
+ {
457
+ fet = QgsFeature ( fet );
458
+ geometrySimplifier->simplifyGeometry ( fet.geometry () );
459
+ }
460
+
454
461
// render feature
455
462
bool rendered = mRendererV2 ->renderFeature ( fet, rendererContext, -1 , sel, drawMarker );
456
463
@@ -493,7 +500,7 @@ void QgsVectorLayer::drawRendererV2( QgsFeatureIterator &fit, QgsRenderContext&
493
500
#endif
494
501
}
495
502
496
- void QgsVectorLayer::drawRendererV2Levels ( QgsFeatureIterator &fit, QgsRenderContext& rendererContext, bool labeling )
503
+ void QgsVectorLayer::drawRendererV2Levels ( QgsFeatureIterator &fit, QgsRenderContext& rendererContext, bool labeling, const QgsAbstractGeometrySimplifier* geometrySimplifier )
497
504
{
498
505
if ( !hasGeometryType () )
499
506
return ;
@@ -539,6 +546,13 @@ void QgsVectorLayer::drawRendererV2Levels( QgsFeatureIterator &fit, QgsRenderCon
539
546
continue ;
540
547
}
541
548
549
+ // simplify the geometry using the current map2pixel context
550
+ if ( geometrySimplifier )
551
+ {
552
+ fet = QgsFeature ( fet );
553
+ geometrySimplifier->simplifyGeometry ( fet.geometry () );
554
+ }
555
+
542
556
if ( !features.contains ( sym ) )
543
557
{
544
558
features.insert ( sym, QList<QgsFeature>() );
@@ -698,14 +712,14 @@ bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )
698
712
// do startRender before getFeatures to give renderers the possibility of querying features in the startRender method
699
713
mRendererV2 ->startRender ( rendererContext, this );
700
714
701
- QgsFeatureRequest& featureRequest = QgsFeatureRequest ()
702
- .setFilterRect ( rendererContext.extent () )
703
- .setSubsetOfAttributes ( attributes );
715
+ QgsFeatureIterator fit = getFeatures ( QgsFeatureRequest ()
716
+ .setFilterRect ( rendererContext.extent () )
717
+ .setSubsetOfAttributes ( attributes ) );
704
718
705
- QgsFeatureIterator fit = QgsFeatureIterator () ;
719
+ QgsAbstractGeometrySimplifier* geometrySimplifier = NULL ;
706
720
707
- // Enable the simplification of the geometries (Using the current map2pixel context) before fetch the features .
708
- if ( simplifyDrawingCanbeApplied ( QgsVectorLayer::GeometrySimplification | QgsVectorLayer::EnvelopeSimplification ) && !( featureRequest. flags () & QgsFeatureRequest::NoGeometry ) )
721
+ // enable the simplification of the geometries (Using the current map2pixel context) before send it to renderer engine .
722
+ if ( simplifyDrawingCanbeApplied ( QgsVectorLayer::GeometrySimplification | QgsVectorLayer::EnvelopeSimplification ) )
709
723
{
710
724
QPainter* p = rendererContext.painter ();
711
725
float dpi = ( p->device ()->logicalDpiX () + p->device ()->logicalDpiY () ) / 2 ;
@@ -715,29 +729,21 @@ bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )
715
729
if ( mSimplifyDrawingHints & QgsVectorLayer::GeometrySimplification ) simplifyFlags |= QgsMapToPixelSimplifier::SimplifyGeometry;
716
730
if ( mSimplifyDrawingHints & QgsVectorLayer::EnvelopeSimplification ) simplifyFlags |= QgsMapToPixelSimplifier::SimplifyEnvelope;
717
731
718
- QgsFeatureRequest::Flags requestFlags = QgsFeatureRequest::NoFlags;
719
- if ( mSimplifyDrawingHints & QgsVectorLayer::GeometrySimplification ) requestFlags |= QgsFeatureRequest::SimplifyGeometry;
720
- if ( mSimplifyDrawingHints & QgsVectorLayer::EnvelopeSimplification ) requestFlags |= QgsFeatureRequest::SimplifyEnvelope;
721
-
722
- featureRequest.setFlags ( featureRequest.flags () | requestFlags );
723
- featureRequest.setCoordinateTransform ( rendererContext.coordinateTransform () );
724
- featureRequest.setMapToPixel ( &rendererContext.mapToPixel () );
725
- featureRequest.setMapToPixelTol ( map2pixelTol );
726
-
727
- QgsMapToPixelSimplifier* simplifier =
732
+ geometrySimplifier =
728
733
new QgsMapToPixelSimplifier ( simplifyFlags, rendererContext.coordinateTransform (), &rendererContext.mapToPixel (), map2pixelTol );
729
-
730
- fit = QgsFeatureIterator ( new QgsSimplifiedVectorLayerFeatureIterator ( this , featureRequest, simplifier ) );
731
- }
732
- else
733
- {
734
- fit = getFeatures ( featureRequest );
735
734
}
736
735
737
736
if (( mRendererV2 ->capabilities () & QgsFeatureRendererV2::SymbolLevels ) && mRendererV2 ->usingSymbolLevels () )
738
- drawRendererV2Levels ( fit, rendererContext, labeling );
737
+ drawRendererV2Levels ( fit, rendererContext, labeling, geometrySimplifier );
739
738
else
740
- drawRendererV2 ( fit, rendererContext, labeling );
739
+ drawRendererV2 ( fit, rendererContext, labeling, geometrySimplifier );
740
+
741
+ // release the optional geometry simplifier
742
+ if ( geometrySimplifier )
743
+ {
744
+ delete geometrySimplifier;
745
+ geometrySimplifier = NULL ;
746
+ }
741
747
742
748
return true ;
743
749
}
0 commit comments