Увеличить холст в WPF C # - PullRequest
0 голосов
/ 08 декабря 2018

Я практически реализовал Canvas и ToolBar (в WPF C #) и редактор векторной графики, такой как Paint.У меня проблема с реализацией Zoom.Как я понимаю, Zoom:

0) Я выбираю инструмент ZoomTool;
1) Я выбираю точку на холсте;
2) Я нажимаю на нее, и вся необходимая работа происходит здесь:

1.Перемещение (смещение) выбранной точки в центр холста;

2.Увеличить в 2 раза (как пример) относительно центра

Проблема заключается в выполнении этой работы (сдвиг и увеличение), как это сделать? введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Правильный ответ для каждого MouseClick:

        public override void MouseDown(Point mousePosition)
        {
            double valueZoom = 2.0;
            Point pointDirection = new Point(0.0, 0.0);
            Creator.Shifting(Point.Subtract(pointDirection, mousePosition));
            Creator.Zooming(valueZoom);
        }

И есть в основном классе:

    public static int scaleZoom = 2;
    public static Vector offsetPosition = new Vector(0.0, 0.0);
    public static int counterZoom = 0;

    public static void Zooming(double scaleZoom)
    {
        foreach (var figure in Figures)
        {
            for (int j = 0; j < figure.coordinates.Count; j++)
            {
                figure.coordinates[j] = new Point(
                    figure.coordinates[j].X * scaleZoom,
                    figure.coordinates[j].Y * scaleZoom
                );
            }
        }
    }

    public static void Shifting(Vector delta)
    {
        offsetPosition = delta / scaleZoom;
        foreach (var figure in Figures)
        {
            for (int j = 0; j < figure.coordinates.Count; j++)
            {
                figure.coordinates[j] = Point.Add(figure.coordinates[j], offsetPosition);
            }
        }

    }
0 голосов
/ 08 декабря 2018

Это мой код:

class RecZoomTool : Tool
{
        public RecZoomTool()
        {
        }

        public override void MouseDown(Point mousePosition)
        {
            Point pointDirection = new Point(Creator.CanvasWidth / 2, Creator.CanvasHeight /2);
            Creator.ShearingZoom(Point.Subtract(pointDirection, mousePosition));
            Creator.Zooming(2);
        }
}

тогда --->

    public static void Zooming(double delta)
    {
        foreach (var figure in Figures)
        {
            for (int j = 0; j < figure.coordinates.Count; j++)
            {
                figure.coordinates[j] = new Point(
                    figure.coordinates[j].X * scaleZoom,
                    figure.coordinates[j].Y * scaleZoom
                );
            }
        }

    //    scaleZoom += delta;
    }
    public static void ShearingZoom(Point dPoint, Point mPoint)
    {
        foreach (var figure in Figures)
        {
            Vector delta = Point.Subtract(mPoint, dPoint);
            for (int j = 0; j < figure.coordinates.Count; j++)
            {
                figure.coordinates[j] = new Point(dPoint.X, dPoint.Y);
                //counterZoom++;
                //delta = Point.Subtract(figure.coordinates[j], dPoint);
                figure.coordinates[j] = Point.Add(figure.coordinates[j], delta);
            }

            offsetPosition += delta;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...