/// <summary> /// Splits segmentToSplit in two based on iLocation. /// First new segment will be added to diced, and second new segment will be returned. /// If split doesn't happen, segmentToSplit will be returned. /// </summary> private static Segment SplitHelper(Segment segmentToSplit, Vector3D iLocation, Polygon diced, List <IntersectionPoint> iPoints) { List <Segment> split; if (segmentToSplit.Split(iLocation, out split)) { Debug.Assert(split.Count == 2); diced.Segments.Add(split[0]); IntersectionPoint iPoint = new IntersectionPoint(); iPoint.Location = iLocation; iPoint.Index = diced.Segments.Count; iPoints.Add(iPoint); return(split[1]); } else { // We were presumably at an endpoint. // Add to iPoints list only if it was the starting endpoint. // (This will avoid duplicate entries). if (iLocation.Compare(segmentToSplit.P1)) { IntersectionPoint iPoint = new IntersectionPoint(); iPoint.Location = iLocation; iPoint.Index = diced.Segments.Count; iPoints.Add(iPoint); } return(segmentToSplit); } }