QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
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 "qgspallabeling.h"
22 #include "geos_c.h"
23 #include "qgsgeos.h"
24 #include "qgsmargins.h"
26 #include "qgslabeling.h"
27 
28 namespace pal
29 {
30  class LabelInfo;
31  class Layer;
32 }
33 
35 class QgsRenderContext;
36 class QgsGeometry;
37 
38 
56 class CORE_EXPORT QgsLabelFeature
57 {
58  public:
59 
61  QgsLabelFeature( QgsFeatureId id, geos::unique_ptr geometry, QSizeF size );
63  virtual ~QgsLabelFeature();
64 
66  QgsFeatureId id() const { return mId; }
67 
69  GEOSGeometry *geometry() const { return mGeometry.get(); }
70 
80  void setPermissibleZone( const QgsGeometry &geometry );
81 
90  QgsGeometry permissibleZone() const { return mPermissibleZone; }
91 
97  //TODO - remove when QgsGeometry caches GEOS preparedness
98  const GEOSPreparedGeometry *permissibleZonePrepared() const { return mPermissibleZoneGeosPrepared.get(); }
99 
101  QSizeF size( double angle = 0.0 ) const;
102 
113  void setVisualMargin( const QgsMargins &margin ) { mVisualMargin = margin; }
114 
119  const QgsMargins &visualMargin() const { return mVisualMargin; }
120 
127  void setSymbolSize( QSizeF size ) { mSymbolSize = size; }
128 
136  const QSizeF &symbolSize() const { return mSymbolSize; }
137 
144  double priority() const { return mPriority; }
145 
153  void setPriority( double priority ) { mPriority = priority; }
154 
161  double zIndex() const { return mZIndex; }
162 
170  void setZIndex( double zIndex ) { mZIndex = zIndex; }
171 
173  bool hasFixedPosition() const { return mHasFixedPosition; }
175  void setHasFixedPosition( bool enabled ) { mHasFixedPosition = enabled; }
177  QgsPointXY fixedPosition() const { return mFixedPosition; }
178 
180  void setFixedPosition( const QgsPointXY &point ) { mFixedPosition = point; }
181 
188  QgsPointXY anchorPosition() const;
189 
196  void setAnchorPosition( const QgsPointXY &anchorPosition );
197 
199  bool hasFixedAngle() const { return mHasFixedAngle; }
201  void setHasFixedAngle( bool enabled ) { mHasFixedAngle = enabled; }
203  double fixedAngle() const { return mFixedAngle; }
205  void setFixedAngle( double angle ) { mFixedAngle = angle; }
206 
213  bool hasFixedQuadrant() const { return mHasFixedQuadrant; }
214 
221  void setHasFixedQuadrant( bool enabled ) { mHasFixedQuadrant = enabled; }
222 
229  QPointF quadOffset() const { return mQuadOffset; }
230 
235  void setQuadOffset( QPointF quadOffset ) { mQuadOffset = quadOffset; }
236 
241  QgsPointXY positionOffset() const { return mPositionOffset; }
242 
247  void setPositionOffset( const QgsPointXY &offset ) { mPositionOffset = offset; }
248 
255  QgsPalLayerSettings::OffsetType offsetType() const { return mOffsetType; }
256 
263  void setOffsetType( QgsPalLayerSettings::OffsetType type ) { mOffsetType = type; }
264 
269  double distLabel() const { return mDistLabel; }
270 
275  void setDistLabel( double dist ) { mDistLabel = dist; }
276 
282  QVector< QgsPalLayerSettings::PredefinedPointPosition > predefinedPositionOrder() const { return mPredefinedPositionOrder; }
283 
289  void setPredefinedPositionOrder( const QVector< QgsPalLayerSettings::PredefinedPointPosition > &order ) { mPredefinedPositionOrder = order; }
290 
295  double repeatDistance() const { return mRepeatDistance; }
296 
301  void setRepeatDistance( double dist ) { mRepeatDistance = dist; }
302 
304  bool alwaysShow() const { return mAlwaysShow; }
306  void setAlwaysShow( bool enabled ) { mAlwaysShow = enabled; }
307 
312  QgsLabeling::LinePlacementFlags arrangementFlags() const { return mArrangementFlags; }
313 
319  void setArrangementFlags( QgsLabeling::LinePlacementFlags flags ) { mArrangementFlags = flags; }
320 
321 
328  QString labelText() const { return mLabelText; }
330  void setLabelText( const QString &text ) { mLabelText = text; }
331 
333  pal::LabelInfo *curvedLabelInfo() const { return mInfo; }
335  void setCurvedLabelInfo( pal::LabelInfo *info ) { mInfo = info; }
336 
338  pal::Layer *layer() const { return mLayer; }
340  void setLayer( pal::Layer *layer ) { mLayer = layer; }
341 
343  QgsAbstractLabelProvider *provider() const;
344 
351  QgsFeature feature() const;
352 
359  void setFeature( const QgsFeature &feature );
360 
367  const QgsSymbol *symbol() { return mSymbol; }
368 
376  void setSymbol( const QgsSymbol *symbol ) { mSymbol = symbol; }
377 
386  double overrunDistance() const;
387 
396  void setOverrunDistance( double distance );
397 
406  double overrunSmoothDistance() const;
407 
416  void setOverrunSmoothDistance( double distance );
417 
423  bool labelAllParts() const { return mLabelAllParts; }
424 
430  void setLabelAllParts( bool labelAllParts ) { mLabelAllParts = labelAllParts; }
431 
437  void setRotatedSize( QSizeF size ) { mRotatedSize = size; }
438 
445  const QgsLabelObstacleSettings &obstacleSettings() const;
446 
453  void setObstacleSettings( const QgsLabelObstacleSettings &settings );
454 
455  protected:
457  pal::Layer *mLayer = nullptr;
458 
466  QSizeF mSize;
468  QSizeF mRotatedSize;
472  QSizeF mSymbolSize;
474  double mPriority = -1;
476  double mZIndex = 0;
478  bool mHasFixedPosition = false;
482  bool mHasFixedAngle = false;
484  double mFixedAngle = 0;
486  bool mHasFixedQuadrant = false;
488  QPointF mQuadOffset;
492  double mDistLabel = 0;
496  QVector< QgsPalLayerSettings::PredefinedPointPosition > mPredefinedPositionOrder;
498  double mRepeatDistance = 0;
500  bool mAlwaysShow = false;
502  QString mLabelText;
504  pal::LabelInfo *mInfo = nullptr;
505 
507  double mOverrunDistance = 0;
509  double mOverrunSmoothDistance = 0;
510 
511  QgsLabeling::LinePlacementFlags mArrangementFlags = nullptr;
512 
513  private:
514 
516  geos::unique_ptr mPermissibleZoneGeos;
517 
518  // TODO - not required when QgsGeometry caches geos preparedness
519  geos::prepared_unique_ptr mPermissibleZoneGeosPrepared;
520 
521  QgsFeature mFeature;
522 
523  const QgsSymbol *mSymbol = nullptr;
524 
525  bool mLabelAllParts = false;
526 
527  QgsLabelObstacleSettings mObstacleSettings;
528 
529  QgsPointXY mAnchorPosition;
530 };
531 
532 #endif // QGSLABELFEATURE_H
void setSymbol(const QgsSymbol *symbol)
Sets the feature symbol associated with this label.
QgsLabeling::LinePlacementFlags arrangementFlags() const
Returns the feature&#39;s arrangement flags.
QString labelText() const
Text of the label.
double distLabel() const
Applies to "around point" placement strategy or linestring features.
QgsFeatureId id() const
Identifier of the label (unique within the parent label provider)
void setSymbolSize(QSizeF size)
Sets the size of the rendered symbol associated with this feature.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:62
QgsPointXY mFixedPosition
fixed position for the label (instead of automatic placement)
void setLabelAllParts(bool labelAllParts)
Sets whether all parts of the feature should be labeled.
double priority() const
Returns the feature&#39;s labeling priority.
void setVisualMargin(const QgsMargins &margin)
Sets the visual margin for the label feature.
bool alwaysShow() const
Whether label should be always shown (sets very high label priority)
std::unique_ptr< const GEOSPreparedGeometry, GeosDeleter > prepared_unique_ptr
Scoped GEOS prepared geometry pointer.
Definition: qgsgeos.h:84
A set of features which influence the labeling process.
Definition: layer.h:61
A class to represent a 2D point.
Definition: qgspointxy.h:43
QString mLabelText
text of the label
const QgsSymbol * symbol()
Returns the feature symbol associated with this label.
QgsMargins mVisualMargin
Visual margin of label contents.
const GEOSPreparedGeometry * permissibleZonePrepared() const
Returns a GEOS prepared geometry representing the label&#39;s permissibleZone().
qint64 QgsFeatureId
Definition: qgsfeatureid.h:25
GEOSGeometry * geometry() const
Gets access to the associated geometry.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:122
const QSizeF & symbolSize() const
Returns the size of the rendered symbol associated with this feature, if applicable.
void setCurvedLabelInfo(pal::LabelInfo *info)
takes ownership of the instance
QgsFeatureId mId
Associated ID unique within the parent label provider.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:55
const QgsMargins & visualMargin() const
Returns the visual margin for the label feature.
void setAlwaysShow(bool enabled)
Sets whether label should be always shown (sets very high label priority)
void setLabelText(const QString &text)
Sets text of the label.
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
Definition: MathUtils.cpp:786
Contains settings related to how the label engine treats features as obstacles.
QgsPointXY positionOffset() const
Applies only to "offset from point" placement strategy.
void setHasFixedPosition(bool enabled)
Sets whether the label should use a fixed position instead of being automatically placed...
void setPositionOffset(const QgsPointXY &offset)
Applies only to "offset from point" placement strategy.
QSizeF mSize
Width and height of the label.
void setArrangementFlags(QgsLabeling::LinePlacementFlags flags)
Sets the feature&#39;s arrangement flags.
double zIndex() const
Returns the label&#39;s z-index.
pal::LabelInfo * curvedLabelInfo() const
Gets additional info required for curved label placement. Returns nullptr if not set.
void setZIndex(double zIndex)
Sets the label&#39;s z-index.
bool hasFixedQuadrant() const
Returns whether the quadrant for the label is fixed.
QgsGeometry permissibleZone() const
Returns the label&#39;s permissible zone geometry.
QSizeF mRotatedSize
Width and height of the label when rotated between 45 to 135 and 235 to 315 degrees;.
Offset distance applies from point geometry.
QSizeF mSymbolSize
Size of associated rendered symbol, if applicable.
QVector< QgsPalLayerSettings::PredefinedPointPosition > mPredefinedPositionOrder
Ordered list of predefined positions for label (only for OrderedPositionsAroundPoint placement) ...
void setLayer(pal::Layer *layer)
Assign PAL layer to the label feature. Should be only used internally in PAL.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:79
Optional additional info about label (for curved labels)
Definition: feature.h:54
void setFixedAngle(double angle)
Sets angle in degrees of the fixed angle (relevant only if hasFixedAngle() returns true) ...
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.
OffsetType
Behavior modifier for label offset and distance, only applies in some label placement modes...
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...
double fixedAngle() const
Angle in degrees of the fixed angle (relevant only if hasFixedAngle() returns true) ...
void setPredefinedPositionOrder(const QVector< QgsPalLayerSettings::PredefinedPointPosition > &order)
Sets the priority ordered list of predefined positions for label candidates.
void setOffsetType(QgsPalLayerSettings::OffsetType type)
Sets the offset type, which determines how offsets and distance to label behaves. ...
void setDistLabel(double dist)
Applies to "around point" placement strategy or linestring features.
The QgsAbstractLabelProvider class is an interface class.
double repeatDistance() const
Applies only to linestring features - after what distance (in map units) the labels should be repeate...
QgsPointXY mPositionOffset
offset of label from the feature (only for "offset from point" placement)
void setFixedPosition(const QgsPointXY &point)
Sets coordinates of the fixed position (relevant only if hasFixedPosition() returns true) ...
QPointF quadOffset() const
Applies to "offset from point" placement strategy and "around point" (in case hasFixedQuadrant() retu...
Contains information about the context of a rendering operation.
bool hasFixedPosition() const
Whether the label should use a fixed position instead of being automatically placed.
geos::unique_ptr mGeometry
Geometry of the feature to be labelled.
The QgsLabelFeature class describes a feature that should be used within the labeling engine...
QgsPalLayerSettings::OffsetType offsetType() const
Returns the offset type, which determines how offsets and distance to label behaves.
void setHasFixedAngle(bool enabled)
Sets whether the label should use a fixed angle instead of using angle from automatic placement...
void setRepeatDistance(double dist)
Applies only to linestring features - set after what distance (in map units) the labels should be rep...
void setHasFixedQuadrant(bool enabled)
Sets whether the quadrant for the label must be respected.
QgsGeometry mPermissibleZone
Optional geometry to use for label&#39;s permissible zone.
QgsPointXY fixedPosition() const
Coordinates of the fixed position (relevant only if hasFixedPosition() returns true) ...
QVector< QgsPalLayerSettings::PredefinedPointPosition > predefinedPositionOrder() const
Returns the priority ordered list of predefined positions for label candidates.
bool labelAllParts() const
Returns true if all parts of the feature should be labeled.
The QgsMargins class defines the four margins of a rectangle.
Definition: qgsmargins.h:37
void setQuadOffset(QPointF quadOffset)
Set which side of the point to use.
void setPriority(double priority)
Sets the priority for labeling the feature.
QPointF mQuadOffset
whether the side of the label is fixed (only for "around point" placement)