/* <summary>
         * // Subclasses can call this method to add a triangle to the end of the queue. This is useful for
         * // initializing the queue to a chosen set of triangles.
         * // </summary>
         * // <param name="tri">a triangle</param>
         * /*
         * protected void addLast(QuadEdgeTriangle tri) { triQueue.addLast(tri); }
         */

        /// <summary>
        /// Subclasses call this method to perform the visiting process.
        /// </summary>
        public void VisitAll(ITraversalVisitor visitor)
        {
            while (_triQueue.Count > 0)
            {
                var tri = _triQueue.First.Value;
                _triQueue.RemoveFirst();
                Process(tri, visitor);
            }
        }
        /* <summary>
        // Subclasses can call this method to add a triangle to the end of the queue. This is useful for
        // initializing the queue to a chosen set of triangles.
        // </summary>
        // <param name="tri">a triangle</param>
        /*
         * protected void addLast(QuadEdgeTriangle tri) { triQueue.addLast(tri); }
         */

        /// <summary>
        /// Subclasses call this method to perform the visiting process.
        /// </summary>
        public void VisitAll(ITraversalVisitor visitor)
        {
            while (_triQueue.Count > 0)
            {
                QuadEdgeTriangle tri = _triQueue.First.Value;
                _triQueue.RemoveFirst();
                Process(tri, visitor);
            }
        }
 private void Process(QuadEdgeTriangle currTri, ITraversalVisitor visitor)
 {
     currTri.GetNeighbours();
     for (int i = 0; i < 3; i++)
     {
         QuadEdgeTriangle neighTri = (QuadEdgeTriangle)currTri.GetEdge(i).Sym.Data;
         if (neighTri == null)
             continue;
         if (visitor.Visit(currTri, i, neighTri))
             _triQueue.AddLast(neighTri);
     }
 }
 private void Process(QuadEdgeTriangle currTri, ITraversalVisitor visitor)
 {
     currTri.GetNeighbours();
     for (int i = 0; i < 3; i++)
     {
         var neighTri = (QuadEdgeTriangle)currTri.GetEdge(i).Sym.Data;
         if (neighTri == null)
         {
             continue;
         }
         if (visitor.Visit(currTri, i, neighTri))
         {
             _triQueue.AddLast(neighTri);
         }
     }
 }
Пример #5
0
 ///-------------------------------------------------------------------------------------------------
 /// <summary>
 ///  With visitor.
 /// </summary>
 /// <param name="visitor">
 ///  The visitor.
 /// </param>
 /// <returns>
 ///  A TraversalBuilder.
 /// </returns>
 ///-------------------------------------------------------------------------------------------------
 public TraversalBuilder WithVisitor(ITraversalVisitor visitor)
 {
     Contract.Requires(visitor, "visitor");
     _query.Evaluator = visitor;
     return(this);
 }