#ifndef IGL_CGAL_ORDER_FACETS_AROUND_EDGES_H #define IGL_CGAL_ORDER_FACETS_AROUND_EDGES_H #include "../igl_inline.h" #include #include namespace igl { namespace cgal { // For each undirected edge, sort its adjacent faces. // // Inputs: // V #V by 3 list of vertices. // F #F by 3 list of faces // N #F by 3 list of face normals. // E #F*3 by 2 list vertex indices, represents directed edges. // uE #uE by 2 list of vertex_indices, represents undirected edges. // EMAP #F*3 list of indices that maps E to uE. (a many-to-one map) // uE2E #uE list of lists that maps uE to E. (a one-to-many map) // // Outputs: // uE2oE #uE list of lists that maps uE to an ordered list of E. (a // one-to-many map) // uE2C #uE list of lists of bools indicates whether each face in // uE2oE[i] is consistently orientated as the ordering. // template< typename DerivedV, typename DerivedF, typename DerivedN, typename DerivedE, typename DeriveduE, typename DerivedEMAP, typename uE2EType, typename uE2oEType, typename uE2CType > IGL_INLINE typename std::enable_if::value, void>::type order_facets_around_edges( const Eigen::PlainObjectBase& V, const Eigen::PlainObjectBase& F, const Eigen::PlainObjectBase& N, const Eigen::PlainObjectBase& E, const Eigen::PlainObjectBase& uE, const Eigen::PlainObjectBase& EMAP, const std::vector >& uE2E, std::vector >& uE2oE, std::vector >& uE2C ); template< typename DerivedV, typename DerivedF, typename DerivedN, typename DerivedE, typename DeriveduE, typename DerivedEMAP, typename uE2EType, typename uE2oEType, typename uE2CType > IGL_INLINE typename std::enable_if::value, void>::type order_facets_around_edges( const Eigen::PlainObjectBase& V, const Eigen::PlainObjectBase& F, const Eigen::PlainObjectBase& N, const Eigen::PlainObjectBase& E, const Eigen::PlainObjectBase& uE, const Eigen::PlainObjectBase& EMAP, const std::vector >& uE2E, std::vector >& uE2oE, std::vector >& uE2C ); } } #ifndef IGL_STATIC_LIBRARY #include "order_facets_around_edges.cpp" #endif #endif