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; }
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); }
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; } }
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; } }
private void DisposeIntersectNodes() { while (_intersectNodes != null) { var iNode = _intersectNodes.Next; _intersectNodes = null; _intersectNodes = iNode; } }