| 1206 | } |
| 1207 | |
| 1208 | void OrderEdges(const std::vector<vtkIdType>& faceEdges, |
| 1209 | const std::vector<std::pair<vtkIdType, vtkIdType>>& allEdges, vtkIdList* face) |
| 1210 | { |
| 1211 | face->Reset(); |
| 1212 | if (faceEdges.empty()) |
| 1213 | return; |
| 1214 | |
| 1215 | const auto& firstEdge = allEdges[faceEdges[0]]; |
| 1216 | const vtkIdType from = firstEdge.first; |
| 1217 | face->InsertNextId(from); |
| 1218 | vtkIdType to = firstEdge.second; |
| 1219 | face->InsertNextId(to); |
| 1220 | |
| 1221 | size_t i = 0; |
| 1222 | while (to != from) |
| 1223 | { |
| 1224 | for (size_t j = 0; j < faceEdges.size(); ++j) |
| 1225 | { |
| 1226 | if (i == j) |
| 1227 | continue; |
| 1228 | |
| 1229 | const auto& edge = allEdges[faceEdges[j]]; |
| 1230 | if (edge.first == to) |
| 1231 | { |
| 1232 | to = edge.second; |
| 1233 | i = j; |
| 1234 | face->InsertNextId(to); |
| 1235 | break; |
| 1236 | } |
| 1237 | else if (edge.second == to) |
| 1238 | { |
| 1239 | to = edge.first; |
| 1240 | i = j; |
| 1241 | face->InsertNextId(to); |
| 1242 | break; |
| 1243 | } |
| 1244 | } |
| 1245 | |
| 1246 | if (face->GetNumberOfIds() > static_cast<vtkIdType>(faceEdges.size() + 1)) |
| 1247 | { |
| 1248 | // should not happen, but better exit than ending up in a continuous loop |
| 1249 | break; |
| 1250 | } |
| 1251 | } |
| 1252 | |
| 1253 | face->Resize(face->GetNumberOfIds() - 1); |
| 1254 | } |
| 1255 | |
| 1256 | void vtkTecplotReader::GetPolygonalGridCells( |
| 1257 | int numFaces, int numEdges, vtkUnstructuredGrid* unstruct) const |
no test coverage detected