Hallo zusammen, ich soll eine Software schreiben, die Spektrogramme darstellt, so ähnlich wie im angehängten Bild. Dass der Hintergrund schwarz und die X-Achse "spektral richtig" unter der Kurve dargestellt wird, ist derzeit Kür, aber keine Pflicht. Den Treiber und die Form habe ich schon zusammen. Die spektrale Verteilung wird mir in einem Array von 10...500 Float-Werten zurück gegeben. Wer kann mir empfehlen, wie man so ein Funktionsdiagramm darstellt? Bisher kenne ich natürlich das Canvas, kann da reinzeichnen und Linien (Achsen oder Y-Balken) zeichnen. Aber wenn ich eine Achsenteilung mit gestrichelten Hilfslinien und Achsenbeschriftung machen will, wird das sehr aufwendig. Ich habe schon viel recherchiert, noch wenig gefunden, aber das läuft auf freie AddOns hin, die ich irgendwo bei NuGet laden und nutzen kann. Viele von den ganzen Tipps auf Stackoverflow sind aber schon sehr alt. Ich hätte gerne von euch eine Empfehlung, was der Profi da heute verwendet? Vielen Dank im Voraus! Gruß Gunnar
Gunnar F. schrieb: > (Achsen oder Y-Balken) zeichnen. Aber wenn ich eine Achsenteilung mit > gestrichelten Hilfslinien und Achsenbeschriftung machen will, wird das > sehr aufwendig. Na wenn das schon aufwendig für dich ist, dann empfehle ich eine Umschulung zum Strassenkehrer.
Gunnar F. schrieb: > Ich hätte gerne von euch eine Empfehlung, was der Profi da heute > verwendet? Gibt eine ganze Palette: https://plotly.com/csharp/ https://scottplot.net/ https://www.nuget.org/packages/QuikGraph Selber zeichnen geht auch, ist aber zumeist wenig performant. Franko S. schrieb: > Na wenn das schon aufwendig für dich ist, dann empfehle ich eine > Umschulung zum Strassenkehrer. Cool, mein erster Kandidat für mein Greasemonkey Ignorelist Script.
Und wo ist das Problem? Das ist als wenn Du 1, 2 oder mehrere Bitmaps in der gleichen Auflösung zeichnest und im Anschluß diese übereinanderlegst. Dazu braucht es doch keine "freie AddOns", oder?
Jörg schrieb: > Das ist als wenn Du 1, 2 oder mehrere Bitmaps in der gleichen Auflösung > zeichnest und im Anschluß diese übereinanderlegst. Das Zeichnen ist - auf Deutsch - eine sau Arbeit und führt selten zu besseren Ergebnissen. Warum das Rad ständig neu erfinden?
Martin S. schrieb: > Das Zeichnen ist - auf Deutsch - eine sau Arbeit und führt selten zu > besseren Ergebnissen. Vielen Dank, Martin! Die Pakete sehe ich mir gerne mal an, bin gespannt. @Franko Ich habe schon vor 30 Jahren unter QBasic Graphen programmiert. Und da die Textelemente in vertikaler Ausrichtung, gestrichelte Linien im Hauptraster, kleine Tags im Unterraster, das war schon eine Viecherei. Das ganze in einem Canvas, dessen tatsächlichen Ausmaße sich permanent ändern können, also dauernd Systemkoordinaten in lokale Koordinaten umrechnen, auf Ereignisse reagieren... Puh.. Freut mich aber, auch von einem solchen Profi wie Dir was lernen zu dürfen!
Alternativ ein Polygon ins Canvas und die Füllung als LinearGradientBrush ausführen. Könnte überschaubarer sein als einzelne Linien. So es Achsen usw. braucht eventuell auf eine Lib zurückgreifen
Alternativ ein Polygon ins Canvas und die Füllung als LinearGradientBrush ausführen. Könnte überschaubarer sein als einzelne Linien. So es Achsen usw. braucht eventuell auf eine Lib zurückgreifen
Alternativ ein Polygon ins Canvas und die Füllung als LinearGradientBrush ausführen. Könnte überschaubarer sein als einzelne Linien. So es Achsen usw. braucht eventuell auf eine Lib zurückgreifen
Bertram S. schrieb: > Alternativ ein Polygon ins Canvas und die Füllung als > LinearGradientBrush ausführen. Könnte überschaubarer sein als einzelne > Linien. > So es Achsen usw. braucht eventuell auf eine Lib zurückgreifen Hallo Bertram, ganz herzlichen Dank! Das ist super nahe an meiner Wunschvorstellung! Mit solcher Hilfe schaffe ich noch eine kometenhafte Karriere.... auf meine alten Tage!
Martin S. schrieb: > Cool, mein erster Kandidat für mein Greasemonkey Ignorelist Script. Wen interessiert das?
Franko S. schrieb: > Martin S. schrieb: >> Cool, mein erster Kandidat für mein Greasemonkey Ignorelist Script. > > Wen interessiert das? Mich. Wenn ich so eine Liste hätte, Platz 1 ist dir sicher!
Gunnar F. schrieb: > Mich. Wenn ich so eine Liste hätte, Platz 1 ist dir sicher! Du brauchst also andere dazu was auf deinen Filter kommen soll? Einen Schulabschluss hast du vermutlicht nicht oder?
Gunnar F. schrieb: > Franko S. schrieb: >> Martin S. schrieb: >>> Cool, mein erster Kandidat für mein Greasemonkey Ignorelist Script. >> >> Wen interessiert das? > > Mich. Wenn ich so eine Liste hätte, Platz 1 ist dir sicher! Bin mir noch nicht ganz sicher, ob ich das so lasse. Einerseits wäre mir sympatisch, den Beitrag einfach komplett wegzuexen, auf der anderen Seite kann das Gespräche aus dem Zusammenhang reißen. Aktuell arbeitet das Script auch noch mit User-IDs. Ich hatte bisher noch keine Motivation, das auf Namen umzustellen. Wenn ich damit zufrieden bin, poste ich es mal in den Offtopic.
Hallo zusammen, Eure Vorschläge haben mir gut weiter geholfen, ich habe jetzt zunächst den von Bertram S. umgesetzt, weil es gut aussieht und mit C#-Bordmitteln einfach geht. Jetzt habe ich aber schon wieder ein Problem mit DataBinding! (Grrmmpfff!) Die App dient zur testweisen Integration eines Spektrometers von Jeti, der Treiber funktioniert, ich kann verbinden, die Messung auslösen und erhalte die Zahlenwerte richtig angezeigt. Siehe Bild! Das Bild ist aber teilweise Beschiss, weil ich im Konstruktor von polygon_vm einfach Daten aus einer erfolgreichen Messung in den Programmcode kopiert habe. Wenn der Konstruktor aufgerufen wird, funktioniert die Datenbindung ins Canvas. Einmal! Wenn ich dann den Butten "Draw Graph" drücke, liest die Software vom Spektrometer ein neues Array (float), baut das in eine Collection von Points um und löst INotifyPropertyChanged aus. Wie fast immer, passiert im MainForm nichts! Das Polygon-Objekt habe ich zunächst wie von Bertram vorgeschlagen, als PointCollection angelegt und in XAML einen DataContext auf das Window festgelegt. Auch diese Methode aktualisiert das Polygon nicht, nur einmal beim Start. Jetzt habe ich den DataContext vom Canvas in C# definiert und versuchsweise aus der PointCollection eine ObservableCollection<Point> gemacht, weil nur zweitere das INotifyPropertyChanged implementiert. Ergebnis unverändert! Das OnPropertyChanged-Event löse ich manuell am Ende der BuildPolygon-Methode aus, weil ich nicht weiß ob das Ereignis auch von der Add-Methode ausgelöst wird. Das ge7zipte Projekt anbei, mit gelöschten bin/obj-Folder. Ich freue mich sehr über nochmal so eine gute Hilfe! Danke!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.