// Boost.Geometry (aka GGL, Generic Geometry Library) // // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // // This file was modified by Oracle on 2017-2021. // Modifications copyright (c) 2017-2021 Oracle and/or its affiliates. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // // Use, modification and distribution is subject to 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) #include #include #include #include #include #include #include #include template < typename Geometry1, typename Geometry2, bg::overlay_type OverlayType, typename RingId > void test_geometry(std::string const& wkt1, std::string const& wkt2, std::initializer_list const& expected_ids) { typedef bg::detail::overlay::ring_properties < typename bg::point_type::type, double > properties; Geometry1 geometry1; Geometry2 geometry2; bg::read_wkt(wkt1, geometry1); bg::read_wkt(wkt2, geometry2); typedef std::map map_type; map_type selected; std::map empty; typedef typename bg::strategies::relate::services::default_strategy < Geometry1, Geometry2 >::type strategy_type; bg::detail::overlay::select_rings(geometry1, geometry2, empty, selected, strategy_type()); BOOST_CHECK_EQUAL(selected.size(), expected_ids.size()); if (selected.size() <= expected_ids.size()) { auto eit = expected_ids.begin(); for (auto it = selected.begin(); it != selected.end(); ++it, ++eit) { bg::ring_identifier const ring_id = it->first; BOOST_CHECK_EQUAL(ring_id.source_index, eit->source_index); BOOST_CHECK_EQUAL(ring_id.multi_index, eit->multi_index); BOOST_CHECK_EQUAL(ring_id.ring_index, eit->ring_index); } } } template void test_all() { // Point in correct clockwise ring -> should return true typedef bg::ring_identifier rid; test_geometry, bg::model::polygon

, bg::overlay_union>( winded[0], winded[1], { rid(0,-1,-1), rid(0,-1, 0), rid(0,-1, 1), rid(0,-1, 3), rid(1,-1, 1), rid(1,-1, 2) }); test_geometry, bg::model::polygon

, bg::overlay_intersection>( winded[0], winded[1], { rid(0,-1, 2), rid(1,-1,-1), rid(1,-1, 0), rid(1,-1, 3), }); } int test_main( int , char* [] ) { test_all >(); return 0; }