2010-03-28 6 views
15

Die (gerichteten) Graphen repräsentieren endliche Automaten. Bis jetzt hat mein Testprogramm Punktdateien zum Testen geschrieben. Das ist ziemlich gut sowohl für Regressionstests (die verifizierten Ausgabedateien in Subversion behalten, fragen, ob es eine Änderung gegeben hat) als auch für die Visualisierung. Allerdings gibt es einige Probleme ...Gibt es eine gute Graph-Layout-Bibliothek, die von C++ aufgerufen werden kann?

Grundsätzlich möchte ich etwas von C++ abrufbar und das ein Layout für meine Zustände und Übergänge plant, aber die Zeichnung zu mir lässt - etwas, das mir erlauben wird, Dinge zu zeichnen, wie ich will und Zeichnen Sie auf GUI (WxWidgets) Windows.

Ich möchte auch eine Lizenz, die kommerzielle Nutzung erlauben wird - ich brauche das zur Zeit nicht, und ich kann sehr gut als Open Source veröffentlichen, aber ich möchte nicht meine Möglichkeiten ATM begrenzen.

Die Probleme mit GraphViz sind (1) die Warnungen über das Erstellen von Quellcode unter Windows, (2) alle unnötigen Abhängigkeiten für Rendering und Parsing und (3) das (vermutete) Fehlen einer dokumentierten API spezifisch und rein für Layout.

Grundsätzlich möchte ich in der Lage sein, meine Zustände (mit Begrenzungsrechteckgrößen) und Übergängen zu spezifizieren und Positionen für die Zustände und Wegpunkte für jeden Übergang auszulesen, dann zeichne ich basierend auf diesen Koordinaten. Ich habe nicht wirklich herausgefunden, wie Annotationen bei Übergängen gehandhabt werden sollten, aber es sollte eine Art von Vorkehrung für die Festlegung von Begrenzungsrahmengrößen für diese geben, sie mit Übergängen assoziieren und Positionen auslesen.

Kennt jemand eine Bibliothek, die mit diesen Anforderungen umgehen kann?

Ich bin nicht unbedingt dagegen, etwas für mich selbst zu implementieren, aber in diesem Fall würde ich es lieber vermeiden, wenn es möglich ist.

+0

+1 für eine ausgezeichnete, gut gestellte Frage. Leider habe ich keine Antwort. – aib

+0

Boost hat Grafik-Algorithmen: http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/index.html Ich denke, Visualisierung ist jedoch nicht in ihrem Umfang. –

+0

Es gibt Layout-Algorithmen innerhalb des Boost-Graph-Moduls, die aber leider nicht für gerichtete Graphen geeignet sind. Siehe Abschnitt 22.12 hier: http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/table_of_contents.html – Kim

Antwort

0

Obwohl die Antworten waren bisher ein upvote wert, ich kann nicht wirklich von ihnen akzeptieren ich habe. Suche immer noch, obwohl.

Eine Sache, die ich fand, ist AGLO.Der Code ist GPL v1, aber es gibt Papiere, die die Algorithmen beschreiben, so dass es leicht genug sein sollte, wenn nötig von Grund auf neu zu implementieren.

Es gibt auch die Arbeit von Gansner, Koutsofios, North und Vo - "Eine Technik zum Zeichnen gerichteter Graphen" - erhältlich von here on the Graphviz site.

Ich habe auch genau auf die BSD-lizenziert (aber Java) JGraph.

Auf die eine oder andere Weise sieht es so aus, als ob ich das Rad neu implementiere, wenn ich es nicht wirklich neu erfinde.

+0

Die Leute sind nicht immer so motiviert, einen BSD-Ersatz für eine GPL-Bibliothek zu schreiben, es sei denn, es gibt überhaupt eine wirklich große Marktnische für die Bibliothek. –

1

Ich hatte Anfang dieses Jahres ein ähnliches Problem. Ein wichtiger Eingabeparameter für eine Entscheidung ist jedoch die erwartete Anzahl von Knoten.

Ich entschied mich für den Browser als GUI und suchte daher nach netten Javascript-Bibliotheken. Eine, die ich fand, war wireit, sie eignet sich sehr gut für technische Layouts (und auch Bearbeitung mit Drag & Drop und "on the fly" Layout). Sie können das leicht mit Ihrem C++ verbinden, indem Sie einen kleinen Webserver in einem Thread ausführen (Sie werden sowieso irgendeine Art von eventloop/thread für die GUI brauchen).

Nun, nur meine 2 Cent.

+0

Dies ist mehr zum Nachdenken anregen als praktisch. Die Anforderung eines Webservers ist * keine * Option, aber die Verwendung eines HTML-Steuerelements mit Javascript-Unterstützung ist möglicherweise nicht möglich, und es gibt auch die Möglichkeit, eine Javascript-Engine einzubetten oder den Code einfach zu übersetzen. +1 erneut. – Steve314

+0

Nun, ich denke, das Einbetten eines Webservers ist einfacher als das Einbetten einer Javascript-Engine (http://code.google.com/p/mongoos/wiki/EmbeddingMongoose). Vor allem, wenn Sie alle Grafik-bezogenen Elemente aus dem Browser ausgliedern, sparen Sie viele Abhängigkeiten. Aber ich werde auch nicht vor Ihnen verbergen, dass Javascript seine eigenen Macken hat. Aber ich denke, GUI-Entwicklung in javascipt + jQuery UI (oder eine andere lib) ist einfacher (und wartungsfreundlicher) - THNX für die +1 – snies

+0

Noch ein Kommentar: Wenn Sie (X) HTML und JavaScript verwenden, haben Sie derzeit keine Lösung für " free-drawing "wird von allen großen Browsern unterstützt. Wenn Sie auf der anderen Seite mit Firefox, Safari, Chrome, Opera (alle außer IE) zufrieden sind, können Sie SVG verwenden. Graphviz kann direkt SVG-Ausgaben (oder einfache Übersetzungen) erzeugen, die Sie über Javascript direkt steuern und animieren können. Dadurch können Sie einige Ihrer aktuellen Einstellungen wiederverwenden. (http://code.google.com/p/svgweb/ ermöglicht auch Svg-Unterstützung im IE) – snies

2

OGDF ist unter der GPL.

Pigale ist auch unter der GPL.

GoVisual ist kommerzielle Software, aber es sieht aus wie es bei $ 1800 für einen Entwickler beginnt.

+0

Umständlich für den kommerziellen Einsatz, aber +1 als wahrscheinlich nicht unmöglich (z. B. trennen Sie den GPL-Code in eine dynamisch verknüpfte Binärdatei, getrennt von geschlossenen Code). – Steve314

+0

Das Trennen von GPL-Code in eine dynamisch verknüpfte Binärdatei hilft nicht. Das Ganze ist immer noch eine abgeleitete Arbeit des GPL-Codes. –

+0

Wirklich - also, wenn ich GPL-Code verwende, um ein Photoshop-Plugin zu schreiben, wird das ganze Photoshop plötzlich eine abgeleitete Arbeit des GPL-Codes? Adobe wird sich darüber nicht sehr freuen! Oder ist es Adobe nicht erlaubt, GPL-Code in einem Open-Source-Photoshop-Plugin zu verwenden, aber ich bin? – Steve314

2

Hmm, GDToolkit (oder GDT) sieht gut aus: viele der Bilder in der tutorial sehen ziemlich gut aus, und es sieht nicht so aus, als wäre es furchtbar kompliziert zu benutzen.

Edit:.! Aber die Überprüfung der Lizenz, es sieht aus wie es :-(kommerzielle Software ist Whoops

+0

Kommerziell möglicherweise besser als GPL, je nach Kosten, also +1 wieder. – Steve314

Verwandte Themen