Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-01-11 17:23:33 +0300
committerGitHub <noreply@github.com>2017-01-11 17:23:33 +0300
commit341f7282abdc034901f864dacf8be68404206a69 (patch)
tree9363e99dbfb29ca799e23ce0a918b42a892d1bfe
parent51ca85539e96b77e86c58f9ded27473a44dc52d6 (diff)
parent68f4f859372fdaacffd8a4f31441737fbdd5fbc4 (diff)
Merge pull request #5166 from rokuz/fixed-route-clippingbeta-566
Fixed route clipping
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp5
-rw-r--r--drape_frontend/route_shape.cpp32
2 files changed, 22 insertions, 15 deletions
diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp
index bd520d35a2..94572c324d 100755
--- a/drape_frontend/frontend_renderer.cpp
+++ b/drape_frontend/frontend_renderer.cpp
@@ -435,7 +435,12 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
location::RouteMatchingInfo const & info = msg->GetRouteInfo();
if (info.HasDistanceFromBegin())
+ {
m_routeRenderer->UpdateDistanceFromBegin(info.GetDistanceFromBegin());
+ // Here we have to recache route arrows.
+ m_routeRenderer->UpdateRoute(m_userEventStream.GetCurrentScreen(),
+ bind(&FrontendRenderer::OnCacheRouteArrows, this, _1, _2));
+ }
break;
}
diff --git a/drape_frontend/route_shape.cpp b/drape_frontend/route_shape.cpp
index a592e25139..779927fbda 100644
--- a/drape_frontend/route_shape.cpp
+++ b/drape_frontend/route_shape.cpp
@@ -145,6 +145,10 @@ void RouteShape::PrepareGeometry(vector<m2::PointD> const & path, m2::PointD con
// Build geometry.
float length = 0.0f;
+ for (size_t i = 0; i < segments.size() ; ++i)
+ length += glsl::length(segments[i].m_points[EndPoint] - segments[i].m_points[StartPoint]);
+ outputLength = length;
+
float depth = 0.0f;
float const depthStep = kRouteDepth / (1 + segments.size());
for (int i = static_cast<int>(segments.size() - 1); i >= 0; i--)
@@ -162,7 +166,7 @@ void RouteShape::PrepareGeometry(vector<m2::PointD> const & path, m2::PointD con
glsl::vec3 const endPivot = glsl::vec3(glsl::ToVec2(endPt), depth);
depth += depthStep;
- float const endLength = length + glsl::length(segments[i].m_points[EndPoint] - segments[i].m_points[StartPoint]);
+ float const startLength = length - glsl::length(segments[i].m_points[EndPoint] - segments[i].m_points[StartPoint]);
glsl::vec2 const leftNormalStart = GetNormal(segments[i], true /* isLeft */, StartNormal);
glsl::vec2 const rightNormalStart = GetNormal(segments[i], false /* isLeft */, StartNormal);
@@ -174,15 +178,15 @@ void RouteShape::PrepareGeometry(vector<m2::PointD> const & path, m2::PointD con
float const projRightStart = -segments[i].m_rightWidthScalar[StartPoint].y;
float const projRightEnd = segments[i].m_rightWidthScalar[EndPoint].y;
- geometry.push_back(RV(startPivot, glsl::vec2(0, 0), glsl::vec3(length, 0, kCenter), segments[i].m_color));
- geometry.push_back(RV(startPivot, leftNormalStart, glsl::vec3(length, projLeftStart, kLeftSide), segments[i].m_color));
- geometry.push_back(RV(endPivot, glsl::vec2(0, 0), glsl::vec3(endLength, 0, kCenter), segments[i].m_color));
- geometry.push_back(RV(endPivot, leftNormalEnd, glsl::vec3(endLength, projLeftEnd, kLeftSide), segments[i].m_color));
+ geometry.push_back(RV(startPivot, glsl::vec2(0, 0), glsl::vec3(startLength, 0, kCenter), segments[i].m_color));
+ geometry.push_back(RV(startPivot, leftNormalStart, glsl::vec3(startLength, projLeftStart, kLeftSide), segments[i].m_color));
+ geometry.push_back(RV(endPivot, glsl::vec2(0, 0), glsl::vec3(length, 0, kCenter), segments[i].m_color));
+ geometry.push_back(RV(endPivot, leftNormalEnd, glsl::vec3(length, projLeftEnd, kLeftSide), segments[i].m_color));
- geometry.push_back(RV(startPivot, rightNormalStart, glsl::vec3(length, projRightStart, kRightSide), segments[i].m_color));
- geometry.push_back(RV(startPivot, glsl::vec2(0, 0), glsl::vec3(length, 0, kCenter), segments[i].m_color));
- geometry.push_back(RV(endPivot, rightNormalEnd, glsl::vec3(endLength, projRightEnd, kRightSide), segments[i].m_color));
- geometry.push_back(RV(endPivot, glsl::vec2(0, 0), glsl::vec3(endLength, 0, kCenter), segments[i].m_color));
+ geometry.push_back(RV(startPivot, rightNormalStart, glsl::vec3(startLength, projRightStart, kRightSide), segments[i].m_color));
+ geometry.push_back(RV(startPivot, glsl::vec2(0, 0), glsl::vec3(startLength, 0, kCenter), segments[i].m_color));
+ geometry.push_back(RV(endPivot, rightNormalEnd, glsl::vec3(length, projRightEnd, kRightSide), segments[i].m_color));
+ geometry.push_back(RV(endPivot, glsl::vec2(0, 0), glsl::vec3(length, 0, kCenter), segments[i].m_color));
// Generate joins.
if (segments[i].m_generateJoin && i < static_cast<int>(segments.size()) - 1)
@@ -200,7 +204,7 @@ void RouteShape::PrepareGeometry(vector<m2::PointD> const & path, m2::PointD con
GenerateJoinNormals(dp::RoundJoin, n1, n2, 1.0f, segments[i].m_hasLeftJoin[EndPoint],
widthScalar, normals);
- GenerateJoinsTriangles(endPivot, normals, segments[i].m_color, glsl::vec2(endLength, 0),
+ GenerateJoinsTriangles(endPivot, normals, segments[i].m_color, glsl::vec2(length, 0),
segments[i].m_hasLeftJoin[EndPoint], joinsGeometry);
}
@@ -213,7 +217,7 @@ void RouteShape::PrepareGeometry(vector<m2::PointD> const & path, m2::PointD con
segments[i].m_rightNormals[StartPoint], -segments[i].m_tangent,
1.0f, true /* isStart */, normals);
- GenerateJoinsTriangles(startPivot, normals, segments[i].m_color, glsl::vec2(length, 0),
+ GenerateJoinsTriangles(startPivot, normals, segments[i].m_color, glsl::vec2(startLength, 0),
true, joinsGeometry);
}
@@ -225,14 +229,12 @@ void RouteShape::PrepareGeometry(vector<m2::PointD> const & path, m2::PointD con
segments[i].m_rightNormals[EndPoint], segments[i].m_tangent,
1.0f, false /* isStart */, normals);
- GenerateJoinsTriangles(endPivot, normals, segments[i].m_color, glsl::vec2(endLength, 0),
+ GenerateJoinsTriangles(endPivot, normals, segments[i].m_color, glsl::vec2(length, 0),
true, joinsGeometry);
}
- length = endLength;
+ length = startLength;
}
-
- outputLength = length;
}
void RouteShape::PrepareArrowGeometry(vector<m2::PointD> const & path, m2::PointD const & pivot,