137 changes: 92 additions & 45 deletions src/core/raster/qgsrasterlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ email : tim at linfiniti.com
#include <cstdio>
#include <cmath>
#include <limits>
#include <typeinfo>

#include <QApplication>
#include <QCursor>
Expand Down Expand Up @@ -100,8 +101,9 @@ QgsRasterLayer::QgsRasterLayer()
, mDataProvider( 0 )
, mWidth( std::numeric_limits<int>::max() )
, mHeight( std::numeric_limits<int>::max() )
, mRenderer( 0 )
, mResampleFilter( 0 )
, mInvertColor( false )
//, mRenderer( 0 )
//, mResampleFilter( 0 )
{
init();
mValid = false;
Expand All @@ -119,8 +121,9 @@ QgsRasterLayer::QgsRasterLayer(
, mDataProvider( 0 )
, mWidth( std::numeric_limits<int>::max() )
, mHeight( std::numeric_limits<int>::max() )
, mRenderer( 0 )
, mResampleFilter( 0 )
, mInvertColor( false )
//, mRenderer( 0 )
//, mResampleFilter( 0 )
{
QgsDebugMsg( "Entered" );

Expand All @@ -134,8 +137,6 @@ QgsRasterLayer::QgsRasterLayer(
loadDefaultStyle( defaultLoadedFlag );
}
return;


} // QgsRasterLayer ctor

/**
Expand All @@ -157,8 +158,8 @@ QgsRasterLayer::QgsRasterLayer( const QString & uri,
, mHeight( std::numeric_limits<int>::max() )
, mModified( false )
, mProviderKey( providerKey )
, mRenderer( 0 )
, mResampleFilter( 0 )
//, mRenderer( 0 )
//, mResampleFilter( 0 )
{
QgsDebugMsg( "Entered" );
init();
Expand Down Expand Up @@ -192,9 +193,10 @@ QgsRasterLayer::QgsRasterLayer( const QString & uri,
QgsRasterLayer::~QgsRasterLayer()
{
mValid = false;
delete mDataProvider;
delete mRenderer;
delete mResampleFilter;
delete mRasterShader;
delete mDataProvider; // delete in pipe ?
//delete mRenderer;
//delete mResampleFilter;
}

//////////////////////////////////////////////////////////
Expand Down Expand Up @@ -827,28 +829,51 @@ void QgsRasterLayer::draw( QPainter * theQPainter,
// procedure to use :
//

if ( mRenderer )
double maxSrcXRes = 0;
double maxSrcYRes = 0;

if ( mDataProvider->capabilities() & QgsRasterDataProvider::ExactResolution )
{
//QgsRasterDrawer drawer( mRenderer );
//QgsRasterDrawer drawer( mResampleFilter );
maxSrcXRes = mDataProvider->extent().width() / mDataProvider->xSize();
maxSrcYRes = mDataProvider->extent().height() / mDataProvider->ySize();
}
/*
if ( mRenderer )
{
//QgsRasterDrawer drawer( mRenderer );
//QgsRasterDrawer drawer( mResampleFilter );
double maxSrcXRes = 0;
double maxSrcYRes = 0;
if ( mDataProvider->capabilities() & QgsRasterDataProvider::ExactResolution )
{
maxSrcXRes = mDataProvider->extent().width() / mDataProvider->xSize();
maxSrcYRes = mDataProvider->extent().height() / mDataProvider->ySize();
}
QgsRasterProjector projector( theRasterViewPort->mSrcCRS, theRasterViewPort->mDestCRS, maxSrcXRes, maxSrcYRes, mDataProvider->extent() );
projector.setInput( mResampleFilter );
QgsRasterProjector projector( theRasterViewPort->mSrcCRS, theRasterViewPort->mDestCRS, maxSrcXRes, maxSrcYRes, mDataProvider->extent() );
QgsRasterDrawer drawer( &projector );
drawer.draw( theQPainter, theRasterViewPort, theQgsMapToPixel );
}
*/

projector.setInput( mResampleFilter );
QgsRasterProjector *projector = dynamic_cast<QgsRasterProjector *>( mPipe.filter( QgsRasterInterface::ProjectorRole ) );
// TODO: add in init?
if ( !projector )
{
projector = new QgsRasterProjector;
mPipe.insertOrReplace( projector );
}

QgsRasterDrawer drawer( &projector );
drawer.draw( theQPainter, theRasterViewPort, theQgsMapToPixel );
// TODO add a method to interface to get provider and get provider
// params in QgsRasterProjector
if ( projector )
{
projector->setCRS( theRasterViewPort->mSrcCRS, theRasterViewPort->mDestCRS );
projector->setMaxSrcRes( maxSrcXRes, maxSrcYRes );
projector->setSrcExtent( mDataProvider->extent() );
}

// Drawer to pipe?
QgsRasterDrawer drawer( mPipe.last() );
drawer.draw( theQPainter, theRasterViewPort, theQgsMapToPixel );

QgsDebugMsg( QString( "raster draw time (ms): %1" ).arg( time.elapsed() ) );
} //end of draw method

Expand Down Expand Up @@ -993,9 +1018,14 @@ QString QgsRasterLayer::lastErrorTitle()
QList< QPair< QString, QColor > > QgsRasterLayer::legendSymbologyItems() const
{
QList< QPair< QString, QColor > > symbolList;
if ( mRenderer )
//if ( mRenderer )
//{
// mRenderer->legendSymbologyItems( symbolList );
//}
QgsRasterRenderer *renderer = dynamic_cast<QgsRasterRenderer *>( mPipe.filter( QgsRasterInterface::RendererRole ) );
if ( renderer )
{
mRenderer->legendSymbologyItems( symbolList );
renderer->legendSymbologyItems( symbolList );
}
return symbolList;

Expand Down Expand Up @@ -1641,6 +1671,7 @@ void QgsRasterLayer::setDataProvider( QString const & provider )
{
return;
}
mPipe.insertOrReplace( mDataProvider );

if ( provider == "gdal" )
{
Expand Down Expand Up @@ -1720,7 +1751,7 @@ void QgsRasterLayer::setDataProvider( QString const & provider )
{
mRasterType = Multiband;
}
else if ( mDataProvider->dataType( 1 ) == QgsRasterDataProvider::ARGB32
else if ( mDataProvider->dataType( 1 ) == QgsRasterDataProvider::ARGB32
|| mDataProvider->dataType( 1 ) == QgsRasterDataProvider::ARGB32_Premultiplied )
{
mRasterType = ColorLayer;
Expand Down Expand Up @@ -2082,30 +2113,33 @@ void QgsRasterLayer::setTransparentBandName( QString const & )
//legacy method
}

void QgsRasterLayer::setRenderer( QgsRasterRenderer* renderer )
void QgsRasterLayer::setRenderer( QgsRasterRenderer* theRenderer )
{
QgsDebugMsg( "Entered" );
delete mRenderer;
mRenderer = renderer;
//delete mRenderer;
//mRenderer = renderer;
mPipe.insertOrReplace( theRenderer );

/*
if ( !mResampleFilter )
{
mResampleFilter = new QgsRasterResampleFilter( mRenderer );
}
else
{
mResampleFilter->setInput( mRenderer );
//mResampleFilter = new QgsRasterResampleFilter( mRenderer );
}
*/
}

// not sure if we want it
void QgsRasterLayer::setResampleFilter( QgsRasterResampleFilter* resampleFilter )
{
QgsDebugMsg( "Entered" );
delete mResampleFilter;
mResampleFilter = resampleFilter;
mResampleFilter->setInput( mRenderer );
//delete mResampleFilter;
//mResampleFilter = resampleFilter;
//mResampleFilter->setInput( mRenderer );
mPipe.insertOrReplace( resampleFilter );
}

void QgsRasterLayer::showProgress( int theValue )
Expand Down Expand Up @@ -2263,28 +2297,34 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe

if ( !rasterRendererElem.isNull() )
{
delete mRenderer;
mRenderer = 0;
//delete mRenderer;
//mRenderer = 0;
if ( !rasterRendererElem.isNull() )
{
QString rendererType = rasterRendererElem.attribute( "type" );
QgsRasterRendererRegistryEntry rendererEntry;
if ( QgsRasterRendererRegistry::instance()->rendererData( rendererType, rendererEntry ) )
{
mRenderer = rendererEntry.rendererCreateFunction( rasterRendererElem, dataProvider() );
//mRenderer = rendererEntry.rendererCreateFunction( rasterRendererElem, dataProvider() );
QgsRasterRenderer *renderer = rendererEntry.rendererCreateFunction( rasterRendererElem, dataProvider() );
mPipe.insertOrReplace( renderer );
}
}
}

//resampler
delete mResampleFilter;
mResampleFilter = new QgsRasterResampleFilter( mRenderer );
//delete mResampleFilter;
//mResampleFilter = new QgsRasterResampleFilter( mRenderer );

QgsRasterResampleFilter * resampleFilter = new QgsRasterResampleFilter();
mPipe.insertOrReplace( resampleFilter );

//max oversampling
QDomElement resampleElem = layer_node.firstChildElement( "rasterresampler" );
if ( !resampleElem.isNull() )
{
mResampleFilter->readXML( resampleElem );
//mResampleFilter->readXML( resampleElem );
resampleFilter->readXML( resampleElem );
}
/*
if ( mResampleFilter )
Expand Down Expand Up @@ -2462,15 +2502,21 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
Q_UNUSED( errorMessage );
QDomElement layerElem = layer_node.toElement();

if ( mRenderer )
//if ( mRenderer )
//{
//mRenderer->writeXML( document, layerElem );
//}
QgsRasterRenderer *renderer = dynamic_cast<QgsRasterRenderer *>( mPipe.filter( QgsRasterInterface::RendererRole ) );
if ( renderer )
{
mRenderer->writeXML( document, layerElem );
renderer->writeXML( document, layerElem );
}

if ( mResampleFilter )
QgsRasterResampleFilter *resampleFilter = dynamic_cast<QgsRasterResampleFilter *>( mPipe.filter( QgsRasterInterface::ResamplerRole ) );
if ( resampleFilter )
{
QDomElement layerElem = layer_node.toElement();
mResampleFilter->writeXML( document, layerElem );
resampleFilter->writeXML( document, layerElem );
}

return true;
Expand Down Expand Up @@ -2755,3 +2801,4 @@ bool QgsRasterLayer::readColorTable( int theBandNumber, QList<QgsColorRampShader
*theList = myColorRampItemList;
return true;
}

20 changes: 13 additions & 7 deletions src/core/raster/qgsrasterlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
#include "qgsrasterdrawer.h"
#include "qgsrasterresamplefilter.h"
#include "qgsrasterdataprovider.h"
#include "qgsrasterpipe.h"

//
// Forward declarations
Expand Down Expand Up @@ -350,14 +351,18 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
void setUserDefinedRGBMinimumMaximum( bool theBool ) { mUserDefinedRGBMinimumMaximum = theBool; }

/**Set raster renderer. Takes ownership of the renderer object*/
void setRenderer( QgsRasterRenderer* renderer );
const QgsRasterRenderer* renderer() const { return mRenderer; }
QgsRasterRenderer* renderer() { return mRenderer; }
void setRenderer( QgsRasterRenderer* theRenderer );
//const QgsRasterRenderer* renderer() const { return mRenderer; }
//QgsRasterRenderer* renderer() { return mRenderer; }
const QgsRasterRenderer* renderer() const { return dynamic_cast<QgsRasterRenderer*>( mPipe.filter( QgsRasterInterface::RendererRole ) ); }
QgsRasterRenderer* renderer() { return dynamic_cast<QgsRasterRenderer*>( mPipe.filter( QgsRasterInterface::RendererRole ) ); }

/**Set raster resample filter. Takes ownership of the resample filter object*/
void setResampleFilter( QgsRasterResampleFilter* resampleFilter );
const QgsRasterResampleFilter* resampleFilter() const { return mResampleFilter; }
QgsRasterResampleFilter * resampleFilter() { return mResampleFilter; }
//const QgsRasterResampleFilter* resampleFilter() const { return mResampleFilter; }
//QgsRasterResampleFilter * resampleFilter() { return mResampleFilter; }
const QgsRasterResampleFilter* resampleFilter() const { return dynamic_cast<QgsRasterResampleFilter*>( mPipe.filter( QgsRasterInterface::ResamplerRole ) ); }
QgsRasterResampleFilter * resampleFilter() { return dynamic_cast<QgsRasterResampleFilter*>( mPipe.filter( QgsRasterInterface::ResamplerRole ) ); }

/** \brief Accessor to find out how many standard deviations are being plotted */
double standardDeviations() const { return mStandardDeviations; }
Expand Down Expand Up @@ -860,8 +865,9 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
/** \brief Flag indicating if the nodatavalue is valid*/
bool mValidNoDataValue;

QgsRasterRenderer* mRenderer;
QgsRasterResampleFilter *mResampleFilter;
//QgsRasterRenderer* mRenderer;
//QgsRasterResampleFilter *mResampleFilter;
QgsRasterPipe mPipe;
};

#endif
195 changes: 195 additions & 0 deletions src/core/raster/qgsrasterpipe.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
/***************************************************************************
qgsrasterpipe.cpp - Internal raster processing modules interface
--------------------------------------
Date : Jun 21, 2012
Copyright : (C) 2012 by Radim Blazek
email : radim dot blazek at gmail dot com
***************************************************************************/

/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/

#include <typeinfo>

#include "qgsrasterpipe.h"
#include "qgslogger.h"

#include <QByteArray>

QgsRasterPipe::QgsRasterPipe()
{
}

QgsRasterPipe::~QgsRasterPipe()
{
foreach ( QgsRasterInterface* filter, mFilters )
{
//delete filter; // TODO enable
}
}

bool QgsRasterPipe::connectFilters ( QVector<QgsRasterInterface*> theFilters )
{
QgsDebugMsg( "Entered" );
for ( int i = 1; i < theFilters.size(); i++ )
{
if ( ! theFilters[i]->setInput ( theFilters[i-1] ) )
{
QgsDebugMsg( QString ( "cannot connect %1 to %2" ).arg( typeid(*(theFilters[i])).name() ).arg ( typeid(*(theFilters[i-1])).name() ) );
return false;
}
}
return true;
}

/*
bool QgsRasterPipe::addFilter ( QgsRasterInterface * theFilter )
{
mFilters.append ( theFilter );
if ( mFilters.size() < 2 ) {
return true;
}
return theFilter->setInput ( mFilters[ mFilters.size()-2 ] );
}
*/
bool QgsRasterPipe::insert ( int idx, QgsRasterInterface* theFilter )
{
QgsDebugMsg( QString ( "insert %1 at %2" ).arg( typeid(*theFilter).name() ).arg ( idx ) );
if ( idx > mFilters.size() )
{
idx = mFilters.size();
}
// make a copy of pipe to test connection, we test the connections
// of the whole pipe, because the types and band numbers may change
QVector<QgsRasterInterface*> filters = mFilters;

filters.insert ( idx, theFilter );
bool success = false;
if ( connectFilters ( filters ) )
{
success = true;
mFilters.insert ( idx, theFilter );
QgsDebugMsg( "inserted ok" );
}

// Connect or reconnect (after the test) filters
connectFilters ( mFilters );
return success;
}

bool QgsRasterPipe::replace ( int idx, QgsRasterInterface* theFilter )
{
QgsDebugMsg( QString ( "replace by %1 at %2" ).arg( typeid(*theFilter).name() ).arg ( idx ) );
if ( idx < 0 || idx >= mFilters.size() )
{
return false;
}
if ( !theFilter ) return false;

// make a copy of pipe to test connection, we test the connections
// of the whole pipe, because the types and band numbers may change
QVector<QgsRasterInterface*> filters = mFilters;

filters[idx] = theFilter;
bool success = false;
if ( connectFilters ( filters ) )
{
success = true;
delete mFilters[idx];
mFilters[idx] = theFilter;
QgsDebugMsg( "replaced ok" );
}

// Connect or reconnect (after the test) filters
connectFilters ( mFilters );
return success;
}

bool QgsRasterPipe::insertOrReplace( QgsRasterInterface* theFilter )
{
QgsDebugMsg( QString ( "%1" ).arg( typeid(*theFilter).name() ) );
if ( !theFilter ) return false;
int idx = indexOf ( theFilter->role() );
if ( idx >= 0 )
{
return replace ( idx, theFilter ); // replace may still fail and return false
}

// Not found, find the best default position for this kind of filter
// The default order is:
// QgsRasterDataProvider - ProviderRole
// QgsRasterRenderer - RendererRole
// QgsRasterResampler - ResamplerRole
// QgsRasterProjector - ProjectorRole
int providerIdx = indexOf ( QgsRasterInterface::ProviderRole );
int rendererIdx = indexOf ( QgsRasterInterface::RendererRole );
int resamplerIdx = indexOf ( QgsRasterInterface::ResamplerRole );
if ( theFilter->role() == QgsRasterInterface::ProviderRole )
{
idx = 0;
}
else if ( theFilter->role() == QgsRasterInterface::RendererRole )
{
idx = providerIdx + 1;
}
else if ( theFilter->role() == QgsRasterInterface::ResamplerRole )
{
idx = qMax ( providerIdx, rendererIdx ) + 1;
}
else if ( theFilter->role() == QgsRasterInterface::ProjectorRole )
{
idx = qMax ( qMax( providerIdx,rendererIdx ), resamplerIdx ) + 1;
}
return insert ( idx, theFilter ); // insert may still fail and return false
}

int QgsRasterPipe::indexOf ( QgsRasterInterface::Role theRole ) const
{
QgsDebugMsg( QString ( "role = %1" ).arg( theRole ) );
//foreach ( QgsRasterInterface * filter, mFilters )

for ( int i = 0; i < mFilters.size(); i++ )
{
if ( !mFilters[i] ) continue;

if ( mFilters[i]->role() == theRole )
{
return i;
}
/*
if ( typeid ( *theFilter ) == typeid ( *(mFilters[i]) ) )
{
QgsDebugMsg( QString ( "%1 found at %2" ).arg( typeid(*(mFilters[i])).name() ).arg(i) );
return i;
}
// known ancestor
if ( ( dynamic_cast<QgsRasterRenderer*>( theFilter ) && dynamic_cast<QgsRasterRenderer*>( mFilters[i] ) )
|| ( dynamic_cast<QgsRasterDataProvider*>( theFilter ) && dynamic_cast<QgsRasterDataProvider*>( mFilters[i] ) ) )
{
QgsDebugMsg( QString ( "%1 found at %2" ).arg( typeid(*(mFilters[i])).name() ).arg(i) );
return i;
}
*/
}
QgsDebugMsg( "role not found");
return -1;
}
QgsRasterInterface * QgsRasterPipe::filter ( QgsRasterInterface::Role role ) const
{
QgsDebugMsg( QString ( "role = %1" ).arg ( role ) );
int idx = indexOf ( role );
if ( idx >= 0 )
{
return mFilters[idx];
}
return 0;
}

82 changes: 82 additions & 0 deletions src/core/raster/qgsrasterpipe.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/***************************************************************************
qgsrasterpipe.h - Internal raster processing modules interface
--------------------------------------
Date : Jun 21, 2012
Copyright : (C) 2012 by Radim Blazek
email : radim dot blazek at gmail dot com
***************************************************************************/

/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/

#ifndef QGSRASTERPIPE_H
#define QGSRASTERPIPE_H

#include <QObject>
#include <QImage>

#include "qgsrectangle.h"
#include "qgsrasterinterface.h"
#include "qgsrasterresamplefilter.h"
#include "qgsrasterdataprovider.h"
#include "qgsrasterrenderer.h"
#include "qgsrasterprojector.h"

/** \ingroup core
* Base class for processing modules.
*/
class CORE_EXPORT QgsRasterPipe //: public QObject
{
//Q_OBJECT

public:
QgsRasterPipe( );

virtual ~QgsRasterPipe();

/** \brief Try to connect filters in pipe and to the provider at beginning.
Returns true if connected or false if connection failed */
bool connectFilters ( QVector<QgsRasterInterface*> theFilters );


/** Add filter at the end of pipe and connect.
Returns true if connected or false if connection failed */
//bool addFilter ( QgsRasterInterface * theFilter );

/** Try to insert filter at specified index and connect
* if connection would fail, the filter is not inserted and false is returned */
bool insert ( int idx, QgsRasterInterface* theFilter );

/** Try to replace filter at specified index and connect
* if connection would fail, the filter is not inserted and false is returned */
bool replace ( int idx, QgsRasterInterface* theFilter );

/** Insert a new filter in prefered place or replace similar filter if it
* already exists */
bool insertOrReplace ( QgsRasterInterface * theFilter );

//QgsRasterInterface * filter ( QgsRasterInterface::Role role );
QgsRasterInterface * filter ( QgsRasterInterface::Role role ) const;

QgsRasterInterface * last() { return mFilters.last(); }

/** Delete all filters */
//void clear();

private:
/** \brief Find index of existing filter of the given role */
int indexOf ( QgsRasterInterface::Role role ) const;

// Filters in pipe, the first is always provider
QVector<QgsRasterInterface*> mFilters;
};

#endif


3 changes: 2 additions & 1 deletion src/core/raster/qgsrasterrenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
#include <QImage>
#include <QPainter>

QgsRasterRenderer::QgsRasterRenderer( QgsRasterInterface* input, const QString& type ): QgsRasterInterface( input ),
QgsRasterRenderer::QgsRasterRenderer( QgsRasterInterface* input, const QString& type )
: QgsRasterInterface( input, QgsRasterInterface::RendererRole ),
mType( type ), mZoomedInResampler( 0 ), mZoomedOutResampler( 0 ), mOpacity( 1.0 ), mRasterTransparency( 0 ),
mAlphaBand( -1 ), mInvertColor( false ), mMaxOversampling( 2.0 )
{
Expand Down
4 changes: 2 additions & 2 deletions src/core/raster/qgsrasterrenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class QDomElement;
class CORE_EXPORT QgsRasterRenderer : public QgsRasterInterface
{
public:
QgsRasterRenderer( QgsRasterInterface* input, const QString& type );
QgsRasterRenderer( QgsRasterInterface* input = 0, const QString& type = "" );
virtual ~QgsRasterRenderer();

virtual QString type() const { return mType; }
Expand Down Expand Up @@ -63,7 +63,7 @@ class CORE_EXPORT QgsRasterRenderer : public QgsRasterInterface
/**Get symbology items if provided by renderer*/
virtual void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const { Q_UNUSED( symbolItems ); }

virtual void writeXML( QDomDocument& doc, QDomElement& parentElem ) const = 0;
virtual void writeXML( QDomDocument& doc, QDomElement& parentElem ) const {}

/**Sets base class members from xml. Usually called from create() methods of subclasses*/
void readXML( const QDomElement& rendererElem );
Expand Down
13 changes: 7 additions & 6 deletions src/core/raster/qgsrasterresamplefilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
#include <QImage>
#include <QPainter>

QgsRasterResampleFilter::QgsRasterResampleFilter( QgsRasterInterface* input ): QgsRasterInterface( input ),
QgsRasterResampleFilter::QgsRasterResampleFilter( QgsRasterInterface* input )
: QgsRasterInterface( input, QgsRasterInterface::ResamplerRole ),
mZoomedInResampler( 0 ), mZoomedOutResampler( 0 ),
mMaxOversampling( 2.0 )
{
Expand Down Expand Up @@ -68,7 +69,7 @@ void * QgsRasterResampleFilter::readBlock( int bandNo, QgsRectangle const & ext
{
// TODO: we must get it somehow from pipe (via projector), for now
oversampling = 2.;
/*
/*
QgsRectangle providerExtent = mInput->extent();
if ( viewPort->mSrcCRS.isValid() && viewPort->mDestCRS.isValid() && viewPort->mSrcCRS != viewPort->mDestCRS )
{
Expand All @@ -95,10 +96,10 @@ void * QgsRasterResampleFilter::readBlock( int bandNo, QgsRectangle const & ext
// TODO: we must also increase the extent to get correct result on borders of parts


int resWidth = width*oversamplingX;
int resHeight = height*oversamplingY;
int resWidth = width * oversamplingX;
int resHeight = height * oversamplingY;

// At moment we know that we read rendered image
// At moment we know that we read rendered image
int bandNumber = 0;
void *rasterData = mInput->readBlock( bandNumber, extent, resWidth, resHeight );

Expand Down Expand Up @@ -130,7 +131,7 @@ void * QgsRasterResampleFilter::readBlock( int bandNo, QgsRectangle const & ext
return rasterData; // No resampling
}

void QgsRasterResampleFilter::writeXML( QDomDocument& doc, QDomElement& parentElem )
void QgsRasterResampleFilter::writeXML( QDomDocument& doc, QDomElement& parentElem )
{
if ( parentElem.isNull() )
{
Expand Down