GitHub link
Polygon Mesh Processing Library
pmp Namespace Reference

The pmp-library namespace.

Classes

class  AllocationException
 Exception indicating failure to allocate a new resource. More...
 
class  BoundingBox
 Simple class for representing a bounding box. More...
 
class  Curvature
 Compute per-vertex curvature (min,max,mean,Gaussian). More...
 
class  Decimation
 Surface mesh decimation based on approximation error and fairness criteria. More...
 
class  Edge
 this type represents an edge (internally it is basically an index) More...
 
class  EdgeProperty
 Edge property of type T. More...
 
class  Face
 this type represents a face (internally it is basically an index) More...
 
class  FaceProperty
 Face property of type T. More...
 
class  Fairing
 A class for implicitly fairing a surface mesh. More...
 
class  Features
 Detect and mark feature edges based on boundary or dihedral angle. More...
 
class  Geodesics
 Compute geodesic distance from a set of seed vertices. More...
 
class  Halfedge
 this type represents a halfedge (internally it is basically an index) More...
 
class  HalfedgeProperty
 Halfedge property of type T. More...
 
class  Handle
 Base class for all entity handles types. More...
 
class  Heap
 A class implementing a heap. More...
 
class  HoleFilling
 Close simple holes. More...
 
class  InvalidInputException
 Exception indicating invalid input passed to a function. More...
 
class  IOException
 Exception indicating an error occurred while performing IO. More...
 
struct  IOFlags
 Flags to control reading and writing. More...
 
class  Matrix
 Base class for MxN matrix. More...
 
class  MemoryUsage
 A simple class to retrieve memory usage information. More...
 
class  MeshViewer
 Simple viewer for a SurfaceMesh. More...
 
class  NormalCone
 A class implementing a normal cone. More...
 
class  Normals
 A class for computing surface normals. More...
 
class  Parameterization
 A class for surface parameterization. More...
 
class  Quadric
 This class stores a quadric as a symmetric 4x4 matrix. More...
 
class  Remeshing
 A class for uniform and adaptive surface remeshing. More...
 
class  Shader
 shader class for easy handling of the shader More...
 
class  Shapes
 Class to generate basic shapes. More...
 
class  Smoothing
 A class for Laplacian smoothing. More...
 
class  SolverException
 Exception indicating failure so solve an equation system. More...
 
class  Subdivision
 A class providing surface subdivision algorithms. More...
 
class  SurfaceMesh
 A halfedge data structure for polygonal meshes. More...
 
class  SurfaceMeshGL
 Class for rendering surface meshes using OpenGL. More...
 
class  Timer
 A simple timer class. More...
 
class  TopologyException
 Exception indicating a topological error has occurred. More...
 
class  TrackballViewer
 A simple GLFW viewer with trackball user interface. More...
 
class  TriangleKdTree
 A k-d tree for triangles. More...
 
class  Triangulation
 Triangulate polygons to get a pure triangle mesh. More...
 
class  Vertex
 this type represents a vertex (internally it is basically an index) More...
 
struct  VertexCurvature
 discrete curvature information for a vertex. used for vertex_curvature() More...
 
class  VertexProperty
 Vertex property of type T. More...
 
class  Window
 A window provided by GLFW. More...
 

Typedefs

template<typename Scalar , int M>
using Vector = Matrix< Scalar, M, 1 >
 template specialization for Vector as Nx1 matrix
 
template<typename Scalar >
using Mat4 = Matrix< Scalar, 4, 4 >
 template specialization for 4x4 matrices
 
template<typename Scalar >
using Mat3 = Matrix< Scalar, 3, 3 >
 template specialization for 3x3 matrices
 
template<typename Scalar >
using Mat2 = Matrix< Scalar, 2, 2 >
 template specialization for 2x2 matrices
 
using vec2 = Vector< float, 2 >
 template specialization for a vector of two float values
 
using dvec2 = Vector< double, 2 >
 template specialization for a vector of two double values
 
using bvec2 = Vector< bool, 2 >
 template specialization for a vector of two bool values
 
using ivec2 = Vector< int, 2 >
 template specialization for a vector of two int values
 
using uvec2 = Vector< unsigned int, 2 >
 template specialization for a vector of two unsigned int values
 
using vec3 = Vector< float, 3 >
 template specialization for a vector of three float values
 
using dvec3 = Vector< double, 3 >
 template specialization for a vector of three double values
 
using bvec3 = Vector< bool, 3 >
 template specialization for a vector of three bool values
 
using ivec3 = Vector< int, 3 >
 template specialization for a vector of three int values
 
using uvec3 = Vector< unsigned int, 3 >
 template specialization for a vector of three unsigned int values
 
using vec4 = Vector< float, 4 >
 template specialization for a vector of four float values
 
using dvec4 = Vector< double, 4 >
 template specialization for a vector of four double values
 
using bvec4 = Vector< bool, 4 >
 template specialization for a vector of four bool values
 
using ivec4 = Vector< int, 4 >
 template specialization for a vector of four int values
 
using uvec4 = Vector< unsigned int, 4 >
 template specialization for a vector of four unsigned int values
 
using mat2 = Mat2< float >
 template specialization for a 2x2 matrix of float values
 
using dmat2 = Mat2< double >
 template specialization for a 2x2 matrix of double values
 
using mat3 = Mat3< float >
 template specialization for a 3x3 matrix of float values
 
using dmat3 = Mat3< double >
 template specialization for a 3x3 matrix of double values
 
using mat4 = Mat4< float >
 template specialization for a 4x4 matrix of float values
 
using dmat4 = Mat4< double >
 template specialization for a 4x4 matrix of double values
 
using Scalar = float
 Scalar type.
 
using Point = Vector< Scalar, 3 >
 Point type.
 
using Normal = Vector< Scalar, 3 >
 Normal type.
 
using Color = Vector< Scalar, 3 >
 Color type. More...
 
using TexCoord = Vector< Scalar, 2 >
 Texture coordinate type.
 

Functions

Scalar triangle_area (const Point &p0, const Point &p1, const Point &p2)
 compute area of a triangle given by three points
 
Scalar triangle_area (const SurfaceMesh &mesh, Face f)
 compute area of triangle f
 
Scalar surface_area (const SurfaceMesh &mesh)
 Compute the surface area of mesh. More...
 
Scalar volume (const SurfaceMesh &mesh)
 Compute the volume of a mesh. More...
 
Point centroid (const SurfaceMesh &mesh, Face f)
 barycenter/centroid of a face
 
Point centroid (const SurfaceMesh &mesh)
 barycenter/centroid of mesh, computed as area-weighted mean of vertices. More...
 
void dual (SurfaceMesh &mesh)
 Compute dual of a mesh. More...
 
double cotan_weight (const SurfaceMesh &mesh, Edge e)
 compute the cotangent weight for edge e
 
double voronoi_area (const SurfaceMesh &mesh, Vertex v)
 compute (mixed) Voronoi area of vertex v
 
double voronoi_area_barycentric (const SurfaceMesh &mesh, Vertex v)
 compute barycentric Voronoi area of vertex v
 
Point laplace (const SurfaceMesh &mesh, Vertex v)
 compute Laplace vector for vertex v (normalized by Voronoi area)
 
Scalar angle_sum (const SurfaceMesh &mesh, Vertex v)
 compute the sum of angles around vertex v (used for Gaussian curvature)
 
VertexCurvature vertex_curvature (const SurfaceMesh &mesh, Vertex v)
 compute min, max, mean, and Gaussian curvature for vertex v. More...
 
Scalar clamp_cot (const Scalar v)
 clamp cotangent values as if angles are in [3, 177]
 
Scalar clamp_cos (const Scalar v)
 clamp cosine values as if angles are in [3, 177]
 
Scalar angle (const Point &v0, const Point &v1)
 compute angle between two (un-normalized) vectors
 
Scalar sin (const Point &v0, const Point &v1)
 compute sine of angle between two (un-normalized) vectors
 
Scalar cos (const Point &v0, const Point &v1)
 compute cosine of angle between two (un-normalized) vectors
 
Scalar cotan (const Point &v0, const Point &v1)
 compute cotangent of angle between two (un-normalized) vectors
 
Scalar dist_point_line_segment (const Point &p, const Point &v0, const Point &v1, Point &nearest_point)
 Compute the distance of a point p to a line segment given by points (v0,v1).
 
Scalar dist_point_triangle (const Point &p, const Point &v0, const Point &v1, const Point &v2, Point &nearest_point)
 Compute the distance of a point p to the triangle given by points (v0, v1, v2).
 
void read (SurfaceMesh &mesh, const std::filesystem::path &file)
 Read into mesh from file. More...
 
void write (const SurfaceMesh &mesh, const std::filesystem::path &file, const IOFlags &flags=IOFlags())
 Write mesh to file controlled by flags. More...
 
template<typename Scalar , int M, int N>
std::ostream & operator<< (std::ostream &os, const Matrix< Scalar, M, N > &m)
 output a matrix by printing its space-separated compontens
 
template<typename Scalar , int M, int N, int K>
Matrix< Scalar, M, N > operator* (const Matrix< Scalar, M, K > &m1, const Matrix< Scalar, K, N > &m2)
 matrix-matrix multiplication
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > cmult (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 component-wise multiplication
 
template<typename Scalar , int M, int N>
Matrix< Scalar, N, M > transpose (const Matrix< Scalar, M, N > &m)
 transpose MxN matrix to NxM matrix
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > operator+ (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 matrix addition: m1 + m2
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > operator- (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 matrix subtraction: m1 - m2
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > operator- (const Matrix< Scalar, M, N > &m)
 matrix negation: -m
 
template<typename Scalar , typename Scalar2 , int M, int N>
Matrix< Scalar, M, N > operator* (const Scalar2 s, const Matrix< Scalar, M, N > &m)
 scalar multiplication of matrix: s*m
 
template<typename Scalar , typename Scalar2 , int M, int N>
Matrix< Scalar, M, N > operator* (const Matrix< Scalar, M, N > &m, const Scalar2 s)
 scalar multiplication of matrix: m*s
 
template<typename Scalar , typename Scalar2 , int M, int N>
Matrix< Scalar, M, N > operator/ (const Matrix< Scalar, M, N > &m, const Scalar2 s)
 divide matrix by scalar: m/s
 
template<typename Scalar , int M, int N>
Scalar norm (const Matrix< Scalar, M, N > &m)
 compute the Frobenius norm of a matrix (or Euclidean norm of a vector)
 
template<typename Scalar , int M, int N>
Scalar sqrnorm (const Matrix< Scalar, M, N > &m)
 compute the squared Frobenius norm of a matrix (or squared Euclidean norm of a vector)
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > normalize (const Matrix< Scalar, M, N > &m)
 return a normalized copy of a matrix or a vector
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > min (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 return component-wise minimum
 
template<typename Scalar , int M, int N>
Matrix< Scalar, M, N > max (const Matrix< Scalar, M, N > &m1, const Matrix< Scalar, M, N > &m2)
 return component-wise maximum
 
template<typename Scalar >
Mat4< Scalarviewport_matrix (Scalar l, Scalar b, Scalar w, Scalar h)
 OpenGL viewport matrix with parameters left, bottom, width, height.
 
template<typename Scalar >
Mat4< Scalarinverse_viewport_matrix (Scalar l, Scalar b, Scalar w, Scalar h)
 inverse of OpenGL viewport matrix with parameters left, bottom, width, height More...
 
template<typename Scalar >
Mat4< Scalarfrustum_matrix (Scalar l, Scalar r, Scalar b, Scalar t, Scalar n, Scalar f)
 OpenGL frustum matrix with parameters left, right, bottom, top, near, far.
 
template<typename Scalar >
Mat4< Scalarinverse_frustum_matrix (Scalar l, Scalar r, Scalar b, Scalar t, Scalar n, Scalar f)
 inverse of OpenGL frustum matrix with parameters left, right, bottom, top, near, far More...
 
template<typename Scalar >
Mat4< Scalarperspective_matrix (Scalar fovy, Scalar aspect, Scalar zNear, Scalar zFar)
 OpenGL perspective matrix with parameters field of view in y-direction, aspect ratio, and distance of near and far planes.
 
template<typename Scalar >
Mat4< Scalarinverse_perspective_matrix (Scalar fovy, Scalar aspect, Scalar zNear, Scalar zFar)
 inverse of perspective matrix More...
 
template<typename Scalar >
Mat4< Scalarortho_matrix (Scalar left, Scalar right, Scalar bottom, Scalar top, Scalar zNear=-1, Scalar zFar=1)
 OpenGL orthogonal projection matrix with parameters left, right, bottom, top, near, far.
 
template<typename Scalar >
Mat4< Scalarlook_at_matrix (const Vector< Scalar, 3 > &eye, const Vector< Scalar, 3 > &center, const Vector< Scalar, 3 > &up)
 OpenGL look-at camera matrix with parameters eye position, scene center, up-direction.
 
template<typename Scalar >
Mat4< Scalartranslation_matrix (const Vector< Scalar, 3 > &t)
 OpenGL matrix for translation by vector t.
 
template<typename Scalar >
Mat4< Scalarscaling_matrix (const Scalar s)
 OpenGL matrix for scaling x/y/z by s.
 
template<typename Scalar >
Mat4< Scalarscaling_matrix (const Vector< Scalar, 3 > &s)
 OpenGL matrix for scaling x/y/z by the components of s.
 
template<typename Scalar >
Mat4< Scalarrotation_matrix_x (Scalar angle)
 OpenGL matrix for rotation around x-axis by given angle (in degrees)
 
template<typename Scalar >
Mat4< Scalarrotation_matrix_y (Scalar angle)
 OpenGL matrix for rotation around y-axis by given angle (in degrees)
 
template<typename Scalar >
Mat4< Scalarrotation_matrix_z (Scalar angle)
 OpenGL matrix for rotation around z-axis by given angle (in degrees)
 
template<typename Scalar >
Mat4< Scalarrotation_matrix (const Vector< Scalar, 3 > &axis, Scalar angle)
 OpenGL matrix for rotation around given axis by given angle (in degrees)
 
template<typename Scalar >
Mat4< Scalarrotation_matrix (const Vector< Scalar, 4 > &quat)
 OpenGL matrix for rotation specified by unit quaternion.
 
template<typename Scalar >
Mat3< Scalarlinear_part (const Mat4< Scalar > &m)
 return upper 3x3 matrix from given 4x4 matrix, corresponding to the linear part of an affine transformation
 
template<typename Scalar >
Vector< Scalar, 3 > projective_transform (const Mat4< Scalar > &m, const Vector< Scalar, 3 > &v)
 projective transformation of 3D vector v by a 4x4 matrix m: add 1 as 4th component of v, multiply m*v, divide by 4th component
 
template<typename Scalar >
Vector< Scalar, 3 > affine_transform (const Mat4< Scalar > &m, const Vector< Scalar, 3 > &v)
 affine transformation of 3D vector v by a 4x4 matrix m: add 1 as 4th component of v, multiply m*v, do NOT divide by 4th component
 
template<typename Scalar >
Vector< Scalar, 3 > linear_transform (const Mat4< Scalar > &m, const Vector< Scalar, 3 > &v)
 linear transformation of 3D vector v by a 4x4 matrix m: transform vector by upper-left 3x3 submatrix of m
 
template<typename Scalar >
Mat4< Scalarinverse (const Mat4< Scalar > &m)
 return the inverse of a 4x4 matrix
 
template<typename Scalar >
Scalar determinant (const Mat3< Scalar > &m)
 return determinant of 3x3 matrix
 
template<typename Scalar >
Mat3< Scalarinverse (const Mat3< Scalar > &m)
 return the inverse of a 3x3 matrix
 
template<typename Scalar >
bool symmetric_eigendecomposition (const Mat3< Scalar > &m, Scalar &eval1, Scalar &eval2, Scalar &eval3, Vector< Scalar, 3 > &evec1, Vector< Scalar, 3 > &evec2, Vector< Scalar, 3 > &evec3)
 compute eigenvector/eigenvalue decomposition of a 3x3 matrix
 
template<typename Scalar , int N>
std::istream & operator>> (std::istream &is, Vector< Scalar, N > &vec)
 read the space-separated components of a vector from a stream
 
template<typename Scalar , int N>
std::ostream & operator<< (std::ostream &os, const Vector< Scalar, N > &vec)
 output a vector by printing its space-separated compontens
 
template<typename Scalar , int N>
Scalar dot (const Vector< Scalar, N > &v0, const Vector< Scalar, N > &v1)
 compute the dot product of two vectors
 
template<typename Scalar , int N>
Scalar distance (const Vector< Scalar, N > &v0, const Vector< Scalar, N > &v1)
 compute the Euclidean distance between two points
 
template<typename Scalar >
Vector< Scalar, 2 > perp (const Vector< Scalar, 2 > &v)
 compute perpendicular vector (rotate vector counter-clockwise by 90 degrees)
 
template<typename Scalar >
Vector< Scalar, 3 > cross (const Vector< Scalar, 3 > &v0, const Vector< Scalar, 3 > &v1)
 compute the cross product of two vectors (only valid for 3D vectors)
 
std::ostream & operator<< (std::ostream &os, Vertex v)
 output a Vertex to a stream
 
std::ostream & operator<< (std::ostream &os, Halfedge h)
 output a Halfedge to a stream
 
std::ostream & operator<< (std::ostream &os, Edge e)
 output an Edge to a stream
 
std::ostream & operator<< (std::ostream &os, Face f)
 output a Face to a stream
 
std::ostream & operator<< (std::ostream &os, const Timer &timer)
 output a timer to a stream
 
BoundingBox bounds (const SurfaceMesh &mesh)
 Compute the bounding box of mesh .
 
void flip_faces (SurfaceMesh &mesh)
 Flip the orientation of all faces in mesh .