public static Overlaps CalculateOverlaps( RemoveOverlapsGrpc.RemoveOverlapsGrpcClient rpcClient, [NotNull] IList <Feature> selectedFeatures, [NotNull] IList <Feature> overlappingFeatures, CancellationToken cancellationToken) { CalculateOverlapsResponse response = CalculateOverlapsRpc(rpcClient, selectedFeatures, overlappingFeatures, cancellationToken); if (response == null || cancellationToken.IsCancellationRequested) { return(null); } var result = new Overlaps(); foreach (OverlapMsg overlapMsg in response.Overlaps) { GdbObjectReference gdbObjRef = new GdbObjectReference( overlapMsg.OriginalFeatureRef.ClassHandle, overlapMsg.OriginalFeatureRef.ObjectId); List <Geometry> overlapGeometries = ProtobufConversionUtils.FromShapeMsgList(overlapMsg.Overlaps); result.AddGeometries(gdbObjRef, overlapGeometries); } result.Notifications.AddRange( response.Notifications.Select(n => new Notification(n))); return(result); }
private static void Add(IDictionary <GdbObjectReference, IList <Geometry> > overlapsToAdd, Predicate <Geometry> predicate, Overlaps toResult) { foreach (var overlapsBySourceRef in overlapsToAdd) { List <Geometry> selectedGeometries = overlapsBySourceRef.Value.Where(g => predicate == null || predicate(g)) .ToList(); if (selectedGeometries.Count > 0) { toResult.AddGeometries(overlapsBySourceRef.Key, selectedGeometries); } } }