Bibliothek zur Anzeige von Komponentendiagrammen mit Qt

Ich bin daran interessiert, eine gute C ++ - Bibliothek (oder einen Basiscode, auf dem eine erstellt wird) zu finden, um interaktive verbundene Diagrammkomponenten in Qt zu zeichnen.

Mit verbundener Graph-Komponente meine ich Graphen, deren Knoten Komponenten mit Eingabe- und Ausgabeabschnitten im Stil von Graph-Knoten im Blender Node Editor oder Grasshopper sind, siehe Beispiel .

Mit interactive meine ich, dass ich in der Lage sein muss, auf die Komponentenposition und -orte zuzugreifen, damit der Benutzer sie auswählen und mit ihnen interagieren kann.

Meine Anforderungen:

  • für Qt in C++
  • geringste Menge an externen Abhängigkeiten (am besten wäre nur eine Header-Bibliothek)
  • Unterstützung für automatisches Layout (oder halbautomatisch, die Knoten werden gesetzt, die Kanten müssen automatisch verbunden werden)
  • interaktivitätsfähig (dh nicht nur eine Bildausgabe, höchstwahrscheinlich basierend auf QGraphicsScene)

Meine aktuelle Implementierung verwendet GraphViz mit QGV , unterstützt jedoch nur einfache Komponentenknoten (keine spezifischen Eingabe- / Ausgabeelemente). Während GraphViz Record- und HTML-Elemente unterstützt, tut QGV dies nicht, und es sieht nach einem ausreichenden Aufwand aus, es in einem Fork von QGV korrekt zu implementieren, angesichts der Einschränkungen von GraphViz, dass ich mich frage, ob es keine bessere Wahl gibt, wenn ich versuche, GraphViz nicht zu verwenden.

Ich könnte auch mit einer einfachen Nicht-Grafikbibliothek zufrieden sein, die das Layout mit Größenbeschränkungen und relativen Positionsbeschränkungen ausführt (die Komponentenblöcke haben eine feste Größe, die Positionen der Eingabe- / Ausgabeknoten sind aufgrund der Position des Komponentenblocks festgelegt).

Antworten (1)

Vielleicht zu spät, aber hier ist immer noch die Bibliothek, die ich für die allgemeine Bearbeitung von Knotendiagrammen entwickle.

https://github.com/paceholder/nodeeditor

Hauptmerkmale:

  • Basierend auf Qt 5.x mit C++14
  • Bezogen aufQGraphicsScene
  • Knoten verhalten sich nach benutzerdefinierten Modellen
  • Keine Abhängigkeiten (nur Qt).
  • Verschiedene Farbstile

Sehen Sie sich das Video an, um zu sehen, wozu die Bibliothek in der Lage ist:1

Es ist zwar ein bisschen spät für mich, es für das Projekt zu verwenden, für das ich es geplant habe, aber es lohnt sich, es irgendwo zu erwähnen. Ich kann es mir ansehen, wenn ich es zufällig in einem neuen System benötige. Wissen Sie, wie gut es auf größere Diagramme skaliert? Ich spreche von einigen hundert Knoten, was bei algorithmenbasierten Systemen durchaus üblich ist. Eines habe ich später herausgefunden (aber in Python ist das von Antimony, einem Media Lab-Projekt für CAD, mattkeeter.com/projects/antimony/3 ), und es scheint bis zu einem gewissen Grad skaliert zu werden.
In Bezug auf die Graph-Rendering-Leistung skaliert es ziemlich gut, da es auf der superschnellen QGraphicsScene-Engine basiert. Wenn wir über Signalausbreitung sprechen, gehe ich davon aus, dass es etwas langsamer sein muss als ein Python-Skript (zum Beispiel). Intern verwende ich std::shared_ptr, um Benutzerdaten zu verpacken und an das nächste Modell zu übergeben. Dies erfordert einige Speicherzuweisungen und das Kopieren von gemeinsam genutzten Zeigern. Wie auch immer, ein Typ hat es geschafft, einen Echtzeit-GLSL-Renderer basierend auf diesem Node-Editor mit einem Dutzend Primitiven zu erstellen, die 30-60 FPS lieferten ( github.com/v0q/CollaborativeResearchProject ) .
Das ist genau das, wonach ich gesucht habe, absolut umwerfend! @paceholder