From 77097029db4599f5b4f2f9a8c788f6e7d717b4cb Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Mon, 25 Oct 2021 10:41:58 +0200 Subject: [PATCH] add export eigen edge matrix from CMesh --- .../utilities/eigen_mesh_conversions.cpp | 26 +++++++++++++++++++ src/common/utilities/eigen_mesh_conversions.h | 1 + 2 files changed, 27 insertions(+) diff --git a/src/common/utilities/eigen_mesh_conversions.cpp b/src/common/utilities/eigen_mesh_conversions.cpp index d20f934ed..3b894d8fc 100644 --- a/src/common/utilities/eigen_mesh_conversions.cpp +++ b/src/common/utilities/eigen_mesh_conversions.cpp @@ -555,6 +555,32 @@ Eigen::MatrixX3i meshlab::faceMatrix(const CMeshO& mesh) return faces; } +/** + * @brief Get a #E*2 Eigen matrix of integers containing the vertex indices of + * the edges of a CMeshO. + * The edges in the mesh must be compact (no deleted edges). + * If the mesh is not compact, a vcg::MissingCompactnessException will be thrown. + * + * @param mesh: input mesh + * @return #E*2 matrix of integers (vertex indices composing the edges) + */ +Eigen::MatrixX2i meshlab::edgeMatrix(const CMeshO& mesh) +{ + vcg::tri::RequireEdgeCompactness(mesh); + + // create eigen matrix of edges + Eigen::MatrixXi edges(mesh.EN(), 2); + + // copy faces + for (int i = 0; i < mesh.EN(); i++) { + for (int j = 0; j < 2; j++) { + edges(i, j) = (int) vcg::tri::Index(mesh, mesh.edge[i].V(j)); + } + } + + return edges; +} + /** * @brief Get a #F list of Eigen vectors of integers containing the vertex indices of * the polygonal mesh contained in the CMeshO mesh. diff --git a/src/common/utilities/eigen_mesh_conversions.h b/src/common/utilities/eigen_mesh_conversions.h index 08f4ee89c..7bf55913e 100644 --- a/src/common/utilities/eigen_mesh_conversions.h +++ b/src/common/utilities/eigen_mesh_conversions.h @@ -82,6 +82,7 @@ void addFaceVectorAttribute( // From CMeshO to Eigen EigenMatrixX3m vertexMatrix(const CMeshO& mesh); Eigen::MatrixX3i faceMatrix(const CMeshO& mesh); +Eigen::MatrixX2i edgeMatrix(const CMeshO& mesh); std::list polygonalFaceList(const CMeshO& mesh); EigenMatrixX3m vertexNormalMatrix(const CMeshO& mesh); EigenMatrixX3m faceNormalMatrix(const CMeshO& mesh);