diff options
author | Chris Loer <chris.loer@gmail.com> | 2018-09-06 14:58:37 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@mapbox.com> | 2018-09-12 14:10:46 -0700 |
commit | d735d89835fb3076e09594fce2a141fe1495e33f (patch) | |
tree | 36fb80484b3952fb730fd34a77439d303d002cdc /src/mbgl/util | |
parent | 079ba0209ed383c15123902f0810e658c2b0abf4 (diff) | |
download | qtlocation-mapboxgl-d735d89835fb3076e09594fce2a141fe1495e33f.tar.gz |
[core] Port "collision group" plumbing to gl-native.
[node] Hook up map-wide "crossSourceCollisions" option, defaulting to true.
[test] Pass "crossSourceCollisions" test option through test harness; enable cross-source-collisions tests on native.
Diffstat (limited to 'src/mbgl/util')
-rw-r--r-- | src/mbgl/util/grid_index.cpp | 24 | ||||
-rw-r--r-- | src/mbgl/util/grid_index.hpp | 5 |
2 files changed, 19 insertions, 10 deletions
diff --git a/src/mbgl/util/grid_index.cpp b/src/mbgl/util/grid_index.cpp index afd469501d..f6b59b1bac 100644 --- a/src/mbgl/util/grid_index.cpp +++ b/src/mbgl/util/grid_index.cpp @@ -82,21 +82,29 @@ std::vector<std::pair<T, typename GridIndex<T>::BBox>> GridIndex<T>::queryWithBo } template <class T> -bool GridIndex<T>::hitTest(const BBox& queryBBox) const { +bool GridIndex<T>::hitTest(const BBox& queryBBox, optional<std::function<bool(const T&)>> predicate) const { bool hit = false; - query(queryBBox, [&](const T&, const BBox&) -> bool { - hit = true; - return true; + query(queryBBox, [&](const T& t, const BBox&) -> bool { + if (!predicate || (*predicate)(t)) { + hit = true; + return true; + } else { + return false; + } }); return hit; } template <class T> -bool GridIndex<T>::hitTest(const BCircle& queryBCircle) const { +bool GridIndex<T>::hitTest(const BCircle& queryBCircle, optional<std::function<bool(const T&)>> predicate) const { bool hit = false; - query(queryBCircle, [&](const T&, const BBox&) -> bool { - hit = true; - return true; + query(queryBCircle, [&](const T& t, const BBox&) -> bool { + if (!predicate || (*predicate)(t)) { + hit = true; + return true; + } else { + return false; + } }); return hit; } diff --git a/src/mbgl/util/grid_index.hpp b/src/mbgl/util/grid_index.hpp index 6ef2966bee..4c2d7dccc8 100644 --- a/src/mbgl/util/grid_index.hpp +++ b/src/mbgl/util/grid_index.hpp @@ -2,6 +2,7 @@ #include <mapbox/geometry/point.hpp> #include <mapbox/geometry/box.hpp> +#include <mbgl/util/optional.hpp> #include <cstdint> #include <cstddef> @@ -67,8 +68,8 @@ public: std::vector<T> query(const BBox&) const; std::vector<std::pair<T,BBox>> queryWithBoxes(const BBox&) const; - bool hitTest(const BBox&) const; - bool hitTest(const BCircle&) const; + bool hitTest(const BBox&, optional<std::function<bool(const T&)>> predicate = nullopt) const; + bool hitTest(const BCircle&, optional<std::function<bool(const T&)>> predicate = nullopt) const; bool empty() const; |