diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2016-07-19 16:39:51 +0300 |
---|---|---|
committer | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2016-07-19 16:41:41 +0300 |
commit | 09f40ceeb006843c405923afb05c5522f7d9f921 (patch) | |
tree | 49f4df42e7dc3fde99a2f6bdd94d25cf0a9dc993 /geometry | |
parent | 40856edc02a43097f1ef7d62268fe85d6523e718 (diff) |
Fixed house numbers selection in perspective mode.
Diffstat (limited to 'geometry')
-rw-r--r-- | geometry/screenbase.cpp | 9 | ||||
-rw-r--r-- | geometry/screenbase.hpp | 1 |
2 files changed, 8 insertions, 2 deletions
diff --git a/geometry/screenbase.cpp b/geometry/screenbase.cpp index 89455ae424..32ba27b523 100644 --- a/geometry/screenbase.cpp +++ b/geometry/screenbase.cpp @@ -440,14 +440,19 @@ m2::PointD ScreenBase::PtoP3d(m2::PointD const & pt) const return PtoP3d(pt, 0.0); } +double ScreenBase::GetZScale() const +{ + double const averageScale3d = m_isPerspective ? 2.7 : 1.0; + return 2.0 / (m_Scale * m_ViewportRect.SizeY() * averageScale3d); +} + m2::PointD ScreenBase::PtoP3d(m2::PointD const & pt, double ptZ) const { if (!m_isPerspective) return pt; - Vector3dT const normalizedPoint{float(2.0 * pt.x / m_PixelRect.SizeX() - 1.0), -float(2.0 * pt.y / m_PixelRect.SizeY() - 1.0), - float(2.0 * ptZ / m_PixelRect.SizeY()), 1.0}; + float(ptZ * GetZScale()), 1.0}; Vector3dT const perspectivePoint = normalizedPoint * m_Pto3d; diff --git a/geometry/screenbase.hpp b/geometry/screenbase.hpp index 9ac6650bd6..2346f1dd0b 100644 --- a/geometry/screenbase.hpp +++ b/geometry/screenbase.hpp @@ -140,6 +140,7 @@ public: double GetMaxRotationAngle() const { return m_3dMaxAngleX; } double GetAngleFOV() const { return m_3dFOV; } double GetScale3d() const { return m_3dScale; } + double GetZScale() const; double GetDepth3d() const { return m_3dFarZ - m_3dNearZ; } |