GUI mit einfachen Draw-Funktionen ähnlich Processing



  • Hi Leute!
    Einige von euch kennen sicher Procesing. Ja, das ist Java und es ist komfortabel und es sieht gut aus.

    Ich nutze es vorrangig, um Daten grafisch darzustellen. Um das gleiche mit der WinAPI hinzubekommen, brauch ich ca. 10 mal so viel Code. Ja, ich habs ausprobiert und die Sourcecode-Dateigrößen miteinander verglichen.

    Gibt es eine Library für C++, mit der ich ähnlich/genauso einfach "malen" kann?
    Ich habe ein etwas größeres Projekt vor, bei dem ich die Performance und Hardware-Nähe von C++ benötige, aber auch einfach Daten darstellen können muss. Das ganze bewegt sich in die Richtung UAV in Entwicklung.

    Kennt da jemand was?
    Ich muss zugeben, mir die Alternativen Qt, WxWidgets, usw. noch nie benutzt zu haben.



  • Du kannst das eine in C oder C++ machen und die Darstellung halt in Processing.



  • Ja, daran habe ich auch schon gedacht. Mit Sockets kann man da kommunizieren. Ich hätte aber gern alles unter einem Dach.



  • Ich habe mir mal die Homepage von Processing angeschaut. Was ist denn so besonderes daran? Damit man dir etwas für C++ empfehlen kann, muss man erstmal wissen, was denn die Anforderungen sind.

    Ich sehe da aber eigentlich nur eine OO-API wie jede andere auch. Oder du zeigst mal ein Beispielcode, damit man mal weiß worum es geht?

    Es ist aber unbestritten, das die Win32 C-API sehr umständlich und sehr leistungsschwach ist, was die Funktionen angeht! Der nächste Schritt wäre deshalb sich mal GDI+ anzuschauen, das ist eine C++-API die seit WinXP im Lieferumfang ist. Sie ist nicht für Animationen geeignet, da sie nicht sehr schnell ist. Aber sie bietet sehr viele nützliche Funktionen an, wie Geometriefunktionen, Anti-Aliasing, Transformationen, Skalierung, Bild-Manipulationen, JPG, PNG usw.

    Sonst kannst du dir natürlich auch andere C++-Libraries anschauen, die noch mehr Funktionen und Plattformneutralität anbieten, z.B. Cairomm[1] oder Anti-Grain Geometry[2].

    Wenn du aber auch eine GUI-Library (für Fenster, Menüs, Mausabfrage etc.) suchst, die auch Grafikfunktionen anbietet, dann solltest du dir mal folgende anschauen: FLTK 1.3.0[3], Gtkmm[4] (beide bieten auch Cairo Graphics Unterstützung an) oder Qt[5].

    [1] http://www.cairographics.org/cairomm/
    [2] https://de.wikipedia.org/wiki/Anti-Grain_Geometry
    [3] http://www.fltk.org/
    [4] http://www.gtkmm.org/
    [5] http://qt-project.org/



  • Hallo,
    danke für die ausführliche Antwort.
    Was ist so besonderes an Processing? Nunja, man kann mit wenig Code, viel erreichen. Gerade im Draw-Bereich, ist Unkompliziertheit und Komfort das beste für intuitives Arbeiten. Nice and Easy eben. Und das bietet mir Processing.

    Unter den Vorschlägen war Anti-Grain-Geometry: Das gefällt mir, es kommt an Processing relativ nah ran. Man kann recht einfach auf verschiedenen Ebenen rendern. Ein Vektorrenderer für High-Level Sachen, aber auch Low-Level pixelweises Zeichnen sind drin. Dazu noch Transparenz und AntiAliasing, das sollte gut aussehen. Was noch erschwerend hinzukommt ist, dass man das Render Target frei wählen kann, man rendert eigentlich nur in einen Speicherbereich.
    Den kann man dann packen und als Bild in einer GUI einsetzen.

    So steht noch die Wahl der GUI offen. Qt sieht recht komplex aus, scheint aber einen guten Ruf zu haben. GTK sieht da ähnlich aus, da muss ich mir beide mal ansehen. FLTK sieht ja aus, wie Windows 3.11 !
    Eine OO-GUI muss sein, die Win32-API in Uralt-C kann man heute keinem mehr antun.
    Was ich mir auch mal ansehen werde, ist C# auf .Net Basis.

    Besten Dank soweit!



  • Blaze schrieb:

    Was ist so besonderes an Processing? Nunja, man kann mit wenig Code, viel erreichen. Gerade im Draw-Bereich, ist Unkompliziertheit und Komfort das beste für intuitives Arbeiten. Nice and Easy eben. Und das bietet mir Processing.

    OK, dann waren GDI+, Cairo Graphics und AGG gar nicht so daneben.

    Blaze schrieb:

    Unter den Vorschlägen war Anti-Grain-Geometry: Das gefällt mir, es kommt an Processing relativ nah ran. Man kann recht einfach auf verschiedenen Ebenen rendern. Ein Vektorrenderer für High-Level Sachen, aber auch Low-Level pixelweises Zeichnen sind drin. Dazu noch Transparenz und AntiAliasing, das sollte gut aussehen. Was noch erschwerend hinzukommt ist, dass man das Render Target frei wählen kann, man rendert eigentlich nur in einen Speicherbereich.
    Den kann man dann packen und als Bild in einer GUI einsetzen.

    Ja, das erfüllen GDI+, Cairo und AGG ebenfalls. Wobei ich heute GDI+ nicht mehr empfehlen würde, weil es nicht mehr weiter entwickelt wird.

    Bei AGG hast du evtl. den Nachteil, das es unter GPL steht und somit dein nutzendes Programm ebenfalls unter GPL fällt, wenn es nicht nur Inhouse genutzt wird! ⚠
    Cairo liegt beim Funktionsumfang so zwischen GDI+ und AGG, und du kannst es trotzdem in Closesource nutzen (wegen der weniger restriktiven LGPL).

    Blaze schrieb:

    So steht noch die Wahl der GUI offen. Qt sieht recht komplex aus, scheint aber einen guten Ruf zu haben. GTK sieht da ähnlich aus, da muss ich mir beide mal ansehen. FLTK sieht ja aus, wie Windows 3.11 !

    Ja, Qt wird seit Anfang an von einer Firma entwickelt (zuerst Trolltech, dann viele Jahre von Nokia, und seit diesem Sommer von Digia). Es ist ein komplettes Framework, so wie es auch MFC, Java Runtime oder .NET Runtime bereit stellen.

    Du hast dort auch eine sehr gute IDE mit sehr guten GUI-Designer dabei.

    GTK+ bzw. Gtkmm ist "nur" eine GUI-API und mittels Cairo bzw. Cairomm auch mit einer mächtigen Grafik-API ausgestattet. Es gibt mit Glade auch einen komfortablen GUI-Designer.

    Wenn dich die GPL nicht stört, kannst du es natürlich auch mit AGG probieren.

    Blaze schrieb:

    Eine OO-GUI muss sein, die Win32-API in Uralt-C kann man heute keinem mehr antun.

    100% Zustimmung! Gtkmm (nicht Gtk+), Qt und FLTK erfüllen die Anforderungen auf jeden Fall. Dir würde ich Gtkmm oder Qt empfehlen.



  • OK, ich habe mir mal alle angesehen und mich für gtkmm entschieden.
    Ob ich AGG nutzen werde, steht noch offen. Erstmal muss ein Framework her.
    Das ganze wird übrigens ein rein privates Projekt.


Log in to reply