[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