簡體   English   中英

在WPF C#中放大畫布

[英]Zoom on Canvas in WPF C#

我幾乎實現了Canvas和ToolBar(在WPF C#中)以及類似於Paint的矢量圖形編輯器。 我在使用Zoom時遇到問題。 據我了解的縮放:

0)我選擇工具ZoomTool;
1)我在畫布上選擇一個點;
2)我點擊它,所有必要的工作在這里進行:

1.將所選點移動(移動)到“畫布”的中心;

2.相對於中心放大2倍(例如)

問題是這項工作的執行情況(移位和放大),該怎么做? 在此處輸入圖片說明

這是我的代碼:

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;
        }
    }

每次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);
            }
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM