//------------------------------------------------------------------------------ private void InsertScanbeam(Int64 Y) { if( m_Scanbeam == null ) { m_Scanbeam = new Scanbeam(); m_Scanbeam.next = null; m_Scanbeam.Y = Y; } else if( Y > m_Scanbeam.Y ) { Scanbeam newSb = new Scanbeam(); newSb.Y = Y; newSb.next = m_Scanbeam; m_Scanbeam = newSb; } else { Scanbeam sb2 = m_Scanbeam; while( sb2.next != null && ( Y <= sb2.next.Y ) ) sb2 = sb2.next; if( Y == sb2.Y ) return; //ie ignores duplicates Scanbeam newSb = new Scanbeam(); newSb.Y = Y; newSb.next = sb2.next; sb2.next = newSb; } }
//------------------------------------------------------------------------------ protected override void Reset() { base.Reset(); m_Scanbeam = null; m_ActiveEdges = null; m_SortedEdges = null; DisposeAllPolyPts(); LocalMinima lm = m_MinimaList; while (lm != null) { InsertScanbeam(lm.Y); InsertScanbeam(lm.leftBound.ytop); lm = lm.next; } }
//------------------------------------------------------------------------------ void DisposeScanbeamList() { while ( m_Scanbeam != null ) { Scanbeam sb2 = m_Scanbeam.next; m_Scanbeam = null; m_Scanbeam = sb2; } }
public Clipper() { m_Scanbeam = null; m_ActiveEdges = null; m_SortedEdges = null; m_IntersectNodes = null; m_ExecuteLocked = false; m_PolyOuts = new List<OutRec>(); m_Joins = new List<JoinRec>(); m_HorizJoins = new List<HorzJoinRec>(); m_ReverseOutput = false; }
//------------------------------------------------------------------------------ private Int64 PopScanbeam() { Int64 Y = m_Scanbeam.Y; m_Scanbeam = m_Scanbeam.next; return Y; }
//------------------------------------------------------------------------------ private Int64 PopScanbeam() { Int64 Y = m_Scanbeam.Y; Scanbeam sb2 = m_Scanbeam; m_Scanbeam = m_Scanbeam.next; sb2 = null; return Y; }