// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2015 Qingnan Zhou // // 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_COPYLEFT_RESOLVE_DUPLICATED_FACES #define IGL_COPYLEFT_RESOLVE_DUPLICATED_FACES #include "igl_inline.h" #include namespace igl { /// Resolve duplicated faces according to the following rules per unique face: /// /// 1. If the number of positively oriented faces equals the number of /// negatively oriented faces, remove all duplicated faces at this triangle. /// 2. If the number of positively oriented faces equals the number of /// negatively oriented faces plus 1, keeps one of the positively oriented /// face. /// 3. If the number of positively oriented faces equals the number of /// negatively oriented faces minus 1, keeps one of the negatively oriented /// face. /// 4. If the number of postively oriented faces differ with the number of /// negativley oriented faces by more than 1, the mesh is not orientable. /// An exception will be thrown. /// /// @param[in] F1 #F1 by 3 array of input faces. /// @param[out] F2 #F2 by 3 array of output faces without duplicated faces. /// @param[out] J #F2 list of indices into F1. template< typename DerivedF1, typename DerivedF2, typename DerivedJ > IGL_INLINE void resolve_duplicated_faces( const Eigen::MatrixBase& F1, Eigen::PlainObjectBase& F2, Eigen::PlainObjectBase& J); } #ifndef IGL_STATIC_LIBRARY # include "resolve_duplicated_faces.cpp" #endif #endif