[QGIS Commit] r9681 - in branches/vector_overlay_branch/src: core plugins/diagram_overlay

svn_qgis at osgeo.org svn_qgis at osgeo.org
Fri Nov 21 12:34:48 EST 2008


Author: mhugent
Date: 2008-11-21 12:34:48 -0500 (Fri, 21 Nov 2008)
New Revision: 9681

Modified:
   branches/vector_overlay_branch/src/core/qgsmaprenderer.cpp
   branches/vector_overlay_branch/src/core/qgsoverlayobject.cpp
   branches/vector_overlay_branch/src/core/qgsoverlayobject.h
   branches/vector_overlay_branch/src/core/qgspalobjectpositionmanager.cpp
   branches/vector_overlay_branch/src/plugins/diagram_overlay/qgsdiagramoverlay.cpp
Log:
remove the layers properly

Modified: branches/vector_overlay_branch/src/core/qgsmaprenderer.cpp
===================================================================
--- branches/vector_overlay_branch/src/core/qgsmaprenderer.cpp	2008-11-21 14:35:26 UTC (rev 9680)
+++ branches/vector_overlay_branch/src/core/qgsmaprenderer.cpp	2008-11-21 17:34:48 UTC (rev 9681)
@@ -25,9 +25,9 @@
 #include "qgsmaplayer.h"
 #include "qgsmaplayerregistry.h"
 #include "qgsdistancearea.h"
-#include "qgscentralpointpositionmanager.h"
+//#include "qgscentralpointpositionmanager.h"
 #include "qgsoverlayobjectpositionmanager.h"
-//#include "qgspalobjectpositionmanager.h"
+#include "qgspalobjectpositionmanager.h"
 #include "qgsvectorlayer.h"
 #include "qgsvectoroverlay.h"
 
@@ -58,8 +58,8 @@
 
   mOutputUnits = QgsMapRenderer::Millimeters;
 
-  //mOverlayPos = new QgsPALObjectPositionManager();
-  mOverlayPos = new QgsCentralPointPositionManager();
+  mOverlayPos = new QgsPALObjectPositionManager();
+  //mOverlayPos = new QgsCentralPointPositionManager();
 }
 
 QgsMapRenderer::~QgsMapRenderer()
@@ -475,6 +475,7 @@
     {
       (*allOverlayIt)->drawOverlayObjects(mRenderContext);
     }
+    mOverlayPos->removeLayers();
   }
 
   // make sure progress bar arrives at 100%!

Modified: branches/vector_overlay_branch/src/core/qgsoverlayobject.cpp
===================================================================
--- branches/vector_overlay_branch/src/core/qgsoverlayobject.cpp	2008-11-21 14:35:26 UTC (rev 9680)
+++ branches/vector_overlay_branch/src/core/qgsoverlayobject.cpp	2008-11-21 17:34:48 UTC (rev 9681)
@@ -62,3 +62,15 @@
     delete mGeometry;
     mGeometry = g;
 }
+
+QgsPoint QgsOverlayObject::position() const
+{
+    if(mPositions.size() > 0)
+    {
+        return mPositions.at(0);
+    }
+    else
+    {
+        return QgsPoint(0.0, 0.0);
+    }
+}

Modified: branches/vector_overlay_branch/src/core/qgsoverlayobject.h
===================================================================
--- branches/vector_overlay_branch/src/core/qgsoverlayobject.h	2008-11-21 14:35:26 UTC (rev 9680)
+++ branches/vector_overlay_branch/src/core/qgsoverlayobject.h	2008-11-21 17:34:48 UTC (rev 9681)
@@ -50,7 +50,7 @@
     double rotation() const {return mRotation;}
     QgsGeometry* geometry() {return mGeometry;}
     const QgsGeometry* geometry() const {return mGeometry;}
-    QgsPoint position() const {return mPositions.at(0);}
+    QgsPoint position() const;
     QList<QgsPoint> positions() const {return mPositions;}
 
     //setters

Modified: branches/vector_overlay_branch/src/core/qgspalobjectpositionmanager.cpp
===================================================================
--- branches/vector_overlay_branch/src/core/qgspalobjectpositionmanager.cpp	2008-11-21 14:35:26 UTC (rev 9680)
+++ branches/vector_overlay_branch/src/core/qgspalobjectpositionmanager.cpp	2008-11-21 17:34:48 UTC (rev 9681)
@@ -58,7 +58,6 @@
       return; //error
     }
 
-
   pal::Layer* positionLayer = mPositionEngine.addLayer(QString::number(mNumberOfLayers).toLocal8Bit().data(), 0, 1000000, labelArrangement, pal::PIXEL, 0, false, true, true);
   ++mNumberOfLayers;
 
@@ -139,9 +138,18 @@
       return;
     }
 
+  //Iterators get invalid if elements are deleted in a std::list
+  //Therefore we have to get the layer pointers in a first step and remove them in a second
+  QList<pal::Layer*> layersToRemove;
   std::list<pal::Layer*>::iterator layerIt = layerList->begin();
   for(; layerIt != layerList->end(); ++layerIt)
     {
-      mPositionEngine.removeLayer(*layerIt);
+        layersToRemove.push_back(*layerIt);
     }
+
+  QList<pal::Layer*>::iterator removeIt = layersToRemove.begin();
+  for(; removeIt != layersToRemove.end(); ++removeIt)
+  {
+      mPositionEngine.removeLayer(*removeIt);
+  }
 }

Modified: branches/vector_overlay_branch/src/plugins/diagram_overlay/qgsdiagramoverlay.cpp
===================================================================
--- branches/vector_overlay_branch/src/plugins/diagram_overlay/qgsdiagramoverlay.cpp	2008-11-21 14:35:26 UTC (rev 9680)
+++ branches/vector_overlay_branch/src/plugins/diagram_overlay/qgsdiagramoverlay.cpp	2008-11-21 17:34:48 UTC (rev 9681)
@@ -119,23 +119,26 @@
 		  qWarning("diagram image is 0");
 		  continue;
 		}
-	      //search for overlay object in the multimap, multifeatures still unsolved
+              //search for overlay object in the map
           QMap<int, QgsOverlayObject*>::const_iterator it = mOverlayObjects.find(currentFeature.id());
           if(it != mOverlayObjects.constEnd())
           {
-            QgsPoint overlayPosition = it.value()->position();
-            const QgsCoordinateTransform* ct = context.coordinateTransform();
-            if(ct)
-            {
-              overlayPosition = ct->transform(overlayPosition);
+            if(it.value())
+              {
+                QgsPoint overlayPosition = it.value()->position();
+                const QgsCoordinateTransform* ct = context.coordinateTransform();
+                if(ct)
+                {
+                overlayPosition = ct->transform(overlayPosition);
+                }
+                context.mapToPixel().transform(&overlayPosition);
+                int shiftX = currentDiagramImage->width()/2;
+                int shiftY = currentDiagramImage->height()/2;
+                if(context.painter())
+                {
+                context.painter()->drawImage((int)overlayPosition.x()-shiftX, (int)overlayPosition.y()-shiftY, *currentDiagramImage);
+                }
             }
-            context.mapToPixel().transform(&overlayPosition);
-            int shiftX = currentDiagramImage->width()/2;
-            int shiftY = currentDiagramImage->height()/2;
-            if(context.painter())
-            {
-              context.painter()->drawImage((int)overlayPosition.x()-shiftX, (int)overlayPosition.y()-shiftY, *currentDiagramImage);
-            }
           }
 
           delete currentDiagramImage;



More information about the QGIS-commit mailing list