Autor Beitrag
stray00
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 06.03.09 16:20 
Hi,

ich hab einen Counter erstellt und bei jedem tick möchte ich das ein punkt gezeichnet wird und als Kurve erscheint.
Folgender Code liegt vor
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Tick event

 private void tmCounter_Tick(object sender, EventArgs e)
        {
           hier will ich das die Kurve nacheinander erstellt wird !!!
        }


    private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Point[] pt = new Point[]{new Point(0,4),
                                     new Point(50,(int)counter),
                                     new Point(100,70),
                                     new Point(150,155)};

            e.Graphics.DrawCurve(new Pen(Brushes.Black, 2), pt);

        }


Danke im Voraus!!!


Moderiert von user profile iconKha: Topic aus C# - Die Sprache verschoben am Fr 06.03.2009 um 16:10
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.03.09 16:34 
Hallo und :welcome:

Ja, und was ist die Frage bzw. das Problem? Ich meine, was hast du denn bisher versucht / dir überlegt dazu?
stray00 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 06.03.09 16:40 
Ich möchte das nach jedem Tick schritt für schritt meine kurve gezeichnet wird
Ich hab aber nur über das Paint event eine Kurve direkt zu zeichnen hingekriegt.
So möchte ich das aber nicht wie gesagt .
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.03.09 16:54 
Du kannst z.B. gradweise die einzelnen Punkte zeichnen. In einer Variable merkst du dir den aktuellen Wert in Grad, also 0 bis 360. Bei 360 setzt du den Wert wieder auf 0 zurück.

Mit Hilfe der Kreisfunktionen kannst du die Punkte berechnen:
de.wikipedia.org/wik...metrische_Funktionen
stray00 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 06.03.09 17:08 
Die Frage ist ,wie mache ich das in c# sharp der code im paint evet erstellt mir ein punkt oder ne linie
ich möchte diesen code nach jedem tick ausgeführt bekommen.
Ich habe eine Software die mir die Spannung misst und einen Counter der die Zeit zählt.
Und bei jeder sekunde möchte das der punkt xy aus Spannung und Zeit als Kurve oder so gezeichnet wird .
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 06.03.09 17:17 
user profile iconstray00 hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe eine Software die mir die Spannung misst und einen Counter der die Zeit zählt.
In dem Fall hast du ja nicht wie im Beispiel oben eine fixe Anzahl Punkte, sondern z.B. eine List<Point>, die am Anfang leer ist und der im Tick-Eventhandler immer jeweils ein Punkt hinzugefügt wird. In diesem rufst du dann Refresh() auf, um ein Neuzeichnen zu erzwingen. Und im Paint-Handler schickst du die Liste über ToArray() an DrawCurve.

_________________
>λ=
stray00 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 06.03.09 19:00 
Ich kann mir kein Bild davon machen wie das im code aussehen könnte
Könntest du mir vielleicht einen Anhaltspunkt geben .
Mein Problem ich kann ja mit dem Paint event eines Steuerelements etwas zeichnen aber ich hab keine vorstellung davon wie
das innerhalb des tick events aussehen könnte .
stray00 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Fr 06.03.09 19:48 
Nun das mit dem neu zeichnen kriege ich hin ,das Problem .
Für jeden wert soll ein punkt gezeichnet werden die anderen punkte sollen jedoch nicht verschwinden.
Und wenn immer ein neuer punkt "gezeichnet" wird wird sie mit dem anderen punkt verbunden so soll ein "Kurve "entstehen .
Bitte um Unterstützung !!!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 06.03.09 19:55 
Kha hat dir schon die Lösung genannt!

Um eine geschwungene Kurve durch alle Punkte zu erhalten, müßtest du mal nach "Spline" suchen...
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 06.03.09 20:32 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Um eine geschwungene Kurve durch alle Punkte zu erhalten, müßtest du mal nach "Spline" suchen...
...was DrawCurve schon von Haus aus macht :) .

@user profile iconstray00: Hapert es an einem konkreten Punkt in meiner Erklärung? Wenn du z.B. noch nie eine List<T> benutzt hast, ist es für aufwändigere Grafik-Probleme vielleicht noch etwas zu früh.

_________________
>λ=
stray00 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 07.03.09 11:28 
Nun ich füge dem List<Point> werte hinzu siehe code
ausblenden C#-Quelltext
1:
  p.Add(new Point(20, (int)counter));					


Das Problem ist aber mein Programm misst ja die Werte und schreibt sie gleichzeitig in die List<Point>
aber wie übergebe ich das an DrawCurve oder anderen Draw Methoden siehe code

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
   private void pictureBox1_Paint(object sender, PaintEventArgs e)
      {

             Pen pen = new Pen(Color.Blue, 10);

             e.Graphics.DrawBeziers(pen, ??? );
}




wäre nett wenn mir Jemand den Code dafür angibt

Danke im Voraus !!!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.03.09 11:44 
Siehe Dokumentation:
Graphics.DrawBeziers
List<T>.ToArray
Das ergibt:
ausblenden C#-Quelltext
1:
e.Graphics.DrawBeziers(pen, p.ToArray());					
stray00 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 07.03.09 11:59 
Das habe ich mir schon gedacht aber da kommt dieser eine Fehler
siehe screenshot


Moderiert von user profile iconKha: Bild angehängt
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 07.03.09 12:06 
Merkwürdig. Die Hilfe erwähnt keine ArgumentException bei DrawBeziers :gruebel: .
Klicke mal auf "Details" und schau im Stack-Trace nach, welche Methode genau die Exception ausgelöst hat.

_________________
>λ=
stray00 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 07.03.09 12:12 
Also viel kann ich damit auch nicht anfangen
[url=img14.imageshack.us/...p?image=fehler2.png]user defined image[/URL]

Und wenn ich auf stacktrace klicke kommt das
[URL=img12.imageshack.us/...2.imageshack.us/img1
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.03.09 12:48 
Nicht DrawBeziers sondern DrawCurve wurde ja vorgeschlagen, das Problem ist die Anzahl der Punkte.
Zitat:
Die erste Béziersplinekurve wird zwischen dem ersten und dem vierten Punkt im Punktarray gezeichnet. Der zweite und der dritte Punkt sind Kontrollpunkte, die die Form der Kurve bestimmen. Für jede folgende Kurve sind genau drei neue Punkte erforderlich: zwei weitere Kontrollpunkte und ein Endpunkt. Der Endpunkt der vorigen Kurve wird als Anfangspunkt für die jeweils folgende Kurve verwendet.
Mit DrawCurve wäre das so, mindestens 3 Punkte sind erforderlich:
ausblenden C#-Quelltext
1:
2:
            if (p.Count > 2)
                e.Graphics.DrawCurve(pen, p.ToArray<Point>());
Und ich glaube hier wäre vielleicht eher Graphics.DrawLines sinnvoll:
msdn.microsoft.com/d...ibrary/7ewkcdb3.aspx
ausblenden C#-Quelltext
1:
2:
            if (p.Count > 1)
                e.Graphics.DrawLines(pen, p.ToArray<Point>());