Developer Documentation
Loading...
Searching...
No Matches
OpenVolumeMesh::TetrahedralMeshTopologyKernel Class Reference

A data structure based on PolyhedralMesh with specializations for tetrahedra. More...

#include <Type-OpenVolumeMesh/libs/OpenVolumeMesh/src/OpenVolumeMesh/Mesh/TetrahedralMeshTopologyKernel.hh>

Inheritance diagram for OpenVolumeMesh::TetrahedralMeshTopologyKernel:
OpenVolumeMesh::TopologyKernel OpenVolumeMesh::ResourceManager OpenVolumeMesh::GeometryKernel< VecT, TetrahedralMeshTopologyKernel >

Public Types

typedef class TetVertexIter TetVertexIter
 
- Public Types inherited from OpenVolumeMesh::TopologyKernel
typedef OpenVolumeMeshEdge Edge
 
typedef OpenVolumeMeshFace Face
 
typedef OpenVolumeMeshCell Cell
 
- Public Types inherited from OpenVolumeMesh::ResourceManager
using Properties = std::set< PropertyStorageBase * >
 

Public Member Functions

FaceHandle add_face (std::vector< HalfEdgeHandle > _halfedges, bool _topologyCheck=false) override
 Add face via incident edges.
 
FaceHandle add_face (const std::vector< VertexHandle > &_vertices) override
 Add face via incident vertices.
 
CellHandle add_cell (std::vector< HalfFaceHandle > _halffaces, bool _topologyCheck=false) override
 Add cell via incident halffaces.
 
CellHandle add_cell (const std::vector< VertexHandle > &_vertices, bool _topologyCheck=false)
 
CellHandle add_cell (VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3, bool _topologyCheck=false)
 
HalfFaceHandle add_halfface (const std::vector< HalfEdgeHandle > &_halfedges, bool _topologyCheck=false)
 
HalfFaceHandle add_halfface (VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, bool _topologyCheck=false)
 
HalfEdgeHandle add_halfedge (VertexHandle _fromVertex, VertexHandle _toVertex)
 
std::vector< VertexHandleget_cell_vertices (CellHandle ch) const
 
std::vector< VertexHandleget_cell_vertices (CellHandle ch, VertexHandle vh) const
 Get the 4 vertices of the tet ch in a specific order, starting with vh.
 
std::vector< VertexHandleget_cell_vertices (HalfFaceHandle hfh) const
 
std::vector< VertexHandleget_cell_vertices (HalfFaceHandle hfh, HalfEdgeHandle heh) const
 
VertexHandle halfface_opposite_vertex (HalfFaceHandle hfh) const
 
HalfFaceHandle vertex_opposite_halfface (CellHandle ch, VertexHandle vh) const
 Get the first halfface of the tet ch that does not contain the vertex vh.
 
VertexHandle collapse_edge (HalfEdgeHandle _heh)
 
TetVertexIter tv_iter (CellHandle _ref_h, int _max_laps=1) const
 
std::pair< TetVertexIter, TetVertexIter > tet_vertices (CellHandle _ref_h, int _max_laps=1) const
 
- Public Member Functions inherited from OpenVolumeMesh::TopologyKernel
 TopologyKernel (TopologyKernel const &other)=default
 
 TopologyKernel (TopologyKernel &&other)=delete
 
TopologyKerneloperator= (TopologyKernel const &other)=default
 
TopologyKerneloperator= (TopologyKernel &&other)=delete
 
VertexVertexIter vv_iter (VertexHandle _h, int _max_laps=1) const
 
std::pair< VertexVertexIter, VertexVertexItervertex_vertices (VertexHandle _h, int _max_laps=1) const
 
VertexOHalfEdgeIter voh_iter (VertexHandle _h, int _max_laps=1) const
 
std::pair< VertexOHalfEdgeIter, VertexOHalfEdgeIteroutgoing_halfedges (VertexHandle _h, int _max_laps=1) const
 
VertexIHalfEdgeIter vih_iter (VertexHandle _h, int _max_laps=1) const
 
std::pair< VertexIHalfEdgeIter, VertexIHalfEdgeIterincoming_halfedges (VertexHandle _h, int _max_laps=1) const
 
VertexEdgeIter ve_iter (VertexHandle _h, int _max_laps=1) const
 
std::pair< VertexEdgeIter, VertexEdgeItervertex_edges (VertexHandle _h, int _max_laps=1) const
 
VertexHalfFaceIter vhf_iter (VertexHandle _h, int _max_laps=1) const
 
std::pair< VertexHalfFaceIter, VertexHalfFaceItervertex_halffaces (VertexHandle _h, int _max_laps=1) const
 
VertexFaceIter vf_iter (VertexHandle _h, int _max_laps=1) const
 
std::pair< VertexFaceIter, VertexFaceItervertex_faces (VertexHandle _h, int _max_laps=1) const
 
VertexCellIter vc_iter (VertexHandle _h, int _max_laps=1) const
 
std::pair< VertexCellIter, VertexCellItervertex_cells (VertexHandle _h, int _max_laps=1) const
 
HalfEdgeHalfFaceIter hehf_iter (HalfEdgeHandle _h, int _max_laps=1) const
 
std::pair< HalfEdgeHalfFaceIter, HalfEdgeHalfFaceIterhalfedge_halffaces (HalfEdgeHandle _h, int _max_laps=1) const
 
HalfEdgeFaceIter hef_iter (HalfEdgeHandle _h, int _max_laps=1) const
 
std::pair< HalfEdgeFaceIter, HalfEdgeFaceIterhalfedge_faces (HalfEdgeHandle _h, int _max_laps=1) const
 
HalfEdgeCellIter hec_iter (HalfEdgeHandle _h, int _max_laps=1) const
 
std::pair< HalfEdgeCellIter, HalfEdgeCellIterhalfedge_cells (HalfEdgeHandle _h, int _max_laps=1) const
 
EdgeHalfFaceIter ehf_iter (EdgeHandle _h, int _max_laps=1) const
 
std::pair< EdgeHalfFaceIter, EdgeHalfFaceIteredge_halffaces (EdgeHandle _h, int _max_laps=1) const
 
EdgeFaceIter ef_iter (EdgeHandle _h, int _max_laps=1) const
 
std::pair< EdgeFaceIter, EdgeFaceIteredge_faces (EdgeHandle _h, int _max_laps=1) const
 
EdgeCellIter ec_iter (EdgeHandle _h, int _max_laps=1) const
 
std::pair< EdgeCellIter, EdgeCellIteredge_cells (EdgeHandle _h, int _max_laps=1) const
 
HalfFaceHalfEdgeIter hfhe_iter (HalfFaceHandle _h, int _max_laps=1) const
 
std::pair< HalfFaceHalfEdgeIter, HalfFaceHalfEdgeIterhalfface_halfedges (HalfFaceHandle _h, int _max_laps=1) const
 
HalfFaceEdgeIter hfe_iter (HalfFaceHandle _h, int _max_laps=1) const
 
std::pair< HalfFaceEdgeIter, HalfFaceEdgeIterhalfface_edges (HalfFaceHandle _h, int _max_laps=1) const
 
FaceVertexIter fv_iter (FaceHandle _h, int _max_laps=1) const
 
std::pair< FaceVertexIter, FaceVertexIterface_vertices (FaceHandle _h, int _max_laps=1) const
 
FaceHalfEdgeIter fhe_iter (FaceHandle _h, int _max_laps=1) const
 
std::pair< FaceHalfEdgeIter, FaceHalfEdgeIterface_halfedges (FaceHandle _h, int _max_laps=1) const
 
FaceEdgeIter fe_iter (FaceHandle _h, int _max_laps=1) const
 
std::pair< FaceEdgeIter, FaceEdgeIterface_edges (FaceHandle _h, int _max_laps=1) const
 
CellVertexIter cv_iter (CellHandle _h, int _max_laps=1) const
 
std::pair< CellVertexIter, CellVertexItercell_vertices (CellHandle _h, int _max_laps=1) const
 
CellHalfEdgeIter che_iter (CellHandle _h, int _max_laps=1) const
 
std::pair< CellHalfEdgeIter, CellHalfEdgeItercell_halfedges (CellHandle _h, int _max_laps=1) const
 
CellEdgeIter ce_iter (CellHandle _h, int _max_laps=1) const
 
std::pair< CellEdgeIter, CellEdgeItercell_edges (CellHandle _h, int _max_laps=1) const
 
CellHalfFaceIter chf_iter (CellHandle _h, int _max_laps=1) const
 
std::pair< CellHalfFaceIter, CellHalfFaceItercell_halffaces (CellHandle _h, int _max_laps=1) const
 
CellFaceIter cf_iter (CellHandle _h, int _max_laps=1) const
 
std::pair< CellFaceIter, CellFaceItercell_faces (CellHandle _h, int _max_laps=1) const
 
CellCellIter cc_iter (CellHandle _h, int _max_laps=1) const
 
std::pair< CellCellIter, CellCellItercell_cells (CellHandle _h, int _max_laps=1) const
 
HalfFaceVertexIter hfv_iter (HalfFaceHandle _h, int _max_laps=1) const
 
std::pair< HalfFaceVertexIter, HalfFaceVertexIterhalfface_vertices (HalfFaceHandle _h, int _max_laps=1) const
 
BoundaryHalfFaceHalfFaceIter bhfhf_iter (HalfFaceHandle _ref_h, int _max_laps=1) const
 
std::pair< BoundaryHalfFaceHalfFaceIter, BoundaryHalfFaceHalfFaceIterboundary_halfface_halffaces (HalfFaceHandle _h, int _max_laps=1) const
 
BoundaryVertexIter bv_iter () const
 
BoundaryHalfEdgeIter bhe_iter () const
 
BoundaryEdgeIter be_iter () const
 
BoundaryHalfFaceIter bhf_iter () const
 
BoundaryFaceIter bf_iter () const
 
BoundaryCellIter bc_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
 
std::array< VertexHandle, 2 > halfedge_vertices (HalfEdgeHandle _h) const
 
std::array< VertexHandle, 2 > edge_vertices (EdgeHandle _h) const
 
std::array< HalfEdgeHandle, 2 > edge_halfedges (EdgeHandle _h) const
 
std::array< HalfFaceHandle, 2 > face_halffaces (FaceHandle _h) const
 
std::array< CellHandle, 2 > face_cells (FaceHandle _h) const
 
size_t n_vertices () const override
 Get number of vertices in mesh.
 
size_t n_edges () const override
 Get number of edges in mesh.
 
size_t n_halfedges () const override
 Get number of halfedges in mesh.
 
size_t n_faces () const override
 Get number of faces in mesh.
 
size_t n_halffaces () const override
 Get number of halffaces in mesh.
 
size_t n_cells () const override
 Get number of cells in mesh.
 
size_t n_logical_vertices () const
 Get number of undeleted vertices in mesh.
 
size_t n_logical_edges () const
 Get number of undeleted edges in mesh.
 
size_t n_logical_halfedges () const
 Get number of undeleted halfedges in mesh.
 
size_t n_logical_faces () const
 Get number of undeleted faces in mesh.
 
size_t n_logical_halffaces () const
 Get number of undeleted halffaces in mesh.
 
size_t n_logical_cells () const
 Get number of undeleted cells in mesh.
 
int genus () const
 
void add_n_vertices (size_t n)
 
void reserve_vertices (size_t n)
 
void reserve_edges (size_t n)
 
void reserve_faces (size_t n)
 
void reserve_cells (size_t n)
 
virtual VertexHandle add_vertex ()
 Add abstract vertex.
 
virtual EdgeHandle add_edge (VertexHandle _fromVertex, VertexHandle _toHandle, bool _allowDuplicates=false)
 Add edge.
 
void set_edge (EdgeHandle _eh, VertexHandle _fromVertex, VertexHandle _toVertex)
 Set the vertices of an edge.
 
void set_face (FaceHandle _fh, const std::vector< HalfEdgeHandle > &_hes)
 Set the half-edges of a face.
 
void set_cell (CellHandle _ch, const std::vector< HalfFaceHandle > &_hfs)
 Set the half-faces of a cell.
 
void reorder_incident_halffaces (EdgeHandle _eh)
 Recompute cyclic ordering of (half)faces incident to an edge (used by iterators)
 
const Edgeedge (EdgeHandle _edgeHandle) const
 Get edge with handle _edgeHandle.
 
const Faceface (FaceHandle _faceHandle) const
 Get face with handle _faceHandle.
 
const Cellcell (CellHandle _cellHandle) const
 Get cell with handle _cellHandle.
 
Edgeedge (EdgeHandle _edgeHandle)
 Get edge with handle _edgeHandle.
 
Faceface (FaceHandle _faceHandle)
 Get face with handle _faceHandle.
 
Cellcell (CellHandle _cellHandle)
 Get cell with handle _cellHandle.
 
Edge halfedge (HalfEdgeHandle _halfEdgeHandle) const
 Get edge that corresponds to halfedge with handle _halfEdgeHandle.
 
Face halfface (HalfFaceHandle _halfFaceHandle) const
 Get face that corresponds to halfface with handle _halfFaceHandle.
 
Edge opposite_halfedge (HalfEdgeHandle _halfEdgeHandle) const
 Get opposite halfedge that corresponds to halfedge with handle _halfEdgeHandle.
 
Face opposite_halfface (HalfFaceHandle _halfFaceHandle) const
 Get opposite halfface that corresponds to halfface with handle _halfFaceHandle.
 
HalfEdgeHandle find_halfedge (VertexHandle _vh1, VertexHandle _vh2) const
 Get halfedge from vertex _vh1 to _vh2.
 
HalfEdgeHandle halfedge (VertexHandle _vh1, VertexHandle _vh2) const
 
HalfEdgeHandle find_halfedge_in_cell (VertexHandle _vh1, VertexHandle _vh2, CellHandle _ch) const
 Get halfedge from vertex _vh1 to _vh2 but restricted to halfedges of cell _ch.
 
HalfFaceHandle find_halfface (const std::vector< VertexHandle > &_vs) const
 
HalfFaceHandle halfface (const std::vector< VertexHandle > &_vs) const
 
HalfFaceHandle find_halfface_in_cell (const std::vector< VertexHandle > &_vs, CellHandle _ch) const
 
HalfFaceHandle find_halfface_extensive (const std::vector< VertexHandle > &_vs) const
 
HalfFaceHandle halfface_extensive (const std::vector< VertexHandle > &_vs) const
 
HalfFaceHandle find_halfface (const std::vector< HalfEdgeHandle > &_hes) const
 
HalfFaceHandle halfface (const std::vector< HalfEdgeHandle > &_hes) const
 
HalfEdgeHandle next_halfedge_in_halfface (HalfEdgeHandle _heh, HalfFaceHandle _hfh) const
 Get next halfedge within a halfface.
 
HalfEdgeHandle prev_halfedge_in_halfface (HalfEdgeHandle _heh, HalfFaceHandle _hfh) const
 Get previous halfedge within a halfface.
 
VertexHandle from_vertex_handle (HalfEdgeHandle _h) const
 Get the vertex the halfedge starts from.
 
VertexHandle to_vertex_handle (HalfEdgeHandle _h) const
 Get the vertex the halfedge points to.
 
size_t valence (VertexHandle _vh) const
 Get valence of vertex (number of incident edges)
 
size_t valence (EdgeHandle _eh) const
 Get valence of edge (number of incident faces)
 
size_t valence (FaceHandle _fh) const
 Get valence of face (number of incident edges)
 
size_t valence (CellHandle _ch) const
 Get valence of cell (number of incident faces)
 
std::vector< VertexHandleget_halfface_vertices (HalfFaceHandle hfh) const
 Get vertices of a halfface.
 
std::vector< VertexHandleget_halfface_vertices (HalfFaceHandle hfh, VertexHandle vh) const
 Get vertices of a halfface orderd to start from vh.
 
std::vector< VertexHandleget_halfface_vertices (HalfFaceHandle hfh, HalfEdgeHandle heh) const
 Get vertices of a halfface orderd to start from from_vertex_handle(heh)
 
bool is_incident (FaceHandle _fh, EdgeHandle _eh) const
 check whether face _fh and edge _eh are incident
 
virtual VertexIter delete_vertex (VertexHandle _h)
 Delete vertex from mesh.
 
virtual EdgeIter delete_edge (EdgeHandle _h)
 Delete edge from mesh.
 
virtual FaceIter delete_face (FaceHandle _h)
 Delete face from mesh.
 
virtual CellIter delete_cell (CellHandle _h)
 Delete cell from mesh.
 
virtual void collect_garbage ()
 Delete all entities that are marked as deleted.
 
virtual bool is_deleted (VertexHandle _h) const
 
virtual bool is_deleted (EdgeHandle _h) const
 
virtual bool is_deleted (HalfEdgeHandle _h) const
 
virtual bool is_deleted (FaceHandle _h) const
 
virtual bool is_deleted (HalfFaceHandle _h) const
 
virtual bool is_deleted (CellHandle _h) const
 
virtual void swap_cell_indices (CellHandle _h1, CellHandle _h2)
 Exchanges the indices of two cells while keeping the mesh otherwise unaffected.
 
virtual void swap_face_indices (FaceHandle _h1, FaceHandle _h2)
 Exchanges the indices of two faces while keeping the mesh otherwise unaffected.
 
virtual void swap_edge_indices (EdgeHandle _h1, EdgeHandle _h2)
 Exchanges the indices of two edges while keeping the mesh otherwise unaffected.
 
virtual void swap_vertex_indices (VertexHandle _h1, VertexHandle _h2)
 Exchanges the indices of two vertices while keeping the mesh otherwise unaffected.
 
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 (HalfFaceHandle _halfFaceHandle, HalfEdgeHandle _halfEdgeHandle) const
 Get halfface that is adjacent (w.r.t. a common halfedge) within the same cell. It correctly handles self-adjacent cells where the halfedge orientation matters. For legacy reasons the halfedge orientation can be arbitrary if there are no self-adjacencies in the cell.
 
CellHandle incident_cell (HalfFaceHandle _halfFaceHandle) const
 Get cell that is incident to the given halfface.
 
bool is_boundary (HalfFaceHandle _halfFaceHandle) const
 
bool is_boundary (FaceHandle _faceHandle) const
 
bool is_boundary (EdgeHandle _edgeHandle) const
 
bool is_boundary (HalfEdgeHandle _halfedgeHandle) const
 
bool is_boundary (VertexHandle _vertexHandle) const
 
bool is_boundary (CellHandle _cellHandle) const
 
size_t n_vertices_in_cell (CellHandle _ch) const
 
Edge opposite_halfedge (const Edge &_edge) const
 
Face opposite_halfface (const Face &_face) const
 
bool needs_garbage_collection () const
 
template<typename Handle >
bool is_valid (Handle _h) const
 test is_valid and perform index range check
 
- Public Member Functions inherited from OpenVolumeMesh::ResourceManager
 ResourceManager (const ResourceManager &other)
 
ResourceManageroperator= (const ResourceManager &other)
 
 ResourceManager (ResourceManager &&other)=delete
 
ResourceManageroperator= (ResourceManager &&other)=delete
 
void clear_all_props ()
 drop all persistent properties.
 
template<typename EntityTag >
void clear_props ()
 drop persistent properties.
 
template<typename EntityTag >
size_t n () const
 Get number of entities of given kind in mesh.
 
template<typename EntityTag >
size_t n_props () const
 number of tracked properties
 
template<typename EntityTag >
size_t n_persistent_props () const
 number of persistent properties
 
template<typename T , typename EntityTag >
PropertyPtr< T, EntityTag > request_property (const std::string &_name=std::string(), const T &_def=T())
 
template<typename T , typename EntityTag >
std::optional< PropertyPtr< T, EntityTag > > create_property (std::string _name=std::string(), const T &_def=T())
 
template<typename T , typename EntityTag >
std::optional< PropertyPtr< T, EntityTag > > create_shared_property (std::string _name, const T &_def=T())
 
template<typename T , typename EntityTag >
std::optional< PropertyPtr< T, EntityTag > > create_persistent_property (std::string _name, const T &_def=T())
 
template<typename T , typename EntityTag >
PropertyPtr< T, EntityTag > create_private_property (std::string _name={}, const T &_def=T()) const
 
template<typename T , typename EntityTag >
std::optional< PropertyPtr< T, EntityTag > > get_property (const std::string &_name)
 
template<typename T , typename EntityTag >
std::optional< const PropertyPtr< T, EntityTag > > get_property (const std::string &_name) const
 
template<typename T , typename EntityTag >
bool property_exists (const std::string &_name) const
 
template<typename T , class EntityTag >
void set_persistent (PropertyPtr< T, EntityTag > &_prop, bool _enable=true)
 
template<typename T , class EntityTag >
void set_shared (PropertyPtr< T, EntityTag > &_prop, bool _enable=true)
 
template<typename EntityTag >
PropertyIterator< PersistentProperties::const_iterator > persistent_props_begin () const
 
template<typename EntityTag >
PropertyIterator< PersistentProperties::const_iterator > persistent_props_end () const
 
void clear_vertex_props ()
 convenience functions:
 
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
 
auto vertex_props_begin () const
 
auto vertex_props_end () const
 
template<typename T >
std::optional< VertexPropertyPtr< T > > create_shared_vertex_property (std::string _name, const T _def=T())
 
template<typename T >
std::optional< VertexPropertyPtr< T > > create_persistent_vertex_property (std::string _name, const T _def=T())
 
template<typename T >
VertexPropertyPtr< T > create_private_vertex_property (std::string _name={}, const T _def=T()) const
 
template<typename T >
std::optional< VertexPropertyPtr< T > > get_vertex_property (const std::string &_name)
 
template<typename T >
std::optional< const VertexPropertyPtr< T > > get_vertex_property (const std::string &_name) const
 
template<class T >
bool vertex_property_exists (const std::string &_name) const
 
size_t n_edge_props () const
 
auto edge_props_begin () const
 
auto edge_props_end () const
 
template<typename T >
std::optional< EdgePropertyPtr< T > > create_shared_edge_property (std::string _name, const T _def=T())
 
template<typename T >
std::optional< EdgePropertyPtr< T > > create_persistent_edge_property (std::string _name, const T _def=T())
 
template<typename T >
EdgePropertyPtr< T > create_private_edge_property (std::string _name={}, const T _def=T()) const
 
template<typename T >
std::optional< EdgePropertyPtr< T > > get_edge_property (const std::string &_name)
 
template<typename T >
std::optional< const EdgePropertyPtr< T > > get_edge_property (const std::string &_name) const
 
template<class T >
bool edge_property_exists (const std::string &_name) const
 
size_t n_halfedge_props () const
 
auto halfedge_props_begin () const
 
auto halfedge_props_end () const
 
template<typename T >
std::optional< HalfEdgePropertyPtr< T > > create_shared_halfedge_property (std::string _name, const T _def=T())
 
template<typename T >
std::optional< HalfEdgePropertyPtr< T > > create_persistent_halfedge_property (std::string _name, const T _def=T())
 
template<typename T >
HalfEdgePropertyPtr< T > create_private_halfedge_property (std::string _name={}, const T _def=T()) const
 
template<typename T >
std::optional< HalfEdgePropertyPtr< T > > get_halfedge_property (const std::string &_name)
 
template<typename T >
std::optional< const HalfEdgePropertyPtr< T > > get_halfedge_property (const std::string &_name) const
 
template<class T >
bool halfedge_property_exists (const std::string &_name) const
 
size_t n_face_props () const
 
auto face_props_begin () const
 
auto face_props_end () const
 
template<typename T >
std::optional< FacePropertyPtr< T > > create_shared_face_property (std::string _name, const T _def=T())
 
template<typename T >
std::optional< FacePropertyPtr< T > > create_persistent_face_property (std::string _name, const T _def=T())
 
template<typename T >
FacePropertyPtr< T > create_private_face_property (std::string _name={}, const T _def=T()) const
 
template<typename T >
std::optional< FacePropertyPtr< T > > get_face_property (const std::string &_name)
 
template<typename T >
std::optional< const FacePropertyPtr< T > > get_face_property (const std::string &_name) const
 
template<class T >
bool face_property_exists (const std::string &_name) const
 
size_t n_halfface_props () const
 
auto halfface_props_begin () const
 
auto halfface_props_end () const
 
template<typename T >
std::optional< HalfFacePropertyPtr< T > > create_shared_halfface_property (std::string _name, const T _def=T())
 
template<typename T >
std::optional< HalfFacePropertyPtr< T > > create_persistent_halfface_property (std::string _name, const T _def=T())
 
template<typename T >
HalfFacePropertyPtr< T > create_private_halfface_property (std::string _name={}, const T _def=T()) const
 
template<typename T >
std::optional< HalfFacePropertyPtr< T > > get_halfface_property (const std::string &_name)
 
template<typename T >
std::optional< const HalfFacePropertyPtr< T > > get_halfface_property (const std::string &_name) const
 
template<class T >
bool halfface_property_exists (const std::string &_name) const
 
size_t n_cell_props () const
 
auto cell_props_begin () const
 
auto cell_props_end () const
 
template<typename T >
std::optional< CellPropertyPtr< T > > create_shared_cell_property (std::string _name, const T _def=T())
 
template<typename T >
std::optional< CellPropertyPtr< T > > create_persistent_cell_property (std::string _name, const T _def=T())
 
template<typename T >
CellPropertyPtr< T > create_private_cell_property (std::string _name={}, const T _def=T()) const
 
template<typename T >
std::optional< CellPropertyPtr< T > > get_cell_property (const std::string &_name)
 
template<typename T >
std::optional< const CellPropertyPtr< T > > get_cell_property (const std::string &_name) const
 
template<class T >
bool cell_property_exists (const std::string &_name) const
 

Protected Member Functions

void split_edge (HalfEdgeHandle _heh, VertexHandle _vh)
 
void split_face (FaceHandle _fh, VertexHandle _vh)
 
- Protected Member Functions inherited from OpenVolumeMesh::TopologyKernel
void compute_vertex_bottom_up_incidences ()
 
void compute_edge_bottom_up_incidences ()
 
void compute_face_bottom_up_incidences ()
 
- Protected Member Functions inherited from OpenVolumeMesh::ResourceManager
template<typename EntityTag >
detail::Tracker< PropertyStorageBase > & storage_tracker () const
 
detail::Tracker< PropertyStorageBase > & storage_tracker (EntityType type) const
 
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 reserve_vprops (size_t n)
 
void reserve_eprops (size_t n)
 
void reserve_fprops (size_t n)
 
void reserve_cprops (size_t n)
 
void vertex_deleted (const VertexHandle &_h)
 
void edge_deleted (const EdgeHandle &_h)
 
void face_deleted (const FaceHandle &_h)
 
void cell_deleted (const CellHandle &_h)
 
template<typename Handle >
void swap_property_elements (Handle _idx_a, Handle _idx_b)
 
template<typename Handle >
void copy_property_elements (Handle _idx_a, Handle _idx_b)
 

Private Member Functions

template<typename PropIterator , typename Handle >
void swapPropertyElements (PropIterator begin, PropIterator end, Handle source, Handle destination)
 

Friends

class TetVertexIter
 

Additional Inherited Members

- Static Public Member Functions inherited from OpenVolumeMesh::TopologyKernel
static HalfEdgeHandle halfedge_handle (EdgeHandle _h, const unsigned char _subIdx)
 Conversion function.
 
static HalfFaceHandle halfface_handle (FaceHandle _h, const unsigned char _subIdx)
 Conversion function.
 
static EdgeHandle edge_handle (HalfEdgeHandle _h)
 Handle conversion.
 
static FaceHandle face_handle (HalfFaceHandle _h)
 
static HalfEdgeHandle opposite_halfedge_handle (HalfEdgeHandle _h)
 
static HalfFaceHandle opposite_halfface_handle (HalfFaceHandle _h)
 
- 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)
 
- 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
VertexVector< std::vector< HalfEdgeHandle > > outgoing_hes_per_vertex_
 
HalfEdgeVector< std::vector< HalfFaceHandle > > incident_hfs_per_he_
 
HalfFaceVector< CellHandleincident_cell_per_hf_
 
- Protected Attributes inherited from OpenVolumeMesh::ResourceManager
PerEntity< detail::Tracker< PropertyStorageBase > > storage_trackers_
 

Detailed Description

A data structure based on PolyhedralMesh with specializations for tetrahedra.

Definition at line 55 of file TetrahedralMeshTopologyKernel.hh.

Member Typedef Documentation

◆ TetVertexIter

typedef class TetVertexIter OpenVolumeMesh::TetrahedralMeshTopologyKernel::TetVertexIter

Definition at line 115 of file TetrahedralMeshTopologyKernel.hh.

Member Function Documentation

◆ add_cell() [1/3]

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

Definition at line 573 of file TetrahedralMeshTopologyKernel.cc.

◆ add_cell() [2/3]

CellHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::add_cell ( std::vector< HalfFaceHandle _halffaces,
bool  _topologyCheck = false 
)
overridevirtual

Add cell via incident halffaces.

Add cell via incident halffaces

Returns
Handle of the new cell, InvalidCellHandle if _topologyCheck is true and _halffaces are not connected.
Warning
If _halffaces are not connected and _topologyCheck is false, the behavior is undefined.

Reimplemented from OpenVolumeMesh::TopologyKernel.

Definition at line 75 of file TetrahedralMeshTopologyKernel.cc.

◆ add_cell() [3/3]

CellHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::add_cell ( VertexHandle  _vh0,
VertexHandle  _vh1,
VertexHandle  _vh2,
VertexHandle  _vh3,
bool  _topologyCheck = false 
)

Definition at line 694 of file TetrahedralMeshTopologyKernel.cc.

◆ add_face() [1/2]

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

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 58 of file TetrahedralMeshTopologyKernel.cc.

◆ add_face() [2/2]

FaceHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::add_face ( std::vector< HalfEdgeHandle _halfedges,
bool  _topologyCheck = false 
)
overridevirtual

Add face via incident edges.

Add face via incident edges

Returns
Handle of the new face, InvalidFaceHandle if _halfedges are not connected and _topologyCheck is true.
Warning
If _halfedges are not connected or not in the right order and _topologyCheck is false, the behavior is undefined.

Reimplemented from OpenVolumeMesh::TopologyKernel.

Definition at line 41 of file TetrahedralMeshTopologyKernel.cc.

◆ add_halfedge()

HalfEdgeHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::add_halfedge ( VertexHandle  _fromVertex,
VertexHandle  _toVertex 
)

Definition at line 98 of file TetrahedralMeshTopologyKernel.cc.

◆ add_halfface() [1/2]

HalfFaceHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::add_halfface ( const std::vector< HalfEdgeHandle > &  _halfedges,
bool  _topologyCheck = false 
)

Definition at line 107 of file TetrahedralMeshTopologyKernel.cc.

◆ add_halfface() [2/2]

HalfFaceHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::add_halfface ( VertexHandle  _vh0,
VertexHandle  _vh1,
VertexHandle  _vh2,
bool  _topologyCheck = false 
)

Definition at line 116 of file TetrahedralMeshTopologyKernel.cc.

◆ collapse_edge()

VertexHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::collapse_edge ( HalfEdgeHandle  _heh)

Definition at line 311 of file TetrahedralMeshTopologyKernel.cc.

◆ get_cell_vertices() [1/4]

std::vector< VertexHandle > OpenVolumeMesh::TetrahedralMeshTopologyKernel::get_cell_vertices ( CellHandle  ch) const

Get the 4 vertices of the tet ch in a specific order: 1.-3. vertices of ch's first halfface, ccw, starting with the first from_vertex of the halfface's first halfedge. 4. Then comes the 4th vertex of the tet.

Definition at line 486 of file TetrahedralMeshTopologyKernel.cc.

◆ get_cell_vertices() [2/4]

std::vector< VertexHandle > OpenVolumeMesh::TetrahedralMeshTopologyKernel::get_cell_vertices ( CellHandle  ch,
VertexHandle  vh 
) const

Get the 4 vertices of the tet ch in a specific order, starting with vh.

Definition at line 491 of file TetrahedralMeshTopologyKernel.cc.

◆ get_cell_vertices() [3/4]

std::vector< VertexHandle > OpenVolumeMesh::TetrahedralMeshTopologyKernel::get_cell_vertices ( HalfFaceHandle  hfh) const

Get the 4 vertices of hfh's incident cell in a specific order: 1.-3. vertices of hfh, ccw, starting with the first from_vertex of the halfface's first halfedge. 4. Then comes the 4th vertex of the tet. Returns an empty vector, if the incident cell is invalid (hfh is boundary).

Definition at line 501 of file TetrahedralMeshTopologyKernel.cc.

◆ get_cell_vertices() [4/4]

std::vector< VertexHandle > OpenVolumeMesh::TetrahedralMeshTopologyKernel::get_cell_vertices ( HalfFaceHandle  hfh,
HalfEdgeHandle  heh 
) const

Get the 4 vertices of hfh's incident cell in a specific order:

  1. heh.to_vertex, 2. heh.to_vertex, 3. 3rd vertex of hfh, 4. 4th vertex of the tet. heh is expected to be incident to hfh

Definition at line 532 of file TetrahedralMeshTopologyKernel.cc.

◆ halfface_opposite_vertex()

VertexHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::halfface_opposite_vertex ( HalfFaceHandle  hfh) const

Get the vertex of the halfface's incident cell that is not contained in the halfface hfh. If the incident cell is invalid (hfh is boundary), returns the invalid vertex handle

Definition at line 551 of file TetrahedralMeshTopologyKernel.cc.

◆ split_edge()

void OpenVolumeMesh::TetrahedralMeshTopologyKernel::split_edge ( HalfEdgeHandle  _heh,
VertexHandle  _vh 
)
protected

Definition at line 406 of file TetrahedralMeshTopologyKernel.cc.

◆ split_face()

void OpenVolumeMesh::TetrahedralMeshTopologyKernel::split_face ( FaceHandle  _fh,
VertexHandle  _vh 
)
protected

Definition at line 449 of file TetrahedralMeshTopologyKernel.cc.

◆ swapPropertyElements()

template<typename PropIterator , typename Handle >
void OpenVolumeMesh::TetrahedralMeshTopologyKernel::swapPropertyElements ( PropIterator  begin,
PropIterator  end,
Handle  source,
Handle  destination 
)
inlineprivate

Definition at line 136 of file TetrahedralMeshTopologyKernel.hh.

◆ tet_vertices()

std::pair< TetVertexIter, TetVertexIter > OpenVolumeMesh::TetrahedralMeshTopologyKernel::tet_vertices ( CellHandle  _ref_h,
int  _max_laps = 1 
) const
inline

Definition at line 125 of file TetrahedralMeshTopologyKernel.hh.

◆ tv_iter()

TetVertexIter OpenVolumeMesh::TetrahedralMeshTopologyKernel::tv_iter ( CellHandle  _ref_h,
int  _max_laps = 1 
) const
inline

Returns an iterator to iterate over the four vertices of a tetrahedron in a specific order: 1.-3. vertices of the tet's first halfface, starting with the halfface's first halfedge's from_vertex, then 4. the remaining fourth vertex of the tet. Uses get_cell_vertices(ch).

Definition at line 121 of file TetrahedralMeshTopologyKernel.hh.

◆ vertex_opposite_halfface()

HalfFaceHandle OpenVolumeMesh::TetrahedralMeshTopologyKernel::vertex_opposite_halfface ( CellHandle  ch,
VertexHandle  vh 
) const

Get the first halfface of the tet ch that does not contain the vertex vh.

Definition at line 556 of file TetrahedralMeshTopologyKernel.cc.

Friends And Related Symbol Documentation

◆ TetVertexIter

friend class TetVertexIter
friend

Definition at line 113 of file TetrahedralMeshTopologyKernel.hh.


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