|
20 Luglio 2007
Graphviz è un ottimo software per la generazione di diagrammi
http://www.graphviz.org/
Dato un file di testo coi dati opportunamente elencati (il cosidetto "dot file"), il software restituisce un bel grafico
Il grafico sopra è stato generato da Graphviz partendo dal seguente file di testo /* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */
digraph unix {
size="6,6";
node [color=lightblue2, style=filled];
"5th Edition" -> "6th Edition";
"5th Edition" -> "PWB 1.0";
"6th Edition" -> "LSX";
"6th Edition" -> "1 BSD";
"6th Edition" -> "Mini Unix";
"6th Edition" -> "Wollongong";
"6th Edition" -> "Interdata";
"Interdata" -> "Unix/TS 3.0";
"Interdata" -> "PWB 2.0";
"Interdata" -> "7th Edition";
"7th Edition" -> "8th Edition";
"7th Edition" -> "32V";
"7th Edition" -> "V7M";
"7th Edition" -> "Ultrix-11";
"7th Edition" -> "Xenix";
"7th Edition" -> "UniPlus+";
"V7M" -> "Ultrix-11";
"8th Edition" -> "9th Edition";
"1 BSD" -> "2 BSD";
"2 BSD" -> "2.8 BSD";
"2.8 BSD" -> "Ultrix-11";
"2.8 BSD" -> "2.9 BSD";
"32V" -> "3 BSD";
"3 BSD" -> "4 BSD";
"4 BSD" -> "4.1 BSD";
"4.1 BSD" -> "4.2 BSD";
"4.1 BSD" -> "2.8 BSD";
"4.1 BSD" -> "8th Edition";
"4.2 BSD" -> "4.3 BSD";
"4.2 BSD" -> "Ultrix-32";
"PWB 1.0" -> "PWB 1.2";
"PWB 1.0" -> "USG 1.0";
"PWB 1.2" -> "PWB 2.0";
"USG 1.0" -> "CB Unix 1";
"USG 1.0" -> "USG 2.0";
"CB Unix 1" -> "CB Unix 2";
"CB Unix 2" -> "CB Unix 3";
"CB Unix 3" -> "Unix/TS++";
"CB Unix 3" -> "PDP-11 Sys V";
"USG 2.0" -> "USG 3.0";
"USG 3.0" -> "Unix/TS 3.0";
"PWB 2.0" -> "Unix/TS 3.0";
"Unix/TS 1.0" -> "Unix/TS 3.0";
"Unix/TS 3.0" -> "TS 4.0";
"Unix/TS++" -> "TS 4.0";
"CB Unix 3" -> "TS 4.0";
"TS 4.0" -> "System V.0";
"System V.0" -> "System V.2";
"System V.2" -> "System V.3";
}
Vengono supportati svariati formati per l'immagine in output tra cui SVG (Scalable Vector Graphics) : SVG è un linguaggio per descrivere grafici bidimensionali in XML. I file SVG sono compatti e consentono una grafica di alta qualità sul Web e su dispositivi palmari a bassa disponibilità di risorse. Inoltre, SVG supporta scripting ed animazioni, ed è quindi ideale per grafici interattivi: si pensi ad esempio alla possibilità di clicckare su un nodo del diagramma in questione e poter gestire tale evento (ad esempio visualizzando un tooltip informativo oppure mettendo il nodo in questione ingrandito in primo piano, etc...). Altra nota importante è che SVG ha delle ottime capacità di zoom: infatti essendo un formato vettoriale, la chiarezza dell'output grafico rimane costante indipendentemente dal livello di zoom scelto. Per visualizzare file grafici in qesto formato (che in pratica poi significa restituire la rappresentazione grafica dell' XML nel file) si può usare Adobe SVG Viewer , un pacchetto di componenti che è liberamente scaricabile e fornisce integrazione con tutti i Browser tramite appositi plug-in: consente di interagire con immagini SVG ed è richiesto appunto per visualizzare contenuto Web che include SVG; inoltre includendo un controllo ActiveX consente la visualizzazione di file SVG all'interno di qualsiasi applicazione (non solo quindi tramite un Browser).
Tornando a Graphviz, il software è Open Source e multipiattaforma; il programma si basa su una serie di exe, principalmente i seguenti:
dot.exe
neato.exe e fdp.exe
twopi.exe
circo.exe
rimando all'homepage del progetto ed alla sua sezione Documentazione per approfondimenti; stesso discorso vale per il formato "dot" con il quale vanno composti i file di testo da usare come input per la creazione dell'immagine del diagramma corrispondente.
C'è chi ha pensato bene di creare un oggetto COM per consentire agli sviluppatori Windows di integrare rapidamente nelle proprie applicazioni le funzionalità di generazione di diagrammi fornite da Graphviz: si chiama WinGraphviz ed è anch'esso OpenSource
http://wingraphviz.sourceforge.net/wingraphviz/
un ottimo esempio di utilizzo è all'indirizzo seguente:
http://www.codeproject.com/database/DatabaseVisualization.asp (C++)
e di seguito anche un bell'esempino in Delphi
http://kylecordes.com/2003/11/24/graphviz-delphi/
Vari sono anche gli applicativi disponibili sul Web che usufruiscono di Graphviz: ad esempio questi 3
QuickGraph Si tratta di una libreria in C# per la gestione dei grafi: implementa strutture dati ed algoritmi relativi alla teoria dei grafi; ad esempio "depth first seach", "breath first search", "shortest path", "maximum flow of a capacitated network", etc... (chi ha fatto un pò di Ricerca Operativa o Teoria dei grafi sa bene di cosa parlo). Usa 2 librerie per la rappresentazione grafica dei grafi: Graphviz appunto e la GLEE (Graph Layout Execution Engine), libreria in C# sviluppata in Microsoft Research; il progetto di QuickGraph nacque a suo tempo con l'obiettivo di convertire in C# la Boost Graph Library (BGL) scritta in C++ (anch'essa dedita a strutture dati ed algoritmi inerenti al teoria dei grafi).
LINK: http://www.codeplex.com/quickgraph
ZGRViewer Si tratta di un applicativo Java basato sulla ZVTM (Zoomable Virtual Transformation Machine) che prende in input un file con all'interno del testo in formato "dot" (ossia l'input per Graphviz) e ne visualizza la rappresentazione grafica: richiede l'installazione di Graphviz in quanto andrà a chiamare i suoi exe per la creazione di un SVG che poi andrà a visualizzare tramite la ZVTM.
LINK: http://zvtm.sourceforge.net/zgrviewer.html
Doxygen Famoso software per la generazione di documentazioni basate sul codice: Open Source e multipiattaforma
LINK: http://www.stack.nl/~dimitri/doxygen/
Altre documentazioni al riguardo:
http://www.codeguru.com/cpp/cpp/algorithms/general/article.php/c12539__1/
Per quanto riguarda documentazioni inerenti la realizzazione di programmi che usano Graphviz per integrare al loro interno funzionalità di generazione di diagrammi:
Codeproject : pagina di ricerca di Codeproject; inserire "Graphviz" come keywords
GraphViz Java API: da Java http://www.loria.fr/~szathmar/off/projects/java/GraphVizAPI/index.php
Poi chiaramente basta usare Google (o Yahoo o altro ...) per trovare riferimenti relativi ad un linguaggio o ambiente specifico
Utile anche la seguente pagina da Wikipedia:
http://en.wikipedia.org/wiki/Graphviz
D'obbligo infine un cenno ad altre librerie per la realizzazione di diagrammi:
AGD: http://www.ads.tuwien.ac.at/AGD/
per Linux e Windows; liberamente scaricabile ma senza sorgenti (almeno non mi sembra che siano disponibili i sorgenti)
GLE (Graph Layout Execution Engine): http://research.microsoft.com/users/levnach/GLEEWebPage.htm
Open Source in C#, come già detto in precedenza viene usata da QuickGraph come engine grafica assieme a Graphviz
Per finire definitivamente, bisogna ricordare la GoDiagram , a pagamento (disponibile versione trial): 3 versioni principali rispettivamente per .Net, Java ed C++/MFC; è decisamente avanzata quindi un occhio tocca buttarglielo per forza. Per un esempio di come usare la versione per .Net all'interno di Delphi (chiaramente le versioni di Delphi che supportano .Net) si può fare riferimento al codice allegato al numero 111 della rivista e scaricabile (in uno zip assieme agli esempi relativi agli altri articoli presenti in quel numero) al seguente indirizzo
http://www.thedelphimagazine.com/disks/dmag111.zip
Behh, adesso direi che è proprio la FINE
|