QGIS API Documentation  3.9.0-Master (3ff8ca5736)
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
QgsLabelingEngine Class Referenceabstract

The QgsLabelingEngine class provides map labeling functionality. More...

#include <qgslabelingengine.h>

Inheritance diagram for QgsLabelingEngine:
Inheritance graph
[legend]

Public Member Functions

 QgsLabelingEngine ()
 Construct the labeling engine with default settings. More...
 
 QgsLabelingEngine (const QgsLabelingEngine &rh)=delete
 QgsLabelingEngine cannot be copied. More...
 
virtual ~QgsLabelingEngine ()
 Clean up everything (especially the registered providers) More...
 
void addProvider (QgsAbstractLabelProvider *provider)
 Add provider of label features. Takes ownership of the provider. More...
 
const QgsLabelingEngineSettingsengineSettings () const
 Gets associated labeling engine settings. More...
 
const QgsMapSettingsmapSettings () const
 Gets associated map settings. More...
 
QgsLabelingEngineoperator= (const QgsLabelingEngine &rh)=delete
 QgsLabelingEngine cannot be copied. More...
 
QStringList participatingLayerIds () const
 Returns a list of layer IDs for layers with providers in the engine. More...
 
QList< QgsMapLayer *> participatingLayers () const
 Returns a list of layers with providers in the engine. More...
 
void removeProvider (QgsAbstractLabelProvider *provider)
 Remove provider if the provider's initialization failed. Provider instance is deleted. More...
 
QgsLabelingResultsresults () const
 For internal use by the providers. More...
 
virtual void run (QgsRenderContext &context)=0
 Runs the labeling job. More...
 
void setMapSettings (const QgsMapSettings &mapSettings)
 Associate map settings instance. More...
 
QgsLabelingResultstakeResults ()
 Returns pointer to recently computed results and pass the ownership of results to the caller. More...
 

Protected Member Functions

void cleanup ()
 Cleans up the engine following a call to registerLabels() or solve(). More...
 
void drawLabels (QgsRenderContext &context, const QString &layerId=QString())
 Draws labels to the specified render context. More...
 
void processProvider (QgsAbstractLabelProvider *provider, QgsRenderContext &context, pal::Pal &p)
 
void registerLabels (QgsRenderContext &context)
 Runs the label registration step. More...
 
void solve (QgsRenderContext &context)
 Solves the label problem. More...
 

Protected Attributes

QList< pal::LabelPosition * > mLabels
 
QgsMapSettings mMapSettings
 Associated map settings instance. More...
 
std::unique_ptr< pal::PalmPal
 
std::unique_ptr< pal::ProblemmProblem
 
QList< QgsAbstractLabelProvider * > mProviders
 List of providers (the are owned by the labeling engine) More...
 
std::unique_ptr< QgsLabelingResultsmResults
 Resulting labeling layout. More...
 
QList< QgsAbstractLabelProvider * > mSubProviders
 
QList< pal::LabelPosition * > mUnlabeled
 

Detailed Description

The QgsLabelingEngine class provides map labeling functionality.

The input for the engine is a list of label provider objects and map settings. Based on the input, the engine computes layout of labels for the given map view with no collisions between the labels. Drawing of resulting labels is done again by label providers.

The labeling engine is used for the map rendering in QgsMapRendererJob instances, individual map layer renderers may add label providers - for example, QgsVectorLayerRenderer may add text label provider and diagram provider (if labeling / diagrams were configured for such vector layer).

The labeling engine may also be used independently from map rendering loop:

// add one or more providers
engine.addProvider( ... );
// compute the labeling and draw labels (using painter from the context)
engine.run( context );
Note
this class is not a part of public API yet. The provider's interface still uses pal::LabelPosition as an argument in drawLabels() method - this should be sorted out first (a class common to API and pal?). Also, the API may need more polishing to be easy to use - e.g. use concept of labeling layers in API (equivalent of pal::Layer) instead of subProviders(), label providers integrated into feature loop vs providers with independent feature loop), split labeling computation from drawing of labels, improved results class with label iterator).
not available in Python bindings
Since
QGIS 2.12

Definition at line 210 of file qgslabelingengine.h.

Constructor & Destructor Documentation

◆ QgsLabelingEngine() [1/2]

QgsLabelingEngine::QgsLabelingEngine ( )

Construct the labeling engine with default settings.

Definition at line 79 of file qgslabelingengine.cpp.

◆ ~QgsLabelingEngine()

QgsLabelingEngine::~QgsLabelingEngine ( )
virtual

Clean up everything (especially the registered providers)

Definition at line 83 of file qgslabelingengine.cpp.

◆ QgsLabelingEngine() [2/2]

QgsLabelingEngine::QgsLabelingEngine ( const QgsLabelingEngine rh)
delete

QgsLabelingEngine cannot be copied.

Member Function Documentation

◆ addProvider()

void QgsLabelingEngine::addProvider ( QgsAbstractLabelProvider provider)

Add provider of label features. Takes ownership of the provider.

Definition at line 188 of file qgslabelingengine.cpp.

◆ cleanup()

void QgsLabelingEngine::cleanup ( )
protected

Cleans up the engine following a call to registerLabels() or solve().

Since
QGIS 3.10

Definition at line 524 of file qgslabelingengine.cpp.

◆ drawLabels()

void QgsLabelingEngine::drawLabels ( QgsRenderContext context,
const QString &  layerId = QString() 
)
protected

Draws labels to the specified render context.

If layerId is specified, only labels from the matching layer will be rendered.

Must be preceded by a call to registerLabels() and solve()

Since
QGIS 3.10

Definition at line 405 of file qgslabelingengine.cpp.

◆ engineSettings()

const QgsLabelingEngineSettings& QgsLabelingEngine::engineSettings ( ) const
inline

Gets associated labeling engine settings.

Definition at line 229 of file qgslabelingengine.h.

◆ mapSettings()

const QgsMapSettings& QgsLabelingEngine::mapSettings ( ) const
inline

Gets associated map settings.

Definition at line 226 of file qgslabelingengine.h.

◆ operator=()

QgsLabelingEngine& QgsLabelingEngine::operator= ( const QgsLabelingEngine rh)
delete

QgsLabelingEngine cannot be copied.

◆ participatingLayerIds()

QStringList QgsLabelingEngine::participatingLayerIds ( ) const

Returns a list of layer IDs for layers with providers in the engine.

Since
QGIS 3.10

Definition at line 142 of file qgslabelingengine.cpp.

◆ participatingLayers()

QList< QgsMapLayer *> QgsLabelingEngine::participatingLayers ( ) const

Returns a list of layers with providers in the engine.

Since
QGIS 3.0

Definition at line 96 of file qgslabelingengine.cpp.

◆ processProvider()

void QgsLabelingEngine::processProvider ( QgsAbstractLabelProvider provider,
QgsRenderContext context,
pal::Pal p 
)
protected

Definition at line 203 of file qgslabelingengine.cpp.

◆ registerLabels()

void QgsLabelingEngine::registerLabels ( QgsRenderContext context)
protected

Runs the label registration step.

Must be called by subclasses prior to solve() and drawLabels()

Since
QGIS 3.10

Definition at line 267 of file qgslabelingengine.cpp.

◆ removeProvider()

void QgsLabelingEngine::removeProvider ( QgsAbstractLabelProvider provider)

Remove provider if the provider's initialization failed. Provider instance is deleted.

Definition at line 194 of file qgslabelingengine.cpp.

◆ results()

QgsLabelingResults* QgsLabelingEngine::results ( ) const
inline

For internal use by the providers.

Definition at line 262 of file qgslabelingengine.h.

◆ run()

virtual void QgsLabelingEngine::run ( QgsRenderContext context)
pure virtual

Runs the labeling job.

Depending on the concrete labeling engine class, this will either run the whole labeling job, including rendering the labels themselves, OR possibly just run the labeling job but leave the rendering to a future, deferred stage.

Implemented in QgsStagedRenderLabelingEngine, and QgsDefaultLabelingEngine.

◆ setMapSettings()

void QgsLabelingEngine::setMapSettings ( const QgsMapSettings mapSettings)

Associate map settings instance.

Definition at line 89 of file qgslabelingengine.cpp.

◆ solve()

void QgsLabelingEngine::solve ( QgsRenderContext context)
protected

Solves the label problem.

Must be called by subclasses prior to drawLabels(), and must be preceded by a call to registerLabels()

Since
QGIS 3.10

Definition at line 295 of file qgslabelingengine.cpp.

◆ takeResults()

QgsLabelingResults * QgsLabelingEngine::takeResults ( )

Returns pointer to recently computed results and pass the ownership of results to the caller.

Definition at line 532 of file qgslabelingengine.cpp.

Member Data Documentation

◆ mLabels

QList<pal::LabelPosition *> QgsLabelingEngine::mLabels
protected

Definition at line 319 of file qgslabelingengine.h.

◆ mMapSettings

QgsMapSettings QgsLabelingEngine::mMapSettings
protected

Associated map settings instance.

Definition at line 307 of file qgslabelingengine.h.

◆ mPal

std::unique_ptr< pal::Pal > QgsLabelingEngine::mPal
protected

Definition at line 316 of file qgslabelingengine.h.

◆ mProblem

std::unique_ptr< pal::Problem > QgsLabelingEngine::mProblem
protected

Definition at line 317 of file qgslabelingengine.h.

◆ mProviders

QList<QgsAbstractLabelProvider *> QgsLabelingEngine::mProviders
protected

List of providers (the are owned by the labeling engine)

Definition at line 310 of file qgslabelingengine.h.

◆ mResults

std::unique_ptr< QgsLabelingResults > QgsLabelingEngine::mResults
protected

Resulting labeling layout.

Definition at line 314 of file qgslabelingengine.h.

◆ mSubProviders

QList<QgsAbstractLabelProvider *> QgsLabelingEngine::mSubProviders
protected

Definition at line 311 of file qgslabelingengine.h.

◆ mUnlabeled

QList<pal::LabelPosition *> QgsLabelingEngine::mUnlabeled
protected

Definition at line 318 of file qgslabelingengine.h.


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