void CostCalculator::setCandidateCostFromPolygon( LabelPosition* lp, RTree <PointSet*, double, 2, double> *obstacles, double bbx[4], double bby[4] ) { double amin[2]; double amax[2]; PolygonCostCalculator *pCost = new PolygonCostCalculator( lp ); // center //cost = feat->getDistInside((this->x[0] + this->x[2])/2.0, (this->y[0] + this->y[2])/2.0 ); pCost->update( lp->feature ); PointSet *extent = new PointSet( 4, bbx, bby ); pCost->update( extent ); delete extent; lp->feature->getBoundingBox( amin, amax ); obstacles->Search( amin, amax, LabelPosition::polygonObstacleCallback, pCost ); lp->setCost( pCost->getCost() ); delete pCost; }
bool LabelPosition::polygonObstacleCallback( PointSet *feat, void *ctx ) { PolygonCostCalculator *pCost = ( PolygonCostCalculator* ) ctx; LabelPosition *lp = pCost->getLabel(); if (( feat == lp->feature ) || ( feat->getHoleOf() && feat->getHoleOf() != lp->feature ) ) { return true; } pCost->update( feat ); return true; }
bool LabelPosition::polygonObstacleCallback( FeaturePart *obstacle, void *ctx ) { PolygonCostCalculator *pCost = ( PolygonCostCalculator* ) ctx; LabelPosition *lp = pCost->getLabel(); if (( obstacle == lp->feature ) || ( obstacle->getHoleOf() && obstacle->getHoleOf() != lp->feature ) ) { return true; } pCost->update( obstacle ); return true; }