Graphviz es una herramienta que agrupa varios programas que generan distintos tipos de grafos a partir de archivos con un lenguaje definido. o tambien a travez de una api. (ejemplo de uso de graphviz desde C# para dibujar árbol binario, ejemplo de graphviz para dibujar un arbol B)
primero te descargas el paquete de graphviz y lo instalas
http://www.graphviz.org/Download_windows.php
eso crea en archivos de programa una carpeta
C:\Archivos de programa\Graphviz 2.28\bin
ahi estan los ejecutables que nos interesan, en este caso por lo que planteas vamos a usar dot.exe que es para dibujar grafos dirigidos jerarquicos.
algo mas del lenguaje dot
http://www.graphviz.org/Documentation/dotguide.pdf
un ejemplo de grafo simple
grafo1.txt
otro mas
grafo2.txt
ahora para generar un jpg a partir de estos codigos, digamos que tenes dos archivos. grafo1.txt y grafo2.txt
se debe invocar en la consola el siguiente comando
a lo mas concreto para nuestros archivos de prueba
y
ahora para hacer esto desde java. vas a tener que generar el texto que representa el grafo para luego invocar a dot.exe desde java y que te genere el jpg y luego jalar el jpg y mostrarlo en java. (esto es solo una forma, si conseguis el api de graphviz para java, mejor pero ya es otro metodo)
lo que vas a hacer para invocar la generacion es usar Runtime.getRuntime().exec() de java para invocar a dot.exe y mandarle los parametros de tus archivos que queres pasar a jpg.
Solo tenes que ver donde generas tus archivos de texto para representar los grafos, y luego invocar a dot y que te genere los jpgs. ya de ahi usas los jpgs donde sea necesario...
otros links de referencia
http://java.sun.com/developer/JDCTechTips/2003/tt0304.html
http://blog.taragana.com/index.php/archive/java-runtimeexec-guide/es/
http://www.ibm.com/developerworks/library/l-graphvis/
primero te descargas el paquete de graphviz y lo instalas
http://www.graphviz.org/Download_windows.php
eso crea en archivos de programa una carpeta
C:\Archivos de programa\Graphviz 2.28\bin
ahi estan los ejecutables que nos interesan, en este caso por lo que planteas vamos a usar dot.exe que es para dibujar grafos dirigidos jerarquicos.
algo mas del lenguaje dot
http://www.graphviz.org/Documentation/dotguide.pdf
un ejemplo de grafo simple
grafo1.txt
Código:
digraph G
{
node1;
node2;
node3;
node1 -> node2 [label="linea1"];
node1 -> node3 [label="linea2"];
node2 -> node3 [label="linea3"];
}
otro mas
grafo2.txt
Código:
digraph G
{
main->parse->execute
main->init;
main->cleanup;
execute->make_string;
execute->printf
init->make_string;
main->printf;
execute->compare;
}
ahora para generar un jpg a partir de estos codigos, digamos que tenes dos archivos. grafo1.txt y grafo2.txt
se debe invocar en la consola el siguiente comando
Código:
...path_de_dot...\dot.exe -Tjpg archivo_de_entrada -o archivo_de_salida
a lo mas concreto para nuestros archivos de prueba
Código:
C:\Archivos de programa\Graphviz 2.28\bin\dot.exe -Tjpg grafo1.txt -o grafo1.jpg
y
Código:
C:\Archivos de programa\Graphviz 2.21\bin\dot.exe -Tjpg grafo2.txt -o grafo2.jpg
ahora para hacer esto desde java. vas a tener que generar el texto que representa el grafo para luego invocar a dot.exe desde java y que te genere el jpg y luego jalar el jpg y mostrarlo en java. (esto es solo una forma, si conseguis el api de graphviz para java, mejor pero ya es otro metodo)
lo que vas a hacer para invocar la generacion es usar Runtime.getRuntime().exec() de java para invocar a dot.exe y mandarle los parametros de tus archivos que queres pasar a jpg.
Código:
public class Main {
public static void main(String[] args) {
System.out.println("Hola Mundo");
try {
String dotPath = "c:\\Archivos de programa\\Graphviz 2.28\\bin\\dot.exe";
String fileInputPath = "c:\\grafo1.txt";
String fileOutputPath = "c:\\grafo1.jpg";
String tParam = "-Tjpg";
String tOParam = "-o";
String[] cmd = new String[5];
cmd[0] = dotPath;
cmd[1] = tParam;
cmd[2] = fileInputPath;
cmd[3] = tOParam;
cmd[4] = fileOutputPath;
Runtime rt = Runtime.getRuntime();
rt.exec( cmd );
} catch (Exception ex) {
ex.printStackTrace();
} finally {
}
}
}
Solo tenes que ver donde generas tus archivos de texto para representar los grafos, y luego invocar a dot y que te genere los jpgs. ya de ahi usas los jpgs donde sea necesario...
otros links de referencia
http://java.sun.com/developer/JDCTechTips/2003/tt0304.html
http://blog.taragana.com/index.php/archive/java-runtimeexec-guide/es/
http://www.ibm.com/developerworks/library/l-graphvis/
Muy buen aporte =)
ResponderBorrar:)
ResponderBorrarAqui van las lineas para la generacion de una imagen en formato jpg en la linea de comandos de windows. (cmd)
ResponderBorrarNos ubicamos en el directorio donde se encuentra el .txt con el codigo para la generacion del grafo. Ejemplo
C:\Users\usuarioejemplo
escribir el siguiente comando:
dot -Tjpg ejemplo.txt -o ejemplo.jpg
Donde:
"-Tjpg" es el formato de la imagen del grafo que queremos generar.
"ejemplo.txt" es el nombre del archivo donde pegamos el codigo que genera la imagen. Diagraph g{ etc }
"ejemplo.jpg" es el nombre del archivo de salida, es decir el nombre de la imagen, esta sera la imagen del grafo generado.
para ejecutarlo en c++?? Gracias :)
ResponderBorrarse puede hacer el programa de forma en que se pida al usuario las relaciones entre cada nodo del grafo así como el orden que desea tener?
ResponderBorrarMuchas Gracias, Muy buen post.
ResponderBorrar