QGIS API Documentation 3.99.0-Master (a8882ad4560)
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#define SIP_NO_FILE
34
35
36#include <cmath>
37#include <fstream>
38#include <iostream>
39
40#include "labelposition.h"
41#include "pointset.h"
42#include "qgis_core.h"
43#include "qgslabelfeature.h"
45
46#include <QString>
47
48namespace pal
49{
50 class LabelPosition;
51 class FeaturePart;
52
59 class CORE_EXPORT FeaturePart : public PointSet
60 {
61
62 public:
63
71
77 FeaturePart( QgsLabelFeature *lf, const GEOSGeometry *geom );
78
79 FeaturePart( const FeaturePart &other );
80
84 ~FeaturePart() override;
85
90
94 Layer *layer();
95
99 QgsFeatureId featureId() const;
100
105 int subPartId() const;
106
110 std::size_t maximumPointCandidates() const;
111
115 std::size_t maximumLineCandidates() const;
116
120 std::size_t maximumPolygonCandidates() const;
121
125 std::vector<std::unique_ptr<LabelPosition> > createCandidates( Pal *pal );
126
135 std::size_t createCandidatesAroundPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
136
145 std::size_t createCandidatesOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
146
155 std::size_t createCandidateCenteredOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
156
163 std::unique_ptr< LabelPosition > createCandidatePointOnSurface( PointSet *mapShape );
164
173 std::size_t createCandidatesAtOrderedPositionsOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
174
183 std::size_t createCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
184
192 std::size_t createHorizontalCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
193
202 std::size_t createCandidatesAlongLineNearStraightSegments( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
203
214 std::size_t createCandidatesAlongLineNearMidpoint( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, double initialCost = 0.0, Pal *pal = nullptr );
215
229 std::unique_ptr< LabelPosition > curvedPlacementAtOffset( PointSet *mapShape, const std::vector<double> &pathDistances,
230 QgsTextRendererUtils::LabelLineDirection direction, double distance, bool &labeledLineSegmentIsRightToLeft, bool applyAngleConstraints,
231 Qgis::CurvedTextFlags flags, double additionalCharacterSpacing, double additionalWordSpacing );
232
241 std::size_t createCurvedCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
242
251 std::size_t createDefaultCurvedCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
252
260 std::size_t createCurvedCandidateWithCharactersAtVertices( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
261
269 std::size_t createCandidatesForPolygon( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
270
277 std::size_t createCandidatesOutsidePolygon( std::vector<std::unique_ptr<LabelPosition> > &lPos, Pal *pal );
278
285 bool hasSameLabelFeatureAs( FeaturePart *part ) const;
286
290 double getLabelWidth( double angle = 0.0 ) const { return mLF->size( angle ).width(); }
291
295 double getLabelHeight( double angle = 0.0 ) const { return mLF->size( angle ).height(); }
296
301 double getLabelDistance() const { return mLF->distLabel(); }
302
304 bool hasFixedRotation() const { return mLF->hasFixedAngle(); }
305
307 double fixedAngle() const { return mLF->fixedAngle(); }
308
310 bool hasFixedPosition() const { return mLF->hasFixedPosition(); }
311
316 bool alwaysShow() const { return mLF->alwaysShow(); }
317
321 const QgsLabelObstacleSettings &obstacleSettings() const { return mLF->obstacleSettings(); }
322
324 double repeatDistance() const { return mLF->repeatDistance(); }
325
327 int getNumSelfObstacles() const { return mHoles.count(); }
329 FeaturePart *getSelfObstacle( int i ) { return mHoles.at( i ); }
330
332 bool isConnected( FeaturePart *p2 );
333
338 bool mergeWithFeaturePart( FeaturePart *other );
339
345 void addSizePenalty( std::vector<std::unique_ptr<LabelPosition> > &lPos, double bbx[4], double bby[4] ) const;
346
351 double calculatePriority() const;
352
354 bool onlyShowUprightLabels() const;
355
360 int totalRepeats() const;
361
366 void setTotalRepeats( int repeats );
367
368 protected:
369
371 QList<FeaturePart *> mHoles;
372
374 void extractCoords( const GEOSGeometry *geom );
375
376 private:
377
378 Qgis::LabelQuadrantPosition quadrantFromOffset() const;
379
380 int mTotalRepeats = 0;
381
382 mutable std::size_t mCachedMaxLineCandidates = 0;
383 mutable std::size_t mCachedMaxPolygonCandidates = 0;
384
385 FeaturePart &operator= ( const FeaturePart & ) = delete;
386 };
387
388} // end namespace pal
389
390#endif
LabelQuadrantPosition
Label quadrant positions.
Definition qgis.h:1301
QFlags< CurvedTextFlag > CurvedTextFlags
Flags controlling behavior of curved text generation.
Definition qgis.h:3049
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:60
FeaturePart(QgsLabelFeature *lf, const GEOSGeometry *geom)
Creates a new generic feature.
Definition feature.cpp:51
bool hasFixedRotation() const
Returns true if the feature's label has a fixed rotation.
Definition feature.h:304
double getLabelHeight(double angle=0.0) const
Returns the height of the label, optionally taking an angle (in radians) into account.
Definition feature.h:295
QList< FeaturePart * > mHoles
Definition feature.h:371
double getLabelDistance() const
Returns the distance from the anchor point to the label.
Definition feature.h:301
bool hasFixedPosition() const
Returns true if the feature's label has a fixed position.
Definition feature.h:310
double fixedAngle() const
Returns the fixed angle for the feature's label.
Definition feature.h:307
double repeatDistance() const
Returns the distance between repeating labels for this feature.
Definition feature.h:324
int getNumSelfObstacles() const
Gets number of holes (inner rings) - they are considered as obstacles.
Definition feature.h:327
QgsLabelFeature * mLF
Definition feature.h:370
double getLabelWidth(double angle=0.0) const
Returns the width of the label, optionally taking an angle (in radians) into account.
Definition feature.h:290
const QgsLabelObstacleSettings & obstacleSettings() const
Returns the feature's obstacle settings.
Definition feature.h:321
bool alwaysShow() const
Returns true if the feature's label should always been shown, even when it collides with other labels...
Definition feature.h:316
QgsLabelFeature * feature()
Returns the parent feature.
Definition feature.h:89
PathOffset
Path offset variances used in curved placement.
Definition feature.h:66
FeaturePart * getSelfObstacle(int i)
Gets hole (inner ring) - considered as obstacle.
Definition feature.h:329
void extractCoords(const GEOSGeometry *geom)
read coordinates from a GEOS geom
Definition feature.cpp:90
A set of features which influence the labeling process.
Definition layer.h:63
Main Pal labeling class.
Definition pal.h:84
The underlying raw pal geometry class.
Definition pointset.h:76
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
struct GEOSGeom_t GEOSGeometry
Definition util.h:41