Graphviz
Graphviz
Graphviz
1
¿COMO DIBUJAR UNA ESTRUCTURA DE
DATOS UTILIZANDO GRAPHVIZ Y SU
LENGUAJE DOT?
¿Cómo dibujar una estructura de datos utilizando Graphviz?
Muchos estudiantes de la materia muestran especial interés en mostrar gráficamente las
estructuras de datos en sus aplicaciones; sin embargo, este proceso demanda una
cantidad considerable de tiempo y esfuerzo de programación que puede desviar la
atención del objetivo fundamental del curso. Por esta razón, en esta sección se analiza
una forma de lograrlo sin sacrificar tiempo dedicado en sí a la estructura por medio de la
utilización de un software de libre distribución con este fin: Graphviz y el lenguaje dot.
451
452 Estructuras de Datos Orientadas a Objetos. Pseudocódigo y aplicaciones en C#
2.- Colocar los nodos y sus relaciones: Después de definir el tipo y nombre de la
figura, las siguientes líneas de código crean los nodos y sus relaciones mediante líneas
ó flechas. Las definiciones de los nodos y sus relaciones se colocan entre los símbolos
{ y }. Un nodo se crea cuando su nombre aparece al principio de la línea y su relación
con otro nodo se genera por medio del operador -> para relaciones dirigidas (con punta
de flecha) ó -- para relaciones no dirigidas (sin punta de flecha). Cuando se desea
etiquetar cada relación con un valor, se coloca la sentencia [label=valor]. Cada
definición de los nodos y sus relaciones debe terminar con el símbolo de puntuación del
punto y coma (;).
Capítulo 8. Árboles binarios 453
La Fig. 8.22 muestra un pequeño programa en lenguaje dot que dibuja un ABB. Esta
figura contiene un programa para generar un ABB llamado Figura cuyos nodos están
unidos mediante flechas (digraph), donde la raíz es el nodo 60 y tiene como hijo
izquierdo al nodo 40 y su hijo derecho es el nodo 90; a su vez el nodo 40 tiene como hijo
izquierdo al 34 y como hijo derecho al 50.
digraph Figura {
Raíz->60;
60->40;
60->90;
40->34;
40->50;
}
Fig. 8.24. Parámetros necesarios para generar un archivo con la imagen en lenguaje dot.
¿Cómo generar una imagen desde una aplicación de formas de Windows utilizando un
programa en lenguaje dot?
Como se puede apreciar, es sumamente sencillo generar imágenes utilizando el lenguaje
dot de Graphviz, basta con generar el programa en un archivo de texto con los nodos y
sus relaciones y ejecutarlo para generar una imagen en un formato definido, la cual se
puede desplegar en una forma de Windows mediante un PictureBox. Para ello, se
agregan métodos a la clase del ABB de la aplicación de consola para que permita realizar
estas operaciones.
if (NodoActual.HijoDer != null)
Resultado = Resultado + "\n" + NodoActual.Dato.ToString() + "->" +
NodoActual.HijoDer.Dato.ToString() + ";";
La forma mostrada en la Fig. 8.21 muestra un botón que sirve para dibujar un ABB.
Cuando se oprime el button6, se verifica que el ABB no esté vacío y se procede a invocar
el método DibujarFigura(). El código de este botón se muestra a continuación:
//
==============================================================================
// Ejecución del proceso por lotes DIBUJAR.bat para crear la imagen
Figura.jpg
InvocaDibujar();
458 Estructuras de Datos Orientadas a Objetos. Pseudocódigo y aplicaciones en C#
//
==============================================================================
return (Resultado);
}
Capítulo 8. Árboles binarios 459
2.- Ejecutar el programa escrito en lenguaje dot: Una vez creado el programa
Figura, se procede a ejecutarlo para generar el archivo con la imagen correspondiente.
Para lograrlo, se ejecuta el código del procedimiento InvocaDibujar() que
simplemente ejecuta un programa de procesamiento por lotes (batch) llamado
Dibujar.bat, el cual contiene los comandos y parámetros necesarios para ejecutar un
programa en lenguaje dot. El código de este procedimiento se muestra a continuación:
@echo off
del \Figura.jpg
\"Archivos de programa\Graphviz 2.28"\bin\DOT -Tjpg -O \Figura
La línea @echo off es una sentencia de este tipo de programas que evita desplegar
en pantalla los comandos que está ejecutando.
Al ejecutar este programa de procesamiento por lotes, primero se elimina el archivo
\Figura.jpg (ubicado en la carpeta raíz) para evitar desplegar la imagen de un archivo
generado previamente, después se invoca la ejecución del programa Figura, a través
del interpretador de comandos de programas dot (dot.exe) ubicado en la carpeta
\"Archivos de programa\Graphviz 2.28"\bin\ y la colocación los
parámetros correspondientes. Es importante mencionar que al momento de escribir
460 Estructuras de Datos Orientadas a Objetos. Pseudocódigo y aplicaciones en C#
esta sección, la versión 2.28 es la más actualizada y está instalada en dicha carpeta.
Asegúrese identificar la ruta de directorios ó carpeta de localización del programa
dot.exe al momento de desarrollar su aplicación.
Con esto, el programa Dibujar.bat toma como entrada el archivo Figura (en
lenguaje dot) y genera el archivo Figura.jpg con la imagen del ABB.
//
==============================================================================
// Creación de un pictureBox en la nueva forma
PictureBox picABB = new PictureBox(); // Crea un pictureBox
picABB.Parent = frmNuevaVentana; // Establece que el pictureBox está
dentro de la nueva forma
picABB.Width = 990; // Define el ancho del pictureBox
picABB.Height = 565; // Define la altura del pictureBox
picABB.SizeMode = PictureBoxSizeMode.Zoom; // Define el modo del tamaño del
pictureBox con ajuste automático
//
==============================================================================
// Abre el archivo Figura.jpg en modo de sólo lectura
System.IO.FileStream AliasFigura; // Declaración del alias del archivo
Figura.jpg
{
MessageBox.Show("No se pudo abrir el archivo \\FIGURA.jpg", "E R R O
R", MessageBoxButtons.OK, MessageBoxIcon.Error);
frmNuevaVentana.Close(); // Cierra la nueva forma
return;
}
//
==============================================================================
// Carga la imagen del ArbolBinarioBusqueda.jpg en el pictureBox
Este procedimiento genera una nueva forma y dentro de ella un pictureBox que
servirá para desplegar la imagen del ABB. Una vez hecho esto, intenta abrir el archivo
Figura.jpg (en modo sólo lectura), cargar la imagen que contiene en el pictureBox y
cerrar el archivo. La ejecución de estas operaciones se verifica a través de sentencias
try-catch para evitar la posibilidad de errores como la inexistencia del archivo durante la
apertura ó la imposibilidad de cargar su imagen.
Fig. 8.26. Mensaje de creación del programa dot para generar la Figura.jpg
Después aparece una nueva ventana con una forma de Windows que despliega la
imagen del ABB (Fig. 8.27).
Fig. 8.27. Nueva ventana con la forma que contiene la imagen del ABB en el archivo Figura.jpg