robust_point_type
>::type robust_area_result_type;
- typedef typename strategy::point_in_geometry::services::default_strategy
+ typedef typename IntersectionStrategy::template point_in_geometry_strategy
<
robust_point_type,
robust_ring_type
typename IntersectionStrategy::cs_tag
>::type rescale_policy_type;
- typedef typename geometry::segment_ratio_type
+ typedef geometry::segment_ratio
<
- point_type,
- RobustPolicy
- >::type segment_ratio_type;
+ typename geometry::coordinate_type<robust_point_type>::type
+ > ratio_type;
typedef buffer_turn_info
<
point_type,
robust_point_type,
- segment_ratio_type
+ ratio_type
> buffer_turn_info_type;
typedef buffer_turn_operation
<
point_type,
- segment_ratio_type
+ ratio_type
> buffer_turn_operation_type;
typedef std::vector<buffer_turn_info_type> turn_vector_type;
int operation_index;
robust_point_type point;
segment_identifier seg_id;
- segment_ratio_type fraction;
+ ratio_type fraction;
};
struct piece
area_strategy_type m_area_strategy;
envelope_strategy_type m_envelope_strategy;
expand_strategy_type m_expand_strategy;
+ point_in_geometry_strategy_type m_point_in_geometry_strategy;
robust_area_strategy_type m_robust_area_strategy;
RobustPolicy const& m_robust_policy;
, m_has_deflated(false)
, m_intersection_strategy(intersection_strategy)
, m_side_strategy(intersection_strategy.get_side_strategy())
- , m_area_strategy(intersection_strategy.template get_area_strategy<point_type>())
+ , m_area_strategy(intersection_strategy
+ .template get_area_strategy<point_type>())
, m_envelope_strategy(intersection_strategy.get_envelope_strategy())
, m_expand_strategy(intersection_strategy.get_expand_strategy())
- , m_robust_area_strategy(intersection_strategy.template get_area_strategy<robust_point_type>())
+ , m_point_in_geometry_strategy(intersection_strategy
+ .template get_point_in_geometry_strategy<robust_point_type,
+ robust_ring_type>())
+ , m_robust_area_strategy(intersection_strategy
+ .template get_area_strategy<robust_point_type>())
, m_robust_policy(robust_policy)
{}
{
it->location = inside_buffer;
}
- if (it->count_on_original_boundary > 0)
- {
- it->location = inside_buffer;
- }
if (it->count_within_near_offsetted > 0)
{
// Within can have in rare cases a rounding issue. We don't discard this
typename IntersectionStrategy::disjoint_box_box_strategy_type
> original_ovelaps_box_type;
- turn_in_original_visitor<turn_vector_type> visitor(m_turns);
+ turn_in_original_visitor
+ <
+ turn_vector_type,
+ point_in_geometry_strategy_type
+ > visitor(m_turns, m_point_in_geometry_strategy);
+
geometry::partition
<
robust_box_type,
}
}
- static inline void determine_properties(piece& pc)
+ inline void determine_properties(piece& pc) const
{
pc.is_monotonic_increasing[0] = true;
pc.is_monotonic_increasing[1] = true;
pc.is_monotonic_decreasing[0] = true;
pc.is_monotonic_decreasing[1] = true;
- pc.is_convex = geometry::is_convex(pc.robust_ring);
+ pc.is_convex = geometry::is_convex(pc.robust_ring, m_side_strategy);
if (pc.offsetted_count < 2)
{
}
}
- inline void get_turns()
+ template <typename DistanceStrategy>
+ inline void get_turns(DistanceStrategy const& distance_strategy)
{
for(typename boost::range_iterator<sections_type>::type it
= boost::begin(monotonic_sections);
<
typename geometry::cs_tag<point_type>::type,
turn_vector_type, piece_vector_type,
- point_in_geometry_strategy_type
- > visitor(m_turns, m_pieces, point_in_geometry_strategy_type());
+ DistanceStrategy,
+ point_in_geometry_strategy_type,
+ side_strategy_type
+ > visitor(m_turns, m_pieces,
+ distance_strategy,
+ m_point_in_geometry_strategy,
+ m_side_strategy);
typedef turn_ovelaps_box
<
enrich_intersection_points<false, false, overlay_buffer>(m_turns,
m_clusters, offsetted_rings, offsetted_rings,
m_robust_policy,
- m_intersection_strategy.template get_point_in_geometry_strategy
- <
- buffered_ring<Ring>,
- buffered_ring<Ring>
- >());
+ m_intersection_strategy);
}
// Discards all rings which do have not-OK intersection points only.
int const geometry_code
= detail::within::point_in_geometry(any_point,
- original.m_ring, point_in_geometry_strategy_type());
+ original.m_ring, m_point_in_geometry_strategy);
if (geometry_code == -1)
{