30#ifndef LABELPOSITION_H
31#define LABELPOSITION_H
94 LabelDirectionToLine directionToLine = LabelDirectionToLine::SameDirection,
107 bool intersects(
const GEOSPreparedGeometry *geometry );
114 bool within(
const GEOSPreparedGeometry *geometry );
132 void getBoundingBox(
double amin[2],
double amax[2] )
const;
152 bool outerBoundingBoxIntersects(
const LabelPosition *other )
const;
161 double getDistanceToPoint(
double xp,
double yp,
bool useOuterBounds )
const;
168 bool crossesLine(
PointSet *line )
const;
175 bool crossesBoundary(
PointSet *polygon )
const;
181 int polygonIntersectionCost(
PointSet *polygon )
const;
188 bool intersectsWithPolygon(
PointSet *polygon )
const;
224 mNextPart->setProblemIds( probFid, lpId );
231 double cost()
const {
return mCost; }
238 void setCost(
double newCost ) { mCost = newCost; }
246 void setConflictsWithObstacle(
bool conflicts );
260 void setHasHardObstacleConflict(
bool conflicts );
277 double getX(
int i = 0 )
const;
283 double getY(
int i = 0 )
const;
291 double getAlpha()
const;
317 void setNextPart( std::unique_ptr< LabelPosition > next ) { mNextPart = std::move( next ); }
359 const GEOSPreparedGeometry *preparedMultiPartGeom()
const;
366 const GEOSPreparedGeometry *preparedOuterBoundsGeom()
const;
376 unsigned int globalId()
const {
return mGlobalId; }
389 double angleDifferential();
417 unsigned int mGlobalId = 0;
418 std::unique_ptr< LabelPosition > mNextPart;
420 std::vector< double > mOuterBoundsX;
421 std::vector< double > mOuterBoundsY;
423 double mOuterBoundsXMin = std::numeric_limits<double>::max();
424 double mOuterBoundsXMax = std::numeric_limits<double>::lowest();
425 double mOuterBoundsYMin = std::numeric_limits<double>::max();
426 double mOuterBoundsYMax = std::numeric_limits<double>::lowest();
429 const GEOSPreparedGeometry *mPreparedOuterBoundsGeos =
nullptr;
434 bool mHasObstacleConflict =
false;
435 bool mHasHardConflict =
false;
436 int mUpsideDownCharCount = 0;
441 int partCount()
const;
447 double polygonIntersectionCostForParts(
PointSet *polygon )
const;
452 void createMultiPartGeosGeom()
const;
456 void createOuterBoundsGeom();
A rtree spatial index for use in the pal labeling engine.
LabelQuadrantPosition
Label quadrant positions.
A rectangle specified with double values.
Represents a part of a label feature.
LabelPosition is a candidate feature label position.
void incrementNumOverlaps()
Increases the number of overlaps recorded against this position by 1.
bool hasHardObstacleConflict() const
Returns whether the position is marked as having a hard conflict with an obstacle feature.
void setNextPart(std::unique_ptr< LabelPosition > next)
Sets the next part of this label position (i.e.
void setCost(double newCost)
Sets the candidate label position's geographical cost.
double alpha
Rotation in radians.
LabelPosition(int id, double x1, double y1, double w, double h, double alpha, double cost, FeaturePart *feature, LabelDirectionToLine directionToLine=LabelDirectionToLine::SameDirection, Qgis::LabelQuadrantPosition quadrant=Qgis::LabelQuadrantPosition::Over)
create a new LabelPosition
int upsideDownCharCount() const
Returns the number of upside down characters for this label position.
void setGlobalId(unsigned int id)
Sets the global id for the candidate, which is unique for a single run of the pal labelling engine.
void decrementNumOverlaps()
Decreases the number of overlaps recorded against this position by 1.
friend class CostCalculator
friend class PolygonCostCalculator
double cost() const
Returns the candidate label position's geographical cost.
bool conflictsWithObstacle() const
Returns whether the position is marked as conflicting with an obstacle feature.
int getNumOverlaps() const
void setProblemIds(int probFid, int lpId)
Set problem feature ID and assigned label candidate ID.
void setUpsideDownCharCount(int count)
Sets the count of upside down characters for this label position.
LabelDirectionToLine
Label directions in relation to line or polygon ring directions.
bool isReversedFromLineDirection() const
Returns true if the label direction is the reversed from the line or polygon ring direction.
unsigned int globalId() const
Returns the global ID for the candidate, which is unique for a single run of the pal labelling engine...
Qgis::LabelQuadrantPosition quadrant() const
Returns the quadrant associated with this label position.
int getProblemFeatureId() const
bool getUpsideDown() const
LabelPosition * nextPart() const
Returns the next part of this label position (i.e.
The underlying raw pal geometry class.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
struct GEOSGeom_t GEOSGeometry