QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
qgspallabeling.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgspallabeling.h
3  Smart labeling for vector layers
4  -------------------
5  begin : June 2009
6  copyright : (C) Martin Dobias
7  email : wonder dot sk at gmail dot com
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 #ifndef QGSPALLABELING_H
19 #define QGSPALLABELING_H
20 
21 #include "qgis_core.h"
22 #include "qgis_sip.h"
23 #include <QString>
24 #include <QFont>
25 #include <QFontDatabase>
26 #include <QColor>
27 #include <QHash>
28 #include <QList>
29 #include <QPainter>
30 #include <QRectF>
31 #include <QMap>
32 #include "qgsfeature.h"
33 #include "qgsgeometry.h"
34 #include "qgsfields.h"
36 #include "qgspointxy.h"
37 #include "qgsmapunitscale.h"
38 #include "qgsstringutils.h"
39 #include "qgstextformat.h"
40 #include "qgspropertycollection.h"
44 #include "qgslabellinesettings.h"
45 #include "qgslabeling.h"
46 #include "qgslabelposition.h"
47 #include "qgscoordinatetransform.h"
48 
49 class QgsTextDocument;
50 
51 namespace pal SIP_SKIP
52 {
53  class Pal;
54  class Layer;
55  class LabelPosition;
56 }
57 
59 class QgsRectangle;
60 class QgsMapToPixel;
61 class QgsFeature;
63 class QgsVectorLayer;
64 class QgsExpression;
65 class QFontMetricsF;
66 class QPainter;
67 class QPicture;
68 class QgsGeometry;
70 class QgsLabelSearchTree;
71 class QgsMapSettings;
72 class QgsLabelFeature;
73 class QgsLabelingEngine;
76 class QgsDxfExport;
79 class QgsCallout;
80 
86 class CORE_EXPORT QgsPalLayerSettings
87 {
88  public:
92 
94  QgsPalLayerSettings &operator=( const QgsPalLayerSettings &s );
95 
96  //TODO QGIS 4.0 - remove, replaced by QgsLabeling::LinePlacementFlags
97 
104  {
105  OnLine = 1,
106  AboveLine = 2,
109  BelowLine = 4,
112  MapOrientation = 8,
115  };
116 
119  {
122  SymbolBelow
123  };
124 
125  //TODO QGIS 4.0 - Remove -- moved to QgsLabelEngineObstacleSettings
126 
132  {
133  PolygonInterior,
135  PolygonBoundary,
137  PolygonWhole
141  };
142 
144  enum Property
145  {
146  // text style
147  Size = 0,
148  Bold = 1,
149  Italic = 2,
150  Underline = 3,
151  Color = 4,
152  Strikeout = 5,
153  Family = 6,
154  FontStyle = 21,
155  FontSizeUnit = 22,
156  FontTransp = 18,
157  FontOpacity = 92,
158  FontCase = 27,
159  FontLetterSpacing = 28,
160  FontWordSpacing = 29,
161  FontBlendMode = 30,
162  FontStretchFactor = 113,
163 
164  // text formatting
165  MultiLineWrapChar = 31,
166  AutoWrapLength = 101,
167  MultiLineHeight = 32,
168  MultiLineAlignment = 33,
169  TextOrientation = 110,
170  DirSymbDraw = 34,
171  DirSymbLeft = 35,
172  DirSymbRight = 36,
173  DirSymbPlacement = 37,
174  DirSymbReverse = 38,
175  NumFormat = 39,
176  NumDecimals = 40,
177  NumPlusSign = 41,
178 
179  // text buffer
180  BufferDraw = 42,
181  BufferSize = 7,
182  BufferUnit = 43,
183  BufferColor = 8,
184  BufferTransp = 19,
185  BufferOpacity = 94,
186  BufferJoinStyle = 44,
187  BufferBlendMode = 45,
188 
189  // mask buffer
190  MaskEnabled = 104,
191  MaskBufferSize = 105,
192  MaskBufferUnit = 106,
193  MaskOpacity = 107,
194  MaskJoinStyle = 108,
195 
196  // background
197  ShapeDraw = 46,
198  ShapeKind = 47,
199  ShapeSVGFile = 48,
200  ShapeSizeType = 49,
201  ShapeSizeX = 50,
202  ShapeSizeY = 85,
203  ShapeSizeUnits = 51,
204  ShapeRotationType = 52,
205  ShapeRotation = 53,
206  ShapeOffset = 54,
207  ShapeOffsetUnits = 55,
208  ShapeRadii = 56,
209  ShapeRadiiUnits = 57,
210  ShapeTransparency = 63,
211  ShapeOpacity = 93,
212  ShapeBlendMode = 64,
213  ShapeFillColor = 58,
214  ShapeStrokeColor = 59,
215  ShapeStrokeWidth = 60,
216  ShapeStrokeWidthUnits = 61,
217  ShapeJoinStyle = 62,
218 
219  // drop shadow
220  ShadowDraw = 65,
221  ShadowUnder = 66,
222  ShadowOffsetAngle = 67,
223  ShadowOffsetDist = 68,
224  ShadowOffsetUnits = 69,
225  ShadowRadius = 70,
226  ShadowRadiusUnits = 71,
227  ShadowTransparency = 72,
228  ShadowOpacity = 95,
229  ShadowScale = 73,
230  ShadowColor = 74,
231  ShadowBlendMode = 75,
232 
233  // placement
234  CentroidWhole = 76,
235  OffsetQuad = 77,
236  OffsetXY = 78,
237  OffsetUnits = 80,
238  LabelDistance = 13,
239  DistanceUnits = 81,
240  OffsetRotation = 82,
241  CurvedCharAngleInOut = 83,
242  // (data defined only)
243  PositionX = 9,
244  PositionY = 10,
245  PositionPoint = 114,
246  Hali = 11,
247  Vali = 12,
248  Rotation = 14,
249  LabelRotation = 96,
250  RepeatDistance = 84,
251  RepeatDistanceUnit = 86,
252  Priority = 87,
253  PredefinedPositionOrder = 91,
254  LinePlacementOptions = 99,
255  OverrunDistance = 102,
256  LabelAllParts = 103,
257  PolygonLabelOutside = 109,
258  LineAnchorPercent = 111,
259  LineAnchorClipping = 112,
260  LineAnchorType = 115,
261  LineAnchorTextPoint = 116,
262 
263  // rendering
264  ScaleVisibility = 23,
265  MinScale = 16,
266  MinimumScale = 97,
267  MaxScale = 17,
268  MaximumScale = 98,
269  FontLimitPixel = 24,
270  FontMinPixel = 25,
271  FontMaxPixel = 26,
272  IsObstacle = 88,
273  ObstacleFactor = 89,
274  ZIndex = 90,
275  CalloutDraw = 100,
276 
277  AllowDegradedPlacement = 117,
278  OverlapHandling = 118,
279 
280  // (data defined only)
281  Show = 15,
282  AlwaysShow = 20
283  };
284 
285 
297  bool prepare( QgsRenderContext &context, QSet<QString> &attributeNames SIP_INOUT, const QgsFields &fields, const QgsMapSettings &mapSettings, const QgsCoordinateReferenceSystem &crs );
298 
303  QSet<QString> referencedFields( const QgsRenderContext &context ) const;
304 
313  void startRender( QgsRenderContext &context );
314 
322  void stopRender( QgsRenderContext &context );
323 
329  bool containsAdvancedEffects() const;
330 
335  static const QgsPropertiesDefinition &propertyDefinitions();
336 
345  bool drawLabels = true;
346 
347  //-- text style
348 
354  QString fieldName;
355 
360  bool isExpression = false;
361 
365  QgsExpression *getLabelExpression();
366 
370  Q_DECL_DEPRECATED QColor previewBkgrdColor = Qt::white;
371 
375  bool useSubstitutions = false;
376 
377  //-- text formatting
378 
383  QString wrapChar;
384 
392  int autoWrapLength = 0;
393 
404  bool useMaxLineLengthForAutoWrap = true;
405 
407  Qgis::LabelMultiLineAlignment multilineAlign = Qgis::LabelMultiLineAlignment::FollowPlacement;
408 
415  bool formatNumbers = false;
416 
422  int decimals = 3;
423 
429  bool plusSign = false;
430 
431  //-- placement
432 
435 
442  QgsLabeling::PolygonPlacementFlags polygonPlacementFlags() const { return mPolygonPlacementFlags; }
443 
450  void setPolygonPlacementFlags( QgsLabeling::PolygonPlacementFlags flags ) { mPolygonPlacementFlags = flags; }
451 
456  bool centroidWhole = false;
457 
463  bool centroidInside = false;
464 
471  QVector< Qgis::LabelPredefinedPointPosition > predefinedPositionOrder SIP_SKIP;
472 
476  bool fitInPolygonOnly = false;
477 
483  double dist = 0;
484 
491 
498 
501 
507  double repeatDistance = 0;
508 
515 
522 
526  Qgis::LabelQuadrantPosition quadOffset = Qgis::LabelQuadrantPosition::Over;
527 
534  double xOffset = 0;
535 
542  double yOffset = 0;
543 
551 
559 
561  double angleOffset = 0;
562 
564  bool preserveRotation = true;
565 
571  QgsUnitTypes::AngleUnit rotationUnit() const;
572 
578  void setRotationUnit( QgsUnitTypes::AngleUnit angleUnit );
579 
584  double maxCurvedCharAngleIn = 25.0;
585 
590  double maxCurvedCharAngleOut = -25.0;
591 
596  int priority = 5;
597 
598  //-- rendering
599 
605  bool scaleVisibility = false;
606 
617  double maximumScale = 0;
618 
629  double minimumScale = 0;
630 
636  bool fontLimitPixelSize = false;
637 
643  int fontMinPixelSize = 0;
644 
650  int fontMaxPixelSize = 10000;
651 
653  Qgis::UpsideDownLabelHandling upsidedownLabels = Qgis::UpsideDownLabelHandling::FlipUpsideDownLabels;
654 
659  bool labelPerPart = false;
660 
661  // TODO QGIS 4.0 - remove this junk
662 
663 #ifdef SIP_RUN
664  SIP_PROPERTY( name = limitNumLabels, get = _limitNumLabels, set = _setLimitNumLabels )
665  SIP_PROPERTY( name = maxNumLabels, get = _maxNumLabels, set = _setMaxNumLabels )
666  SIP_PROPERTY( name = minFeatureSize, get = _minFeatureSize, set = _setMinFeatureSize )
667  SIP_PROPERTY( name = obstacle, get = _getIsObstacle, set = _setIsObstacle )
668  SIP_PROPERTY( name = obstacleFactor, get = _getObstacleFactor, set = _setObstacleFactor )
669  SIP_PROPERTY( name = obstacleType, get = _getObstacleType, set = _setObstacleType )
670  SIP_PROPERTY( name = placementFlags, get = _getLinePlacementFlags, set = _setLinePlacementFlags )
671  SIP_PROPERTY( name = mergeLines, get = _getMergeLines, set = _setMergeLines )
672  SIP_PROPERTY( name = addDirectionSymbol, get = _getAddDirectionSymbol, set = _setAddDirectionSymbol )
673  SIP_PROPERTY( name = leftDirectionSymbol, get = _getLeftDirectionSymbol, set = _setLeftDirectionSymbol )
674  SIP_PROPERTY( name = rightDirectionSymbol, get = _getRightDirectionSymbol, set = _setRightDirectionSymbol )
675  SIP_PROPERTY( name = reverseDirectionSymbol, get = _getReverseDirectionSymbol, set = _setReverseDirectionSymbol )
676  SIP_PROPERTY( name = placeDirectionSymbol, get = _getPlaceDirectionSymbol, set = _setPlaceDirectionSymbol )
677 
678  SIP_PROPERTY( name = overrunDistance, get = _getOverrunDistance, set = _setOverrunDistance )
679  SIP_PROPERTY( name = overrunDistanceUnit, get = _getOverrunDistanceUnit, set = _setOverrunDistanceUnit )
680  SIP_PROPERTY( name = overrunDistanceMapUnitScale, get = _getOverrunDistanceMapUnitScale, set = _setOverrunDistanceMapUnitScale )
681  SIP_PROPERTY( name = displayAll, get = _getDisplayAll, set = _setDisplayAll )
682 #endif
683 
685  bool _limitNumLabels() const { return mThinningSettings.limitNumberOfLabelsEnabled(); }
686  void _setLimitNumLabels( bool limit ) { mThinningSettings.setLimitNumberLabelsEnabled( limit ); }
687  int _maxNumLabels() const { return mThinningSettings.maximumNumberLabels(); }
688  void _setMaxNumLabels( int max ) { mThinningSettings.setMaximumNumberLabels( max ); }
689  double _minFeatureSize() const { return mThinningSettings.minimumFeatureSize(); }
690  void _setMinFeatureSize( double size ) { mThinningSettings.setMinimumFeatureSize( size ); }
691  bool _getIsObstacle() const { return mObstacleSettings.isObstacle(); }
692  void _setIsObstacle( bool obstacle ) { mObstacleSettings.setIsObstacle( obstacle ); }
693  double _getObstacleFactor() const { return mObstacleSettings.factor(); }
694  void _setObstacleFactor( double factor ) { mObstacleSettings.setFactor( factor ); }
695  ObstacleType _getObstacleType() const { return static_cast< ObstacleType>( mObstacleSettings.type() ); }
696  void _setObstacleType( ObstacleType type ) { mObstacleSettings.setType( static_cast< QgsLabelObstacleSettings::ObstacleType>( type ) ); }
697  unsigned int _getLinePlacementFlags() const { return static_cast< unsigned int >( mLineSettings.placementFlags() ); }
698  void _setLinePlacementFlags( unsigned int flags ) { mLineSettings.setPlacementFlags( static_cast< QgsLabeling::LinePlacementFlags >( flags ) ); }
699  bool _getMergeLines() const { return mLineSettings.mergeLines(); }
700  void _setMergeLines( bool merge ) { mLineSettings.setMergeLines( merge ); }
701  bool _getAddDirectionSymbol() const { return mLineSettings.addDirectionSymbol(); }
702  void _setAddDirectionSymbol( bool add ) { mLineSettings.setAddDirectionSymbol( add ); }
703  QString _getLeftDirectionSymbol() const { return mLineSettings.leftDirectionSymbol(); }
704  void _setLeftDirectionSymbol( const QString &symbol ) { mLineSettings.setLeftDirectionSymbol( symbol ); }
705  QString _getRightDirectionSymbol() const { return mLineSettings.rightDirectionSymbol(); }
706  void _setRightDirectionSymbol( const QString &symbol ) { mLineSettings.setRightDirectionSymbol( symbol ); }
707  bool _getReverseDirectionSymbol() const { return mLineSettings.reverseDirectionSymbol(); }
708  void _setReverseDirectionSymbol( bool reverse ) { mLineSettings.setReverseDirectionSymbol( reverse ); }
710  DirectionSymbols _getPlaceDirectionSymbol() const { return static_cast< DirectionSymbols>( mLineSettings.directionSymbolPlacement() ); }
711  void _setPlaceDirectionSymbol( DirectionSymbols placement ) { mLineSettings.setDirectionSymbolPlacement( static_cast< QgsLabelLineSettings::DirectionSymbolPlacement>( placement ) ); }
713  double _getOverrunDistance() const { return mLineSettings.overrunDistance(); }
714  void _setOverrunDistance( double distance ) { mLineSettings.setOverrunDistance( distance ); }
715  QgsUnitTypes::RenderUnit _getOverrunDistanceUnit() const { return mLineSettings.overrunDistanceUnit(); }
716  void _setOverrunDistanceUnit( QgsUnitTypes::RenderUnit unit ) { mLineSettings.setOverrunDistanceUnit( unit ); }
717  QgsMapUnitScale _getOverrunDistanceMapUnitScale() const { return mLineSettings.overrunDistanceMapUnitScale(); }
718  void _setOverrunDistanceMapUnitScale( const QgsMapUnitScale &scale ) { mLineSettings.setOverrunDistanceMapUnitScale( scale ); }
719  bool _getDisplayAll() const { return mPlacementSettings.overlapHandling() == Qgis::LabelOverlapHandling::AllowOverlapIfRequired; }
720  void _setDisplayAll( bool display ) { mPlacementSettings.setOverlapHandling( display ? Qgis::LabelOverlapHandling::AllowOverlapIfRequired : Qgis::LabelOverlapHandling::PreventOverlap ); mPlacementSettings.setAllowDegradedPlacement( display ); }
722 
724  double zIndex = 0;
725 
728 
730  QgsWkbTypes::GeometryType geometryGeneratorType = QgsWkbTypes::GeometryType::PointGeometry;
731 
733  bool geometryGeneratorEnabled = false;
734 
740 
745  void setLegendString( const QString &legendString ) { mLegendString = legendString; }
746 
751  QString legendString() const { return mLegendString; }
752 
759 #ifndef SIP_RUN
760  void calculateLabelSize( const QFontMetricsF *fm, const QString &text, double &labelX, double &labelY, const QgsFeature *f = nullptr, QgsRenderContext *context = nullptr, double *rotatedLabelX SIP_OUT = nullptr, double *rotatedLabelY SIP_OUT = nullptr,
761  QgsTextDocument *document = nullptr );
762 #else
763  void calculateLabelSize( const QFontMetricsF *fm, const QString &text, double &labelX, double &labelY, const QgsFeature *f = nullptr, QgsRenderContext *context = nullptr, double *rotatedLabelX SIP_OUT = nullptr, double *rotatedLabelY SIP_OUT = nullptr );
764 #endif
765 
775  void registerFeature( const QgsFeature &f, QgsRenderContext &context );
776 
777 #ifndef SIP_RUN
778 
795  std::unique_ptr< QgsLabelFeature > registerFeatureWithDetails( const QgsFeature &feature, QgsRenderContext &context,
796  QgsGeometry obstacleGeometry = QgsGeometry(), const QgsSymbol *symbol = nullptr );
797 #endif
798 
803  void readXml( const QDomElement &elem, const QgsReadWriteContext &context );
804 
809  QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const;
810 
816  QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
817 
825  const QgsPropertyCollection &dataDefinedProperties() const SIP_SKIP { return mDataDefinedProperties; }
826 
834  void setDataDefinedProperties( const QgsPropertyCollection &collection ) { mDataDefinedProperties = collection; }
835 
841  const QgsTextFormat &format() const { return mFormat; }
842 
849  void setFormat( const QgsTextFormat &format ) { mFormat = format; }
850 
859  QgsCallout *callout() const { return mCallout.get(); }
860 
869  void setCallout( QgsCallout *callout SIP_TRANSFER );
870 
879  const QgsLabelLineSettings &lineSettings() const { return mLineSettings; } SIP_SKIP
880 
888  QgsLabelLineSettings &lineSettings() { return mLineSettings; }
889 
897  void setLineSettings( const QgsLabelLineSettings &settings ) { mLineSettings = settings; }
898 
905  const QgsLabelObstacleSettings &obstacleSettings() const { return mObstacleSettings; } SIP_SKIP
906 
912  QgsLabelObstacleSettings &obstacleSettings() { return mObstacleSettings; }
913 
919  void setObstacleSettings( const QgsLabelObstacleSettings &settings ) { mObstacleSettings = settings; }
920 
927  const QgsLabelThinningSettings &thinningSettings() const { return mThinningSettings; } SIP_SKIP
928 
934  QgsLabelThinningSettings &thinningSettings() { return mThinningSettings; }
935 
941  void setThinningSettings( const QgsLabelThinningSettings &settings ) { mThinningSettings = settings; }
942 
949  const QgsLabelPlacementSettings &placementSettings() const { return mPlacementSettings; } SIP_SKIP
950 
956  QgsLabelPlacementSettings &placementSettings() { return mPlacementSettings; }
957 
963  void setPlacementSettings( const QgsLabelPlacementSettings &settings ) { mPlacementSettings = settings; }
964 
973  static QPixmap labelSettingsPreviewPixmap( const QgsPalLayerSettings &settings, QSize size, const QString &previewText = QString(), int padding = 0 );
974 
981  Qgis::UnplacedLabelVisibility unplacedVisibility() const;
982 
989  void setUnplacedVisibility( Qgis::UnplacedLabelVisibility visibility );
990 
991  // temporary stuff: set when layer gets prepared or labeled
992  const QgsFeature *mCurFeat = nullptr;
994  int fieldIndex = 0;
995  const QgsMapToPixel *xform = nullptr;
997 
1001  int mFeaturesToLabel = 0; // total features that will probably be labeled, may be less (figured before PAL)
1002  int mFeatsSendingToPal = 0; // total features tested for sending into PAL (relative to maxNumLabels)
1003  int mFeatsRegPal = 0; // number of features registered in PAL, when using limitNumLabels
1004 
1005  private:
1006 
1007  friend class QgsVectorLayer; // to allow calling readFromLayerCustomProperties()
1008 
1013  void readFromLayerCustomProperties( QgsVectorLayer *layer );
1014 
1018  void readOldDataDefinedPropertyMap( QgsVectorLayer *layer, QDomElement *parentElem );
1019 
1023  void readOldDataDefinedProperty( QgsVectorLayer *layer, QgsPalLayerSettings::Property p );
1024 
1025  enum DataDefinedValueType
1026  {
1027  DDBool,
1028  DDInt,
1029  DDIntPos,
1030  DDDouble,
1031  DDDoublePos,
1032  DDRotation180,
1033  DDOpacity,
1034  DDString,
1035  DDUnits,
1036  DDColor,
1037  DDJoinStyle,
1038  DDBlendMode,
1039  DDPointF,
1040  DDSizeF,
1041  };
1042 
1043  // convenience data defined evaluation function
1044  bool dataDefinedValEval( DataDefinedValueType valType,
1046  QVariant &exprVal, QgsExpressionContext &context, const QVariant &originalValue = QVariant() );
1047 
1048  void parseTextStyle( QFont &labelFont,
1049  QgsUnitTypes::RenderUnit fontunits,
1050  QgsRenderContext &context );
1051 
1052  void parseTextBuffer( QgsRenderContext &context );
1053 
1054  void parseTextMask( QgsRenderContext &context );
1055 
1056  void parseTextFormatting( QgsRenderContext &context );
1057 
1058  void parseShapeBackground( QgsRenderContext &context );
1059 
1060  void parseDropShadow( QgsRenderContext &context );
1061 
1066  bool checkMinimumSizeMM( const QgsRenderContext &ct, const QgsGeometry &geom, double minSize ) const;
1067 
1071  std::unique_ptr< QgsLabelFeature > registerObstacleFeature( const QgsFeature &f, QgsRenderContext &context, const QgsGeometry &obstacleGeometry = QgsGeometry() );
1072 
1073  QMap<Property, QVariant> dataDefinedValues;
1074 
1076  QgsPropertyCollection mDataDefinedProperties;
1077 
1078  QgsExpression *expression = nullptr;
1079 
1080  std::unique_ptr< QFontDatabase > mFontDB;
1081 
1082  QgsTextFormat mFormat;
1083 
1084  std::unique_ptr< QgsCallout > mCallout;
1085 
1086  QgsLabelPlacementSettings mPlacementSettings;
1087  QgsLabelLineSettings mLineSettings;
1088  QgsLabelObstacleSettings mObstacleSettings;
1089  QgsLabelThinningSettings mThinningSettings;
1090 
1091  QgsLabeling::PolygonPlacementFlags mPolygonPlacementFlags = QgsLabeling::PolygonPlacementFlag::AllowPlacementInsideOfPolygon;
1092 
1093  QgsExpression mGeometryGeneratorExpression;
1094 
1095  bool mRenderStarted = false;
1096 
1097  QString mLegendString = QObject::tr( "Aa" );
1098 
1100 
1103 
1104  static void initPropertyDefinitions();
1105 };
1106 
1111 class CORE_EXPORT QgsLabelCandidate
1112 {
1113  public:
1114  QgsLabelCandidate( const QRectF &r, double c ): rect( r ), cost( c ) {}
1115 
1116  QRectF rect;
1117  double cost;
1118 };
1119 
1125 class CORE_EXPORT QgsPalLabeling
1126 {
1127  public:
1128 
1133  static bool staticWillUseLayer( const QgsMapLayer *layer );
1134 
1136  static void drawLabelCandidateRect( pal::LabelPosition *lp, QPainter *painter, const QgsMapToPixel *xform, QList<QgsLabelCandidate> *candidates = nullptr ) SIP_SKIP;
1137 
1148  static QgsGeometry prepareGeometry( const QgsGeometry &geometry, QgsRenderContext &context, const QgsCoordinateTransform &ct, const QgsGeometry &clipGeometry = QgsGeometry(), bool mergeLines = false ) SIP_FACTORY;
1149 
1160  static bool geometryRequiresPreparation( const QgsGeometry &geometry, QgsRenderContext &context, const QgsCoordinateTransform &ct, const QgsGeometry &clipGeometry = QgsGeometry(), bool mergeLines = false );
1161 
1174  static QStringList splitToLines( const QString &text, const QString &wrapCharacter, int autoWrapLength = 0, bool useMaxLineLengthWhenAutoWrapping = true );
1175 
1184  static QStringList splitToGraphemes( const QString &text );
1185 
1186  private:
1188  static void dataDefinedTextStyle( QgsPalLayerSettings &tmpLyr,
1189  const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1190 
1192  static void dataDefinedTextFormatting( QgsPalLayerSettings &tmpLyr,
1193  const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1194 
1196  static void dataDefinedTextBuffer( QgsPalLayerSettings &tmpLyr,
1197  const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1198 
1200  static void dataDefinedTextMask( QgsPalLayerSettings &tmpLyr,
1201  const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1202 
1204  static void dataDefinedShapeBackground( QgsPalLayerSettings &tmpLyr,
1205  const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1206 
1208  static void dataDefinedDropShadow( QgsPalLayerSettings &tmpLyr,
1209  const QMap< QgsPalLayerSettings::Property, QVariant > &ddValues );
1210 
1211  friend class QgsVectorLayerLabelProvider; // to allow calling the static methods above
1212  friend class QgsDxfExport; // to allow calling the static methods above
1213 
1222  static bool checkMinimumSizeMM( const QgsRenderContext &context, const QgsGeometry &geom, double minSize );
1223 
1224  friend class QgsPalLayerSettings;
1225 };
1226 
1227 
1228 #endif // QGSPALLABELING_H
QgsExpressionContext
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Definition: qgsexpressioncontext.h:406
qgsfields.h
QgsPalLayerSettings::ct
QgsCoordinateTransform ct
Definition: qgspallabeling.h:996
QgsPalLayerSettings::DirectionSymbols
DirectionSymbols
Definition: qgspallabeling.h:118
QgsUnitTypes::RenderUnit
RenderUnit
Rendering size units.
Definition: qgsunittypes.h:167
QgsDxfExport
Exports QGIS layers to the DXF format.
Definition: qgsdxfexport.h:64
QgsLabelCandidate::QgsLabelCandidate
QgsLabelCandidate(const QRectF &r, double c)
Definition: qgspallabeling.h:1114
QgsReadWriteContext
The class is used as a container of context for various read/write operations on other objects.
Definition: qgsreadwritecontext.h:34
QgsPalLayerSettings::lineSettings
QgsLabelLineSettings & lineSettings()
Returns the label line settings, which contain settings related to how the label engine places and fo...
Definition: qgspallabeling.h:888
QgsCallout
Abstract base class for callout renderers.
Definition: qgscallout.h:52
QgsPalLayerSettings::setPolygonPlacementFlags
void setPolygonPlacementFlags(QgsLabeling::PolygonPlacementFlags flags)
Sets the polygon placement flags, which dictate how polygon labels can be placed.
Definition: qgspallabeling.h:450
QgsPalLayerSettings
Contains settings for how a map layer will be labeled.
Definition: qgspallabeling.h:86
qgslabelposition.h
Qgis::UpsideDownLabelHandling
UpsideDownLabelHandling
Handling techniques for upside down labels.
Definition: qgis.h:642
qgslabelingenginesettings.h
SIP_OUT
#define SIP_OUT
Definition: qgis_sip.h:58
qgsstringutils.h
crs
const QgsCoordinateReferenceSystem & crs
Definition: qgswfsgetfeature.cpp:105
qgslabelthinningsettings.h
pal::LabelPosition
LabelPosition is a candidate feature label position.
Definition: labelposition.h:55
QgsPalLayerSettings::obstacleSettings
QgsLabelObstacleSettings & obstacleSettings()
Returns the label obstacle settings.
Definition: qgspallabeling.h:912
QgsVectorLayerDiagramProvider
The QgsVectorLayerDiagramProvider class implements support for diagrams within the labeling engine....
Definition: qgsvectorlayerdiagramprovider.h:57
QgsFields
Container of fields for a vector layer.
Definition: qgsfields.h:44
qgslabellinesettings.h
QgsPalLayerSettings::thinningSettings
const QgsLabelThinningSettings & thinningSettings() const
Returns the label thinning settings.
Definition: qgspallabeling.h:927
QgsPalLayerSettings::obstacleSettings
const QgsLabelObstacleSettings & obstacleSettings() const
Returns the label obstacle settings.
Definition: qgspallabeling.h:905
qgsfeature.h
QgsRenderContext
Contains information about the context of a rendering operation.
Definition: qgsrendercontext.h:59
QgsUnitTypes::RenderMillimeters
@ RenderMillimeters
Millimeters.
Definition: qgsunittypes.h:169
QgsPalLayerSettings::substitutions
QgsStringReplacementCollection substitutions
Substitution collection for automatic text substitution with labels.
Definition: qgspallabeling.h:373
QgsLabelObstacleSettings
Contains settings related to how the label engine treats features as obstacles.
Definition: qgslabelobstaclesettings.h:34
QgsSymbol
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:92
QgsTextLabelFeature
Class that adds extra information to QgsLabelFeature for text labels.
Definition: qgstextlabelfeature.h:34
QgsPalLayerSettings::legendString
QString legendString() const
legendString
Definition: qgspallabeling.h:751
Qgis::LabelOverlapHandling::AllowOverlapIfRequired
@ AllowOverlapIfRequired
Avoids overlapping labels when possible, but permit overlaps if labels for features cannot otherwise ...
QgsPalLayerSettings::SymbolLeftRight
@ SymbolLeftRight
Place direction symbols on left/right of label.
Definition: qgspallabeling.h:120
QgsVectorLayerLabelProvider
The QgsVectorLayerLabelProvider class implements a label provider for vector layers....
Definition: qgsvectorlayerlabelprovider.h:41
QgsRectangle
A rectangle specified with double values.
Definition: qgsrectangle.h:41
Qgis::UnplacedLabelVisibility::FollowEngineSetting
@ FollowEngineSetting
Respect the label engine setting.
QgsPalLayerSettings::LinePlacementFlags
LinePlacementFlags
Line placement flags, which control how candidates are generated for a linear feature.
Definition: qgspallabeling.h:103
QgsPalLayerSettings::ObstacleType
ObstacleType
Valid obstacle types, which affect how features within the layer will act as obstacles for labels.
Definition: qgspallabeling.h:131
QgsLabelCandidate
Represents a label candidate.
Definition: qgspallabeling.h:1111
pal
Definition: qgsdiagramrenderer.h:50
QgsPalLayerSettings::setThinningSettings
void setThinningSettings(const QgsLabelThinningSettings &settings)
Sets the label thinning settings.
Definition: qgspallabeling.h:941
SIP_FACTORY
#define SIP_FACTORY
Definition: qgis_sip.h:76
QgsPalLayerSettings::placementSettings
const QgsLabelPlacementSettings & placementSettings() const
Returns the label placement settings.
Definition: qgspallabeling.h:949
Qgis::LabelOffsetType
LabelOffsetType
Behavior modifier for label offset and distance, only applies in some label placement modes.
Definition: qgis.h:607
Qgis::LabelQuadrantPosition
LabelQuadrantPosition
Label quadrant positions.
Definition: qgis.h:621
Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_POP
Definition: qgis.h:2820
Qgis::LabelMultiLineAlignment
LabelMultiLineAlignment
Text alignment for multi-line labels.
Definition: qgis.h:657
QgsTextFormat
Container for all settings relating to text rendering.
Definition: qgstextformat.h:40
QgsPropertiesDefinition
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.
Definition: qgspropertycollection.h:29
QgsPalLayerSettings::setLegendString
void setLegendString(const QString &legendString)
setLegendString
Definition: qgspallabeling.h:745
SIP_SKIP
#define SIP_SKIP
Definition: qgis_sip.h:126
QgsPalLayerSettings::setDataDefinedProperties
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the label's property collection, used for data defined overrides.
Definition: qgspallabeling.h:834
QgsPalLayerSettings::SymbolAbove
@ SymbolAbove
Place direction symbols on above label.
Definition: qgspallabeling.h:121
QgsUnitTypes::AngleUnit
AngleUnit
Units of angles.
Definition: qgsunittypes.h:131
QgsPalLayerSettings::wrapChar
QString wrapChar
Wrapping character string.
Definition: qgspallabeling.h:383
QgsPalLayerSettings::format
const QgsTextFormat & format() const
Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
Definition: qgspallabeling.h:841
QgsLabelCandidate::rect
QRectF rect
Definition: qgspallabeling.h:1116
qgis_sip.h
QgsPalLayerSettings::setFormat
void setFormat(const QgsTextFormat &format)
Sets the label text formatting settings, e.g., font settings, buffer settings, etc.
Definition: qgspallabeling.h:849
QgsPalLayerSettings::repeatDistanceMapUnitScale
QgsMapUnitScale repeatDistanceMapUnitScale
Map unit scale for repeating labels for a single feature.
Definition: qgspallabeling.h:521
SIP_TRANSFER
#define SIP_TRANSFER
Definition: qgis_sip.h:36
QgsPalLayerSettings::thinningSettings
QgsLabelThinningSettings & thinningSettings()
Returns the label thinning settings.
Definition: qgspallabeling.h:934
qgslabelplacementsettings.h
QgsDiagramLayerSettings
Stores the settings for rendering of all diagrams for a layer.
Definition: qgsdiagramrenderer.h:61
QgsPalLayerSettings::placementSettings
QgsLabelPlacementSettings & placementSettings()
Returns the label placement settings.
Definition: qgspallabeling.h:956
QgsPalLabeling
PAL labeling utilities.
Definition: qgspallabeling.h:1125
qgscoordinatetransform.h
QgsPalLayerSettings::lineSettings
const QgsLabelLineSettings & lineSettings() const
Returns the label line settings, which contain settings related to how the label engine places and fo...
Definition: qgspallabeling.h:879
QgsMapUnitScale
Struct for storing maximum and minimum scales for measurements in map units.
Definition: qgsmapunitscale.h:36
QgsPalLayerSettings::dataDefinedProperties
const QgsPropertyCollection & dataDefinedProperties() const
Returns a reference to the label's property collection, used for data defined overrides.
Definition: qgspallabeling.h:825
QgsLabelThinningSettings
Contains settings related to how the label engine removes candidate label positions and reduces the n...
Definition: qgslabelthinningsettings.h:34
QgsPalLayerSettings::ptOne
QgsPointXY ptOne
Definition: qgspallabeling.h:999
QgsStringReplacementCollection
A collection of string replacements (specified using QgsStringReplacement objects).
Definition: qgsstringutils.h:115
Qgis::LabelOffsetType::FromPoint
@ FromPoint
Offset distance applies from point geometry.
QgsCoordinateReferenceSystem
This class represents a coordinate reference system (CRS).
Definition: qgscoordinatereferencesystem.h:211
SIP_INOUT
#define SIP_INOUT
Definition: qgis_sip.h:71
QgsLabelingEngine
The QgsLabelingEngine class provides map labeling functionality. The input for the engine is a list o...
Definition: qgslabelingengine.h:343
QgsPointXY
A class to represent a 2D point.
Definition: qgspointxy.h:58
QgsPropertyCollection
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
Definition: qgspropertycollection.h:318
qgslabeling.h
Qgis::LabelOverlapHandling::PreventOverlap
@ PreventOverlap
Do not allow labels to overlap other labels.
QgsLabelLineSettings
Contains settings related to how the label engine places and formats labels for line features (or pol...
Definition: qgslabellinesettings.h:39
QgsPalLayerSettings::fieldName
QString fieldName
Name of field (or an expression) to use for label text.
Definition: qgspallabeling.h:354
qgsgeometry.h
QgsWkbTypes::GeometryType
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
Definition: qgswkbtypes.h:140
c
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
Definition: porting_processing.dox:1
QgsGeometry
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
QgsMapToPixel
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:38
QgsPalLayerSettings::geometryGenerator
QString geometryGenerator
The geometry generator expression. Null if disabled.
Definition: qgspallabeling.h:727
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
QgsPalLayerSettings::setLineSettings
void setLineSettings(const QgsLabelLineSettings &settings)
Sets the label line settings, which contain settings related to how the label engine places and forma...
Definition: qgspallabeling.h:897
QgsTextDocument
Represents a document consisting of one or more QgsTextBlock objects.
Definition: qgstextdocument.h:38
QgsPalLayerSettings::extentGeom
QgsGeometry extentGeom
Definition: qgspallabeling.h:1000
QgsPalLayerSettings::callout
QgsCallout * callout() const
Returns the label callout renderer, responsible for drawing label callouts.
Definition: qgspallabeling.h:859
QgsWkbTypes::UnknownGeometry
@ UnknownGeometry
Definition: qgswkbtypes.h:145
qgspropertycollection.h
QgsPalLayerSettings::mCurFields
QgsFields mCurFields
Definition: qgspallabeling.h:993
QgsPalLayerSettings::labelOffsetMapUnitScale
QgsMapUnitScale labelOffsetMapUnitScale
Map unit scale for label offset.
Definition: qgspallabeling.h:558
qgsmapunitscale.h
QgsPalLayerSettings::ptZero
QgsPointXY ptZero
Definition: qgspallabeling.h:998
SIP_PROPERTY
#define SIP_PROPERTY(name, getter, setter)
Definition: qgis_sip.h:273
QgsFeature
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:55
Qgis::UnplacedLabelVisibility
UnplacedLabelVisibility
Unplaced label visibility.
Definition: qgis.h:533
QgsPalLayerSettings::Property
Property
Data definable properties.
Definition: qgspallabeling.h:144
QgsLabelObstacleSettings::ObstacleType
ObstacleType
Valid obstacle types, which affect how features within the layer will act as obstacles for labels.
Definition: qgslabelobstaclesettings.h:42
QgsLabelSearchTree
A class to query the labeling structure at a given point (small wrapper around pal RTree class)
Definition: qgslabelsearchtree.h:46
QgsLabelFeature
The QgsLabelFeature class describes a feature that should be used within the labeling engine....
Definition: qgslabelfeature.h:57
qgstextformat.h
QgsExpression
Class for parsing and evaluation of expressions (formerly called "search strings")....
Definition: qgsexpression.h:102
QgsMapSettings
The QgsMapSettings class contains configuration for rendering of the map. The rendering itself is don...
Definition: qgsmapsettings.h:88
QgsPalLayerSettings::dataDefinedProperties
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the label's property collection, used for data defined overrides.
Definition: qgspallabeling.h:816
QgsCoordinateTransform
Class for doing transforms between two map coordinate systems.
Definition: qgscoordinatetransform.h:57
QgsLabelCandidate::cost
double cost
Definition: qgspallabeling.h:1117
Q_NOWARN_DEPRECATED_PUSH
#define Q_NOWARN_DEPRECATED_PUSH
Definition: qgis.h:2819
QgsPalLayerSettings::setPlacementSettings
void setPlacementSettings(const QgsLabelPlacementSettings &settings)
Sets the label placement settings.
Definition: qgspallabeling.h:963
QgsLabelLineSettings::DirectionSymbolPlacement
DirectionSymbolPlacement
Placement options for direction symbols.
Definition: qgslabellinesettings.h:48
QgsPalLayerSettings::polygonPlacementFlags
QgsLabeling::PolygonPlacementFlags polygonPlacementFlags() const
Returns the polygon placement flags, which dictate how polygon labels can be placed.
Definition: qgspallabeling.h:442
Qgis::LabelPlacement::AroundPoint
@ AroundPoint
Arranges candidates in a circle around a point (or centroid of a polygon). Applies to point or polygo...
QgsPalLayerSettings::setObstacleSettings
void setObstacleSettings(const QgsLabelObstacleSettings &settings)
Sets the label obstacle settings.
Definition: qgspallabeling.h:919
qgspointxy.h
QgsUnitTypes::AngleDegrees
@ AngleDegrees
Degrees.
Definition: qgsunittypes.h:133
QgsLabelPlacementSettings
Contains general settings related to how labels are placed.
Definition: qgslabelplacementsettings.h:34
QgsPalLayerSettings::distMapUnitScale
QgsMapUnitScale distMapUnitScale
Map unit scale for label feature distance.
Definition: qgspallabeling.h:497
Qgis::LabelPlacement
LabelPlacement
Placement modes which determine how label candidates are generated for a feature.
Definition: qgis.h:560
qgslabelobstaclesettings.h