예제 #1
0
        protected override void RefreshCore(GisEditorWpfMap currentMap, RefreshArgs refreshArgs)
        {
            measureGroup.SynchronizeState(currentMap);
            MeasureTrackInteractiveOverlay measurementOverlay = null;

            if (GisEditor.ActiveMap != null && GisEditor.ActiveMap.InteractiveOverlays.Contains("MeasurementOverlay"))
            {
                measurementOverlay = GisEditor.ActiveMap.InteractiveOverlays["MeasurementOverlay"] as MeasureTrackInteractiveOverlay;
                if (measurementOverlay != null)
                {
                    RenderMode renderMode = MeasureSetting.Instance.UseGdiPlusInsteadOfDrawingVisual ? RenderMode.GdiPlus : RenderMode.DrawingVisual;
                    if (measurementOverlay.RenderMode != renderMode)
                    {
                        measurementOverlay.RenderMode = renderMode;
                    }
                    switch (measurementOverlay.TrackMode)
                    {
                    case TrackMode.Point:
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.DrawPoint;
                        break;

                    case TrackMode.Rectangle:
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.DrawRectangle;
                        break;

                    case TrackMode.Square:
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.DrawSqure;
                        break;

                    case TrackMode.Ellipse:
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.DrawEllipse;
                        break;

                    case TrackMode.Circle:
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.DrawCircle;
                        break;

                    case TrackMode.Polygon:
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.DrawPolygon;
                        break;

                    case TrackMode.Line:
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.DrawLine;
                        break;

                    case TrackMode.Custom:
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.Normal;
                        break;
                    }

                    if (measurementOverlay.MeasureCustomeMode == MeasureCustomeMode.Move &&
                        measurementOverlay.TrackMode == TrackMode.Custom)
                    {
                        GisEditor.ActiveMap.Cursor = GisEditorCursors.Cross;
                    }
                }
            }
        }
        private static void RemoveOverlay()
        {
            bool needRefresh = false;

            if (GisEditor.LayerListManager.SelectedLayerListItems.Count > 0)
            {
                foreach (var overlayEntity in GisEditor.LayerListManager.SelectedLayerListItems)
                {
                    var overlay = overlayEntity.ConcreteObject as Overlay;
                    if (overlay != null)
                    {
                        RemoveOneOverlay(overlay, ref needRefresh);
                    }
                }
            }

            else if (GisEditor.LayerListManager.SelectedLayerListItem != null && GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject is Overlay)
            {
                var removingOverlay = GisEditor.LayerListManager.SelectedLayerListItem.ConcreteObject as Overlay;
                if (removingOverlay != null)
                {
                    MeasureTrackInteractiveOverlay measureTrackInteractiveOverlay = removingOverlay as MeasureTrackInteractiveOverlay;
                    if (measureTrackInteractiveOverlay != null)
                    {
                        if (!measureTrackInteractiveOverlay.IsVisible)
                        {
                            measureTrackInteractiveOverlay.IsVisible = true;
                        }
                        measureTrackInteractiveOverlay.ShapeLayer.MapShapes.Clear();
                        measureTrackInteractiveOverlay.History.Clear();
                        measureTrackInteractiveOverlay.Refresh();
                        GisEditor.UIManager.BeginRefreshPlugins(new RefreshArgs(measureTrackInteractiveOverlay, RefreshArgsDescription.ClearCommandDescription));
                    }
                    else
                    {
                        RemoveOneOverlay(removingOverlay, ref needRefresh);
                    }
                }
            }

            if (needRefresh)
            {
                GisEditor.UIManager.BeginRefreshPlugins(new RefreshArgs(GisEditor.LayerListManager.SelectedLayerListItems, RefreshArgsDescription.GetRemoveOverlayMenuItemDescription));
            }
        }
        private static IEnumerable <LayerListItem> CollectSubEntities(MeasureTrackInteractiveOverlay trackOverlay)
        {
            foreach (var item in trackOverlay.ShapeLayer.MapShapes)
            {
                var mapShape = item.Value;
                if (!mapShape.Feature.ColumnValues.ContainsKey("DisplayName"))
                {
                    mapShape.Feature.ColumnValues["DisplayName"] = mapShape.Feature.Id;
                }
                var subEntity = new LayerListItem
                {
                    Name                     = mapShape.Feature.ColumnValues["DisplayName"],
                    ConcreteObject           = mapShape,
                    ExpandButtonVisibility   = Visibility.Collapsed,
                    HighlightBackgroundBrush = new SolidColorBrush(Colors.White)
                };

                subEntity.ContextMenuItems.Add(LayerListMenuItemHelper.GetRenameMenuItem());
                subEntity.ContextMenuItems.Add(LayerListMenuItemHelper.GetRemoveFeatureMenuItem());
                StopRefreshProcess(() =>
                {
                    subEntity.IsChecked = mapShape.ZoomLevels.ZoomLevel01.IsActive;
                });

                var          wkt          = mapShape.Feature.GetWellKnownType();
                Styles.Style drawingStyle = null;
                if (wkt == WellKnownType.Line || wkt == WellKnownType.Multiline)
                {
                    drawingStyle = mapShape.ZoomLevels.ZoomLevel01.CustomStyles.OfType <LineStyle>().FirstOrDefault();
                }
                else
                {
                    drawingStyle = mapShape.ZoomLevels.ZoomLevel01.CustomStyles.OfType <AreaStyle>().FirstOrDefault();
                }
                subEntity.PreviewImage = new Image {
                    Source = drawingStyle.GetPreviewImage(26, 26)
                };

                subEntity.PropertyChanged += new PropertyChangedEventHandler(SubEntity_PropertyChanged);

                yield return(subEntity);
            }
        }
예제 #4
0
        private ObservedCommand GetExportMeasuredFeaturesCommand()
        {
            return(new ObservedCommand(() =>
            {
                MeasureTrackInteractiveOverlay measurementOverlay = null;
                if (GisEditor.ActiveMap != null && GisEditor.ActiveMap.InteractiveOverlays.Contains("MeasurementOverlay"))
                {
                    measurementOverlay = GisEditor.ActiveMap.InteractiveOverlays["MeasurementOverlay"] as MeasureTrackInteractiveOverlay;
                }

                if (measurementOverlay != null)
                {
                    ExportWizardWindow window = new ExportWizardWindow(ExportMode.ExportMeasuredFeatures, measurementOverlay);
                    if (window.ShowDialog().Value)
                    {
                        RunTask(window);
                    }
                }
            }, () => GisEditor.ActiveMap != null));
        }
        // We first save it as raster file to TEMP folder and then launch it
        private static void OpenGoogleEarthItemClick(object sender, RoutedEventArgs e)
        {
            List <FeatureLayer> featureLayers = GisEditor.ActiveMap.GetFeatureLayers(true).Select(l =>
            {
                FeatureLayer featureLayer = null;
                lock (l)
                {
                    if (l.IsOpen)
                    {
                        l.Close();
                    }
                    featureLayer = (FeatureLayer)l.CloneDeep();
                    l.Open();
                }
                return(featureLayer);
            }).ToList();

            AnnotationTrackInteractiveOverlay annotationOverlay = GisEditor.ActiveMap.InteractiveOverlays.OfType <AnnotationTrackInteractiveOverlay>().FirstOrDefault();

            if (annotationOverlay != null && annotationOverlay.TrackShapeLayer.InternalFeatures.Count > 0)
            {
                featureLayers.Add(annotationOverlay.TrackShapeLayer);
            }
            MeasureTrackInteractiveOverlay measureOverlay = GisEditor.ActiveMap.InteractiveOverlays.OfType <MeasureTrackInteractiveOverlay>().FirstOrDefault();

            if (measureOverlay != null && measureOverlay.ShapeLayer.MapShapes.Count > 0)
            {
                measureOverlay.TrackShapeLayer.Close();
                InMemoryFeatureLayer featureLayer = (InMemoryFeatureLayer)measureOverlay.TrackShapeLayer.CloneDeep();
                measureOverlay.TrackShapeLayer.Open();
                foreach (var item in measureOverlay.ShapeLayer.MapShapes)
                {
                    featureLayer.InternalFeatures.Add(item.Value.Feature);
                }
                featureLayers.Add(featureLayer);
            }

            string installedPath = ((MenuItem)sender).Tag.Equals("GoogleEarth") ? GetGoogleEarthInstalledPath() : GetGoogleEarthProInstalledPath();

            GisEditor.ActiveMap.OpenInGoogleEarth(installedPath, featureLayers.ToArray());
        }
        /// <summary>
        /// MeasureOptionViewModel
        /// MeasureOptionUserControl
        /// </summary>
        public MeasureSetting()
        {
            allowCollectFixedElements = true;

            MeasurementStyle = MeasureTrackInteractiveOverlay.GetInitialCompositeStyle();
        }