diff options
Diffstat (limited to 'boost/geometry/index/detail/algorithms/intersection_content.hpp')
-rw-r--r-- | boost/geometry/index/detail/algorithms/intersection_content.hpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/boost/geometry/index/detail/algorithms/intersection_content.hpp b/boost/geometry/index/detail/algorithms/intersection_content.hpp index 04dd4728be..437f90b46c 100644 --- a/boost/geometry/index/detail/algorithms/intersection_content.hpp +++ b/boost/geometry/index/detail/algorithms/intersection_content.hpp @@ -2,7 +2,7 @@ // // boxes union/intersection area/volume // -// Copyright (c) 2011-2016 Adam Wulkiewicz, Lodz, Poland. +// Copyright (c) 2011-2017 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 @@ -11,8 +11,9 @@ #ifndef BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_INTERSECTION_CONTENT_HPP #define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_INTERSECTION_CONTENT_HPP -#include <boost/geometry/algorithms/intersection.hpp> -#include <boost/geometry/strategies/intersection_strategies.hpp> +#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp> +#include <boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp> + #include <boost/geometry/index/detail/algorithms/content.hpp> namespace boost { namespace geometry { namespace index { namespace detail { @@ -23,11 +24,19 @@ namespace boost { namespace geometry { namespace index { namespace detail { template <typename Box> inline typename default_content_result<Box>::type intersection_content(Box const& box1, Box const& box2) { - if ( geometry::intersects(box1, box2) ) + bool const intersects = ! geometry::detail::disjoint::box_box<Box, Box>::apply(box1, box2); + + if ( intersects ) { Box box_intersection; - if ( geometry::intersection(box1, box2, box_intersection) ) - return detail::content(box_intersection); + bool const ok = geometry::detail::intersection::intersection_box_box + < + 0, geometry::dimension<Box>::value + >::apply(box1, box2, 0, box_intersection, 0); + if ( ok ) + { + return index::detail::content(box_intersection); + } } return 0; } |