2009-05-06 22 views
5

graphviz를 사용하여 C 헤더 파일 간의 종속성 그래프를 그리려하고 있습니다.GraphViz 가장자리 레이블

기본적으로 내가하고있는 일은 나타나는 모든 #include와 조건 (#if 조건)을 기록하는 것입니다. 파일에 다른 파일이 포함되어 있으면 그래프의 아버지가되며 잠재적 인 조건은 가장자리 레이블입니다.

상당히 큰 그래프를 얻을 수 있습니다. 문제는 항상 수평이며 (당신은 변경할 수 없다) 항상 왼쪽 정렬 인 것처럼 보이는 가장자리 레이블 (나는 labelloc 및 labeljust를 시도했지만 아무 것도 변경하지 않는다.)에서 중심을 잡는 올바른 방법은 무엇입니까? 한 가장자리의 레이블

이 문제를 피하기 위해 조건을 노드로 렌더링하려고 시도했습니다. Ah가 ANSI 조건에서 Bh를 포함하면 Ah에서 ANSI로 연결되고 ANSI에서 Bh로 연결되는 링크가 있습니다. 좋아, 문제는 Ch가 같은 조건에서 Dh를 포함하면 Ah에서 ANSI로, Ch에서 ANSI로, ANSI에서 Bh로, ANSI에서 Dh로 연결되는 링크를 볼 수있다. 문제는 내가 Ah 또는 Ch가 Bh를 포함하는지 알지 못합니다. 노드를 통과하는 것과 같은 것을 지정하는 방법이 있습니까 (AN에서 Bh로 연결되는 링크는 ANSI에서 투명성을 활용할 수 있습니다.)

+0

하는 당신은 기본 rankdir (= TB?) 긴 방법이다를 사용하고 아래 그림과 같이 나 일반 텍스트 노드에서가는 가장자리의 번호를 가지고 -

당신은 조인 포인트를 제공하기 위해 또한 사용할 수 있습니다 가장자리 라벨? –

+0

예 기본 rankdir을 사용하고 있습니다 ... 여러 구성 옵션을 결합했을 때 라벨이 꽤 오래있을 수 있습니다. 그것도 하나의 문제입니다. (하지만 저는 \ l 또는 \ n을 사용하여 새 줄을 추가 할 수 있습니다) – LB40

답변

4

labelloc 및 labeljust는 가장자리의 경우 의미가 없습니다. here을 참조하십시오. 그래프, 클러스터 또는 노드로 각각 "GC"라고 표시됩니다.

그러나 레이블이있는 각 조건에 대해 고유 노드 을 생성 할 수는 있습니다. 그러면 다른 "도트 ID"가 있지만 동일한 레이블 (조건 텍스트)을 가진 여러 노드가 있으므로 A.h 또는 C.h 인 경우 B.h 인 것이 분명합니다. 나는 당신이 결과가 만족 스러울 것이라고 생각합니다.

행운을 빈다.

+0

답변을 주셔서 감사합니다 ... 좋은 생각 인 것 같습니다 ... 나는 이것을 시도 할 것입니다. – LB40

2

내가 설명하고있는 것에 따라 동일한 레이블의 고유 노드를 사용하여 많은 성공을 거두었습니다. 당신이 필요로하는 edge label의 환상을 얻는 흥미로운 방법은 shape = plaintext를 가진 노드를 사용하는 것입니다.

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

문제는 제가 가지고있는 것입니다. 관계 관계 선박. 내가 CONFIG_X를 가지고 있고 bc가 같은 CONFIG_X와 함께 bh를 포함하고 있다면 ac는 ah를 포함하고 ... 나는 AC에서 CONFIG_X, 하나는 bc에서 CONFIG_X 그리고 CONFIG_X에서 두 개의 링크는 아와 bh로 연결된다. 그래프 이것은 AC 또는 BH가 아와 BH를 포함하는지 어떻게 알 수 있습니까? – LB40

+0

이 경우 나는 CONFIG_X를 a.c에서 a.h의 가장자리에있는 포함 라벨로 사용하거나 plaintext 방식을 사용하는 경우 두 개의 일반 텍스트 노드 CONFIG_X_A와 CONFIG_X_B를 label = "CONFIG_X"로 사용합니다. –