【OpenMesh】概念类层次结构

因为这里没有OpenMesh类和大量采用C++模板的类库,我们展示了OpenMesh::TriMesh_ArrayKernelT继承图,作为所有网格类型的代表。

请注意!大多数继承关系已经实现了模板参数化!因此有一些继承关系没有在参考继承图中文档化。

【OpenMesh】概念类层次结构_第1张图片

构建内核

  1. BaseKernel定义了基础的属性操作比如 add/remove/access。
  2. 接下啦,AttribKernelT添加标准属性相关联的所有方法。
  3. 最后,ArrayKernelT提供add/remove/access 网格顶点、边、halfedge和面的方法。基础类作为参数传送,因为这取决于底层存储类型的AttribKernel可能会改变。

构建网格

  1. PolyMeshT继承自内核,并提供所有使用多边形网格的方法。
  2. 最终我们从PolyMeshT派生TriMeshT,使得拥有特定的三角形网格的类。
看下面简单但是有一点难懂的代码:
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;
};
为了生成实际的网格类型帮助模板类TriMesh_ArrayKernel_GeneratorT被使用。它需要在一个模板参数的特征并将其传递到FinalMeshItemsT得到最后的类型的网格项目(MeshItems)。这个MeshItems定义了类型为点,法向,颜色,纹理坐标,顶点,所有的网格项目。MeshItems的帮助下创建AttribKernel的类型,它为项目定义了合适的标准属性。最后使用AttribKernel和MeshItems创建网格内核类型MeshKernel。那是一种获得内核的方式。只要创建的内核是符合内核的概念的(网格内核),我们可以很容易地创建网格。现在我们使用TriMeshT创建最终的网格类型。

你可能感兴趣的:(【OpenMesh】概念类层次结构)