OpenMesh
Conceptual Class Hierarchy

Since there is no such thing as a OpenMesh class and the library makes heavy use of C++ template, we show the inheritance graph of OpenMesh::TriMesh_ArrayKernelT as proxy for all possible mesh types.

Please note! Most of the inheritence relationships are realized by template parameterization! Therefore some of the inheritance links are not documented in a inheritance graph in the reference. This picture shows the overall concept.

class-hierarchy2.png

Building the kernel

  1. The BaseKernel defines the basic operations on properties like add/remove/access.
  2. Next the AttribKernelT adds the standard properties all associated methods.
  3. Finally the ArrayKernelT provides the methods to add/remove/access the mesh items vertices, (half-)edges, and faces. The base class is passed as a template parameter, since depending on the underlying storage type the AttribKernel might change.

Building the mesh

  1. The PolyMeshT inherits from the kernel and provide all necessary methods to work with polygonal meshes.
  2. Finally we derive TriMeshT from PolyMeshT to have an specialization for triangle meshes.

Looks simple, but it isn't - it's a bit more complicated:

template <class Traits>
struct TriMesh_ArrayKernel_GeneratorT
{
typedef FinalMeshItemsT<ArrayItems, Traits, true> MeshItems;
typedef AttribKernelT<MeshItems> AttribKernel;
typedef ArrayKernelT<AttribKernel, MeshItems> MeshKernel;
typedef TriMeshT<MeshKernel> Mesh;
};

To generate the actual mesh type the helper template class TriMesh_ArrayKernel_GeneratorT is used. It takes the traits in a template argument and passes it to FinalMeshItemsT to get the final type of the mesh items (MeshItems). The MeshItems defines the types for Point, Normal, Color, TexCoord, Vertex, and for all mesh items. With the help of MeshItems create the type of the AttribKernel, which defines the apropriate standard properties for the items. Finally use AttribKernel and MeshItems to create the mesh kernel type MeshKernel. It's quite a way to get a kernel . As long as the created kernel follows the kernel concept (Mesh Kernels), we can easily create now the mesh. Here we use now TriMeshT to create the final mesh type Mesh.


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