#ifndef MBGL_TEXT_COLLISION_TILE #define MBGL_TEXT_COLLISION_TILE #include #include #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #pragma GCC diagnostic ignored "-Wunused-parameter" #pragma GCC diagnostic ignored "-Wunused-variable" #pragma GCC diagnostic ignored "-Wshadow" #ifdef __clang__ #pragma GCC diagnostic ignored "-Wunknown-pragmas" #endif #pragma GCC diagnostic ignored "-Wpragmas" #pragma GCC diagnostic ignored "-Wdeprecated-register" #pragma GCC diagnostic ignored "-Wshorten-64-to-32" #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #include #include #include #include #pragma GCC diagnostic pop namespace mbgl { namespace bg = boost::geometry; namespace bgm = bg::model; namespace bgi = bg::index; typedef bgm::point CollisionPoint; typedef bgm::box Box; typedef std::pair CollisionTreeBox; typedef bgi::rtree> Tree; class CollisionTile { public: explicit CollisionTile(PlacementConfig); float placeFeature(const CollisionFeature& feature, const bool allowOverlap, const bool avoidEdges); void insertFeature(CollisionFeature& feature, const float minPlacementScale); const PlacementConfig config; const float minScale = 0.5f; const float maxScale = 2.0f; float yStretch; private: float findPlacementScale(float minPlacementScale, const vec2& anchor, const CollisionBox& box, const vec2& blockingAnchor, const CollisionBox& blocking); Box getTreeBox(const vec2& anchor, const CollisionBox& box); Tree tree; std::array rotationMatrix; std::array reverseRotationMatrix; std::array edges; }; } // namespace mbgl #endif