diff --git a/Visibility_2/include/CGAL/Simple_visibility_2.h b/Visibility_2/include/CGAL/Simple_visibility_2.h index d7e6d917299..41bda065ef9 100644 --- a/Visibility_2/include/CGAL/Simple_visibility_2.h +++ b/Visibility_2/include/CGAL/Simple_visibility_2.h @@ -31,7 +31,7 @@ namespace CGAL { namespace Visibility_2 { -template +template class Simple_visibility_2 { public: @@ -55,6 +55,10 @@ public: typedef typename Geometry_traits_2::FT Number_type; typedef typename Geometry_traits_2::Object_2 Object_2; + typedef RegularizationTag Regularization_tag; + typedef CGAL::Tag_false Supports_general_polygon_tag; + typedef CGAL::Tag_true Supports_simple_polygon_tag; + Simple_visibility_2() : p_arr(NULL), geom_traits(NULL) {}; /*! Constructor given an arrangement and the Regularization tag. */ diff --git a/Visibility_2/test/Visibility_2/include/CGAL/test_model_methods.h b/Visibility_2/test/Visibility_2/include/CGAL/test_model_methods.h index 6ecc9da2c9d..53a17c5d9ed 100644 --- a/Visibility_2/test/Visibility_2/include/CGAL/test_model_methods.h +++ b/Visibility_2/test/Visibility_2/include/CGAL/test_model_methods.h @@ -23,6 +23,7 @@ #define CGAL_TEST_MODEL_METHODS_H #include +#include #include namespace CGAL { @@ -32,5 +33,30 @@ bool test_is_attached(_Visibility_2 visibility) { return visibility.is_attached(); } +template +void test_model_methods(_Visibility_2 &visibility, + const typename _Visibility_2::Input_arrangement_2 &arr) { + + // Check concept obediance + typedef _Visibility_2 Visibility_2; + typedef typename Visibility_2::Input_arrangement_2 Input_arrangement_2; + typedef typename Visibility_2::Output_arrangement_2 Output_arrangement_2; + typedef typename Visibility_2::Regularization_tag Regularization_tag; + typedef typename Visibility_2::Supports_general_polygon_tag + Supports_general_polygon_tag; + typedef typename Visibility_2::Supports_simple_polygon_tag + Supports_simple_polygon_tag; + + assert(false == visibility.is_attached()); + visibility.attach(arr); + assert(true == visibility.is_attached()); + visibility.detach(); + assert(false == visibility.is_attached()); + visibility.attach(arr); + assert(true == visibility.is_attached()); + assert(true == (CGAL::test_are_equal(arr, + visibility.arr()))); +} + } // end CGAL namespace #endif \ No newline at end of file diff --git a/Visibility_2/test/Visibility_2/include/CGAL/test_utils.h b/Visibility_2/test/Visibility_2/include/CGAL/test_utils.h index 64e3057ddd5..3886af75a8c 100644 --- a/Visibility_2/test/Visibility_2/include/CGAL/test_utils.h +++ b/Visibility_2/test/Visibility_2/include/CGAL/test_utils.h @@ -177,6 +177,68 @@ std::string num2string(Number_type& n) { ss< +void create_lazy_arrangement_from_file(std::ifstream &input, + _Arrangement_2 &arr) { + + typedef _Arrangement_2 Arrangement_2; + typedef typename Arrangement_2::Geometry_traits_2 Geometry_traits_2; + typedef typename Arrangement_2::Face_const_handle Face_const_handle; + typedef typename Geometry_traits_2::Segment_2 Segment_2; + typedef typename Geometry_traits_2::Point_2 Point_2; + typedef typename Geometry_traits_2::FT Number_type; + if (input) { + std::string curr_line; + std::vector isolated_vertices; + std::stringstream convert(curr_line); + int number_of_isolated_vertices; + convert >> number_of_isolated_vertices; + Face_const_handle uface = arr.unbounded_face(); + + for (int i = 0 ; i < number_of_isolated_vertices ; i++) { + std::getline(input, curr_line); + std::istringstream iss(curr_line); + std::string x, y; + iss >> x >> y; + arr.insert_in_face_interior(Point_2(x, y)); + } + + std::vector edges; + int number_of_edges; + input >> number_of_edges; + for (int i = 0 ; i < number_of_edges ; i++) { + std::getline(input, curr_line); + std::string x1, y1, x2, y2; + std::istringstream iss(curr_line); + iss >> x1 >> y1 >> x2 >> y2; + edges.push_back(Segment_2(Point_2(x1, y1), Point_2(x2, y2))); + } + CGAL::insert(arr, edges.begin(), edges.end()); + } +} + +template +void run_tests(_Visibility_2 visibility, int case_number) { + typedef _Visibility_2 Visibility_2; + typedef Visibility_2::Input_arrangement_2 Input_arrangement_2; + typedef Visibility_2::Output_arrangement_2 Output_arrangement_2; + + for (int i=1 ; i <= case_number ; i++) { + + std::cout<<"Test "< void create_arrangement_from_file(_Arrangement_2 &arr, std::ifstream& input) { typedef _Arrangement_2 Arrangement_2; diff --git a/Visibility_2/test/Visibility_2/test_simple_visibility.cpp b/Visibility_2/test/Visibility_2/test_simple_visibility.cpp index d67e89bac9d..8bb6241bbdd 100644 --- a/Visibility_2/test/Visibility_2/test_simple_visibility.cpp +++ b/Visibility_2/test/Visibility_2/test_simple_visibility.cpp @@ -42,25 +42,15 @@ int main() { typedef Traits_2::Point_2 Point_2; typedef Traits_2::X_monotone_curve_2 Segment_2; typedef CGAL::Arrangement_2 Arrangement_2; + typedef CGAL::Visibility_2::Simple_visibility_2 + Simple_visibility_2; - // First read arrangement + // First read arrangement Arrangement_2 arr; std::ifstream input("./data/simple_polygon_test_case_1.in"); CGAL::create_arrangement_from_file(arr, input); - CGAL::Visibility_2::Simple_visibility_2 visibility; - assert(false == (CGAL::test_is_attached >(visibility))); - visibility.attach(arr); - assert(true == (CGAL::test_is_attached >(visibility))); - visibility.detach(); - assert(false == (CGAL::test_is_attached >(visibility))); - visibility.attach(arr); - assert(true == (CGAL::test_are_equal(arr, visibility.arr()))); - - // Run test cases from https://cgal.geometryfactory.com/CGAL/Members/wiki/Visibility/TestCases - assert(true == (CGAL::simple_polygon_test_case_1, Arrangement_2> ())); - assert(true == (CGAL::simple_polygon_test_case_2, Arrangement_2> ())); - assert(true == (CGAL::simple_polygon_test_case_3, Arrangement_2> ())); - assert(true == (CGAL::simple_polygon_test_case_4, Arrangement_2> ())); + Simple_visibility_2 visibility; + CGAL::test_model_methods(visibility, arr); } { typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;