51       else if ( dist < distlabel )
   100   for ( 
int i = 0; i < nblp; ++i )
   106   QList< LabelPosition * > toSort;
   107   toSort.reserve( nblp );
   108   for ( 
int i = 0; i < nblp; ++i )
   110     toSort << lPos.at( i );
   113   for ( 
int i = 0; i < nblp; ++i )
   115     lPos[i] = toSort.at( i );
   119   double cost_max = lPos.at( 0 )->cost();
   120   double cost_min = lPos.at( nblp - 1 )->cost();
   122   cost_max -= cost_min;
   126     normalizer = 0.0020 / cost_max;
   135   for ( 
int i = 0; i < nblp; ++i )
   140       lPos.at( i )->setCost( 0.0021 - ( lPos.at( i )->cost() - cost_min ) * normalizer );
   145       lPos.at( i )->setCost( 0.0001 );
   180   if ( max_p > feat->
lPos.count() )
   181     max_p = feat->
lPos.count();
   187   double discrim = 0.0;
   192     for ( stop = 0; stop < feat->
lPos.count() && feat->
lPos.at( stop )->cost() < discrim; stop++ )
   195   while ( stop == 0 && discrim < feat->lPos.last()->cost() + 2.0 );
   200     for ( k = 0; k < stop; k++ )
   201       feat->
lPos.at( k )->setCost( 0.0021 );
   224   px = ( lp->
x[0] + lp->
x[2] ) / 2.0;
   225   py = ( lp->
y[0] + lp->
y[2] ) / 2.0;
   227   dist = std::numeric_limits<double>::max();
 
double obstacleFactor() const 
Returns the feature's obstacle factor, which represents the penalty incurred for a label to overlap t...
 
static bool candidateSortGrow(const LabelPosition *c1, const LabelPosition *c2)
Sorts label candidates in ascending order of cost. 
 
void setCost(double newCost)
Sets the candidate label position's geographical cost. 
 
double cost() const 
Returns the candidate label position's geographical cost. 
 
void addSizePenalty(int nbp, QList< LabelPosition * > &lPos, double bbx[4], double bby[4])
 
LabelPosition * getLabel()
 
Arranges candidates following the curvature of a line feature. Applies to line layers only...
 
void update(pal::PointSet *pset)
 
QgsPalLayerSettings::Placement arrangement() const 
Returns the layer's arrangement policy. 
 
static void addObstacleCostPenalty(LabelPosition *lp, pal::FeaturePart *obstacle)
Increase candidate's cost according to its collision with passed feature. 
 
QgsPalLayerSettings::ObstacleType obstacleType() const 
Returns the obstacle type, which controls how features within the layer act as obstacles for labels...
 
double getLabelDistance() const 
 
PolygonCostCalculator(LabelPosition *lp)
 
double getDistanceToPoint(double xp, double yp) const 
Gets distance from this label to a point. If point lies inside, returns negative number. 
 
Layer * layer()
Returns the layer that feature belongs to. 
 
int polygonIntersectionCost(PointSet *polygon) const 
Returns cost of position intersection with polygon (testing area of intersection and center)...
 
static int finalizeCandidatesCosts(Feats *feat, int max_p, RTree< pal::FeaturePart *, double, 2, double > *obstacles, double bbx[4], double bby[4])
Sort candidates by costs, skip the worse ones, evaluate polygon candidates. 
 
QList< LabelPosition * > lPos
 
bool crossesLine(PointSet *line) const 
Returns true if this label crosses the specified line. 
 
For usage in problem solving algorithm. 
 
Main class to handle feature. 
 
void getBoundingBox(double min[2], double max[2]) const 
 
bool intersectsWithPolygon(PointSet *polygon) const 
Returns true if any intersection between polygon and position exists. 
 
static void setPolygonCandidatesCost(int nblp, QList< LabelPosition * > &lPos, RTree< pal::FeaturePart *, double, 2, double > *obstacles, double bbx[4], double bby[4])
 
bool crossesBoundary(PointSet *polygon) const 
Returns true if this label crosses the boundary of the specified polygon. 
 
void setConflictsWithObstacle(bool conflicts)
Sets whether the position is marked as conflicting with an obstacle feature. 
 
static bool polygonObstacleCallback(pal::FeaturePart *obstacle, void *ctx)
 
static void setCandidateCostFromPolygon(LabelPosition *lp, RTree< pal::FeaturePart *, double, 2, double > *obstacles, double bbx[4], double bby[4])
Sets cost to the smallest distance between lPos's centroid and a polygon stored in geoetry field...
 
LabelPosition is a candidate feature label position. 
 
double minDistanceToPoint(double px, double py, double *rx=nullptr, double *ry=nullptr) const 
Returns the squared minimum distance between the point set geometry and the point (px...
 
static bool candidateSortShrink(const LabelPosition *c1, const LabelPosition *c2)
Sorts label candidates in descending order of cost. 
 
Data structure to compute polygon's candidates costs. 
 
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...