diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt index 5c9e39811d4..eae47c61001 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/PackageDescription.txt @@ -201,14 +201,6 @@ The page \ref bgl_namedparameters "Named Parameters" describes their usage. - \link PMP_locate_grp Random Location Generation \endlink \cgalCRPSection{Corrected Curvature Functions} -- `CGAL::Polygon_mesh_processing::interpolated_corrected_measure_mesh()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_anisotropic_measure_mesh()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_area_measure_face()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature_measure_face()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature_measure_face()` -- `CGAL::Polygon_mesh_processing::interpolated_corrected_anisotropic_measure_face()` -- `CGAL::Polygon_mesh_processing::expand_interpolated_corrected_measure_vertex()` -- `CGAL::Polygon_mesh_processing::expand_interpolated_corrected_anisotropic_measure_vertex()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` - `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index 743d6bc3507..6c684c4419b 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -876,6 +876,60 @@ not provide storage for the normals. \cgalExample{Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp} +**************************************** +\section PMPICC Computing Curvatures + +This package provides methods to compute curvatures on polygonal meshes based on #PAPER#. +This includes mean curvature, gaussian curvature, principal curvatures and directions. +These can be computed on triangle meshes, quad meshes, and meshes with n-gon faces. +The algorithms used prove to work well in general. Also, on meshes with noise +on vertex positions, they give accurate results, on the condition that the +correct vertex normals are provided. + +The implementation is generic in terms of mesh data structure. It can be used on Surface_mesh, +Polyhedron_3 and other polygonal mesh structures based on the Face Graph Model. + +These computations are performed using : +- `CGAL::Polygon_mesh_processing::interpolated_corrected_mean_curvature()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_gaussian_curvature()` +- `CGAL::Polygon_mesh_processing::interpolated_corrected_principal_curvatures()` + +\cgalFigureRef{icc_diff_radius} shows how the mean curvature changes depending on +the ball_radius named parameter which can be set to a value > 0 to get a smoother +distribution of valuesa and "diffuse" the extreme values of curvatures across the mesh. + +\cgalFigureAnchor{icc_diff_radius} +
+ +
+\cgalFigureCaptionBegin{icc_diff_radius} +The mean curvature distrubution on a bear mesh with different values for the expanding ball radius +\cgalFigureCaptionEnd + +Property maps are used to record the computed curvatures as shown in examples. + +\subsection ICCExample Interpolated Corrected Curvature Examples + +Property maps are an API introduced in the boost library that allows to +associate values to keys. In the following examples, for each proberty map, we associate +a curvature value to each vertex. + +\subsubsection ICCExample Interpolated Corrected Curvature on a Surface Mesh. + +The following example illustrates how to +compute the curvatures on vertices +and store them in property maps provided by the class `Surface_mesh`. + +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp} + +\subsubsection NormalsExampleNP Interpolated Corrected Curvature on a Polyhedron + +The following example illustrates how to +compute the curvatures on vertices +and store them in unordered (or ordered) maps as the class `Polyhedron_3` does +not provide storage for the curvatures. + +\cgalExample{Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp} **************************************** \section PMPSlicer Slicer diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt index 0317812aa44..0588d1c76e1 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/examples.txt @@ -19,7 +19,8 @@ \example Polygon_mesh_processing/refine_fair_example.cpp \example Polygon_mesh_processing/mesh_slicer_example.cpp \example Polygon_mesh_processing/isotropic_remeshing_example.cpp -\example Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp +\example Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp \example Polygon_mesh_processing/delaunay_remeshing_example.cpp \example Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp \example Polygon_mesh_processing/hausdorff_distance_remeshing_example.cpp diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt index 4783d957589..ab084384835 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/CMakeLists.txt @@ -105,8 +105,10 @@ create_single_source_cgal_program("cc_compatible_orientations.cpp") if(TARGET CGAL::Eigen3_support) - create_single_source_cgal_program("interpolated_corrected_curvatures.cpp") - target_link_libraries(interpolated_corrected_curvatures PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_example.cpp") + target_link_libraries(interpolated_corrected_curvatures_example PUBLIC CGAL::Eigen3_support) + create_single_source_cgal_program("interpolated_corrected_curvatures_polyhedron_example.cpp") + target_link_libraries(interpolated_corrected_curvatures_polyhedron_example PUBLIC CGAL::Eigen3_support) endif() diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp similarity index 52% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp index c011d57db41..caaa52eb3af 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_example.cpp @@ -7,18 +7,17 @@ #include #include -#include namespace PMP = CGAL::Polygon_mesh_processing; -typedef CGAL::Exact_predicates_inexact_constructions_kernel EpicKernel; -typedef CGAL::Surface_mesh Mesh; -typedef boost::graph_traits::face_descriptor face_descriptor; -typedef boost::graph_traits::vertex_descriptor vertex_descriptor; +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_Kernel; +typedef CGAL::Surface_mesh Surface_Mesh; +typedef boost::graph_traits::face_descriptor face_descriptor; +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; int main(int argc, char* argv[]) { - Mesh g1; + Surface_Mesh g1; const std::string filename = (argc>1) ? argv[1] : CGAL::data_file_path("meshes/small_bunny.obj"); @@ -29,36 +28,54 @@ int main(int argc, char* argv[]) return EXIT_FAILURE; } + // creating and tying surface mesh property maps for curvatures (with defaults = 0) bool created = false; - - Mesh::Property_map mean_curvature_map, gaussian_curvature_map; - boost::tie(mean_curvature_map, created) = g1.add_property_map("v:mean_curvature_map", 0); + Surface_Mesh::Property_map mean_curvature_map, gaussian_curvature_map; + boost::tie(mean_curvature_map, created) = g1.add_property_map("v:mean_curvature_map", 0); assert(created); - boost::tie(gaussian_curvature_map, created) = g1.add_property_map("v:gaussian_curvature_map", 0); + boost::tie(gaussian_curvature_map, created) = g1.add_property_map("v:gaussian_curvature_map", 0); assert(created); - Mesh::Property_map> principle_curvature_map; boost::tie(principle_curvature_map, created) = g1.add_property_map>("v:principle_curvature_map", { 0, 0, - EpicKernel::Vector_3 (0,0,0), - EpicKernel::Vector_3 (0,0,0)}); + Epic_Kernel::Vector_3 (0,0,0), + Epic_Kernel::Vector_3 (0,0,0)}); assert(created); PMP::interpolated_corrected_mean_curvature( g1, mean_curvature_map ); + + // uncomment this to compute a curvature while specifying named parameters + // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) + + /*Surface_Mesh::Property_map vnm; + boost::tie(vnm, created) = g1.add_property_map( + "v:vnm", Epic_Kernel::Vector_3(0, 0, 0) + ); + + assert(created); + + PMP::interpolated_corrected_mean_curvature( + g1, + mean_curvature_map, + CGAL::parameters::ball_radius(0.5).vertex_normal_map(vnm) + );*/ + PMP::interpolated_corrected_gaussian_curvature( g1, gaussian_curvature_map diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp new file mode 100644 index 00000000000..3e56905068f --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/interpolated_corrected_curvatures_polyhedron_example.cpp @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include + +#include + +#include +#include + +namespace PMP = CGAL::Polygon_mesh_processing; + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_Kernel; +typedef CGAL::Polyhedron_3 Polyhedron; +typedef boost::graph_traits::face_descriptor face_descriptor; +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; + +int main(int argc, char* argv[]) +{ + Polyhedron g1; + const std::string filename = (argc>1) ? + argv[1] : + CGAL::data_file_path("meshes/small_bunny.obj"); + + if(!CGAL::IO::read_polygon_mesh(filename, g1)) + { + std::cerr << "Invalid input file." << std::endl; + return EXIT_FAILURE; + } + + std::unordered_map mean_curvature_map, gaussian_curvature_map; + std::unordered_map> principle_curvature_map; + + PMP::interpolated_corrected_mean_curvature( + g1, + boost::make_assoc_property_map(mean_curvature_map) + ); + + // uncomment this to compute a curvature while specifying named parameters + // Example: an expansion ball radius of 0.5 and a vertex normals map (does not have to depend on positions) + + /*std::unordered_map vnm; + + PMP::interpolated_corrected_mean_curvature( + g1, + boost::make_assoc_property_map(mean_curvature_map), + CGAL::parameters::ball_radius(0.5).vertex_normal_map(boost::make_assoc_property_map(vnm)) + );*/ + + PMP::interpolated_corrected_gaussian_curvature( + g1, + boost::make_assoc_property_map(gaussian_curvature_map) + ); + PMP::interpolated_corrected_principal_curvatures( + g1, + boost::make_assoc_property_map(principle_curvature_map) + ); + + int i = 0; + for (vertex_descriptor v : vertices(g1)) + { + auto PC = principle_curvature_map[v]; + std::cout << i << ": HC = " << mean_curvature_map[v] + << ", GC = " << gaussian_curvature_map[v] << "\n" + << ", PC = [ " << std::get<0>(PC) << " , " << std::get<1>(PC) << " ]\n"; + i++; + } +} diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h index e2e1292aedb..8f5e1d338ed 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/Curvatures/interpolated_corrected_curvature_measures.h @@ -44,7 +44,7 @@ typename GT::FT average_edge_length(const PolygonMesh& pmesh) if (n == 0) return 0; - GT::FT avg_edge_length = 0; + typename GT::FT avg_edge_length = 0; for (auto e : edges(pmesh)) avg_edge_length += edge_length(e, pmesh); @@ -52,35 +52,12 @@ typename GT::FT average_edge_length(const PolygonMesh& pmesh) return avg_edge_length; } -} - -/*! - * \ingroup PMP_corrected_curvatures_grp - * Enumeration type used to specify which measure of a given face - * is computed for the interpolated corrected curvature functions. - */ -// enum enum Curvature_measure_index { MU0_AREA_MEASURE, ///< corrected area density MU1_MEAN_CURVATURE_MEASURE, ///< corrected mean curvature density MU2_GAUSSIAN_CURVATURE_MEASURE ///< corrected gaussian curvature density }; -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected area measure \f$ \mu_0 \f$ of a specific face. -* -* @tparam GT geometric traits class model of `Kernel`. -* -* @param x is a vector of the vertex positions of the face. -* @param u is a vector of the vertex normals of the face. -* -* -* @see `interpolated_corrected_mean_curvature_measure_face()` -* @see `interpolated_corrected_gaussian_curvature_measure_face()` -* @see `interpolated_corrected_measure_mesh()` -*/ template typename GT::FT interpolated_corrected_area_measure_face(const std::vector& u, const std::vector& x = {}) @@ -136,20 +113,6 @@ typename GT::FT interpolated_corrected_area_measure_face(const std::vector typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::vector& u, const std::vector& x = {}) @@ -216,20 +179,6 @@ typename GT::FT interpolated_corrected_mean_curvature_measure_face(const std::ve } } -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected gaussian curvature measure \f$ \mu_2 \f$ of a specific face. -* -* @tparam GT geometric traits class model of `Kernel`. -* -* @param x is a vector of the vertex positions of the face. -* @param u is a vector of the vertex nomrals of the face. -* -* @see `interpolated_corrected_mean_curvature_measure_face()` -* @see `interpolated_corrected_area_measure_face()` -* @see `interpolated_corrected_measure_mesh()` -*/ template typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std::vector& u, const std::vector& x = {}) @@ -277,21 +226,6 @@ typename GT::FT interpolated_corrected_gaussian_curvature_measure_face(const std } } -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected anisotropic measure \f$ \mu_{XY} \f$ of a specific face. -* -* @tparam GT geometric traits class model of `Kernel`. -* -* @param u is a vector of the vertex nomrals of the face. -* @param x is a vector of the vertex positions of the face. -* -* @return an array of scalar values for each combination of the standard basis (3x3) -* These are the values of the interpolated corrected anisotropic measure of the given face. -* -* @see `interpolated_corrected_anisotropic_measure_mesh()` -*/ template std::array interpolated_corrected_anisotropic_measure_face(const std::vector& u, const std::vector& x) @@ -403,51 +337,6 @@ std::array interpolated_corrected_anisotropic_measure_fa return muXY; } - -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Computes the interpolated corrected curvature measure on each face of the mesh. -* -* @tparam PolygonMesh a model of `FaceListGraph`. -* @tparam FaceMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure. -* @param mu_i an enum for choosing between computing -* the area measure, the mean curvature measure or the gaussian curvature measure. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `interpolated_corrected_area_measure_face()` -* @see `interpolated_corrected_mean_curvature_measure_face()` -* @see `interpolated_corrected_gaussian_curvature_measure_face()` -*/ template void @@ -518,48 +407,6 @@ template::%face_descriptor` as key type and `std::array` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param fmm (face measure map) the property map used for storing the computed interpolated corrected measure. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_normal_map} -* \cgalParamDescription{a property map associating normal vectors to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Vector_3` as value type} -* \cgalParamDefault{`get(dynamic_vertex_property_t(), pmesh)`} -* \cgalParamExtra{If this parameter is omitted, vertex normals will be -* computed using compute_vertex_normals()} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `interpolated_corrected_anisotropic_measure_face()` -* @see `interpolated_corrected_measure_mesh()` -*/ template void @@ -636,21 +483,6 @@ template typename GT::FT face_in_ball_ratio(const std::vector& x, const typename GT::FT r, @@ -682,52 +514,6 @@ typename GT::FT face_in_ball_ratio(const std::vector& x, return (r - d_min) / (d_max - d_min); } -/** -* \ingroup PMP_corrected_curvatures_grp -* -* Expands given face area and curvature (mean or gaussian) measures around a vertex `v`. -* Expansion is based on the inclusion ratio of each face in a ball of radius `r` around the vertex `v`. -* -* @tparam PolygonMesh a model of `FaceListGraph`. -* @tparam FaceMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%face_descriptor` as key type and `GT::FT` as value type. -* @tparam VertexMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param area_fmm (area face measure map) the property map storing the already computed area measure on each face. -* @param curvature_fmm (curvature face measure map) the property map storing the already computed curvature measure on each face. -* This curvature measure can be either the Mean Curvature or the Gaussian Curvature. -* @param area_vmm (area vertex measure map) the property map provided to store the expanded area measure on each vertex. -* @param curvature_vmm (curvature vertex measure map) the property map provided to store the expanded curvature measure on each vertex. -* This curvature measure can be either the Mean Curvature or the Gaussian Curvature. -* @param v (vertex) the vertex to expand the area and curvature measure around. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{ball_radius} -* \cgalParamDescription{the radius of the ball around the vertex `v` to expand the area and curvature measure} -* \cgalParamType{`GT::FT`} -* \cgalParamDefault{`0.01`} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `expand_interpolated_corrected_anisotropic_measure_vertex()` -* @see `face_in_ball_ratio()` -*/ template void expand_interpolated_corrected_measure_vertex(const PolygonMesh& pmesh, @@ -802,54 +588,6 @@ template::%face_descriptor` as key type and `GT::FT` as value type. -* @tparam AnisotropicFaceMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%face_descriptor` as key type and `std::array` as value type. -* @tparam AreaVertexMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` as key type and `GT::FT` as value type. -* @tparam AnisotropicVertexMeasureMap a model of `WritablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` as key type and `std::array` as value type. -* @tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters". -* -* @param pmesh the polygon mesh. -* @param area_fmm (area face measure map) the property map storing the already computed area measure on each face. -* @param aniso_fmm (anisotropic face measure map) the property map storing the already computed anisotropic measure on each face. -* @param area_vmm (area vertex measure map) the property map provided to store the expanded area measure on each vertex. -* @param aniso_vmm (anisotropic vertex measure map) the property map provided to store the expanded anisotropic measure on each vertex. -* @param v (vertex) the vertex to expand the area and anisotropic measure around. -* @param np an optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below -* -* \cgalNamedParamsBegin -* -* \cgalParamNBegin{ball_radius} -* \cgalParamDescription{the radius of the ball around the vertex `v` to expand the area and curvature measure} -* \cgalParamType{`GT::FT`} -* \cgalParamDefault{`0.01`} -* \cgalParamNEnd -* -* \cgalParamNBegin{vertex_point_map} -* \cgalParamDescription{a property map associating points to the vertices of `pmesh`} -* \cgalParamType{a class model of `ReadablePropertyMap` with -* `boost::graph_traits::%vertex_descriptor` -* as key type and `%Point_3` as value type} -* \cgalParamDefault{`boost::get(CGAL::vertex_point, pmesh)`} -* \cgalParamExtra{If this parameter is omitted, an internal property map for -* `CGAL::vertex_point_t` must be available in `PolygonMesh`.} -* \cgalParamNEnd -* -* \cgalNamedParamsEnd -* -* @see `expand_interpolated_corrected_measure_vertex()` -* @see `face_in_ball_ratio()` -*/ template @@ -931,6 +669,8 @@ template mu0_expand_map(mu0_expand_init), mu1_expand_map(mu1_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); - interpolated_corrected_measure_mesh(pmesh, mu1_map, MU1_MEAN_CURVATURE_MEASURE, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu1_map, internal::MU1_MEAN_CURVATURE_MEASURE, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu1_map, mu0_expand_map, mu1_expand_map, v, np.ball_radius(r)); + internal::expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu1_map, mu0_expand_map, mu1_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); if (v_mu0 != 0.0) @@ -1015,8 +753,6 @@ template @@ -1049,12 +785,12 @@ template mu0_expand_map(mu0_expand_init), mu2_expand_map(mu2_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); - interpolated_corrected_measure_mesh(pmesh, mu2_map, MU2_GAUSSIAN_CURVATURE_MEASURE, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu2_map, internal::MU2_GAUSSIAN_CURVATURE_MEASURE, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu2_map, mu0_expand_map, mu2_expand_map, v, np.ball_radius(r)); + internal::expand_interpolated_corrected_measure_vertex(pmesh, mu0_map, mu2_map, mu0_expand_map, mu2_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); if(v_mu0 != 0.0) @@ -1106,8 +842,6 @@ template @@ -1172,12 +906,12 @@ template muXY_expand_map(muXY_expand_init); - interpolated_corrected_measure_mesh(pmesh, mu0_map, MU0_AREA_MEASURE, np); - interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map, np); + internal::interpolated_corrected_measure_mesh(pmesh, mu0_map, internal::MU0_AREA_MEASURE, np); + internal::interpolated_corrected_anisotropic_measure_mesh(pmesh, muXY_map, np); for (vertex_descriptor v : vertices(pmesh)) { - expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, mu0_map, muXY_map, mu0_expand_map, muXY_expand_map, v, np.ball_radius(r)); + internal::expand_interpolated_corrected_anisotropic_measure_vertex(pmesh, mu0_map, muXY_map, mu0_expand_map, muXY_expand_map, v, np.ball_radius(r)); typename GT::FT v_mu0 = get(mu0_expand_map, v); Eigen::Matrix v_muXY = get(muXY_expand_map, v);