// 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/. #include "is_edge_manifold.h" #include "oriented_facets.h" #include "unique_simplices.h" #include "unique_edge_map.h" #include #include template < typename DerivedF, typename DerivedEMAP, typename DerivedBF, typename DerivedBE> IGL_INLINE bool igl::is_edge_manifold( const Eigen::MatrixBase& F, const typename DerivedF::Index ne, const Eigen::MatrixBase& EMAP, Eigen::PlainObjectBase& BF, Eigen::PlainObjectBase& BE) { typedef typename DerivedF::Index Index; std::vector count(ne,0); for(Index e = 0;e IGL_INLINE bool igl::is_edge_manifold( const Eigen::MatrixBase& F, Eigen::PlainObjectBase& BF, Eigen::PlainObjectBase& E, Eigen::PlainObjectBase& EMAP, Eigen::PlainObjectBase& BE) { using namespace Eigen; typedef Matrix MatrixXF2; MatrixXF2 allE; unique_edge_map(F,allE,E,EMAP); return is_edge_manifold(F,E.rows(),EMAP,BF,BE); } template IGL_INLINE bool igl::is_edge_manifold( const Eigen::MatrixBase& F) { Eigen::Array BF; Eigen::Array BE; Eigen::MatrixXi E; Eigen::VectorXi EMAP; return is_edge_manifold(F,BF,E,EMAP,BE); } #ifdef IGL_STATIC_LIBRARY // Explicit template instantiation template bool igl::is_edge_manifold >(Eigen::MatrixBase > const&); template bool igl::is_edge_manifold >(Eigen::MatrixBase > const&); template bool igl::is_edge_manifold >(Eigen::MatrixBase > const&); template bool igl::is_edge_manifold, Eigen::Matrix, Eigen::Array, Eigen::Array >(Eigen::MatrixBase > const&, Eigen::Matrix::Index, Eigen::MatrixBase > const&, Eigen::PlainObjectBase >&, Eigen::PlainObjectBase >&); #endif