| 595 | } |
| 596 | |
| 597 | bool TransitRouteDisplay::ProcessSubroute(vector<routing::RouteSegment> const & segments, df::Subroute & subroute) |
| 598 | { |
| 599 | if (m_subrouteIndex > 0) |
| 600 | { |
| 601 | TransitStepInfo step; |
| 602 | step.m_type = TransitType::IntermediatePoint; |
| 603 | step.m_intermediateIndex = m_subrouteIndex - 1; |
| 604 | m_routeInfo.AddStep(step); |
| 605 | } |
| 606 | |
| 607 | ++m_subrouteIndex; |
| 608 | |
| 609 | TransitDisplayInfos transitDisplayInfos; |
| 610 | CollectTransitDisplayInfo(segments, transitDisplayInfos); |
| 611 | |
| 612 | // Read transit display info. |
| 613 | if (!m_transitReadManager.GetTransitDisplayInfo(transitDisplayInfos)) |
| 614 | return false; |
| 615 | |
| 616 | subroute.m_maxPixelWidth = m_maxSubrouteWidth; |
| 617 | subroute.m_styleType = df::SubrouteStyleType::Multiple; |
| 618 | subroute.m_style.clear(); |
| 619 | subroute.m_style.reserve(segments.size()); |
| 620 | |
| 621 | SubrouteParams sp; |
| 622 | sp.m_prevDistance = m_routeInfo.m_totalDistInMeters; |
| 623 | sp.m_prevTime = m_routeInfo.m_totalTimeInSec; |
| 624 | |
| 625 | for (auto const & s : segments) |
| 626 | { |
| 627 | auto const time = static_cast<int>(ceil(s.GetTimeFromBeginningSec() - sp.m_prevTime)); |
| 628 | auto const distance = s.GetDistFromBeginningMeters() - sp.m_prevDistance; |
| 629 | sp.m_prevDistance = s.GetDistFromBeginningMeters(); |
| 630 | sp.m_prevTime = s.GetTimeFromBeginningSec(); |
| 631 | |
| 632 | if (!s.HasTransitInfo()) |
| 633 | { |
| 634 | m_routeInfo.AddStep(TransitStepInfo(TransitType::Pedestrian, distance, time)); |
| 635 | |
| 636 | AddTransitPedestrianSegment(s.GetJunction().GetPoint(), subroute); |
| 637 | sp.m_lastColor = ""; |
| 638 | sp.m_lastLineId = routing::transit::kInvalidLineId; |
| 639 | sp.m_transitType = TransitType::Pedestrian; |
| 640 | continue; |
| 641 | } |
| 642 | |
| 643 | SubrouteSegmentParams ssp(s.GetTransitInfo()); |
| 644 | |
| 645 | ssp.m_time = time; |
| 646 | ssp.m_distance = distance; |
| 647 | ssp.m_mwmId = m_getMwmIdFn(s.GetSegment().GetMwmId()); |
| 648 | ssp.m_displayInfo = *transitDisplayInfos.at(ssp.m_mwmId).get(); |
| 649 | |
| 650 | if (ssp.m_transitInfo.GetVersion() == ::transit::TransitVersion::OnlySubway) |
| 651 | { |
| 652 | if (ssp.m_transitInfo.GetType() == routing::TransitInfo::Type::Edge) |
| 653 | AddEdgeSubwayForSubroute(s, subroute, sp, ssp); |
| 654 | else if (ssp.m_transitInfo.GetType() == routing::TransitInfo::Type::Gate) |
no test coverage detected