QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
qgsvectorlayerlabelprovider.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectorlayerlabelprovider.h
3  --------------------------------------
4  Date : September 2015
5  Copyright : (C) 2015 by Martin Dobias
6  Email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSVECTORLAYERLABELPROVIDER_H
17 #define QGSVECTORLAYERLABELPROVIDER_H
18 
19 #define SIP_NO_FILE
20 
21 #include "qgis_core.h"
22 #include "qgslabelingengine.h"
23 #include "qgsrenderer.h"
24 #include "qgstextrenderer.h"
25 #include "qgspallabeling.h"
26 
28 class QgsFeatureRenderer;
29 class QgsSymbol;
30 
42 {
43  public:
44 
47  const QString &providerId,
48  bool withFeatureLoop,
49  const QgsPalLayerSettings *settings,
50  const QString &layerName = QString() );
51 
54  const QgsFields &fields,
56  const QString &providerId,
57  const QgsPalLayerSettings *settings,
58  QgsMapLayer *layer,
59  const QString &layerName = QString() );
60 
61  ~QgsVectorLayerLabelProvider() override;
62 
63  QList<QgsLabelFeature *> labelFeatures( QgsRenderContext &context ) override;
64 
65  void drawLabelBackground( QgsRenderContext &context, pal::LabelPosition *label ) const override;
66  void drawLabel( QgsRenderContext &context, pal::LabelPosition *label ) const override;
67  void drawUnplacedLabel( QgsRenderContext &context, pal::LabelPosition *label ) const override;
68  void startRender( QgsRenderContext &context ) override;
69  void stopRender( QgsRenderContext &context ) override;
70 
71  // new virtual methods
72 
79  virtual bool prepare( QgsRenderContext &context, QSet<QString> &attributeNames );
80 
95  virtual QList< QgsLabelFeature * > registerFeature( const QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry = QgsGeometry(), const QgsSymbol *symbol = nullptr );
96 
106  static QgsGeometry getPointObstacleGeometry( QgsFeature &fet, QgsRenderContext &context, const QgsSymbolList &symbols );
107 
112  const QgsPalLayerSettings &settings() const;
113 
120  void setFields( const QgsFields &fields ) { mFields = fields; }
121 
122  protected:
124  void init();
126  void drawLabelPrivate( pal::LabelPosition *label, QgsRenderContext &context, QgsPalLayerSettings &tmpLyr, QgsTextRenderer::TextPart drawType, double dpiRatio = 1.0 ) const;
127 
128  protected:
133 
134  QgsFeatureRenderer *mRenderer = nullptr;
135 
136  // these are needed only if using own renderer loop
137 
143  std::unique_ptr<QgsAbstractFeatureSource> mSource;
144 
146  QList<QgsLabelFeature *> mLabels;
147 
148  private:
149 
150  friend class TestQgsLabelingEngine;
151  void drawCallout( QgsRenderContext &context, pal::LabelPosition *label ) const;
152 };
153 
154 #endif // QGSVECTORLAYERLABELPROVIDER_H
QgsAbstractLabelProvider::drawLabel
virtual void drawLabel(QgsRenderContext &context, pal::LabelPosition *label) const =0
Draw this label at the position determined by the labeling engine.
QgsAbstractLabelProvider::stopRender
virtual void stopRender(QgsRenderContext &context)
To be called after rendering is complete.
Definition: qgslabelingengine.cpp:663
qgspallabeling.h
QgsTextRenderer::TextPart
TextPart
Components of text.
Definition: qgstextrenderer.h:49
qgstextrenderer.h
QgsPalLayerSettings
Contains settings for how a map layer will be labeled.
Definition: qgspallabeling.h:86
crs
const QgsCoordinateReferenceSystem & crs
Definition: qgswfsgetfeature.cpp:105
pal::LabelPosition
LabelPosition is a candidate feature label position.
Definition: labelposition.h:55
QgsVectorLayerLabelProvider::setFields
void setFields(const QgsFields &fields)
Sets fields of this label provider.
Definition: qgsvectorlayerlabelprovider.h:120
QgsFields
Container of fields for a vector layer.
Definition: qgsfields.h:44
QgsRenderContext
Contains information about the context of a rendering operation.
Definition: qgsrendercontext.h:59
QgsSymbol
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:92
QgsAbstractLabelProvider::drawUnplacedLabel
virtual void drawUnplacedLabel(QgsRenderContext &context, pal::LabelPosition *label) const
Draw an unplaced label.
Definition: qgslabelingengine.cpp:644
QgsVectorLayerLabelProvider
The QgsVectorLayerLabelProvider class implements a label provider for vector layers....
Definition: qgsvectorlayerlabelprovider.h:41
QgsVectorLayerLabelProvider::mSource
std::unique_ptr< QgsAbstractFeatureSource > mSource
Layer's feature source.
Definition: qgsvectorlayerlabelprovider.h:143
QgsVectorLayerLabelProvider::mFields
QgsFields mFields
Layer's fields.
Definition: qgsvectorlayerlabelprovider.h:139
QgsAbstractLabelProvider
The QgsAbstractLabelProvider class is an interface class. Implementations return list of labels and t...
Definition: qgslabelingengine.h:52
QgsSymbolList
QList< QgsSymbol * > QgsSymbolList
Definition: qgsrenderer.h:44
QgsAbstractLabelProvider::labelFeatures
virtual QList< QgsLabelFeature * > labelFeatures(QgsRenderContext &context)=0
Returns list of label features (they are owned by the provider and thus deleted on its destruction)
QgsAbstractFeatureSource
Base class that can be used for any class that is capable of returning features.
Definition: qgsfeaturerequest.h:1009
qgsrenderer.h
QgsCoordinateReferenceSystem
This class represents a coordinate reference system (CRS).
Definition: qgscoordinatereferencesystem.h:211
QgsAbstractLabelProvider::drawLabelBackground
virtual void drawLabelBackground(QgsRenderContext &context, pal::LabelPosition *label) const
Draw the background for the specified label.
Definition: qgslabelingengine.cpp:649
QgsAbstractLabelProvider::startRender
virtual void startRender(QgsRenderContext &context)
To be called before rendering of labels begins.
Definition: qgslabelingengine.cpp:654
QgsFeatureRenderer
Definition: qgsrenderer.h:101
QgsWkbTypes::GeometryType
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
Definition: qgswkbtypes.h:140
QgsGeometry
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
QgsVectorLayer
Represents a vector layer which manages a vector based data sets.
Definition: qgsvectorlayer.h:391
QgsMapLayer
Base class for all map layer types. This is the base class for all map layer types (vector,...
Definition: qgsmaplayer.h:72
QgsVectorLayerLabelProvider::mSettings
QgsPalLayerSettings mSettings
Layer's labeling configuration.
Definition: qgsvectorlayerlabelprovider.h:130
QgsVectorLayerLabelProvider::mLabels
QList< QgsLabelFeature * > mLabels
List of generated.
Definition: qgsvectorlayerlabelprovider.h:146
QgsFeature
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:55
QgsVectorLayerLabelProvider::mLayerGeometryType
QgsWkbTypes::GeometryType mLayerGeometryType
Geometry type of layer.
Definition: qgsvectorlayerlabelprovider.h:132
qgslabelingengine.h
QgsVectorLayerLabelProvider::mCrs
QgsCoordinateReferenceSystem mCrs
Layer's CRS.
Definition: qgsvectorlayerlabelprovider.h:141