Пример #1
0
        protected override bool SelectAndProcessDerivedGeometry(
            Dictionary <MapMember, List <long> > selection,
            Geometry sketch,
            CancelableProgressor progressor)
        {
            Assert.NotNull(_overlaps);

            Overlaps overlapsToRemove = SelectOverlaps(_overlaps, sketch);

            if (!overlapsToRemove.HasOverlaps())
            {
                return(false);
            }

            IEnumerable <Feature> selectedFeatures = MapUtils.GetFeatures(selection);

            RemoveOverlapsResult result =
                MicroserviceClient.RemoveOverlaps(
                    selectedFeatures, overlapsToRemove, _overlappingFeatures,
                    progressor?.CancellationToken ?? new CancellationTokenSource().Token);

            var updates = new Dictionary <Feature, Geometry>();
            var inserts = new Dictionary <Feature, IList <Geometry> >();

            foreach (var resultPerFeature in result.ResultsByFeature)
            {
                updates.Add(resultPerFeature.OriginalFeature, resultPerFeature.UpdatedGeometry);

                if (resultPerFeature.InsertGeometries.Count > 0)
                {
                    inserts.Add(resultPerFeature.OriginalFeature,
                                resultPerFeature.InsertGeometries);
                }
            }

            bool saved = GdbPersistenceUtils.SaveInOperation("Remove overlaps", updates, inserts);

            var currentSelection = SelectionUtils.GetSelectedFeatures(MapView.Active).ToList();

            CalculateDerivedGeometries(currentSelection, progressor);

            return(saved);
        }
Пример #2
0
        protected override bool SelectAndProcessDerivedGeometry(
            Dictionary <MapMember, List <long> > selection,
            Geometry sketch,
            CancelableProgressor progressor)
        {
            Assert.NotNull(_overlaps);

            Overlaps overlapsToRemove = SelectOverlaps(_overlaps, sketch);

            if (!overlapsToRemove.HasOverlaps())
            {
                return(false);
            }

            IEnumerable <Feature> selectedFeatures = MapUtils.GetFeatures(selection);

            RemoveOverlapsResult result =
                MicroserviceClient.RemoveOverlaps(
                    selectedFeatures, overlapsToRemove, _overlappingFeatures,
                    progressor?.CancellationToken ?? new CancellationTokenSource().Token);

            var updates = new Dictionary <Feature, Geometry>();
            var inserts = new Dictionary <Feature, IList <Geometry> >();

            HashSet <long> editableClassHandles =
                MapUtils.GetLayers <BasicFeatureLayer>(MapView.Active, bfl => bfl.IsEditable)
                .Select(l => l.GetTable().Handle.ToInt64()).ToHashSet();

            foreach (OverlapResultGeometries resultPerFeature in result.ResultsByFeature)
            {
                if (!GdbPersistenceUtils.CanChange(resultPerFeature.OriginalFeature,
                                                   editableClassHandles, out string warning))
                {
                    _msg.WarnFormat("{0}: {1}",
                                    GdbObjectUtils.ToString(resultPerFeature.OriginalFeature),
                                    warning);
                    continue;
                }

                updates.Add(resultPerFeature.OriginalFeature, resultPerFeature.UpdatedGeometry);

                if (resultPerFeature.InsertGeometries.Count > 0)
                {
                    inserts.Add(resultPerFeature.OriginalFeature,
                                resultPerFeature.InsertGeometries);
                }
            }

            if (result.TargetFeaturesToUpdate != null)
            {
                foreach (KeyValuePair <Feature, Geometry> kvp in result.TargetFeaturesToUpdate)
                {
                    if (!GdbPersistenceUtils.CanChange(kvp.Key,
                                                       editableClassHandles, out string warning))
                    {
                        _msg.WarnFormat("{0}: {1}", GdbObjectUtils.ToString(kvp.Key), warning);
                        continue;
                    }

                    updates.Add(kvp.Key, kvp.Value);
                }
            }

            bool saved = GdbPersistenceUtils.SaveInOperation("Remove overlaps", updates, inserts);

            var currentSelection = GetApplicableSelectedFeatures(MapView.Active).ToList();

            CalculateDerivedGeometries(currentSelection, progressor);

            return(saved);
        }