QGIS API Documentation 3.39.0-Master (47f7b3a4989)
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 "qgsfeature.h"
28
29namespace pal
30{
31 class Layer;
32}
33
36class QgsGeometry;
37
38
55class CORE_EXPORT QgsLabelFeature
56{
57 public:
58
70 QgsLabelFeature( QgsFeatureId id, geos::unique_ptr geometry, QSizeF size );
71
72 virtual ~QgsLabelFeature();
73
75 QgsFeatureId id() const { return mId; }
76
78 GEOSGeometry *geometry() const { return mGeometry.get(); }
79
88 void setPermissibleZone( const QgsGeometry &geometry );
89
97 QgsGeometry permissibleZone() const { return mPermissibleZone; }
98
103 //TODO - remove when QgsGeometry caches GEOS preparedness
104 const GEOSPreparedGeometry *permissibleZonePrepared() const { return mPermissibleZoneGeosPrepared.get(); }
105
111 QSizeF size( double angle = 0.0 ) const;
112
120 QRectF outerBounds() const { return mOuterBounds; }
121
129 void setOuterBounds( const QRectF &bounds ) { mOuterBounds = bounds; }
130
141 void setVisualMargin( const QgsMargins &margin ) { mVisualMargin = margin; }
142
147 const QgsMargins &visualMargin() const { return mVisualMargin; }
148
155 void setSymbolSize( QSizeF size ) { mSymbolSize = size; }
156
164 const QSizeF &symbolSize() const { return mSymbolSize; }
165
172 double priority() const { return mPriority; }
173
181 void setPriority( double priority ) { mPriority = priority; }
182
188 double zIndex() const { return mZIndex; }
189
196 void setZIndex( double zIndex ) { mZIndex = zIndex; }
197
199 bool hasFixedPosition() const { return mHasFixedPosition; }
201 void setHasFixedPosition( bool enabled ) { mHasFixedPosition = enabled; }
203 QgsPointXY fixedPosition() const { return mFixedPosition; }
204
206 void setFixedPosition( const QgsPointXY &point ) { mFixedPosition = point; }
207
214 QgsPointXY anchorPosition() const;
215
222 void setAnchorPosition( const QgsPointXY &anchorPosition );
223
225 bool hasFixedAngle() const { return mHasFixedAngle; }
227 void setHasFixedAngle( bool enabled ) { mHasFixedAngle = enabled; }
228
233 double fixedAngle() const { return mFixedAngle; }
234
239 void setFixedAngle( double angle ) { mFixedAngle = angle; }
240
247 bool hasFixedQuadrant() const { return mHasFixedQuadrant; }
248
255 void setHasFixedQuadrant( bool enabled ) { mHasFixedQuadrant = enabled; }
256
263 QPointF quadOffset() const { return mQuadOffset; }
264
269 void setQuadOffset( QPointF quadOffset ) { mQuadOffset = quadOffset; }
270
275 QgsPointXY positionOffset() const { return mPositionOffset; }
276
281 void setPositionOffset( const QgsPointXY &offset ) { mPositionOffset = offset; }
282
289 Qgis::LabelOffsetType offsetType() const { return mOffsetType; }
290
297 void setOffsetType( Qgis::LabelOffsetType type ) { mOffsetType = type; }
298
306 double distLabel() const { return mDistLabel; }
307
315 void setDistLabel( double dist ) { mDistLabel = dist; }
316
331 double maximumDistance() const { return mMaximumDistance; }
332
347 void setMaximumDistance( double distance ) { mMaximumDistance = distance; }
348
354 QVector< Qgis::LabelPredefinedPointPosition > predefinedPositionOrder() const { return mPredefinedPositionOrder; }
355
361 void setPredefinedPositionOrder( const QVector< Qgis::LabelPredefinedPointPosition > &order ) { mPredefinedPositionOrder = order; }
362
367 double repeatDistance() const { return mRepeatDistance; }
368
373 void setRepeatDistance( double dist ) { mRepeatDistance = dist; }
374
376 bool alwaysShow() const { return mAlwaysShow; }
378 void setAlwaysShow( bool enabled ) { mAlwaysShow = enabled; }
379
384 Qgis::LabelLinePlacementFlags arrangementFlags() const { return mArrangementFlags; }
385
391 void setArrangementFlags( Qgis::LabelLinePlacementFlags flags ) { mArrangementFlags = flags; }
392
399 Qgis::LabelPolygonPlacementFlags polygonPlacementFlags() const { return mPolygonPlacementFlags; }
400
407 void setPolygonPlacementFlags( Qgis::LabelPolygonPlacementFlags flags ) { mPolygonPlacementFlags = flags; }
408
415 QString labelText() const { return mLabelText; }
417 void setLabelText( const QString &text ) { mLabelText = text; }
418
420 pal::Layer *layer() const { return mLayer; }
422 void setLayer( pal::Layer *layer ) { mLayer = layer; }
423
425 QgsAbstractLabelProvider *provider() const;
426
433 QgsFeature feature() const;
434
441 void setFeature( const QgsFeature &feature );
442
449 const QgsSymbol *symbol() const { return mSymbol; }
450
458 void setSymbol( const QgsSymbol *symbol ) { mSymbol = symbol; }
459
468 double overrunDistance() const;
469
478 void setOverrunDistance( double distance );
479
488 double overrunSmoothDistance() const;
489
498 void setOverrunSmoothDistance( double distance );
499
512 double lineAnchorPercent() const { return mLineAnchorPercent; }
513
526 void setLineAnchorPercent( double percent ) { mLineAnchorPercent = percent; }
527
535 QgsLabelLineSettings::AnchorType lineAnchorType() const { return mLineAnchorType; }
536
544 void setLineAnchorType( QgsLabelLineSettings::AnchorType type ) { mLineAnchorType = type; }
545
554 QgsLabelLineSettings::AnchorTextPoint lineAnchorTextPoint() const;
555
564 void setLineAnchorTextPoint( QgsLabelLineSettings::AnchorTextPoint point ) { mAnchorTextPoint = point; }
565
571 bool labelAllParts() const { return mLabelAllParts; }
572
578 void setLabelAllParts( bool labelAllParts ) { mLabelAllParts = labelAllParts; }
579
585 void setRotatedSize( QSizeF size ) { mRotatedSize = size; }
586
593 const QgsLabelObstacleSettings &obstacleSettings() const;
594
601 void setObstacleSettings( const QgsLabelObstacleSettings &settings );
602
609 QgsCoordinateReferenceSystem originalFeatureCrs() const;
610
617 void setOriginalFeatureCrs( const QgsCoordinateReferenceSystem &crs );
618
626 double minimumSize() const { return mMinimumSize; }
627
635 void setMinimumSize( double size ) { mMinimumSize = size; }
636
643 Qgis::LabelOverlapHandling overlapHandling() const { return mOverlapHandling; }
644
651 void setOverlapHandling( Qgis::LabelOverlapHandling handling ) { mOverlapHandling = handling; }
652
663 bool allowDegradedPlacement() const { return mAllowDegradedPlacement; }
664
671 Qgis::LabelPrioritization prioritization() const { return mPrioritization; }
672
679 void setPrioritization( Qgis::LabelPrioritization prioritization ) { mPrioritization = prioritization; }
680
691 void setAllowDegradedPlacement( bool allow ) { mAllowDegradedPlacement = allow; }
692
693 protected:
695 pal::Layer *mLayer = nullptr;
696
700 geos::unique_ptr mGeometry;
704 QSizeF mSize;
714 double mPriority = -1;
716 double mZIndex = 0;
718 bool mHasFixedPosition = false;
722 bool mHasFixedAngle = false;
724 double mFixedAngle = 0;
726 bool mHasFixedQuadrant = false;
728 QPointF mQuadOffset;
732 double mDistLabel = 0;
733
735 double mMaximumDistance = 0;
736
740 QVector< Qgis::LabelPredefinedPointPosition > mPredefinedPositionOrder;
742 double mRepeatDistance = 0;
744 bool mAlwaysShow = false;
746 QString mLabelText;
747
749 double mOverrunDistance = 0;
751 double mOverrunSmoothDistance = 0;
752
755
756 private:
757
759 geos::unique_ptr mPermissibleZoneGeos;
760
761 // TODO - not required when QgsGeometry caches geos preparedness
762 geos::prepared_unique_ptr mPermissibleZoneGeosPrepared;
763
764 QgsFeature mFeature;
765
766 const QgsSymbol *mSymbol = nullptr;
767
768 bool mLabelAllParts = false;
769
770 QgsLabelObstacleSettings mObstacleSettings{};
771
772 QgsPointXY mAnchorPosition;
773
774 double mLineAnchorPercent = 0.5;
777
779 bool mAllowDegradedPlacement = false;
781
782 QgsCoordinateReferenceSystem mOriginalFeatureCrs;
783
784 double mMinimumSize = 0.0;
785
786};
787
788#endif // QGSLABELFEATURE_H
LabelOffsetType
Behavior modifier for label offset and distance, only applies in some label placement modes.
Definition qgis.h:995
@ FromPoint
Offset distance applies from point geometry.
LabelPrioritization
Label prioritization.
Definition qgis.h:934
@ PreferCloser
Prefer closer labels, falling back to alternate positions before larger distances.
@ AllowPlacementInsideOfPolygon
Labels can be placed inside a polygon feature.
QFlags< LabelLinePlacementFlag > LabelLinePlacementFlags
Line placement flags, which control how candidates are generated for a linear feature.
Definition qgis.h:1044
QFlags< LabelPolygonPlacementFlag > LabelPolygonPlacementFlags
Polygon placement flags, which control how candidates are generated for a polygon feature.
Definition qgis.h:1066
LabelOverlapHandling
Label overlap handling.
Definition qgis.h:921
@ 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:58
A geometry is the spatial representation of a feature.
The QgsLabelFeature class describes a feature that should be used within the labeling engine.
double maximumDistance() const
Returns the maximum distance which labels are allowed to be from their corresponding points.
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 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...
Qgis::LabelPolygonPlacementFlags polygonPlacementFlags() const
Returns the polygon placement flags, which dictate how polygon labels can be placed.
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)
void setPrioritization(Qgis::LabelPrioritization prioritization)
Sets the label prioritization technique.
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.
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.
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 setMaximumDistance(double distance)
Sets the maximum distance which labels are allowed to be from their corresponding points.
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.
void setOuterBounds(const QRectF &bounds)
Sets the extreme outer bounds of the label feature, including any surrounding content like borders or...
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)
Qgis::LabelPrioritization prioritization() const
Returns the label prioritization technique.
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.
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)
Qgis::LabelLinePlacementFlags arrangementFlags() const
Returns the feature's arrangement flags.
QString labelText() const
Text of the label.
QRectF mOuterBounds
Extreme outer bounds of the label feature, including any surrounding content like borders or backgrou...
void setArrangementFlags(Qgis::LabelLinePlacementFlags flags)
Sets the feature's arrangement flags.
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.
QRectF outerBounds() const
Returns the extreme outer bounds of the label feature, including any surrounding content like borders...
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...
void setPolygonPlacementFlags(Qgis::LabelPolygonPlacementFlags flags)
Sets the polygon placement flags, which dictate how polygon labels can be placed.
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.
The QgsMargins class defines the four margins of a rectangle.
Definition qgsmargins.h:37
A class to represent a 2D point.
Definition qgspointxy.h:60
Contains information about the context of a rendering operation.
Abstract base class for all rendered symbols.
Definition qgssymbol.h:94
A set of features which influence the labeling process.
Definition layer.h:63
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
const QgsCoordinateReferenceSystem & crs
struct GEOSGeom_t GEOSGeometry
Definition util.h:41