#include "face_occurences.h" #include #include "sort.h" #include template IGL_INLINE void igl::face_occurences( const std::vector > & F, std::vector & C) { using namespace std; // Get a list of sorted faces vector > sortedF = F; for(int i = 0; i < (int)F.size();i++) { sort(sortedF[i].begin(),sortedF[i].end()); } // Count how many times each sorted face occurs map,int> counts; for(int i = 0; i < (int)sortedF.size();i++) { if(counts.find(sortedF[i]) == counts.end()) { // initialize to count of 1 counts[sortedF[i]] = 1; }else { // increment count counts[sortedF[i]]++; assert(counts[sortedF[i]] == 2); } } // Resize output to fit number of ones C.resize(F.size()); for(int i = 0;i< (int)F.size();i++) { // sorted face should definitely be in counts map assert(counts.find(sortedF[i]) != counts.end()); C[i] = counts[sortedF[i]]; } } #ifndef IGL_HEADER_ONLY // Explicit template specialization template void igl::face_occurences(std::vector >, std::allocator > > > const&, std::vector >&); #endif