// startRect - mercator visible on screen rect in moment when user release fingers. // direction - mercator space direction of moving. length(direction) - mercator distance on wich map will be offset. KineticScrollAnimation(m2::AnyRectD const & startRect, m2::PointD const & direction, double duration) : BaseModelViewAnimation(duration) , m_targetCenter(startRect.GlobalCenter() + direction) , m_angle(startRect.Angle()) , m_localRect(startRect.GetLocalRect()) , m_direction(direction) { }
string ToString<m2::AnyRectD>(m2::AnyRectD const & rect) { ostringstream out; out.precision(12); m2::PointD glbZero(rect.GlobalZero()); out << glbZero.x << " " << glbZero.y << " "; out << rect.Angle().val() << " "; m2::RectD const & r = rect.GetLocalRect(); out << r.minX() << " " << r.minY() << " " << r.maxX() << " " << r.maxY(); return out.str(); }
void ScreenBase::SetFromRects(m2::AnyRectD const & glbRect, m2::RectD const & pxRect) { double hScale = glbRect.GetLocalRect().SizeX() / pxRect.SizeX(); double vScale = glbRect.GetLocalRect().SizeY() / pxRect.SizeY(); m_Scale = max(hScale, vScale); m_Angle = glbRect.Angle(); m_Org = glbRect.GlobalCenter(); UpdateDependentParameters(); }
void Navigator::SetFromRect(m2::AnyRectD const & r, uint32_t tileSize, double visualScale) { m2::RectD const & worldR = df::GetWorldRect(); ScreenBase tmp = m_Screen; tmp.SetFromRect(r); tmp = ScaleInto(tmp, worldR); if (!CheckMaxScale(tmp, tileSize, visualScale)) { int const scale = scales::GetUpperStyleScale() - 1; m2::RectD newRect = df::GetRectForDrawScale(scale, r.Center()); CheckMinMaxVisibleScale(newRect, scale); tmp = m_Screen; tmp.SetFromRect(m2::AnyRectD(newRect)); ASSERT(CheckMaxScale(tmp, tileSize, visualScale), ()); }
void ShapeRenderer::drawRectangle(m2::AnyRectD const & r, graphics::Color const & c, double depth) { uint32_t id = base_t::mapInfo(Brush::Info(c)); Resource const * res = base_t::fromID(id); if (res == 0) { LOG(LDEBUG, ("cannot map color")); return; } m2::PointD rectPts[4]; r.GetGlobalPoints(rectPts); swap(rectPts[2], rectPts[3]); m2::PointF rectPtsF[4]; for (int i = 0; i < 4; ++i) rectPtsF[i] = m2::PointF(rectPts[i].x, rectPts[i].y); GeometryPipeline & p = pipeline(res->m_pipelineID); shared_ptr<gl::BaseTexture> texture = p.texture(); if (!texture) { LOG(LDEBUG, ("returning as no texture is reserved")); return; } m2::PointF texPt = texture->mapPixel(m2::RectF(res->m_texRect).Center()); m2::PointF normal(0, 0); addTexturedStripStrided( rectPtsF, sizeof(m2::PointF), &normal, 0, &texPt, 0, 4, depth, res->m_pipelineID); }
drape_ptr<MapLinearAnimation> GetSetRectAnimation(ScreenBase const & screen, m2::AnyRectD const & startRect, m2::AnyRectD const & endRect) { auto anim = make_unique_dp<MapLinearAnimation>(); double const startScale = CalculateScale(screen.PixelRect(), startRect.GetLocalRect()); double const endScale = CalculateScale(screen.PixelRect(), endRect.GetLocalRect()); anim->SetRotate(startRect.Angle().val(), endRect.Angle().val()); anim->SetMove(startRect.GlobalCenter(), endRect.GlobalCenter(), screen); anim->SetScale(startScale, endScale); anim->SetMaxScaleDuration(kMaxAnimationTimeSec); return anim; }
double CalculateScale(ScreenBase const & screen, m2::AnyRectD const & rect) { return CalculateScale(screen, rect.GetLocalRect()); }