CGAL 4.10.2 - Polygon Mesh Processing
|
Functions to triangulate faces, and to refine and fair regions of a polygon mesh.
Functions | |
template<typename TriangleMesh , typename FaceRange , typename FaceOutputIterator , typename VertexOutputIterator , typename NamedParameters > | |
std::pair< FaceOutputIterator, VertexOutputIterator > | CGAL::Polygon_mesh_processing::refine (TriangleMesh &tmesh, const FaceRange &faces, FaceOutputIterator faces_out, VertexOutputIterator vertices_out, const NamedParameters &np) |
refines a region of a triangle mesh More... | |
template<typename TriangleMesh , typename VertexRange , typename NamedParameters > | |
bool | CGAL::Polygon_mesh_processing::fair (TriangleMesh &tmesh, const VertexRange &vertices, const NamedParameters &np) |
fairs a region on a triangle mesh. More... | |
template<typename PolygonMesh , typename FaceRange , typename NamedParameters > | |
void | CGAL::Polygon_mesh_processing::isotropic_remeshing (const FaceRange &faces, const double &target_edge_length, PolygonMesh &pmesh, const NamedParameters &np) |
remeshes a triangulated region of a polygon mesh. More... | |
template<typename PolygonMesh , typename EdgeRange , typename NamedParameters > | |
void | CGAL::Polygon_mesh_processing::split_long_edges (const EdgeRange &edges, const double &max_length, PolygonMesh &pmesh, const NamedParameters &np) |
splits the edges listed in edges into sub-edges that are not longer than the given threshold max_length . More... | |
template<typename PolygonMesh , typename NamedParameters > | |
bool | CGAL::Polygon_mesh_processing::triangulate_face (typename boost::graph_traits< PolygonMesh >::face_descriptor f, PolygonMesh &pmesh, const NamedParameters &np) |
triangulates a single face of a polygon mesh. More... | |
template<typename FaceRange , typename PolygonMesh , typename NamedParameters > | |
bool | CGAL::Polygon_mesh_processing::triangulate_faces (FaceRange face_range, PolygonMesh &pmesh, const NamedParameters &np) |
triangulates given faces of a polygon mesh. More... | |
template<typename PolygonMesh , typename NamedParameters > | |
bool | CGAL::Polygon_mesh_processing::triangulate_faces (PolygonMesh &pmesh, const NamedParameters &np) |
triangulates all faces of a polygon mesh. More... | |
bool CGAL::Polygon_mesh_processing::fair | ( | TriangleMesh & | tmesh, |
const VertexRange & | vertices, | ||
const NamedParameters & | np | ||
) |
fairs a region on a triangle mesh.
The points of the selected vertices are relocated to yield an as-smooth-as-possible surface patch, based on solving a linear bi-Laplacian system with boundary constraints, described in [3]. The optional parameter fairing_continuity
gives the ability to control the tangential continuity Cn of the output mesh.
The region described by vertices
might contain multiple disconnected components. Note that the mesh connectivity is not altered in any way, only vertex locations get updated.
Fairing might fail if fixed vertices, which are used as boundary conditions, do not suffice to solve constructed linear system.
Note that if the vertex range to which fairing is applied contains all the vertices of the triangle mesh, fairing does not fail, but the mesh gets shrinked to CGAL::ORIGIN
.
TriangleMesh | a model of FaceGraph and MutableFaceGraph |
VertexRange | a range of vertex descriptors of TriangleMesh , model of Range . Its iterator type is InputIterator . |
NamedParameters | a sequence of Named Parameters |
tmesh | the triangle mesh with patches to be faired |
vertices | the vertices of the patches to be faired (the positions of only those vertices will be changed) |
np | optional sequence of Named Parameters among the ones listed below |
vertex_point_map | the property map with the points associated to the vertices of tmesh . If this parameter is omitted, an internal property map for CGAL::vertex_point_t should be available in TriangleMesh |
fairing_continuity | tangential continuity of the output surface patch. The larger fairing_continuity gets, the more fixed vertices are required |
sparse_linear_solver | an instance of the sparse linear solver used for fairing |
true
if fairing is successful, otherwise no vertices are relocatedis_triangle_mesh(tmesh)
#include <CGAL/Polygon_mesh_processing/fair.h>
void CGAL::Polygon_mesh_processing::isotropic_remeshing | ( | const FaceRange & | faces, |
const double & | target_edge_length, | ||
PolygonMesh & | pmesh, | ||
const NamedParameters & | np | ||
) |
remeshes a triangulated region of a polygon mesh.
This operation sequentially performs edge splits, edge collapses, edge flips, tangential relaxation and projection to the initial surface to generate a smooth mesh with a prescribed edge length.
PolygonMesh | model of MutableFaceGraph . The descriptor types boost::graph_traits<PolygonMesh>::face_descriptor and boost::graph_traits<PolygonMesh>::halfedge_descriptor must be models of Hashable . If PolygonMesh has an internal property map for CGAL::face_index_t , and no face_index_map is given as a named parameter, then the internal one should be initialized |
FaceRange | range of boost::graph_traits<PolygonMesh>::face_descriptor , model of Range . Its iterator type is ForwardIterator . |
NamedParameters | a sequence of Named Parameters |
pmesh | a polygon mesh with triangulated surface patches to be remeshed |
faces | the range of triangular faces defining one or several surface patches to be remeshed |
target_edge_length | the edge length that is targetted in the remeshed patch. If 0 is passed then only the edge-flip, tangential relaxation, and projection steps will be done. |
np | optional sequence of Named Parameters among the ones listed below |
target_edge_length
geom_traits | a geometric traits class instance, model of Kernel . Exact constructions kernels are not supported by this function. |
vertex_point_map | the property map with the points associated to the vertices of pmesh . Instance of a class model of ReadWritePropertyMap . |
face_index_map | a property map containing the index of each face of pmesh |
number_of_iterations | the number of iterations for the sequence of atomic operations performed (listed in the above description) |
edge_is_constrained_map | a property map containing the constrained-or-not status of each edge of pmesh . A constrained edge can be split or collapsed, but not flipped, nor its endpoints moved by smoothing. Note that patch boundary edges (i.e. incident to only one face in the range) are always considered as constrained edges. |
vertex_is_constrained_map | a property map containing the constrained-or-not status of each vertex of pmesh . A constrained vertex cannot be modified at all during remeshing |
protect_constraints | If true , the edges set as constrained in edge_is_constrained_map (or by default the boundary edges) are not split nor collapsed during remeshing. Note that around constrained edges that have their length higher than twice target_edge_length , remeshing will fail to provide good quality results. It can even fail to terminate because of cascading vertex insertions. |
face_patch_map | a property map with the patch id's associated to the faces of faces . Instance of a class model of ReadWritePropertyMap . It gets updated during the remeshing process while new faces are created. |
number_of_relaxation_steps | the number of iterations of tangential relaxation that are performed at each iteration of the remeshing process |
relax_constraints | If true , the end vertices of the edges set as constrained in edge_is_constrained_map and boundary edges move along the constrained polylines they belong to. |
split_long_edges()
#include <CGAL/Polygon_mesh_processing/remesh.h>
std::pair<FaceOutputIterator, VertexOutputIterator> CGAL::Polygon_mesh_processing::refine | ( | TriangleMesh & | tmesh, |
const FaceRange & | faces, | ||
FaceOutputIterator | faces_out, | ||
VertexOutputIterator | vertices_out, | ||
const NamedParameters & | np | ||
) |
refines a region of a triangle mesh
TriangleMesh | model of MutableFaceGraph |
FaceRange | range of face descriptors, model of Range . Its iterator type is InputIterator . |
FaceOutputIterator | model of OutputIterator holding boost::graph_traits<TriangleMesh>::face_descriptor for patch faces |
VertexOutputIterator | model of OutputIterator holding boost::graph_traits<TriangleMesh>::vertex_descriptor for patch vertices |
NamedParameters | a sequence of Named Parameters |
tmesh | triangle mesh with patches to be refined |
faces | the range of faces defining the patches to refine |
faces_out | output iterator into which descriptors of new faces are recorded |
vertices_out | output iterator into which descriptors of new vertices are recorded |
np | optional sequence of Named Parameters among the ones listed below |
vertex_point_map | the property map with the points associated to the vertices of tmesh Instance of a class model of ReadWritePropertyMap . If this parameter is omitted, an internal property map for CGAL::vertex_point_t should be available in TriangleMesh |
density_control_factor | factor to control density of the output mesh, where larger values lead to denser refinements. The density of vertices of faces_out is this factor times higher than the vertices of faces. |
faces_out
and vertices_out
is_triangle_mesh(tmesh)
#include <CGAL/Polygon_mesh_processing/refine.h>
void CGAL::Polygon_mesh_processing::split_long_edges | ( | const EdgeRange & | edges, |
const double & | max_length, | ||
PolygonMesh & | pmesh, | ||
const NamedParameters & | np | ||
) |
splits the edges listed in edges
into sub-edges that are not longer than the given threshold max_length
.
Note this function is useful to split constrained edges before calling isotropic_remeshing()
with protection of constraints activated (to match the constrained edge length required by the remeshing algorithm to be guaranteed to terminate)
PolygonMesh | model of MutableFaceGraph that has an internal property map for CGAL::vertex_point_t . |
EdgeRange | range of boost::graph_traits<PolygonMesh>::edge_descriptor , model of Range . Its iterator type is InputIterator . |
NamedParameters | a sequence of Named Parameters |
pmesh | a polygon mesh |
edges | the range of edges to be split if they are longer than given threshold |
max_length | the edge length above which an edge from edges is split into to sub-edges |
np | optional Named Parameters described below |
vertex_point_map | the property map with the points associated to the vertices of pmesh . Instance of a class model of ReadWritePropertyMap . |
isotropic_remeshing()
#include <CGAL/Polygon_mesh_processing/remesh.h>
bool CGAL::Polygon_mesh_processing::triangulate_face | ( | typename boost::graph_traits< PolygonMesh >::face_descriptor | f, |
PolygonMesh & | pmesh, | ||
const NamedParameters & | np | ||
) |
triangulates a single face of a polygon mesh.
This function depends on the package 2D Triangulation
PolygonMesh | a model of FaceListGraph and MutableFaceGraph |
NamedParameters | a sequence of Named Parameters |
f | face to be triangulated |
pmesh | the polygon mesh to which the face to be triangulated belongs |
np | optional sequence of Named Parameters among the ones listed below |
vertex_point_map | the property map with the points associated to the vertices of pmesh . If this parameter is omitted, an internal property map for CGAL::vertex_point_t should be available in PolygonMesh |
geom_traits | a geometric traits class instance |
true
if the face has been triangulated. #include <CGAL/Polygon_mesh_processing/triangulate_faces.h>
bool CGAL::Polygon_mesh_processing::triangulate_faces | ( | FaceRange | face_range, |
PolygonMesh & | pmesh, | ||
const NamedParameters & | np | ||
) |
triangulates given faces of a polygon mesh.
This function depends on the package 2D Triangulation
FaceRange | range of boost::graph_traits<PolygonMesh>::face_descriptor , model of Range . Its iterator type is InputIterator . |
PolygonMesh | a model of FaceListGraph and MutableFaceGraph |
NamedParameters | a sequence of Named Parameters |
face_range | the range of faces to be triangulated |
pmesh | the polygon mesh to be triangulated |
np | optional sequence of Named Parameters among the ones listed below |
vertex_point_map | the property map with the points associated to the vertices of pmesh . If this parameter is omitted, an internal property map for CGAL::vertex_point_t should be available in PolygonMesh |
geom_traits | a geometric traits class instance |
true
if all the faces have been triangulated. #include <CGAL/Polygon_mesh_processing/triangulate_faces.h>
bool CGAL::Polygon_mesh_processing::triangulate_faces | ( | PolygonMesh & | pmesh, |
const NamedParameters & | np | ||
) |
triangulates all faces of a polygon mesh.
This function depends on the package 2D Triangulation
PolygonMesh | a model of FaceListGraph and MutableFaceGraph |
NamedParameters | a sequence of Named Parameters |
pmesh | the polygon mesh to be triangulated |
np | optional sequence of Named Parameters among the ones listed below |
vertex_point_map | the property map with the points associated to the vertices of pmesh . If this parameter is omitted, an internal property map for CGAL::vertex_point_t should be available in PolygonMesh |
geom_traits | a geometric traits class instance |
true
if all the faces have been triangulated. #include <CGAL/Polygon_mesh_processing/triangulate_faces.h>