summaryrefslogtreecommitdiff
path: root/libs/geometry/test/algorithms/test_set_ops_linear_linear.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/geometry/test/algorithms/test_set_ops_linear_linear.hpp')
-rw-r--r--libs/geometry/test/algorithms/test_set_ops_linear_linear.hpp310
1 files changed, 0 insertions, 310 deletions
diff --git a/libs/geometry/test/algorithms/test_set_ops_linear_linear.hpp b/libs/geometry/test/algorithms/test_set_ops_linear_linear.hpp
deleted file mode 100644
index c208f1b74..000000000
--- a/libs/geometry/test/algorithms/test_set_ops_linear_linear.hpp
+++ /dev/null
@@ -1,310 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_TEST_SET_OPS_LINEAR_LINEAR_HPP
-#define BOOST_GEOMETRY_TEST_SET_OPS_LINEAR_LINEAR_HPP
-
-
-#include <string>
-#include <fstream>
-#include <sstream>
-#include <algorithm>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-#include <boost/geometry/policies/compare.hpp>
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/reverse.hpp>
-#include <boost/geometry/multi/algorithms/reverse.hpp>
-
-#include "test_get_turns_ll_invariance.hpp"
-
-namespace bg = ::boost::geometry;
-
-
-
-template <typename Linestring1, typename Linestring2>
-struct ls_less
-{
- typedef typename boost::range_iterator<Linestring1 const>::type Iterator1;
- typedef typename boost::range_iterator<Linestring2 const>::type Iterator2;
-
- typedef bg::less<typename bg::point_type<Linestring1>::type> point_less;
-
- bool operator()(Linestring1 const& linestring1,
- Linestring2 const& linestring2) const
- {
- if ( boost::size(linestring1) != boost::size(linestring2) )
- return boost::size(linestring1) < boost::size(linestring2);
-
- Iterator1 it1 = boost::begin(linestring1);
- Iterator2 it2 = boost::begin(linestring2);
- point_less less;
- for (; it1 != boost::end(linestring1); ++it1, ++it2)
- {
- if ( less(*it1, *it2) )
- return true;
- if ( less(*it2, *it1) )
- return false;
- }
- return false;
- }
-};
-
-
-template <typename Linestring1, typename Linestring2>
-struct ls_equal
-{
- bool operator()(Linestring1 const& linestring1,
- Linestring2 const& linestring2) const
- {
- ls_less<Linestring1, Linestring2> less;
-
- return !less(linestring1, linestring2)
- && !less(linestring2, linestring1);
- }
-};
-
-
-template <bool EnableUnique = false>
-struct multilinestring_equals
-{
- template <typename MultiLinestring, bool Enable>
- struct unique
- {
- typedef typename boost::range_value<MultiLinestring>::type Linestring;
- typedef ls_equal<Linestring, Linestring> linestring_equal;
-
- void operator()(MultiLinestring& mls)
- {
- mls.erase(std::unique(boost::begin(mls),
- boost::end(mls),
- linestring_equal()),
- boost::end(mls));
- }
- };
-
- template <typename MultiLinestring>
- struct unique<MultiLinestring, false>
- {
- void operator()(MultiLinestring&)
- {
- }
- };
-
- template <typename MultiLinestring1, typename MultiLinestring2>
- static inline
- bool apply(MultiLinestring1 const& multilinestring1,
- MultiLinestring2 const& multilinestring2)
- {
- typedef typename boost::range_iterator
- <
- MultiLinestring1 const
- >::type ls1_iterator;
-
- typedef typename boost::range_iterator
- <
- MultiLinestring2 const
- >::type ls2_iterator;
-
- typedef typename boost::range_value<MultiLinestring1>::type Linestring1;
-
- typedef typename boost::range_value<MultiLinestring2>::type Linestring2;
-
- typedef typename boost::range_iterator
- <
- Linestring1 const
- >::type point1_iterator;
-
- typedef typename boost::range_iterator
- <
- Linestring2 const
- >::type point2_iterator;
-
- typedef ls_less<Linestring1, Linestring2> linestring_less;
-
- MultiLinestring1 mls1 = multilinestring1;
- MultiLinestring2 mls2 = multilinestring2;
-
- std::sort(boost::begin(mls1), boost::end(mls1), linestring_less());
- std::sort(boost::begin(mls2), boost::end(mls2), linestring_less());
-
- unique<MultiLinestring1, EnableUnique>()(mls1);
- unique<MultiLinestring2, EnableUnique>()(mls2);
-
- if ( boost::size(mls1) != boost::size(mls2) )
- {
- return false;
- }
-
- ls1_iterator it1 = boost::begin(mls1);
- ls2_iterator it2 = boost::begin(mls2);
- for (; it1 != boost::end(mls1); ++it1, ++it2)
- {
- if ( boost::size(*it1) != boost::size(*it2) )
- {
- return false;
- }
- point1_iterator pit1 = boost::begin(*it1);
- point2_iterator pit2 = boost::begin(*it2);
- for (; pit1 != boost::end(*it1); ++pit1, ++pit2)
- {
- if ( !bg::equals(*pit1, *pit2) )
- {
- return false;
- }
- }
- }
- return true;
- }
-};
-
-
-
-
-class equals
-{
-private:
- template <typename Linestring, typename OutputIterator>
- static inline OutputIterator
- isolated_point_to_segment(Linestring const& linestring, OutputIterator oit)
- {
- BOOST_ASSERT( boost::size(linestring) == 1 );
-
- *oit++ = *boost::begin(linestring);
- *oit++ = *boost::begin(linestring);
- return oit;
- }
-
-
- template <typename MultiLinestring, typename OutputIterator>
- static inline OutputIterator
- convert_isolated_points_to_segments(MultiLinestring const& multilinestring,
- OutputIterator oit)
- {
- BOOST_AUTO_TPL(it, boost::begin(multilinestring));
-
- for (; it != boost::end(multilinestring); ++it)
- {
- if ( boost::size(*it) == 1 )
- {
- typename boost::range_value<MultiLinestring>::type linestring;
- isolated_point_to_segment(*it, std::back_inserter(linestring));
- *oit++ = linestring;
- }
- else
- {
- *oit++ = *it;
- }
- }
- return oit;
- }
-
-
- template <typename MultiLinestring1, typename MultiLinestring2>
- static inline bool apply_base(MultiLinestring1 const& multilinestring1,
- MultiLinestring2 const& multilinestring2)
- {
- typedef multilinestring_equals<true> mls_equals;
-
- if ( mls_equals::apply(multilinestring1, multilinestring2) )
- {
- return true;
- }
-
- MultiLinestring1 reverse_multilinestring1 = multilinestring1;
- bg::reverse(reverse_multilinestring1);
- if ( mls_equals::apply(reverse_multilinestring1, multilinestring2) )
- {
- return true;
- }
-
- MultiLinestring2 reverse_multilinestring2 = multilinestring2;
- bg::reverse(reverse_multilinestring2);
- if ( mls_equals::apply(multilinestring1, reverse_multilinestring2) )
- {
- return true;
- }
-
- return mls_equals::apply(reverse_multilinestring1,
- reverse_multilinestring2);
- }
-
-
-
-public:
- template <typename MultiLinestring1, typename MultiLinestring2>
- static inline bool apply(MultiLinestring1 const& multilinestring1,
- MultiLinestring2 const& multilinestring2)
- {
-#ifndef BOOST_GEOMETRY_ALLOW_ONE_POINT_LINESTRINGS
- MultiLinestring1 converted_multilinestring1;
- convert_isolated_points_to_segments
- (multilinestring1, std::back_inserter(converted_multilinestring1));
- MultiLinestring2 converted_multilinestring2;
- convert_isolated_points_to_segments
- (multilinestring2, std::back_inserter(converted_multilinestring2));
- return apply_base(converted_multilinestring1,
- converted_multilinestring2);
-#else
- return apply_base(multilinestring1, multilinestring2);
-#endif
- }
-};
-
-
-
-
-template <typename Output, typename G1, typename G2>
-void set_operation_output(std::string const& set_op_id,
- std::string const& caseid,
- G1 const& g1, G2 const& g2,
- Output const& output)
-{
- boost::ignore_unused(set_op_id, caseid, g1, g2, output);
-
-#if defined(TEST_WITH_SVG)
- typedef typename bg::coordinate_type<G1>::type coordinate_type;
- typedef typename bg::point_type<G1>::type point_type;
-
- std::ostringstream filename;
- filename << "svgs/" << set_op_id << "_" << caseid << ".svg";
-
- std::ofstream svg(filename.str().c_str());
-
- bg::svg_mapper<point_type> mapper(svg, 500, 500);
-
- mapper.add(g1);
- mapper.add(g2);
-
- mapper.map(g2, "stroke-opacity:1;stroke:rgb(153,204,0);stroke-width:4");
- mapper.map(g1, "stroke-opacity:1;stroke:rgb(51,51,153);stroke-width:2");
-
- BOOST_AUTO_TPL(it, output.begin());
- for (; it != output.end(); ++it)
- {
- if ( boost::size(*it) == 2
- && bg::equals(*boost::begin(*it), *++boost::begin(*it)) )
- {
- // draw isolated points (generated by the intersection operation)
- mapper.map(*boost::begin(*it),
- "fill:rgb(255,0,255);stroke:rgb(0,0,0);stroke-width:1",
- 4);
- }
- else
- {
- mapper.map(*it,
- "stroke-opacity:0.4;stroke:rgb(255,0,255);stroke-width:8");
- }
- }
-#endif
-}
-
-
-#endif // BOOST_GEOMETRY_TEST_SET_OPS_LINEAR_LINEAR_HPP