summaryrefslogtreecommitdiff
path: root/src/mbgl/text/collision_index.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/text/collision_index.hpp')
-rw-r--r--src/mbgl/text/collision_index.hpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/mbgl/text/collision_index.hpp b/src/mbgl/text/collision_index.hpp
index b2be4c6ade..78782fe61c 100644
--- a/src/mbgl/text/collision_index.hpp
+++ b/src/mbgl/text/collision_index.hpp
@@ -3,13 +3,18 @@
#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/text/collision_feature.hpp>
#include <mbgl/util/grid_index.hpp>
+#include <mbgl/util/optional.hpp>
#include <mbgl/map/transform_state.hpp>
+#include <array>
+
namespace mbgl {
class PlacedSymbol;
struct TileDistance;
+
+using CollisionTileBoundaries = std::array<float,4>;
class CollisionIndex {
public:
@@ -26,15 +31,19 @@ public:
const float fontSize,
const bool allowOverlap,
const bool pitchWithMap,
- const bool collisionDebug);
+ const bool collisionDebug,
+ const optional<CollisionTileBoundaries>& avoidEdges);
void insertFeature(CollisionFeature& feature, bool ignorePlacement, uint32_t bucketInstanceId);
std::unordered_map<uint32_t, std::vector<IndexedSubfeature>> queryRenderedSymbols(const ScreenLineString&) const;
+
+ CollisionTileBoundaries projectTileBoundaries(const mat4& posMatrix) const;
private:
bool isOffscreen(const CollisionBox&) const;
bool isInsideGrid(const CollisionBox&) const;
+ bool isInsideTile(const CollisionBox&, const CollisionTileBoundaries& tileBoundaries) const;
std::pair<bool,bool> placeLineFeature(CollisionFeature& feature,
const mat4& posMatrix,
@@ -45,7 +54,8 @@ private:
const float fontSize,
const bool allowOverlap,
const bool pitchWithMap,
- const bool collisionDebug);
+ const bool collisionDebug,
+ const optional<CollisionTileBoundaries>& avoidEdges);
float approximateTileDistance(const TileDistance& tileDistance, const float lastSegmentAngle, const float pixelsToTileUnits, const float cameraToAnchorDistance, const bool pitchWithMap);