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); }
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]); } }
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(); } }