1 #pragma once 2 3 #include <mbgl/geometry/feature_index.hpp> 4 #include <mbgl/text/collision_feature.hpp> 5 #include <mbgl/util/grid_index.hpp> 6 #include <mbgl/map/transform_state.hpp> 7 8 namespace mbgl { 9 10 class PlacedSymbol; 11 12 struct TileDistance; 13 14 class CollisionIndex { 15 public: 16 using CollisionGrid = GridIndex<IndexedSubfeature>; 17 18 explicit CollisionIndex(const TransformState&); 19 20 std::pair<bool,bool> placeFeature(CollisionFeature& feature, 21 const mat4& posMatrix, 22 const mat4& labelPlaneMatrix, 23 const float textPixelRatio, 24 PlacedSymbol& symbol, 25 const float scale, 26 const float fontSize, 27 const bool allowOverlap, 28 const bool pitchWithMap, 29 const bool collisionDebug); 30 31 void insertFeature(CollisionFeature& feature, bool ignorePlacement, uint32_t bucketInstanceId); 32 33 std::unordered_map<uint32_t, std::vector<IndexedSubfeature>> queryRenderedSymbols(const ScreenLineString&) const; 34 35 private: 36 bool isOffscreen(const CollisionBox&) const; 37 bool isInsideGrid(const CollisionBox&) const; 38 39 std::pair<bool,bool> placeLineFeature(CollisionFeature& feature, 40 const mat4& posMatrix, 41 const mat4& labelPlaneMatrix, 42 const float textPixelRatio, 43 PlacedSymbol& symbol, 44 const float scale, 45 const float fontSize, 46 const bool allowOverlap, 47 const bool pitchWithMap, 48 const bool collisionDebug); 49 50 float approximateTileDistance(const TileDistance& tileDistance, const float lastSegmentAngle, const float pixelsToTileUnits, const float cameraToAnchorDistance, const bool pitchWithMap); 51 52 std::pair<float,float> projectAnchor(const mat4& posMatrix, const Point<float>& point) const; 53 std::pair<Point<float>,float> projectAndGetPerspectiveRatio(const mat4& posMatrix, const Point<float>& point) const; 54 Point<float> projectPoint(const mat4& posMatrix, const Point<float>& point) const; 55 56 const TransformState transformState; 57 58 CollisionGrid collisionGrid; 59 CollisionGrid ignoredGrid; 60 61 const float screenRightBoundary; 62 const float screenBottomBoundary; 63 const float gridRightBoundary; 64 const float gridBottomBoundary; 65 66 const float pitchFactor; 67 }; 68 69 } // namespace mbgl 70