예제 #1
0
        public static void SetDrag(Map map, Point point, Point origin, Location mouseCenter)
        {
            MouseDragBehavior behavior = (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift ?
                                         map.MouseShiftDragMode : map.MouseDragMode;

            switch (behavior)
            {
            case MouseDragBehavior.Drag:
            {
                ICoordinateService coordinateService = CoordinateServiceProvider.GetService(map);
                Point pixelCenter = coordinateService.LogicalToPixel(map.SpatialReference.GeographicToLogical(mouseCenter));
                pixelCenter.X += origin.X - point.X;
                pixelCenter.Y += origin.Y - point.Y;

                Point offset          = map.MultiScaleImage.ViewportOrigin;
                Size  viewLogicalSize = new Size(map.MultiScaleImage.ViewportWidth,
                                                 map.MultiScaleImage.ViewportWidth * map.MultiScaleImage.ActualHeight / map.MultiScaleImage.ActualWidth);

                double pixelFactorX = viewLogicalSize.Width / map.MultiScaleImage.ActualWidth;
                double pixelFactorY = viewLogicalSize.Height / map.MultiScaleImage.ActualHeight;
                Point  logical      = new Point((pixelCenter.X * pixelFactorX) + offset.X, (pixelCenter.Y * pixelFactorY) + offset.Y);
                map.Center = coordinateService.LogicalToGeographic(logical);
            }
            break;

            case MouseDragBehavior.Select:
            {
                map.MouseControl.SelectBoxLocation = new Point(Math.Min(origin.X, point.X), Math.Min(origin.Y, point.Y));
                var newSize = new Size(Math.Abs(origin.X - point.X), Math.Abs(origin.Y - point.Y));
                map.MouseControl.SelectBoxSize = newSize;
            }
            break;
            }
        }