diff --git a/Visibility_2/include/CGAL/Visibility_2/visibility_utils.h b/Visibility_2/include/CGAL/Visibility_2/visibility_utils.h index 49a356bab8c..8b8efa9b7d5 100644 --- a/Visibility_2/include/CGAL/Visibility_2/visibility_utils.h +++ b/Visibility_2/include/CGAL/Visibility_2/visibility_utils.h @@ -61,6 +61,9 @@ void print_arrangement_by_face(const Arrangement_2& arr) { if (!fit->is_unbounded()) { print_simple_face(fit); } + else { + std::cout << "unbounded\n"; + } } } @@ -119,6 +122,27 @@ typename Geometry_traits_2::FT Compute_squared_distance_2( return compute_dist(p, seg); } +template +bool Do_intersect_2(const Geometry_traits_2 *geom_traits, + const Type1& c1, + const Type2& c2) { + + typename Geometry_traits_2::Do_intersect_2 intersect = + geom_traits->do_intersect_2_object(); + return intersect(c1, c2); +} + +template +bool Collinear_are_ordered_along_line_2(const Geometry_traits_2 *geom_traits, + const typename Geometry_traits_2::Point_2 &p, + const typename Geometry_traits_2::Point_2 &q, + const typename Geometry_traits_2::Point_2 &r) { + + typename Geometry_traits_2::Collinear_are_ordered_along_line_2 coll = + geom_traits->collinear_are_ordered_along_line_2_object(); + return coll(p, q, r); +} + template typename Geometry_traits_2::Point_2 Construct_projected_point_2( const Geometry_traits_2 *geom_traits, @@ -157,6 +181,8 @@ void report_while_handling_needles( typedef typename Visibility_2::Input_arrangement_2 Input_arrangement_2; typedef typename Input_arrangement_2::Point_2 Point_2; typedef typename Input_arrangement_2::Geometry_traits_2 Geometry_traits_2; + typedef typename Input_arrangement_2::Halfedge_handle Halfedge_handle; + typedef typename Input_arrangement_2::Vertex_handle Vertex_handle; typedef typename Geometry_traits_2::Segment_2 Segment_2; typedef typename Geometry_traits_2::Direction_2 Direction_2; @@ -250,14 +276,22 @@ void report_while_handling_needles( } i++; } -/* std::cout << "SEGMENTS\n"; - for (unsigned int i = 0 ; i < segments.size() ; i++) { - std::cout << segments[i] << std::endl; + + Halfedge_handle he_handle; + Vertex_handle v_trg; + Vertex_handle v_fst; + + if (segments.size() >= 1) { + he_handle = arr_out.insert_in_face_interior(segments[0], arr_out.unbounded_face()); + v_fst = he_handle->source(); + for (unsigned int k = 1 ; k < segments.size()-1 ; k++) { + v_trg = he_handle->target(); + he_handle = arr_out.insert_from_left_vertex(segments[k], v_trg); + } } - std::cout << "SEGMENTS END\n";*/ - CGAL::insert_non_intersecting_curves(arr_out, - segments.begin(), - segments.end()); + + v_trg = he_handle->target(); + arr_out.insert_at_vertices(segments[segments.size()-1], v_trg, v_fst); } } // end namespace Visibility_2