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 fa3f5f5a2..35f3dafe2 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp @@ -37,18 +37,6 @@ template > struct get_turn_without_info { - typedef strategy_intersection - < - typename cs_tag::type, - Point1, - Point2, - typename TurnInfo::point_type - > si; - - typedef typename si::segment_intersection_strategy_type strategy; - - - template static inline OutputIterator apply( Point1 const& pi, Point1 const& pj, Point1 const& , @@ -57,6 +45,17 @@ struct get_turn_without_info RescalePolicy const& rescale_policy, OutputIterator out) { + typedef strategy_intersection + < + typename cs_tag::type, + Point1, + Point2, + typename TurnInfo::point_type, + RescalePolicy + > 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); @@ -120,7 +119,8 @@ inline void get_intersection_points(Geometry1 const& geometry1, typename cs_tag::type, Geometry1, Geometry2, - typename boost::range_value::type + typename boost::range_value::type, + RescalePolicy >::segment_intersection_strategy_type segment_intersection_strategy_type; detail::get_turns::no_interrupt_policy 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 de2b9b7f6..dc4c80db5 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp @@ -1020,7 +1020,8 @@ struct get_turn_info typename cs_tag::type, Point1, Point2, - typename TurnInfo::point_type + typename TurnInfo::point_type, + RescalePolicy > si; typedef typename si::segment_intersection_strategy_type strategy; diff --git a/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp b/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp index a6d01ab86..c439a7c31 100644 --- a/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp @@ -639,18 +639,9 @@ inline OutputIterator intersection_insert(Geometry1 const& geometry1, concept::check(); concept::check(); -#if defined(BOOST_GEOMETRY_RESCALE_TO_ROBUST) - typedef typename geometry::rescale_policy_type - < - typename geometry::point_type::type // TODO from both - >::type - rescale_policy_type; - - rescale_policy_type rescale_policy - = get_rescale_policy(geometry1, geometry2); -#else - detail::no_rescale_policy rescale_policy; -#endif + typedef typename Strategy::rescale_policy_type rescale_policy_type; + rescale_policy_type rescale_policy + = get_rescale_policy(geometry1, geometry2); return detail::intersection::insert < @@ -689,12 +680,19 @@ inline OutputIterator intersection_insert(Geometry1 const& geometry1, concept::check(); concept::check(); + typedef typename geometry::rescale_policy_type + < + typename geometry::point_type::type // TODO from both + >::type + rescale_policy_type; + typedef strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, - typename geometry::point_type::type + typename geometry::point_type::type, + rescale_policy_type > strategy; return intersection_insert(geometry1, geometry2, out, diff --git a/include/boost/geometry/algorithms/detail/rescale.hpp b/include/boost/geometry/algorithms/detail/rescale.hpp index ce4ab6d56..036aed32c 100644 --- a/include/boost/geometry/algorithms/detail/rescale.hpp +++ b/include/boost/geometry/algorithms/detail/rescale.hpp @@ -51,7 +51,7 @@ struct robust_point_type template struct segment_ratio_type { - // TODO set to coordinate type + // TODO set to coordinate type ? typedef segment_ratio type; }; diff --git a/include/boost/geometry/algorithms/difference.hpp b/include/boost/geometry/algorithms/difference.hpp index b0b146448..d5b1831bf 100644 --- a/include/boost/geometry/algorithms/difference.hpp +++ b/include/boost/geometry/algorithms/difference.hpp @@ -105,7 +105,8 @@ inline OutputIterator difference_insert(Geometry1 const& geometry1, typename cs_tag::type, Geometry1, Geometry2, - typename geometry::point_type::type + typename geometry::point_type::type, + RescalePolicy > strategy; return difference_insert(geometry1, geometry2, diff --git a/include/boost/geometry/algorithms/intersection.hpp b/include/boost/geometry/algorithms/intersection.hpp index 3486ecca4..74c39a913 100644 --- a/include/boost/geometry/algorithms/intersection.hpp +++ b/include/boost/geometry/algorithms/intersection.hpp @@ -195,27 +195,23 @@ inline bool intersection(Geometry1 const& geometry1, concept::check(); concept::check(); + typedef typename geometry::rescale_policy_type + < + typename geometry::point_type::type // TODO from both + >::type rescale_policy_type; + + rescale_policy_type rescale_policy + = get_rescale_policy(geometry1, geometry2); + typedef strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, - typename geometry::point_type::type + typename geometry::point_type::type, + rescale_policy_type > strategy; -#if defined(BOOST_GEOMETRY_RESCALE_TO_ROBUST) - typedef typename geometry::rescale_policy_type - < - typename geometry::point_type::type // TODO from both - >::type - rescale_policy_type; - - rescale_policy_type rescale_policy - = get_rescale_policy(geometry1, geometry2); -#else - detail::no_rescale_policy rescale_policy; -#endif - return dispatch::intersection < Geometry1, diff --git a/include/boost/geometry/algorithms/intersects.hpp b/include/boost/geometry/algorithms/intersects.hpp index 970a46b8b..6154e555b 100644 --- a/include/boost/geometry/algorithms/intersects.hpp +++ b/include/boost/geometry/algorithms/intersects.hpp @@ -49,14 +49,6 @@ inline bool intersects(Geometry const& geometry) typedef detail::overlay::turn_info turn_info; std::deque turns; - typedef typename strategy_intersection - < - typename cs_tag::type, - Geometry, - Geometry, - point_type - >::segment_intersection_strategy_type segment_intersection_strategy_type; - typedef detail::overlay::get_turn_info < detail::overlay::assign_null_policy @@ -65,6 +57,15 @@ inline bool intersects(Geometry const& geometry) typedef typename rescale_policy_type::type rescale_policy_type; + typedef typename strategy_intersection + < + typename cs_tag::type, + Geometry, + Geometry, + point_type, + rescale_policy_type + >::segment_intersection_strategy_type segment_intersection_strategy_type; + rescale_policy_type rescale_policy = get_rescale_policy(geometry); diff --git a/include/boost/geometry/algorithms/sym_difference.hpp b/include/boost/geometry/algorithms/sym_difference.hpp index 2b5f8d6f9..21bf51fb6 100644 --- a/include/boost/geometry/algorithms/sym_difference.hpp +++ b/include/boost/geometry/algorithms/sym_difference.hpp @@ -116,7 +116,8 @@ inline OutputIterator sym_difference_insert(Geometry1 const& geometry1, typename cs_tag::type, Geometry1, Geometry2, - typename geometry::point_type::type + typename geometry::point_type::type, + RescalePolicy > strategy_type; return sym_difference_insert(geometry1, geometry2, rescale_policy, out, strategy_type()); diff --git a/include/boost/geometry/algorithms/union.hpp b/include/boost/geometry/algorithms/union.hpp index 5eeb7be34..d73c6af85 100644 --- a/include/boost/geometry/algorithms/union.hpp +++ b/include/boost/geometry/algorithms/union.hpp @@ -157,18 +157,9 @@ inline OutputIterator union_insert(Geometry1 const& geometry1, concept::check(); concept::check(); -#if defined(BOOST_GEOMETRY_RESCALE_TO_ROBUST) - typedef typename geometry::rescale_policy_type - < - typename geometry::point_type::type // TODO from both - >::type - rescale_policy_type; - - rescale_policy_type rescale_policy - = get_rescale_policy(geometry1, geometry2); -#else - detail::no_rescale_policy rescale_policy; -#endif + typedef typename Strategy::rescale_policy_type rescale_policy_type; + rescale_policy_type rescale_policy + = get_rescale_policy(geometry1, geometry2); return detail::union_::insert(geometry1, geometry2, rescale_policy, out, strategy); } @@ -202,12 +193,18 @@ inline OutputIterator union_insert(Geometry1 const& geometry1, concept::check(); concept::check(); + typedef typename geometry::rescale_policy_type + < + typename geometry::point_type::type // TODO from both + >::type rescale_policy_type; + typedef strategy_intersection < typename cs_tag::type, Geometry1, Geometry2, - typename geometry::point_type::type + typename geometry::point_type::type, + rescale_policy_type > strategy; return union_insert(geometry1, geometry2, out, strategy()); diff --git a/include/boost/geometry/strategies/intersection.hpp b/include/boost/geometry/strategies/intersection.hpp index 5fa172437..233796a25 100644 --- a/include/boost/geometry/strategies/intersection.hpp +++ b/include/boost/geometry/strategies/intersection.hpp @@ -36,21 +36,27 @@ template typename Geometry1, typename Geometry2, typename IntersectionPoint, + typename RescalePolicy, typename CalculationType = void > struct strategy_intersection { private : + // for development BOOST_STATIC_ASSERT((! boost::is_same::type::value)); + typedef typename geometry::point_type::type point1_type; typedef typename geometry::point_type::type point2_type; typedef typename model::referring_segment segment1_type; typedef typename model::referring_segment segment2_type; typedef segment_intersection_points + < + IntersectionPoint, + typename geometry::segment_ratio_type < - IntersectionPoint, - segment_ratio // TODO finetune this - > ip_type; + IntersectionPoint, RescalePolicy + >::type + > ip_type; public: typedef strategy::intersection::relate_cartesian_segments @@ -71,6 +77,8 @@ public: Tag, CalculationType >::type side_strategy_type; + + typedef RescalePolicy rescale_policy_type; }; diff --git a/test/algorithms/test_intersection.hpp b/test/algorithms/test_intersection.hpp index c9be39cd9..5a792448b 100644 --- a/test/algorithms/test_intersection.hpp +++ b/test/algorithms/test_intersection.hpp @@ -59,6 +59,7 @@ typename bg::default_area_result::type test_intersection(std::string const& G1, G2, point_type, + typename bg::rescale_policy_type::type, CalculationType > strategy;