Developer Documentation
OpenVolumeMesh::HexahedralMeshTopologyKernel Class Reference

A data structure basing on PolyhedralMesh with specializations for hexahedra. More...

#include <libs_required/OpenVolumeMesh/src/OpenVolumeMesh/Mesh/HexahedralMeshTopologyKernel.hh>

Inheritance diagram for OpenVolumeMesh::HexahedralMeshTopologyKernel:
OpenVolumeMesh::TopologyKernel OpenVolumeMesh::ResourceManager

Public Types

typedef class CellSheetCellIter CellSheetCellIter
typedef class HalfFaceSheetHalfFaceIter HalfFaceSheetHalfFaceIter
typedef class HexVertexIter HexVertexIter
- Public Types inherited from OpenVolumeMesh::TopologyKernel
typedef OpenVolumeMeshEdge Edge
typedef OpenVolumeMeshFace Face
typedef OpenVolumeMeshCell Cell
- Public Types inherited from OpenVolumeMesh::ResourceManager
typedef std::vector< BaseProperty * > Properties

Public Member Functions

virtual FaceHandle add_face (const std::vector< HalfEdgeHandle > &_halfedges, bool _topologyCheck=false)
 Add face via incident edges. More...
virtual FaceHandle add_face (const std::vector< VertexHandle > &_vertices)
 Add face via incident vertices. More...
virtual CellHandle add_cell (const std::vector< HalfFaceHandle > &_halffaces, bool _topologyCheck=false)
 Overridden function.
CellHandle add_cell (const std::vector< VertexHandle > &_vertices, bool _topologyCheck=false)
 Add cell via incident vertices. More...
CellSheetCellIter csc_iter (const CellHandle &_ref_h, const unsigned char _orthDir, int _max_laps=1) const
std::pair< CellSheetCellIter, CellSheetCellIter > cell_sheet_cells (const CellHandle &_ref_h, const unsigned char _orthDir, int _max_laps=1) const
HalfFaceSheetHalfFaceIter hfshf_iter (const HalfFaceHandle &_ref_h, int _max_laps=1) const
std::pair< HalfFaceSheetHalfFaceIter, HalfFaceSheetHalfFaceIter > halfface_sheet_halffaces (const HalfFaceHandle &_ref_h, int _max_laps=1) const
HexVertexIter hv_iter (const CellHandle &_ref_h, int _max_laps=1) const
std::pair< HexVertexIter, HexVertexIter > hex_vertices (const CellHandle &_ref_h, int _max_laps=1) const
HalfFaceHandle opposite_halfface_handle_in_cell (const HalfFaceHandle &_hfh, const CellHandle &_ch) const
HalfFaceHandle xfront_halfface (const CellHandle &_ch) const
HalfFaceHandle xback_halfface (const CellHandle &_ch) const
HalfFaceHandle yfront_halfface (const CellHandle &_ch) const
HalfFaceHandle yback_halfface (const CellHandle &_ch) const
HalfFaceHandle zfront_halfface (const CellHandle &_ch) const
HalfFaceHandle zback_halfface (const CellHandle &_ch) const
unsigned char orientation (const HalfFaceHandle &_hfh, const CellHandle &_ch) const
HalfFaceHandle get_oriented_halfface (const unsigned char _o, const CellHandle &_ch) const
HalfFaceHandle adjacent_halfface_on_sheet (const HalfFaceHandle &_hfh, const HalfEdgeHandle &_heh) const
HalfFaceHandle adjacent_halfface_on_surface (const HalfFaceHandle &_hfh, const HalfEdgeHandle &_heh) const
HalfFaceHandle neighboring_outside_halfface (const HalfFaceHandle &_hfh, const HalfEdgeHandle &_heh) const
- Public Member Functions inherited from OpenVolumeMesh::TopologyKernel
VertexOHalfEdgeIter voh_iter (const VertexHandle &_h, int _max_laps=1) const
std::pair< VertexOHalfEdgeIter, VertexOHalfEdgeIteroutgoing_halfedges (const VertexHandle &_h, int _max_laps=1) const
HalfEdgeHalfFaceIter hehf_iter (const HalfEdgeHandle &_h, int _max_laps=1) const
std::pair< HalfEdgeHalfFaceIter, HalfEdgeHalfFaceIterhalfedge_halffaces (const HalfEdgeHandle &_h, int _max_laps=1) const
VertexCellIter vc_iter (const VertexHandle &_h, int _max_laps=1) const
std::pair< VertexCellIter, VertexCellItervertex_cells (const VertexHandle &_h, int _max_laps=1)
HalfEdgeCellIter hec_iter (const HalfEdgeHandle &_h, int _max_laps=1) const
std::pair< HalfEdgeCellIter, HalfEdgeCellIterhalfedge_cells (const HalfEdgeHandle &_h, int _max_laps=1)
CellVertexIter cv_iter (const CellHandle &_h, int _max_laps=1) const
std::pair< CellVertexIter, CellVertexItercell_vertices (const CellHandle &_h, int _max_laps=1) const
CellCellIter cc_iter (const CellHandle &_h, int _max_laps=1) const
std::pair< CellCellIter, CellCellItercell_cells (const CellHandle &_h, int _max_laps=1) const
HalfFaceVertexIter hfv_iter (const HalfFaceHandle &_h, int _max_laps=1) const
std::pair< HalfFaceVertexIter, HalfFaceVertexIterhalfface_vertices (const HalfFaceHandle &_h, int _max_laps=1) const
BoundaryHalfFaceHalfFaceIter bhfhf_iter (const HalfFaceHandle &_ref_h, int _max_laps=1) const
std::pair< BoundaryHalfFaceHalfFaceIter, BoundaryHalfFaceHalfFaceIterboundary_halfface_halffaces (const HalfFaceHandle &_h, int _max_laps=1) const
BoundaryFaceIter bf_iter () const
VertexIter v_iter () const
VertexIter vertices_begin () const
VertexIter vertices_end () const
std::pair< VertexIter, VertexItervertices () const
EdgeIter e_iter () const
EdgeIter edges_begin () const
EdgeIter edges_end () const
std::pair< EdgeIter, EdgeIteredges () const
HalfEdgeIter he_iter () const
HalfEdgeIter halfedges_begin () const
HalfEdgeIter halfedges_end () const
std::pair< HalfEdgeIter, HalfEdgeIterhalfedges () const
FaceIter f_iter () const
FaceIter faces_begin () const
FaceIter faces_end () const
std::pair< FaceIter, FaceIterfaces () const
HalfFaceIter hf_iter () const
HalfFaceIter halffaces_begin () const
HalfFaceIter halffaces_end () const
std::pair< HalfFaceIter, HalfFaceIterhalffaces () const
CellIter c_iter () const
CellIter cells_begin () const
CellIter cells_end () const
std::pair< CellIter, CellItercells () const
virtual size_t n_vertices () const
 Get number of vertices in mesh.
virtual size_t n_edges () const
 Get number of edges in mesh.
virtual size_t n_halfedges () const
 Get number of halfedges in mesh.
virtual size_t n_faces () const
 Get number of faces in mesh.
virtual size_t n_halffaces () const
 Get number of halffaces in mesh.
virtual size_t n_cells () const
 Get number of cells in mesh.
int genus () const
virtual VertexHandle add_vertex ()
 Add abstract vertex.
virtual EdgeHandle add_edge (const VertexHandle &_fromVertex, const VertexHandle &_toHandle, bool _allowDuplicates=false)
 Add edge.
void set_edge (const EdgeHandle &_eh, const VertexHandle &_fromVertex, const VertexHandle &_toVertex)
 Set the vertices of an edge.
void set_face (const FaceHandle &_fh, const std::vector< HalfEdgeHandle > &_hes)
 Set the half-edges of a face.
void set_cell (const CellHandle &_ch, const std::vector< HalfFaceHandle > &_hfs)
 Set the half-faces of a cell.
const Edgeedge (const EdgeHandle &_edgeHandle) const
 Get edge with handle _edgeHandle.
const Faceface (const FaceHandle &_faceHandle) const
 Get face with handle _faceHandle.
const Cellcell (const CellHandle &_cellHandle) const
 Get cell with handle _cellHandle.
Edgeedge (const EdgeHandle &_edgeHandle)
 Get edge with handle _edgeHandle.
Faceface (const FaceHandle &_faceHandle)
 Get face with handle _faceHandle.
Cellcell (const CellHandle &_cellHandle)
 Get cell with handle _cellHandle.
Edge halfedge (const HalfEdgeHandle &_halfEdgeHandle) const
 Get edge that corresponds to halfedge with handle _halfEdgeHandle. More...
Face halfface (const HalfFaceHandle &_halfFaceHandle) const
 Get face that corresponds to halfface with handle _halfFaceHandle.
Edge opposite_halfedge (const HalfEdgeHandle &_halfEdgeHandle) const
 Get opposite halfedge that corresponds to halfedge with handle _halfEdgeHandle.
Face opposite_halfface (const HalfFaceHandle &_halfFaceHandle) const
 Get opposite halfface that corresponds to halfface with handle _halfFaceHandle.
HalfEdgeHandle halfedge (const VertexHandle &_vh1, const VertexHandle &_vh2) const
 Get halfedge from vertex _vh1 to _vh2.
HalfFaceHandle halfface (const std::vector< VertexHandle > &_vs) const
HalfFaceHandle halfface_extensive (const std::vector< VertexHandle > &_vs) const
HalfFaceHandle halfface (const std::vector< HalfEdgeHandle > &_hes) const
HalfEdgeHandle next_halfedge_in_halfface (const HalfEdgeHandle &_heh, const HalfFaceHandle &_hfh) const
 Get next halfedge within a halfface.
HalfEdgeHandle prev_halfedge_in_halfface (const HalfEdgeHandle &_heh, const HalfFaceHandle &_hfh) const
 Get previous halfedge within a halfface.
size_t valence (const VertexHandle &_vh) const
 Get valence of vertex (number of incident edges)
size_t valence (const EdgeHandle &_eh) const
 Get valence of edge (number of incident faces)
size_t valence (const FaceHandle &_fh) const
 Get valence of face (number of incident edges)
size_t valence (const CellHandle &_ch) const
 Get valence of cell (number of incident faces)
virtual VertexIter delete_vertex (const VertexHandle &_h)
 Delete vertex from mesh. More...
virtual EdgeIter delete_edge (const EdgeHandle &_h)
 Delete edge from mesh. More...
virtual FaceIter delete_face (const FaceHandle &_h)
 Delete face from mesh. More...
virtual CellIter delete_cell (const CellHandle &_h)
 Delete cell from mesh. More...
virtual void collect_garbage ()
 Delete all entities that are marked as deleted.
virtual bool is_deleted (const VertexHandle &_h) const
virtual bool is_deleted (const EdgeHandle &_h) const
virtual bool is_deleted (const HalfEdgeHandle &_h) const
virtual bool is_deleted (const FaceHandle &_h) const
virtual bool is_deleted (const HalfFaceHandle &_h) const
virtual bool is_deleted (const CellHandle &_h) const
CellIter delete_cell_range (const CellIter &_first, const CellIter &_last)
 Delete range of cells. More...
virtual void clear (bool _clearProps=true)
 Clear whole mesh.
void enable_bottom_up_incidences (bool _enable=true)
void enable_vertex_bottom_up_incidences (bool _enable=true)
void enable_edge_bottom_up_incidences (bool _enable=true)
void enable_face_bottom_up_incidences (bool _enable=true)
bool has_full_bottom_up_incidences () const
bool has_vertex_bottom_up_incidences () const
bool has_edge_bottom_up_incidences () const
bool has_face_bottom_up_incidences () const
void enable_deferred_deletion (bool _enable=true)
bool deferred_deletion_enabled () const
void enable_fast_deletion (bool _enable=true)
bool fast_deletion_enabled () const
HalfFaceHandle adjacent_halfface_in_cell (const HalfFaceHandle &_halfFaceHandle, const HalfEdgeHandle &_halfEdgeHandle) const
 Get halfface that is adjacent (w.r.t. a common halfedge) within the same cell. More...
CellHandle incident_cell (const HalfFaceHandle &_halfFaceHandle) const
 Get cell that is incident to the given halfface.
bool is_boundary (const HalfFaceHandle &_halfFaceHandle) const
bool is_boundary (const FaceHandle &_faceHandle) const
bool is_boundary (const EdgeHandle &_edgeHandle) const
bool is_boundary (const HalfEdgeHandle &_halfedgeHandle) const
bool is_boundary (const VertexHandle &_vertexHandle) const
size_t n_vertices_in_cell (const CellHandle &_ch) const
Edge opposite_halfedge (const Edge &_edge) const
Face opposite_halfface (const Face &_face) const
bool needs_garbage_collection () const
- Public Member Functions inherited from OpenVolumeMesh::ResourceManager
void resize_vprops (size_t _nv)
 Change size of stored vertex properties.
void resize_eprops (size_t _ne)
 Change size of stored edge properties.
void resize_fprops (size_t _nf)
 Change size of stored face properties.
void resize_cprops (size_t _nc)
 Change size of stored cell properties.
void clear_vertex_props ()
void clear_edge_props ()
void clear_halfedge_props ()
void clear_face_props ()
void clear_halfface_props ()
void clear_cell_props ()
void clear_mesh_props ()
template<class T >
VertexPropertyT< T > request_vertex_property (const std::string &_name=std::string(), const T _def=T())
template<class T >
EdgePropertyT< T > request_edge_property (const std::string &_name=std::string(), const T _def=T())
template<class T >
HalfEdgePropertyT< T > request_halfedge_property (const std::string &_name=std::string(), const T _def=T())
template<class T >
FacePropertyT< T > request_face_property (const std::string &_name=std::string(), const T _def=T())
template<class T >
HalfFacePropertyT< T > request_halfface_property (const std::string &_name=std::string(), const T _def=T())
template<class T >
CellPropertyT< T > request_cell_property (const std::string &_name=std::string(), const T _def=T())
template<class T >
MeshPropertyT< T > request_mesh_property (const std::string &_name=std::string(), const T _def=T())
size_t n_vertex_props () const
size_t n_edge_props () const
size_t n_halfedge_props () const
size_t n_face_props () const
size_t n_halfface_props () const
size_t n_cell_props () const
size_t n_mesh_props () const
template<class T >
void set_persistent (VertexPropertyT< T > &_prop, bool _flag=true)
template<class T >
void set_persistent (EdgePropertyT< T > &_prop, bool _flag=true)
template<class T >
void set_persistent (HalfEdgePropertyT< T > &_prop, bool _flag=true)
template<class T >
void set_persistent (FacePropertyT< T > &_prop, bool _flag=true)
template<class T >
void set_persistent (HalfFacePropertyT< T > &_prop, bool _flag=true)
template<class T >
void set_persistent (CellPropertyT< T > &_prop, bool _flag=true)
template<class T >
void set_persistent (MeshPropertyT< T > &_prop, bool _flag=true)
Properties::const_iterator vertex_props_begin () const
Properties::const_iterator vertex_props_end () const
Properties::const_iterator edge_props_begin () const
Properties::const_iterator edge_props_end () const
Properties::const_iterator halfedge_props_begin () const
Properties::const_iterator halfedge_props_end () const
Properties::const_iterator face_props_begin () const
Properties::const_iterator face_props_end () const
Properties::const_iterator halfface_props_begin () const
Properties::const_iterator halfface_props_end () const
Properties::const_iterator cell_props_begin () const
Properties::const_iterator cell_props_end () const
Properties::const_iterator mesh_props_begin () const
Properties::const_iterator mesh_props_end () const
template<class PropT >
bool vertex_property_exists (const std::string &_name) const
template<class PropT >
bool edge_property_exists (const std::string &_name) const
template<class PropT >
bool halfedge_property_exists (const std::string &_name) const
template<class PropT >
bool face_property_exists (const std::string &_name) const
template<class PropT >
bool halfface_property_exists (const std::string &_name) const
template<class PropT >
bool cell_property_exists (const std::string &_name) const
template<class PropT >
bool mesh_property_exists (const std::string &_name) const

Static Public Member Functions

static unsigned char opposite_orientation (const unsigned char _d)
static unsigned char orthogonal_orientation (const unsigned char _o1, const unsigned char _o2)
- Static Public Member Functions inherited from OpenVolumeMesh::TopologyKernel
static HalfEdgeHandle halfedge_handle (const EdgeHandle &_h, const unsigned char _subIdx)
 Conversion function.
static HalfFaceHandle halfface_handle (const FaceHandle &_h, const unsigned char _subIdx)
 Conversion function.
static EdgeHandle edge_handle (const HalfEdgeHandle &_h)
 Handle conversion.
static FaceHandle face_handle (const HalfFaceHandle &_h)
static HalfEdgeHandle opposite_halfedge_handle (const HalfEdgeHandle &_h)
static HalfFaceHandle opposite_halfface_handle (const HalfFaceHandle &_h)

Static Public Attributes

static const unsigned char XF = 0
static const unsigned char XB = 1
static const unsigned char YF = 2
static const unsigned char YB = 3
static const unsigned char ZF = 4
static const unsigned char ZB = 5
static const unsigned char INVALID = 6
- Static Public Attributes inherited from OpenVolumeMesh::TopologyKernel
static const VertexHandle InvalidVertexHandle = VertexHandle(-1)
static const EdgeHandle InvalidEdgeHandle = EdgeHandle(-1)
static const FaceHandle InvalidFaceHandle = FaceHandle(-1)
static const CellHandle InvalidCellHandle = CellHandle(-1)
static const HalfEdgeHandle InvalidHalfEdgeHandle = HalfEdgeHandle(-1)
static const HalfFaceHandle InvalidHalfFaceHandle = HalfFaceHandle(-1)

Private Member Functions

bool check_halfface_ordering (const std::vector< HalfFaceHandle > &_hfs) const
const HalfFaceHandleget_adjacent_halfface (const HalfFaceHandle &_hfh, const HalfEdgeHandle &_heh, const std::vector< HalfFaceHandle > &_halffaces) const


class CellSheetCellIter
class HalfFaceSheetHalfFaceIter
class HexVertexIter

Additional Inherited Members

- Protected Member Functions inherited from OpenVolumeMesh::TopologyKernel
virtual void swap_cells (CellHandle _h1, CellHandle _h2)
virtual void swap_faces (FaceHandle _h1, FaceHandle _h2)
virtual void swap_edges (EdgeHandle _h1, EdgeHandle _h2)
virtual void swap_vertices (VertexHandle _h1, VertexHandle _h2)
virtual void delete_multiple_vertices (const std::vector< bool > &_tag)
virtual void delete_multiple_edges (const std::vector< bool > &_tag)
virtual void delete_multiple_faces (const std::vector< bool > &_tag)
virtual void delete_multiple_cells (const std::vector< bool > &_tag)
void compute_vertex_bottom_up_incidences ()
void compute_edge_bottom_up_incidences ()
void compute_face_bottom_up_incidences ()
void reorder_incident_halffaces (const EdgeHandle &_eh)
- Protected Member Functions inherited from OpenVolumeMesh::ResourceManager
void vertex_deleted (const VertexHandle &_h)
void edge_deleted (const EdgeHandle &_h)
void face_deleted (const FaceHandle &_h)
void cell_deleted (const CellHandle &_h)
void swap_cell_properties (CellHandle _h1, CellHandle _h2)
void swap_face_properties (FaceHandle _h1, FaceHandle _h2)
void swap_halfface_properties (HalfFaceHandle _h1, HalfFaceHandle _h2)
void swap_edge_properties (EdgeHandle _h1, EdgeHandle _h2)
void swap_halfedge_properties (HalfEdgeHandle _h1, HalfEdgeHandle _h2)
void swap_vertex_properties (VertexHandle _h1, VertexHandle _h2)
template<typename PropIterator , typename Handle >
void swap_property_elements (PropIterator _begin, PropIterator _end, Handle _h1, Handle _h2)
void delete_multiple_vertex_props (const std::vector< bool > &_tags)
void delete_multiple_edge_props (const std::vector< bool > &_tags)
void delete_multiple_face_props (const std::vector< bool > &_tags)
void delete_multiple_cell_props (const std::vector< bool > &_tags)
- Static Protected Member Functions inherited from OpenVolumeMesh::TopologyKernel
template<class Circulator >
static Circulator make_end_circulator (const Circulator &_circ)
- Protected Attributes inherited from OpenVolumeMesh::TopologyKernel
std::vector< std::vector< HalfEdgeHandle > > outgoing_hes_per_vertex_
std::vector< std::vector< HalfFaceHandle > > incident_hfs_per_he_
std::vector< CellHandleincident_cell_per_hf_
std::vector< Edgeedges_
std::vector< Facefaces_
std::vector< Cellcells_
std::vector< bool > vertex_deleted_
std::vector< bool > edge_deleted_
std::vector< bool > face_deleted_
std::vector< bool > cell_deleted_
bool needs_garbage_collection_

Detailed Description

A data structure basing on PolyhedralMesh with specializations for hexahedra.

The hexahedron has an induced "virtual" coordinate system. This supposes the incident half-faces to be given in a specific order. See the following figure for an illustration of the induced coordinate system.


The abbreviations XF, XB, etc. are short for

  • XF: X-axis front face
  • XB: X-axis back face
  • YF: Y-axis front face
  • ...

The axes refer to the intrinsic "virtual" axes of the hexahedron. The incident half-faces have to be defined in the following order:

  • 1. XF
  • 2. XB
  • 3. YF
  • 4. YB
  • 5. ZF
  • 6. ZB

Definition at line 86 of file HexahedralMeshTopologyKernel.hh.

Member Function Documentation

CellHandle OpenVolumeMesh::HexahedralMeshTopologyKernel::add_cell ( const std::vector< VertexHandle > &  _vertices,
bool  _topologyCheck = false 

Add cell via incident vertices.

Test whether all required faces are already defined and, if not, create them. Give vertices in the following order:

/|      /|

/ | / | 3----—2 | | 4-—|–7 | / | / |/ |/ 0----—1

_verticesA list of vertices in the correct order
_topologyCheckFlag if a topology check should be performed before adding the cell
The new hexahedron's cell handle

Definition at line 290 of file

FaceHandle OpenVolumeMesh::HexahedralMeshTopologyKernel::add_face ( const std::vector< HalfEdgeHandle > &  _halfedges,
bool  _topologyCheck = false 

Add face via incident edges.

Add face via incident edges

Handle of the new face, InvalidFaceHandle if _halfedges are not connected and _topologyCheck is true.
If _halfedges are not connected and _topologyCheck is false, the behavior is undefined.

Reimplemented from OpenVolumeMesh::TopologyKernel.

Definition at line 62 of file

FaceHandle OpenVolumeMesh::HexahedralMeshTopologyKernel::add_face ( const std::vector< VertexHandle > &  _vertices)

Add face via incident vertices.

Add face via incident vertices Define the _vertices in counter-clockwise order (from the "outside")

Reimplemented from OpenVolumeMesh::TopologyKernel.

Definition at line 79 of file

The documentation for this class was generated from the following files: