45#include <QTextDocument> 
   46#include <QTextFragment> 
   53  , mLayerGeometryType( layer->geometryType() )
 
   54  , mRenderer( layer->renderer() )
 
   55  , mFields( layer->fields() )
 
   56  , mCrs( layer->
crs() )
 
   60  if ( withFeatureLoop )
 
   62    mSource = std::make_unique<QgsVectorLayerFeatureSource>( 
layer );
 
 
   71  , mLayerGeometryType( geometryType )
 
   72  , mRenderer( nullptr )
 
 
  143  QSet<QString> attrNames;
 
  144  if ( !
prepare( ctx, attrNames ) )
 
  145    return QList<QgsLabelFeature *>();
 
  178      if ( !symbols.isEmpty() )
 
  180        symbol = symbols.at( 0 );
 
 
  200  QList< QgsLabelFeature * > res;
 
 
  215  std::unique_ptr< QgsAbstractGeometry > obstacleGeom;
 
  217    obstacleGeom = std::make_unique< QgsMultiPolygon >();
 
  220  for ( 
int i = 0; i < fet.
geometry().constGet()->nCoordinates(); ++i )
 
  243    const auto constSymbols = symbols;
 
  248        if ( bounds.isValid() )
 
  251          bounds = 
static_cast< QgsMarkerSymbol * 
>( symbol )->bounds( pt, context, fet );
 
  256    QVector< double > bX;
 
  257    bX << bounds.left() << bounds.right() << bounds.right() << bounds.left();
 
  258    QVector< double > bY;
 
  259    bY << bounds.top() << bounds.top() << bounds.bottom() << bounds.bottom();
 
  260    std::unique_ptr< QgsLineString > boundLineString = std::make_unique< QgsLineString >( bX, bY );
 
  264    for ( 
int i = 0; i < boundLineString->numPoints(); ++i )
 
  267                         static_cast<int>( boundLineString->yAt( i ) ) );
 
  268      boundLineString->setXAt( i, point.
x() );
 
  269      boundLineString->setYAt( i, point.
y() );
 
  282    boundLineString->close();
 
  287      boundLineString->filterVertices( []( 
const QgsPoint & point )->
bool 
  289        return std::isfinite( point.
x() ) && std::isfinite( point.
y() );
 
  291      if ( !boundLineString->isRing() )
 
  295    std::unique_ptr< QgsPolygon > obstaclePolygon = std::make_unique< QgsPolygon >();
 
  296    obstaclePolygon->setExteriorRing( boundLineString.release() );
 
  300      static_cast<QgsMultiPolygon *
>( obstacleGeom.get() )->addGeometry( obstaclePolygon.release() );
 
  304      obstacleGeom = std::move( obstaclePolygon );
 
 
  319    drawCallout( context, label );
 
 
  337    QRectF rect( outPt.x(), outPt.y(), outPt2.
x() - outPt.x(), outPt2.
y() - outPt.y() );
 
  346    const QList< QgsCalloutPosition > renderedPositions = calloutContext.
positions();
 
  371  const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues = lf->
dataDefinedValues();
 
  376  QgsDebugMsgLevel( QStringLiteral( 
"PAL font definedFont: %1, Style: %2" ).arg( dFont.toString(), dFont.styleName() ), 4 );
 
  383  format.
setSize( dFont.pixelSize() );
 
  411  QgsPalLabeling::dataDefinedTextStyle( tmpLyr, ddValues );
 
  414  QgsPalLabeling::dataDefinedTextBuffer( tmpLyr, ddValues );
 
  417  QgsPalLabeling::dataDefinedTextMask( tmpLyr, ddValues );
 
  420  QgsPalLabeling::dataDefinedTextFormatting( tmpLyr, ddValues );
 
  423  QgsPalLabeling::dataDefinedShapeBackground( tmpLyr, ddValues );
 
  426  QgsPalLabeling::dataDefinedDropShadow( tmpLyr, ddValues );
 
  434    drawCallout( context, label );
 
 
  498  QPainter *painter = context.
painter();
 
  516    QRectF rect( 0, 0, outPt2.
x() - outPt.x(), outPt2.
y() - outPt.y() );
 
  518    painter->setRenderHint( QPainter::Antialiasing, 
false );
 
  519    painter->translate( QPointF( outPt.x(), outPt.y() ) );
 
  520    painter->rotate( -label->
getAlpha() * 180 / M_PI );
 
  524      painter->setBrush( QColor( 255, 0, 0, 100 ) );
 
  525      painter->setPen( QColor( 255, 0, 0, 150 ) );
 
  529      painter->setBrush( QColor( 0, 255, 0, 100 ) );
 
  530      painter->setPen( QColor( 0, 255, 0, 150 ) );
 
  533    painter->drawRect( rect );
 
  547    QRectF rect( 0, 0, outPt2.
x() - outPt.x(), outPt2.
y() - outPt.y() );
 
  549    painter->setRenderHint( QPainter::Antialiasing, 
false );
 
  550    painter->translate( QPointF( outPt.x(), outPt.y() ) );
 
  551    painter->rotate( -label->
getAlpha() * 180 / M_PI );
 
  553    painter->setBrush( Qt::NoBrush );
 
  554    painter->setPen( QColor( 255, 0, 0, 220 ) );
 
  556    painter->drawRect( rect );
 
  559    painter->setPen( QColor( 0, 0, 0, 60 ) );
 
  561    if ( margins.
top() > 0 )
 
  564      painter->drawLine( QPointF( rect.left(), rect.top() - topMargin ), QPointF( rect.right(), rect.top() - topMargin ) );
 
  566    if ( margins.
bottom() > 0 )
 
  569      painter->drawLine( QPointF( rect.left(), rect.bottom() + bottomMargin ), QPointF( rect.right(), rect.bottom() + bottomMargin ) );
 
  573    if ( !outerBounds.isNull() )
 
  575      const QRectF mapOuterBounds = QRectF( label->
getX() + outerBounds.left(),
 
  576                                            label->
getY() + outerBounds.top(),
 
  577                                            outerBounds.width(), outerBounds.height() );
 
  579      QgsPointXY outerBoundsPt1 = xform.
transform( mapOuterBounds.left(), mapOuterBounds.top() );
 
  580      QgsPointXY outerBoundsPt2 = xform.
transform( mapOuterBounds.right(), mapOuterBounds.bottom() );
 
  582      const QRectF outerBoundsPixel( outerBoundsPt1.
x() - outPt.x(),
 
  583                                     outerBoundsPt1.
y() - outPt.y(),
 
  584                                     outerBoundsPt2.
x() - outerBoundsPt1.
x(),
 
  585                                     outerBoundsPt2.
y() - outerBoundsPt1.
y() );
 
  587      QPen pen( QColor( 255, 0, 255, 140 ) );
 
  588      pen.setCosmetic( 
true );
 
  590      painter->setPen( pen );
 
  591      painter->drawRect( outerBoundsPixel );
 
  598      const int blockCount = document.
size();
 
  600      double prevBlockBaseline = rect.bottom() - rect.top();
 
  603      for ( 
int blockIndex = 0; blockIndex < blockCount; ++blockIndex )
 
  608        const int fragmentCount = block.
size();
 
  610        for ( 
int fragmentIndex = 0; fragmentIndex < fragmentCount; ++fragmentIndex )
 
  615          if ( fragmentIndex > 0 )
 
  617            QPen pen( QColor( 0, 0, 255, 220 ) );
 
  618            pen.setStyle( Qt::PenStyle::DashLine );
 
  620            painter->setPen( pen );
 
  622            painter->drawLine( QPointF( rect.left() + left, rect.top() + blockBaseLine + fragmentVerticalOffset ),
 
  623                               QPointF( rect.left() + left, rect.top() + prevBlockBaseline ) );
 
  627          painter->setPen( QColor( 0, 0, 255, 220 ) );
 
  628          painter->drawLine( QPointF( rect.left() + left, rect.top()  + blockBaseLine + fragmentVerticalOffset ),
 
  629                             QPointF( rect.left() + right, rect.top() + blockBaseLine + fragmentVerticalOffset ) );
 
  632        prevBlockBaseline = blockBaseLine;
 
  639  QgsTextRenderer::Component component;
 
  640  component.dpiRatio = dpiRatio;
 
  641  component.origin = outPt;
 
  642  component.rotation = label->
getAlpha();
 
  647    QPointF centerPt( outPt );
 
  651    double xc = outPt2.
x() - outPt.x();
 
  652    double yc = outPt2.
y() - outPt.y();
 
  654    double angle = -component.rotation;
 
  655    double xd = xc * std::cos( angle ) - yc * std::sin( angle );
 
  656    double yd = xc * std::sin( angle ) + yc * std::cos( angle );
 
  658    centerPt.setX( centerPt.x() + xd );
 
  659    centerPt.setY( centerPt.y() + yd );
 
  661    component.center = centerPt;
 
  672      component.size = QSizeF( labelWidthPx, labelHeightPx );
 
  697      bool prependSymb = 
false;
 
  724          symb = symb + QStringLiteral( 
"\n" );
 
  729          symb = QStringLiteral( 
"\n" ) + symb;
 
  754    QgsTextRenderer::Component component;
 
  755    component.origin = outPt;
 
  756    component.rotation = label->
getAlpha();
 
  763    bool metricsRequired = 
false;
 
  768        metricsRequired = 
true;
 
  781    if ( metricsRequired )
 
  785      for ( 
const QString &line : multiLineList )
 
  799    QgsTextRenderer::drawTextInternal( drawType, context, tmpLyr.
format(), component, document,
 
 
@ OverPoint
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point....
 
@ Curved
Arranges candidates following the curvature of a line feature. Applies to line layers only.
 
@ AroundPoint
Arranges candidates in a circle around a point (or centroid of a polygon). Applies to point or polygo...
 
@ Line
Arranges candidates parallel to a generalised line representing the feature or parallel to a polygon'...
 
@ Free
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...
 
@ OrderedPositionsAroundPoint
Candidates are placed in predefined positions around a point. Preference is given to positions with g...
 
@ Horizontal
Arranges horizontal candidates scattered throughout a polygon feature. Applies to polygon layers only...
 
@ PerimeterCurved
Arranges candidates following the curvature of a polygon's boundary. Applies to polygon layers only.
 
@ OutsidePolygons
Candidates are placed outside of polygon boundaries. Applies to polygon layers only....
 
@ Labeling
Labeling-specific layout mode.
 
@ NeverShow
Never show unplaced labels, regardless of the engine setting.
 
@ DrawLabelMetrics
Whether to render label metric guides (for debugging). Since QGIS 3.30.
 
@ DrawUnplacedLabels
Whether to render unplaced labels as an indicator/warning for users.
 
@ DrawLabelRectOnly
Whether to only draw the label rect and not the actual label text (used for unit tests)
 
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
 
@ FollowPlacement
Alignment follows placement of label, e.g., labels to the left of a feature will be drawn with right ...
 
TextHorizontalAlignment
Text horizontal alignment.
 
TextComponent
Text components.
 
@ Buffer
Buffer component.
 
@ Background
Background shape.
 
@ Reverse
Reverse/inverse transform (from destination to source)
 
virtual int nCoordinates() const
Returns the number of nodes contained in the geometry.
 
virtual QgsPoint vertexAt(QgsVertexId id) const =0
Returns the point corresponding to a specified vertex id.
 
The QgsAbstractLabelProvider class is an interface class.
 
QgsLabelObstacleSettings::ObstacleType mObstacleType
Type of the obstacle of feature geometries.
 
QString mName
Name of the layer.
 
virtual void stopRender(QgsRenderContext &context)
To be called after rendering is complete.
 
QString mLayerId
Associated layer's ID, if applicable.
 
double mPriority
Default priority of labels.
 
const QgsLabelingEngine * mEngine
Associated labeling engine.
 
QgsMapLayer * layer() const
Returns the associated layer, or nullptr if no layer is associated with the provider.
 
Flags mFlags
Flags altering drawing and registration of features.
 
virtual void startRender(QgsRenderContext &context)
To be called before rendering of labels begins.
 
Qgis::LabelPlacement mPlacement
Placement strategy.
 
@ MergeConnectedLines
Whether adjacent lines (with the same label text) should be merged.
 
@ DrawLabels
Whether the labels should be rendered.
 
@ CentroidMustBeInside
Whether location of centroid must be inside of polygons.
 
QString layerId() const
Returns ID of associated layer, or empty string if no layer is associated with the provider.
 
Qgis::UpsideDownLabelHandling mUpsidedownLabels
How to handle labels that would be upside down.
 
QString providerId() const
Returns provider ID - useful in case there is more than one label provider within a layer (e....
 
QString mProviderId
Associated provider ID (one layer may have multiple providers, e.g. in rule-based labeling)
 
bool valueAsBool(int key, const QgsExpressionContext &context, bool defaultValue=false, bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as an boolean.
 
Represents the calculated placement of a map label callout line.
 
Contains additional contextual information about the context in which a callout is being rendered.
 
bool allFeaturePartsLabeled
true if all parts of associated feature were labeled
 
QList< QgsCalloutPosition > positions() const
Returns the list of rendered callout positions.
 
QgsCoordinateReferenceSystem originalFeatureCrs
Contains the CRS of the original feature associated with this callout.
 
void render(QgsRenderContext &context, const QRectF &rect, const double angle, const QgsGeometry &anchor, QgsCalloutContext &calloutContext)
Renders the callout onto the specified render context.
 
@ OrderBelowIndividualLabels
Render callouts below their individual associated labels, some callouts may be drawn over other label...
 
@ OrderBelowAllLabels
Render callouts below all labels.
 
virtual DrawOrder drawOrder() const
Returns the desired drawing order (stacking) to use while rendering this callout.
 
bool enabled() const
Returns true if the the callout is enabled.
 
This class represents a coordinate reference system (CRS).
 
Custom exception class for Coordinate Reference System related exceptions.
 
Single scope for storing variables and functions for use within a QgsExpressionContext.
 
static QgsExpressionContextScope * updateSymbolScope(const QgsSymbol *symbol, QgsExpressionContextScope *symbolScope=nullptr)
Updates a symbol scope related to a QgsSymbol to an expression context.
 
QgsExpressionContextScope * popScope()
Removes the last scope from the expression context and return it.
 
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for the context.
 
QgsExpressionContextScope * lastScope()
Returns the last scope added to the context.
 
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
 
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
 
Wrapper for iterator of features from vector data provider or vector layer.
 
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
 
virtual void stopRender(QgsRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
 
virtual void startRender(QgsRenderContext &context, const QgsFields &fields)
Must be called when a new render cycle is started.
 
virtual QgsSymbolList originalSymbolsForFeature(const QgsFeature &feature, QgsRenderContext &context) const
Equivalent of originalSymbolsForFeature() call extended to support renderers that may use more symbol...
 
This class wraps a request for features to a vector layer (or directly its vector data provider).
 
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
 
QgsFeatureRequest & setFilterRect(const QgsRectangle &rectangle)
Sets the rectangle from which features will be taken.
 
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
 
bool hasGeometry() const
Returns true if the feature has an associated geometry.
 
Container of fields for a vector layer.
 
A geometry is the spatial representation of a feature.
 
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
 
static std::unique_ptr< QgsAbstractGeometry > fromGeos(const GEOSGeometry *geos)
Create a geometry from a GEOSGeometry.
 
QgsCoordinateReferenceSystem originalFeatureCrs() const
Returns the original layer CRS of the feature associated with the label.
 
GEOSGeometry * geometry() const
Gets access to the associated geometry.
 
bool hasFixedPosition() const
Whether the label should use a fixed position instead of being automatically placed.
 
const QgsMargins & visualMargin() const
Returns the visual margin for the label feature.
 
QString labelText() const
Text of the label.
 
QRectF outerBounds() const
Returns the extreme outer bounds of the label feature, including any surrounding content like borders...
 
bool labelAllParts() const
Returns true if all parts of the feature should be labeled.
 
bool reverseDirectionSymbol() const
Returns true if direction symbols should be reversed.
 
DirectionSymbolPlacement directionSymbolPlacement() const
Returns the placement for direction symbols.
 
QString leftDirectionSymbol() const
Returns the string to use for left direction arrows.
 
@ SymbolLeftRight
Place direction symbols on left/right of label.
 
@ SymbolAbove
Place direction symbols on above label.
 
@ SymbolBelow
Place direction symbols on below label.
 
QString rightDirectionSymbol() const
Returns the string to use for right direction arrows.
 
bool addDirectionSymbol() const
Returns true if '<' or '>' (or custom strings set via leftDirectionSymbol and rightDirectionSymbol) w...
 
bool mergeLines() const
Returns true if connected line features with identical label text should be merged prior to generatin...
 
ObstacleType type() const
Returns how features act as obstacles for labels.
 
@ PolygonWhole
Avoid placing labels over ANY part of polygon. Where PolygonInterior will prefer to place labels with...
 
QColor unplacedLabelColor() const
Returns the color to use when rendering unplaced labels.
 
bool testFlag(Qgis::LabelingFlag f) const
Test whether a particular flag is enabled.
 
Qgis::LabelingFlags flags() const
Gets flags of the labeling engine.
 
const QgsLabelingEngineSettings & engineSettings() const
Gets associated labeling engine settings.
 
const QgsMapSettings & mapSettings() const
Gets associated map settings.
 
QgsLabelingResults * results() const
For internal use by the providers.
 
Base class for all map layer types.
 
The QgsMapSettings class contains configuration for rendering of the map.
 
Perform transforms between map coordinates and device coordinates.
 
void setMapRotation(double degrees, double cx, double cy)
Sets map rotation in degrees (clockwise).
 
double mapUnitsPerPixel() const
Returns the current map units per pixel.
 
QgsPointXY toMapCoordinates(int x, int y) const
Transforms device coordinates to map (world) coordinates.
 
QgsPointXY transform(const QgsPointXY &p) const
Transforms a point p from map (world) coordinates to device coordinates.
 
void transformInPlace(double &x, double &y) const
Transforms device coordinates to map coordinates.
 
Struct for storing maximum and minimum scales for measurements in map units.
 
The QgsMargins class defines the four margins of a rectangle.
 
double top() const
Returns the top margin.
 
double bottom() const
Returns the bottom margin.
 
A marker symbol type, for rendering Point and MultiPoint geometries.
 
QRectF bounds(QPointF point, QgsRenderContext &context, const QgsFeature &feature=QgsFeature()) const
Returns the approximate bounding box of the marker symbol, which includes the bounding box of all sym...
 
Multi polygon geometry collection.
 
static QStringList splitToLines(const QString &text, const QString &wrapCharacter, int autoWrapLength=0, bool useMaxLineLengthWhenAutoWrapping=true)
Splits a text string to a list of separate lines, using a specified wrap character (wrapCharacter).
 
Contains settings for how a map layer will be labeled.
 
const QgsLabelObstacleSettings & obstacleSettings() const
Returns the label obstacle settings.
 
std::unique_ptr< QgsLabelFeature > registerFeatureWithDetails(const QgsFeature &feature, QgsRenderContext &context, QgsGeometry obstacleGeometry=QgsGeometry(), const QgsSymbol *symbol=nullptr)
Registers a feature for labeling.
 
void setFormat(const QgsTextFormat &format)
Sets the label text formatting settings, e.g., font settings, buffer settings, etc.
 
void startRender(QgsRenderContext &context)
Prepares the label settings for rendering.
 
QString wrapChar
Wrapping character string.
 
Qgis::LabelPlacement placement
Label placement mode.
 
QgsCoordinateTransform ct
 
bool drawLabels
Whether to draw labels for this layer.
 
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the label's property collection, used for data defined overrides.
 
Qgis::LabelMultiLineAlignment multilineAlign
Horizontal alignment of multi-line labels.
 
bool centroidInside
true if centroid positioned labels must be placed inside their corresponding feature polygon,...
 
int priority
Label priority.
 
QgsCallout * callout() const
Returns the label callout renderer, responsible for drawing label callouts.
 
bool prepare(QgsRenderContext &context, QSet< QString > &attributeNames, const QgsFields &fields, const QgsMapSettings &mapSettings, const QgsCoordinateReferenceSystem &crs)
Prepare for registration of features.
 
const QgsLabelLineSettings & lineSettings() const
Returns the label line settings, which contain settings related to how the label engine places and fo...
 
@ CalloutDraw
Show callout.
 
Qgis::UpsideDownLabelHandling upsidedownLabels
Controls whether upside down labels are displayed and how they are handled.
 
const QgsTextFormat & format() const
Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
 
int autoWrapLength
If non-zero, indicates that label text should be automatically wrapped to (ideally) the specified num...
 
Qgis::UnplacedLabelVisibility unplacedVisibility() const
Returns the layer's unplaced label visibility.
 
bool useMaxLineLengthForAutoWrap
If true, indicates that when auto wrapping label text the autoWrapLength length indicates the maximum...
 
void stopRender(QgsRenderContext &context)
Finalises the label settings after use.
 
A class to represent a 2D point.
 
QPointF toQPointF() const
Converts a point to a QPointF.
 
Point geometry type, with support for z-dimension and m-values.
 
bool isActive(int key) const final
Returns true if the collection contains an active property with the specified key.
 
A rectangle specified with double values.
 
Contains information about the context of a rendering operation.
 
const QgsMaskIdProvider * maskIdProvider() const
Returns the mask id provider attached to the context.
 
double convertToPainterUnits(double size, Qgis::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::RenderSubcomponentProperty property=Qgis::RenderSubcomponentProperty::Generic) const
Converts a size from the specified units to painter units (pixels).
 
QPainter * painter()
Returns the destination QPainter for the render operation.
 
QgsExpressionContext & expressionContext()
Gets the expression context.
 
const QgsRectangle & extent() const
When rendering a map layer, calling this method returns the "clipping" extent for the layer (in the l...
 
void setCurrentMaskId(int id)
Stores a mask id as the "current" one.
 
const QgsMapToPixel & mapToPixel() const
Returns the context's map to pixel transform, which transforms between map coordinates and device coo...
 
QgsCoordinateTransform coordinateTransform() const
Returns the current coordinate transform for the context.
 
Scoped object for temporary override of the symbologyReferenceScale property of a QgsRenderContext.
 
Abstract base class for all rendered symbols.
 
bool enabled() const
Returns whether the background is enabled.
 
ShapeType type() const
Returns the type of background shape (e.g., square, ellipse, SVG).
 
@ ShapeMarkerSymbol
Marker symbol.
 
Represents a block of text consisting of one or more QgsTextFragment objects.
 
int size() const
Returns the number of fragments in the block.
 
static QgsTextBlock fromPlainText(const QString &text, const QgsTextCharacterFormat &format=QgsTextCharacterFormat())
Constructor for QgsTextBlock consisting of a plain text, and optional character format.
 
bool enabled() const
Returns whether the buffer is enabled.
 
Stores information relating to individual character formatting.
 
Contains pre-calculated metrics of a QgsTextDocument.
 
double fragmentVerticalOffset(int blockIndex, int fragmentIndex, Qgis::TextLayoutMode mode) const
Returns the vertical offset from a text block's baseline which should be applied to the fragment at t...
 
double baselineOffset(int blockIndex, Qgis::TextLayoutMode mode) const
Returns the offset from the top of the document to the text baseline for the given block index.
 
static QgsTextDocumentMetrics calculateMetrics(const QgsTextDocument &document, const QgsTextFormat &format, const QgsRenderContext &context, double scaleFactor=1.0)
Returns precalculated text metrics for a text document, when rendered using the given base format and...
 
double fragmentHorizontalAdvance(int blockIndex, int fragmentIndex, Qgis::TextLayoutMode mode) const
Returns the horizontal advance of the fragment at the specified block and fragment index.
 
Represents a document consisting of one or more QgsTextBlock objects.
 
const QgsTextBlock & at(int index) const
Returns the block at the specified index.
 
int size() const
Returns the number of blocks in the document.
 
void append(const QgsTextBlock &block)
Appends a block to the document.
 
Container for all settings relating to text rendering.
 
void setColor(const QColor &color)
Sets the color that text will be rendered in.
 
void setSize(double size)
Sets the size for rendered text.
 
void setFont(const QFont &font)
Sets the font used for rendering text.
 
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units for the size of rendered text.
 
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
 
QgsTextShadowSettings & shadow()
Returns a reference to the text drop shadow settings.
 
QFont font() const
Returns the font used for rendering text.
 
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
 
Class that adds extra information to QgsLabelFeature for text labels.
 
QgsTextDocument document() const
Returns the document for the label.
 
QFont definedFont() const
Font to be used for rendering.
 
QgsTextCharacterFormat characterFormat(int partId) const
Returns the character format corresponding to the specified label part.
 
const QMap< QgsPalLayerSettings::Property, QVariant > & dataDefinedValues() const
Gets data-defined values.
 
QgsTextDocumentMetrics documentMetrics() const
Returns the document metrics for the label.
 
QString text(int partId) const
Returns the text component corresponding to a specified label part.
 
bool enabled() const
Returns whether the shadow is enabled.
 
void setShadowPlacement(QgsTextShadowSettings::ShadowPlacement placement)
Sets the placement for the drop shadow.
 
@ ShadowBuffer
Draw shadow under buffer.
 
@ ShadowShape
Draw shadow under background shape.
 
@ ShadowLowest
Draw shadow below all text components.
 
@ ShadowText
Draw shadow under text.
 
QgsTextShadowSettings::ShadowPlacement shadowPlacement() const
Returns the placement for the drop shadow.
 
void stopRender(QgsRenderContext &context) override
To be called after rendering is complete.
 
QgsCoordinateReferenceSystem mCrs
Layer's CRS.
 
virtual bool prepare(QgsRenderContext &context, QSet< QString > &attributeNames)
Prepare for registration of features.
 
void drawUnplacedLabel(QgsRenderContext &context, pal::LabelPosition *label) const override
Draw an unplaced label.
 
QgsFields mFields
Layer's fields.
 
QList< QgsLabelFeature * > mLabels
List of generated.
 
QgsVectorLayerLabelProvider(QgsVectorLayer *layer, const QString &providerId, bool withFeatureLoop, const QgsPalLayerSettings *settings, const QString &layerName=QString())
Convenience constructor to initialize the provider from given vector layer.
 
void startRender(QgsRenderContext &context) override
To be called before rendering of labels begins.
 
~QgsVectorLayerLabelProvider() override
 
const QgsPalLayerSettings & settings() const
Returns the layer's settings.
 
void drawLabelPrivate(pal::LabelPosition *label, QgsRenderContext &context, QgsPalLayerSettings &tmpLyr, Qgis::TextComponent drawType, double dpiRatio=1.0) const
Internal label drawing method.
 
Qgis::GeometryType mLayerGeometryType
Geometry type of layer.
 
static QgsGeometry getPointObstacleGeometry(QgsFeature &fet, QgsRenderContext &context, const QgsSymbolList &symbols)
Returns the geometry for a point feature which should be used as an obstacle for labels.
 
QgsPalLayerSettings mSettings
Layer's labeling configuration.
 
std::unique_ptr< QgsAbstractFeatureSource > mSource
Layer's feature source.
 
QList< QgsLabelFeature * > labelFeatures(QgsRenderContext &context) override
Returns list of label features (they are owned by the provider and thus deleted on its destruction)
 
QgsFeatureRenderer * mRenderer
 
virtual QList< QgsLabelFeature * > registerFeature(const QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry=QgsGeometry(), const QgsSymbol *symbol=nullptr)
Register a feature for labeling as one or more QgsLabelFeature objects stored into mLabels.
 
void init()
initialization method - called from constructors
 
void setFields(const QgsFields &fields)
Sets fields of this label provider.
 
void drawLabel(QgsRenderContext &context, pal::LabelPosition *label) const override
Draw this label at the position determined by the labeling engine.
 
void drawLabelBackground(QgsRenderContext &context, pal::LabelPosition *label) const override
Draw the background for the specified label.
 
Represents a vector layer which manages a vector based data sets.
 
QgsFeatureId featureId() const
Returns the unique ID of the feature.
 
QgsLabelFeature * feature()
Returns the parent feature.
 
Layer * layer()
Returns the layer that feature belongs to.
 
LabelPosition is a candidate feature label position.
 
double getAlpha() const
Returns the angle to rotate text (in radians).
 
Quadrant getQuadrant() const
 
bool conflictsWithObstacle() const
Returns whether the position is marked as conflicting with an obstacle feature.
 
FeaturePart * getFeaturePart() const
Returns the feature corresponding to this labelposition.
 
double getX(int i=0) const
Returns the down-left x coordinate.
 
double getY(int i=0) const
Returns the down-left y coordinate.
 
LabelPosition * nextPart() const
Returns the next part of this label position (i.e.
 
QgsAbstractLabelProvider * provider() const
Returns pointer to the associated provider.
 
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
 
#define QgsDebugMsgLevel(str, level)
 
QList< QgsSymbol * > QgsSymbolList
 
const QgsCoordinateReferenceSystem & crs
 
Utility class for identifying a unique vertex within a geometry.