GitHub link
PMP
The Polygon Mesh Processing Library
pmp Namespace Reference

The pmp-library namespace.

Classes

struct  VertexCurvature
 discrete curvature information for a vertex. used for vertex_curvature() More...
 
class  Heap
 A class implementing a heap. More...
 
class  NormalCone
 A class implementing a normal cone. More...
 
class  Quadric
 This class stores a quadric as a symmetric 4x4 matrix. More...
 
class  SurfaceCurvature
 Compute per-vertex curvature (min,max,mean,Gaussian). More...
 
class  SurfaceFactory
 Factory class to generate different types of basic shapes. More...
 
class  SurfaceFairing
 A class for implicitly fairing a surface mesh. More...
 
class  SurfaceFeatures
 Detect and mark feature edges based on boundary or dihedral angle. More...
 
class  SurfaceGeodesic
 Compute geodesic distance from a set of seed vertices. More...
 
class  SurfaceHoleFilling
 Close simple holes. More...
 
class  SurfaceNormals
 A class for computing surface normals. More...
 
class  SurfaceParameterization
 A class for surface parameterization. More...
 
class  SurfaceRemeshing
 A class for uniform and adaptive surface remeshing. More...
 
class  SurfaceSimplification
 Surface mesh simplification based on approximation error and fairness criteria. More...
 
class  SurfaceSmoothing
 A class for Laplacian smoothing. More...
 
class  SurfaceSubdivision
 A class providing surface subdivision algorithms. More...
 
class  SurfaceTriangulation
 Triangulate polygons to get a pure triangle mesh. More...
 
class  TriangleKdTree
 A k-d tree for triangles. More...
 
class  BoundingBox
 Simple class for representing a bounding box. More...
 
class  Matrix
 Base class for MxN matrix. More...
 
class  MemoryUsage
 A simple class to retrieve memory usage information. More...
 
class  Handle
 Base class for all entity handles types. More...
 
class  Vertex
 this type represents a vertex (internally it is basically an index) More...
 
class  Halfedge
 this type represents a halfedge (internally it is basically an index) More...
 
class  Edge
 this type represents an edge (internally it is basically an index) More...
 
class  Face
 this type represents a face (internally it is basically an index) More...
 
class  VertexProperty
 Vertex property of type T. More...
 
class  HalfedgeProperty
 Halfedge property of type T. More...
 
class  EdgeProperty
 Edge property of type T. More...
 
class  FaceProperty
 Face property of type T. More...
 
class  ObjectProperty
 Object property of type T. More...
 
class  SurfaceMesh
 A halfedge data structure for polygonal meshes. More...
 
class  Timer
 A simple timer class. More...
 
struct  IOFlags
 Common IO flags for reading and writing. More...
 
class  InvalidInputException
 Exception indicating invalid input passed to a function. More...
 
class  SolverException
 Exception indicating failure so solve an equation system. More...
 
class  AllocationException
 Exception indicating failure to allocate a new resource. More...
 
class  TopologyException
 Exception indicating a topological error has occurred. More...
 
class  IOException
 Exception indicating an error occurred while performing IO. More...
 
class  Version
 API version information. More...
 
class  MeshViewer
 Simple viewer for a SurfaceMesh. More...
 
class  Shader
 shader class for easy handling of the shader More...
 
class  SurfaceMeshGL
 Class for rendering surface meshes using OpenGL. More...
 
class  TrackballViewer
 A simple GLFW viewer with trackball user interface. 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
 
typedef Vector< float, 2 > vec2
 template specialization for a vector of two float values
 
typedef Vector< double, 2 > dvec2
 template specialization for a vector of two double values
 
typedef Vector< bool, 2 > bvec2
 template specialization for a vector of two bool values
 
typedef Vector< int, 2 > ivec2
 template specialization for a vector of two int values
 
typedef Vector< unsigned int, 2 > uvec2
 template specialization for a vector of two unsigned int values
 
typedef Vector< float, 3 > vec3
 template specialization for a vector of three float values
 
typedef Vector< double, 3 > dvec3
 template specialization for a vector of three double values
 
typedef Vector< bool, 3 > bvec3
 template specialization for a vector of three bool values
 
typedef Vector< int, 3 > ivec3
 template specialization for a vector of three int values
 
typedef Vector< unsigned int, 3 > uvec3
 template specialization for a vector of three unsigned int values
 
typedef Vector< float, 4 > vec4
 template specialization for a vector of four float values
 
typedef Vector< double, 4 > dvec4
 template specialization for a vector of four double values
 
typedef Vector< bool, 4 > bvec4
 template specialization for a vector of four bool values
 
typedef Vector< int, 4 > ivec4
 template specialization for a vector of four int values
 
typedef Vector< unsigned int, 4 > uvec4
 template specialization for a vector of four unsigned int values
 
typedef Vector< float, 8 > vec8
 template specialization for a vector of four float values
 
typedef Vector< double, 8 > dvec8
 template specialization for a vector of four double values
 
typedef Vector< bool, 8 > bvec8
 template specialization for a vector of four bool values
 
typedef Vector< int, 8 > ivec8
 template specialization for a vector of four int values
 
typedef Vector< unsigned int, 8 > uvec8
 template specialization for a vector of four unsigned int values
 
typedef Mat2< float > mat2
 template specialization for a 2x2 matrix of float values
 
typedef Mat2< double > dmat2
 template specialization for a 2x2 matrix of double values
 
typedef Mat3< float > mat3
 template specialization for a 3x3 matrix of float values
 
typedef Mat3< double > dmat3
 template specialization for a 3x3 matrix of double values
 
typedef Mat4< float > mat4
 template specialization for a 4x4 matrix of float values
 
typedef Mat4< double > dmat4
 template specialization for a 4x4 matrix of double values
 
typedef float Scalar
 Scalar type.
 
typedef Vector< Scalar, 3 > Point
 Point type.
 
typedef Vector< Scalar, 3 > Normal
 Normal type.
 
typedef Vector< Scalar, 3 > Color
 Color type.
 
typedef Vector< Scalar, 2 > TexCoord
 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)
 surface area of the mesh (assumes triangular faces)
 
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...
 
double clamp_cot (const double v)
 clamp cotangent values as if angles are in [3, 177]
 
double clamp_cos (const double 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).
 
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 >
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