QGIS API Documentation
2.4.0-Chugiak
|
Abstract base class for map rendering implementations. More...
#include <qgsmaprendererjob.h>
Classes | |
struct | Error |
Public Types | |
typedef QList< Error > | Errors |
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 QgsLabelingResults * | takeLabelingResults ()=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 |
QgsMapRendererCache * | mCache |
QStringList | mRequestedGeomCacheForLayers |
list of layer IDs for which the geometry cache should be updated More... | |
QMap< QString, QgsGeometryCache > | mGeometryCaches |
map of geometry caches More... | |
QTime | mRenderingStart |
int | mRenderingTime |
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, ...)
It is possible to cancel the rendering job while it is active by calling cancel() function.
The following subclasses are available:
Definition at line 78 of file qgsmaprendererjob.h.
typedef QList<Error> QgsMapRendererJob::Errors |
Definition at line 112 of file qgsmaprendererjob.h.
QgsMapRendererJob::QgsMapRendererJob | ( | const QgsMapSettings & | settings | ) |
Definition at line 35 of file qgsmaprendererjob.cpp.
|
inlinevirtual |
Definition at line 85 of file qgsmaprendererjob.h.
|
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().
|
protected |
Definition at line 269 of file qgsmaprendererjob.cpp.
References LayerRenderJob::cached, LayerRenderJob::context, QgsMapLayerRenderer::errors(), LayerRenderJob::img, LayerRenderJob::layerId, QgsMapLayerRenderer::layerID(), mCache, mErrors, QgsRenderContext::painter(), QgsDebugMsg, LayerRenderJob::renderer, QgsRenderContext::renderingStopped(), QgsMapRendererCache::setCacheImage(), QgsRenderContext::setPainter(), and updateLayerGeometryCaches().
Referenced by QgsMapRendererCustomPainterJob::futureFinished(), and QgsMapRendererParallelJob::renderLayersFinished().
|
staticprotected |
Definition at line 305 of file qgsmaprendererjob.cpp.
References QgsMapSettings::backgroundColor(), LayerRenderJob::blendMode, LayerRenderJob::img, QgsMapSettings::outputImageFormat(), and QgsMapSettings::outputSize().
Referenced by QgsMapRendererParallelJob::renderedImage(), QgsMapRendererSequentialJob::renderedImage(), and QgsMapRendererParallelJob::renderLayersFinished().
|
staticprotected |
Definition at line 248 of file qgsmaprenderercustompainterjob.cpp.
References drawNewLabeling(), drawOldLabeling(), QgsRenderContext::fromMapSettings(), QgsDebugMsg, QgsRenderContext::setLabelingEngine(), and QgsRenderContext::setPainter().
Referenced by QgsMapRendererCustomPainterJob::doRender(), and QgsMapRendererParallelJob::renderLabelsStatic().
|
staticprotected |
Definition at line 314 of file qgsmaprenderercustompainterjob.cpp.
References QgsPalLabeling::drawLabeling(), QgsPalLabeling::exit(), QgsRenderContext::renderingStopped(), QgsRenderContext::setCoordinateTransform(), QgsRenderContext::setExtent(), and QgsMapSettings::visibleExtent().
Referenced by drawLabeling().
|
staticprotected |
Definition at line 272 of file qgsmaprenderercustompainterjob.cpp.
References QgsMapLayer::crs(), QgsMapLayer::drawLabels(), QgsCoordinateReferenceSystem::geographicFlag(), QgsMapSettings::hasCrsTransformEnabled(), QgsMapLayer::hasScaleBasedVisibility(), QgsMapLayerRegistry::instance(), QgsMapSettings::layers(), QgsMapSettings::layerTransfrom(), QgsMapLayerRegistry::mapLayer(), QgsMapLayer::maximumScale(), QgsMapLayer::minimumScale(), QgsRenderContext::renderingStopped(), reprojectToLayerExtent(), QgsMapSettings::scale(), QgsRenderContext::setCoordinateTransform(), QgsRenderContext::setExtent(), QgsMapLayer::type(), QgsMapLayer::VectorLayer, and QgsMapSettings::visibleExtent().
Referenced by drawLabeling().
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().
|
signal |
emitted when asynchronous rendering is finished (or canceled).
Referenced by QgsMapRendererParallelJob::cancel(), QgsMapRendererCustomPainterJob::cancel(), QgsMapRendererCustomPainterJob::futureFinished(), QgsMapRendererSequentialJob::internalFinished(), QgsMapRendererParallelJob::renderingFinished(), QgsMapRendererParallelJob::renderLayersFinished(), QgsMapRendererParallelJob::start(), QgsMapRendererSequentialJob::start(), QgsMapRendererCustomPainterJob::start(), QgsMapRendererParallelJob::waitForFinished(), QgsMapRendererCustomPainterJob::waitForFinished(), and QgsMapRendererCustomPainterJob::waitForFinishedWithEventLoop().
|
pure virtual |
Tell whether the rendering job is currently running in background.
Implemented in QgsMapRendererCustomPainterJob, QgsMapRendererSequentialJob, and QgsMapRendererParallelJob.
|
protected |
Definition at line 339 of file qgsmaprenderercustompainterjob.cpp.
References QgsMapLayer::blendMode(), QgsVectorLayer::featureBlendMode(), QgsVectorLayer::layerTransparency(), mSettings, QgsMapSettings::testFlag(), QgsMapLayer::type(), QgsMapSettings::UseAdvancedEffects, and QgsMapLayer::VectorLayer.
Referenced by prepareJobs().
|
protected |
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(), QgsMapLayer::type(), QgsMapLayer::VectorLayer, QgsMapSettings::visibleExtent(), and QgsPalLabeling::willUseLayer().
Referenced by QgsMapRendererParallelJob::start(), and QgsMapRendererCustomPainterJob::start().
|
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().
|
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().
|
inline |
Set which vector layers should be cached while rendering.
Definition at line 124 of file qgsmaprendererjob.h.
Referenced by QgsMapCanvas::refreshMap().
|
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().
|
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().
|
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().
|
pure virtual |
Block until the job has finished.
Implemented in QgsMapRendererCustomPainterJob, QgsMapRendererSequentialJob, and QgsMapRendererParallelJob.
|
protected |
Definition at line 164 of file qgsmaprendererjob.h.
Referenced by cleanupJobs(), prepareJobs(), QgsMapRendererSequentialJob::renderedImage(), setCache(), and QgsMapRendererSequentialJob::start().
|
protected |
Definition at line 162 of file qgsmaprendererjob.h.
Referenced by cleanupJobs(), errors(), QgsMapRendererSequentialJob::internalFinished(), prepareJobs(), QgsMapRendererSequentialJob::start(), and QgsMapRendererCustomPainterJob::start().
|
protected |
map of geometry caches
Definition at line 169 of file qgsmaprendererjob.h.
Referenced by prepareJobs(), and updateLayerGeometryCaches().
|
protected |
Definition at line 171 of file qgsmaprendererjob.h.
Referenced by QgsMapRendererCustomPainterJob::futureFinished(), QgsMapRendererSequentialJob::internalFinished(), QgsMapRendererParallelJob::renderingFinished(), QgsMapRendererParallelJob::start(), QgsMapRendererSequentialJob::start(), and QgsMapRendererCustomPainterJob::start().
|
protected |
Definition at line 172 of file qgsmaprendererjob.h.
Referenced by QgsMapRendererCustomPainterJob::futureFinished(), QgsMapRendererSequentialJob::internalFinished(), and QgsMapRendererParallelJob::renderingFinished().
|
protected |
list of layer IDs for which the geometry cache should be updated
Definition at line 167 of file qgsmaprendererjob.h.
Referenced by prepareJobs().
|
protected |
Definition at line 161 of file qgsmaprendererjob.h.
Referenced by QgsMapRendererCustomPainterJob::doRender(), needTemporaryImage(), prepareJobs(), QgsMapRendererSequentialJob::QgsMapRendererSequentialJob(), QgsMapRendererParallelJob::renderedImage(), QgsMapRendererSequentialJob::renderedImage(), QgsMapRendererParallelJob::renderLayersFinished(), QgsMapRendererParallelJob::start(), QgsMapRendererSequentialJob::start(), and QgsMapRendererCustomPainterJob::start().