summaryrefslogtreecommitdiff
path: root/libs/geometry/doc/src/examples/algorithms
diff options
context:
space:
mode:
Diffstat (limited to 'libs/geometry/doc/src/examples/algorithms')
-rw-r--r--libs/geometry/doc/src/examples/algorithms/Jamfile.v213
-rw-r--r--libs/geometry/doc/src/examples/algorithms/is_valid.cpp4
-rw-r--r--libs/geometry/doc/src/examples/algorithms/is_valid_failure.cpp68
-rw-r--r--libs/geometry/doc/src/examples/algorithms/is_valid_message.cpp55
4 files changed, 134 insertions, 6 deletions
diff --git a/libs/geometry/doc/src/examples/algorithms/Jamfile.v2 b/libs/geometry/doc/src/examples/algorithms/Jamfile.v2
index 946e66f39..cc277080a 100644
--- a/libs/geometry/doc/src/examples/algorithms/Jamfile.v2
+++ b/libs/geometry/doc/src/examples/algorithms/Jamfile.v2
@@ -1,8 +1,13 @@
# Boost.Geometry (aka GGL, Generic Geometry Library)
#
-# Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-# Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-# Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+# Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+# Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+# Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+
+# This file was modified by Oracle on 2014, 2015.
+# Modifications copyright (c) 2014-2015, Oracle and/or its affiliates.
+
+# Contributed and/or modified by Menelaos Karavelas, 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
@@ -54,6 +59,8 @@ exe intersects_linestring : intersects_linestring.cpp ;
exe is_simple : is_simple.cpp ;
exe is_valid : is_valid.cpp ;
+exe is_valid_failure : is_valid_failure.cpp ;
+exe is_valid_message : is_valid_message.cpp ;
exe length : length.cpp ;
exe length_with_strategy : length_with_strategy.cpp ;
diff --git a/libs/geometry/doc/src/examples/algorithms/is_valid.cpp b/libs/geometry/doc/src/examples/algorithms/is_valid.cpp
index 2cb12f354..d802b3c45 100644
--- a/libs/geometry/doc/src/examples/algorithms/is_valid.cpp
+++ b/libs/geometry/doc/src/examples/algorithms/is_valid.cpp
@@ -24,9 +24,7 @@ int main()
typedef boost::geometry::model::polygon<point_type> polygon_type;
polygon_type poly;
- boost::geometry::read_wkt(
- "POLYGON((0 0,0 10,10 10,10 0,0 0),(0 0,9 1,9 2,0 0),(0 0,2 9,1 9,0 0),(2 9,9 2,9 9,2 9))"
- , poly);
+ boost::geometry::read_wkt("POLYGON((0 0,0 10,10 10,10 0,0 0),(0 0,9 1,9 2,0 0),(0 0,2 9,1 9,0 0),(2 9,9 2,9 9,2 9))", poly);
std::cout << "is valid? " << (boost::geometry::is_valid(poly) ? "yes" : "no") << std::endl;
/*<-*/ create_svg("is_valid_example.svg", poly); /*->*/
diff --git a/libs/geometry/doc/src/examples/algorithms/is_valid_failure.cpp b/libs/geometry/doc/src/examples/algorithms/is_valid_failure.cpp
new file mode 100644
index 000000000..f566e23a2
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/is_valid_failure.cpp
@@ -0,0 +1,68 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2015, Oracle and/or its affiliates
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+//[is_valid_failure
+//` Checks whether a geometry is valid and, if not valid, checks if it could be fixed by bg::correct; if so bg::correct is called on the geometry
+
+#include <iostream>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+/*<-*/ #include "create_svg_one.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+
+ polygon_type poly;
+ boost::geometry::read_wkt("POLYGON((0 0,0 10,10 10,10 0),(0 0,9 2,9 1,0 0),(0 0,2 9,1 9,0 0))", poly);
+
+ std::cout << "original geometry: " << boost::geometry::dsv(poly) << std::endl;
+ boost::geometry::validity_failure_type failure;
+ bool valid = boost::geometry::is_valid(poly, failure);
+
+ // if the invalidity is only due to lack of closing points and/or wrongly oriented rings, then bg::correct can fix it
+ bool could_be_fixed = (failure == boost::geometry::failure_not_closed
+ || boost::geometry::failure_wrong_orientation);
+ std::cout << "is valid? " << (valid ? "yes" : "no") << std::endl;
+ if (! valid)
+ {
+ std::cout << "can boost::geometry::correct remedy invalidity? " << (could_be_fixed ? "possibly yes" : "no") << std::endl;
+ if (could_be_fixed)
+ {
+ boost::geometry::correct(poly);
+ std::cout << "after correction: " << (boost::geometry::is_valid(poly) ? "valid" : "still invalid") << std::endl;
+ std::cout << "corrected geometry: " << boost::geometry::dsv(poly) << std::endl;
+ }
+ }
+ /*<-*/ create_svg("is_valid_failure_example.svg", poly); /*->*/
+ return 0;
+}
+
+//]
+
+//[is_valid_failure_output
+/*`
+Output:
+[pre
+original geometry: (((0, 0), (0, 10), (10, 10), (10, 0)), ((0, 0), (9, 2), (9, 1), (0, 0)), ((0, 0), (2, 9), (1, 9), (0, 0)))
+is valid? no
+can boost::geometry::correct remedy invalidity? possibly yes
+after correction: valid
+corrected geometry: (((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)), ((0, 0), (9, 1), (9, 2), (0, 0)), ((0, 0), (2, 9), (1, 9), (0, 0)))
+
+[$img/algorithms/is_valid_failure_example.png]
+
+]
+
+*/
+//]
diff --git a/libs/geometry/doc/src/examples/algorithms/is_valid_message.cpp b/libs/geometry/doc/src/examples/algorithms/is_valid_message.cpp
new file mode 100644
index 000000000..673657342
--- /dev/null
+++ b/libs/geometry/doc/src/examples/algorithms/is_valid_message.cpp
@@ -0,0 +1,55 @@
+// Boost.Geometry (aka GGL, Generic Geometry Library)
+// QuickBook Example
+
+// Copyright (c) 2015, Oracle and/or its affiliates
+
+// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
+
+// Licensed under the Boost Software License version 1.0.
+// http://www.boost.org/users/license.html
+
+//[is_valid_message
+//` Checks whether a geometry is valid and, if not valid, prints a message describing the reason
+
+#include <iostream>
+#include <string>
+
+#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/polygon.hpp>
+/*<-*/ #include "create_svg_one.hpp" /*->*/
+
+int main()
+{
+ typedef boost::geometry::model::d2::point_xy<double> point_type;
+ typedef boost::geometry::model::polygon<point_type> polygon_type;
+
+ polygon_type poly;
+ boost::geometry::read_wkt("POLYGON((0 0,0 10,10 10,10 0,0 0),(0 0,9 1,9 2,0 0),(0 0,2 9,1 9,0 0),(2 9,9 2,9 9,2 9))", poly);
+
+ std::string message;
+ bool valid = boost::geometry::is_valid(poly, message);
+ std::cout << "is valid? " << (valid ? "yes" : "no") << std::endl;
+ if (! valid)
+ {
+ std::cout << "why not valid? " << message << std::endl;
+ }
+ /*<-*/ create_svg("is_valid_example.svg", poly); /*->*/
+ return 0;
+}
+
+//]
+
+//[is_valid_message_output
+/*`
+Output:
+[pre
+is valid? no
+why not valid? Geometry has disconnected interior
+
+[$img/algorithms/is_valid_example.png]
+
+]
+
+*/
+//]