Pregunta

Estoy tratando de dibujar un gráfico de las dependencias entre los archivos de encabezado C usando graphviz.

Básicamente, lo que estoy haciendo es registrar todos los #include que aparecen y la condición (#si quiero decir condiciones). Si un archivo incluye 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 proviene de las etiquetas de borde que siempre son horizontales (no se puede cambiar eso) y siempre parecen estar alineadas a la izquierda (he intentado labelloc y labeljust pero no cambia nada. ¿Cuál es la forma correcta de "centrar"? ; la etiqueta de un borde.

Para evitar este problema, he intentado representar las 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 parece correcto, pero el problema es que si Ch incluye Dh bajo la misma condición, vería un enlace de Ah a ANSI , uno de a Ch a ANSI; uno de ANSI a B.h y uno de ANSI a D.h. El problema es que no sé si es A.h o C.h que incluye B.h. ¿Hay alguna manera de especificar algo como ir a través de nodos (un enlace de A.h a B.h que va bajo ANSI puede aprovechar la transparencia)

¿Fue útil?

Solución

labelloc y labeljust no tienen sentido para los bordes. Consulte aquí , dice " GC " como Graph, Cluster o " N " como Nodo, respectivamente.

Sin embargo, podría considerar generar 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 la condición), por lo que sería claro si fue Ah o Ch lo que incluyó Bh . Creo que estará satisfecho con los resultados, ya que ya declaró que se ve bien.

¡Buena suerte!

Otros consejos

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

Puede usar eso también para proporcionar un punto de unión: tenga una serie de bordes yendo hacia o desde el nodo de texto sin formato 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"
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top