Beispiel #1
0
        public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture)
        {
            if (value is AddHighlightFeaturesMode)
            {
                AddHighlightFeaturesMode mode = (AddHighlightFeaturesMode)value;
                switch (mode)
                {
                case AddHighlightFeaturesMode.Add:
                    return(addToCurrent);

                case AddHighlightFeaturesMode.FilterExisting:
                    return(searchInCurrent);

                case AddHighlightFeaturesMode.Reset:
                default:
                    return(createNew);
                }
            }
            else
            {
                return(Binding.DoNothing);
            }
        }
        protected virtual void AddHighlightFeaturesCore(IEnumerable <Feature> featuresToAdd, AddHighlightFeaturesMode addHighlightFeaturesMode)
        {
            switch (addHighlightFeaturesMode)
            {
            case AddHighlightFeaturesMode.Reset:
                highlightFeatureLayer.InternalFeatures.Clear();
                goto case AddHighlightFeaturesMode.Add;

            case AddHighlightFeaturesMode.Add:
                UsingFeatureLayer(highlightFeatureLayer, (layer) =>
                {
                    featuresToAdd.ForEach(feature =>
                    {
                        Feature newFeature = CreateHighlightFeature(feature, (FeatureLayer)feature.Tag);
                        if (!layer.InternalFeatures.Contains(newFeature.Id))
                        {
                            layer.EditTools.Add(newFeature);
                        }
                    });
                });
                break;

            case AddHighlightFeaturesMode.FilterExisting:
                if (featuresToAdd.Count() > 0)
                {
                    UsingFeatureLayer(highlightFeatureLayer, (layer) =>
                    {
                        var tag = featuresToAdd.First().Tag;
                        var filteredFeatureIds = featuresToAdd.Select(f => f.Id);
                        var highlightFeatures  = layer.InternalFeatures.Where(f => f.Tag == tag).ToList();

                        for (int i = highlightFeatures.Count - 1; i >= 0; i--)
                        {
                            var id    = highlightFeatures[i].Id;
                            var index = id.IndexOf("|");
                            if (index >= 0)
                            {
                                id = id.Substring(0, index);
                            }
                            if (!filteredFeatureIds.Contains(id))
                            {
                                layer.EditTools.Delete(highlightFeatures[i].Id);
                            }
                        }
                    });
                }
                else
                {
                    highlightFeatureLayer.InternalFeatures.Clear();
                }
                break;

            default:
                break;
            }
        }
 public void AddHighlightFeatures(IEnumerable <Feature> features, AddHighlightFeaturesMode addHighlightFeaturesMode)
 {
     AddHighlightFeaturesCore(features, addHighlightFeaturesMode);
 }