// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2013 Alec Jacobson // // 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/. // // remove_unreferenced.h // Preview3D // // Created by Daniele Panozzo on 17/11/11. #ifndef IGL_REMOVE_UNREFERENCED_H #define IGL_REMOVE_UNREFERENCED_H #include "igl_inline.h" #include namespace igl { /// Remove unreferenced vertices from V, updating F accordingly /// /// @param[in] V #V by dim list of mesh vertex positions /// @param[in] F #F by ss list of simplices (Values of -1 are quitely skipped) /// @param[out] NV #NV by dim list of mesh vertex positions /// @param[out] NF #NF by ss list of simplices /// @param[out] I #V by 1 list of indices such that: NF = IM(F) and NT = IM(T) /// and V(find(IM<=size(NV,1)),:) = NV /// @param[out] J #NV by 1 list, such that NV = V(J,:) template < typename DerivedV, typename DerivedF, typename DerivedNV, typename DerivedNF, typename DerivedI, typename DerivedJ> IGL_INLINE void remove_unreferenced( const Eigen::MatrixBase &V, const Eigen::MatrixBase &F, Eigen::PlainObjectBase &NV, Eigen::PlainObjectBase &NF, Eigen::PlainObjectBase &I, Eigen::PlainObjectBase &J); /// \overload template < typename DerivedV, typename DerivedF, typename DerivedNV, typename DerivedNF, typename DerivedI> IGL_INLINE void remove_unreferenced( const Eigen::MatrixBase &V, const Eigen::MatrixBase &F, Eigen::PlainObjectBase &NV, Eigen::PlainObjectBase &NF, Eigen::PlainObjectBase &I); /// \overload /// @param[in] n number of vertices (possibly greater than F.maxCoeff()+1) template < typename DerivedF, typename DerivedI, typename DerivedJ> IGL_INLINE void remove_unreferenced( const size_t n, const Eigen::MatrixBase &F, Eigen::PlainObjectBase &I, Eigen::PlainObjectBase &J); } #ifndef IGL_STATIC_LIBRARY # include "remove_unreferenced.cpp" #endif #endif