QGIS API Documentation 4.3.0-Master (0978c174f8e)
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#include <cmath>
35#include <fstream>
36#include <iostream>
37
38#include "labelposition.h"
39#include "pointset.h"
40#include "qgis_core.h"
41#include "qgslabelfeature.h"
43
44#include <QString>
45
46#define SIP_NO_FILE
47
48namespace pal
49{
50 class LabelPosition;
51 class FeaturePart;
52
59 class CORE_EXPORT FeaturePart : public PointSet
60 {
61 public:
69
75 FeaturePart( QgsLabelFeature *lf, const GEOSGeometry *geom );
76
77 FeaturePart( const FeaturePart &other );
78
82 ~FeaturePart() override;
83
88
92 Layer *layer();
93
97 QgsFeatureId featureId() const;
98
103 int subPartId() const;
104
108 std::size_t maximumPointCandidates() const;
109
113 std::size_t maximumLineCandidates() const;
114
118 std::size_t maximumPolygonCandidates() const;
119
123 std::vector<std::unique_ptr<LabelPosition> > createCandidates( Pal *pal );
124
133 std::size_t createCandidatesAroundPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
134
143 std::size_t createCandidatesOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
144
153 std::size_t createCandidateCenteredOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
154
161 std::unique_ptr< LabelPosition > createCandidatePointOnSurface( PointSet *mapShape );
162
171 std::size_t createCandidatesAtOrderedPositionsOverPoint( double x, double y, std::vector<std::unique_ptr<LabelPosition> > &lPos, double angle );
172
181 std::size_t createCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
182
191 std::size_t createHorizontalCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal, double angle );
192
201 std::size_t createCandidatesAlongLineNearStraightSegments( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
202
213 std::size_t createCandidatesAlongLineNearMidpoint( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, double initialCost = 0.0, Pal *pal = nullptr );
214
228 std::unique_ptr< LabelPosition > curvedPlacementAtOffset(
229 PointSet *mapShape,
230 const std::vector<double> &pathDistances,
232 double distance,
233 bool &labeledLineSegmentIsRightToLeft,
234 bool applyAngleConstraints,
236 double additionalCharacterSpacing,
237 double additionalWordSpacing
238 );
239
248 std::size_t createCurvedCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
249
258 std::size_t createDefaultCurvedCandidatesAlongLine( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, bool allowOverrun, Pal *pal );
259
267 std::size_t createCurvedCandidateWithCharactersAtVertices( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
268
276 std::size_t createCandidatesForPolygon( std::vector<std::unique_ptr<LabelPosition> > &lPos, PointSet *mapShape, Pal *pal );
277
284 std::size_t createCandidatesOutsidePolygon( std::vector<std::unique_ptr<LabelPosition> > &lPos, Pal *pal );
285
292 bool hasSameLabelFeatureAs( FeaturePart *part ) const;
293
297 double getLabelWidth( double angle = 0.0 ) const { return mLF->size( angle ).width(); }
298
302 double getLabelHeight( double angle = 0.0 ) const { return mLF->size( angle ).height(); }
303
308 double getLabelDistance() const { return mLF->distLabel(); }
309
311 bool hasFixedRotation() const { return mLF->hasFixedAngle(); }
312
314 double fixedAngle() const { return mLF->fixedAngle(); }
315
317 bool hasFixedPosition() const { return mLF->hasFixedPosition(); }
318
323 bool alwaysShow() const { return mLF->alwaysShow(); }
324
328 const QgsLabelObstacleSettings &obstacleSettings() const { return mLF->obstacleSettings(); }
329
331 double repeatDistance() const { return mLF->repeatDistance(); }
332
334 int getNumSelfObstacles() const { return mHoles.count(); }
336 FeaturePart *getSelfObstacle( int i ) { return mHoles.at( i ); }
337
339 bool isConnected( FeaturePart *p2 );
340
345 bool mergeWithFeaturePart( FeaturePart *other );
346
352 void addSizePenalty( std::vector<std::unique_ptr<LabelPosition> > &lPos, double bbx[4], double bby[4] ) const;
353
358 double calculatePriority() const;
359
361 bool onlyShowUprightLabels() const;
362
367 int totalRepeats() const;
368
373 void setTotalRepeats( int repeats );
374
375 protected:
377 QList<FeaturePart *> mHoles;
378
380 void extractCoords( const GEOSGeometry *geom );
381
382 private:
383 Qgis::LabelQuadrantPosition quadrantFromOffset() const;
384
385 int mTotalRepeats = 0;
386
387 mutable std::size_t mCachedMaxLineCandidates = 0;
388 mutable std::size_t mCachedMaxPolygonCandidates = 0;
389
390 FeaturePart &operator=( const FeaturePart & ) = delete;
391 };
392
393} // end namespace pal
394
395#endif
LabelQuadrantPosition
Label quadrant positions.
Definition qgis.h:1375
QFlags< CurvedTextFlag > CurvedTextFlags
Flags controlling behavior of curved text generation.
Definition qgis.h:3201
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:55
bool hasFixedRotation() const
Returns true if the feature's label has a fixed rotation.
Definition feature.h:311
double getLabelHeight(double angle=0.0) const
Returns the height of the label, optionally taking an angle (in radians) into account.
Definition feature.h:302
QList< FeaturePart * > mHoles
Definition feature.h:377
double getLabelDistance() const
Returns the distance from the anchor point to the label.
Definition feature.h:308
bool hasFixedPosition() const
Returns true if the feature's label has a fixed position.
Definition feature.h:317
double fixedAngle() const
Returns the fixed angle for the feature's label.
Definition feature.h:314
double repeatDistance() const
Returns the distance between repeating labels for this feature.
Definition feature.h:331
int getNumSelfObstacles() const
Gets number of holes (inner rings) - they are considered as obstacles.
Definition feature.h:334
QgsLabelFeature * mLF
Definition feature.h:376
double getLabelWidth(double angle=0.0) const
Returns the width of the label, optionally taking an angle (in radians) into account.
Definition feature.h:297
const QgsLabelObstacleSettings & obstacleSettings() const
Returns the feature's obstacle settings.
Definition feature.h:328
bool alwaysShow() const
Returns true if the feature's label should always been shown, even when it collides with other labels...
Definition feature.h:323
QgsLabelFeature * feature()
Returns the parent feature.
Definition feature.h:87
PathOffset
Path offset variances used in curved placement.
Definition feature.h:64
FeaturePart * getSelfObstacle(int i)
Gets hole (inner ring) - considered as obstacle.
Definition feature.h:336
void extractCoords(const GEOSGeometry *geom)
read coordinates from a GEOS geom
Definition feature.cpp:93
A set of features which influence the labeling process.
Definition layer.h:63
Main Pal labeling class.
Definition pal.h:87
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