public static bool CheckIsVisibleZoomLevel(LayerListItem zoomLevelEntity)
        {
            ZoomLevel zoomLevel = zoomLevelEntity.ConcreteObject as ZoomLevel;

            if (zoomLevel != null && GisEditor.ActiveMap != null)
            {
                int    applyToZoomLevelIndex = (int)zoomLevel.ApplyUntilZoomLevel;
                double upperScale            = zoomLevel.Scale;
                double lowerScale            = GisEditor.ActiveMap.ZoomLevelSet.GetZoomLevels()[applyToZoomLevelIndex - 1].Scale;
                return(GisEditor.ActiveMap.CurrentScale <= upperScale && GisEditor.ActiveMap.CurrentScale >= lowerScale);
            }
            else
            {
                return(false);
            }
        }
Example #2
0
        /// <summary>
        /// This method gets a hierarchy object to build the layer list tree.
        /// </summary>
        /// <param name="layer">The layer list item to build the layer list tree.</param>
        /// <returns></returns>
        protected virtual LayerListItem GetLayerListItemCore(Layer layer)
        {
            var layerListItem = new LayerListItem(layer);

            layerListItem.SideImage = new Image {
                Source = new BitmapImage(new Uri("pack://application:,,,/GisEditorInfrastructure;component/Images/arrowDown.png", UriKind.Absolute))
            };
            layerListItem.HighlightBackgroundBrush = GetDefaultLayerBackground();
            layerListItem.ConcreteObject           = layer;
            layerListItem.CheckBoxVisibility       = Visibility.Visible;
            layerListItem.IsChecked        = layer.IsVisible;
            layerListItem.Name             = layer.Name;
            layerListItem.PropertyChanged += LayerIsVisiblePropertyChanged;
            SetStyleSampleImage(layer, layerListItem);
            return(layerListItem);
        }
        private LayerListItem GetLayerListItemForOverlay(Overlay overlay)
        {
            var overlayListItem = new LayerListItem();

            overlayListItem.ConcreteObject              = overlay;
            overlayListItem.CheckBoxVisibility          = Visibility.Visible;
            overlayListItem.ChildrenContainerVisibility = Visibility.Visible;
            overlayListItem.IsChecked = overlay.IsVisible;
            overlayListItem.Name      = overlay.Name;
            overlayListItem.HighlightBackgroundBrush = GetDefaultLayerGroupBackground();
            overlayListItem.PropertyChanged         += new System.ComponentModel.PropertyChangedEventHandler(OverlayItemPropertyChanged);
            if (selectedLayerListItem != null && overlay == selectedLayerListItem.ConcreteObject)
            {
                overlayListItem.HighlightBackgroundBrush = new SolidColorBrush(Colors.LightBlue);
            }
            return(overlayListItem);
        }
        private void ZoomToDataMenuItem_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            MenuItem      menuItem      = (MenuItem)sender;
            LayerListItem layerListItem = (LayerListItem)menuItem.Tag;
            LayerListItem tempItem      = layerListItem;

            while (!(tempItem.ConcreteObject is FeatureLayer))
            {
                tempItem = tempItem.Parent;
            }

            FeatureLayer selectedLayer = tempItem.ConcreteObject as FeatureLayer;

            if (selectedLayer != null)
            {
                selectedLayer.Open();
                RectangleShape      bbox    = selectedLayer.GetBoundingBox();
                Collection <string> filters = ((Styles.Style)layerListItem.ConcreteObject).Filters;

                Collection <string> returningColumnNames = ((Styles.Style)layerListItem.ConcreteObject).GetRequiredColumnNames();
                returningColumnNames = GetRequiredColumnNamesForLink(returningColumnNames, selectedLayer.FeatureSource);

//                IEnumerable<string> allColumns = selectedLayer.FeatureSource.GetColumns().Select(c => c.ColumnName);
//                Collection<Feature> allDataFeatures = selectedLayer.FeatureSource.GetFeaturesForDrawing(bbox, GisEditor.ActiveMap.Width,
//GisEditor.ActiveMap.Height, allColumns, filters);

                Collection <Feature> features = selectedLayer.FeatureSource.GetFeaturesForDrawing(bbox, GisEditor.ActiveMap.Width,
                                                                                                  GisEditor.ActiveMap.Height, returningColumnNames);

                //List<string> linkSourceNameStarts = GetLinkSourceNameStarts(selectedLayer.FeatureSource.LinkSources);
                //if (filters != null && filters.Count() > 0 && CheckHasLinkColumns(returningColumnNames, filters, linkSourceNameStarts))
                //{
                //    List<Feature> resultFeatureList = features.Where(f => CheckIsValidLinkFeature(f, linkSourceNameStarts)).ToList();
                //    features = new Collection<Feature>(resultFeatureList);
                //}

                Collection <Feature> resultFeatures = features;//new Collection<Feature>(allDataFeatures.Where(f => features.Any(t => t.Id.Equals(f.Id))).ToList());

                if (resultFeatures.Count > 0)
                {
                    RectangleShape boundingBox = ExtentHelper.GetBoundingBoxOfItems(resultFeatures);
                    GisEditor.ActiveMap.CurrentExtent = boundingBox;
                    GisEditor.ActiveMap.Refresh();
                }
            }
        }
        private void ExportMenuItem_Click(object sender, RoutedEventArgs e)
        {
            MenuItem      menuItem      = (MenuItem)sender;
            LayerListItem layerListItem = (LayerListItem)menuItem.Tag;
            LayerListItem tempItem      = layerListItem;

            while (!(tempItem.ConcreteObject is FeatureLayer))
            {
                tempItem = tempItem.Parent;
            }
            FeatureLayer selectedLayer = tempItem.ConcreteObject as FeatureLayer;

            if (selectedLayer != null)
            {
                selectedLayer.Open();
                RectangleShape      bbox    = selectedLayer.GetBoundingBox();
                Collection <string> filters = ((Styles.Style)layerListItem.ConcreteObject).Filters;

                Collection <string> returningColumnNames = ((Styles.Style)layerListItem.ConcreteObject).GetRequiredColumnNames();
                returningColumnNames = GetRequiredColumnNamesForLink(returningColumnNames, selectedLayer.FeatureSource);

                Collection <FeatureSourceColumn> featureColumns = selectedLayer.FeatureSource.GetColumns();
                IEnumerable <string>             allColumns     = featureColumns.Select(c => c.ColumnName);

                ////LINK:
                //Collection<Feature> allDataFeatures = selectedLayer.FeatureSource.GetFeaturesForDrawing(bbox, GisEditor.ActiveMap.Width, GisEditor.ActiveMap.Height, allColumns, filters);

                ////LINK:
                //Collection<Feature> features = selectedLayer.FeatureSource.GetFeaturesForDrawing(bbox, GisEditor.ActiveMap.Width, GisEditor.ActiveMap.Height, returningColumnNames, filters);
                Collection <Feature> features = selectedLayer.FeatureSource.GetFeaturesForDrawing(bbox, GisEditor.ActiveMap.Width, GisEditor.ActiveMap.Height, returningColumnNames);

                ////LINK:
                //List<string> linkSourceNameStarts = GetLinkSourceNameStarts(selectedLayer.FeatureSource.LinkSources);
                //if (filters != null && filters.Count() > 0 && CheckHasLinkColumns(returningColumnNames, filters, linkSourceNameStarts))
                //{
                //    List<Feature> resultFeatureList = features.Where(f => CheckIsValidLinkFeature(f, linkSourceNameStarts)).ToList();
                //    features = new Collection<Feature>(resultFeatureList);
                //}

                Collection <Feature> resultFeatures = features; // new Collection<Feature>(allDataFeatures.Where(f => features.Any(t => t.Id.Equals(f.Id))).ToList());

                FeatureLayerPlugin layerPlugin = (FeatureLayerPlugin)GisEditor.LayerManager.GetLayerPlugins(selectedLayer.GetType()).FirstOrDefault();

                ExportToShapeFile(resultFeatures, featureColumns, layerPlugin, selectedLayer.FeatureSource.GetFirstFeaturesWellKnownType());
            }
        }
        private LayerListItem GetLayerListItemForMap(GisEditorWpfMap wpfMap)
        {
            var           mapElementItem  = new LayerListItem();
            LayerListItem overlayListItem = null;

            foreach (var overlay in wpfMap.Overlays.Reverse().Concat(wpfMap.InteractiveOverlays))
            {
                overlayListItem = GetLayerListItemFromUIPlugins(overlay);
                if (overlayListItem != null)
                {
                    overlayListItem.Parent = mapElementItem;
                    LayerOverlay layerOverlay = overlay as LayerOverlay;
                    if (layerOverlay != null)
                    {
                        foreach (var layer in layerOverlay.Layers.Reverse())
                        {
                            var layerListItem = GetLayerListItemForLayer(layer);
                            if (layerListItem != null)
                            {
                                if (SelectedLayerListItem != null && layer == SelectedLayerListItem.ConcreteObject)
                                {
                                    layerListItem.HighlightBackgroundBrush = new SolidColorBrush(Colors.LightBlue);
                                    SelectedLayerListItem = layerListItem;
                                }
                                if (wpfMap.FeatureLayerEditOverlay != null && wpfMap.FeatureLayerEditOverlay.EditTargetLayer == layer && layer.IsVisible)
                                {
                                    layerListItem.WarningImages.Add(
                                        new Image {
                                        Source = new BitmapImage(new Uri("pack://application:,,,/GisEditorPluginCore;component/Images/sketchTools.png", UriKind.Absolute)), Width = 14, Height = 14, ToolTip = "In Editing", Name = "InEditing"
                                    });
                                }
                                layerListItem.Parent = overlayListItem;
                                overlayListItem.Children.Add(layerListItem);
                            }
                        }
                    }
                    mapElementItem.Children.Add(overlayListItem);
                }
            }
            return(mapElementItem);
        }
        public ObservableCollection <MenuItem> GetLayerListContextMenuItems(LayerListItem layerListItem)
        {
            ObservableCollection <MenuItem> menuItems = null;

            GettingLayerListItemContextMenuItemsEventArgs gettingLayerListItemContextMenuItemsEventArgs = new GettingLayerListItemContextMenuItemsEventArgs(null);

            OnGettingLayerListItemContextMenuItems(gettingLayerListItemContextMenuItemsEventArgs);
            if (!gettingLayerListItemContextMenuItemsEventArgs.Cancel)
            {
                menuItems = GetLayerListContextMenuItemsCore(layerListItem);

                GottenLayerListItemContextMenuItemsEventArgs gottenLayerListItemContextMenuItemsEventArgs = new GottenLayerListItemContextMenuItemsEventArgs(menuItems);
                OnGottenLayerListItemContextMenuItems(gottenLayerListItemContextMenuItemsEventArgs);

                IEnumerable <MenuItem> resultMenuItems = gettingLayerListItemContextMenuItemsEventArgs.MenuItems.Concat(gottenLayerListItemContextMenuItemsEventArgs.MenuItems);
                if (layerListItem.ConcreteObject is Layer)
                {
                    menuItems = OrderMenuItems(new ObservableCollection <MenuItem>(resultMenuItems), (Layer)layerListItem.ConcreteObject);
                }
                else
                {
                    menuItems = new ObservableCollection <MenuItem>(resultMenuItems);
                }
            }
            else
            {
                menuItems = gettingLayerListItemContextMenuItemsEventArgs.MenuItems;
            }

            if (menuItems != null)
            {
                MenuItem menuItem = menuItems.FirstOrDefault(m => m.Header.Equals(GisEditor.LanguageManager.GetStringResource("MapElementsListPluginProperties")));
                if (menuItem != null)
                {
                    menuItems.Remove(menuItem);
                    menuItems.Add(menuItem);
                }
            }

            return(menuItems);
        }
        protected virtual ObservableCollection <MenuItem> GetLayerListContextMenuItemsCore(LayerListItem layerListItem)
        {
            ObservableCollection <MenuItem> menuItems = new ObservableCollection <MenuItem>();
            var args = new GetLayerListItemContextMenuParameters(layerListItem);

            foreach (var item in layerListItem.ContextMenuItems)
            {
                menuItems.Add(item);
            }
            if (layerListItem.ConcreteObject is Layer)
            {
                var layerPlugin = GisEditor.LayerManager.GetLayerPlugins(layerListItem.ConcreteObject.GetType()).FirstOrDefault();
                if (layerPlugin != null)
                {
                    foreach (var item in layerPlugin.GetLayerListItemContextMenuItems(args))
                    {
                        menuItems.Add(item);
                    }
                }
            }
            else if (layerListItem.ConcreteObject is Styles.Style)
            {
                var stylePlugin = GisEditor.StyleManager.GetStylePluginByStyle((Styles.Style)layerListItem.ConcreteObject);
                if (stylePlugin != null)
                {
                    foreach (var item in stylePlugin.GetLayerListItemContextMenuItems(args))
                    {
                        menuItems.Add(item);
                    }
                }
                Styles.Style style = (Styles.Style)layerListItem.ConcreteObject;
                if (style is CompositeStyle)
                {
                    CompositeStyle compositeStyle = (CompositeStyle)style;
                    if (compositeStyle.Styles.Count == 1 && !(compositeStyle.Styles[0] is FilterStyle) && compositeStyle.Styles[0].Filters != null && compositeStyle.Styles[0].Filters.Count > 0)
                    {
                        MenuItem menuItem = GetFilteredDataMenuItem(layerListItem);
                        menuItems.Add(menuItem);

                        MenuItem exportMenuItem = GetExportFilterMenuItem(layerListItem);
                        menuItems.Add(exportMenuItem);

                        MenuItem zoomtoMenuItem = GetZoomToFilteredDataMenuItem(layerListItem);
                        menuItems.Add(zoomtoMenuItem);
                    }
                }
                else if (!(style is FilterStyle) && style.Filters != null && style.Filters.Count > 0)
                {
                    MenuItem menuItem = GetFilteredDataMenuItem(layerListItem);
                    menuItems.Add(menuItem);

                    MenuItem zoomtoMenuItem = GetZoomToFilteredDataMenuItem(layerListItem);
                    menuItems.Add(zoomtoMenuItem);
                }
            }

            foreach (var uiPlugin in GisEditor.UIManager.GetActiveUIPlugins())
            {
                var tmpItems = uiPlugin.GetLayerListItemContextMenuItems(args);
                if (tmpItems != null && tmpItems.Count > 0)
                {
                    menuItems.Add(new MenuItem {
                        Header = "--"
                    });
                    foreach (var tmItem in tmpItems)
                    {
                        menuItems.Add(tmItem);
                    }
                }
            }

            return(menuItems);
        }
        public static void EditStyle(LayerListItem selectedLayerListItem)
        {
            var componentStyleItem = LayerListHelper.FindViewModelInTree <CompositeStyle>(selectedLayerListItem) as StyleLayerListItem;

            if (componentStyleItem != null)
            {
                var componentStyle = componentStyleItem.ConcreteObject as CompositeStyle;
                var styleArguments = new StyleBuilderArguments();
                styleArguments.FeatureLayer = componentStyleItem.Parent.ConcreteObject as FeatureLayer;
                var featureLayerPlugin = GisEditor.LayerManager.GetLayerPlugins(styleArguments.FeatureLayer.GetType()).FirstOrDefault() as FeatureLayerPlugin;
                if (featureLayerPlugin != null)
                {
                    styleArguments.AvailableStyleCategories = GetStyleCategoriesByFeatureLayer(styleArguments.FeatureLayer);
                    int from = 1;
                    int to   = GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.Where(z => z.GetType() == typeof(ZoomLevel)).Count();
                    if (!string.IsNullOrEmpty(componentStyleItem.ZoomLevelRange))
                    {
                        var array = componentStyleItem.ZoomLevelRange.Split(" to ".ToArray(), StringSplitOptions.RemoveEmptyEntries);
                        if (array.Length == 2)
                        {
                            int.TryParse(array[0].Replace("(", "").Trim(), out from);
                            int.TryParse(array[1].Replace(")", "").Trim(), out to);
                        }
                    }

                    styleArguments.FromZoomLevelIndex = from;
                    styleArguments.ToZoomLevelIndex   = to;
                    styleArguments.AppliedCallback    = new Action <StyleBuilderResult>((styleResults) =>
                    {
                        if (!styleResults.Canceled)
                        {
                            var resultStyle = styleResults.CompositeStyle as CompositeStyle;
                            var count       = GisEditor.ActiveMap.ZoomLevelSet.GetZoomLevels().Where(z => z.GetType() == typeof(ZoomLevel)).Count();
                            for (int i = 0; i < count; i++)
                            {
                                var customStyles = styleArguments.FeatureLayer.ZoomLevelSet.CustomZoomLevels[i].CustomStyles;
                                if (i >= styleResults.FromZoomLevelIndex - 1 && i < styleResults.ToZoomLevelIndex)
                                {
                                    if (!customStyles.Contains(componentStyle))
                                    {
                                        customStyles.Add(componentStyle);
                                    }
                                    componentStyle.Styles.Clear();
                                    componentStyle.Name = resultStyle.Name;
                                    foreach (var item in resultStyle.Styles)
                                    {
                                        componentStyle.Styles.Add(item);
                                    }
                                }
                                else
                                {
                                    customStyles.Remove(componentStyle);
                                }
                            }
                            if (styleArguments.FeatureLayer.IsVisible)
                            {
                                foreach (var overlay in GisEditor.ActiveMap.GetOverlaysContaining(styleArguments.FeatureLayer))
                                {
                                    overlay.Invalidate();
                                }
                            }
                            GisEditor.UIManager.InvokeRefreshPlugins(new RefreshArgs(styleResults, RefreshArgsDescriptions.EditStyleDescription));
                        }
                    });
                    var styleItems = new Collection <StyleLayerListItem>();
                    foreach (var style in componentStyle.Styles)
                    {
                        var item = GisEditor.StyleManager.GetStyleLayerListItem(style);
                        if (item != null)
                        {
                            styleItems.Add(item);
                        }
                    }

                    var clonedStyleItems     = new Collection <StyleLayerListItem>();
                    var clonedCompositeStyle = componentStyle.CloneDeep() as CompositeStyle;

                    styleArguments.StyleToEdit = clonedCompositeStyle;

                    foreach (var style in clonedCompositeStyle.Styles)
                    {
                        var item = GisEditor.StyleManager.GetStyleLayerListItem(style);
                        if (item != null)
                        {
                            clonedStyleItems.Add(item);
                        }
                    }

                    object selectedClonedObject = FindSelectedObject(styleItems.ToList(), clonedStyleItems.ToList(), selectedLayerListItem.ConcreteObject);
                    styleArguments.FillRequiredColumnNames();
                    styleArguments.SelectedConcreteObject = selectedClonedObject;
                    var styleBuilder = GisEditor.StyleManager.GetStyleBuiderUI(styleArguments);
                    //styleBuilder.StyleBuilderArguments = styleArguments;
                    //var styleResult = GisEditor.StyleManager.EditStyle(styleArguments, selectedClonedObject);
                    if (styleBuilder.ShowDialog().GetValueOrDefault())
                    {
                        styleArguments.AppliedCallback(styleBuilder.StyleBuilderResult);
                    }
                }
            }
        }
 public static LayerListItem FindViewModelInTree <T>(LayerListItem layerListItem) where T : class
 {
     return(FindViewModelInTree(layerListItem, new Func <object, bool>((actualMapElement) => actualMapElement is T)));
 }
Example #11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="GetLayerListItemContextMenuParameters" /> class.
 /// </summary>
 /// <param name="layerListItem">The layer list item.</param>
 public GetLayerListItemContextMenuParameters(LayerListItem layerListItem)
 {
     this.layerListItem = layerListItem;
 }
Example #12
0
 public SelectedLayerListItemChangedLayerListManagerEventArgs(LayerListItem newValue, LayerListItem oldValue)
 {
     NewValue = newValue;
     OldValue = oldValue;
 }