diff --git a/BGL/doc/BGL/BGL.txt b/BGL/doc/BGL/BGL.txt index 32c3f417edb..d4682ae0611 100644 --- a/BGL/doc/BGL/BGL.txt +++ b/BGL/doc/BGL/BGL.txt @@ -486,7 +486,7 @@ to the real border, and switch back on the "other side" of the seam. in (c) the seam forms a closed polyline. While the first two define a single border, a cycle defines two borders and splits the set of faces in two connected components. Something similar happens when the seam touches the same border more than once. A seam can also connect different borders what changes the genus of the mesh. -Finally, a seam may have more than one connected components. +Finally, a seam may have more than one connected component. \cgalFigureBegin{fig_Seam_mesh_2, Seam_mesh_2.png} Walking around a seam (a) with no seam vertex on the real border, @@ -495,7 +495,7 @@ Walking around a seam (a) with no seam vertex on the real border, Seam meshes are used in the Chapter \ref PkgSurfaceParameterizationSummary. -subsection BGLExamples Examples +\subsection BGLExamples Examples \subsubsection BGLExampleIncidentVertices Example: Finding Incident Vertices in a HalfedgeGraph diff --git a/BGL/include/CGAL/boost/graph/Seam_mesh.h b/BGL/include/CGAL/boost/graph/Seam_mesh.h index d17385a3be3..eaa87bb6577 100644 --- a/BGL/include/CGAL/boost/graph/Seam_mesh.h +++ b/BGL/include/CGAL/boost/graph/Seam_mesh.h @@ -118,10 +118,10 @@ class Seam_mesh typedef typename boost::graph_traits::edge_descriptor TM_edge_descriptor; typedef typename boost::graph_traits::vertex_descriptor TM_vertex_descriptor; - typedef CGAL::Unique_hash_map Seam_edge_uhm; - typedef CGAL::Unique_hash_map Seam_vertex_uhm; - typedef boost::associative_property_map Seam_edge_pmap; - typedef boost::associative_property_map Seam_vertex_pmap; + typedef CGAL::Unique_hash_map Seam_edge_uhm; + typedef CGAL::Unique_hash_map Seam_vertex_uhm; + typedef boost::associative_property_map Seam_edge_pmap; + typedef boost::associative_property_map Seam_vertex_pmap; public: /// @cond CGAL_DOCUMENT_INTERNALS @@ -144,7 +144,8 @@ private: mutable vertices_size_type number_of_vertices; public: - const TM& mesh()const + /// Return the underlying mesh. + const TM& mesh() const { return tm; } @@ -754,12 +755,27 @@ public: /// @endcond + /// Return the number of seam edges in the seam mesh. edges_size_type number_of_seam_edges() const { return number_of_seams; } - /// Add seams to the mesh's property maps. + /// Set the number of seam edges. + void set_seam_edges_number(const edges_size_type sn) const + { + number_of_seams = sn; + } + + /// Add seams to the property maps of the seam mesh. + /// + /// In input, a seam edge is described by the pair of integers that correspond + /// to the indices of the extremeties (vertices) of the edge that one wishes + /// to mark as seam edge. + /// + /// @pre filename should be the name of a CGAL selection file: seam edges + /// are given as pairs of integers, on the third line of the file + /// @pre A seam edge must be an edge of the graph TM_halfedge_descriptor add_seams(const char* filename) { TM_halfedge_descriptor tmhd; @@ -828,16 +844,12 @@ public: return tmhd; } - void set_seam_number(const edges_size_type sn) const - { - number_of_seams = sn; - } - /// Constructs a seam mesh for a triangle mesh and an edge and vertex property map + /// /// \param tm the adapted mesh /// \param sem the edge property map with value `true` for seam edges /// \param svm the vertex property map with value `true` for seam vertices - + /// /// @note the vertices must be exactly the vertices on the seam edges. Maybe a bad design. Seam_mesh(const TM& tm_, const SEM& sem_, const SVM svm_) : tm(tm_), diff --git a/Documentation/doc/biblio/cgal_manual.bib b/Documentation/doc/biblio/cgal_manual.bib index 125b0cd9a91..bcf2b50f896 100644 --- a/Documentation/doc/biblio/cgal_manual.bib +++ b/Documentation/doc/biblio/cgal_manual.bib @@ -636,7 +636,7 @@ note = {\url{ttp://hal.inria.fr/inria-00090522}} ,year = 1995 ,pages = {173--182} ,note = {Examples in - \url{tp://ftp.cs.washington.edu/pub/graphics}} + \url{ftp://ftp.cs.washington.edu/pub/graphics}} ,update = "97.08 kettner" } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h index c265a756133..6fb9d0efdae 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h @@ -293,7 +293,7 @@ namespace Polygon_mesh_processing { * \cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd * \cgalNamedParamsEnd * - *@pre `f != boost::graph_traits::%null_face()` + * @pre `f != boost::graph_traits::%null_face()` * * @return the area of `f`. * The return type `FT` is a number type. It is diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt index 3952de21d24..19f860aae6e 100644 --- a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt +++ b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt @@ -157,8 +157,8 @@ Left: Tutte barycentric mapping parameterization (the red line depicts the cut g `Discrete_conformal_map_parameterizer_3` -Discrete conformal map parameterization has been introduced by Eck et -al. to the graphics community \cgalCite{cgal:eddhls-maam-95}. It attempts to +Discrete conformal map parameterization has been introduced to the graphics community +by Eck et al. \cgalCite{cgal:eddhls-maam-95}. It attempts to lower angle deformation by minimizing a discrete version of the Dirichlet energy as derived by Pinkall and Polthier \cgalCite{cgal:pp-cdmsc-93}. A one-to-one mapping is guaranteed diff --git a/Surface_mesh_parameterization/include/CGAL/ARAP_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/ARAP_parameterizer_3.h index d95790fed55..6b8c65da728 100644 --- a/Surface_mesh_parameterization/include/CGAL/ARAP_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/ARAP_parameterizer_3.h @@ -266,7 +266,7 @@ private: VertexUVMap uvmap, const VertexIndexMap vimap) { - BOOST_FOREACH(vertex_descriptor vd, vertices){ + BOOST_FOREACH(vertex_descriptor vd, vertices) { int index = get(vimap, vd); NT u = Xu(index); NT v = Xv(index); @@ -282,9 +282,9 @@ private: Vertex_set& vertices, Faces_vector& faces) const { - CGAL::internal::Parameterization::Containers_filler + internal::Parameterization::Containers_filler fc(mesh, vertices, &faces); - CGAL::Polygon_mesh_processing::connected_component( + Polygon_mesh_processing::connected_component( face(opposite(bhd, mesh), mesh), mesh, boost::make_function_output_iterator(fc)); @@ -301,14 +301,14 @@ private: unsigned int number_of_borders = CGAL::Polygon_mesh_processing::number_of_borders(mesh); - if(number_of_borders == 0){ + if(number_of_borders == 0) { status = Base::ERROR_BORDER_TOO_SHORT; return status; } // According to the paper, MVC is better for single border and LSCM is better // when there are multiple borders - if(number_of_borders == 1){ + if(number_of_borders == 1) { typedef CGAL::Mean_value_coordinates_parameterizer_3 MVC_parameterizer; status = CGAL::parameterize(mesh, MVC_parameterizer(), bhd, uvmap); } else { @@ -331,7 +331,7 @@ private: Error_code status = Base::OK; CGAL_precondition(!vertices.empty()); - if(m_lambda != 0.){ + if(m_lambda != 0.) { // Fix a random vertex, the value in uvmap is already set vertex_descriptor vd = *(vertices.begin()); put(vpmap, vd, true); @@ -380,7 +380,7 @@ private: const Faces_vector& faces, Cot_map ctmap) const { - BOOST_FOREACH(face_descriptor fd, faces){ + BOOST_FOREACH(face_descriptor fd, faces) { halfedge_descriptor hd = halfedge(fd, mesh), hdb = hd; vertex_descriptor vi = target(hd, mesh); @@ -390,7 +390,7 @@ private: vertex_descriptor vk = target(hd, mesh); hd = next(hd, mesh); - if(hd != hdb){ // make sure that it is a triangular face + if(hd != hdb) { // make sure that it is a triangular face return Base::ERROR_NON_TRIANGULAR_MESH; } @@ -442,7 +442,7 @@ private: int vertexIndex = 0; halfedge_around_target_circulator hc(vertex, mesh), end = hc; - CGAL_For_all(hc, end){ + CGAL_For_all(hc, end) { halfedge_descriptor hd = *hc; CGAL_assertion(target(hd, mesh) == vertex); @@ -483,8 +483,8 @@ private: // compute A unsigned int count = 0; - BOOST_FOREACH(vertex_descriptor vd, vertices){ - if(!get(vpmap, vd)){ // not yet parameterized + BOOST_FOREACH(vertex_descriptor vd, vertices) { + if(!get(vpmap, vd)) { // not yet parameterized // Compute the line i of the matrix A status = fill_linear_system_matrix(A, mesh, vd, ctmap, vimap); if(status != Base::OK) @@ -613,7 +613,7 @@ private: CGAL_precondition(is_square_free_2(pol1)); CGAL_precondition(is_square_free_2(pol2)); - if(!is_coprime_2(pol1, pol2)){ + if(!is_coprime_2(pol1, pol2)) { std::cout << "not coprime" << std::endl; CGAL_assertion(false); // @todo handle that case @@ -658,7 +658,7 @@ private: const NT a = roots[i]; const NT b = C3 * C2_denom * a; NT Ef = compute_current_face_energy(mesh, fd, ctmap, lp, lpmap, uvmap, a, b); - if(Ef < E_min){ + if(Ef < E_min) { E_min = Ef; index_arg = i; } @@ -684,7 +684,7 @@ private: { NT Ef = compute_current_face_energy(mesh, fd, ctmap, lp, lpmap, uvmap, a_roots[i], b_roots[i]); - if(Ef < E_min){ + if(Ef < E_min) { E_min = Ef; index_arg = i; } @@ -704,12 +704,12 @@ private: { Error_code status = Base::OK; - BOOST_FOREACH(face_descriptor fd, faces){ + BOOST_FOREACH(face_descriptor fd, faces) { // Compute the coefficients C1, C2, C3 NT C1 = 0., C2 = 0., C3 = 0.; halfedge_around_face_circulator hc(halfedge(fd, mesh), mesh), end(hc); - CGAL_For_all(hc, end){ + CGAL_For_all(hc, end) { halfedge_descriptor hd = *hc; NT c = get(ctmap, hd); @@ -753,13 +753,13 @@ private: // Compute a and b NT a = 0., b = 0.; - if(m_lambda == 0.){ // ASAP + if(m_lambda == 0.) { // ASAP CGAL_precondition(C1 != 0.); a = C2 / C1; b = C3 / C1; } else if( std::abs(C1) < m_lambda_tolerance * m_lambda && - std::abs(C2) < m_lambda_tolerance * m_lambda ){ // ARAP + std::abs(C2) < m_lambda_tolerance * m_lambda ) { // ARAP // If lambda is large compared to C1 and C2, the cubic equation that // determines a and b can be simplified to a simple quadric equation @@ -875,7 +875,7 @@ private: { int global_index = 0; - BOOST_FOREACH(face_descriptor fd, faces){ + BOOST_FOREACH(face_descriptor fd, faces) { halfedge_descriptor hd = halfedge(fd, mesh), hdb = hd; vertex_descriptor vi = target(hd, mesh); // hd is k -- > i @@ -890,7 +890,7 @@ private: put(lpmap, hd, std::make_pair(global_index + 1, global_index + 2)); hd = next(hd, mesh); - if(hd != hdb){ // to make sure that it is a triangular face + if(hd != hdb) { // to make sure that it is a triangular face return Base::ERROR_NON_TRIANGULAR_MESH; } @@ -997,7 +997,7 @@ private: int vertexIndex = 0; halfedge_around_target_circulator hc(vertex, mesh), end = hc; - CGAL_For_all(hc, end){ + CGAL_For_all(hc, end) { halfedge_descriptor hd = *hc; CGAL_assertion(target(hd, mesh) == vertex); @@ -1040,8 +1040,8 @@ private: Error_code status = Base::OK; unsigned int count = 0; - BOOST_FOREACH(vertex_descriptor vd, vertices){ - if(!get(vpmap, vd)){ // not yet parameterized + BOOST_FOREACH(vertex_descriptor vd, vertices) { + if(!get(vpmap, vd)) { // not yet parameterized // Compute the lines i of the vectors Bu and Bv status = fill_linear_system_rhs(mesh, vd, ctmap, lp, lpmap, ltmap, vimap, Bu, Bv); @@ -1108,8 +1108,8 @@ private: CGAL_postcondition_code ( // make sure that the constrained vertices have not been moved - BOOST_FOREACH(vertex_descriptor vd, vertices){ - if(get(vpmap, vd)){ + BOOST_FOREACH(vertex_descriptor vd, vertices) { + if(get(vpmap, vd)) { int index = get(vimap, vd); CGAL_postcondition(std::abs(Xu[index] - Bu[index] ) < 1e-10); CGAL_postcondition(std::abs(Xv[index] - Bv[index] ) < 1e-10); @@ -1135,7 +1135,7 @@ private: NT Ef = 0.; halfedge_around_face_circulator hc(halfedge(fd, mesh), mesh), end(hc); - CGAL_For_all(hc, end){ + CGAL_For_all(hc, end) { halfedge_descriptor hd = *hc; NT cot = get(ctmap, hd); NT nabla_x = 0., nabla_y = 0.; @@ -1196,7 +1196,7 @@ private: { NT E = 0.; - BOOST_FOREACH(face_descriptor fd, faces){ + BOOST_FOREACH(face_descriptor fd, faces) { NT Ef = compute_current_face_energy(mesh, fd, ctmap, lp, lpmap, ltmap, uvmap); E += Ef; @@ -1235,7 +1235,7 @@ private: const Faces_vector& faces) const { - BOOST_FOREACH(face_descriptor fd, faces){ + BOOST_FOREACH(face_descriptor fd, faces) { // compute the jacobian // compute the singular values @@ -1350,7 +1350,7 @@ public: if(m_tolerance > 0.0 && ite <= m_iterations) // if tolerance <= 0, don't compute energy { // also no need compute energy if this iteration is the last iteration double energy_diff = std::abs((energy_last - energy_this) / energy_this); - if(energy_diff < m_tolerance){ + if(energy_diff < m_tolerance) { std::cout << "Minimization process ended after: " << ite + 1 << " iterations. " << "Energy diff: " << energy_diff << std::endl; @@ -1361,7 +1361,7 @@ public: output_uvmap("ARAP_final_pre_processing.off", mesh, vertices, faces, uvmap, vimap); - if(!internal::Parameterization::is_one_to_one_mapping(mesh, uvmap)){ + if(!is_one_to_one_mapping(mesh, uvmap)) { // Use post processing to handle flipped elements std::cout << "Parameterization is not valid; calling post processor" << std::endl; status = post_process(mesh, vertices, faces, bhd, uvmap, vimap); diff --git a/Surface_mesh_parameterization/include/CGAL/Discrete_conformal_map_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/Discrete_conformal_map_parameterizer_3.h index 1bd178daa0f..affc8fed11c 100644 --- a/Surface_mesh_parameterization/include/CGAL/Discrete_conformal_map_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/Discrete_conformal_map_parameterizer_3.h @@ -155,7 +155,7 @@ protected: Point_3 position_v_l = get(ppmap, *next_vertex_v_l); double cotg_alpha_ij = cotangent(position_v_j, position_v_l, position_v_i); - double weight = cotg_beta_ij+cotg_alpha_ij; + double weight = cotg_beta_ij + cotg_alpha_ij; return weight; } }; diff --git a/Surface_mesh_parameterization/include/CGAL/Fixed_border_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/Fixed_border_parameterizer_3.h index 6f88d59737c..c95ed4857f5 100644 --- a/Surface_mesh_parameterization/include/CGAL/Fixed_border_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/Fixed_border_parameterizer_3.h @@ -332,8 +332,8 @@ parameterize(TriangleMesh& mesh, typedef boost::unordered_set Vertex_set; Vertex_set vertices; - CGAL::internal::Parameterization::Containers_filler fc(mesh, vertices); - CGAL::Polygon_mesh_processing::connected_component( + internal::Parameterization::Containers_filler fc(mesh, vertices); + Polygon_mesh_processing::connected_component( face(opposite(bhd, mesh), mesh), mesh, boost::make_function_output_iterator(fc)); diff --git a/Surface_mesh_parameterization/include/CGAL/IO/Surface_mesh_parameterization/File_off.h b/Surface_mesh_parameterization/include/CGAL/IO/Surface_mesh_parameterization/File_off.h index 85fe4f27388..55821480114 100644 --- a/Surface_mesh_parameterization/include/CGAL/IO/Surface_mesh_parameterization/File_off.h +++ b/Surface_mesh_parameterization/include/CGAL/IO/Surface_mesh_parameterization/File_off.h @@ -108,8 +108,8 @@ void output_uvmap_to_off(const TriangleMesh& mesh, boost::unordered_set vertices; std::vector faces; - CGAL::internal::Parameterization::Containers_filler fc(mesh, vertices, &faces); - CGAL::Polygon_mesh_processing::connected_component( + internal::Parameterization::Containers_filler fc(mesh, vertices, &faces); + Polygon_mesh_processing::connected_component( face(opposite(bhd, mesh), mesh), mesh, boost::make_function_output_iterator(fc)); diff --git a/Surface_mesh_parameterization/include/CGAL/LSCM_parameterizer_3.h b/Surface_mesh_parameterization/include/CGAL/LSCM_parameterizer_3.h index 92c38baf632..8e7a9b5d39e 100644 --- a/Surface_mesh_parameterization/include/CGAL/LSCM_parameterizer_3.h +++ b/Surface_mesh_parameterization/include/CGAL/LSCM_parameterizer_3.h @@ -181,9 +181,9 @@ public: boost::unordered_set ccvertices; std::vector ccfaces; - CGAL::internal::Parameterization::Containers_filler + internal::Parameterization::Containers_filler fc(mesh, ccvertices, &ccfaces); - CGAL::Polygon_mesh_processing::connected_component( + Polygon_mesh_processing::connected_component( face(opposite(bhd, mesh), mesh), mesh, boost::make_function_output_iterator(fc)); diff --git a/Surface_mesh_parameterization/include/CGAL/MVC_post_processor_3.h b/Surface_mesh_parameterization/include/CGAL/MVC_post_processor_3.h index 0b0a0415c1a..605f47655b9 100644 --- a/Surface_mesh_parameterization/include/CGAL/MVC_post_processor_3.h +++ b/Surface_mesh_parameterization/include/CGAL/MVC_post_processor_3.h @@ -172,7 +172,7 @@ private: const Vector& Xv, const Vertex_set& vertices, VertexUVMap uvmap, - const VertexIndexMap vimap) + const VertexIndexMap vimap) const { BOOST_FOREACH(vertex_descriptor vd, vertices){ int index = get(vimap, vd);