- // Recalculate current vertex and current direction
- if (!aProcVertexes.empty())
- {
- aNextVertex = aProcVertexes.back();
- if (!aProcEdges.empty())
- aNextDir = getOuterEdgeDirection(aProcEdges.back(), aNextVertex);
- else aNextDir = -aDirY;
+ if (aVertIter == aProcVertexes.end())
+ aVertIter = aProcVertexes.begin();
+ else
+ aVertIter++;
+ if (anEdgeIter == aProcEdges.end())
+ anEdgeIter = aProcEdges.begin();
+ else
+ anEdgeIter++;
+ aCopyVLoop = aVertIter;
+ aCopyELoop = anEdgeIter;
+
+ if (aVertIter != aProcVertexes.end() &&
+ aMapVE.Contains(*aVertIter) && aMapVE.FindFromKey(*aVertIter).Extent() <= 1)
+ removeWasteEdges(aVertIter, anEdgeIter, aProcVertexes.end(), aProcEdges.end(), aMapVE);
+ if (aCopyVLoop != aVertIter)
+ aProcVertexes.erase(aCopyVLoop, aVertIter);
+ if (aCopyELoop != anEdgeIter)
+ aProcEdges.erase(aCopyELoop, anEdgeIter);
+
+ // Check whether the next vertex already exists
+ if (aVertIter != aProcVertexes.end())
+ aVertIter++;
+ if (aVertIter != aProcVertexes.end() && anEdgeIter != aProcEdges.end()) {
+ aNextVertex = *aVertIter;
+ aNextDir = getOuterEdgeDirection(*anEdgeIter, aNextVertex);
+ aProcVertexes.erase(++aVertIter, aProcVertexes.end());
+ aProcEdges.erase(++anEdgeIter, aProcEdges.end());
+ } else {
+ // Recalculate current vertex and current direction
+ aProcEdges.clear();
+ aProcVertexes.clear();
+ if (aMapVE.Extent() > 0) {
+ aNextVertex = findStartVertex(aMapVE, aDirX, aDirY);
+ aProcVertexes.push_back(aNextVertex);
+ }
+ aNextDir = aDirY.Reversed();
+ aCurNorm = aNorm.Reversed();