#include "catch.hpp" #include #include #include using namespace mapnik; TEST_CASE("marker placement point") { SECTION("empty geometry") { mapnik::geometry::line_string g; using va_type = mapnik::geometry::line_string_vertex_adapter; va_type va(g); using detector_type = mapnik::label_collision_detector4; detector_type detector(mapnik::box2d(0, 0, 100, 100)); using placement_type = mapnik::markers_point_placement; mapnik::markers_placement_params params{mapnik::box2d(0, 0, 10, 10), agg::trans_affine(), 0, NAN, 0, false, false, DIRECTION_AUTO, 1.0}; placement_type placement(va, detector, params); double x, y, angle; CHECK(!placement.get_point(x, y, angle, true)); } SECTION("point") { mapnik::geometry::point g(2.0, 3.0); using va_type = mapnik::geometry::point_vertex_adapter; va_type va(g); using detector_type = mapnik::label_collision_detector4; detector_type detector(mapnik::box2d(0, 0, 100, 100)); using placement_type = mapnik::markers_point_placement; mapnik::markers_placement_params params{mapnik::box2d(0, 0, 10, 10), agg::trans_affine(), 0, NAN, 0, false, false, DIRECTION_AUTO, 1.0}; placement_type placement(va, detector, params); double x, y, angle; CHECK(placement.get_point(x, y, angle, true)); CHECK(x == Approx(2.0)); CHECK(y == Approx(3.0)); CHECK(angle == Approx(0.0)); CHECK(!placement.get_point(x, y, angle, true)); } SECTION("line string") { mapnik::geometry::line_string g; g.emplace_back(1.0, 1.0); g.emplace_back(2.0, 2.0); using va_type = mapnik::geometry::line_string_vertex_adapter; va_type va(g); using detector_type = mapnik::label_collision_detector4; detector_type detector(mapnik::box2d(0, 0, 100, 100)); using placement_type = mapnik::markers_point_placement; mapnik::markers_placement_params params{mapnik::box2d(0, 0, 10, 10), agg::trans_affine(), 0, NAN, 0, false, false, DIRECTION_AUTO, 1.0}; placement_type placement(va, detector, params); double x, y, angle; CHECK(placement.get_point(x, y, angle, true)); CHECK(x == Approx(1.5)); CHECK(y == Approx(1.5)); CHECK(angle == Approx(0)); CHECK(!placement.get_point(x, y, angle, true)); } SECTION("line string zero length") { mapnik::geometry::line_string g; g.emplace_back(1.0, 1.0); g.emplace_back(1.0, 1.0); using va_type = mapnik::geometry::line_string_vertex_adapter; va_type va(g); using detector_type = mapnik::label_collision_detector4; detector_type detector(mapnik::box2d(0, 0, 100, 100)); using placement_type = mapnik::markers_point_placement; mapnik::markers_placement_params params{mapnik::box2d(0, 0, 10, 10), agg::trans_affine(), 0, NAN, 0, false, false, DIRECTION_AUTO, 1.0}; placement_type placement(va, detector, params); double x, y, angle; CHECK(placement.get_point(x, y, angle, true)); CHECK(x == Approx(1.0)); CHECK(y == Approx(1.0)); CHECK(angle == Approx(0)); CHECK(!placement.get_point(x, y, angle, true)); } }