\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)
CGAL 5.0.1 - CGAL and the Boost Graph Library
CGAL::Face_filtered_graph< Graph, FIMap, VIMap, HIMap > Struct Template Reference

#include <CGAL/boost/graph/Face_filtered_graph.h>

Definition

template<typename Graph, typename FIMap = typename boost::property_map<Graph, CGAL::face_index_t>::type, typename VIMap = typename boost::property_map<Graph, boost::vertex_index_t>::type, typename HIMap = typename boost::property_map<Graph, CGAL::halfedge_index_t>::type>
struct CGAL::Face_filtered_graph< Graph, FIMap, VIMap, HIMap >

The class Face_filtered_graph is an adaptor that creates a filtered view of a graph by restricting it to a subset of faces.

Contrary to boost::filtered_graph, this class only requires a way to access the selected faces and will automatically select the edges/halfedges and vertices present in the adapted graph. A vertex is selected if it is incident to at least one selected face. A edge is selected if it is incident to at least a selected face. A halfedge is selected if its edge is selected.

Since this class is a model of the FaceGraph concept, there is a restriction on the set of selected faces: the adapted graph must define a manifold mesh. In order to check that this condition is verified, you can use the function is_selection_valid().

There are two different ways to initialize this class. You can directly provide the set of faces selected, or if you have a face patch map, select the patches of faces. The latter option is convenient if you want to access some connected components of a graph after having called CGAL::Polygon_mesh_processing::connected_components().

The documented interface of this class is limited on purpose and free functions of the concept this class is a model of must be used to manipulate it.

A BGL-like named parameter mechanism is used in the constructors of this class. Default values are available but if you need to set them, you can pass for np CGAL::parameters::face_index_map(fim).halfedge_index_map(him).vertex_index_map(vim) where fim, him, and vim are the respective index maps. The order of the arguments is not important and any of them can be missing if the default is fine.

Template Parameters
Graphmust be a model of a FaceListGraph, HalfedgeListGraph, and VertexListGraph.
FIMapa model of ReadablePropertyMap with face_descriptor as key and graph_traits<Graph>::faces_size_type as value
VIMapa model of ReadablePropertyMap with vertex_descriptor as key and graph_traits<Graph>::vertices_size_type as value
HIMapa model of ReadablePropertyMap with halfedge_descriptor as key and graph_traits<Graph>::halfedges_size_type as value
Is Model Of:

FaceListGraph

HalfedgeListGraph

VertexListGraph

Examples:
BGL_surface_mesh/surface_mesh_partition.cpp, Polygon_mesh_processing/face_filtered_graph_example.cpp, and Surface_mesh_segmentation/extract_segmentation_into_mesh_example.cpp.

Public Types

typedef boost::graph_traits< Graph >::vertex_descriptor vertex_descriptor
 Vertex descriptor type.
 
typedef boost::graph_traits< Graph >::halfedge_descriptor halfedge_descriptor
 Halfedge descriptor type.
 
typedef boost::graph_traits< Graph >::edge_descriptor edge_descriptor
 Edge descriptor type.
 
typedef boost::graph_traits< Graph >::face_descriptor face_descriptor
 Face descriptor type.
 
typedef unspecified_type size_type
 Size type.
 

Public Member Functions

template<typename FacePatchIndexMap , class FacePatchIndexRange , class NamedParameters >
 Face_filtered_graph (const Graph &graph, const FacePatchIndexRange &selected_face_patch_indices, FacePatchIndexMap face_patch_index_map, const NamedParameters &np)
 Constructor where the set of selected faces is specified as a range of patch ids. More...
 
template<typename FacePatchIndexMap , class NamedParameters >
 Face_filtered_graph (const Graph &graph, typename boost::property_traits< FacePatchIndexMap >::value_type selected_face_patch_index, FacePatchIndexMap face_patch_index_map, const NamedParameters &np)
 Constructor where the set of selected faces is specified as a patch id. More...
 
template<typename FaceRange , class NamedParameters >
 Face_filtered_graph (const Graph &graph, const FaceRange &selected_faces, const NamedParameters &np)
 Constructor where the set of selected faces is specified as a range of face descriptors. More...
 
const Graph & graph () const
 returns a const reference to the underlying graph.
 
Graph & graph ()
 returns a reference to the underlying graph.
 
template<class FacePatchIndexMap >
void set_selected_faces (typename boost::property_traits< FacePatchIndexMap >::value_type face_patch_id, FacePatchIndexMap face_patch_index_map)
 change the set of selected faces using a patch id
 
template<class FacePatchIndexRange , class FacePatchIndexMap >
void set_selected_faces (const FacePatchIndexRange &selected_face_patch_indices, FacePatchIndexMap face_patch_index_map)
 change the set of selected faces using a range of patch ids
 
template<class FaceRange >
void set_selected_faces (const FaceRange &selection)
 change the set of selected faces using a range of face descriptors
 
size_type number_of_faces () const
 returns the number of selected faces
 
size_type number_of_vertices () const
 returns the number of selected vertices.
 
size_type number_of_halfedges () const
 returns the number of selected halfedges.
 
bool is_selection_valid () const
 returns true if around any vertex of a selected face, there is at most one connected set of selected faces. More...
 

Constructor & Destructor Documentation

◆ Face_filtered_graph() [1/3]

template<typename Graph , typename FIMap = typename boost::property_map<Graph, CGAL::face_index_t>::type, typename VIMap = typename boost::property_map<Graph, boost::vertex_index_t>::type, typename HIMap = typename boost::property_map<Graph, CGAL::halfedge_index_t>::type>
template<typename FacePatchIndexMap , class FacePatchIndexRange , class NamedParameters >
CGAL::Face_filtered_graph< Graph, FIMap, VIMap, HIMap >::Face_filtered_graph ( const Graph &  graph,
const FacePatchIndexRange &  selected_face_patch_indices,
FacePatchIndexMap  face_patch_index_map,
const NamedParameters &  np 
)

Constructor where the set of selected faces is specified as a range of patch ids.

Template Parameters
FacePatchIndexMapa model of ReadablePropertyMap with face_descriptor as key type and graph_traits<Graph>::faces_size_type as value type.
FacePatchIndexRangea model of ConstRange with boost::property_traits<FacePatchIndexMap>::value_type as value type.
NamedParametersa sequence of named parameters
Parameters
graphthe underlying graph.
face_patch_index_mapthe property_map that assigns a patch index to each face, with face_descriptor as key type and boost::graph_traits<Graph>::faces_size_type as value type.
selected_face_patch_indicesa range of the face patch indices to select.
npoptional sequence of named parameters among the ones listed below
Named Parameters
face_index_mapa property map containing an index for each face initialized from 0 to num_vertices(graph)
vertex_index_mapa property map containing an index for each vertex initialized 0 to num_vertices(graph)
halfedge_index_mapa property map containing an index for each halfedge initialized 0 to num_halfedges(graph)

◆ Face_filtered_graph() [2/3]

template<typename Graph , typename FIMap = typename boost::property_map<Graph, CGAL::face_index_t>::type, typename VIMap = typename boost::property_map<Graph, boost::vertex_index_t>::type, typename HIMap = typename boost::property_map<Graph, CGAL::halfedge_index_t>::type>
template<typename FacePatchIndexMap , class NamedParameters >
CGAL::Face_filtered_graph< Graph, FIMap, VIMap, HIMap >::Face_filtered_graph ( const Graph &  graph,
typename boost::property_traits< FacePatchIndexMap >::value_type  selected_face_patch_index,
FacePatchIndexMap  face_patch_index_map,
const NamedParameters &  np 
)

Constructor where the set of selected faces is specified as a patch id.

Template Parameters
FacePatchIndexMapa model of ReadablePropertyMap with face_descriptor as key type and graph_traits<Graph>::faces_size_type as value type.
NamedParametersa sequence of named parameters
Parameters
graphthe underlying graph.
face_patch_index_mapthe property_map that assigns a patch index to each face, with face_descriptor as key type and graph_traits<Graph>::faces_size_type as value type.
selected_face_patch_indexthe index of the face patch selected.
npoptional sequence of named parameters among the ones listed below
Named Parameters
face_index_mapa property map containing an index for each face initialized from 0 to num_vertices(graph)
vertex_index_mapa property map containing an index for each vertex initialized 0 to num_vertices(graph)
halfedge_index_mapa property map containing an index for each halfedge initialized 0 to num_halfedges(graph)

◆ Face_filtered_graph() [3/3]

template<typename Graph , typename FIMap = typename boost::property_map<Graph, CGAL::face_index_t>::type, typename VIMap = typename boost::property_map<Graph, boost::vertex_index_t>::type, typename HIMap = typename boost::property_map<Graph, CGAL::halfedge_index_t>::type>
template<typename FaceRange , class NamedParameters >
CGAL::Face_filtered_graph< Graph, FIMap, VIMap, HIMap >::Face_filtered_graph ( const Graph &  graph,
const FaceRange &  selected_faces,
const NamedParameters &  np 
)

Constructor where the set of selected faces is specified as a range of face descriptors.

Template Parameters
FaceRangea model of ConstRange with face_descriptor as value type.
NamedParametersa sequence of named parameters
Parameters
graphthe graph containing the wanted patch.
selected_facesthe set of selected faces.
npoptional sequence of named parameters among the ones listed below
Named Parameters
face_index_mapa property map containing an index for each face initialized from 0 to num_vertices(graph)
vertex_index_mapa property map containing an index for each vertex initialized 0 to num_vertices(graph)
halfedge_index_mapa property map containing an index for each halfedge initialized 0 to num_halfedges(graph)

Member Function Documentation

◆ is_selection_valid()

template<typename Graph , typename FIMap = typename boost::property_map<Graph, CGAL::face_index_t>::type, typename VIMap = typename boost::property_map<Graph, boost::vertex_index_t>::type, typename HIMap = typename boost::property_map<Graph, CGAL::halfedge_index_t>::type>
bool CGAL::Face_filtered_graph< Graph, FIMap, VIMap, HIMap >::is_selection_valid ( ) const

returns true if around any vertex of a selected face, there is at most one connected set of selected faces.