#pragma once #include #include #include #include namespace mbgl { class PlacedSymbol; struct TileDistance; class CollisionIndex { public: using CollisionGrid = GridIndex; explicit CollisionIndex(const TransformState&); bool placeFeature(CollisionFeature& feature, const mat4& posMatrix, const mat4& labelPlaneMatrix, const float textPixelRatio, PlacedSymbol& symbol, const float scale, const float fontSize, const bool allowOverlap, const bool pitchWithMap, const bool collisionDebug); void insertFeature(CollisionFeature& feature, bool ignorePlacement); std::vector queryRenderedSymbols(const GeometryCoordinates&, const UnwrappedTileID& tileID, const std::string& sourceID) const; private: bool placeLineFeature(CollisionFeature& feature, const mat4& posMatrix, const mat4& labelPlaneMatrix, const float textPixelRatio, PlacedSymbol& symbol, const float scale, const float fontSize, const bool allowOverlap, const bool pitchWithMap, const bool collisionDebug); float approximateTileDistance(const TileDistance& tileDistance, const float lastSegmentAngle, const float pixelsToTileUnits, const float cameraToAnchorDistance, const bool pitchWithMap); std::pair projectAnchor(const mat4& posMatrix, const Point& point) const; std::pair,float> projectAndGetPerspectiveRatio(const mat4& posMatrix, const Point& point) const; Point projectPoint(const mat4& posMatrix, const Point& point) const; TransformState transformState; float pitchFactor; CollisionGrid collisionGrid; CollisionGrid ignoredGrid; }; } // namespace mbgl