private static bool MoveLayerInLayerOverlay(Layer layer, LayerOverlay layerOverlay, MovementAction movementAction)
        {
            var originalIndex = layerOverlay.Layers.IndexOf(layer);

            switch (movementAction)
            {
            case MovementAction.Up:
                layerOverlay.Layers.MoveUp(layer);
                break;

            case MovementAction.Down:
                layerOverlay.Layers.MoveDown(layer);
                break;

            case MovementAction.ToTop:
                layerOverlay.Layers.MoveToTop(layer);
                break;

            case MovementAction.ToBottom:
                layerOverlay.Layers.MoveToBottom(layer);
                break;

            default:
                break;
            }
            var currentIndex = layerOverlay.Layers.IndexOf(layer);
            var needReresh   = currentIndex != originalIndex;

            if (needReresh)
            {
                layerOverlay.Invalidate();
            }
            return(needReresh);
        }
Exemple #2
0
        private static void RemoveOneLayer(Layer layer, ref bool needRefresh)
        {
            if (layer is FeatureLayer)
            {
                GisEditor.SelectionManager.ClearSelectedFeatures((FeatureLayer)layer);
            }

            LayerOverlay tileOverlay = GisEditor.ActiveMap.GetOverlaysContaining(layer).FirstOrDefault();

            if (tileOverlay != null)
            {
                lock (tileOverlay.Layers)
                {
                    tileOverlay.Layers.Remove(layer);
                }
                tileOverlay.Invalidate();

                needRefresh = true;

                lock (layer) layer.Close();
                if (GisEditor.ActiveMap != null)
                {
                    GisEditor.ActiveMap.ActiveLayer = null;
                }
            }
        }
        internal static MenuItem GetRefreshLayersMenuItem(LayerOverlay overlay)
        {
            MenuItem item = new MenuItem();

            item.Header = GisEditor.LanguageManager.GetStringResource("LayerListMenuItemHelperRefreshlayersText");
            item.Icon   = new Image {
                Source = new BitmapImage(new Uri("/GisEditorPluginCore;component/Images/refresh.png", UriKind.RelativeOrAbsolute)), Width = 16, Height = 16
            };;
            ObservedCommand command = new ObservedCommand(() =>
            {
                overlay.Invalidate();
            }, () => { return(overlay != null); });

            item.Command = command;
            return(item);
        }
        public static void CopyToNewLayer(Collection <FeatureLayer> selectedFeaturesLayers)
        {
            Collection <FeatureLayer> existLayers = new Collection <FeatureLayer>();

            foreach (var item in GisEditor.ActiveMap.GetFeatureLayers().OfType <InMemoryFeatureLayer>())
            {
                existLayers.Add(item);
            }

            GetLayersParameters parameters = new GetLayersParameters();

            parameters.LayerUris.Add(new Uri("mem:Newlayer"));
            InMemoryFeatureLayerPlugin plugin = GisEditor.LayerManager.GetActiveLayerPlugins <InMemoryFeatureLayerPlugin>().FirstOrDefault();
            InMemoryFeatureLayer       inMemoryFeatureLayer = null;

            if (plugin != null)
            {
                inMemoryFeatureLayer      = plugin.GetLayers(parameters).OfType <InMemoryFeatureLayer>().FirstOrDefault();
                inMemoryFeatureLayer.Name = "New layer";
                existLayers.Insert(0, inMemoryFeatureLayer);
            }
            if (selectedFeaturesLayers.Count > 1)
            {
                AddFeaturesToSelectedLayer(selectedFeaturesLayers, existLayers);
                GisEditor.ActiveMap.Refresh(GisEditor.ActiveMap.ActiveOverlay);
                RefreshArgs refreshArgs = new RefreshArgs(GisEditor.ActiveMap, RefreshArgsDescription.AddLayerGroupCommandDescription);
                GisEditor.UIManager.BeginRefreshPlugins(refreshArgs);
                LayerOverlay overlay = GisEditor.ActiveMap.ActiveOverlay as LayerOverlay;
                if (overlay != null)
                {
                    overlay.Invalidate();
                }
            }
            else if (selectedFeaturesLayers.Count == 1)
            {
                AddFeatureToInMemoryFeatureLayer(null, selectedFeaturesLayers[0]);
            }
        }
 public static void CopyToExistingLayer(Collection <FeatureLayer>
                                        selectedFeaturesLayers, InMemoryFeatureLayer inMemoryFeatureLayer)
 {
     if (selectedFeaturesLayers.Count > 1)
     {
         var targetLayers = new Collection <FeatureLayer>()
         {
             inMemoryFeatureLayer
         };
         AddFeaturesToSelectedLayer(selectedFeaturesLayers, targetLayers);
         GisEditor.ActiveMap.Refresh(GisEditor.ActiveMap.ActiveOverlay);
         RefreshArgs refreshArgs = new RefreshArgs(GisEditor.ActiveMap, RefreshArgsDescription.AddLayerGroupCommandDescription);
         GisEditor.UIManager.BeginRefreshPlugins(refreshArgs);
         LayerOverlay overlay = GisEditor.ActiveMap.ActiveOverlay as LayerOverlay;
         if (overlay != null)
         {
             overlay.Invalidate();
         }
     }
     else if (selectedFeaturesLayers.Count == 1)
     {
         AddFeatureToInMemoryFeatureLayer(inMemoryFeatureLayer, selectedFeaturesLayers[0]);
     }
 }
Exemple #6
0
        private void VisibilityChanged(bool value)
        {
            if (ConcreteObject is LayerOverlay && needRefresh)
            {
                foreach (var subEntity in Children)
                {
                    subEntity.needRefresh = false;
                    LayerPlugin layerPlugin = GisEditor.LayerManager.GetLayerPlugins(subEntity.ConcreteObject.GetType()).FirstOrDefault();
                    if (layerPlugin != null)
                    {
                        bool isDataSourceAvailable = layerPlugin.DataSourceResolveTool.IsDataSourceAvailable((Layer)subEntity.ConcreteObject);
                        if (isDataSourceAvailable)
                        {
                            subEntity.IsChecked = IsChecked;
                            ((Layer)subEntity.ConcreteObject).IsVisible = IsChecked;
                        }
                    }
                    subEntity.needRefresh = true;
                }
                var tileOverlay = (TileOverlay)ConcreteObject;
                tileOverlay.IsVisible = isChecked;
                if (!isChecked)
                {
                    RefreshOverlay(tileOverlay);
                }
                GisEditor.UIManager.InvokeRefreshPlugins();
            }
            else if (ConcreteObject is Layer && needRefresh)
            {
                LayerPlugin layerPlugin = GisEditor.LayerManager.GetLayerPlugins(ConcreteObject.GetType()).FirstOrDefault();
                if (layerPlugin != null)
                {
                    bool isDataSourceAvailable = layerPlugin.DataSourceResolveTool.IsDataSourceAvailable((Layer)ConcreteObject);
                    if (!isDataSourceAvailable)
                    {
                        ((Layer)ConcreteObject).IsVisible = false;
                        isChecked = false;
                        OnPropertyChanged("IsChecked");
                        return;
                    }
                }

                if (!isChecked)
                {
                    Image image = warningImages.FirstOrDefault(i => i.Name.Equals("InEditing", StringComparison.InvariantCultureIgnoreCase));
                    if (image != null)
                    {
                        warningImages.Remove(image);
                    }
                }
                ((Layer)ConcreteObject).IsVisible = isChecked;
                Parent.needRefresh = false;
                Parent.IsChecked   = Parent.Children.Any(m => m.IsChecked);
                Parent.needRefresh = true;
                TileOverlay tileOverlay = Parent.ConcreteObject as TileOverlay;
                if (tileOverlay != null)
                {
                    //In this case, tileOverlay will execute Refresh() in default.
                    if (!tileOverlay.IsVisible && Parent.IsChecked)
                    {
                        tileOverlay.IsVisible = Parent.IsChecked;
                    }
                    else
                    {
                        tileOverlay.IsVisible = Parent.IsChecked;
                        tileOverlay.Invalidate();
                        RefreshOverlay(tileOverlay);
                    }
                }
                GisEditor.UIManager.InvokeRefreshPlugins();
            }

            if (!(ConcreteObject is Layer) && !(ConcreteObject is LayerOverlay))
            {
                TryChangeIsVisiblePropertyOfMapElement();
            }

            if (ConcreteObject is Styles.Style)
            {
                Styles.Style concreteStyle = (Styles.Style)ConcreteObject;
                concreteStyle.IsActive = value;
                Layer layer = LayerListHelper.FindMapElementInTree <Layer>(this);
                if (layer != null && layer.IsVisible)
                {
                    LayerOverlay layerOverlay = LayerListHelper.FindMapElementInTree <LayerOverlay>(this);
                    if (layerOverlay != null && layerOverlay.IsVisible)
                    {
                        layerOverlay.Invalidate();
                        RefreshOverlay(layerOverlay);
                    }
                }
            }
        }
        private static void AddFeatureToInMemoryFeatureLayer(InMemoryFeatureLayer inMemoryFeatureLayer, FeatureLayer sourceLayer)
        {
            if (inMemoryFeatureLayer == null)
            {
                string name         = "ExportResults";
                string existingName = string.Empty;
                InMemoryFeatureLayer existingLayer = GisEditor.ActiveMap.Overlays.OfType <LayerOverlay>()
                                                     .SelectMany(o => o.Layers).OfType <InMemoryFeatureLayer>()
                                                     .FirstOrDefault(l => l.Name.Equals(name, System.StringComparison.Ordinal));
                if (existingLayer != null)
                {
                    existingName = existingLayer.Name;
                }

                int index = 0;
                while (name.Equals(existingName))
                {
                    index++;
                    name          = "ExportResults" + index;
                    existingLayer = GisEditor.ActiveMap.Overlays.OfType <LayerOverlay>()
                                    .SelectMany(o => o.Layers).OfType <InMemoryFeatureLayer>()
                                    .FirstOrDefault(l => l.Name.Equals(name, System.StringComparison.Ordinal));
                    existingName = existingLayer != null ? existingLayer.Name : string.Empty;
                }

                GetLayersParameters parameters = new GetLayersParameters();
                parameters.LayerUris.Add(new Uri("mem:" + name));
                InMemoryFeatureLayerPlugin plugin = GisEditor.LayerManager.GetActiveLayerPlugins <InMemoryFeatureLayerPlugin>().FirstOrDefault();
                if (plugin != null)
                {
                    inMemoryFeatureLayer = plugin.GetLayers(parameters).OfType <InMemoryFeatureLayer>().FirstOrDefault();
                }
                GisEditor.ActiveMap.AddLayerToActiveOverlay(inMemoryFeatureLayer, TargetLayerOverlayType.Dynamic);
            }

            //if (sourceLayer != null)
            //{
            //    foreach (var item in sourceLayer.FeatureSource.LinkExpressions)
            //    {
            //        inMemoryFeatureLayer.FeatureSource.LinkExpressions.Add(item);
            //    }
            //    foreach (var item in sourceLayer.FeatureSource.LinkSources)
            //    {
            //        inMemoryFeatureLayer.FeatureSource.LinkSources.Add(item);
            //    }
            //}

            Collection <Feature> features = GisEditor.SelectionManager.GetSelectedFeatures();

            AddFeaturesToInMemoryFeatureLayer(inMemoryFeatureLayer, features);

            GisEditor.ActiveMap.Refresh(GisEditor.ActiveMap.ActiveOverlay);
            RefreshArgs refreshArgs = new RefreshArgs(GisEditor.ActiveMap, RefreshArgsDescription.AddLayerGroupCommandDescription);

            GisEditor.UIManager.BeginRefreshPlugins(refreshArgs);
            LayerOverlay overlay = GisEditor.ActiveMap.ActiveOverlay as LayerOverlay;

            if (overlay != null)
            {
                overlay.Invalidate();
            }
        }