// Boost.Polygon library polygon_set_data_test.cpp file // Copyright Andrii Sydorchuk 2015. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for updates, documentation, and revision history. #define BOOST_TEST_MODULE POLYGON_SET_DATA_TEST #include #include #include #include "boost/polygon/polygon.hpp" using namespace boost::polygon; using namespace boost::polygon::operators; typedef boost::mpl::list test_types; BOOST_AUTO_TEST_CASE_TEMPLATE(polygon_set_data_test1, T, test_types) { typedef point_data point_type; typedef polygon_data polygon_type; typedef polygon_with_holes_data polygon_with_holes_type; typedef polygon_set_data polygon_set_type; polygon_set_type pset; std::vector outbox; outbox.push_back(point_type(0, 0)); outbox.push_back(point_type(100, 0)); outbox.push_back(point_type(100, 100)); outbox.push_back(point_type(0, 100)); pset.insert_vertex_sequence(outbox.begin(), outbox.end(), COUNTERCLOCKWISE, false); std::vector inbox; inbox.push_back(point_type(20, 20)); inbox.push_back(point_type(80, 20)); inbox.push_back(point_type(80, 80)); inbox.push_back(point_type(20, 80)); pset.insert_vertex_sequence(inbox.begin(), inbox.end(), COUNTERCLOCKWISE, true); BOOST_CHECK(!pset.empty()); BOOST_CHECK(!pset.sorted()); BOOST_CHECK(pset.dirty()); BOOST_CHECK_EQUAL(8, pset.size()); std::vector vpoly; pset.get(vpoly); BOOST_CHECK_EQUAL(1, vpoly.size()); polygon_with_holes_type poly = vpoly[0]; BOOST_CHECK_EQUAL(5, poly.size()); BOOST_CHECK_EQUAL(1, poly.size_holes()); } BOOST_AUTO_TEST_CASE_TEMPLATE(polygon_set_data_test2, T, test_types) { typedef point_data point_type; typedef polygon_data polygon_type; typedef polygon_with_holes_data polygon_with_holes_type; typedef polygon_set_data polygon_set_type; std::vector data; data.push_back(point_type(2,0)); data.push_back(point_type(4,0)); data.push_back(point_type(4,3)); data.push_back(point_type(0,3)); data.push_back(point_type(0,0)); data.push_back(point_type(2,0)); data.push_back(point_type(2,1)); data.push_back(point_type(1,1)); data.push_back(point_type(1,2)); data.push_back(point_type(3,2)); data.push_back(point_type(3,1)); data.push_back(point_type(2,1)); data.push_back(point_type(2,0)); polygon_type polygon; set_points(polygon, data.begin(), data.end()); polygon_set_type pset; pset.insert(polygon); std::vector traps; get_trapezoids(traps, pset, HORIZONTAL); BOOST_CHECK_EQUAL(4, traps.size()); } BOOST_AUTO_TEST_CASE_TEMPLATE(polygon_set_data_test3, T, test_types) { typedef point_data point_type; typedef polygon_data polygon_type; typedef polygon_with_holes_data polygon_with_holes_type; typedef polygon_set_data polygon_set_type; std::vector data; data.push_back(point_type(0,0)); data.push_back(point_type(6,0)); data.push_back(point_type(6,4)); data.push_back(point_type(4,6)); data.push_back(point_type(0,6)); data.push_back(point_type(0,0)); data.push_back(point_type(4,4)); data.push_back(point_type(5,4)); polygon_type polygon(data.begin(), data.end()); polygon_set_type pset; pset += polygon; BOOST_CHECK_EQUAL(32.0, area(polygon)); BOOST_CHECK_EQUAL(32.0, area(polygon)); }