// Boost.Geometry (aka GGL, Generic Geometry Library) test file // // Copyright Barend Gehrels 2007-2009, Geodan, Amsterdam, the Netherlands // Copyright Bruno Lalande 2008, 2009 // 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 #include #include #include #include template void test_geometry(std::string const& wkt, std::size_t size_original, std::size_t size_hull, double expected_area) { Geometry geometry; bg::read_wkt(wkt, geometry); typedef typename bg::point_type::type P; typename bg::strategy_side < typename bg::cs_tag

::type >::type side; boost::ignore_unused_variable_warning(side); typedef typename bg::range_type::type range_type; typedef typename boost::range_const_iterator::type iterator; range_type const& range = bg::as_range(geometry); iterator it1 = boost::begin(range); iterator it3 = it1++; iterator it2 = it1++; for (; it2 != boost::end(range); ++it1, ++it2, ++it3) { // Last/closing point if (it1 == boost::end(range)) { it1 = boost::begin(range) + 1; } int s = side.apply(*it1, *it2, *it3); if (s != 1) { std::cout << "NOT CONVEX!"; } if (s == 0) { std::cout << " COLLINEAR!"; } std::cout << " " << (*it3) << " " << bg::wkt(*it2) << " " << bg::wkt(*it1) << " " << s << std::endl; } std::cout << bg::area(geometry) << " " << bg::wkt(geometry) << std::endl; } template void test_all() { // rectangular, with concavity test_geometry >( "polygon((1 1, 1 4, 3 4, 3 3, 4 3, 4 4, 5 4, 5 1, 1 1))", 9, 5, 12.0); // concavity at start/closing point test_geometry >( "polygon((1 1,0 2,3 3,1 0,1 1))", 9, 5, 12.0); // from sample polygon, with concavity test_geometry >( "polygon((2.0 1.3, 2.4 1.7, 2.8 1.8, 3.4 1.2, 3.7 1.6,3.4 2.0, 4.1 3.0" ", 5.3 2.6, 5.4 1.2, 4.9 0.8, 2.9 0.7,2.0 1.3))", 12, 8, 5.245); } int test_main(int, char* []) { //test_all >(); //test_all >(); test_all >(); #if defined(HAVE_TTMATH) test_all >(); #endif return 0; }