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

Method UpdatePreview

libs/drape_frontend/route_renderer.cpp:309–364  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

307}
308
309void RouteRenderer::UpdatePreview(ScreenBase const & screen)
310{
311 // Check if there are preview render data.
312 if (m_previewRenderData.empty() && !m_waitForPreviewRenderData)
313 {
314 m_previewPointsRequest(kPreviewPointsCount);
315 m_waitForPreviewRenderData = true;
316 }
317 if (m_waitForPreviewRenderData)
318 return;
319
320 float previewCircleRadius = 0.0;
321 if (!m_previewSegments.empty())
322 {
323 ClearPreviewHandles();
324 m_previewPivot = screen.GlobalRect().Center();
325 previewCircleRadius = CalculateRadius(screen, kPreviewPointRadiusInPixel);
326 }
327 double const currentScaleGtoP = 1.0 / screen.GetScale();
328 double const radiusMercator = previewCircleRadius / currentScaleGtoP;
329 double const diameterMercator = 2.0 * radiusMercator;
330 double const gapMercator = diameterMercator;
331 dp::Color const circleColor = df::GetColorConstant(kRoutePreview);
332
333 for (auto const & previewSegment : m_previewSegments)
334 {
335 auto const & info = previewSegment.second;
336 m2::PolylineD polyline = {info.m_startPoint, info.m_finishPoint};
337 double const segmentLen = polyline.GetLength();
338 auto circlesCount = static_cast<size_t>(segmentLen / (diameterMercator + gapMercator));
339 if (circlesCount == 0)
340 circlesCount = 1;
341 double const distDelta = segmentLen / circlesCount;
342 for (double d = distDelta * 0.5; d < segmentLen; d += distDelta)
343 {
344 m2::PointD const pt = polyline.GetPointByDistance(d);
345 m2::RectD const circleRect(pt.x - radiusMercator, pt.y - radiusMercator, pt.x + radiusMercator,
346 pt.y + radiusMercator);
347 if (!screen.ClipRect().IsIntersect(circleRect))
348 continue;
349
350 size_t pointIndex;
351 CirclesPackHandle * h = GetPreviewHandle(pointIndex);
352 if (h == nullptr)
353 {
354 // There is no any available handle.
355 m_previewPointsRequest(kPreviewPointsCount);
356 m_waitForPreviewRenderData = true;
357 return;
358 }
359
360 m2::PointD const convertedPt = MapShape::ConvertToLocal(pt, m_previewPivot, kShapeCoordScalar);
361 h->SetPoint(pointIndex, convertedPt, previewCircleRadius, circleColor);
362 }
363 }
364}
365
366void RouteRenderer::ClearPreviewHandles()

Callers 1

RenderFrameMethod · 0.80

Calls 9

CalculateRadiusFunction · 0.85
GetColorConstantFunction · 0.85
GetPointByDistanceMethod · 0.80
emptyMethod · 0.45
CenterMethod · 0.45
GetScaleMethod · 0.45
GetLengthMethod · 0.45
IsIntersectMethod · 0.45
SetPointMethod · 0.45

Tested by

no test coverage detected