MCPcopy Create free account
hub / github.com/comaps/comaps / MakeTurnAnnotation

Method MakeTurnAnnotation

libs/routing/directions_engine.cpp:324–377  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

322// and minimal |turnsDir| is - single ReachedYourDestination with m_index == 5.
323
324void DirectionsEngine::MakeTurnAnnotation(IndexRoadGraph::EdgeVector const & routeEdges,
325 vector<RouteSegment> & routeSegments)
326{
327 CHECK_GREATER_OR_EQUAL(routeEdges.size(), 2, ());
328
329 RoutingEngineResult result(routeEdges, m_adjacentEdges, m_pathSegments);
330
331 routeSegments.reserve(routeEdges.size());
332
333 RoutingSettings const vehicleSettings = GetRoutingSettings(m_vehicleType);
334
335 auto const & loadedSegments = result.GetSegments(); // the same as m_pathSegments
336
337 // First point of first loadedSegment is ignored. This is the reason for:
338 // ASSERT_EQUAL(loadedSegments.front().m_path.back(), loadedSegments.front().m_path.front(), ());
339
340 size_t skipTurnSegments = 0;
341 for (size_t idxLoadedSegment = 0; idxLoadedSegment < loadedSegments.size(); ++idxLoadedSegment)
342 {
343 auto const & loadedSegment = loadedSegments[idxLoadedSegment];
344
345 CHECK(loadedSegment.IsValid(), ());
346 CHECK_GREATER_OR_EQUAL(loadedSegment.m_segments.size(), 1, ());
347 CHECK_EQUAL(loadedSegment.m_segments.size() + 1, loadedSegment.m_path.size(), ());
348
349 auto rni = loadedSegment.m_roadNameInfo;
350
351 for (size_t i = 0; i < loadedSegment.m_segments.size() - 1; ++i)
352 {
353 auto const & junction = loadedSegment.m_path[i + 1];
354 routeSegments.emplace_back(loadedSegment.m_segments[i], TurnItem(), junction, rni);
355 if (i == 0)
356 rni = {"", "", "", "", "", loadedSegment.m_isLink};
357 }
358
359 // For the last segment of current loadedSegment put info about turn
360 // from current loadedSegment to the next one.
361 TurnItem turnItem;
362 if (skipTurnSegments == 0)
363 {
364 turnItem.m_index = base::asserted_cast<uint32_t>(routeSegments.size() + 1);
365 skipTurnSegments = GetTurnDirection(result, idxLoadedSegment + 1, *m_numMwmIds, vehicleSettings, turnItem);
366 }
367 else
368 --skipTurnSegments;
369
370 routeSegments.emplace_back(loadedSegment.m_segments.back(), turnItem, loadedSegment.m_path.back(), rni);
371 }
372
373 // ASSERT_EQUAL(routeSegments.front().GetJunction(), result.GetStartPoint(), ());
374 // ASSERT_EQUAL(routeSegments.back().GetJunction(), result.GetEndPoint(), ());
375
376 FixupTurns(routeSegments);
377}
378
379} // namespace routing

Callers

nothing calls this directly

Calls 7

GetRoutingSettingsFunction · 0.85
backMethod · 0.80
TurnItemClass · 0.70
sizeMethod · 0.45
reserveMethod · 0.45
IsValidMethod · 0.45
emplace_backMethod · 0.45

Tested by

no test coverage detected