OpenMesh
OpenMesh Namespace Reference

Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels and mesh traits. More...

Namespaces

 Attributes
 This namespace holds per item attributes like normal/color.
 
 Concepts
 Descriptions of the concepts used in OpenMesh.
 
 Decimater
 Software related to mesh decimation.
 
 GenProg
 Utilities for generative programming.
 
 IO
 This namespace contains functions for reading and writing polygonal meshes and a list of supported file formats.
 
 Iterators
 Contains all mesh iterators and circulators.
 
 Kernel_OSG
 In this namespace resides the OpenSG integration of OpenMesh.
 
 Utils
 Collection of little utility classes and helpers.
 
 VDPM
 Software related to view dependent progressive meshes.
 

Classes

class  VDPMSynthesizerViewerWidget
 
struct  vector_traits< Eigen::Matrix< _Scalar, _Rows, _Cols, _Options > >
 
class  LoopSchemeMaskT
 implements cache for the weights of the original Loop scheme supported: More...
 
class  NormalConeT
 /class NormalCone NormalCone.hh <OpenMesh/Core/Geometry/NormalConeT.hh> More...
 
class  VectorT
 
class  ArrayKernel
 Mesh kernel using arrays for mesh item storage. More...
 
class  AttribKernelT
 The attribute kernel adds all standard properties to the kernel. More...
 
class  BaseKernel
 This class provides low-level property management like adding/removing properties and access to properties. More...
 
class  BaseMesh
 Base class for all meshes. More...
 
class  CirculatorRange
 Generic class for iterator ranges. More...
 
struct  FinalMeshItemsT
 Definition of the mesh entities (items). More...
 
struct  MeshCast
 Cast a mesh with different but identical traits into each other. More...
 
struct  MeshCast< LhsMeshT &, RhsMeshT & >
 
struct  MeshCast< const LhsMeshT &, const RhsMeshT & >
 
struct  MeshCast< LhsMeshT *, RhsMeshT * >
 
struct  MeshCast< const LhsMeshT *, const RhsMeshT * >
 
class  BaseHandle
 Base class for all handle types. More...
 
struct  VertexHandle
 Handle for a vertex entity. More...
 
struct  HalfedgeHandle
 Handle for a halfedge entity. More...
 
struct  EdgeHandle
 Handle for a edge entity. More...
 
struct  FaceHandle
 Handle for a face entity. More...
 
struct  MeshHandle
 Handle type for meshes to simplify some template programming. More...
 
class  EntityRange
 Generic class for vertex/halfedge/edge/face ranges. More...
 
struct  RangeTraitT
 
struct  CirculatorRangeTraitT
 
class  PolyConnectivity
 Connectivity Class for polygonal meshes. More...
 
class  TriMesh_ArrayKernelT
 Triangle mesh based on the ArrayKernel. More...
 
struct  PolyMesh_ArrayKernel_GeneratorT
 Helper class to build a PolyMesh-type. More...
 
class  PolyMesh_ArrayKernelT
 Polygonal mesh based on the ArrayKernel. More...
 
class  PolyMeshT
 Base type for a polygonal mesh. More...
 
class  SmartBaseHandle
 Base class for all smart handle types. More...
 
class  SmartHandleStatusPredicates
 Base class for all smart handle types that contains status related methods. More...
 
class  SmartHandleBoundaryPredicate
 Base class for all smart handle types that contains status related methods. More...
 
struct  SmartVertexHandle
 Smart version of VertexHandle contains a pointer to the corresponding mesh and allows easier access to navigation methods. More...
 
struct  SmartHalfedgeHandle
 
struct  SmartEdgeHandle
 
struct  SmartFaceHandle
 
struct  SmartHandle
 
struct  SmartHandle< VertexHandle >
 
struct  SmartHandle< HalfedgeHandle >
 
struct  SmartHandle< EdgeHandle >
 
struct  SmartHandle< FaceHandle >
 
struct  FilteredSmartRangeT
 Class which applies a filter when iterating over elements. More...
 
struct  SmartRangeT
 Base class for all smart range types. More...
 
struct  PolyConnectivityTag
 Connectivity tag indicating that the tagged mesh has polygon connectivity. More...
 
struct  TriConnectivityTag
 Connectivity tag indicating that the tagged mesh has triangle connectivity. More...
 
class  DefaultTraits
 Base class for all traits. More...
 
class  DefaultTraitsDouble
 Version of Default Traits that uses double precision for points and normals as well as floating point vectors for colors. More...
 
struct  MergeTraits
 Helper class to merge two mesh traits. More...
 
class  TriConnectivity
 Connectivity Class for Triangle Meshes. More...
 
struct  TriMesh_ArrayKernel_GeneratorT
 Helper class to create a TriMesh-type based on ArrayKernelT. More...
 
class  TriMeshT
 Base type for a triangle mesh. More...
 
class  AutoPropertyHandleT
 
class  BaseProperty
 Abstract class defining the basic interface of a dynamic property. More...
 
class  Endian
 Determine byte order of host system. More...
 
struct  HandleToPropHandle
 
struct  HandleToPropHandle< OpenMesh::VertexHandle, T >
 
struct  HandleToPropHandle< OpenMesh::HalfedgeHandle, T >
 
struct  HandleToPropHandle< OpenMesh::EdgeHandle, T >
 
struct  HandleToPropHandle< OpenMesh::FaceHandle, T >
 
struct  HandleToPropHandle< void, T >
 
struct  HandleToPropHandle< OpenMesh::MeshHandle, T >
 
class  PropertyT
 Default property class for any type T. More...
 
class  PropertyT< bool >
 Property specialization for bool type. More...
 
struct  BasePropHandleT
 Base property handle. More...
 
struct  VPropHandleT
 Handle representing a vertex property. More...
 
struct  HPropHandleT
 Handle representing a halfedge property. More...
 
struct  EPropHandleT
 Handle representing an edge property. More...
 
struct  FPropHandleT
 Handle representing a face property. More...
 
struct  MPropHandleT
 Handle representing a mesh property. More...
 
struct  PropHandle
 
struct  PropHandle< VertexHandle >
 
struct  PropHandle< HalfedgeHandle >
 
struct  PropHandle< EdgeHandle >
 
struct  PropHandle< FaceHandle >
 
struct  PropHandle< MeshHandle >
 
class  PropertyContainer
 A a container for properties. More...
 
class  PropertyCreator
 Base class for property creators. More...
 
class  PropertyCreatorImpl
 Helper class that contains the implementation of the create_<HandleT>_property methods. More...
 
class  PropertyCreationManager
 Class for adding properties based on strings. More...
 
class  PropertyManager
 This class is intended to manage the lifecycle of properties. More...
 
class  ConstPropertyViewer
 
class  RandomNumberGenerator
 Generate a random number between 0.0 and 1.0 with a guaranteed resolution ( Number of possible values ) More...
 
class  SingletonT
 A simple singleton template. More...
 
struct  vector_traits
 Helper class providing information about a vector type. More...
 
struct  color_caster< osg::Color3ub, osg::Color3f >
 Helper struct. More...
 
struct  color_caster< osg::Color3f, osg::Color3ub >
 Helper struct. More...
 
struct  vector_traits< osg::Pnt4f >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Pnt3f >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Pnt2f >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Vec4f >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Vec3f >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Vec2f >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Pnt4d >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Pnt3d >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Pnt2d >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Vec4d >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Vec3d >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Vec4ub >
 Vector traits for OpenSG vector type. More...
 
struct  vector_traits< osg::Color3ub >
 Vector traits for OpenSG color type. More...
 
struct  vector_traits< osg::Color4ub >
 Vector traits for OpenSG color type. More...
 
struct  vector_traits< osg::Color3f >
 Vector traits for OpenSG color type. More...
 
struct  vector_traits< osg::Color4f >
 Vector traits for OpenSG color type. More...
 
struct  vector_caster< osg::Vec3f, osg::Pnt3f >
 convert Pnt3f to Vec3f More...
 
struct  vector_caster< osg::Vec4f, osg::Pnt4f >
 convert Pnt4f to Vec4f More...
 
struct  vector_caster< osg::Vec3d, osg::Pnt3d >
 convert Pnt3d to Vec3d More...
 
struct  vector_caster< osg::Vec4d, osg::Pnt4d >
 convert Pnt4d to Vec4d More...
 
class  SmartTaggerVT
 
class  SmartTaggerET
 
class  SmartTaggerFT
 
class  SmartTaggerHT
 
class  SmartTaggerT
 Smart Tagger. More...
 
class  StripifierT
 This class decomposes a triangle mesh into several triangle strips. More...
 
struct  vector_traits< Custom::Vec< DIM > >
 

Typedefs

typedef TriMesh_ArrayKernelT< VDPM::MeshTraitsVDPMMesh
 
typedef MeshViewerWidgetT< VDPMMeshMeshViewerWidget
 
typedef LoopSchemeMaskT< double, 100 > LoopSchemeMaskDouble
 
typedef SingletonT< LoopSchemeMaskDoubleLoopSchemeMaskDoubleSingleton
 
typedef VectorT< signed char, 1 > Vec1c
 1-byte signed vector
 
typedef VectorT< unsigned char, 1 > Vec1uc
 1-byte unsigned vector
 
typedef VectorT< signed short int, 1 > Vec1s
 1-short signed vector
 
typedef VectorT< unsigned short int, 1 > Vec1us
 1-short unsigned vector
 
typedef VectorT< signed int, 1 > Vec1i
 1-int signed vector
 
typedef VectorT< unsigned int, 1 > Vec1ui
 1-int unsigned vector
 
typedef VectorT< float, 1 > Vec1f
 1-float vector
 
typedef VectorT< double, 1 > Vec1d
 1-double vector
 
typedef VectorT< signed char, 2 > Vec2c
 2-byte signed vector
 
typedef VectorT< unsigned char, 2 > Vec2uc
 2-byte unsigned vector
 
typedef VectorT< signed short int, 2 > Vec2s
 2-short signed vector
 
typedef VectorT< unsigned short int, 2 > Vec2us
 2-short unsigned vector
 
typedef VectorT< signed int, 2 > Vec2i
 2-int signed vector
 
typedef VectorT< unsigned int, 2 > Vec2ui
 2-int unsigned vector
 
typedef VectorT< float, 2 > Vec2f
 2-float vector
 
typedef VectorT< double, 2 > Vec2d
 2-double vector
 
typedef VectorT< signed char, 3 > Vec3c
 3-byte signed vector
 
typedef VectorT< unsigned char, 3 > Vec3uc
 3-byte unsigned vector
 
typedef VectorT< signed short int, 3 > Vec3s
 3-short signed vector
 
typedef VectorT< unsigned short int, 3 > Vec3us
 3-short unsigned vector
 
typedef VectorT< signed int, 3 > Vec3i
 3-int signed vector
 
typedef VectorT< unsigned int, 3 > Vec3ui
 3-int unsigned vector
 
typedef VectorT< float, 3 > Vec3f
 3-float vector
 
typedef VectorT< double, 3 > Vec3d
 3-double vector
 
typedef VectorT< bool, 3 > Vec3b
 3-bool vector
 
typedef VectorT< signed char, 4 > Vec4c
 4-byte signed vector
 
typedef VectorT< unsigned char, 4 > Vec4uc
 4-byte unsigned vector
 
typedef VectorT< signed short int, 4 > Vec4s
 4-short signed vector
 
typedef VectorT< unsigned short int, 4 > Vec4us
 4-short unsigned vector
 
typedef VectorT< signed int, 4 > Vec4i
 4-int signed vector
 
typedef VectorT< unsigned int, 4 > Vec4ui
 4-int unsigned vector
 
typedef VectorT< float, 4 > Vec4f
 4-float vector
 
typedef VectorT< double, 4 > Vec4d
 4-double vector
 
typedef VectorT< signed char, 5 > Vec5c
 5-byte signed vector
 
typedef VectorT< unsigned char, 5 > Vec5uc
 5-byte unsigned vector
 
typedef VectorT< signed short int, 5 > Vec5s
 5-short signed vector
 
typedef VectorT< unsigned short int, 5 > Vec5us
 5-short unsigned vector
 
typedef VectorT< signed int, 5 > Vec5i
 5-int signed vector
 
typedef VectorT< unsigned int, 5 > Vec5ui
 5-int unsigned vector
 
typedef VectorT< float, 5 > Vec5f
 5-float vector
 
typedef VectorT< double, 5 > Vec5d
 5-double vector
 
typedef VectorT< signed char, 6 > Vec6c
 6-byte signed vector
 
typedef VectorT< unsigned char, 6 > Vec6uc
 6-byte unsigned vector
 
typedef VectorT< signed short int, 6 > Vec6s
 6-short signed vector
 
typedef VectorT< unsigned short int, 6 > Vec6us
 6-short unsigned vector
 
typedef VectorT< signed int, 6 > Vec6i
 6-int signed vector
 
typedef VectorT< unsigned int, 6 > Vec6ui
 6-int unsigned vector
 
typedef VectorT< float, 6 > Vec6f
 6-float vector
 
typedef VectorT< double, 6 > Vec6d
 6-double vector
 
typedef PolyMesh_ArrayKernelT< DefaultTraitsDoublePolyMesh
 
typedef TriMesh_ArrayKernelT< DefaultTraitsDoubleTriMesh
 
template<typename HandleT , typename T >
using Prop = PropertyManager< typename PropHandle< HandleT >::template type< T > >
 
template<typename T >
using VProp = PropertyManager< OpenMesh::VPropHandleT< T > >
 
template<typename T >
using HProp = PropertyManager< OpenMesh::HPropHandleT< T > >
 
template<typename T >
using EProp = PropertyManager< OpenMesh::EPropHandleT< T > >
 
template<typename T >
using FProp = PropertyManager< OpenMesh::FPropHandleT< T > >
 
template<typename T >
using MProp = PropertyManager< OpenMesh::MPropHandleT< T > >
 

Functions

template<class T , typename Real >
bool is_zero (const T &_a, Real _eps)
 comparison operators with user-selected precision control
 
template<class T1 , class T2 , typename Real >
bool is_eq (const T1 &a, const T2 &b, Real _eps)
 
template<class T1 , class T2 , typename Real >
bool is_gt (const T1 &a, const T2 &b, Real _eps)
 
template<class T1 , class T2 , typename Real >
bool is_ge (const T1 &a, const T2 &b, Real _eps)
 
template<class T1 , class T2 , typename Real >
bool is_lt (const T1 &a, const T2 &b, Real _eps)
 
template<class T1 , class T2 , typename Real >
bool is_le (const T1 &a, const T2 &b, Real _eps)
 
float eps__ (float)
 
double eps__ (double)
 
template<class T >
bool is_zero (const T &a)
 
template<class T1 , class T2 >
bool is_eq (const T1 &a, const T2 &b)
 
template<class T1 , class T2 >
bool is_gt (const T1 &a, const T2 &b)
 
template<class T1 , class T2 >
bool is_ge (const T1 &a, const T2 &b)
 
template<class T1 , class T2 >
bool is_lt (const T1 &a, const T2 &b)
 
template<class T1 , class T2 >
bool is_le (const T1 &a, const T2 &b)
 
template<class T >
sane_aarg (T _aarg)
 Trigonometry/angles - related.
 
template<class T >
angle (T _cos_angle, T _sin_angle)
 returns the angle determined by its cos and the sign of its sin result is positive if the angle is in [0:pi] and negative if it is in [pi:2pi]
 
template<class T >
positive_angle (T _angle)
 
template<class T >
positive_angle (T _cos_angle, T _sin_angle)
 
template<class T >
deg_to_rad (const T &_angle)
 
template<class T >
rad_to_deg (const T &_angle)
 
double log_ (double _value)
 
template<typename Scalar , int DIM, typename OtherScalar >
auto operator* (const OtherScalar &_s, const VectorT< Scalar, DIM > &rhs) -> decltype(rhs.operator*(_s))
 Component wise multiplication from the left.
 
template<typename Scalar , int DIM>
auto operator<< (std::ostream &os, const VectorT< Scalar, DIM > &_vec) -> typename std::enable_if< sizeof(decltype(os<< _vec[0])) >=0
 output a vector by printing its space-separated compontens
 
 for (int i=1;i< DIM;++i)
 
template<typename Scalar , int DIM>
auto operator>> (std::istream &is, VectorT< Scalar, DIM > &_vec) -> typename std::enable_if< sizeof(decltype(is >> _vec[0])) >=0
 read the space-separated components of a vector from a stream
 
template<class Traits >
TriMesh_ArrayKernelT< Traits > & TRIMESH_CAST (PolyMesh_ArrayKernelT< Traits > &_poly_mesh)
 
template<class Traits >
const TriMesh_ArrayKernelT< Traits > & TRIMESH_CAST (const PolyMesh_ArrayKernelT< Traits > &_poly_mesh)
 
template<class Traits >
PolyMesh_ArrayKernelT< Traits > & POLYMESH_CAST (TriMesh_ArrayKernelT< Traits > &_tri_mesh)
 
template<class Traits >
const PolyMesh_ArrayKernelT< Traits > & POLYMESH_CAST (const TriMesh_ArrayKernelT< Traits > &_tri_mesh)
 
size_t hash_value (const BaseHandle &h)
 
std::ostream & operator<< (std::ostream &_os, const BaseHandle &_hnd)
 Write handle _hnd to stream _os.
 
template<typename LHS , typename KERNEL >
LHS mesh_cast (PolyMeshT< KERNEL > &rhs)
 Cast a mesh with different but identical traits into each other. More...
 
template<typename LHS , typename KERNEL >
LHS mesh_cast (PolyMeshT< KERNEL > *rhs)
 
template<typename LHS , typename KERNEL >
const LHS mesh_cast (const PolyMeshT< KERNEL > &rhs)
 
template<typename LHS , typename KERNEL >
const LHS mesh_cast (const PolyMeshT< KERNEL > *rhs)
 
SmartVertexHandle make_smart (VertexHandle _vh, const PolyConnectivity *_mesh)
 Creats a SmartVertexHandle from a VertexHandle and a Mesh.
 
SmartHalfedgeHandle make_smart (HalfedgeHandle _hh, const PolyConnectivity *_mesh)
 Creats a SmartHalfedgeHandle from a HalfedgeHandle and a Mesh.
 
SmartEdgeHandle make_smart (EdgeHandle _eh, const PolyConnectivity *_mesh)
 Creats a SmartEdgeHandle from an EdgeHandle and a Mesh.
 
SmartFaceHandle make_smart (FaceHandle _fh, const PolyConnectivity *_mesh)
 Creats a SmartFaceHandle from a FaceHandle and a Mesh.
 
SmartVertexHandle make_smart (VertexHandle _vh, const PolyConnectivity &_mesh)
 Creats a SmartVertexHandle from a VertexHandle and a Mesh.
 
SmartHalfedgeHandle make_smart (HalfedgeHandle _hh, const PolyConnectivity &_mesh)
 Creats a SmartHalfedgeHandle from a HalfedgeHandle and a Mesh.
 
SmartEdgeHandle make_smart (EdgeHandle _eh, const PolyConnectivity &_mesh)
 Creats a SmartEdgeHandle from an EdgeHandle and a Mesh.
 
SmartFaceHandle make_smart (FaceHandle _fh, const PolyConnectivity &_mesh)
 Creats a SmartFaceHandle from a FaceHandle and a Mesh.
 
template<typename HandleT >
void create_property_from_string (BaseKernel &_mesh, const std::string &_type_name, const std::string &_property_name)
 Create a property with type corresponding to _type_name on _mesh with name _property_name. More...
 
template<typename T >
std::string get_type_name ()
 
osg::Vec3f::ValueType dot (const osg::Vec3f &_v1, const osg::Vec3f &_v2)
 Adapter for osg vector member computing a scalar product.
 
osg::Vec3f::ValueType dot (const osg::Vec3f &_v1, const osg::Pnt3f &_v2)
 
osg::Vec2f::ValueType dot (const osg::Vec2f &_v1, const osg::Vec2f &_v2)
 
osg::Vec3f cross (const osg::Vec3f &_v1, const osg::Vec3f &_v2)
 
template<class _Mesh , class _PropertyHandle >
void smooth_mesh_property (unsigned int _n_iters, _Mesh &_m, _PropertyHandle _pph)
 
template<class _Mesh >
void smooth_mesh (_Mesh &_m, uint _n_iters)
 
Cast vector type to another vector type.
template<typename src_t , typename dst_t , int n>
void vector_cast (const src_t &_src, dst_t &_dst, GenProg::Int2Type< n >)
 Cast vector type to another vector type by copying the vector elements.
 
template<typename src_t , typename dst_t >
void vector_cast (const src_t &, dst_t &, GenProg::Int2Type< 0 >)
 Cast vector type to another vector type by copying the vector elements.
 
template<typename src_t , typename dst_t , int n>
void vector_copy (const src_t &_src, dst_t &_dst, GenProg::Int2Type< n >)
 Cast vector type to another vector type by copying the vector elements.
 
template<typename src_t , typename dst_t >
void vector_copy (const src_t &, dst_t &, GenProg::Int2Type< 0 >)
 Cast vector type to another vector type by copying the vector elements.
 
template<typename dst_t , typename src_t >
vector_caster< dst_t, src_t >::return_type vector_cast (const src_t &_src)
 Cast vector type to another vector type by copying the vector elements.
 

Variables

const float flt_eps__ = (float)1e-05
 
const double dbl_eps__ = 1e-09
 
return os
 
return is
 

Detailed Description

Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels and mesh traits.

Martin, 26.12.2004: 1) replaced resize(size()-1) with pop_back(), since the later is more efficient 2) replaced interface_.set_heap_position(entry(0), -1); with reset_heap_position() 3) added const modifier to various functions TODO: in the moment the heap does not conform to the HeapInterface specification, i.e., copies are passed instead of references.

Get an internal name for a type Important, this is depends on compilers and versions, do NOT use in file formats! This provides property type safety when only limited RTTI is available Solution adapted from OpenVolumeMesh.

This file contains all code required to use Eigen3 vectors as Mesh vectors.

This is especially important for set_heap_position(), where the reference argument is non-const. The specification should be changed to reflect that the heap actually (only?) works when the heap entry is nothing more but a handle. TODO: change the specification of HeapInterface to make less(), greater() and get_heap_position() const. Needs changing DecimaterT. Might break someone's code.

Function Documentation

◆ create_property_from_string()

template<typename HandleT >
void OpenMesh::create_property_from_string ( BaseKernel _mesh,
const std::string &  _type_name,
const std::string &  _property_name 
)

Create a property with type corresponding to _type_name on _mesh with name _property_name.

For user defined types you need to register the type using OM_REGISTER_PROPERTY_TYPE(ClassName, TypeString)

◆ mesh_cast()

template<typename LHS , typename KERNEL >
LHS OpenMesh::mesh_cast ( PolyMeshT< KERNEL > &  rhs)

Cast a mesh with different but identical traits into each other.

Example:

struct TriTraits1 : public OpenMesh::DefaultTraits {
typedef Vec3d Point;
};
struct TriTraits2 : public OpenMesh::DefaultTraits {
typedef Vec3d Point;
};
struct TriTraits3 : public OpenMesh::DefaultTraits {
typedef Vec3f Point;
};
TriMesh_ArrayKernelT<TriTraits1> a;
TriMesh_ArrayKernelT<TriTraits2> &b = mesh_cast<TriMesh_ArrayKernelT<TriTraits2>&>(a); // OK
TriMesh_ArrayKernelT<TriTraits3> &c = mesh_cast<TriMesh_ArrayKernelT<TriTraits3>&>(a); // ERROR
VectorT< double, 3 > Vec3d
3-double vector
Definition: Vector11T.hh:852
VectorT< float, 3 > Vec3f
3-float vector
Definition: Vector11T.hh:850
Base class for all traits.
Definition: Traits.hh:122
See also
MeshCast
Parameters
rhs
Returns

Project OpenMesh, ©  Visual Computing Institute, RWTH Aachen. Documentation generated using doxygen .