| 143 | } |
| 144 | |
| 145 | void visitFace( |
| 146 | const MeshPrimitive * mesh, |
| 147 | FaceId currentFace, |
| 148 | Edge currentEdge, |
| 149 | FaceToVerticesMap &faceToVerticesMap, |
| 150 | FaceToEdgesMap &faceToEdgesMap, |
| 151 | VertexList &faceVaryingOffsets, |
| 152 | EdgeToConnectedFacesMap &edgeToConnectedFacesMap, |
| 153 | std::vector<VertexId> &vertexMap, |
| 154 | std::vector<VertexId> &vertexRemap, |
| 155 | std::vector<int> &newVerticesPerFace, |
| 156 | std::vector<VertexId> &newVertexIds, |
| 157 | std::vector<int> &faceVaryingRemap, |
| 158 | std::vector<int> &faceRemap, |
| 159 | int &nextVertex, |
| 160 | const Canceller *canceller |
| 161 | ) |
| 162 | { |
| 163 | assert( currentEdge.first != currentEdge.second ); |
| 164 | |
| 165 | if ( faceRemap[ currentFace ] != -1 ) |
| 166 | { |
| 167 | return; |
| 168 | } |
| 169 | |
| 170 | Canceller::check( canceller ); |
| 171 | |
| 172 | FaceToEdgesMap::const_iterator currentFaceIt = faceToEdgesMap.find( currentFace ); |
| 173 | assert( currentFaceIt != faceToEdgesMap.end() ); |
| 174 | const EdgeList &faceEdges = currentFaceIt->second; |
| 175 | |
| 176 | assert( faceEdges.size() >= 3 ); |
| 177 | |
| 178 | FaceToVerticesMap::const_iterator vit = faceToVerticesMap.find( currentFace ); |
| 179 | assert( vit != faceToVerticesMap.end() ); |
| 180 | const VertexList &faceVertices = vit->second; |
| 181 | |
| 182 | int numFaceVertices = faceVertices.size(); |
| 183 | |
| 184 | VertexList::const_iterator it = std::find( faceVertices.begin(), faceVertices.end(), currentEdge.first ); |
| 185 | assert( it != faceVertices.end() ); |
| 186 | |
| 187 | int currentEdgeVertexOrigin = std::distance( faceVertices.begin(), it ); |
| 188 | |
| 189 | assert( faceVertices[ index( currentEdgeVertexOrigin, numFaceVertices )] == currentEdge.first ); |
| 190 | |
| 191 | int faceVerticesDirection = faceDirection( faceToVerticesMap, currentFace, currentEdge ); |
| 192 | |
| 193 | EdgeList faceEdgesSorted( numFaceVertices ); |
| 194 | VertexList faceVerticesSorted( numFaceVertices ); |
| 195 | |
| 196 | int i; |
| 197 | for ( i = 0; i < numFaceVertices; i++ ) |
| 198 | { |
| 199 | faceVerticesSorted[i] = faceVertices[index( currentEdgeVertexOrigin + i * faceVerticesDirection, numFaceVertices )]; |
| 200 | |
| 201 | if ( faceVerticesDirection == 1 ) |
| 202 | { |
no test coverage detected