OpenMesh
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
OpenMesh::ArrayKernel Class Reference

Mesh kernel using arrays for mesh item storage. More...

#include <OpenMesh/Core/Mesh/ArrayKernel.hh>

Inheritance diagram for OpenMesh::ArrayKernel:
Collaboration diagram for OpenMesh::ArrayKernel:

Classes

class  AutoStatusSetT
 AutoStatusSetT: A status set that automatically picks a status bit. More...
 
class  ExtStatusSetT
 ExtStatusSet: A status set augmented with an array. More...
 
class  StatusSetT
 — StatusSet API — More...
 

Public Types

typedef OpenMesh::VertexHandle VertexHandle
 
typedef OpenMesh::HalfedgeHandle HalfedgeHandle
 
typedef OpenMesh::EdgeHandle EdgeHandle
 
typedef OpenMesh::FaceHandle FaceHandle
 
typedef Attributes::StatusInfo StatusInfo
 
typedef VPropHandleT< StatusInfoVertexStatusPropertyHandle
 
typedef HPropHandleT< StatusInfoHalfedgeStatusPropertyHandle
 
typedef EPropHandleT< StatusInfoEdgeStatusPropertyHandle
 
typedef FPropHandleT< StatusInfoFaceStatusPropertyHandle
 
typedef AutoStatusSetT
< VertexHandle
VertexStatusSet
 
typedef AutoStatusSetT
< EdgeHandle
EdgeStatusSet
 
typedef AutoStatusSetT
< FaceHandle
FaceStatusSet
 
typedef AutoStatusSetT
< HalfedgeHandle
HalfedgeStatusSet
 
typedef ExtStatusSetT< FaceHandleExtFaceStatusSet
 
typedef ExtStatusSetT
< VertexHandle
ExtVertexStatusSet
 
typedef ExtStatusSetT< EdgeHandleExtEdgeStatusSet
 
typedef ExtStatusSetT
< HalfedgeHandle
ExtHalfedgeStatusSet
 
- Public Types inherited from OpenMesh::BaseKernel
typedef PropertyContainer::iterator prop_iterator
 
typedef
PropertyContainer::const_iterator 
const_prop_iterator
 

Public Member Functions

void assign_connectivity (const ArrayKernel &_other)
 ArrayKernel uses the default copy constructor and assignment operator, which means that the connectivity and all properties are copied, including reference counters, allocated bit status masks, etc. More...
 
VertexHandle handle (const Vertex &_v) const
 
HalfedgeHandle handle (const Halfedge &_he) const
 
EdgeHandle handle (const Edge &_e) const
 
FaceHandle handle (const Face &_f) const
 
bool is_valid_handle (VertexHandle _vh) const
 checks handle validity - useful for debugging
 
bool is_valid_handle (HalfedgeHandle _heh) const
 checks handle validity - useful for debugging
 
bool is_valid_handle (EdgeHandle _eh) const
 checks handle validity - useful for debugging
 
bool is_valid_handle (FaceHandle _fh) const
 checks handle validity - useful for debugging
 
const Vertex & vertex (VertexHandle _vh) const
 
Vertex & vertex (VertexHandle _vh)
 
const Halfedge & halfedge (HalfedgeHandle _heh) const
 
Halfedge & halfedge (HalfedgeHandle _heh)
 
const Edge & edge (EdgeHandle _eh) const
 
Edge & edge (EdgeHandle _eh)
 
const Face & face (FaceHandle _fh) const
 
Face & face (FaceHandle _fh)
 
VertexHandle vertex_handle (unsigned int _i) const
 
HalfedgeHandle halfedge_handle (unsigned int _i) const
 
EdgeHandle edge_handle (unsigned int _i) const
 
FaceHandle face_handle (unsigned int _i) const
 
VertexHandle new_vertex ()
 Add a new vertex. More...
 
VertexHandle new_vertex_dirty ()
 Same as new_vertex() but uses PropertyContainer::resize_if_smaller() to resize the vertex property container. More...
 
HalfedgeHandle new_edge (VertexHandle _start_vh, VertexHandle _end_vh)
 
FaceHandle new_face ()
 
FaceHandle new_face (const Face &_f)
 
void resize (size_t _n_vertices, size_t _n_edges, size_t _n_faces)
 
void reserve (size_t _n_vertices, size_t _n_edges, size_t _n_faces)
 
void garbage_collection (bool _v=true, bool _e=true, bool _f=true)
 garbage collection More...
 
template<typename std_API_Container_VHandlePointer , typename std_API_Container_HHandlePointer , typename std_API_Container_FHandlePointer >
void garbage_collection (std_API_Container_VHandlePointer &vh_to_update, std_API_Container_HHandlePointer &hh_to_update, std_API_Container_FHandlePointer &fh_to_update, bool _v=true, bool _e=true, bool _f=true)
 garbage collection with handle tracking More...
 
void clear ()
 Does the same as clean() and in addition erases all properties.
 
void clean ()
 Remove all vertices, edges and faces and deallocates their memory. More...
 
void clean_keep_reservation ()
 Remove all vertices, edges and faces but keep memory allocated. More...
 
size_t n_vertices () const
 
size_t n_halfedges () const
 
size_t n_edges () const
 
size_t n_faces () const
 
bool vertices_empty () const
 
bool halfedges_empty () const
 
bool edges_empty () const
 
bool faces_empty () const
 
HalfedgeHandle halfedge_handle (VertexHandle _vh) const
 
void set_halfedge_handle (VertexHandle _vh, HalfedgeHandle _heh)
 
bool is_isolated (VertexHandle _vh) const
 
void set_isolated (VertexHandle _vh)
 
unsigned int delete_isolated_vertices ()
 
VertexHandle to_vertex_handle (HalfedgeHandle _heh) const
 
VertexHandle from_vertex_handle (HalfedgeHandle _heh) const
 
void set_vertex_handle (HalfedgeHandle _heh, VertexHandle _vh)
 
FaceHandle face_handle (HalfedgeHandle _heh) const
 
void set_face_handle (HalfedgeHandle _heh, FaceHandle _fh)
 
void set_boundary (HalfedgeHandle _heh)
 
bool is_boundary (HalfedgeHandle _heh) const
 Is halfedge _heh a boundary halfedge (is its face handle invalid) ?
 
HalfedgeHandle next_halfedge_handle (HalfedgeHandle _heh) const
 
void set_next_halfedge_handle (HalfedgeHandle _heh, HalfedgeHandle _nheh)
 
void set_prev_halfedge_handle (HalfedgeHandle _heh, HalfedgeHandle _pheh)
 
void set_prev_halfedge_handle (HalfedgeHandle _heh, HalfedgeHandle _pheh, GenProg::TrueType)
 
void set_prev_halfedge_handle (HalfedgeHandle, HalfedgeHandle, GenProg::FalseType)
 
HalfedgeHandle prev_halfedge_handle (HalfedgeHandle _heh) const
 
HalfedgeHandle prev_halfedge_handle (HalfedgeHandle _heh, GenProg::TrueType) const
 
HalfedgeHandle prev_halfedge_handle (HalfedgeHandle _heh, GenProg::FalseType) const
 
HalfedgeHandle opposite_halfedge_handle (HalfedgeHandle _heh) const
 
HalfedgeHandle ccw_rotated_halfedge_handle (HalfedgeHandle _heh) const
 
HalfedgeHandle cw_rotated_halfedge_handle (HalfedgeHandle _heh) const
 
HalfedgeHandle halfedge_handle (EdgeHandle _eh, unsigned int _i) const
 
EdgeHandle edge_handle (HalfedgeHandle _heh) const
 
HalfedgeHandle halfedge_handle (FaceHandle _fh) const
 
void set_halfedge_handle (FaceHandle _fh, HalfedgeHandle _heh)
 
const StatusInfostatus (VertexHandle _vh) const
 Status Query API.
 
StatusInfostatus (VertexHandle _vh)
 
void reset_status ()
 Reinitializes the status of all vertices using the StatusInfo default constructor, i.e. More...
 
const StatusInfostatus (HalfedgeHandle _hh) const
 
StatusInfostatus (HalfedgeHandle _hh)
 
const StatusInfostatus (EdgeHandle _eh) const
 
StatusInfostatus (EdgeHandle _eh)
 
const StatusInfostatus (FaceHandle _fh) const
 
StatusInfostatus (FaceHandle _fh)
 
bool has_vertex_status () const
 
bool has_halfedge_status () const
 
bool has_edge_status () const
 
bool has_face_status () const
 
VertexStatusPropertyHandle vertex_status_pph () const
 
HalfedgeStatusPropertyHandle halfedge_status_pph () const
 
EdgeStatusPropertyHandle edge_status_pph () const
 
FaceStatusPropertyHandle face_status_pph () const
 
VertexStatusPropertyHandle status_pph (VertexHandle) const
 status property by handle
 
HalfedgeStatusPropertyHandle status_pph (HalfedgeHandle) const
 
EdgeStatusPropertyHandle status_pph (EdgeHandle) const
 
FaceStatusPropertyHandle status_pph (FaceHandle) const
 
void request_vertex_status ()
 Status Request API.
 
void request_halfedge_status ()
 
void request_edge_status ()
 
void request_face_status ()
 
void release_vertex_status ()
 Status Release API.
 
void release_halfedge_status ()
 
void release_edge_status ()
 
void release_face_status ()
 
- Public Member Functions inherited from OpenMesh::BaseKernel
template<class T >
void copy_property (VPropHandleT< T > &_ph, VertexHandle _vh_from, VertexHandle _vh_to)
 Copies a single property from one mesh element to another (of the same type) More...
 
template<class T >
void copy_property (HPropHandleT< T > _ph, HalfedgeHandle _hh_from, HalfedgeHandle _hh_to)
 Copies a single property from one mesh element to another (of the same type) More...
 
template<class T >
void copy_property (EPropHandleT< T > _ph, EdgeHandle _eh_from, EdgeHandle _eh_to)
 Copies a single property from one mesh element to another (of the same type) More...
 
template<class T >
void copy_property (FPropHandleT< T > _ph, FaceHandle _fh_from, FaceHandle _fh_to)
 Copies a single property from one mesh element to another (of the same type) More...
 
void copy_all_properties (VertexHandle _vh_from, VertexHandle _vh_to, bool _copyBuildIn=false)
 Copies all properties from one mesh element to another (of the same type) More...
 
void copy_all_properties (HalfedgeHandle _hh_from, HalfedgeHandle _hh_to, bool _copyBuildIn=false)
 Copies all properties from one mesh element to another (of the same type) More...
 
void copy_all_properties (EdgeHandle _eh_from, EdgeHandle _eh_to, bool _copyBuildIn=false)
 Copies all properties from one mesh element to another (of the same type) More...
 
void copy_all_properties (FaceHandle _fh_from, FaceHandle _fh_to, bool _copyBuildIn=false)
 Copies all properties from one mesh element to another (of the same type) More...
 
size_t n_vprops (void) const
 
size_t n_eprops (void) const
 
size_t n_hprops (void) const
 
size_t n_fprops (void) const
 
size_t n_mprops (void) const
 
BaseProperty_get_vprop (const std::string &_name)
 
BaseProperty_get_eprop (const std::string &_name)
 
BaseProperty_get_hprop (const std::string &_name)
 
BaseProperty_get_fprop (const std::string &_name)
 
BaseProperty_get_mprop (const std::string &_name)
 
const BaseProperty_get_vprop (const std::string &_name) const
 
const BaseProperty_get_eprop (const std::string &_name) const
 
const BaseProperty_get_hprop (const std::string &_name) const
 
const BaseProperty_get_fprop (const std::string &_name) const
 
const BaseProperty_get_mprop (const std::string &_name) const
 
BaseProperty_vprop (size_t _idx)
 
BaseProperty_eprop (size_t _idx)
 
BaseProperty_hprop (size_t _idx)
 
BaseProperty_fprop (size_t _idx)
 
BaseProperty_mprop (size_t _idx)
 
const BaseProperty_vprop (size_t _idx) const
 
const BaseProperty_eprop (size_t _idx) const
 
const BaseProperty_hprop (size_t _idx) const
 
const BaseProperty_fprop (size_t _idx) const
 
const BaseProperty_mprop (size_t _idx) const
 
size_t _add_vprop (BaseProperty *_bp)
 
size_t _add_eprop (BaseProperty *_bp)
 
size_t _add_hprop (BaseProperty *_bp)
 
size_t _add_fprop (BaseProperty *_bp)
 
size_t _add_mprop (BaseProperty *_bp)
 
void property_stats () const
 
void property_stats (std::ostream &_ostr) const
 
void vprop_stats (std::string &_string) const
 
void hprop_stats (std::string &_string) const
 
void eprop_stats (std::string &_string) const
 
void fprop_stats (std::string &_string) const
 
void mprop_stats (std::string &_string) const
 
void vprop_stats () const
 
void hprop_stats () const
 
void eprop_stats () const
 
void fprop_stats () const
 
void mprop_stats () const
 
void vprop_stats (std::ostream &_ostr) const
 
void hprop_stats (std::ostream &_ostr) const
 
void eprop_stats (std::ostream &_ostr) const
 
void fprop_stats (std::ostream &_ostr) const
 
void mprop_stats (std::ostream &_ostr) const
 
prop_iterator vprops_begin ()
 
prop_iterator vprops_end ()
 
const_prop_iterator vprops_begin () const
 
const_prop_iterator vprops_end () const
 
prop_iterator eprops_begin ()
 
prop_iterator eprops_end ()
 
const_prop_iterator eprops_begin () const
 
const_prop_iterator eprops_end () const
 
prop_iterator hprops_begin ()
 
prop_iterator hprops_end ()
 
const_prop_iterator hprops_begin () const
 
const_prop_iterator hprops_end () const
 
prop_iterator fprops_begin ()
 
prop_iterator fprops_end ()
 
const_prop_iterator fprops_begin () const
 
const_prop_iterator fprops_end () const
 
prop_iterator mprops_begin ()
 
prop_iterator mprops_end ()
 
const_prop_iterator mprops_begin () const
 
const_prop_iterator mprops_end () const
 
template<class T >
void add_property (VPropHandleT< T > &_ph, const std::string &_name="<vprop>")
 Adds a property. More...
 
template<class T >
void add_property (HPropHandleT< T > &_ph, const std::string &_name="<hprop>")
 Adds a property. More...
 
template<class T >
void add_property (EPropHandleT< T > &_ph, const std::string &_name="<eprop>")
 Adds a property. More...
 
template<class T >
void add_property (FPropHandleT< T > &_ph, const std::string &_name="<fprop>")
 Adds a property. More...
 
template<class T >
void add_property (MPropHandleT< T > &_ph, const std::string &_name="<mprop>")
 Adds a property. More...
 
template<typename T >
void remove_property (VPropHandleT< T > &_ph)
 Remove a property. More...
 
template<typename T >
void remove_property (HPropHandleT< T > &_ph)
 Remove a property. More...
 
template<typename T >
void remove_property (EPropHandleT< T > &_ph)
 Remove a property. More...
 
template<typename T >
void remove_property (FPropHandleT< T > &_ph)
 Remove a property. More...
 
template<typename T >
void remove_property (MPropHandleT< T > &_ph)
 Remove a property. More...
 
template<class T >
bool get_property_handle (VPropHandleT< T > &_ph, const std::string &_name) const
 Retrieves the handle to a named property by it's name. More...
 
template<class T >
bool get_property_handle (HPropHandleT< T > &_ph, const std::string &_name) const
 Retrieves the handle to a named property by it's name. More...
 
template<class T >
bool get_property_handle (EPropHandleT< T > &_ph, const std::string &_name) const
 Retrieves the handle to a named property by it's name. More...
 
template<class T >
bool get_property_handle (FPropHandleT< T > &_ph, const std::string &_name) const
 Retrieves the handle to a named property by it's name. More...
 
template<class T >
bool get_property_handle (MPropHandleT< T > &_ph, const std::string &_name) const
 Retrieves the handle to a named property by it's name. More...
 
template<class T >
PropertyT< T > & property (VPropHandleT< T > _ph)
 Access a property. More...
 
template<class T >
const PropertyT< T > & property (VPropHandleT< T > _ph) const
 Access a property. More...
 
template<class T >
PropertyT< T > & property (HPropHandleT< T > _ph)
 Access a property. More...
 
template<class T >
const PropertyT< T > & property (HPropHandleT< T > _ph) const
 Access a property. More...
 
template<class T >
PropertyT< T > & property (EPropHandleT< T > _ph)
 Access a property. More...
 
template<class T >
const PropertyT< T > & property (EPropHandleT< T > _ph) const
 Access a property. More...
 
template<class T >
PropertyT< T > & property (FPropHandleT< T > _ph)
 Access a property. More...
 
template<class T >
const PropertyT< T > & property (FPropHandleT< T > _ph) const
 Access a property. More...
 
template<class T >
PropertyT< T > & mproperty (MPropHandleT< T > _ph)
 Access a property. More...
 
template<class T >
const PropertyT< T > & mproperty (MPropHandleT< T > _ph) const
 Access a property. More...
 
template<class T >
VPropHandleT< T >::reference property (VPropHandleT< T > _ph, VertexHandle _vh)
 Return value of property for an item.
 
template<class T >
VPropHandleT< T >::const_reference property (VPropHandleT< T > _ph, VertexHandle _vh) const
 Return value of property for an item.
 
template<class T >
HPropHandleT< T >::reference property (HPropHandleT< T > _ph, HalfedgeHandle _hh)
 Return value of property for an item.
 
template<class T >
HPropHandleT< T >::const_reference property (HPropHandleT< T > _ph, HalfedgeHandle _hh) const
 Return value of property for an item.
 
template<class T >
EPropHandleT< T >::reference property (EPropHandleT< T > _ph, EdgeHandle _eh)
 Return value of property for an item.
 
template<class T >
EPropHandleT< T >::const_reference property (EPropHandleT< T > _ph, EdgeHandle _eh) const
 Return value of property for an item.
 
template<class T >
FPropHandleT< T >::reference property (FPropHandleT< T > _ph, FaceHandle _fh)
 Return value of property for an item.
 
template<class T >
FPropHandleT< T >::const_reference property (FPropHandleT< T > _ph, FaceHandle _fh) const
 Return value of property for an item.
 
template<class T >
MPropHandleT< T >::reference property (MPropHandleT< T > _ph)
 Return value of property for an item.
 
template<class T >
MPropHandleT< T >::const_reference property (MPropHandleT< T > _ph) const
 Return value of property for an item.
 

Static Public Member Functions

static HalfedgeHandle s_halfedge_handle (EdgeHandle _eh, unsigned int _i)
 
static EdgeHandle s_edge_handle (HalfedgeHandle _heh)
 

Friends

class StatusSetT< VertexHandle >
 
class StatusSetT< EdgeHandle >
 
class StatusSetT< FaceHandle >
 
class StatusSetT< HalfedgeHandle >
 
class AutoStatusSetT< VertexHandle >
 
class AutoStatusSetT< EdgeHandle >
 
class AutoStatusSetT< FaceHandle >
 
class AutoStatusSetT< HalfedgeHandle >
 

Additional Inherited Members

- Protected Member Functions inherited from OpenMesh::BaseKernel
BaseProperty_vprop (BaseHandle _h)
 
BaseProperty_eprop (BaseHandle _h)
 
BaseProperty_hprop (BaseHandle _h)
 
BaseProperty_fprop (BaseHandle _h)
 
BaseProperty_mprop (BaseHandle _h)
 
const BaseProperty_vprop (BaseHandle _h) const
 
const BaseProperty_eprop (BaseHandle _h) const
 
const BaseProperty_hprop (BaseHandle _h) const
 
const BaseProperty_fprop (BaseHandle _h) const
 
const BaseProperty_mprop (BaseHandle _h) const
 
void vprops_reserve (size_t _n) const
 Reserves space for _n elements in all vertex property vectors.
 
void vprops_resize (size_t _n) const
 Resizes all vertex property vectors to the specified size.
 
void vprops_resize_if_smaller (size_t _n) const
 Same as vprops_resize() but ignores vertex property vectors that have a size larger than _n. More...
 
void vprops_clear ()
 
void vprops_swap (unsigned int _i0, unsigned int _i1) const
 
void hprops_reserve (size_t _n) const
 
void hprops_resize (size_t _n) const
 
void hprops_clear ()
 
void hprops_swap (unsigned int _i0, unsigned int _i1) const
 
void eprops_reserve (size_t _n) const
 
void eprops_resize (size_t _n) const
 
void eprops_clear ()
 
void eprops_swap (unsigned int _i0, unsigned int _i1) const
 
void fprops_reserve (size_t _n) const
 
void fprops_resize (size_t _n) const
 
void fprops_clear ()
 
void fprops_swap (unsigned int _i0, unsigned int _i1) const
 
void mprops_resize (size_t _n) const
 
void mprops_clear ()
 

Detailed Description

Mesh kernel using arrays for mesh item storage.

This mesh kernel uses the std::vector as container to store the mesh items. Therefore all handle types are internally represented by integers. To get the index from a handle use the handle's idx() method.

Note
For a description of the minimal kernel interface see OpenMesh::Mesh::BaseKernel.
You do not have to use this class directly, use the predefined mesh-kernel combinations in Predefined Mesh Types.
See also
OpenMesh::Concepts::KernelT, Specifying your MyMesh

Member Function Documentation

void OpenMesh::ArrayKernel::assign_connectivity ( const ArrayKernel _other)

ArrayKernel uses the default copy constructor and assignment operator, which means that the connectivity and all properties are copied, including reference counters, allocated bit status masks, etc.

. In contrast assign_connectivity copies only the connectivity, i.e. vertices, edges, faces and their status fields. NOTE: The geometry (the points property) is NOT copied. Poly/TriConnectivity override(and hide) that function to provide connectivity consistence.

void OpenMesh::ArrayKernel::clean ( )

Remove all vertices, edges and faces and deallocates their memory.

In contrast to clear() this method does neither erases the properties nor clears the property vectors. Depending on how you add any new entities to the mesh after calling this method, your properties will be initialized with old values.

See also
clean_keep_reservation()
void OpenMesh::ArrayKernel::clean_keep_reservation ( )

Remove all vertices, edges and faces but keep memory allocated.

This method behaves like clean() (also regarding the properties) but leaves the memory used for vertex, edge and face storage allocated. This leads to no reduction in memory consumption but allows for faster performance when rebuilding the mesh.

void OpenMesh::ArrayKernel::garbage_collection ( bool  _v = true,
bool  _e = true,
bool  _f = true 
)

garbage collection

Usually if you delete primitives in OpenMesh, they are only flagged as deleted. Only when you call garbage collection, they will be actually removed.

Note
Garbage collection invalidates all handles. If you need to keep track of a set of handles, you can pass them to the second garbage collection function, which will update a vector of handles. See also Deleted Elements.
Parameters
_vRemove deleted vertices?
_eRemove deleted edges?
_fRemove deleted faces?
template<typename std_API_Container_VHandlePointer , typename std_API_Container_HHandlePointer , typename std_API_Container_FHandlePointer >
void OpenMesh::ArrayKernel::garbage_collection ( std_API_Container_VHandlePointer &  vh_to_update,
std_API_Container_HHandlePointer &  hh_to_update,
std_API_Container_FHandlePointer &  fh_to_update,
bool  _v = true,
bool  _e = true,
bool  _f = true 
)

garbage collection with handle tracking

Usually if you delete primitives in OpenMesh, they are only flagged as deleted. Only when you call garbage collection, they will be actually removed.

Note
Garbage collection invalidates all handles. If you need to keep track of a set of handles, you can pass them to this function. The handles that the given pointers point to are updated in place. See also Deleted Elements.
Parameters
vh_to_updatePointers to vertex handles that should get updated
hh_to_updatePointers to halfedge handles that should get updated
fh_to_updatePointers to face handles that should get updated
_vRemove deleted vertices?
_eRemove deleted edges?
_fRemove deleted faces?
VertexHandle OpenMesh::ArrayKernel::new_vertex ( )
inline

Add a new vertex.

If you are rebuilding a mesh that you previously erased using clean() or clean_keep_reservation() you probably want to use new_vertex_dirty() instead.

See also
new_vertex_dirty()
VertexHandle OpenMesh::ArrayKernel::new_vertex_dirty ( )
inline

Same as new_vertex() but uses PropertyContainer::resize_if_smaller() to resize the vertex property container.

If you are rebuilding a mesh that you erased with clean() or clean_keep_reservation() using this method instead of new_vertex() saves reallocation and reinitialization of property memory.

See also
new_vertex()
void OpenMesh::ArrayKernel::reset_status ( )
inline

Reinitializes the status of all vertices using the StatusInfo default constructor, i.e.

all flags will be set to false.


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

Project OpenMesh, ©  Computer Graphics Group, RWTH Aachen. Documentation generated using doxygen .