// file: examples/Arrangement_2/example7.C #include "short_names.h" #include #include #include #include #include #include #include typedef CGAL::Quotient NT; typedef CGAL::Cartesian Kernel; typedef CGAL::Arr_segment_traits_2 Traits; typedef Traits::Point_2 Point; typedef Traits::Curve_2 Curve; typedef Traits::X_monotone_curve_2 X_monotone_curve_2; // A global variable to keep track of when we inserted the edges. int global_int = 0; struct Info { Info() : d(global_int) {} // Initializes the private instance with the global variable int num() {return d;} int d; }; struct My_base_node : public CGAL::Arr_base_node { typedef CGAL::Arr_base_node Base; My_base_node() : Base(), info() {} Info info; // Will be initialized with the default ctr. }; struct My_halfedge : public CGAL::Arr_2_halfedge_base { typedef CGAL::Arr_2_halfedge_base Base; My_halfedge() : Base(), info() {} Info info; // Will be initialized with the default ctr. }; typedef CGAL::Pm_dcel, My_halfedge, CGAL::Arr_2_face_base> Dcel; typedef CGAL::Arrangement_2 Arr_2; int main() { Arr_2 arr; arr.set_update(false); // The insertions won't update the planar map. // Insertion of the curves Arr_2::Curve_iterator cit=arr.insert(Curve(Point(0,0),Point(1,1))); cit=arr.insert(Curve(Point(0,1),Point(1,0))); CGAL_assertion(arr.number_of_halfedges()==0); // Change the global variable so we will see the changes // all Info structs will have 1 in them from now on. global_int=1; arr.set_update(true); CGAL_assertion(arr.number_of_halfedges() == 8); // Traversal of the curves Arr_2::Edge_iterator eit; for (cit = arr.curve_node_begin(); cit!=arr.curve_node_end(); ++cit) { std::cout << std::endl << "Curve level info:" << std::endl << cit->info.num() << std::endl ; std::cout << "Edge level info:" << std::endl; for (eit = cit->edges_begin(); eit!=cit->edges_end(); ++eit) { std::cout << eit->info.num() << std::endl ; } } return 0; }