private IEnumerable <KeyValuePair <IPoint, IPoint> > CalculateSourceTargetPairs( [NotNull] IList <IPolycurve> sourceGeometries, [NotNull] IPointCollection targetIntersectionPoints) { // for all tuples -> calculate standard intersection points (possibly clip first and only use original shapes if none found?) if (sourceGeometries.Count <= 1) { return(new List <KeyValuePair <IPoint, IPoint> >(0)); } IMultipoint sourceIntersectionPoints = CalculateSourceIntersections(sourceGeometries); // TODO: re-use SourceIntersections if selected features have not changed IPointCollection unpairedSourcePoints; IDictionary <IPoint, IPoint> sourceTargetPairs = ReshapeUtils.PairByDistance((IPointCollection)sourceIntersectionPoints, targetIntersectionPoints, out unpairedSourcePoints); _unpairedSourceIntersectionPoints = unpairedSourcePoints; return(sourceTargetPairs); }