Sunteți pe pagina 1din 36

Pgina 1

Usando Graphviz como una biblioteca


(versin cgraph)

R. Emden Gansner
21 de de agosto de, 2014

Pgina 2
Graphviz biblioteca manual, 21 de Agosto, 2014

Contenido
1. Introduccin

1.1 diseos
basados
1.1.1 punto.
. .en
. . cadena.
. . . . . . .............................................................. . . . . . .
1.1.2 xdot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.3 llano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.4 llano-ext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.5 GXL y GML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Graphviz como una biblioteca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
5
5
6
7
7
7

2 delineado de grfico bsico


2.1 Creacin de la grfica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Atributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Atributo y cadenas HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Trazado de la grfica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Representacin de la grfica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 nodos de dibujo y bordes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 La limpieza de un grfico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8
8
10
diecisis
17
17
19
20

4 El contexto Graphviz
4.1 Datos especficos de la versin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25
26

5 prestadores de grficos
5.1 La estructura de datos GVJ t. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Dentro de la estructura de datos de estado t obj. . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 La informacin de color. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26
30
30
31

7 grficos no conectados

37

Una compilacin y del enlace

42

CA programa de ejemplo: dot.c

44

DA programa de ejemplo: demo.c

45

3 Dentro de los diseos


3.1 punto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Neato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 FDP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 SFDP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 DosPi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 circo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 La adicin de complementos
6.1 Escribir un procesador de plug-in. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Escritura de un plug-in de dispositivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Escritura de un plug-in carga de imgenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Programa de ejemplo BA: simple.c

21
22
22
24
24
24
25

32
34
35
35

43

Pgina 3
Graphviz biblioteca manual, 21 de Agosto, 2014
E Algunos tipos bsicos y sus representaciones de cadena

3
46

pgina 4
Graphviz biblioteca manual, 21 de Agosto, 2014

1. Introduccin
El paquete Graphviz consiste en una variedad de software para la elaboracin de grficos atribuidos. Implementa una
puado de algoritmos de diseo grfico comn. Estos son:
Un punto de estilo Sugiyama disposicin jerrquica [STT81, GKNV93].

Neato Un algoritmo "simtrica" el diseo basado en la reduccin del estrs. Esta es una variacin de multidimensional
escalamiento [KS80, Coh87]. La implementacin por defecto utiliza mayorizacin estrs [GKN04]. un suplente
aplicacin utiliza el algoritmo de Kamada-Kawai [KK89]
FDP Una implementacin del algoritmo de la fuerza dirigida Fruchterman-Reingold [FR91] para "simtrica"
diseos. Este diseo es similar al neato, pero hay diferencias de funciones y rendimiento.
SFDP Un diseo de la fuerza dirigida multiescala utilizando un modelo de primavera-elctrica [Hu05].
DosPi Una disposicin radial como se describe por Wills [Wil97].

Circo de planta circular que combina aspectos de la obra de seis y Tollis [ST99, ST00] y Kaufmann y
Wiese [KW].
patchwork Una aplicacin de diagramas de rbol squarified [BHvW00].

Osage Un algoritmo de diseo de grficos agrupados en base a las especificaciones del usuario.

Adems, Graphviz proporciona un surtido de ms algoritmos de grfico de propsito general, tales como transitivo
reduccin, que han demostrado ser tiles en el contexto de dibujo grfico.
El paquete fue diseado [GN00] que confiar en el modelo de "programa-como-filtro" de software, en la que dislas operaciones con grficos tinct o transformaciones estn realizados como programas. Dibujo y manipulacin grfica son
logrado mediante el uso de la salida de un filtro como la entrada de otro, con cada filtro reconocer un comn,
basado en texto de formato grfico. Uno por lo tanto tiene un lgebra de grficos, usando un lenguaje de script para proporcionar la base
idioma con variables y la aplicacin de funciones y composicin.
A pesar de la sencillez y la utilidad de este enfoque, algunas aplicaciones necesitan o desean utilizar el software
como una biblioteca con fijaciones en un lenguaje de scripting, no ms que como primitivas compuestas utilizando un scripting
idioma. El software Graphviz ofrece una variedad de maneras de lograr esto, la ejecucin de un espectro que va desde muy
simple, pero un tanto inflexible a bastante complejo pero que ofrece una buena cantidad de control de aplicaciones.
1.1 diseos basados en cadenas

El mecanismo ms simple para hacer esto consiste en utilizar el mtodo de filtro en el encubrimiento. La aplicacin,
tal vez utilizando la biblioteca cgraph Graphviz, construye una representacin de un grfico en el lenguaje de DOT.
La aplicacin puede invocar el programa de diseo que desee, por ejemplo, el uso del sistema o popen en un Unix
sistema, pasando el grfico usando un archivo intermedio o un tubo. El programa de diseo calcula la posicin

informacin para el grfico, se adhiere este como atributos, y proporciona el grfico de nuevo a la aplicacin a travs
otro archivo o tubera. La aplicacin puede leer en el grfico, y aplicar la informacin geomtrica como
necesario. Este es el mtodo utilizado por muchas aplicaciones, por ejemplo, manchado [KN94] y grappa [LBM97], el cual
confiar en Graphviz.
Hay varios formatos de salida Graphviz que se pueden utilizar en este enfoque. Al igual que con todas las salidas
formatos, que se especifican por medio de un comentario -T cuando se invoca el programa de diseo. La entrada a los programas
siempre debe estar en el idioma del DOT.

pgina 5
Graphviz biblioteca manual, 21 de Agosto, 2014

1.1.1 dot

Este formato se basa en el lenguaje DOT para describir los grficos, con los atributos que se adjuntan como pares de nombre y valor.
La biblioteca cgraph ofrece un programa de anlisis de grficos representados en el DOT. El uso de este, es fcil de leer la
grficos y consultar los atributos deseados usando agget o agxget. Para obtener ms informacin sobre estas funciones,
vase la Seccin 2.1.1. Las representaciones de cadena de los distintos tipos incluidos se describen en el Apndice E.
En la salida, el grfico tendr un atributo de tipo bb rectngulo, especificando el cuadro delimitador de la
dibujo. Si el grfico tiene una etiqueta, su posicin est especificado por el atributo lp de tipo punto.
Cada nodo recibe pos, atributos de anchura y altura. La primera tiene tipo punto, e indica el centro
del nodo en los puntos. Los atributos de anchura y altura son nmeros de punto flotante que dan el ancho y
de altura, en pulgadas, de cuadro delimitador del nodo. Si el nodo tiene una forma de disco, se dan los rectngulos de registro
en los rects atribuir. Esto tiene el formato de una lista separada por espacios de los rectngulos. Si el nodo es un polgono
(incluyendo elipses) y los vrtices atributo se define para los nodos, este atributo contendr los vrtices
del nodo, en pulgadas, como una lista separada por espacios de valores PointF. Para elipses, la curva se muestrea, la
nmero de puntos utilizados ser controlado por el atributo samplepoints. Los puntos se dan en relacin
al centro del nodo. Tenga en cuenta tambin que los puntos slo dan la forma bsica del nodo; que no reflejan
cualquier estructura interna. Si el nodo tiene periferias mayor que uno, o una forma como "msquare", el
vrtices atribuyen no representa las curvas o lneas adicionales.
Cada borde se le asigna un tipo de atributo SPLINETYPE pos tener. Si el borde tiene una etiqueta, la etiqueta
posicin se da en el lp de tipo punto.
1.1.2 xdot

El formato xdot es una extensin del formato estricto punto, ya que proporciona los mismos atributos como punto como
as como los atributos de dibujo adicional. Estos atributos adicionales especifican cmo dibujar cada componente de la
grfico usando las operaciones de grficos primitivos. Esto puede ser particularmente til en el tratamiento y formas de los nodos
puntas de flecha de borde. A diferencia de la informacin proporcionada por los vrtices atributo descrito anteriormente, el extra
atributos en xdot proporcionar toda la informacin de dibujo geomtrico, incluyendo los diversos tipos de puntas de flecha
y las etiquetas de varias lneas con las variaciones en la alineacin. Adems, todos los parmetros utilizan las mismas unidades.
Hay seis nuevos atributos, que se enumeran en la Tabla 1. Estos atributos de dibujo slo son conectados a los nodos y
bordes. Claramente, los ltimos cuatro atributos solamente estn unidos a los bordes.
dibujar
LDraw
hdraw
tdraw
hldraw
tldraw

Operaciones de dibujo general


Operaciones de dibujo etiqueta
punta de flecha de cabeza
punta de flecha de la cola
etiqueta de la cabeza
etiqueta de la cola

Tabla 1: atributos de dibujo xdot

El valor de estos atributos son cadenas que consiste en la concatenacin de un conjunto (multi) del 7
las operaciones que figuran en la Tabla 2. El color, el nombre de la fuente de dibujo, y los valores de estilo suministrado en el C, C, F y S
operaciones tienen el mismo formato y la interpretacin como el color, el nombre de fuente, estilo y atributos en el
grfico fuente.
En el manejo de la alineacin, la aplicacin puede querer volver a calcular el ancho de cadena utilizando su propia fuente dibujo
ing primitivas.
La operacin de texto slo se utiliza en los atributos de la etiqueta. Normalmente, las operaciones de grficos no son de texto son
slo se utiliza en los atributos que no tiene etiqueta. Sin embargo, si un nodo tiene la forma = "registro" o una etiqueta HTML como

Pgina 6

Graphviz biblioteca manual, 21 de Agosto, 2014

2= 1
Elipse rellena con la ecuacin ((x - x0) / w)2 + ((Y - y 0)/marido)
2=1
Elipse sin relleno con la ecuacin ((x - 0x) / w)2 + ((Y - y 0)/marido)
ynorte Polgono relleno con los n vrtices dados
norte
ynorte Polgono sin llenar con los n vrtices dados
norte
ynorte Polilnea con los n vrtices dados
norte
ynorte B-spline con los puntos de control n dadas. n 1mod3 y n 4
norte
ynorte Llenado B-spline con los puntos de control n dadas. n 1mod3 y n 4
norte
1do2 donorteTexto elaborado utilizando el punto de referencia (x, y). El texto se compone de los n bytes
siguiendo '-'. El texto debe estar alineado a la izquierda (centrado, alineado a la derecha) en
el punto si j es -1 (0, 1), respectivamente. El valor de w da la anchura de la
texto calculado por la biblioteca.
Establecer las caractersticas de fuente. El nmero entero f es la OR de BOLD = 1, cursiva = 2,
tf
UNDERLINE = 4, superndice = 8, el subndice = 16, y la Huelga
A TRAVS DE = 32.
Establecer el color usado para rellenar regiones cerradas. El color se especifica mediante la carac- n
C n -C 1do
2 donorte
carac- siguientes '-'.
Establecer color de la pluma, el color utilizado para el texto y dibujo lineal. El color es especificado
-c cn 1do
2 donorte
ficado por los caracteres siguientes n '-'.
Establecer la fuente. El tamao de la letra es s puntos. El nombre de la fuente se especifica por el n
F sn -c 1do
2 donorte
caracteres siguientes '-'.
Conjunto de atributos de estilo. El valor de estilo se especifica mediante los siguientes n caracteres
S n -c 1do
2 donorte
'-'.
Me xyjwn -c 1do2 donorteImagen dibujada en la caja con la esquina inferior izquierda externamente especificada por (x, y)
y la esquina superior derecha (x + w, y + h). El nombre de la imagen consiste en
los n bytes siguientes '-'. Esto es por lo general una imagen de mapa de bits. Tenga en cuenta que la
tamao de la imagen, incluso cuando se convierten de pxeles de puntos, puede ser diferente
Del tamao requerido (w, h). Se asume el procesador llevar a cabo la
escalamiento necesario.
E x0 y0 WH
ex 0 y0 WH
P nx 1 y1 ... x
pnx 1 y1 ... x
L nx 1 y1 ... x
nx B 1 y1 ... x
bnx 1 y1 ... x
T xyjwn -c

Tabla 2: operaciones de dibujo xdot

est implicado, un atributo de etiqueta tambin puede contener diversas operaciones grficas. Adems, si el decorar
atributo se establece en un borde, su atributo de etiqueta tambin contendr una operacin de polilnea.
Todas las coordenadas y tamaos estn en puntos. Si un borde o nodo es invisible, no se adjuntan operaciones de dibujo
lo.
1.1.3 llano

El formato es sencillo basa alineacin y muy fcil de analizar. Esto funciona bien para aplicaciones que necesitan o
desear evitar el uso de la biblioteca cgraph. El precio de esta simplicidad es que el formato codifica muy poco
informacin de diseo detallada all de la informacin bsica posicin. Si una aplicacin necesita ms de lo que es
contenidas en el formulario, se debe utilizar el formato de puntos o xdot.
Hay cuatro tipos de lneas: Grfico, nodo de borde y de parada. La salida consta de un solo grfico
lnea; una secuencia de lneas de nodo, una para cada nodo; una secuencia de lneas de borde, uno para cada borde; y una
lnea de detencin de terminacin nica. Todas las unidades estn en pulgadas, representados por un nmero de coma flotante.
Como se ha sealado, los estados tienen formatos muy simples.
grfico de ancho alto escala

pgina 7
Graphviz biblioteca manual, 21 de Agosto, 2014

nombre de nodo xy ancho de estilo de etiqueta de altura de color de la forma fillColor


ynorte
[xl etiqueta il] Color de estilo
nx borde de la cola 1 y1 ... x norte
detener

Ahora describir los estados con ms detalle.

Representa grficamente los valores de anchura y altura dan el ancho y la altura del dibujo. La esquina inferior izquierda de
el dibujo est en el origen. El valor de la escala indica cmo el dibujo debe ser escalado si un tamao
atributo y se le dio el dibujo tiene que ser reducido para ajustarse a ese tamao. Si no es escalado
es necesario, se ajustar a 1,0. Tenga en cuenta que todo el grfico, el nodo y el borde coordina y se dan las longitudes
sin escala.

El nodo de valor de nombre es el nombre del nodo, y X e Y da la posicin del nodo. La anchura y la altura
son el ancho y la altura del nodo. Los valores de etiqueta, estilo, forma, color y fillColor dan el nodo de
etiqueta, estilo, forma, color y fillColor, respectivamente, utilizando por defecto los valores de atributo cuando sea necesario. Si

el nodo no tiene un atributo de estilo, "slido" se utiliza.

El borde de la cola y valores de carga dan los nombres de los nodos de cabeza y cola. n es el nmero de control de
puntos que definen el B-spline que forma el borde. Esto es seguido por n nmeros 2 * que dan la x y
y las coordenadas de los puntos de control con el fin de la cola a la cabeza. Si el borde tiene un atributo de etiqueta,
esto viene a continuacin, seguido de las coordenadas X e Y de la posicin de la etiqueta. La descripcin de borde es
completado por el estilo y el color del borde. Al igual que con los nodos, si no se define un estilo, "slido" se utiliza.
1.1.4 llano-ext

El formato plain-ext es idntico con el formato normal, excepto que los nombres de los puertos estn unidos a la
nombres de los nodos en un borde, en su caso. Utiliza la representacin DOT habitual, donde la conexin P de nodo n es
dado como n: p.
1.1.5 GXL y GML

El GXL [Win02] dialecto de XML y GML [l] son un estndares ampliamente utilizados para la representacin atribuida
grficos como de texto, especialmente en las comunidades de dibujo grfico y la ingeniera de software. Hay muchas herramientas
disponible para el anlisis y el anlisis de los grficos representados en estos formatos. Y, como GXL se basa en XML,
es susceptible a la panoplia de herramientas XML.
Varios paquetes de dibujo y manipulacin de grficos o bien utilizan GXL o GML como su grfico principal guaje
guage, o proporcionar un traductor. En esto, Graphviz no es diferente. Suministramos la gv2gxl programas, gxl2gv,
gv2gml y gml2gv para la conversin entre el Departamento de Transporte y estos formatos. Por lo tanto, si una aplicacin es en XML
basada, al utilizar las herramientas Graphviz, tiene que insertar estos filtros segn proceda, entre sus E / S y el
Graphviz programas de diseo.
1.2 Graphviz como una biblioteca

El papel de este documento es describir cmo una aplicacin puede utilizar el software Graphviz como una biblioteca en vez
que como un conjunto de programas. Se describir la API destinado a diversos niveles, concentrndose en el objetivo
de las funciones de un punto de vista de aplicacin, y la forma en que las funciones de la biblioteca se deben usar juntos,
por ejemplo, que uno tiene que llamar a la funcin A antes de la funcin B. La intencin no es proporcionar pginas manuales detallados,
en parte porque la mayora de las funciones tiene un interfaz de alto nivel, a menudo simplemente tomar un puntero grfico como el
argumento nico. Los detalles semnticos reales estn incrustados en los atributos de la grfica, que se describen
en otra parte.

pgina 8
Graphviz biblioteca manual, 21 de Agosto, 2014

El resto de este manual se describe cmo construir una aplicacin que utiliza Graphviz como una biblioteca en el
sentido habitual. La siguiente seccin presenta la tcnica bsica para utilizar el cdigo Graphviz. Puesto que el otro
enfoques no son ms ramificaciones y extensiones del enfoque bsico, la seccin tambin sirve como una
visin general de todos los usos. Seccin 3 saltos de cada algoritmo de diseo aparte en sus pasos individuales. Con este
informacin, la aplicacin tiene la opcin de eliminar algunos de los pasos. Por ejemplo, todos de la disposicin
Los algoritmos pueden layout bordes como estras. Si la aplicacin tiene la intencin de atraer a todos los bordes, como segmentos de lnea, lo hara
probablemente desee evitar el clculo spline, especialmente ya que es bastante caro en trminos de tiempo.
Seccin 2.3 se explica cmo una aplicacin puede invocar a los prestadores de Graphviz, generando de esta manera un dibujo
de un grfico en un formato de grficos concretos, tales como PNG o PostScript. Para una aplicacin con la intencin de hacer su
propia prestacin, Seccin 5 recomienda una tcnica que permite a la biblioteca Graphviz manejar toda la
detalles de contabilidad relacionadas con estructuras de datos y representaciones dependientes de la mquina mientras la aplicacin
Solo hay que suministrar unas pocas funciones grficas bsicas. Seccin 7 discute una biblioteca auxiliar para hacer frente a
grficos que contienen mltiples componentes conectados.
Nota: El uso de Graphviz como una biblioteca no es seguro para subprocesos.
2 delineado de grfico bsico
La figura 1 muestra una plantilla para el uso de la biblioteca bsica de Graphviz, en este caso mediante el punto jerrquico
diseo. (Apndice B proporciona el listado del programa completo.) Bsicamente, el programa crea un grfico
el uso de la biblioteca cgraph, el establecimiento de nodos y atributos de borde a afectar la forma en la grfica se va a dibujar; llama a la
Cdigo de disposicin; y luego usa la informacin de posicin adjunta a los nodos y los bordes para hacer que el grfico.
El resto de esta seccin explora estos pasos con ms detalle.
Agraph_t * GRAMO;
GVC_t * GVC;

GVC = gvContext ();


G = createGraph ();
gvLayout (GVC, G, "punto"); /
DrawGraph (G);
gvFreeLayout (GVC, g);
agclose (G);

/ * funcin de la biblioteca

*/

* funcin de la biblioteca

*/

/ * funcin de la biblioteca
/ * funcin de la biblioteca

*/
*/

gvFreeContext (GVC);
Figura 1: Uso bsico
Aqu, slo observamos el parmetro GVC. Se trata de un identificador de un contexto Graphviz, que contiene el dibujo
y de la representacin independiente de las propiedades correspondientes a un grfico particular, as como variabilidad
informacin de estado de las unidades organizativas. Por el momento, vemos esto un parmetro abstracto necesaria para los diversos Graphviz
funciones. Vamos a discutir ms a fondo en la seccin 4.
2.1 Creacin de la grfica

El primer paso en la elaboracin de un grfico es crearlo. Para utilizar el software de diseo Graphviz, el grfico debe ser
creado utilizando la biblioteca cgraph.
Podemos crear un grfico en una de dos maneras principales, utilizando agread o agopen. La primera funcin toma
un puntero FILE * en un archivo abierto para lectura.

pgina 9
Graphviz biblioteca manual, 21 de Agosto, 2014

ARCHIVO
* fp;
Agraph_t * G = agread (fp, 0);

Se supone que el archivo contiene la descripcin de grficos usando el lenguaje DOT. La funcin agread
analiza un grfico a la vez, devolver un puntero a un grfico atribuido generado a partir de la entrada, o NULL si
no hay ms grficos o se produjo un error.
La biblioteca Graphviz proporciona varias variaciones especializados de agread. Si la representacin del DOT
el grfico se almacena en la memoria en char * cp, luego
Agraph_t

* G = agmemread (cp);

Agraph_t

* G = agread (dp, y disco);

Agraph_t

* G = agopen (nombre, tipo, y disco);

se puede utilizar para analizar la representacin. Por defecto, la funcin agread basa en el archivo estndar
la estructura y la funcin fgets de la biblioteca stdio. Puede proporcionar su propia dp fuente de datos, junto con
su propio disco de la disciplina para la lectura de los datos a leer un grfico usando
Ms detalles sobre el uso de agread y disciplinas se pueden encontrar en el manual de la biblioteca cgraph.
La tcnica alternativa es llamar agopen.
El primer argumento es un char * dando el nombre de la grfica; el segundo argumento es un valor t Agdesc
que describe el tipo de grfico que se crear. Un grfico puede ser dirigida o no dirigida. Adems, un grfico puede
ser estricto, es decir, tener como mximo un borde entre cualquier par de nodos, o no estricto, lo que permite un nmero arbitrario
de aristas entre dos nodos. Si el grfico se dirige, el par de nodos est ordenada, de manera que el grfico puede tener
bordes del nodo A al nodo B, as como los bordes de B a A. Estas cuatro combinaciones son especificados por el
Los valores de la Tabla 3. El valor de retorno es un nuevo grfico, sin nodos o bordes. Por lo tanto, para abrir un grfico llamado
Tipo de grfica
Grafico
Agundirected
No estricto, grafo no dirigido
Agstrictundirected estricto, grafo no dirigido
Agdirected
No estricto, grafo dirigido
Agstrictdirected
Estricta, grafo dirigido
Tabla 3: Tipos de grficos

"red" que se dirige, pero no estricta, se podra usar


Agraph_t

* G = agopen ( "red", Agdirected, 0);

El tercer argumento es un puntero a una disciplina de las funciones usadas para la lectura, la memoria, etc. Si el valor de 0
o se utiliza NULL, la biblioteca utiliza una disciplina por defecto.
Los nodos y los bordes son creados por las funciones de agnode y agedge, respectivamente.
Agnode_t
Agedge_t

* agnode (Agraph_t
* agedge (Agraph_t

* , char * , Int);
* , Agnode_t
* , Agnode_t

* , char

* , Int);

El primer argumento es el grfico que contiene el nodo o borde. Tenga en cuenta que si se trata de un subgrafo, el nodo o borde
Tambin pertenecern a todos los grficos que contienen. El segundo argumento de agnode es el nombre del nodo. Esta es una clave
para el nodo en el grfico. Si agnode se llama dos veces con el mismo nombre, la segunda invocacin
No crear un nuevo nodo, sino simplemente devolver un puntero al nodo previamente creada con el nombre dado. los

pgina 10
Graphviz biblioteca manual, 21 de Agosto, 2014

10

tercer argumento especifica si un nodo del nombre dado debe ser creado si no lo hace ya
existe.
Los bordes son creados usando agedge mediante introduccin de dos nodos del borde. Si el grfico no es estricta, adicional
pide a agedge con los mismos argumentos crear bordes adicionales entre los dos nodos. La cuerda
argumento le permite proporcionar un nombre ms para distinguir entre los bordes con la misma cabeza y la cola.
Si el grfico es estricta, las llamadas adicionales se limitan a devolver el borde ya existente. Para los grafos dirigidos, la primera
y segundo argumento de nodo se considera que son los nodos de cola y la cabeza, respectivamente. Para grafo no dirigido, que
Todava desempear este papel para las funciones agfstout y agfstin, pero al comprobar si existe una ventaja con
agedge o agfindedge, el orden es irrelevante. Al igual que con agnode, el ltimo argumento especifica si
o no el borde debe ser creado si no existe todava.
Como se sugiri anteriormente, una grfica puede contener tambin subgraphs. Estos son creados usando agsubg:
Agraph_t

* agsubg (Agraph_t

* , char

* , Int);

El primer argumento es la grfica principal inmediato; el segundo argumento es el nombre del subgrafo; el final
argumento indica si el subgrafo debe ser creado.
Subgraphs juegan tres papeles en Graphviz. En primer lugar, un subgrafo puede ser usado para representar la estructura grfica,
lo que indica que ciertos nodos y los bordes deben estar agrupados. Este es el papel habitual de subgrafos
y por lo general especifica la informacin semntica acerca de los componentes del grfico. En esta generalidad, el dibujo
el software no hace uso de subgrafos, pero mantiene la estructura para su uso en otros lugares dentro de una aplicacin.
En el segundo papel, un subgrafo puede proporcionar un contexto para el establecimiento de atributos. En Graphviz, estos son a menudo
atributos usados por las funciones de diseo y renderizado. Por ejemplo, la aplicacin podra especificar que el azul
es el color por defecto para los nodos. Luego, cada nodo dentro del subgrafo tendr color azul. En el contexto de
delineado de grfico, un ejemplo ms interesante es:
{subgrafo
rank = misma; UN; SEGUNDO; DO;
}

Este subgrafo (annimo) especifica que los nodos A, B y C se ponen todos en la misma fila si
dibujado usando puntos.
El tercer papel de subgrafos combina los dos anteriores. Si el nombre del subgrafo comienza con
1 ser
"cluster", Graphviz identifica el subgrafo como un subgrafo especial clster. El software de dibujo
hacer el diseo del grfico de modo que los nodos que pertenecen a la agrupacin se dibujan juntos, con la totalidad
dibujo de la agrupacin contenida dentro de un rectngulo delimitador.
Sealamos aqu algunos campos importantes que se utilizan en nodos, bordes y grficos. Si np, EP y GP son punteros a una
nodo, borde y grfica, respectivamente, agnameof (np) y agraphof (np) dan el nombre del nodo y
el grfico de la raz que lo contiene, agtail (ep) y aghead (ep) dan la cola y la cabeza nodos de borde,
y agroot (GP) da la grfica de la raz que contiene el subgrafo. Para la grfica de la raz, este campo se apuntan a
s mismo.
2.1.1 Atributos

Adems de la estructura resumen grfico proporcionado por nodos, bordes y subgraphs, las bibliotecas Graphviz
Tambin apoyar atributos del grfico. Estos son simplemente pares de nombre / valor de la cadena de valor. Los atributos se utilizan para especificar
cualquier informacin adicional que no puede ser codificado en la grfica abstracta. En particular, los atributos son
muy usado por el software de dibujo para adaptar los diversos aspectos geomtricos y visuales del dibujo.
1si es compatible

pgina 11
Graphviz biblioteca manual, 21 de Agosto, 2014

11

La lectura de los atributos se hace fcilmente. El agget funcin toma un puntero a un componente grfico (nodo,
borde o grfico) y un nombre de atributo, y devuelve el valor del atributo para el componente dado. Nota
que la funcin puede devolver NULL o un puntero a la cadena vaca. El primer valor indica que
el atributo especificado no se ha definido para cualquier componente en el grfico de la clase dada. Por lo tanto, si abc
es un puntero a un nodo y agget (ABC, "color") devuelve NULL, entonces no hay ningn nodo en el grfico tiene una raz
atributo de color. Si la funcin devuelve la cadena vaca, esto generalmente indica que el atributo ha sido

definido, pero el valor del atributo asociado con el objeto especificado es el valor por defecto para la aplicacin. Por lo tanto, si
agget (ABC, "color") devuelve ahora "", el nodo se considera que tiene el color predeterminado. En terminos practicos,
estos dos casos son muy similares. Usando nuestro ejemplo, si el valor del atributo es NULL o "", el dibujo
cdigo todava tendr que elegir un color para el dibujo y probablemente usar el valor por defecto en ambos casos.
Establecimiento de atributos es un poco ms compleja. Antes de fijar un atributo a un componente grfico, el cdigo
Primero debe configurar el caso por defecto. Esto se logra mediante una llamada a agattr. Se necesita un grfico, un objeto
Tipo (gundo, AGNODE, AGEDGE), y dos cadenas como argumentos, y devolver una representacin de la
atributo. La primera cadena da el nombre del atributo; la segunda proporciona el valor predeterminado. La grfica
debe ser la grfica de la raz.
Una vez que el atributo se ha inicializado, el atributo se puede configurar para un componente especfico llamando
agset (void

* , char

* , char

*)

con un puntero a la componente, el nombre del atributo y el valor al que debe fijarse. por
ejemplo, la llamada
agset (np, "color", "azul");

establece el color del nodo a np "azul". El valor del atributo no debe ser NULL.
Por simplicidad, la biblioteca cgraph proporciona la funcin
agsafeset (void

* , char

* , char

* , char

*)

los primeros tres argumentos de ser los mismos que los de agset. Esta funcin comprueba primero que el nombre
atributo se ha declarado para el componente grfico dado. Si no lo tiene, se declara el atributo, utilizando su
ltimo argumento como el valor por defecto es necesario. A continuacin, establece el valor del atributo para el componente especfico.
Tenga en cuenta que algunos atributos se replican en el grfico, que aparece una vez que el atributo habitual cadena de valor,
y tambin en un formato interno de la mquina como un int, doble o algn tipo ms estructurado. Una aplicacin
slo debe establecer atributos usando cuerdas y agset. La implementacin del algoritmo de diseo puede cambiar
la representacin de nivel de equipo en cualquier momento. Por lo tanto, la interfaz de bajo nivel no puede ser invocado por el
aplicacin para el suministro de los valores de entrada deseados. Tambin tenga en cuenta que no es un uno-a-uno correspondencia
entre los atributos de cadena de valor y los atributos internos. Un atributo de cadena dado puede ser codificado como parte de
algn tipo de estructura de datos, podra ser representado a travs de mltiples campos, o puede no tener representacin interna en absoluto.
Con el fin de agilizar la lectura y la escritura de atributos para grandes grficos, Graphviz proporciona una lowermecanismo de nivel para la manipulacin de atributos que pueden evitar una cadena de hash. Los atributos tienen una representacin
cin del tipo Agsym_t. Este es bsicamente el valor devuelto por la funcin de inicializacin agattr. (Paso
NULL como valor por omisin har agattr para devolver el Agsym_t si es que existe, y NULL en otro caso). Un
atributo tambin puede obtenerse por una llamada a agattrsym, que tiene un componente grfico y un atributo
nombre. Si el atributo se ha definido, la funcin devuelve un puntero al valor Agsym_t correspondiente.
Esto se puede utilizar para acceder directamente al valor de atributo correspondiente, utilizando las funciones agxget y
agxset. Estos son idnticos a agget y agset, respectivamente, excepto que en lugar de tomar el atributo
nombre que el segundo argumento, que utilizan el valor Agsym_t para acceder al valor del atributo de una matriz.
Debido a la naturaleza de la aplicacin de atributos en Graphviz, una aplicacin debera, si es posible,
tratar de definir e inicializar todos los atributos antes de la creacin de nodos y bordes.

pgina 12
Graphviz biblioteca manual, 21 de Agosto, 2014

12

Los algoritmos de dibujo en Graphviz utilizan una gran coleccin de atributos, dando a la aplicacin una gran
cantidad de control sobre la apariencia del dibujo. Para obtener informacin ms detallada y completa de lo que el
atributos tanto, el lector puede consultar las pginas http://www.graphviz.org/content/attrs.
Aqu se consideran algunos de los atributos ms comnmente utilizados. Podemos dividir los atributos en los que
que afectan a la colocacin de los nodos, bordes y grupos en el diseo y los que, como el color, que hacen
no. La tabla 4 muestra los atributos de nodos que tienen el potencial de cambiar el diseo. Esto es seguido por
Tablas 5, 6 y 7, que hacen lo mismo para los bordes, grficos y clusters. Tenga en cuenta que en algunos casos, el efecto

Nombre
Defecto
Utilizar
distorsin
0.0
la distorsin de la forma de nodo = polgono
falso
texto de la etiqueta no tiene ningn efecto sobre el tamao de los ganglios
tamao fijo
nombre de la fuente
Times-Roman Familia tipogrfica
tamao en puntos de la etiqueta
tamao de fuente14
nombre del grupo de nodos
grupo
altura en pulgadas
altura
.5
nombre de nodo cualquier cadena
etiqueta
margen
0.11,0.055
el espacio entre la etiqueta y el nodo de frontera
ngulo de rotacin nodo
orientacin
0.0
periferias
forma dependiente
nmero de lmites de nodo
falso
fijar nodo en su atributo pos
alfiler
falso
forzar polgono para ser regular
regular
indica nodo se debe utilizar como base de un diseo
raz
forma de nodo
forma
elipse
EPSF externo o archivo de forma personalizada SVG
shapefile
nmero de lados del polgono de forma =
lados
4
sesgar
0.0
el sesgo de los nodos de forma poligonal =
ancho en pulgadas
anchura
.75
coordenada z para la salida VRML
z
0.0

Tabla 4: atributos de nodos geomtricos


Nombre
Defecto
cierto
restriccin
nombre de la fuente
Times-Roman
tamao de fuente
14
cierto
headclip
centrar
headport
etiqueta
len
1,0 / 0,3
lhead
ltail
minlen
1
samehead
sametail

cierto
centrar
1

tailclip
tailport
peso

Utilizar
utilizar borde afecte a la clasificacin nodo
Familia tipogrfica
tamao en puntos de la etiqueta
cabeza de clip para terminar lmite nodo
posicin en la que el borde se une a la cabeza nodo
etiqueta de borde
longitud de la arista preferido
nombre del clster use como jefe de borde
nombre del clster que se utiliza como cola del borde
distancia mnima de rango entre cabeza y cola
etiqueta para nodo principal; cabezas de borde con la misma etiqueta
se combinan en el mismo puerto
etiqueta para el nodo de la cola; colas de borde con la misma etiqueta son
fusionado en el mismo puerto
clip de la cola para terminar lmite nodo
posicin en la que se une al borde nodo de la cola
importancia de borde

Tabla 5: atributos de borde geomtricos

es indirecta. Un ejemplo de esto es el atributo nslimit, lo que reduce potencialmente el esfuerzo gastado en
red algoritmos simplex para posicionar nodos, cambiando de este modo la disposicin. Algunos de estos atributos afectan
la disposicin inicial del grfico en coordenadas universales. Otros slo juegan un papel si la aplicacin utiliza la
Extraccin de grasas graphviz (vase la seccin 2.3), que mapean el dibujo en coordenadas especficas de dispositivos relacionados con una

pgina 13
Graphviz biblioteca manual, 21 de Agosto, 2014

Nombre
Defecto
falso
centrar
clusterrank
local
falso
compuesto
concentrado
falso
1 + ( eElen) / | E| | V |
defaultdist
2
oscuro
96/0
ppp
0001 | V | o 0001
psilon
nombre de la fuente
Times-Roman
FontPath
tamao de fuente14
etiqueta
margen
diseo dependiente
maxiter
1.0
mclimit
MinDist
1.0
modo
mayor
modelo
shortpath
.25
nodesep
nslimit
ordenamiento
orientacin

superposicin
paquete
packmode
pgina
cuntico
rango
rankdir
ranksep
proporcin
remincross
resolucin
raz
girar
searchsize

retrato
cierto
nodo

tuberculosis
.75

30

0,1
septiembre
tamao
estras
comienzo
aleatorio
margen de Voro 0.05

13

Utilizar
centro dibujo de la pgina
puede ser global o ninguno
permitir que los bordes entre los clusters
permite a los concentradores de borde
separacin entre los nodos de diferentes componentes
dimensin de diseo
dimensin de diseo
condicin de terminacin
Familia tipogrfica
lista de directorios en los que tales fuentes de
tamao en puntos de la etiqueta
cualquier cadena
espacio colocado alrededor dibujo
unido en iteraciones en el diseo
factor de escala para las iteraciones mincross
distancia mnima entre los nodos
variacin de diseo
modelo utilizado para la matriz de distancias
la separacin entre los nodos, en pulgadas
si se define como f, lmites de red iteraciones simplex
(f) (nmero de nodos) al fijar coordenadas x
especifique hacia fuera o en el orden de borde
orientacin horizontal si el uso de rotacin no se utiliza
y el valor es el paisaje
especifique si y cmo eliminar las coincidencias nodo
qu componentes por separado, y luego empacar
granularidad de embalaje
unidad de paginacin, por ejemplo, "8.5,11"
si cunticos> 0.0, dimensiones de las etiquetas de nodo sern
redondeado a mltiplos enteros de cuntica
misma, mnimo, mximo, fuente o sumidero
sentido de la disposicin, es decir, de arriba a abajo, de izquierda a derecha, etc.
separacin entre filas, en pulgadas.
relacin de aspecto deseada aproximada, rellenar o automtico
Si esto es cierto y hay varios clsteres, vuelva a ejecutar cruzada
minimizacin de ING
sinnimo de dpi
especifica el nodo que se utilizar como la raz de un diseo
Si 90, establecer la orientacin a horizontal
bordes mximos con valores de corte negativos para comprobar
cuando se busca un mnimo uno en la red
simplex
factor a aumentar la eliminacin de nodos cuando se superponen
tamao mximo de dibujo, en pulgadas
render bordes con estras
forma de la colocacin inicial de nodo
factor a aumentar cuadro delimitador cuando ms espacio
es necesario durante el ajuste de Voronoi

ventana

ventana de recorte

Tabla 6: atributos de grficos geomtricos

pgina 14
Graphviz biblioteca manual, 21 de Agosto, 2014
Nombre
Defecto
nombre de la fuente
Times-Roman
tamao de fuente14
etiqueta
1
periferias

14
Utilizar
Familia tipogrfica
tamao en puntos de la etiqueta
etiqueta de borde
nmero de lmites de racimo

Tabla 7: atributos geomtricos de racimo

formato de salida concreto. Por ejemplo, Graphviz slo utiliza el atributo central, que especifica que el
delineado de grfico debe estar centrado en su pgina, cuando la biblioteca genera una representacin concreta. los
cuadros distinguen estos atributos especficos del dispositivo por el smbolo en el inicio de la columna Usar.
Tablas 8, 9, 10 y 11 de la lista de los nodos, bordes, grfico y atributos de racimo, respectivamente, que no lo hacen efecto
la colocacin de componentes. Obviamente, los valores de estos atributos no se reflejan en la posicin
la informacin de la grfica despus de diseo. Si la aplicacin se encarga de dibujar real de la grfica, debe
decidir si desea utilizar estos atributos o no.
Nombre
Defecto
Utilizar
color de la forma del nodo
color
negro
color de relleno nodo
color de relleno
lightgrey
color de texto
color de fuentenegro
gama de superposicin
capa
todo, de la identificacin o la identificacin: Identificacin
nojustify
falso
contexto para justificar varias lneas de texto
Las opciones de estilo, por ejemplo, negrita, punteado, llenos
estilo
Tabla 8: atributos de nodo decorativos

Nombre
punta de flecha
tamao de la flecha
arrowtail
color
Decorar
dir
color de fuente
headlabel
labelangle
labeldistance

labelfloat
labelfontcolor
labelfontname
labelfontsize
capa
nojustify
estilo
taillabel

Defecto
normal
1.0
normal
negro

Utilizar
estilo de punta de flecha en el extremo de la cabeza
factor de escala para las puntas de flecha
estilo de punta de flecha en el extremo de la cola
borde color del trazo
Si se establece, dibuja una lnea que une las etiquetas con su
bordes
hacia delante / ninguno
adelante, atrs, ambos o ninguno
negro
Tipo de color de la cara
etiqueta colocada cerca de la cabeza del borde
ngulo en grados, que la cabeza o la cola de etiquetas se hace girar
-25.0
fuera del borde
factor de escala para la distancia de la etiqueta de cabeza o la cola de
1.0
nodo
falso
disminuir las restricciones sobre la colocacin de etiquetas de borde
negro
Tipo de color de la cara para etiquetas de cabeza y cola
Times-Roman Tipo de letra para etiquetas de cabeza y cola
14
tamao de punto para las etiquetas de cabeza y cola
gama de superposicin
todo, de la identificacin o la identificacin: Identificacin
falso
contexto para justificar varias lneas de texto
atributos de dibujo, como negrita, punteado, o
lleno
etiqueta colocada cerca de la cola del borde
Tabla 9: atributos borde decorativo

Entre estos atributos, algunos se utilizan con ms frecuencia que otros. Un dibujo grfico que normalmente necesita
codificar varias propiedades dependientes de la aplicacin en las representaciones de los nodos. Esto se puede hacer con
texto, usando los atributos de la etiqueta, FontName y FontSize; con el color, utilizando el color, fontcolor,

pgina 15
Graphviz biblioteca manual, 21 de Agosto, 2014

15

Nombre
bgcolor
charset
color de fuente
labeljust
labelloc
capas
layersep
nojustify
outputorder
pagedir
samplepoints

Defecto

Utilizar
color de fondo para el dibujo, adems de color de relleno inicial
codificacin
de
caracteres
para el texto
UTF-8
Tipo de color de la cara
negro
centrado
izquierda, alineacin a la derecha o en el centro para las etiquetas del grfico
fondo
ubicacin superior o inferior para las etiquetas del grfico
nombres para capas de salida
":"
caracteres separadores utilizados en Especificacin de la capa
falso
contexto para justificar varias lneas de texto
orden en el que para emitir los nodos y los bordes
breadthfirst
de orden transversal de pginas
licenciado en Derecho
nmero de puntos utilizados para representar elipses y cir8
culos sobre la produccin
hoja de estilo XML
hoja de estilo
color verdadero
determina el modelo de color verdadero o color de mapa
salida de mapa de bits
Tabla 10: atributos de grficos decorativos

Nombre Defecto
Utilizar
color de fondo de racimo
bgcolor
color de lmite de clster
color
negro
color de relleno del clster
color de relleno
negro
color de fuentenegro
color de texto
centrado izquierda, alineacin a la derecha o en el centro para las etiquetas de racimo
labeljust
labelloc
parte superior
ubicacin superior o inferior para las etiquetas de racimo
falso
contexto para justificar varias lneas de texto
nojustify
colorpluma negro
color de lmite de clster
Las opciones de estilo, por ejemplo, negrita, punteado, lleno;
estilo
Tabla 11: atributos decorativos de racimo

pgina 16
Graphviz biblioteca manual, 21 de Agosto, 2014

diecisis

fillColor y atributos bgcolor; o con las formas, la forma atributos ms comunes son, altura,
ancho, estilo fixedsize, periferias y regular,
Los bordes suelen mostrar informacin semntica adicional con los atributos de color y estilo. Si el borde
se dirige, la punta de flecha, arrowsize, arrowtail y atributos dir pueden jugar un papel. El uso de las estras
en lugar de segmentos de lnea para bordes, como se determina por las estras de atributo, se hace para la esttica o la claridad
en lugar de transmitir ms informacin.
Tambin hay un nmero de atributos de uso frecuente que afectan a la geometra de la disposicin de los nodos
y los bordes. Estos incluyen compuesto, len, lhead, ltail, minlen, nodesep, pin, pos, el rango,
rankdir, ranksep y peso. Dentro de esta categora, hay que mencionar tambin el paquete y se superponen
atributos, aunque tienen un sabor algo diferente.
Los atributos descritos hasta ahora se utilizan como entrada a los algoritmos de diseo. Hay una coleccin de
atributos, que se muestra en la Tabla 12, que, por convencin, Graphviz utiliza para especificar la geometra de un diseo.
Despus de una aplicacin se ha utilizado Graphviz para determinar informacin de posicin, si quiere escribir el grfico
Nombre
Utilizar
el cuadro delimitador del dibujo o clster
cama y desayuno
posicin del grfico, grupo o etiqueta de borde
lp

POS
rects
vrtices

posicin de los
puntos en
de registros
control de nodo o borde
rectngulos
utilizados
puntos que definen la frontera del nodo, si as lo solicita
Tabla 12: atributos de posicin de salida

en el TOD con esta informacin, se debe utilizar los mismos atributos.


Adems de los atributos se ha descrito anteriormente que tienen un efecto visual, hay una coleccin de atributos
utilizado para suministrar informacin de identificacin o acciones web. La Tabla 13 enumera los mismos.
Nombre
Utilizar
hipervnculo asociado con el nodo, borde, grfico o clster
URL
comentarios insertan en salida
comentario
HeadURL
URL adjunta a la etiqueta de la cabeza
sinnimo de HeadURL
headhref
headtarget
ventana del navegador asociada con HeadURL
informacin sobre herramientas asociado con HeadURL
headtooltip
href
sinnimo de URL
URL adjunta a la etiqueta de la cola
tailURL
sinnimo de tailURL
tailhref
ventana del navegador asociada con tailURL
tailtarget
informacin sobre herramientas asociado con tailURL
tailtooltip
objetivo
ventana del navegador asociada con URL
informacin
sobre herramientas asociada con el URL
informacin sobre
herramientas
Tabla 13: Varios atributos

2.1.2 Atributo HTML y Cuerdas

Cuando un atributo se le asigna un valor, la biblioteca grfica replica la cadena. Esto significa que la aplicacin
puede utilizar una cadena temporal como argumento; que no tiene que mantener la cadena en toda la aplicacin.
Cada nodo, borde, y el grfico mantiene sus propios valores de los atributos. Obviamente, muchos de estos son el mismo
cuerdas, por lo que para ahorrar memoria, la librera grfica utiliza un mecanismo de recuento de referencias para compartir cuerdas. Un
aplicacin puede emplear este mecanismo mediante el uso de la funcin agstrdup (). Si lo hace, tambin debe utilizar el
agstrfree () la funcin si quiere soltar la cuerda.

pgina 17
Graphviz biblioteca manual, 21 de Agosto, 2014

17

Cuando el uso de cadenas como etiquetas, uno puede tener un cierto control de formato de escape a travs de los distintos lnea secuencias tales como "\ n" "\ l", "\ n", etc., y atributos tales como nombre de fuente y fontcolor. Llegar
mucha ms flexibilidad, se puede utilizar etiquetas HTML similar. En el lenguaje DOT, estas cadenas son delimitado por corchetes angulares <...> en lugar de comillas dobles con el fin de trabajar de forma integrada con la ordinaria
instrumentos de cuerda. Incluso en el nivel de la biblioteca, estas cadenas son semnticamente idnticos a cadenas normales, excepto cuando
utilizado como etiquetas. Para crear uno de estos, uno utiliza html agstrdup () en lugar de agstrdup (). los
agstrfree () todava se utiliza para liberar la cadena. Por ejemplo, se podra utilizar el siguiente cdigo para adjuntar
una cadena HTML a un nodo:
Agnode_t * norte;
carbonizarse
* l = agstrdup_html (agroot (n), "<B> algn texto en negrita </ B>");
agset (n, "etiqueta", l);
agstrfree (l);

Adems, la funcin aghtmlstr () se puede usar consulta si una cadena de atributo es una cadena HTML.
2.2 Trazado de la grfica

Una vez que existe el grfico y se establecen los atributos, la aplicacin puede pasar el grfico a una de las Graphviz
funciones de diseo de una llamada a gvLayout. Como argumentos, esta funcin toma un puntero a una GVC t, un puntero
a la grfica para ser distribuido, y el nombre del algoritmo de diseo deseado. Los nombres de algoritmo son los mismos
2 para invocar punto, etc.
como los de los programas de diseo enumerados en la seccin 1. Por lo tanto, "punto" se utiliza
El algoritmo de diseo har todo lo que el programa correspondiente hara, dada la grfica y
3, Elcomo
sus atributos. Esto incluye la asignacin de posiciones de nodo, representando los bordes
manejo
splines
de la especial
caso de un grfico sin conectar, adems de hacer frente a diversos caractersticas tcnicas tales como la prevencin de las superposiciones de nodo.
Hay dos motores especiales de diseo disponibles en la biblioteca: "nop" y "NOP2". Estos corresponden a
ejecutar el comando neato con las banderas y -n -n2, respectivamente. Es decir, que asumen el grfico de entrada
ya ha almacenado la informacin de posicin de los nodos y, en este ltimo caso, algunos bordes. Ellos se pueden utilizar para
ruta bordes en el grfico o realizar otros ajustes. Tenga en cuenta que esperan que la informacin de posicin
almacenados como atributos de punto de venta en los nodos y los bordes. La aplicacin se puede hacer esto en s, o utilizar el procesador de punto.
Por ejemplo, si uno quiere posicionar los nodos de un grfico usando un diseo de puntos, pero quiere bordes dibujan como
segmentos de lnea, se podra utilizar el siguiente cdigo que se muestra en la Figura 2. La primera llamada a gvLayout expone la
graficar usando puntos; la primera llamada a gvRender concede la informacin de posicin computada a los nodos y
bordes. La segunda llamada a gvLayout aade bordes en lnea recta a los nodos ya posicionado; el segundo
llamar a gvRender da salida a la grfica en png para el stdout.

2.3 Representacin de la grfica

Una vez realizado el diseo, las estructuras de datos grfico que contienen la informacin de posicin para delinear el grfico.
La aplicacin tiene que decidir cmo utilizar esta informacin.
Para utilizar los procesadores que se suministran con el software Graphviz, la aplicacin puede llamar a uno de la biblioteca
funciones
gvRender (GVC_t
* GVC, Agraph_t
* g, char
* formato, ARCHIVO* fuera);
gvRenderFilename (GVC_t
* GVC, Agraph_t
* g, char
* formato, char

* nombre del archivo);

2Por lo general, todos estos algoritmos estn disponibles. Es posible, sin embargo, que una aplicacin puede disponer que slo un subconjunto
Hecho disponible.
3Los segmentos de lnea se representan como estras degenerados.

pgina 18
Graphviz biblioteca manual, 21 de Agosto, 2014

18

Agraph_t * GRAMO;
GVC_t * GVC;
/*
* Crear GVC y el grfico
*/
gvLayout (GVC, G, "punto");
gvRender (GVC, G, "punto", NULL);
gvFreeLayout (GVC, G);
gvLayout (GVC, G, "nop");
gvRender (GVC, G, "png", stdout);
gvFreeLayout (GVC, G);
agclose (G);
Figura 2: Uso bsico
El primer y segundo argumentos son un identificador de contexto graphviz y un puntero a la grfica para ser prestados. los
argumento final da, respecitively, una secuencia de archivo abierto para escritura o el nombre de un archivo en el que la grfica
debe ser escrito. El tercer argumento define el procesador a utilizar, tales como "PS", "png" o "punto".
Las cuerdas permitidos son los mismos utilizados con la bandera -T cuando el programa de diseo se invoca desde una
shell de comandos.
Despus de una grfica ha sido diseada utilizando gvLayout, una aplicacin puede realizar varias llamadas a la
representacin funciones. Un ejemplo tpico podra ser
gvLayout (GVC, g, "punto");
gvRenderFilename (GVC, g, "png", "out.png");
gvRenderFilename (GVC, g, "CMAP", "out.map");

en el que el grfico se presenta usando el algoritmo de punto, seguido por la salida de mapa de bits PNG y un correspondiente
archivo de mapa que puede ser utilizado en un navegador web.
Al igual que con la lectura, Graphviz ofrece algunas funciones especializadas para la representacin. Es de destacar
gvRenderData (GVC_t
* GVC, Agraph_t
unsigned int
* longitud)

* g, char

* formato, char

** resultado,

que escribe la salida de la representacin en un bfer de caracteres asignado. Un puntero a este bfer est
* devuelve en resultado y el nmero de bytes escritos se almacena en longitud. Despus de usar el tampn, la
la memoria tiene que ser liberada por la aplicacin. A medida que el programa de llamada puede basarse en un sistema de tiempo de ejecucin diferente
que la utilizada por Graphviz, la biblioteca ofrece la funcin
gvFreeRenderData (char

* datos);

que puede ser utilizado para liberar la memoria a la que apunta * resultado.
A veces, una aplicacin decidir que hacer su propia prestacin. Una rutina de dibujo suministrada por la aplicacin,
como DrawGraph en la Figura 1 a continuacin, puede leer esta informacin, asignarla a mostrar las coordenadas, y la llamada
rutinas para representar el dibujo.
Una forma sencilla de hacerlo es utilizar la posicin y la informacin suministrada por el dibujo como el punto o
Formato xdot (vanse las secciones 1.1.1 y 1.1.2). Para conseguir esto, la aplicacin puede llamar al procesador apropiado,

pgina 19
Graphviz biblioteca manual, 21 de Agosto, 2014

19

4 como en la figura 2. Esto adjuntar la informacin como cadena


pasando un puntero NULL al corriente de gvRender
atributos. La aplicacin puede utilizar agget para leer los atributos.
Por otro lado, una aplicacin puede desear para leer las estructuras de datos primitivos utilizados por los algoritmos
para registrar la informacin de diseo. En el resto de esta seccin, se describe en detalle razonable de estos datos
estructuras. Una aplicacin puede utilizar estos valores directamente para orientar su dibujo. En algunos casos, por ejemplo,
con puntas de flecha unidos a los valores de Bezier o etiquetas HTML similar, sera oneroso para una aplicacin de
interpretar completamente los datos. Por esta razn, si una aplicacin desea proporcionar a todos los grficos de las funciones durante
evitando los detalles de bajo nivel de las estructuras de datos, se sugiere el uso de cualquiera de xdot enfoque, descrito
anterior, o el suministro de su propio plug-in de render como se describe en la Seccin 5.
Los algoritmos de diseo Graphviz basan en un conjunto especfico de los campos para registrar la posicin y el dibujo informacin
cin. Por lo tanto, las definiciones de los campos de informacin se fijan por la biblioteca de diseo y no pueden ser alterados por
la aplicacin. 5
Los campos slo deben acceder utilizando expresiones macro previstos para este fin. Por lo tanto, si es np
un puntero de nodo, el campo ancho debe ser ledo usando ND_width (np). atributos de borde y el grfico siguen
la misma convencin, con prefijos y ED_ GD_, respectivamente. Una lista completa de estas macros se da en
6.
types.h, junto con diversos tipos de auxiliares tales como PointF o Curva
Ahora consideramos los principales campos que proporcionan informacin de posicin.
Cada nodo tiene ND coord, ancho ND ND y los atributos de altura. El valor de ND coord da la
7 La anchura y la altura ND ND atributos especifican el tamao de
posicin del centro del nodo, en puntos.
el cuadro delimitador del nodo, en pulgadas. Tenga en cuenta que los atributos de anchura y altura proporcionan en la entrada
grfico son valores mnimos, de manera que los valores almacenados en la anchura y la altura ND ND pueden ser ms grandes.
Bordes, incluso si un segmento de lnea, se representan como B-splines cbicos o trozos curvas de Bzier. los
ED atributo spl de las tiendas de borde estriado esta informacin. Tiene un puntero a una matriz de 1 o ms
estructuras de Bezier. Cada uno de stos una sola curva de Bezier a trozos, as como de punta de flecha asociada
informacin. Normalmente, una nica estructura de Bzier es suficiente para representar una ventaja. En algunos casos, sin embargo,
el borde puede necesitar mltiples partes de Bezier, como cuando el atributo concentrado se establece, con lo que en su mayora
bordes paralelos estn representados por un spline compartido. Por supuesto, la aplicacin siempre tiene la posibilidad de
dibujar un segmento de lnea que conecta los centros de los nodos del borde.
Si se especifica un subgrafo como un clster, los nodos de la agrupacin sern atrados juntos y la totalidad
subgrafo est contenida dentro de un rectngulo que no contiene otros nodos. El rectngulo se especifica por el GD bb
atributo del subgrafo, las coordenadas de los puntos en el sistema de coordenadas globales.
2.3.1 nodos de dibujo y bordes

Con la informacin de la posicin y el tamao descrito anteriormente, una aplicacin puede dibujar los nodos y los bordes de
un grfico. Slo podra utilizar rectngulos o crculos para los nodos, y representan bordes como segmentos de lneas o estras.

4Esta convencin slo funciona, y slo tiene sentido, con los procesadores de punto y de xdot. Por otra renders, una corriente nula ser
salida de la causa que se escribir en la salida estndar.
5Esta es una limitacin de la biblioteca cgraph. Tenemos la intencin de eliminar esta restriccin moviendo a un mecanismo que permite arbitraria
extensiones dinmicas a las estructuras de nodos, bordes y grfico. Mientras tanto, si la aplicacin requiere la adicin de campos adicionales,
puede definir sus propias estructuras, que deberan ser extensiones de los componentes de los tipos de informacin, con los campos adicionales
se adjunta al final. Entonces, en lugar de llamar aginit (), se puede utilizar el aginitlib ms general (), y el suministro de los tamaos de su
nodos, bordes y grficos. Esto asegurar que estos componentes tendrn los tamaos y las alineaciones correctas. La aplicacin puede
a continuacin, emitir los tipos genricos cgraph a los tipos que se definen, y acceder a los campos adicionales.
6Retiramos fuertemente acceder a los campos directamente, por la razn habitual de buen estilo de programacin. Mediante el uso de las macros,
cdigo fuente no se ver afectada por los cambios en la forma en que se proporciona el valor
7Los diseos neato y el FDP permiten la grfica para especificar posiciones fijas para los nodos. Por desgracia, un post-procedimiento hecho en
Graphviz traduce el diseo de modo que su esquina inferior izquierda est en el origen. Para recuperar las coordenadas originales, la aplicacin se
-p, el
donde
p0 yp p son la posicin de entrada y la posicin final de algn nodo cuya
Hay que traducir todas las posiciones0por
vector
posicin fue fijada.

pgina 20
Graphviz biblioteca manual, 21 de Agosto, 2014

20

Sin embargo, los nodos y los bordes tienen tpicamente una variedad de otros atributos, tales como el color o el estilo de lnea, que una
aplicacin puede leer desde los campos correspondientes y utilizar en su prestacin.
informacin adicional sobre el dibujo el nodo depende sobre todo de la forma del nodo. Para el registrolos nodos de tipo, donde ND_shape (n) -> nombre es "registro" o "Mrecord", el nodo consta de una pila de discos
coleccin de rectngulos. En este caso, ND_shape_info (n) se puede convertir en field_t *, que describe
la particin recursiva del nodo en rectngulos. El valor de b field_t da el rectngulo delimitador
del campo, en los puntos en el sistema de coordenadas del nodo, es decir, donde el centro del nodo est en el origen.
Si ND_shape (n) -> usershape es cierto, la forma es especificada por el usuario. Por lo general, este es el formato
depende, por ejemplo, el nodo se puede especificar una imagen GIF por, e ignoramos este caso por el momento.

La clase de nodo final consiste en aquellos con forma poligonal


8, Que incluye los casos limitantes de crculos,
elipses, y ninguno. En este caso, ND_shape_info (n) se puede convertir en polygon_t *, que especifica el
muchos parmetros (nmero de lados, sesgar y distorsiones, etc.) utilizados para describir polgonos, as como la
puntos utilizados como vrtices. Tenga en cuenta que los vrtices estn en pulgadas, y estn en el sistema de coordenadas del nodo,
con el origen en el centro del nodo.
Para hacer frente a la forma de un nodo, una aplicacin tiene dos opciones bsicas. Se puede aplicar la geometra para cada
de las diferentes formas. De este modo, se pudo ver que ND_shape (n) -> nombre es "caja", y el uso de la coord ND,
ND anchura y altura ND atributos para dibujar rectngulo en la posicin dada con la anchura determinada y
altura. Un segundo enfoque sera el uso de la especificacin de la forma como se almacena internamente en el
forma campo de informacin del nodo. Por ejemplo, dado un nodo poligonal, su campo ND_shape_info (n)
contiene un campo de vrtices, mencionado anteriormente, que es una lista ordenada de todos los vrtices que se utilizan para dibujar el
polgono apropiada, teniendo en cuenta las mltiples periferias. Una vez ms, si una aplicacin desea ser totalmente
fiel en la prestacin, puede ser preferible utilizar la informacin xdot o para suministrar su propia renderer
enchufar.
Para bordes, cada estructura de Bzier tiene un campo de lista que apunta a una matriz que contiene los puntos de control
y un campo de tamao que indica el nmero de puntos en la lista, que siempre tendr la forma (3 * n + 1). En anunciocondicin, hay campos para especificar puntas de flecha. Si pb apunta a una estructura de Bzier y la BP-> sflag
campo es cierto, no debera haber una punta de flecha adherido al comienzo de la Bzier. El BP-field> sp da
el punto en el que la punta nominal de la punta de flecha tocara el nodo de la cola. (Si no hay punta de flecha,
BP-> lista [0] tocar el nodo.) Por lo tanto, la longitud y la direccin de la punta de flecha se determina por el
vector que va de BP-> lista [0] para BP-> sp. La forma real y el ancho de la punta de flecha se determina
por los atributos arrowtail y arrowsize. De forma anloga, se especifica una punta de flecha en el nodo de cabecera
por BP-> eFlag y el vector de BP-> lista [bp> Tamao-1] para BP-> ep.
El campo de etiqueta (ND_label (n), ED_label (e), GD_label (g)) codifica cualquier etiqueta de texto asociada
con un objeto grfico. Bordes, grficos y agrupaciones de vez en cuando tener etiquetas; linfticos casi siempre tienen una
etiqueta, ya que la etiqueta por defecto es el nombre del nodo. La cadena de la etiqueta de base se almacena en el campo de texto, mientras que el
nombredetipo, fontcolor y campos TamaoDeFuente describen las caractersticas bsicas del tipo de letra. En muchos casos, la
cadena de la etiqueta de base es ms analizada, ya sea en varias lneas de texto, justificados, o como una estructura de caja anidada para
etiquetas HTML o similar a los nodos de la forma de grabacin. Esta informacin est disponible en otros campos.
2.4 La limpieza de un grfico

Una vez que se obtiene toda la informacin de diseo a partir del grfico, en caso de ser recuperados los recursos. Para ello, el
aplicacin debe llamar a la rutina de limpieza asociado con el algoritmo de diseo utilizado para dibujar el grfico.
Esto se realiza mediante una llamada a gvFreeLayout.
El ejemplo de la figura 1 muestra el caso en el que la aplicacin est elaborando un solo grfico. los
ejemplo dado en el Apndice C muestra cmo la limpieza podra hacerse en el tratamiento de varios grficos.
8Esto no es del todo cierto, pero lo suficientemente cerca como para ahora.

pgina 21
Graphviz biblioteca manual, 21 de Agosto, 2014

21

La aplicacin puede determinar mejor cuando se debe limpiar. El ejemplo en el apndice realiza
esto justo antes de un nuevo grfico se dibuja, pero la aplicacin podra haber hecho esto mucho antes, por ejemplo,
inmediatamente despus de que el grfico se traza con gvRender. Tenga en cuenta, sin embargo, que la informacin de diseo se destruye
durante la limpieza. Si la aplicacin tiene que volver a utilizar estos datos, por ejemplo, para actualizar la pantalla, lo que debera
retrasar llamando a la funcin de limpieza, o los arreglos para copiar los datos de disposicin en otro lugar. Tambin, en el caso ms sencillo
donde la aplicacin simplemente dibuja un grfico y salidas, no hay necesidad de hacer la limpieza en absoluto, aunque esto es
a veces se considera pobre estilo de programacin.
Un grfico dado puede ser expuesto varias veces. La aplicacin, sin embargo, debe limpiar el anterior
la informacin de diseo con una llamada a gvFreeLayout antes de invocar una nueva funcin de diseo. Un ejemplo de
esto se da en la figura 2.
Tenga en cuenta que si se procesa un grfico en el formato de puntos o xdot, esto concede atributos en el grfico.
Algunos de estos atributos se utilizan durante el diseo. Por ejemplo, la disposicin neato utilizar el atributo pos
de los nodos de una disposicin inicial, mientras que la disposicin DosPi puede establecer el atributo raz, que se bloquear en
este atributo para cualquier futuros diseos utilizando DosPi. Para evitar que estos atributos que afectan a otro diseo
de la grfica, el usuario debe debe establecer estos atributos a la cadena vaca antes de llamar gvLayout nuevo.
Una vez que la aplicacin est totalmente hecho con un grfico, se debe llamar agclose para cerrar el grfico y recuperar
los recursos restantes asociados con ella.
3 Dentro de los diseos
Cada algoritmo de diseo Graphviz consta de varios pasos, algunos de los cuales son opcionales. Como la nica entrada
punto en la biblioteca Graphviz para el trazado de un grfico es la funcin gvLayout, cuyo control los pasos
se usan se determina por los atributos de grfico, de la misma forma en que esto es controlado cuando se pasa un grfico para uno
de los programas de diseo. En esta seccin, se proporciona una descripcin de alto nivel de los pasos de diseo, y la nota de la
atributos relevantes.
A continuacin, vamos a suponer que el grfico est conectado. Todos los diseos de manejar grficos inconexos. Algunos-

veces, sin embargo,


una aplicacin
usar la tcnica
incorporado.
casos,Esto
Graphviz
ofreceen la Seccin 7.
herramientas
para descomponer
un puede
grficono
y,querer
a continuacin,
la combinacin
de Para
variosestos
diseos.
se describe
En todos los algoritmos, el primer paso es llamar a una funcin de inicializacin-diseo especfico. estas funlas inicializar el grfico para el algoritmo en particular. Este primero llamar rutinas comunes para establecer bsica
estructuras de datos, especialmente los relacionados con los resultados de diseo final y de generacin de cdigo. En particular, la
se han analizado tamao y la forma de nodos y fijado en este punto, que la aplicacin puede acceder
a travs de la anchura de ND, ND altura, ht ND, ND LW, rw ND, ND forma, la informacin de forma ND ND y la etiqueta
atributos. Inicializacin entonces establecer las estructuras de datos especficas para el algoritmo dado. Ambos
recursos de diseo genricos y especficos son liberados cuando la funcin de limpieza correspondiente se denomina en
gvFreeLayout (vase la Seccin 2.4).
Por defecto, los algoritmos de diseo posicionan los bordes, as como los nodos del grafo. Como esto puede ser
costoso de calcular e irrelevante para una aplicacin, una aplicacin puede decidir evitar esto. Esto puede ser
fruto de la implantacin estras del grfico atribuyen a la cadena vaca "".
Los algoritmos de todos terminan con una etapa de post-procesamiento. El papel de esto es hacer algunos retoques final con
el diseo, todava en disposicin de coordenadas. En concreto, la funcin gira el diseo de punto (si es rankdir
set), se adhiere la etiqueta de la grfica de la raz, en su caso, y normaliza el dibujo de manera que la esquina inferior izquierda de su
Condiciones de seleccin es en el origen.
A excepcin de punto, los algoritmos tambin proporcionan la posicin de un nodo, en pulgadas, en la matriz de dar por ND pos.

pgina 22
Graphviz biblioteca manual, 21 de Agosto, 2014

22

3,1 puntos

El algoritmo de puntos produce una disposicin ordenada de un grfico respetando las direcciones de borde si es posible. Es particular
larmente adecuado para la visualizacin de las jerarquas o grficos acclicos dirigidos. El esquema de diseo bsico se atribuye
a Sugiyama et al. [STT81] El algoritmo especfico utilizado por punto sigue los pasos descritos por Gansner et
al. [GKNV93]
Los pasos en el diseo de puntos son:
inicializar
rango
mincross
posicin
sameports
estras
compoundEdges

Despus de la inicializacin, el algoritmo asigna a cada nodo a un rango discreto (rango) usando un programa entero
para reducir al mnimo la suma de los (discretos) longitudes de los bordes. El siguiente paso (mincross) reorganiza los nodos dentro de
ocupa el lugar de reducir los cruces de borde. Esto es seguido por la asignacin (posicin) de las coordenadas reales
los nodos, utilizando otro programa entero para compactar el grfico y enderezar los bordes. En este punto, todos los nodos
tendr una posicin establecida en el atributo coord. Adems, el cuadro delimitador bb atributo de todos los grupos son
conjunto.
El paso sameports es una adicin a la disposicin bsica. Se implementa la caracterstica, basndose en el borde
atributos "samehead" y "sametail", por el cual ciertos bordes que comparten un nodo todos conectan al nodo
en el mismo punto.
representaciones Edge se generan en la etapa de splines. En la actualidad, todos los bordes de puntos dibuja como B-splines,
aunque algunos bordes sern realmente el caso degenerado de un segmento de lnea.
Aunque apoya la nocin de punto de subgrafos de racimo, su modelo no se corresponde con observaciones generales
grficos libra. En particular, un grfico no puede tener aristas que conectan dos grupos, o un grupo y un nodo. los
el diseo puede emular esta caracterstica. Bsicamente, si los nodos de cabeza y cola de un borde se encuentran en diferente, no anidada
racimos, el borde puede especificar estos grupos como una cabeza o la cola lgica lgica con el lhead o ltail
atributo. El spline generada en estras para el borde y luego se puede enganchar a la caja de delimitacin del
grupos especificados. Esto se logra en la etapa compoundEdges.
3.2 Neato

La disposicin calculada por neato se especifica mediante un modelo fsico virtual, es decir, uno en el que se tratan los nodos
como objetos fsicos influidos por fuerzas, algunos de los cuales surgen de los bordes en el grfico. El diseo es
a continuacin, derivado mediante la bsqueda de posiciones de los nodos que reduzcan al mnimo las fuerzas o energa total dentro del sistema.
Las fuerzas no necesitan corresponder a las fuerzas fsicas verdaderas, y por lo general representa la solucin de algunos locales
mnimo. Tales diseos se refieren a veces como simtrico, como los principales esttica de tales diseos
tienden a ser la visualizacin de simetras geomtricas dentro del grfico. Para mejorar an ms la visualizacin de
simetras, tales dibujos tienden a usar segmentos de lnea para los bordes.
El modelo utilizado por Neato proviene de Kamada y Kawai [KK89], a pesar de que se introdujo por primera vez por
Kruskal y Seely [KS80] en un formato diferente. El modelo asume que hay un resorte entre cada par de
vrtices, cada uno con una longitud ideal. Las longitudes ideales son una funcin de los bordes del grfico. Los intentos de diseo

para minimizar la energa en este sistema.


inicializar

pgina 23
Graphviz biblioteca manual, 21 de Agosto, 2014

23

posicin
ajustar
estras
Como de costumbre, el diseo comienza con una etapa de inicializacin. La disposicin real est parametrizada por el modo
y los atributos del modelo. El atributo de modo determina cmo se resuelve el problema de optimizacin, ya sea por el
De manera predeterminada, el estrs mayorizacin [GKN04], es posible (modo = "mayor"), o la tcnica de descenso de gradiente propuesta
por Kamada y Kawai [KK89] (modo = "KK"). Este ltimo modo es tpicamente ms lento que el anterior, y
introduce la posibilidad de montar en bicicleta. Se mantiene nicamente por compatibilidad con versiones anteriores.
El modelo indica cmo se calculan las distancias ideales entre todos los pares de nodos. De forma predeterminada, neato
utiliza un modelo camino ms corto (modelo = "shortpath"), de modo que la longitud del muelle entre los nodos p y
q es la longitud del camino ms corto entre ellos en el grfico. Tenga en cuenta que el clculo del camino ms corto toma
en cuenta las longitudes de los bordes como se especifica por el atributo "len", con una pulgada siendo el valor por defecto.
Si el modo = "KK" y el grfico atribuyen pack es falsos conjuntos, neato la distancia entre nodos separados
componentes conectados a 1,0 + L avg | V |, donde Lavg es la longitud media punta y | V | es el nmero
de nodos en el grfico. Esto suministra una separacin suficiente entre los componentes de modo que no se superpongan.
Por lo general, los componentes ms grandes se encuentran en el centro, mientras que los componentes ms pequeos formarn un anillo alrededor
el exterior.
En algunos casos, una aplicacin puede decidir utilizar el modelo de circuito (modelo = "circuito"), un modelo
basado en circuitos elctricos como propuso por primera vez por Cohen [Coh87]. En este modelo, la longitud del resorte se deriva
de resistencias utilizando la ley de Kirchoff. Esto significa que cuanto ms caminos entre p y q en el grfico, la
menor sea la longitud del muelle. Esto tiene el efecto de tirar de las agrupaciones ms cerca. Observamos que este enfoque
slo funciona si est conectado el grfico. Si el grfico no est conectado, la disposicin vuelve automticamente a la
ms corto camino modelo.
El tercer modelo es el modelo subconjunto (modelo = "subconjunto"). Esto establece la longitud de cada borde de ser el
nmero de nodos que son vecinos de exactamente uno de los puntos finales, y luego calcula las distancias restantes
el uso de los caminos ms cortos. Esto ayuda a separar los nodos con alto grado.
El algoritmo bsico utilizado por Neato realiza la disposicin de asumir los nodos de punto. Dado que en muchos casos, la
dibujo final utiliza etiquetas de texto y diversas formas de los nodos, el dibujo termina con muchos nodos superpuestos
El uno al otro. Para ciertos usos, el efecto es deseable. Si no, la aplicacin puede utilizar el ajuste paso a
cambiar la posicin de los nodos para eliminar solapamientos. Esto es controlado por el atributo grfico "solapamiento".
Con nodos posicionados, el algoritmo procede a dibujar los bordes con su funcin estras. Por
De forma predeterminada, los bordes se dibujan como segmentos de lnea. Si, sin embargo, el "estras" atributo grfico se establece en true, el
bordes sern construidos como estras [DGKN97], ellos enrutamiento alrededor de los nodos. Topolgicamente, la spline
sigue el camino ms corto entre dos nodos evitando al mismo tiempo todos los dems. Es evidente que, para que esto funcione, no puede haber
ningn nodo se superpone. Si existen solapamientos, la creacin borde vuelve a segmentos de lnea. Cuando esta funcin devuelve,
las posiciones de los nodos sern grabados en su atributo coords, en puntos.
El programador debe tener en cuenta ciertas limitaciones y problemas con el algoritmo de Neato. Primero,
como se ha indicado anteriormente, si el modo = "KK", es posible para la tcnica de minimizacin utilizado por neato a ciclo sin,
refinamiento. En la actualidad, no hay manera para la biblioteca de detectar esto, sin embargo, una vez identificado, puede ser fcilmente
fija simplemente eligiendo otra posicin inicial. En segundo lugar, aunque multiedges afectan al diseo, la spline
enrutador no puede todava procesar ellos. Por lo tanto, dos bordes entre los mismos nodos recibirn la misma spline.
Por ltimo, Neato no proporciona ningn mecanismo para la elaboracin de las agrupaciones. Si se requieren grupos, uno debe utilizar el FDP
algoritmo, que pertenece a la misma familia que neato y se describe a continuacin.

pgina 24
Graphviz biblioteca manual, 21 de Agosto, 2014
3.3 FDP

24

La disposicin fdp es similar en apariencia a neato y tambin se basa en un modelo fsico virtual, esta vez
propuesto por Fruchterman y Reingold [FR91]. Este modelo utiliza muelles slo entre nodos conectados
con un borde, y una fuerza de repulsin elctrica entre todos los pares de nodos. Tambin, se consigue un diseo por
minimizando las fuerzas en lugar de energa del sistema.
A diferencia de Neato, FDP apoya subgrafos de racimo. Adems, permite que los bordes entre las agrupaciones y los nodos,
y entre conglomerados y grupos. En la actualidad, un borde de un clster no se puede conectar a un nodo o clster con
el clster.
inicializar
posicin
estras

El esquema de diseo es bastante simple: inicializacin; diseo; y una llamada a la ruta de los bordes. En FDP, porque
es necesario para mantener grupos separados, la eliminacin de solapamientos es (normalmente) obligatorio.
3.4 SFDP

La disposicin es similar a SFDP fdp, excepto que utiliza un enfoque de mltiples niveles refinado que permite manejar muy
grandes grficos. El algoritmo es debido a Hu [Hu05].
A diferencia de FDP, SFDP no soporta subgrafos de racimo. Asimismo, no modela borde longitudes o pesos.
inicializar
posicin
ajustar
estras

El esquema de diseo es bastante simple: inicializacin; diseo; eliminacin superposicin nodo; y una llamada a la ruta
bordes.
3.5 DosPi

El algoritmo de diseo radial representada por DosPi es conceptualmente el ms simple en Graphviz. A raz de una
algoritmo descrito por Wills [Wil97], se necesita un nodo especificado como el centro de la disposicin y la raz de la
generada rbol de expansin. Los nodos restantes se colocan en una serie de crculos concntricos alrededor del centro,
el crculo utilizado correspondiente a la distancia grfico-terico desde el nodo hacia el centro. As, por ejemplo,
todos los vecinos del nodo central se colocan en el primer crculo alrededor del centro. Los algoritmo asigna
rebanadas angulares a cada rama del rbol de expansin inducida para garantizar suficiente espacio para el rbol en cada
anillo. En la actualidad, el algoritmo no intenta visualizar clusters.
inicializar
posicin
ajustar
estras

Como de costumbre, el diseo comienza inicializando el grfico. Esto es seguido por el paso de la posicin,
Si se ha parametrizado por el nodo central, especificado por el atributo raz de la grfica. Si no se especifica, el
algoritmo seleccionar algn nodo "ms central", es decir, aquel cuya distancia mnima a un nodo hoja es
mximo.
Al igual que con neato, el diseo permite un ajuste paso para eliminar el nodo-nodo se superpone. De nuevo, como con neato,
la llamada a las estras computa informacin de dibujo para los bordes. Vea la Seccin 3.2 para ms detalles.

pgina 25
Graphviz biblioteca manual, 21 de Agosto, 2014

25

3.6 circo

El algoritmo de circo se basa en el trabajo de seis y Tollis [ST99, ST00], modificado por Kaufmann y
Wiese [KW]. Los nodos en cada vrtice de corte se colocan en un crculo, con algn intento para reducir al mnimo
cruceros de eje reducir al. Entonces, considerando cada componente como un nico nodo, el rbol derivados se presenta en
de manera similar a DosPi, con algn componente considerado como el nodo raz.
inicializar
posicin
estras
Al igual que con el FDP, el esquema es muy simple. Por construccin, el diseo circo evita nodo se solapa, por lo que no
ajustar paso es necesario.
4 El contexto Graphviz
Hasta ahora, hemos utilizado un contexto Graphviz GVC t sin tener en cuenta su finalidad. Como se sugiri anteriormente,
este valor se utiliza para almacenar diversa informacin de diseo que es independiente de un grfico particular y su ATtributos. Contiene los datos asociados con los plugins, lneas de comando-analizado, motores de script, y cualquier otra cosa

con undealcance
potencialmente
mayor
de una grfica,
hastade
el grasas;
alcanceTambin
de la aplicacin.
Adems,
mantiene
listas
los algoritmos
de diseo
disponibles
y extraccin
registra el
ms reciente
algoritmo de diseo aplicada
a un grfico. Se puede utilizar para especificar varios representaciones de un diseo grfico dado en diferente asociado
archivos. Tambin se utiliza para almacenar diversa informacin global utilizada durante la representacin.
No debe haber slo una GVC t creado para toda la duracin de una aplicacin. Un valor t sola GVC
se puede utilizar con mltiples grficos, aunque con slo un grfico a la vez. Adems, si gvLayout () era
invocadas durante un grfico y GVC t, entonces gvFreeLayout () debe ser llamado antes de usar gvLayout ()
de nuevo, incluso en el mismo grfico.
Normalmente, se crea un GVC t por una llamada a:
GVC_t extern

* gvContext ();

que es lo que hemos utilizado en los ejemplos que se muestran aqu.


Uno puede inicializar un GVC t para grabar una lista de grficos, diseo de algoritmos y extraccin de grasas. Para ello, el
la aplicacin debe llamar a la funcin gvParseArgs:
gvParseArgs vaco extern (GVC_t

* GVC, int argc, char

* argv []);

Esta funcin toma el valor de contexto, adems de una matriz de cadenas usando las mismas convenciones que los parmetros
con la funcin principal de un programa en C. En particular, argc debe ser el nmero de valores en argv. Si el
parte de la base de argv [0] (argv [0] con la parte del directorio eliminado) es el nombre de uno de la disposicin
algoritmos, esto se unirn al valor GVC ty utilizan en tiempo de diseo. (Esto siempre se puede reemplazar
mediante el suministro de una bandera "-K", o mediante el suministro de un atributo de "diseo" en el grfico.) El remanente de argv
valores, en su caso, se interpretan exactamente igual que los indicadores de lnea de comandos permitidos para cualquier programa Graphviz. As,
"-T" Puede ser usado para fijar el tipo de salida, y "-o" se puede utilizar para especificar los archivos de salida.
Por ejemplo, la aplicacin puede utilizar una lista de argumentos sinttica
GVC_t * GVC = gcContext ();
carbonizarse
* args [] = {
"punto",
"-Tgif",
/ * gif de salida

*/

pgina 26
Graphviz biblioteca manual, 21 de Agosto, 2014
"-oabc.gif"
/ * salida al archivo de abc.gif
};
gvParseArgs (GVC, sizeof (args) / sizeof (char

26
*/
* ), args);

para especificar un diseo de puntos de salida GIF escrito al abc.gif archivo. Otro enfoque es el uso de un programa de
lista de argumentos reales, despus de quitar las banderas no manejados por Graphviz.
La mayor parte de la informacin se almacena en un valor t GVC para su uso durante la representacin. Sin embargo, si la argv
matriz contiene argumentos que no sean de bandera, es decir, las cadenas despus de la primera no comienza con "-", estas son tomadas
ser archivos de entrada que definen una corriente de grficos que se pueden extraer. Estos grficos se puede acceder mediante llamadas a
gvNextInputGraph.
Una vez que el GVC t se ha inicializado esta manera, la aplicacin puede llamar para obtener gvNextInputGraph
cada grfico de entrada de forma secuencial, y luego invocar gvLayoutJobs y gvRenderJobs para hacer el especifican
diseos y representaciones. Vase el Apndice C para un ejemplo tpico de este enfoque.
Observamos que gvLayout bsicamente concede el algoritmo grfico y el diseo a la GVC t, como sera
hecho por gvParseArgs, y luego invoca gvLayoutJobs. Una observacin similar es aplicable a gvRender y
gvRenderJobs.
4.1 Datos especficos de la versin

Cuando se crea el GVC t, almacena informacin de la versin y Fecha de produccin que puede ser usado por prestadores de a
identificar qu versin de Graphviz produce la salida. Tambin es lo que se imprime cuando un programa de diseo es
dada la opcin -v. Esta informacin se almacena como una matriz de tres char *, que da el nombre, nmero de versin
y la fecha de compilacin, respectivamente. Se puede acceder a travs de las funciones:
extern char
extern char
extern char

** gvcInfo (GVC_t * );
* gvcVersion (GVC_t
* );
* gvcBuildDate (GVC_t
* );

5 prestadores de grficos
Toda la salida grfica hecho en Graphviz pasa a travs de un procesador con el motor gvrender tipo t, utilizado en
la llamada a gvRender. Adems de los procesadores que forman parte de la biblioteca, una aplicacin puede proporcionar
su propia, permitiendo que se especializan o controlar la salida en caso necesario. Vea la Seccin 6.1 para ms detalles.
Al igual que en la fase de diseo invocada por gvLayout, todo el control sobre los aspectos de la prestacin se manejan a travs de
atributos grfico. Por ejemplo, el atributo outputorder determina si todos los bordes se dibujan antes
los nodos, o todos los nodos se dibujan antes que cualquier borde.
Antes de describir las funciones de procesador de en detalle, puede ser til dar una visin general de cmo la produccin
est hecho. La salida puede ser vista como una jerarqua de componentes de documentos. En el nivel ms alto es el trabajo,

lo que representa un formato de salida y de destino. Unido a un trabajo que podra ser mltiples grficos, cada uno incrustado en algunos
espacio universal. Cada grfico puede ser dividida en mltiples capas como se determina por capas de un grfico
atribuir, en su caso. Cada capa se puede dividir en una matriz de 2 dimensiones de pginas. Una pgina contendr entonces
nodos, bordes y clusters. Cada uno de estos puede contener un ancla HTML. Durante la representacin, cada componente
se refleja en las llamadas emparejadas a sus funciones de comenzar ... ... y final correspondientes. La capa y
componentes de anclaje se omiten si slo hay una nica capa o el componente que encierra no tiene navegador
informacin.
Figura 3 se enumeran los nombres y las firmas de tipos de los campos de gv motor de render t, que se utilizan para
9 Todas las funciones toman un valor GVJ * t, que contiene varios
emitir los componentes descritos anteriormente.
9Cualquier tipo mencionados en esta seccin se describen bien en esta seccin o en el Apndice E.

pgina 27
Graphviz biblioteca manual, 21 de Agosto, 2014

27

informacin acerca de la representacin actual, como el flujo de salida, si existe, o el tamao del dispositivo y de la resolucin.
Seccin 5.1 describe esta estructura de datos.
La mayor parte de las funciones de manejar la estructura grfica anidada. Toda la salida de grficos es manejado por el textpara,
funciones elipse, polgono, Curva de Bzier, y polilnea. La informacin pertinente, dibujo
como el color y el estilo de la pluma est disponible a travs del campo del parmetro obj GVJ t *. Esto se describe en Seccin
cin 5.2. informacin de la fuente se pasa con el texto.
Observamos que, en Graphviz, cada nodo, borde o clster en un grfico que tiene un campo de identificador nico, que puede ser
utilizado como una clave para almacenar y acceder al objeto.
void (* comenzar el trabajo) (GVJ t *);
void (* trabajo final) (GVJ t *);
void (* comenzar grfico) (GVJ t *);
void (* grfico final) (GVJ t *);
void (* comenzar capa) (GVJ t *, char *, int, int);
void (* capa final) (GVJ t *);
void (* iniciar la pgina) (GVJ t *);
void (* la pgina final) (GVJ t *);
void (* comenzar clster) (GVJ t *, char *, largo);
void (* fin de cluster) (GVJ t *);
void (* comenzar nodos) (GVJ t *);
void (* nodos finales) (GVJ t *);
void (* comenzar bordes) (GVJ t *);
void (* bordes extremos) (GVJ t *);
void (* comenzar nodo) (GVJ t *, char *, largo);
void (* nodo final) (GVJ t *);
void (* comenzar borde) (GVJ t *, char *, int, char *, largo);
void (* borde extremo) (GVJ t *);
void (* comenzar ancla) (GVJ t *, char *, char *, char *);
void (* anclaje final) (GVJ t *);
void (* textpara) (GVJ t *, PointF, textpara t *);
void (* color de resolucin) (GVJ t *, gvcolor t *);
void (* elipse) (GVJ t *, PointF *, int);
void (* polgono) (GVJ t *, PointF *, int, int);
void (* Curva de Bzier) (GVJ t *, PointF *, int, int, int, int);
void (* polilnea) (GVJ t *, PointF *, int);
void (* comentario) (GVJ t *, char *);
Figura 3: Interfaz para un procesador

A continuacin, se describen las funciones con ms detalle, aunque muchos son fciles de entender. toda posicin
ciones y tamaos estn en puntos.

comenzar el trabajo (trabajo) Llamado al comienzo de toda la produccin de grficos para un grfico, que puede conllevar dibujo
mltiples capas y mltiples pginas.

de fin de trabajo (trabajo) Llamado al final de toda la produccin de grficos para el grfico. La corriente de salida sigue abierta, por lo que la
renderer puede aadir cualquier informacin final a la salida.
comenzar grfico (trabajo) Llamado a principios de dibujar un grfico. El grfico real est disponible como
job-> obj-> ug

pgina 28
Graphviz biblioteca manual, 21 de Agosto, 2014

28

grfico final (trabajo) Se llama cuando el dibujo de un grafo es completo.

comenzar capa (trabajo, layerName, n, nLayers) Llamado al comienzo de cada capa, slo si nLayers>
0. El parmetro layerName es el nombre de la capa lgica dada en las capas atributo. La capa
tiene el ndice n de nLayers, empezando desde 0.
capa final (trabajo) Llamado al final de la elaboracin de la capa actual.

comenzar la pgina (de trabajo) Llamado al comienzo de una nueva pgina de salida. Una pgina contendr un rectangulares
parte del dibujo de la grfica. El valor job-> pageoffset da la esquina inferior izquierda de
el rectngulo en el diseo de las coordenadas. El punto de trabajo-> pagesArrayElem es el ndice de la pgina
el conjunto de pginas, la pgina en la esquina inferior izquierda indexada por (0,0). El valor job-> zoom
proporciona un factor de escala por el cual el dibujo debe ser escalado. El valor job-> rotacin, si
distinto de cero, indica que la salida debe ser girado por 90 sinistrrsum.
pgina final (trabajo) Se llama cuando el dibujo de una pgina actual se ha completado.

comenzar clster (trabajo) Llamado al comienzo de la elaboracin de un subgrafo clster. El cluster real es
disponible como job-> obj-> u.sg.
fin de cluster (trabajo) Llamado al final de la elaboracin del subgrafo clster actual.

comenzar nodos (de trabajo) llam al comienzo de la elaboracin de los nodos en la pgina actual. Slo si se llama
el grfico de atributos outputorder se ajust a un valor no predeterminado.

nodos finales (trabajo) Se llama cuando se han elaborado todos los nodos en una pgina. Slo si el atributo llamado el grfico
outputorder se ajust a un valor no predeterminado.
comenzar bordes (de trabajo) llam al comienzo de la elaboracin de los bordes de la pgina actual. Slo si se llama
el grfico de atributos outputorder se ajust a un valor no predeterminado.

los bordes extremos () Se llama cuando se dibujan todos los bordes de la pgina actual. Slo si el atributo llamado el grfico
outputorder se ajust a un valor no predeterminado.

comenzar nodo (trabajo) Llamado al comienzo de la elaboracin de un nodo. El nodo actual est disponible como job-> obj-> ONU
nodo final (trabajo) Llamado al final de la elaboracin del nodo actual.

comenzar borde (trabajo) Llamado al comienzo de la elaboracin de un borde. El borde real est disponible como job-> obj-> ue
borde extremo (trabajo) Llamado al final de la elaboracin del borde actual.

comenzar anclaje (trabajo, href, informacin sobre herramientas, objetivo) Llamado al comienzo de un contexto de anclaje asociado
con el nodo actual, una arista o grfico, o en su etiqueta, suponiendo que el objeto grfico o en su etiqueta tiene una URL o
atributo href. El parmetro href href da la asociada, mientras que la oferta y la informacin sobre herramientas de destino
cualquier informacin sobre herramientas o del objetivo. Si el objeto no tiene informacin sobre herramientas, se utilizar su etiqueta. Si el objeto tiene
sin atributo de destino, este parmetro ser NULL.
Si la informacin de anclaje est unido a un objeto grfico, el ancla comenzar y terminar las llamadas de anclaje
encierran el inicio y el final ... ... pide al objeto. Si la informacin de anclaje est unido a
parte de la etiqueta de un objeto, el inicio de anclaje y anclaje final llamadas encerrar la prestacin de ese
parte de la etiqueta, adems de los subpartes.

ancla de extremo (trabajo) Llamado al final del contexto actual de anclaje.

pgina 29
Graphviz biblioteca manual, 21 de Agosto, 2014

29

textpara (trabajo, p, txt) Dibujar texto en el punto P utilizando la fuente especificada y tamao de fuente y color. los
txt argumento ofrece la cadena de texto TXT> str, almacenado en UTF-8, una anchura calculada de la cadena
TXT> anchura y la alineacin horizontal TXT> simplemente de la cadena en relacin con p. Los valores
TXT> nombredetipo y TXT> nombredetipo dar el nombre de la fuente y tamao de fuente deseado, en este ltimo
puntos.
La lnea de base del texto viene dada por py la interpretacin de pxeles depende del valor de
TXT> solo. Bsicamente, px proporciona el punto de anclaje para la alineacin.
TXT> simplemente px
Centro de texto
'norte'
borde izquierdo del texto
'L'

'R'
borde derecho del texto
Las coordenadas x ms a la izquierda del texto, el parmetro de la mayora de los sistemas grficos utilizan para la colocacin del texto, es
dada por px + j * TXT> ancho, donde j es 0.0 (-0.5, -1.0) si TXT> simplemente es 'l' ( 'n', 'r'),
respectivamente. Esta representacin permite al procesador para calcular con precisin el punto de colocacin de texto
cin que sea apropiado para su formato, as como utilizar su propio mecanismo para el clculo de la anchura de
la cuerda.

resolver el color (de trabajo, de color) Resolver un color. Los parmetros de color apunta a una representacin de color
cin de algn tipo particular. El procesador puede utilizar esta informacin para resolver el color a una representacin
tacin adecuada para ello. Vea la Seccin 5.3 para ms detalles.
elipse (trabajo, ps, lleno) Dibujar una elipse con centro en ps [0], con la horizontal y vertical
media ejes ps [1] .x - ps [0] .xy ps [1] .y - ps [0] .y usando el color actual de la pluma y de la lnea
estilo. Si se llena no es cero, la elipse debe ser llenado con el color de relleno actual.

polgono (trabajo, A, n, lleno) Dibujar un polgono con los n vrtices dados en la matriz A, utilizando el
color de la pluma actual y estilo de lnea. Si se llena no es cero, el polgono debe ser llenado con la corriente
color de relleno.

Curva de Bzier (trabajo, A, n, flecha en el arranque, flecha en el extremo, lleno) Dibujar un B-spline con
los puntos de control n dadas en A. Esto consistir (n - 1) / 3 curvas de Bezier cbicos. La lengeta debe
redactarse utilizando el color de la pluma y el estilo de lnea actual. Si el procesador ha especificado que no quiere
hacer sus propias puntas de flecha (vase la seccin 6.1), los parmetros de flecha en el arranque y la flecha en el extremo
ambos sern 0. De lo contrario, si la flecha en el arranque (flecha en el extremo) es verdadera, la funcin debe dibujar
una punta de flecha en la primera (ltima) punto de A. Si se llena no es cero, el bzier debe ser llenado con el
color de relleno actual.
polilnea (trabajo, A, n) Dibujar una polilnea con los n vrtices dados en la matriz A, usando la pluma actual
color y estilo de lnea.

comentario (trabajo, texto) Emitir comentarios de texto relacionados con un objeto grfico. Para los nodos, las llamadas pasarn la
el nombre del nodo y cualquier atributo comentario unido al nodo. Para los bordes, las llamadas pasarn una cadena
Descripcin del borde y cualquier atributo comentario unido al borde. Los grficos y los clusters, una
llamada pasar un atributo de cualquier comentario asociado al objeto.

Aunque el acceso al objeto grfico que se representa est disponible a travs del valor GVJ t, un procesador puede
menudo desempear su funcin con slo ejecutar las operaciones grficas bsicas. Se tiene por qu tener ninguna informacin sobre
grficas o las estructuras de datos relacionados Graphviz. De hecho, un procesador particular no tiene por qu definir cualquier particular,
la funcin de representacin, ya que un punto de entrada dado slo ser llamado si no nulo.

pgina 30
Graphviz biblioteca manual, 21 de Agosto, 2014

30

5.1 La estructura de datos t GVJ

Ahora describir algunos de los campos ms importantes de la estructura GVJ t, concentrndose en las que se refieren
salida. Hay campos adicionales relevantes para la entrada y las interfaces grficas.

comn Esto apunta a diversa informacin vlida para toda la duracin de la aplicacin mediante Graphviz.
En particular, la Commonwealth> informacin contiene informacin de la versin Graphviz, como se describe en Seccin
la 4.1.
La salida de archivo Valor del archivo * para una corriente abierta en la que se debe escribir la salida, si es relevante.

pagesArraySize El tamao de la matriz de pginas en las que el grfico ser de salida, dado como un punto.
Si pagesArraySize.x o pagesArraySize.y es mayor que uno, esto indica que una pgina
tamao se establece y el dibujo grfico es demasiado grande para ser impreso en una sola pgina. Pgina (0,0) es la pgina
que contiene la esquina inferior izquierda del dibujo grfico; La pgina de (1,0) contendr la parte de la
dibujo a la derecha de la pgina (0,0) grfico; etctera
bb El cuadro delimitador de la disposicin en el espacio universal en puntos. Tiene tipo boxf.

boundingBox El cuadro delimitador de la disposicin en el espacio de dispositivo en coordenadas del dispositivo. Tiene cuadro Tipo.
layerNum El nmero de la capa actual.
numLayers El nmero total de capas.

pagesArrayElem la fila y columna de la pgina actual.

pageoffset El origen de la pgina actual en el espacio universal en puntos.


Factor de zoom mediante el cual la salida debe ser escalado.
la rotacin Indica si o no la prestacin debe ser rotado.

obj que se queden La informacin relacionada con el objeto actual. Este es un indicador de un valor de tipo obj estado t.

Vea la Seccin 5.2 para ms detalles.

5.2 Dentro de la estructura de datos de estado t obj

Un valor de tipo obj estado t encapsula diversa informacin relacionada con el objeto actual que se est
prestados. En particular, se proporciona acceso al objeto actual, y proporciona la informacin de estilo para cualquier
operacin de renderizado. Figura 4 seala algunos de los campos ms tiles en la estructura.
tipo y u El campo de tipo indica lo que se est representando actualmente el tipo de objeto grfico. Lo posible
Los valores son ROOTGRAPH OBJTYPE, OBJTYPE CLUSTER, NODO OBJTYPE y OBJTYPE EDGE,
que indica el grfico de la raz, un subgrafo clster, un nodo y un borde, respectivamente. Un puntero a la actual
objeto est disponible a travs de los subcampos ug, u.sg, ONU y UE, respectivamente, de la unin de u.
El valor colorpluma gvcolor t indica el color usado para dibujar lneas, curvas y texto.

La pluma estilo de pluma para ser utilizado. Los valores posibles son PEN NINGUNO, PEN punteado, PEN y discontinua
PEN slido.

PenWidth El tamao de la pluma, en puntos. Tenga en cuenta que, por convencin, un valor de 0 indica que el uso de los ms pequeos
ancho apoyado por el formato de salida.

pgina 31
Graphviz biblioteca manual, 21 de Agosto, 2014

31

obj tipo tipo;


Unin {
grfico t * g;
grfico t * sg;
nodo t * n;
borde t * e;
} U;
gvcolor t colorpluma;
gvcolor t fillColor;
pluma tipo pluma;
grosorpluma doble;
char * url;
char * tailurl;
char * HeadURL;
char * informacin sobre herramientas;
char * tailtooltip;
char * headtooltip;
char * destino;
char * tailtarget;
char * headtarget;

Figura 4: Algunos campos en el estado t obj

El valor fillColor gvcolor t indica el color usado para rellenar regiones cerradas.
Tenga en cuenta que la informacin de la fuente se entrega como parte del valor textpara t pasado a la funcin textpara.
En cuanto a los campos de URL, la descripcin y de destino, stos apuntar a el valor del atributo asociado de la corriente
objeto grfico, suponiendo que se define y que el apoyo Mapa del procesador, informacin sobre herramientas y metas, respectivamente (cf.
Seccin 6.1).
5.3 La informacin de color

Hay cinco formas en las que un color se puede especificar en Graphviz: RGB + alfa, HSV + alfa, CYMK,
ndice de color, y el nombre del color. Adems, los valores alfa RGB + pueden ser almacenados como bytes, palabras o dobles.
Un valor de color en Graphviz tiene el tipo gvcolor t, que contiene dos campos: un giro unin, que contiene el
datos de color, y el campo de tipo, que indica qu representacin del color se utiliza en la unin. La Tabla 14 describe
los tipos de colores permitidos, y el campo de unin asociado.
Antes de que un color se utiliza en la representacin, Graphviz procesar una descripcin del color proporcionado por la entrada
el grfico en una forma deseada por el procesador. Se trata de tres procedimiento paso. En primer lugar, Graphviz ver si el
color coincida con los colores conocidos del renderer, en su caso. Si es as, la representacin de color es la secuencia del color.
De lo contrario, la biblioteca convertir la descripcin de color de entrada a formato preferido por el procesador. Finalmente,
si el procesador tambin proporciona una funcin de color de resolucin, Graphviz entonces llamar a esa funcin, pasando por una
puntero al valor de color actual. El procesador tiene entonces la oportunidad de ajustar el valor, o convertirlo en
otro formato. En un caso tpico, si un procesador utiliza un mapa de color, podr solicitar valores RGB como entrada, y
a continuacin, almacenar un ndice de mapa de color asociado con el formato de ndice de color. Si el procesador realiza una conversin
a otro tipo de color, se debe restablecer el campo de tipo para indicar esto. Es esta ltima representacin que se
pasar a las rutinas de dibujo del procesador. colores conocidos del renderer y formato de color preferidos son
se describe en la Seccin 6.1 a continuacin.

pgina 32
Graphviz biblioteca manual, 21 de Agosto, 2014

32

Tipo
Descripcin
Campo
formato alfa RGB + representada como 4 bytes de 0 a 255 u.rgba
BYTE RGBA
RGBA PALABRA formato RGB + alfa representa como 4 palabras de 0 a
u.rrggbbaa
65535
formato alfa RGB + representada como 4 dobles 0-1 u.RGBA
RGBA DOBLE
HSVA DOBLE
formato alfa HSV + representada como 4 dobles 0-1 u.HSVA
formato de CYMK representada como 4 bytes de 0 a 255
BYTE CYMK
u.cymk
nombre de texto String color
u.string
COLOR INDEX
ndice entero
u.index
Tabla 14: Tipo de color representaciones

6 La adicin de complementos
El marco Graphviz permite al programador utilizar los plug-ins para extender el sistema de varias maneras.
Por ejemplo, el programador puede aadir nuevos motores de diseo grfico junto con los nuevos procesadores y su refunciones relacionadas. La Tabla 15 describe las API del conector de admitidos por Graphviz. Cada plug-in se define
Tipo
funciones
API render
t motor gvrender
dispositivo de API t motor gvdevice

Caracteristicas
gvrender cuenta con t
-

diseo de la API
TextLayout API

gvlayout cuenta con t


-

LoadImage API

t motor gvloadimage
t motor gvlayout
t motor gvtextlayout

Tabla 15: Plug-in tipos de API

Descripcin
Funciones para la prestacin de un grfico
Funciones para inicializar y terminating un dispositivo
Funciones para la conversin de un imformato de edad a otra
Funciones para trazar un grfico
Funciones para la resolucin de nombres de fuentes y
tamao del texto

por una estructura de motor que contiene sus puntos de entrada de funcin, y una estructura de caractersticas especificar caractersticas
apoyado por el plug-in. Por lo tanto, un procesador est definido por los valores de motor de tipo T y gvrender
gvrender cuenta con t.
Una vez que todos los plug-ins de una especie dada estn definidos, deben ser reunidos en una matriz terminados en 0
del tipo de elemento instalado gvplugin t, cuyos campos se muestran en la Figura 5. Los campos tienen el
int id;
tipo char *;
int calidad;
void * motor;
caractersticas void *;

siguientes significados.

Figura 5: Plug-in de campos

Identificacin del Identificador para un determinado plug-in dentro de un paquete determinado y con una especie dada API. Tenga en cuenta que el id necesita
Slo ser nico dentro de su paquete de plug-in, ya que estos paquetes se supone que son independientes.
escriba el nombre para un determinado plug-in, que se utiliza durante el plug-in de bsqueda.

Una calidad entero arbitrario utilizado para pedir plug-ins con el mismo tipo. Plug-ins con valores mayores
ser elegido antes de plug-ins con valores ms pequeos.

pgina 33
Graphviz biblioteca manual, 21 de Agosto, 2014
Puntos de motor a la estructura del motor relacionada.

Puntos caractersticas a la estructura de las caractersticas relacionadas.

33

A modo como
de ejemplo,
combinarse
sigue. supongamos que queremos aadir varios prestadores para la salida de mapa de bits. Una coleccin de estas fuerzas
gvplugin_installed_t render_bitmap_types [] = {
{0, "jpg", 1, y jpg_engine, y jpg_features},
{0, "jpeg", 1, y jpg_engine, y jpg_features},
{1, "png", 1, y png_engine, y png_features},
{2, "gif", 1, y gif_engine, y gif_features},
{0, NULL, 0, NULL, NULL}
};

Tenga en cuenta que esto permite "jpg" y "jpeg" para referirse a las mismas extraccin de grasas. Para el tipo enchufable sin una
Caractersticas de la estructura, la funcin de puntero en su gvplugin instalado t debe ser NULL.
Todos los plug-ins de todo tipo de API a continuacin, deben ser reunidos en una matriz de 0 terminados del tipo de elemento
gvplugin api t. Para cada elemento, el primer campo indica el tipo de API, y los segundos puntos a la
gama de plug-ins descritos anteriormente (gvplugin t instalado).
Continuando con nuestro ejemplo, si hemos suministrado, adems de la representacin de mapa de bits plug-ins, plug-ins para
render VRML, y plug-ins para cargar imgenes, definiramos
apis gvplugin_api_t [] = {
{API_render, y render_bitmap_types},
{API_render, y render_vrml_types},
{API_loadimage, y loadimage_bitmap_types},
{0, 0},
};

Aqu rendir tipos vrml y hacen tipos vrml son matrices tambin terminados en 0 de tipo de elemento
gvplugin t instalado. Tenga en cuenta que no puede haber varios elementos del mismo tipo API.
Una definicin final se utiliza para unir un nombre para el paquete de todos los plug-ins. Esto se hace usando una
estructura de la biblioteca t gvplugin. Su primer campo es un char * dando el nombre del paquete. El segundo
campo es un gvplugin api t * que apunta a la matriz se ha descrito anteriormente. La estructura en s debe ser nombrado
gvplugin nombre de la biblioteca LTX, donde nombre es el nombre del paquete tal como se define en el primer campo.
Por ejemplo, si hemos decidido llamar a nuestro paquete "mapa de bits", podramos utilizar la siguiente definicin:
gvplugin_library_t gvplugin_bitmap_LTX_library = { "mapa de bits", apis};

Para finalizar la instalacin del paquete, es necesario crear una biblioteca dinmica que contiene el
gvplugin valor t biblioteca y todas las funciones y los datos mencionados por ella, ya sea directa o indirectarectamente. La biblioteca debe ser nombrado gvplugin nombre, donde de nuevo nombre es el nombre del paquete.
El nombre real del archivo de la biblioteca ser dependiente del sistema. Por ejemplo, en los sistemas Linux, nuestra biblioteca
mapa de bits gvplugin tendra el nombre de archivo libgvplugin bitmap.so.3.
En la mayora de los casos, Graphviz est construido con un nmero de versin plug-in. Este nmero debe ser incluido en
nombre de archivo de la biblioteca, siguiendo las convenciones dependientes del sistema. El nmero se da como el valor de
plugins en la libgvc.pc archivo, que se pueden encontrar en el directorio lib / pkgconfig donde Graphviz
fue instalado. En nuestro ejemplo, el "3" en el nombre de archivo de la biblioteca da el nmero de versin.

pgina 34
Graphviz biblioteca manual, 21 de Agosto, 2014

34

Por ltimo, la biblioteca debe estar instalado en el directorio de la biblioteca Graphviz, y Dot -c se debe ejecutar a
aadir el paquete a la configuracin Graphviz. Tenga en cuenta que ambos de estos pasos tpicamente asumir que uno tiene
10
privilegios instalador.
En el resto de esta seccin, vamos a examinar los tres primeros tipos de API del conector de mayor detalle.
6.1 Escribir un procesador de plug-in

Un procesador de plug-in tiene dos partes. La primera consiste en una estructura de tipo de motor gvrender t definicin
las acciones del renderer, tal como se describe en la Seccin 5. Recordemos que cualquier campo puede contener un puntero NULL.
Para la segunda parte, el programador debe proporcionar una estructura de tipo gvrender dispone de t. Esta
Graphviz registro proporciona informacin sobre el procesador. Figura 6 lista los campos implicados. Algunos de los
int banderas;
margen de doble incumplimiento;
almohadilla de doble defecto;
PointF tamao de pgina por defecto;
PointF dpi predeterminado;
knowncolors ** carbn de lea;
knowncolors SZ int;
color del tipo de color de tipo t;
Char dispositivo *;
char del objetivo * LoadImage;

Figura 6: Caractersticas de un procesador


valores por defecto pueden ser anuladas por el grafo de entrada.
Ahora describir los campos en detalle.

banderas de bits de banderas que indican o propiedades del procesador. Estos indicadores se describen en la Tabla 16.

margen predeterminado tamao de margen predeterminado en puntos. Esta es la cantidad de espacio que queda alrededor del dibujo.
cojn cojn tamao predeterminado por defecto en puntos. Esta es la cantidad en la que el grfico est insertado dentro de la
dibujo regin. Tenga en cuenta que la regin de dibujo se puede llenar con un color de fondo.

tamao de pgina por defecto el tamao de tamao de pgina por defecto en puntos. Por ejemplo, una pgina de tamao carta de 8.5 por 11 pulgadas
tendra un tamao de pgina por defecto de 612 por 792.
por defecto dpi de resolucin por defecto, en pxeles por pulgada. Tenga en cuenta que los valores de X e Y pueden ser diferentes a
apoyar pxeles no cuadrados.
knowncolors una matriz de punteros de caracteres que dan un lexicogrfico orden 11lista de los nombres de los colores
apoyado por el procesador.
SZ knowncolors El nmero de elementos de la matriz knowncolors.

El color del tipo de representacin preferido para los colores. Vea la Seccin 5.3.

10Normalmente, para compilaciones destinados a la instalacin local dot -c se ejecute durante make install. Puede que sea necesario para ejecutar este
manualmente si la compilacin cruzada o de lo contrario se mueve manualmente binarios a un sistema diferente.
11El pedido debe hacerse en forma de bytes usando la localidad LANG = C para la comparacin de bytes.

pgina 35
Graphviz biblioteca manual, 21 de Agosto, 2014

35

El dispositivo de nombre de un dispositivo, si lo hay, asociado con el procesador. Por ejemplo, el uso de un procesador de GTK
para la salida podra especificar "GTK" como su dispositivo. Si se le da un nombre, la biblioteca buscar un plug-in
del dispositivo de API tipo con ese nombre, y el uso de las funciones asociadas para inicializar y terminar el
dispositivo. Consulte la Seccin 6.2.

LoadImage destino El nombre del tipo preferido de formato de imagen para el procesador. Cuando el usuario una
imagen suministrada se da, la biblioteca intentar encontrar una funcin que convertir la imagen de
su formato original a uno preferido por el procesador. Un procesador definida por el usuario puede necesitar proporcionar, como
plug-ins adicionales, sus propias funciones para el manejo de la conversin.
Bandera
Descripcin
GVRENDER HACE FLECHAS
puntas de flecha integradas en las estras
Soporta capas de grficos
GVRENDER HACE CAPAS
Si esto es cierto, la salida del procesador puede contener mltiples versiones
GVRENDER HACE multigrafo SALIDA DE ARCHIVOS
Es compatible con un modelo de color de color verdadero
GVRENDER HACE TRUECOLOR
Salida del sistema de coordenadas tiene el origen en la esquina superior izquierda
GVRENDER Y BAJA
EVENTOS GVRENDER X11
Por GUI plug-ins, difiere representacin real hasta que el bucle de eventos GUI
invoca job-> callbacks-> refresh ()
GVRENDER HACE TRANSFORMAR
Puede manejar la transformacin (escala, traslacin, rotacin) del universal
Sal al dispositivo de coordenadas. Si es falso, la biblioteca va a hacer la transformacin
antes de pasar cualquier coordenada al procesador
Quiere que la etiqueta de un objeto, en su caso, a condicin de que durante la representacin de texto
GVRENDER HACE ETIQUETAS
Soporta regiones a las que las URL de los que se conectan. Si es verdad, son las URL
GVRENDER lo hace MAPS
proporcionado al procesador, ya sea como parte de la job-> obj o a travs de la
renderizador de comenzar la funcin de anclaje
GVRENDER HACE RECTANGULO MAPA regiones rectangulares se pueden asignar
regiones circulares se pueden asignar
GVRENDER HACE CRCULO MAPA
GVRENDER HACE POLGONO MAPA
Los polgonos pueden ser mapeados
Elipses se pueden asignar
GVRENDER HACE ELLIPSE MAPA
B-splines se pueden asignar
GVRENDER HACE BSPLINE MAPA
Si es verdad, la informacin de herramientas se proporcionan al procesador, ya sea como parte de la
GVRENDER HACE TOOLTIPS
job-> obj o por medio de la funcin de anclaje de comenzar el procesador
GVRENDER HACE OBJETIVOS
Si es verdad, los objetivos se proporcionan al procesador, ya sea como parte de la
job-> obj o por medio de la funcin de anclaje de comenzar el procesador
GVRENDER HACE Z
Utiliza un modelo de salida 3D
Tabla 16: Propiedades del renderizador

6.2 Escribir un dispositivo plug-in

Un dispositivo plug-in proporciona ganchos para Graphviz para administrar todas las operaciones especficas de dispositivos necesarios antes y
despus de la prestacin. El motor relacionada de tipo de motor gvdevice t tiene 2 puntos de entrada:
void (
void (

* inicializar) (GVJ_t
* Finalizar) (GVJ_t

* );
* );

los cuales son llamados al principio y al final de cada trabajo de renderizado. La rutina de inicializacin podra abrir una lona
el sistema de ventanas, o la creacin de una nueva pgina para la impresin; la rutina de finalizacin podra entrar en un bucle de eventos despus de
que podra cerrar el dispositivo de salida.
6.3 Escritura de un plug-in carga de imgenes

Una imagen de carga plug-in tiene el tipo de motor del motor gvimageload T y proporciona un nico punto de entrada
que puede ser utilizado para leer en una imagen, convertir la imagen de un formato a otro, y escribir el resultado.

pgina 36
Graphviz biblioteca manual, 21 de Agosto, 2014

36

Dado que la funcin realmente hace la representacin, que est estrechamente ligada a un procesador de plug-in especfico.
void (

* LoadImage) (GVJ_t

* trabajo, usershape_t

* nosotros, boxf b, bool llena);

Cuando se le llama, LoadImage se da el trabajo actual, un puntero a la imagen de entrada nosotros, y el cuadro delimitador
b en el dispositivo de las coordenadas donde la imagen debe ser escrito. El valor booleano indica si llena
el primer cuadro delimitador se debe llenar.
El valor del tipo de t instalado gvplugin entrada una imagen de carga del plug-in debe especificar el
de entrada y formatos de salida que maneja. Por lo tanto, un plug-in de conversin de JPEG a GIF sera llamado "jpeg2gif".
Desde un cargador de imgenes puede tambin querer leer en una imagen en algn formato, y luego hacer que la imagen utilizando
el mismo formato, es bastante razonable para los formatos de entrada y salida sean idnticos, por ejemplo, "gif2gif".
En relacin con el tipo usershape t, sus campos ms importantes se muestran en la Figura 7. Estos campos tienen
nombre del personaje;
FILE * f;
ImageType tipo t;
unsigned int x, y;
unsigned int w, h;
unsigned int dpi;
void * data;
t Tamao datasize;
void (* datafree) (t * usershape nosotros);

Figura 7: Los campos en usershape t


los siguientes significados:

name El nombre de la imagen.

f Un flujo de entrada libre a los datos de la imagen. Dado que la imagen podra ser procesado varias veces, el
aplicacin debe utilizar una funcin como fseek para asegurar que los puntos del puntero del archivo al principio
del archivo.
escriba el formato de la imagen. Los formatos soportados son en Graphviz FT BMP, GIF FT, FT PNG,
FT JPEG, PDF FT, FT FT PS y EPS. El valor FT NULL indica un tipo de imagen desconocida.

x e y las coordenadas de la esquina inferior izquierda de la imagen en unidades de imagen. Este suele ser el origen, sino
algunas imgenes tales como los de formato PostScript pueden ser traducidos de distancia desde el origen.
w y h La anchura y la altura de la imagen en unidades de imagen
los ppp El nmero de unidades de imagen por pulgada

datos, datasize, datafree Estos campos se puede utilizar para almacenar en cach los datos de imagen convertidos para que el archivo
E / S y la conversin slo es necesario hacerlo una vez. Los datos pueden ser almacenados a travs de datos, con datasize
que indica el nmero de bytes utilizados. En este caso, el cdigo de la imagen de carga debe almacenar un controlador de limpieza
en datafree, que puede ser llamado para liberar cualquier memoria asignada.

Si LoadImage hace el almacenamiento en cach, se puede comprobar si US-> de datos es nulo. Si es as, se puede leer y almacenar en cach el
imagen. Si no es as, se debe comprobar que el US-> datafree de valor apunta a su propio enrutamiento datafree.
Si no, entonces algn otro gestor de imagen ha almacenado en cach los datos all. La funcin debe LoadImage ellas
llame a la actual US-> datafree funcin de almacenamiento en cach antes de su propia versin de la imagen.
La plantilla de cdigo en la figura 8 indica la forma en el almacenamiento en cach debe ser manejado.

pgina 37

Graphviz biblioteca manual, 21 de Agosto, 2014

37

si (US-> data) {
si (US-> datafree! = my_datafree) {
US-> datafree (nosotros); / * cach de datos incompatibles libre
US-> Datos = NULL;
US-> datafree = NULL;
US-> datasize = 0;
}
}

*/

if (!> US- datos) {


/ * leer datos de imagen de US-> f y convertirlo;
* almacenar los datos de imagen en la memoria apuntada por nosotros-> datos;
* establecer US-> datasize y US-> datafree a los valores apropiados.
*/
}
si (US-> data) {
/ * emitir los datos de imagen en US-> Datos
}

*/

Figura 8: Almacenamiento en cach de imgenes convertidas


7 grficos no conectados
Todos los diseos bsicos proporcionados por Graphviz se basan en un grfico conectado. Cada uno est despus los correspondientes
manejar el caso poco comn de tener mltiples componentes. La mayor parte del tiempo, el enfoque obvio es
utilizado: dibujar cada componente por separado y luego ensamblar los dibujos en un solo diseo. El nico lugar
Esto no se hace en Neato es cuando el modo es "KK" y el paquete = "false" (vase la Seccin 3.2).
Para el algoritmo de punto, sus dibujos en capas hacen que la fusin simple: los nodos de la fila ms alta
de cada componente estn todos puestos en la misma fila. Para los otros diseos, no es obvio cmo poner la
componentes juntos.
El software Graphviz ofrece el paquete de biblioteca para ayudar con los grficos inconexos, especialmente por
el suministro de una tcnica para el embalaje de dibujos grfico arbitrarias forma rpida, esttica y con eficiencia
uso del espacio. El cdigo siguiente indica cmo la biblioteca se puede integrar con los algoritmos de diseo bsicos
dado un grafo G de entrada y un valor de t GVC GVC.
Agraph_t
* sg;
ARCHIVO
* fp;
Agraph_t ** cc;
int
i, NCC;
CC = ccomps (G, y NCC, (char

* ) 0);

for (i = 0; i <NCC; i ++) {


sg = cc [i];
nodeInduce (SG);
gvLayout (GVC, sg, "copado");

pgina 38
Graphviz biblioteca manual, 21 de Agosto, 2014

38

}
pack_graph (NCC, cc, g, 0);
gvRender (GVC, g, "ps", stdout);
for (i = 0; i <NCC; i ++) {
sg = cc [i];
gvFreeLayout (GVC, sg);
agdelete (g, sg);
}

La llamada a ccomps divide el grafo G en sus componentes conectados. NCC se establece en el nmero de
componentes. Los componentes estn representados por subgraphs de la grfica de entrada y se almacenan en la regresado
formacin. La funcin da nombres a los componentes de una manera que no debe entrar en conflicto con la ya existente

subgrafos.
se desea,laelflexibilidad,
tercer argumento
de ccomps puede
ser no
utilizado
paralos
designar
que los subgrafos debe
ser
llamado.SiAdems,
los componentes
subgrafo
contienen
bordes lo
asociado.
Ciertos algoritmos de diseo, tales como neato, permiten que el grfico de entrada para fijar la posicin de ciertos nodos,
indicado por ND clavado (n) ser distinto de cero. En este caso, todos los nodos con una posicin fija, es preciso fijar
juntos, por lo que todos ellos deben ocurrir en el mismo componente "conectado". La biblioteca ofrece paquete
pccomps, un anlogo de ccomps para esta situacin. Tiene casi la misma interfaz que ccomps, pero
realiza un tercer parmetro booleano *. La funcin establece el booleano sealado en true si el grfico tiene nodos
con posiciones fijas. En este caso, el componente que contiene estos nodos es el primero en la matriz devuelta.
Continuando con el ejemplo, tomamos un componente a la vez, utilice nodeInduce para crear el diente
subgrafo corres- nodo-inducida, y luego se qued con el componente con gvLayout. Aqu, nosotros usamos para neato
12
cada diseo, pero es posible utilizar un diseo diferente para cada componente.
A continuacin, utilizamos el grfico de la funcin pack paquete para volver a montar el grfico en un solo dibujo. A
emplazamiento de los componentes, el paquete utiliza el enfoque basado en el descrito por poliomin Freivalds et al [FDK02].
Los tres primeros argumentos de la funcin son claras. El cuarto argumento indica si hay o no
componentes fijos.
La funcin grfica paquete utiliza el atributo packmode de la grfica para determinar como el embalaje deben
hacer. En la actualidad, el embalaje utiliza el algoritmo nico se ha mencionado anteriormente, pero permite tres granularidad variable
dades, representados por los valores "nodo", "CLUST" y "grfico". En el primer caso, el embalaje se realiza en el
nodo y nivel de borde. Esto proporciona el embalaje ms apretado, utilizando la menor rea, pero tambin permite a un nodo de una
componente que se encuentran entre dos nodos de otro componente. El segundo valor, "CLUST", requiere que el
embalar grupos de alto nivel a tratar con una caja GD valor bb conjunto de delimitacin como un nodo grande. Los nodos y los bordes
no contenida por completo dentro de un grupo se tratan como en el caso anterior. Esto evita que los componentes
que no pertenecen al grupo de intrusos dentro del cuadro delimitador del cmulo. El ltimo caso que hace el
embalaje en la granularidad grfico. Cada componente es tratado como un gran nodo, cuyo tamao est determinado por
su cuadro delimitador.
Tenga en cuenta que la biblioteca calcula automticamente el recuadro de delimitacin de cada uno de los componentes. Tambien como
un efecto secundario, el paquete de acabados grfico volviendo a calcular y establecer el cuadro delimitador atributo GD bb de la
grafico.
El paso final es liberar a los subgrafos componentes.
Aunque punto y neato tienen sus enfoques especializados a los grficos inconexos, cabe sealar que
estos no son sin sus deficiencias. El enfoque utilizado por punto, la alineacin de los dibujos de todos los componentes
a lo largo de la parte superior, funciona bien hasta que el nmero de componentes aumenta de tamao. Cuando esto sucede, la relacin de aspecto

12En la actualidad, el diseo de puntos tiene una limitacin que slo funciona en un grfico de la raz. Por lo tanto, el uso de puntos para un componente, es necesario
crear una nueva copia del subgrafo, aplique punto y luego copia los atributos de la posicin de regreso al componente.

pgina 39
Graphviz biblioteca manual, 21 de Agosto, 2014

39

del dibujo final puede llegar a ser muy malo. manejo de un grfico sin conectar de Neato puede tener dos dibujo
espaldas. En primer lugar, no puede haber una gran cantidad de espacio desperdiciado. El valor elegido para componentes separados es un simple
en funcin del nmero de nodos. Con una cierta estructura de borde, planos de los componentes pueden utilizar mucho menos
zona. Esto puede producir un dibujo similar a un tomo de clsico: un gran ncleo rodeado por un anillo de electrones
con una gran cantidad de espacio vaco entre ellos. En segundo lugar, el modelo de Neato es esencialmente cuadrtica. Si el
Los componentes se representan por separado, se puede ver una disminucin dramtica en el tiempo de diseo, a veces varias rdenes
de magnitudes. Por estas razones, a veces tiene sentido aplicar el enfoque de DosPi sin conectar
grficos a punto y diseos neato. De hecho, como hemos sealado, la disposicin Neato normalmente utiliza el paquete
biblioteca por defecto.

pgina 40
Graphviz biblioteca manual, 21 de Agosto, 2014

40

referencias
[BHvW00] M. Bruls, K. Huizing, y J. van Wijk. Treemaps Squarified. En W. de Leeuw y R. van Liere,
editores, Actas del Simposio IEEE Eurographics y TVCG de visualizacin, pginas 3342, 2000.
[Coh87]

J. Cohen. Dibujar grficos para transmitir proximidad: una DO incrementales disposicin de metanfetamina. ACM
Las transacciones en Interaccin Persona-Ordenador, 4 (11): 197-229, 1987.

[DGKN97] D. Dobkin, E. Gansner, E. Koutsofios, y S. Norte. La implementacin de un borde de propsito general


enrutador. En G. DiBattista, editor, Proc. Symp. Grfico Dibujo GD'97, volumen 1353 de Lecture
Notas en Ciencias de la Computacin, pginas 262-271, 1997.
[FDK02]
[FR91]

K. Freivalds, U. Dogrusoz, y P. Kikusts. diseo grfico desconecta y el poliomin


enfoque de embalaje. En P. Mutzel et al., Editor, Proc. Symp. Grfico Dibujo GD'01, el volumen
2265 de Lecture Notes in Computer Science, pginas 378-391, 2002.
Thomas MJ Fruchterman y Edward M. Reingold. Dibujo grfico por la fuerza dirigida Placeambiente. Software - Prctica y Experiencia, 21 (11): 1129-1164, noviembre de 1991.

[GKN04] E. Gansner, Y. Koren, y S. Norte. dibujo grfico por mayorizacin estrs. En Proc. Symp.
Grfico Dibujo GD'04, septiembre de 2004.

[GKNV93] Emden R. Gansner, Eleftherios Koutsofios, Stephen C. del Norte, y Kiem-Phong Vo. Un Technique para el dibujo Directed grficos. IEEE Trans. Ingeniera de Software, 19 (3): 214-230, mayo
1993.
[GN00]
[l]

[Hu05]
[KK89]
[KN94]
[KS80]
[KW]

ER Gansner y SC Norte. Un sistema de visualizacin grfica abierta y sus aplicaciones a la


Ingeniera de software. Software - Prctica y Experiencia, 30: 1203-1233, 2000.

Michael Himsolt. GML: Un archivo de formato de grfico porttil. Informe tcnico, Passau Universitat.
YF Hu. Eficiente y de alta calidad de la mano-dirigi el delineado de grfico. Mathematica Journal,
10: 37-71, 2005.
T. y S. Kamada Kawai. Un algoritmo para dibujar grficos no dirigidos generales. Informacin
Cartas de procesamiento, 31 (1): 7-15, abril de 1989.
Eleftherios Koutsofios y Steve Norte. Las aplicaciones de visualizacin de grficos. en Actas
Grficos de interfaz, pginas 235-245, mayo de 1994.

J. y J. Kruskal Seery. El diseo de diagramas de red. En Proc. Primera Conf General. en Social
Grficos, pginas 22-50, 1980.
M. Kaufmann y R. Wiese. Mantener el mapa mental de los dibujos circulares. En
M. Goodrich, editor, Proc. Symp. Grfico Dibujo GD'02, volumen 2528 de Lecture Notes in
Ciencias de la Computacin, pginas 12-22.

[LBM97] W. Lee, N. Barghouti, y J. Mocenigo. Grappa: Un paquete grfico en Java. En G. DiBattista, EDitor, Proc. Symp. Grfico Dibujo GD'97, volumen 1353 de Lecture Notes in Computer Science,
1997.
[ST99]

Janet Seis y Ioannis Tollis. dibujos grficos circulares de biconexas. En Proc. ALENEX 99,
pginas 57-73, 1999.

pgina 41
Graphviz biblioteca manual, 21 de Agosto, 2014
[ST00]
[STT81]
[Wil97]
[Win02]

41

Janet Seis y Ioannis Tollis. Un marco para los dibujos circulares de redes. En Proc. Symp.
Grfico Dibujo GD'99, volumen 1731 de Lecture Notes in Computer Science, pginas 107-116.
Springer-Verlag, 2000.

K. Sugiyama, S. Tagawa, y M. Toda. Los mtodos para la comprensin de Visual jerrquica SisteEstructuras TEM. IEEE Trans. Sistemas, el hombre y la ciberntica, SMC-11 (2): 109-125, December
1981.
G. Wills. Nicheworks - visualizacin interactiva de grficos grandes. En G. DiBattista, editor,
Simposio sobre Graph Drawing GD'97, volumen 1353 de Lecture Notes in Computer Science,
pginas 403-414, 1997.

A. invierno. GXL - Informacin general y estado actual. En Proc. Taller Internacional sobre ficos
Herramientas basadas (GraBaTs), octubre de 2002.

pgina 42
Graphviz biblioteca manual, 21 de Agosto, 2014

42

Una compilacin y del enlace


En este apndice se ofrece una breve descripcin de cmo construir su programa usando Graphviz como una biblioteca. Tambin
toma nota de las diversas bibliotecas implicadas. A medida que los sistemas de compilacin varan en gran medida, no se ofrece ninguna tentativa de proporcionar
instrucciones de construccin de bajo nivel. Se supone que el usuario es capaz de adaptar el entorno de construccin de utilizar el
es necesario incluir archivos y bibliotecas.

Todo
necesarioGraphviz.
incluir archivos
bibliotecas
en los
incluyen,
y basura
donde
estloinstalado
Al nively ms
simple,estn
todo disponibles
una aplicacin
necesita
hacerlibpara
utilizar los algoritmos de diseo
es incluir gvc.h, que proporciona (indirectamente) todos los tipos y funciones Graphviz, compilar el cdigo,
y vincular el programa con las libreras necesarias.
Para la vinculacin, la aplicacin debe utilizar las bibliotecas Graphviz
gvc

cgraph
CDT

Si el sistema est configurado para utilizar los plug-ins, estas bibliotecas son todos los que estn fuera necesario. En tiempo de ejecucin, el programa
cargar las libreras dinmicas que necesita.
Si el programa no utiliza los plug-ins, a continuacin, estas bibliotecas deben ser incorporados en tiempo de enlace. Estas
bibliotecas pueden incluir
Ncleo de gvplugin

La disposicin de puntos gvplugin


gvplugin diseo Neato
gvplugin gd

gvplugin Pango

13

ms cualquier otro plug-ins el programa requiere.


Si Graphviz se construye y se instala con el GNU construir herramientas, hay paquete de configurar los archivos creados
en el directorio lib / pkgconfig que se puede utilizar con el programa pkg-config para obtener la incluir archivo y la informacin de la biblioteca para una instalacin determinada. Suponiendo un entorno Unix, una muestra
14 podra
Makefile para la construccin de los programas enumerados en los Anexos
B, C y tener
D la forma:
'pkg-config libgvc --cflags' CFLAGS = -g -Wall -O2
LDFLAGS = 'pkg-config libgvc --libs'
todo: fcil de demostracin de puntos
sencillo: simple.o
dot: dot.o
demo: demo.o
limpiar:
rm-rf sencilla demostracin de puntos
* .o

13Para completar, tomamos nota de que puede ser necesario para vincular de manera explcita en las siguientes bibliotecas adicionales, dependiendo de la
las opciones establecidas cuando se construy Graphviz: expatriados, fontconfig, freetype2, pangocairo, El Cairo, Pango, gd, jpeg, png, z,
LTDL, y otras bibliotecas requeridas por El Cairo y Pango. Tpicamente, sin embargo, la mayor parte se basa manejar estos implcitamente.
14Tambin se pueden encontrar, junto con el Makefile, en el directorio de la fuente dot.demo Graphviz.

pgina 43
Graphviz biblioteca manual, 21 de Agosto, 2014

43

programa de ejemplo BA: simple.c


Este cdigo ilustra una aplicacin que utiliza Graphviz para posicionar un grfico utilizando el diseo de puntos
y luego escribe la salida con el formato normal. Una aplicacin puede reemplazar la llamada a gvRender con
su propia funcin para hacer que la grfica, utilizando la informacin codificada en el diseo grfico de la estructura (cf.
Seccin 2.3).
# include <gvc.h>

int main (int argc, char


{
GVC_t * GVC;
Agraph_t
* gramo;
ARCHIVO
* fp;

** argv)

GVC = gvContext ();


si (argc> 1)
fp = fopen (argv [1], "r");
ms
fp = entrada estndar;
g = agread (fp, 0);
gvLayout (GVC, g, "punto");

gvRender (GVC, g, "normal", la salida estndar);


gvFreeLayout (GVC, g);
agclose (g);
}

retorno (gvFreeContext (GVC));

pgina 44
Graphviz biblioteca manual, 21 de Agosto, 2014

44

CA programa de ejemplo: dot.c


Este ejemplo muestra cmo una aplicacin puede leer una secuencia de entrada de grficos, disear cada uno, y luego usar el
Graphviz Renderers escribir los dibujos a un archivo de salida. De hecho, este es precisamente cmo el programa de puntos es
por escrito, haciendo caso omiso de algunos de manejo de seales, su declaracin especfica de los datos Info (vase la Seccin 4.1), y unos pocos
otros detalles de menor importancia.
# include <gvc.h>

int main (int argc, char


** argv)
{
Agraph_t
* gramo,
* prev = NULL;
GVC_t * GVC;
GVC = gvContext ();
gvParseArgs (GVC, argc, argv);

mientras que ((g = gvNextInputGraph (GVC))) {


si (ant) {
gvFreeLayout (GVC, anterior);
agclose (ant);
}
gvLayoutJobs (GVC, g);
gvRenderJobs (GVC, g);
prev = g;
}
retorno (gvFreeContext (GVC));

pgina 45
Graphviz biblioteca manual, 21 de Agosto, 2014

45

DA programa de ejemplo: demo.c


Este ejemplo proporciona una modificacin del ejemplo anterior. De nuevo se basa en los procesadores Graphviz,
pero ahora se crea el grfico de forma dinmica en lugar de leer el grfico desde un archivo.
Tenga en cuenta que, o bien el grfico o los valores argv [] tienen que especificar el algoritmo de diseo se utiliza, como se
explica en la Seccin 4. En concreto, el grfico de entrada debe tener el diseo establecido el atributo, o el comando
argumentos de la lnea debe contener una bandera "-K" vlida. Si no es as, gvParseArgs se ver en la parte del nombre de la base de
argv [0] y usar eso como el nombre del programa de diseo deseado. Para que esto funcione, el programa ejecutable
tiene que ser renombrado como uno de los programas de diseo Graphviz (vase la seccin 1).
# include <gvc.h>

int main (int argc, char


{
Agraph_t
* gramo;
Agnode_t
* norte,* metro;
Agedge_t
* mi;
Agsym_t * un;
GVC_t * GVC;

** argv)

/ * establecer un marco graphviz


GVC = gvContext ();

*/

/ * analizar argumentos de lnea de comandos - argv mnimamente [0] establece motor de diseo
gvParseArgs (GVC, argc, argv);
/ * Crear un dgrafo sencilla
g = agopen ( "g", Agdirected);
n = agnode (g, "n", 1);
m = agnode (g, "m", 1);
e = agedge (g, n, m, 0, 1);

*/

*/

/ * Establecer un atributo - en este caso uno que afecta a la prestacin visibles


agsafeset (n, "color", "rojo", "");
/ * Calcular un diseo utilizando motor de diseo de argumentos de lnea de comandos
gvLayoutJobs (GVC, g);
/ * Escribe la grfica segn -T y -O opciones
gvRenderJobs (GVC, g);
/ * datos de diseo libre
gvFreeLayout (GVC, g);

*/
*/

*/

*/

/ * estructuras grfico gratuitas


agclose (g);

*/

/ * cerrar el archivo de salida, libre de contexto, y devuelve el nmero de errores

*/

pgina 46
Graphviz biblioteca manual, 21 de Agosto, 2014

46

retorno (gvFreeContext (GVC));

E Algunos tipos bsicos y sus representaciones de cadena


Un tipo de punto es la estructura
struct {
int x, y;
}

Los campos pueden o bien dar una posicin absoluta o representar un vector de desplazamiento. Un tipo es el PointF
mismo, con int reemplazado con doble. Un tipo de caja es la estructura
struct {
punto LL, UR;
}

representa un rectngulo. El LL da las coordenadas de la esquina inferior izquierda, mientras que la UR es la mayscula
esquina derecha. Un tipo boxf es el mismo, con el punto sustituido con PointF.
Lo siguiente da las representaciones de cadena aceptados correspondientes a los valores de los tipos dados.
El espacio en blanco es ignorado al convertir estos valores a partir de cadenas de sus representaciones internas.
puntuales "x, y" donde (x, y) son las coordenadas enteras de una posicin en puntos (72 puntos = 1 pulgada).
PointF "x, y" donde (x, y) son las coordenadas de punto flotante de una posicin en pulgadas.

rectngulo "llx, LLY, urx, Ury" donde (llx, LLY) es la esquina inferior izquierda del rectngulo y
(Urx, Ury) es la esquina superior derecha, todo en puntos enteros.
SPLINETYPE Una lista separada por comas de los valores de spline.

spline Este tipo tiene un punto final opcional, un punto de inicio opcional, y una lista separada por espacios de N =
3n + 1 puntos para algn entero positivo n. Un punto final consiste en un punto precedido por "E"; un
punto de arranque est determinada por un punto precedido por "s". Los componentes opcionales estn separados por espacios.
La lista de terminacin de los puntos
da los puntos de control de un B-spline. Si un punto de inicio
1, p2,p..., p norte
se da, esto indica la presencia de una punta de flecha. El punto de inicio toca un nodo del diente
borde pondiente y la direccin de la punta de flecha est dada por el vector de p 1 al punto de inicio. Si
el punto de inicio est ausente, el punto
p
el nodo. La interpretacin anlogo es vlido para una
1 tocar
punto final yp norte
.

S-ar putea să vă placă și