Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Sorokin <sorok-roma@yandex.ru>2014-08-20 17:46:57 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:25:17 +0300
commit5a4d268daf2f54893250357a0c961375eafb4ff5 (patch)
tree85ace0ba90f4bd031eaa161a40221e3c74d364aa /drape/overlay_tree.hpp
parentd28f9cb2e29e53b65d1475b5374148e790eaaaaa (diff)
Improved OverlayTree
Diffstat (limited to 'drape/overlay_tree.hpp')
-rw-r--r--drape/overlay_tree.hpp63
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