summaryrefslogtreecommitdiff log msg author committer range
blob: 99281eaecb33577733485bb4a8f4530d7fe8852b (plain)
 ```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 ``` ``````// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 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_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace get_intersection_points { template < typename Point1, typename Point2, typename TurnInfo > struct get_turn_without_info { template static inline OutputIterator apply( Point1 const& pi, Point1 const& pj, Point1 const& /*pk*/, Point2 const& qi, Point2 const& qj, Point2 const& /*qk*/, bool /*is_p_first*/, bool /*is_p_last*/, bool /*is_q_first*/, bool /*is_q_last*/, TurnInfo const& , RobustPolicy const& robust_policy, OutputIterator out) { typedef intersection_strategies < typename cs_tag::type, Point1, Point2, typename TurnInfo::point_type, RobustPolicy > si; typedef typename si::segment_intersection_strategy_type strategy; typedef model::referring_segment segment_type1; typedef model::referring_segment segment_type2; segment_type1 p1(pi, pj); segment_type2 q1(qi, qj); typedef typename geometry::robust_point_type < Point1, RobustPolicy >::type robust_point_type; robust_point_type pi_rob, pj_rob, qi_rob, qj_rob; geometry::recalculate(pi_rob, pi, robust_policy); geometry::recalculate(pj_rob, pj, robust_policy); geometry::recalculate(qi_rob, qi, robust_policy); geometry::recalculate(qj_rob, qj, robust_policy); typename strategy::return_type result = strategy::apply(p1, q1, robust_policy, pi_rob, pj_rob, qi_rob, qj_rob); for (std::size_t i = 0; i < result.template get<0>().count; i++) { TurnInfo tp; geometry::convert(result.template get<0>().intersections[i], tp.point); *out++ = tp; } return out; } }; }} // namespace detail::get_intersection_points #endif // DOXYGEN_NO_DETAIL template < typename Geometry1, typename Geometry2, typename RobustPolicy, typename Turns > inline void get_intersection_points(Geometry1 const& geometry1, Geometry2 const& geometry2, RobustPolicy const& robust_policy, Turns& turns) { concepts::check_concepts_and_equal_dimensions(); typedef detail::get_intersection_points::get_turn_without_info < typename point_type::type, typename point_type::type, typename boost::range_value::type > TurnPolicy; detail::get_turns::no_interrupt_policy interrupt_policy; boost::mpl::if_c < reverse_dispatch::type::value, dispatch::get_turns_reversed < typename tag::type, typename tag::type, Geometry1, Geometry2, false, false, TurnPolicy >, dispatch::get_turns < typename tag::type, typename tag::type, Geometry1, Geometry2, false, false, TurnPolicy > >::type::apply( 0, geometry1, 1, geometry2, robust_policy, turns, interrupt_policy); } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP ``````