QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
qgslabelfeature.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgslabelfeature.cpp
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 #include "qgslabelfeature.h"
16 #include "feature.h"
17 #include "qgsgeometry.h"
18 #include "qgsgeos.h"
19 
21  : mId( id )
22  , mGeometry( std::move( geometry ) )
23  , mSize( size )
24  , mPriority( -1 )
25  , mZIndex( 0 )
26  , mHasFixedPosition( false )
27  , mHasFixedAngle( false )
28  , mFixedAngle( 0 )
29  , mHasFixedQuadrant( false )
30  , mDistLabel( 0 )
31  , mOffsetType( QgsPalLayerSettings::FromPoint )
32  , mRepeatDistance( 0 )
33  , mAlwaysShow( false )
34  , mIsObstacle( false )
35  , mObstacleFactor( 1 )
36 {
37 }
38 
40 {
41  if ( mPermissibleZoneGeosPrepared )
42  {
43  mPermissibleZoneGeosPrepared.reset();
44  mPermissibleZoneGeos.reset();
45  }
46 
47  delete mInfo;
48 }
49 
51 {
52  mObstacleGeometry = std::move( obstacleGeom );
53 }
54 
56 {
58 
59  if ( mPermissibleZoneGeosPrepared )
60  {
61  mPermissibleZoneGeosPrepared.reset();
62  mPermissibleZoneGeos.reset();
63  mPermissibleZoneGeosPrepared = nullptr;
64  }
65 
66  if ( mPermissibleZone.isNull() )
67  return;
68 
69  mPermissibleZoneGeos = QgsGeos::asGeos( mPermissibleZone );
70  if ( !mPermissibleZoneGeos )
71  return;
72 
73  mPermissibleZoneGeosPrepared.reset( GEOSPrepare_r( QgsGeos::getGEOSHandler(), mPermissibleZoneGeos.get() ) );
74 }
75 
77 {
78  return mFeature;
79 }
80 
81 QSizeF QgsLabelFeature::size( double angle ) const
82 {
83  if ( mRotatedSize.isEmpty() )
84  return mSize;
85 
86  // Between 45 to 135 and 235 to 315 degrees, return the rotated size
87  return ( angle >= 0.785398 && angle <= 2.35619 ) || ( angle >= 3.92699 && angle <= 5.49779 ) ? mRotatedSize : mSize;
88 }
89 
91 {
92  mFeature = feature;
93 }
94 
96 {
97  return mOverrunDistance;
98 }
99 
101 {
103 }
104 
106 {
107  return mOverrunSmoothDistance;
108 }
109 
111 {
113 }
double mOverrunSmoothDistance
Distance to smooth angle of line start and end when calculating overruns.
void setOverrunDistance(double distance)
Sets the permissible distance (in map units) which labels are allowed to overrun the start or end of ...
double mOverrunDistance
Distance to allow label to overrun linear features.
virtual ~QgsLabelFeature()
Clean up geometry and curved label info (if present)
qint64 QgsFeatureId
Definition: qgsfeatureid.h:25
pal::LabelInfo * mInfo
extra information for curved labels (may be nullptr)
GEOSGeometry * geometry() const
Gets access to the associated geometry.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:122
QgsFeature feature() const
Returns the original feature associated with this label.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Definition: qgsfeature.h:55
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
static GEOSContextHandle_t getGEOSHandler()
Definition: qgsgeos.cpp:2825
QSizeF mSize
Width and height of the label.
void setPermissibleZone(const QgsGeometry &geometry)
Sets the label&#39;s permissible zone geometry.
geos::unique_ptr mObstacleGeometry
Optional geometry to use for label obstacles, if different to mGeometry.
QSizeF mRotatedSize
Width and height of the label when rotated between 45 to 135 and 235 to 315 degrees;.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:79
void setOverrunSmoothDistance(double distance)
Sets the distance (in map units) with which the ends of linear features are averaged over when calcul...
QgsLabelFeature(QgsFeatureId id, geos::unique_ptr geometry, QSizeF size)
Create label feature, takes ownership of the geometry instance.
void setFeature(const QgsFeature &feature)
Sets the original feature associated with this label.
static geos::unique_ptr asGeos(const QgsGeometry &geometry, double precision=0)
Returns a geos geometry - caller takes ownership of the object (should be deleted with GEOSGeom_destr...
Definition: qgsgeos.cpp:166
QSizeF size(double angle=0.0) const
Size of the label (in map units)
void setObstacleGeometry(geos::unique_ptr obstacleGeom)
Sets the label&#39;s obstacle geometry, if different to the feature geometry.
double overrunSmoothDistance() const
Returns the distance (in map units) with which the ends of linear features are averaged over when cal...
QgsGeometry mPermissibleZone
Optional geometry to use for label&#39;s permissible zone.
double overrunDistance() const
Returns the permissible distance (in map units) which labels are allowed to overrun the start or end ...