From 83eec4ac46a44cb3768a23e4aee6bc2826f88edc Mon Sep 17 00:00:00 2001 From: Alvaro Huarte Date: Mon, 26 May 2014 17:30:41 +0200 Subject: [PATCH] Enable disabled simplification code after merge MTR (2-2) Enable AntialiasingSimplification --- python/core/qgsrendercontext.sip | 4 ++++ src/core/qgsrendercontext.cpp | 2 +- src/core/qgsrendercontext.h | 8 ++++++++ src/core/qgsvectorlayerrenderer.cpp | 9 +++++++++ src/core/symbology-ng/qgslinesymbollayerv2.cpp | 4 +--- src/core/symbology-ng/qgssymbollayerv2.cpp | 4 +--- 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/python/core/qgsrendercontext.sip b/python/core/qgsrendercontext.sip index 01864e8a828..04964d4d81c 100644 --- a/python/core/qgsrendercontext.sip +++ b/python/core/qgsrendercontext.sip @@ -72,4 +72,8 @@ class QgsRenderContext /**Returns true if the rendering optimization (geometry simplification) can be executed*/ bool useRenderingOptimization() const; void setUseRenderingOptimization( bool enabled ); + + //! Added in QGIS v2.4 + const QgsVectorSimplifyMethod& vectorSimplifyMethod() const; + void setVectorSimplifyMethod( const QgsVectorSimplifyMethod& simplifyMethod ); }; diff --git a/src/core/qgsrendercontext.cpp b/src/core/qgsrendercontext.cpp index 21ec1bc62e9..721f31e8292 100644 --- a/src/core/qgsrendercontext.cpp +++ b/src/core/qgsrendercontext.cpp @@ -33,7 +33,7 @@ QgsRenderContext::QgsRenderContext() mLabelingEngine( NULL ), mUseRenderingOptimization( true ) { - + mVectorSimplifyMethod.setSimplifyHints( QgsVectorSimplifyMethod::NoSimplification ); } QgsRenderContext::~QgsRenderContext() diff --git a/src/core/qgsrendercontext.h b/src/core/qgsrendercontext.h index d58bcc7fc6d..4008b8cd931 100644 --- a/src/core/qgsrendercontext.h +++ b/src/core/qgsrendercontext.h @@ -23,6 +23,7 @@ #include "qgscoordinatetransform.h" #include "qgsmaptopixel.h" #include "qgsrectangle.h" +#include "qgsvectorsimplifymethod.h" class QPainter; @@ -104,6 +105,10 @@ class CORE_EXPORT QgsRenderContext bool useRenderingOptimization() const { return mUseRenderingOptimization; } void setUseRenderingOptimization( bool enabled ) { mUseRenderingOptimization = enabled; } + //! Added in QGIS v2.4 + const QgsVectorSimplifyMethod& vectorSimplifyMethod() const { return mVectorSimplifyMethod; } + void setVectorSimplifyMethod( const QgsVectorSimplifyMethod& simplifyMethod ) { mVectorSimplifyMethod = simplifyMethod; } + private: /**Painter for rendering operations*/ @@ -145,6 +150,9 @@ class CORE_EXPORT QgsRenderContext /**True if the rendering optimization (geometry simplification) can be executed*/ bool mUseRenderingOptimization; + + /**Simplification object which holds the information about how to simplify the features for fast rendering */ + QgsVectorSimplifyMethod mVectorSimplifyMethod; }; #endif diff --git a/src/core/qgsvectorlayerrenderer.cpp b/src/core/qgsvectorlayerrenderer.cpp index a155e6cf1a4..ebac7d5ed2e 100644 --- a/src/core/qgsvectorlayerrenderer.cpp +++ b/src/core/qgsvectorlayerrenderer.cpp @@ -169,6 +169,15 @@ bool QgsVectorLayerRenderer::render() simplifyMethod.setForceLocalOptimization( mSimplifyMethod.forceLocalOptimization() ); featureRequest.setSimplifyMethod( simplifyMethod ); + + QgsVectorSimplifyMethod vectorMethod = mSimplifyMethod; + mContext.setVectorSimplifyMethod( vectorMethod ); + } + else + { + QgsVectorSimplifyMethod vectorMethod; + vectorMethod.setSimplifyHints( QgsVectorSimplifyMethod::NoSimplification ); + mContext.setVectorSimplifyMethod( vectorMethod ); } QgsFeatureIterator fit = mSource->getFeatures( featureRequest ); diff --git a/src/core/symbology-ng/qgslinesymbollayerv2.cpp b/src/core/symbology-ng/qgslinesymbollayerv2.cpp index ac5b88c3bc8..0f624fae1c0 100644 --- a/src/core/symbology-ng/qgslinesymbollayerv2.cpp +++ b/src/core/symbology-ng/qgslinesymbollayerv2.cpp @@ -258,15 +258,13 @@ void QgsSimpleLineSymbolLayerV2::renderPolyline( const QPolygonF& points, QgsSym p->setPen( context.selected() ? mSelPen : mPen ); // Disable 'Antialiasing' if the geometry was generalized in the current RenderContext (We known that it must have least #2 points). -#if 0 // TODO[MD]: after merge - if ( points.size() <= 2 && context.layer() && context.layer()->simplifyDrawingCanbeApplied( context.renderContext(), QgsVectorSimplifyMethod::AntialiasingSimplification ) && QgsAbstractGeometrySimplifier::canbeGeneralizedByDeviceBoundingBox( points, context.layer()->simplifyMethod().threshold() ) && ( p->renderHints() & QPainter::Antialiasing ) ) + if ( points.size() <= 2 && ( context.renderContext().vectorSimplifyMethod().simplifyHints() & QgsVectorSimplifyMethod::AntialiasingSimplification ) && QgsAbstractGeometrySimplifier::canbeGeneralizedByDeviceBoundingBox( points, context.renderContext().vectorSimplifyMethod().threshold() ) && ( p->renderHints() & QPainter::Antialiasing ) ) { p->setRenderHint( QPainter::Antialiasing, false ); p->drawPolyline( points ); p->setRenderHint( QPainter::Antialiasing, true ); return; } -#endif if ( offset == 0 ) { diff --git a/src/core/symbology-ng/qgssymbollayerv2.cpp b/src/core/symbology-ng/qgssymbollayerv2.cpp index 0cd36d8a207..362b533473f 100644 --- a/src/core/symbology-ng/qgssymbollayerv2.cpp +++ b/src/core/symbology-ng/qgssymbollayerv2.cpp @@ -427,15 +427,13 @@ void QgsFillSymbolLayerV2::_renderPolygon( QPainter* p, const QPolygonF& points, } // Disable 'Antialiasing' if the geometry was generalized in the current RenderContext (We known that it must have least #5 points). -#if 0 // TODO[MD]: after merge - if ( points.size() <= 5 && context.layer() && context.layer()->simplifyDrawingCanbeApplied( context.renderContext(), QgsVectorSimplifyMethod::AntialiasingSimplification ) && QgsAbstractGeometrySimplifier::canbeGeneralizedByDeviceBoundingBox( points, context.layer()->simplifyMethod().threshold() ) && ( p->renderHints() & QPainter::Antialiasing ) ) + if ( points.size() <= 5 && ( context.renderContext().vectorSimplifyMethod().simplifyHints() & QgsVectorSimplifyMethod::AntialiasingSimplification ) && QgsAbstractGeometrySimplifier::canbeGeneralizedByDeviceBoundingBox( points, context.renderContext().vectorSimplifyMethod().threshold() ) && ( p->renderHints() & QPainter::Antialiasing ) ) { p->setRenderHint( QPainter::Antialiasing, false ); p->drawRect( points.boundingRect() ); p->setRenderHint( QPainter::Antialiasing, true ); return; } -#endif if ( rings == NULL ) {