diff --git a/Reconstruction_simplification_2/doc/Reconstruction_simplification_2/Concepts/Output.h b/Reconstruction_simplification_2/doc/Reconstruction_simplification_2/Concepts/Output.h index 3a0cd28eda5..10d0dc6d766 100644 --- a/Reconstruction_simplification_2/doc/Reconstruction_simplification_2/Concepts/Output.h +++ b/Reconstruction_simplification_2/doc/Reconstruction_simplification_2/Concepts/Output.h @@ -8,9 +8,9 @@ shape in a versatile way. -\cgalHasModel `CGAL::List_output` -\cgalHasModel `CGAL::Off_output` -\cgalHasModel `CGAL::Tds_output` +\cgalHasModel `CGAL::List_output` +\cgalHasModel `CGAL::Off_output` +\cgalHasModel `CGAL::Tds_output` */ @@ -18,45 +18,14 @@ shape in a versatile way. class OutputModule { public: -/// \name Types -/// @{ - - /*! -Output_Iterator for accessing the isolated vertices. +Extracts the solid edges and vertices from the `Reconstruction_simplification_2` module. + +\param rt2 The `Reconstruction_triangulation_2` from which the solid edges and vertices are extracted. +\param nb_ignore The number of verticess to be ignored in the output. + */ -typedef unspecified_type Output_Vertex_Iterator; - -/*! -Output_Iterator for accessing the reconstructed edges. -*/ -typedef unspecified_type Output_Edge_Iterator; - -/// @} - -/// \name Operations -/// @{ - -/*! -Returns an Output_Vertex_Iterator pointing to the first vertex. -*/ -Output_Vertex_Iterator vertices_start(); - -/*! -Returns an Output_Vertex_Iterator pointing beyond the last vertex. -*/ -Output_Vertex_Iterator vertices_beyond(); - -/*! -Returns an Output_Edge_Iterator pointing to the first edge. -*/ -Output_Edge_Iterator edges_start(); - -/*! -Returns an Output_Edge_Iterator pointing beyond the last edge. -*/ -Output_Edge_Iterator edges_beyond(); - +void store_marked_elements(Rt_2& rt2, int nb_ignore); }; /* end OutputModule */ diff --git a/Reconstruction_simplification_2/include/CGAL/List_output.h b/Reconstruction_simplification_2/include/CGAL/List_output.h index 552b2f4603e..a10e0f792cf 100644 --- a/Reconstruction_simplification_2/include/CGAL/List_output.h +++ b/Reconstruction_simplification_2/include/CGAL/List_output.h @@ -43,16 +43,24 @@ namespace CGAL { \brief The class `List_output` is a model for the `OutputModule` concept. -\details It returns Output-iterators which allow iterating over both the -isolated vertices and the edges of the reconstructed shape +\details It takes two `Output-Iterators`, one for storing the +isolated points and one for storing the edges of the reconstructed shape. \tparam Kernel is the geometric kernel, used for the reconstruction and simplification task. + +\tparam Output_Vertex_Iterator The `Output-Iterator` type for storing the points + +\tparam Output_Edge_Iterator The `Output-Iterator` type for storing the + edges (as Segments). */ template class List_output { public: + + /// \cond SKIP_IN_MANUAL + typedef typename Kernel::FT FT; typedef typename Kernel::Point_2 Point; typedef typename Kernel::Segment_2 Segment; @@ -74,49 +82,44 @@ public: private: Output_Vertex_Iterator m_v_it; Output_Edge_Iterator m_e_it; -public: - List_output(Output_Vertex_Iterator v_it, Output_Edge_Iterator e_it) : - m_v_it(v_it), m_e_it(e_it) { } + void store_marked_vertices(Rt_2& rt2) { + for (Vertex_iterator vi = rt2.vertices_begin(); + vi != rt2.vertices_end(); ++vi) + { + bool incident_edges_have_sample = false; + typename Rt_2::Edge_circulator start = rt2.incident_edges(vi); - void store_marked_vertices(Rt_2& rt2) { + typename Rt_2::Edge_circulator cur = start; - for (Vertex_iterator vi = rt2.vertices_begin(); - vi != rt2.vertices_end(); ++vi) - { - bool incident_edges_have_sample = false; - typename Rt_2::Edge_circulator start = rt2.incident_edges(vi); + do { + if (!rt2.is_ghost(*cur)) { + incident_edges_have_sample = true; + break; + } + ++cur; + } while (cur != start); - typename Rt_2::Edge_circulator cur = start; + if (!incident_edges_have_sample) { + if ((*vi).has_sample_assigned()) { + Point p = (*vi).point(); + *m_v_it = p; + m_v_it++; + } + } + } + } - do { - if (!rt2.is_ghost(*cur)) { - incident_edges_have_sample = true; - break; - } - ++cur; - } while (cur != start); - - if (!incident_edges_have_sample) { - if ((*vi).has_sample_assigned()) { - Point p = (*vi).point(); - *m_v_it = p; - m_v_it++; - } - } - } - } - - void store_marked_edges(Rt_2& rt2, int nb_ignore) { - MultiIndex mindex; - for (Finite_edges_iterator ei = rt2.finite_edges_begin(); ei != rt2.finite_edges_end(); ++ei) - { + void store_marked_edges(Rt_2& rt2, int nb_ignore) { + MultiIndex mindex; + for (Finite_edges_iterator ei = rt2.finite_edges_begin(); ei != rt2.finite_edges_end(); ++ei) + { Edge edge = *ei; if (rt2.is_ghost(edge)) continue; FT value = rt2.get_edge_relevance(edge); // >= 0 mindex.insert(Reconstruction_edge_2(edge, value)); - } + } int nb_remove = (std::min)(nb_ignore, int(mindex.size())); @@ -133,15 +136,42 @@ public: (mindex.template get<0>()).erase(pedge); Segment s(pedge.source()->point(), pedge.target()->point()); //edges.push_back(s); - *m_e_it = s; + *m_e_it = s; m_e_it++; } - } + } - void store_marked_elements(Rt_2& rt2, int nb_ignore) { - store_marked_vertices(rt2); - store_marked_edges(rt2, nb_ignore); + /// \endcond +public: + + /// \name Creation + /// @{ + + /*! + Instantiates a new List_output object + for two given Output_Iterators. + + \param v_it An Output_Vertex_Iterator for storing the points. + + \param e_it An Output_Edge_Iterator for storing the edges (as Segments). + */ + List_output(Output_Vertex_Iterator v_it, Output_Edge_Iterator e_it) : + m_v_it(v_it), m_e_it(e_it) { } + /// @} + + + + /*! + Extracts the solid edges and vertices from the `Reconstruction_simplification_2` module. + + \param rt2 The `Reconstruction_triangulation_2` from which the solid edges and vertices are extracted. + \param nb_ignore The number of verticess to be ignored in the output. + + */ + void store_marked_elements(Rt_2& rt2, int nb_ignore) { + store_marked_vertices(rt2); + store_marked_edges(rt2, nb_ignore); } }; diff --git a/Reconstruction_simplification_2/include/CGAL/Off_output.h b/Reconstruction_simplification_2/include/CGAL/Off_output.h index 84d23d1fbe5..c5b2a0a8868 100644 --- a/Reconstruction_simplification_2/include/CGAL/Off_output.h +++ b/Reconstruction_simplification_2/include/CGAL/Off_output.h @@ -1,10 +1,3 @@ -/* - * Off_output.h - * - * Created on: Jul 10, 2014 - * Author: ivovigan - */ - #ifndef OFF_OUTPUT_H_ #define OFF_OUTPUT_H_ @@ -55,6 +48,10 @@ of the reconstructed shape via an std::ostream object. */ template class Off_output { + + + /// \cond SKIP_IN_MANUAL + public: typedef Reconstruction_triangulation_2 Rt_2; typedef typename Rt_2::Triangulation_data_structure Tds_2; @@ -100,10 +97,20 @@ private: } + /// \endcond public: Off_output() : list_output(Point_it(isolated_points), Edge_it(edges)) { } + + + /*! + Extracts the solid edges and vertices from the `Reconstruction_simplification_2` module. + + \param rt2 The `Reconstruction_triangulation_2` from which the solid edges and vertices are extracted. + \param nb_ignore The number of verticess to be ignored in the output. + + */ void store_marked_elements(Rt_2& rt2, int nb_ignore) { list_output.store_marked_elements(rt2, nb_ignore); } diff --git a/Reconstruction_simplification_2/include/CGAL/Reconstruction_triangulation_2.h b/Reconstruction_simplification_2/include/CGAL/Reconstruction_triangulation_2.h index 19c2bdcb40a..0b6a3247a6a 100644 --- a/Reconstruction_simplification_2/include/CGAL/Reconstruction_triangulation_2.h +++ b/Reconstruction_simplification_2/include/CGAL/Reconstruction_triangulation_2.h @@ -49,7 +49,6 @@ #include #include - #define EPS 1e-15 namespace CGAL { diff --git a/Reconstruction_simplification_2/include/CGAL/Tds_output.h b/Reconstruction_simplification_2/include/CGAL/Tds_output.h index 9e3f96eb5da..288d89175d4 100644 --- a/Reconstruction_simplification_2/include/CGAL/Tds_output.h +++ b/Reconstruction_simplification_2/include/CGAL/Tds_output.h @@ -1,10 +1,3 @@ -/* - * Tds_output.h - * - * Created on: Jul 10, 2014 - * Author: ivovigan - */ - #ifndef TDS_OUTPUT_H_ #define TDS_OUTPUT_H_ @@ -52,6 +45,10 @@ namespace CGAL { */ template class Tds_output { + + /// \cond SKIP_IN_MANUAL + + public: typedef Reconstruction_triangulation_2 Rt_2; typedef typename Kernel::FT FT; @@ -102,13 +99,28 @@ private: } } + /// \endcond public: - void store_marked_elements(Rt_2& rt2, int nb_ignore) { + + /*! + Extracts the solid edges and vertices from the `Reconstruction_simplification_2` module. + + \param rt2 The `Reconstruction_triangulation_2` from which the solid edges and vertices are extracted. + \param nb_ignore The number of verticess to be ignored in the output. + + */ + void store_marked_elements(Rt_2& rt2, int nb_ignore) { m_rt2 = rt2; mark_vertices(); mark_edges(); } + + /*! + Allows accessing the `Reconstruction_triangulation_2` of the `Reconstruction_simplification_2` module. + + \param rt2 The `Reconstruction_triangulation_2`. + */ void extract_reconstruction_tds(Rt_2& rt2) { rt2 = m_rt2; }