/* * This file is part of * Surface Maps via Adaptive Triangulations * (https://github.com/patr-schm/surface-maps-via-adaptive-triangulations) * and is released under the MIT license. * * Authors: Patrick Schmidt, Janis Born */ #pragma once #include #include #include #include #include #include #include namespace SurfaceMaps { // Scalar constants constexpr double NAN_DOUBLE = std::numeric_limits::quiet_NaN(); constexpr double INF_DOUBLE = std::numeric_limits::infinity(); constexpr int DEFAULT_MAX_ITERS = -1; // Complex numbers using Complex = std::complex; // Fixed-size vectors template using Vec = Eigen::Matrix; template using Vec2 = Vec<2, T>; template using Vec3 = Vec<3, T>; template using Vec4 = Vec<4, T>; template using Vec6 = Vec<6, T>; template using Vec9 = Vec<9, T>; using Vec2d = Vec2; using Vec2i = Vec2; using Vec3d = Vec3; using Vec3i = Vec3; using Vec4f = Vec4; using Vec4d = Vec4; using Vec6d = Vec6; using Vec9d = Vec9; // Fixed-size matrices template using Mat = Eigen::Matrix; template using Mat2 = Mat<2, 2, T>; template using Mat3 = Mat<3, 3, T>; template using Mat6 = Mat<6, 6, T>; template using Mat9 = Mat<9, 9, T>; using Mat2d = Mat2; using Mat3d = Mat3; using Mat6d = Mat6; using Mat9d = Mat9; // Dynamic-size vectors template using VecX = Eigen::Matrix; using VecXd = Eigen::VectorXd; using VecXi = Eigen::VectorXi; // Dynamic-size matrices template using MatX = Eigen::Matrix; using MatXd = MatX; using MatXi = MatX; // Sparse matrices using Triplet = Eigen::Triplet; using SparseMatrix = Eigen::SparseMatrix; // Diagonal matrices using DiagonalMatrix = Eigen::DiagonalMatrix; // Custom vectors using Color = Vec4f; // OpenMesh traits struct ISMOpenMeshTraits : public OpenMesh::DefaultTraits { typedef Vec3d Point; typedef Vec3d Normal; typedef double TexCoord1D; typedef Vec2d TexCoord2D; typedef Vec3d TexCoord3D; typedef Color Color; }; // Mesh types using TriMesh = OpenMesh::TriMesh_ArrayKernelT; using PolyMesh = OpenMesh::PolyMesh_ArrayKernelT; // Handle types using VH = OpenMesh::VertexHandle; using EH = OpenMesh::EdgeHandle; using FH = OpenMesh::FaceHandle; using HEH = OpenMesh::HalfedgeHandle; using SVH = OpenMesh::SmartVertexHandle; using SHEH = OpenMesh::SmartHalfedgeHandle; using SEH = OpenMesh::SmartEdgeHandle; using SFH = OpenMesh::SmartFaceHandle; // Custom properties using Parametrization = ExternalProperty; using Metric = ExternalProperty; using TexCoords = ExternalProperty; struct BarycentricPoint; using VertexToPointMap = ExternalProperty; }