Zooming von Grafiken basierend auf der aktuellen Mausposition
Ich versuche, eine Zeichnung basierend auf der aktuellen Position der Maus zu zoomen. Im Moment sieht meine onMouseWheel-Methode so aus (basierend aufdiese StackOverflow-Antwort):
private void onMouseWheel(object sender, MouseEventArgs e)
{
if (e.Delta > 0)
{
_scale *= 1.25f;
_translateY = e.Y - 1.25f * (e.Y - _translateY);
_translateX = e.X - 1.25f * (e.X - _translateX);
}
else
{
_scale /= 1.25f;
_translateY = e.Y - 0.8f * (e.Y - _translateY);
_translateX = e.X - 0.8f * (e.X - _translateX);
}
this.Invalidate();
}
_scale
, _translateX
, und_translateY
sind Mitgliedsvariablen.
Ich skaliere die Grafiken, übersetze sie und zeichne dann die Linien wie folgt:
protected override void OnPaint(PaintEventArgs e)
{
g.ScaleTransform(_scale, _scale);
g.TranslateTransform(_translateX, _translateY);
//draw lines here
}
Dieses Vide zeigt an, was passiert, wenn ich versuche, einen bestimmten Punkt zu vergrößern oder zu verkleinern. Was mache ich falsch
So sieht der Code zu Testzwecken in einer Beispiel-Panel-Klasse aus:
class Display : Panel
{
public Display()
{
this.MouseWheel += new MouseEventHandler(this.onMouseWheel);
}
private void onMouseWheel(object sender, MouseEventArgs e)
{
if (e.Delta > 0)
{
_scale *= 1.25f;
_translateY = e.Y - 1.25f * (e.Y - _translateY);
_translateX = e.X - 1.25f * (e.X - _translateX);
}
else
{
_scale /= 1.25f;
_translateY = e.Y - 0.8f * (e.Y - _translateY);
_translateX = e.X - 0.8f * (e.X - _translateX);
}
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
g.ScaleTransform(_scale, _scale);
g.TranslateTransform(_translateX, _translateY);
Pen pen = new Pen(Color.Red);
g.FillEllipse(pen.Brush, 50, 50, 10, 10);
}
}