Add indexed sweep with isolated points

This commit is contained in:
Simon Giraudot 2020-08-13 09:19:50 +02:00
parent 6022a74ac8
commit b7583f43d5
2 changed files with 28 additions and 2 deletions

View File

@ -297,8 +297,16 @@ overlay(const Arrangement_on_surface_2<GeometryTraitsA_2, TopologyTraitsA>& arr1
// Clear the result arrangement and perform the sweep to construct it. // Clear the result arrangement and perform the sweep to construct it.
arr.clear(); arr.clear();
surface_sweep.sweep(xcvs_vec.begin(), xcvs_vec.end(), if (std::is_same<typename Agt2::Base_traits_2::Bottom_side_category,
pts_vec.begin(), pts_vec.end()); Arr_contracted_side_tag>::value)
surface_sweep.sweep(xcvs_vec.begin(), xcvs_vec.end(),
pts_vec.begin(), pts_vec.end());
else
surface_sweep.indexed_sweep (xcvs_vec,
Indexed_sweep_accessor
<Arr_a, Arr_b, Ovl_x_monotone_curve_2>
(arr1, arr2),
pts_vec.begin(), pts_vec.end());
xcvs_vec.clear(); xcvs_vec.clear();
pts_vec.clear(); pts_vec.clear();
} }

View File

@ -322,6 +322,24 @@ public:
m_visitor->after_sweep(); m_visitor->after_sweep();
} }
template <typename EdgeRange, typename Accessor,
typename PointInputIterator>
void indexed_sweep (const EdgeRange& edges,
const Accessor& accessor,
PointInputIterator action_points_begin,
PointInputIterator action_points_end)
{
m_visitor->before_sweep();
accessor.before_init();
_init_indexed_sweep(edges, accessor);
accessor.after_init();
_init_points(action_points_begin, action_points_end, Event::ACTION);
//m_visitor->after_init();
_sweep();
_complete_sweep();
m_visitor->after_sweep();
}
/*! Get an iterator for the first subcurve in the status line. */ /*! Get an iterator for the first subcurve in the status line. */
Status_line_iterator status_line_begin() { return m_statusLine.begin(); } Status_line_iterator status_line_begin() { return m_statusLine.begin(); }