/*--------------------------------------------------------------------------------------------*/ public static TrackSegment[] SplitTrackSegments(TrackSegment[] pSegments, TrackSegment[] pCuts) { var slices = pSegments.ToList(); foreach ( TrackSegment cut in pCuts ) { for ( int i = 0 ; i < slices.Count ; i++ ) { TrackSegment slice = slices[i]; if ( cut.StartValue >= slice.StartValue && cut.EndValue <= slice.EndValue ) { var slice2 = new TrackSegment(); slice2.StartValue = cut.EndValue; slice2.EndValue = slice.EndValue; slice2.IsFill = slice.IsFill; slices.Insert(i+1, slice2); slice.EndValue = cut.StartValue; slices[i] = slice; continue; } if ( cut.StartValue >= slice.StartValue && cut.StartValue <= slice.EndValue ) { slice.EndValue = cut.StartValue; slices[i] = slice; continue; } if ( cut.EndValue <= slice.EndValue && cut.EndValue >= slice.StartValue ) { slice.StartValue = cut.EndValue; slices[i] = slice; continue; } if ( cut.StartValue <= slice.StartValue && cut.EndValue >= slice.EndValue ) { slices.RemoveAt(i); i--; } } } for ( int i = 0 ; i < slices.Count ; i++ ) { TrackSegment slice = slices[i]; if ( Math.Abs(slice.StartValue-slice.EndValue) <= 0.01f ) { slices.RemoveAt(i); i--; } } return slices.ToArray(); }