| 453 | } |
| 454 | |
| 455 | bool Route::IsSubroutePassed(size_t subrouteIdx) const |
| 456 | { |
| 457 | size_t const endSegmentIdx = GetSubrouteAttrs(subrouteIdx).GetEndSegmentIdx(); |
| 458 | // If all subroutes up to subrouteIdx are empty. |
| 459 | if (endSegmentIdx == 0) |
| 460 | return true; |
| 461 | |
| 462 | size_t const segmentIdx = endSegmentIdx - 1; |
| 463 | CHECK_LESS(segmentIdx, m_routeSegments.size(), ()); |
| 464 | double const lengthMeters = m_routeSegments[segmentIdx].GetDistFromBeginningMeters(); |
| 465 | double const passedDistanceMeters = m_poly.GetDistanceFromStartMeters(); |
| 466 | double const finishToleranceM = |
| 467 | segmentIdx == m_routeSegments.size() - 1 ? m_routingSettings.m_finishToleranceM : kOnEndToleranceM; |
| 468 | return lengthMeters - passedDistanceMeters < finishToleranceM; |
| 469 | } |
| 470 | |
| 471 | void Route::SetSubrouteUid(size_t segmentIdx, SubrouteUid subrouteUid) |
| 472 | { |