/*--------------------------------------------------------------------------------------------*/
        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();
        }