QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgslabelsink.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgslabelsink.cpp
3 ---------------------
4 begin : January 2014
5 copyright : (C) 2014 by Marco Hugentobler
6 email : marco at sourcepole dot ch
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgslabelsink.h"
19#include "qgspallabeling.h"
20#include "qgsmapsettings.h"
21#include "qgslogger.h"
22
23QgsLabelSinkProvider::QgsLabelSinkProvider( QgsVectorLayer *layer, const QString &providerId, QgsLabelSink *sink, const QgsPalLayerSettings *settings )
24 : QgsVectorLayerLabelProvider( layer, providerId, false, settings )
25 , mLabelSink( sink )
26{
27}
28
30{
31 Q_ASSERT( mLabelSink );
32 mLabelSink->drawLabel( layerId(), context, label, mSettings );
33}
34
36{
37 Q_ASSERT( mLabelSink );
38 mLabelSink->drawUnplacedLabel( layerId(), context, label, mSettings );
39}
40
42 : QgsRuleBasedLabelProvider( rules, layer, false )
43 , mLabelSink( sink )
44{
45 mRules->rootRule()->createSubProviders( layer, mSubProviders, this );
46}
47
49{
50 mRules->rootRule()->createSubProviders( layer, mSubProviders, this );
51}
52
53QgsVectorLayerLabelProvider *QgsRuleBasedLabelSinkProvider::createProvider( QgsVectorLayer *layer, const QString &providerId, bool withFeatureLoop, const QgsPalLayerSettings *settings )
54{
55 Q_UNUSED( withFeatureLoop )
56 return new QgsLabelSinkProvider( layer, providerId, mLabelSink, settings );
57}
58
60{
61 Q_ASSERT( mLabelSink );
62 mLabelSink->drawLabel( layerId(), context, label, mSettings );
63}
64
66{
67 Q_ASSERT( mLabelSink );
68 mLabelSink->drawUnplacedLabel( layerId(), context, label, mSettings );
69}
QgsMapLayer * layer() const
Returns the associated layer, or nullptr if no layer is associated with the provider.
QString layerId() const
Returns ID of associated layer, or empty string if no layer is associated with the provider.
QString providerId() const
Returns provider ID - useful in case there is more than one label provider within a layer (e....
Implements a derived label provider for use with QgsLabelSink.
Definition: qgslabelsink.h:75
void drawUnplacedLabel(QgsRenderContext &context, pal::LabelPosition *label) const override
Draw an unplaced label.
void drawLabel(QgsRenderContext &context, pal::LabelPosition *label) const override
Draw this label at the position determined by the labeling engine.
QgsLabelSinkProvider(QgsVectorLayer *layer, const QString &providerId, QgsLabelSink *sink, const QgsPalLayerSettings *settings)
Creates a rule based label sink provider which will draw/register labels in sink.
Abstract base class that can be used to intercept rendered labels from a labeling / rendering job.
Definition: qgslabelsink.h:38
virtual void drawUnplacedLabel(const QString &layerId, QgsRenderContext &context, pal::LabelPosition *label, const QgsPalLayerSettings &settings)
The drawLabel method is called for each unplaced label.
Definition: qgslabelsink.h:57
virtual void drawLabel(const QString &layerId, QgsRenderContext &context, pal::LabelPosition *label, const QgsPalLayerSettings &settings)=0
The drawLabel method is called for each label that is being drawn.
Contains settings for how a map layer will be labeled.
Contains information about the context of a rendering operation.
Label provider for rule based labeling.
std::unique_ptr< QgsRuleBasedLabeling > mRules
owned copy
QgsRuleBasedLabeling::RuleToProviderMap mSubProviders
label providers are owned by labeling engine
void drawLabel(QgsRenderContext &context, pal::LabelPosition *label) const override
Draw this label at the position determined by the labeling engine.
Q_DECL_DEPRECATED void reinit(QgsVectorLayer *layer)
Reinitialize the subproviders with QgsLabelSinkProviders.
QgsVectorLayerLabelProvider * createProvider(QgsVectorLayer *layer, const QString &providerId, bool withFeatureLoop, const QgsPalLayerSettings *settings) override
Creates a QgsRuleBasedLabelSinkProvider.
void drawUnplacedLabel(QgsRenderContext &context, pal::LabelPosition *label) const override
Draw an unplaced label.
QgsRuleBasedLabelSinkProvider(const QgsRuleBasedLabeling &rules, QgsVectorLayer *layer, QgsLabelSink *sink)
Creates a rule based label sink provider which will draw/register labels in sink.
Rule based labeling for a vector layer.
The QgsVectorLayerLabelProvider class implements a label provider for vector layers.
const QgsPalLayerSettings & settings() const
Returns the layer's settings.
QgsPalLayerSettings mSettings
Layer's labeling configuration.
Represents a vector layer which manages a vector based data sets.
LabelPosition is a candidate feature label position.
Definition: labelposition.h:56