Grafische Aufgabe mit C#

Gast #5709469
Lesenswert?

Hallo,

in einer WinForm wird eine Linie grafisch ausgeben. Auf dieser Linie 
soll ein Rechteck zentriert gesetzt werden das entlang der Line sich 
bewegen soll. Wenn ich das Rechteck entlang der Linie fahren lasse, dann 
werden die zuvor gezeichneten Rechtecke nicht gelöscht und die Linie ist 
nicht mehr zu sehen. Gibt es in C# eine spezielle Methode, dass die 
zuvor gezeichneten Elemente nicht mehr dargestellt werden?
#5709516
Lesenswert?

Moin,

Du scheinst nicht in OnPaint zu zeichnen.

Du machst die Berechnung der Position in einem TimerTick und rufst dann 
Invalidate() auf.

Zusätzlich musst die die OnPaint Methode deines Fensters (oder besser 
nur deines Controls, in dem du Zeichnen möchtest) überschreiben.
1
public override void OnPaint(sender s, PaintEventArgs e){
2
     base.OnPaint(s,e);
3
     ZeichneMeinRechteckHier();
4
}
PS: Code ist aus dem Gedächtnis geschrieben und wird warscheinlich so 
nicht richtig sein. Schau am Besten in der MSDN nach.


Zusätzlich musst du das DoubleBuffering der Form aktivieren. Das kannst 
du bei den Eigenschaften finden.
Gast #5714555
Lesenswert?

Hab mir die Beispiel genauer angeschaut. Wenn ich allerdings dies für 
meine Anforderungen anpassen will dann gelingt mir dies nicht. Ich
habe quasi immer Liniensegmente und ein oder zwei Kurvensegmente (90°).
Das mit WPF Path Animation umzusetzen ist nun auch nicht so einfach.
Gast #5715847
Lesenswert?

Der folgende Codeausschnitt zeigt, wie man in C# ein Rechteck darstellt 
und
dreht. leider ist es mir bisher nicht gelungen, dass das Rechteck 
zentriert entlang der Kurve fährt.

Für jede Hilfe würde ich mich freuen.

1
rotate++;
2
y_step++;
3
x_step++;
4
    
5
Pen penGreen = new Pen(Color.Green, 1.0f);
6

7
Point[] _myRectangle;
8

9
_myRectangle[0] = new Point(x_step - 25, 750 - y_pos - 25);
10
_myRectangle[1] = new Point(x_step + 25, 750 - y_pos - 25);
11
_myRectangle[2] = new Point(x_step + 25, 750 - y_pos + 25);
12
_myRectangle[3] = new Point(x_step - 25, 750 - y_pos + 25);
13

14
using (Matrix matrix = new Matrix())
15
{
16
  matrix.RotateAt(-1 * rotate, new PointF(x_step - 25, 750 - y_pos));
17
  matrix.TransformPoints(_myRectangle);
18
}
19

20
gPictureBox.DrawPolygon(penGreen, _myRectangle);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren