// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2015 Olga Diamanti // // This Source Code Form is subject to the terms of the Mozilla Public License // v. 2.0. If a copy of the MPL was not distributed with this file, You can // obtain one at http://mozilla.org/MPL/2.0/. #ifndef IGL_CUT_MESH #define IGL_CUT_MESH #include "igl_inline.h" #include #include namespace igl { // Given a mesh and a list of edges that are to be cut, the function generates a // new disk-topology mesh that has the cuts at its boundary. // Inputs: // V #V by 3 list of the vertex positions // F #F by 3 list of the faces (must be triangles) // VF #V list of lists of incident faces (adjacency list), e.g. // as returned by igl::vertex_triangle_adjacency // VFi #V list of lists of index of incidence within incident faces listed // in VF, e.g. as returned by igl::vertex_triangle_adjacency // TT #F by 3 triangle to triangle adjacent matrix (e.g. computed // via igl:triangle_triangle_adjacency) // TTi #F by 3 adjacent matrix, the element i,j is the id of edge of the // triangle TT(i,j) that is adjacent with triangle i (e.g. computed // via igl:triangle_triangle_adjacency) // V_border #V by 1 list of booleans, indicating if the corresponging vertex is // at the mesh boundary, e.g. as returned by igl::is_border_vertex // cuts #F by 3 list of boolean flags, indicating the edges that need to be cut // Outputs: // (has 1 at the face edges that are to be cut, 0 otherwise) // Vcut #V by 3 list of the vertex positions of the cut mesh. This matrix will be // similar to the original vertices except some rows will be duplicated. // Fcut #F by 3 list of the faces of the cut mesh(must be triangles). This matrix // will be similar to the original face matrix except some indices will be // redirected to point to the newly duplicated vertices. // template IGL_INLINE void cut_mesh(const Eigen::PlainObjectBase &V, const Eigen::PlainObjectBase &F, const std::vector >& VF, const std::vector >& VFi, const Eigen::PlainObjectBase& TT, const Eigen::PlainObjectBase& TTi, const std::vector &V_border, const Eigen::PlainObjectBase &cuts, Eigen::PlainObjectBase &Vcut, Eigen::PlainObjectBase &Fcut); //Wrapper of the above with only vertices and faces as mesh input template IGL_INLINE void cut_mesh( const Eigen::PlainObjectBase &V, const Eigen::PlainObjectBase &F, const Eigen::PlainObjectBase &cuts, Eigen::PlainObjectBase &Vcut, Eigen::PlainObjectBase &Fcut); }; #ifndef IGL_STATIC_LIBRARY #include "cut_mesh.cpp" #endif #endif /* defined(IGL_CUT_MESH) */