[英]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.