[QGIS Commit] r12615 - trunk/qgis/src/core

svn_qgis at osgeo.org svn_qgis at osgeo.org
Thu Dec 24 10:59:55 EST 2009


Author: jef
Date: 2009-12-24 10:59:54 -0500 (Thu, 24 Dec 2009)
New Revision: 12615

Modified:
   trunk/qgis/src/core/qgsvectorlayer.cpp
Log:
catch projection exceptions while V2 rendering

Modified: trunk/qgis/src/core/qgsvectorlayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.cpp	2009-12-24 13:30:18 UTC (rev 12614)
+++ trunk/qgis/src/core/qgsvectorlayer.cpp	2009-12-24 15:59:54 UTC (rev 12615)
@@ -39,6 +39,7 @@
 #include <QPolygonF>
 #include <QSettings>
 #include <QString>
+#include <QDomNode>
 
 #include "qgsvectorlayer.h"
 
@@ -703,23 +704,33 @@
   QgsFeature fet;
   while ( nextFeature( fet ) )
   {
-    bool sel = mSelectedFeatureIds.contains( fet.id() );
-    bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) );
+    try
+    {
+      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 );
+      // 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 );
+      // labeling - register feature
+      if ( labeling && mRendererV2->symbolForFeature( fet ) != NULL )
+        rendererContext.labelingEngine()->registerFeature( this, fet );
 
-    if ( mEditable )
+      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 )
     {
-      // Cache this for the use of (e.g.) modifying the feature's uncommitted geometry.
-      mCachedGeometries[fet.id()] = *fet.geometry();
+      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 @@
         // 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 );
+        }
       }
     }
   }



More information about the QGIS-commit mailing list