| 757 | } |
| 758 | |
| 759 | bool RoutingManager::InsertRoute(Route const & route) |
| 760 | { |
| 761 | if (!m_drapeEngine) |
| 762 | return false; |
| 763 | |
| 764 | // TODO: Now we always update whole route, so we need to remove previous one. |
| 765 | RemoveRoute(false /* deactivateFollowing */); |
| 766 | |
| 767 | auto numMwmIds = make_shared<NumMwmIds>(); |
| 768 | m_delegate.RegisterCountryFilesOnRoute(numMwmIds); |
| 769 | auto const getMwmId = [this, numMwmIds](routing::NumMwmId numMwmId) |
| 770 | { return m_callbacks.m_dataSourceGetter().GetMwmIdByCountryFile(numMwmIds->GetFile(numMwmId)); }; |
| 771 | |
| 772 | RoadWarningsCollection roadWarnings; |
| 773 | vector<std::pair<m2::PointD, FeatureID>> trafficLights; |
| 774 | |
| 775 | bool const isTransitRoute = (m_currentRouterType == RouterType::Transit); |
| 776 | shared_ptr<TransitRouteDisplay> transitRouteDisplay; |
| 777 | if (isTransitRoute) |
| 778 | { |
| 779 | transitRouteDisplay = make_shared<TransitRouteDisplay>( |
| 780 | *m_transitReadManager, getMwmId, m_callbacks.m_stringsBundleGetter, m_bmManager, m_transitSymbolSizes); |
| 781 | } |
| 782 | |
| 783 | vector<RouteSegment> segments; |
| 784 | double distance = 0.0; |
| 785 | auto const subroutesCount = route.GetSubrouteCount(); |
| 786 | for (size_t subrouteIndex = route.GetCurrentSubrouteIdx(); subrouteIndex < subroutesCount; ++subrouteIndex) |
| 787 | { |
| 788 | route.GetSubrouteInfo(subrouteIndex, segments); |
| 789 | |
| 790 | auto const startPt = route.GetSubrouteAttrs(subrouteIndex).GetStart().GetPoint(); |
| 791 | auto subroute = CreateDrapeSubroute(segments, startPt, distance, |
| 792 | static_cast<double>(subroutesCount - subrouteIndex - 1), m_currentRouterType); |
| 793 | if (!subroute) |
| 794 | continue; |
| 795 | distance = segments.back().GetDistFromBeginningMerc(); |
| 796 | switch (m_currentRouterType) |
| 797 | { |
| 798 | case RouterType::Vehicle: |
| 799 | { |
| 800 | subroute->m_routeType = df::RouteType::Car; |
| 801 | subroute->AddStyle(df::SubrouteStyle(df::kRouteColor, df::kRouteOutlineColor)); |
| 802 | FillTrafficForRendering(segments, subroute->m_traffic); |
| 803 | FillTurnsDistancesForRendering(segments, subroute->m_baseDistance, subroute->m_turns); |
| 804 | break; |
| 805 | } |
| 806 | case RouterType::Transit: |
| 807 | { |
| 808 | subroute->m_routeType = df::RouteType::Transit; |
| 809 | if (!transitRouteDisplay->ProcessSubroute(segments, *subroute.get())) |
| 810 | continue; |
| 811 | break; |
| 812 | } |
| 813 | case RouterType::Pedestrian: |
| 814 | { |
| 815 | subroute->m_routeType = df::RouteType::Pedestrian; |
| 816 | subroute->AddStyle(df::SubrouteStyle(df::kRoutePedestrian, df::RoutePattern(4.0, 2.0))); |
nothing calls this directly
no test coverage detected