From ed0d9dad59b5d27e5a52103148d1323c37cafea8 Mon Sep 17 00:00:00 2001 From: jef Date: Thu, 24 Dec 2009 15:59:54 +0000 Subject: [PATCH] catch projection exceptions while V2 rendering git-svn-id: http://svn.osgeo.org/qgis/trunk@12615 c8812cc2-4d05-0410-92ff-de0c093fc19c --- src/core/qgsvectorlayer.cpp | 61 +++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index 1441c670ea0..b5f0215ec35 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include "qgsvectorlayer.h" @@ -703,23 +704,33 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab QgsFeature fet; while ( nextFeature( fet ) ) { - bool sel = mSelectedFeatureIds.contains( fet.id() ); - bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) ); - - // render feature - if ( sel ) - selRenderer->renderFeature( fet, rendererContext, -1, drawMarker ); - else - mRendererV2->renderFeature( fet, rendererContext, -1, drawMarker ); - - // labeling - register feature - if ( labeling && mRendererV2->symbolForFeature( fet ) != NULL ) - rendererContext.labelingEngine()->registerFeature( this, fet ); - - if ( mEditable ) + try { - // Cache this for the use of (e.g.) modifying the feature's uncommitted geometry. - mCachedGeometries[fet.id()] = *fet.geometry(); + bool sel = mSelectedFeatureIds.contains( fet.id() ); + bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) ); + + // render feature + if ( sel ) + selRenderer->renderFeature( fet, rendererContext, -1, drawMarker ); + else + mRendererV2->renderFeature( fet, rendererContext, -1, drawMarker ); + + // labeling - register feature + if ( labeling && mRendererV2->symbolForFeature( fet ) != NULL ) + rendererContext.labelingEngine()->registerFeature( this, fet ); + + if ( mEditable ) + { + // Cache this for the use of (e.g.) modifying the feature's uncommitted geometry. + mCachedGeometries[fet.id()] = *fet.geometry(); + } + } + catch ( const QgsCsException &cse ) + { + QString msg( "Failed to transform a point while drawing a feature of type '" + + fet.typeName() + "'. Ignoring this feature." ); + msg += cse.what(); + QgsLogger::warning( msg ); } } @@ -809,10 +820,20 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo // maybe vertex markers should be drawn only during the last pass... bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) ); - if ( sel ) - selRenderer->renderFeature( *fit, rendererContext, -1, drawMarker ); - else - mRendererV2->renderFeature( *fit, rendererContext, layer, drawMarker ); + try + { + if ( sel ) + selRenderer->renderFeature( *fit, rendererContext, -1, drawMarker ); + else + mRendererV2->renderFeature( *fit, rendererContext, layer, drawMarker ); + } + catch ( const QgsCsException &cse ) + { + QString msg( "Failed to transform a point while drawing a feature of type '" + + fet.typeName() + "'. Ignoring this feature." ); + msg += cse.what(); + QgsLogger::warning( msg ); + } } } }