mirror of
https://github.com/boostorg/geometry.git
synced 2026-02-09 11:12:21 +00:00
[geometry] Added RescalePolicy (to get SegmentRatio) to strategy_intersection
Some creations/instances of rescale policy had therefore to be moved
This commit is contained in:
@@ -37,18 +37,6 @@ template
|
||||
>
|
||||
struct get_turn_without_info
|
||||
{
|
||||
typedef strategy_intersection
|
||||
<
|
||||
typename cs_tag<typename TurnInfo::point_type>::type,
|
||||
Point1,
|
||||
Point2,
|
||||
typename TurnInfo::point_type
|
||||
> si;
|
||||
|
||||
typedef typename si::segment_intersection_strategy_type strategy;
|
||||
|
||||
|
||||
|
||||
template <typename RescalePolicy, typename OutputIterator>
|
||||
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<typename TurnInfo::point_type>::type,
|
||||
Point1,
|
||||
Point2,
|
||||
typename TurnInfo::point_type,
|
||||
RescalePolicy
|
||||
> si;
|
||||
|
||||
typedef typename si::segment_intersection_strategy_type strategy;
|
||||
|
||||
typedef model::referring_segment<Point1 const> segment_type1;
|
||||
typedef model::referring_segment<Point1 const> segment_type2;
|
||||
segment_type1 p1(pi, pj);
|
||||
@@ -120,7 +119,8 @@ inline void get_intersection_points(Geometry1 const& geometry1,
|
||||
typename cs_tag<Geometry1>::type,
|
||||
Geometry1,
|
||||
Geometry2,
|
||||
typename boost::range_value<Turns>::type
|
||||
typename boost::range_value<Turns>::type,
|
||||
RescalePolicy
|
||||
>::segment_intersection_strategy_type segment_intersection_strategy_type;
|
||||
|
||||
detail::get_turns::no_interrupt_policy interrupt_policy;
|
||||
|
||||
@@ -1020,7 +1020,8 @@ struct get_turn_info
|
||||
typename cs_tag<typename TurnInfo::point_type>::type,
|
||||
Point1,
|
||||
Point2,
|
||||
typename TurnInfo::point_type
|
||||
typename TurnInfo::point_type,
|
||||
RescalePolicy
|
||||
> si;
|
||||
|
||||
typedef typename si::segment_intersection_strategy_type strategy;
|
||||
|
||||
@@ -639,18 +639,9 @@ inline OutputIterator intersection_insert(Geometry1 const& geometry1,
|
||||
concept::check<Geometry1 const>();
|
||||
concept::check<Geometry2 const>();
|
||||
|
||||
#if defined(BOOST_GEOMETRY_RESCALE_TO_ROBUST)
|
||||
typedef typename geometry::rescale_policy_type
|
||||
<
|
||||
typename geometry::point_type<Geometry1>::type // TODO from both
|
||||
>::type
|
||||
rescale_policy_type;
|
||||
|
||||
rescale_policy_type rescale_policy
|
||||
= get_rescale_policy<rescale_policy_type>(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<rescale_policy_type>(geometry1, geometry2);
|
||||
|
||||
return detail::intersection::insert
|
||||
<
|
||||
@@ -689,12 +680,19 @@ inline OutputIterator intersection_insert(Geometry1 const& geometry1,
|
||||
concept::check<Geometry1 const>();
|
||||
concept::check<Geometry2 const>();
|
||||
|
||||
typedef typename geometry::rescale_policy_type
|
||||
<
|
||||
typename geometry::point_type<Geometry1>::type // TODO from both
|
||||
>::type
|
||||
rescale_policy_type;
|
||||
|
||||
typedef strategy_intersection
|
||||
<
|
||||
typename cs_tag<GeometryOut>::type,
|
||||
Geometry1,
|
||||
Geometry2,
|
||||
typename geometry::point_type<GeometryOut>::type
|
||||
typename geometry::point_type<GeometryOut>::type,
|
||||
rescale_policy_type
|
||||
> strategy;
|
||||
|
||||
return intersection_insert<GeometryOut>(geometry1, geometry2, out,
|
||||
|
||||
@@ -51,7 +51,7 @@ struct robust_point_type
|
||||
template <typename Point, typename Policy>
|
||||
struct segment_ratio_type
|
||||
{
|
||||
// TODO set to coordinate type
|
||||
// TODO set to coordinate type ?
|
||||
typedef segment_ratio<boost::long_long_type> type;
|
||||
};
|
||||
|
||||
|
||||
@@ -105,7 +105,8 @@ inline OutputIterator difference_insert(Geometry1 const& geometry1,
|
||||
typename cs_tag<GeometryOut>::type,
|
||||
Geometry1,
|
||||
Geometry2,
|
||||
typename geometry::point_type<GeometryOut>::type
|
||||
typename geometry::point_type<GeometryOut>::type,
|
||||
RescalePolicy
|
||||
> strategy;
|
||||
|
||||
return difference_insert<GeometryOut>(geometry1, geometry2,
|
||||
|
||||
@@ -195,27 +195,23 @@ inline bool intersection(Geometry1 const& geometry1,
|
||||
concept::check<Geometry1 const>();
|
||||
concept::check<Geometry2 const>();
|
||||
|
||||
typedef typename geometry::rescale_policy_type
|
||||
<
|
||||
typename geometry::point_type<Geometry1>::type // TODO from both
|
||||
>::type rescale_policy_type;
|
||||
|
||||
rescale_policy_type rescale_policy
|
||||
= get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
|
||||
|
||||
typedef strategy_intersection
|
||||
<
|
||||
typename cs_tag<Geometry1>::type,
|
||||
Geometry1,
|
||||
Geometry2,
|
||||
typename geometry::point_type<Geometry1>::type
|
||||
typename geometry::point_type<Geometry1>::type,
|
||||
rescale_policy_type
|
||||
> strategy;
|
||||
|
||||
#if defined(BOOST_GEOMETRY_RESCALE_TO_ROBUST)
|
||||
typedef typename geometry::rescale_policy_type
|
||||
<
|
||||
typename geometry::point_type<Geometry1>::type // TODO from both
|
||||
>::type
|
||||
rescale_policy_type;
|
||||
|
||||
rescale_policy_type rescale_policy
|
||||
= get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
|
||||
#else
|
||||
detail::no_rescale_policy rescale_policy;
|
||||
#endif
|
||||
|
||||
return dispatch::intersection
|
||||
<
|
||||
Geometry1,
|
||||
|
||||
@@ -49,14 +49,6 @@ inline bool intersects(Geometry const& geometry)
|
||||
typedef detail::overlay::turn_info<point_type> turn_info;
|
||||
std::deque<turn_info> turns;
|
||||
|
||||
typedef typename strategy_intersection
|
||||
<
|
||||
typename cs_tag<Geometry>::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<point_type>::type
|
||||
rescale_policy_type;
|
||||
|
||||
typedef typename strategy_intersection
|
||||
<
|
||||
typename cs_tag<Geometry>::type,
|
||||
Geometry,
|
||||
Geometry,
|
||||
point_type,
|
||||
rescale_policy_type
|
||||
>::segment_intersection_strategy_type segment_intersection_strategy_type;
|
||||
|
||||
rescale_policy_type rescale_policy
|
||||
= get_rescale_policy<rescale_policy_type>(geometry);
|
||||
|
||||
|
||||
@@ -116,7 +116,8 @@ inline OutputIterator sym_difference_insert(Geometry1 const& geometry1,
|
||||
typename cs_tag<GeometryOut>::type,
|
||||
Geometry1,
|
||||
Geometry2,
|
||||
typename geometry::point_type<GeometryOut>::type
|
||||
typename geometry::point_type<GeometryOut>::type,
|
||||
RescalePolicy
|
||||
> strategy_type;
|
||||
|
||||
return sym_difference_insert<GeometryOut>(geometry1, geometry2, rescale_policy, out, strategy_type());
|
||||
|
||||
@@ -157,18 +157,9 @@ inline OutputIterator union_insert(Geometry1 const& geometry1,
|
||||
concept::check<Geometry2 const>();
|
||||
concept::check<GeometryOut>();
|
||||
|
||||
#if defined(BOOST_GEOMETRY_RESCALE_TO_ROBUST)
|
||||
typedef typename geometry::rescale_policy_type
|
||||
<
|
||||
typename geometry::point_type<Geometry1>::type // TODO from both
|
||||
>::type
|
||||
rescale_policy_type;
|
||||
|
||||
rescale_policy_type rescale_policy
|
||||
= get_rescale_policy<rescale_policy_type>(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<rescale_policy_type>(geometry1, geometry2);
|
||||
|
||||
return detail::union_::insert<GeometryOut>(geometry1, geometry2, rescale_policy, out, strategy);
|
||||
}
|
||||
@@ -202,12 +193,18 @@ inline OutputIterator union_insert(Geometry1 const& geometry1,
|
||||
concept::check<Geometry2 const>();
|
||||
concept::check<GeometryOut>();
|
||||
|
||||
typedef typename geometry::rescale_policy_type
|
||||
<
|
||||
typename geometry::point_type<Geometry1>::type // TODO from both
|
||||
>::type rescale_policy_type;
|
||||
|
||||
typedef strategy_intersection
|
||||
<
|
||||
typename cs_tag<GeometryOut>::type,
|
||||
Geometry1,
|
||||
Geometry2,
|
||||
typename geometry::point_type<GeometryOut>::type
|
||||
typename geometry::point_type<GeometryOut>::type,
|
||||
rescale_policy_type
|
||||
> strategy;
|
||||
|
||||
return union_insert<GeometryOut>(geometry1, geometry2, out, strategy());
|
||||
|
||||
@@ -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<RescalePolicy, void>::type::value));
|
||||
|
||||
typedef typename geometry::point_type<Geometry1>::type point1_type;
|
||||
typedef typename geometry::point_type<Geometry2>::type point2_type;
|
||||
typedef typename model::referring_segment<point1_type const> segment1_type;
|
||||
typedef typename model::referring_segment<point2_type const> segment2_type;
|
||||
|
||||
typedef segment_intersection_points
|
||||
<
|
||||
IntersectionPoint,
|
||||
typename geometry::segment_ratio_type
|
||||
<
|
||||
IntersectionPoint,
|
||||
segment_ratio<boost::long_long_type> // 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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ typename bg::default_area_result<G1>::type test_intersection(std::string const&
|
||||
G1,
|
||||
G2,
|
||||
point_type,
|
||||
typename bg::rescale_policy_type<point_type>::type,
|
||||
CalculationType
|
||||
> strategy;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user