Interaktive GUI mit 2D 3D Plots



  • Guten Tag,
    ich absolviere gerade ein Praktikum in einem Startup und habe die Aufgabe eine GUI in C++ zu programmieren, in der aus mehreren Textdateien, die gleich aufgebaut sind, mehrere Plots dargestellt werden sollen.

    Das heißt ich brauche ein Fenster in dem 2D und 3D Plots und einen Button zum Einlesen der Textdateien und einen zum Exportieren der Plots, sowie eine Eingabe, in der ich einen Parameter setze, nach dem sich die Plots ändern.
    Außerdem soll das entstandene Programm kommerziell vertrieben werden, mit zugehörigen Anlagen und als einfache exe ohne großartige Installationsroutine wie Umgebungsvariablen setzen oder so.
    Aktuell wird für interne Zwecke das ganze mit Matlab gemacht, wo das ganze ziemlich schnell und einfach geht, aber halt nicht als standalone vertrieben werden kann.

    Da, wenn zusätzliche Lizenzen gekauft werden müssen nur Matlab in Frage käme, kann ich nur auf Bibliotheken oder Software zugreifen, die LGPL oder BSD lizensiert sind somit fällt qt leider weg, da der 3D Visualizer als Modul nicht unter der LGPL steht.

    Andere Bibliotheken wie gnuplot für c++ erlauben keine gui Eingabe und übergeben die Befehle einfach weiter per pipe an gnuplot selbst, welche somit auch installiert werden muss und die Einrichtung ist auch nicht so userfreundlich für Kunden.

    Wxwidgets bietet mit seinen Module wie wxfreechart oder auch wxmathplot keine Möglichkeit 3dplots zu erstellen.

    Meine Frage wäre nun, ob ihr eine Möglichkeit kennt, das zu bewerkstelligen bzw. Bibliotheken empfehlen könnt.
    Ich weiß die Frage ist sehr speziell und eventuell auch nicht klar zu beantworten. Aber ich danke im voraus schon mal für jegliche Hilfestellung.



  • Kannst du vielleicht ein Bild verlinken wo man sieht was für eine Art 3D-Plots du meinst?



  • Also, wenn das so etwas sein soll:
    https://i.imgur.com/rBpE3NP.png
    Mit freiem Rotieren, Zoomen, verschiedenen Modi, Füllfarben, etc. etc., dann übersteigt das imho ein kurzes und schlecht- oder unbezahltes Praktikum bei weitem, wenn alles von Grund auf selber gemacht werden muss.



  • @hustbaer es ist ein Oberflächendiagramm wie @yahendrik es hochgeladen hat.
    Dabei muss dieses aber nicht rotieren oder gezoomt werden sondern einfach dargestellt werden und ja es ist für ein 2 monatiges Praktikum definitiv zu viel aber es besteht die Möglichkeit einer Einstellung als studentische Hilfskraft.

    Evaluiere grad unter wxwidgets gnuplot und qt um zu zeigen, dass es nicht geht, bzw es nicht so einfach sein wird, dass der Kunde einfach eine exe ausführt und seine Daten einlesen lässt.

    Hat einer eine Idee wie das zu bewerkstelligen ist oder ist das Sisyphos-Arbeit?



  • Eine mögliche alternative wäre noch mathgl (http://mathgl.sourceforge.net/doc_en/Main.html)
    Der Core ist lgpl (wenn die lib im lgpl modus übersetzt wurde)
    Es gibt auch gui Beispiele z.b. auch mit Qt aber die stehen unter GPL.
    Wenn es aber nur ums reinen anzeigen geht, könnte man sich an den Beispielen anschauen wie man einen graphen mit mathgl in ein Qt widget/image ausgeben lässt.

    Die verwendung ist etwas kompliziert aber machbar



  • @firefly kann ich in diese plots aber auch während der Laufzeit eine Eingabe tätigen, oder einen Parameter der Funktion hinter der der Plot steckt verändern, sodass sich der Plot ändert ?

    Bzw. ich will ja nicht nur plotten, sondern eine gui, in der Unteranderem Werte dargestellt werden und per Button Daten eingelesen werden und so



  • @alsen sagte in Interaktive GUI mit 2D 3D Plots:

    @firefly kann ich in diese plots aber auch während der Laufzeit eine Eingabe tätigen, oder einen Parameter der Funktion hinter der der Plot steckt verändern, sodass sich der Plot ändert ?

    Bzw. ich will ja nicht nur plotten, sondern eine gui, in der Unteranderem Werte dargestellt werden und per Button Daten eingelesen werden und so

    Klar geht das, es wird halt der ganze plot neu gezeichnet.
    Aber schau dir echt mal die Beispiele an.
    Für ein Qt based tool udav zu finden in http://downloads.sourceforge.net/mathgl/mgl_scripts-2.4.2.win64.7z in übersetzter form

    Als einfachstes Beispiel für UDAV siehe http://udav.sourceforge.net/mgl_en.html/mgl_en_2.html#Basic-usage

    mathgl selbst ist nur eine plotting library die daten musst du schon selbst liefern.



  • @firefly
    Vielen Dank schonmal. Das Mathgl eine reine plotting Library ist habe ich so verstanden. Das heisst es bietet selbst keine Gui sondern die Plotts der Funktion, die ich mit den eingelesenen Daten füttere.

    Habe ich das richtig verstanden, dass udav ein Tool ist mit dem ich in c++ programmieren kann also auch die gui und gleichzeitig dieses die Mathgl Library nutzt oder wie darf ich das verstehen ?



  • udav ist ein tool (entwickelt mit Qt), welches mathgl verwendet.



  • @alsen sagte in Interaktive GUI mit 2D 3D Plots:

    Aktuell wird für interne Zwecke das ganze mit Matlab gemacht, wo das ganze ziemlich schnell und einfach geht, aber halt nicht als standalone vertrieben werden kann.

    Mit dem Matlab Compiler kann man prinzipiell standalone executables erstellen und verteilen. Ob man mit dem GUI Framework von Matlab ein zufriedenstellendes Ergebnis für Kunden erziehlen kann, sei mal dahingestellt. Wir nutzen es nur für interne Zwecke.



  • Wenn Du schon OpenGL verwendest, wirst Du eventuell mit imgui oder nuklear für eine einfache GUI glücklich.