diff options
Diffstat (limited to 'drape/overlay_tree.hpp')
-rw-r--r-- | drape/overlay_tree.hpp | 63 |
1 files changed, 20 insertions, 43 deletions
diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp index 29344086af..2b7b994690 100644 --- a/drape/overlay_tree.hpp +++ b/drape/overlay_tree.hpp @@ -2,65 +2,42 @@ #include "overlay_handle.hpp" -#include "../base/buffer_vector.hpp" #include "../geometry/screenbase.hpp" +#include "../geometry/tree4d.hpp" -#include "../std/kdtree.hpp" namespace dp { -class OverlayTree +namespace detail { -public: - void StartOverlayPlacing(ScreenBase const & screen, bool canOverlap = false); - void Add(RefPointer<OverlayHandle> handle); - void EndOverlayPlacing(); - -private: - struct Node - { - typedef double value_type; - - Node(RefPointer<OverlayHandle> handle, m2::RectD const & pixelRect); - - RefPointer<OverlayHandle> m_nodeValue; - double m_pts[4]; - - double operator[] (size_t i) const { return m_pts[i]; } - }; +struct OverlayTraits +{ ScreenBase m_modelView; - typedef KDTree::KDTree<4, Node> tree_t; - tree_t m_tree; - bool m_canOverlap; -private: - typedef buffer_vector<Node const *, 8> find_result_t; - - class BaseFindFunctor + inline m2::RectD const LimitRect(RefPointer<OverlayHandle> handle) { - public: - BaseFindFunctor(m2::RectD const & r); + return handle->GetPixelRect(m_modelView); + } +}; - bool ScanLeft(size_t plane, Node const & v) const; - bool ScanRight(size_t plane, Node const & v) const; +} - protected: - m2::RectD const & m_rect; - }; +class OverlayTree : public m4::Tree<RefPointer<OverlayHandle>, detail::OverlayTraits> +{ + typedef m4::Tree<RefPointer<OverlayHandle>, detail::OverlayTraits> BaseT; - class FindIntersectedFunctor : public BaseFindFunctor - { - typedef BaseFindFunctor base_t; - public: - FindIntersectedFunctor(m2::RectD const & r, find_result_t & intersections); +public: + void StartOverlayPlacing(ScreenBase const & screen, bool canOverlap = false); + void Add(RefPointer<OverlayHandle> handle); + void EndOverlayPlacing(); - void operator()(Node const & node); +private: + ScreenBase const & GetModelView() const { return m_traits.m_modelView; } - private: - find_result_t & m_intersections; - }; +private: + bool m_canOverlap; }; } // namespace dp |