diff options
author | vng <viktor.govako@gmail.com> | 2014-07-01 17:51:38 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:19:13 +0300 |
commit | d67e303dc56a536e062db53983d9aef5081309f9 (patch) | |
tree | 2cca4bb832deb7a7a8cb274a4b5d156837817d40 /geometry | |
parent | d5c1066127f69052a741fe62e2f6fdca59ea8906 (diff) |
Fixed viewport for search results on the map.
Diffstat (limited to 'geometry')
-rw-r--r-- | geometry/any_rect2d.hpp | 10 | ||||
-rw-r--r-- | geometry/geometry_tests/anyrect_test.cpp | 13 | ||||
-rw-r--r-- | geometry/rect2d.hpp | 12 |
3 files changed, 35 insertions, 0 deletions
diff --git a/geometry/any_rect2d.hpp b/geometry/any_rect2d.hpp index e8cd054268..ea9037818e 100644 --- a/geometry/any_rect2d.hpp +++ b/geometry/any_rect2d.hpp @@ -228,6 +228,16 @@ namespace m2 { m_zero = ConvertTo(ConvertFrom(m_zero) + p); } + + Point<T> const Center() const + { + return ConvertFrom(m_rect.Center()); + } + + void SetSizesToIncludePoint(Point<T> const & p) + { + m_rect.SetSizesToIncludePoint(ConvertTo(p)); + } }; template <typename T> diff --git a/geometry/geometry_tests/anyrect_test.cpp b/geometry/geometry_tests/anyrect_test.cpp index e3d9a8872e..9ae89d06b5 100644 --- a/geometry/geometry_tests/anyrect_test.cpp +++ b/geometry/geometry_tests/anyrect_test.cpp @@ -71,3 +71,16 @@ UNIT_TEST(AnyRect_TestIsIntersect) TEST(r0.IsIntersect(r3), ()); } +UNIT_TEST(AnyRect_SetSizesToIncludePoint) +{ + m2::AnyRectD rect(m2::PointD(100, 100), math::pi / 6, m2::RectD(0, 0, 50, 50)); + + TEST(!rect.IsPointInside(m2::PointD(0, 0)), ()); + TEST(!rect.IsPointInside(m2::PointD(200, 200)), ()); + + rect.SetSizesToIncludePoint(m2::PointD(0, 0)); + TEST(rect.IsPointInside(m2::PointD(0, 0)), ()); + + rect.SetSizesToIncludePoint(m2::PointD(200, 200)); + TEST(rect.IsPointInside(m2::PointD(200, 200)), ()); +} diff --git a/geometry/rect2d.hpp b/geometry/rect2d.hpp index 6154eec94a..09414221e6 100644 --- a/geometry/rect2d.hpp +++ b/geometry/rect2d.hpp @@ -176,6 +176,18 @@ namespace m2 m_maxY = c.y + dy; } + void SetSizesToIncludePoint(Point<T> const & pt) + { + Point<T> const c = Center(); + T const dx = my::Abs(pt.x - c.x); + T const dy = my::Abs(pt.y - c.y); + + m_minX = c.x - dx; + m_minY = c.y - dy; + m_maxX = c.x + dx; + m_maxY = c.y + dy; + } + void SetCenter(m2::Point<T> const & p) { Offset(p - Center()); |