Added progress reporting

This commit is contained in:
Martin Dobias 2015-06-17 14:52:40 +08:00
parent d6d2f1a374
commit 515de2879b
3 changed files with 53 additions and 7 deletions

View File

@ -73,6 +73,22 @@ class QgsAlignRaster
}; };
typedef QList<QgsAlignRaster::Item> List; typedef QList<QgsAlignRaster::Item> List;
//! Helper struct to be sub-classed for progress reporting
struct ProgressHandler
{
//! Method to be overridden for progress reporting.
//! @param complete Overall progress of the alignment operation
//! @return false if the execution should be cancelled, true otherwise
virtual bool progress( double complete ) = 0;
virtual ~ProgressHandler();
};
//! Assign a progress handler instance. Does not take ownership. NULL can be passed.
void setProgressHandler( ProgressHandler* progressHandler );
//! Get associated progress handler. May be NULL (default)
ProgressHandler* progressHandler() const;
//! Set list of rasters that will be aligned //! Set list of rasters that will be aligned
void setRasters( const List& list ); void setRasters( const List& list );
//! Get list of rasters that will be aligned //! Get list of rasters that will be aligned
@ -88,6 +104,11 @@ class QgsAlignRaster
//! Get output cell size //! Get output cell size
QSizeF cellSize() const; QSizeF cellSize() const;
//! Set the output CRS in WKT format
void setDestinationCRS( const QString& crsWkt );
//! Get the output CRS in WKT format
QString destinationCRS() const;
// TODO: first need to run determineTransformAndSize() before this // TODO: first need to run determineTransformAndSize() before this
//QSize rasterSize() const { return QSize(mXSize, mYSize); } //QSize rasterSize() const { return QSize(mXSize, mYSize); }
// TODO: add method for access to final extent // TODO: add method for access to final extent

View File

@ -56,13 +56,13 @@ static QgsRectangle transform_to_extent( const double* geotransform, double xSiz
static int CPL_STDCALL _progress( double dfComplete, const char* pszMessage, void* pProgressArg ) static int CPL_STDCALL _progress( double dfComplete, const char* pszMessage, void* pProgressArg )
{ {
QgsAlignRaster* align = ( QgsAlignRaster* ) pProgressArg;
Q_UNUSED( align );
Q_UNUSED( pszMessage ); Q_UNUSED( pszMessage );
// TODO: report the progress somehow QgsAlignRaster::ProgressHandler* handler = (( QgsAlignRaster* ) pProgressArg )->progressHandler();
qDebug( "progress %f", dfComplete * 100 ); if ( handler )
return 1; // 1 = all is well, 0 = user terminated return handler->progress( dfComplete );
else
return true;
} }
@ -110,6 +110,7 @@ static CPLErr rescalePostWarpChunkProcessor( void* pKern, void* pArg )
QgsAlignRaster::QgsAlignRaster() QgsAlignRaster::QgsAlignRaster()
: mProgressHandler( 0 )
{ {
mCellSizeX = mCellSizeY = 0; mCellSizeX = mCellSizeY = 0;
mGridOffsetX = mGridOffsetY = 0; mGridOffsetX = mGridOffsetY = 0;
@ -126,7 +127,7 @@ void QgsAlignRaster::setClipExtent( double xmin, double ymin, double xmax, doubl
mClipExtent[3] = ymax; mClipExtent[3] = ymax;
} }
void QgsAlignRaster::setClipExtent(const QgsRectangle& extent) void QgsAlignRaster::setClipExtent( const QgsRectangle& extent )
{ {
setClipExtent( extent.xMinimum(), extent.yMinimum(), setClipExtent( extent.xMinimum(), extent.yMinimum(),
extent.xMaximum(), extent.yMaximum() ); extent.xMaximum(), extent.yMaximum() );
@ -332,7 +333,7 @@ bool QgsAlignRaster::createAndWarp( const Item& raster )
psWarpOptions->eResampleAlg = ( GDALResampleAlg ) raster.resampleMethod; psWarpOptions->eResampleAlg = ( GDALResampleAlg ) raster.resampleMethod;
// our progress function // our progress function
psWarpOptions->pfnProgress = _progress; //GDALTermProgress; psWarpOptions->pfnProgress = _progress;
psWarpOptions->pProgressArg = this; psWarpOptions->pProgressArg = this;
// Establish reprojection transformer. // Establish reprojection transformer.

View File

@ -119,6 +119,22 @@ class ANALYSIS_EXPORT QgsAlignRaster
}; };
typedef QList<Item> List; typedef QList<Item> List;
//! Helper struct to be sub-classed for progress reporting
struct ProgressHandler
{
//! Method to be overridden for progress reporting.
//! @param complete Overall progress of the alignment operation
//! @return false if the execution should be cancelled, true otherwise
virtual bool progress( double complete ) = 0;
virtual ~ProgressHandler() {}
};
//! Assign a progress handler instance. Does not take ownership. NULL can be passed.
void setProgressHandler( ProgressHandler* progressHandler ) { mProgressHandler = progressHandler; }
//! Get associated progress handler. May be NULL (default)
ProgressHandler* progressHandler() const { return mProgressHandler; }
//! Set list of rasters that will be aligned //! Set list of rasters that will be aligned
void setRasters( const List& list ) { mRasters = list; } void setRasters( const List& list ) { mRasters = list; }
//! Get list of rasters that will be aligned //! Get list of rasters that will be aligned
@ -134,6 +150,11 @@ class ANALYSIS_EXPORT QgsAlignRaster
//! Get output cell size //! Get output cell size
QSizeF cellSize() const { return QSizeF( mCellSizeX, mCellSizeY ); } QSizeF cellSize() const { return QSizeF( mCellSizeX, mCellSizeY ); }
//! Set the output CRS in WKT format
void setDestinationCRS( const QString& crsWkt ) { mCrsWkt = crsWkt.toAscii(); }
//! Get the output CRS in WKT format
QString destinationCRS() const { return mCrsWkt; }
// TODO: first need to run determineTransformAndSize() before this // TODO: first need to run determineTransformAndSize() before this
//QSize rasterSize() const { return QSize(mXSize, mYSize); } //QSize rasterSize() const { return QSize(mXSize, mYSize); }
// TODO: add method for access to final extent // TODO: add method for access to final extent
@ -172,6 +193,9 @@ class ANALYSIS_EXPORT QgsAlignRaster
// set by the client // set by the client
//! Object that facilitates reporting of progress / cancellation
ProgressHandler* mProgressHandler;
//! List of rasters to be aligned (with their output files and other options) //! List of rasters to be aligned (with their output files and other options)
List mRasters; List mRasters;