QGIS API Documentation  2.5.0-Master
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Classes | Public Types | Signals | Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
QgsMapRendererJob Class Referenceabstract

Abstract base class for map rendering implementations. More...

#include <qgsmaprendererjob.h>

Inheritance diagram for QgsMapRendererJob:
Inheritance graph
[legend]
Collaboration diagram for QgsMapRendererJob:
Collaboration graph
[legend]

Classes

struct  Error
 

Public Types

typedef QList< ErrorErrors
 

Signals

void finished ()
 emitted when asynchronous rendering is finished (or canceled). More...
 

Public Member Functions

 QgsMapRendererJob (const QgsMapSettings &settings)
 
virtual ~QgsMapRendererJob ()
 
virtual void start ()=0
 Start the rendering job and immediately return. More...
 
virtual void cancel ()=0
 Stop the rendering job - does not return until the job has terminated. More...
 
virtual void waitForFinished ()=0
 Block until the job has finished. More...
 
virtual bool isActive () const =0
 Tell whether the rendering job is currently running in background. More...
 
virtual QgsLabelingResultstakeLabelingResults ()=0
 Get pointer to internal labeling engine (in order to get access to the results) More...
 
Errors errors () const
 List of errors that happened during the rendering job - available when the rendering has been finished. More...
 
void setCache (QgsMapRendererCache *cache)
 Assign a cache to be used for reading and storing rendered images of individual layers. More...
 
void setRequestedGeometryCacheForLayers (const QStringList &layerIds)
 Set which vector layers should be cached while rendering. More...
 
int renderingTime () const
 Find out how log it took to finish the job (in miliseconds) More...
 

Protected Member Functions

LayerRenderJobs prepareJobs (QPainter *painter, QgsPalLabeling *labelingEngine)
 
void cleanupJobs (LayerRenderJobs &jobs)
 
bool needTemporaryImage (QgsMapLayer *ml)
 
void updateLayerGeometryCaches ()
 called when rendering has finished to update all layers' geometry caches More...
 

Static Protected Member Functions

static bool reprojectToLayerExtent (const QgsCoordinateTransform *ct, bool layerCrsGeographic, QgsRectangle &extent, QgsRectangle &r2)
 Convenience function to project an extent into the layer source CRS, but also split it into two extents if it crosses the +/- 180 degree line. More...
 
static QImage composeImage (const QgsMapSettings &settings, const LayerRenderJobs &jobs)
 
static void drawLabeling (const QgsMapSettings &settings, QgsRenderContext &renderContext, QgsPalLabeling *labelingEngine, QPainter *painter)
 
static void drawOldLabeling (const QgsMapSettings &settings, QgsRenderContext &renderContext)
 
static void drawNewLabeling (const QgsMapSettings &settings, QgsRenderContext &renderContext, QgsPalLabeling *labelingEngine)
 

Protected Attributes

QgsMapSettings mSettings
 
Errors mErrors
 
QgsMapRendererCachemCache
 
QStringList mRequestedGeomCacheForLayers
 list of layer IDs for which the geometry cache should be updated More...
 
QMap< QString, QgsGeometryCachemGeometryCaches
 map of geometry caches More...
 
QTime mRenderingStart
 
int mRenderingTime
 

Detailed Description

Abstract base class for map rendering implementations.

The API is designed in a way that rendering is done asynchronously, therefore the caller is not blocked while the rendering is in progress. Non-blocking operation is quite important because the rendering can take considerable amount of time.

Common use case: 0. prepare QgsMapSettings with rendering configuration (extent, layer, map size, ...)

  1. create QgsMapRendererJob subclass with QgsMapSettings instance
  2. connect to job's finished() signal
  3. call start(). Map rendering will start in background, the function immediately returns
  4. at some point, slot connected to finished() signal is called, map rendering is done

It is possible to cancel the rendering job while it is active by calling cancel() function.

The following subclasses are available:

Note
added in 2.4

Definition at line 78 of file qgsmaprendererjob.h.

Member Typedef Documentation

Definition at line 112 of file qgsmaprendererjob.h.

Constructor & Destructor Documentation

QgsMapRendererJob::QgsMapRendererJob ( const QgsMapSettings settings)

Definition at line 35 of file qgsmaprendererjob.cpp.

virtual QgsMapRendererJob::~QgsMapRendererJob ( )
inlinevirtual

Definition at line 85 of file qgsmaprendererjob.h.

Member Function Documentation

virtual void QgsMapRendererJob::cancel ( )
pure virtual

Stop the rendering job - does not return until the job has terminated.

Does nothing if the rendering is not active.

Implemented in QgsMapRendererCustomPainterJob, QgsMapRendererSequentialJob, and QgsMapRendererParallelJob.

Referenced by QgsMapOverviewCanvas::refresh(), QgsMapCanvas::stopRendering(), and QgsMapCanvas::~QgsMapCanvas().

void QgsMapRendererJob::cleanupJobs ( LayerRenderJobs jobs)
protected
QImage QgsMapRendererJob::composeImage ( const QgsMapSettings settings,
const LayerRenderJobs jobs 
)
staticprotected
void QgsMapRendererJob::drawLabeling ( const QgsMapSettings settings,
QgsRenderContext renderContext,
QgsPalLabeling labelingEngine,
QPainter *  painter 
)
staticprotected
void QgsMapRendererJob::drawNewLabeling ( const QgsMapSettings settings,
QgsRenderContext renderContext,
QgsPalLabeling labelingEngine 
)
staticprotected
void QgsMapRendererJob::drawOldLabeling ( const QgsMapSettings settings,
QgsRenderContext renderContext 
)
staticprotected
QgsMapRendererJob::Errors QgsMapRendererJob::errors ( ) const

List of errors that happened during the rendering job - available when the rendering has been finished.

Definition at line 49 of file qgsmaprendererjob.cpp.

References mErrors.

Referenced by QgsMapRendererSequentialJob::internalFinished(), and QgsMapCanvas::rendererJobFinished().

void QgsMapRendererJob::finished ( )
signal
virtual bool QgsMapRendererJob::isActive ( ) const
pure virtual

Tell whether the rendering job is currently running in background.

Implemented in QgsMapRendererCustomPainterJob, QgsMapRendererSequentialJob, and QgsMapRendererParallelJob.

bool QgsMapRendererJob::needTemporaryImage ( QgsMapLayer ml)
protected
LayerRenderJobs QgsMapRendererJob::prepareJobs ( QPainter *  painter,
QgsPalLabeling labelingEngine 
)
protected
Note
not available in python bindings

Definition at line 132 of file qgsmaprendererjob.cpp.

References QgsMapSettings::Antialiasing, LayerRenderJob::blendMode, QgsMapLayer::blendMode(), LayerRenderJob::cached, QgsMapRendererCache::cacheImage(), QgsMapRendererCache::clearCacheImage(), LayerRenderJob::context, QgsMapLayer::createMapRenderer(), QgsMapLayer::crs(), QgsMapLayer::extent(), QgsRenderContext::fromMapSettings(), QgsCoordinateReferenceSystem::geographicFlag(), QgsMapSettings::hasCrsTransformEnabled(), QgsMapLayer::hasScaleBasedVisibility(), QgsMapLayer::id(), LayerRenderJob::img, QgsMapRendererCache::init(), QgsMapLayerRegistry::instance(), QgsVectorLayer::isEditable(), QgsRectangle::isFinite(), isNull(), LayerRenderJob::layerId, QgsMapSettings::layers(), QgsMapSettings::layerTransfrom(), QgsMapLayerRegistry::mapLayer(), QgsMapLayer::maximumScale(), mCache, mErrors, mGeometryCaches, QgsMapLayer::minimumScale(), mRequestedGeomCacheForLayers, mSettings, QgsMapLayer::name(), needTemporaryImage(), QgsMapSettings::outputImageFormat(), QgsMapSettings::outputSize(), QgsDebugMsg, LayerRenderJob::renderer, reprojectToLayerExtent(), QgsMapSettings::scale(), QgsRenderContext::setCoordinateTransform(), QgsRenderContext::setExtent(), QgsRenderContext::setLabelingEngine(), QgsRenderContext::setPainter(), QgsMapSettings::testFlag(), QgsRectangle::toString(), tr, QgsMapLayer::type(), QgsMapLayer::VectorLayer, QgsMapSettings::visibleExtent(), and QgsPalLabeling::willUseLayer().

Referenced by QgsMapRendererParallelJob::start(), and QgsMapRendererCustomPainterJob::start().

int QgsMapRendererJob::renderingTime ( ) const
inline

Find out how log it took to finish the job (in miliseconds)

Definition at line 127 of file qgsmaprendererjob.h.

Referenced by QgsMapCanvas::rendererJobFinished().

bool QgsMapRendererJob::reprojectToLayerExtent ( const QgsCoordinateTransform ct,
bool  layerCrsGeographic,
QgsRectangle extent,
QgsRectangle r2 
)
staticprotected

Convenience function to project an extent into the layer source CRS, but also split it into two extents if it crosses the +/- 180 degree line.

Modifies the given extent to be in the source CRS coordinates, and if it was split, returns true, and also sets the contents of the r2 parameter

Definition at line 60 of file qgsmaprendererjob.cpp.

References QgsCoordinateTransform::destCRS(), QgsCoordinateReferenceSystem::geographicFlag(), QgsDebugMsg, QgsCoordinateTransform::ReverseTransform, QgsRectangle::setXMaximum(), QgsRectangle::setXMinimum(), QgsCoordinateTransform::transform(), QgsCoordinateTransform::transformBoundingBox(), QgsPoint::x(), QgsRectangle::xMaximum(), QgsRectangle::xMinimum(), QgsRectangle::yMaximum(), and QgsRectangle::yMinimum().

Referenced by drawOldLabeling(), and prepareJobs().

void QgsMapRendererJob::setCache ( QgsMapRendererCache cache)

Assign a cache to be used for reading and storing rendered images of individual layers.

Does not take ownership of the object.

Definition at line 54 of file qgsmaprendererjob.cpp.

References mCache.

Referenced by QgsMapCanvas::refreshMap(), and QgsMapRendererSequentialJob::start().

void QgsMapRendererJob::setRequestedGeometryCacheForLayers ( const QStringList &  layerIds)
inline

Set which vector layers should be cached while rendering.

Note
The way how geometries are cached is really suboptimal - this method may be removed in future releases

Definition at line 124 of file qgsmaprendererjob.h.

Referenced by QgsMapCanvas::refreshMap().

virtual void QgsMapRendererJob::start ( )
pure virtual

Start the rendering job and immediately return.

Does nothing if the rendering is already in progress.

Implemented in QgsMapRendererCustomPainterJob, QgsMapRendererSequentialJob, and QgsMapRendererParallelJob.

Referenced by QgsMapOverviewCanvas::refresh(), and QgsMapCanvas::refreshMap().

virtual QgsLabelingResults* QgsMapRendererJob::takeLabelingResults ( )
pure virtual

Get pointer to internal labeling engine (in order to get access to the results)

Implemented in QgsMapRendererCustomPainterJob, QgsMapRendererSequentialJob, and QgsMapRendererParallelJob.

Referenced by QgsMapCanvas::rendererJobFinished().

void QgsMapRendererJob::updateLayerGeometryCaches ( )
protected

called when rendering has finished to update all layers' geometry caches

Definition at line 327 of file qgsmaprenderercustompainterjob.cpp.

References QgsMapLayerRegistry::instance(), and mGeometryCaches.

Referenced by cleanupJobs().

virtual void QgsMapRendererJob::waitForFinished ( )
pure virtual

Block until the job has finished.

Implemented in QgsMapRendererCustomPainterJob, QgsMapRendererSequentialJob, and QgsMapRendererParallelJob.

Member Data Documentation

QgsMapRendererCache* QgsMapRendererJob::mCache
protected
Errors QgsMapRendererJob::mErrors
protected
QMap<QString, QgsGeometryCache> QgsMapRendererJob::mGeometryCaches
protected

map of geometry caches

Definition at line 169 of file qgsmaprendererjob.h.

Referenced by prepareJobs(), and updateLayerGeometryCaches().

QTime QgsMapRendererJob::mRenderingStart
protected
int QgsMapRendererJob::mRenderingTime
protected
QStringList QgsMapRendererJob::mRequestedGeomCacheForLayers
protected

list of layer IDs for which the geometry cache should be updated

Definition at line 167 of file qgsmaprendererjob.h.

Referenced by prepareJobs().

QgsMapSettings QgsMapRendererJob::mSettings
protected

The documentation for this class was generated from the following files: