QGIS API Documentation 3.99.0-Master (7d2ca374f2d)
Loading...
Searching...
No Matches
feature.h
Go to the documentation of this file.
1/*
2 * libpal - Automated Placement of Labels Library
3 *
4 * Copyright (C) 2008 Maxence Laurent, MIS-TIC, HEIG-VD
5 * University of Applied Sciences, Western Switzerland
6 * http://www.hes-so.ch
7 *
8 * Contact:
9 * maxence.laurent <at> heig-vd <dot> ch
10 * or
11 * eric.taillard <at> heig-vd <dot> ch
12 *
13 * This file is part of libpal.
14 *
15 * libpal is free software: you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation, either version 3 of the License, or
18 * (at your option) any later version.
19 *
20 * libpal is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with libpal. If not, see <http://www.gnu.org/licenses/>.
27 *
28 */
29
30#ifndef FEATURE_H
31#define FEATURE_H
32
33
34
35#include <cmath>
36#include <fstream>
37#include <iostream>
38
39#include "labelposition.h"
40#include "pointset.h"
41#include "qgis_core.h"
42#include "qgslabelfeature.h"
44
45#include <QString>
46
47#define SIP_NO_FILE
48
49namespace pal
50{
51 class LabelPosition;
52 class FeaturePart;
53
60 class CORE_EXPORT FeaturePart : public PointSet
61 {
62
63 public:
64
72
78 FeaturePart( QgsLabelFeature *lf, const GEOSGeometry *geom );
79
80 FeaturePart( const FeaturePart &other );
81
85 ~FeaturePart() override;
86
91
95 Layer *layer();
96
100 QgsFeatureId featureId() const;
101
106 int subPartId() const;
107
111 std::size_t maximumPointCandidates() const;
112
116 std::size_t maximumLineCandidates() const;
117
121 std::size_t maximumPolygonCandidates() const;
122
126 std::vector<std::unique_ptr<LabelPosition> > createCandidates( Pal *pal );
127
136 std::size_t createCandidatesAroundPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
137
146 std::size_t createCandidatesOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
147
156 std::size_t createCandidateCenteredOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
157
164 std::unique_ptr< LabelPosition > createCandidatePointOnSurface( PointSet *mapShape );
165
174 std::size_t createCandidatesAtOrderedPositionsOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
175
184 std::size_t createCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
185
193 std::size_t createHorizontalCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
194
203 std::size_t createCandidatesAlongLineNearStraightSegments( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
204
215 std::size_t createCandidatesAlongLineNearMidpoint( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, double initialCost = 0.0, Pal *pal = nullptr );
216
230 std::unique_ptr< LabelPosition > curvedPlacementAtOffset( PointSet *mapShape, const std::vector<double> &pathDistances,
231 QgsTextRendererUtils::LabelLineDirection direction, double distance, bool &labeledLineSegmentIsRightToLeft, bool applyAngleConstraints,
232 Qgis::CurvedTextFlags flags, double additionalCharacterSpacing, double additionalWordSpacing );
233
242 std::size_t createCurvedCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
243
252 std::size_t createDefaultCurvedCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
253
261 std::size_t createCurvedCandidateWithCharactersAtVertices( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
262
270 std::size_t createCandidatesForPolygon( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
271
278 std::size_t createCandidatesOutsidePolygon( std::vector<std::unique_ptr<LabelPosition> > &lPos, Pal *pal );
279
286 bool hasSameLabelFeatureAs( FeaturePart *part ) const;
287
291 double getLabelWidth( double angle = 0.0 ) const { return mLF->size( angle ).width(); }
292
296 double getLabelHeight( double angle = 0.0 ) const { return mLF->size( angle ).height(); }
297
302 double getLabelDistance() const { return mLF->distLabel(); }
303
305 bool hasFixedRotation() const { return mLF->hasFixedAngle(); }
306
308 double fixedAngle() const { return mLF->fixedAngle(); }
309
311 bool hasFixedPosition() const { return mLF->hasFixedPosition(); }
312
317 bool alwaysShow() const { return mLF->alwaysShow(); }
318
322 const QgsLabelObstacleSettings &obstacleSettings() const { return mLF->obstacleSettings(); }
323
325 double repeatDistance() const { return mLF->repeatDistance(); }
326
328 int getNumSelfObstacles() const { return mHoles.count(); }
330 FeaturePart *getSelfObstacle( int i ) { return mHoles.at( i ); }
331
333 bool isConnected( FeaturePart *p2 );
334
339 bool mergeWithFeaturePart( FeaturePart *other );
340
346 void addSizePenalty( std::vector<std::unique_ptr<LabelPosition> > &lPos, double bbx[4], double bby[4] ) const;
347
352 double calculatePriority() const;
353
355 bool onlyShowUprightLabels() const;
356
361 int totalRepeats() const;
362
367 void setTotalRepeats( int repeats );
368
369 protected:
370
372 QList<FeaturePart *> mHoles;
373
375 void extractCoords( const GEOSGeometry *geom );
376
377 private:
378
379 Qgis::LabelQuadrantPosition quadrantFromOffset() const;
380
381 int mTotalRepeats = 0;
382
383 mutable std::size_t mCachedMaxLineCandidates = 0;
384 mutable std::size_t mCachedMaxPolygonCandidates = 0;
385
386 FeaturePart &operator= ( const FeaturePart & ) = delete;
387 };
388
389} // end namespace pal
390
391#endif
LabelQuadrantPosition
Label quadrant positions.
Definition qgis.h:1315
QFlags< CurvedTextFlag > CurvedTextFlags
Flags controlling behavior of curved text generation.
Definition qgis.h:3076
Describes a feature that should be used within the labeling engine.
Contains settings related to how the label engine treats features as obstacles.
LabelLineDirection
Controls behavior of curved text with respect to line directions.
Represents a part of a label feature.
Definition feature.h:61
FeaturePart(QgsLabelFeature *lf, const GEOSGeometry *geom)
Creates a new generic feature.
Definition feature.cpp:55
bool hasFixedRotation() const
Returns true if the feature's label has a fixed rotation.
Definition feature.h:305
double getLabelHeight(double angle=0.0) const
Returns the height of the label, optionally taking an angle (in radians) into account.
Definition feature.h:296
QList< FeaturePart * > mHoles
Definition feature.h:372
double getLabelDistance() const
Returns the distance from the anchor point to the label.
Definition feature.h:302
bool hasFixedPosition() const
Returns true if the feature's label has a fixed position.
Definition feature.h:311
double fixedAngle() const
Returns the fixed angle for the feature's label.
Definition feature.h:308
double repeatDistance() const
Returns the distance between repeating labels for this feature.
Definition feature.h:325
int getNumSelfObstacles() const
Gets number of holes (inner rings) - they are considered as obstacles.
Definition feature.h:328
QgsLabelFeature * mLF
Definition feature.h:371
double getLabelWidth(double angle=0.0) const
Returns the width of the label, optionally taking an angle (in radians) into account.
Definition feature.h:291
const QgsLabelObstacleSettings & obstacleSettings() const
Returns the feature's obstacle settings.
Definition feature.h:322
bool alwaysShow() const
Returns true if the feature's label should always been shown, even when it collides with other labels...
Definition feature.h:317
QgsLabelFeature * feature()
Returns the parent feature.
Definition feature.h:90
PathOffset
Path offset variances used in curved placement.
Definition feature.h:67
FeaturePart * getSelfObstacle(int i)
Gets hole (inner ring) - considered as obstacle.
Definition feature.h:330
void extractCoords(const GEOSGeometry *geom)
read coordinates from a GEOS geom
Definition feature.cpp:94
A set of features which influence the labeling process.
Definition layer.h:64
Main Pal labeling class.
Definition pal.h:88
The underlying raw pal geometry class.
Definition pointset.h:77
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
struct GEOSGeom_t GEOSGeometry
Definition util.h:42