#pragma once #include #include #include #include #include #include namespace mbgl { class PlacedSymbol; struct TileDistance; using CollisionTileBoundaries = std::array; class CollisionIndex { public: using CollisionGrid = GridIndex; explicit CollisionIndex(const TransformState&); std::pair placeFeature(const CollisionFeature& feature, Point shift, const mat4& posMatrix, const mat4& labelPlaneMatrix, const float textPixelRatio, const PlacedSymbol& symbol, const float scale, const float fontSize, const bool allowOverlap, const bool pitchWithMap, const bool collisionDebug, const optional& avoidEdges, const optional> collisionGroupPredicate, std::vector& /*out*/); void insertFeature(const CollisionFeature& feature, const std::vector&, bool ignorePlacement, uint32_t bucketInstanceId, uint16_t collisionGroupId); std::unordered_map> queryRenderedSymbols(const ScreenLineString&) const; CollisionTileBoundaries projectTileBoundaries(const mat4& posMatrix) const; const TransformState& getTransformState() const { return transformState; } private: bool isOffscreen(float x1, float y1, float x2, float y2) const; bool isInsideGrid(float x1, float y1, float x2, float y2) const; bool isInsideTile(float x1, float y1, float x2, float y2, const CollisionTileBoundaries& tileBoundaries) const; std::pair placeLineFeature(const CollisionFeature& feature, const mat4& posMatrix, const mat4& labelPlaneMatrix, const float textPixelRatio, const PlacedSymbol& symbol, const float scale, const float fontSize, const bool allowOverlap, const bool pitchWithMap, const bool collisionDebug, const optional& avoidEdges, const optional> collisionGroupPredicate, std::vector& /*out*/); 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; const TransformState transformState; CollisionGrid collisionGrid; CollisionGrid ignoredGrid; const float screenRightBoundary; const float screenBottomBoundary; const float gridRightBoundary; const float gridBottomBoundary; const float pitchFactor; }; } // namespace mbgl