public (Stack <Edge <T> >, Corner) FindEdges(MeshCell <T> cornerCell) { Edge <T> firstEdge = GetFirstEdgeOfBoundary(cornerCell); Crossing firstCrossing = FindFirstCrossing(firstEdge); Stack <Edge <T> > edges = default(Stack <Edge <T> >); Corner corner = default(Corner); bool stop = false; CrossingFinder first = new CrossingFinder(firstCrossing.First); CrossingFinder second = new CrossingFinder(firstCrossing.Second); CrossingFinder third = new CrossingFinder(firstCrossing.Third); while (!stop) { if (first.MoveForwardAndCheckForCrossing()) { stop = true; edges = first.Visited; corner = new Corner { FirstEdge = firstCrossing.Third.Twin.BoundaryEdgeNumber, SecondEdge = first.Crossing.First.BoundaryEdgeNumber }; } else if (second.MoveForwardAndCheckForCrossing()) { stop = true; edges = second.Visited; corner = new Corner { FirstEdge = firstCrossing.First.Twin.BoundaryEdgeNumber, SecondEdge = second.Crossing.First.BoundaryEdgeNumber }; } else if (third.MoveForwardAndCheckForCrossing()) { stop = true; edges = third.Visited; corner = new Corner { FirstEdge = firstCrossing.Second.Twin.BoundaryEdgeNumber, SecondEdge = third.Crossing.First.BoundaryEdgeNumber }; } } return(edges, corner); }
Crossing FindFirstCrossing(Edge <T> firstEdge) { CrossingFinder forward = new CrossingFinder(firstEdge); CrossingFinder backwards = new CrossingFinder(firstEdge.Twin); while (true) { if (forward.MoveForwardAndCheckForCrossing()) { return(forward.Crossing); } else if (backwards.MoveForwardAndCheckForCrossing()) { return(backwards.Crossing); } ; } }