Home | Chi sono | Contattami
 

Progr. lineare

Delphi
  Componenti
 
Database
 
Miei articoli

Windows

Miei articoli



 

Graphviz
 

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


 

 
 
Your Ad Here