| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- // Boost.Geometry (aka GGL, Generic Geometry Library)
- // 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)
- #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP
- #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP
- #include <cstddef>
- #include <boost/range/size.hpp>
- #include <boost/geometry/algorithms/detail/overlay/graph/detect_biconnected_components.hpp>
- #include <boost/geometry/algorithms/detail/overlay/graph/fill_ring_turn_info_map.hpp>
- #include <boost/geometry/algorithms/detail/overlay/graph/traverse_graph.hpp>
- #include <boost/geometry/util/constexpr.hpp>
- namespace boost { namespace geometry
- {
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace overlay
- {
- /*!
- \brief Traverses through intersection points / geometries
- \ingroup overlay
- */
- template
- <
- bool Reverse1, bool Reverse2,
- typename Geometry1,
- typename Geometry2,
- overlay_type OverlayType
- >
- class traverse
- {
- public :
- template
- <
- typename IntersectionStrategy,
- typename Turns,
- typename Rings,
- typename TurnInfoMap,
- typename Clusters,
- typename Visitor
- >
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- IntersectionStrategy const& intersection_strategy,
- Turns& turns, Rings& rings,
- TurnInfoMap& turn_info_map,
- Clusters& clusters,
- Visitor& visitor)
- {
- constexpr operation_type target_operation = operation_from_overlay<OverlayType>::value;
- detect_biconnected_components<target_operation>(turns, clusters);
- traverse_graph
- <
- Reverse1, Reverse2, OverlayType,
- Geometry1, Geometry2,
- Turns, Clusters,
- IntersectionStrategy
- > traverser(geometry1, geometry2, turns, clusters,
- intersection_strategy);
- traverser.iterate(rings);
- update_ring_turn_info_map(turn_info_map, turns);
- }
- };
- }} // namespace detail::overlay
- #endif // DOXYGEN_NO_DETAIL
- }} // namespace boost::geometry
- #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP
- // remove
|