@@ -117,6 +117,7 @@ QgsRasterLayer::QgsRasterLayer(
117
117
, mWidth( std::numeric_limits<int >::max() )
118
118
, mHeight( std::numeric_limits<int >::max() )
119
119
, mRenderer( 0 )
120
+ , mResampleFilter( 0 )
120
121
{
121
122
QgsDebugMsg ( " Entered" );
122
123
@@ -189,6 +190,7 @@ QgsRasterLayer::~QgsRasterLayer()
189
190
mValid = false ;
190
191
delete mDataProvider ;
191
192
delete mRenderer ;
193
+ delete mResampleFilter ;
192
194
}
193
195
194
196
// ////////////////////////////////////////////////////////
@@ -824,8 +826,16 @@ void QgsRasterLayer::draw( QPainter * theQPainter,
824
826
if ( mRenderer )
825
827
{
826
828
// mRenderer->draw( theQPainter, theRasterViewPort, theQgsMapToPixel );
827
- QgsRasterDrawer drawer ( mRenderer );
829
+ // if ( mResampleFilter )
830
+ // {
831
+ QgsRasterDrawer drawer ( mResampleFilter );
828
832
drawer.draw ( theQPainter, theRasterViewPort, theQgsMapToPixel );
833
+ // }
834
+ // else
835
+ // {
836
+ // QgsRasterDrawer drawer( mRenderer );
837
+ // drawer.draw( theQPainter, theRasterViewPort, theQgsMapToPixel );
838
+ // }
829
839
}
830
840
831
841
QgsDebugMsg ( QString ( " raster draw time (ms): %1" ).arg ( time .elapsed () ) );
@@ -2062,8 +2072,27 @@ void QgsRasterLayer::setTransparentBandName( QString const & )
2062
2072
2063
2073
void QgsRasterLayer::setRenderer ( QgsRasterRenderer* renderer )
2064
2074
{
2075
+ QgsDebugMsg ( " Entered" );
2065
2076
delete mRenderer ;
2066
2077
mRenderer = renderer;
2078
+
2079
+ if ( !mResampleFilter )
2080
+ {
2081
+ mResampleFilter = new QgsRasterResampleFilter ( mRenderer );
2082
+ }
2083
+ else
2084
+ {
2085
+ mResampleFilter ->setInput ( mRenderer );
2086
+ }
2087
+ }
2088
+
2089
+ // not sure if we want it
2090
+ void QgsRasterLayer::setResampleFilter ( QgsRasterResampleFilter* resampleFilter )
2091
+ {
2092
+ QgsDebugMsg ( " Entered" );
2093
+ delete mResampleFilter ;
2094
+ mResampleFilter = resampleFilter;
2095
+ mResampleFilter ->setInput ( mRenderer );
2067
2096
}
2068
2097
2069
2098
void QgsRasterLayer::showProgress ( int theValue )
@@ -2233,6 +2262,60 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
2233
2262
}
2234
2263
}
2235
2264
}
2265
+
2266
+ // resampler
2267
+ delete mResampleFilter ;
2268
+ mResampleFilter = new QgsRasterResampleFilter ( mRenderer );
2269
+
2270
+ // max oversampling
2271
+ QDomElement resampleElem = layer_node.firstChildElement ( " rasterresampler" );
2272
+ if ( !resampleElem.isNull () )
2273
+ {
2274
+ mResampleFilter ->readXML ( resampleElem );
2275
+ }
2276
+ /*
2277
+ if ( mResampleFilter )
2278
+ {
2279
+ QDomElement maxOversamplingElem = mnl.firstChildElement( "maxOversampling" );
2280
+ if ( !maxOversamplingElem.isNull() )
2281
+ {
2282
+ bool conversion;
2283
+ double maxOversampling = maxOversamplingElem.text().toDouble( &conversion );
2284
+ if ( conversion )
2285
+ {
2286
+ mResampleFilter->setMaxOversampling( maxOversampling );
2287
+ }
2288
+ }
2289
+ }
2290
+
2291
+ QDomElement zoomedInResamplerElem = mnl.firstChildElement( "zoomedInResampler" );
2292
+ if ( mResampleFilter && !zoomedInResamplerElem.isNull() )
2293
+ {
2294
+ QgsRasterResampler* zoomedInResampler = 0;
2295
+ QString zoomedInResamplerType = zoomedInResamplerElem.text();
2296
+ if ( zoomedInResamplerType == "bilinear" )
2297
+ {
2298
+ zoomedInResampler = new QgsBilinearRasterResampler();
2299
+ }
2300
+ else if ( zoomedInResamplerType == "cubic" )
2301
+ {
2302
+ zoomedInResampler = new QgsCubicRasterResampler();
2303
+ }
2304
+ mResampleFilter->setZoomedInResampler( zoomedInResampler );
2305
+ }
2306
+ QDomElement zoomedOutResamplerElem = mnl.firstChildElement( "zoomedOutResampler" );
2307
+ if ( mResampleFilter && !zoomedOutResamplerElem.isNull() )
2308
+ {
2309
+ QgsRasterResampler* zoomedOutResampler = 0;
2310
+ QString zoomedOutResamplerType = zoomedOutResamplerElem.text();
2311
+ if ( zoomedOutResamplerType == "bilinear" )
2312
+ {
2313
+ zoomedOutResampler = new QgsBilinearRasterResampler();
2314
+ }
2315
+ mResampleFilter->setZoomedOutResampler( zoomedOutResampler );
2316
+ }
2317
+ */
2318
+
2236
2319
return true ;
2237
2320
} // readSymbology
2238
2321
@@ -2365,11 +2448,18 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
2365
2448
{
2366
2449
Q_UNUSED ( errorMessage );
2367
2450
QDomElement layerElem = layer_node.toElement ();
2451
+
2368
2452
if ( mRenderer )
2369
2453
{
2370
2454
mRenderer ->writeXML ( document, layerElem );
2371
2455
}
2372
2456
2457
+ if ( mResampleFilter )
2458
+ {
2459
+ QDomElement layerElem = layer_node.toElement ();
2460
+ mResampleFilter ->writeXML ( document, layerElem );
2461
+ }
2462
+
2373
2463
return true ;
2374
2464
} // bool QgsRasterLayer::writeSymbology
2375
2465
0 commit comments