CGAL 6.2 - Meshing and Remeshing of Polygonal Meshes
Loading...
Searching...
No Matches
Planar Patch Simplification

Functions to simplify planar patches of a polygon mesh.

Functions

template<typename TriangleMeshIn , typename PolygonMeshOut , typename NamedParametersIn = parameters::Default_named_parameters, typename NamedParametersOut = parameters::Default_named_parameters>
void CGAL::Polygon_mesh_processing::remesh_planar_patches (const TriangleMeshIn &tm_in, PolygonMeshOut &pm_out, const NamedParametersIn &np_in=parameters::default_values(), const NamedParametersOut &np_out=parameters::default_values())
 generates a new triangle mesh pm_out with the minimal number of triangles while preserving the shape of tm_in.
 
template<typename TriangleMeshIn , typename PolygonMeshOut , typename FacePatchMap , typename EdgeIsConstrainedMap , typename VertexCornerMap , typename NamedParametersIn = parameters::Default_named_parameters, typename NamedParametersOut = parameters::Default_named_parameters>
bool CGAL::Polygon_mesh_processing::remesh_almost_planar_patches (const TriangleMeshIn &tm_in, PolygonMeshOut &pm_out, std::size_t nb_patches, std::size_t nb_corners, FacePatchMap face_patch_map, VertexCornerMap vertex_corner_map, EdgeIsConstrainedMap ecm, const NamedParametersIn &np_in=parameters::default_values(), const NamedParametersOut &np_out=parameters::default_values())
 generates a new triangle mesh pm_out with the minimal number of triangles from a partition of tm_in.
 

Function Documentation

◆ remesh_almost_planar_patches()

template<typename TriangleMeshIn , typename PolygonMeshOut , typename FacePatchMap , typename EdgeIsConstrainedMap , typename VertexCornerMap , typename NamedParametersIn = parameters::Default_named_parameters, typename NamedParametersOut = parameters::Default_named_parameters>
bool CGAL::Polygon_mesh_processing::remesh_almost_planar_patches ( const TriangleMeshIn &  tm_in,
PolygonMeshOut &  pm_out,
std::size_t  nb_patches,
std::size_t  nb_corners,
FacePatchMap  face_patch_map,
VertexCornerMap  vertex_corner_map,
EdgeIsConstrainedMap  ecm,
const NamedParametersIn &  np_in = parameters::default_values(),
const NamedParametersOut &  np_out = parameters::default_values() 
)

#include </home/runner/work/cgal/cgal/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh_planar_patches.h>

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.
Template Parameters
TriangleMeshIna model of HalfedgeListGraph and FaceListGraph
PolygonMeshOuta model of MutableFaceGraph
FacePatchMapa class model of ReadablePropertyMap with boost::graph_traits<TriangleMeshIn>::face_descriptor as key type and std::size_t as value type
EdgeIsConstrainedMapa class model of ReadablePropertyMap with boost::graph_traits<TriangleMeshIn>::edge_descriptor as key type and bool as value type
VertexCornerMapa class model of ReadablePropertyMap with boost::graph_traits<TriangleMeshIn>::vertex_descriptor as key type and std::size_t as value type
NamedParametersIna sequence of Named Parameters
NamedParametersOuta sequence of Named Parameters
Parameters
tm_ininput triangle mesh
pm_outoutput polygon mesh
nb_patchesthe number of patches in the partition
nb_cornersthe number of corners
face_patch_mapa property map that contains for each face the id of its patch in the range [0, nb_patches]
vertex_corner_mapa 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.
ecma property map that contains true if an edge is on the border of a patch and false otherwise.
np_inan 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.
  • an instance of a geometric traits class
  • Type: a class model of Kernel
  • Default: a CGAL Kernel deduced from the point type, using CGAL::Kernel_traits
  • Extra: The geometric traits class must be compatible with the vertex point type.
Parameters
np_outan 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.
  • Type: visitor(pm_out) must be a valid expression.
  • Default: None
Examples
Polygon_mesh_processing/remesh_almost_planar_patches.cpp.

◆ remesh_planar_patches()

template<typename TriangleMeshIn , typename PolygonMeshOut , typename NamedParametersIn = parameters::Default_named_parameters, typename NamedParametersOut = parameters::Default_named_parameters>
void CGAL::Polygon_mesh_processing::remesh_planar_patches ( const TriangleMeshIn &  tm_in,
PolygonMeshOut &  pm_out,
const NamedParametersIn &  np_in = parameters::default_values(),
const NamedParametersOut &  np_out = parameters::default_values() 
)

#include </home/runner/work/cgal/cgal/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/remesh_planar_patches.h>

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.
Template Parameters
TriangleMeshIna model of HalfedgeListGraph and FaceListGraph
PolygonMeshOuta model of MutableFaceGraph
NamedParametersIna sequence of Named Parameters
NamedParametersOuta sequence of Named Parameters
Parameters
tm_ininput triangle mesh
pm_outoutput polygon mesh
np_inan 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.
  • an instance of a geometric traits class
  • Type: a class model of Kernel
  • Default: a CGAL Kernel deduced from the point type, using CGAL::Kernel_traits
  • 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_outan 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.
  • Type: visitor(pm_out) must be a valid expression.
  • Default: None
Examples
Polygon_mesh_processing/remesh_planar_patches.cpp.