From ab97c7593da5be412d23dce0601b7e39722c1bbb Mon Sep 17 00:00:00 2001 From: Sebastian Morr Date: Tue, 24 Jun 2014 14:55:02 +0200 Subject: [PATCH] Remove unused ICollisionDetector --- .../new/AABB_Collision_detector.h | 5 +- .../Minkowski_sum_2/new/ICollisionDetector.h | 14 - .../new/SweepCollisionDetection.h | 547 ------------------ 3 files changed, 2 insertions(+), 564 deletions(-) delete mode 100644 Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/ICollisionDetector.h delete mode 100644 Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/SweepCollisionDetection.h diff --git a/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/AABB_Collision_detector.h b/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/AABB_Collision_detector.h index a449081ca7f..8ae2b99a95e 100644 --- a/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/AABB_Collision_detector.h +++ b/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/AABB_Collision_detector.h @@ -7,10 +7,9 @@ #include "AABB_2d_traits.h" // for AABB_traits_2 #include "AABB_segment_2_primitive.h" // for AABB_segment_2_primitive #include "AABB_tree_mod.h" // for AABB_tree -#include "ICollisionDetector.h" // for ICollisionDetector namespace CGAL { -template class AABBCollisionDetector : public ICollisionDetector< Kernel_, Container_> { +template class AABBCollisionDetector { public: @@ -33,7 +32,7 @@ public: AABBCollisionDetector(Polygon_2 &p, Polygon_2 &q) : m_stationary_tree((p.edges_begin()), (p.edges_end())), m_translating_tree((q.edges_begin()), (q.edges_end())), m_p(q), m_q(p) { } - virtual bool checkCollision(const Polygon_2 &p, const Polygon_2 &q) { + bool checkCollision(const Polygon_2 &p, const Polygon_2 &q) { if (m_stationary_tree.do_intersect_join(m_translating_tree, m_translation_point, m_p, m_q)) { return true; } diff --git a/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/ICollisionDetector.h b/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/ICollisionDetector.h deleted file mode 100644 index 47985e16e49..00000000000 --- a/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/ICollisionDetector.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef ICOLLISIONDETECTOR_HEADER -#define ICOLLISIONDETECTOR_HEADER - -#include - -template class ICollisionDetector { -public: - typedef Kernel_ Kernel; - typedef CGAL::Polygon_2 Polygon_2; - - virtual bool checkCollision(const Polygon_2 &p, const Polygon_2 &q) = 0; -}; - -#endif diff --git a/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/SweepCollisionDetection.h b/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/SweepCollisionDetection.h deleted file mode 100644 index 39d8fce9999..00000000000 --- a/Minkowski_sum_2/include/CGAL/Minkowski_sum_2/new/SweepCollisionDetection.h +++ /dev/null @@ -1,547 +0,0 @@ -#ifndef SWEEPCOLLISIONDETECTOR_HEADER -#define SWEEPCOLLISIONDETECTOR_HEADER - -#include // for Arrangement_2 -#include -#include // for Arr_curve_end -#include // for Arr_segment_traits_2 -#include // for make_object, object_cast -#include // for Polygon_2 -#include // for Sweep_line_2 -#include // for make_x_monotone -#include -#include // for Comparison_result, etc - -#include "ICollisionDetector.h" // for ICollisionDetector - -#include // for NULL -#include // for back_inserter, distance -#include // for list -#include // for pair, make_pair -#include // for vector<>::reference, vector - -/* A simple sweep-line visitor that determines if there are intersections -* in the interiors of the given curve set. -*/ - -namespace CGAL { - -enum Segment_color {MY_RED, MY_BLUE}; -struct Segment_Data { - Segment_Data(Segment_color color, int min_id, int max_id): _color(color), _min_id(min_id), _max_id(max_id) {} - Segment_color _color; - int _min_id, _max_id; - bool operator==(const Segment_Data &rhs) const { - return (this == &rhs); - } -}; - -template class Sweep_line_do_curves_x_visitor_ : public Sweep_line_empty_visitor { - typedef Traits_ Traits_2; - typedef Sweep_line_do_curves_x_visitor_ Self; - - typedef typename Traits_2::X_monotone_curve_2 X_monotone_curve_2; - typedef typename Traits_2::Point_2 Point_2; - - typedef Sweep_line_empty_visitor Base; - typedef typename Base::Event Event; - typedef typename Base::Subcurve Subcurve; - typedef typename Base::Status_line_iterator Status_line_iterator; - - typedef CGAL::Sweep_line_2 Sweep_line_2; - -protected: - - // Data members: - bool m_found_x; // Have we found an intersection so far. - bool m_had_overlap_no_cross; -public: - - Sweep_line_do_curves_x_visitor_() : - m_found_x(false), m_had_overlap_no_cross(false) { - } - - template - void sweep(CurveIterator begin, CurveIterator end) { - std::vector curves_vec; - std::vector points_vec; - - curves_vec.reserve(std::distance(begin, end)); - make_x_monotone(begin, - end, - std::back_inserter(curves_vec), - std::back_inserter(points_vec), - this-> traits()); - - // Perform the sweep. - Sweep_line_2 *sl = reinterpret_cast(this->sweep_line()); - - sl->sweep(curves_vec.begin(), - curves_vec.end(), - points_vec.begin(), - points_vec.end()); - } - - void update_event(Event *e , - Subcurve *sc1 , - Subcurve *sc2 , - bool is_new) { - } - - void update_event(Event * /* e */, - Subcurve * /* sc1 */) { - } - - void update_event(Event * /* e */, - const Point_2 & /* end_point */, - const X_monotone_curve_2 & /* cv */, - Arr_curve_end /* cv_end */, - bool /* is_new */) { - } - - void update_event(Event * /* e */, - const Point_2 & /* pt */, - bool /* is_new */) { - } - - template - void sweep_xcurves(XCurveIterator begin, XCurveIterator end) { - // Perform the sweep. - Sweep_line_2 *sl = reinterpret_cast(this->sweep_line()); - - sl->sweep(begin, end); - } - - void found_overlap(Subcurve *sc1 , - Subcurve *sc2 , - Subcurve *ov_sc) { - - if (sc1->last_curve().data().front()._color != sc2->last_curve().data().front()._color) { - Sweep_line_2 *sl = reinterpret_cast(this->sweep_line()); - const Traits_2 *traits = sl->traits(); - - typename Traits_2::Compare_endpoints_xy_2 t_compare_endpoints_xy_2_obj = traits->compare_endpoints_xy_2_object(); - CGAL::Comparison_result c1 = t_compare_endpoints_xy_2_obj(sc1->last_curve()); - CGAL::Comparison_result c2 = t_compare_endpoints_xy_2_obj(sc2->last_curve()); - bool same_dir = (c1 == c2); - m_found_x = same_dir; - m_had_overlap_no_cross = !same_dir; - } - } - - bool after_handle_event(Event *event , - Status_line_iterator iter, - bool flag) { - Sweep_line_2 *sl = reinterpret_cast(this->sweep_line()); - - if (m_found_x) { - sl->stop_sweep(); - return true; - } - - // check if there was an intersection event: - if (((event->is_intersection() || event->is_weak_intersection() || (event->is_left_end() && event->is_right_end()))) && (event->number_of_left_curves() + event->number_of_right_curves() == 4)) { - Sweep_line_2 *sl = reinterpret_cast(this->sweep_line()); - const Traits_2 *traits = sl->traits(); - typename Traits_2::Compare_endpoints_xy_2 t_compare_endpoints_xy_2_obj = traits->compare_endpoints_xy_2_object(); - - // get all curves ordered by cyclic order. from left top counter clockwise. - std::list ordered_list; - ordered_list.insert(ordered_list.begin(), event->left_curves_begin(), event->left_curves_end()); - ordered_list.insert(ordered_list.begin(), event->right_curves_rbegin(), event->right_curves_rend()); - - // mark for each edge whether it's incoming or outgoing. - std::vector incoming_edges(ordered_list.size(), false); - typename std::list::iterator itr = ordered_list.begin(); - int i = 0; - - for (; itr != ordered_list.end(); ++itr) { - if (i < event->number_of_left_curves()) { - if (t_compare_endpoints_xy_2_obj((*itr)->last_curve()) == CGAL::SMALLER) { - incoming_edges[i] = true; - } - } else { - if (t_compare_endpoints_xy_2_obj((*itr)->last_curve()) == CGAL::LARGER) { - incoming_edges[i] = true; - } - } - - ++i; - } - - if (ordered_list.size() == 4) { - // normal intersection case - // check for alterations - typename std::list::iterator itr1, itr2, itr3; - itr1 = ordered_list.begin(); - itr2 = itr1; - ++itr2; - itr3 = itr2; - ++itr3; - bool c = ((*itr1)->last_curve().data().front()._color != (*itr2)->last_curve().data().front()._color); - - if (((*itr1)->last_curve().data().front()._color != (*itr2)->last_curve().data().front()._color) && - ((*itr2)->last_curve().data().front()._color != (*itr3)->last_curve().data().front()._color)) { - // we have alternating edges - m_found_x = true; - sl->stop_sweep(); - return true; - } else { - // either 1 and 2 are the same or 1 and for are the same colors. - if ((*itr1)->last_curve().data().front()._color == (*itr2)->last_curve().data().front()._color) { - // 1==2 - if (incoming_edges[0] || incoming_edges[2]) { - m_found_x = true; - sl->stop_sweep(); - return true; - } - } else {// 1 == 4 - if (incoming_edges[1] || incoming_edges[3]) { - m_found_x = true; - sl->stop_sweep(); - return true; - } - } - } - } else { - // Maybe a bug here when we have 2 overlap not overlapping and two outgoing which cause overlap. - // this case needs to be studied and handled here. - // / - // ---- - // \ - // - /* int k=7; - ++k; - */ - } - } - - return true; - } - - bool found_intersection() { - return (m_found_x); - } - - bool had_overlap_no_cross() { - return m_had_overlap_no_cross; - } -}; - -template class Colored_traits : public Arr_consolidated_curve_data_traits_2 { - -public: - typedef Arr_consolidated_curve_data_traits_2 Base; - typedef typename Base::Intersect_2 Base_intersect_2; - typedef typename Colored_traits::Curve_2 Colored_segment_2; - typedef typename Colored_traits::X_monotone_curve_2 X_monotone_colored_segment_2; - typedef typename Base::Compare_xy_2 Base_compare_xy_2; - typedef typename Base::Construct_min_vertex_2 Base_construct_min_vertex_2; - typedef typename Base::Construct_max_vertex_2 Base_construct_max_vertex_2; - typedef typename Base::Point_2 Base_point_2; - - class Intersect_2 { - protected: - //! The base traits. - const Arr_consolidated_curve_data_traits_2 *m_traits; - - /*! Constructor. - * The constructor is declared protected to allow only the functor - * obtaining function, which is a member of the nesting class, - * constructing it. - */ - Intersect_2(const Arr_consolidated_curve_data_traits_2 *traits) : m_traits(traits) {} - - //! Allow its functor obtaining function calling the protected constructor. - friend class Colored_traits; - - public: - template - OutputIterator operator()(const X_monotone_colored_segment_2 &xcv1, - const X_monotone_colored_segment_2 &xcv2, - OutputIterator oi) { - // In case the curves originate from the same arrangement, they are - // obviously interior-disjoint. - //if (xcv1.data().front() == xcv2.data().front()) - if (xcv1.data().front()._color == xcv2.data().front()._color) { - return (oi); - } - - typename Base::Intersect_2 int_obj = typename Base::Intersect_2(m_traits); - OutputIterator oi_end = int_obj(xcv1, xcv2, oi); - - if (oi == oi_end) { - return oi_end; - } - - const std::pair *xp_point; - - for (; oi != oi_end; ++oi) { - xp_point = object_cast > (&(*oi)); - - if (xp_point != NULL) { - *oi = CGAL::make_object(std::make_pair(Point_2(xp_point->first), - xp_point->second)); - } - } - - return (oi); - } - }; - - /*! Obtain an Intersect_2 functor object. */ - Intersect_2 intersect_2_object() const { - return Intersect_2(this); - } - - class Ex_point_2 { - public: - - typedef Base_point_2 Base_p; - - protected: - - Base_p m_base_pt; // The base point. - - public: - int id; - /*! Default constructor. */ - Ex_point_2() : - m_base_pt(), id(-1) - - {} - - /*! Constructor from a base point. */ - Ex_point_2(const Base_p &pt) : - m_base_pt(pt), id(-1) - - {} - - /*! Get the base point (const version). */ - const Base_p &base() const { - return (m_base_pt); - } - - /*! Get the base point (non-const version). */ - Base_p &base() { - return (m_base_pt); - } - - /*! Casting to a base point (const version). */ - operator const Base_p &() const { - return (m_base_pt); - } - - /*! Casting to a base point (non-const version). */ - operator Base_p &() { - return (m_base_pt); - } - }; - - typedef Ex_point_2 Point_2; - - class Compare_xy_2 { - protected: - //! The base operator. - Base_compare_xy_2 m_base_cmp_xy; - - /*! Constructor. - * The constructor is declared protected to allow only the functor - * obtaining function, which is a member of the nesting class, - * constructing it. - */ - Compare_xy_2(const Base_compare_xy_2 &base) : - m_base_cmp_xy(base) { - } - - //! Allow its functor obtaining function calling the protected constructor. - friend class Colored_traits; - - public: - Comparison_result operator()(const Point_2 &p1, const Point_2 &p2) const { - if ((p1.id == p2.id) && (p1.id != -1)) { - return EQUAL; - } - - return m_base_cmp_xy(p1, p2); - } - }; - - /*! Obtain a Construct_min_vertex_2 functor object. */ - Compare_xy_2 compare_xy_2_object() const { - return (Compare_xy_2(((Base *)this)->compare_xy_2_object())); - } - - /*! A functor that obtains the left endpoint of an x-monotone curve. */ - class Construct_min_vertex_2 { - protected: - //! The base operators. - Base_construct_min_vertex_2 m_base_min_v; - - /*! Constructor. - * The constructor is declared protected to allow only the functor - * obtaining function, which is a member of the nesting class, - * constructing it. - */ - Construct_min_vertex_2(const Base_construct_min_vertex_2 &base_min_v - ) : - m_base_min_v(base_min_v) { - } - - //! Allow its functor obtaining function calling the protected constructor. - friend class Colored_traits; - typedef typename Colored_traits::X_monotone_curve_2 X_monotone_curve_2; - - public: - Point_2 operator()(const X_monotone_curve_2 &xcv) { - Point_2 min_p = m_base_min_v(xcv); - - if (xcv.data().size() > 1) { - min_p.id = -1; - } else { - min_p.id = xcv.data().front()._min_id; - } - - return (min_p); - } - }; - - /*! Obtain a Construct_min_vertex_2 functor object. */ - Construct_min_vertex_2 construct_min_vertex_2_object() const { - return - (Construct_min_vertex_2(((Base *)this)->construct_min_vertex_2_object())); - } - - /*! A functor that obtains the right endpoint of an x-monotone curve. */ - class Construct_max_vertex_2 { - protected: - //! The base operators. - Base_construct_max_vertex_2 m_base_max_v; - - /*! Constructor. - * The constructor is declared protected to allow only the functor - * obtaining function, which is a member of the nesting class, - * constructing it. - */ - Construct_max_vertex_2(const Base_construct_max_vertex_2 &base_max_v) : - m_base_max_v(base_max_v) - - {} - - //! Allow its functor obtaining function calling the protected constructor. - friend class Colored_traits; - typedef typename Colored_traits::X_monotone_curve_2 X_monotone_curve_2; - - public: - Point_2 operator()(const X_monotone_curve_2 &xcv) const { - Point_2 max_p = m_base_max_v(xcv); - - if (xcv.data().size() > 1) { - max_p.id = -1; - } else { - max_p.id = xcv.data().front()._max_id; - } - - return (max_p); - } - }; - - /*! Obtain a Construct_min_vertex_2 functor object. */ - Construct_max_vertex_2 construct_max_vertex_2_object() const { - return - (Construct_max_vertex_2(((Base *)this)->construct_max_vertex_2_object())); - } -}; - -template class SweepCollisionDetector : public ICollisionDetector< Kernel_, Container_> { - -public: - - SweepCollisionDetector() {} - typedef CGAL::Arr_segment_traits_2 Traits_2; - typedef Colored_traits Data_traits_2; - - typedef typename Data_traits_2::Curve_2 Colored_segment_2; - typedef Arrangement_2 Colored_arr_2; - typedef typename CGAL::Polygon_2::Edge_const_iterator Edge_iterator ; - typedef typename CGAL::Polygon_2::Traits::Segment_2 Segment_2 ; - -protected: - - Traits_2 m_traits; - -public: - - virtual bool checkCollision(const typename CGAL::Polygon_2 &p, const typename CGAL::Polygon_2 &q) { - typename Traits_2::Compare_endpoints_xy_2 cmp_obj = m_traits.compare_endpoints_xy_2_object(); - - if (p.has_on_bounded_side(*(q.vertices_begin())) || q.has_on_bounded_side(*(p.vertices_begin()))) { - return true; - } - - std::list edges; - Edge_iterator itr = p.edges_begin(); - int i = 0; - int n = p.size(); - - for (; itr != p.edges_end(); ++itr, ++i) { - CGAL::Comparison_result res = cmp_obj(*itr); - - if (res != CGAL::SMALLER) { - if (i == n - 1) { - edges.push_back(Colored_segment_2(*itr, Segment_Data(MY_RED, 0, i))); - } else { - edges.push_back(Colored_segment_2(*itr, Segment_Data(MY_RED, i + 1, i))); - } - } else { - if (i == n - 1) { - edges.push_back(Colored_segment_2(*itr, Segment_Data(MY_RED, i, 0))); - } else { - edges.push_back(Colored_segment_2(*itr, Segment_Data(MY_RED, i, i + 1))); - } - } - } - - itr = q.edges_begin(); - n = q.size(); - int j = 0; - int q_first = i; - - for (; itr != q.edges_end(); ++itr, ++i, ++j) { - CGAL::Comparison_result res = cmp_obj(*itr); - - if (res != CGAL::SMALLER) { - if (j == n - 1) { - edges.push_back(Colored_segment_2(*itr, Segment_Data(MY_BLUE, q_first, i))); - } else { - edges.push_back(Colored_segment_2(*itr, Segment_Data(MY_BLUE, i + 1, i))); - } - } else { - if (j == n - 1) { - edges.push_back(Colored_segment_2(*itr, Segment_Data(MY_BLUE, i, q_first))); - } else { - edges.push_back(Colored_segment_2(*itr, Segment_Data(MY_BLUE, i, i + 1))); - } - } - } - - CGAL::Sweep_line_do_curves_x_visitor_ visitor; - Sweep_line_2 > sweep_line(&visitor); - visitor.attach((void *)&sweep_line); - visitor.sweep(edges.begin(), edges.end()); - - if (visitor.found_intersection()) { - return true; - } - - if (visitor.had_overlap_no_cross()) { - return false; - } - - return false; - } -}; - -} - -#endif