[drape] Minor code prettify.

Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
This commit is contained in:
Viktor Govako 2024-11-23 15:03:10 -03:00 committed by Viktor Havaka
parent 26864888a3
commit 2b62ca9cb9

View file

@ -62,11 +62,10 @@ void GetArrowTextureRegion(ref_ptr<dp::TextureManager> textures,
textures->GetSymbolRegion("route-arrow", region); textures->GetSymbolRegion("route-arrow", region);
} }
std::vector<m2::PointD> CalculatePoints(m2::PolylineD const & polyline, void CalculatePoints(m2::PolylineD const & polyline, double start, double end,
double start, double end) std::vector<m2::PointD> & result)
{ {
std::vector<m2::PointD> result; result.clear();
result.reserve(polyline.GetSize() / 4);
auto addIfNotExist = [&result](m2::PointD const & pnt) auto addIfNotExist = [&result](m2::PointD const & pnt)
{ {
@ -74,12 +73,15 @@ std::vector<m2::PointD> CalculatePoints(m2::PolylineD const & polyline,
result.push_back(pnt); result.push_back(pnt);
}; };
std::vector<m2::PointD> const & path = polyline.GetPoints(); auto const & path = polyline.GetPoints();
double len = 0; double len = 0;
bool started = false; bool started = false;
for (size_t i = 0; i + 1 < path.size(); i++) for (size_t i = 1; i < path.size(); ++i)
{ {
double const dist = (path[i + 1] - path[i]).Length(); auto const & p1 = path[i - 1];
auto const & p2 = path[i];
auto const vec = p2 - p1;
double const dist = vec.Length();
if (dist == 0) if (dist == 0)
continue; continue;
@ -87,7 +89,7 @@ std::vector<m2::PointD> CalculatePoints(m2::PolylineD const & polyline,
if (!started && start >= len && start <= l) if (!started && start >= len && start <= l)
{ {
double const k = (start - len) / dist; double const k = (start - len) / dist;
addIfNotExist(path[i] + (path[i + 1] - path[i]) * k); addIfNotExist(p1 + vec * k);
started = true; started = true;
} }
if (!started) if (!started)
@ -99,16 +101,15 @@ std::vector<m2::PointD> CalculatePoints(m2::PolylineD const & polyline,
if (end >= len && end <= l) if (end >= len && end <= l)
{ {
double const k = (end - len) / dist; double const k = (end - len) / dist;
addIfNotExist(path[i] + (path[i + 1] - path[i]) * k); addIfNotExist(p1 + vec * k);
break; break;
} }
else else
{ {
addIfNotExist(path[i + 1]); addIfNotExist(p2);
} }
len = l; len = l;
} }
return result;
} }
float SideByNormal(glsl::vec2 const & normal, bool isLeft) float SideByNormal(glsl::vec2 const & normal, bool isLeft)
@ -516,13 +517,14 @@ void RouteShape::CacheRouteArrows(ref_ptr<dp::GraphicsContext> context,
// Generate arrow geometry. // Generate arrow geometry.
auto depth = static_cast<float>(baseDepthIndex * rs::kDepthPerSubroute) + rs::kArrowsDepth; auto depth = static_cast<float>(baseDepthIndex * rs::kDepthPerSubroute) + rs::kArrowsDepth;
float const depthStep = (rs::kArrowsDepth - rs::kRouteDepth) / (1 + borders.size()); float const depthStep = (rs::kArrowsDepth - rs::kRouteDepth) / (1 + borders.size());
std::vector<m2::PointD> points;
points.reserve(polyline.GetSize() / 4);
for (ArrowBorders const & b : borders) for (ArrowBorders const & b : borders)
{ {
depth -= depthStep; depth -= depthStep;
std::vector<m2::PointD> points = rs::CalculatePoints(polyline, b.m_startDistance, b.m_endDistance); rs::CalculatePoints(polyline, b.m_startDistance, b.m_endDistance, points);
ASSERT_LESS_OR_EQUAL(points.size(), polyline.GetSize(), ()); PrepareArrowGeometry(points, routeArrowsData.m_pivot, region.GetTexRect(), depthStep, depth, geometryData);
PrepareArrowGeometry(points, routeArrowsData.m_pivot, region.GetTexRect(), depthStep,
depth, geometryData);
} }
geometryData.m_boundingBox.Scale(kBoundingBoxScale); geometryData.m_boundingBox.Scale(kBoundingBoxScale);