diff --git a/example/05_b_overlay_linestring_polygon_example.cpp b/example/05_b_overlay_linestring_polygon_example.cpp index 59e6b2986..4fc29f42d 100644 --- a/example/05_b_overlay_linestring_polygon_example.cpp +++ b/example/05_b_overlay_linestring_polygon_example.cpp @@ -64,13 +64,12 @@ int main(void) #endif // Calculate intersection points (turn points) - using segment_ratio = bg::detail::segment_ratio_type::type; + using segment_ratio = bg::detail::segment_ratio_type::type; using turn_info = bg::detail::overlay::turn_info; std::vector turns; bg::detail::get_turns::no_interrupt_policy policy; - bg::detail::no_rescale_policy rescale_policy; bg::strategies::relate::services::default_strategy, bg::model::polygon>::type strategy; - bg::get_turns(ls, p, strategy, rescale_policy, turns, policy); + bg::get_turns(ls, p, strategy, turns, policy); std::cout << "Intersection of linestring/polygon" << std::endl; for (turn_info const& turn : turns) diff --git a/example/c05_custom_point_pointer_example.cpp b/example/c05_custom_point_pointer_example.cpp index a1d9dbef0..d8059fe04 100644 --- a/example/c05_custom_point_pointer_example.cpp +++ b/example/c05_custom_point_pointer_example.cpp @@ -102,11 +102,10 @@ int main() // This works because outputs to a normal struct point, no point* typedef boost::geometry::model::linestring linestring_2d; - boost::geometry::detail::no_rescale_policy rescale_policy; std::vector clipped; boost::geometry::strategy::intersection::liang_barsky strategy; boost::geometry::detail::intersection::clip_range_with_box(cb, - myline, rescale_policy, std::back_inserter(clipped), strategy); + myline, std::back_inserter(clipped), strategy); std::cout << boost::geometry::length(clipped.front()) << std::endl; diff --git a/include/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp b/include/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp index 2f0c5e3c0..6e5782b6e 100644 --- a/include/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp +++ b/include/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2012-2020 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2022-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2022. -// Modifications copyright (c) 2017-2022 Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -95,7 +96,6 @@ struct buffer_range typename SegmentStrategy, typename JoinStrategy, typename EndStrategy, - typename RobustPolicy, typename Strategies > static inline @@ -112,7 +112,6 @@ struct buffer_range SegmentStrategy const& segment_strategy, JoinStrategy const& join_strategy, EndStrategy const& end_strategy, - RobustPolicy const& , Strategies const& strategies) { geometry::strategy::buffer::join_selector const join @@ -204,7 +203,6 @@ struct buffer_range typename SegmentStrategy, typename JoinStrategy, typename EndStrategy, - typename RobustPolicy, typename Strategies > static inline geometry::strategy::buffer::result_code iterate(Collection& collection, @@ -214,7 +212,6 @@ struct buffer_range SegmentStrategy const& segment_strategy, JoinStrategy const& join_strategy, EndStrategy const& end_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies, bool linear, output_point_type& first_p1, @@ -291,7 +288,7 @@ struct buffer_range *it, generated_side.front(), generated_side.back(), side, distance_strategy, segment_strategy, join_strategy, end_strategy, - robust_policy, strategies); + strategies); } collection.add_side_piece(*prev, *it, generated_side, first, distance_strategy.empty(side)); @@ -340,7 +337,6 @@ struct buffer_multi typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename RobustPolicy, typename Strategies > static inline void apply(Multi const& multi, @@ -350,7 +346,6 @@ struct buffer_multi JoinStrategy const& join_strategy, EndStrategy const& end_strategy, PointStrategy const& point_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies) { for (auto it = boost::begin(multi); it != boost::end(multi); ++it) @@ -358,7 +353,7 @@ struct buffer_multi Policy::apply(*it, collection, distance_strategy, segment_strategy, join_strategy, end_strategy, point_strategy, - robust_policy, strategies); + strategies); } } }; @@ -425,7 +420,6 @@ struct buffer_inserter typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename RobustPolicy, typename Strategies > static inline void apply(Point const& point, Collection& collection, @@ -434,7 +428,6 @@ struct buffer_inserter JoinStrategy const& , EndStrategy const& , PointStrategy const& point_strategy, - RobustPolicy const& , Strategies const& ) { detail::buffer::buffer_point @@ -463,7 +456,6 @@ struct buffer_inserter_ring typename SegmentStrategy, typename JoinStrategy, typename EndStrategy, - typename RobustPolicy, typename Strategies > static inline geometry::strategy::buffer::result_code iterate(Collection& collection, @@ -473,7 +465,6 @@ struct buffer_inserter_ring SegmentStrategy const& segment_strategy, JoinStrategy const& join_strategy, EndStrategy const& end_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies) { output_point_type first_p1, first_p2, last_p1, last_p2; @@ -484,7 +475,7 @@ struct buffer_inserter_ring = buffer_range::iterate(collection, begin, end, side, distance_strategy, segment_strategy, join_strategy, end_strategy, - robust_policy, strategies, + strategies, false, first_p1, first_p2, last_p1, last_p2); // Generate closing join @@ -496,7 +487,7 @@ struct buffer_inserter_ring *(begin + 1), first_p1, first_p2, side, distance_strategy, segment_strategy, join_strategy, end_strategy, - robust_policy, strategies); + strategies); } // Buffer is closed automatically by last closing corner @@ -511,7 +502,6 @@ struct buffer_inserter_ring typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename RobustPolicy, typename Strategies > static inline geometry::strategy::buffer::result_code apply(RingInput const& ring, @@ -521,7 +511,6 @@ struct buffer_inserter_ring JoinStrategy const& join_strategy, EndStrategy const& end_strategy, PointStrategy const& point_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies) { // Use helper geometry to support non-mutable input Rings @@ -551,14 +540,14 @@ struct buffer_inserter_ring code = iterate(collection, boost::rbegin(view), boost::rend(view), geometry::strategy::buffer::buffer_side_right, distance, segment_strategy, join_strategy, end_strategy, - robust_policy, strategies); + strategies); } else { code = iterate(collection, boost::begin(view), boost::end(view), geometry::strategy::buffer::buffer_side_left, distance, segment_strategy, join_strategy, end_strategy, - robust_policy, strategies); + strategies); } } @@ -591,7 +580,6 @@ struct buffer_inserter typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename RobustPolicy, typename Strategies > static inline geometry::strategy::buffer::result_code apply(RingInput const& ring, @@ -601,7 +589,6 @@ struct buffer_inserter JoinStrategy const& join_strategy, EndStrategy const& end_strategy, PointStrategy const& point_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies) { collection.start_new_ring(distance.negative()); @@ -609,7 +596,7 @@ struct buffer_inserter = buffer_inserter_ring::apply(ring, collection, distance, segment_strategy, join_strategy, end_strategy, point_strategy, - robust_policy, strategies); + strategies); collection.finish_ring(code, ring, false, false); return code; } @@ -633,7 +620,6 @@ struct buffer_inserter typename SegmentStrategy, typename JoinStrategy, typename EndStrategy, - typename RobustPolicy, typename Strategies > static inline geometry::strategy::buffer::result_code iterate(Collection& collection, @@ -643,7 +629,6 @@ struct buffer_inserter SegmentStrategy const& segment_strategy, JoinStrategy const& join_strategy, EndStrategy const& end_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies, output_point_type& first_p1) { @@ -680,7 +665,7 @@ struct buffer_inserter = detail::buffer::buffer_range::iterate(collection, begin, end, side, distance_strategy, segment_strategy, join_strategy, end_strategy, - robust_policy, strategies, + strategies, true, first_p1, first_p2, last_p1, last_p2); if (result == geometry::strategy::buffer::result_normal) @@ -701,7 +686,6 @@ struct buffer_inserter typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename RobustPolicy, typename Strategies > static inline geometry::strategy::buffer::result_code apply(Linestring const& linestring, @@ -711,7 +695,6 @@ struct buffer_inserter JoinStrategy const& join_strategy, EndStrategy const& end_strategy, PointStrategy const& point_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies) { // Use helper geometry to support non-mutable input Linestrings @@ -728,7 +711,7 @@ struct buffer_inserter boost::begin(simplified), boost::end(simplified), geometry::strategy::buffer::buffer_side_left, distance, segment_strategy, join_strategy, end_strategy, - robust_policy, strategies, + strategies, first_p1); if (code == geometry::strategy::buffer::result_normal) @@ -737,7 +720,7 @@ struct buffer_inserter boost::rbegin(simplified), boost::rend(simplified), geometry::strategy::buffer::buffer_side_right, distance, segment_strategy, join_strategy, end_strategy, - robust_policy, strategies, + strategies, first_p1); } collection.finish_ring(code); @@ -779,7 +762,6 @@ private: typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename RobustPolicy, typename Strategies > static inline @@ -790,7 +772,6 @@ private: JoinStrategy const& join_strategy, EndStrategy const& end_strategy, PointStrategy const& point_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies, bool is_interior) { @@ -806,7 +787,7 @@ private: geometry::strategy::buffer::result_code const code = policy::apply(*it, collection, distance, segment_strategy, join_strategy, end_strategy, point_strategy, - robust_policy, strategies); + strategies); collection.finish_ring(code, *it, is_interior, false); } @@ -821,7 +802,6 @@ private: typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename RobustPolicy, typename Strategies > static inline @@ -832,13 +812,12 @@ private: JoinStrategy const& join_strategy, EndStrategy const& end_strategy, PointStrategy const& point_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies) { iterate(boost::begin(interior_rings), boost::end(interior_rings), collection, distance, segment_strategy, join_strategy, end_strategy, point_strategy, - robust_policy, strategies, true); + strategies, true); } public: @@ -850,7 +829,6 @@ public: typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename RobustPolicy, typename Strategies > static inline void apply(PolygonInput const& polygon, @@ -860,7 +838,6 @@ public: JoinStrategy const& join_strategy, EndStrategy const& end_strategy, PointStrategy const& point_strategy, - RobustPolicy const& robust_policy, Strategies const& strategies) { { @@ -870,7 +847,7 @@ public: = policy::apply(exterior_ring(polygon), collection, distance, segment_strategy, join_strategy, end_strategy, point_strategy, - robust_policy, strategies); + strategies); collection.finish_ring(code, exterior_ring(polygon), false, geometry::num_interior_rings(polygon) > 0u); @@ -879,7 +856,7 @@ public: apply_interior_rings(interior_rings(polygon), collection, distance, segment_strategy, join_strategy, end_strategy, point_strategy, - robust_policy, strategies); + strategies); } }; @@ -925,7 +902,6 @@ template typename EndStrategy, typename PointStrategy, typename Strategies, - typename RobustPolicy, typename VisitPiecesPolicy > inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator out, @@ -935,7 +911,6 @@ inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator EndStrategy const& end_strategy, PointStrategy const& point_strategy, Strategies const& strategies, - RobustPolicy const& robust_policy, VisitPiecesPolicy& visit_pieces_policy ) { @@ -945,10 +920,9 @@ inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator < typename geometry::ring_type::type, Strategies, - DistanceStrategy, - RobustPolicy + DistanceStrategy >; - collection_type collection(strategies, distance_strategy, robust_policy); + collection_type collection(strategies, distance_strategy); collection_type const& const_collection = collection; static constexpr bool areal = util::is_areal::value; @@ -965,7 +939,7 @@ inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator >::apply(geometry_input, collection, distance_strategy, segment_strategy, join_strategy, end_strategy, point_strategy, - robust_policy, strategies); + strategies); collection.get_turns(); if BOOST_GEOMETRY_CONSTEXPR (areal) @@ -1035,8 +1009,7 @@ template typename JoinStrategy, typename EndStrategy, typename PointStrategy, - typename Strategies, - typename RobustPolicy + typename Strategies > inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator out, DistanceStrategy const& distance_strategy, @@ -1044,14 +1017,13 @@ inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator JoinStrategy const& join_strategy, EndStrategy const& end_strategy, PointStrategy const& point_strategy, - Strategies const& strategies, - RobustPolicy const& robust_policy) + Strategies const& strategies) { detail::buffer::visit_pieces_default_policy visitor; buffer_inserter(geometry_input, out, distance_strategy, segment_strategy, join_strategy, end_strategy, point_strategy, - strategies, robust_policy, visitor); + strategies, visitor); } #endif // DOXYGEN_NO_DETAIL diff --git a/include/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp b/include/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp index 918c2a9ee..e843b27d9 100644 --- a/include/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp +++ b/include/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp @@ -2,8 +2,9 @@ // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -47,7 +48,6 @@ public : typename Turns, typename Geometry, typename Strategy, - typename RobustPolicy, typename Visitor > static inline void apply(std::size_t size_at_start, @@ -59,7 +59,6 @@ public : Geometry const& , Geometry const& , Strategy const& , - RobustPolicy const& , state_type& state, Visitor& /*visitor*/ ) @@ -131,11 +130,11 @@ struct buffer_turn_operation : public detail::overlay::traversal_turn_operation { signed_size_type piece_index; - signed_size_type index_in_robust_ring; + signed_size_type index_in_ring; inline buffer_turn_operation() : piece_index(-1) - , index_in_robust_ring(-1) + , index_in_ring(-1) {} }; diff --git a/include/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp b/include/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp index 1382b53a6..3f20813b4 100644 --- a/include/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp +++ b/include/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2016-2022. -// Modifications copyright (c) 2016-2022 Oracle and/or its affiliates. +// This file was modified by Oracle on 2016-2024. +// Modifications copyright (c) 2016-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -100,7 +101,7 @@ namespace detail { namespace buffer * form together the offsetted ring (marked with o below) * The 8 pieces are part of the piece collection and use for inside-checks * The inner parts form (using 1 or 2 points per piece, often co-located) - * form together the robust_polygons (marked with r below) + * form together the polygons (marked with r below) * The remaining piece-segments are helper-segments (marked with h) * * ooooooooooooooooo @@ -119,8 +120,7 @@ template < typename Ring, typename Strategy, - typename DistanceStrategy, - typename RobustPolicy + typename DistanceStrategy > struct buffered_piece_collection { @@ -135,13 +135,13 @@ struct buffered_piece_collection typedef buffer_turn_info < point_type, - typename segment_ratio_type::type + typename segment_ratio_type::type > buffer_turn_info_type; typedef buffer_turn_operation < point_type, - typename segment_ratio_type::type + typename segment_ratio_type::type > buffer_turn_operation_type; typedef std::vector turn_vector_type; @@ -158,7 +158,7 @@ struct buffered_piece_collection // The next two members (1, 2) form together a complete clockwise ring // for each piece (with one dupped point) - // The complete clockwise ring is also included as a robust ring (3) + // The complete clockwise ring is also included as a ring (3) // 1: half, part of offsetted_rings @@ -228,7 +228,7 @@ struct buffered_piece_collection geometry::sectionalize < false, dimensions - >(m_ring, detail::no_rescale_policy(), m_sections, strategy); + >(m_ring, m_sections, strategy); } clockwise_ring_type m_ring; @@ -258,14 +258,8 @@ struct buffered_piece_collection segment_identifier current_segment_id; // Monotonic sections (used for offsetted rings around points) - // are still using a robust type, to be comparable with turn calculations, - // which is using rescaling. - typedef geometry::model::box - < - typename geometry::robust_point_type::type - > robust_box_type; - typedef geometry::sections robust_sections_type; - robust_sections_type monotonic_sections; + typedef geometry::sections sections_type; + sections_type monotonic_sections; // Define the clusters, mapping cluster_id -> turns typedef std::map @@ -278,17 +272,14 @@ struct buffered_piece_collection Strategy m_strategy; DistanceStrategy m_distance_strategy; - RobustPolicy const& m_robust_policy; buffered_piece_collection(Strategy const& strategy, - DistanceStrategy const& distance_strategy, - RobustPolicy const& robust_policy) + DistanceStrategy const& distance_strategy) : m_first_piece_index(-1) , m_deflate(false) , m_has_deflated(false) , m_strategy(strategy) , m_distance_strategy(distance_strategy) - , m_robust_policy(robust_policy) {} inline void check_linear_endpoints(buffer_turn_info_type& turn) const @@ -434,16 +425,15 @@ struct buffered_piece_collection piece_vector_type, buffered_ring_collection >, turn_vector_type, - Strategy, - RobustPolicy + Strategy > visitor(m_pieces, offsetted_rings, m_turns, - m_strategy, m_robust_policy); + m_strategy); detail::sectionalize::enlarge_sections(monotonic_sections, m_strategy); geometry::partition < - robust_box_type + box_type >::apply(monotonic_sections, visitor, detail::section::get_section_box(m_strategy), detail::section::overlaps_section_box(m_strategy)); @@ -593,8 +583,7 @@ struct buffered_piece_collection if (! boost::empty(input_ring)) { // Assign the ring to the original_ring collection - // For rescaling, it is recalculated. Without rescaling, it - // is just assigning (note that this Ring type is the + // (note that this Ring type is the // GeometryOut type, which might differ from the input ring type) clockwise_ring_type clockwise_ring; @@ -706,7 +695,6 @@ struct buffered_piece_collection sectionalizer::apply(monotonic_sections, boost::begin(ring) + pc.first_seg_id.segment_index, boost::begin(ring) + pc.beyond_last_segment_index, - m_robust_policy, m_strategy, ring_id, 10); } @@ -885,7 +873,7 @@ struct buffered_piece_collection < false, false, overlay_buffer, ring_collection_t, ring_collection_t - >(m_turns, m_clusters, m_robust_policy)) + >(m_turns, m_clusters)) { return; } @@ -938,7 +926,6 @@ struct buffered_piece_collection { enrich_intersection_points(m_turns, m_clusters, offsetted_rings, offsetted_rings, - m_robust_policy, m_strategy); } @@ -965,8 +952,8 @@ struct buffered_piece_collection { signed_size_type count_in_original = 0; - // Check of the robust point of this outputted ring is in - // any of the robust original rings + // Check of the point of this outputted ring is in + // any of the original rings // This can go quadratic if the input has many rings, and there // are many untouched deflated rings around for (auto const& original : original_rings) @@ -1054,7 +1041,7 @@ struct buffered_piece_collection traversed_rings.clear(); buffer_overlay_visitor visitor; traverser::apply(offsetted_rings, offsetted_rings, - m_strategy, m_robust_policy, + m_strategy, m_turns, traversed_rings, turn_info_per_ring, m_clusters, visitor); diff --git a/include/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp b/include/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp index c5b0aedc7..3775e604e 100644 --- a/include/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp +++ b/include/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -117,8 +118,7 @@ template typename Pieces, typename Rings, typename Turns, - typename Strategy, - typename RobustPolicy + typename Strategy > class piece_turn_visitor { @@ -126,7 +126,6 @@ class piece_turn_visitor Rings const& m_rings; Turns& m_turns; Strategy const& m_strategy; - RobustPolicy const& m_robust_policy; template inline bool is_adjacent(Piece const& piece1, Piece const& piece2) const @@ -161,8 +160,7 @@ class piece_turn_visitor && it_begin + 1 != it_beyond && detail::section::preceding(dir, *(it_begin + 1), this_bounding_box, - other_bounding_box, - m_robust_policy); + other_bounding_box); ++it_begin, index++) {} } @@ -177,7 +175,7 @@ class piece_turn_visitor && it_beyond - 2 != it_begin) { if (detail::section::exceeding(dir, *(it_beyond - 2), - this_bounding_box, other_bounding_box, m_robust_policy)) + this_bounding_box, other_bounding_box)) { --it_beyond; } @@ -271,7 +269,6 @@ class piece_turn_visitor turn_policy::apply(unique_sub_range1, unique_sub_range2, the_model, m_strategy, - m_robust_policy, std::back_inserter(m_turns)); } } @@ -282,13 +279,11 @@ public: piece_turn_visitor(Pieces const& pieces, Rings const& ring_collection, Turns& turns, - Strategy const& strategy, - RobustPolicy const& robust_policy) + Strategy const& strategy) : m_pieces(pieces) , m_rings(ring_collection) , m_turns(turns) , m_strategy(strategy) - , m_robust_policy(robust_policy) {} template diff --git a/include/boost/geometry/algorithms/detail/buffer/implementation.hpp b/include/boost/geometry/algorithms/detail/buffer/implementation.hpp index 8b820e8f7..76484726f 100644 --- a/include/boost/geometry/algorithms/detail/buffer/implementation.hpp +++ b/include/boost/geometry/algorithms/detail/buffer/implementation.hpp @@ -4,8 +4,9 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. -// This file was modified by Oracle on 2017-2022. -// Modifications copyright (c) 2017-2022 Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -78,11 +79,6 @@ struct buffer_all typedef typename boost::range_value::type polygon_type; typedef typename point_type::type point_type; - typedef typename rescale_policy_type - < - point_type, - typename geometry::cs_tag::type - >::type rescale_policy_type; if (geometry::is_empty(geometry_in)) { @@ -94,10 +90,6 @@ struct buffer_all geometry::envelope(geometry_in, box); geometry::buffer(box, box, distance_strategy.max_distance(join_strategy, end_strategy)); - rescale_policy_type rescale_policy - = boost::geometry::get_rescale_policy( - box, strategies); - detail::buffer::buffer_inserter(geometry_in, range::back_inserter(geometry_out), distance_strategy, @@ -105,8 +97,7 @@ struct buffer_all join_strategy, end_strategy, point_strategy, - strategies, - rescale_policy); + strategies); } }; diff --git a/include/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp b/include/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp index 00a6bff82..a3e2f9843 100644 --- a/include/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp +++ b/include/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp @@ -5,11 +5,11 @@ // Copyright (c) 2009-2014 Mateusz Loskot, London, UK. // Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2013-2020. -// Modifications copyright (c) 2013-2020, Oracle and/or its affiliates. - -// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -36,7 +36,6 @@ #include #include -#include #include @@ -128,7 +127,7 @@ struct disjoint_linear Geometry1, Geometry2, assign_disjoint_policy > >::apply(0, geometry1, 1, geometry2, - strategy, detail::no_rescale_policy(), turns, interrupt_policy); + strategy, turns, interrupt_policy); return !interrupt_policy.has_intersections; } diff --git a/include/boost/geometry/algorithms/detail/has_self_intersections.hpp b/include/boost/geometry/algorithms/detail/has_self_intersections.hpp index 4074f0d4f..faf21a98d 100644 --- a/include/boost/geometry/algorithms/detail/has_self_intersections.hpp +++ b/include/boost/geometry/algorithms/detail/has_self_intersections.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -26,9 +27,6 @@ #include #include -#include -#include -#include #ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS # include @@ -67,17 +65,16 @@ namespace detail { namespace overlay { -template +template inline bool has_self_intersections(Geometry const& geometry, Strategy const& strategy, - RobustPolicy const& robust_policy, bool throw_on_self_intersection = true) { typedef typename point_type::type point_type; typedef turn_info < point_type, - typename segment_ratio_type::type + typename segment_ratio_type::type > turn_info; std::deque turns; detail::disjoint::disjoint_interrupt_policy policy; @@ -86,7 +83,7 @@ inline bool has_self_intersections(Geometry const& geometry, < false, detail::overlay::assign_null_policy - >(geometry, strategy, robust_policy, turns, policy, 0, false); + >(geometry, strategy, turns, policy, 0, false); #ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS bool first = true; diff --git a/include/boost/geometry/algorithms/detail/intersection/areal_areal.hpp b/include/boost/geometry/algorithms/detail/intersection/areal_areal.hpp index e657f825f..8ce26f95c 100644 --- a/include/boost/geometry/algorithms/detail/intersection/areal_areal.hpp +++ b/include/boost/geometry/algorithms/detail/intersection/areal_areal.hpp @@ -1,6 +1,7 @@ // Boost.Geometry -// Copyright (c) 2020-2021, Oracle and/or its affiliates. +// Copyright (c) 2020-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Licensed under the Boost Software License version 1.0. @@ -40,12 +41,10 @@ struct intersection_areal_areal_ < typename Areal1, typename Areal2, - typename RobustPolicy, typename Strategy > static inline void apply(Areal1 const& areal1, Areal2 const& areal2, - RobustPolicy const& robust_policy, GeometryOut& geometry_out, Strategy const& strategy) { @@ -54,7 +53,7 @@ struct intersection_areal_areal_ Areal1, Areal2, typename boost::range_value::type, overlay_intersection - >::apply(areal1, areal2, robust_policy, + >::apply(areal1, areal2, geometry::range::back_inserter(geometry_out), strategy); } @@ -69,12 +68,10 @@ struct intersection_areal_areal_ < typename Areal1, typename Areal2, - typename RobustPolicy, typename Strategy > static inline void apply(Areal1 const& areal1, Areal2 const& areal2, - RobustPolicy const& robust_policy, TupledOut& geometry_out, Strategy const& strategy) { @@ -110,11 +107,8 @@ struct intersection_areal_areal_ areal::index, TupledOut >::type areal_out_type; - // NOTE: The same robust_policy is used in each call of - // intersection_insert. Is that correct? - // A * A -> A - call_intersection(areal1, areal2, robust_policy, + call_intersection(areal1, areal2, areal::get(geometry_out), strategy); @@ -124,7 +118,6 @@ struct intersection_areal_areal_ // L * L -> (L, P) call_intersection(geometry::detail::boundary_view(areal1), geometry::detail::boundary_view(areal2), - robust_policy, ! is_areal_empty ? temp_out : geometry_out, @@ -144,14 +137,12 @@ struct intersection_areal_areal_ // L - L -> L call_difference(linear::get(temp_out), areal_out_boundary, - robust_policy, linear::get(geometry_out), strategy); // P - L -> P call_difference(pointlike::get(temp_out), areal_out_boundary, - robust_policy, pointlike::get(geometry_out), strategy); } @@ -164,13 +155,11 @@ private: < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename GeometryOut, typename Strategy > static inline void call_intersection(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, GeometryOut& geometry_out, Strategy const& strategy) { @@ -185,7 +174,6 @@ private: overlay_intersection >::apply(geometry1, geometry2, - robust_policy, geometry::detail::output_geometry_back_inserter(geometry_out), strategy); } @@ -194,13 +182,11 @@ private: < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename GeometryOut, typename Strategy > static inline void call_difference(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, GeometryOut& geometry_out, Strategy const& strategy) { @@ -212,7 +198,6 @@ private: overlay_difference >::apply(geometry1, geometry2, - robust_policy, geometry::range::back_inserter(geometry_out), strategy); } @@ -225,20 +210,18 @@ struct intersection_areal_areal < typename Areal1, typename Areal2, - typename RobustPolicy, typename GeometryOut, typename Strategy > static inline bool apply(Areal1 const& areal1, Areal2 const& areal2, - RobustPolicy const& robust_policy, GeometryOut& geometry_out, Strategy const& strategy) { intersection_areal_areal_ < GeometryOut - >::apply(areal1, areal2, robust_policy, geometry_out, strategy); + >::apply(areal1, areal2, geometry_out, strategy); return true; } diff --git a/include/boost/geometry/algorithms/detail/intersection/box_box_implementation.hpp b/include/boost/geometry/algorithms/detail/intersection/box_box_implementation.hpp index 86478226c..fdfe6678e 100644 --- a/include/boost/geometry/algorithms/detail/intersection/box_box_implementation.hpp +++ b/include/boost/geometry/algorithms/detail/intersection/box_box_implementation.hpp @@ -2,9 +2,9 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2015. -// Modifications copyright (c) 2015, Oracle and/or its affiliates. - +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -31,13 +31,11 @@ struct intersection_box_box template < typename Box1, typename Box2, - typename RobustPolicy, typename BoxOut, typename Strategy > static inline bool apply(Box1 const& box1, Box2 const& box2, - RobustPolicy const& robust_policy, BoxOut& box_out, Strategy const& strategy) { @@ -62,7 +60,7 @@ struct intersection_box_box set(box_out, max1 > max2 ? max2 : max1); return intersection_box_box - ::apply(box1, box2, robust_policy, box_out, strategy); + ::apply(box1, box2, box_out, strategy); } }; @@ -72,12 +70,10 @@ struct intersection_box_box template < typename Box1, typename Box2, - typename RobustPolicy, typename BoxOut, typename Strategy > - static inline bool apply(Box1 const&, Box2 const&, - RobustPolicy const&, BoxOut&, Strategy const&) + static inline bool apply(Box1 const&, Box2 const&, BoxOut&, Strategy const&) { return true; } diff --git a/include/boost/geometry/algorithms/detail/intersection/gc.hpp b/include/boost/geometry/algorithms/detail/intersection/gc.hpp index 38a10ba32..d47d4c05b 100644 --- a/include/boost/geometry/algorithms/detail/intersection/gc.hpp +++ b/include/boost/geometry/algorithms/detail/intersection/gc.hpp @@ -1,6 +1,7 @@ // Boost.Geometry -// Copyright (c) 2022, Oracle and/or its affiliates. +// Copyright (c) 2022-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Licensed under the Boost Software License version 1.0. @@ -216,22 +217,12 @@ private: template ::value, int> = 0> static void merge_two(Out const& g1, Out const& g2, Out& out, Strategy const& strategy) { - using rescale_policy_type = typename geometry::rescale_overlay_policy_type - < - Out, Out, typename Strategy::cs_tag - >::type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy( - g1, g2, strategy); - geometry::dispatch::intersection_insert < Out, Out, typename boost::range_value::type, overlay_union >::apply(g1, g2, - robust_policy, geometry::range::back_inserter(out), strategy); } @@ -244,7 +235,6 @@ private: Out, Out, typename boost::range_value::type >::apply(g1, g2, - 0, // dummy robust policy geometry::range::back_inserter(out), strategy); } diff --git a/include/boost/geometry/algorithms/detail/intersection/interface.hpp b/include/boost/geometry/algorithms/detail/intersection/interface.hpp index 84a9a57cc..8c4a00876 100644 --- a/include/boost/geometry/algorithms/detail/intersection/interface.hpp +++ b/include/boost/geometry/algorithms/detail/intersection/interface.hpp @@ -2,8 +2,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2014-2022. -// Modifications copyright (c) 2014-2022, Oracle and/or its affiliates. +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -17,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -43,10 +43,9 @@ template > struct intersection { - template + template static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, GeometryOut& geometry_out, Strategy const& strategy) { @@ -59,7 +58,7 @@ struct intersection < Geometry1, Geometry2, SingleOut, overlay_intersection - >::apply(geometry1, geometry2, robust_policy, + >::apply(geometry1, geometry2, geometry::detail::output_geometry_back_inserter(geometry_out), strategy); @@ -83,11 +82,10 @@ struct intersection > : intersection { - template + template static inline bool apply( Geometry1 const& g1, Geometry2 const& g2, - RobustPolicy const& robust_policy, GeometryOut& out, Strategy const& strategy) { @@ -96,7 +94,7 @@ struct intersection Geometry2, Geometry1, Tag2, Tag1, false - >::apply(g2, g1, robust_policy, out, strategy); + >::apply(g2, g1, out, strategy); } }; @@ -121,22 +119,11 @@ struct intersection static bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, GeometryOut & geometry_out, Strategy const& strategy) { - typedef typename geometry::rescale_overlay_policy_type - < - Geometry1, - Geometry2, - typename Strategy::cs_tag - >::type rescale_policy_type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy( - geometry1, geometry2, strategy); - return dispatch::intersection < Geometry1, Geometry2 - >::apply(geometry1, geometry2, robust_policy, geometry_out, + >::apply(geometry1, geometry2, geometry_out, strategy); } }; diff --git a/include/boost/geometry/algorithms/detail/intersection/multi.hpp b/include/boost/geometry/algorithms/detail/intersection/multi.hpp index 7810abab5..9c5d6721d 100644 --- a/include/boost/geometry/algorithms/detail/intersection/multi.hpp +++ b/include/boost/geometry/algorithms/detail/intersection/multi.hpp @@ -2,9 +2,9 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2014-2022. -// Modifications copyright (c) 2014-2022, Oracle and/or its affiliates. - +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -53,12 +53,10 @@ struct intersection_multi_linestring_multi_linestring_point template < typename MultiLinestring1, typename MultiLinestring2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(MultiLinestring1 const& ml1, MultiLinestring2 const& ml2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -69,7 +67,7 @@ struct intersection_multi_linestring_multi_linestring_point for (auto it2 = boost::begin(ml2); it2 != boost::end(ml2); ++it2) { out = intersection_linestring_linestring_point - ::apply(*it1, *it2, robust_policy, out, strategy); + ::apply(*it1, *it2, out, strategy); } } @@ -84,19 +82,17 @@ struct intersection_linestring_multi_linestring_point template < typename Linestring, typename MultiLinestring, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Linestring const& linestring, MultiLinestring const& ml, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { for (auto it = boost::begin(ml); it != boost::end(ml); ++it) { out = intersection_linestring_linestring_point - ::apply(linestring, *it, robust_policy, out, strategy); + ::apply(linestring, *it, out, strategy); } return out; @@ -118,11 +114,9 @@ struct intersection_of_multi_linestring_with_areal template < typename MultiLinestring, typename Areal, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(MultiLinestring const& ml, Areal const& areal, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -131,7 +125,7 @@ struct intersection_of_multi_linestring_with_areal out = intersection_of_linestring_with_areal < ReverseAreal, LineStringOut, OverlayType, FollowIsolatedPoints - >::apply(*it, areal, robust_policy, out, strategy); + >::apply(*it, areal, out, strategy); } return out; @@ -152,18 +146,16 @@ struct intersection_of_areal_with_multi_linestring template < typename Areal, typename MultiLinestring, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Areal const& areal, MultiLinestring const& ml, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { return intersection_of_multi_linestring_with_areal < ReverseAreal, LineStringOut, OverlayType, FollowIsolatedPoints - >::apply(ml, areal, robust_policy, out, strategy); + >::apply(ml, areal, out, strategy); } }; @@ -175,12 +167,10 @@ struct clip_multi_linestring template < typename MultiLinestring, typename Box, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(MultiLinestring const& multi_linestring, Box const& box, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& ) { typedef typename point_type::type point_type; @@ -188,7 +178,7 @@ struct clip_multi_linestring for (auto it = boost::begin(multi_linestring); it != boost::end(multi_linestring); ++it) { out = detail::intersection::clip_range_with_box - (box, *it, robust_policy, out, lb_strategy); + (box, *it, out, lb_strategy); } return out; } diff --git a/include/boost/geometry/algorithms/detail/intersects/implementation.hpp b/include/boost/geometry/algorithms/detail/intersects/implementation.hpp index 76493f9d4..36f57fe6a 100644 --- a/include/boost/geometry/algorithms/detail/intersects/implementation.hpp +++ b/include/boost/geometry/algorithms/detail/intersects/implementation.hpp @@ -4,9 +4,9 @@ // Copyright (c) 2008-2014 Bruno Lalande, Paris, France. // Copyright (c) 2009-2014 Mateusz Loskot, London, UK. -// This file was modified by Oracle on 2013-2020. -// Modifications copyright (c) 2013-2020, Oracle and/or its affiliates. - +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -28,7 +28,6 @@ #include #include -#include #include @@ -69,7 +68,7 @@ struct self_intersects detail::self_get_turn_points::get_turns < false, turn_policy - >::apply(geometry, strategy, detail::no_rescale_policy(), turns, policy, 0, true); + >::apply(geometry, strategy, turns, policy, 0, true); return policy.has_intersections; } }; diff --git a/include/boost/geometry/algorithms/detail/is_simple/linear.hpp b/include/boost/geometry/algorithms/detail/is_simple/linear.hpp index e2ac77ad5..9bc0a1aaa 100644 --- a/include/boost/geometry/algorithms/detail/is_simple/linear.hpp +++ b/include/boost/geometry/algorithms/detail/is_simple/linear.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2014-2021, Oracle and/or its affiliates. +// Copyright (c) 2014-2024, Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle @@ -31,7 +31,6 @@ #include #include -#include #include #include @@ -218,7 +217,6 @@ inline bool has_self_intersections(Linear const& linear, Strategy const& strateg false, turn_policy >::apply(linear, strategy, - detail::no_rescale_policy(), turns, interrupt_policy, 0, true); diff --git a/include/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp b/include/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp index b12c42c8e..9a6e921b3 100644 --- a/include/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp +++ b/include/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp @@ -1,7 +1,7 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2014-2021, Oracle and/or its affiliates. - +// Copyright (c) 2014-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -26,8 +26,6 @@ #include #include -#include -#include namespace boost { namespace geometry { @@ -48,21 +46,11 @@ class has_valid_self_turns private: typedef typename point_type::type point_type; - typedef typename geometry::rescale_policy_type - < - point_type, - CSTag - >::type rescale_policy_type; - public: typedef detail::overlay::turn_info < point_type, - typename segment_ratio_type - < - point_type, - rescale_policy_type - >::type + typename segment_ratio_type::type > turn_type; // returns true if all turns are valid @@ -74,9 +62,6 @@ public: { boost::ignore_unused(visitor); - rescale_policy_type robust_policy - = geometry::get_rescale_policy(geometry, strategy); - detail::overlay::stateless_predicate_based_interrupt_policy < is_acceptable_turn @@ -86,7 +71,7 @@ public: detail::self_get_turn_points::self_turns < false, detail::overlay::assign_null_policy - >(geometry, strategy, robust_policy, turns, interrupt_policy, + >(geometry, strategy, turns, interrupt_policy, 0, true); if (interrupt_policy.has_intersections) diff --git a/include/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp b/include/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp index 6596104af..03b481342 100644 --- a/include/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2014-2020. -// Modifications copyright (c) 2014-2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -42,50 +43,22 @@ namespace detail { namespace overlay { // TODO: move this / rename this -template +template inline bool points_equal_or_close(Point1 const& point1, Point2 const& point2, - Strategy const& strategy, - RobustPolicy const& robust_policy) + Strategy const& strategy) { if (detail::equals::equals_point_point(point1, point2, strategy)) { return true; } - - if BOOST_GEOMETRY_CONSTEXPR (! RobustPolicy::enabled) - { - return false; - } - else // else prevents unreachable code warning - { - // Try using specified robust policy - using robust_point_type = typename geometry::robust_point_type - < - Point1, - RobustPolicy - >::type; - - robust_point_type point1_rob, point2_rob; - geometry::recalculate(point1_rob, point1, robust_policy); - geometry::recalculate(point2_rob, point2, robust_policy); - - // Only if this is the case the same strategy can be used. - BOOST_STATIC_ASSERT((std::is_same - < - typename geometry::cs_tag::type, - typename geometry::cs_tag::type - >::value)); - - return detail::equals::equals_point_point(point1_rob, point2_rob, strategy); - } + return false; } -template +template inline void append_no_dups_or_spikes(Range& range, Point const& point, - Strategy const& strategy, - RobustPolicy const& robust_policy) + Strategy const& strategy) { #ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION std::cout << " add: (" @@ -96,8 +69,7 @@ inline void append_no_dups_or_spikes(Range& range, Point const& point, // for geometries >= 3 points. // So we have to check the first potential duplicate differently if ( boost::size(range) == 1 - && points_equal_or_close(*(boost::begin(range)), point, strategy, - robust_policy) ) + && points_equal_or_close(*(boost::begin(range)), point, strategy) ) { return; } @@ -122,8 +94,8 @@ inline void append_no_dups_or_spikes(Range& range, Point const& point, && point_is_spike_or_equal(point, *(boost::end(range) - 3), *(boost::end(range) - 2), - strategy.side(), // TODO: Pass strategy? - robust_policy)) + strategy.side() // TODO: Pass strategy? + )) { // Use the Concept/traits, so resize and append again traits::resize::apply(range, boost::size(range) - 2); @@ -131,10 +103,9 @@ inline void append_no_dups_or_spikes(Range& range, Point const& point, } } -template +template inline void append_no_collinear(Range& range, Point const& point, - Strategy const& strategy, - RobustPolicy const& robust_policy) + Strategy const& strategy) { // Stricter version, not allowing any point in a linear row // (spike, continuation or same point) @@ -144,8 +115,7 @@ inline void append_no_collinear(Range& range, Point const& point, // So we have to check the first potential duplicate differently if ( boost::size(range) == 1 && points_equal_or_close(*(boost::begin(range)), point, - strategy, - robust_policy) ) + strategy) ) { return; } @@ -161,8 +131,8 @@ inline void append_no_collinear(Range& range, Point const& point, && point_is_collinear(point, *(boost::end(range) - 3), *(boost::end(range) - 2), - strategy.side(), // TODO: Pass strategy? - robust_policy)) + strategy.side() // TODO: Pass strategy? + )) { // Use the Concept/traits, so resize and append again traits::resize::apply(range, boost::size(range) - 2); @@ -171,9 +141,8 @@ inline void append_no_collinear(Range& range, Point const& point, } // Should only be called internally, from traverse. -template -inline void remove_spikes_at_closure(Ring& ring, Strategy const& strategy, - RobustPolicy const& robust_policy) +template +inline void remove_spikes_at_closure(Ring& ring, Strategy const& strategy) { // It assumes a closed ring (whatever the closure value) constexpr std::size_t min_size @@ -199,8 +168,8 @@ inline void remove_spikes_at_closure(Ring& ring, Strategy const& strategy, // Check if closing point is a spike (this is so if the second point is // considered as collinear w.r.t. the last segment) if (point_is_collinear(*second, *penultimate, *first, - strategy.side(), // TODO: Pass strategy? - robust_policy)) + strategy.side() // TODO: Pass strategy? + )) { // Remove first point and last point range::erase(ring, first); diff --git a/include/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp b/include/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp index 39d107e01..2f8e6314a 100644 --- a/include/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp @@ -2,8 +2,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -106,7 +107,6 @@ public : typename Operation, typename Rings, typename Ring, typename Turns, typename Strategy, - typename RobustPolicy, typename Visitor > static inline void apply(std::size_t size_at_start, @@ -119,7 +119,6 @@ public : Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy, - RobustPolicy const& robust_policy, state_type& state, Visitor& visitor) { @@ -131,8 +130,8 @@ public : if (! state.m_checked) { state.m_checked = true; - has_self_intersections(geometry1, strategy, robust_policy); - has_self_intersections(geometry2, strategy, robust_policy); + has_self_intersections(geometry1, strategy); + has_self_intersections(geometry2, strategy); } // Make bad output clean diff --git a/include/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp b/include/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp index 2eb70aa7d..55f39a2f9 100644 --- a/include/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp @@ -2,9 +2,9 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2015-2020. -// Modifications copyright (c) 2015-2020 Oracle and/or its affiliates. - +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -180,13 +180,11 @@ template typename OutputLinestring, typename OutputIterator, typename Range, - typename RobustPolicy, typename Box, typename Strategy > OutputIterator clip_range_with_box(Box const& b, Range const& range, - RobustPolicy const&, - OutputIterator out, Strategy const& strategy) + OutputIterator out, Strategy const& strategy) { if (boost::begin(range) == boost::end(range)) { diff --git a/include/boost/geometry/algorithms/detail/overlay/copy_segments.hpp b/include/boost/geometry/algorithms/detail/overlay/copy_segments.hpp index 545bdc031..d08683b83 100644 --- a/include/boost/geometry/algorithms/detail/overlay/copy_segments.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/copy_segments.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2014-2021. -// Modifications copyright (c) 2014-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -62,14 +63,12 @@ struct copy_segments_ring typename Ring, typename SegmentIdentifier, typename Strategy, - typename RobustPolicy, typename RangeOut > static inline void apply(Ring const& ring, SegmentIdentifier const& seg_id, signed_size_type to_index, Strategy const& strategy, - RobustPolicy const& robust_policy, RangeOut& current_output) { using view_type = detail::closed_clockwise_view @@ -108,7 +107,7 @@ struct copy_segments_ring for (signed_size_type i = 0; i < count; ++i, ++it) { - detail::overlay::append_no_dups_or_spikes(current_output, *it, strategy, robust_policy); + detail::overlay::append_no_dups_or_spikes(current_output, *it, strategy); } } }; @@ -118,24 +117,21 @@ class copy_segments_linestring { private: // remove spikes - template + template static inline void append_to_output(RangeOut& current_output, Point const& point, Strategy const& strategy, - RobustPolicy const& robust_policy, std::true_type const&) { detail::overlay::append_no_dups_or_spikes(current_output, point, - strategy, - robust_policy); + strategy); } // keep spikes - template + template static inline void append_to_output(RangeOut& current_output, Point const& point, Strategy const& strategy, - RobustPolicy const&, std::false_type const&) { detail::overlay::append_no_duplicates(current_output, point, strategy); @@ -147,14 +143,12 @@ public: typename LineString, typename SegmentIdentifier, typename SideStrategy, - typename RobustPolicy, typename RangeOut > static inline void apply(LineString const& ls, SegmentIdentifier const& seg_id, signed_size_type to_index, SideStrategy const& strategy, - RobustPolicy const& robust_policy, RangeOut& current_output) { signed_size_type const from_index = seg_id.segment_index + 1; @@ -171,7 +165,7 @@ public: auto it = boost::begin(ls) + from_index; for (signed_size_type i = 0; i < count; ++i, ++it) { - append_to_output(current_output, *it, strategy, robust_policy, + append_to_output(current_output, *it, strategy, std::integral_constant()); } } @@ -185,14 +179,12 @@ struct copy_segments_polygon typename Polygon, typename SegmentIdentifier, typename SideStrategy, - typename RobustPolicy, typename RangeOut > static inline void apply(Polygon const& polygon, SegmentIdentifier const& seg_id, signed_size_type to_index, SideStrategy const& strategy, - RobustPolicy const& robust_policy, RangeOut& current_output) { // Call ring-version with the right ring @@ -203,7 +195,6 @@ struct copy_segments_polygon : range::at(geometry::interior_rings(polygon), seg_id.ring_index), seg_id, to_index, strategy, - robust_policy, current_output ); } @@ -218,14 +209,12 @@ struct copy_segments_box typename Box, typename SegmentIdentifier, typename SideStrategy, - typename RobustPolicy, typename RangeOut > static inline void apply(Box const& box, SegmentIdentifier const& seg_id, signed_size_type to_index, SideStrategy const& strategy, - RobustPolicy const& robust_policy, RangeOut& current_output) { signed_size_type index = seg_id.segment_index + 1; @@ -245,7 +234,7 @@ struct copy_segments_box for (signed_size_type i = 0; i < count; i++, index++) { detail::overlay::append_no_dups_or_spikes(current_output, - bp[index % 5], strategy, robust_policy); + bp[index % 5], strategy); } } @@ -260,14 +249,12 @@ struct copy_segments_multi typename MultiGeometry, typename SegmentIdentifier, typename SideStrategy, - typename RobustPolicy, typename RangeOut > static inline void apply(MultiGeometry const& multi_geometry, SegmentIdentifier const& seg_id, signed_size_type to_index, SideStrategy const& strategy, - RobustPolicy const& robust_policy, RangeOut& current_output) { @@ -281,7 +268,6 @@ struct copy_segments_multi Policy::apply(range::at(multi_geometry, seg_id.multi_index), seg_id, to_index, strategy, - robust_policy, current_output); } }; @@ -351,14 +337,12 @@ template typename Geometry, typename SegmentIdentifier, typename SideStrategy, - typename RobustPolicy, typename RangeOut > inline void copy_segments(Geometry const& geometry, SegmentIdentifier const& seg_id, signed_size_type to_index, SideStrategy const& strategy, - RobustPolicy const& robust_policy, RangeOut& range_out) { concepts::check(); @@ -367,7 +351,7 @@ inline void copy_segments(Geometry const& geometry, < typename tag::type, Reverse - >::apply(geometry, seg_id, to_index, strategy, robust_policy, range_out); + >::apply(geometry, seg_id, to_index, strategy, range_out); } diff --git a/include/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp b/include/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp index 69e0048af..40eb0ed5a 100644 --- a/include/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2021. -// Modifications copyright (c) 2017-2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -41,7 +42,6 @@ #include #include #include -#include #include #include @@ -81,14 +81,12 @@ template typename Operations, typename Turns, typename Geometry1, typename Geometry2, - typename RobustPolicy, typename Strategy > inline void enrich_sort(Operations& operations, Turns const& turns, Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, Strategy const& strategy) { std::sort(std::begin(operations), @@ -98,10 +96,9 @@ inline void enrich_sort(Operations& operations, Turns, typename boost::range_value::type, Geometry1, Geometry2, - RobustPolicy, Strategy, Reverse1, Reverse2 - >(turns, geometry1, geometry2, robust_policy, strategy)); + >(turns, geometry1, geometry2, strategy)); } @@ -379,7 +376,6 @@ inline void calculate_remaining_distance(Turns& turns) \param clusters container containing clusters \param geometry1 \param_geometry \param geometry2 \param_geometry -\param robust_policy policy to handle robustness issues \param strategy point in geometry strategy */ template @@ -389,13 +385,11 @@ template typename Turns, typename Clusters, typename Geometry1, typename Geometry2, - typename RobustPolicy, typename IntersectionStrategy > inline void enrich_intersection_points(Turns& turns, Clusters& clusters, Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, IntersectionStrategy const& strategy) { constexpr detail::overlay::operation_type target_operation @@ -431,7 +425,7 @@ inline void enrich_intersection_points(Turns& turns, has_colocations = detail::overlay::handle_colocations < Reverse1, Reverse2, OverlayType, Geometry1, Geometry2 - >(turns, clusters, robust_policy); + >(turns, clusters); // Gather cluster properties (using even clusters with // discarded turns - for open turns) detail::overlay::gather_cluster_properties @@ -510,7 +504,7 @@ inline void enrich_intersection_points(Turns& turns, detail::overlay::enrich_sort( pair.second, turns, geometry1, geometry2, - robust_policy, strategy); + strategy); } if (has_colocations) diff --git a/include/boost/geometry/algorithms/detail/overlay/follow.hpp b/include/boost/geometry/algorithms/detail/overlay/follow.hpp index d94560541..133f1c93f 100644 --- a/include/boost/geometry/algorithms/detail/overlay/follow.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/follow.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2014-2022. -// Modifications copyright (c) 2014-2022 Oracle and/or its affiliates. +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -220,8 +221,7 @@ struct action_selector typename LineString, typename Point, typename Operation, - typename Strategy, - typename RobustPolicy + typename Strategy > static inline void enter(LineStringOut& current_piece, LineString const& , @@ -229,7 +229,6 @@ struct action_selector signed_size_type , Point const& point, Operation const& operation, Strategy const& strategy, - RobustPolicy const& , OutputIterator& ) { // On enter, append the intersection point and remember starting point @@ -245,8 +244,7 @@ struct action_selector typename LineString, typename Point, typename Operation, - typename Strategy, - typename RobustPolicy + typename Strategy > static inline void leave(LineStringOut& current_piece, LineString const& linestring, @@ -254,7 +252,6 @@ struct action_selector signed_size_type index, Point const& point, Operation const& , Strategy const& strategy, - RobustPolicy const& robust_policy, OutputIterator& out) { // On leave, copy all segments from starting point, append the intersection point @@ -262,7 +259,7 @@ struct action_selector detail::copy_segments::copy_segments_linestring < false, RemoveSpikes - >::apply(linestring, segment_id, index, strategy, robust_policy, current_piece); + >::apply(linestring, segment_id, index, strategy, current_piece); detail::overlay::append_no_duplicates(current_piece, point, strategy); if (::boost::size(current_piece) > 1) { @@ -309,8 +306,7 @@ struct action_selector typename LineString, typename Point, typename Operation, - typename Strategy, - typename RobustPolicy + typename Strategy > static inline void enter(LineStringOut& current_piece, LineString const& linestring, @@ -318,11 +314,10 @@ struct action_selector signed_size_type index, Point const& point, Operation const& operation, Strategy const& strategy, - RobustPolicy const& robust_policy, OutputIterator& out) { normal_action::leave(current_piece, linestring, segment_id, index, - point, operation, strategy, robust_policy, out); + point, operation, strategy, out); } template @@ -332,8 +327,7 @@ struct action_selector typename LineString, typename Point, typename Operation, - typename Strategy, - typename RobustPolicy + typename Strategy > static inline void leave(LineStringOut& current_piece, LineString const& linestring, @@ -341,11 +335,10 @@ struct action_selector signed_size_type index, Point const& point, Operation const& operation, Strategy const& strategy, - RobustPolicy const& robust_policy, OutputIterator& out) { normal_action::enter(current_piece, linestring, segment_id, index, - point, operation, strategy, robust_policy, out); + point, operation, strategy, out); } template @@ -412,13 +405,11 @@ public : < typename Turns, typename OutputIterator, - typename RobustPolicy, typename Strategy > static inline OutputIterator apply(LineString const& linestring, Polygon const& polygon, detail::overlay::operation_type , // TODO: this parameter might be redundant Turns& turns, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -464,7 +455,7 @@ public : entered = true; action::enter(current_piece, linestring, current_segment_id, op.seg_id.segment_index, turn.point, op, - strategy, robust_policy, + strategy, linear::get(out)); } else if (following::is_leaving(turn, op, entered, first, linestring, polygon, strategy)) @@ -474,7 +465,7 @@ public : entered = false; action::leave(current_piece, linestring, current_segment_id, op.seg_id.segment_index, turn.point, op, - strategy, robust_policy, + strategy, linear::get(out)); } else if (BOOST_GEOMETRY_CONDITION(FollowIsolatedPoints) @@ -499,7 +490,7 @@ public : >::apply(linestring, current_segment_id, static_cast(boost::size(linestring) - 1), - strategy, robust_policy, + strategy, current_piece); } diff --git a/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp b/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp index 5d1577c48..1a6cd2800 100644 --- a/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp @@ -2,8 +2,8 @@ // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// Copyright (c) 2014-2020, Oracle and/or its affiliates. - +// Copyright (c) 2014-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -212,9 +212,6 @@ protected: OutputIterator oit, SideStrategy const& strategy) { - // We don't rescale linear/linear - detail::no_rescale_policy robust_policy; - if ( is_entering(*it, *op_it) ) { detail::turns::debug_turn(*it, *op_it, "-> Entering"); @@ -226,7 +223,7 @@ protected: linestring, current_segment_id, op_it->seg_id.segment_index, - it->point, *op_it, strategy, robust_policy, + it->point, *op_it, strategy, linear::get(oit)); } ++enter_count; @@ -243,7 +240,7 @@ protected: linestring, current_segment_id, op_it->seg_id.segment_index, - it->point, *op_it, strategy, robust_policy, + it->point, *op_it, strategy, linear::get(oit)); } } @@ -284,9 +281,6 @@ protected: { if ( action::is_entered(entered) ) { - // We don't rescale linear/linear - detail::no_rescale_policy robust_policy; - detail::copy_segments::copy_segments_linestring < false, false // do not reverse; do not remove spikes @@ -294,7 +288,6 @@ protected: current_segment_id, static_cast(boost::size(linestring) - 1), strategy, - robust_policy, current_piece); } diff --git a/include/boost/geometry/algorithms/detail/overlay/get_clusters.hpp b/include/boost/geometry/algorithms/detail/overlay/get_clusters.hpp index 5d6badfd5..783acc847 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_clusters.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_clusters.hpp @@ -2,6 +2,10 @@ // Copyright (c) 2021 Barend Gehrels, Amsterdam, the Netherlands. +// This file was modified by Oracle on 2024. +// Modifications copyright (c) 2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, 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) @@ -17,14 +21,9 @@ #include #include #include -#include -#include #include #include -#define BOOST_GEOMETRY_USE_RESCALING_IN_GET_CLUSTERS - - namespace boost { namespace geometry { @@ -32,7 +31,7 @@ namespace boost { namespace geometry namespace detail { namespace overlay { -template +template struct sweep_equal_policy { @@ -58,7 +57,7 @@ public: }; template <> -struct sweep_equal_policy +struct sweep_equal_policy { template static inline bool equals(P const& p1, P const& p2) @@ -74,26 +73,6 @@ struct sweep_equal_policy } }; -#ifdef BOOST_GEOMETRY_USE_RESCALING_IN_GET_CLUSTERS -template <> -struct sweep_equal_policy -{ - template - static inline bool equals(P const& p1, P const& p2) - { - // Neighbouring cells in the "integer grid" are considered as equal - return math::abs(geometry::get<0>(p1) - geometry::get<0>(p2)) <= 1 - && math::abs(geometry::get<1>(p1) - geometry::get<1>(p2)) <= 1; - } - - template - static inline bool exceeds(T value) - { - return value > 1; - } -}; -#endif - template struct turn_with_point { @@ -112,29 +91,16 @@ struct cluster_with_point template < typename Turns, - typename Clusters, - typename RobustPolicy + typename Clusters > -inline void get_clusters(Turns& turns, Clusters& clusters, - RobustPolicy const& robust_policy) +inline void get_clusters(Turns& turns, Clusters& clusters) { using turn_type = typename boost::range_value::type; using cluster_type = typename Clusters::mapped_type; - -#ifdef BOOST_GEOMETRY_USE_RESCALING_IN_GET_CLUSTERS - // For now still use robust points for rescaled, otherwise points do not match - using point_type = typename geometry::robust_point_type - < - typename turn_type::point_type, - RobustPolicy - >::type; -#else using point_type = typename turn_type::point_type; -#endif sweep_equal_policy < - typename rescale_policy_type::type, std::is_integral::type>::value > equal_policy; @@ -144,13 +110,7 @@ inline void get_clusters(Turns& turns, Clusters& clusters, { if (! turn.discarded) { -#ifdef BOOST_GEOMETRY_USE_RESCALING_IN_GET_CLUSTERS - point_type pnt; - geometry::recalculate(pnt, turn.point, robust_policy); - points.push_back({turn_index, pnt}); -#else points.push_back({turn_index, turn.point}); -#endif } turn_index++; } diff --git a/include/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp b/include/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp index f0e3dbced..7afe85301 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp @@ -2,9 +2,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020 Oracle and/or its affiliates. - +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -22,7 +22,6 @@ #include #include -#include #include @@ -48,23 +47,14 @@ struct get_turn_without_info typename UniqueSubRange1, typename UniqueSubRange2, typename Strategy, - typename RobustPolicy, typename OutputIterator > static inline OutputIterator apply(UniqueSubRange1 const& range_p, UniqueSubRange2 const& range_q, TurnInfo const& , Strategy const& strategy, - RobustPolicy const& , OutputIterator out) { - // Make sure this is only called with no rescaling - BOOST_STATIC_ASSERT((std::is_same - < - no_rescale_policy_tag, - typename rescale_policy_type::type - >::value)); - typedef typename TurnInfo::point_type turn_point_type; typedef policies::relate::segments_intersection_points @@ -96,13 +86,11 @@ template < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename Turns, typename Strategy > inline void get_intersection_points(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, Turns& turns, Strategy const& strategy) { @@ -139,7 +127,6 @@ inline void get_intersection_points(Geometry1 const& geometry1, >::apply(0, geometry1, 1, geometry2, strategy, - robust_policy, turns, interrupt_policy); } diff --git a/include/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp b/include/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp index dfc87d2fa..da3107f0c 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2023 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2015-2022. -// Modifications copyright (c) 2015-2022 Oracle and/or its affiliates. +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -138,8 +139,8 @@ struct base_turn_handler BOOST_GEOMETRY_ASSERT(index < info.count); geometry::convert(info.intersections[index], ti.point); - ti.operations[0].fraction = info.fractions[index].robust_ra; - ti.operations[1].fraction = info.fractions[index].robust_rb; + ti.operations[0].fraction = info.fractions[index].ra; + ti.operations[1].fraction = info.fractions[index].rb; } template @@ -170,8 +171,8 @@ struct base_turn_handler } else { - ti.operations[i].fraction = i == 0 ? info.fractions[index].robust_ra - : info.fractions[index].robust_rb; + ti.operations[i].fraction = i == 0 ? info.fractions[index].ra + : info.fractions[index].rb; } } } @@ -179,7 +180,7 @@ struct base_turn_handler template static inline unsigned int non_opposite_to_index(IntersectionInfo const& info) { - return info.fractions[0].robust_rb < info.fractions[1].robust_rb + return info.fractions[0].rb < info.fractions[1].rb ? 1 : 0; } @@ -1394,7 +1395,6 @@ struct get_turn_info typename UniqueSubRange2, typename TurnInfo, typename UmbrellaStrategy, - typename RobustPolicy, typename OutputIterator > static inline OutputIterator apply( @@ -1402,18 +1402,16 @@ struct get_turn_info UniqueSubRange2 const& range_q, TurnInfo const& tp_model, UmbrellaStrategy const& umbrella_strategy, - RobustPolicy const& robust_policy, OutputIterator out) { typedef intersection_info < UniqueSubRange1, UniqueSubRange2, typename TurnInfo::point_type, - UmbrellaStrategy, - RobustPolicy + UmbrellaStrategy > inters_info; - inters_info inters(range_p, range_q, umbrella_strategy, robust_policy); + inters_info inters(range_p, range_q, umbrella_strategy); char const method = inters.d_info().how; diff --git a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp index 007ada0f2..229277abe 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp @@ -2,9 +2,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2013-2020. -// Modifications copyright (c) 2013-2020 Oracle and/or its affiliates. - +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -19,7 +19,6 @@ #include #include #include -#include namespace boost { namespace geometry { diff --git a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp index 00a6004f2..4ef747f01 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp @@ -2,9 +2,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2013-2020. -// Modifications copyright (c) 2013-2020 Oracle and/or its affiliates. - +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -16,10 +16,8 @@ #include #include -#include #include #include -#include #include namespace boost { namespace geometry { @@ -85,246 +83,17 @@ struct side_calculator // Used side-strategy, owned by the calculator side_strategy_type m_side_strategy; - // Used ranges - owned by get_turns or (for robust points) by intersection_info_base + // Used ranges - owned by get_turns or (for points) by intersection_info_base UniqueSubRange1 const& m_range_p; UniqueSubRange2 const& m_range_q; }; -template -struct robust_subrange_adapter -{ - typedef Point point_type; - - robust_subrange_adapter(UniqueSubRange const& unique_sub_range, - Point const& robust_point_i, Point const& robust_point_j, - RobustPolicy const& robust_policy) - - : m_unique_sub_range(unique_sub_range) - , m_robust_policy(robust_policy) - , m_robust_point_i(robust_point_i) - , m_robust_point_j(robust_point_j) - , m_k_retrieved(false) - {} - - std::size_t size() const { return m_unique_sub_range.size(); } - - //! Get precalculated point - Point const& at(std::size_t index) const - { - BOOST_GEOMETRY_ASSERT(index < size()); - switch (index) - { - case 0 : return m_robust_point_i; - case 1 : return m_robust_point_j; - case 2 : return get_point_k(); - default : return m_robust_point_i; - } - } - -private : - Point const& get_point_k() const - { - if (! m_k_retrieved) - { - geometry::recalculate(m_robust_point_k, m_unique_sub_range.at(2), m_robust_policy); - m_k_retrieved = true; - } - return m_robust_point_k; - } - - UniqueSubRange const& m_unique_sub_range; - RobustPolicy const& m_robust_policy; - - Point const& m_robust_point_i; - Point const& m_robust_point_j; - mutable Point m_robust_point_k; - - mutable bool m_k_retrieved; -}; - template < typename UniqueSubRange1, typename UniqueSubRange2, - typename RobustPolicy + typename TurnPoint, typename UmbrellaStrategy > -struct robust_point_calculator -{ - typedef typename geometry::robust_point_type - < - typename UniqueSubRange1::point_type, RobustPolicy - >::type robust_point1_type; - typedef typename geometry::robust_point_type - < - typename UniqueSubRange2::point_type, RobustPolicy - >::type robust_point2_type; - - inline robust_point_calculator(UniqueSubRange1 const& range_p, - UniqueSubRange2 const& range_q, - RobustPolicy const& robust_policy) - : m_robust_policy(robust_policy) - , m_range_p(range_p) - , m_range_q(range_q) - , m_pk_retrieved(false) - , m_qk_retrieved(false) - { - // Calculate pi,pj and qi,qj which are almost always necessary - // But don't calculate pk/qk yet, which is retrieved (taking - // more time) and not always necessary. - geometry::recalculate(m_rpi, range_p.at(0), robust_policy); - geometry::recalculate(m_rpj, range_p.at(1), robust_policy); - geometry::recalculate(m_rqi, range_q.at(0), robust_policy); - geometry::recalculate(m_rqj, range_q.at(1), robust_policy); - } - - inline robust_point1_type const& get_rpk() const - { - if (! m_pk_retrieved) - { - geometry::recalculate(m_rpk, m_range_p.at(2), m_robust_policy); - m_pk_retrieved = true; - } - return m_rpk; - } - inline robust_point2_type const& get_rqk() const - { - if (! m_qk_retrieved) - { - geometry::recalculate(m_rqk, m_range_q.at(2), m_robust_policy); - m_qk_retrieved = true; - } - return m_rqk; - } - - robust_point1_type m_rpi, m_rpj; - robust_point2_type m_rqi, m_rqj; - -private : - RobustPolicy const& m_robust_policy; - UniqueSubRange1 const& m_range_p; - UniqueSubRange2 const& m_range_q; - - // On retrieval - mutable robust_point1_type m_rpk; - mutable robust_point2_type m_rqk; - mutable bool m_pk_retrieved; - mutable bool m_qk_retrieved; -}; - -// Default version (empty - specialized below) -template -< - typename UniqueSubRange1, typename UniqueSubRange2, - typename TurnPoint, typename UmbrellaStrategy, - typename RobustPolicy, - typename Tag = typename rescale_policy_type::type -> -class intersection_info_base {}; - -// Version with rescaling, having robust points -template -< - typename UniqueSubRange1, typename UniqueSubRange2, - typename TurnPoint, typename UmbrellaStrategy, - typename RobustPolicy -> -class intersection_info_base -{ - typedef robust_point_calculator - < - UniqueSubRange1, UniqueSubRange2, - RobustPolicy - > - robust_calc_type; - -public: - typedef segment_intersection_points - < - TurnPoint, - geometry::segment_ratio - > intersection_point_type; - typedef policies::relate::segments_intersection_policy - < - intersection_point_type - > intersection_policy_type; - - typedef typename intersection_policy_type::return_type result_type; - - typedef typename robust_calc_type::robust_point1_type robust_point1_type; - typedef typename robust_calc_type::robust_point2_type robust_point2_type; - - typedef robust_subrange_adapter robust_subrange1; - typedef robust_subrange_adapter robust_subrange2; - - typedef side_calculator - < - robust_subrange1, robust_subrange2, UmbrellaStrategy - > side_calculator_type; - - typedef side_calculator - < - robust_subrange2, robust_subrange1, UmbrellaStrategy - > robust_swapped_side_calculator_type; - - intersection_info_base(UniqueSubRange1 const& range_p, - UniqueSubRange2 const& range_q, - UmbrellaStrategy const& umbrella_strategy, - RobustPolicy const& robust_policy) - : m_range_p(range_p) - , m_range_q(range_q) - , m_robust_calc(range_p, range_q, robust_policy) - , m_robust_range_p(range_p, m_robust_calc.m_rpi, m_robust_calc.m_rpj, robust_policy) - , m_robust_range_q(range_q, m_robust_calc.m_rqi, m_robust_calc.m_rqj, robust_policy) - , m_side_calc(m_robust_range_p, m_robust_range_q, umbrella_strategy) - , m_swapped_side_calc(m_robust_range_q, m_robust_range_p, umbrella_strategy) - , m_result(umbrella_strategy.relate().apply(range_p, range_q, - intersection_policy_type(), - m_robust_range_p, m_robust_range_q)) - {} - - inline bool p_is_last_segment() const { return m_range_p.is_last_segment(); } - inline bool q_is_last_segment() const { return m_range_q.is_last_segment(); } - - inline robust_point1_type const& rpi() const { return m_robust_calc.m_rpi; } - inline robust_point1_type const& rpj() const { return m_robust_calc.m_rpj; } - inline robust_point1_type const& rpk() const { return m_robust_calc.get_rpk(); } - - inline robust_point2_type const& rqi() const { return m_robust_calc.m_rqi; } - inline robust_point2_type const& rqj() const { return m_robust_calc.m_rqj; } - inline robust_point2_type const& rqk() const { return m_robust_calc.get_rqk(); } - - inline side_calculator_type const& sides() const { return m_side_calc; } - inline robust_swapped_side_calculator_type const& swapped_sides() const - { - return m_swapped_side_calc; - } - -private : - - // Owned by get_turns - UniqueSubRange1 const& m_range_p; - UniqueSubRange2 const& m_range_q; - - // Owned by this class - robust_calc_type m_robust_calc; - robust_subrange1 m_robust_range_p; - robust_subrange2 m_robust_range_q; - side_calculator_type m_side_calc; - robust_swapped_side_calculator_type m_swapped_side_calc; - -protected : - result_type m_result; -}; - -// Version without rescaling -template -< - typename UniqueSubRange1, typename UniqueSubRange2, - typename TurnPoint, typename UmbrellaStrategy, - typename RobustPolicy -> -class intersection_info_base +class intersection_info_base { public: @@ -348,8 +117,7 @@ public: intersection_info_base(UniqueSubRange1 const& range_p, UniqueSubRange2 const& range_q, - UmbrellaStrategy const& umbrella_strategy, - no_rescale_policy const& ) + UmbrellaStrategy const& umbrella_strategy) : m_range_p(range_p) , m_range_q(range_q) , m_side_calc(range_p, range_q, umbrella_strategy) @@ -393,15 +161,14 @@ template < typename UniqueSubRange1, typename UniqueSubRange2, typename TurnPoint, - typename UmbrellaStrategy, - typename RobustPolicy + typename UmbrellaStrategy > class intersection_info : public intersection_info_base + TurnPoint, UmbrellaStrategy> { typedef intersection_info_base base; + TurnPoint, UmbrellaStrategy> base; public: @@ -415,11 +182,9 @@ public: intersection_info(UniqueSubRange1 const& range_p, UniqueSubRange2 const& range_q, - UmbrellaStrategy const& umbrella_strategy, - RobustPolicy const& robust_policy) - : base(range_p, range_q, umbrella_strategy, robust_policy) + UmbrellaStrategy const& umbrella_strategy) + : base(range_p, range_q, umbrella_strategy) , m_umbrella_strategy(umbrella_strategy) - , m_robust_policy(robust_policy) {} inline result_type const& result() const { return base::m_result; } @@ -530,7 +295,6 @@ private: } UmbrellaStrategy const& m_umbrella_strategy; - RobustPolicy const& m_robust_policy; }; }} // namespace detail::overlay diff --git a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp index c849774d6..95e6ed669 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp @@ -3,9 +3,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2013-2020. -// Modifications copyright (c) 2013-2020 Oracle and/or its affiliates. - +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -45,7 +45,6 @@ struct get_turn_info_linear_areal typename UniqueSubRange2, typename TurnInfo, typename UmbrellaStrategy, - typename RobustPolicy, typename OutputIterator > static inline OutputIterator apply( @@ -53,18 +52,16 @@ struct get_turn_info_linear_areal UniqueSubRange2 const& range_q, TurnInfo const& tp_model, UmbrellaStrategy const& umbrella_strategy, - RobustPolicy const& robust_policy, OutputIterator out) { typedef intersection_info < UniqueSubRange1, UniqueSubRange2, typename TurnInfo::point_type, - UmbrellaStrategy, - RobustPolicy + UmbrellaStrategy > inters_info; - inters_info inters(range_p, range_q, umbrella_strategy, robust_policy); + inters_info inters(range_p, range_q, umbrella_strategy); char const method = inters.d_info().how; @@ -388,9 +385,6 @@ struct get_turn_info_linear_areal break; default : { -#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS) - std::cout << "TURN: Unknown method: " << method << std::endl; -#endif #if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW) BOOST_THROW_EXCEPTION(turn_info_exception(method)); #endif diff --git a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp index d0d1dfe5c..00349f29c 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2013, 2014, 2015, 2017, 2018. -// Modifications copyright (c) 2013-2018 Oracle and/or its affiliates. +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -39,7 +40,6 @@ struct get_turn_info_linear_linear typename UniqueSubRange2, typename TurnInfo, typename UmbrellaStrategy, - typename RobustPolicy, typename OutputIterator > static inline OutputIterator apply( @@ -47,18 +47,16 @@ struct get_turn_info_linear_linear UniqueSubRange2 const& range_q, TurnInfo const& tp_model, UmbrellaStrategy const& umbrella_strategy, - RobustPolicy const& robust_policy, OutputIterator out) { typedef intersection_info < UniqueSubRange1, UniqueSubRange2, typename TurnInfo::point_type, - UmbrellaStrategy, - RobustPolicy + UmbrellaStrategy > inters_info; - inters_info inters(range_p, range_q, umbrella_strategy, robust_policy); + inters_info inters(range_p, range_q, umbrella_strategy); char const method = inters.d_info().how; @@ -457,9 +455,6 @@ struct get_turn_info_linear_linear break; default : { -#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS) - std::cout << "TURN: Unknown method: " << method << std::endl; -#endif #if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW) BOOST_THROW_EXCEPTION(turn_info_exception(method)); #endif diff --git a/include/boost/geometry/algorithms/detail/overlay/get_turns.hpp b/include/boost/geometry/algorithms/detail/overlay/get_turns.hpp index b6f8983e3..1f7dfe2d6 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turns.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turns.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2014-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2014-2021. -// Modifications copyright (c) 2014-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -33,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -103,8 +103,7 @@ template typename Section, typename Point, typename CircularIterator, - typename Strategy, - typename RobustPolicy + typename Strategy > struct unique_sub_range_from_section { @@ -113,8 +112,7 @@ struct unique_sub_range_from_section unique_sub_range_from_section(Section const& section, signed_size_type index, CircularIterator circular_iterator, Point const& previous, Point const& current, - Strategy const& strategy, - RobustPolicy const& robust_policy) + Strategy const& strategy) : m_section(section) , m_index(index) , m_previous_point(previous) @@ -122,7 +120,6 @@ struct unique_sub_range_from_section , m_circular_iterator(circular_iterator) , m_next_point_retrieved(false) , m_strategy(strategy) - , m_robust_policy(robust_policy) {} inline bool is_first_segment() const @@ -165,13 +162,6 @@ private : inline void advance_to_non_duplicate_next(Point const& current, CircularIterator& circular_iterator) const { - using box_point_type = typename geometry::point_type::type; - using robust_point_type = typename robust_point_type::type; - robust_point_type current_robust_point; - robust_point_type next_robust_point; - geometry::recalculate(current_robust_point, current, m_robust_policy); - geometry::recalculate(next_robust_point, *circular_iterator, m_robust_policy); - // To see where the next segments bend to, in case of touch/intersections // on end points, we need (in case of degenerate/duplicate points) an extra // iterator which moves to the REAL next point, so non duplicate. @@ -182,12 +172,10 @@ private : // So advance to the "non duplicate next" // (the check is defensive, to avoid endless loops) std::size_t check = 0; - while (! detail::disjoint::disjoint_point_point( - current_robust_point, next_robust_point, m_strategy) + while (! detail::disjoint::disjoint_point_point(current, *circular_iterator, m_strategy) && check++ < m_section.range_count) { circular_iterator++; - geometry::recalculate(next_robust_point, *circular_iterator, m_robust_policy); } } @@ -198,7 +186,6 @@ private : mutable CircularIterator m_circular_iterator; mutable bool m_next_point_retrieved; Strategy m_strategy; - RobustPolicy m_robust_policy; }; template @@ -252,13 +239,12 @@ class get_turns_in_sections public : // Returns true if terminated, false if interrupted - template + template static inline bool apply( int source_id1, Geometry1 const& geometry1, Section1 const& sec1, int source_id2, Geometry2 const& geometry2, Section2 const& sec2, bool skip_larger, bool skip_adjacent, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy) { @@ -294,7 +280,7 @@ public : range1_iterator prev1, it1, end1; get_start_point_iterator(sec1, view1, prev1, it1, end1, - index1, ndi1, dir1, sec2.bounding_box, robust_policy); + index1, ndi1, dir1, sec2.bounding_box); // We need a circular iterator because it might run through the closing point. // One circle is actually enough but this one is just convenient. @@ -305,17 +291,17 @@ public : // section 2: [--------------] // section 1: |----|---|---|---|---| for (prev1 = it1++, next1++; - it1 != end1 && ! detail::section::exceeding<0>(dir1, *prev1, sec1.bounding_box, sec2.bounding_box, robust_policy); + it1 != end1 && ! detail::section::exceeding<0>(dir1, *prev1, sec1.bounding_box, sec2.bounding_box); ++prev1, ++it1, ++index1, ++next1, ++ndi1) { unique_sub_range_from_section < areal1, Section1, point1_type, circular1_iterator, - Strategy, RobustPolicy + Strategy > unique_sub_range1(sec1, index1, circular1_iterator(begin_range_1, end_range_1, next1, true), *prev1, *it1, - strategy, robust_policy); + strategy); signed_size_type index2 = sec2.begin_index; signed_size_type ndi2 = sec2.non_duplicate_index; @@ -323,12 +309,12 @@ public : range2_iterator prev2, it2, end2; get_start_point_iterator(sec2, view2, prev2, it2, end2, - index2, ndi2, dir2, sec1.bounding_box, robust_policy); + index2, ndi2, dir2, sec1.bounding_box); circular2_iterator next2(begin_range_2, end_range_2, it2, true); next2++; for (prev2 = it2++, next2++; - it2 != end2 && ! detail::section::exceeding<0>(dir2, *prev2, sec2.bounding_box, sec1.bounding_box, robust_policy); + it2 != end2 && ! detail::section::exceeding<0>(dir2, *prev2, sec2.bounding_box, sec1.bounding_box); ++prev2, ++it2, ++index2, ++next2, ++ndi2) { bool skip = false; @@ -364,11 +350,11 @@ public : unique_sub_range_from_section < areal2, Section2, point2_type, circular2_iterator, - Strategy, RobustPolicy + Strategy > unique_sub_range2(sec2, index2, circular2_iterator(begin_range_2, end_range_2, next2), *prev2, *it2, - strategy, robust_policy); + strategy); typedef typename boost::range_value::type turn_info; @@ -383,7 +369,7 @@ public : std::size_t const size_before = boost::size(turns); TurnPolicy::apply(unique_sub_range1, unique_sub_range2, - ti, strategy, robust_policy, + ti, strategy, std::back_inserter(turns)); if (InterruptPolicy::enabled) @@ -410,14 +396,14 @@ private : // because of the logistics of "index" (the section-iterator automatically // skips to the begin-point, we loose the index or have to recalculate it) // So we mimic it here - template + template static inline void get_start_point_iterator(Section const& section, Range const& range, typename boost::range_iterator::type& it, typename boost::range_iterator::type& prev, typename boost::range_iterator::type& end, signed_size_type& index, signed_size_type& ndi, - int dir, Box const& other_bounding_box, RobustPolicy const& robust_policy) + int dir, Box const& other_bounding_box) { it = boost::begin(range) + section.begin_index; end = boost::begin(range) + section.end_index + 1; @@ -425,7 +411,7 @@ private : // Mimic section-iterator: // Skip to point such that section interects other box prev = it++; - for(; it != end && detail::section::preceding<0>(dir, *it, section.bounding_box, other_bounding_box, robust_policy); + for(; it != end && detail::section::preceding<0>(dir, *it, section.bounding_box, other_bounding_box); prev = it++, index++, ndi++) {} // Go back one step because we want to start completely preceding @@ -439,7 +425,6 @@ template bool Reverse1, bool Reverse2, typename TurnPolicy, typename Strategy, - typename RobustPolicy, typename Turns, typename InterruptPolicy > @@ -450,20 +435,17 @@ struct section_visitor int m_source_id2; Geometry2 const& m_geometry2; Strategy const& m_strategy; - RobustPolicy const& m_rescale_policy; Turns& m_turns; InterruptPolicy& m_interrupt_policy; section_visitor(int id1, Geometry1 const& g1, int id2, Geometry2 const& g2, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& ip) : m_source_id1(id1), m_geometry1(g1) , m_source_id2(id2), m_geometry2(g2) , m_strategy(strategy) - , m_rescale_policy(robust_policy) , m_turns(turns) , m_interrupt_policy(ip) {} @@ -487,7 +469,6 @@ struct section_visitor m_source_id2, m_geometry2, sec2, false, false, m_strategy, - m_rescale_policy, m_turns, m_interrupt_policy); } return true; @@ -505,12 +486,11 @@ class get_turns_generic { public: - template + template static inline void apply( int source_id1, Geometry1 const& geometry1, int source_id2, Geometry2 const& geometry2, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy) { @@ -518,21 +498,15 @@ public: typedef typename boost::range_value::type ip_type; typedef typename ip_type::point_type point_type; - typedef model::box - < - typename geometry::robust_point_type - < - point_type, RobustPolicy - >::type - > box_type; + typedef model::box box_type; typedef geometry::sections sections_type; sections_type sec1, sec2; typedef std::integer_sequence dimensions; - geometry::sectionalize(geometry1, robust_policy, + geometry::sectionalize(geometry1, sec1, strategy, 0); - geometry::sectionalize(geometry2, robust_policy, + geometry::sectionalize(geometry2, sec2, strategy, 1); // ... and then partition them, intersecting overlapping sections in visitor method @@ -541,10 +515,10 @@ public: Geometry1, Geometry2, Reverse1, Reverse2, TurnPolicy, - Strategy, RobustPolicy, + Strategy, Turns, InterruptPolicy > visitor(source_id1, geometry1, source_id2, geometry2, - strategy, robust_policy, turns, interrupt_policy); + strategy, turns, interrupt_policy); geometry::partition < @@ -643,12 +617,11 @@ struct get_turns_cs ever_circling_iterator m_circular_iterator; }; - template + template static inline void apply( int source_id1, Range const& range, int source_id2, Box const& box, IntersectionStrategy const& intersection_strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy, signed_size_type multi_index = -1, @@ -683,7 +656,6 @@ struct get_turns_cs view_unique_sub_range, box_points, intersection_strategy, - robust_policy, turns, interrupt_policy); // Future performance enhancement: @@ -697,14 +669,12 @@ private: < typename IntersectionStrategy, typename Turns, - typename InterruptPolicy, - typename RobustPolicy + typename InterruptPolicy > static inline void get_turns_with_box(segment_identifier const& seg_id, int source_id2, unique_sub_range_from_view_policy const& range_unique_sub_range, box_array const& box, IntersectionStrategy const& intersection_strategy, - RobustPolicy const& robust_policy, // Output Turns& turns, InterruptPolicy& interrupt_policy) @@ -721,25 +691,25 @@ private: unique_sub_range_from_box_policy box_unique_sub_range(box); ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 0); TurnPolicy::apply(range_unique_sub_range, box_unique_sub_range, - ti, intersection_strategy, robust_policy, + ti, intersection_strategy, std::back_inserter(turns)); ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 1); box_unique_sub_range.next(); TurnPolicy::apply(range_unique_sub_range, box_unique_sub_range, - ti, intersection_strategy, robust_policy, + ti, intersection_strategy, std::back_inserter(turns)); ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 2); box_unique_sub_range.next(); TurnPolicy::apply(range_unique_sub_range, box_unique_sub_range, - ti, intersection_strategy, robust_policy, + ti, intersection_strategy, std::back_inserter(turns)); ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 3); box_unique_sub_range.next(); TurnPolicy::apply(range_unique_sub_range, box_unique_sub_range, - ti, intersection_strategy, robust_policy, + ti, intersection_strategy, std::back_inserter(turns)); if (InterruptPolicy::enabled) @@ -760,12 +730,11 @@ template > struct get_turns_polygon_cs { - template + template static inline void apply( int source_id1, Polygon const& polygon, int source_id2, Box const& box, IntersectionStrategy const& intersection_strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy, signed_size_type multi_index = -1) @@ -783,7 +752,6 @@ struct get_turns_polygon_cs source_id1, geometry::exterior_ring(polygon), source_id2, box, intersection_strategy, - robust_policy, turns, interrupt_policy, multi_index, -1); @@ -797,7 +765,6 @@ struct get_turns_polygon_cs source_id1, *it, source_id2, box, intersection_strategy, - robust_policy, turns, interrupt_policy, multi_index, i); } @@ -814,12 +781,11 @@ template > struct get_turns_multi_polygon_cs { - template + template static inline void apply( int source_id1, Multi const& multi, int source_id2, Box const& box, IntersectionStrategy const& intersection_strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy) { @@ -833,7 +799,7 @@ struct get_turns_multi_polygon_cs Reverse, ReverseBox, TurnPolicy >::apply(source_id1, *it, source_id2, box, - intersection_strategy, robust_policy, + intersection_strategy, turns, interrupt_policy, i); } } @@ -986,11 +952,10 @@ template > struct get_turns_reversed { - template + template static inline void apply(int source_id1, Geometry1 const& g1, int source_id2, Geometry2 const& g2, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy) { @@ -1001,7 +966,7 @@ struct get_turns_reversed Reverse2, Reverse1, TurnPolicy >::apply(source_id2, g2, source_id1, g1, - strategy, robust_policy, + strategy, turns, interrupt_policy); } }; @@ -1021,7 +986,6 @@ struct get_turns_reversed \param geometry1 \param_geometry \param geometry2 \param_geometry \param intersection_strategy segments intersection strategy -\param robust_policy policy to handle robustness issues \param turns container which will contain turn points \param interrupt_policy policy determining if process is stopped when intersection is found @@ -1033,14 +997,12 @@ template typename Geometry1, typename Geometry2, typename Strategy, - typename RobustPolicy, typename Turns, typename InterruptPolicy > inline void get_turns(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy) { @@ -1071,7 +1033,6 @@ inline void get_turns(Geometry1 const& geometry1, >::apply(0, geometry1, 1, geometry2, strategy, - robust_policy, turns, interrupt_policy); } diff --git a/include/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp b/include/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp index 5bb0d83e8..fa5f52c59 100644 --- a/include/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -315,16 +316,14 @@ template typename Geometry0, typename Geometry1, typename Turns, - typename Clusters, - typename RobustPolicy + typename Clusters > -inline bool handle_colocations(Turns& turns, Clusters& clusters, - RobustPolicy const& robust_policy) +inline bool handle_colocations(Turns& turns, Clusters& clusters) { static const detail::overlay::operation_type target_operation = detail::overlay::operation_from_overlay::value; - get_clusters(turns, clusters, robust_policy); + get_clusters(turns, clusters); if (clusters.empty()) { diff --git a/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp b/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp index 36afaedea..0fd333229 100644 --- a/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp @@ -2,8 +2,8 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2014-2021. -// Modifications copyright (c) 2014-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle @@ -45,10 +45,6 @@ #include -#include -#include -#include - #include #include #include @@ -75,22 +71,13 @@ struct intersection_segment_segment_point template < typename Segment1, typename Segment2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Segment1 const& segment1, Segment2 const& segment2, - RobustPolicy const& , OutputIterator out, Strategy const& strategy) { - // Make sure this is only called with no rescaling - BOOST_STATIC_ASSERT((std::is_same - < - no_rescale_policy_tag, - typename rescale_policy_type::type - >::value)); - typedef typename point_type::type point_type; // Get the intersection point (or two points) @@ -123,28 +110,19 @@ struct intersection_linestring_linestring_point template < typename Linestring1, typename Linestring2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Linestring1 const& linestring1, Linestring2 const& linestring2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { - // Make sure this is only called with no rescaling - BOOST_STATIC_ASSERT((std::is_same - < - no_rescale_policy_tag, - typename rescale_policy_type::type - >::value)); - typedef detail::overlay::turn_info turn_info; std::deque turns; geometry::get_intersection_points(linestring1, linestring2, - robust_policy, turns, strategy); + turns, strategy); for (auto const& turn : turns) { @@ -281,21 +259,12 @@ struct intersection_of_linestring_with_areal template < typename LineString, typename Areal, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(LineString const& linestring, Areal const& areal, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { - // Make sure this is only called with no rescaling - BOOST_STATIC_ASSERT((std::is_same - < - no_rescale_policy_tag, - typename rescale_policy_type::type - >::value)); - if (boost::size(linestring) == 0) { return out; @@ -356,7 +325,7 @@ struct intersection_of_linestring_with_areal (OverlayType == overlay_intersection ? ReverseAreal : !ReverseAreal), turn_policy >::apply(0, linestring, 1, areal, - strategy, robust_policy, + strategy, turns, policy); int inside_value = 0; @@ -390,7 +359,7 @@ struct intersection_of_linestring_with_areal ( linestring, areal, geometry::detail::overlay::operation_intersection, - turns, robust_policy, out, strategy + turns, out, strategy ); } }; @@ -414,20 +383,18 @@ struct intersection_areal_areal_point template < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { typedef detail::overlay::turn_info < PointOut, - typename segment_ratio_type::type + typename segment_ratio_type::type > turn_info; std::vector turns; @@ -436,7 +403,7 @@ struct intersection_areal_areal_point geometry::get_turns < false, false, detail::overlay::assign_null_policy - >(geometry1, geometry2, strategy, robust_policy, turns, policy); + >(geometry1, geometry2, strategy, turns, policy); return intersection_output_turn_points(turns, out); } @@ -448,23 +415,14 @@ struct intersection_linear_areal_point template < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { - // Make sure this is only called with no rescaling - BOOST_STATIC_ASSERT((std::is_same - < - no_rescale_policy_tag, - typename rescale_policy_type::type - >::value)); - typedef geometry::segment_ratio::type> ratio_type; typedef detail::overlay::turn_info @@ -497,7 +455,7 @@ struct intersection_linear_areal_point false, turn_policy >::apply(0, geometry1, 1, geometry2, - strategy, robust_policy, + strategy, turns, interrupt_policy); return intersection_output_turn_points(turns, out); @@ -510,20 +468,18 @@ struct intersection_areal_linear_point template < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { return intersection_linear_areal_point < PointOut - >::apply(geometry2, geometry1, robust_policy, out, strategy); + >::apply(geometry2, geometry1, out, strategy); } }; @@ -670,16 +626,15 @@ struct intersection_insert linear_tag, areal_tag, linear_tag > { - template + template static inline OutputIterator apply(Linestring const& linestring, Box const& box, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& ) { typedef typename point_type::type point_type; strategy::intersection::liang_barsky lb_strategy; return detail::intersection::clip_range_with_box - (box, linestring, robust_policy, out, lb_strategy); + (box, linestring, out, lb_strategy); } }; @@ -750,10 +705,9 @@ struct intersection_insert linear_tag, areal_tag, linear_tag > { - template + template static inline OutputIterator apply(Segment const& segment, Box const& box, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& ) { geometry::segment_view range(segment); @@ -761,7 +715,7 @@ struct intersection_insert typedef typename point_type::type point_type; strategy::intersection::liang_barsky lb_strategy; return detail::intersection::clip_range_with_box - (box, range, robust_policy, out, lb_strategy); + (box, range, out, lb_strategy); } }; @@ -842,10 +796,9 @@ template > struct intersection_insert_reversed { - template + template static inline OutputIterator apply(Geometry1 const& g1, Geometry2 const& g2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -854,7 +807,7 @@ struct intersection_insert_reversed Geometry2, Geometry1, GeometryOut, OverlayType, Reverse2, Reverse1 - >::apply(g2, g1, robust_policy, out, strategy); + >::apply(g2, g1, out, strategy); } }; @@ -879,11 +832,10 @@ struct intersection_insert { template < - typename RobustPolicy, typename OutputIterator, typename Strategy + typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { @@ -896,7 +848,7 @@ struct intersection_insert detail::boundary_view, LinestringOut, overlay_intersection - >::apply(view1, view2, robust_policy, oit, strategy); + >::apply(view1, view2, oit, strategy); } }; @@ -951,18 +903,17 @@ struct intersection_insert // iterators in OutputIterators tuple/pair. template < - typename RobustPolicy, typename OutputIterators, typename Strategy + typename OutputIterators, typename Strategy > static inline OutputIterators apply(Linear1 const& linear1, Linear2 const& linear2, - RobustPolicy const& robust_policy, OutputIterators oit, Strategy const& strategy) { return detail::overlay::linear_linear_linestring < Linear1, Linear2, TupledOut, OverlayType - >::apply(linear1, linear2, robust_policy, oit, strategy); + >::apply(linear1, linear2, oit, strategy); } }; @@ -1065,11 +1016,10 @@ struct intersection_insert // of iterators in OutputIterators tuple/pair. template < - typename RobustPolicy, typename OutputIterators, typename Strategy + typename OutputIterators, typename Strategy > static inline OutputIterators apply(PointLike1 const& pointlike1, PointLike2 const& pointlike2, - RobustPolicy const& robust_policy, OutputIterators oits, Strategy const& strategy) { @@ -1088,7 +1038,7 @@ struct intersection_insert out_point_index, TupledOut >::type, OverlayType - >::apply(pointlike1, pointlike2, robust_policy, + >::apply(pointlike1, pointlike2, bgt::get(oits), strategy); @@ -1156,10 +1106,9 @@ struct intersection_insert linear_tag, pointlike_tag, pointlike_tag > { - template + template static inline OutputIterator apply(Linestring const& linestring, MultiPoint const& multipoint, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -1167,7 +1116,7 @@ struct intersection_insert < MultiPoint, Linestring, PointOut, overlay_intersection, multi_point_tag, linear_tag - >::apply(multipoint, linestring, robust_policy, out, strategy); + >::apply(multipoint, linestring, out, strategy); } }; @@ -1212,17 +1161,16 @@ struct intersection_insert linear_tag, pointlike_tag, detail::tupled_output_tag > { - template + template static inline OutputIterators apply(Linestring const& linestring, MultiPoint const& multipoint, - RobustPolicy const& robust_policy, OutputIterators out, Strategy const& strategy) { return intersection_insert < MultiPoint, Linestring, TupledOut, overlay_intersection - >::apply(multipoint, linestring, robust_policy, out, strategy); + >::apply(multipoint, linestring, out, strategy); } }; @@ -1284,10 +1232,9 @@ struct intersection_insert areal_tag, pointlike_tag, pointlike_tag > { - template + template static inline OutputIterator apply(Areal const& areal, MultiPoint const& multipoint, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -1295,7 +1242,7 @@ struct intersection_insert < MultiPoint, Areal, PointOut, overlay_intersection, multi_point_tag, ArealTag - >::apply(multipoint, areal, robust_policy, out, strategy); + >::apply(multipoint, areal, out, strategy); } }; @@ -1341,17 +1288,16 @@ struct intersection_insert areal_tag, pointlike_tag, detail::tupled_output_tag > { - template + template static inline OutputIterators apply(Areal const& areal, MultiPoint const& multipoint, - RobustPolicy const& robust_policy, OutputIterators out, Strategy const& strategy) { return intersection_insert < MultiPoint, Areal, TupledOut, overlay_intersection - >::apply(multipoint, areal, robust_policy, out, strategy); + >::apply(multipoint, areal, out, strategy); } }; @@ -1420,13 +1366,11 @@ template bool ReverseSecond, overlay_type OverlayType, typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > inline OutputIterator insert(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy robust_policy, OutputIterator out, Strategy const& strategy) { @@ -1449,7 +1393,7 @@ inline OutputIterator insert(Geometry1 const& geometry1, geometry::detail::overlay::do_reverse::value>::value, geometry::detail::overlay::do_reverse::value, ReverseSecond>::value > - >::apply(geometry1, geometry2, robust_policy, out, strategy); + >::apply(geometry1, geometry2, out, strategy); } @@ -1488,21 +1432,10 @@ inline OutputIterator intersection_insert(Geometry1 const& geometry1, concepts::check(); concepts::check(); - typedef typename geometry::rescale_overlay_policy_type - < - Geometry1, - Geometry2, - typename Strategy::cs_tag - >::type rescale_policy_type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy( - geometry1, geometry2, strategy); - return detail::intersection::insert < GeometryOut, false, overlay_intersection - >(geometry1, geometry2, robust_policy, out, strategy); + >(geometry1, geometry2, out, strategy); } diff --git a/include/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp b/include/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp index 1ce97d261..140c6aaf0 100644 --- a/include/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp @@ -2,9 +2,9 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020 Oracle and/or its affiliates. - +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -65,7 +65,6 @@ template typename Turns, typename Indexed, typename Geometry1, typename Geometry2, - typename RobustPolicy, typename Strategy, bool Reverse1, bool Reverse2 > @@ -74,12 +73,10 @@ struct less_by_segment_ratio inline less_by_segment_ratio(Turns const& turns , Geometry1 const& geometry1 , Geometry2 const& geometry2 - , RobustPolicy const& robust_policy , Strategy const& strategy) : m_turns(turns) , m_geometry1(geometry1) , m_geometry2(geometry2) - , m_robust_policy(robust_policy) , m_strategy(strategy) { } @@ -89,7 +86,6 @@ private : Turns const& m_turns; Geometry1 const& m_geometry1; Geometry2 const& m_geometry2; - RobustPolicy const& m_robust_policy; Strategy const& m_strategy; typedef typename geometry::point_type::type point_type; diff --git a/include/boost/geometry/algorithms/detail/overlay/linear_linear.hpp b/include/boost/geometry/algorithms/detail/overlay/linear_linear.hpp index f67a06b0b..75ff47432 100644 --- a/include/boost/geometry/algorithms/detail/overlay/linear_linear.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/linear_linear.hpp @@ -1,6 +1,7 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2014-2022, Oracle and/or its affiliates. +// Copyright (c) 2014-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -145,14 +146,12 @@ protected: typename Turns, typename LinearGeometry1, typename LinearGeometry2, - typename Strategy, - typename RobustPolicy + typename Strategy > static inline void compute_turns(Turns& turns, LinearGeometry1 const& linear1, LinearGeometry2 const& linear2, - Strategy const& strategy, - RobustPolicy const& robust_policy) + Strategy const& strategy) { turns.clear(); @@ -168,7 +167,7 @@ protected: LinearGeometry2, assign_policy > - >::apply(turns, linear1, linear2, interrupt_policy, strategy, robust_policy); + >::apply(turns, linear1, linear2, interrupt_policy, strategy); } @@ -221,11 +220,10 @@ protected: public: template < - typename RobustPolicy, typename OutputIterator, typename Strategy + typename OutputIterator, typename Strategy > static inline OutputIterator apply(Linear1 const& linear1, Linear2 const& linear2, - RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { @@ -239,12 +237,12 @@ public: Linear2, assign_policy > - >::template turn_info_type::type turn_info; + >::template turn_info_type::type turn_info; typedef std::vector turns_container; turns_container turns; - compute_turns(turns, linear1, linear2, strategy, robust_policy); + compute_turns(turns, linear1, linear2, strategy); if ( turns.empty() ) { @@ -289,11 +287,10 @@ struct linear_linear_linestring { template < - typename RobustPolicy, typename OutputIterator, typename Strategy + typename OutputIterator, typename Strategy > static inline OutputIterator apply(Linear1 const& linear1, Linear2 const& linear2, - RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { @@ -310,7 +307,7 @@ struct linear_linear_linestring Linear2, Linear1, LinestringOut, overlay_difference, EnableFilterContinueTurns, EnableRemoveDuplicateTurns, EnableDegenerateTurns, EnableFollowIsolatedPoints - >::apply(linear2, linear1, robust_policy, oit, strategy); + >::apply(linear2, linear1, oit, strategy); } }; diff --git a/include/boost/geometry/algorithms/detail/overlay/overlay.hpp b/include/boost/geometry/algorithms/detail/overlay/overlay.hpp index e0451f9dd..e0557b7c0 100644 --- a/include/boost/geometry/algorithms/detail/overlay/overlay.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/overlay.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland -// This file was modified by Oracle on 2015-2020. -// Modifications copyright (c) 2015-2020, Oracle and/or its affiliates. +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -35,8 +36,6 @@ #include #include -#include - #include #include @@ -46,8 +45,6 @@ #include #include -#include - #include #ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE @@ -232,10 +229,9 @@ template > struct overlay { - template + template static inline OutputIterator apply( Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy, Visitor& visitor) @@ -260,7 +256,7 @@ struct overlay typedef detail::overlay::traversal_turn_info < point_type, - typename segment_ratio_type::type + typename segment_ratio_type::type > turn_info; typedef std::deque turn_container_type; @@ -284,7 +280,7 @@ std::cout << "get turns" << std::endl; < Reverse1, Reverse2, assign_policy_only_start_turns - >(geometry1, geometry2, strategy, robust_policy, turns, policy); + >(geometry1, geometry2, strategy, turns, policy); visitor.visit_turns(1, turns); @@ -296,12 +292,12 @@ std::cout << "get turns" << std::endl; if (needs_self_turns::apply(geometry1)) { self_get_turn_points::self_turns(geometry1, - strategy, robust_policy, turns, policy, 0); + strategy, turns, policy, 0); } if (needs_self_turns::apply(geometry2)) { self_get_turn_points::self_turns(geometry2, - strategy, robust_policy, turns, policy, 1); + strategy, turns, policy, 1); } } #endif @@ -315,7 +311,7 @@ std::cout << "enrich" << std::endl; std::map turn_info_per_ring; geometry::enrich_intersection_points( - turns, clusters, geometry1, geometry2, robust_policy, strategy); + turns, clusters, geometry1, geometry2, strategy); visitor.visit_turns(2, turns); @@ -332,7 +328,6 @@ std::cout << "traverse" << std::endl; ( geometry1, geometry2, strategy, - robust_policy, turns, rings, turn_info_per_ring, clusters, @@ -390,15 +385,14 @@ std::cout << "traverse" << std::endl; ); } - template + template static inline OutputIterator apply( Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { overlay_null_visitor visitor; - return apply(geometry1, geometry2, robust_policy, out, strategy, visitor); + return apply(geometry1, geometry2, out, strategy, visitor); } }; diff --git a/include/boost/geometry/algorithms/detail/overlay/pointlike_areal.hpp b/include/boost/geometry/algorithms/detail/overlay/pointlike_areal.hpp index 503d65647..5cfbae09b 100644 --- a/include/boost/geometry/algorithms/detail/overlay/pointlike_areal.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/pointlike_areal.hpp @@ -1,7 +1,7 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2020, Oracle and/or its affiliates. - +// Copyright (c) 2020-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Licensed under the Boost Software License version 1.0. @@ -211,10 +211,9 @@ private: } public: - template + template static inline OutputIterator apply(MultiPoint const& multipoint, MultiPolygon const& multipolygon, - RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { @@ -233,7 +232,7 @@ public: return multipoint_multipoint_point < MultiPoint, point_vector_type, PointOut, OverlayType - >::apply(multipoint, common_points, robust_policy, oit, strategy); + >::apply(multipoint, common_points, oit, strategy); } }; diff --git a/include/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp b/include/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp index 19045b250..bfb4880a1 100644 --- a/include/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp @@ -2,8 +2,8 @@ // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// Copyright (c) 2015-2020, Oracle and/or its affiliates. - +// Copyright (c) 2015-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -65,10 +65,9 @@ template > struct point_single_point { - template + template static inline OutputIterator apply(Point const& point, Geometry const& geometry, - RobustPolicy const&, OutputIterator oit, Strategy const& strategy) { @@ -91,10 +90,9 @@ template > struct multipoint_single_point { - template + template static inline OutputIterator apply(MultiPoint const& multipoint, Geometry const& geometry, - RobustPolicy const&, OutputIterator oit, Strategy const& strategy) { @@ -269,10 +267,9 @@ private: } public: - template + template static inline OutputIterator apply(MultiPoint const& multipoint, Linear const& linear, - RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { @@ -291,7 +288,7 @@ public: return multipoint_multipoint_point < MultiPoint, point_vector_type, PointOut, OverlayType - >::apply(multipoint, common_points, robust_policy, oit, strategy); + >::apply(multipoint, common_points, oit, strategy); } }; diff --git a/include/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp b/include/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp index 388c96544..1745bcf43 100644 --- a/include/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp @@ -2,7 +2,7 @@ // Copyright (c) 2023 Adam Wulkiewicz, Lodz, Poland. -// Copyright (c) 2014-2023, Oracle and/or its affiliates. +// Copyright (c) 2014-2024, Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle @@ -149,10 +149,9 @@ template > struct point_point_point { - template + template static inline OutputIterator apply(Point1 const& point1, Point2 const& point2, - RobustPolicy const& , OutputIterator oit, Strategy const& strategy) { @@ -183,10 +182,9 @@ template > struct multipoint_point_point { - template + template static inline OutputIterator apply(MultiPoint const& multipoint, Point const& point, - RobustPolicy const& , OutputIterator oit, Strategy const& strategy) { @@ -217,10 +215,9 @@ template > struct point_multipoint_point { - template + template static inline OutputIterator apply(Point const& point, MultiPoint const& multipoint, - RobustPolicy const& , OutputIterator oit, Strategy const& strategy) { @@ -252,10 +249,9 @@ template > struct multipoint_multipoint_point { - template + template static inline OutputIterator apply(MultiPoint1 const& multipoint1, MultiPoint2 const& multipoint2, - RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { @@ -268,7 +264,7 @@ struct multipoint_multipoint_point return multipoint_multipoint_point < MultiPoint2, MultiPoint1, PointOut, OverlayType - >::apply(multipoint2, multipoint1, robust_policy, oit, strategy); + >::apply(multipoint2, multipoint1, oit, strategy); } } @@ -414,10 +410,9 @@ template > struct union_pointlike_pointlike_point { - template + template static inline OutputIterator apply(PointLike1 const& pointlike1, PointLike2 const& pointlike2, - RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { @@ -428,7 +423,7 @@ struct union_pointlike_pointlike_point PointLike2, PointLike1, PointOut, overlay_difference, typename tag::type, typename tag::type - >::apply(pointlike2, pointlike1, robust_policy, oit, strategy); + >::apply(pointlike2, pointlike1, oit, strategy); } }; diff --git a/include/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp b/include/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp index 1883e1df2..49c4357c2 100644 --- a/include/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2021. -// Modifications copyright (c) 2017-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -36,7 +37,6 @@ #include - namespace boost { namespace geometry { @@ -65,14 +65,12 @@ template typename Turns, typename TurnPolicy, typename Strategy, - typename RobustPolicy, typename InterruptPolicy > struct self_section_visitor { Geometry const& m_geometry; Strategy const& m_strategy; - RobustPolicy const& m_rescale_policy; Turns& m_turns; InterruptPolicy& m_interrupt_policy; int m_source_index; @@ -80,14 +78,12 @@ struct self_section_visitor inline self_section_visitor(Geometry const& g, Strategy const& s, - RobustPolicy const& rp, Turns& turns, InterruptPolicy& ip, int source_index, bool skip_adjacent) : m_geometry(g) , m_strategy(s) - , m_rescale_policy(rp) , m_turns(turns) , m_interrupt_policy(ip) , m_source_index(source_index) @@ -114,7 +110,6 @@ struct self_section_visitor m_source_index, m_geometry, sec2, false, m_skip_adjacent, m_strategy, - m_rescale_policy, m_turns, m_interrupt_policy); } @@ -128,23 +123,15 @@ struct self_section_visitor template struct get_turns { - template + template static inline bool apply( Geometry const& geometry, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy, int source_index, bool skip_adjacent) { - typedef model::box - < - typename geometry::robust_point_type - < - typename geometry::point_type::type, - RobustPolicy - >::type - > box_type; + typedef model::box::type> box_type; // sectionalize in two dimensions to detect // all potential spikes correctly @@ -153,14 +140,14 @@ struct get_turns typedef std::integer_sequence dimensions; sections_type sec; - geometry::sectionalize(geometry, robust_policy, + geometry::sectionalize(geometry, sec, strategy); self_section_visitor < Reverse, Geometry, - Turns, TurnPolicy, Strategy, RobustPolicy, InterruptPolicy - > visitor(geometry, strategy, robust_policy, turns, interrupt_policy, + Turns, TurnPolicy, Strategy, InterruptPolicy + > visitor(geometry, strategy, turns, interrupt_policy, source_index, skip_adjacent); // false if interrupted @@ -223,11 +210,10 @@ struct self_get_turn_points TurnPolicy > { - template + template static inline bool apply( Box const& , Strategy const& , - RobustPolicy const& , Turns& , InterruptPolicy& , int /*source_index*/, @@ -287,13 +273,11 @@ struct self_get_turn_points template < typename Geometry, - typename RobustPolicy, typename Turns, typename InterruptPolicy > static inline void apply(Geometry const& geometry, Strategies const& strategies, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy, int source_index, @@ -307,7 +291,7 @@ struct self_get_turn_points typename tag::type, Geometry, turn_policy - >::apply(geometry, strategies, robust_policy, turns, interrupt_policy, + >::apply(geometry, strategies, turns, interrupt_policy, source_index, skip_adjacent); } }; @@ -318,13 +302,11 @@ struct self_get_turn_points template < typename Geometry, - typename RobustPolicy, typename Turns, typename InterruptPolicy > static inline void apply(Geometry const& geometry, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy, int source_index, @@ -339,7 +321,6 @@ struct self_get_turn_points decltype(strategy_converter::get(strategy)) >::apply(geometry, strategy_converter::get(strategy), - robust_policy, turns, interrupt_policy, source_index, @@ -363,13 +344,11 @@ template typename AssignPolicy, typename Geometry, typename Strategy, - typename RobustPolicy, typename Turns, typename InterruptPolicy > inline void self_turns(Geometry const& geometry, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy, int source_index = 0, @@ -380,7 +359,7 @@ inline void self_turns(Geometry const& geometry, resolve_strategy::self_get_turn_points < Reverse, AssignPolicy, Strategy - >::apply(geometry, strategy, robust_policy, turns, interrupt_policy, + >::apply(geometry, strategy, turns, interrupt_policy, source_index, skip_adjacent); } @@ -395,7 +374,6 @@ inline void self_turns(Geometry const& geometry, (e.g. vector of "intersection/turn point"'s) \param geometry geometry \param strategy strategy to be used - \param robust_policy policy to handle robustness issues \param turns container which will contain intersection points \param interrupt_policy policy determining if process is stopped when intersection is found @@ -407,13 +385,11 @@ template typename AssignPolicy, typename Geometry, typename Strategy, - typename RobustPolicy, typename Turns, typename InterruptPolicy > inline void self_turns(Geometry const& geometry, Strategy const& strategy, - RobustPolicy const& robust_policy, Turns& turns, InterruptPolicy& interrupt_policy, int source_index = 0, @@ -429,7 +405,7 @@ inline void self_turns(Geometry const& geometry, resolve_strategy::self_get_turn_points < reverse, AssignPolicy, Strategy - >::apply(geometry, strategy, robust_policy, turns, interrupt_policy, + >::apply(geometry, strategy, turns, interrupt_policy, source_index, skip_adjacent); } diff --git a/include/boost/geometry/algorithms/detail/overlay/traversal.hpp b/include/boost/geometry/algorithms/detail/overlay/traversal.hpp index f79e97365..50af9aff7 100644 --- a/include/boost/geometry/algorithms/detail/overlay/traversal.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/traversal.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2023-2024 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -83,7 +84,6 @@ template typename Geometry2, typename Turns, typename Clusters, - typename RobustPolicy, typename Strategy, typename Visitor > @@ -107,13 +107,12 @@ private : public : inline traversal(Geometry1 const& geometry1, Geometry2 const& geometry2, Turns& turns, Clusters const& clusters, - RobustPolicy const& robust_policy, Strategy const& strategy, + Strategy const& strategy, Visitor& visitor) : m_geometry1(geometry1) , m_geometry2(geometry2) , m_turns(turns) , m_clusters(clusters) - , m_robust_policy(robust_policy) , m_strategy(strategy) , m_visitor(visitor) { @@ -1071,7 +1070,6 @@ private : Geometry2 const& m_geometry2; Turns& m_turns; Clusters const& m_clusters; - RobustPolicy const& m_robust_policy; Strategy m_strategy; Visitor& m_visitor; }; diff --git a/include/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp b/include/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp index e3ee6bb23..71c44d14a 100644 --- a/include/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp @@ -2,8 +2,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2017-2020. -// Modifications copyright (c) 2017-2020, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -45,7 +46,6 @@ template typename TurnInfoMap, typename Clusters, typename Strategy, - typename RobustPolicy, typename Visitor, typename Backtrack > @@ -55,7 +55,6 @@ struct traversal_ring_creator < Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, - RobustPolicy, Strategy, Visitor > traversal_type; @@ -70,16 +69,15 @@ struct traversal_ring_creator Turns& turns, TurnInfoMap& turn_info_map, Clusters const& clusters, Strategy const& strategy, - RobustPolicy const& robust_policy, Visitor& visitor) + Visitor& visitor) : m_trav(geometry1, geometry2, turns, clusters, - robust_policy, strategy, visitor) + strategy, visitor) , m_geometry1(geometry1) , m_geometry2(geometry2) , m_turns(turns) , m_turn_info_map(turn_info_map) , m_clusters(clusters) , m_strategy(strategy) - , m_robust_policy(robust_policy) , m_visitor(visitor) { } @@ -113,13 +111,13 @@ struct traversal_ring_creator { geometry::copy_segments(m_geometry1, previous_op.seg_id, to_vertex_index, - m_strategy, m_robust_policy, current_ring); + m_strategy, current_ring); } else { geometry::copy_segments(m_geometry2, previous_op.seg_id, to_vertex_index, - m_strategy, m_robust_policy, current_ring); + m_strategy, current_ring); } } @@ -162,7 +160,7 @@ struct traversal_ring_creator turn_type& current_turn = m_turns[turn_index]; turn_operation_type& op = current_turn.operations[op_index]; detail::overlay::append_no_collinear(current_ring, current_turn.point, - m_strategy, m_robust_policy); + m_strategy); // Register the visit m_trav.set_visited(current_turn, op); @@ -179,7 +177,7 @@ struct traversal_ring_creator turn_operation_type& start_op = m_turns[start_turn_index].operations[start_op_index]; detail::overlay::append_no_collinear(ring, start_turn.point, - m_strategy, m_robust_policy); + m_strategy); signed_size_type current_turn_index = start_turn_index; int current_op_index = start_op_index; @@ -274,7 +272,7 @@ struct traversal_ring_creator if (traverse_error == traverse_error_none) { - remove_spikes_at_closure(ring, m_strategy, m_robust_policy); + remove_spikes_at_closure(ring, m_strategy); fix_closure(ring, m_strategy); std::size_t const min_num_points @@ -298,7 +296,7 @@ struct traversal_ring_creator m_turns[turn_index].operations[op_index], traverse_error, m_geometry1, m_geometry2, - m_strategy, m_robust_policy, + m_strategy, state, m_visitor); } } @@ -409,7 +407,6 @@ private: TurnInfoMap& m_turn_info_map; // contains turn-info information per ring Clusters const& m_clusters; Strategy const& m_strategy; - RobustPolicy const& m_robust_policy; Visitor& m_visitor; }; diff --git a/include/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp b/include/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp index 82e32acdd..0756034af 100644 --- a/include/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2015-2016 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2018-2020. -// Modifications copyright (c) 2018-2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2018-2024. +// Modifications copyright (c) 2018-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -83,7 +84,6 @@ template typename Geometry2, typename Turns, typename Clusters, - typename RobustPolicy, typename Visitor > struct traversal_switch_detector @@ -138,12 +138,11 @@ struct traversal_switch_detector inline traversal_switch_detector(Geometry1 const& geometry1, Geometry2 const& geometry2, Turns& turns, Clusters const& clusters, - RobustPolicy const& robust_policy, Visitor& visitor) + Visitor& visitor) : m_geometry1(geometry1) , m_geometry2(geometry2) , m_turns(turns) , m_clusters(clusters) - , m_robust_policy(robust_policy) , m_visitor(visitor) { } @@ -736,7 +735,6 @@ private: Clusters const& m_clusters; merge_map m_turns_per_ring; region_connection_map m_connected_regions; - RobustPolicy const& m_robust_policy; Visitor& m_visitor; }; diff --git a/include/boost/geometry/algorithms/detail/overlay/traverse.hpp b/include/boost/geometry/algorithms/detail/overlay/traverse.hpp index d56b6b1b2..6c0b4488e 100644 --- a/include/boost/geometry/algorithms/detail/overlay/traverse.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/traverse.hpp @@ -2,6 +2,10 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// This file was modified by Oracle on 2024. +// Modifications copyright (c) 2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, 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) @@ -58,7 +62,6 @@ public : template < typename IntersectionStrategy, - typename RobustPolicy, typename Turns, typename Rings, typename TurnInfoMap, @@ -68,7 +71,6 @@ public : static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2, IntersectionStrategy const& intersection_strategy, - RobustPolicy const& robust_policy, Turns& turns, Rings& rings, TurnInfoMap& turn_info_map, Clusters& clusters, @@ -79,9 +81,9 @@ public : Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, - RobustPolicy, Visitor + Visitor > switch_detector(geometry1, geometry2, turns, clusters, - robust_policy, visitor); + visitor); switch_detector.iterate(); reset_visits(turns); @@ -92,10 +94,10 @@ public : Geometry1, Geometry2, Turns, TurnInfoMap, Clusters, IntersectionStrategy, - RobustPolicy, Visitor, + Visitor, Backtrack > trav(geometry1, geometry2, turns, turn_info_map, clusters, - intersection_strategy, robust_policy, visitor); + intersection_strategy, visitor); std::size_t finalized_ring_size = boost::size(rings); diff --git a/include/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp b/include/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp index 9d2a6b7f5..2b86d3c6b 100644 --- a/include/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp +++ b/include/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp @@ -5,8 +5,9 @@ // Copyright (c) 2009-2015 Mateusz Loskot, London, UK. // Copyright (c) 2013-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2015, 2017, 2019. -// Modifications copyright (c) 2015-2019 Oracle and/or its affiliates. +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -18,9 +19,7 @@ #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_IS_EQUAL_OR_SPIKE_HPP #include -#include #include -#include #include #include #include @@ -70,86 +69,19 @@ template typename Point1, typename Point2, typename Point3, - typename SideStrategy, - typename RobustPolicy -> -inline bool point_is_spike_or_equal(Point1 const& last_point, - Point2 const& segment_a, - Point3 const& segment_b, - SideStrategy const& strategy, - RobustPolicy const& robust_policy) -{ - if (point_is_spike_or_equal(last_point, segment_a, segment_b, strategy)) - { - return true; - } - - if BOOST_GEOMETRY_CONSTEXPR (! RobustPolicy::enabled) - { - return false; - } - else // else prevents unreachable code warning - { - // Try using specified robust policy - using robust_point_type = typename geometry::robust_point_type - < - Point1, - RobustPolicy - >::type; - - robust_point_type last_point_rob, segment_a_rob, segment_b_rob; - geometry::recalculate(last_point_rob, last_point, robust_policy); - geometry::recalculate(segment_a_rob, segment_a, robust_policy); - geometry::recalculate(segment_b_rob, segment_b, robust_policy); - - return point_is_spike_or_equal(last_point_rob, segment_a_rob, segment_b_rob, - strategy); - } -} - -template -< - typename Point1, - typename Point2, - typename Point3, - typename SideStrategy, - typename RobustPolicy + typename SideStrategy > inline bool point_is_collinear(Point1 const& last_point, Point2 const& segment_a, Point3 const& segment_b, - SideStrategy const& strategy, - RobustPolicy const& robust_policy) + SideStrategy const& strategy) { int const side = strategy.apply(segment_a, segment_b, last_point); if (side == 0) { return true; } - - // This part (or whole method, because it is then trivial) - // will be removed after rescaling - if BOOST_GEOMETRY_CONSTEXPR (! RobustPolicy::enabled) - { - return false; - } - else // else prevents unreachable code warning - { - // Redo, using specified robust policy - using robust_point_type = typename geometry::robust_point_type - < - Point1, - RobustPolicy - >::type; - - robust_point_type last_point_rob, segment_a_rob, segment_b_rob; - geometry::recalculate(last_point_rob, last_point, robust_policy); - geometry::recalculate(segment_a_rob, segment_a, robust_policy); - geometry::recalculate(segment_b_rob, segment_b, robust_policy); - - int const side_rob = strategy.apply(segment_a_rob, segment_b_rob, last_point_rob); - return side_rob == 0; - } + return false; } diff --git a/include/boost/geometry/algorithms/detail/recalculate.hpp b/include/boost/geometry/algorithms/detail/recalculate.hpp deleted file mode 100644 index 79f6a4eb1..000000000 --- a/include/boost/geometry/algorithms/detail/recalculate.hpp +++ /dev/null @@ -1,230 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2013 Bruno Lalande, Paris, France. -// Copyright (c) 2013 Mateusz Loskot, London, UK. -// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland. - -// This file was modified by Oracle on 2020. -// Modifications copyright (c) 2020 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) - -#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP -#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP - - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - - -namespace boost { namespace geometry -{ - -#ifndef DOXYGEN_NO_DETAIL -namespace detail { namespace recalculate -{ - -template -struct recalculate_point -{ - template - static inline void apply(Point1& point1, Point2 const& point2, Strategy const& strategy) - { - std::size_t const dim = Dimension - 1; - geometry::set(point1, strategy.template apply(geometry::get(point2))); - recalculate_point::apply(point1, point2, strategy); - } -}; - -template <> -struct recalculate_point<0> -{ - template - static inline void apply(Point1&, Point2 const&, Strategy const&) - { - } -}; - - -template -struct recalculate_indexed -{ - template - static inline void apply(Geometry1& geometry1, Geometry2 const& geometry2, Strategy const& strategy) - { - // Do it for both indices in one dimension - static std::size_t const dim = Dimension - 1; - geometry::set<0, dim>(geometry1, strategy.template apply(geometry::get<0, dim>(geometry2))); - geometry::set<1, dim>(geometry1, strategy.template apply(geometry::get<1, dim>(geometry2))); - recalculate_indexed::apply(geometry1, geometry2, strategy); - } -}; - -template <> -struct recalculate_indexed<0> -{ - - template - static inline void apply(Geometry1& , Geometry2 const& , Strategy const& ) - { - } -}; - -struct range_to_range -{ - template - < - typename Range1, - typename Range2, - typename Strategy - > - static inline void apply(Range1& destination, Range2 const& source, - Strategy const& strategy) - { - typedef typename geometry::point_type::type point_type; - typedef recalculate_point::value> per_point; - geometry::clear(destination); - - for (auto const& source_point : source) - { - point_type p; - per_point::apply(p, source_point, strategy); - geometry::append(destination, p); - } - } -}; - -struct polygon_to_polygon -{ -private: - template - < - typename IteratorIn, - typename IteratorOut, - typename Strategy - > - static inline void iterate(IteratorIn begin, IteratorIn end, - IteratorOut it_out, - Strategy const& strategy) - { - for (IteratorIn it_in = begin; it_in != end; ++it_in, ++it_out) - { - range_to_range::apply(*it_out, *it_in, strategy); - } - } - - template - < - typename InteriorRingsOut, - typename InteriorRingsIn, - typename Strategy - > - static inline void apply_interior_rings( - InteriorRingsOut& interior_rings_out, - InteriorRingsIn const& interior_rings_in, - Strategy const& strategy) - { - traits::resize::apply(interior_rings_out, - boost::size(interior_rings_in)); - - iterate( - boost::begin(interior_rings_in), boost::end(interior_rings_in), - boost::begin(interior_rings_out), - strategy); - } - -public: - template - < - typename Polygon1, - typename Polygon2, - typename Strategy - > - static inline void apply(Polygon1& destination, Polygon2 const& source, - Strategy const& strategy) - { - range_to_range::apply(geometry::exterior_ring(destination), - geometry::exterior_ring(source), strategy); - - apply_interior_rings(geometry::interior_rings(destination), - geometry::interior_rings(source), strategy); - } -}; - -}} // namespace detail::recalculate -#endif // DOXYGEN_NO_DETAIL - -#ifndef DOXYGEN_NO_DISPATCH -namespace dispatch -{ - -template -< - typename Geometry1, - typename Geometry2, - typename Tag1 = typename geometry::tag::type, - typename Tag2 = typename geometry::tag::type -> -struct recalculate : not_implemented -{}; - -template -struct recalculate - : detail::recalculate::recalculate_point::value> -{}; - -template -struct recalculate - : detail::recalculate::recalculate_indexed::value> -{}; - -template -struct recalculate - : detail::recalculate::recalculate_indexed::value> -{}; - -template -struct recalculate - : detail::recalculate::polygon_to_polygon -{}; - -} // namespace dispatch -#endif // DOXYGEN_NO_DISPATCH - - - -template -inline void recalculate(Geometry1& geometry1, Geometry2 const& geometry2, Strategy const& strategy) -{ - concepts::check(); - concepts::check(); - - // static assert dimensions (/types) are the same - - dispatch::recalculate::apply(geometry1, geometry2, strategy); -} - - -}} // namespace boost::geometry - - -#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP diff --git a/include/boost/geometry/algorithms/detail/relate/turns.hpp b/include/boost/geometry/algorithms/detail/relate/turns.hpp index d98794e78..48661261a 100644 --- a/include/boost/geometry/algorithms/detail/relate/turns.hpp +++ b/include/boost/geometry/algorithms/detail/relate/turns.hpp @@ -2,11 +2,11 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2013-2022. -// Modifications copyright (c) 2013-2022 Oracle and/or its affiliates. - -// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle +// 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 @@ -22,9 +22,6 @@ #include -#include -#include - #include #include #include @@ -60,24 +57,13 @@ struct get_turns typename geometry::point_type::type >::type; - template - struct robust_policy_type - : geometry::rescale_overlay_policy_type - < - Geometry1, - Geometry2, - typename Strategy::cs_tag - > - {}; - template < - typename Strategy, - typename RobustPolicy = typename robust_policy_type::type + typename Strategy > struct turn_info_type { - using ratio_type = typename segment_ratio_type::type; + using ratio_type = typename segment_ratio_type::type; using type = overlay::turn_info < turn_point_type, @@ -95,23 +81,6 @@ struct get_turns Geometry2 const& geometry2, InterruptPolicy & interrupt_policy, Strategy const& strategy) - { - typedef typename robust_policy_type::type robust_policy_t; - - robust_policy_t robust_policy - = geometry::get_rescale_policy( - geometry1, geometry2, strategy); - - apply(turns, geometry1, geometry2, interrupt_policy, strategy, robust_policy); - } - - template - static inline void apply(Turns & turns, - Geometry1 const& geometry1, - Geometry2 const& geometry2, - InterruptPolicy & interrupt_policy, - Strategy const& strategy, - RobustPolicy const& robust_policy) { static const bool reverse1 = detail::overlay::do_reverse < @@ -133,7 +102,7 @@ struct get_turns reverse2, GetTurnPolicy >::apply(0, geometry1, 1, geometry2, - strategy, robust_policy, + strategy, turns, interrupt_policy); } }; diff --git a/include/boost/geometry/algorithms/detail/sections/section_functions.hpp b/include/boost/geometry/algorithms/detail/sections/section_functions.hpp index df4f31025..ab799d5a4 100644 --- a/include/boost/geometry/algorithms/detail/sections/section_functions.hpp +++ b/include/boost/geometry/algorithms/detail/sections/section_functions.hpp @@ -2,8 +2,9 @@ // Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2015-2021. -// Modifications copyright (c) 2015-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -15,8 +16,6 @@ #include #include -#include -#include // For spherical/geographic longitudes covered_by point/box #include @@ -121,41 +120,28 @@ template < std::size_t Dimension, typename Point, - typename Box, - typename RobustPolicy + typename Box > inline bool preceding(int dir, Point const& point, Box const& point_box, - Box const& other_box, - RobustPolicy const& robust_policy) + Box const& other_box) { - using box_point_type = typename geometry::point_type::type; - typename geometry::robust_point_type::type robust_point; - geometry::recalculate(robust_point, point, robust_policy); - - // After recalculate() to prevent warning: 'robust_point' may be used uninitialized - assert_coordinate_type_equal(robust_point, point_box); - - return preceding_check::apply(dir, robust_point, - point_box, - other_box); + return preceding_check::apply(dir, point, point_box, other_box); } template < std::size_t Dimension, typename Point, - typename Box, - typename RobustPolicy + typename Box > inline bool exceeding(int dir, Point const& point, Box const& point_box, - Box const& other_box, - RobustPolicy const& robust_policy) + Box const& other_box) { - return preceding(-dir, point, point_box, other_box, robust_policy); + return preceding(-dir, point, point_box, other_box); } diff --git a/include/boost/geometry/algorithms/detail/sections/sectionalize.hpp b/include/boost/geometry/algorithms/detail/sections/sectionalize.hpp index d9cd95885..2fdbb20de 100644 --- a/include/boost/geometry/algorithms/detail/sections/sectionalize.hpp +++ b/include/boost/geometry/algorithms/detail/sections/sectionalize.hpp @@ -5,11 +5,11 @@ // Copyright (c) 2009-2015 Mateusz Loskot, London, UK. // Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2013-2021. -// Modifications copyright (c) 2013-2021 Oracle and/or its affiliates. - -// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -38,7 +38,6 @@ #include #include #include -#include #include #include @@ -52,8 +51,6 @@ #include #include #include -#include -#include #include #include #include @@ -386,19 +383,15 @@ struct sectionalize_part template < typename Iterator, - typename RobustPolicy, typename Sections, typename Strategy > static inline void apply(Sections& sections, Iterator begin, Iterator end, - RobustPolicy const& robust_policy, Strategy const& strategy, ring_identifier ring_id, std::size_t max_count) { - boost::ignore_unused(robust_policy); - using section_type = typename boost::range_value::type; using box_type = typename section_type::box_type; using point_type = typename geometry::point_type::type; @@ -409,12 +402,6 @@ struct sectionalize_part == util::sequence_size::value ); - using robust_point_type = typename geometry::robust_point_type - < - point_type, - RobustPolicy - >::type; - std::size_t const count = std::distance(begin, end); if (count == 0) { @@ -429,23 +416,20 @@ struct sectionalize_part std::size_t last_non_duplicate_index = sections.size(); Iterator it = begin; - robust_point_type previous_robust_point; - geometry::recalculate(previous_robust_point, *it, robust_policy); + point_type previous_point; + geometry::detail::conversion::convert_point_to_point(*it, previous_point); - for(Iterator previous = it++; - it != end; - ++previous, ++it, index++) + for (Iterator previous = it++; it != end; ++previous, ++it, index++) { - robust_point_type current_robust_point; - geometry::recalculate(current_robust_point, *it, robust_policy); - model::referring_segment robust_segment( - previous_robust_point, current_robust_point); + point_type current_point; + geometry::detail::conversion::convert_point_to_point(*it, current_point); + model::referring_segment segment(previous_point, current_point); int direction_classes[dimension_count] = {0}; get_direction_loop < point_type, DimensionVector, 0, dimension_count - >::apply(robust_segment, direction_classes); + >::apply(segment, direction_classes); // if "dir" == 0 for all point-dimensions, it is duplicate. // Those sections might be omitted, if wished, lateron @@ -459,7 +443,7 @@ struct sectionalize_part if (check_duplicate_loop < 0, geometry::dimension::type::value - >::apply(robust_segment) + >::apply(segment) ) { duplicate = true; @@ -513,15 +497,15 @@ struct sectionalize_part // In cartesian this is envelope of previous point expanded with current point // in non-cartesian this is envelope of a segment - box_first_in_section::type> - ::apply(section.bounding_box, previous_robust_point, current_robust_point, strategy); + box_first_in_section::type> + ::apply(section.bounding_box, previous_point, current_point, strategy); } else { // In cartesian this is expand with current point // in non-cartesian this is expand with a segment - box_next_in_section::type> - ::apply(section.bounding_box, previous_robust_point, current_robust_point, strategy); + box_next_in_section::type> + ::apply(section.bounding_box, previous_point, current_point, strategy); } section.end_index = index + 1; @@ -530,7 +514,7 @@ struct sectionalize_part { ndi++; } - previous_robust_point = current_robust_point; + previous_point = current_point; } // Add last section if applicable @@ -564,12 +548,10 @@ struct sectionalize_range template < typename Range, - typename RobustPolicy, typename Sections, typename Strategy > static inline void apply(Range const& range, - RobustPolicy const& robust_policy, Sections& sections, Strategy const& strategy, ring_identifier ring_id, @@ -597,7 +579,7 @@ struct sectionalize_range sectionalize_part::apply(sections, boost::begin(view), boost::end(view), - robust_policy, strategy, + strategy, ring_id, max_count); } }; @@ -612,12 +594,10 @@ struct sectionalize_polygon template < typename Polygon, - typename RobustPolicy, typename Sections, typename Strategy > static inline void apply(Polygon const& poly, - RobustPolicy const& robust_policy, Sections& sections, Strategy const& strategy, ring_identifier ring_id, @@ -629,7 +609,7 @@ struct sectionalize_polygon >; ring_id.ring_index = -1; - sectionalizer::apply(exterior_ring(poly), robust_policy, sections, + sectionalizer::apply(exterior_ring(poly), sections, strategy, ring_id, max_count); ring_id.ring_index++; @@ -637,7 +617,7 @@ struct sectionalize_polygon for (auto it = boost::begin(rings); it != boost::end(rings); ++it, ++ring_id.ring_index) { - sectionalizer::apply(*it, robust_policy, sections, + sectionalizer::apply(*it, sections, strategy, ring_id, max_count); } } @@ -649,12 +629,10 @@ struct sectionalize_box template < typename Box, - typename RobustPolicy, typename Sections, typename Strategy > static inline void apply(Box const& box, - RobustPolicy const& robust_policy, Sections& sections, Strategy const& strategy, ring_identifier const& ring_id, std::size_t max_count) @@ -686,7 +664,7 @@ struct sectionalize_box sectionalize_range < closed, false, DimensionVector - >::apply(points, robust_policy, sections, + >::apply(points, sections, strategy, ring_id, max_count); } }; @@ -697,12 +675,10 @@ struct sectionalize_multi template < typename MultiGeometry, - typename RobustPolicy, typename Sections, typename Strategy > static inline void apply(MultiGeometry const& multi, - RobustPolicy const& robust_policy, Sections& sections, Strategy const& strategy, ring_identifier ring_id, @@ -711,7 +687,7 @@ struct sectionalize_multi ring_id.multi_index = 0; for (auto it = boost::begin(multi); it != boost::end(multi); ++it, ++ring_id.multi_index) { - Policy::apply(*it, robust_policy, sections, + Policy::apply(*it, sections, strategy, ring_id, max_count); } @@ -869,7 +845,6 @@ struct sectionalize inline void sectionalize(Geometry const& geometry, - RobustPolicy const& robust_policy, Sections& sections, Strategy const& strategy, int source_index = 0, @@ -907,7 +880,7 @@ inline void sectionalize(Geometry const& geometry, Geometry, Reverse, DimensionVector - >::apply(geometry, robust_policy, sections, + >::apply(geometry, sections, strategy, ring_id, max_count); @@ -920,11 +893,9 @@ template bool Reverse, typename DimensionVector, typename Geometry, - typename Sections, - typename RobustPolicy + typename Sections > inline void sectionalize(Geometry const& geometry, - RobustPolicy const& robust_policy, Sections& sections, int source_index = 0, std::size_t max_count = 10) @@ -939,7 +910,7 @@ inline void sectionalize(Geometry const& geometry, boost::geometry::sectionalize < Reverse, DimensionVector - >(geometry, robust_policy, sections, + >(geometry, sections, strategy_type(), source_index, max_count); } diff --git a/include/boost/geometry/algorithms/detail/touches/implementation.hpp b/include/boost/geometry/algorithms/detail/touches/implementation.hpp index 15a899e70..515f827dd 100644 --- a/include/boost/geometry/algorithms/detail/touches/implementation.hpp +++ b/include/boost/geometry/algorithms/detail/touches/implementation.hpp @@ -5,9 +5,9 @@ // Copyright (c) 2009-2015 Mateusz Loskot, London, UK. // Copyright (c) 2013-2022 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2013-2022. -// Modifications copyright (c) 2013-2022, Oracle and/or its affiliates. - +// This file was modified by Oracle on 2013-2024. +// Modifications copyright (c) 2013-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -39,8 +39,6 @@ #include -#include - #include #include #include @@ -255,7 +253,7 @@ struct areal_areal detail::overlay::do_reverse::value>::value, detail::overlay::do_reverse::value>::value, detail::overlay::assign_null_policy - >(geometry1, geometry2, strategy, detail::no_rescale_policy(), turns, policy); + >(geometry1, geometry2, strategy, turns, policy); return policy.result() && ! geometry::detail::touches::rings_containing(geometry1, geometry2, strategy) @@ -526,7 +524,7 @@ struct self_touches detail::self_get_turn_points::get_turns < false, policy_type - >::apply(geometry, strategy, detail::no_rescale_policy(), + >::apply(geometry, strategy, turns, policy, 0, true); return policy.result(); diff --git a/include/boost/geometry/algorithms/difference.hpp b/include/boost/geometry/algorithms/difference.hpp index ec6e4ea73..096c06ab6 100644 --- a/include/boost/geometry/algorithms/difference.hpp +++ b/include/boost/geometry/algorithms/difference.hpp @@ -2,8 +2,8 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2017-2023. -// Modifications copyright (c) 2017-2023, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -22,7 +22,6 @@ #include #include #include // For backward compatibility -#include #include #include #include @@ -62,12 +61,10 @@ struct call_intersection_insert template < typename OutputIterator, - typename RobustPolicy, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -78,7 +75,7 @@ struct call_intersection_insert overlay_difference, geometry::detail::overlay::do_reverse::value>::value, geometry::detail::overlay::do_reverse::value, true>::value - >::apply(geometry1, geometry2, robust_policy, out, strategy); + >::apply(geometry1, geometry2, out, strategy); } }; @@ -86,10 +83,9 @@ struct call_intersection_insert template struct call_intersection_insert { - template + template static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& , - RobustPolicy const& , OutputIterator out, Strategy const& ) { @@ -149,12 +145,10 @@ struct call_intersection_insert template < typename OutputIterator, - typename RobustPolicy, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -162,7 +156,7 @@ struct call_intersection_insert < Geometry1, Geometry2, typename base_t::access::type - >::apply(geometry1, geometry2, robust_policy, + >::apply(geometry1, geometry2, base_t::access::get(out), strategy); return out; @@ -188,12 +182,10 @@ struct call_intersection_insert template < typename OutputIterator, - typename RobustPolicy, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& , - RobustPolicy const& , OutputIterator out, Strategy const& ) { @@ -244,21 +236,10 @@ inline OutputIterator difference_insert(Geometry1 const& geometry1, //concepts::check(); geometry::detail::output_geometry_concept_check::apply(); - typedef typename geometry::rescale_overlay_policy_type - < - Geometry1, - Geometry2, - typename Strategy::cs_tag - >::type rescale_policy_type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy( - geometry1, geometry2, strategy); - return geometry::detail::difference::call_intersection_insert < Geometry1, Geometry2, GeometryOut - >::apply(geometry1, geometry2, robust_policy, out, strategy); + >::apply(geometry1, geometry2, out, strategy); } /*! diff --git a/include/boost/geometry/algorithms/sym_difference.hpp b/include/boost/geometry/algorithms/sym_difference.hpp index 894e88c7c..19cbaef13 100644 --- a/include/boost/geometry/algorithms/sym_difference.hpp +++ b/include/boost/geometry/algorithms/sym_difference.hpp @@ -2,8 +2,8 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2015-2023. -// Modifications copyright (c) 2015-2023 Oracle and/or its affiliates. +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024 Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -45,13 +44,11 @@ struct compute_difference < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -69,7 +66,7 @@ struct compute_difference < geometry::point_order::value, true >::value - >::apply(geometry1, geometry2, robust_policy, out, strategy); + >::apply(geometry1, geometry2, out, strategy); } }; @@ -80,25 +77,23 @@ struct sym_difference_generic { template < - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { out = compute_difference < GeometryOut - >::apply(geometry1, geometry2, robust_policy, out, strategy); + >::apply(geometry1, geometry2, out, strategy); return compute_difference < GeometryOut - >::apply(geometry2, geometry1, robust_policy, out, strategy); + >::apply(geometry2, geometry1, out, strategy); } }; @@ -108,13 +103,11 @@ struct sym_difference_areal_areal { template < - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Areal1 const& areal1, Areal2 const& areal2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -131,19 +124,19 @@ struct sym_difference_areal_areal compute_difference < GeometryOut - >::apply(areal1, areal2, robust_policy, oit12, strategy); + >::apply(areal1, areal2, oit12, strategy); compute_difference < GeometryOut - >::apply(areal2, areal1, robust_policy, oit21, strategy); + >::apply(areal2, areal1, oit21, strategy); return geometry::dispatch::union_insert < helper_geometry_type, helper_geometry_type, GeometryOut - >::apply(diff12, diff21, robust_policy, out, strategy); + >::apply(diff12, diff21, out, strategy); } }; @@ -160,13 +153,11 @@ struct sym_difference_same_inputs_tupled_output < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -178,7 +169,7 @@ struct sym_difference_same_inputs_tupled_output access::get(out) = Algorithm < typename access::type, Geometry1, Geometry2 - >::apply(geometry1, geometry2, robust_policy, access::get(out), strategy); + >::apply(geometry1, geometry2, access::get(out), strategy); return out; } @@ -199,20 +190,18 @@ struct sym_difference_different_inputs_tupled_output < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { return sym_difference_different_inputs_tupled_output < GeometryOut, SingleTag2, SingleTag1 - >::apply(geometry2, geometry1, robust_policy, out, strategy); + >::apply(geometry2, geometry1, out, strategy); } }; @@ -231,13 +220,11 @@ struct sym_difference_different_inputs_tupled_output < typename Geometry1, typename Geometry2, - typename RobustPolicy, typename OutputIterator, typename Strategy > static inline OutputIterator apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -253,7 +240,7 @@ struct sym_difference_different_inputs_tupled_output access1::get(out) = compute_difference < typename access1::type - >::apply(geometry1, geometry2, robust_policy, access1::get(out), strategy); + >::apply(geometry1, geometry2, access1::get(out), strategy); access2::get(out) = geometry::detail::convert_to_output < @@ -452,21 +439,10 @@ inline OutputIterator sym_difference_insert(Geometry1 const& geometry1, //concepts::check(); geometry::detail::output_geometry_concept_check::apply(); - typedef typename geometry::rescale_overlay_policy_type - < - Geometry1, - Geometry2, - typename Strategy::cs_tag - >::type rescale_policy_type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy( - geometry1, geometry2, strategy); - return dispatch::sym_difference_insert < Geometry1, Geometry2, GeometryOut - >::apply(geometry1, geometry2, robust_policy, out, strategy); + >::apply(geometry1, geometry2, out, strategy); } diff --git a/include/boost/geometry/algorithms/union.hpp b/include/boost/geometry/algorithms/union.hpp index 3d88cc141..2c517d9b6 100644 --- a/include/boost/geometry/algorithms/union.hpp +++ b/include/boost/geometry/algorithms/union.hpp @@ -2,8 +2,8 @@ // Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2014-2023. -// Modifications copyright (c) 2014-2023 Oracle and/or its affiliates. +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -76,17 +75,16 @@ struct union_insert true > { - template + template static inline OutputIterator apply(Geometry1 const& g1, Geometry2 const& g2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { return union_insert < Geometry2, Geometry1, GeometryOut - >::apply(g2, g1, robust_policy, out, strategy); + >::apply(g2, g1, out, strategy); } }; @@ -181,17 +179,16 @@ struct union_insert SingleTupledOut, single_tag, single_tag >; - template + template static inline OutputIterator apply(Geometry1 const& g1, Geometry2 const& g2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { access::get(out) = union_insert < Geometry2, Geometry1, typename access::type - >::apply(g2, g1, robust_policy, access::get(out), strategy); + >::apply(g2, g1, access::get(out), strategy); return out; } @@ -217,10 +214,9 @@ struct union_insert_tupled_different SingleTupledOut, SingleTag2, SingleTag2 >; - template + template static inline OutputIterator apply(Geometry1 const& g1, Geometry2 const& g2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { @@ -231,7 +227,7 @@ struct union_insert_tupled_different overlay_difference, geometry::detail::overlay::do_reverse::value>::value, geometry::detail::overlay::do_reverse::value, true>::value - >::apply(g1, g2, robust_policy, access1::get(out), strategy); + >::apply(g1, g2, access1::get(out), strategy); access2::get(out) = geometry::detail::convert_to_output < @@ -254,17 +250,16 @@ struct union_insert_tupled_different Geometry1, Geometry2, SingleTupledOut, SingleTag1, SingleTag2, false > { - template + template static inline OutputIterator apply(Geometry1 const& g1, Geometry2 const& g2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { return union_insert_tupled_different < Geometry2, Geometry1, SingleTupledOut, SingleTag2, SingleTag1, true - >::apply(g2, g1, robust_policy, out, strategy); + >::apply(g2, g1, out, strategy); } }; @@ -303,17 +298,16 @@ struct union_insert Geometry1, Geometry2, SingleTupledOut, single_tag2 >; - template + template static inline OutputIterator apply(Geometry1 const& g1, Geometry2 const& g2, - RobustPolicy const& robust_policy, OutputIterator out, Strategy const& strategy) { return union_insert_tupled_different < Geometry1, Geometry2, SingleTupledOut, single_tag1, single_tag2 - >::apply(g1, g2, robust_policy, out, strategy); + >::apply(g1, g2, out, strategy); } }; @@ -359,20 +353,10 @@ inline OutputIterator union_insert(Geometry1 const& geometry1, Geometry1, Geometry2 >::type strategy; - using rescale_policy_type = typename geometry::rescale_overlay_policy_type - < - Geometry1, - Geometry2 - >::type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy( - geometry1, geometry2, strategy); - return dispatch::union_insert < Geometry1, Geometry2, GeometryOut - >::apply(geometry1, geometry2, robust_policy, out, strategy); + >::apply(geometry1, geometry2, out, strategy); } @@ -401,21 +385,10 @@ struct union_ GeometryOut >::type; - using rescale_policy_type = typename geometry::rescale_overlay_policy_type - < - Geometry1, - Geometry2, - typename Strategy::cs_tag - >::type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy( - geometry1, geometry2, strategy); - dispatch::union_insert < Geometry1, Geometry2, single_out - >::apply(geometry1, geometry2, robust_policy, + >::apply(geometry1, geometry2, geometry::detail::output_geometry_back_inserter(geometry_out), strategy); } @@ -594,15 +567,6 @@ private: template static inline void subtract_greater_topodim(Multi1 const& multi1, Multi2 const& multi2, Multi1& multi_out, Strategy const& strategy) { - using rescale_policy_type = typename geometry::rescale_overlay_policy_type - < - Multi1, Multi2 - >::type; - - rescale_policy_type robust_policy - = geometry::get_rescale_policy( - multi1, multi2, strategy); - geometry::dispatch::intersection_insert < Multi1, Multi2, @@ -610,7 +574,7 @@ private: overlay_difference, geometry::detail::overlay::do_reverse::value>::value, geometry::detail::overlay::do_reverse::value, true>::value - >::apply(multi1, multi2, robust_policy, range::back_inserter(multi_out), strategy); + >::apply(multi1, multi2, range::back_inserter(multi_out), strategy); } */ }; diff --git a/include/boost/geometry/core/config.hpp b/include/boost/geometry/core/config.hpp index f5ab449fb..a96c47c93 100644 --- a/include/boost/geometry/core/config.hpp +++ b/include/boost/geometry/core/config.hpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2021 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2018-2023 Oracle and/or its affiliates. +// Copyright (c) 2018-2024 Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -14,25 +14,5 @@ #define BOOST_GEOMETRY_CORE_CONFIG_HPP #include -#include - -// If no define is specified, it uses BOOST_GEOMETRY_NO_ROBUSTNESS, which means: no rescaling. -// (Rescaling was an earlier approach to fix robustness issues.) -// However, if BOOST_GEOMETRY_ROBUSTNESS_ALTERNATIVE is specified, it flips the default. -#if !defined(BOOST_GEOMETRY_NO_ROBUSTNESS) && !defined(BOOST_GEOMETRY_USE_RESCALING) - #if defined(BOOST_GEOMETRY_ROBUSTNESS_ALTERNATIVE) - #define BOOST_GEOMETRY_USE_RESCALING - #else - #define BOOST_GEOMETRY_NO_ROBUSTNESS - #endif -#endif - -#if defined(BOOST_GEOMETRY_USE_RESCALING) && ! defined(BOOST_GEOMETRY_ROBUSTNESS_ALTERNATIVE) - BOOST_PRAGMA_MESSAGE("Rescaling is deprecated and its functionality will be removed in Boost 1.84") -#endif - -#if defined(BOOST_GEOMETRY_USE_RESCALING) && defined(BOOST_GEOMETRY_NO_ROBUSTNESS) - #error "Define either BOOST_GEOMETRY_NO_ROBUSTNESS (default) or BOOST_GEOMETRY_USE_RESCALING" -#endif #endif // BOOST_GEOMETRY_CORE_CONFIG_HPP diff --git a/include/boost/geometry/index/detail/algorithms/intersection_content.hpp b/include/boost/geometry/index/detail/algorithms/intersection_content.hpp index 260af9eca..45e22f4bf 100644 --- a/include/boost/geometry/index/detail/algorithms/intersection_content.hpp +++ b/include/boost/geometry/index/detail/algorithms/intersection_content.hpp @@ -4,8 +4,9 @@ // // Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland. // -// This file was modified by Oracle on 2019-2021. -// Modifications copyright (c) 2019-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2019-2024. +// Modifications copyright (c) 2019-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // // Use, modification and distribution is subject to the Boost Software License, @@ -57,7 +58,7 @@ inline typename default_content_result::type intersection_content(Box const bool const ok = geometry::detail::intersection::intersection_box_box < 0, geometry::dimension::value - >::apply(box1, box2, 0, box_intersection, 0); + >::apply(box1, box2, box_intersection, 0); if ( ok ) { return index::detail::content(box_intersection); diff --git a/include/boost/geometry/policies/robustness/get_rescale_policy.hpp b/include/boost/geometry/policies/robustness/get_rescale_policy.hpp deleted file mode 100644 index aabf3d356..000000000 --- a/include/boost/geometry/policies/robustness/get_rescale_policy.hpp +++ /dev/null @@ -1,416 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2014-2015 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2014-2015 Bruno Lalande, Paris, France. -// Copyright (c) 2014-2015 Mateusz Loskot, London, UK. -// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland. - -// This file was modified by Oracle on 2015-2020. -// Modifications copyright (c) 2015-2020, Oracle and/or its affiliates. - -// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle -// 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) - -#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP -#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP - - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// TEMP -#include -#include -#include - - -namespace boost { namespace geometry -{ - -#ifndef DOXYGEN_NO_DETAIL -namespace detail { namespace get_rescale_policy -{ - -template -< - typename Box, - typename Point, - typename RobustPoint, - typename Factor -> -inline void scale_box_to_integer_range(Box const& box, - Point& min_point, - RobustPoint& min_robust_point, - Factor& factor) -{ - // Scale box to integer-range - typedef typename promote_floating_point - < - typename geometry::coordinate_type::type - >::type num_type; - num_type const diff = util::numeric_cast(detail::get_max_size(box)); - num_type const range = 10000000.0; // Define a large range to get precise integer coordinates - num_type const half = 0.5; - if (math::equals(diff, num_type()) - || diff >= range - || ! boost::math::isfinite(diff)) - { - factor = 1; - } - else - { - factor = util::numeric_cast( - util::numeric_cast(half + range / diff)); - BOOST_GEOMETRY_ASSERT(factor >= 1); - } - - // Assign input/output minimal points - detail::assign_point_from_index<0>(box, min_point); - num_type const two = 2; - boost::long_long_type const min_coordinate - = util::numeric_cast(-range / two); - assign_values(min_robust_point, min_coordinate, min_coordinate); -} - -template -< - typename Point, typename RobustPoint, typename Geometry, - typename Factor, typename Strategy -> -static inline void init_rescale_policy(Geometry const& geometry, - Point& min_point, - RobustPoint& min_robust_point, - Factor& factor, - Strategy const& strategy) -{ - if (geometry::is_empty(geometry)) - { - return; - } - - // Get bounding box - model::box env = geometry::return_envelope - < - model::box - >(geometry, strategy); - - scale_box_to_integer_range(env, min_point, min_robust_point, factor); -} - -// NOTE: Actually it should take 2 separate strategies, one for each geometry -// in case one of them was e.g. a Box -template -< - typename Point, typename RobustPoint, typename Geometry1, typename Geometry2, - typename Factor, typename Strategy1, typename Strategy2 -> -static inline void init_rescale_policy(Geometry1 const& geometry1, - Geometry2 const& geometry2, - Point& min_point, - RobustPoint& min_robust_point, - Factor& factor, - Strategy1 const& strategy1, - Strategy2 const& strategy2) -{ - // Get bounding boxes (when at least one of the geometries is not empty) - bool const is_empty1 = geometry::is_empty(geometry1); - bool const is_empty2 = geometry::is_empty(geometry2); - if (is_empty1 && is_empty2) - { - return; - } - - model::box env; - if (is_empty1) - { - geometry::envelope(geometry2, env, strategy2); - } - else if (is_empty2) - { - geometry::envelope(geometry1, env, strategy1); - } - else - { - // The following approach (envelope + expand) may not give the - // optimal MBR when then two geometries are in the spherical - // equatorial or geographic coordinate systems. - // TODO: implement envelope for two (or possibly more geometries) - geometry::envelope(geometry1, env, strategy1); - model::box env2 = geometry::return_envelope - < - model::box - >(geometry2, strategy2); - geometry::expand(env, env2, strategy1); - } - - scale_box_to_integer_range(env, min_point, min_robust_point, factor); -} - - -template -< - typename Point, - bool IsFloatingPoint -> -struct rescale_policy_type -{ - typedef no_rescale_policy type; -}; - -// We rescale only all FP types -template -< - typename Point -> -struct rescale_policy_type -{ - typedef typename geometry::coordinate_type::type coordinate_type; - typedef model::point - < - typename detail::robust_type::type, - geometry::dimension::value, - typename geometry::coordinate_system::type - > robust_point_type; - typedef typename promote_floating_point::type factor_type; - typedef detail::robust_policy type; -}; - -template -struct get_rescale_policy -{ - template - static inline Policy apply(Geometry const& geometry, - Strategy const& strategy) - { - typedef typename point_type::type point_type; - typedef typename geometry::coordinate_type::type coordinate_type; - typedef typename promote_floating_point::type factor_type; - typedef model::point - < - typename detail::robust_type::type, - geometry::dimension::value, - typename geometry::coordinate_system::type - > robust_point_type; - - point_type min_point; - robust_point_type min_robust_point; - factor_type factor; - init_rescale_policy(geometry, min_point, min_robust_point, - factor, strategy); - - return Policy(min_point, min_robust_point, factor); - } - - template - static inline Policy apply(Geometry1 const& geometry1, Geometry2 const& geometry2, - Strategy1 const& strategy1, - Strategy2 const& strategy2) - { - typedef typename point_type::type point_type; - typedef typename geometry::coordinate_type::type coordinate_type; - typedef typename promote_floating_point::type factor_type; - typedef model::point - < - typename detail::robust_type::type, - geometry::dimension::value, - typename geometry::coordinate_system::type - > robust_point_type; - - point_type min_point; - robust_point_type min_robust_point; - factor_type factor; - init_rescale_policy(geometry1, geometry2, min_point, min_robust_point, - factor, strategy1, strategy2); - - return Policy(min_point, min_robust_point, factor); - } -}; - -// Specialization for no-rescaling -template <> -struct get_rescale_policy -{ - template - static inline no_rescale_policy apply(Geometry const& , EnvelopeStrategy const&) - { - return no_rescale_policy(); - } - - template - static inline no_rescale_policy apply(Geometry1 const& , Geometry2 const& , - EnvelopeStrategy1 const& , EnvelopeStrategy2 const& ) - { - return no_rescale_policy(); - } -}; - - -}} // namespace detail::get_rescale_policy -#endif // DOXYGEN_NO_DETAIL - -template -< - typename Point, - typename CSTag = typename geometry::cs_tag::type -> -struct rescale_policy_type - : public detail::get_rescale_policy::rescale_policy_type - < - Point, -#if defined(BOOST_GEOMETRY_USE_RESCALING) - std::is_floating_point - < - typename geometry::coordinate_type::type - >::type::value - && - std::is_same - < - CSTag, - geometry::cartesian_tag - >::value -#else - false -#endif - > -{ - BOOST_GEOMETRY_STATIC_ASSERT( - (util::is_point::value), - "Point type expected.", - Point); -}; - - -template -< - typename Geometry1, - typename Geometry2, - typename CSTag = typename geometry::cs_tag::type, - typename Tag1 = typename tag_cast - < - typename tag::type, - box_tag, - pointlike_tag, - linear_tag, - areal_tag - >::type, - typename Tag2 = typename tag_cast - < - typename tag::type, - box_tag, - pointlike_tag, - linear_tag, - areal_tag - >::type -> -struct rescale_overlay_policy_type - // Default: no rescaling - : public detail::get_rescale_policy::rescale_policy_type - < - typename geometry::point_type::type, - false - > -{}; - -// Areal/areal: get rescale policy based on coordinate type -template -< - typename Geometry1, - typename Geometry2, - typename CSTag -> -struct rescale_overlay_policy_type - : public rescale_policy_type - < - typename geometry::point_type::type, - CSTag - > -{}; - - -template -inline Policy get_rescale_policy(Geometry const& geometry) -{ - typename geometry::strategies::envelope::services::default_strategy - < - Geometry, - model::box::type> - >::type strategy; - - return detail::get_rescale_policy::get_rescale_policy::apply(geometry, strategy); -} - -template -< - typename Policy, typename Geometry, typename Strategy, - std::enable_if_t::type>::value, int> = 0 -> -inline Policy get_rescale_policy(Geometry const& geometry, Strategy const& strategy) -{ - return detail::get_rescale_policy::get_rescale_policy - < - Policy - >::apply(geometry, strategy); -} - -template -< - typename Policy, typename Geometry1, typename Geometry2, - std::enable_if_t::type>::value, int> = 0 -> -inline Policy get_rescale_policy(Geometry1 const& geometry1, Geometry2 const& geometry2) -{ - typename geometry::strategies::envelope::services::default_strategy - < - Geometry1, - model::box::type> - >::type strategy1; - typename geometry::strategies::envelope::services::default_strategy - < - Geometry2, - model::box::type> - >::type strategy2; - - return detail::get_rescale_policy::get_rescale_policy - < - Policy - >::apply(geometry1, geometry2, strategy1, strategy2); -} - -template -inline Policy get_rescale_policy(Geometry1 const& geometry1, Geometry2 const& geometry2, - Strategy const& strategy) -{ - return detail::get_rescale_policy::get_rescale_policy - < - Policy - >::apply(geometry1, geometry2, strategy, strategy); -} - - -}} // namespace boost::geometry - - -#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP diff --git a/include/boost/geometry/policies/robustness/no_rescale_policy.hpp b/include/boost/geometry/policies/robustness/no_rescale_policy.hpp deleted file mode 100644 index 211c45a1b..000000000 --- a/include/boost/geometry/policies/robustness/no_rescale_policy.hpp +++ /dev/null @@ -1,55 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2013 Bruno Lalande, Paris, France. -// Copyright (c) 2013 Mateusz Loskot, London, UK. -// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland. - -// 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) - -#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP -#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP - -#include - -#include -#include -#include - -namespace boost { namespace geometry -{ - -#ifndef DOXYGEN_NO_DETAIL -namespace detail -{ - -// Redudant later. -struct no_rescale_policy -{ - static bool const enabled = false; - - // We don't rescale but return the reference of the input - template - inline Value const& apply(Value const& value) const - { - return value; - } -}; - -} // namespace detail -#endif - - -// Implement meta-functions for this policy -template -struct robust_point_type -{ - // The point itself - typedef Point type; -}; - -}} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP diff --git a/include/boost/geometry/policies/robustness/rescale_policy.hpp b/include/boost/geometry/policies/robustness/rescale_policy.hpp deleted file mode 100644 index 7d6ad7e9f..000000000 --- a/include/boost/geometry/policies/robustness/rescale_policy.hpp +++ /dev/null @@ -1,85 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2014-2015 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2014-2015 Bruno Lalande, Paris, France. -// Copyright (c) 2014-2015 Mateusz Loskot, London, UK. -// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland. - -// This file was modified by Oracle on 2015, 2023. -// Modifications copyright (c) 2015-2023, Oracle and/or its affiliates. - -// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle -// 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) - -#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP -#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP - -#include - -#include -#include - -#include -#include - -#include - -namespace boost { namespace geometry -{ - -#ifndef DOXYGEN_NO_DETAIL -namespace detail -{ - -template -struct robust_policy -{ - static bool const enabled = true; - - typedef typename geometry::coordinate_type::type output_ct; - - robust_policy(FpPoint const& fp_min, IntPoint const& int_min, CalculationType const& the_factor) - : m_fp_min(fp_min) - , m_int_min(int_min) - , m_multiplier(the_factor) - { - } - - template - inline output_ct apply(Value const& value) const - { - // a + (v-b)*f - CalculationType const a = static_cast(get(m_int_min)); - CalculationType const b = static_cast(get(m_fp_min)); - CalculationType const result = a + (value - b) * m_multiplier; - - return geometry::math::rounding_cast(result); - } - - FpPoint m_fp_min; - IntPoint m_int_min; - CalculationType m_multiplier; -}; - -} // namespace detail -#endif - - -// Implement meta-functions for this policy - -// Define the IntPoint as a robust-point type -template -struct robust_point_type > -{ - typedef IntPoint type; -}; - - -}} // namespace boost::geometry - - -#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP diff --git a/include/boost/geometry/policies/robustness/rescale_policy_tags.hpp b/include/boost/geometry/policies/robustness/rescale_policy_tags.hpp deleted file mode 100644 index 03f90760e..000000000 --- a/include/boost/geometry/policies/robustness/rescale_policy_tags.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// Boost.Geometry - -// Copyright (c) 2019-2019 Barend Gehrels, Amsterdam, the Netherlands. - -// 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) - -#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_TYPE_HPP -#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_TYPE_HPP - -#include - -namespace boost { namespace geometry -{ - -#ifndef DOXYGEN_NO_DETAIL -namespace detail -{ - -struct no_rescale_policy_tag {}; -struct rescale_policy_tag {}; - -template -struct rescale_policy_type -{ - typedef rescale_policy_tag type; -}; - -// Specialization -template <> -struct rescale_policy_type -{ - typedef no_rescale_policy_tag type; -}; - -} // namespace detail -#endif - - -}} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_TYPE_HPP diff --git a/include/boost/geometry/policies/robustness/robust_point_type.hpp b/include/boost/geometry/policies/robustness/robust_point_type.hpp deleted file mode 100644 index 25639227f..000000000 --- a/include/boost/geometry/policies/robustness/robust_point_type.hpp +++ /dev/null @@ -1,30 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2013 Bruno Lalande, Paris, France. -// Copyright (c) 2013 Mateusz Loskot, London, UK. -// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland. - -// 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) - -#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP -#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP - -namespace boost { namespace geometry -{ - -// Meta-function to typedef a robust point type for a policy -template -struct robust_point_type -{ - // By default, the point itself is the robust type - typedef Point type; -}; - - -}} // namespace boost::geometry - - -#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP diff --git a/include/boost/geometry/policies/robustness/robust_type.hpp b/include/boost/geometry/policies/robustness/robust_type.hpp deleted file mode 100644 index c2a65ac50..000000000 --- a/include/boost/geometry/policies/robustness/robust_type.hpp +++ /dev/null @@ -1,72 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2014 Bruno Lalande, Paris, France. -// Copyright (c) 2014 Mateusz Loskot, London, UK. -// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland. - -// This file was modified by Oracle on 2020. -// Modifications copyright (c) 2020, 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) - -#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP -#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP - - -#include - -#include - - -namespace boost { namespace geometry -{ - -#ifndef DOXYGEN_NO_DETAIL - -namespace detail_dispatch -{ - -template -struct robust_type -{ -}; - -template -struct robust_type -{ - typedef CoordinateType type; -}; - -template -struct robust_type -{ - typedef boost::long_long_type type; -}; - -} // namespace detail_dispatch - -namespace detail -{ - -template -struct robust_type -{ - typedef typename detail_dispatch::robust_type - < - CoordinateType, - typename std::is_floating_point::type - >::type type; -}; - -} // namespace detail -#endif // DOXYGEN_NO_DETAIL - - -}} // namespace boost::geometry - - -#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP diff --git a/include/boost/geometry/policies/robustness/segment_ratio.hpp b/include/boost/geometry/policies/robustness/segment_ratio.hpp index 5b09f6c4e..47851a62c 100644 --- a/include/boost/geometry/policies/robustness/segment_ratio.hpp +++ b/include/boost/geometry/policies/robustness/segment_ratio.hpp @@ -2,8 +2,9 @@ // Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2016-2021. -// Modifications copyright (c) 2016-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2016-2024. +// Modifications copyright (c) 2016-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -347,6 +348,11 @@ private : } }; +template +struct segment_ratio_type +{ + using type = segment_ratio::type>; +}; }} // namespace boost::geometry diff --git a/include/boost/geometry/policies/robustness/segment_ratio_type.hpp b/include/boost/geometry/policies/robustness/segment_ratio_type.hpp deleted file mode 100644 index 8f4d0096c..000000000 --- a/include/boost/geometry/policies/robustness/segment_ratio_type.hpp +++ /dev/null @@ -1,54 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) - -// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands. -// Copyright (c) 2013 Bruno Lalande, Paris, France. -// Copyright (c) 2013 Mateusz Loskot, London, UK. -// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland. - -// This file was modified by Oracle on 2020. -// Modifications copyright (c) 2020 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) - -#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP -#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP - -#include - -#include - -#include -#include - -namespace boost { namespace geometry { namespace detail -{ - -// Temporary meta-function to access segment-ratio for a policy -template -struct segment_ratio_type -{ - // Type in segment ratio is either the coordinate type, or for - // deprecated robust point types it is a long_long type - typedef std::conditional_t - < - std::is_same - < - typename rescale_policy_type::type, - no_rescale_policy_tag - >::value, - typename geometry::coordinate_type::type, - boost::long_long_type - > coordinate_type; - - // Define segment ratio based on the coordinate type - typedef geometry::segment_ratio type; -}; - - -}}} // namespace boost::geometry::deatil - - -#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP diff --git a/include/boost/geometry/strategies/cartesian/intersection.hpp b/include/boost/geometry/strategies/cartesian/intersection.hpp index f712d3121..0d612f0ea 100644 --- a/include/boost/geometry/strategies/cartesian/intersection.hpp +++ b/include/boost/geometry/strategies/cartesian/intersection.hpp @@ -3,9 +3,9 @@ // Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2013-2023 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2014-2021. -// Modifications copyright (c) 2014-2021, Oracle and/or its affiliates. - +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -28,7 +28,6 @@ #include #include #include -#include #include #include @@ -52,15 +51,6 @@ #include #include -#include -#include - - -#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS) -# include -#endif - - namespace boost { namespace geometry { @@ -157,12 +147,12 @@ struct cartesian_segments template void assign_a(Point& point, Segment1 const& a, Segment2 const& ) const { - assign(point, a, dx_a, dy_a, robust_ra); + assign(point, a, dx_a, dy_a, ra); } template void assign_b(Point& point, Segment1 const& , Segment2 const& b) const { - assign(point, b, dx_b, dy_b, robust_rb); + assign(point, b, dx_b, dy_b, rb); } template @@ -239,7 +229,7 @@ struct cartesian_segments < std::is_arithmetic::value >::apply(comparable_length_a(), comparable_length_b(), - robust_ra.edge_value(), robust_rb.edge_value()); + ra.edge_value(), rb.edge_value()); if (use_a) { @@ -254,8 +244,8 @@ struct cartesian_segments // Verify nearly collinear cases (the threshold is arbitrary // but influences performance). If the intersection is located // outside the segments, then it should be moved. - if (robust_ra.possibly_collinear(1.0e-3) - && robust_rb.possibly_collinear(1.0e-3)) + if (ra.possibly_collinear(1.0e-3) + && rb.possibly_collinear(1.0e-3)) { // The segments are nearly collinear and because of the calculation // method with very small denominator, the IP appears outside the @@ -270,8 +260,8 @@ struct cartesian_segments CoordinateType dx_a, dy_a; CoordinateType dx_b, dy_b; - SegmentRatio robust_ra; - SegmentRatio robust_rb; + SegmentRatio ra; + SegmentRatio rb; }; template @@ -414,10 +404,10 @@ struct cartesian_segments typename geometry::coordinate_type::type >::type coordinate_type; - point1_type const& p1 = range_p.at(0); - point1_type const& p2 = range_p.at(1); - point2_type const& q1 = range_q.at(0); - point2_type const& q2 = range_q.at(1); + point1_type const& p1 = p.first; + point1_type const& p2 = p.second; + point2_type const& q1 = q.first; + point2_type const& q2 = q.second; bool const p_is_point = equals_point_point(p1, p2); bool const q_is_point = equals_point_point(q1, q2); @@ -460,14 +450,6 @@ struct cartesian_segments bool collinear = sides.collinear(); - //TODO: remove this when rescaling is removed - // Calculate the differences again - // (for rescaled version, this is different from dx_p etc) - coordinate_type const dx_p = get<0>(p2) - get<0>(p1); - coordinate_type const dx_q = get<0>(q2) - get<0>(q1); - coordinate_type const dy_p = get<1>(p2) - get<1>(p1); - coordinate_type const dy_q = get<1>(q2) - get<1>(q1); - // r: ratio 0-1 where intersection divides A/B // (only calculated for non-collinear segments) if (! collinear) @@ -475,18 +457,18 @@ struct cartesian_segments coordinate_type denominator_a, nominator_a; coordinate_type denominator_b, nominator_b; - cramers_rule(dx_p, dy_p, dx_q, dy_q, + cramers_rule(sinfo.dx_a, sinfo.dy_a, sinfo.dx_b, sinfo.dy_b, get<0>(p1) - get<0>(q1), get<1>(p1) - get<1>(q1), nominator_a, denominator_a); - cramers_rule(dx_q, dy_q, dx_p, dy_p, + cramers_rule(sinfo.dx_b, sinfo.dy_b, sinfo.dx_a, sinfo.dy_a, get<0>(q1) - get<0>(p1), get<1>(q1) - get<1>(p1), nominator_b, denominator_b); math::detail::equals_factor_policy - policy(dx_p, dy_p, dx_q, dy_q); + policy(sinfo.dx_a, sinfo.dy_a, sinfo.dx_b, sinfo.dy_b); coordinate_type const zero = 0; if (math::detail::equals_by_policy(denominator_a, zero, policy) @@ -500,18 +482,18 @@ struct cartesian_segments } else { - sinfo.robust_ra.assign(nominator_a, denominator_a); - sinfo.robust_rb.assign(nominator_b, denominator_b); + sinfo.ra.assign(nominator_a, denominator_a); + sinfo.rb.assign(nominator_b, denominator_b); } } if (collinear) { std::pair const collinear_use_first - = is_x_more_significant(geometry::math::abs(dx_p), - geometry::math::abs(dy_p), - geometry::math::abs(dx_q), - geometry::math::abs(dy_q), + = is_x_more_significant(geometry::math::abs(sinfo.dx_a), + geometry::math::abs(sinfo.dy_a), + geometry::math::abs(sinfo.dx_b), + geometry::math::abs(sinfo.dy_b), p_is_point, q_is_point); if (collinear_use_first.second) diff --git a/include/boost/geometry/strategies/geographic/intersection.hpp b/include/boost/geometry/strategies/geographic/intersection.hpp index e6a94a15e..3f10ce092 100644 --- a/include/boost/geometry/strategies/geographic/intersection.hpp +++ b/include/boost/geometry/strategies/geographic/intersection.hpp @@ -2,7 +2,8 @@ // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// Copyright (c) 2016-2021, Oracle and/or its affiliates. +// Copyright (c) 2016-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -23,7 +24,6 @@ #include #include #include -#include #include #include @@ -114,8 +114,8 @@ struct geographic_segments CoordinateType lon; CoordinateType lat; - SegmentRatio robust_ra; - SegmentRatio robust_rb; + SegmentRatio ra; + SegmentRatio rb; intersection_point_flag ip_flag; }; @@ -489,8 +489,8 @@ private: sinfo.lon = lon; sinfo.lat = lat; - sinfo.robust_ra.assign(dist_a1_i1, dist_a1_a2); - sinfo.robust_rb.assign(dist_b1_i1, dist_b1_b2); + sinfo.ra.assign(dist_a1_i1, dist_a1_a2); + sinfo.rb.assign(dist_b1_i1, dist_b1_b2); sinfo.ip_flag = ip_flag; return Policy::segments_crosses(sides, sinfo, a, b); diff --git a/include/boost/geometry/strategies/intersection_result.hpp b/include/boost/geometry/strategies/intersection_result.hpp index 94aae51d8..971dc9f2b 100644 --- a/include/boost/geometry/strategies/intersection_result.hpp +++ b/include/boost/geometry/strategies/intersection_result.hpp @@ -2,8 +2,9 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2015-2021. -// Modifications copyright (c) 2015-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -24,8 +25,8 @@ namespace boost { namespace geometry template struct fraction_type { - SegmentRatio robust_ra; // TODO this can be renamed now to "ra" - SegmentRatio robust_rb; + SegmentRatio ra; + SegmentRatio rb; bool initialized; inline fraction_type() @@ -36,15 +37,15 @@ struct fraction_type inline void assign(Info const& info) { initialized = true; - robust_ra = info.robust_ra; - robust_rb = info.robust_rb; + ra = info.ra; + rb = info.rb; } inline void assign(SegmentRatio const& a, SegmentRatio const& b) { initialized = true; - robust_ra = a; - robust_rb = b; + ra = a; + rb = b; } }; diff --git a/include/boost/geometry/strategies/intersection_strategies.hpp b/include/boost/geometry/strategies/intersection_strategies.hpp index e9a17305a..781b3984d 100644 --- a/include/boost/geometry/strategies/intersection_strategies.hpp +++ b/include/boost/geometry/strategies/intersection_strategies.hpp @@ -2,8 +2,9 @@ // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2016-2020. -// Modifications copyright (c) 2016-2020, Oracle and/or its affiliates. +// This file was modified by Oracle on 2016-2024. +// Modifications copyright (c) 2016-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -17,7 +18,6 @@ //#include #include -#include #include #include @@ -41,21 +41,15 @@ template typename Geometry1, typename Geometry2, typename IntersectionPoint, - typename RobustPolicy, typename CalculationType = void > struct intersection_strategies { private : - // for development BOOST_STATIC_ASSERT((! std::is_same::type::value)); - typedef segment_intersection_points < IntersectionPoint, - typename detail::segment_ratio_type - < - IntersectionPoint, RobustPolicy - >::type + typename segment_ratio_type::type > ip_type; public: @@ -69,14 +63,6 @@ public: Tag, CalculationType >::type segment_intersection_strategy_type; - - typedef typename strategy::side::services::default_strategy - < - Tag, - CalculationType - >::type side_strategy_type; - - typedef RobustPolicy rescale_policy_type; }; diff --git a/include/boost/geometry/strategies/side_info.hpp b/include/boost/geometry/strategies/side_info.hpp index d113eaa8f..bd257ed93 100644 --- a/include/boost/geometry/strategies/side_info.hpp +++ b/include/boost/geometry/strategies/side_info.hpp @@ -4,6 +4,10 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. +// This file was modified by Oracle on 2024. +// Modifications copyright (c) 2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle + // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. @@ -17,7 +21,7 @@ #include #include -#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS) +#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) # include #endif @@ -146,7 +150,7 @@ public : return sides[Which].first == 0 ? 0 : 1; } -#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS) +#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) inline void debug() const { std::cout << sides[0].first << " " diff --git a/include/boost/geometry/strategies/spherical/intersection.hpp b/include/boost/geometry/strategies/spherical/intersection.hpp index fdd44c5d1..804efd766 100644 --- a/include/boost/geometry/strategies/spherical/intersection.hpp +++ b/include/boost/geometry/strategies/spherical/intersection.hpp @@ -2,7 +2,8 @@ // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// Copyright (c) 2016-2021, Oracle and/or its affiliates. +// Copyright (c) 2016-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -23,7 +24,6 @@ #include #include #include -#include #include #include @@ -133,8 +133,8 @@ struct ecef_segments } Vector3d intersection_point; - SegmentRatio robust_ra; - SegmentRatio robust_rb; + SegmentRatio ra; + SegmentRatio rb; intersection_point_flag ip_flag; CalcPolicy const& calc_policy; @@ -424,8 +424,8 @@ struct ecef_segments vec3d_t > sinfo(calc_policy); - sinfo.robust_ra.assign(dist_a1_i1, dist_a1_a2); - sinfo.robust_rb.assign(dist_b1_i1, dist_b1_b2); + sinfo.ra.assign(dist_a1_i1, dist_a1_a2); + sinfo.rb.assign(dist_b1_i1, dist_b1_b2); sinfo.intersection_point = i1; sinfo.ip_flag = ip_flag; diff --git a/test/algorithms/buffer/buffer_multi_point.cpp b/test/algorithms/buffer/buffer_multi_point.cpp index ab32272a4..27b795a29 100644 --- a/test/algorithms/buffer/buffer_multi_point.cpp +++ b/test/algorithms/buffer/buffer_multi_point.cpp @@ -51,8 +51,8 @@ void test_all() test_one("simplex3", simplex, join, end_flat, 44.5619, 3.0); test_one("three1", three, join, end_flat, 3.0 * expectation, 1.0); -#if defined(BOOST_GEOMETRY_USE_RESCALING) || defined(BOOST_GEOMETRY_TEST_FAILURES) - // For no-rescaling, fails in CCW mode +#if defined(BOOST_GEOMETRY_TEST_FAILURES) + // fails in CCW mode test_one("three2", three, join, end_flat, 36.7528, 2.0); #endif test_one("three19", three, join, end_flat, 33.6857, 1.9); @@ -126,11 +126,7 @@ void test_many_points_per_circle() using bg::strategy::buffer::point_circle; -#if ! defined(BOOST_GEOMETRY_USE_RESCALING) double const tolerance = 1000.0; -#else - double const tolerance = 1.0; -#endif // Area should be somewhat larger (~>) than pi*distance^2 // 6051788: area ~> 115058122875258 diff --git a/test/algorithms/buffer/buffer_variable_width.cpp b/test/algorithms/buffer/buffer_variable_width.cpp index ee3925512..a4f6e241b 100644 --- a/test/algorithms/buffer/buffer_variable_width.cpp +++ b/test/algorithms/buffer/buffer_variable_width.cpp @@ -2,6 +2,10 @@ // Copyright (c) 2024 Barend Gehrels, Amsterdam, the Netherlands. +// This file was modified by Oracle on 2019-2024. +// Modifications copyright (c) 2019-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, 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) @@ -159,7 +163,6 @@ void test_buffer(std::string const& caseid, std::string const& wkt, std::vector< distance_strategy, buffer_side_strategy, join_strategy, end_strategy, point_strategy, strategy, - bg::detail::no_rescale_policy(), visitor); #if defined(TEST_WITH_SVG) diff --git a/test/algorithms/buffer/test_buffer.hpp b/test/algorithms/buffer/test_buffer.hpp index 5f112eb03..0cacb9ab8 100644 --- a/test/algorithms/buffer/test_buffer.hpp +++ b/test/algorithms/buffer/test_buffer.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2010-2019 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2016-2021. -// Modifications copyright (c) 2016-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2016-2024. +// Modifications copyright (c) 2016-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -272,15 +273,9 @@ void test_buffer(std::string const& caseid, #endif typedef typename bg::point_type::type point_type; - typedef typename bg::rescale_policy_type::type - rescale_policy_type; - // Enlarge the box to get a proper rescale policy bg::buffer(envelope, envelope, distance_strategy.max_distance(join_strategy, end_strategy)); - rescale_policy_type rescale_policy - = bg::get_rescale_policy(envelope, strategy); - buffered.clear(); bg::detail::buffer::buffer_inserter(geometry, std::back_inserter(buffered), @@ -290,7 +285,6 @@ void test_buffer(std::string const& caseid, end_strategy, point_strategy, strategy, - rescale_policy, visitor); #if defined(TEST_WITH_CSV) @@ -379,15 +373,12 @@ void test_buffer(std::string const& caseid, join_strategy, end_strategy, point_strategy, - rescale_policy, ptv); ptv.map_input_output(geometry, buffered, distance_strategy.negative()); // self_ips NYI here } #elif defined(TEST_WITH_SVG) - rescale_policy_type rescale_policy_output - = bg::get_rescale_policy(envelope_output); - buffer_mapper.map_self_ips(mapper, buffered, strategy, rescale_policy_output); + buffer_mapper.map_self_ips(mapper, buffered, strategy); #endif } diff --git a/test/algorithms/detail/sections/range_by_section.cpp b/test/algorithms/detail/sections/range_by_section.cpp index b963a759d..355955427 100644 --- a/test/algorithms/detail/sections/range_by_section.cpp +++ b/test/algorithms/detail/sections/range_by_section.cpp @@ -3,8 +3,9 @@ // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2020-2021. -// Modifications copyright (c) 2020-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2020-2024. +// Modifications copyright (c) 2020-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -39,7 +40,7 @@ void test_sectionalize(std::string const /*caseid*/, Geometry const& geometry, s typedef std::integer_sequence dim2; sections s; - bg::sectionalize(geometry, bg::detail::no_rescale_policy(), s); + bg::sectionalize(geometry, s); BOOST_CHECK_EQUAL(s.size(), section_count); diff --git a/test/algorithms/detail/sections/sectionalize.cpp b/test/algorithms/detail/sections/sectionalize.cpp index 3f464f1a0..9ab01ecfa 100644 --- a/test/algorithms/detail/sections/sectionalize.cpp +++ b/test/algorithms/detail/sections/sectionalize.cpp @@ -5,8 +5,9 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. -// This file was modified by Oracle on 2020-2021. -// Modifications copyright (c) 2020-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2020-2024. +// Modifications copyright (c) 2020-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -61,7 +62,6 @@ void test_sectionalize_part() Geometry geometry; geometry.push_back(bg::make(1, 1)); - bg::detail::no_rescale_policy rescale_policy; typename bg::strategies::relate::services::default_strategy < Geometry, Geometry @@ -69,12 +69,12 @@ void test_sectionalize_part() bg::ring_identifier ring_id; sectionalize_part::apply(sections, geometry.begin(), geometry.end(), - rescale_policy, strategy, ring_id, 10); + strategy, ring_id, 10); // There should not yet be anything generated, because it is only ONE point geometry.push_back(bg::make(2, 2)); sectionalize_part::apply(sections, geometry.begin(), geometry.end(), - rescale_policy, strategy, ring_id, 10); + strategy, ring_id, 10); } @@ -92,8 +92,7 @@ void test_sectionalize(std::string const& caseid, G const& g, std::size_t sectio using sections= bg::sections; sections s; - bg::sectionalize(g, - bg::detail::no_rescale_policy(), s, 0, max_count); + bg::sectionalize(g, s, 0, max_count); BOOST_CHECK_EQUAL(s.size(), section_count); @@ -340,8 +339,8 @@ void test_large_integers() bg::sections, 1> double_sections; - bg::sectionalize(int_poly, bg::detail::no_rescale_policy(), int_sections); - bg::sectionalize(double_poly, bg::detail::no_rescale_policy(), double_sections); + bg::sectionalize(int_poly, int_sections); + bg::sectionalize(double_poly, double_sections); bool equally_sized = int_sections.size() == double_sections.size(); BOOST_CHECK(equally_sized); diff --git a/test/algorithms/detail/sections/sectionalize_const.cpp b/test/algorithms/detail/sections/sectionalize_const.cpp index fdff83adf..428230d80 100644 --- a/test/algorithms/detail/sections/sectionalize_const.cpp +++ b/test/algorithms/detail/sections/sectionalize_const.cpp @@ -3,6 +3,10 @@ // Copyright (c) 2022 Barend Gehrels, Amsterdam, the Netherlands. +// This file was modified by Oracle on 2024. +// Modifications copyright (c) 2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, 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) @@ -30,7 +34,7 @@ void test_sectionalize_on_const(Geometry const& geometry, std::size_t expected_s using dim_type = std::integer_sequence; section_type sections; - bg::sectionalize(geometry, bg::detail::no_rescale_policy(), sections); + bg::sectionalize(geometry, sections); BOOST_CHECK_EQUAL(sections.size(), expected_section_count); } diff --git a/test/algorithms/is_valid.cpp b/test/algorithms/is_valid.cpp index 82ba5ae46..408d54153 100644 --- a/test/algorithms/is_valid.cpp +++ b/test/algorithms/is_valid.cpp @@ -56,7 +56,7 @@ void geometry_to_svg(Geometry const& geometry, const std::string& case_id) using turn_info = bg::detail::overlay::turn_info < point_type, - typename bg::detail::segment_ratio_type::type + typename bg::segment_ratio_type::type >; using strategy_type = typename bg::strategies::relate::services::default_strategy < @@ -66,20 +66,13 @@ void geometry_to_svg(Geometry const& geometry, const std::string& case_id) strategy_type strategy; -#if defined(BOOST_GEOMETRY_NO_ROBUSTNESS) - bg::detail::no_rescale_policy rescale_policy; -#else - using rescale_policy_type = typename bg::rescale_policy_type::type; - rescale_policy_type rescale_policy = bg::get_rescale_policy(geometry, strategy); -#endif - std::vector turns; bg::detail::self_get_turn_points::no_interrupt_policy policy; bg::self_turns < bg::detail::overlay::assign_null_policy - >(geometry, strategy, rescale_policy, turns, policy); + >(geometry, strategy, turns, policy); for (turn_info const& turn : turns) { diff --git a/test/algorithms/overlay/assemble.cpp b/test/algorithms/overlay/assemble.cpp index d53bd9d4a..f53c62524 100644 --- a/test/algorithms/overlay/assemble.cpp +++ b/test/algorithms/overlay/assemble.cpp @@ -3,8 +3,9 @@ // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2019-2021. -// Modifications copyright (c) 2019-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2019-2024. +// Modifications copyright (c) 2019-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -31,8 +32,6 @@ #include #include -#include - #include diff --git a/test/algorithms/overlay/get_clusters.cpp b/test/algorithms/overlay/get_clusters.cpp index ec33c7515..e1e73c88a 100644 --- a/test/algorithms/overlay/get_clusters.cpp +++ b/test/algorithms/overlay/get_clusters.cpp @@ -3,8 +3,9 @@ // Copyright (c) 2021 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2021. -// Modifications copyright (c) 2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2021-2024. +// Modifications copyright (c) 2021-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -41,11 +42,10 @@ void do_test(std::string const& case_id, std::size_t expected_cluster_count) { using coor_type = typename bg::coordinate_type::type; - using policy_type = bg::detail::no_rescale_policy; using turn_info = bg::detail::overlay::turn_info < Point, - typename bg::detail::segment_ratio_type::type + typename bg::segment_ratio_type::type >; using cluster_type = std::map @@ -61,7 +61,7 @@ void do_test(std::string const& case_id, } cluster_type clusters; - bg::detail::overlay::get_clusters(turns, clusters, policy_type()); + bg::detail::overlay::get_clusters(turns, clusters); BOOST_CHECK_MESSAGE(expected_cluster_count == clusters.size(), "Case: " << case_id << " ctype: " << string_from_type::name() diff --git a/test/algorithms/overlay/get_turn_info.cpp b/test/algorithms/overlay/get_turn_info.cpp index d8bb78356..a17e22e78 100644 --- a/test/algorithms/overlay/get_turn_info.cpp +++ b/test/algorithms/overlay/get_turn_info.cpp @@ -3,8 +3,9 @@ // 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. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -77,24 +78,21 @@ void test_with_point(std::string const& caseid, P, P >::type strategy_type; - typedef typename bg::detail::no_rescale_policy rescale_policy_type; - typedef bg::detail::overlay::turn_info < P, - typename bg::detail::segment_ratio_type::type + typename bg::segment_ratio_type

::type > turn_info; typedef std::vector tp_vector; turn_info model; tp_vector info; strategy_type strategy; - rescale_policy_type rescale_policy; sub_range_from_points

sub_range_p(pi, pj, pk); sub_range_from_points

sub_range_q(qi, qj, qk); bg::detail::overlay::get_turn_info < bg::detail::overlay::assign_null_policy - >::apply(sub_range_p, sub_range_q, model, strategy, rescale_policy, std::back_inserter(info)); + >::apply(sub_range_p, sub_range_q, model, strategy, std::back_inserter(info)); if (info.size() == 0) { @@ -224,7 +222,7 @@ void test_both(std::string const& caseid, method, expected_touch_only, ip_x, ip_y, expected, ip_x2, ip_y2); std::string reversed(expected.rbegin(), expected.rend()); - + if (ip_x2 >= 0 && ip_y2 >= 0) { std::swap(ip_x, ip_x2); diff --git a/test/algorithms/overlay/get_turns.cpp b/test/algorithms/overlay/get_turns.cpp index 14b7b0f04..a37e9bead 100644 --- a/test/algorithms/overlay/get_turns.cpp +++ b/test/algorithms/overlay/get_turns.cpp @@ -5,8 +5,9 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. -// This file was modified by Oracle on 2017-2021. -// Modifications copyright (c) 2017-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -28,7 +29,6 @@ #include #include -#include #include @@ -63,24 +63,18 @@ struct test_get_turns G1 const& g1, G2 const& g2, double /*precision*/) { typedef typename bg::point_type::type point_type; - + typedef typename bg::strategies::relate::services::default_strategy < G1, G2 >::type strategy_type; - - typedef typename bg::rescale_policy_type::type - rescale_policy_type; strategy_type strategy; - rescale_policy_type rescale_policy - = bg::get_rescale_policy(g1, g2); - typedef bg::detail::overlay::turn_info < point_type, - typename bg::detail::segment_ratio_type::type + typename bg::segment_ratio_type::type > turn_info; std::vector turns; @@ -89,7 +83,7 @@ struct test_get_turns bg::get_turns < false, false, bg::detail::overlay::assign_null_policy - >(g1, g2, strategy, rescale_policy, turns, policy); + >(g1, g2, strategy, turns, policy); BOOST_CHECK_MESSAGE( expected_count == boost::size(turns), diff --git a/test/algorithms/overlay/get_turns_const.cpp b/test/algorithms/overlay/get_turns_const.cpp index daa058ca0..e11e25139 100644 --- a/test/algorithms/overlay/get_turns_const.cpp +++ b/test/algorithms/overlay/get_turns_const.cpp @@ -3,6 +3,10 @@ // Copyright (c) 2022 Barend Gehrels, Amsterdam, the Netherlands. +// This file was modified by Oracle on 2024. +// Modifications copyright (c) 2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, 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) @@ -24,15 +28,14 @@ void test_get_turns_on_const(Ring1 const &ring1, Ring2 const &ring2, { namespace bg = boost::geometry; - using rescale_policy_type = bg::detail::no_rescale_policy; using strategy_type = typename bg::strategies::relate::services::default_strategy::type; using point_type = typename bg::point_type::type; using writable_point_type = typename bg::helper_geometry::type; - using segment_ratio_type = typename bg::detail::segment_ratio_type + using segment_ratio_type = typename bg::segment_ratio_type < - writable_point_type, rescale_policy_type + writable_point_type >::type; using turn_info = bg::detail::overlay::turn_info < @@ -45,12 +48,12 @@ void test_get_turns_on_const(Ring1 const &ring1, Ring2 const &ring2, bg::get_turns < false, false, bg::detail::overlay::assign_null_policy - >(ring1, ring2, strategy, rescale_policy_type(), turns, policy); + >(ring1, ring2, strategy, turns, policy); BOOST_CHECK_EQUAL(turns.size(), expectation.size()); const double tolerance = 0.001; - for (std::size_t i = 0; i < turns.size() && i < expectation.size(); i++) + for (std::size_t i = 0; i < turns.size() && i < expectation.size(); i++) { BOOST_CHECK_CLOSE(expectation[i].GetX(), bg::get<0>(turns[i].point), tolerance); BOOST_CHECK_CLOSE(expectation[i].GetY(), bg::get<1>(turns[i].point), tolerance); @@ -58,11 +61,11 @@ void test_get_turns_on_const(Ring1 const &ring1, Ring2 const &ring2, #ifdef BOOST_GEOMETRY_TEST_DEBUG std::cout << bg::wkt(ring1) << " " << bg::wkt(ring2) << std::endl; - for (const auto& turn : turns) + for (const auto& turn : turns) { std::cout << bg::wkt(turn.point) << std::endl; } -#endif +#endif } int test_main(int, char* []) diff --git a/test/algorithms/overlay/get_turns_linear_areal.cpp b/test/algorithms/overlay/get_turns_linear_areal.cpp index 2495b9f80..052d07bc2 100644 --- a/test/algorithms/overlay/get_turns_linear_areal.cpp +++ b/test/algorithms/overlay/get_turns_linear_areal.cpp @@ -5,9 +5,9 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. -// This file was modified by Oracle on 2014, 2015. -// Modifications copyright (c) 2014-2015 Oracle and/or its affiliates. - +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -114,7 +114,7 @@ void test_all() expected("tuu+")); test_geometry("LINESTRING(0 1,0 0,0 1)", "POLYGON((0 0,3 3,3 0,0 0))", expected("tuu+")); - + // SPIKE - NON-ENDPOINT - OPPOSITE // opposite - eq eq @@ -213,7 +213,7 @@ void test_all() test_geometry("LINESTRING(0 6, 5 6)", "POLYGON((0 0,0 10,10 10,10 0,0 0),(4 4,6 4,6 6,4 6,4 4))", expected("miu+")("mcu+")("mxc=")); - + } int test_main(int, char* []) diff --git a/test/algorithms/overlay/get_turns_linear_areal_sph.cpp b/test/algorithms/overlay/get_turns_linear_areal_sph.cpp index 86aa7818d..cf5653fc1 100644 --- a/test/algorithms/overlay/get_turns_linear_areal_sph.cpp +++ b/test/algorithms/overlay/get_turns_linear_areal_sph.cpp @@ -1,7 +1,8 @@ // Boost.Geometry // Unit Test -// Copyright (c) 2016, Oracle and/or its affiliates. +// Copyright (c) 2016-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -33,18 +34,18 @@ void test_all() expected("tcu+")("mic=")("mcc+")("txu=")); test_geometry("LINESTRING(10 0,5 0,5 5,10 5,10 10)", "POLYGON((0 0,0 10,10 10,10 0,0 0))", expected("tcc+")("miu=")("mcu+")("txc=")); - + test_geometry("LINESTRING(0 0,10 0,10 10.151081711048134)", "POLYGON((0 0,5 5,0 10,20 10,20 2,19 0,0 0)(10 3,15 3,15 7,10 7,10 3))", expected("tcu+")("mic=")("mcu+")("mic=")("mxu+")); - + test_geometry("LINESTRING(11 1,10 0,0 0)", "POLYGON((0 0,0 10,10 10,10 0,0 0))", "tcc+", "txu="); test_geometry("LINESTRING(0 0,10 0,11 1)", "POLYGON((0 0,0 10,10 10,10 0,0 0))", "tcu+", "tuc="); test_geometry("LINESTRING(10 0,0 0,-1 1)", "POLYGON((0 0,0 10,10 10,10 0,0 0))", "tcc+", "tuu="); - + // true hole test_geometry("LINESTRING(9 1,10 5,9 9)", "POLYGON((0 0,0 10,10 10,10 5,10 0,0 0)(2 2,10 5,2 8,2 2))", @@ -70,7 +71,7 @@ void test_all() expected("mcu+")("mic=")("tcc+")("txu=")); // SPIKE - NON-ENDPOINT - NON-OPPOSITE - + // spike - neq eq test_geometry("LINESTRING(2 2.0036594926050877,4 4,1 1.0022887548647630)", "POLYGON((0 0,4 4,6 3,6 0,0 0))", @@ -119,9 +120,9 @@ void test_all() test_geometry("LINESTRING(0 1,0 0,0 1)", "POLYGON((0 0,3 3,3 0,0 0))", expected("tuu+")); - + // SPIKE - NON-ENDPOINT - OPPOSITE - + // opposite - eq eq test_geometry("LINESTRING(6 6,4 4,0 0,2 2.0036594926050877)", "POLYGON((-1 -1,0 0,4 4,6 3,-1 -1))", diff --git a/test/algorithms/overlay/get_turns_linear_linear.cpp b/test/algorithms/overlay/get_turns_linear_linear.cpp index e2123ccb8..425f390c5 100644 --- a/test/algorithms/overlay/get_turns_linear_linear.cpp +++ b/test/algorithms/overlay/get_turns_linear_linear.cpp @@ -5,8 +5,9 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. -// This file was modified by Oracle on 2014-2021. -// Modifications copyright (c) 2014-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2014-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -33,7 +34,7 @@ void test_all() test_geometry("LINESTRING(0 0,2 0)", "LINESTRING(0 0,2 0)", "tii++", "txx=="); test_geometry("LINESTRING(0 0,2 0)", "LINESTRING(2 0,0 0)", "tix+=", "txi=+"); - + test_geometry("LINESTRING(1 0,1 1)", "LINESTRING(0 0,1 0,2 0)", "tuu++"); test_geometry("LINESTRING(1 0,0 0)", "LINESTRING(0 0,1 0,2 0)", "txi=+", "tiu+="); test_geometry("LINESTRING(1 0,2 0)", "LINESTRING(0 0,1 0,2 0)", "tii++", "txx=="); @@ -73,9 +74,9 @@ void test_all() test_geometry("LINESTRING(3 5,2 1,1 0)", "LINESTRING(0 0,1 0,2 1,3 5,4 0)", "tiu+=", "ecc==", "txi=+"); test_geometry("LINESTRING(0 0,10 0)", "LINESTRING(-1 -1,1 0,10 0,20 -1)", "mii++", "txu=="); - test_geometry("LINESTRING(0 0,10 0)", "LINESTRING(20 -1,10 0,1 0,-1 -1)", "miu+=", "txi=+"); + test_geometry("LINESTRING(0 0,10 0)", "LINESTRING(20 -1,10 0,1 0,-1 -1)", "miu+=", "txi=+"); test_geometry("LINESTRING(-1 -1,1 0,10 0,20 -1)", "LINESTRING(0 0,10 0)", "mii++", "tux=="); - test_geometry("LINESTRING(20 -1,10 0,1 0,-1 -1)", "LINESTRING(0 0,10 0)", "mui=+", "tix+="); + test_geometry("LINESTRING(20 -1,10 0,1 0,-1 -1)", "LINESTRING(0 0,10 0)", "mui=+", "tix+="); test_geometry("LINESTRING(-1 1,0 0,1 0,4 0,5 5,10 5,15 0,31 0)", "LINESTRING(-1 -1,0 0,1 0,2 0,2.5 1,3 0,30 0)", @@ -144,7 +145,7 @@ void test_all() expected("muu++")); test_geometry("LINESTRING(0 0,4 4,2 2)", "LINESTRING(0 4,5 4,6 3)", expected("muu++")); - + // SPIKE - NON-ENDPOINT - OPPOSITE // opposite - eq eq @@ -210,7 +211,7 @@ void test_all() expected("muu++")); test_geometry("LINESTRING(0 0,4 4,2 2)", "LINESTRING(0 4,5 4)", expected("muu++")); - + // 29.01.2015 if ( BOOST_GEOMETRY_CONDITION((std::is_same::value)) ) { @@ -373,7 +374,7 @@ void test_all() test_geometry("MULTILINESTRING((0 0,10 0,5 0))", "MULTILINESTRING((1 0,8 0,4 0))", expected("mii++")("mix+=")("mux==")("mui==")("mix+=")("mii+=")("mxu==")("mxi=+")); - + /*test_geometry("MULTILINESTRING((0 0,10 0,5 0))", "MULTILINESTRING((1 0,8 0,4 0),(2 0,9 0,5 0))", expected("mii")("ccc")("ccc")("txx"));*/ diff --git a/test/algorithms/overlay/get_turns_linear_linear_sph.cpp b/test/algorithms/overlay/get_turns_linear_linear_sph.cpp index 257e06acd..951792f5c 100644 --- a/test/algorithms/overlay/get_turns_linear_linear_sph.cpp +++ b/test/algorithms/overlay/get_turns_linear_linear_sph.cpp @@ -1,7 +1,8 @@ // Boost.Geometry // Unit Test -// Copyright (c) 2016-2021, Oracle and/or its affiliates. +// Copyright (c) 2016-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -26,7 +27,7 @@ void test_all() test_geometry("LINESTRING(0 0,2 0)", "LINESTRING(0 0,2 0)", "tii++", "txx=="); test_geometry("LINESTRING(0 0,2 0)", "LINESTRING(2 0,0 0)", "tix+=", "txi=+"); - + test_geometry("LINESTRING(1 0,1 1)", "LINESTRING(0 0,1 0,2 0)", "tuu++"); test_geometry("LINESTRING(1 0,0 0)", "LINESTRING(0 0,1 0,2 0)", "txi=+", "tiu+="); test_geometry("LINESTRING(1 0,2 0)", "LINESTRING(0 0,1 0,2 0)", "tii++", "txx=="); @@ -40,7 +41,7 @@ void test_all() test_geometry("LINESTRING(0 0,1 0,2 0)", "LINESTRING(1 1,1 0)", "tux++"); test_geometry("LINESTRING(0 0,1 0,2 0)", "LINESTRING(0 0,1 0)", "tii++", "tux=="); test_geometry("LINESTRING(0 0,1 0,2 0)", "LINESTRING(2 0,1 0)", "tix+=", "txi=+"); - + test_geometry("LINESTRING(0 0,2 0,4 0)", "LINESTRING(1 1,1 0,3 0,3 1)", "mii++", "ccc==", "muu=="); test_geometry("LINESTRING(0 0,2 0,4 0)", "LINESTRING(1 -1,1 0,3 0,3 -1)", "mii++", "ccc==", "muu=="); test_geometry("LINESTRING(0 0,2 0,4 0)", "LINESTRING(3 1,3 0,1 0,1 1)", "miu+=", "mui=+"); @@ -49,17 +50,17 @@ void test_all() test_geometry("LINESTRING(0 0,2 0,3 0,4 0,6 0)", "LINESTRING(2 -1,2 0,4 0,4 -1)", "tii++", "ccc==", "tuu=="); test_geometry("LINESTRING(0 0,2 0,3 0,4 0,6 0)", "LINESTRING(4 1,4 0,2 0,2 1)", "tiu+=", "tui=+"); test_geometry("LINESTRING(0 0,2 0,3 0,4 0,6 0)", "LINESTRING(4 -1,4 0,2 0,2 -1)", "tiu+=", "tui=+"); - + test_geometry("LINESTRING(0 0,1 0,2 1,3 5,4 0)", "LINESTRING(1 0,2 1,3 5)", "tii++", "ecc==", "tux=="); test_geometry("LINESTRING(0 0,1 0,2 1,3 5,4 0)", "LINESTRING(3 5,2 1,1 0)", "tix+=", "ecc==", "tui=+"); test_geometry("LINESTRING(1 0,2 1,3 5)", "LINESTRING(0 0,1 0,2 1,3 5,4 0)", "txu==", "ecc==", "tii++"); test_geometry("LINESTRING(3 5,2 1,1 0)", "LINESTRING(0 0,1 0,2 1,3 5,4 0)", "tiu+=", "ecc==", "txi=+"); - + test_geometry("LINESTRING(0 0,10 0)", "LINESTRING(-1 -1,1 0,10 0,20 -1)", "mii++", "txu=="); - test_geometry("LINESTRING(0 0,10 0)", "LINESTRING(20 -1,10 0,1 0,-1 -1)", "miu+=", "txi=+"); + test_geometry("LINESTRING(0 0,10 0)", "LINESTRING(20 -1,10 0,1 0,-1 -1)", "miu+=", "txi=+"); test_geometry("LINESTRING(-1 -1,1 0,10 0,20 -1)", "LINESTRING(0 0,10 0)", "mii++", "tux=="); - test_geometry("LINESTRING(20 -1,10 0,1 0,-1 -1)", "LINESTRING(0 0,10 0)", "mui=+", "tix+="); - + test_geometry("LINESTRING(20 -1,10 0,1 0,-1 -1)", "LINESTRING(0 0,10 0)", "mui=+", "tix+="); + test_geometry("LINESTRING(-1 1,0 0,1 0,4 0,5 5,10 5,15 0,31 0)", "LINESTRING(-1 -1,0 0,1 0,2 0,2.5 1,3 0,30 0)", expected("tii++")("ecc==")("muu==")("mii++")("muu==")("mii++")("mux==")); @@ -82,23 +83,23 @@ void test_all() "LINESTRING(-1 0,1 0,2 1.0004570537241201524198894179384922,3 2)", "mxi=+", "tix+=", "ecc=="); } - + test_geometry("LINESTRING(30 0,20 0,1 1,-1 -1)", "LINESTRING(0 -1,0 0,1 -1,20 0,25 0)", "mix+=", "tui=+", "muu++"); test_geometry("LINESTRING(0 -1,0 0,1 -1,20 0,25 0)", "LINESTRING(30 0,20 0,1 1,-1 -1)", "mxi=+", "tiu+=", "muu++"); - + test_geometry("LINESTRING(0 0,30 0)", "LINESTRING(4 0,4 1,20 1,5 0,1 0)", "muu++", "mui=+", "mix+="); test_geometry("LINESTRING(4 0,4 1,20 1,5 0,1 0)", "LINESTRING(0 0,30 0)", "muu++", "miu+=", "mxi=+"); - + test_geometry("LINESTRING(30 0,0 0)", "LINESTRING(1 0,5 0,20 1,4 1,4 0,5 0)", expected("mui=+")("miu+=")("mui=+")("mix+=")); test_geometry("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 0)", "LINESTRING(30 0,0 0)", expected("miu+=")("mui=+")("miu+=")("mxi=+")); - + test_geometry("LINESTRING(1 0,7 0,8 1)", "LINESTRING(0 0,10 0,10 10,4 -1)", expected("mii++")("iuu++")("muu==")); test_geometry("LINESTRING(1 0,7 0,8 1)", "LINESTRING(0 0,10 0,10 10,5 0,4 1)", expected("mii++")("muu++")("muu==")); - + // non-collinear test_geometry("LINESTRING(0 1,0 0)", "LINESTRING(0 0,1 0,2 0)", "txu++"); test_geometry("LINESTRING(0 1,0 0,1 1)", "LINESTRING(0 0,1 0,2 0)", "tuu++"); @@ -134,9 +135,9 @@ void test_all() expected("muu++")); test_geometry("LINESTRING(0 -2,0 0,0 -1)", "LINESTRING(-1 0,1 0,6 3)", expected("muu++")); - + // SPIKE - NON-ENDPOINT - OPPOSITE - + // opposite - eq eq test_geometry("LINESTRING(0 6,0 4,0 0,0 2)", "LINESTRING(0 -1,0 0,0 4,6 3)", expected("tiu+=")("txi=+")("tii=+")("mxu==")); @@ -157,7 +158,7 @@ void test_all() // opposite - neq eq test_geometry("LINESTRING(6 3,0 3,0 0)", "LINESTRING(0 0,0 2,0 3,0 1)", expected("txi=+")("tix+=")("tii+=")("mux==")); - + // SPIKE - ENDPOINT - NON-OPPOSITE // spike - neq eq @@ -200,7 +201,7 @@ void test_all() expected("muu++")); test_geometry("LINESTRING(0 -2,0 0,0 -1)", "LINESTRING(1 0,-1 0)", expected("muu++")); - + test_geometry("LINESTRING(3 0,0 0)", "LINESTRING(4 2,1 0,9 0)", @@ -222,7 +223,7 @@ void test_all() test_geometry("LINESTRING(0 0,5 0)", "LINESTRING(2 0,0 0,-10 0)", expected("tiu+=")("mui=+")); - + if ( BOOST_GEOMETRY_CONDITION((std::is_same::value)) ) { test_geometry("LINESTRING(0 -1, 10 -1, 20 1)", @@ -237,7 +238,7 @@ void test_all() test_geometry("LINESTRING(20 1, 10 -1, 0 0)", "LINESTRING(17.5 0.50051443471392, 15 0, 12.5 -0.50051443471392, 12 10)", expected("muu==")("ccc==")("mii++")); - + test_geometry("LINESTRING(0 -1, 10 -1, 20 1)", "LINESTRING(12.5 -0.50051443471392, 15 0, 17.5 0.50051443471392)", expected("mii++")("ccc==")("mux==")); diff --git a/test/algorithms/overlay/overlay.cpp b/test/algorithms/overlay/overlay.cpp index 25d027a5a..84a84e7b3 100644 --- a/test/algorithms/overlay/overlay.cpp +++ b/test/algorithms/overlay/overlay.cpp @@ -3,8 +3,9 @@ // Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2017-2021. -// Modifications copyright (c) 2017-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -404,15 +405,6 @@ void test_overlay(std::string const& caseid, strategy_type strategy; - using rescale_policy_type = typename bg::rescale_overlay_policy_type - < - Geometry, - Geometry - >::type; - - rescale_policy_type robust_policy - = bg::get_rescale_policy(g1, g2); - #if defined(TEST_WITH_SVG) map_visitor visitor(mapper); #else @@ -420,7 +412,7 @@ void test_overlay(std::string const& caseid, #endif Geometry result; - overlay::apply(g1, g2, robust_policy, std::back_inserter(result), + overlay::apply(g1, g2, std::back_inserter(result), strategy, visitor); std::string message; diff --git a/test/algorithms/overlay/self_intersection_points.cpp b/test/algorithms/overlay/self_intersection_points.cpp index 54d853ae2..cb681ed2c 100644 --- a/test/algorithms/overlay/self_intersection_points.cpp +++ b/test/algorithms/overlay/self_intersection_points.cpp @@ -5,8 +5,9 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. -// This file was modified by Oracle on 2017-2021. -// Modifications copyright (c) 2017-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -28,7 +29,6 @@ #include //#include #include -#include #include #include @@ -54,24 +54,21 @@ static void test_self_intersection_points(std::string const& case_id, double /*precision*/ = 0.001) { typedef typename bg::point_type::type point_type; - //typedef typename bg::rescale_policy_type::type rescale_policy_type; typedef typename bg::strategies::relate::services::default_strategy < Geometry, Geometry >::type strategy_type; - typedef bg::detail::no_rescale_policy rescale_policy_type; typedef bg::detail::overlay::turn_info turn_info; std::vector turns; strategy_type strategy; - rescale_policy_type rescale_policy; bg::detail::self_get_turn_points::no_interrupt_policy policy; bg::self_turns < bg::detail::overlay::assign_null_policy - >(geometry, strategy, rescale_policy, turns, policy); + >(geometry, strategy, turns, policy); typedef typename bg::coordinate_type::type ct; @@ -91,12 +88,6 @@ static void test_self_intersection_points(std::string const& case_id, BOOST_CHECK_EQUAL(expected_count, n); - typedef typename bg::rescale_policy_type::type - default_rescale_policy_type; - - default_rescale_policy_type default_robust_policy - = bg::get_rescale_policy(geometry, strategy); - if (expected_count > 0) { BOOST_CHECK_EQUAL(bg::intersects(geometry), true); @@ -105,7 +96,7 @@ static void test_self_intersection_points(std::string const& case_id, { try { - bg::detail::overlay::has_self_intersections(geometry, strategy, default_robust_policy); + bg::detail::overlay::has_self_intersections(geometry, strategy); BOOST_CHECK_MESSAGE(false, "Case " << case_id << " there are no self-intersections detected!"); } catch(...) @@ -119,7 +110,7 @@ static void test_self_intersection_points(std::string const& case_id, { try { - bg::detail::overlay::has_self_intersections(geometry, strategy, default_robust_policy); + bg::detail::overlay::has_self_intersections(geometry, strategy); } catch(...) { diff --git a/test/algorithms/overlay/sort_by_side.cpp b/test/algorithms/overlay/sort_by_side.cpp index 389588b52..702fbf0c0 100644 --- a/test/algorithms/overlay/sort_by_side.cpp +++ b/test/algorithms/overlay/sort_by_side.cpp @@ -4,8 +4,9 @@ // Copyright (c) 2016 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2021. -// Modifications copyright (c) 2017-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -124,11 +125,10 @@ template bool Reverse1, bool Reverse2, bool ReverseOut, typename GeometryOut, typename Geometry1, typename Geometry2, - typename RobustPolicy, typename Strategy + typename Strategy > std::vector apply_overlay( Geometry1 const& geometry1, Geometry2 const& geometry2, - RobustPolicy const& robust_policy, Strategy const& strategy) { using namespace boost::geometry; @@ -137,7 +137,7 @@ std::vector apply_overlay( typedef bg::detail::overlay::traversal_turn_info < point_type, - typename bg::detail::segment_ratio_type::type + typename bg::segment_ratio_type::type > turn_info; typedef std::deque turn_container_type; @@ -155,12 +155,12 @@ std::vector apply_overlay( < Reverse1, Reverse2, detail::overlay::assign_null_policy - >(geometry1, geometry2, strategy, robust_policy, turns, policy); + >(geometry1, geometry2, strategy, turns, policy); cluster_type clusters; bg::enrich_intersection_points(turns, - clusters, geometry1, geometry2, robust_policy, strategy); + clusters, geometry1, geometry2, strategy); // Gather cluster properties, with test option return ::gather_cluster_properties( @@ -188,15 +188,6 @@ void test_sort_by_side(std::string const& case_id, typedef typename boost::range_value::type geometry_out; - typedef typename bg::rescale_overlay_policy_type - < - Geometry, - Geometry - >::type rescale_policy_type; - - rescale_policy_type robust_policy - = bg::get_rescale_policy(g1, g2); - typedef typename bg::strategies::relate::services::default_strategy < Geometry, Geometry @@ -207,7 +198,7 @@ void test_sort_by_side(std::string const& case_id, std::vector result = ::apply_overlay < OverlayType, false, false, false, geometry_out - >(g1, g2, robust_policy, strategy); + >(g1, g2, strategy); BOOST_CHECK_MESSAGE(result == expected_open_count, " caseid=" << case_id diff --git a/test/algorithms/overlay/sort_by_side_basic.cpp b/test/algorithms/overlay/sort_by_side_basic.cpp index dc863e591..4943fccc8 100644 --- a/test/algorithms/overlay/sort_by_side_basic.cpp +++ b/test/algorithms/overlay/sort_by_side_basic.cpp @@ -4,8 +4,9 @@ // Copyright (c) 2017 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland. -// This file was modified by Oracle on 2017-2021. -// Modifications copyright (c) 2017-2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2017-2024. +// Modifications copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -49,12 +50,11 @@ std::string as_string(std::vector const& v) template < typename Geometry, typename Point, - typename RobustPolicy, typename Strategy + typename Strategy > std::vector apply_get_turns(std::string const& case_id, Geometry const& geometry1, Geometry const& geometry2, Point const& turn_point, Point const& origin_point, - RobustPolicy const& robust_policy, Strategy const& strategy, std::size_t expected_open_count, std::size_t expected_max_rank, @@ -69,7 +69,7 @@ std::vector apply_get_turns(std::string const& case_id, typedef bg::detail::overlay::turn_info < point_type, - typename bg::detail::segment_ratio_type::type + typename bg::segment_ratio_type::type > turn_info; typedef std::deque turn_container_type; @@ -80,7 +80,7 @@ std::vector apply_get_turns(std::string const& case_id, < false, false, detail::overlay::assign_null_policy - >(geometry1, geometry2, strategy, robust_policy, turns, policy); + >(geometry1, geometry2, strategy, turns, policy); // Define sorter, sorting counter-clockwise such that polygons are on the @@ -241,15 +241,6 @@ void test_basic(std::string const& case_id, bg::correct(g1); bg::correct(g2); - typedef typename bg::rescale_overlay_policy_type - < - multi_polygon, - multi_polygon - >::type rescale_policy_type; - - rescale_policy_type robust_policy - = bg::get_rescale_policy(g1, g2); - typedef typename bg::strategies::relate::services::default_strategy < multi_polygon, multi_polygon @@ -258,7 +249,7 @@ void test_basic(std::string const& case_id, strategy_type strategy; apply_get_turns(case_id, g1, g2, turn_point, origin_point, - robust_policy, strategy, + strategy, expected_open_count, expected_max_rank, expected_right_count); } diff --git a/test/algorithms/overlay/test_get_turns.hpp b/test/algorithms/overlay/test_get_turns.hpp index 3317685ca..32781201a 100644 --- a/test/algorithms/overlay/test_get_turns.hpp +++ b/test/algorithms/overlay/test_get_turns.hpp @@ -4,8 +4,9 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. -// This file was modified by Oracle on 2014, 2016-2020. -// Modifications copyright (c) 2014-2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2014, 2016-2024. +// Modifications copyright (c) 2014-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -51,7 +52,7 @@ inline expected_pusher expected(std::string const& ex) struct equal_turn { equal_turn(std::string const& s) : turn_ptr(&s) {} - + template bool operator()(T const& t) const { @@ -168,12 +169,11 @@ void check_geometry_range(Geometry1 const& g1, Expected const& expected, Strategy const& strategy) { - typedef bg::detail::no_rescale_policy robust_policy_type; typedef typename bg::point_type::type point_type; - typedef typename bg::detail::segment_ratio_type + typedef typename bg::segment_ratio_type < - point_type, robust_policy_type + point_type >::type segment_ratio_type; typedef bg::detail::overlay::turn_info @@ -193,8 +193,7 @@ void check_geometry_range(Geometry1 const& g1, std::vector detected; interrupt_policy_t interrupt_policy; - robust_policy_type robust_policy; - + // Don't switch the geometries typedef bg::detail::get_turns::get_turn_info_type < @@ -206,7 +205,7 @@ void check_geometry_range(Geometry1 const& g1, typename bg::tag::type, typename bg::tag::type, Geometry1, Geometry2, false, false, turn_policy_t - >::apply(0, g1, 1, g2, strategy, robust_policy, detected, interrupt_policy); + >::apply(0, g1, 1, g2, strategy, detected, interrupt_policy); bool ok = boost::size(expected) == detected.size(); diff --git a/test/algorithms/overlay/traverse.cpp b/test/algorithms/overlay/traverse.cpp index b1dfba1c9..ea99fb37c 100644 --- a/test/algorithms/overlay/traverse.cpp +++ b/test/algorithms/overlay/traverse.cpp @@ -3,8 +3,9 @@ // Copyright (c) 2010-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2021. -// Modifications copyright (c) 2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2021-2024. +// Modifications copyright (c) 2021-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -54,8 +55,6 @@ # include #endif -#include - #include #include @@ -145,24 +144,19 @@ struct test_traverse >::type strategy; typedef typename bg::point_type::type point_type; - typedef typename bg::rescale_policy_type::type - rescale_policy_type; - - rescale_policy_type rescale_policy - = bg::get_rescale_policy(g1, g2); typedef bg::detail::overlay::traversal_turn_info < point_type, - typename bg::detail::segment_ratio_type::type + typename bg::detail::segment_ratio_type::type > turn_info; std::vector turns; std::map clusters; bg::detail::get_turns::no_interrupt_policy policy; - bg::get_turns(g1, g2, strategy, rescale_policy, turns, policy); - bg::enrich_intersection_points(turns, clusters, g1, g2, rescale_policy, strategy); + bg::get_turns(g1, g2, strategy, turns, policy); + bg::enrich_intersection_points(turns, clusters, g1, g2, strategy); typedef bg::model::ring::type> ring_type; typedef std::vector out_vector; @@ -176,7 +170,7 @@ struct test_traverse Reverse1, Reverse2, G1, G2, OverlayType - >::apply(g1, g2, strategy, rescale_policy, turns, v, visitor); + >::apply(g1, g2, strategy, turns, v, visitor); // Check number of resulting rings BOOST_CHECK_MESSAGE(expected_count == boost::size(v), diff --git a/test/algorithms/overlay/traverse_ccw.cpp b/test/algorithms/overlay/traverse_ccw.cpp index 3e90e8d07..332d85e6c 100644 --- a/test/algorithms/overlay/traverse_ccw.cpp +++ b/test/algorithms/overlay/traverse_ccw.cpp @@ -3,8 +3,9 @@ // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2021. -// Modifications copyright (c) 2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2021-2024. +// Modifications copyright (c) 2021-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -30,8 +31,6 @@ # include #endif -#include - #include template @@ -52,16 +51,10 @@ intersect(Geometry1 const& g1, Geometry2 const& g2, std::string const& name, typedef typename bg::point_type::type point_type; - typedef typename bg::rescale_policy_type::type - rescale_policy_type; - - rescale_policy_type rescale_policy - = bg::get_rescale_policy(g1, g2); - typedef bg::detail::overlay::traversal_turn_info < point_type, - typename bg::detail::segment_ratio_type::type + typename bg::detail::segment_ratio_type::type > turn_info; std::vector turns; @@ -71,14 +64,14 @@ intersect(Geometry1 const& g1, Geometry2 const& g2, std::string const& name, rev::value, rev::value, bg::detail::overlay::assign_null_policy - >(g1, g2, rescale_policy, turns, policy); + >(g1, g2, turns, policy); bg::enrich_intersection_points < rev::value, rev::value, bg::overlay_intersection >(turns, bg::detail::overlay::operation_intersection, - g1, g2, rescale_policy, side_strategy_type()); + g1, g2, side_strategy_type()); typedef bg::model::ring::type> ring_type; typedef std::deque out_vector; @@ -88,7 +81,7 @@ intersect(Geometry1 const& g1, Geometry2 const& g2, std::string const& name, < rev::value, rev::value, Geometry1, Geometry2 - >::apply(g1, g2, op, rescale_policy, turns, v); + >::apply(g1, g2, op, turns, v); typename bg::coordinate_type::type result = 0.0; for (ring_type& ring : v) diff --git a/test/algorithms/set_operations/check_turn_less.hpp b/test/algorithms/set_operations/check_turn_less.hpp index 7534f6b27..5b6e0b67d 100644 --- a/test/algorithms/set_operations/check_turn_less.hpp +++ b/test/algorithms/set_operations/check_turn_less.hpp @@ -1,7 +1,7 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2015-2022, Oracle and/or its affiliates. - +// Copyright (c) 2015-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -81,8 +81,6 @@ struct check_turn_less Geometry1, Geometry2 >::type strategy_type; - typedef bg::detail::no_rescale_policy robust_policy_type; - typedef bg::detail::relate::turns::get_turns < Geometry1, @@ -95,7 +93,7 @@ struct check_turn_less typedef typename get_turns_type::template turn_info_type < - strategy_type, robust_policy_type + strategy_type >::type turn_info; typedef std::vector turns_container; @@ -106,7 +104,7 @@ struct check_turn_less get_turns_type::apply(turns, geometry1, geometry2, interrupt_policy, - strategy_type(), robust_policy_type()); + strategy_type()); typedef bg::detail::turns::less_seg_fraction_other_op<> turn_less_type; diff --git a/test/algorithms/set_operations/union/test_union.hpp b/test/algorithms/set_operations/union/test_union.hpp index 2f6957bee..21ae98c23 100644 --- a/test/algorithms/set_operations/union/test_union.hpp +++ b/test/algorithms/set_operations/union/test_union.hpp @@ -3,8 +3,9 @@ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2015-2021. -// Modifications copyright (c) 2015-2021 Oracle and/or its affiliates. +// This file was modified by Oracle on 2015-2024. +// Modifications copyright (c) 2015-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -145,17 +146,6 @@ void test_union(std::string const& caseid, G1 const& g1, G2 const& g2, } #endif - - -#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS) - std::cout << "*** case: " << caseid - << " area: " << area - << " points: " << n - << " polygons: " << boost::size(clip) - << " holes: " << holes - << std::endl; -#endif - if (! expected_count.empty()) { BOOST_CHECK_MESSAGE(expected_count.has(clip.size()), diff --git a/test/policies/Jamfile b/test/policies/Jamfile index fd3afcf2d..3cb92f095 100644 --- a/test/policies/Jamfile +++ b/test/policies/Jamfile @@ -5,6 +5,10 @@ # Copyright (c) 2009-2015 Mateusz Loskot, London, UK. # Copyright (c) 2009-2015 Adam Wulkiewicz, Lodz, Poland. # +# This file was modified by Oracle on 2024. +# Modifications copyright (c) 2024 Oracle and/or its affiliates. +# Contributed and/or modified by Vissarion Fysikopoulos, 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) @@ -12,5 +16,4 @@ test-suite boost-geometry-policies : [ run compare.cpp : : : : policies_compare ] - [ run rescale_policy.cpp : : : : policies_rescale_policy ] ; diff --git a/test/policies/rescale_policy.cpp b/test/policies/rescale_policy.cpp deleted file mode 100644 index 17c3e99e1..000000000 --- a/test/policies/rescale_policy.cpp +++ /dev/null @@ -1,132 +0,0 @@ -// Boost.Geometry (aka GGL, Generic Geometry Library) -// Unit Test - -// 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. - -// This file was modified by Oracle on 2021. -// Modifications copyright (c) 2021 Oracle and/or its affiliates. -// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle - -// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library -// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. - -// 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 -< - typename RescalePolicy, - typename Geometry1, - typename Geometry2 -> -void test_one(std::string const& wkt1, std::string const& wkt2, - std::string const& expected_coordinates) -{ - Geometry1 geometry1; - bg::read_wkt(wkt1, geometry1); - - Geometry2 geometry2; - bg::read_wkt(wkt2, geometry2); - - RescalePolicy rescale_policy - = bg::get_rescale_policy(geometry1, geometry2); - - typedef typename bg::point_type::type point_type; - typedef typename bg::robust_point_type - < - point_type, RescalePolicy - >::type robust_point_type; - - { - robust_point_type robust_point; - bg::recalculate(robust_point, *bg::points_begin(geometry1), rescale_policy); - - std::ostringstream out; - out << bg::get<0>(robust_point) << " " << bg::get<1>(robust_point); - BOOST_CHECK_EQUAL(expected_coordinates, out.str()); - } - - { - // Assuming Geometry1 is a polygon: - typedef bg::model::polygon polygon_type; - polygon_type geometry_out; - bg::recalculate(geometry_out, geometry1, rescale_policy); - robust_point_type p = *bg::points_begin(geometry_out); - - std::ostringstream out; - out << bg::get<0>(p) << " " << bg::get<1>(p); - BOOST_CHECK_EQUAL(expected_coordinates, out.str()); - } -} - - - -static std::string simplex_normal[2] = - {"POLYGON((0 1,2 5,5 3,0 1))", - "POLYGON((3 0,0 3,4 5,3 0))"}; - -static std::string simplex_large[2] = - {"POLYGON((0 1000,2000 5000,5000 3000,0 1000))", - "POLYGON((3000 0,0 3000,4000 5000,3000 0))"}; - - -template -void test_rescale(std::string const& expected_normal, std::string const& expected_large) -{ - using polygon = bg::model::polygon

; - - using rescale_policy_type = std::conditional_t - < - Rescale, - typename bg::rescale_policy_type

::type, - bg::detail::no_rescale_policy - >; - - test_one( - simplex_normal[0], simplex_normal[1], - expected_normal); - test_one( - simplex_large[0], simplex_large[1], - expected_large); -} - -template -void test_all(std::string const& expected_normal, std::string const& expected_large) -{ - typedef bg::model::d2::point_xy point_type; - test_rescale(expected_normal, expected_large); - //test_rescale(); -} - - -int test_main(int, char* []) -{ -#if defined(BOOST_GEOMETRY_USE_RESCALING) - test_all("-5000000 -3000000", "-5000000 -3000000"); - test_all("-5000000 -3000000", "-5000000 -3000000"); - test_all("0 1", "0 1000"); - test_all("0 1", "0 1000"); - // test_all(); // compiles but overflows -#endif - return 0; -} - diff --git a/test/robustness/overlay/areal_areal/general_intersection_precision.cpp b/test/robustness/overlay/areal_areal/general_intersection_precision.cpp index 29311d764..b071e58b6 100644 --- a/test/robustness/overlay/areal_areal/general_intersection_precision.cpp +++ b/test/robustness/overlay/areal_areal/general_intersection_precision.cpp @@ -3,8 +3,9 @@ // Copyright (c) 2019-2021 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2021. -// Modifications copyright (c) 2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2021-2024. +// Modifications copyright (c) 2021-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -80,18 +81,9 @@ bool test_overlay(std::string const& caseid, strategy_type strategy; - typedef typename bg::rescale_overlay_policy_type - < - Geometry, - Geometry - >::type rescale_policy_type; - - rescale_policy_type robust_policy - = bg::get_rescale_policy(g1, g2); - Geometry result; bg::detail::overlay::overlay_null_visitor visitor; - overlay::apply(g1, g2, robust_policy, std::back_inserter(result), + overlay::apply(g1, g2, std::back_inserter(result), strategy, visitor); auto const detected_area = bg::area(result); diff --git a/test/robustness/overlay/areal_areal/ticket_9081.cpp b/test/robustness/overlay/areal_areal/ticket_9081.cpp index 6de0d1ce6..8b77f565a 100644 --- a/test/robustness/overlay/areal_areal/ticket_9081.cpp +++ b/test/robustness/overlay/areal_areal/ticket_9081.cpp @@ -2,8 +2,9 @@ // Copyright (c) 2013-2015 Barend Gehrels, Amsterdam, the Netherlands. -// This file was modified by Oracle on 2021. -// Modifications copyright (c) 2021, Oracle and/or its affiliates. +// This file was modified by Oracle on 2021-2024. +// Modifications copyright (c) 2021-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -104,8 +105,6 @@ int main() multi_polygon, multi_polygon >::type strategy; - using rescale_policy_type = typename bg::rescale_policy_type::type; - try { @@ -126,10 +125,7 @@ int main() bg::correct(p); mp.push_back(p); - rescale_policy_type robust_policy - = bg::get_rescale_policy(mp, strategy); - - bg::detail::overlay::has_self_intersections(mp, strategy, robust_policy); + bg::detail::overlay::has_self_intersections(mp, strategy); std::ostringstream out; out << "original " << poly_list.size(); @@ -174,12 +170,9 @@ int main() #ifdef CHECK_SELF_INTERSECTIONS - rescale_policy_type robust_policy_i - = bg::get_rescale_policy(mp_i, strategy); - try { - boost::geometry::detail::overlay::has_self_intersections(mp_i, strategy, robust_policy_i); + boost::geometry::detail::overlay::has_self_intersections(mp_i, strategy); } catch(...) { @@ -189,7 +182,7 @@ int main() std::cout << boost::geometry::wkt(mp_i) << std::endl; try { - boost::geometry::detail::overlay::has_self_intersections(mp_i, strategy, robust_policy_i); + boost::geometry::detail::overlay::has_self_intersections(mp_i, strategy); } catch(...) { @@ -197,12 +190,9 @@ int main() break; } - rescale_policy_type robust_policy_d - = bg::get_rescale_policy(mp_d, strategy); - try { - boost::geometry::detail::overlay::has_self_intersections(mp_d, strategy, robust_policy_d); + boost::geometry::detail::overlay::has_self_intersections(mp_d, strategy); } catch(...) { @@ -213,12 +203,9 @@ int main() break; } - rescale_policy_type robust_policy_e - = bg::get_rescale_policy(mp_e, strategy); - try { - boost::geometry::detail::overlay::has_self_intersections(mp_e, strategy, robust_policy_e); + boost::geometry::detail::overlay::has_self_intersections(mp_e, strategy); } catch(...) { diff --git a/test/strategies/segment_intersection_collinear.cpp b/test/strategies/segment_intersection_collinear.cpp index eed44fbb0..4c92f677d 100644 --- a/test/strategies/segment_intersection_collinear.cpp +++ b/test/strategies/segment_intersection_collinear.cpp @@ -5,7 +5,8 @@ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. -// Copyright (c) 2017-2020, Oracle and/or its affiliates. +// Copyright (c) 2017-2024, Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library @@ -151,8 +152,8 @@ static void test_segment_ratio(std::string const& case_id, BOOST_CHECK_EQUAL(is.count, expected_count); - BOOST_CHECK_EQUAL(is.fractions[0].robust_ra, expected_a1); - BOOST_CHECK_EQUAL(is.fractions[0].robust_rb, expected_b1); + BOOST_CHECK_EQUAL(is.fractions[0].ra, expected_a1); + BOOST_CHECK_EQUAL(is.fractions[0].rb, expected_b1); BOOST_CHECK_EQUAL(bg::get<0>(is.intersections[0]), exp_ax1); BOOST_CHECK_EQUAL(bg::get<1>(is.intersections[0]), exp_ay1); @@ -160,8 +161,8 @@ static void test_segment_ratio(std::string const& case_id, { BOOST_CHECK_EQUAL(bg::get<0>(is.intersections[1]), exp_ax2); BOOST_CHECK_EQUAL(bg::get<1>(is.intersections[1]), exp_ay2); - BOOST_CHECK_EQUAL(is.fractions[1].robust_ra, expected_a2); - BOOST_CHECK_EQUAL(is.fractions[1].robust_rb, expected_b2); + BOOST_CHECK_EQUAL(is.fractions[1].ra, expected_a2); + BOOST_CHECK_EQUAL(is.fractions[1].rb, expected_b2); } } diff --git a/test/strategies/segment_intersection_sph.hpp b/test/strategies/segment_intersection_sph.hpp index d2bcc9dc9..8f80d8f3e 100644 --- a/test/strategies/segment_intersection_sph.hpp +++ b/test/strategies/segment_intersection_sph.hpp @@ -1,8 +1,9 @@ // Boost.Geometry // Unit Test -// This file was modified by Oracle on 2020. -// Modifications copyright (c) 2020 Oracle and/or its affiliates. +// This file was modified by Oracle on 2020-2024. +// Modifications copyright (c) 2020-2024 Oracle and/or its affiliates. +// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, @@ -109,8 +110,8 @@ void test_strategy_one(S1 const& s1, S2 const& s2, if (res_count > 0 && expected_count > 0) { P const& res_i0 = res.intersection_points.intersections[0]; - coord_t denom_a0 = res.intersection_points.fractions[0].robust_ra.denominator(); - coord_t denom_b0 = res.intersection_points.fractions[0].robust_rb.denominator(); + coord_t denom_a0 = res.intersection_points.fractions[0].ra.denominator(); + coord_t denom_b0 = res.intersection_points.fractions[0].rb.denominator(); BOOST_CHECK_MESSAGE(equals_relaxed(res_i0, ip0, eps_scale), "IP0: " << std::setprecision(16) << bg::wkt(res_i0) << " different than expected: " << bg::wkt(ip0) << " for " << bg::wkt(s1) << " and " << bg::wkt(s2)); @@ -122,8 +123,8 @@ void test_strategy_one(S1 const& s1, S2 const& s2, if (res_count > 1 && expected_count > 1) { P const& res_i1 = res.intersection_points.intersections[1]; - coord_t denom_a1 = res.intersection_points.fractions[1].robust_ra.denominator(); - coord_t denom_b1 = res.intersection_points.fractions[1].robust_rb.denominator(); + coord_t denom_a1 = res.intersection_points.fractions[1].ra.denominator(); + coord_t denom_b1 = res.intersection_points.fractions[1].rb.denominator(); BOOST_CHECK_MESSAGE(equals_relaxed(res_i1, ip1, eps_scale), "IP1: " << std::setprecision(16) << bg::wkt(res_i1) << " different than expected: " << bg::wkt(ip1) << " for " << bg::wkt(s1) << " and " << bg::wkt(s2));