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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.