Пример #1
0
        private void MouseMoved(object sender, MouseMovedTrackInteractiveOverlayEventArgs e)
        {
            //Gets the shape as it is being tracked and gets its properties to be displayed in labels og groupbox
            AreaBaseShape areaBaseShape = (AreaBaseShape)winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures[0].GetShape();
            double        Perimeter     = Math.Round(areaBaseShape.GetPerimeter(winformsMap1.MapUnit, DistanceUnit.Kilometer));
            double        Area          = Math.Round(areaBaseShape.GetArea(winformsMap1.MapUnit, AreaUnit.SquareKilometers));

            lblPerimeter.Text = String.Format("{0:0,0}", Perimeter) + " km";
            lblArea.Text      = String.Format("{0:0,0}", Area) + " km2";

            //Sets the location (in screen coordinates) of the groupbox according to last moved vertex of the tracked shape (in world coordinates).
            ScreenPointF screenPointF = ThinkGeo.MapSuite.Core.ExtentHelper.ToScreenCoordinate(winformsMap1.CurrentExtent, e.MovedVertex.X, e.MovedVertex.Y, winformsMap1.Width, winformsMap1.Height);

            groupBoxInfo.Location = new Point((int)screenPointF.X + 30, (int)screenPointF.Y + 10);
        }
        protected override void OnMouseMoved(MouseMovedTrackInteractiveOverlayEventArgs e)
        {
            base.OnMouseMoved(e);

            var trackShape = GetTrackingShape();

            if (!isShiftKeyDown && trackShape != null && (TrackMode == TrackMode.Polygon || TrackMode == TrackMode.Line) &&
                editOverlay != null && editOverlay.SnappingLayers.Count > 0)
            {
                lock (OverlayCanvas.Children)
                {
                    var snappingCircle = OverlayCanvas.Children.OfType <System.Windows.Shapes.Ellipse>().FirstOrDefault();
                    if (snappingCircle == null)
                    {
                        snappingCircle = new System.Windows.Shapes.Ellipse();
                        snappingCircle.IsHitTestVisible    = false;
                        snappingCircle.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
                        snappingCircle.VerticalAlignment   = System.Windows.VerticalAlignment.Top;
                        snappingCircle.Stroke          = new SolidColorBrush(Colors.Black);
                        snappingCircle.StrokeThickness = 1;
                        OverlayCanvas.Children.Add(snappingCircle);
                    }

                    var snappingDistance     = editOverlay.SnappingDistance;
                    var snappingDistanceUnit = editOverlay.SnappingDistanceUnit;
                    var snappingScreenPoint  = ExtentHelper.ToScreenCoordinate(MapArguments.CurrentExtent, e.MovedVertex.X, e.MovedVertex.Y, (float)MapArguments.ActualWidth, (float)MapArguments.ActualHeight);

                    try
                    {
                        SnappingAdapter calc         = SnappingAdapter.Convert(snappingDistance, snappingDistanceUnit, MapArguments, e.MovedVertex);
                        var             snappingArea = new PointShape(e.MovedVertex.X, e.MovedVertex.Y)
                                                       .Buffer(calc.Distance, editOverlay.MapArguments.MapUnit, calc.DistanceUnit)
                                                       .GetBoundingBox();

                        var snappingScreenSize = Math.Max(snappingArea.Width, snappingArea.Height) / MapArguments.CurrentResolution;
                        snappingCircle.Width  = snappingScreenSize;
                        snappingCircle.Height = snappingScreenSize;
                        snappingCircle.Margin = new System.Windows.Thickness(snappingScreenPoint.X - snappingScreenSize * .5, snappingScreenPoint.Y - snappingScreenSize * .5, 0, 0);
                    }
                    catch
                    { }
                }

                //PointShape snappedPoint = GetSnappingPoint(e.MovedVertex, e.AffectedFeature);
                //if (snappedPoint != null)
                //{
                //    e.MovedVertex = new Vertex(snappedPoint);
                //    lock (OverlayCanvas.Children)
                //    {
                //        var snappingCircle = OverlayCanvas.Children.OfType<System.Windows.Shapes.Ellipse>().FirstOrDefault();
                //        if (snappingCircle == null)
                //        {
                //            snappingCircle = new System.Windows.Shapes.Ellipse();
                //            snappingCircle.IsHitTestVisible = false;
                //            snappingCircle.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
                //            snappingCircle.VerticalAlignment = System.Windows.VerticalAlignment.Top;
                //            snappingCircle.Stroke = new SolidColorBrush(Colors.Black);
                //            snappingCircle.StrokeThickness = 1;
                //            OverlayCanvas.Children.Add(snappingCircle);
                //        }

                //        var snappingDistance = editOverlay.SnappingDistance;
                //        var snappingDistanceUnit = editOverlay.SnappingDistanceUnit;
                //        var snappingScreenPoint = ExtentHelper.ToScreenCoordinate(MapArguments.CurrentExtent, snappedPoint, (float)MapArguments.ActualWidth, (float)MapArguments.ActualHeight);

                //        SnappingAdapter calc = SnappingAdapter.Convert(snappingDistance, snappingDistanceUnit, MapArguments, e.MovedVertex);
                //        var snappingArea = snappedPoint.Buffer(calc.Distance, editOverlay.MapArguments.MapUnit, calc.DistanceUnit).GetBoundingBox();
                //        var snappingScreenSize = Math.Max(snappingArea.Width, snappingArea.Height) / MapArguments.CurrentResolution;
                //        snappingCircle.Width = snappingScreenSize;
                //        snappingCircle.Height = snappingScreenSize;
                //        snappingCircle.Margin = new System.Windows.Thickness(snappingScreenPoint.X - snappingScreenSize * .5, snappingScreenPoint.Y - snappingScreenSize * .5, 0, 0);
                //    }
                //}
            }
        }