Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
                }
                ;
            }
        }