// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
+// This file was modified by Oracle on 2014, 2017, 2018, 2019.
+// Modifications copyright (c) 2014-2019 Oracle and/or its affiliates.
// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
typename LineString,
typename Point,
typename Operation,
- typename SideStrategy,
+ typename Strategy,
typename RobustPolicy
>
static inline void enter(LineStringOut& current_piece,
segment_identifier& segment_id,
signed_size_type , Point const& point,
Operation const& operation,
- SideStrategy const& ,
+ Strategy const& strategy,
RobustPolicy const& ,
OutputIterator& )
{
// On enter, append the intersection point and remember starting point
// TODO: we don't check on spikes for linestrings (?). Consider this.
- detail::overlay::append_no_duplicates(current_piece, point);
+ detail::overlay::append_no_duplicates(current_piece, point, strategy.get_equals_point_point_strategy());
segment_id = operation.seg_id;
}
typename LineString,
typename Point,
typename Operation,
- typename SideStrategy,
+ typename Strategy,
typename RobustPolicy
>
static inline void leave(LineStringOut& current_piece,
segment_identifier& segment_id,
signed_size_type index, Point const& point,
Operation const& ,
- SideStrategy const& strategy,
+ Strategy const& strategy,
RobustPolicy const& robust_policy,
OutputIterator& out)
{
<
false, RemoveSpikes
>::apply(linestring, segment_id, index, strategy, robust_policy, current_piece);
- detail::overlay::append_no_duplicates(current_piece, point);
+ detail::overlay::append_no_duplicates(current_piece, point, strategy.get_equals_point_point_strategy());
if (::boost::size(current_piece) > 1)
{
*out++ = current_piece;
typename LineString,
typename Point,
typename Operation,
- typename SideStrategy,
+ typename Strategy,
typename RobustPolicy
>
static inline void enter(LineStringOut& current_piece,
segment_identifier& segment_id,
signed_size_type index, Point const& point,
Operation const& operation,
- SideStrategy const& strategy,
+ Strategy const& strategy,
RobustPolicy const& robust_policy,
OutputIterator& out)
{
typename LineString,
typename Point,
typename Operation,
- typename SideStrategy,
+ typename Strategy,
typename RobustPolicy
>
static inline void leave(LineStringOut& current_piece,
segment_identifier& segment_id,
signed_size_type index, Point const& point,
Operation const& operation,
- SideStrategy const& strategy,
+ Strategy const& strategy,
RobustPolicy const& robust_policy,
OutputIterator& out)
{
typedef following::action_selector<OverlayType, RemoveSpikes> action;
+ typedef typename Strategy::cs_tag cs_tag;
+
typename Strategy::template point_in_geometry_strategy
<
LineString, Polygon
#ifdef BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
std::sort(boost::begin(turns), boost::end(turns), sort_on_segment<turn_type>());
#else
- typedef relate::turns::less<0, relate::turns::less_op_linear_areal_single<0> > turn_less;
+ typedef relate::turns::less
+ <
+ 0, relate::turns::less_op_linear_areal_single<0>, cs_tag
+ > turn_less;
std::sort(boost::begin(turns), boost::end(turns), turn_less());
#endif