2010-03-28 13 views
15

I grafici (diretti) rappresentano gli automi finiti. Fino ad ora il mio programma di test ha scritto file di punti per i test. Questo è abbastanza buono sia per i test di regressione (mantenere i file di output verificati in sovversione, chiedere se c'è stato un cambiamento) sia per la visualizzazione. Tuttavia, ci sono alcuni problemi ...C'è una buona libreria di layout grafico richiamabile da C++?

Fondamentalmente, voglio qualcosa di chiamabile da C++ e che pianifica un layout per i miei stati e transizioni ma lascia il disegno per me - qualcosa che mi consentirà di disegnare le cose comunque voglio e disegnare su finestre GUI (wxWidgets).

Desidero anche una licenza che consenta l'uso commerciale - Non ne ho bisogno al momento, e potrei benissimo pubblicare come open source, ma non voglio limitare le mie opzioni ATM.

I problemi con GraphViz sono (1) le avvertenze circa compilare i sorgenti su Windows, (2) tutte le dipendenze non necessarie per il rendering e l'analisi, e (3) la (presunta) mancanza di un'API documentata specificamente e puramente disposizione.

Fondamentalmente, desidero essere in grado di specificare i miei stati (con dimensioni del rettangolo di delimitazione) e le transizioni e di leggere le posizioni per gli stati e i waypoint per ogni transizione, quindi disegnare in base a quelle coordinate. Non ho davvero capito come dovrebbero essere gestite le annotazioni sulle transizioni, ma ci dovrebbe essere una sorta di provvedimento per specificare le dimensioni delle caselle di delimitazione per quelle, associarle alle transizioni e leggere le posizioni.

Qualcuno sa di una libreria in grado di gestire tali requisiti?

Non sono necessariamente contrario all'implementazione di qualcosa per me stesso, ma in questo caso preferisco evitarlo, se possibile.

+0

+1 per una domanda eccellente e ben dichiarata. Sfortunatamente, non ho una risposta. – aib

+0

Boost ha algoritmi grafici: http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/index.html Penso che la visualizzazione sia fuori dal suo scopo. –

+0

Ci sono algoritmi di layout all'interno del modulo grafico boost, ma sfortunatamente non sono appropriati per i grafici diretti. Vedere la sezione 22.12 qui: http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/table_of_contents.html – Kim

risposta

0

Anche se le risposte finora valevano un upvote, non posso davvero accettare qualsiasi di loro che ho. comunque cercavo,

Una cosa che ho trovato è AGLO.Il codice è GPL v1, ma ci sono documenti che descrivono gli algoritmi, quindi dovrebbe essere abbastanza facile da ri-implementare da zero se necessario.

C'è anche il foglio di Gansner, Koutsofios, Nord e Vo - "Una tecnica per disegnare i grafici orientati" - disponibile dal here on the Graphviz site.

Ho anche osservato da vicino la licenza BSD (ma Java) JGraph.

In un modo o nell'altro, sembra che potrei re-implementare la ruota, se non addirittura reinventarla.

+0

Le persone non sono sempre così motivate a scrivere una sostituzione BSD per una libreria GPL, a meno che non ci sia una ** veramente ** grande nicchia di mercato per la biblioteca, in primo luogo. –

1

Ho avuto a che fare con un problema simile all'inizio di quest'anno. Un importante parametro di input per una decisione è tuttavia il numero previsto di nodi.

Ho deciso di utilizzare il browser come GUI e quindi ho cercato librerie JavaScript carine, una che ho trovato era wireit, è molto adatta per i layout tecnici (e anche per la modifica con trascinamento della selezione e "al volo" interfaccia grafica). Puoi facilmente collegarlo al tuo C++ eseguendo un piccolo server web in una discussione (ti servirà comunque qualche tipo di eventloop/thread per la GUI).

Beh, solo i miei 2 centesimi.

+0

Questo è più stimolante che pratico. Richiedere un webserver è * non * un'opzione, ma l'utilizzo di un controllo HTML con supporto Javascript potrebbe non esserlo, e c'è anche l'opzione di incorporare un motore Javascript o semplicemente di tradurre il codice. +1 di nuovo. – Steve314

+0

Bene, penso che incorporare un server web sia più facile che incorporare un motore Javascript (http://code.google.com/p/mongoos/wiki/EmbeddingMongoose). Soprattutto con il factoring di tutte le cose relative alla grafica del Browser, si risparmiano molte dipendenze. Ma anche io non ti nasconderò che javascript ha le sue stranezze. Ma penso che lo sviluppo di GUI in javascipt + jQuery UI (o qualche altra lib) sia più semplice (e più manutenibile) - THNX per il +1 – snies

+0

Un altro commento: Quando si utilizza (X) HTML e JavaScript attualmente non si ha alcuna soluzione per " disegno a mano libera "supportato su tutti i principali browser. Se invece siete contenti di usare Firefox, Safari, Chrome, Opera (tutti tranne IE), potete usare SVG. Graphviz può produrre direttamente output SVG (o easy translate), che tu puoi controllare e animare direttamente tramite javascript. In tal modo è possibile riutilizzare alcune delle impostazioni correnti. (http://code.google.com/p/svgweb/ consente anche il supporto per svg in IE) – snies

2

OGDF è in GPL.

Pigale è anch'esso in licenza GPL.

GoVisual è un software commerciale, ma sembra che inizi a $ 1800 per uno sviluppatore.

+0

Awkward per uso commerciale, ma +1 come probabilmente non impossibile (ad esempio, separare il codice GPL in un file binario collegato dinamicamente, separato da codice chiuso). – Steve314

+0

Separare il codice GPL in un binario collegato dinamicamente non aiuta. Il tutto è ancora un'opera derivata del codice GPL. –

+0

Realmente - quindi se uso il codice GPL per scrivere un plug-in Photoshop, l'intero Photoshop diventa improvvisamente un'opera derivata del codice GPL? Adobe non ne sarà molto felice! Oppure Adobe non può utilizzare il codice GPL in un plug-in Photoshop open source, ma io? – Steve314

2

Hmm, GDToolkit (o GDT) sembra a posto: molte delle immagini nello tutorial sembrano molto carine, e non sembra che sia terribilmente complicato da usare.

Edit:.! Ma il controllo della licenza, sembra che sia il software commerciale :-(Ops

+0

La pubblicità può essere migliore di GPL, a seconda del costo, quindi ancora +1. – Steve314

Problemi correlati