/////////////////////////////////////////////////////////////////////////////////////////// // FindStartPoint() // // Finds a good starting point, namely one which has only one neighbor // int NvStripifier::FindStartPoint(NvFaceInfoVec &faceInfos, NvEdgeInfoVec &edgeInfos) { int bestCtr = -1; int bestIndex = -1; for(size_t i = 0; i < faceInfos.size(); i++) { int ctr = 0; if(FindOtherFace(edgeInfos, faceInfos[i]->m_v0, faceInfos[i]->m_v1, faceInfos[i]) == NULL) ctr++; if(FindOtherFace(edgeInfos, faceInfos[i]->m_v1, faceInfos[i]->m_v2, faceInfos[i]) == NULL) ctr++; if(FindOtherFace(edgeInfos, faceInfos[i]->m_v2, faceInfos[i]->m_v0, faceInfos[i]) == NULL) ctr++; if(ctr > bestCtr) { bestCtr = ctr; bestIndex = i; //return i; } } //return -1; if(bestCtr == 0) return -1; else return bestIndex; }
/////////////////////////////////////////////////////////////////////////////////////////// // FindStartPoint() // // Finds a good starting point, namely one which has only one neighbor // int NvStripifier::FindStartPoint(NvFaceInfoVec &faceInfos, NvEdgeInfoVec &edgeInfos) { for(int i = 0; i < faceInfos.size(); i++) { int ctr = 0; if(FindOtherFace(edgeInfos, faceInfos[i]->m_v0, faceInfos[i]->m_v1, faceInfos[i]) == NULL) ctr++; if(FindOtherFace(edgeInfos, faceInfos[i]->m_v1, faceInfos[i]->m_v2, faceInfos[i]) == NULL) ctr++; if(FindOtherFace(edgeInfos, faceInfos[i]->m_v2, faceInfos[i]->m_v0, faceInfos[i]) == NULL) ctr++; if(ctr > 1) return i; } return -1; }
/////////////////////////////////////////////////////////////////////////////////////////// // NumNeighbors() // // Returns the number of neighbors that this face has // int NvStripifier::NumNeighbors(NvFaceInfo* face, NvEdgeInfoVec& edgeInfoVec) { int numNeighbors = 0; if(FindOtherFace(edgeInfoVec, face->m_v0, face->m_v1, face) != NULL) { numNeighbors++; } if(FindOtherFace(edgeInfoVec, face->m_v1, face->m_v2, face) != NULL) { numNeighbors++; } if(FindOtherFace(edgeInfoVec, face->m_v2, face->m_v0, face) != NULL) { numNeighbors++; } return numNeighbors; }