File: polygon_vertex_processor.cpp

package info (click to toggle)
mapnik 3.1.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 19,548 kB
  • sloc: cpp: 144,430; python: 30,187; sh: 797; makefile: 172; xml: 140; lisp: 13
file content (65 lines) | stat: -rw-r--r-- 1,919 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "catch.hpp"
#include "unit/vertex_adapter/fake_path.hpp"

#include <mapnik/geometry/polygon_vertex_processor.hpp>

TEST_CASE("polygon_vertex_processor") {

SECTION("empty polygon") {

    fake_path path = {};
    mapnik::geometry::polygon_vertex_processor<double> proc;
    proc.add_path(path);
    CHECK(proc.polygon_.exterior_ring.size() == 0);
    CHECK(proc.polygon_.interior_rings.size() == 0);
}

SECTION("empty exterior ring") {

    fake_path path = {};
    path.vertices_.emplace_back(0, 0, mapnik::SEG_CLOSE);
    path.rewind(0);

    mapnik::geometry::polygon_vertex_processor<double> proc;
    proc.add_path(path);
    CHECK(proc.polygon_.exterior_ring.size() == 0);
    CHECK(proc.polygon_.interior_rings.size() == 0);
}

SECTION("empty interior ring") {

    fake_path path = {};
    path.vertices_.emplace_back(-1, -1, mapnik::SEG_MOVETO);
    path.vertices_.emplace_back( 1, -1, mapnik::SEG_LINETO);
    path.vertices_.emplace_back( 1,  1, mapnik::SEG_LINETO);
    path.vertices_.emplace_back(-1,  1, mapnik::SEG_LINETO);
    path.vertices_.emplace_back( 0,  0, mapnik::SEG_CLOSE);
    path.vertices_.emplace_back( 0,  0, mapnik::SEG_CLOSE);
    path.rewind(0);

    mapnik::geometry::polygon_vertex_processor<double> proc;
    proc.add_path(path);

    REQUIRE(proc.polygon_.interior_rings.size() == 1);
    REQUIRE(proc.polygon_.interior_rings.front().size() == 0);

    auto const& outer_ring = proc.polygon_.exterior_ring;
    REQUIRE(outer_ring.size() == 5);

    CHECK(outer_ring[0].x == Approx(-1));
    CHECK(outer_ring[0].y == Approx(-1));

    CHECK(outer_ring[1].x == Approx( 1));
    CHECK(outer_ring[1].y == Approx(-1));

    CHECK(outer_ring[2].x == Approx( 1));
    CHECK(outer_ring[2].y == Approx( 1));

    CHECK(outer_ring[3].x == Approx(-1));
    CHECK(outer_ring[3].y == Approx( 1));

    CHECK(outer_ring[4].x == Approx(-1));
    CHECK(outer_ring[4].y == Approx(-1));
}

}