generates a new triangle mesh pm_out with the minimal number of triangles from a partition of tm_in.
The terminology used here and the global idea is very similar to what is done by remesh_planar_patches() except that here the partition into patches and corner identification is provided by the user. It allows to have a remeshing of almost coplanar regions, detected for example using the region growing algorithm with the functions region_growing_of_planes_on_faces() and detect_corners_of_regions(). If a patch cannot be triangulated, it is left untouched in the output and all its vertices become corners so that the output is still a valid conformal triangle mesh.
Returns
true if all patches could be triangulated and false otherwise.
a property map that contains for each face the id of its patch in the range [0, nb_patches]
vertex_corner_map
a property map that contains for each vertex that is a corner an id in the range [0, nb_corners - 1], and std::size_t(-1) otherwise.
ecm
a property map that contains true if an edge is on the border of a patch and false otherwise.
np_in
an optional sequence of Named Parameters among the ones listed below:
Optional Named Parameters
a property map providing for each patch the normal of the supporting plane of the patch (used to triangulate it)
Type: a class model of ReadPropertyMap with the value type of FacePatchMap as key and GeomTraits::Vector_3 as value type, GeomTraits being the type of the parameter geom_traits
Default: If not provided, patch normals will be estimated using corners of the patches
a property map associating points to the vertices of tm_in
Type: a class model of ReadablePropertyMap with boost::graph_traits<TriangleMeshIn>::vertex_descriptor as key type and GeomTraits::Point_3 as value type, GeomTraits being the type of the parameter geom_traits
Default: boost::get(CGAL::vertex_point, tm_in)
Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMeshIn.
Extra: The geometric traits class must be compatible with the vertex point type.
Parameters
np_out
an optional sequence of Named Parameters among the ones listed below:
Optional Named Parameters
if true, faces of pm_out will not be triangulated, but the one with more than one connected component of the boundary.
Type: bool
Default: false
a property map associating points to the vertices of pm_out
Type: a class model of WritablePropertyMap with boost::graph_traits<PolygonMeshOut>::vertex_descriptor as key type and GeomTraits::Point_3 as value type, GeomTraits being the type of the parameter geom_traits
Default: boost::get(CGAL::vertex_point, pm_out)
Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in PolygonMeshOut.
a property map filled by this function and that will contain for each face the id of its patch in the range [0, number of patches - 1]
Type: a class model of ReadWritePropertyMap with boost::graph_traits<PolygonMeshOut>::face_descriptor as key type and std::size_t as value type
Default: None
a property map filled by this function and that will contain for each vertex its corner an id in the range [0, number of corners - 1]
Type: a class model of ReadWritePropertyMap with boost::graph_traits<PolygonMeshOut>::vertex_descriptor as key type and std::size_t as value type
Default: None
a callable with visitor(pm_out) being called once tm_in is no longer needed and before pm_out starts being built. It should be used in the case when tm_in and pm_out are the same mesh, so that pm_out can be cleared before being filled.
generates a new triangle mesh pm_out with the minimal number of triangles while preserving the shape of tm_in.
In practice, this means that connected components of edge-connected faces belonging to the same plane are first extracted (each such connected component is called a patch). Then, the connected components of vertex-connected patch border edges belonging to the same line are extracted. Endpoints of such components and vertices incident to more than two patches (or two patches + one mesh boundary) are called corners. pm_out contains the 2D constrained Delaunay triangulation of each patch using only corner vertices on the boundary of the patch.
Warning
if tm_in contains a non-manifold vertex, pm_out will be empty. Those vertices must be duplicated with duplicate_non_manifold_vertices() to get an output.
an optional sequence of Named Parameters among the ones listed below:
Optional Named Parameters
a property map associating points to the vertices of tm_in
Type: a class model of ReadablePropertyMap with boost::graph_traits<TriangleMeshIn>::vertex_descriptor as key type and GeomTraits::Point_3 as value type, GeomTraits being the type of the parameter geom_traits
Default: boost::get(CGAL::vertex_point, tm_in)
Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMeshIn.
Extra: The geometric traits class must be compatible with the vertex point type.
a property map where the user should put true for edges that must be considered as on the boundary of a patch. Additionally, the map is updated by this function and will contain true if, based on the angle criteria, an edge is on the boundary of a patch and false otherwise.
Type: a class model of ReadWritePropertyMap with boost::graph_traits<TriangleMeshIn>::edge_descriptor as key type and bool as value type
Default: None
a property map filled by this function and that will contain for each face the id of its patch in the range [0, number of patches - 1]
Type: a class model of ReadWritePropertyMap with boost::graph_traits<TriangleMeshIn>::face_descriptor as key type and std::size_t as value type
Default: None
a property map filled by this function and that will contain for each vertex that is a corner an id in the range [0, number of corners - 1], and std::size_t(-1) otherwise.
Type: a class model of ReadWritePropertyMap with boost::graph_traits<TriangleMeshIn>::vertex_descriptor as key type and std::size_t as value type
Default: None
The maximum angle, given as a cosine, (i) between the normals of the supporting planes of adjacent faces such that they are considered coplanar, and (ii) for the smallest angle between the supporting line of a segment and an adjacent segment such that they are considered collinear.
Type: FT type from the geom_traits parameter
Default: 1, which means exact coplanarity and collinearity
Extra: The value must be in the interval [0,1]
Parameters
np_out
an optional sequence of Named Parameters among the ones listed below:
Optional Named Parameters
if true, faces of pm_out will not be triangulated, but the one with more than one connected component of the boundary.
Type: bool
Default: false
a property map associating points to the vertices of pm_out
Type: a class model of WritablePropertyMap with boost::graph_traits<PolygonMeshOut>::vertex_descriptor as key type and GeomTraits::Point_3 as value type, GeomTraits being the type of the parameter geom_traits
Default: boost::get(CGAL::vertex_point, pm_out)
Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in PolygonMeshOut.
a property map filled by this function and that will contain for each face the id of its patch in the range [0, number of patches - 1], the patch id of two identical patches in the input and output meshes being equal.
Type: a class model of ReadWritePropertyMap with boost::graph_traits<PolygonMeshOut>::face_descriptor as key type and std::size_t as value type
Default: None
a property map filled by this function and that will contain for each vertex its corner an id in the range [0, number of corners - 1]
Type: a class model of ReadWritePropertyMap with boost::graph_traits<PolygonMeshOut>::vertex_descriptor as key type and std::size_t as value type
Default: None
a callable with visitor(pm_out) being called once tm_in is no longer needed and before pm_out starts being built. It should be used in the case when tm_in and pm_out are the same mesh, so that pm_out can be cleared before being filled.