Beispiel #1
0
        private static void SwapIntersectNodes(IntersectNode int1, IntersectNode int2)
        {
            Contract.Requires(int1 != null);
            Contract.Requires(int2 != null);

            var e1 = int1.Edge1;
            var e2 = int1.Edge2;
            var p = int1.Pt;
            int1.Edge1 = int2.Edge1;
            int1.Edge2 = int2.Edge2;
            int1.Pt = int2.Pt;
            int2.Edge1 = e1;
            int2.Edge2 = e2;
            int2.Pt = p;
        }
Beispiel #2
0
        private static bool EdgesAdjacent(IntersectNode inode)
        {
            Contract.Requires(inode != null);
            Contract.Requires(inode.Edge1 != null);

            return (inode.Edge1.NextInSEL == inode.Edge2) || (inode.Edge1.PrevInSEL == inode.Edge2);
        }
Beispiel #3
0
        private void InsertIntersectNode(TEdge e1, TEdge e2, IntPoint pt)
        {
            Contract.Requires(e1 != null);
            Contract.Requires(e2 != null);

            var newNode = new IntersectNode {
                Edge1 = e1,
                Edge2 = e2,
                Pt = pt,
                Next = null
            };
            if (_intersectNodes == null)
                _intersectNodes = newNode;
            else if (newNode.Pt.Y > _intersectNodes.Pt.Y)
            {
                newNode.Next = _intersectNodes;
                _intersectNodes = newNode;
            }
            else
            {
                var iNode = _intersectNodes;
                while (iNode.Next != null && newNode.Pt.Y < iNode.Next.Pt.Y)
                    iNode = iNode.Next;
                newNode.Next = iNode.Next;
                iNode.Next = newNode;
            }
        }
Beispiel #4
0
 private void ProcessIntersectList()
 {
     while (_intersectNodes != null)
     {
         var iNode = _intersectNodes.Next;
         {
             IntersectEdges(_intersectNodes.Edge1, _intersectNodes.Edge2, _intersectNodes.Pt, Protects.Both);
             SwapPositionsInAEL(_intersectNodes.Edge1, _intersectNodes.Edge2);
         }
         _intersectNodes = null;
         _intersectNodes = iNode;
     }
 }
Beispiel #5
0
 private void DisposeIntersectNodes()
 {
     while (_intersectNodes != null)
     {
         var iNode = _intersectNodes.Next;
         _intersectNodes = null;
         _intersectNodes = iNode;
     }
 }