Hallo,
Ich schreib mir gerade ein Zeichenprogramm und stecke gerade fest.
Wenn ich das Mausrad bewege dann zoomt das Zeichenprogramm mir die Zeichnung allerdings möchte ich jetzt, dass er mir je nach dem wo ich meine Maus gerade habe er mir meine Zeichnung so verschiebt dass ich nach dem zoomen wieder auf dem Punkt bin auf dem ich davor war. (so wie in fast allen Zeichenprogrammen)
Noch eine kleine Anmerkung: bei z.B. "MyMathOP.PunktWertDividieren" hab ich mir eine Methode geschrieben so dass ich in dem Fall einen Punkt (X und Y) mit einem Wert dividieren kann
das gleiche auch bei "PunkteAddieren" er addiert mir 2 Punkt
Hier mal der Code:
PointF OldPos = MausposNullpunktF;
Zoomfaktoraenderung(e.Delta);
MausPositionenSetzen(e);
float NewZoom = Zoomfaktor;
PointF NewPosPixel = MyMathOP.PunktWertDividieren (MyMathOP.PunktWertDividieren(OldPos, NewZoom), Einheit);
PointF MausposJetztPixel = MyMathOP.PunktWertDividieren (MyMathOP.PunktWertDividieren(MausposNullpunktF, NewZoom), Einheit);
PointF pixelAbstand = MyMathOP.PunktUnterschied(NewPosPixel, MausposJetztPixel);
pixelAbstand = new PointF(pixelAbstand.X, -pixelAbstand.Y);
Zeichnung.Location = MyMathOP.PointConverter (MyMathOP.PunkteAddieren(Zeichnung.Location, pixelAbstand));
Meine Gadanken dazu: (ich hoffe sie sind nachvollziehbar)
Bei "Zoomfaktoraenderung(e.Delta);" setzt er mir den Zoofaktor auf die entsprchende Zahl
und bei "MausPositionenSetzen(e);" rechnet er mir die Position vom Mauszeiger relativ zum Nullpunkt aus
Hier der Code: (müsste eigentlich passen)
}
private void MausPositionenSetzen(MouseEventArgs e)
{
Mauspos = e.Location;
MausposF = e.Location;
MausposNullpunkt = new Point((int)MyMathOP.PunktWertMultiplizieren (MyMathOP.PunktWertMultiplizieren(MyMathOPZeichnung.MausPosRelativZumNullpunktF(e.Location), (int)Einheit), _Zoomfaktor).X, (int)MyMathOP.PunktWertMultiplizieren (MyMathOP.PunktWertMultiplizieren(MyMathOPZeichnung.MausPosRelativZumNullpunktF(e.Location), (int)Einheit), _Zoomfaktor).Y);
MausposNullpunktF = new PointF((float)MyMathOP.PunktWertMultiplizieren (MyMathOP.PunktWertMultiplizieren(MyMathOPZeichnung.MausPosRelativZumNullpunktF(e.Location), (float)Einheit), _Zoomfaktor).X, (float)MyMathOP.PunktWertMultiplizieren (MyMathOP.PunktWertMultiplizieren(MyMathOPZeichnung.MausPosRelativZumNullpunktF(e.Location), (float)Einheit), _Zoomfaktor).Y);
}
Ich würde mich sehr freuen wenn mir da jemand helfen könnte denn ich mach schon seit Tagen an diesem Problem herum
Gruß
Puma321
Hallo Puma321,
du hast beschrieben was du machen willst und wie du es machen willst, aber leider nicht, was dein Problem ist. Was genau geht nicht? Was ist der Effekt? Wo genau hängst du?
herbivore
Oh sorry
Mein Problem ist, dass das was ich ausrechne nicht stimmt vom zoomen her. Also der Pixelabstand passt irgenwie nicht
wenn ich zoome dann ist die KoordinatenPosition (also die vom Nullpunkt nicht vom panel)vor dem zoomen nicht die gleiche wie nach dem zoomen
es schiebt mir jetzt vom Nullpunkt aus gesehen den Nullpunkt zu weit in richtung Mausposition
Gruß
Puma321
ps. "Image Zoom" hab ich schon gesehen aber irgendwie bringt es mich auch nicht wirklich weiter
gemeint ist vermutlich Image Zoom