1717#include < cfloat>
1818
1919#include " qgscoordinatetransform.h"
20+ #include " qgscrscache.h"
2021#include " qgslogger.h"
2122#include " qgsmessagelog.h"
2223#include " qgsmaprenderer.h"
@@ -46,8 +47,6 @@ QgsMapRenderer::QgsMapRenderer()
4647 mScale = 1.0 ;
4748 mScaleCalculator = new QgsScaleCalculator;
4849 mDistArea = new QgsDistanceArea;
49- mCachedTrForLayer = 0 ;
50- mCachedTr = 0 ;
5150
5251 mDrawing = false ;
5352 mOverview = false ;
@@ -71,7 +70,6 @@ QgsMapRenderer::~QgsMapRenderer()
7170 delete mDistArea ;
7271 delete mDestCRS ;
7372 delete mLabelingEngine ;
74- delete mCachedTr ;
7573}
7674
7775QgsRectangle QgsMapRenderer::extent () const
@@ -266,7 +264,7 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale )
266264
267265 mDrawing = true ;
268266
269- QgsCoordinateTransform* ct;
267+ const QgsCoordinateTransform* ct;
270268
271269#ifdef QGISDEBUG
272270 QgsDebugMsg ( " Starting to render layer stack." );
@@ -402,7 +400,7 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale )
402400 {
403401 r1 = mExtent ;
404402 split = splitLayersExtent ( ml, r1, r2 );
405- ct = new QgsCoordinateTransform ( ml->crs (), * mDestCRS );
403+ ct = QgsCoordinateTransformCache::instance ()-> transform ( ml->crs (). authid (), mDestCRS -> authid () );
406404 mRenderContext .setExtent ( r1 );
407405 QgsDebugMsg ( " extent 1: " + r1.toString () );
408406 QgsDebugMsg ( " extent 2: " + r2.toString () );
@@ -692,7 +690,6 @@ void QgsMapRenderer::setDestinationCrs( const QgsCoordinateReferenceSystem& crs
692690 rect = transform.transformBoundingBox ( mExtent );
693691 }
694692
695- invalidateCachedLayerCrs ();
696693 QgsDebugMsg ( " Setting DistArea CRS to " + QString::number ( crs.srsid () ) );
697694 mDistArea ->setSourceCrs ( crs.srsid () );
698695 *mDestCRS = crs;
@@ -734,7 +731,7 @@ bool QgsMapRenderer::splitLayersExtent( QgsMapLayer* layer, QgsRectangle& extent
734731 // extent separately.
735732 static const double splitCoord = 180.0 ;
736733
737- if ( mCachedTr -> sourceCrs ().geographicFlag () )
734+ if ( layer-> crs ().geographicFlag () )
738735 {
739736 // Note: ll = lower left point
740737 // and ur = upper right point
@@ -1138,35 +1135,13 @@ void QgsMapRenderer::setLabelingEngine( QgsLabelingEngineInterface* iface )
11381135 mLabelingEngine = iface;
11391136}
11401137
1141- QgsCoordinateTransform * QgsMapRenderer::tr ( QgsMapLayer *layer )
1138+ const QgsCoordinateTransform* QgsMapRenderer::tr ( QgsMapLayer *layer )
11421139{
1143- if ( mCachedTrForLayer != layer )
1140+ if ( ! layer || ! mDestCRS )
11441141 {
1145- invalidateCachedLayerCrs ();
1146-
1147- delete mCachedTr ;
1148- mCachedTr = new QgsCoordinateTransform ( layer->crs (), *mDestCRS );
1149- mCachedTrForLayer = layer;
1150-
1151- connect ( layer, SIGNAL ( layerCrsChanged () ), this , SLOT ( invalidateCachedLayerCrs () ) );
1152- connect ( layer, SIGNAL ( destroyed () ), this , SLOT ( cachedLayerDestroyed () ) );
1142+ return 0 ;
11531143 }
1154-
1155- return mCachedTr ;
1156- }
1157-
1158- void QgsMapRenderer::cachedLayerDestroyed ()
1159- {
1160- if ( mCachedTrForLayer == sender () )
1161- mCachedTrForLayer = 0 ;
1162- }
1163-
1164- void QgsMapRenderer::invalidateCachedLayerCrs ()
1165- {
1166- if ( mCachedTrForLayer )
1167- disconnect ( mCachedTrForLayer , SIGNAL ( layerCrsChanged () ), this , SLOT ( invalidateCachedLayerCrs () ) );
1168-
1169- mCachedTrForLayer = 0 ;
1144+ return QgsCoordinateTransformCache::instance ()->transform ( layer->crs ().authid (), mDestCRS ->authid () );
11701145}
11711146
11721147bool QgsMapRenderer::mDrawing = false ;
0 commit comments