2009-05-06 27 views
5

Estoy tratando de dibujar un gráfico de las dependencias entre los archivos de cabecera C usando graphviz.GraphViz edge labels

Básicamente, lo que estoy haciendo es registrar todo el #include que aparece y la condición (#si me refiero a las condiciones). Si un archivo incluye a otro, se convierte en su padre en el gráfico y la condición potencial es la etiqueta de borde.

Obtengo un gráfico bastante grande. El problema radica en las etiquetas de borde que siempre son horizontales (no se puede cambiar) y siempre parecen alineadas a la izquierda (he intentado etiquetar etiquetas y etiquetar pero no cambia nada. ¿Cuál es la forma correcta de "centrar" la etiqueta de un borde

Para evitar este problema, he intentado renderizar condiciones como nodos. Si Ah incluye Bh bajo condición ANSI, hay un enlace de Ah a ANSI y luego de ANSI a Bh .. Eso se ve está bien, pero el problema es que si Ch incluye Dh bajo la misma condición, vería un enlace de Ah a ANSI, uno de Ch a ANSI, uno de ANSI a Bh y uno de ANSI a Dh. El problema es que no No sé si es Ah o Ch que incluye Bh. ¿Hay alguna manera de especificar algo como atravesar nodos (un enlace de Ah a Bh que está bajo ANSI tal vez aprovechando la transparencia)

+0

¿Está utilizando rankdir por defecto (= TB?) ¿Cuánto tiempo se las etiquetas de borde? –

+0

sí, estoy usando rankdir predeterminado ... Las etiquetas pueden ser bastante largas cuando tiene varias opciones de configuración combinadas. Ese también es un problema (pero podría agregar una nueva línea con \ l o \ n ..) – LB40

Respuesta

4

labelloc y labeljust no tienen sentido para los bordes. Consulte here, dice "GC" como Gráfico, Grupo o "N" como Nodo, respectivamente.

Podría, sin embargo, considerar la generación de nodos únicos para cada condición con etiquetas. Entonces habría múltiples nodos con diferentes "ID de punto", pero una misma etiqueta (texto de condición), por lo que sería claro si fuera A.h o C.h que incluyó B.h. Creo que estarás satisfecho con los resultados, ya que ya dijiste que se ve bien.

¡Buena suerte!

+0

gracias por la respuesta ... que parece ser una buena idea ... intentaré esto – LB40

2

He tenido mucho éxito al usar nodos únicos con la misma etiqueta, dependiendo de lo que estoy ilustrando. Una forma interesante de obtener la ilusión de una etiqueta de borde centrada como lo requiere es usar un nodo con forma = texto sin formato.

puede utilizar este último también para proporcionar un punto de unirse a - tener un número de aristas que van hacia o desde el nodo de texto plano como se muestra a continuación:

digraph joins { 

node [shape=box weight=bold fontsize=18 color=black fontcolor=black] 
edge [color=black fontcolor=black ] 
graph[size="6,4",ratio=fill,center=1] 

tblXXMaster[shape=record label="tblXXMaster | <f0>intMasterXXNumber | <f1>boolXXsPrinting"] 
set[shape=plaintext label="sets flag"] 
setandclear[shape=plaintext label="sets next value\nand clears flag"] 
setandclear->tblXXMaster:f0 
setandclear->tblXXMaster:f1 

set->tblXXMaster:f1 
use[shape=plaintext label="uses current\nnumber"] 
tblXXMaster:f0->use 
XX[shape=plaintext label="XXs\nflag"] 
tblXXMaster:f1->XX 

"wndManualReceipt\n.procOne"->setandclear 
"wndManualDebit\n.procOne"->setandclear 
"wndApproveXXs\n.procOne\n.d005TempSetBitToZero"->setandclear 
"wndPrintXXs\n.procZero\n.procOne"->setandclear 
"wndUnapproveXXs\n.procZero\n.procOne"->setandclear 
"wndWriteXXForMultipleInvoices\n.procOne\n.d005TempSetBitToZero"->setandclear 
"wndWriteManualXX\n.procOne\n.procZero"->setandclear 

"wndConfirmXXPrint\n.applyLock"->set 
"wndConfirmMultiInvoiceXXPrint\n.applyLock"->set 

use->"wndConfirmXXPrint\n.nextNumber" 
use->"wndConfirmManualXXPrint\n.nextNumber" 
use->"wndConfirmMultiInvoiceXXPrint\n.nextNumber" 
XX->"wndConfirmManualXXPrint\n.doPrint" 
XX->"wndConfirmMultiInvoiceXXPrint\n.doPrint" 
} 
+0

el problema es que tengo una relación relación barco. Si ac incluye ah si tengo CONFIG_X y bc incluye bh con el mismo CONFIG_X ... Tendría un enlace de CA a CONFIG_X, uno de bc a CONFIG_X y dos enlaces de CONFIG_X a ah y bh ... mirando el gráfico ¿cómo sé si esto es ac o bc que incluye ah y bh? – LB40

+0

En este caso, simplemente usaría CONFIG_X como etiqueta de inclusión en el borde de a.c a a.h O, si está utilizando el enfoque de texto sin formato, tenga dos nodos de texto sin formato CONFIG_X_A y CONFIG_X_B ambos con label = "CONFIG_X". –