QGIS API Documentation 3.28.14-Firenze (exported)
Loading...
Searching...
No Matches
qgslabelfeature.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslabelfeature.h
3 ---------------------
4 begin : December 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#ifndef QGSLABELFEATURE_H
16#define QGSLABELFEATURE_H
17
18#define SIP_NO_FILE
19
20#include "qgis_core.h"
21#include "geos_c.h"
22#include "qgsgeos.h"
23#include "qgsmargins.h"
26#include "qgslabeling.h"
27#include "qgsfeature.h"
29
30namespace pal
31{
32 class Layer;
33}
34
37class QgsGeometry;
38
39
57class CORE_EXPORT QgsLabelFeature
58{
59 public:
60
62 QgsLabelFeature( QgsFeatureId id, geos::unique_ptr geometry, QSizeF size );
64 virtual ~QgsLabelFeature();
65
67 QgsFeatureId id() const { return mId; }
68
70 GEOSGeometry *geometry() const { return mGeometry.get(); }
71
81 void setPermissibleZone( const QgsGeometry &geometry );
82
91 QgsGeometry permissibleZone() const { return mPermissibleZone; }
92
98 //TODO - remove when QgsGeometry caches GEOS preparedness
99 const GEOSPreparedGeometry *permissibleZonePrepared() const { return mPermissibleZoneGeosPrepared.get(); }
100
106 QSizeF size( double angle = 0.0 ) const;
107
118 void setVisualMargin( const QgsMargins &margin ) { mVisualMargin = margin; }
119
124 const QgsMargins &visualMargin() const { return mVisualMargin; }
125
132 void setSymbolSize( QSizeF size ) { mSymbolSize = size; }
133
141 const QSizeF &symbolSize() const { return mSymbolSize; }
142
149 double priority() const { return mPriority; }
150
158 void setPriority( double priority ) { mPriority = priority; }
159
166 double zIndex() const { return mZIndex; }
167
175 void setZIndex( double zIndex ) { mZIndex = zIndex; }
176
178 bool hasFixedPosition() const { return mHasFixedPosition; }
180 void setHasFixedPosition( bool enabled ) { mHasFixedPosition = enabled; }
182 QgsPointXY fixedPosition() const { return mFixedPosition; }
183
185 void setFixedPosition( const QgsPointXY &point ) { mFixedPosition = point; }
186
193 QgsPointXY anchorPosition() const;
194
201 void setAnchorPosition( const QgsPointXY &anchorPosition );
202
204 bool hasFixedAngle() const { return mHasFixedAngle; }
206 void setHasFixedAngle( bool enabled ) { mHasFixedAngle = enabled; }
207
212 double fixedAngle() const { return mFixedAngle; }
213
218 void setFixedAngle( double angle ) { mFixedAngle = angle; }
219
226 bool hasFixedQuadrant() const { return mHasFixedQuadrant; }
227
234 void setHasFixedQuadrant( bool enabled ) { mHasFixedQuadrant = enabled; }
235
242 QPointF quadOffset() const { return mQuadOffset; }
243
248 void setQuadOffset( QPointF quadOffset ) { mQuadOffset = quadOffset; }
249
254 QgsPointXY positionOffset() const { return mPositionOffset; }
255
260 void setPositionOffset( const QgsPointXY &offset ) { mPositionOffset = offset; }
261
268 Qgis::LabelOffsetType offsetType() const { return mOffsetType; }
269
276 void setOffsetType( Qgis::LabelOffsetType type ) { mOffsetType = type; }
277
282 double distLabel() const { return mDistLabel; }
283
288 void setDistLabel( double dist ) { mDistLabel = dist; }
289
295 QVector< Qgis::LabelPredefinedPointPosition > predefinedPositionOrder() const { return mPredefinedPositionOrder; }
296
302 void setPredefinedPositionOrder( const QVector< Qgis::LabelPredefinedPointPosition > &order ) { mPredefinedPositionOrder = order; }
303
308 double repeatDistance() const { return mRepeatDistance; }
309
314 void setRepeatDistance( double dist ) { mRepeatDistance = dist; }
315
317 bool alwaysShow() const { return mAlwaysShow; }
319 void setAlwaysShow( bool enabled ) { mAlwaysShow = enabled; }
320
325 QgsLabeling::LinePlacementFlags arrangementFlags() const { return mArrangementFlags; }
326
332 void setArrangementFlags( QgsLabeling::LinePlacementFlags flags ) { mArrangementFlags = flags; }
333
340 QgsLabeling::PolygonPlacementFlags polygonPlacementFlags() const { return mPolygonPlacementFlags; }
341
348 void setPolygonPlacementFlags( QgsLabeling::PolygonPlacementFlags flags ) { mPolygonPlacementFlags = flags; }
349
356 QString labelText() const { return mLabelText; }
358 void setLabelText( const QString &text ) { mLabelText = text; }
359
361 pal::Layer *layer() const { return mLayer; }
363 void setLayer( pal::Layer *layer ) { mLayer = layer; }
364
366 QgsAbstractLabelProvider *provider() const;
367
374 QgsFeature feature() const;
375
382 void setFeature( const QgsFeature &feature );
383
390 const QgsSymbol *symbol() const { return mSymbol; }
391
399 void setSymbol( const QgsSymbol *symbol ) { mSymbol = symbol; }
400
409 double overrunDistance() const;
410
419 void setOverrunDistance( double distance );
420
429 double overrunSmoothDistance() const;
430
439 void setOverrunSmoothDistance( double distance );
440
453 double lineAnchorPercent() const { return mLineAnchorPercent; }
454
467 void setLineAnchorPercent( double percent ) { mLineAnchorPercent = percent; }
468
476 QgsLabelLineSettings::AnchorType lineAnchorType() const { return mLineAnchorType; }
477
485 void setLineAnchorType( QgsLabelLineSettings::AnchorType type ) { mLineAnchorType = type; }
486
495 QgsLabelLineSettings::AnchorTextPoint lineAnchorTextPoint() const;
496
505 void setLineAnchorTextPoint( QgsLabelLineSettings::AnchorTextPoint point ) { mAnchorTextPoint = point; }
506
512 bool labelAllParts() const { return mLabelAllParts; }
513
519 void setLabelAllParts( bool labelAllParts ) { mLabelAllParts = labelAllParts; }
520
526 void setRotatedSize( QSizeF size ) { mRotatedSize = size; }
527
534 const QgsLabelObstacleSettings &obstacleSettings() const;
535
542 void setObstacleSettings( const QgsLabelObstacleSettings &settings );
543
550 QgsCoordinateReferenceSystem originalFeatureCrs() const;
551
558 void setOriginalFeatureCrs( const QgsCoordinateReferenceSystem &crs );
559
567 double minimumSize() const { return mMinimumSize; }
568
576 void setMinimumSize( double size ) { mMinimumSize = size; }
577
584 Qgis::LabelOverlapHandling overlapHandling() const { return mOverlapHandling; }
585
592 void setOverlapHandling( Qgis::LabelOverlapHandling handling ) { mOverlapHandling = handling; }
593
604 bool allowDegradedPlacement() const { return mAllowDegradedPlacement; }
605
616 void setAllowDegradedPlacement( bool allow ) { mAllowDegradedPlacement = allow; }
617
618 protected:
620 pal::Layer *mLayer = nullptr;
621
629 QSizeF mSize;
637 double mPriority = -1;
639 double mZIndex = 0;
641 bool mHasFixedPosition = false;
645 bool mHasFixedAngle = false;
647 double mFixedAngle = 0;
649 bool mHasFixedQuadrant = false;
651 QPointF mQuadOffset;
655 double mDistLabel = 0;
659 QVector< Qgis::LabelPredefinedPointPosition > mPredefinedPositionOrder;
661 double mRepeatDistance = 0;
663 bool mAlwaysShow = false;
665 QString mLabelText;
666
668 double mOverrunDistance = 0;
670 double mOverrunSmoothDistance = 0;
671
672 QgsLabeling::LinePlacementFlags mArrangementFlags = QgsLabeling::LinePlacementFlags();
673 QgsLabeling::PolygonPlacementFlags mPolygonPlacementFlags = QgsLabeling::PolygonPlacementFlag::AllowPlacementInsideOfPolygon;
674
675 private:
676
678 geos::unique_ptr mPermissibleZoneGeos;
679
680 // TODO - not required when QgsGeometry caches geos preparedness
681 geos::prepared_unique_ptr mPermissibleZoneGeosPrepared;
682
683 QgsFeature mFeature;
684
685 const QgsSymbol *mSymbol = nullptr;
686
687 bool mLabelAllParts = false;
688
689 QgsLabelObstacleSettings mObstacleSettings{};
690
691 QgsPointXY mAnchorPosition;
692
693 double mLineAnchorPercent = 0.5;
696
698 bool mAllowDegradedPlacement = false;
699
700 QgsCoordinateReferenceSystem mOriginalFeatureCrs;
701
702 double mMinimumSize = 0.0;
703
704};
705
706#endif // QGSLABELFEATURE_H
LabelOffsetType
Behavior modifier for label offset and distance, only applies in some label placement modes.
Definition qgis.h:608
@ FromPoint
Offset distance applies from point geometry.
LabelOverlapHandling
Label overlap handling.
Definition qgis.h:546
@ PreventOverlap
Do not allow labels to overlap other labels.
The QgsAbstractLabelProvider class is an interface class.
This class represents a coordinate reference system (CRS).
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:56
A geometry is the spatial representation of a feature.
The QgsLabelFeature class describes a feature that should be used within the labeling engine.
void setMinimumSize(double size)
Sets the minimum size (in map unit) for a feature to be labelled.
QSizeF mSymbolSize
Size of associated rendered symbol, if applicable.
void setDistLabel(double dist)
Applies to "around point" placement strategy or linestring features.
void setArrangementFlags(QgsLabeling::LinePlacementFlags flags)
Sets the feature's arrangement flags.
void setAlwaysShow(bool enabled)
Sets whether label should be always shown (sets very high label priority)
QgsPointXY mFixedPosition
fixed position for the label (instead of automatic placement)
QSizeF mRotatedSize
Width and height of the label when rotated between 45 to 135 and 235 to 315 degrees;.
void setRepeatDistance(double dist)
Applies only to linestring features - set after what distance (in map units) the labels should be rep...
QVector< Qgis::LabelPredefinedPointPosition > mPredefinedPositionOrder
Ordered list of predefined positions for label (only for OrderedPositionsAroundPoint placement)
double fixedAngle() const
Angle in radians of the fixed angle (relevant only if hasFixedAngle() returns true)
const QSizeF & symbolSize() const
Returns the size of the rendered symbol associated with this feature, if applicable.
QVector< Qgis::LabelPredefinedPointPosition > predefinedPositionOrder() const
Returns the priority ordered list of predefined positions for label candidates.
double repeatDistance() const
Applies only to linestring features - after what distance (in map units) the labels should be repeate...
void setSymbolSize(QSizeF size)
Sets the size of the rendered symbol associated with this feature.
QgsLabeling::PolygonPlacementFlags polygonPlacementFlags() const
Returns the polygon placement flags, which dictate how polygon labels can be placed.
QgsPointXY positionOffset() const
Applies only to "offset from point" placement strategy.
void setLayer(pal::Layer *layer)
Assign PAL layer to the label feature. Should be only used internally in PAL.
QgsMargins mVisualMargin
Visual margin of label contents.
bool hasFixedQuadrant() const
Returns whether the quadrant for the label is fixed.
void setZIndex(double zIndex)
Sets the label's z-index.
void setLineAnchorType(QgsLabelLineSettings::AnchorType type)
Sets the line anchor type, which dictates how the lineAnchorPercent() setting is handled.
bool hasFixedAngle() const
Whether the label should use a fixed angle instead of using angle from automatic placement.
pal::Layer * layer() const
Gets PAL layer of the label feature. Should be only used internally in PAL.
QgsFeatureId mId
Associated ID unique within the parent label provider.
QgsLabeling::LinePlacementFlags arrangementFlags() const
Returns the feature's arrangement flags.
bool alwaysShow() const
Whether label should be always shown (sets very high label priority)
double lineAnchorPercent() const
Returns the percent along the line at which labels should be placed, for line labels only.
void setOffsetType(Qgis::LabelOffsetType type)
Sets the offset type, which determines how offsets and distance to label behaves.
const GEOSPreparedGeometry * permissibleZonePrepared() const
Returns a GEOS prepared geometry representing the label's permissibleZone().
void setLabelAllParts(bool labelAllParts)
Sets whether all parts of the feature should be labeled.
void setSymbol(const QgsSymbol *symbol)
Sets the feature symbol associated with this label.
void setHasFixedAngle(bool enabled)
Sets whether the label should use a fixed angle instead of using angle from automatic placement.
QgsLabelLineSettings::AnchorType lineAnchorType() const
Returns the line anchor type, which dictates how the lineAnchorPercent() setting is handled.
double distLabel() const
Applies to "around point" placement strategy or linestring features.
GEOSGeometry * geometry() const
Gets access to the associated geometry.
void setPredefinedPositionOrder(const QVector< Qgis::LabelPredefinedPointPosition > &order)
Sets the priority ordered list of predefined positions for label candidates.
bool allowDegradedPlacement() const
Returns true if the label can be placed in inferior fallback positions if it cannot otherwise be plac...
QPointF quadOffset() const
Applies to "offset from point" placement strategy and "around point" (in case hasFixedQuadrant() retu...
QgsGeometry mPermissibleZone
Optional geometry to use for label's permissible zone.
void setPositionOffset(const QgsPointXY &offset)
Applies only to "offset from point" placement strategy.
Qgis::LabelOverlapHandling overlapHandling() const
Returns the technique to use for handling overlapping labels for the feature.
QgsPointXY mPositionOffset
offset of label from the feature (only for "offset from point" placement)
void setOverlapHandling(Qgis::LabelOverlapHandling handling)
Sets the technique to use for handling overlapping labels for the feature.
void setLineAnchorPercent(double percent)
Sets the percent along the line at which labels should be placed, for line labels only.
void setLineAnchorTextPoint(QgsLabelLineSettings::AnchorTextPoint point)
Sets the line anchor text point, which dictates which part of the label text should be placed at the ...
QgsFeatureId id() const
Identifier of the label (unique within the parent label provider)
QPointF mQuadOffset
whether the side of the label is fixed (only for "around point" placement)
QSizeF mSize
Width and height of the label.
double priority() const
Returns the feature's labeling priority.
void setAllowDegradedPlacement(bool allow)
Sets whether the label can be placed in inferior fallback positions if it cannot otherwise be placed.
double zIndex() const
Returns the label's z-index.
void setHasFixedQuadrant(bool enabled)
Sets whether the quadrant for the label must be respected.
void setPriority(double priority)
Sets the priority for labeling the feature.
void setQuadOffset(QPointF quadOffset)
Set which side of the point to use.
double minimumSize() const
Returns the minimum size (in map unit) for a feature to be labelled.
QgsGeometry permissibleZone() const
Returns the label's permissible zone geometry.
void setPolygonPlacementFlags(QgsLabeling::PolygonPlacementFlags flags)
Sets the polygon placement flags, which dictate how polygon labels can be placed.
bool hasFixedPosition() const
Whether the label should use a fixed position instead of being automatically placed.
void setHasFixedPosition(bool enabled)
Sets whether the label should use a fixed position instead of being automatically placed.
geos::unique_ptr mGeometry
Geometry of the feature to be labelled.
const QgsMargins & visualMargin() const
Returns the visual margin for the label feature.
void setFixedPosition(const QgsPointXY &point)
Sets coordinates of the fixed position (relevant only if hasFixedPosition() returns true)
QString labelText() const
Text of the label.
void setVisualMargin(const QgsMargins &margin)
Sets the visual margin for the label feature.
Qgis::LabelOffsetType offsetType() const
Returns the offset type, which determines how offsets and distance to label behaves.
void setLabelText(const QString &text)
Sets text of the label.
const QgsSymbol * symbol() const
Returns the feature symbol associated with this label.
void setRotatedSize(QSizeF size)
Sets an alternate label size to be used when a label rotation angle is between 45 to 135 and 235 to 3...
bool labelAllParts() const
Returns true if all parts of the feature should be labeled.
QString mLabelText
text of the label
QgsPointXY fixedPosition() const
Coordinates of the fixed position (relevant only if hasFixedPosition() returns true)
void setFixedAngle(double angle)
Sets the angle in radians of the fixed angle (relevant only if hasFixedAngle() returns true).
AnchorType
Line anchor types.
@ HintOnly
Line anchor is a hint for preferred placement only, but other placements close to the hint are permit...
AnchorTextPoint
Anchor point of label text.
@ CenterOfText
Anchor using center of text.
Contains settings related to how the label engine treats features as obstacles.
@ AllowPlacementInsideOfPolygon
Labels can be placed inside a polygon feature.
Definition qgslabeling.h:55
The QgsMargins class defines the four margins of a rectangle.
Definition qgsmargins.h:38
A class to represent a 2D point.
Definition qgspointxy.h:59
Contains information about the context of a rendering operation.
Abstract base class for all rendered symbols.
Definition qgssymbol.h:93
A set of features which influence the labeling process.
Definition layer.h:63
std::unique_ptr< const GEOSPreparedGeometry, GeosDeleter > prepared_unique_ptr
Scoped GEOS prepared geometry pointer.
Definition qgsgeos.h:79
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition qgsgeos.h:74
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
const QgsCoordinateReferenceSystem & crs