コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Overlaps.cs プロジェクト: sungaoyong/ProSuite
        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);
                }
            }
        }