Mathematics: Meshes

An abstract base class to support keys used in std::map where the key is an n-tuple (V[0],...,V[n-1]) of integers that index a collection of vertices. The feature key is ordered or unordered, where these terms refer to topological ordering of the components of the n-tuple. The paradigm is triangle face ordering, which can be clockwise or counterclockwise. An ordered feature key sets V[0] to the minimum of the n-tuple components and the n-tuple is a permutation of the components having an even number of transpositions. This preserves the topological ordering for the vertices. An unordered feature key has V[0] < ... < V[n-1], which might not preserve the topological ordering. Be aware that the term unordered is about topological order, not the sort ordering of the components as integers. perhaps
A feature key for n = 2, which is used for std::map whose keys involve edges (2-tuples of integers).
A feature key for n = 3, which is used for std::map whose keys involve triangles (3-tuples of integers).
A feature key for n = 4, which is used for std::map whose keys involve tetrahedra (4-tuples of integers).
A graph data structure involving vertices and edges. The mesh is a 1-dimensional manifold, where each vertex is shared by at most two edges. This is fancy way of representing polylines, open or closed. Its sole purpose is to motivate how one represents manifold meshes for 2-dimensional surfaces (triangle meshes) or 3-dimensional solids (tetrahedron meshes).
A graph data structure involving edges and triangles. The mesh is a 2-dimensional manifold, where each edge is shared by at most two triangles. This is used extensively in the source code for algorithms in computational geometry.
A graph data structure involving edges and triangles. The mesh is 2-dimensional but not necessarily manifold; each edge can be shared by more than two triangles
A graph data structure involving vertices, edges, and triangles. The mesh is a 2-dimensional manifold, where each edge is shared by at most two triangles.
Graph data structures involving vertices, edges, and triangles. The mesh is a 2-dimensional manifold, where each edge is shared by at most two triangles. The meshes are static in that you must provide the triangles as a batch via the constructor. These classes outperform VETManifoldMesh and ETManifoldMesh, which are designed for dynamic construction of meshes. The static-mesh classes support multithreading, which is useful when the numbers of vertices and triangles is large.
A graph data structure involving vertices, edges, and triangles. The mesh is 2-dimensional but not necessarily manifold; each edge can be shared by more than two triangles.
A graph data structure involving triangles and tetrahedra. The mesh is a 3-dimensional manifold, where each triangle is shared by at most two tetrahedra. The 'T' stands for 'triangle' and the 'S' stands for 'simplex'; in 3D, a tetrahedron is a simplex. This code can be extended to n-dimensional manifolds involving (n-1)-dimensional simplices and n-dimensional simplices. Each (n-1)-dimensional simplex is shared by at most two n-dimensional simplices.
A graph data structure involving vertices, triangles and tetrahedra. The mesh is a 3-dimensional manifold, where each triangle is shared by at most two tetrahedra. The 'T' stands for 'triangle' and the 'S' stands for'simplex'; in 3D, a tetrahedron is a simplex. This code can be extended to n-dimensional manifolds involving (n-1)-dimensional simplices and n-dimensional simplices. Each (n-1)-dimensional simplex is shared by at most two n-dimensional simplices.
Graph data structures involving vertices, triangles, and tetrahedra. The mesh is a 3-dimensional manifold, where each triangle is shared by at most two tetrahedra. The meshes are static in that you must provide the tetrahedra as a batch via the constructor. These classes outperform VTSManifoldMesh and TSManifoldMesh, which are designed for dynamic construction of meshes. The static-mesh classes support multithreading, which is useful when the numbers of vertices and tetrahedra is large.
Small helper classes to generate a set of unique vertices from a triangle soup or from a collection of indexed triangles. The UniqueVerticesTriangles code is deprecated. The UniqueVerticesSimplices code handles vertices-edges, vertices-triangles and vertices-simplices in general dimensions.
Manage a planar mesh and allow fast and exact point-in-triangle queries and computation of barycentric coordinates. This supports resampling of meshes with automatically generated texture coordinates.
Test whether an undirected graph is planar using a sort-and-sweep algorithm.
Discrete differential geometry to estimate principal curvatures and directions at vertices of a triangle mesh.
An abstract class that supports smoothing a mesh based on normal and tangential forces.
Support for standard meshes. The mesh types are vertex-edge, edge-triangle, vertex-edge-triangle and triangle-tetrahedron. Code is provided for generating standard meshes: rectangles, rectangle patches, surfaces of revolution, and tubes. These are independent of the graphics system.