From bc074869823b67acf76ee3fa5edccc5acb611fd0 Mon Sep 17 00:00:00 2001 From: Martin Dobias Date: Tue, 18 Feb 2014 12:10:24 +0700 Subject: [PATCH] Re-enable geometry simplification while rendering --- src/core/qgsvectorlayerfeatureiterator.cpp | 3 --- src/core/qgsvectorlayerrenderer.cpp | 15 ++++++++------- src/core/qgsvectorlayerrenderer.h | 4 ++++ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/core/qgsvectorlayerfeatureiterator.cpp b/src/core/qgsvectorlayerfeatureiterator.cpp index 5335d196af6..62d29dffdc6 100644 --- a/src/core/qgsvectorlayerfeatureiterator.cpp +++ b/src/core/qgsvectorlayerfeatureiterator.cpp @@ -62,9 +62,6 @@ QgsVectorLayerFeatureSource::QgsVectorLayerFeatureSource(QgsVectorLayer *layer) mChangedAttributeValues = QgsChangedAttributesMap( layer->editBuffer()->changedAttributeValues() ); mAddedAttributes = QList( layer->editBuffer()->addedAttributes() ); mDeletedAttributeIds = QgsAttributeList( layer->editBuffer()->deletedAttributeIds() ); - - // TODO[MD]: after merge - //mChangedFeaturesRequest.setFilterFids( L->editBuffer()->changedAttributeValues().keys().toSet() ); //} } } diff --git a/src/core/qgsvectorlayerrenderer.cpp b/src/core/qgsvectorlayerrenderer.cpp index a562fb5db93..c9eae74ee90 100644 --- a/src/core/qgsvectorlayerrenderer.cpp +++ b/src/core/qgsvectorlayerrenderer.cpp @@ -42,6 +42,9 @@ QgsVectorLayerRenderer::QgsVectorLayerRenderer( QgsVectorLayer* layer, QgsRender mLayerTransparency = layer->layerTransparency(); mFeatureBlendMode = layer->featureBlendMode(); + mSimplifyMethod = layer->simplifyMethod(); + mSimplifyGeometry = layer->simplifyDrawingCanbeApplied( mContext, QgsVectorLayer::GeometrySimplification ); + QSettings settings; mVertexMarkerOnlyForSelection = settings.value( "/qgis/digitizing/marker_only_for_selected", false ).toBool(); @@ -114,21 +117,20 @@ bool QgsVectorLayerRenderer::render() .setSubsetOfAttributes( mAttrNames, mFields ); // enable the simplification of the geometries (Using the current map2pixel context) before send it to renderer engine. -#if 0 //TODO[MD]: after merge - if ( simplifyDrawingCanbeApplied( mContext, QgsVectorLayer::GeometrySimplification ) ) + if ( mSimplifyGeometry ) { - QPainter* p = rendererContext.painter(); + QPainter* p = mContext.painter(); double dpi = ( p->device()->logicalDpiX() + p->device()->logicalDpiY() ) / 2; double map2pixelTol = mSimplifyMethod.threshold() * 96.0f / dpi; - const QgsMapToPixel& mtp = rendererContext.mapToPixel(); + const QgsMapToPixel& mtp = mContext.mapToPixel(); map2pixelTol *= mtp.mapUnitsPerPixel(); - const QgsCoordinateTransform* ct = rendererContext.coordinateTransform(); + const QgsCoordinateTransform* ct = mContext.coordinateTransform(); // resize the tolerance using the change of size of an 1-BBOX from the source CoordinateSystem to the target CoordinateSystem if ( ct && !(( QgsCoordinateTransform* )ct )->isShortCircuited() ) { - QgsPoint center = rendererContext.extent().center(); + QgsPoint center = mContext.extent().center(); double rectSize = ct->sourceCrs().geographicFlag() ? 0.0008983 /* ~100/(40075014/360=111319.4833) */ : 100; QgsRectangle sourceRect = QgsRectangle( center.x(), center.y(), center.x() + rectSize, center.y() + rectSize ); @@ -153,7 +155,6 @@ bool QgsVectorLayerRenderer::render() featureRequest.setSimplifyMethod( simplifyMethod ); } -#endif QgsFeatureIterator fit = mSource->getFeatures( featureRequest ); diff --git a/src/core/qgsvectorlayerrenderer.h b/src/core/qgsvectorlayerrenderer.h index c6d661c4501..cebe86d48a2 100644 --- a/src/core/qgsvectorlayerrenderer.h +++ b/src/core/qgsvectorlayerrenderer.h @@ -22,6 +22,7 @@ typedef QList QgsAttributeList; #include "qgsfield.h" // QgsFields #include "qgsfeature.h" // QgsFeatureIds #include "qgsfeatureiterator.h" +#include "qgsvectorsimplifymethod.h" #include "qgsmaplayerrenderer.h" @@ -86,6 +87,9 @@ protected: int mLayerTransparency; QPainter::CompositionMode mFeatureBlendMode; + + QgsVectorSimplifyMethod mSimplifyMethod; + bool mSimplifyGeometry; };